@cursor/bdk 0.2.10 → 0.2.12

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 (436) hide show
  1. package/dist/bin/agent-serve.js +28 -26
  2. package/dist/channels/bitbucket/api.js +8 -8
  3. package/dist/channels/bitbucket/binding.js +4 -4
  4. package/dist/channels/bitbucket/bitbucket-channel.js +1 -1
  5. package/dist/channels/bitbucket/bitbucket-webhook.js +1 -1
  6. package/dist/channels/bitbucket/checks.js +1 -1
  7. package/dist/channels/bitbucket/cursor-account.js +1 -1
  8. package/dist/channels/bitbucket/events.js +1 -1
  9. package/dist/channels/change-monitors/change-monitors-channel.js +1 -1
  10. package/dist/channels/checks.js +2 -2
  11. package/dist/channels/deployments/deployments-channel.js +1 -1
  12. package/dist/channels/github/cursor-account.js +3 -3
  13. package/dist/channels/github/defaults.js +3 -3
  14. package/dist/channels/github/events.js +1 -1
  15. package/dist/channels/github/forward.js +8 -8
  16. package/dist/channels/github/github-channel.js +2 -2
  17. package/dist/channels/gitlab/binding.js +4 -4
  18. package/dist/channels/gitlab/checks.js +1 -1
  19. package/dist/channels/gitlab/cursor-account.js +1 -1
  20. package/dist/channels/gitlab/events.js +1 -1
  21. package/dist/channels/gitlab/gitlab-channel.js +1 -1
  22. package/dist/channels/gitlab/gitlab-webhook.js +1 -1
  23. package/dist/channels/gitlab/replay.js +2 -2
  24. package/dist/channels/origin/binding.js +3 -3
  25. package/dist/channels/origin/checks.js +1 -1
  26. package/dist/channels/origin/cursor-account.js +1 -1
  27. package/dist/channels/origin/events.js +1 -1
  28. package/dist/channels/origin/origin-channel.js +1 -1
  29. package/dist/channels/origin/origin-webhook.js +2 -2
  30. package/dist/channels/slack/agentic-delivery.js +3 -3
  31. package/dist/channels/slack/agentic-signals.js +1 -1
  32. package/dist/channels/slack/api.js +5 -5
  33. package/dist/channels/slack/approvals.js +1 -1
  34. package/dist/channels/slack/attachments.js +3 -3
  35. package/dist/channels/slack/blocks.js +3 -3
  36. package/dist/channels/slack/bot-mentions.js +4 -4
  37. package/dist/channels/slack/channel-watch.js +4 -4
  38. package/dist/channels/slack/cli-project.js +3 -3
  39. package/dist/channels/slack/dispatch.js +1 -1
  40. package/dist/channels/slack/doctor.js +1 -1
  41. package/dist/channels/slack/eval-directive.js +1 -1
  42. package/dist/channels/slack/footer.js +1 -1
  43. package/dist/channels/slack/interactive.js +2 -2
  44. package/dist/channels/slack/log.d.ts.map +1 -1
  45. package/dist/channels/slack/log.js +1 -1
  46. package/dist/channels/slack/manifest.js +1 -1
  47. package/dist/channels/slack/nudge-carrier.js +1 -1
  48. package/dist/channels/slack/nudge-store.js +2 -2
  49. package/dist/channels/slack/recording-sink.js +6 -6
  50. package/dist/channels/slack/reply-options.js +6 -6
  51. package/dist/channels/slack/self-identity.d.ts +7 -4
  52. package/dist/channels/slack/self-identity.d.ts.map +1 -1
  53. package/dist/channels/slack/self-identity.js +17 -8
  54. package/dist/channels/slack/sender-name.d.ts.map +1 -1
  55. package/dist/channels/slack/sender-name.js +2 -6
  56. package/dist/channels/slack/setup.d.ts.map +1 -1
  57. package/dist/channels/slack/setup.js +1 -1
  58. package/dist/channels/slack/slack-channel.js +2 -2
  59. package/dist/channels/slack/socket-mode.js +2 -2
  60. package/dist/channels/slack/thread-context.js +8 -8
  61. package/dist/channels/slack/tool-cards.js +1 -1
  62. package/dist/channels/slack/user-info.d.ts +2 -1
  63. package/dist/channels/slack/user-info.d.ts.map +1 -1
  64. package/dist/channels/slack/user-info.js +16 -1
  65. package/dist/channels.js +1 -1
  66. package/dist/docs/404.html +3 -3
  67. package/dist/docs/assets/{app.DXI7bwox.js → app.CKta5zX1.js} +4 -4
  68. package/dist/docs/assets/chunks/@localSearchIndexroot.DtlCe4t6.js +1 -0
  69. package/dist/docs/assets/chunks/{VPLocalSearchBox.BrbO5mEe.js → VPLocalSearchBox.4vRM3EDG.js} +2 -2
  70. package/dist/docs/assets/chunks/{arc.BOG1yms8.js → arc.CofbA8tA.js} +1 -1
  71. package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.C0hsMZnZ.js → architectureDiagram-Q4EWVU46.Mt2UV5M-.js} +1 -1
  72. package/dist/docs/assets/chunks/{baseUniq.H044KjKs.js → baseUniq.C_W0Aqp4.js} +1 -1
  73. package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.BsRW6GoB.js → blockDiagram-DXYQGD6D.dAc4goE-.js} +1 -1
  74. package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.B9HV5PFR.js → c4Diagram-AHTNJAMY.dnbRC3Dm.js} +1 -1
  75. package/dist/docs/assets/chunks/channel.DpljPUVU.js +1 -0
  76. package/dist/docs/assets/chunks/{chunk-4BX2VUAB.CPoT_ajl.js → chunk-4BX2VUAB.B42ltSTd.js} +1 -1
  77. package/dist/docs/assets/chunks/{chunk-4TB4RGXK.DZBwWuCL.js → chunk-4TB4RGXK.2GbAul_E.js} +1 -1
  78. package/dist/docs/assets/chunks/{chunk-55IACEB6.CZ3yTiyq.js → chunk-55IACEB6.pjzY-v-B.js} +1 -1
  79. package/dist/docs/assets/chunks/{chunk-EDXVE4YY.6DfvHSd8.js → chunk-EDXVE4YY.BB1GXLj2.js} +1 -1
  80. package/dist/docs/assets/chunks/{chunk-FMBD7UC4.CpBj8HfK.js → chunk-FMBD7UC4.B2WxZkoA.js} +1 -1
  81. package/dist/docs/assets/chunks/{chunk-OYMX7WX6.BdKo8YqS.js → chunk-OYMX7WX6.BMvb2w73.js} +1 -1
  82. package/dist/docs/assets/chunks/{chunk-QZHKN3VN.BnXNyxJx.js → chunk-QZHKN3VN.Bmu_2lNr.js} +1 -1
  83. package/dist/docs/assets/chunks/{chunk-YZCP3GAM.Cg1OcF8G.js → chunk-YZCP3GAM.Cth65EaC.js} +1 -1
  84. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.DFNHq2OM.js +1 -0
  85. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.DFNHq2OM.js +1 -0
  86. package/dist/docs/assets/chunks/clone.DssygCzX.js +1 -0
  87. package/dist/docs/assets/chunks/{cose-bilkent-S5V4N54A.1SP8al9c.js → cose-bilkent-S5V4N54A.CrfA7Iw_.js} +1 -1
  88. package/dist/docs/assets/chunks/{dagre-KV5264BT.DS1L6hJt.js → dagre-KV5264BT.PCD6KQDb.js} +1 -1
  89. package/dist/docs/assets/chunks/{diagram-5BDNPKRD.ChsausbG.js → diagram-5BDNPKRD.CGNlYlP1.js} +1 -1
  90. package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.3XsptNWj.js → diagram-G4DWMVQ6.C0cvryPD.js} +1 -1
  91. package/dist/docs/assets/chunks/{diagram-MMDJMWI5.DPA9Dk_P.js → diagram-MMDJMWI5.DHlkZHNV.js} +1 -1
  92. package/dist/docs/assets/chunks/{diagram-TYMM5635.BVswXWrB.js → diagram-TYMM5635.DDGqH_4B.js} +1 -1
  93. package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.BSak5OSP.js → erDiagram-SMLLAGMA.4gOY_C3v.js} +1 -1
  94. package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.CQgN4TTz.js → flowDiagram-DWJPFMVM.8i7zsxuh.js} +1 -1
  95. package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.GrT0kA4a.js → ganttDiagram-T4ZO3ILL.BEKHYdM-.js} +1 -1
  96. package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.CdS7Ucll.js → gitGraphDiagram-UUTBAWPF.ACzeLGiB.js} +1 -1
  97. package/dist/docs/assets/chunks/{graph.BVqKRmRo.js → graph.08C3hS6m.js} +1 -1
  98. package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.C3C9FRto.js → infoDiagram-42DDH7IO.D8R9obOH.js} +1 -1
  99. package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.2FuAh_Zj.js → ishikawaDiagram-UXIWVN3A.CmgYpCWL.js} +1 -1
  100. package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.CaHMfK4b.js → journeyDiagram-VCZTEJTY.DUzjGfoZ.js} +1 -1
  101. package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.CjhIUwcA.js → kanban-definition-6JOO6SKY.DbcW2iZ0.js} +1 -1
  102. package/dist/docs/assets/chunks/{layout.CGU3gfSf.js → layout.BaDEpJzu.js} +1 -1
  103. package/dist/docs/assets/chunks/{linear.DaihpW_n.js → linear.B_zRQgCU.js} +1 -1
  104. package/dist/docs/assets/chunks/{min.BS-j8kHQ.js → min.BYscCdSu.js} +1 -1
  105. package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.BVJ1Bbnk.js → mindmap-definition-QFDTVHPH.Ggu0jg86.js} +1 -1
  106. package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.Cz1WIv9r.js → pieDiagram-DEJITSTG.D_q4SVDT.js} +1 -1
  107. package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.DKLFxcjy.js → quadrantDiagram-34T5L4WZ.D3zGj5ok.js} +1 -1
  108. package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.BHegiK7x.js → requirementDiagram-MS252O5E.DVTg7zr2.js} +1 -1
  109. package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.DYkY6yPc.js → sankeyDiagram-XADWPNL6.D3X8jm57.js} +1 -1
  110. package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.DYQ1QUrI.js → sequenceDiagram-FGHM5R23.Dpjai9YP.js} +1 -1
  111. package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.Iru8BsFo.js → stateDiagram-FHFEXIEX.D_AbQBuP.js} +1 -1
  112. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.CWKWRxRx.js +1 -0
  113. package/dist/docs/assets/chunks/{theme.DaplWQhQ.js → theme.BcgOnbZ6.js} +2 -2
  114. package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.BwFA8hiX.js → timeline-definition-GMOUNBTQ.Cp3DKBe2.js} +1 -1
  115. package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.CZ60W1C_.js → vennDiagram-DHZGUBPP.Bcvg-Aqu.js} +1 -1
  116. package/dist/docs/assets/chunks/wardley-RL74JXVD.CCpdcUSq.js +162 -0
  117. package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.B69D2r8-.js → wardleyDiagram-NUSXRM2D.L0yehCc5.js} +1 -1
  118. package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.CLPZEIU9.js → xychartDiagram-5P7HB3ND.Cw8-tJmw.js} +1 -1
  119. package/dist/docs/assets/{reference_connections.md.Bljpve-y.js → reference_connections.md.DLrgAd5f.js} +1 -1
  120. package/dist/docs/assets/{reference_hooks.md.C5LCJ1R3.js → reference_hooks.md.B-eGa2km.js} +3 -3
  121. package/dist/docs/assets/{reference_hooks.md.C5LCJ1R3.lean.js → reference_hooks.md.B-eGa2km.lean.js} +1 -1
  122. package/dist/docs/assets/{reference_sessions.md.CM5zo3w4.js → reference_sessions.md.CyM7ARz1.js} +1 -1
  123. package/dist/docs/assets/{reference_skills.md.C0guGcH0.js → reference_skills.md.ClkMoQsV.js} +3 -3
  124. package/dist/docs/assets/{reference_tools.md.v3SXVSs_.js → reference_tools.md.DzIY9JzY.js} +3 -3
  125. package/dist/docs/assets/{reference_tools.md.v3SXVSs_.lean.js → reference_tools.md.DzIY9JzY.lean.js} +1 -1
  126. package/dist/docs/assets/{style.C130MVnH.css → style.Dwls12uf.css} +1 -1
  127. package/dist/docs/building-with-agents.html +37 -37
  128. package/dist/docs/deployment.html +37 -37
  129. package/dist/docs/evals.html +37 -37
  130. package/dist/docs/guides/agent-to-agent.html +37 -37
  131. package/dist/docs/guides/bitbucket.html +37 -37
  132. package/dist/docs/guides/cloud-agents.html +37 -37
  133. package/dist/docs/guides/convert-automation.html +37 -37
  134. package/dist/docs/guides/github.html +37 -37
  135. package/dist/docs/guides/gitlab.html +37 -37
  136. package/dist/docs/guides/grokbot-agents.html +37 -37
  137. package/dist/docs/guides/hooks.html +37 -37
  138. package/dist/docs/guides/improve.html +37 -37
  139. package/dist/docs/guides/jev.html +37 -37
  140. package/dist/docs/guides/mcp-oauth.html +37 -37
  141. package/dist/docs/guides/migrate.html +37 -37
  142. package/dist/docs/guides/opentelemetry.html +37 -37
  143. package/dist/docs/guides/slack.html +37 -37
  144. package/dist/docs/guides/webhooks.html +37 -37
  145. package/dist/docs/hashmap.json +1 -1
  146. package/dist/docs/hillclimbing.html +37 -37
  147. package/dist/docs/index.html +37 -37
  148. package/dist/docs/llms-full.txt +15 -2
  149. package/dist/docs/quickstart.html +37 -37
  150. package/dist/docs/reference/agent-config.html +37 -37
  151. package/dist/docs/reference/artifacts.html +37 -37
  152. package/dist/docs/reference/channels.html +37 -37
  153. package/dist/docs/reference/cli.html +37 -37
  154. package/dist/docs/reference/connections.html +39 -39
  155. package/dist/docs/reference/connections.md +2 -1
  156. package/dist/docs/reference/evals.html +37 -37
  157. package/dist/docs/reference/extensions.html +37 -37
  158. package/dist/docs/reference/hooks.html +39 -39
  159. package/dist/docs/reference/hooks.md +1 -0
  160. package/dist/docs/reference/http-api.html +37 -37
  161. package/dist/docs/reference/instructions.html +37 -37
  162. package/dist/docs/reference/playground.html +36 -36
  163. package/dist/docs/reference/project-layout.html +37 -37
  164. package/dist/docs/reference/prompt.html +37 -37
  165. package/dist/docs/reference/schedules.html +37 -37
  166. package/dist/docs/reference/sessions.html +37 -37
  167. package/dist/docs/reference/sessions.md +1 -1
  168. package/dist/docs/reference/skills.html +40 -40
  169. package/dist/docs/reference/subagents.html +37 -37
  170. package/dist/docs/reference/tools.html +39 -39
  171. package/dist/docs/reference/tools.md +11 -0
  172. package/dist/docs/templates/agentic-owners.html +37 -37
  173. package/dist/docs/templates/grokbot-agents.html +37 -37
  174. package/dist/docs/templates/security-reviewer.html +37 -37
  175. package/dist/docs/templates/thermo-quality-review.html +37 -37
  176. package/dist/docs/templates/thermo-review.html +37 -37
  177. package/dist/docs/templates/triage.html +37 -37
  178. package/dist/docs/troubleshooting.html +36 -36
  179. package/dist/evals/assertions.d.ts.map +1 -1
  180. package/dist/evals/assertions.js +21 -19
  181. package/dist/evals/expect.js +1 -1
  182. package/dist/evals/judge.js +1 -1
  183. package/dist/evals/reporters.js +8 -8
  184. package/dist/evals/run-facts.js +2 -2
  185. package/dist/evals.js +6 -6
  186. package/dist/extensions/cursor-cloud-agents/extension.d.ts +2 -0
  187. package/dist/extensions/cursor-cloud-agents/extension.d.ts.map +1 -1
  188. package/dist/extensions/cursor-cloud-agents/extension.js +2 -1
  189. package/dist/extensions/cursor-cloud-agents/lib/backend.d.ts +16 -0
  190. package/dist/extensions/cursor-cloud-agents/lib/backend.d.ts.map +1 -1
  191. package/dist/extensions/cursor-cloud-agents/lib/backend.js +44 -3
  192. package/dist/extensions/cursor-cloud-agents/lib/fleet.js +1 -1
  193. package/dist/extensions/cursor-cloud-agents/lib/launch-agent.d.ts +23 -0
  194. package/dist/extensions/cursor-cloud-agents/lib/launch-agent.d.ts.map +1 -0
  195. package/dist/extensions/cursor-cloud-agents/lib/launch-agent.js +32 -0
  196. package/dist/extensions/cursor-cloud-agents/lib/repos.js +2 -2
  197. package/dist/extensions/cursor-cloud-agents/lib/transcript.js +2 -2
  198. package/dist/extensions/cursor-cloud-agents/lib/watch.d.ts.map +1 -1
  199. package/dist/extensions/cursor-cloud-agents/lib/watch.js +1 -1
  200. package/dist/extensions/cursor-cloud-agents/tools/launch.d.ts.map +1 -1
  201. package/dist/extensions/cursor-cloud-agents/tools/launch.js +3 -8
  202. package/dist/extensions/cursor-cloud-agents/tools/list.js +1 -1
  203. package/dist/extensions/cursor-grokbot-agents/extension.js +3 -3
  204. package/dist/extensions/cursor-grokbot-agents/lib/agents.js +3 -3
  205. package/dist/extensions/cursor-grokbot-agents/lib/contacts.js +3 -3
  206. package/dist/extensions/cursor-grokbot-agents/lib/conversation.js +4 -4
  207. package/dist/extensions/cursor-grokbot-agents/tools/list.js +1 -1
  208. package/dist/extensions/improve/skills/yourself.js +1 -1
  209. package/dist/extensions/jev/extension.js +2 -2
  210. package/dist/extensions/jev/tools/evaluate.js +1 -1
  211. package/dist/extensions/slack-communication/tools/react.js +1 -1
  212. package/dist/files-backends/cursor-hosted.js +8 -8
  213. package/dist/files-backends/local-fs.js +1 -1
  214. package/dist/filesystem.d.ts.map +1 -1
  215. package/dist/filesystem.js +15 -15
  216. package/dist/internal/advertise-tools.d.ts +3 -2
  217. package/dist/internal/advertise-tools.d.ts.map +1 -1
  218. package/dist/internal/advertise-tools.js +11 -9
  219. package/dist/internal/approval-gate.js +1 -1
  220. package/dist/internal/artifacts-store.js +13 -13
  221. package/dist/internal/as-of.js +2 -2
  222. package/dist/internal/authored-alias-hooks.js +1 -1
  223. package/dist/internal/builtin-tools/reminders.js +2 -2
  224. package/dist/internal/chat-client.js +5 -5
  225. package/dist/internal/cli-ax.js +14 -14
  226. package/dist/internal/cli-bitbucket.js +10 -10
  227. package/dist/internal/cli-convert-automation.js +2 -2
  228. package/dist/internal/cli-cursor.js +2 -2
  229. package/dist/internal/cli-deploy.d.ts.map +1 -1
  230. package/dist/internal/cli-deploy.js +40 -40
  231. package/dist/internal/cli-docs.js +5 -5
  232. package/dist/internal/cli-github.js +15 -15
  233. package/dist/internal/cli-gitlab.js +10 -10
  234. package/dist/internal/cli-images.js +16 -16
  235. package/dist/internal/cli-manifest.js +1 -1
  236. package/dist/internal/cli-mcp-oauth.js +5 -5
  237. package/dist/internal/cli-mcp.js +3 -3
  238. package/dist/internal/cli-migrate.js +1 -1
  239. package/dist/internal/cli-skills.js +2 -2
  240. package/dist/internal/cli-slack.js +5 -5
  241. package/dist/internal/cloud-turn-cost.js +1 -1
  242. package/dist/internal/continuation-identity.js +6 -6
  243. package/dist/internal/conversation-mirror.js +5 -5
  244. package/dist/internal/convert-automation/convert-workflow.js +24 -24
  245. package/dist/internal/cursor/account-mcp.d.ts.map +1 -1
  246. package/dist/internal/cursor/account-mcp.js +20 -20
  247. package/dist/internal/cursor/backend-client.js +6 -6
  248. package/dist/internal/cursor/credentials.js +1 -1
  249. package/dist/internal/cursor/store-api-client.js +1 -1
  250. package/dist/internal/cursor-account-mcp-auth.js +9 -9
  251. package/dist/internal/cursor-deployment-relay.d.ts.map +1 -1
  252. package/dist/internal/cursor-deployment-relay.js +9 -9
  253. package/dist/internal/cursor-event-relay.js +10 -10
  254. package/dist/internal/cursor-relay-core.js +2 -2
  255. package/dist/internal/deploy-client.d.ts.map +1 -1
  256. package/dist/internal/deploy-client.js +3 -0
  257. package/dist/internal/deploy-manifest.js +10 -10
  258. package/dist/internal/discovery/agent-config.js +2 -2
  259. package/dist/internal/discovery/agent.js +6 -6
  260. package/dist/internal/discovery/connections.js +5 -5
  261. package/dist/internal/discovery/cursor-plugin.js +12 -12
  262. package/dist/internal/discovery/extension-overlay.js +3 -3
  263. package/dist/internal/discovery/extensions.js +6 -6
  264. package/dist/internal/discovery/info.js +9 -9
  265. package/dist/internal/discovery/instructions.js +1 -1
  266. package/dist/internal/discovery/project.js +3 -3
  267. package/dist/internal/discovery/services.js +1 -1
  268. package/dist/internal/discovery/tools.js +1 -1
  269. package/dist/internal/docs-site.js +2 -2
  270. package/dist/internal/env-file.js +1 -1
  271. package/dist/internal/eval-run-store.js +7 -7
  272. package/dist/internal/eval-runner.d.ts.map +1 -1
  273. package/dist/internal/eval-runner.js +14 -14
  274. package/dist/internal/eval-transport.js +1 -1
  275. package/dist/internal/evals-client.js +4 -4
  276. package/dist/internal/event-log.js +8 -8
  277. package/dist/internal/event-mapper.js +13 -13
  278. package/dist/internal/expected-delivery-failure.js +2 -2
  279. package/dist/internal/filesystem/format.js +2 -2
  280. package/dist/internal/filesystem/nearest.js +3 -3
  281. package/dist/internal/filesystem/scratch.js +3 -3
  282. package/dist/internal/filesystem/tools.js +6 -6
  283. package/dist/internal/filesystem/walk.d.ts.map +1 -1
  284. package/dist/internal/filesystem/walk.js +2 -2
  285. package/dist/internal/framework-file-storage.d.ts.map +1 -1
  286. package/dist/internal/framework-file-storage.js +6 -5
  287. package/dist/internal/framework-storage-selection.d.ts.map +1 -1
  288. package/dist/internal/framework-storage-selection.js +4 -2
  289. package/dist/internal/github-fanout.d.ts.map +1 -1
  290. package/dist/internal/github-fanout.js +3 -3
  291. package/dist/internal/guest-network.js +4 -4
  292. package/dist/internal/host-files.js +1 -1
  293. package/dist/internal/host-kv.js +2 -2
  294. package/dist/internal/hosted-catch-protocol.js +1 -1
  295. package/dist/internal/hosted-catch.js +1 -1
  296. package/dist/internal/hosted-delivery-protocol.d.ts.map +1 -1
  297. package/dist/internal/hosted-delivery-protocol.js +14 -14
  298. package/dist/internal/hosted-delivery.d.ts.map +1 -1
  299. package/dist/internal/hosted-delivery.js +23 -9
  300. package/dist/internal/hosted-eval-cases.js +4 -4
  301. package/dist/internal/hosted-execution-diag.js +3 -3
  302. package/dist/internal/hosting.js +1 -1
  303. package/dist/internal/http-channel.js +1 -1
  304. package/dist/internal/http-control-plane-session.js +2 -2
  305. package/dist/internal/init-interview.js +7 -7
  306. package/dist/internal/init-project.d.ts.map +1 -1
  307. package/dist/internal/init-project.js +12 -12
  308. package/dist/internal/inline-stdio-mcp.js +2 -2
  309. package/dist/internal/install-cursor-skills.js +11 -11
  310. package/dist/internal/json-schema.js +1 -1
  311. package/dist/internal/local-control-plane.js +3 -3
  312. package/dist/internal/local-env.js +3 -3
  313. package/dist/internal/log-ring.js +1 -1
  314. package/dist/internal/logs-client.js +1 -1
  315. package/dist/internal/mcp-endpoint.js +8 -8
  316. package/dist/internal/mcp-host.d.ts.map +1 -1
  317. package/dist/internal/mcp-host.js +5 -5
  318. package/dist/internal/mcp-oauth-on-demand.js +3 -3
  319. package/dist/internal/mcp-oauth.js +5 -5
  320. package/dist/internal/net.js +2 -2
  321. package/dist/internal/otel/config.js +3 -3
  322. package/dist/internal/otel/runtime.js +13 -13
  323. package/dist/internal/peer-connections.js +2 -2
  324. package/dist/internal/persistent-stage-log-mirror.d.ts +57 -0
  325. package/dist/internal/persistent-stage-log-mirror.d.ts.map +1 -0
  326. package/dist/internal/persistent-stage-log-mirror.js +231 -0
  327. package/dist/internal/platform-schedule-sync.js +1 -1
  328. package/dist/internal/platform-timers.js +1 -1
  329. package/dist/internal/playground/static.js +2 -2
  330. package/dist/internal/playground/toolchain.js +2 -2
  331. package/dist/internal/playground-proxy.js +3 -3
  332. package/dist/internal/process-memory-telemetry.js +1 -1
  333. package/dist/internal/reminder-runner.d.ts +1 -1
  334. package/dist/internal/reminder-runner.d.ts.map +1 -1
  335. package/dist/internal/reminder-runner.js +14 -16
  336. package/dist/internal/reminder-store.js +1 -1
  337. package/dist/internal/resolved-connections.js +8 -8
  338. package/dist/internal/router.js +4 -4
  339. package/dist/internal/run-client.js +2 -2
  340. package/dist/internal/schedule-runner.js +6 -6
  341. package/dist/internal/sdk-runner.d.ts.map +1 -1
  342. package/dist/internal/sdk-runner.js +6 -6
  343. package/dist/internal/serve-restart.js +1 -1
  344. package/dist/internal/server.d.ts.map +1 -1
  345. package/dist/internal/server.js +93 -72
  346. package/dist/internal/session-cost.js +3 -3
  347. package/dist/internal/session-engine.d.ts +8 -0
  348. package/dist/internal/session-engine.d.ts.map +1 -1
  349. package/dist/internal/session-engine.js +183 -118
  350. package/dist/internal/session-live-publisher.d.ts +46 -0
  351. package/dist/internal/session-live-publisher.d.ts.map +1 -0
  352. package/dist/internal/session-live-publisher.js +352 -0
  353. package/dist/internal/session-run-log.js +6 -6
  354. package/dist/internal/sessions-client.js +3 -3
  355. package/dist/internal/skill-catalog.js +2 -2
  356. package/dist/internal/sleep.js +1 -1
  357. package/dist/internal/start-log-store.d.ts +5 -1
  358. package/dist/internal/start-log-store.d.ts.map +1 -1
  359. package/dist/internal/start-log-store.js +5 -3
  360. package/dist/internal/storage-coordinator.js +12 -12
  361. package/dist/internal/store-api-protocol.d.ts +51 -0
  362. package/dist/internal/store-api-protocol.d.ts.map +1 -1
  363. package/dist/internal/store-api-protocol.js +39 -2
  364. package/dist/internal/store-mirror.js +4 -4
  365. package/dist/internal/stream-progress.d.ts.map +1 -1
  366. package/dist/internal/stream-progress.js +4 -0
  367. package/dist/internal/terminal-style.js +2 -2
  368. package/dist/internal/tool-call-retry.d.ts +87 -0
  369. package/dist/internal/tool-call-retry.d.ts.map +1 -0
  370. package/dist/internal/tool-call-retry.js +387 -0
  371. package/dist/internal/tool-result.js +3 -3
  372. package/dist/internal/trajectory.js +7 -7
  373. package/dist/internal/turn-governor.js +2 -2
  374. package/dist/internal/turn-outbox.js +1 -1
  375. package/dist/internal/update-check.d.ts.map +1 -1
  376. package/dist/internal/update-check.js +4 -2
  377. package/dist/internal/v2-hosting.d.ts +6 -0
  378. package/dist/internal/v2-hosting.d.ts.map +1 -1
  379. package/dist/internal/v2-hosting.js +7 -1
  380. package/dist/internal/workspace.js +4 -4
  381. package/dist/kv/memory-kv.js +3 -3
  382. package/dist/playground/assets/{index-JekUQERK.js → index-HN5lOuAX.js} +42 -42
  383. package/dist/playground/assets/index-JY1wKCMg.css +1 -0
  384. package/dist/playground/index.html +2 -2
  385. package/dist/prompt.js +1 -1
  386. package/dist/storage-backends/cursor-hosted-v2.js +2 -2
  387. package/dist/storage-backends/file-kv.js +7 -7
  388. package/dist/storage-protocol.d.ts +7 -0
  389. package/dist/storage-protocol.d.ts.map +1 -1
  390. package/dist/storage-protocol.js +7 -0
  391. package/dist/storage.js +3 -3
  392. package/dist/types.d.ts +15 -0
  393. package/dist/types.d.ts.map +1 -1
  394. package/dist/types.js +4 -4
  395. package/docs/reference/connections.md +2 -1
  396. package/docs/reference/hooks.md +1 -0
  397. package/docs/reference/sessions.md +1 -1
  398. package/docs/reference/tools.md +11 -0
  399. package/package.json +6 -6
  400. package/templates/agentic-owners/bot/channels/github.ts +2 -2
  401. package/templates/agentic-owners/bot/lib/github.ts +7 -5
  402. package/templates/agentic-owners/bot/lib/owners/decision.ts +9 -9
  403. package/templates/agentic-owners/bot/lib/owners/handles.ts +2 -2
  404. package/templates/agentic-owners/bot/lib/owners/match.ts +5 -3
  405. package/templates/agentic-owners/bot/lib/owners/matching.ts +1 -1
  406. package/templates/agentic-owners/bot/lib/owners/parse.ts +4 -4
  407. package/templates/agentic-owners/bot/lib/owners/prompt.ts +1 -1
  408. package/templates/agentic-owners/bot/lib/review.ts +18 -17
  409. package/templates/agentic-owners/evals/owners.eval.ts +2 -2
  410. package/templates/agents-md/bot/lib/collect.ts +6 -6
  411. package/templates/agents-md/bot/lib/config.ts +1 -1
  412. package/templates/agents-md/bot/tools/apply_agents.ts +4 -4
  413. package/templates/code-wiki/bot/channels/github.ts +3 -3
  414. package/templates/code-wiki/bot/lib/repos.ts +1 -1
  415. package/templates/code-wiki/bot/tools/apply_wiki.ts +2 -2
  416. package/templates/demo/bot/lib/collect.ts +1 -1
  417. package/templates/demo/bot/lib/repos.ts +1 -1
  418. package/templates/demo/bot/tools/record_demo.ts +1 -1
  419. package/templates/pr-autofixer/bot/channels/github.ts +2 -2
  420. package/templates/pr-autofixer/bot/lib/merge-watch.ts +2 -2
  421. package/templates/pr-autofixer/bot/lib/repos.ts +2 -2
  422. package/templates/pr-autofixer/bot/lib/webhook-routing.ts +1 -1
  423. package/templates/security-help/bot/lib/repos.ts +1 -1
  424. package/templates/security-reviewer/bot/lib/repos.ts +1 -1
  425. package/templates/triage/bot/lib/actuate.ts +15 -15
  426. package/dist/docs/assets/chunks/@localSearchIndexroot.CtLtpWcx.js +0 -1
  427. package/dist/docs/assets/chunks/channel.CBwrU9rP.js +0 -1
  428. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.CbC_mrvB.js +0 -1
  429. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.CbC_mrvB.js +0 -1
  430. package/dist/docs/assets/chunks/clone.BTvFyY1a.js +0 -1
  431. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.BYXl4LW6.js +0 -1
  432. package/dist/docs/assets/chunks/wardley-RL74JXVD.iXazD3Z7.js +0 -162
  433. package/dist/playground/assets/index-DXm_VXAQ.css +0 -1
  434. /package/dist/docs/assets/{reference_connections.md.Bljpve-y.lean.js → reference_connections.md.DLrgAd5f.lean.js} +0 -0
  435. /package/dist/docs/assets/{reference_sessions.md.CM5zo3w4.lean.js → reference_sessions.md.CyM7ARz1.lean.js} +0 -0
  436. /package/dist/docs/assets/{reference_skills.md.C0guGcH0.lean.js → reference_skills.md.ClkMoQsV.lean.js} +0 -0
