@cursor/bdk 0.2.6 → 0.2.7

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 (335) hide show
  1. package/dist/bin/agent-serve.js +52 -57
  2. package/dist/channels/github/github-channel.d.ts.map +1 -1
  3. package/dist/channels/github/github-channel.js +34 -8
  4. package/dist/channels/github/types.d.ts +6 -0
  5. package/dist/channels/github/types.d.ts.map +1 -1
  6. package/dist/channels/slack/dispatch.d.ts.map +1 -1
  7. package/dist/channels/slack/dispatch.js +37 -29
  8. package/dist/channels/slack/external-policy.d.ts.map +1 -1
  9. package/dist/channels/slack/external-policy.js +6 -6
  10. package/dist/channels/slack/inbound.d.ts +5 -0
  11. package/dist/channels/slack/inbound.d.ts.map +1 -1
  12. package/dist/channels/slack/inbound.js +13 -0
  13. package/dist/channels/slack/index.d.ts +3 -0
  14. package/dist/channels/slack/index.d.ts.map +1 -1
  15. package/dist/channels/slack/index.js +3 -0
  16. package/dist/channels/slack/log.d.ts +1 -1
  17. package/dist/channels/slack/log.js +1 -1
  18. package/dist/channels/slack/self-identity.d.ts +15 -0
  19. package/dist/channels/slack/self-identity.d.ts.map +1 -0
  20. package/dist/channels/slack/self-identity.js +48 -0
  21. package/dist/channels/slack/sender-name.d.ts +17 -0
  22. package/dist/channels/slack/sender-name.d.ts.map +1 -0
  23. package/dist/channels/slack/sender-name.js +87 -0
  24. package/dist/channels/slack/setup.js +1 -1
  25. package/dist/channels/slack/user-info.d.ts +15 -0
  26. package/dist/channels/slack/user-info.d.ts.map +1 -0
  27. package/dist/channels/slack/user-info.js +57 -0
  28. package/dist/docs/404.html +2 -2
  29. package/dist/docs/assets/{app.CJLKDVza.js → app.oyjtOr3W.js} +4 -4
  30. package/dist/docs/assets/chunks/@localSearchIndexroot.C25zYVuc.js +1 -0
  31. package/dist/docs/assets/chunks/{VPLocalSearchBox.BW9mrQmq.js → VPLocalSearchBox.D0P6J_UJ.js} +1 -1
  32. package/dist/docs/assets/chunks/{arc.D8ZOvM1m.js → arc.B0LY1J1h.js} +1 -1
  33. package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.CXEKhLW-.js → architectureDiagram-Q4EWVU46.dPduLUxY.js} +1 -1
  34. package/dist/docs/assets/chunks/{baseUniq.BJkVKblr.js → baseUniq.B_Ohm21h.js} +1 -1
  35. package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.DQDbHxor.js → blockDiagram-DXYQGD6D.B4zcanaJ.js} +1 -1
  36. package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.ByMD6LYM.js → c4Diagram-AHTNJAMY.D9Iw21nx.js} +1 -1
  37. package/dist/docs/assets/chunks/channel.CRUyWDV-.js +1 -0
  38. package/dist/docs/assets/chunks/{chunk-4BX2VUAB.Dtq1aVI9.js → chunk-4BX2VUAB.DDVwRShI.js} +1 -1
  39. package/dist/docs/assets/chunks/{chunk-4TB4RGXK.BL_XrkoQ.js → chunk-4TB4RGXK.DsYcdn1i.js} +1 -1
  40. package/dist/docs/assets/chunks/{chunk-55IACEB6.BDPXu94_.js → chunk-55IACEB6.BzzQvcYp.js} +1 -1
  41. package/dist/docs/assets/chunks/{chunk-EDXVE4YY.DhGOQj4k.js → chunk-EDXVE4YY.BMiXZ7FX.js} +1 -1
  42. package/dist/docs/assets/chunks/{chunk-FMBD7UC4.DSF5nr8v.js → chunk-FMBD7UC4.D_mBcLoc.js} +1 -1
  43. package/dist/docs/assets/chunks/{chunk-OYMX7WX6.Day7wayw.js → chunk-OYMX7WX6.CMVjWVMx.js} +1 -1
  44. package/dist/docs/assets/chunks/{chunk-QZHKN3VN.CpBEC0zA.js → chunk-QZHKN3VN.BG-FrPv9.js} +1 -1
  45. package/dist/docs/assets/chunks/{chunk-YZCP3GAM.X_7rY1rx.js → chunk-YZCP3GAM.CkFE1ap3.js} +1 -1
  46. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.CG_UObcQ.js +1 -0
  47. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.CG_UObcQ.js +1 -0
  48. package/dist/docs/assets/chunks/clone.NYSZ9qZN.js +1 -0
  49. package/dist/docs/assets/chunks/{cose-bilkent-S5V4N54A.BVRmi2ko.js → cose-bilkent-S5V4N54A.BVNnCTvY.js} +1 -1
  50. package/dist/docs/assets/chunks/{dagre-KV5264BT.Dei9oslB.js → dagre-KV5264BT.CDN5PR9l.js} +1 -1
  51. package/dist/docs/assets/chunks/{diagram-5BDNPKRD._M-efGt7.js → diagram-5BDNPKRD.DQRUlT-i.js} +1 -1
  52. package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.D1Vmhfsj.js → diagram-G4DWMVQ6.CoeblYQT.js} +1 -1
  53. package/dist/docs/assets/chunks/{diagram-MMDJMWI5.cE1bmvAC.js → diagram-MMDJMWI5.DW3ymjl0.js} +1 -1
  54. package/dist/docs/assets/chunks/{diagram-TYMM5635.DkXAfznP.js → diagram-TYMM5635.BP0uN4Jw.js} +1 -1
  55. package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.DH_pSwPg.js → erDiagram-SMLLAGMA.DVFUWEn4.js} +1 -1
  56. package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.kAWVN9j1.js → flowDiagram-DWJPFMVM.HU-eHspv.js} +1 -1
  57. package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.8r0w49-p.js → ganttDiagram-T4ZO3ILL.DHNhXijY.js} +1 -1
  58. package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.BDa7Bi1i.js → gitGraphDiagram-UUTBAWPF.DkISXcO3.js} +1 -1
  59. package/dist/docs/assets/chunks/{graph.BMPXHz_B.js → graph.CCV0fuRR.js} +1 -1
  60. package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.BmlcqewS.js → infoDiagram-42DDH7IO.bgILzOoc.js} +1 -1
  61. package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.CVSEQSul.js → ishikawaDiagram-UXIWVN3A.CuryXC0F.js} +1 -1
  62. package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.BpeWJ5n-.js → journeyDiagram-VCZTEJTY.BL1Pr-wu.js} +1 -1
  63. package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.DHbDXuxB.js → kanban-definition-6JOO6SKY.BbGjvk4l.js} +1 -1
  64. package/dist/docs/assets/chunks/{layout.CzrCDgkP.js → layout.C4PfdldS.js} +1 -1
  65. package/dist/docs/assets/chunks/{linear.HwBsflwN.js → linear.C3xD1T6X.js} +1 -1
  66. package/dist/docs/assets/chunks/{min.DqGHolT3.js → min.CzgRAQ9c.js} +1 -1
  67. package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.ZYGlOawh.js → mindmap-definition-QFDTVHPH.CA9rSWum.js} +1 -1
  68. package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.C2KRXlNR.js → pieDiagram-DEJITSTG.B8MprgJu.js} +1 -1
  69. package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.CHj3Qefp.js → quadrantDiagram-34T5L4WZ.DndDwbKT.js} +1 -1
  70. package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.B1L4Tf7k.js → requirementDiagram-MS252O5E.Zhfgwlnn.js} +1 -1
  71. package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.dNR2yi1B.js → sankeyDiagram-XADWPNL6.B6RRm6N5.js} +1 -1
  72. package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.BrvQ3C6m.js → sequenceDiagram-FGHM5R23.Bfmz-1PN.js} +1 -1
  73. package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.BtehEykA.js → stateDiagram-FHFEXIEX.gbrdNqgj.js} +1 -1
  74. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.DOOmulfQ.js +1 -0
  75. package/dist/docs/assets/chunks/{theme.BDHBZUkP.js → theme.gpWjytMh.js} +2 -2
  76. package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.Bn7nhqEN.js → timeline-definition-GMOUNBTQ.Bl1l7M1f.js} +1 -1
  77. package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.DKhc38sz.js → vennDiagram-DHZGUBPP.Dfle4U0d.js} +1 -1
  78. package/dist/docs/assets/chunks/{wardley-RL74JXVD.DOXQ0w8J.js → wardley-RL74JXVD.BJrCW6xc.js} +1 -1
  79. package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.Bbq5B2Ic.js → wardleyDiagram-NUSXRM2D.CM_4lmvZ.js} +1 -1
  80. package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.B77HE1K8.js → xychartDiagram-5P7HB3ND.CHT5X28R.js} +1 -1
  81. package/dist/docs/assets/{reference_cli.md.BsgDqYPh.js → reference_cli.md.GwugN3n-.js} +5 -5
  82. package/dist/docs/assets/reference_cli.md.GwugN3n-.lean.js +1 -0
  83. package/dist/docs/assets/{reference_skills.md.ClkMoQsV.js → reference_skills.md.C0guGcH0.js} +3 -3
  84. package/dist/docs/building-with-agents.html +35 -35
  85. package/dist/docs/deployment.html +35 -35
  86. package/dist/docs/evals.html +35 -35
  87. package/dist/docs/guides/agent-to-agent.html +35 -35
  88. package/dist/docs/guides/bitbucket.html +35 -35
  89. package/dist/docs/guides/cloud-agents.html +35 -35
  90. package/dist/docs/guides/convert-automation.html +35 -35
  91. package/dist/docs/guides/github.html +35 -35
  92. package/dist/docs/guides/gitlab.html +35 -35
  93. package/dist/docs/guides/grokbot-agents.html +35 -35
  94. package/dist/docs/guides/hooks.html +35 -35
  95. package/dist/docs/guides/improve.html +35 -35
  96. package/dist/docs/guides/jev.html +35 -35
  97. package/dist/docs/guides/mcp-oauth.html +35 -35
  98. package/dist/docs/guides/opentelemetry.html +35 -35
  99. package/dist/docs/guides/slack.html +35 -35
  100. package/dist/docs/guides/webhooks.html +35 -35
  101. package/dist/docs/hashmap.json +1 -1
  102. package/dist/docs/hillclimbing.html +35 -35
  103. package/dist/docs/index.html +35 -35
  104. package/dist/docs/llms-full.txt +20 -9
  105. package/dist/docs/quickstart.html +35 -35
  106. package/dist/docs/reference/agent-config.html +35 -35
  107. package/dist/docs/reference/artifacts.html +35 -35
  108. package/dist/docs/reference/channels.html +35 -35
  109. package/dist/docs/reference/cli.html +39 -39
  110. package/dist/docs/reference/cli.md +20 -9
  111. package/dist/docs/reference/connections.html +35 -35
  112. package/dist/docs/reference/evals.html +35 -35
  113. package/dist/docs/reference/extensions.html +35 -35
  114. package/dist/docs/reference/hooks.html +35 -35
  115. package/dist/docs/reference/http-api.html +35 -35
  116. package/dist/docs/reference/instructions.html +35 -35
  117. package/dist/docs/reference/playground.html +35 -35
  118. package/dist/docs/reference/project-layout.html +35 -35
  119. package/dist/docs/reference/prompt.html +35 -35
  120. package/dist/docs/reference/schedules.html +35 -35
  121. package/dist/docs/reference/sessions.html +35 -35
  122. package/dist/docs/reference/skills.html +38 -38
  123. package/dist/docs/reference/subagents.html +35 -35
  124. package/dist/docs/reference/tools.html +35 -35
  125. package/dist/docs/templates/agentic-owners.html +35 -35
  126. package/dist/docs/templates/grokbot-agents.html +35 -35
  127. package/dist/docs/templates/security-reviewer.html +35 -35
  128. package/dist/docs/templates/thermo-quality-review.html +35 -35
  129. package/dist/docs/templates/thermo-review.html +35 -35
  130. package/dist/docs/templates/triage.html +35 -35
  131. package/dist/docs/troubleshooting.html +35 -35
  132. package/dist/extensions/cursor-cloud-agents/extension.d.ts +14 -0
  133. package/dist/extensions/cursor-cloud-agents/extension.d.ts.map +1 -1
  134. package/dist/extensions/cursor-cloud-agents/extension.js +5 -0
  135. package/dist/extensions/cursor-cloud-agents/lib/watch.d.ts +17 -0
  136. package/dist/extensions/cursor-cloud-agents/lib/watch.d.ts.map +1 -0
  137. package/dist/extensions/cursor-cloud-agents/lib/watch.js +99 -0
  138. package/dist/extensions/cursor-cloud-agents/reminders/cloud-agent-stop-watch.d.ts +19 -0
  139. package/dist/extensions/cursor-cloud-agents/reminders/cloud-agent-stop-watch.d.ts.map +1 -0
  140. package/dist/extensions/cursor-cloud-agents/reminders/cloud-agent-stop-watch.js +71 -0
  141. package/dist/extensions/cursor-cloud-agents/skills/handoff.md +9 -5
  142. package/dist/extensions/cursor-cloud-agents/tools/cancel.d.ts.map +1 -1
  143. package/dist/extensions/cursor-cloud-agents/tools/cancel.js +3 -1
  144. package/dist/extensions/cursor-cloud-agents/tools/launch.d.ts.map +1 -1
  145. package/dist/extensions/cursor-cloud-agents/tools/launch.js +3 -2
  146. package/dist/extensions.d.ts +1 -1
  147. package/dist/extensions.js +1 -1
  148. package/dist/files-backends/cursor-hosted.d.ts +22 -83
  149. package/dist/files-backends/cursor-hosted.d.ts.map +1 -1
  150. package/dist/files-backends/cursor-hosted.js +46 -160
  151. package/dist/files.d.ts +9 -32
  152. package/dist/files.d.ts.map +1 -1
  153. package/dist/files.js +7 -32
  154. package/dist/internal/artifacts-store.d.ts +13 -25
  155. package/dist/internal/artifacts-store.d.ts.map +1 -1
  156. package/dist/internal/artifacts-store.js +25 -46
  157. package/dist/internal/cli-ax.d.ts +10 -17
  158. package/dist/internal/cli-ax.d.ts.map +1 -1
  159. package/dist/internal/cli-ax.js +87 -155
  160. package/dist/internal/cli-bitbucket.js +5 -5
  161. package/dist/internal/cli-deploy.d.ts +4 -1
  162. package/dist/internal/cli-deploy.d.ts.map +1 -1
  163. package/dist/internal/cli-deploy.js +117 -20
  164. package/dist/internal/cli-github.js +13 -13
  165. package/dist/internal/cli-gitlab.js +5 -5
  166. package/dist/internal/continuation-identity.d.ts +2 -0
  167. package/dist/internal/continuation-identity.d.ts.map +1 -1
  168. package/dist/internal/continuation-identity.js +4 -0
  169. package/dist/internal/conversation-mirror.d.ts +9 -38
  170. package/dist/internal/conversation-mirror.d.ts.map +1 -1
  171. package/dist/internal/conversation-mirror.js +62 -68
  172. package/dist/internal/cursor/account-mcp.d.ts +1 -1
  173. package/dist/internal/cursor/account-mcp.js +1 -1
  174. package/dist/internal/cursor/backend-client.js +1 -1
  175. package/dist/internal/cursor/github-credentials.js +3 -3
  176. package/dist/internal/cursor/hosted-bound-secrets.d.ts +6 -2
  177. package/dist/internal/cursor/hosted-bound-secrets.d.ts.map +1 -1
  178. package/dist/internal/cursor/hosted-bound-secrets.js +13 -2
  179. package/dist/internal/cursor/hosted-store-secrets.d.ts +13 -37
  180. package/dist/internal/cursor/hosted-store-secrets.d.ts.map +1 -1
  181. package/dist/internal/cursor/hosted-store-secrets.js +13 -37
  182. package/dist/internal/cursor/store-api-client.d.ts +17 -39
  183. package/dist/internal/cursor/store-api-client.d.ts.map +1 -1
  184. package/dist/internal/cursor/store-api-client.js +15 -37
  185. package/dist/internal/cursor-deployment-relay.js +3 -3
  186. package/dist/internal/cursor-event-relay.js +1 -1
  187. package/dist/internal/cursor-relay-core.d.ts +1 -1
  188. package/dist/internal/cursor-relay-core.d.ts.map +1 -1
  189. package/dist/internal/deploy-client.d.ts +55 -63
  190. package/dist/internal/deploy-client.d.ts.map +1 -1
  191. package/dist/internal/deploy-client.js +48 -28
  192. package/dist/internal/discovery/agent.d.ts +1 -1
  193. package/dist/internal/discovery/agent.d.ts.map +1 -1
  194. package/dist/internal/discovery/agent.js +4 -0
  195. package/dist/internal/discovery/extensions.d.ts +2 -1
  196. package/dist/internal/discovery/extensions.d.ts.map +1 -1
  197. package/dist/internal/discovery/extensions.js +11 -1
  198. package/dist/internal/discovery/project.d.ts.map +1 -1
  199. package/dist/internal/discovery/project.js +1 -0
  200. package/dist/internal/distribution.d.ts +2 -2
  201. package/dist/internal/distribution.d.ts.map +1 -1
  202. package/dist/internal/distribution.js +2 -2
  203. package/dist/internal/docs-site.js +3 -3
  204. package/dist/internal/eval-run-store.js +8 -8
  205. package/dist/internal/framework-file-storage.d.ts +10 -34
  206. package/dist/internal/framework-file-storage.d.ts.map +1 -1
  207. package/dist/internal/framework-file-storage.js +12 -39
  208. package/dist/internal/framework-storage-selection.d.ts +10 -46
  209. package/dist/internal/framework-storage-selection.d.ts.map +1 -1
  210. package/dist/internal/framework-storage-selection.js +15 -64
  211. package/dist/internal/github-fanout.js +2 -2
  212. package/dist/internal/handleAgentServeTrigger.d.ts +5 -8
  213. package/dist/internal/handleAgentServeTrigger.d.ts.map +1 -1
  214. package/dist/internal/handleAgentServeTrigger.js +5 -8
  215. package/dist/internal/host-files.js +6 -9
  216. package/dist/internal/host-platforms.js +5 -5
  217. package/dist/internal/hosted-catch.d.ts +3 -2
  218. package/dist/internal/hosted-catch.d.ts.map +1 -1
  219. package/dist/internal/hosted-catch.js +27 -9
  220. package/dist/internal/hosted-delivery-protocol.d.ts +31 -8
  221. package/dist/internal/hosted-delivery-protocol.d.ts.map +1 -1
  222. package/dist/internal/hosted-delivery-protocol.js +102 -1
  223. package/dist/internal/hosted-delivery.d.ts.map +1 -1
  224. package/dist/internal/hosted-delivery.js +32 -12
  225. package/dist/internal/hosted-execution-diag.d.ts +13 -24
  226. package/dist/internal/hosted-execution-diag.d.ts.map +1 -1
  227. package/dist/internal/hosted-execution-diag.js +11 -20
  228. package/dist/internal/hosted-execution-flush.d.ts +22 -10
  229. package/dist/internal/hosted-execution-flush.d.ts.map +1 -1
  230. package/dist/internal/hosted-execution-flush.js +45 -9
  231. package/dist/internal/hosted-managed-automation.js +5 -5
  232. package/dist/internal/hosting.d.ts +5 -10
  233. package/dist/internal/hosting.d.ts.map +1 -1
  234. package/dist/internal/hosting.js +5 -10
  235. package/dist/internal/legacy-command-guard.d.ts +1 -4
  236. package/dist/internal/legacy-command-guard.d.ts.map +1 -1
  237. package/dist/internal/legacy-command-guard.js +2 -11
  238. package/dist/internal/listen-port.js +1 -1
  239. package/dist/internal/local-control-plane.js +6 -6
  240. package/dist/internal/logs-client.d.ts +20 -1
  241. package/dist/internal/logs-client.d.ts.map +1 -1
  242. package/dist/internal/logs-client.js +89 -1
  243. package/dist/internal/mcp-endpoint.js +1 -1
  244. package/dist/internal/otel/collector.js +1 -1
  245. package/dist/internal/otel/runtime.js +13 -13
  246. package/dist/internal/platform-schedule-sync.js +2 -2
  247. package/dist/internal/playground/toolchain.js +6 -6
  248. package/dist/internal/process-memory-telemetry.js +2 -2
  249. package/dist/internal/reminder-runner.d.ts +8 -3
  250. package/dist/internal/reminder-runner.d.ts.map +1 -1
  251. package/dist/internal/reminder-runner.js +51 -52
  252. package/dist/internal/resolve-prod-target.d.ts +1 -12
  253. package/dist/internal/resolve-prod-target.d.ts.map +1 -1
  254. package/dist/internal/resolve-prod-target.js +2 -32
  255. package/dist/internal/resolved-connections.js +8 -8
  256. package/dist/internal/run-client.d.ts +4 -3
  257. package/dist/internal/run-client.d.ts.map +1 -1
  258. package/dist/internal/run-client.js +98 -61
  259. package/dist/internal/runtime-dispatch-runner.d.ts +1 -0
  260. package/dist/internal/runtime-dispatch-runner.d.ts.map +1 -1
  261. package/dist/internal/runtime-dispatch-runner.js +7 -1
  262. package/dist/internal/schedule-runner.js +1 -1
  263. package/dist/internal/sdk-runner.d.ts +4 -0
  264. package/dist/internal/sdk-runner.d.ts.map +1 -1
  265. package/dist/internal/sdk-runner.js +37 -22
  266. package/dist/internal/server.d.ts +2 -0
  267. package/dist/internal/server.d.ts.map +1 -1
  268. package/dist/internal/server.js +39 -38
  269. package/dist/internal/session-engine.d.ts +31 -44
  270. package/dist/internal/session-engine.d.ts.map +1 -1
  271. package/dist/internal/session-engine.js +67 -83
  272. package/dist/internal/session-run-log.d.ts +10 -24
  273. package/dist/internal/session-run-log.d.ts.map +1 -1
  274. package/dist/internal/session-run-log.js +13 -27
  275. package/dist/internal/sessions-client.d.ts.map +1 -1
  276. package/dist/internal/sessions-client.js +6 -3
  277. package/dist/internal/skills-sync.d.ts +3 -5
  278. package/dist/internal/skills-sync.d.ts.map +1 -1
  279. package/dist/internal/skills-sync.js +3 -5
  280. package/dist/internal/start-log-store.d.ts +7 -18
  281. package/dist/internal/start-log-store.d.ts.map +1 -1
  282. package/dist/internal/start-log-store.js +47 -24
  283. package/dist/internal/storage-coordinator.d.ts +7 -10
  284. package/dist/internal/storage-coordinator.d.ts.map +1 -1
  285. package/dist/internal/storage-coordinator.js +18 -20
  286. package/dist/internal/storage-roles.d.ts +5 -0
  287. package/dist/internal/storage-roles.d.ts.map +1 -1
  288. package/dist/internal/store-api-protocol.d.ts +12 -33
  289. package/dist/internal/store-api-protocol.d.ts.map +1 -1
  290. package/dist/internal/store-api-protocol.js +6 -22
  291. package/dist/internal/store-mirror.d.ts +4 -5
  292. package/dist/internal/store-mirror.d.ts.map +1 -1
  293. package/dist/internal/store-mirror.js +6 -8
  294. package/dist/internal/turn-lease-store.d.ts +12 -5
  295. package/dist/internal/turn-lease-store.d.ts.map +1 -1
  296. package/dist/internal/turn-lease-store.js +61 -8
  297. package/dist/internal/v2-hosting.d.ts +4 -7
  298. package/dist/internal/v2-hosting.d.ts.map +1 -1
  299. package/dist/internal/v2-hosting.js +4 -7
  300. package/dist/internal/workspace-sync.d.ts +3 -6
  301. package/dist/internal/workspace-sync.d.ts.map +1 -1
  302. package/dist/internal/workspace-sync.js +3 -6
  303. package/dist/internal/workspace.d.ts +10 -16
  304. package/dist/internal/workspace.d.ts.map +1 -1
  305. package/dist/internal/workspace.js +9 -14
  306. package/dist/memory.d.ts +17 -43
  307. package/dist/memory.d.ts.map +1 -1
  308. package/dist/memory.js +34 -80
  309. package/dist/playground/assets/index-DPKLl4C_.css +1 -0
  310. package/dist/playground/assets/index-MijLHTbB.js +71 -0
  311. package/dist/playground/index.html +2 -2
  312. package/dist/storage-backends/cursor-hosted-v2.d.ts +8 -36
  313. package/dist/storage-backends/cursor-hosted-v2.d.ts.map +1 -1
  314. package/dist/storage-backends/cursor-hosted-v2.js +9 -37
  315. package/dist/storage-backends/cursor-hosted.d.ts +17 -30
  316. package/dist/storage-backends/cursor-hosted.d.ts.map +1 -1
  317. package/dist/storage-backends/cursor-hosted.js +14 -27
  318. package/dist/storage-protocol.d.ts +13 -38
  319. package/dist/storage-protocol.d.ts.map +1 -1
  320. package/dist/storage-protocol.js +14 -39
  321. package/dist/types.d.ts +29 -30
  322. package/dist/types.d.ts.map +1 -1
  323. package/docs/reference/cli.md +20 -9
  324. package/package.json +1 -1
  325. package/templates/pr-autofixer/bot/instructions.md +3 -3
  326. package/dist/docs/assets/chunks/@localSearchIndexroot.Bq-pxRXm.js +0 -1
  327. package/dist/docs/assets/chunks/channel.DCU8W1RP.js +0 -1
  328. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.DwpXsM06.js +0 -1
  329. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.DwpXsM06.js +0 -1
  330. package/dist/docs/assets/chunks/clone.DH6Mx2zB.js +0 -1
  331. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.kzD0-U89.js +0 -1
  332. package/dist/docs/assets/reference_cli.md.BsgDqYPh.lean.js +0 -1
  333. package/dist/playground/assets/index-6BbTPnaT.css +0 -1
  334. package/dist/playground/assets/index-CI7FAmOP.js +0 -71
  335. /package/dist/docs/assets/{reference_skills.md.ClkMoQsV.lean.js → reference_skills.md.C0guGcH0.lean.js} +0 -0
