@cursor/bdk 0.2.8 → 0.2.10

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 (581) hide show
  1. package/dist/artifacts.js +3 -5
  2. package/dist/bin/agent-serve.d.ts +1 -0
  3. package/dist/bin/agent-serve.d.ts.map +1 -1
  4. package/dist/bin/agent-serve.js +820 -807
  5. package/dist/channels/bitbucket/api.js +305 -321
  6. package/dist/channels/bitbucket/binding.js +97 -61
  7. package/dist/channels/bitbucket/bitbucket-channel.d.ts +15 -1
  8. package/dist/channels/bitbucket/bitbucket-channel.d.ts.map +1 -1
  9. package/dist/channels/bitbucket/bitbucket-channel.js +95 -42
  10. package/dist/channels/bitbucket/bitbucket-webhook.d.ts +11 -0
  11. package/dist/channels/bitbucket/bitbucket-webhook.d.ts.map +1 -1
  12. package/dist/channels/bitbucket/bitbucket-webhook.js +214 -204
  13. package/dist/channels/bitbucket/checks.js +9 -21
  14. package/dist/channels/bitbucket/cursor-account.js +1 -1
  15. package/dist/channels/bitbucket/defaults.js +14 -4
  16. package/dist/channels/bitbucket/events.js +1 -2
  17. package/dist/channels/bitbucket/index.d.ts +6 -2
  18. package/dist/channels/bitbucket/index.d.ts.map +1 -1
  19. package/dist/channels/bitbucket/index.js +6 -2
  20. package/dist/channels/bitbucket/replay.js +80 -56
  21. package/dist/channels/bitbucket/state.js +16 -7
  22. package/dist/channels/bitbucket/types.d.ts +11 -2
  23. package/dist/channels/bitbucket/types.d.ts.map +1 -1
  24. package/dist/channels/checks.js +18 -28
  25. package/dist/channels/deployments/deployments-channel.js +26 -34
  26. package/dist/channels/github/api.js +216 -210
  27. package/dist/channels/github/auth.d.ts +5 -1
  28. package/dist/channels/github/auth.d.ts.map +1 -1
  29. package/dist/channels/github/auth.js +157 -174
  30. package/dist/channels/github/binding.js +48 -39
  31. package/dist/channels/github/checks.js +9 -14
  32. package/dist/channels/github/cursor-account.js +6 -11
  33. package/dist/channels/github/defaults.js +105 -130
  34. package/dist/channels/github/forward.js +13 -17
  35. package/dist/channels/github/github-channel.d.ts +43 -2
  36. package/dist/channels/github/github-channel.d.ts.map +1 -1
  37. package/dist/channels/github/github-channel.js +1228 -958
  38. package/dist/channels/github/progress.js +145 -146
  39. package/dist/channels/github/replay.js +30 -39
  40. package/dist/channels/github/state.js +40 -16
  41. package/dist/channels/github/types.d.ts +30 -6
  42. package/dist/channels/github/types.d.ts.map +1 -1
  43. package/dist/channels/gitlab/api.js +100 -114
  44. package/dist/channels/gitlab/binding.js +52 -33
  45. package/dist/channels/gitlab/checks.js +28 -29
  46. package/dist/channels/gitlab/cursor-account.js +1 -1
  47. package/dist/channels/gitlab/defaults.js +9 -3
  48. package/dist/channels/gitlab/gitlab-channel.d.ts +16 -1
  49. package/dist/channels/gitlab/gitlab-channel.d.ts.map +1 -1
  50. package/dist/channels/gitlab/gitlab-channel.js +95 -42
  51. package/dist/channels/gitlab/gitlab-webhook.d.ts +10 -1
  52. package/dist/channels/gitlab/gitlab-webhook.d.ts.map +1 -1
  53. package/dist/channels/gitlab/gitlab-webhook.js +282 -249
  54. package/dist/channels/gitlab/index.d.ts +6 -2
  55. package/dist/channels/gitlab/index.d.ts.map +1 -1
  56. package/dist/channels/gitlab/index.js +6 -2
  57. package/dist/channels/gitlab/replay.js +50 -27
  58. package/dist/channels/gitlab/state.js +14 -6
  59. package/dist/channels/gitlab/types.d.ts +13 -2
  60. package/dist/channels/gitlab/types.d.ts.map +1 -1
  61. package/dist/channels/origin/api.js +100 -116
  62. package/dist/channels/origin/binding.js +15 -16
  63. package/dist/channels/origin/checks.js +30 -28
  64. package/dist/channels/origin/defaults.js +50 -65
  65. package/dist/channels/origin/origin-channel.js +266 -272
  66. package/dist/channels/origin/origin-webhook.js +70 -88
  67. package/dist/channels/origin/reactions.js +9 -21
  68. package/dist/channels/origin/state.js +13 -5
  69. package/dist/channels/slack/agentic-delivery.js +426 -478
  70. package/dist/channels/slack/agentic-posted.js +9 -10
  71. package/dist/channels/slack/agentic-signals.js +2 -3
  72. package/dist/channels/slack/api.js +417 -427
  73. package/dist/channels/slack/approvals.js +1 -1
  74. package/dist/channels/slack/assistant.js +37 -47
  75. package/dist/channels/slack/attachments.js +188 -206
  76. package/dist/channels/slack/auth.js +8 -6
  77. package/dist/channels/slack/bot-mentions.js +31 -45
  78. package/dist/channels/slack/channel-watch.js +42 -48
  79. package/dist/channels/slack/cli-project.js +112 -137
  80. package/dist/channels/slack/code-fences.js +3 -5
  81. package/dist/channels/slack/constants.js +2 -2
  82. package/dist/channels/slack/credentials.js +23 -38
  83. package/dist/channels/slack/defaults.js +292 -331
  84. package/dist/channels/slack/dispatch.d.ts.map +1 -1
  85. package/dist/channels/slack/dispatch.js +533 -460
  86. package/dist/channels/slack/doctor.js +200 -214
  87. package/dist/channels/slack/eval-directive.js +79 -96
  88. package/dist/channels/slack/event-id-dedupe.js +1 -1
  89. package/dist/channels/slack/external-policy.js +26 -39
  90. package/dist/channels/slack/footer.js +28 -41
  91. package/dist/channels/slack/inbound.d.ts +1 -0
  92. package/dist/channels/slack/inbound.d.ts.map +1 -1
  93. package/dist/channels/slack/inbound.js +50 -31
  94. package/dist/channels/slack/init.d.ts +1 -5
  95. package/dist/channels/slack/init.d.ts.map +1 -1
  96. package/dist/channels/slack/init.js +42 -59
  97. package/dist/channels/slack/interactive.d.ts +9 -3
  98. package/dist/channels/slack/interactive.d.ts.map +1 -1
  99. package/dist/channels/slack/interactive.js +160 -162
  100. package/dist/channels/slack/links.js +1 -2
  101. package/dist/channels/slack/live-delivery.js +172 -190
  102. package/dist/channels/slack/manifest.d.ts.map +1 -1
  103. package/dist/channels/slack/manifest.js +44 -23
  104. package/dist/channels/slack/message-body.js +2 -2
  105. package/dist/channels/slack/nudge-carrier.js +30 -42
  106. package/dist/channels/slack/nudge-store.js +164 -191
  107. package/dist/channels/slack/paint-start.js +66 -81
  108. package/dist/channels/slack/placeholder.js +123 -152
  109. package/dist/channels/slack/pr-ref.js +1 -1
  110. package/dist/channels/slack/progress-delivery.js +65 -78
  111. package/dist/channels/slack/reasoning-card.js +36 -49
  112. package/dist/channels/slack/recording-sink.js +12 -24
  113. package/dist/channels/slack/reply-options.js +7 -12
  114. package/dist/channels/slack/self-identity.js +27 -35
  115. package/dist/channels/slack/sender-name.d.ts +12 -3
  116. package/dist/channels/slack/sender-name.d.ts.map +1 -1
  117. package/dist/channels/slack/sender-name.js +57 -61
  118. package/dist/channels/slack/setup.js +2 -4
  119. package/dist/channels/slack/slack-channel.d.ts +6 -4
  120. package/dist/channels/slack/slack-channel.d.ts.map +1 -1
  121. package/dist/channels/slack/slack-channel.js +441 -308
  122. package/dist/channels/slack/socket-mode.js +38 -52
  123. package/dist/channels/slack/thread-context.js +143 -160
  124. package/dist/channels/slack/tool-approval-events.js +149 -166
  125. package/dist/channels/slack/tool-cards.js +6 -11
  126. package/dist/channels/slack/tool-chip.js +1 -2
  127. package/dist/channels/slack/types.d.ts +15 -17
  128. package/dist/channels/slack/types.d.ts.map +1 -1
  129. package/dist/channels/slack/upload.js +84 -97
  130. package/dist/channels/slack/user-info.js +27 -41
  131. package/dist/channels.js +9 -20
  132. package/dist/dashboard-session-url.js +3 -4
  133. package/dist/docs/404.html +2 -2
  134. package/dist/docs/assets/{app.oyjtOr3W.js → app.DXI7bwox.js} +4 -4
  135. package/dist/docs/assets/{building-with-agents.md.BPjPFxFg.js → building-with-agents.md.Df87rAe1.js} +1 -1
  136. package/dist/docs/assets/chunks/@localSearchIndexroot.CtLtpWcx.js +1 -0
  137. package/dist/docs/assets/chunks/{VPLocalSearchBox.D0P6J_UJ.js → VPLocalSearchBox.BrbO5mEe.js} +1 -1
  138. package/dist/docs/assets/chunks/{arc.B0LY1J1h.js → arc.BOG1yms8.js} +1 -1
  139. package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.dPduLUxY.js → architectureDiagram-Q4EWVU46.C0hsMZnZ.js} +1 -1
  140. package/dist/docs/assets/chunks/{baseUniq.B_Ohm21h.js → baseUniq.H044KjKs.js} +1 -1
  141. package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.B4zcanaJ.js → blockDiagram-DXYQGD6D.BsRW6GoB.js} +1 -1
  142. package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.D9Iw21nx.js → c4Diagram-AHTNJAMY.B9HV5PFR.js} +1 -1
  143. package/dist/docs/assets/chunks/channel.CBwrU9rP.js +1 -0
  144. package/dist/docs/assets/chunks/{chunk-4BX2VUAB.DDVwRShI.js → chunk-4BX2VUAB.CPoT_ajl.js} +1 -1
  145. package/dist/docs/assets/chunks/{chunk-4TB4RGXK.DsYcdn1i.js → chunk-4TB4RGXK.DZBwWuCL.js} +1 -1
  146. package/dist/docs/assets/chunks/{chunk-55IACEB6.BzzQvcYp.js → chunk-55IACEB6.CZ3yTiyq.js} +1 -1
  147. package/dist/docs/assets/chunks/{chunk-EDXVE4YY.BMiXZ7FX.js → chunk-EDXVE4YY.6DfvHSd8.js} +1 -1
  148. package/dist/docs/assets/chunks/{chunk-FMBD7UC4.D_mBcLoc.js → chunk-FMBD7UC4.CpBj8HfK.js} +1 -1
  149. package/dist/docs/assets/chunks/{chunk-OYMX7WX6.CMVjWVMx.js → chunk-OYMX7WX6.BdKo8YqS.js} +1 -1
  150. package/dist/docs/assets/chunks/{chunk-QZHKN3VN.BG-FrPv9.js → chunk-QZHKN3VN.BnXNyxJx.js} +1 -1
  151. package/dist/docs/assets/chunks/{chunk-YZCP3GAM.CkFE1ap3.js → chunk-YZCP3GAM.Cg1OcF8G.js} +1 -1
  152. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.CbC_mrvB.js +1 -0
  153. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.CbC_mrvB.js +1 -0
  154. package/dist/docs/assets/chunks/clone.BTvFyY1a.js +1 -0
  155. package/dist/docs/assets/chunks/{cose-bilkent-S5V4N54A.BVNnCTvY.js → cose-bilkent-S5V4N54A.1SP8al9c.js} +1 -1
  156. package/dist/docs/assets/chunks/{dagre-KV5264BT.CDN5PR9l.js → dagre-KV5264BT.DS1L6hJt.js} +1 -1
  157. package/dist/docs/assets/chunks/{diagram-5BDNPKRD.DQRUlT-i.js → diagram-5BDNPKRD.ChsausbG.js} +1 -1
  158. package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.CoeblYQT.js → diagram-G4DWMVQ6.3XsptNWj.js} +1 -1
  159. package/dist/docs/assets/chunks/{diagram-MMDJMWI5.DW3ymjl0.js → diagram-MMDJMWI5.DPA9Dk_P.js} +1 -1
  160. package/dist/docs/assets/chunks/{diagram-TYMM5635.BP0uN4Jw.js → diagram-TYMM5635.BVswXWrB.js} +1 -1
  161. package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.DVFUWEn4.js → erDiagram-SMLLAGMA.BSak5OSP.js} +1 -1
  162. package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.HU-eHspv.js → flowDiagram-DWJPFMVM.CQgN4TTz.js} +1 -1
  163. package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.DHNhXijY.js → ganttDiagram-T4ZO3ILL.GrT0kA4a.js} +1 -1
  164. package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.DkISXcO3.js → gitGraphDiagram-UUTBAWPF.CdS7Ucll.js} +1 -1
  165. package/dist/docs/assets/chunks/{graph.CCV0fuRR.js → graph.BVqKRmRo.js} +1 -1
  166. package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.bgILzOoc.js → infoDiagram-42DDH7IO.C3C9FRto.js} +1 -1
  167. package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.CuryXC0F.js → ishikawaDiagram-UXIWVN3A.2FuAh_Zj.js} +1 -1
  168. package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.BL1Pr-wu.js → journeyDiagram-VCZTEJTY.CaHMfK4b.js} +1 -1
  169. package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.BbGjvk4l.js → kanban-definition-6JOO6SKY.CjhIUwcA.js} +1 -1
  170. package/dist/docs/assets/chunks/{layout.C4PfdldS.js → layout.CGU3gfSf.js} +1 -1
  171. package/dist/docs/assets/chunks/{linear.C3xD1T6X.js → linear.DaihpW_n.js} +1 -1
  172. package/dist/docs/assets/chunks/{min.CzgRAQ9c.js → min.BS-j8kHQ.js} +1 -1
  173. package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.CA9rSWum.js → mindmap-definition-QFDTVHPH.BVJ1Bbnk.js} +1 -1
  174. package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.B8MprgJu.js → pieDiagram-DEJITSTG.Cz1WIv9r.js} +1 -1
  175. package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.DndDwbKT.js → quadrantDiagram-34T5L4WZ.DKLFxcjy.js} +1 -1
  176. package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.Zhfgwlnn.js → requirementDiagram-MS252O5E.BHegiK7x.js} +1 -1
  177. package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.B6RRm6N5.js → sankeyDiagram-XADWPNL6.DYkY6yPc.js} +1 -1
  178. package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.Bfmz-1PN.js → sequenceDiagram-FGHM5R23.DYQ1QUrI.js} +1 -1
  179. package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.gbrdNqgj.js → stateDiagram-FHFEXIEX.Iru8BsFo.js} +1 -1
  180. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.BYXl4LW6.js +1 -0
  181. package/dist/docs/assets/chunks/{theme.gpWjytMh.js → theme.DaplWQhQ.js} +2 -2
  182. package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.Bl1l7M1f.js → timeline-definition-GMOUNBTQ.BwFA8hiX.js} +1 -1
  183. package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.Dfle4U0d.js → vennDiagram-DHZGUBPP.CZ60W1C_.js} +1 -1
  184. package/dist/docs/assets/chunks/wardley-RL74JXVD.iXazD3Z7.js +162 -0
  185. package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.CM_4lmvZ.js → wardleyDiagram-NUSXRM2D.B69D2r8-.js} +1 -1
  186. package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.CHT5X28R.js → xychartDiagram-5P7HB3ND.CLPZEIU9.js} +1 -1
  187. package/dist/docs/assets/{deployment.md.BdqTiGdc.js → deployment.md.BYuEcDBv.js} +2 -2
  188. package/dist/docs/assets/{guides_bitbucket.md.BB6fqD-M.js → guides_bitbucket.md.CKUayYtD.js} +3 -3
  189. package/dist/docs/assets/{guides_bitbucket.md.BB6fqD-M.lean.js → guides_bitbucket.md.CKUayYtD.lean.js} +1 -1
  190. package/dist/docs/assets/{guides_github.md.Cr1Xlf-m.js → guides_github.md.TuNiZAOQ.js} +4 -4
  191. package/dist/docs/assets/{guides_github.md.Cr1Xlf-m.lean.js → guides_github.md.TuNiZAOQ.lean.js} +1 -1
  192. package/dist/docs/assets/{guides_gitlab.md.CMpmFi4M.js → guides_gitlab.md.CtNI4fSH.js} +4 -4
  193. package/dist/docs/assets/{guides_gitlab.md.CMpmFi4M.lean.js → guides_gitlab.md.CtNI4fSH.lean.js} +1 -1
  194. package/dist/docs/assets/guides_migrate.md.sCAvvlC6.js +7 -0
  195. package/dist/docs/assets/guides_migrate.md.sCAvvlC6.lean.js +1 -0
  196. package/dist/docs/assets/{reference_cli.md.GwugN3n-.js → reference_cli.md.dYCAL2lB.js} +4 -3
  197. package/dist/docs/assets/reference_cli.md.dYCAL2lB.lean.js +1 -0
  198. package/dist/docs/assets/{reference_skills.md.ClkMoQsV.js → reference_skills.md.C0guGcH0.js} +3 -3
  199. package/dist/docs/assets/troubleshooting.md.x-GBa7wN.js +1 -0
  200. package/dist/docs/assets/{troubleshooting.md.Bscj6ODe.lean.js → troubleshooting.md.x-GBa7wN.lean.js} +1 -1
  201. package/dist/docs/building-with-agents.html +37 -37
  202. package/dist/docs/building-with-agents.md +2 -0
  203. package/dist/docs/deployment.html +38 -38
  204. package/dist/docs/deployment.md +7 -0
  205. package/dist/docs/evals.html +36 -36
  206. package/dist/docs/guides/agent-to-agent.html +35 -35
  207. package/dist/docs/guides/bitbucket.html +38 -38
  208. package/dist/docs/guides/bitbucket.md +9 -1
  209. package/dist/docs/guides/cloud-agents.html +35 -35
  210. package/dist/docs/guides/convert-automation.html +35 -35
  211. package/dist/docs/guides/github.html +39 -39
  212. package/dist/docs/guides/github.md +20 -4
  213. package/dist/docs/guides/gitlab.html +38 -38
  214. package/dist/docs/guides/gitlab.md +9 -1
  215. package/dist/docs/guides/grokbot-agents.html +35 -35
  216. package/dist/docs/guides/hooks.html +35 -35
  217. package/dist/docs/guides/improve.html +35 -35
  218. package/dist/docs/guides/jev.html +35 -35
  219. package/dist/docs/guides/mcp-oauth.html +35 -35
  220. package/dist/docs/guides/migrate.html +66 -0
  221. package/dist/docs/guides/migrate.md +122 -0
  222. package/dist/docs/guides/opentelemetry.html +35 -35
  223. package/dist/docs/guides/slack.html +35 -35
  224. package/dist/docs/guides/webhooks.html +35 -35
  225. package/dist/docs/hashmap.json +1 -1
  226. package/dist/docs/hillclimbing.html +35 -35
  227. package/dist/docs/index.html +35 -35
  228. package/dist/docs/llms-full.txt +214 -6
  229. package/dist/docs/llms.txt +1 -0
  230. package/dist/docs/quickstart.html +35 -35
  231. package/dist/docs/reference/agent-config.html +35 -35
  232. package/dist/docs/reference/artifacts.html +35 -35
  233. package/dist/docs/reference/channels.html +35 -35
  234. package/dist/docs/reference/cli.html +39 -38
  235. package/dist/docs/reference/cli.md +39 -0
  236. package/dist/docs/reference/connections.html +35 -35
  237. package/dist/docs/reference/evals.html +35 -35
  238. package/dist/docs/reference/extensions.html +35 -35
  239. package/dist/docs/reference/hooks.html +35 -35
  240. package/dist/docs/reference/http-api.html +35 -35
  241. package/dist/docs/reference/instructions.html +35 -35
  242. package/dist/docs/reference/playground.html +35 -35
  243. package/dist/docs/reference/project-layout.html +35 -35
  244. package/dist/docs/reference/prompt.html +35 -35
  245. package/dist/docs/reference/schedules.html +35 -35
  246. package/dist/docs/reference/sessions.html +35 -35
  247. package/dist/docs/reference/skills.html +38 -38
  248. package/dist/docs/reference/subagents.html +35 -35
  249. package/dist/docs/reference/tools.html +35 -35
  250. package/dist/docs/templates/agentic-owners.html +35 -35
  251. package/dist/docs/templates/grokbot-agents.html +35 -35
  252. package/dist/docs/templates/security-reviewer.html +35 -35
  253. package/dist/docs/templates/thermo-quality-review.html +35 -35
  254. package/dist/docs/templates/thermo-review.html +35 -35
  255. package/dist/docs/templates/triage.html +35 -35
  256. package/dist/docs/troubleshooting.html +36 -36
  257. package/dist/docs/troubleshooting.md +1 -0
  258. package/dist/evals/assertions.js +20 -34
  259. package/dist/evals/expect.js +3 -6
  260. package/dist/evals/judge.js +5 -8
  261. package/dist/evals/loaders.js +45 -62
  262. package/dist/evals/matchers.js +2 -3
  263. package/dist/evals/reporters.js +43 -67
  264. package/dist/evals/results.js +1 -1
  265. package/dist/evals/run-facts.js +5 -6
  266. package/dist/evals.js +27 -15
  267. package/dist/extensions/cursor-cloud-agents/extension.js +4 -1
  268. package/dist/extensions/cursor-cloud-agents/lib/backend.d.ts +0 -1
  269. package/dist/extensions/cursor-cloud-agents/lib/backend.d.ts.map +1 -1
  270. package/dist/extensions/cursor-cloud-agents/lib/backend.js +101 -130
  271. package/dist/extensions/cursor-cloud-agents/lib/fleet.js +22 -38
  272. package/dist/extensions/cursor-cloud-agents/lib/repos.js +8 -10
  273. package/dist/extensions/cursor-cloud-agents/lib/transcript.js +2 -3
  274. package/dist/extensions/cursor-cloud-agents/lib/watch.js +52 -66
  275. package/dist/extensions/cursor-cloud-agents/reminders/cloud-agent-stop-watch.js +29 -40
  276. package/dist/extensions/cursor-cloud-agents/tools/cancel.js +6 -17
  277. package/dist/extensions/cursor-cloud-agents/tools/dump.js +25 -36
  278. package/dist/extensions/cursor-cloud-agents/tools/get.js +3 -14
  279. package/dist/extensions/cursor-cloud-agents/tools/launch.js +13 -21
  280. package/dist/extensions/cursor-cloud-agents/tools/list.d.ts.map +1 -1
  281. package/dist/extensions/cursor-cloud-agents/tools/list.js +9 -20
  282. package/dist/extensions/cursor-cloud-agents/tools/reply.js +5 -16
  283. package/dist/extensions/cursor-grokbot-agents/extension.js +4 -1
  284. package/dist/extensions/cursor-grokbot-agents/lib/agents.js +3 -3
  285. package/dist/extensions/cursor-grokbot-agents/lib/backend.js +53 -73
  286. package/dist/extensions/cursor-grokbot-agents/lib/contacts.js +10 -23
  287. package/dist/extensions/cursor-grokbot-agents/lib/conversation.js +112 -132
  288. package/dist/extensions/cursor-grokbot-agents/lib/lock.js +1 -2
  289. package/dist/extensions/cursor-grokbot-agents/tools/ask.js +5 -16
  290. package/dist/extensions/cursor-grokbot-agents/tools/check.js +4 -15
  291. package/dist/extensions/cursor-grokbot-agents/tools/interrupt.js +2 -13
  292. package/dist/extensions/cursor-grokbot-agents/tools/list.js +11 -23
  293. package/dist/extensions/jev/extension.js +3 -3
  294. package/dist/extensions/jev/lib/evaluate.js +43 -60
  295. package/dist/extensions/jev/tools/evaluate.js +6 -17
  296. package/dist/extensions/slack-communication/tools/post-file.js +1 -1
  297. package/dist/extensions.js +3 -5
  298. package/dist/files-backends/cursor-hosted.js +504 -523
  299. package/dist/files-backends/local-fs.js +72 -134
  300. package/dist/files.js +3 -3
  301. package/dist/filesystem.js +562 -861
  302. package/dist/index.js +16 -35
  303. package/dist/internal/advertise-tools.js +74 -86
  304. package/dist/internal/artifacts-store.js +298 -361
  305. package/dist/internal/as-of.js +2 -4
  306. package/dist/internal/authored-alias-hooks.js +6 -4
  307. package/dist/internal/authored-loaders.js +37 -52
  308. package/dist/internal/bounded-int.js +1 -2
  309. package/dist/internal/bounded.js +13 -24
  310. package/dist/internal/brand.js +1 -1
  311. package/dist/internal/browser-origin-guard.js +4 -4
  312. package/dist/internal/builtin-tools/artifacts.js +15 -27
  313. package/dist/internal/builtin-tools/index.js +2 -3
  314. package/dist/internal/builtin-tools/reminders.js +33 -52
  315. package/dist/internal/channel-architecture.d.ts +21 -0
  316. package/dist/internal/channel-architecture.d.ts.map +1 -0
  317. package/dist/internal/channel-architecture.js +41 -0
  318. package/dist/internal/channel-dispatch.js +3 -4
  319. package/dist/internal/channel-route-dispatch.js +40 -51
  320. package/dist/internal/channel-state.js +1 -1
  321. package/dist/internal/chat-client.js +319 -340
  322. package/dist/internal/cli-ax.js +1262 -1294
  323. package/dist/internal/cli-bitbucket.js +244 -272
  324. package/dist/internal/cli-convert-automation.js +137 -151
  325. package/dist/internal/cli-cursor.js +126 -147
  326. package/dist/internal/cli-deploy.d.ts.map +1 -1
  327. package/dist/internal/cli-deploy.js +1457 -1507
  328. package/dist/internal/cli-docs.js +130 -147
  329. package/dist/internal/cli-github.js +437 -476
  330. package/dist/internal/cli-gitlab.js +259 -288
  331. package/dist/internal/cli-images.js +266 -334
  332. package/dist/internal/cli-manifest.js +25 -37
  333. package/dist/internal/cli-mcp-oauth.js +228 -247
  334. package/dist/internal/cli-mcp.js +358 -383
  335. package/dist/internal/cli-migrate.d.ts +18 -0
  336. package/dist/internal/cli-migrate.d.ts.map +1 -0
  337. package/dist/internal/cli-migrate.js +136 -0
  338. package/dist/internal/cli-skills.js +35 -47
  339. package/dist/internal/cli-slack-manual.d.ts +0 -1
  340. package/dist/internal/cli-slack-manual.d.ts.map +1 -1
  341. package/dist/internal/cli-slack-manual.js +175 -204
  342. package/dist/internal/cli-slack.d.ts +1 -1
  343. package/dist/internal/cli-slack.d.ts.map +1 -1
  344. package/dist/internal/cli-slack.js +416 -456
  345. package/dist/internal/cloud-merge.js +7 -3
  346. package/dist/internal/cloud-turn-cost.js +8 -1
  347. package/dist/internal/connection-env.js +5 -6
  348. package/dist/internal/continuation-channel.js +10 -7
  349. package/dist/internal/continuation-identity.js +85 -67
  350. package/dist/internal/conversation-mirror.js +112 -131
  351. package/dist/internal/convert-automation/convert-workflow.js +21 -31
  352. package/dist/internal/cron.js +3 -3
  353. package/dist/internal/cursor/account-mcp.js +147 -146
  354. package/dist/internal/cursor/backend-client.js +290 -320
  355. package/dist/internal/cursor/bound-secret-file.js +3 -3
  356. package/dist/internal/cursor/credentials.d.ts +1 -0
  357. package/dist/internal/cursor/credentials.d.ts.map +1 -1
  358. package/dist/internal/cursor/credentials.js +130 -142
  359. package/dist/internal/cursor/cursor-api-transport.js +4 -8
  360. package/dist/internal/cursor/github-credentials.js +91 -108
  361. package/dist/internal/cursor/hosted-bound-secrets.js +3 -4
  362. package/dist/internal/cursor/hosted-deployment-secrets.js +1 -1
  363. package/dist/internal/cursor/hosted-store-secrets.js +5 -9
  364. package/dist/internal/cursor/session-token.js +36 -48
  365. package/dist/internal/cursor/store-api-client.js +77 -92
  366. package/dist/internal/cursor-account-mcp-auth.js +132 -149
  367. package/dist/internal/cursor-agent-template.js +1 -1
  368. package/dist/internal/cursor-deployment-relay.js +33 -54
  369. package/dist/internal/cursor-event-relay.js +65 -59
  370. package/dist/internal/cursor-relay-core.js +258 -286
  371. package/dist/internal/deferred-channel-session.js +3 -12
  372. package/dist/internal/deploy-client.js +410 -475
  373. package/dist/internal/deploy-manifest.d.ts +17 -0
  374. package/dist/internal/deploy-manifest.d.ts.map +1 -1
  375. package/dist/internal/deploy-manifest.js +71 -21
  376. package/dist/internal/deploy-source.js +31 -43
  377. package/dist/internal/discovery/agent-config.js +45 -59
  378. package/dist/internal/discovery/agent.js +276 -280
  379. package/dist/internal/discovery/channels.js +67 -80
  380. package/dist/internal/discovery/connections.js +286 -296
  381. package/dist/internal/discovery/context.js +2 -13
  382. package/dist/internal/discovery/cursor-plugin.js +223 -259
  383. package/dist/internal/discovery/extension-overlay.js +104 -131
  384. package/dist/internal/discovery/extensions.js +276 -281
  385. package/dist/internal/discovery/fs.js +56 -79
  386. package/dist/internal/discovery/hooks.js +39 -50
  387. package/dist/internal/discovery/info.js +17 -19
  388. package/dist/internal/discovery/instructions.js +58 -71
  389. package/dist/internal/discovery/modules.js +45 -58
  390. package/dist/internal/discovery/project.d.ts.map +1 -1
  391. package/dist/internal/discovery/project.js +192 -215
  392. package/dist/internal/discovery/reminders.js +41 -52
  393. package/dist/internal/discovery/runtime.js +1 -1
  394. package/dist/internal/discovery/schedules.js +71 -82
  395. package/dist/internal/discovery/seed-files.js +21 -32
  396. package/dist/internal/discovery/services.js +74 -96
  397. package/dist/internal/discovery/skills.js +77 -94
  398. package/dist/internal/discovery/subagent.js +79 -95
  399. package/dist/internal/discovery/tools.js +12 -23
  400. package/dist/internal/distribution.js +2 -2
  401. package/dist/internal/docs-site.js +30 -45
  402. package/dist/internal/duration.js +1 -1
  403. package/dist/internal/env-file.js +48 -64
  404. package/dist/internal/eval-judge-model.js +17 -28
  405. package/dist/internal/eval-run-store.js +265 -254
  406. package/dist/internal/eval-runner.d.ts +8 -0
  407. package/dist/internal/eval-runner.d.ts.map +1 -1
  408. package/dist/internal/eval-runner.js +406 -408
  409. package/dist/internal/eval-transport.d.ts +24 -0
  410. package/dist/internal/eval-transport.d.ts.map +1 -0
  411. package/dist/internal/eval-transport.js +22 -0
  412. package/dist/internal/evals-client.js +242 -246
  413. package/dist/internal/event-log.js +72 -120
  414. package/dist/internal/event-mapper.js +30 -31
  415. package/dist/internal/factory-resource-channel.js +16 -30
  416. package/dist/internal/filesystem/errors.js +6 -6
  417. package/dist/internal/filesystem/format.js +10 -13
  418. package/dist/internal/filesystem/merge.js +52 -94
  419. package/dist/internal/filesystem/nearest.js +15 -27
  420. package/dist/internal/filesystem/scratch.js +65 -85
  421. package/dist/internal/filesystem/tools.js +221 -241
  422. package/dist/internal/filesystem/walk.js +76 -143
  423. package/dist/internal/framework-file-storage.js +118 -139
  424. package/dist/internal/framework-storage-selection.js +21 -13
  425. package/dist/internal/frontmatter.js +4 -6
  426. package/dist/internal/github-fanout.js +50 -64
  427. package/dist/internal/guest-network.js +96 -109
  428. package/dist/internal/handleAgentServeTrigger.js +121 -126
  429. package/dist/internal/host-files.js +73 -88
  430. package/dist/internal/host-kv.js +21 -36
  431. package/dist/internal/host-otel.js +22 -19
  432. package/dist/internal/host-platforms.js +49 -63
  433. package/dist/internal/hosted-catch-protocol.d.ts +1 -0
  434. package/dist/internal/hosted-catch-protocol.d.ts.map +1 -1
  435. package/dist/internal/hosted-catch-protocol.js +1 -0
  436. package/dist/internal/hosted-catch.d.ts +5 -3
  437. package/dist/internal/hosted-catch.d.ts.map +1 -1
  438. package/dist/internal/hosted-catch.js +84 -93
  439. package/dist/internal/hosted-delivery-protocol.js +32 -8
  440. package/dist/internal/hosted-delivery.d.ts +13 -1
  441. package/dist/internal/hosted-delivery.d.ts.map +1 -1
  442. package/dist/internal/hosted-delivery.js +614 -584
  443. package/dist/internal/hosted-eval-cases.d.ts +21 -0
  444. package/dist/internal/hosted-eval-cases.d.ts.map +1 -0
  445. package/dist/internal/hosted-eval-cases.js +162 -0
  446. package/dist/internal/hosted-execution-diag.js +38 -30
  447. package/dist/internal/hosted-execution-flush.js +75 -66
  448. package/dist/internal/hosted-execution-latency.js +16 -8
  449. package/dist/internal/hosted-managed-automation.js +2 -2
  450. package/dist/internal/hosting.js +2 -3
  451. package/dist/internal/http-channel-define.js +4 -1
  452. package/dist/internal/http-channel.js +101 -112
  453. package/dist/internal/http-control-plane-session.d.ts +18 -1
  454. package/dist/internal/http-control-plane-session.d.ts.map +1 -1
  455. package/dist/internal/http-control-plane-session.js +66 -32
  456. package/dist/internal/incoming-headers-to-fetch.js +1 -2
  457. package/dist/internal/init-interview.js +73 -93
  458. package/dist/internal/init-project.js +182 -214
  459. package/dist/internal/init-scaffold.js +10 -21
  460. package/dist/internal/inline-stdio-mcp.js +80 -86
  461. package/dist/internal/install-cursor-skills.d.ts.map +1 -1
  462. package/dist/internal/install-cursor-skills.js +238 -274
  463. package/dist/internal/legacy-command-guard.js +18 -31
  464. package/dist/internal/listen-port.js +34 -45
  465. package/dist/internal/local-control-plane.js +293 -307
  466. package/dist/internal/local-env.js +1 -1
  467. package/dist/internal/local-ingress.js +15 -9
  468. package/dist/internal/log-ring.js +1 -2
  469. package/dist/internal/logs-client.js +207 -227
  470. package/dist/internal/map-pool.js +24 -38
  471. package/dist/internal/mcp-endpoint.js +204 -180
  472. package/dist/internal/mcp-host.js +165 -168
  473. package/dist/internal/mcp-oauth-on-demand.js +170 -207
  474. package/dist/internal/mcp-oauth-persist.js +15 -29
  475. package/dist/internal/mcp-oauth.js +209 -266
  476. package/dist/internal/named-webhook-secret.d.ts +39 -0
  477. package/dist/internal/named-webhook-secret.d.ts.map +1 -0
  478. package/dist/internal/named-webhook-secret.js +47 -0
  479. package/dist/internal/open-browser.js +2 -3
  480. package/dist/internal/otel/collector.js +104 -68
  481. package/dist/internal/otel/config.js +24 -37
  482. package/dist/internal/otel/http.js +5 -7
  483. package/dist/internal/otel/mcp.js +3 -12
  484. package/dist/internal/otel/runtime.js +69 -83
  485. package/dist/internal/package-inline-stdio.js +57 -65
  486. package/dist/internal/peer-connections.js +9 -5
  487. package/dist/internal/platform-schedule-sync.js +39 -54
  488. package/dist/internal/platform-timers.js +176 -210
  489. package/dist/internal/playground/static.js +1 -2
  490. package/dist/internal/playground/toolchain.js +37 -53
  491. package/dist/internal/playground-proxy.js +230 -270
  492. package/dist/internal/process-memory-telemetry.js +33 -51
  493. package/dist/internal/prompt-context.js +3 -6
  494. package/dist/internal/reminder-control-plane-protocol.js +46 -13
  495. package/dist/internal/reminder-runner.js +770 -785
  496. package/dist/internal/reminder-schedule.js +1 -1
  497. package/dist/internal/reminder-store.js +57 -78
  498. package/dist/internal/request-error-status.js +1 -3
  499. package/dist/internal/request-headers.js +2 -2
  500. package/dist/internal/resolve-prod-target.js +119 -135
  501. package/dist/internal/resolved-connections.js +16 -6
  502. package/dist/internal/run-client.js +221 -229
  503. package/dist/internal/runtime-dispatch-runner.js +18 -43
  504. package/dist/internal/schedule-runner.js +49 -58
  505. package/dist/internal/scm/pr-url.js +7 -6
  506. package/dist/internal/sdk-runner.js +388 -363
  507. package/dist/internal/serve-restart.js +26 -39
  508. package/dist/internal/server.d.ts.map +1 -1
  509. package/dist/internal/server.js +1283 -1244
  510. package/dist/internal/session-cost.js +7 -9
  511. package/dist/internal/session-engine.d.ts +3 -1
  512. package/dist/internal/session-engine.d.ts.map +1 -1
  513. package/dist/internal/session-engine.js +2801 -2777
  514. package/dist/internal/session-links.js +12 -16
  515. package/dist/internal/session-run-log.js +134 -82
  516. package/dist/internal/session-store.js +133 -164
  517. package/dist/internal/sessions-client.js +97 -118
  518. package/dist/internal/skill-catalog.js +18 -23
  519. package/dist/internal/skills-sync.js +16 -30
  520. package/dist/internal/slack-provision-client.js +90 -116
  521. package/dist/internal/start-log-store.js +48 -67
  522. package/dist/internal/steering.js +1 -2
  523. package/dist/internal/storage-coordinator.js +160 -196
  524. package/dist/internal/store-mirror.js +16 -30
  525. package/dist/internal/stream-progress.js +6 -8
  526. package/dist/internal/terminal-style.js +3 -4
  527. package/dist/internal/testing/scm-continuation-fixtures.js +6 -2
  528. package/dist/internal/testing/slack-continuation-fixtures.d.ts +26 -0
  529. package/dist/internal/testing/slack-continuation-fixtures.d.ts.map +1 -0
  530. package/dist/internal/testing/slack-continuation-fixtures.js +136 -0
  531. package/dist/internal/tool-catalog.js +11 -5
  532. package/dist/internal/tool-result.js +1 -1
  533. package/dist/internal/trajectory.js +19 -22
  534. package/dist/internal/turn-cost.js +52 -62
  535. package/dist/internal/turn-governor.js +5 -8
  536. package/dist/internal/turn-lease-store.js +85 -105
  537. package/dist/internal/turn-outbox.js +28 -43
  538. package/dist/internal/update-check.js +231 -259
  539. package/dist/internal/v2-hosting.js +1 -2
  540. package/dist/internal/workspace-sync.js +25 -41
  541. package/dist/internal/workspace.js +111 -139
  542. package/dist/kv/memory-kv.js +27 -51
  543. package/dist/memory.js +106 -148
  544. package/dist/otel.js +5 -8
  545. package/dist/playground/assets/index-DXm_VXAQ.css +1 -0
  546. package/dist/playground/assets/{index-MijLHTbB.js → index-JekUQERK.js} +45 -45
  547. package/dist/playground/index.html +2 -2
  548. package/dist/prompt.js +2 -4
  549. package/dist/storage-backends/cursor-hosted-v2.js +53 -83
  550. package/dist/storage-backends/cursor-hosted.js +105 -145
  551. package/dist/storage-backends/file-kv.js +100 -128
  552. package/dist/storage-protocol.js +3 -5
  553. package/dist/storage.js +17 -26
  554. package/dist/types.d.ts +68 -0
  555. package/dist/types.d.ts.map +1 -1
  556. package/dist/types.js +20 -18
  557. package/docs/building-with-agents.md +2 -0
  558. package/docs/deployment.md +7 -0
  559. package/docs/guides/bitbucket.md +9 -1
  560. package/docs/guides/github.md +20 -4
  561. package/docs/guides/gitlab.md +9 -1
  562. package/docs/guides/migrate.md +127 -0
  563. package/docs/reference/cli.md +39 -0
  564. package/docs/troubleshooting.md +1 -0
  565. package/package.json +1 -1
  566. package/skills/debug/SKILL.md +1 -0
  567. package/skills/github/SKILL.md +23 -0
  568. package/skills/migrate-v2/SKILL.md +264 -0
  569. package/dist/docs/assets/chunks/@localSearchIndexroot.C25zYVuc.js +0 -1
  570. package/dist/docs/assets/chunks/channel.CRUyWDV-.js +0 -1
  571. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.CG_UObcQ.js +0 -1
  572. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.CG_UObcQ.js +0 -1
  573. package/dist/docs/assets/chunks/clone.NYSZ9qZN.js +0 -1
  574. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.DOOmulfQ.js +0 -1
  575. package/dist/docs/assets/chunks/wardley-RL74JXVD.BJrCW6xc.js +0 -162
  576. package/dist/docs/assets/reference_cli.md.GwugN3n-.lean.js +0 -1
  577. package/dist/docs/assets/troubleshooting.md.Bscj6ODe.js +0 -1
  578. package/dist/playground/assets/index-DPKLl4C_.css +0 -1
  579. /package/dist/docs/assets/{building-with-agents.md.BPjPFxFg.lean.js → building-with-agents.md.Df87rAe1.lean.js} +0 -0
  580. /package/dist/docs/assets/{deployment.md.BdqTiGdc.lean.js → deployment.md.BYuEcDBv.lean.js} +0 -0
  581. /package/dist/docs/assets/{reference_skills.md.ClkMoQsV.lean.js → reference_skills.md.C0guGcH0.lean.js} +0 -0