@@ -56,8 +56,8 @@ export function verifyV1edWebhookPayload(args) {
56
56
  }), "utf8");
57
57
  const candidateSignatures = signatureHeader
58
58
  .split(/\s+/)
59
- .filter(entry => entry.startsWith(`${V1ED_SIGNATURE_VERSION},`))
60
- .map(entry => entry.slice(V1ED_SIGNATURE_VERSION.length + 1))
59
+ .filter((entry) => entry.startsWith(`${V1ED_SIGNATURE_VERSION},`))
60
+ .map((entry) => entry.slice(V1ED_SIGNATURE_VERSION.length + 1))
61
61
  .slice(0, MAX_V1ED_CANDIDATE_SIGNATURES);
62
62
  if (candidateSignatures.length === 0) {
63
63
  return false;
@@ -221,7 +221,7 @@ export function buildAgenticEvents(options) {
221
221
  if (skip(event, ctx.session.dryRun)) {
222
222
  return;
223
223
  }
224
- const calls = event.data.calls.filter(call => !isOwnedSignal(call.toolName));
224
+ const calls = event.data.calls.filter((call) => !isOwnedSignal(call.toolName));
225
225
  const line = takeToolChipLine(channel.state, status.tools, calls);
226
226
  if (line === undefined) {
227
227
  return;
@@ -439,7 +439,7 @@ async function applyEdit(args) {
439
439
  ts,
440
440
  text: edit.message,
441
441
  }),
442
- ok: slackTs => {
442
+ ok: (slackTs) => {
443
443
  setPostedText(args.sessionId, slackTs, edit.message);
444
444
  },
445
445
  });
@@ -461,7 +461,7 @@ async function applyDelete(args) {
461
461
  channel: channelId,
462
462
  ts,
463
463
  }),