@@ -25,6 +25,8 @@ import { describeSlackEventShape, formatSlackContextBlock, parseAppHomeOpened, p
25
25
  import { defaultSlackLog } from "./log.js";
26
26
  import { paintTurnStart, retractTurnStart } from "./paint-start.js";
27
27
  import { adoptPlaceholder, retractPlaceholderMessage, retractPlaceholderSlot, startPlaceholder, } from "./placeholder.js";
28
+ import { resolveSlackSelfIdentity } from "./self-identity.js";
29
+ import { resolveSlackSenderName } from "./sender-name.js";
28
30
  import { isWholeMessageStop } from "./stop.js";
29
31
  import { EMPTY_SLACK_THREAD_CONTEXT, loadSlackThreadContext, loadSlackThreadDelta, } from "./thread-context.js";
30
32
  const FOLLOWUP_TYPING = "Saw your follow-up…";
@@ -126,10 +128,10 @@ function slackSessionContinuation(identity, channelId, threadTs) {
126
128
  }
127
129
  export function dispatchInboundMessage(args) {
128
130
  return __awaiter(this, void 0, void 0, function* () {
129
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2;
130
- var _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17;
131
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5;
132
+ var _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20;
131
133
  const { message, kind } = args;
132
- const log = (_3 = args.log) !== null && _3 !== void 0 ? _3 : defaultSlackLog;
134
+ const log = (_6 = args.log) !== null && _6 !== void 0 ? _6 : defaultSlackLog;
133
135
  const binding = buildSlackBinding({
134
136
  botToken: (_a = args.credentials) === null || _a === void 0 ? void 0 : _a.botToken,
135
137
  channelId: message.channelId,
@@ -210,7 +212,7 @@ export function dispatchInboundMessage(args) {
210
212
  log,
211
213
  });
212
214
  });
213
- const userId = (_4 = (_d = message.author) === null || _d === void 0 ? void 0 : _d.userId) !== null && _4 !== void 0 ? _4 : "";
215
+ const userId = (_7 = (_d = message.author) === null || _d === void 0 ? void 0 : _d.userId) !== null && _7 !== void 0 ? _7 : "";
214
216
  const teamId = message.teamId;
215
217
  let membership;
216
218
  if (args.blockExternals !== false && ((_e = message.author) === null || _e === void 0 ? void 0 : _e.isBot) !== true) {
@@ -268,7 +270,7 @@ export function dispatchInboundMessage(args) {
268
270
  try {
269
271
  yield binding.thread.startTyping(interrupted ? "Stopped." : "Nothing to stop.");
270
272
  }
271
- catch (_18) {
273
+ catch (_21) {
272
274
  // best-effort status
273
275
  }
274
276
  yield retractUnadoptedHandoff();
@@ -279,7 +281,7 @@ export function dispatchInboundMessage(args) {
279
281
  // whatever it says, and may open with `eval` while talking to someone else.
280
282
  const evalCommandsEnabled = args.evalCommandsEnabled !== false && (kind === "app_mention" || kind === "direct_message");
281
283
  const evalDirective = evalCommandsEnabled && args.host.evals !== undefined
282
- ? ((_5 = parseSlackEvalDirective(message.text)) !== null && _5 !== void 0 ? _5 : parseSlackEvalDirective(message.markdown))
284
+ ? ((_8 = parseSlackEvalDirective(message.text)) !== null && _8 !== void 0 ? _8 : parseSlackEvalDirective(message.markdown))
283
285
  : null;
284
286
  if (evalDirective !== null && args.host.evals !== undefined) {
285
287
  if (membership !== undefined && (yield membership)) {
@@ -370,7 +372,7 @@ export function dispatchInboundMessage(args) {
370
372
  const excludeThreadTimestamps = [
371
373
  message.ts,
372
374
  ...(handoffInThread === undefined ? [] : [handoffInThread.messageTs]),
373
- ...((_6 = decision.excludeThreadTimestamps) !== null && _6 !== void 0 ? _6 : []),
375
+ ...((_9 = decision.excludeThreadTimestamps) !== null && _9 !== void 0 ? _9 : []),
374
376
  ];
375
377
  const mergeMessages = [triggeringMergeMessage(message)];
376
378
  const continuationExists = existsP === undefined ? false : yield existsP;
@@ -378,14 +380,19 @@ export function dispatchInboundMessage(args) {
378
380
  const afterTs = loadThread && hasSession && args.getContinuationLastBotMessageTs !== undefined
379
381
  ? yield args.getContinuationLastBotMessageTs(continuation)
380
382
  : undefined;
383
+ const selfIdentity = resolveSlackSelfIdentity((_m = args.credentials) === null || _m === void 0 ? void 0 : _m.botToken);
384
+ const senderName = resolveSlackSenderName({
385
+ botToken: (_o = args.credentials) === null || _o === void 0 ? void 0 : _o.botToken,
386
+ author: message.author,
387
+ });
381
388
  // Channel mentions: cold <slack_thread>, warm <slack_thread_delta>.
382
389
  const threadTask = !loadThread
383
390
  ? Promise.resolve(EMPTY_SLACK_THREAD_CONTEXT)
384
391
  : hasSession
385
- ? loadSlackThreadDelta(Object.assign(Object.assign({ botToken: (_m = args.credentials) === null || _m === void 0 ? void 0 : _m.botToken, channelId: message.channelId, threadTs: message.threadTs }, (afterTs === undefined ? {} : { afterTs })), { excludeTs: excludeThreadTimestamps, mergeMessages,
392
+ ? loadSlackThreadDelta(Object.assign(Object.assign({ botToken: (_p = args.credentials) === null || _p === void 0 ? void 0 : _p.botToken, channelId: message.channelId, threadTs: message.threadTs }, (afterTs === undefined ? {} : { afterTs })), { excludeTs: excludeThreadTimestamps, mergeMessages,
386
393
  log }))
387
394
  : loadSlackThreadContext({
388
- botToken: (_o = args.credentials) === null || _o === void 0 ? void 0 : _o.botToken,
395
+ botToken: (_q = args.credentials) === null || _q === void 0 ? void 0 : _q.botToken,
389
396
  channelId: message.channelId,
390
397
  threadTs: message.threadTs,
391
398
  excludeTs: excludeThreadTimestamps,
@@ -398,14 +405,14 @@ export function dispatchInboundMessage(args) {
398
405
  if (painted !== undefined) {
399
406
  yield painted;
400
407
  yield retractTurnStart({
401
- botToken: (_p = args.credentials) === null || _p === void 0 ? void 0 : _p.botToken,
408
+ botToken: (_r = args.credentials) === null || _r === void 0 ? void 0 : _r.botToken,
402
409
  channelId: message.channelId,
403
410
  threadTs: message.threadTs,
404
- ack: (_7 = args.ack) !== null && _7 !== void 0 ? _7 : "",
411
+ ack: (_10 = args.ack) !== null && _10 !== void 0 ? _10 : "",
405
412
  log,
406
413
  });
407
414
  }
408
- yield (_q = args.host.slackNudges) === null || _q === void 0 ? void 0 : _q.releaseAsk(message.channelId, message.ts);
415
+ yield (_s = args.host.slackNudges) === null || _s === void 0 ? void 0 : _s.releaseAsk(message.channelId, message.ts);
409
416
  yield retractAdoptedPlaceholder();
410
417
  return;
411
418
  }
@@ -415,7 +422,7 @@ export function dispatchInboundMessage(args) {
415
422
  message,
416
423
  threadFiles: thread.files,
417
424
  decision,
418
- botToken: (_r = args.credentials) === null || _r === void 0 ? void 0 : _r.botToken,
425
+ botToken: (_t = args.credentials) === null || _t === void 0 ? void 0 : _t.botToken,
419
426
  log,
420
427
  });
421
428
  if ((message.files !== undefined && message.files.length > 0) || threadFileCount > 0) {
@@ -424,18 +431,19 @@ export function dispatchInboundMessage(args) {
424
431
  channel: message.channelId,
425
432
  thread_ts: message.threadTs,
426
433
  thread_files: threadFileCount,
427
- images: (_8 = (_s = media.images) === null || _s === void 0 ? void 0 : _s.length) !== null && _8 !== void 0 ? _8 : 0,
428
- workspace_files: Object.keys((_9 = media.workspaceFiles) !== null && _9 !== void 0 ? _9 : {}).length,
434
+ images: (_11 = (_u = media.images) === null || _u === void 0 ? void 0 : _u.length) !== null && _11 !== void 0 ? _11 : 0,
435
+ workspace_files: Object.keys((_12 = media.workspaceFiles) !== null && _12 !== void 0 ? _12 : {}).length,
429
436
  event_id: args.eventId,
430
437
  });
431
438
  }
432
439
  if (threadContext !== undefined) {
433
440
  log.info(hasSession ? "thread delta loaded" : "thread context loaded", Object.assign({ kind, channel: message.channelId, thread_ts: message.threadTs, chars: threadContext.length, event_id: args.eventId }, (afterTs === undefined ? {} : { after_ts: afterTs })));
434
441
  }
442
+ const [self, userName] = yield Promise.all([selfIdentity, senderName]);
435
443
  const prompt = [
436
- formatSlackContextBlock(Object.assign(Object.assign({ userId: (_10 = (_t = message.author) === null || _t === void 0 ? void 0 : _t.userId) !== null && _10 !== void 0 ? _10 : "", channelId: message.channelId, threadTs: message.threadTs }, (((_u = message.author) === null || _u === void 0 ? void 0 : _u.userName) === undefined ? {} : { userName: message.author.userName })), (message.teamId === undefined ? {} : { teamId: message.teamId }))),
444
+ formatSlackContextBlock(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ userId: (_13 = (_v = message.author) === null || _v === void 0 ? void 0 : _v.userId) !== null && _13 !== void 0 ? _13 : "", channelId: message.channelId, threadTs: message.threadTs }, (userName === undefined ? {} : { userName })), (((_w = message.author) === null || _w === void 0 ? void 0 : _w.isBot) === true ? { userIsBot: true } : {})), (((_x = message.author) === null || _x === void 0 ? void 0 : _x.botId) === undefined ? {} : { userBotId: message.author.botId })), (message.teamId === undefined ? {} : { teamId: message.teamId })), (self === undefined ? {} : { selfUserId: self.userId })), ((self === null || self === void 0 ? void 0 : self.name) === undefined ? {} : { selfName: self.name }))),
437
445
  ...(threadContext === undefined ? [] : [threadContext]),
438
- ...((_11 = decision.context) !== null && _11 !== void 0 ? _11 : []),
446
+ ...((_14 = decision.context) !== null && _14 !== void 0 ? _14 : []),
439
447
  "",
440
448
  media.userText,
441
449
  ]
@@ -450,11 +458,11 @@ export function dispatchInboundMessage(args) {
450
458
  const placeholder = !adoptedPlaceholder && hasPlaceholder && (!hosted || hostedFollowup)
451
459
  ? startPlaceholder({
452
460
  line: placeholderLine,
453
- botToken: (_v = args.credentials) === null || _v === void 0 ? void 0 : _v.botToken,
461
+ botToken: (_y = args.credentials) === null || _y === void 0 ? void 0 : _y.botToken,
454
462
  channelId: message.channelId,
455
463
  threadTs: message.threadTs,
456
464
  log,
457
- recipientUserId: (_w = message.author) === null || _w === void 0 ? void 0 : _w.userId,
465
+ recipientUserId: (_z = message.author) === null || _z === void 0 ? void 0 : _z.userId,
458
466
  recipientTeamId: message.teamId,
459
467
  })
460
468
  : undefined;
@@ -462,19 +470,19 @@ export function dispatchInboundMessage(args) {
462
470
  const state = emptySlackChannelState({
463
471
  channelId: message.channelId,
464
472
  threadTs: message.threadTs,
465
- teamId: (_12 = message.teamId) !== null && _12 !== void 0 ? _12 : null,
466
- triggeringUserId: (_13 = (_x = message.author) === null || _x === void 0 ? void 0 : _x.userId) !== null && _13 !== void 0 ? _13 : null,
473
+ teamId: (_15 = message.teamId) !== null && _15 !== void 0 ? _15 : null,
474
+ triggeringUserId: (_16 = (_0 = message.author) === null || _0 === void 0 ? void 0 : _0.userId) !== null && _16 !== void 0 ? _16 : null,
467
475
  startPainted: paintedStart,
468
476
  placeholderPosted: posted,
469
477
  });
470
478
  const sendOptions = Object.assign(Object.assign({ auth: decision.auth }, sendPatch), { admission: "coalesce", coalesceSourceTs: message.ts, state: state, refreshState: slackWakeChannelState({
471
479
  channelId: message.channelId,
472
480
  threadTs: message.threadTs,
473
- teamId: (_14 = message.teamId) !== null && _14 !== void 0 ? _14 : null,
474
- triggeringUserId: (_15 = (_y = message.author) === null || _y === void 0 ? void 0 : _y.userId) !== null && _15 !== void 0 ? _15 : null,
481
+ teamId: (_17 = message.teamId) !== null && _17 !== void 0 ? _17 : null,
482
+ triggeringUserId: (_18 = (_1 = message.author) === null || _1 === void 0 ? void 0 : _1.userId) !== null && _18 !== void 0 ? _18 : null,
475
483
  startPainted: paintedStart,
476
484
  placeholderPosted: posted,
477
- }), title: (_16 = decision.title) !== null && _16 !== void 0 ? _16 : `slack:${message.channelId}:${message.threadTs}`, workspaceDir: decision.workspaceDir, workspaceFiles: media.workspaceFiles, images: media.images, cloud: decision.cloud, sdkAgentId: decision.sdkAgentId });
485
+ }), title: (_19 = decision.title) !== null && _19 !== void 0 ? _19 : `slack:${message.channelId}:${message.threadTs}`, workspaceDir: decision.workspaceDir, workspaceFiles: media.workspaceFiles, images: media.images, cloud: decision.cloud, sdkAgentId: decision.sdkAgentId });
478
486
  try {
479
487
  const session = yield args.send(prompt, sendOptions);
480
488
  if (isDeferredChannelSession(session)) {
@@ -511,11 +519,11 @@ export function dispatchInboundMessage(args) {
511
519
  });
512
520
  if (!steeringEnabled()) {
513
521
  try {
514
- yield (_z = args.host.slackNudges) === null || _z === void 0 ? void 0 : _z.append({
522
+ yield (_2 = args.host.slackNudges) === null || _2 === void 0 ? void 0 : _2.append({
515
523
  continuationKey: continuation,
516
524
  sourceTs: message.ts,
517
525
  text: media.userText,
518
- author: (_0 = message.author) === null || _0 === void 0 ? void 0 : _0.userName,
526
+ author: (_3 = message.author) === null || _3 === void 0 ? void 0 : _3.userName,
519
527
  });
520
528
  }
521
529
  catch (nudgeError) {
@@ -541,7 +549,7 @@ export function dispatchInboundMessage(args) {
541
549
  }
542
550
  }
543
551
  catch (error) {
544
- yield (_1 = args.host.slackNudges) === null || _1 === void 0 ? void 0 : _1.releaseAsk(message.channelId, message.ts);
552
+ yield (_4 = args.host.slackNudges) === null || _4 === void 0 ? void 0 : _4.releaseAsk(message.channelId, message.ts);
545
553
  if (placeholder !== undefined) {
546
554
  yield placeholder.retract();
547
555
  }
@@ -549,10 +557,10 @@ export function dispatchInboundMessage(args) {
549
557
  if (painted !== undefined) {
550
558
  yield painted;
551
559
  yield retractTurnStart({
552
- botToken: (_2 = args.credentials) === null || _2 === void 0 ? void 0 : _2.botToken,
560
+ botToken: (_5 = args.credentials) === null || _5 === void 0 ? void 0 : _5.botToken,
553
561
  channelId: message.channelId,
554
562
  threadTs: message.threadTs,
555
- ack: (_17 = args.ack) !== null && _17 !== void 0 ? _17 : "",
563
+ ack: (_20 = args.ack) !== null && _20 !== void 0 ? _20 : "",
556
564
  log,
557
565
  });
558
566
  }
@@ -1 +1 @@
1
- {"version":3,"file":"external-policy.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/external-policy.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,KAAK,aAAa,GAAG;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,eAAe,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CACxC,CAAC;AAEF,+EAA+E;AAC/E,wBAAgB,4BAA4B,CAAC,IAAI,EAAE;IACjD,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,aAAa,CAAC;CACrB,GAAG,OAAO,CAcV;AAID,wBAAgB,wBAAwB,IAAI,IAAI,CAE/C;AAED,4EAA4E;AAC5E,wBAAsB,qBAAqB,CAAC,IAAI,EAAE;IAChD,QAAQ,EAAE,aAAa,GAAG,SAAS,CAAC;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,OAAO,CAAC,CA2BnB"}
1
+ {"version":3,"file":"external-policy.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/external-policy.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGhD,KAAK,aAAa,GAAG;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,eAAe,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CACxC,CAAC;AAEF,+EAA+E;AAC/E,wBAAgB,4BAA4B,CAAC,IAAI,EAAE;IACjD,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,aAAa,CAAC;CACrB,GAAG,OAAO,CAcV;AAID,wBAAgB,wBAAwB,IAAI,IAAI,CAG/C;AAED,4EAA4E;AAC5E,wBAAsB,qBAAqB,CAAC,IAAI,EAAE;IAChD,QAAQ,EAAE,aAAa,GAAG,SAAS,CAAC;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,OAAO,CAAC,CA0BnB"}
@@ -11,7 +11,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
11
11
  step((generator = generator.apply(thisArg, _arguments || [])).next());
12
12
  });
13
13
  };
14
- import { callSlackApi } from "./api.js";
14
+ import { fetchSlackUserInfo, resetSlackUserInfoCache } from "./user-info.js";
15
15
  /** Pure classifier over a `users.info` user object. Fails open to external. */
16
16
  export function classifySlackUserExternality(args) {
17
17
  var _a;
@@ -29,6 +29,7 @@ export function classifySlackUserExternality(args) {
29
29
  const classified = new Map();
30
30
  export function resetExternalSenderCache() {
31
31
  classified.clear();
32
+ resetSlackUserInfoCache();
32
33
  }
33
34
  /** Lookup + classify. Empty userId / API failure → external. Hits cache. */
34
35
  export function isExternalSlackSender(args) {
@@ -42,17 +43,16 @@ export function isExternalSlackSender(args) {
42
43
  return cached;
43
44
  }
44
45
  try {
45
- const result = yield callSlackApi({
46
+ const user = yield fetchSlackUserInfo({
46
47
  botToken: args.botToken,
47
- operation: "users.info",
48
- body: { user: args.userId },
48
+ userId: args.userId,
49
49
  });
50
- if (result.ok !== true || result.user === undefined) {
50
+ if (user === undefined) {
51
51
  return true;
52
52
  }
53
53
  const external = classifySlackUserExternality({
54
54
  slackTeamId: args.slackTeamId,
55
- user: result.user,
55
+ user: user,
56
56
  });
57
57
  classified.set(key, external);
58
58
  return external;
@@ -88,11 +88,16 @@ export interface ParseChannelMessageOptions {
88
88
  * pending dispatch.
89
89
  */
90
90
  export declare function parseChannelMessageEvent(body: unknown, options?: ParseChannelMessageOptions): SlackChannelMessageEvent | null;
91
+ /** `user_*` is whoever wrote the message, person or bot; `self_*` is the agent reading it. */
91
92
  export declare function formatSlackContextBlock(args: {
92
93
  userId: string;
93
94
  userName?: string;
95
+ userIsBot?: boolean;
96
+ userBotId?: string;
94
97
  channelId: string;
95
98
  threadTs: string;
96
99
  teamId?: string;
100
+ selfUserId?: string;
101
+ selfName?: string;
97
102
  }): string;
98
103
  //# sourceMappingURL=inbound.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"inbound.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/inbound.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAe,YAAY,EAAE,MAAM,YAAY,CAAC;AAe5D;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,OAAO,GAAG;IACtD,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAOA;AAED,oEAAoE;AACpE,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CASxD;AA8CD,MAAM,WAAW,sBAAsB;IACrC;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,OAAO,EACb,OAAO,CAAC,EAAE,sBAAsB,GAC/B,YAAY,GAAG,IAAI,CAsBrB;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,uEAAuE;AACvE,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,kBAAkB,GAAG,IAAI,CAsB3E;AAED,MAAM,WAAW,2BAA2B;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,4EAA4E;AAC5E,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,OAAO,GAAG,2BAA2B,GAAG,IAAI,CA0B7F;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAgBzE;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,OAAO,GAAG,YAAY,GAAG,IAAI,CA4B1E;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,OAAO,GAAG,YAAY,GAAG,IAAI,CAkD1E;AAED,4EAA4E;AAC5E,MAAM,MAAM,wBAAwB,GAChC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,YAAY,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,YAAY,CAAA;CAAE,GACzC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvD,MAAM,WAAW,0BAA0B;IACzC;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,OAAO,EACb,OAAO,CAAC,EAAE,0BAA0B,GACnC,wBAAwB,GAAG,IAAI,CAoDjC;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,MAAM,CAYT"}
1
+ {"version":3,"file":"inbound.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/inbound.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAe,YAAY,EAAE,MAAM,YAAY,CAAC;AAe5D;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,OAAO,GAAG;IACtD,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAOA;AAED,oEAAoE;AACpE,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CASxD;AA8CD,MAAM,WAAW,sBAAsB;IACrC;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,OAAO,EACb,OAAO,CAAC,EAAE,sBAAsB,GAC/B,YAAY,GAAG,IAAI,CAsBrB;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,uEAAuE;AACvE,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,kBAAkB,GAAG,IAAI,CAsB3E;AAED,MAAM,WAAW,2BAA2B;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,4EAA4E;AAC5E,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,OAAO,GAAG,2BAA2B,GAAG,IAAI,CA0B7F;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAgBzE;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,OAAO,GAAG,YAAY,GAAG,IAAI,CA4B1E;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,OAAO,GAAG,YAAY,GAAG,IAAI,CAkD1E;AAED,4EAA4E;AAC5E,MAAM,MAAM,wBAAwB,GAChC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,YAAY,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,YAAY,CAAA;CAAE,GACzC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvD,MAAM,WAAW,0BAA0B;IACzC;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,OAAO,EACb,OAAO,CAAC,EAAE,0BAA0B,GACnC,wBAAwB,GAAG,IAAI,CAoDjC;AAED,8FAA8F;AAC9F,wBAAgB,uBAAuB,CAAC,IAAI,EAAE;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,MAAM,CAwBT"}
@@ -299,16 +299,29 @@ export function parseChannelMessageEvent(body, options) {
299
299
  const message = buildSlackMessage(event, teamId);
300
300
  return message === null ? null : { kind: "post", message };
301
301
  }
302
+ /** `user_*` is whoever wrote the message, person or bot; `self_*` is the agent reading it. */
302
303
  export function formatSlackContextBlock(args) {
303
304
  const lines = ["<slack_context>", `user_id: ${args.userId}`];
304
305
  if (args.userName !== undefined) {
305
306
  lines.push(`user_name: ${args.userName}`);
306
307
  }
308
+ if (args.userIsBot === true) {
309
+ lines.push("user_is_bot: true");
310
+ }
311
+ if (args.userBotId !== undefined) {
312
+ lines.push(`user_bot_id: ${args.userBotId}`);
313
+ }
307
314
  lines.push(`channel_id: ${args.channelId}`);
308
315
  lines.push(`thread_ts: ${args.threadTs}`);
309
316
  if (args.teamId !== undefined) {
310
317
  lines.push(`team_id: ${args.teamId}`);
311
318
  }
319
+ if (args.selfUserId !== undefined) {
320
+ lines.push(`self_user_id: ${args.selfUserId}`);
321
+ }
322
+ if (args.selfName !== undefined) {
323
+ lines.push(`self_name: ${args.selfName}`);
324
+ }
312
325
  lines.push("</slack_context>");
313
326
  return lines.join("\n");
314
327
  }
@@ -41,6 +41,8 @@ export * from "./message-body.js";
41
41
  export * from "./nudge-carrier.js";
42
42
  export * from "./nudge-store.js";
43
43
  export * from "./pr-ref.js";
44
+ export * from "./self-identity.js";
45
+ export * from "./sender-name.js";
44
46
  export * from "./setup.js";
45
47
  export * from "./slack-channel.js";
46
48
  export * from "./socket-mode.js";
@@ -50,4 +52,5 @@ export * from "./thread-context.js";
50
52
  export * from "./tool-approval-events.js";
51
53
  export { defaultToolCardDetails } from "./tool-cards.js";
52
54
  export * from "./types.js";
55
+ export * from "./user-info.js";
53
56
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC"}
@@ -41,6 +41,8 @@ export * from "./message-body.js";
41
41
  export * from "./nudge-carrier.js";
42
42
  export * from "./nudge-store.js";
43
43
  export * from "./pr-ref.js";
44
+ export * from "./self-identity.js";
45
+ export * from "./sender-name.js";
44
46
  export * from "./setup.js";
45
47
  export * from "./slack-channel.js";
46
48
  export * from "./socket-mode.js";
@@ -50,3 +52,4 @@ export * from "./thread-context.js";
50
52
  export * from "./tool-approval-events.js";
51
53
  export { defaultToolCardDetails } from "./tool-cards.js";
52
54
  export * from "./types.js";
55
+ export * from "./user-info.js";
@@ -2,7 +2,7 @@
2
2
  * Shared logging for the Slack channel pack.
3
3
  *
4
4
  * Uses the same `(line: string) => void` contract as ServeOptions.logger.
5
- * Lines always start with `[agent-sdk/slack]` so Socket Mode docs and greps
5
+ * Lines always start with `[bdk/slack]` so Socket Mode docs and greps
6
6
  * keep working. Optional key=value fields carry correlation ids.
7
7
  */
8
8
  export type SlackLogWrite = (line: string) => void;
@@ -2,7 +2,7 @@
2
2
  * Shared logging for the Slack channel pack.
3
3
  *
4
4
  * Uses the same `(line: string) => void` contract as ServeOptions.logger.
5
- * Lines always start with `[agent-sdk/slack]` so Socket Mode docs and greps
5
+ * Lines always start with `[bdk/slack]` so Socket Mode docs and greps
6
6
  * keep working. Optional key=value fields carry correlation ids.
7
7
  */
8
8
  import { SLACK_LOG_PREFIX } from "../../internal/distribution.js";
@@ -0,0 +1,15 @@
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.
4
+ */
5
+ import type { SlackBotToken } from "./types.js";
6
+ export interface SlackSelfIdentity {
7
+ /** The app's bot *user* id (`U…`) — what `<@…>` mentions carry. */
8
+ userId: string;
9
+ /** The app's handle, e.g. `debug` for `@debug`. */
10
+ name?: string;
11
+ }
12
+ export declare function resetSlackSelfIdentityCache(): void;
13
+ /** Cached per token. A missing token or any failure resolves to undefined. */
14
+ export declare function resolveSlackSelfIdentity(botToken: SlackBotToken | undefined): Promise<SlackSelfIdentity | undefined>;
15
+ //# sourceMappingURL=self-identity.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,48 @@
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.
4
+ */
5
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
6
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
7
+ return new (P || (P = Promise))(function (resolve, reject) {
8
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
9
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
10
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
11
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
12
+ });
13
+ };
14
+ import { callSlackApi } from "./api.js";
15
+ const identities = new Map();
16
+ export function resetSlackSelfIdentityCache() {
17
+ identities.clear();
18
+ }
19
+ /** Cached per token. A missing token or any failure resolves to undefined. */
20
+ export function resolveSlackSelfIdentity(botToken) {
21
+ return __awaiter(this, void 0, void 0, function* () {
22
+ if (botToken === undefined) {
23
+ return undefined;
24
+ }
25
+ const cached = identities.get(botToken);
26
+ if (cached !== undefined) {
27
+ return cached;
28
+ }
29
+ try {
30
+ const result = yield callSlackApi({
31
+ botToken,
32
+ operation: "auth.test",
33
+ body: {},
34
+ });
35
+ const userId = typeof result.user_id === "string" ? result.user_id : "";
36
+ if (result.ok !== true || userId === "") {
37
+ return undefined;
38
+ }
39
+ const name = typeof result.user === "string" && result.user !== "" ? result.user : undefined;
40
+ const identity = Object.assign({ userId }, (name === undefined ? {} : { name }));
41
+ identities.set(botToken, identity);
42
+ return identity;
43
+ }
44
+ catch (_a) {
45
+ return undefined;
46
+ }
47
+ });
48
+ }
@@ -0,0 +1,17 @@
1
+ /**
2
+ * The display name behind a message's author, so the turn header describes a
3
+ * person and a bot the same way: the sender's `users.info` record for anyone
4
+ * with a user id, `bots.info` for webhook-style posts that carry only a
5
+ * `bot_id`.
6
+ */
7
+ import type { SlackAuthor, SlackBotToken } from "./types.js";
8
+ export declare function resetSlackSenderNameCache(): void;
9
+ /**
10
+ * Cached per token. A name Slack already sent with the event wins; any
11
+ * failure resolves to undefined and leaves the sender described by id alone.
12
+ */
13
+ export declare function resolveSlackSenderName(args: {
14
+ botToken: SlackBotToken | undefined;
15
+ author: SlackAuthor | undefined;
16
+ }): Promise<string | undefined>;
17
+ //# sourceMappingURL=sender-name.d.ts.map
@@ -0,0 +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;AA8CD;;;GAGG;AACH,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,CAgB9B"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * The display name behind a message's author, so the turn header describes a
3
+ * person and a bot the same way: the sender's `users.info` record for anyone
4
+ * with a user id, `bots.info` for webhook-style posts that carry only a
5
+ * `bot_id`.
6
+ */
7
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
8
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
9
+ return new (P || (P = Promise))(function (resolve, reject) {
10
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
11
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
12
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
13
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
14
+ });
15
+ };
16
+ import { callSlackApi } from "./api.js";
17
+ import { fetchSlackUserInfo } from "./user-info.js";
18
+ const botNames = new Map();
19
+ export function resetSlackSenderNameCache() {
20
+ botNames.clear();
21
+ }
22
+ function text(value) {
23
+ return typeof value === "string" && value !== "" ? value : undefined;
24
+ }
25
+ function record(value) {
26
+ return typeof value === "object" && value !== null && !Array.isArray(value)
27
+ ? value
28
+ : undefined;
29
+ }
30
+ function userName(botToken, userId) {
31
+ return __awaiter(this, void 0, void 0, function* () {
32
+ var _a, _b, _c;
33
+ const user = yield fetchSlackUserInfo({ botToken, userId });
34
+ if (user === undefined) {
35
+ return undefined;
36
+ }
37
+ const profile = record(user.profile);
38
+ return ((_c = (_b = (_a = text(profile === null || profile === void 0 ? void 0 : profile.display_name)) !== null && _a !== void 0 ? _a : text(profile === null || profile === void 0 ? void 0 : profile.real_name)) !== null && _b !== void 0 ? _b : text(user.real_name)) !== null && _c !== void 0 ? _c : text(user.name));
39
+ });
40
+ }
41
+ function botName(botToken, botId) {
42
+ return __awaiter(this, void 0, void 0, function* () {
43
+ var _a;
44
+ var _b;
45
+ const perToken = (_b = botNames.get(botToken)) !== null && _b !== void 0 ? _b : new Map();
46
+ const cached = perToken.get(botId);
47
+ if (cached !== undefined) {
48
+ return cached;
49
+ }
50
+ const result = yield callSlackApi({
51
+ botToken,
52
+ operation: "bots.info",
53
+ body: { bot: botId },
54
+ });
55
+ const name = result.ok === true ? text((_a = record(result.bot)) === null || _a === void 0 ? void 0 : _a.name) : undefined;
56
+ if (name === undefined) {
57
+ return undefined;
58
+ }
59
+ perToken.set(botId, name);
60
+ botNames.set(botToken, perToken);
61
+ return name;
62
+ });
63
+ }
64
+ /**
65
+ * Cached per token. A name Slack already sent with the event wins; any
66
+ * failure resolves to undefined and leaves the sender described by id alone.
67
+ */
68
+ export function resolveSlackSenderName(args) {
69
+ return __awaiter(this, void 0, void 0, function* () {
70
+ const { author, botToken } = args;
71
+ if ((author === null || author === void 0 ? void 0 : author.userName) !== undefined && author.userName !== "") {
72
+ return author.userName;
73
+ }
74
+ if (author === undefined || botToken === undefined) {
75
+ return undefined;
76
+ }
77
+ try {
78
+ if (author.userId !== "") {
79
+ return yield userName(botToken, author.userId);
80
+ }
81
+ return author.botId === undefined ? undefined : yield botName(botToken, author.botId);
82
+ }
83
+ catch (_a) {
84
+ return undefined;
85
+ }
86
+ });
87
+ }
@@ -47,7 +47,7 @@ export const SLACK_SETUP_PHASES = [
47
47
  id: "serve",
48
48
  actor: "agent",
49
49
  title: "Serve",
50
- steps: [`${CLI} serve --dir . --dev`, "Confirm log: [agent-sdk/slack] Socket Mode connected"],
50
+ steps: [`${CLI} serve --dir . --dev`, "Confirm log: [bdk/slack] Socket Mode connected"],
51
51
  },
52
52
  {
53
53
  id: "smoke",
@@ -0,0 +1,15 @@
1
+ /**
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
4
+ * is what is cached, so two of them in one turn still cost one call.
5
+ */
6
+ import type { SlackBotToken } from "./types.js";
7
+ type SlackUserRecord = Record<string, unknown>;
8
+ export declare function resetSlackUserInfoCache(): void;
9
+ /** Undefined when the lookup fails; failures are not cached. */
10
+ export declare function fetchSlackUserInfo(args: {
11
+ botToken: SlackBotToken | undefined;
12
+ userId: string;
13
+ }): Promise<SlackUserRecord | undefined>;
14
+ export {};
15
+ //# sourceMappingURL=user-info.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-info.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/user-info.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,KAAK,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAO/C,wBAAgB,uBAAuB,IAAI,IAAI,CAE9C;AAiBD,gEAAgE;AAChE,wBAAsB,kBAAkB,CAAC,IAAI,EAAE;IAC7C,QAAQ,EAAE,aAAa,GAAG,SAAS,CAAC;IACpC,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CAoBvC"}