@@ -1,15 +1,6 @@
1
1
  /**
2
2
  * Slack Web API helpers used by the channel pack (`@slack/web-api`).
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
4
  import { ErrorCode, WebClient } from "@slack/web-api";
14
5
  import { slackifyMarkdown } from "slackify-markdown";
15
6
  import { slackThreadKey } from "../../internal/slack-thread-key.js";
@@ -23,24 +14,20 @@ export function isSlackApiTransport(token) {
23
14
  token !== null &&
24
15
  token.kind === "api-transport");
25
16
  }
26
- export function resolveBotToken(credentials) {
27
- return __awaiter(this, void 0, void 0, function* () {
28
- const token = yield tryResolveBotToken(credentials);
29
- if (token === undefined) {
30
- throw new Error("SLACK_BOT_TOKEN is required (set credentials.botToken, envPrefix, or the env var).");
31
- }
32
- return token;
33
- });
17
+ export async function resolveBotToken(credentials) {
18
+ const token = await tryResolveBotToken(credentials);
19
+ if (token === undefined) {
20
+ throw new Error("SLACK_BOT_TOKEN is required (set credentials.botToken, envPrefix, or the env var).");
21
+ }
22
+ return token;
34
23
  }
35
24
  /** Resolve the Socket Mode app-level token (`xapp-…`). */