464
- ok: slackTs => {
464
+ ok: (slackTs) => {
465
465
  remove(args.sessionId, removed.ts);
466
466
  if (args.channel.state.lastBotMessageTs === slackTs) {
467
467
  args.channel.state.lastBotMessageTs = latest(args.sessionId) ?? null;
@@ -34,7 +34,7 @@ export function isSignal(toolName, signal) {
34
34
  return toolName === signal || toolName.endsWith(`__${signal}`);
35
35
  }
36
36
  export function isOwnedSignal(toolName) {
37
- return OWNED_SIGNALS.some(signal => isSignal(toolName, signal));
37
+ return OWNED_SIGNALS.some((signal) => isSignal(toolName, signal));
38
38
  }
39
39
  function asObject(output) {
40
40
  if (typeof output === "string") {
@@ -104,8 +104,8 @@ export function truncateTypingStatus(status, max) {
104
104
  */
105
105
  export function truncateLoadingMessages(messages, nowMs = Date.now()) {
106
106
  const cleaned = messages
107
- .map(message => truncateTypingStatus(message, SLACK_LOADING_MESSAGE_MAX_LEN))
108
- .filter(message => message.length > 0);
107
+ .map((message) => truncateTypingStatus(message, SLACK_LOADING_MESSAGE_MAX_LEN))
108
+ .filter((message) => message.length > 0);
109
109
  if (cleaned.length <= SLACK_LOADING_MESSAGES_MAX) {
110
110
  return cleaned;
111
111
  }
@@ -158,7 +158,7 @@ export async function setThreadStatus(args) {
158
158
  if (status.length > 0) {
159
159
  const loadingRaw = args.loadingMessages !== undefined && args.loadingMessages.length > 0
160
160
  ? args.loadingMessages
161
- : [status, ...SLACK_DEFAULT_LOADING_MESSAGES.filter(m => m !== status)];
161
+ : [status, ...SLACK_DEFAULT_LOADING_MESSAGES.filter((m) => m !== status)];
162
162
  const loading_messages = truncateLoadingMessages(loadingRaw);
163
163
  if (loading_messages.length > 0) {
164
164
  body.loading_messages = loading_messages;
@@ -205,7 +205,7 @@ export async function setThreadTitle(args) {
205
205
  export async function setSuggestedPrompts(args) {
206
206
  const body = {
207
207
  channel_id: args.channelId,
208
- prompts: args.prompts.map(p => ({
208
+ prompts: args.prompts.map((p) => ({
209
209
  title: p.title,
210
210
  message: p.message,
211
211
  })),
@@ -304,7 +304,7 @@ const SLACK_MRKDWN_LINK_PATTERN = /<https?:\/\/[^|>]+\|/;
304
304
  export function markdownToSlackMrkdwn(markdown) {
305
305
  const literals = [];
306
306
  const placeholder = (index) => `\ue000SLACK_LITERAL_${index}\ue001`;
307
- const protectedMarkdown = markdown.replace(SLACK_MRKDWN_LITERAL_PATTERN, literal => {
307
+ const protectedMarkdown = markdown.replace(SLACK_MRKDWN_LITERAL_PATTERN, (literal) => {
308
308
  const index = literals.push(literal) - 1;
309
309
  return placeholder(index);
310
310
  });
@@ -61,7 +61,7 @@ export function redactSensitiveValues(value) {
61
61
  return value;
62
62
  }
63
63
  if (Array.isArray(value)) {
64
- return value.map(item => redactSensitiveValues(item));
64
+ return value.map((item) => redactSensitiveValues(item));
65
65
  }
66
66
  if (typeof value === "object") {
67
67
  const out = {};
@@ -364,9 +364,9 @@ export async function prepareSlackAttachments(options) {
364
364
  const maxFileBytes = options.maxFileBytes ?? DEFAULT_MAX_FILE_BYTES;
365
365
  const maxTotalBytes = options.maxTotalBytes ?? DEFAULT_MAX_TOTAL_BYTES;
366
366
  const downloadTimeoutMs = options.downloadTimeoutMs ?? DEFAULT_DOWNLOAD_TIMEOUT_MS;
367
- const messageFileIds = new Set(options.files.map(file => file.id));
368
- const threadFiles = (options.threadFiles ?? []).filter(file => !messageFileIds.has(file.id));
369
- const threadFileIds = new Set(threadFiles.map(file => file.id));
367
+ const messageFileIds = new Set(options.files.map((file) => file.id));
368
+ const threadFiles = (options.threadFiles ?? []).filter((file) => !messageFileIds.has(file.id));
369
+ const threadFileIds = new Set(threadFiles.map((file) => file.id));
370
370
  const loaded = await Promise.all([...options.files, ...threadFiles].slice(0, maxFiles).map(async (file) => {
371
371
  const classification = classifySlackFile(file);
372
372
  if (classification === undefined) {
@@ -35,7 +35,7 @@ export function mrkdwnSections(lines) {
35
35
  if (current !== "") {
36
36
  texts.push(current);
37
37
  }
38
- return texts.map(text => ({
38
+ return texts.map((text) => ({
39
39
  type: "section",
40
40
  text: { type: "mrkdwn", text },
41
41
  }));
@@ -78,10 +78,10 @@ export function slackTableBlock(args) {
78
78
  throw new Error(`slackTableBlock: row ${index} has ${row.length} cells; expected ${columnCount}`);
79
79
  }
80
80
  }
81
- const headerRow = args.headers.map(header => slackRawTextCell(header));
81
+ const headerRow = args.headers.map((header) => slackRawTextCell(header));
82
82
  const block = {
83
83
  type: "table",
84
- rows: [headerRow, ...args.rows.map(row => [...row])],
84
+ rows: [headerRow, ...args.rows.map((row) => [...row])],
85
85
  };
86
86
  if (args.columnSettings !== undefined && args.columnSettings.length > 0) {
87
87
  block.column_settings = [...args.columnSettings];
@@ -79,7 +79,7 @@ export function buildDelegationMetadata(args) {
79
79
  * construction (fail at definition time) and the gate (fail at start).
80
80
  */
81
81
  export function normalizeBotMentionAllowlist(allowFrom) {
82
- const entries = allowFrom.map(entry => entry.trim()).filter(entry => entry !== "");
82
+ const entries = allowFrom.map((entry) => entry.trim()).filter((entry) => entry !== "");
83
83
  if (entries.length === 0) {
84
84
  throw new Error("slackChannel engagement.botMentions.allowFrom must list at least one bot id (B…) or bot user id (U…); there is no wildcard.");
85
85
  }
@@ -98,8 +98,8 @@ export function normalizeBotMentionAllowlist(allowFrom) {
98
98
  export function botMentionsFromEnv(envVar = "AGENT_DELEGATOR_SLACK_BOT_IDS") {
99
99
  const allowFrom = (process.env[envVar] ?? "")
100
100
  .split(",")
101
- .map(entry => entry.trim())
102
- .filter(entry => entry !== "");
101
+ .map((entry) => entry.trim())
102
+ .filter((entry) => entry !== "");
103
103
  return allowFrom.length === 0 ? undefined : { allowFrom };
104
104
  }
105
105
  /**
@@ -179,7 +179,7 @@ export class SlackBotMentionGate {
179
179
  recent: [],
180
180
  lastAtMs: nowMs,
181
181
  };
182
- budget.recent = budget.recent.filter(atMs => atMs > nowMs - this.windowMs);
182
+ budget.recent = budget.recent.filter((atMs) => atMs > nowMs - this.windowMs);
183
183
  if (budget.total >= this.maxPerThreadTotal) {
184
184
  return {
185
185
  allow: false,
@@ -32,8 +32,8 @@ export const CHANNEL_POSTS_MAX_CHANNEL_IDS = 10;
32
32
  * started. Top-level posts do not match it (`posts: "replies"`).
33
33
  */
34
34
  export function channelPostsWatchEverywhere(entries) {
35
- const trimmed = entries.map(entry => entry.trim()).filter(entry => entry !== "");
36
- return trimmed.length > 0 && trimmed.every(entry => entry === "*");
35
+ const trimmed = entries.map((entry) => entry.trim()).filter((entry) => entry !== "");
36
+ return trimmed.length > 0 && trimmed.every((entry) => entry === "*");
37
37
  }
38
38
  /** The channel-id (`C…`/`G…`) entries of an allowlist, deduped. */
39
39
  export function channelPostIdEntries(entries) {
@@ -54,7 +54,7 @@ export function validateChannelPostsAllow(entries) {
54
54
  if (channelPostsWatchEverywhere(entries)) {
55
55
  return undefined;
56
56
  }
57
- if (entries.some(entry => entry.trim() === "*")) {
57
+ if (entries.some((entry) => entry.trim() === "*")) {
58
58
  return ('must not mix "*": a lone "*" watches every channel the bot is in, ' +
59
59
  "thread replies only. Otherwise list channel ids (C…/G…), up to " +
60
60
  `${CHANNEL_POSTS_MAX_CHANNEL_IDS} channels.`);
@@ -119,7 +119,7 @@ export class SlackChannelAllowlist {
119
119
  * returns whatever resolved; the caller logs names that stayed unresolved.
120
120
  */
121
121
  export async function resolveChannelNames(client, names, log = defaultSlackLog) {
122
- const wanted = new Set(names.map(name => name.toLowerCase()));
122
+ const wanted = new Set(names.map((name) => name.toLowerCase()));
123
123
  const resolved = new Map();
124
124
  if (wanted.size === 0) {
125
125
  return resolved;
@@ -126,9 +126,9 @@ async function mergeGitignore(path) {
126
126
  }
127
127
  const have = new Set(existing
128
128
  .split(/\r?\n/)
129
- .map(line => line.trim())
130
- .filter(line => line !== ""));
131
- const missing = lines.filter(line => !have.has(line));
129
+ .map((line) => line.trim())
130
+ .filter((line) => line !== ""));
131
+ const missing = lines.filter((line) => !have.has(line));
132
132
  if (missing.length === 0) {
133
133
  return false;
134
134
  }
@@ -508,7 +508,7 @@ export async function dispatchInboundMessage(args) {
508
508
  "",
509
509
  media.userText,
510
510
  ]
511
- .filter(part => part.length > 0)
511
+ .filter((part) => part.length > 0)
512
512
  .join("\n");
513
513
  const paintedStart = painted !== undefined;
514
514
  const placeholderLine = args.placeholder;
@@ -269,7 +269,7 @@ export async function runSlackDoctor(options = {}) {
269
269
  }
270
270
  }
271
271
  return {
272
- ok: checks.every(check => check.ok),
272
+ ok: checks.every((check) => check.ok),
273
273
  checks,
274
274
  envKeys,
275
275
  notes: [eventSubscriptionNote()],
@@ -35,7 +35,7 @@ export function parseSlackEvalDirective(text) {
35
35
  if (body.length === 0) {
36
36
  return null;
37
37
  }
38
- const tokens = body.split(/\s+/).filter(t => t.length > 0);
38
+ const tokens = body.split(/\s+/).filter((t) => t.length > 0);
39
39
  if (tokens.length === 0 || !/^eval$/i.test(tokens[0] ?? "")) {
40
40
  return null;
41
41
  }
@@ -62,7 +62,7 @@ export async function paintSlackFooter(args) {
62
62
  });
63
63
  }
64
64
  export function slackSessionFooter(opts) {
65
- return ctx => {
65
+ return (ctx) => {
66
66
  const url = dashboardSessionUrl(ctx.sessionId, { slug: opts?.slug });
67
67
  if (url === undefined) {
68
68
  return undefined;
@@ -223,7 +223,7 @@ export async function resolveBlockActionCard(args) {
223
223
  ts: action.messageTs,
224
224
  text: note,
225
225
  blocks: [
226
- ...action.messageBlocks.filter(block => !clicked(block)),
226
+ ...action.messageBlocks.filter((block) => !clicked(block)),
227
227
  { type: "context", elements: [{ type: "mrkdwn", text: note }] },
228
228
  ],
229
229
  });
@@ -288,7 +288,7 @@ export async function dispatchBlockAction(payload, deps) {
288
288
  await dispatchInboundMessage({
289
289
  kind: "block_action",
290
290
  message: blockActionAsMessage(action, deps.installTeamId),
291
- handler: ctx => deps.handler(ctx, action),
291
+ handler: (ctx) => deps.handler(ctx, action),
292
292
  send: deps.send,
293
293
  credentials: deps.credentials,
294
294
  host: deps.host,
@@ -1 +1 @@
1
- {"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/log.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,MAAM,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;AAEnD,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAEhE,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;AAE1F,MAAM,WAAW,QAAQ;IACvB,gEAAgE;IAChE,KAAK,EAAE,aAAa,CAAC;IACrB,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,cAAc,KAAK,IAAI,CAAC;IAC1D,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,cAAc,KAAK,IAAI,CAAC;IACzD,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,cAAc,KAAK,IAAI,CAAC;IACzD,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,cAAc,KAAK,IAAI,CAAC;CAC3D;AAED,qDAAqD;AACrD,wBAAgB,oBAAoB,CAAC,MAAM,CAAC,EAAE,cAAc,GAAG,MAAM,CAcpE;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,cAAc,GACtB,MAAM,CAGR;AAED,wBAAgB,iBAAiB,CAAC,KAAK,GAAE,aAAyC,GAAG,QAAQ,CAe5F;AAED,sDAAsD;AACtD,eAAO,MAAM,eAAe,EAAE,QAA8B,CAAC"}
1
+ {"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/log.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,MAAM,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;AAEnD,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAEhE,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;AAE1F,MAAM,WAAW,QAAQ;IACvB,gEAAgE;IAChE,KAAK,EAAE,aAAa,CAAC;IACrB,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,cAAc,KAAK,IAAI,CAAC;IAC1D,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,cAAc,KAAK,IAAI,CAAC;IACzD,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,cAAc,KAAK,IAAI,CAAC;IACzD,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,cAAc,KAAK,IAAI,CAAC;CAC3D;AAED,qDAAqD;AACrD,wBAAgB,oBAAoB,CAAC,MAAM,CAAC,EAAE,cAAc,GAAG,MAAM,CAcpE;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,cAAc,GACtB,MAAM,CAGR;AAED,wBAAgB,iBAAiB,CAAC,KAAK,GAAE,aAA2C,GAAG,QAAQ,CAe9F;AAED,sDAAsD;AACtD,eAAO,MAAM,eAAe,EAAE,QAA8B,CAAC"}
@@ -25,7 +25,7 @@ export function formatSlackLogLine(level, message, fields) {
25
25
  const levelTag = level === "info" ? "" : `${level} `;
26
26
  return `${SLACK_LOG_PREFIX} ${levelTag}${message}${formatSlackLogFields(fields)}`;
27
27
  }
28
- export function createSlackLogger(write = line => console.log(line)) {
28
+ export function createSlackLogger(write = (line) => console.log(line)) {
29
29
  const emit = (level, message, fields) => {
30
30
  write(formatSlackLogLine(level, message, fields));
31
31
  };
@@ -101,7 +101,7 @@ export function buildSlackManifest(options) {
101
101
  const includeAgentView = options.assistant !== false;
102
102
  const botScopes = includeAgentView
103
103
  ? [...BOT_SCOPES]
104
- : BOT_SCOPES.filter(scope => scope !== "assistant:write");
104
+ : BOT_SCOPES.filter((scope) => scope !== "assistant:write");
105
105
  const suggested = options.suggestedPrompts !== undefined ? options.suggestedPrompts : [];
106
106
  return {
107
107
  display_information: {
@@ -189,7 +189,7 @@ export async function materializeSlackNudgeCarrier(args) {
189
189
  const hooks = { ...(existing.hooks ?? {}) };
190
190
  const command = `node ${SLACK_NUDGE_CARRIER_REL}`;
191
191
  for (const step of ["preToolUse", "postToolUse"]) {
192
- const list = [...(hooks[step] ?? [])].filter(entry => !entry.command.includes("slack-nudge-carrier"));
192
+ const list = [...(hooks[step] ?? [])].filter((entry) => !entry.command.includes("slack-nudge-carrier"));
193
193
  list.push({ command, failClosed: false });
194
194
  hooks[step] = list;
195
195
  }
@@ -82,7 +82,7 @@ export class SlackNudgeStore {
82
82
  }
83
83
  const pending = await this.listPending(continuationKey);
84
84
  const hash = contentHash(text);
85
- if (pending.some(item => item.sourceTs === sourceTs || item.contentHash === hash)) {
85
+ if (pending.some((item) => item.sourceTs === sourceTs || item.contentHash === hash)) {
86
86
  return false;
87
87
  }
88
88
  const record = {
@@ -212,7 +212,7 @@ export class SlackNudgeStore {
212
212
  return;
213
213
  }
214
214
  const pending = await this.listPending(key);
215
- const record = pending.find(item => item.sourceTs === ts);
215
+ const record = pending.find((item) => item.sourceTs === ts);
216
216
  await mkdir(this.deliveredDir(key), { recursive: true });
217
217
  const dest = this.deliveredPath(key, ts);
218
218
  const tmp = `${dest}.${process.pid}.tmp`;
@@ -54,7 +54,7 @@ export function createRecordingSlackSink(options = {}) {
54
54
  const holdMethods = Array.isArray(options.hold) ? new Set(options.hold) : undefined;
55
55
  const gated = holdAll || holdMethods !== undefined;
56
56
  const gate = gated
57
- ? new Promise(resolve => {
57
+ ? new Promise((resolve) => {
58
58
  releaseHeld = resolve;
59
59
  })
60
60
  : Promise.resolve();
@@ -108,14 +108,14 @@ export function createRecordingSlackSink(options = {}) {
108
108
  return {
109
109
  transport,
110
110
  calls,
111
- methods: () => calls.map(call => call.method),
111
+ methods: () => calls.map((call) => call.method),
112
112
  texts: () => calls
113
- .filter(call => readableCall(call) !== undefined)
114
- .map(call => textOf(call.args))
115
- .filter(text => text !== ""),
113
+ .filter((call) => readableCall(call) !== undefined)
114
+ .map((call) => textOf(call.args))
115
+ .filter((text) => text !== ""),
116
116
  firstReadable: () => firstReadableCall(calls),
117
117
  lastReadable: () => lastReadableCall(calls),
118
- chunks: () => calls.flatMap(call => {
118
+ chunks: () => calls.flatMap((call) => {
119
119
  const chunks = call.args.chunks;
120
120
  return Array.isArray(chunks) ? chunks : [];
121
121
  }),
@@ -36,22 +36,22 @@ export const DEFAULT_REASONING_CARD_TITLE = "Thinking";
36
36
  export const DEFAULT_REASONING_CARD_MAX_CHARS = 1500;
37
37
  function resolveToolLabel(labels) {
38
38
  if (labels === undefined) {
39
- return toolName => toolName;
39
+ return (toolName) => toolName;
40
40
  }
41
41
  const lookup = typeof labels === "function" ? labels : (name) => labels[name];
42
- return toolName => {
42
+ return (toolName) => {
43
43
  const label = lookup(toolName);
44
44
  return label === undefined || label === "" ? toolName : label;
45
45
  };
46
46
  }
47
47
  function defaultToolStatusLine(toolLabel) {
48
- return calls => {
49
- const names = [...new Set(calls.map(call => toolLabel(call.toolName)))];
48
+ return (calls) => {
49
+ const names = [...new Set(calls.map((call) => toolLabel(call.toolName)))];
50
50
  return `Running ${names.join(", ")}…`;
51
51
  };
52
52
  }
53
53
  function resolveIdle(idle) {
54
- const cleaned = (idle ?? []).filter(line => line.trim() !== "");
54
+ const cleaned = (idle ?? []).filter((line) => line.trim() !== "");
55
55
  return cleaned.length > 0 ? cleaned : [...SLACK_DEFAULT_LOADING_MESSAGES];
56
56
  }
57
57
  function resolveReasoningCard(option) {
@@ -131,7 +131,7 @@ export function resolveSlackReply(options) {
131
131
  if (options.reply !== undefined) {
132
132
  reply = options.reply;
133
133
  if (legacy !== null) {
134
- const ignored = ["streaming", "thinkingSteps", "loadingMessages"].filter(key => options[key] !== undefined);
134
+ const ignored = ["streaming", "thinkingSteps", "loadingMessages"].filter((key) => options[key] !== undefined);
135
135
  deprecations.push(`slackChannel({ ${ignored.join(", ")} }) is ignored because reply is set; remove the deprecated option${ignored.length === 1 ? "" : "s"}.`);
136
136
  }
137
137
  }
@@ -1,15 +1,18 @@
1
1
  /**
2
- * The agent's own Slack identity, from `auth.test`. A turn's prompt carries
3
- * it so the model can tell which `<@U…>` mention is itself.
2
+ * The agent's own Slack identity. A turn's prompt carries it so the model
3
+ * can tell which `<@U…>` mention is itself.
4
4
  */
5
5
  import type { SlackBotToken } from "./types.js";
6
6
  export interface SlackSelfIdentity {
7
7
  /** The app's bot *user* id (`U…`) — what `<@…>` mentions carry. */
8
8
  userId: string;
9
- /** The app's handle, e.g. `debug` for `@debug`. */
9
+ /**
10
+ * Name Slack shows for this app: the profile name from `users.info`, or
11
+ * the `auth.test` handle when that lookup yields nothing.
12
+ */
10
13
  name?: string;
11
14
  }
12
15
  export declare function resetSlackSelfIdentityCache(): void;
13
- /** Cached per token. A missing token or any failure resolves to undefined. */
16
+ /** Cached per token. A missing token or any `auth.test` failure resolves to undefined. */
14
17
  export declare function resolveSlackSelfIdentity(botToken: SlackBotToken | undefined): Promise<SlackSelfIdentity | undefined>;
15
18
  //# sourceMappingURL=self-identity.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"self-identity.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/self-identity.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,MAAM,WAAW,iBAAiB;IAChC,mEAAmE;IACnE,MAAM,EAAE,MAAM,CAAC;IACf,mDAAmD;IACnD,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAID,wBAAgB,2BAA2B,IAAI,IAAI,CAElD;AAED,8EAA8E;AAC9E,wBAAsB,wBAAwB,CAC5C,QAAQ,EAAE,aAAa,GAAG,SAAS,GAClC,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC,CA4BxC"}
1
+ {"version":3,"file":"self-identity.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/self-identity.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGhD,MAAM,WAAW,iBAAiB;IAChC,mEAAmE;IACnE,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAID,wBAAgB,2BAA2B,IAAI,IAAI,CAElD;AAYD,0FAA0F;AAC1F,wBAAsB,wBAAwB,CAC5C,QAAQ,EAAE,aAAa,GAAG,SAAS,GAClC,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC,CA0BxC"}
@@ -1,13 +1,24 @@
1
1
  /**
2
- * The agent's own Slack identity, from `auth.test`. A turn's prompt carries
3
- * it so the model can tell which `<@U…>` mention is itself.
2
+ * The agent's own Slack identity. A turn's prompt carries it so the model
3
+ * can tell which `<@U…>` mention is itself.
4
4
  */
5
5
  import { callSlackApi } from "./api.js";
6
+ import { fetchSlackUserInfo, slackUserName } from "./user-info.js";
6
7
  const identities = new Map();
7
8
  export function resetSlackSelfIdentityCache() {
8
9
  identities.clear();
9
10
  }
10
- /** Cached per token. A missing token or any failure resolves to undefined. */
11
+ /** Undefined when `users.info` fails, so the caller keeps the `auth.test` handle. */
12
+ async function profileName(botToken, userId) {
13
+ try {
14
+ const user = await fetchSlackUserInfo({ botToken, userId });
15
+ return user === undefined ? undefined : slackUserName(user);
16
+ }
17
+ catch {
18
+ return undefined;
19
+ }
20
+ }
21
+ /** Cached per token. A missing token or any `auth.test` failure resolves to undefined. */
11
22
  export async function resolveSlackSelfIdentity(botToken) {
12
23
  if (botToken === undefined) {
13
24
  return undefined;
@@ -26,11 +37,9 @@ export async function resolveSlackSelfIdentity(botToken) {
26
37
  if (result.ok !== true || userId === "") {
27
38
  return undefined;
28
39
  }
29
- const name = typeof result.user === "string" && result.user !== "" ? result.user : undefined;
30
- const identity = {
31
- userId,
32
- ...(name === undefined ? {} : { name }),
33
- };
40
+ const handle = typeof result.user === "string" && result.user !== "" ? result.user : undefined;
41
+ const name = (await profileName(botToken, userId)) ?? handle;
42
+ const identity = { userId, name };
34
43
  identities.set(botToken, identity);
35
44
  return identity;
36
45
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sender-name.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/sender-name.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAK7D,wBAAgB,yBAAyB,IAAI,IAAI,CAEhD;AAYD,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAsCD;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE;IAC7C,QAAQ,EAAE,aAAa,GAAG,SAAS,CAAC;IACpC,MAAM,EAAE,WAAW,GAAG,SAAS,CAAC;CACjC,GAAG,OAAO,CAAC,WAAW,CAAC,CAqBvB;AAED,wBAAsB,sBAAsB,CAAC,IAAI,EAAE;IACjD,QAAQ,EAAE,aAAa,GAAG,SAAS,CAAC;IACpC,MAAM,EAAE,WAAW,GAAG,SAAS,CAAC;CACjC,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAE9B"}
1
+ {"version":3,"file":"sender-name.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/sender-name.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAK7D,wBAAgB,yBAAyB,IAAI,IAAI,CAEhD;AAYD,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAiCD;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE;IAC7C,QAAQ,EAAE,aAAa,GAAG,SAAS,CAAC;IACpC,MAAM,EAAE,WAAW,GAAG,SAAS,CAAC;CACjC,GAAG,OAAO,CAAC,WAAW,CAAC,CAqBvB;AAED,wBAAsB,sBAAsB,CAAC,IAAI,EAAE;IACjD,QAAQ,EAAE,aAAa,GAAG,SAAS,CAAC;IACpC,MAAM,EAAE,WAAW,GAAG,SAAS,CAAC;CACjC,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAE9B"}
@@ -5,7 +5,7 @@
5
5
  * `bot_id`. The same `users.info` record gives a person's IANA timezone.
6
6
  */
7
7
  import { callSlackApi } from "./api.js";
8
- import { fetchSlackUserInfo } from "./user-info.js";
8
+ import { fetchSlackUserInfo, slackUserName } from "./user-info.js";
9
9
  const botNames = new Map();
10
10
  export function resetSlackSenderNameCache() {
11
11
  botNames.clear();
@@ -23,12 +23,8 @@ async function userSender(botToken, author) {
23
23
  if (user === undefined) {
24
24
  return {};
25
25
  }
26
- const profile = record(user.profile);
27
26
  return {
28
- name: text(profile?.display_name) ??
29
- text(profile?.real_name) ??
30
- text(user.real_name) ??
31
- text(user.name),
27
+ name: slackUserName(user),
32
28
  tz: author.isBot ? undefined : text(user.tz),
33
29
  };
34
30
  }
@@ -1 +1 @@
1
- {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/setup.ts"],"names":[],"mappings":"AACA;;;;;;;GAOG;AAEH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,eAAO,MAAM,kBAAkB,EAAE,eAAe,EA6D/C,CAAC;AAEF,+EAA+E;AAC/E,wBAAgB,uBAAuB,CAAC,OAAO,EAAE;IAC/C,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;CACvC,GAAG;IACF,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IACtC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC,CAQA;AAED,wBAAgB,qBAAqB,IAAI,MAAM,CAyB9C"}
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/setup.ts"],"names":[],"mappings":"AACA;;;;;;;GAOG;AAEH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,eAAO,MAAM,kBAAkB,EAAE,eAAe,EA6D/C,CAAC;AAEF,+EAA+E;AAC/E,wBAAgB,uBAAuB,CAAC,OAAO,EAAE;IAC/C,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;CACvC,GAAG;IACF,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IACtC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC,CAUA;AAED,wBAAgB,qBAAqB,IAAI,MAAM,CAyB9C"}
@@ -68,7 +68,7 @@ export function initialSlackSetupStatus(options) {
68
68
  updatedAt: new Date().toISOString(),
69
69
  envPrefix: options.envPrefix ?? null,
70
70
  envKeys: options.envKeys,
71
- phases: Object.fromEntries(SLACK_SETUP_PHASES.map(phase => [phase.id, phase.id === completed])),
71
+ phases: Object.fromEntries(SLACK_SETUP_PHASES.map((phase) => [phase.id, phase.id === completed])),
72
72
  };
73
73
  }
74
74
  export function formatSlackSetupGuide() {
@@ -537,8 +537,8 @@ export function slackChannel(authored = {}) {
537
537
  }
538
538
  const socketOptions = {
539
539
  appToken,
540
- logger: line => getLog().write(line),
541
- onEvent: payload => {
540
+ logger: (line) => getLog().write(line),
541
+ onEvent: (payload) => {
542
542
  dispatchInboundFromEventBody(payload, inboundDeps({
543
543
  send: args.send,
544
544
  waitUntil: args.waitUntil,
@@ -18,7 +18,7 @@ function createBridgeLogger(write) {
18
18
  if (rank[msgLevel] > rank[level]) {
19
19
  return;
20
20
  }
21
- const text = msgs.map(m => (typeof m === "string" ? m : JSON.stringify(m))).join(" ");
21
+ const text = msgs.map((m) => (typeof m === "string" ? m : JSON.stringify(m))).join(" ");
22
22
  write(`${SLACK_LOG_PREFIX} Socket Mode ${text}`);
23
23
  };
24
24
  return {
@@ -39,7 +39,7 @@ function invokeHandler(log, label, handler, payload) {
39
39
  try {
40
40
  const result = handler(payload);
41
41
  if (result !== undefined && typeof result.then === "function") {
42
- void Promise.resolve(result).catch(error => {
42
+ void Promise.resolve(result).catch((error) => {
43
43
  log(`${SLACK_LOG_PREFIX} Socket Mode ${label} failed: ${errorMessage(error)}`);
44
44
  });
45
45
  }
@@ -34,7 +34,7 @@ function excludeTimestampSet(excludeTs) {
34
34
  /** Keep the thread root plus the newest replies when over the fetch cap. */
35
35
  export function trimThreadMessagesForPrompt(messages, options) {
36
36
  const exclude = excludeTimestampSet(options.excludeTs);
37
- const filtered = messages.filter(message => {
37
+ const filtered = messages.filter((message) => {
38
38
  const ts = asString(message.ts);
39
39
  if (ts === undefined || ts === "") {
40
40
  return false;
@@ -47,14 +47,14 @@ export function trimThreadMessagesForPrompt(messages, options) {
47
47
  if (filtered.length <= options.limit) {
48
48
  return filtered;
49
49
  }
50
- const parentIndex = filtered.findIndex(message => asString(message.ts) === options.threadTs);
50
+ const parentIndex = filtered.findIndex((message) => asString(message.ts) === options.threadTs);
51
51
  const parent = parentIndex >= 0 ? filtered[parentIndex] : undefined;
52
52
  const withoutParent = parentIndex >= 0 ? filtered.filter((_message, index) => index !== parentIndex) : filtered;
53
53
  const tail = withoutParent.slice(Math.max(0, withoutParent.length - (options.limit - (parent === undefined ? 0 : 1))));
54
54
  if (parent === undefined) {
55
55
  return tail;
56
56
  }
57
- if (tail.some(message => asString(message.ts) === options.threadTs)) {
57
+ if (tail.some((message) => asString(message.ts) === options.threadTs)) {
58
58
  return tail;
59
59
  }
60
60
  return [parent, ...tail];
@@ -88,7 +88,7 @@ function formatThreadEntry(message, role) {
88
88
  lines.push(body);
89
89
  }
90
90
  if (files !== undefined) {
91
- lines.push(`files: ${files.map(file => sanitizeSlackFilename(file.name ?? file.title ?? file.id)).join(", ")}`);
91
+ lines.push(`files: ${files.map((file) => sanitizeSlackFilename(file.name ?? file.title ?? file.id)).join(", ")}`);
92
92
  }
93
93
  if (lines.length === 1) {
94
94
  lines.push("(empty)");
@@ -98,9 +98,9 @@ function formatThreadEntry(message, role) {
98
98
  export function slackThreadFilesByPriority(messages, threadTs) {
99
99
  const parent = threadTs === undefined
100
100
  ? undefined
101
- : messages.find(message => asString(message.ts) === threadTs);
101
+ : messages.find((message) => asString(message.ts) === threadTs);
102
102
  const replies = messages
103
- .filter(message => parent === undefined || asString(message.ts) !== threadTs)
103
+ .filter((message) => parent === undefined || asString(message.ts) !== threadTs)
104
104
  .reverse();
105
105
  const ordered = parent === undefined ? replies : [parent, ...replies];
106
106
  const seen = new Set();
@@ -200,7 +200,7 @@ export function findLastBotMessageTs(messages, options) {
200
200
  export function selectThreadDeltaMessages(messages, options) {
201
201
  const exclude = excludeTimestampSet(options.excludeTs);
202
202
  const afterTs = options.afterTs?.trim() ?? "";
203
- return messages.filter(message => {
203
+ return messages.filter((message) => {
204
204
  const ts = asString(message.ts);
205
205
  if (ts === undefined || ts === "") {
206
206
  return false;
@@ -223,7 +223,7 @@ export function formatSlackThreadContextBlock(messages, options) {
223
223
  limit: DEFAULT_REPLY_LIMIT,
224
224
  excludeTs: options?.excludeTs,
225
225
  })
226
- : messages.filter(message => {
226
+ : messages.filter((message) => {
227
227
  const ts = asString(message.ts);
228
228
  if (ts === undefined || ts === "") {
229
229
  return false;
@@ -138,7 +138,7 @@ export function createToolCards(cards, toolLabel) {
138
138
  title: title(group[0].toolName, tally.started),
139
139
  status: "in_progress",
140
140
  };
141
- const details = appendLines(tally, "details", group.map(call => cards.details?.(call)).filter(present));
141
+ const details = appendLines(tally, "details", group.map((call) => cards.details?.(call)).filter(present));
142
142
  if (details !== undefined) {
143
143
  chunk.details = details;
144
144
  }
@@ -1,10 +1,11 @@
1
1
  /**
2
2
  * `users.info` records, cached per token. Shared by everything that needs a
3
- * sender's record — externality and display name — and the in-flight request
3
+ * user's record — externality and display name — and the in-flight request
4
4
  * is what is cached, so two of them in one turn still cost one call.
5
5
  */
6
6
  import type { SlackBotToken } from "./types.js";
7
7
  type SlackUserRecord = Record<string, unknown>;
8
+ export declare function slackUserName(user: SlackUserRecord): string | undefined;
8
9
  export declare function resetSlackUserInfoCache(): void;
9
10
  /** Undefined when the lookup fails; failures are not cached. */
10
11
  export declare function fetchSlackUserInfo(args: {