36
- export function resolveAppToken(credentials) {
37
- return __awaiter(this, void 0, void 0, function* () {
38
- const token = yield tryResolveAppToken(credentials);
39
- if (token === undefined) {
40
- throw new Error("SLACK_APP_TOKEN is required for Socket Mode (set credentials.appToken, envPrefix, or the env var).");
41
- }
42
- return token;
43
- });
25
+ export async function resolveAppToken(credentials) {
26
+ const token = await tryResolveAppToken(credentials);
27
+ if (token === undefined) {
28
+ throw new Error("SLACK_APP_TOKEN is required for Socket Mode (set credentials.appToken, envPrefix, or the env var).");
29
+ }
30
+ return token;
44
31
  }
45
32
  /** Channel-local continuation key. IMs are the channel; threads keep ts. */
46
33
  export function slackContinuationKey(channelId, threadTs) {
@@ -53,10 +40,8 @@ function isPlatformError(error) {
53
40
  error.code === ErrorCode.PlatformError &&
54
41
  "data" in error);
55
42
  }
56
- function createWebClient(botToken) {
57
- return __awaiter(this, void 0, void 0, function* () {
58
- return new WebClient(yield resolveBotToken({ botToken }));
59
- });
43
+ async function createWebClient(botToken) {
44
+ return new WebClient(await resolveBotToken({ botToken }));
60
45
  }
61
46
  /**
62
47
  * Call a Slack Web API method. Platform errors (`ok: false`) are returned as
@@ -64,49 +49,49 @@ function createWebClient(botToken) {
64
49
  * bot token slot holds a {@link SlackApiTransport} (e.g. the Cursor account
65
50
  * proxy), the call is executed by the transport instead of `@slack/web-api`.
66
51
  */
67
- export function callSlackApi(args) {
68
- return __awaiter(this, void 0, void 0, function* () {
69
- if (isSlackApiTransport(args.botToken)) {
70
- return args.botToken.call(args.operation, args.body);
71
- }
72
- const client = yield createWebClient(args.botToken);
73
- try {
74
- const result = yield client.apiCall(args.operation, args.body);
75
- return result;
76
- }
77
- catch (error) {
78
- if (isPlatformError(error)) {
79
- return error.data;
80
- }
81
- throw error;
52
+ export async function callSlackApi(args) {
53
+ if (isSlackApiTransport(args.botToken)) {
54
+ return args.botToken.call(args.operation, args.body);
55
+ }
56
+ const client = await createWebClient(args.botToken);
57
+ try {
58
+ const result = await client.apiCall(args.operation, args.body);
59
+ return result;
60
+ }
61
+ catch (error) {
62
+ if (isPlatformError(error)) {
63
+ return error.data;
82
64
  }
83
- });
65
+ throw error;
66
+ }
84
67
  }
85
68
  /**
86
69
  * Soft-fail wrapper: never throws for Slack API errors. Network/throw
87
70
  * errors become `{ ok: false, error }`. Unsupported feature errors set
88
71
  * `unsupported: true`.
89
72
  */
90
- export function callSlackApiSoft(args) {
91
- return __awaiter(this, void 0, void 0, function* () {
92
- try {
93
- const response = yield callSlackApi(args);
94
- if (response.ok === true) {
95
- return Object.assign({ ok: true }, response);
96
- }
97
- const error = typeof response.error === "string" ? response.error : "unknown_error";
98
- return Object.assign({ ok: false, error }, (SLACK_UNSUPPORTED_ERRORS.has(error) ? { unsupported: true } : {}));
99
- }
100
- catch (error) {
101
- return {
102
- ok: false,
103
- error: error instanceof Error ? error.message : String(error),
104
- };
105
- }
106
- });
73
+ export async function callSlackApiSoft(args) {
74
+ try {
75
+ const response = await callSlackApi(args);
76
+ if (response.ok === true) {
77
+ return { ok: true, ...response };
78
+ }
79
+ const error = typeof response.error === "string" ? response.error : "unknown_error";
80
+ return {
81
+ ok: false,
82
+ error,
83
+ ...(SLACK_UNSUPPORTED_ERRORS.has(error) ? { unsupported: true } : {}),
84
+ };
85
+ }
86
+ catch (error) {
87
+ return {
88
+ ok: false,
89
+ error: error instanceof Error ? error.message : String(error),
90
+ };
91
+ }
107
92
  }
108
93
  export function truncateTypingStatus(status, max) {
109
- const limit = max !== null && max !== void 0 ? max : SLACK_STATUS_MAX_LEN;
94
+ const limit = max ?? SLACK_STATUS_MAX_LEN;
110
95
  const trimmed = status.trim().replace(/\s+/g, " ");
111
96
  if (trimmed.length <= limit) {
112
97
  return trimmed;
@@ -136,7 +121,7 @@ export function truncateLoadingMessages(messages, nowMs = Date.now()) {
136
121
  return window;
137
122
  }
138
123
  export function truncateTitle(title, max) {
139
- const limit = max !== null && max !== void 0 ? max : SLACK_TITLE_MAX_LEN;
124
+ const limit = max ?? SLACK_TITLE_MAX_LEN;
140
125
  const trimmed = title.trim().replace(/\s+/g, " ");
141
126
  if (trimmed.length <= limit) {
142
127
  return trimmed;
@@ -160,166 +145,154 @@ export function truncateTitle(title, max) {
160
145
  * the session to `processing` on Slack's side, so status text only shows on
161
146
  * non-streaming turns. The empty assistant call stays for older workspaces.
162
147
  */
163
- export function setThreadStatus(args) {
164
- return __awaiter(this, void 0, void 0, function* () {
165
- if (args.channelId === "" || args.threadTs === "") {
166
- return { ok: false, error: "missing_channel_or_thread" };
167
- }
168
- const status = truncateTypingStatus(args.status);
169
- const body = {
170
- channel_id: args.channelId,
171
- thread_ts: args.threadTs,
172
- status,
173
- };
174
- if (status.length > 0) {
175
- const loadingRaw = args.loadingMessages !== undefined && args.loadingMessages.length > 0
176
- ? args.loadingMessages
177
- : [status, ...SLACK_DEFAULT_LOADING_MESSAGES.filter(m => m !== status)];
178
- const loading_messages = truncateLoadingMessages(loadingRaw);
179
- if (loading_messages.length > 0) {
180
- body.loading_messages = loading_messages;
181
- }
182
- return callSlackApiSoft({
183
- botToken: args.botToken,
184
- operation: "assistant.threads.setStatus",
185
- body,
186
- });
148
+ export async function setThreadStatus(args) {
149
+ if (args.channelId === "" || args.threadTs === "") {
150
+ return { ok: false, error: "missing_channel_or_thread" };
151
+ }
152
+ const status = truncateTypingStatus(args.status);
153
+ const body = {
154
+ channel_id: args.channelId,
155
+ thread_ts: args.threadTs,
156
+ status,
157
+ };
158
+ if (status.length > 0) {
159
+ const loadingRaw = args.loadingMessages !== undefined && args.loadingMessages.length > 0
160
+ ? args.loadingMessages
161
+ : [status, ...SLACK_DEFAULT_LOADING_MESSAGES.filter(m => m !== status)];
162
+ const loading_messages = truncateLoadingMessages(loadingRaw);
163
+ if (loading_messages.length > 0) {
164
+ body.loading_messages = loading_messages;
187
165
  }
188
- const sessionResult = yield callSlackApiSoft({
189
- botToken: args.botToken,
190
- operation: "agents.sessions.setStatus",
191
- body: {
192
- channel_id: args.channelId,
193
- thread_ts: args.threadTs,
194
- status: "active",
195
- },
196
- });
197
- const assistantResult = yield callSlackApiSoft({
166
+ return callSlackApiSoft({
198
167
  botToken: args.botToken,
199
168
  operation: "assistant.threads.setStatus",
200
169
  body,
201
170
  });
202
- if (sessionResult.ok) {
203
- return sessionResult;
204
- }
205
- if (sessionResult.unsupported === true || assistantResult.ok) {
206
- return assistantResult;
207
- }
208
- return sessionResult;
171
+ }
172
+ const sessionResult = await callSlackApiSoft({
173
+ botToken: args.botToken,
174
+ operation: "agents.sessions.setStatus",
175
+ body: {
176
+ channel_id: args.channelId,
177
+ thread_ts: args.threadTs,
178
+ status: "active",
179
+ },
209
180
  });
210
- }
211
- export function setThreadTitle(args) {
212
- return __awaiter(this, void 0, void 0, function* () {
213
- return callSlackApiSoft({
214
- botToken: args.botToken,
215
- operation: "assistant.threads.setTitle",
216
- body: {
217
- channel_id: args.channelId,
218
- thread_ts: args.threadTs,
219
- title: truncateTitle(args.title),
220
- },
221
- });
181
+ const assistantResult = await callSlackApiSoft({
182
+ botToken: args.botToken,
183
+ operation: "assistant.threads.setStatus",
184
+ body,
222
185
  });
186
+ if (sessionResult.ok) {
187
+ return sessionResult;
188
+ }
189
+ if (sessionResult.unsupported === true || assistantResult.ok) {
190
+ return assistantResult;
191
+ }
192
+ return sessionResult;
223
193
  }
224
- export function setSuggestedPrompts(args) {
225
- return __awaiter(this, void 0, void 0, function* () {
226
- const body = {
194
+ export async function setThreadTitle(args) {
195
+ return callSlackApiSoft({
196
+ botToken: args.botToken,
197
+ operation: "assistant.threads.setTitle",
198
+ body: {
227
199
  channel_id: args.channelId,
228
- prompts: args.prompts.map(p => ({
229
- title: p.title,
230
- message: p.message,
231
- })),
232
- };
233
- if (args.threadTs !== undefined && args.threadTs !== "") {
234
- body.thread_ts = args.threadTs;
235
- }
236
- if (args.title !== undefined && args.title !== "") {
237
- body.title = args.title;
238
- }
239
- return callSlackApiSoft({
240
- botToken: args.botToken,
241
- operation: "assistant.threads.setSuggestedPrompts",
242
- body,
243
- });
200
+ thread_ts: args.threadTs,
201
+ title: truncateTitle(args.title),
202
+ },
244
203
  });
245
204
  }
246
- export function startChatStream(args) {
247
- return __awaiter(this, void 0, void 0, function* () {
248
- const body = {
249
- channel: args.channel,
250
- };
251
- // Empty markdown_text is rejected or opens a stream the assistant pane
252
- // never attaches. Recipients are required outside DMs.
253
- if (args.thread_ts !== undefined && args.thread_ts !== "") {
254
- body.thread_ts = args.thread_ts;
255
- }
256
- if (args.markdown_text !== undefined && args.markdown_text !== "") {
257
- body.markdown_text = args.markdown_text;
258
- }
259
- if (args.chunks !== undefined && args.chunks.length > 0) {
260
- body.chunks = args.chunks;
261
- }
262
- if (args.recipient_user_id !== undefined && args.recipient_user_id !== "") {
263
- body.recipient_user_id = args.recipient_user_id;
264
- }
265
- if (args.recipient_team_id !== undefined && args.recipient_team_id !== "") {
266
- body.recipient_team_id = args.recipient_team_id;
267
- }
268
- const result = yield callSlackApiSoft({
269
- botToken: args.botToken,
270
- operation: "chat.startStream",
271
- body,
272
- });
273
- if (!result.ok) {
274
- return result;
275
- }
276
- const ts = typeof result.ts === "string" ? result.ts : "";
277
- const channel = typeof result.channel === "string" ? result.channel : args.channel;
278
- if (ts === "") {
279
- return { ok: false, error: "missing_ts" };
280
- }
281
- return { ok: true, ts, channel };
205
+ export async function setSuggestedPrompts(args) {
206
+ const body = {
207
+ channel_id: args.channelId,
208
+ prompts: args.prompts.map(p => ({
209
+ title: p.title,
210
+ message: p.message,
211
+ })),
212
+ };
213
+ if (args.threadTs !== undefined && args.threadTs !== "") {
214
+ body.thread_ts = args.threadTs;
215
+ }
216
+ if (args.title !== undefined && args.title !== "") {
217
+ body.title = args.title;
218
+ }
219
+ return callSlackApiSoft({
220
+ botToken: args.botToken,
221
+ operation: "assistant.threads.setSuggestedPrompts",
222
+ body,
282
223
  });
283
224
  }
284
- export function appendChatStream(args) {
285
- return __awaiter(this, void 0, void 0, function* () {
286
- const body = {
287
- channel: args.channel,
288
- ts: args.ts,
289
- };
290
- if (args.markdown_text !== undefined) {
291
- body.markdown_text = args.markdown_text;
292
- }
293
- if (args.chunks !== undefined && args.chunks.length > 0) {
294
- body.chunks = args.chunks;
295
- }
296
- return callSlackApiSoft({
297
- botToken: args.botToken,
298
- operation: "chat.appendStream",
299
- body,
300
- });
225
+ export async function startChatStream(args) {
226
+ const body = {
227
+ channel: args.channel,
228
+ };
229
+ // Empty markdown_text is rejected or opens a stream the assistant pane
230
+ // never attaches. Recipients are required outside DMs.
231
+ if (args.thread_ts !== undefined && args.thread_ts !== "") {
232
+ body.thread_ts = args.thread_ts;
233
+ }
234
+ if (args.markdown_text !== undefined && args.markdown_text !== "") {
235
+ body.markdown_text = args.markdown_text;
236
+ }
237
+ if (args.chunks !== undefined && args.chunks.length > 0) {
238
+ body.chunks = args.chunks;
239
+ }
240
+ if (args.recipient_user_id !== undefined && args.recipient_user_id !== "") {
241
+ body.recipient_user_id = args.recipient_user_id;
242
+ }
243
+ if (args.recipient_team_id !== undefined && args.recipient_team_id !== "") {
244
+ body.recipient_team_id = args.recipient_team_id;
245
+ }
246
+ const result = await callSlackApiSoft({
247
+ botToken: args.botToken,
248
+ operation: "chat.startStream",
249
+ body,
301
250
  });
251
+ if (!result.ok) {
252
+ return result;
253
+ }
254
+ const ts = typeof result.ts === "string" ? result.ts : "";
255
+ const channel = typeof result.channel === "string" ? result.channel : args.channel;
256
+ if (ts === "") {
257
+ return { ok: false, error: "missing_ts" };
258
+ }
259
+ return { ok: true, ts, channel };
302
260
  }
303
- export function stopChatStream(args) {
304
- return __awaiter(this, void 0, void 0, function* () {
305
- const body = {
306
- channel: args.channel,
307
- ts: args.ts,
308
- };
309
- if (args.markdown_text !== undefined) {
310
- body.markdown_text = args.markdown_text;
311
- }
312
- if (args.chunks !== undefined && args.chunks.length > 0) {
313
- body.chunks = args.chunks;
314
- }
315
- if (args.blocks !== undefined && args.blocks.length > 0) {
316
- body.blocks = args.blocks;
317
- }
318
- return callSlackApiSoft({
319
- botToken: args.botToken,
320
- operation: "chat.stopStream",
321
- body,
322
- });
261
+ export async function appendChatStream(args) {
262
+ const body = {
263
+ channel: args.channel,
264
+ ts: args.ts,
265
+ };
266
+ if (args.markdown_text !== undefined) {
267
+ body.markdown_text = args.markdown_text;
268
+ }
269
+ if (args.chunks !== undefined && args.chunks.length > 0) {
270
+ body.chunks = args.chunks;
271
+ }
272
+ return callSlackApiSoft({
273
+ botToken: args.botToken,
274
+ operation: "chat.appendStream",
275
+ body,
276
+ });
277
+ }
278
+ export async function stopChatStream(args) {
279
+ const body = {
280
+ channel: args.channel,
281
+ ts: args.ts,
282
+ };
283
+ if (args.markdown_text !== undefined) {
284
+ body.markdown_text = args.markdown_text;
285
+ }
286
+ if (args.chunks !== undefined && args.chunks.length > 0) {
287
+ body.chunks = args.chunks;
288
+ }
289
+ if (args.blocks !== undefined && args.blocks.length > 0) {
290
+ body.blocks = args.blocks;
291
+ }
292
+ return callSlackApiSoft({
293
+ botToken: args.botToken,
294
+ operation: "chat.stopStream",
295
+ body,
323
296
  });
324
297
  }
325
298
  const SLACK_MRKDWN_LITERAL_PATTERN = /<(?:[@#!][^>\r\n]+|(?:https?|ftp|mailto|tel):[^>\r\n]+)>/gi;
@@ -347,266 +320,283 @@ export function markdownToSlackMrkdwn(markdown) {
347
320
  function requiresMrkdwnText(text) {
348
321
  return text.includes("<!subteam^") || SLACK_MRKDWN_LINK_PATTERN.test(text);
349
322
  }
350
- export function postMessage(args) {
351
- return __awaiter(this, void 0, void 0, function* () {
352
- var _a, _b;
353
- // Slack treats markdown_text as mutually exclusive with text and blocks
354
- // (error: markdown_text_conflict). Prefer markdown when we have no
355
- // blocks; with Block Kit or plainText, use text as body/fallback.
356
- const base = {
357
- channel: args.channel,
358
- unfurl_links: false,
359
- unfurl_media: false,
360
- };
361
- if (args.threadTs !== undefined && args.threadTs !== "") {
362
- base.thread_ts = args.threadTs;
363
- }
364
- if (args.metadata !== undefined) {
365
- base.metadata = args.metadata;
366
- }
367
- const hasBlocks = args.blocks !== undefined && args.blocks.length > 0;
368
- const convertToMrkdwn = args.plainText !== true && !hasBlocks && requiresMrkdwnText(args.text);
369
- // User-group mentions (`<!subteam^…>`) and Slack mrkdwn links
370
- // (`<https://…|label>`) only render correctly via mrkdwn `text`,
371
- // not `markdown_text`.
372
- const useText = args.plainText === true || hasBlocks || convertToMrkdwn;
373
- let response;
374
- if (useText) {
375
- response = yield callSlackApi({
376
- botToken: args.botToken,
377
- operation: "chat.postMessage",
378
- body: Object.assign(Object.assign(Object.assign({}, base), { text: convertToMrkdwn ? markdownToSlackMrkdwn(args.text) : args.text }), (hasBlocks ? { blocks: args.blocks } : {})),
379
- });
380
- }
381
- else {
382
- response = yield callSlackApi({
323
+ export async function postMessage(args) {
324
+ // Slack treats markdown_text as mutually exclusive with text and blocks
325
+ // (error: markdown_text_conflict). Prefer markdown when we have no
326
+ // blocks; with Block Kit or plainText, use text as body/fallback.
327
+ const base = {
328
+ channel: args.channel,
329
+ unfurl_links: false,
330
+ unfurl_media: false,
331
+ };
332
+ if (args.threadTs !== undefined && args.threadTs !== "") {
333
+ base.thread_ts = args.threadTs;
334
+ }
335
+ if (args.metadata !== undefined) {
336
+ base.metadata = args.metadata;
337
+ }
338
+ const hasBlocks = args.blocks !== undefined && args.blocks.length > 0;
339
+ const convertToMrkdwn = args.plainText !== true && !hasBlocks && requiresMrkdwnText(args.text);
340
+ // User-group mentions (`<!subteam^…>`) and Slack mrkdwn links
341
+ // (`<https://…|label>`) only render correctly via mrkdwn `text`,
342
+ // not `markdown_text`.
343
+ const useText = args.plainText === true || hasBlocks || convertToMrkdwn;
344
+ let response;
345
+ if (useText) {
346
+ response = await callSlackApi({
347
+ botToken: args.botToken,
348
+ operation: "chat.postMessage",
349
+ body: {
350
+ ...base,
351
+ text: convertToMrkdwn ? markdownToSlackMrkdwn(args.text) : args.text,
352
+ ...(hasBlocks ? { blocks: args.blocks } : {}),
353
+ },
354
+ });
355
+ }
356
+ else {
357
+ response = await callSlackApi({
358
+ botToken: args.botToken,
359
+ operation: "chat.postMessage",
360
+ body: {
361
+ ...base,
362
+ markdown_text: highlightCodeFences(args.text),
363
+ },
364
+ });
365
+ // Older workspaces / scopes may not accept markdown_text — retry with text.
366
+ // Also fall back when markdown_text hits its 12k limit (msg_too_long) while
367
+ // plain text still allows up to ~40k.
368
+ if (response.ok !== true &&
369
+ (response.error === "markdown_text_conflict" ||
370
+ response.error === "invalid_arguments" ||
371
+ response.error === "invalid_blocks" ||
372
+ response.error === "msg_too_long" ||
373
+ SLACK_UNSUPPORTED_ERRORS.has(String(response.error ?? "")))) {
374
+ response = await callSlackApi({
383
375
  botToken: args.botToken,
384
376
  operation: "chat.postMessage",
385
- body: Object.assign(Object.assign({}, base), { markdown_text: highlightCodeFences(args.text) }),
377
+ body: {
378
+ ...base,
379
+ text: markdownToSlackMrkdwn(args.text),
380
+ },
386
381
  });
387
- // Older workspaces / scopes may not accept markdown_text — retry with text.
388
- // Also fall back when markdown_text hits its 12k limit (msg_too_long) while
389
- // plain text still allows up to ~40k.
390
- if (response.ok !== true &&
391
- (response.error === "markdown_text_conflict" ||
392
- response.error === "invalid_arguments" ||
393
- response.error === "invalid_blocks" ||
394
- response.error === "msg_too_long" ||
395
- SLACK_UNSUPPORTED_ERRORS.has(String((_a = response.error) !== null && _a !== void 0 ? _a : "")))) {
396
- response = yield callSlackApi({
397
- botToken: args.botToken,
398
- operation: "chat.postMessage",
399
- body: Object.assign(Object.assign({}, base), { text: markdownToSlackMrkdwn(args.text) }),
400
- });
401
- }
402
- }
403
- if (response.ok !== true) {
404
- throw new Error(`Slack chat.postMessage failed: ${String((_b = response.error) !== null && _b !== void 0 ? _b : "unknown_error")}`);
405
382
  }
406
- // Slack requires thread_ts as a string. A numeric ts (JSON number) silently
407
- // drops threading server-side — never coerce via Number.
408
- const ts = typeof response.ts === "string" ? response.ts : "";
409
- if (ts === "") {
410
- throw new Error(`Slack chat.postMessage ok but missing string ts (got ${typeof response.ts})`);
411
- }
412
- // When we asked to thread, confirm Slack honored it — but only when the
413
- // response includes a thread_ts. Some proxy / customize-username payloads
414
- // omit `message.thread_ts` even for successful threaded posts; treating
415
- // that as failure retries (or deletes) replies and leaves empty threads.
416
- const requestedThreadTs = args.threadTs;
417
- if (requestedThreadTs !== undefined && requestedThreadTs !== "") {
418
- const message = response.message;
419
- if (typeof message === "object" && message !== null && !Array.isArray(message)) {
420
- const applied = typeof message.thread_ts === "string"
421
- ? message.thread_ts
422
- : "";
423
- if (applied !== "" && applied !== requestedThreadTs) {
424
- throw new Error(`Slack chat.postMessage ignored thread_ts (requested ${requestedThreadTs}, got ${applied})`);
425
- }
383
+ }
384
+ if (response.ok !== true) {
385
+ throw new Error(`Slack chat.postMessage failed: ${String(response.error ?? "unknown_error")}`);
386
+ }
387
+ // Slack requires thread_ts as a string. A numeric ts (JSON number) silently
388
+ // drops threading server-side — never coerce via Number.
389
+ const ts = typeof response.ts === "string" ? response.ts : "";
390
+ if (ts === "") {
391
+ throw new Error(`Slack chat.postMessage ok but missing string ts (got ${typeof response.ts})`);
392
+ }
393
+ // When we asked to thread, confirm Slack honored it — but only when the
394
+ // response includes a thread_ts. Some proxy / customize-username payloads
395
+ // omit `message.thread_ts` even for successful threaded posts; treating
396
+ // that as failure retries (or deletes) replies and leaves empty threads.
397
+ const requestedThreadTs = args.threadTs;
398
+ if (requestedThreadTs !== undefined && requestedThreadTs !== "") {
399
+ const message = response.message;
400
+ if (typeof message === "object" && message !== null && !Array.isArray(message)) {
401
+ const applied = typeof message.thread_ts === "string"
402
+ ? message.thread_ts
403
+ : "";
404
+ if (applied !== "" && applied !== requestedThreadTs) {
405
+ throw new Error(`Slack chat.postMessage ignored thread_ts (requested ${requestedThreadTs}, got ${applied})`);
426
406
  }
427
407
  }
428
- // Slack returns the resolved channel ID (C…) even when the request used a name.
429
- const channel = typeof response.channel === "string" && response.channel !== ""
430
- ? response.channel
431
- : args.channel;
432
- return { ts, channel };
433
- });
408
+ }
409
+ // Slack returns the resolved channel ID (C…) even when the request used a name.
410
+ const channel = typeof response.channel === "string" && response.channel !== ""
411
+ ? response.channel
412
+ : args.channel;
413
+ return { ts, channel };
434
414
  }
435
415
  /** Replace an existing message (e.g. strip Approve/Deny after a decision). */
436
- export function updateMessage(args) {
437
- return __awaiter(this, void 0, void 0, function* () {
438
- var _a;
439
- const base = {
440
- channel: args.channel,
441
- ts: args.ts,
442
- };
443
- const useRawText = args.blocks !== undefined || args.plainText === true;
444
- const convertToMrkdwn = !useRawText && requiresMrkdwnText(args.text);
445
- if (useRawText || convertToMrkdwn) {
446
- // Blocks / plainText / user-group mentions / mrkdwn links force the
447
- // legacy text path (same as postMessage).
448
- return callSlackApiSoft({
449
- botToken: args.botToken,
450
- operation: "chat.update",
451
- body: Object.assign(Object.assign(Object.assign({}, base), { text: convertToMrkdwn ? markdownToSlackMrkdwn(args.text) : args.text }), (args.blocks !== undefined ? { blocks: args.blocks } : {})),
452
- });
453
- }
454
- let result = yield callSlackApiSoft({
416
+ export async function updateMessage(args) {
417
+ const base = {
418
+ channel: args.channel,
419
+ ts: args.ts,
420
+ };
421
+ const useRawText = args.blocks !== undefined || args.plainText === true;
422
+ const convertToMrkdwn = !useRawText && requiresMrkdwnText(args.text);
423
+ if (useRawText || convertToMrkdwn) {
424
+ // Blocks / plainText / user-group mentions / mrkdwn links force the
425
+ // legacy text path (same as postMessage).
426
+ return callSlackApiSoft({
455
427
  botToken: args.botToken,
456
428
  operation: "chat.update",
457
- body: Object.assign(Object.assign({}, base), { markdown_text: args.text }),
429
+ body: {
430
+ ...base,
431
+ text: convertToMrkdwn ? markdownToSlackMrkdwn(args.text) : args.text,
432
+ ...(args.blocks !== undefined ? { blocks: args.blocks } : {}),
433
+ },
458
434
  });
459
- // Older workspaces / scopes may not accept markdown_text — retry with text.
460
- // Also fall back when markdown_text hits its 12k limit (msg_too_long).
461
- if (!result.ok &&
462
- (result.error === "markdown_text_conflict" ||
463
- result.error === "invalid_arguments" ||
464
- result.error === "invalid_blocks" ||
465
- result.error === "msg_too_long" ||
466
- SLACK_UNSUPPORTED_ERRORS.has(String((_a = result.error) !== null && _a !== void 0 ? _a : "")))) {
467
- result = yield callSlackApiSoft({
468
- botToken: args.botToken,
469
- operation: "chat.update",
470
- body: Object.assign(Object.assign({}, base), { text: markdownToSlackMrkdwn(args.text) }),
471
- });
472
- }
473
- return result;
435
+ }
436
+ let result = await callSlackApiSoft({
437
+ botToken: args.botToken,
438
+ operation: "chat.update",
439
+ body: {
440
+ ...base,
441
+ markdown_text: args.text,
442
+ },
474
443
  });
444
+ // Older workspaces / scopes may not accept markdown_text — retry with text.
445
+ // Also fall back when markdown_text hits its 12k limit (msg_too_long).
446
+ if (!result.ok &&
447
+ (result.error === "markdown_text_conflict" ||
448
+ result.error === "invalid_arguments" ||
449
+ result.error === "invalid_blocks" ||
450
+ result.error === "msg_too_long" ||
451
+ SLACK_UNSUPPORTED_ERRORS.has(String(result.error ?? "")))) {
452
+ result = await callSlackApiSoft({
453
+ botToken: args.botToken,
454
+ operation: "chat.update",
455
+ body: {
456
+ ...base,
457
+ text: markdownToSlackMrkdwn(args.text),
458
+ },
459
+ });
460
+ }
461
+ return result;
475
462
  }
476
463
  /**
477
464
  * Delete a message (`chat.delete`). Soft-fails — used best-effort to remove an
478
465
  * orphaned skeleton before falling back to a fresh post, so a failed delete
479
466
  * never blocks delivery of the reply.
480
467
  */
481
- export function deleteMessage(args) {
482
- return __awaiter(this, void 0, void 0, function* () {
483
- if (args.channel === "" || args.ts === "") {
484
- return { ok: false, error: "missing_channel_or_ts" };
485
- }
486
- return callSlackApiSoft({
487
- botToken: args.botToken,
488
- operation: "chat.delete",
489
- body: {
490
- channel: args.channel,
491
- ts: args.ts,
492
- },
493
- });
468
+ export async function deleteMessage(args) {
469
+ if (args.channel === "" || args.ts === "") {
470
+ return { ok: false, error: "missing_channel_or_ts" };
471
+ }
472
+ return callSlackApiSoft({
473
+ botToken: args.botToken,
474
+ operation: "chat.delete",
475
+ body: {
476
+ channel: args.channel,
477
+ ts: args.ts,
478
+ },
494
479
  });
495
480
  }
496
481
  /** Add an emoji reaction (`reactions.add`). Soft-fails. */
497
- export function addReaction(args) {
498
- return __awaiter(this, void 0, void 0, function* () {
499
- if (args.channel === "" || args.ts === "" || args.name === "") {
500
- return { ok: false, error: "missing_channel_ts_or_name" };
501
- }
502
- return callSlackApiSoft({
503
- botToken: args.botToken,
504
- operation: "reactions.add",
505
- body: {
506
- channel: args.channel,
507
- timestamp: args.ts,
508
- name: args.name,
509
- },
510
- });
482
+ export async function addReaction(args) {
483
+ if (args.channel === "" || args.ts === "" || args.name === "") {
484
+ return { ok: false, error: "missing_channel_ts_or_name" };
485
+ }
486
+ return callSlackApiSoft({
487
+ botToken: args.botToken,
488
+ operation: "reactions.add",
489
+ body: {
490
+ channel: args.channel,
491
+ timestamp: args.ts,
492
+ name: args.name,
493
+ },
511
494
  });
512
495
  }
513
496
  /** Remove an emoji reaction (`reactions.remove`). Soft-fails. */
514
- export function removeReaction(args) {
515
- return __awaiter(this, void 0, void 0, function* () {
516
- if (args.channel === "" || args.ts === "" || args.name === "") {
517
- return { ok: false, error: "missing_channel_ts_or_name" };
518
- }
519
- return callSlackApiSoft({
520
- botToken: args.botToken,
521
- operation: "reactions.remove",
522
- body: {
523
- channel: args.channel,
524
- timestamp: args.ts,
525
- name: args.name,
526
- },
527
- });
497
+ export async function removeReaction(args) {
498
+ if (args.channel === "" || args.ts === "" || args.name === "") {
499
+ return { ok: false, error: "missing_channel_ts_or_name" };
500
+ }
501
+ return callSlackApiSoft({
502
+ botToken: args.botToken,
503
+ operation: "reactions.remove",
504
+ body: {
505
+ channel: args.channel,
506
+ timestamp: args.ts,
507
+ name: args.name,
508
+ },
528
509
  });
529
510
  }
530
511
  export function buildSlackBinding(args) {
531
- var _a;
532
512
  let threadTs = args.threadTs;
533
- const log = (_a = args.log) !== null && _a !== void 0 ? _a : defaultSlackLog;
513
+ const log = args.log ?? defaultSlackLog;
534
514
  const thread = {
535
- post(text, options) {
536
- return __awaiter(this, void 0, void 0, function* () {
537
- var _a;
538
- const result = yield postMessage(Object.assign({ botToken: args.botToken, channel: args.channelId, text,
539
- threadTs }, ((options === null || options === void 0 ? void 0 : options.blocks) === undefined ? {} : { blocks: options.blocks })));
540
- if (result.ts !== "" && threadTs === "") {
541
- threadTs = result.ts;
542
- (_a = args.onThreadTsChanged) === null || _a === void 0 ? void 0 : _a.call(args, result.ts);
543
- }
544
- log.info("postMessage ok", {
515
+ async post(text, options) {
516
+ const result = await postMessage({
517
+ botToken: args.botToken,
518
+ channel: args.channelId,
519
+ text,
520
+ threadTs,
521
+ ...(options?.blocks === undefined ? {} : { blocks: options.blocks }),
522
+ });
523
+ if (result.ts !== "" && threadTs === "") {
524
+ threadTs = result.ts;
525
+ args.onThreadTsChanged?.(result.ts);
526
+ }
527
+ log.info("postMessage ok", {
528
+ channel: args.channelId,
529
+ thread_ts: threadTs,
530
+ message_ts: result.ts,
531
+ });
532
+ return { ts: result.ts };
533
+ },
534
+ async startTyping(status, loadingMessages) {
535
+ if (args.channelId === "" || threadTs === "") {
536
+ return;
537
+ }
538
+ const result = await setThreadStatus({
539
+ botToken: args.botToken,
540
+ channelId: args.channelId,
541
+ threadTs,
542
+ status,
543
+ ...(loadingMessages === undefined ? {} : { loadingMessages }),
544
+ });
545
+ if (!result.ok) {
546
+ log.warn("slack setStatus not-ok", {
547
+ error: result.error,
545
548
  channel: args.channelId,
546
549
  thread_ts: threadTs,
547
- message_ts: result.ts,
548
550
  });
549
- return { ts: result.ts };
550
- });
551
+ }
551
552
  },
552
- startTyping(status, loadingMessages) {
553
- return __awaiter(this, void 0, void 0, function* () {
554
- if (args.channelId === "" || threadTs === "") {
555
- return;
556
- }
557
- const result = yield setThreadStatus(Object.assign({ botToken: args.botToken, channelId: args.channelId, threadTs,
558
- status }, (loadingMessages === undefined ? {} : { loadingMessages })));
559
- if (!result.ok) {
560
- log.warn("slack setStatus not-ok", {
561
- error: result.error,
562
- channel: args.channelId,
563
- thread_ts: threadTs,
564
- });
565
- }
553
+ async setTitle(title) {
554
+ if (args.channelId === "" || threadTs === "") {
555
+ return;
556
+ }
557
+ const result = await setThreadTitle({
558
+ botToken: args.botToken,
559
+ channelId: args.channelId,
560
+ threadTs,
561
+ title,
566
562
  });
567
- },
568
- setTitle(title) {
569
- return __awaiter(this, void 0, void 0, function* () {
570
- if (args.channelId === "" || threadTs === "") {
571
- return;
572
- }
573
- const result = yield setThreadTitle({
574
- botToken: args.botToken,
575
- channelId: args.channelId,
576
- threadTs,
577
- title,
563
+ if (!result.ok) {
564
+ log.warn("assistant.threads.setTitle not-ok", {
565
+ error: result.error,
566
+ channel: args.channelId,
567
+ thread_ts: threadTs,
578
568
  });
579
- if (!result.ok) {
580
- log.warn("assistant.threads.setTitle not-ok", {
581
- error: result.error,
582
- channel: args.channelId,
583
- thread_ts: threadTs,
584
- });
585
- }
586
- });
569
+ }
587
570
  },
588
- setSuggestedPrompts(prompts, title) {
589
- return __awaiter(this, void 0, void 0, function* () {
590
- if (args.channelId === "" || threadTs === "" || prompts.length === 0) {
591
- return;
592
- }
593
- const result = yield setSuggestedPrompts(Object.assign({ botToken: args.botToken, channelId: args.channelId, threadTs,
594
- prompts }, (title === undefined ? {} : { title })));
595
- if (!result.ok) {
596
- log.warn("assistant.threads.setSuggestedPrompts not-ok", {
597
- error: result.error,
598
- channel: args.channelId,
599
- thread_ts: threadTs,
600
- });
601
- }
571
+ async setSuggestedPrompts(prompts, title) {
572
+ if (args.channelId === "" || threadTs === "" || prompts.length === 0) {
573
+ return;
574
+ }
575
+ const result = await setSuggestedPrompts({
576
+ botToken: args.botToken,
577
+ channelId: args.channelId,
578
+ threadTs,
579
+ prompts,
580
+ ...(title === undefined ? {} : { title }),
602
581
  });
582
+ if (!result.ok) {
583
+ log.warn("assistant.threads.setSuggestedPrompts not-ok", {
584
+ error: result.error,
585
+ channel: args.channelId,
586
+ thread_ts: threadTs,
587
+ });
588
+ }
603
589
  },
604
590
  };
605
591
  return {
606
592
  thread,
607
- slack: Object.assign({ channelId: args.channelId, get threadTs() {
593
+ slack: {
594
+ channelId: args.channelId,
595
+ get threadTs() {
608
596
  return threadTs;
609
- } }, (args.teamId === undefined ? {} : { teamId: args.teamId })),
597
+ },
598
+ ...(args.teamId === undefined ? {} : { teamId: args.teamId }),
599
+ },
610
600
  host: args.host,
611
601
  artifacts: args.artifacts,
612
602
  };