@cursor/july 0.1.1

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 (623) hide show
  1. package/AGENTS.md +290 -0
  2. package/LICENSE.md +3 -0
  3. package/README.md +1233 -0
  4. package/dist/ab.d.ts +290 -0
  5. package/dist/ab.d.ts.map +1 -0
  6. package/dist/ab.js +386 -0
  7. package/dist/bin/agent-serve.d.ts +15 -0
  8. package/dist/bin/agent-serve.d.ts.map +1 -0
  9. package/dist/bin/agent-serve.js +754 -0
  10. package/dist/channels/github/api.d.ts +101 -0
  11. package/dist/channels/github/api.d.ts.map +1 -0
  12. package/dist/channels/github/api.js +229 -0
  13. package/dist/channels/github/auth.d.ts +67 -0
  14. package/dist/channels/github/auth.d.ts.map +1 -0
  15. package/dist/channels/github/auth.js +239 -0
  16. package/dist/channels/github/binding.d.ts +73 -0
  17. package/dist/channels/github/binding.d.ts.map +1 -0
  18. package/dist/channels/github/binding.js +114 -0
  19. package/dist/channels/github/defaults.d.ts +24 -0
  20. package/dist/channels/github/defaults.d.ts.map +1 -0
  21. package/dist/channels/github/defaults.js +100 -0
  22. package/dist/channels/github/events.d.ts +18 -0
  23. package/dist/channels/github/events.d.ts.map +1 -0
  24. package/dist/channels/github/events.js +59 -0
  25. package/dist/channels/github/forward.d.ts +137 -0
  26. package/dist/channels/github/forward.d.ts.map +1 -0
  27. package/dist/channels/github/forward.js +271 -0
  28. package/dist/channels/github/github-channel.d.ts +127 -0
  29. package/dist/channels/github/github-channel.d.ts.map +1 -0
  30. package/dist/channels/github/github-channel.js +1688 -0
  31. package/dist/channels/github/index.d.ts +52 -0
  32. package/dist/channels/github/index.d.ts.map +1 -0
  33. package/dist/channels/github/index.js +51 -0
  34. package/dist/channels/github/replay.d.ts +115 -0
  35. package/dist/channels/github/replay.d.ts.map +1 -0
  36. package/dist/channels/github/replay.js +282 -0
  37. package/dist/channels/github/state.d.ts +26 -0
  38. package/dist/channels/github/state.d.ts.map +1 -0
  39. package/dist/channels/github/state.js +50 -0
  40. package/dist/channels/github/types.d.ts +385 -0
  41. package/dist/channels/github/types.d.ts.map +1 -0
  42. package/dist/channels/github/types.js +1 -0
  43. package/dist/channels/slack/api.d.ts +117 -0
  44. package/dist/channels/slack/api.d.ts.map +1 -0
  45. package/dist/channels/slack/api.js +437 -0
  46. package/dist/channels/slack/approvals.d.ts +32 -0
  47. package/dist/channels/slack/approvals.d.ts.map +1 -0
  48. package/dist/channels/slack/approvals.js +157 -0
  49. package/dist/channels/slack/assistant.d.ts +23 -0
  50. package/dist/channels/slack/assistant.d.ts.map +1 -0
  51. package/dist/channels/slack/assistant.js +67 -0
  52. package/dist/channels/slack/auth.d.ts +40 -0
  53. package/dist/channels/slack/auth.d.ts.map +1 -0
  54. package/dist/channels/slack/auth.js +71 -0
  55. package/dist/channels/slack/channel-watch.d.ts +46 -0
  56. package/dist/channels/slack/channel-watch.d.ts.map +1 -0
  57. package/dist/channels/slack/channel-watch.js +180 -0
  58. package/dist/channels/slack/constants.d.ts +17 -0
  59. package/dist/channels/slack/constants.d.ts.map +1 -0
  60. package/dist/channels/slack/constants.js +27 -0
  61. package/dist/channels/slack/credentials.d.ts +35 -0
  62. package/dist/channels/slack/credentials.d.ts.map +1 -0
  63. package/dist/channels/slack/credentials.js +88 -0
  64. package/dist/channels/slack/cursor-account.d.ts +76 -0
  65. package/dist/channels/slack/cursor-account.d.ts.map +1 -0
  66. package/dist/channels/slack/cursor-account.js +88 -0
  67. package/dist/channels/slack/defaults.d.ts +32 -0
  68. package/dist/channels/slack/defaults.d.ts.map +1 -0
  69. package/dist/channels/slack/defaults.js +380 -0
  70. package/dist/channels/slack/dispatch.d.ts +43 -0
  71. package/dist/channels/slack/dispatch.d.ts.map +1 -0
  72. package/dist/channels/slack/dispatch.js +185 -0
  73. package/dist/channels/slack/doctor.d.ts +24 -0
  74. package/dist/channels/slack/doctor.d.ts.map +1 -0
  75. package/dist/channels/slack/doctor.js +115 -0
  76. package/dist/channels/slack/event-id-dedupe.d.ts +10 -0
  77. package/dist/channels/slack/event-id-dedupe.d.ts.map +1 -0
  78. package/dist/channels/slack/event-id-dedupe.js +23 -0
  79. package/dist/channels/slack/inbound.d.ts +41 -0
  80. package/dist/channels/slack/inbound.d.ts.map +1 -0
  81. package/dist/channels/slack/inbound.js +166 -0
  82. package/dist/channels/slack/index.d.ts +45 -0
  83. package/dist/channels/slack/index.d.ts.map +1 -0
  84. package/dist/channels/slack/index.js +44 -0
  85. package/dist/channels/slack/init.d.ts +32 -0
  86. package/dist/channels/slack/init.d.ts.map +1 -0
  87. package/dist/channels/slack/init.js +82 -0
  88. package/dist/channels/slack/interactive.d.ts +19 -0
  89. package/dist/channels/slack/interactive.d.ts.map +1 -0
  90. package/dist/channels/slack/interactive.js +142 -0
  91. package/dist/channels/slack/links.d.ts +10 -0
  92. package/dist/channels/slack/links.d.ts.map +1 -0
  93. package/dist/channels/slack/links.js +19 -0
  94. package/dist/channels/slack/live-delivery.d.ts +75 -0
  95. package/dist/channels/slack/live-delivery.d.ts.map +1 -0
  96. package/dist/channels/slack/live-delivery.js +143 -0
  97. package/dist/channels/slack/log.d.ts +25 -0
  98. package/dist/channels/slack/log.d.ts.map +1 -0
  99. package/dist/channels/slack/log.js +47 -0
  100. package/dist/channels/slack/manifest.d.ts +57 -0
  101. package/dist/channels/slack/manifest.d.ts.map +1 -0
  102. package/dist/channels/slack/manifest.js +110 -0
  103. package/dist/channels/slack/pr-ref.d.ts +18 -0
  104. package/dist/channels/slack/pr-ref.d.ts.map +1 -0
  105. package/dist/channels/slack/pr-ref.js +36 -0
  106. package/dist/channels/slack/setup.d.ts +14 -0
  107. package/dist/channels/slack/setup.d.ts.map +1 -0
  108. package/dist/channels/slack/setup.js +86 -0
  109. package/dist/channels/slack/slack-channel.d.ts +15 -0
  110. package/dist/channels/slack/slack-channel.d.ts.map +1 -0
  111. package/dist/channels/slack/slack-channel.js +281 -0
  112. package/dist/channels/slack/socket-mode.d.ts +26 -0
  113. package/dist/channels/slack/socket-mode.d.ts.map +1 -0
  114. package/dist/channels/slack/socket-mode.js +116 -0
  115. package/dist/channels/slack/stream.d.ts +26 -0
  116. package/dist/channels/slack/stream.d.ts.map +1 -0
  117. package/dist/channels/slack/stream.js +39 -0
  118. package/dist/channels/slack/tool-approval-events.d.ts +33 -0
  119. package/dist/channels/slack/tool-approval-events.d.ts.map +1 -0
  120. package/dist/channels/slack/tool-approval-events.js +129 -0
  121. package/dist/channels/slack/types.d.ts +326 -0
  122. package/dist/channels/slack/types.d.ts.map +1 -0
  123. package/dist/channels/slack/types.js +4 -0
  124. package/dist/channels.d.ts +116 -0
  125. package/dist/channels.d.ts.map +1 -0
  126. package/dist/channels.js +294 -0
  127. package/dist/connections.d.ts +75 -0
  128. package/dist/connections.d.ts.map +1 -0
  129. package/dist/connections.js +75 -0
  130. package/dist/docs/404.html +22 -0
  131. package/dist/docs/ab.html +87 -0
  132. package/dist/docs/assets/ab.md.COdXkces.js +63 -0
  133. package/dist/docs/assets/ab.md.COdXkces.lean.js +1 -0
  134. package/dist/docs/assets/app.DqfFEmJd.js +1 -0
  135. package/dist/docs/assets/building-with-agents.md.CJCtZCyi.js +13 -0
  136. package/dist/docs/assets/building-with-agents.md.CJCtZCyi.lean.js +1 -0
  137. package/dist/docs/assets/chunks/@localSearchIndexroot.CcVk1uKq.js +1 -0
  138. package/dist/docs/assets/chunks/VPLocalSearchBox.BaLEdS15.js +9 -0
  139. package/dist/docs/assets/chunks/framework.CAZyNGu9.js +19 -0
  140. package/dist/docs/assets/chunks/theme.CZRvu_0q.js +2 -0
  141. package/dist/docs/assets/concepts.md.Cfb9b-k1.js +4 -0
  142. package/dist/docs/assets/concepts.md.Cfb9b-k1.lean.js +1 -0
  143. package/dist/docs/assets/deployment.md.Dx1TYNk5.js +14 -0
  144. package/dist/docs/assets/deployment.md.Dx1TYNk5.lean.js +1 -0
  145. package/dist/docs/assets/evals.md.DPZ_MAnI.js +85 -0
  146. package/dist/docs/assets/evals.md.DPZ_MAnI.lean.js +1 -0
  147. package/dist/docs/assets/guides_agent-to-agent.md.CrtrsySy.js +10 -0
  148. package/dist/docs/assets/guides_agent-to-agent.md.CrtrsySy.lean.js +1 -0
  149. package/dist/docs/assets/guides_cloud-runtime.md.CYlNMTNp.js +9 -0
  150. package/dist/docs/assets/guides_cloud-runtime.md.CYlNMTNp.lean.js +1 -0
  151. package/dist/docs/assets/guides_github.md.DwbKhCeS.js +20 -0
  152. package/dist/docs/assets/guides_github.md.DwbKhCeS.lean.js +1 -0
  153. package/dist/docs/assets/guides_human-in-the-loop.md.Dvuctx7s.js +28 -0
  154. package/dist/docs/assets/guides_human-in-the-loop.md.Dvuctx7s.lean.js +1 -0
  155. package/dist/docs/assets/guides_slack.md.bv41fHfW.js +37 -0
  156. package/dist/docs/assets/guides_slack.md.bv41fHfW.lean.js +1 -0
  157. package/dist/docs/assets/guides_webhooks.md.hFTik3lf.js +50 -0
  158. package/dist/docs/assets/guides_webhooks.md.hFTik3lf.lean.js +1 -0
  159. package/dist/docs/assets/hillclimbing.md.DHNast08.js +4 -0
  160. package/dist/docs/assets/hillclimbing.md.DHNast08.lean.js +1 -0
  161. package/dist/docs/assets/index.md.BPKcj5AI.js +20 -0
  162. package/dist/docs/assets/index.md.BPKcj5AI.lean.js +1 -0
  163. package/dist/docs/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 +0 -0
  164. package/dist/docs/assets/inter-italic-cyrillic.By2_1cv3.woff2 +0 -0
  165. package/dist/docs/assets/inter-italic-greek-ext.1u6EdAuj.woff2 +0 -0
  166. package/dist/docs/assets/inter-italic-greek.DJ8dCoTZ.woff2 +0 -0
  167. package/dist/docs/assets/inter-italic-latin-ext.CN1xVJS-.woff2 +0 -0
  168. package/dist/docs/assets/inter-italic-latin.C2AdPX0b.woff2 +0 -0
  169. package/dist/docs/assets/inter-italic-vietnamese.BSbpV94h.woff2 +0 -0
  170. package/dist/docs/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 +0 -0
  171. package/dist/docs/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 +0 -0
  172. package/dist/docs/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 +0 -0
  173. package/dist/docs/assets/inter-roman-greek.BBVDIX6e.woff2 +0 -0
  174. package/dist/docs/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 +0 -0
  175. package/dist/docs/assets/inter-roman-latin.Di8DUHzh.woff2 +0 -0
  176. package/dist/docs/assets/inter-roman-vietnamese.BjW4sHH5.woff2 +0 -0
  177. package/dist/docs/assets/quickstart.md.tVPiGK_L.js +35 -0
  178. package/dist/docs/assets/quickstart.md.tVPiGK_L.lean.js +1 -0
  179. package/dist/docs/assets/reference_agent-config.md.Bpd7HQwf.js +34 -0
  180. package/dist/docs/assets/reference_agent-config.md.Bpd7HQwf.lean.js +1 -0
  181. package/dist/docs/assets/reference_channels.md.D7JTR03W.js +53 -0
  182. package/dist/docs/assets/reference_channels.md.D7JTR03W.lean.js +1 -0
  183. package/dist/docs/assets/reference_cli.md.DA730zCu.js +33 -0
  184. package/dist/docs/assets/reference_cli.md.DA730zCu.lean.js +1 -0
  185. package/dist/docs/assets/reference_connections.md.C3vNH_DE.js +26 -0
  186. package/dist/docs/assets/reference_connections.md.C3vNH_DE.lean.js +1 -0
  187. package/dist/docs/assets/reference_hooks.md.BCEc3MyM.js +12 -0
  188. package/dist/docs/assets/reference_hooks.md.BCEc3MyM.lean.js +1 -0
  189. package/dist/docs/assets/reference_http-api.md.DBAahtdz.js +11 -0
  190. package/dist/docs/assets/reference_http-api.md.DBAahtdz.lean.js +1 -0
  191. package/dist/docs/assets/reference_instructions.md.BC05LEQ8.js +12 -0
  192. package/dist/docs/assets/reference_instructions.md.BC05LEQ8.lean.js +1 -0
  193. package/dist/docs/assets/reference_playground.md.CPZhfYaO.js +1 -0
  194. package/dist/docs/assets/reference_playground.md.CPZhfYaO.lean.js +1 -0
  195. package/dist/docs/assets/reference_project-layout.md.Bd_CKtNS.js +31 -0
  196. package/dist/docs/assets/reference_project-layout.md.Bd_CKtNS.lean.js +1 -0
  197. package/dist/docs/assets/reference_schedules.md.D7qijxLk.js +82 -0
  198. package/dist/docs/assets/reference_schedules.md.D7qijxLk.lean.js +1 -0
  199. package/dist/docs/assets/reference_sessions.md.DdjWabnN.js +8 -0
  200. package/dist/docs/assets/reference_sessions.md.DdjWabnN.lean.js +1 -0
  201. package/dist/docs/assets/reference_skills.md.VQnlBT3Q.js +15 -0
  202. package/dist/docs/assets/reference_skills.md.VQnlBT3Q.lean.js +1 -0
  203. package/dist/docs/assets/reference_subagents.md.CIRAVcPK.js +10 -0
  204. package/dist/docs/assets/reference_subagents.md.CIRAVcPK.lean.js +1 -0
  205. package/dist/docs/assets/reference_tools.md.DF5kwlt0.js +46 -0
  206. package/dist/docs/assets/reference_tools.md.DF5kwlt0.lean.js +1 -0
  207. package/dist/docs/assets/scaffolding-agents.md.CyYfWGdc.js +1 -0
  208. package/dist/docs/assets/scaffolding-agents.md.CyYfWGdc.lean.js +1 -0
  209. package/dist/docs/assets/style.Bj-IXa5W.css +1 -0
  210. package/dist/docs/assets/troubleshooting.md.DkovjS7h.js +1 -0
  211. package/dist/docs/assets/troubleshooting.md.DkovjS7h.lean.js +1 -0
  212. package/dist/docs/building-with-agents.html +37 -0
  213. package/dist/docs/concepts.html +28 -0
  214. package/dist/docs/deployment.html +38 -0
  215. package/dist/docs/evals.html +109 -0
  216. package/dist/docs/guides/agent-to-agent.html +34 -0
  217. package/dist/docs/guides/cloud-runtime.html +33 -0
  218. package/dist/docs/guides/github.html +44 -0
  219. package/dist/docs/guides/human-in-the-loop.html +52 -0
  220. package/dist/docs/guides/slack.html +61 -0
  221. package/dist/docs/guides/webhooks.html +74 -0
  222. package/dist/docs/hashmap.json +1 -0
  223. package/dist/docs/hillclimbing.html +28 -0
  224. package/dist/docs/index.html +44 -0
  225. package/dist/docs/quickstart.html +59 -0
  226. package/dist/docs/reference/agent-config.html +58 -0
  227. package/dist/docs/reference/channels.html +77 -0
  228. package/dist/docs/reference/cli.html +57 -0
  229. package/dist/docs/reference/connections.html +50 -0
  230. package/dist/docs/reference/hooks.html +36 -0
  231. package/dist/docs/reference/http-api.html +35 -0
  232. package/dist/docs/reference/instructions.html +36 -0
  233. package/dist/docs/reference/playground.html +25 -0
  234. package/dist/docs/reference/project-layout.html +55 -0
  235. package/dist/docs/reference/schedules.html +106 -0
  236. package/dist/docs/reference/sessions.html +32 -0
  237. package/dist/docs/reference/skills.html +39 -0
  238. package/dist/docs/reference/subagents.html +34 -0
  239. package/dist/docs/reference/tools.html +70 -0
  240. package/dist/docs/scaffolding-agents.html +25 -0
  241. package/dist/docs/troubleshooting.html +25 -0
  242. package/dist/docs/vp-icons.css +0 -0
  243. package/dist/evals.d.ts +312 -0
  244. package/dist/evals.d.ts.map +1 -0
  245. package/dist/evals.js +254 -0
  246. package/dist/hooks.d.ts +23 -0
  247. package/dist/hooks.d.ts.map +1 -0
  248. package/dist/hooks.js +23 -0
  249. package/dist/index.d.ts +71 -0
  250. package/dist/index.d.ts.map +1 -0
  251. package/dist/index.js +101 -0
  252. package/dist/internal/ab-collector.d.ts +42 -0
  253. package/dist/internal/ab-collector.d.ts.map +1 -0
  254. package/dist/internal/ab-collector.js +153 -0
  255. package/dist/internal/ab-fold.d.ts +36 -0
  256. package/dist/internal/ab-fold.d.ts.map +1 -0
  257. package/dist/internal/ab-fold.js +171 -0
  258. package/dist/internal/ab-snapshot.d.ts +70 -0
  259. package/dist/internal/ab-snapshot.d.ts.map +1 -0
  260. package/dist/internal/ab-snapshot.js +208 -0
  261. package/dist/internal/approval-gate.d.ts +34 -0
  262. package/dist/internal/approval-gate.d.ts.map +1 -0
  263. package/dist/internal/approval-gate.js +85 -0
  264. package/dist/internal/auth.d.ts +8 -0
  265. package/dist/internal/auth.d.ts.map +1 -0
  266. package/dist/internal/auth.js +27 -0
  267. package/dist/internal/authored-alias-hooks.d.ts +31 -0
  268. package/dist/internal/authored-alias-hooks.d.ts.map +1 -0
  269. package/dist/internal/authored-alias-hooks.js +43 -0
  270. package/dist/internal/authored-loaders.d.ts +25 -0
  271. package/dist/internal/authored-loaders.d.ts.map +1 -0
  272. package/dist/internal/authored-loaders.js +129 -0
  273. package/dist/internal/bounded-int.d.ts +11 -0
  274. package/dist/internal/bounded-int.d.ts.map +1 -0
  275. package/dist/internal/bounded-int.js +13 -0
  276. package/dist/internal/brand.d.ts +6 -0
  277. package/dist/internal/brand.d.ts.map +1 -0
  278. package/dist/internal/brand.js +17 -0
  279. package/dist/internal/chat-client.d.ts +19 -0
  280. package/dist/internal/chat-client.d.ts.map +1 -0
  281. package/dist/internal/chat-client.js +327 -0
  282. package/dist/internal/cli-ax.d.ts +58 -0
  283. package/dist/internal/cli-ax.d.ts.map +1 -0
  284. package/dist/internal/cli-ax.js +345 -0
  285. package/dist/internal/cli-cursor.d.ts +20 -0
  286. package/dist/internal/cli-cursor.d.ts.map +1 -0
  287. package/dist/internal/cli-cursor.js +227 -0
  288. package/dist/internal/cli-github.d.ts +47 -0
  289. package/dist/internal/cli-github.d.ts.map +1 -0
  290. package/dist/internal/cli-github.js +644 -0
  291. package/dist/internal/cli-slack.d.ts +18 -0
  292. package/dist/internal/cli-slack.d.ts.map +1 -0
  293. package/dist/internal/cli-slack.js +144 -0
  294. package/dist/internal/cloud-merge.d.ts +23 -0
  295. package/dist/internal/cloud-merge.d.ts.map +1 -0
  296. package/dist/internal/cloud-merge.js +28 -0
  297. package/dist/internal/cron.d.ts +17 -0
  298. package/dist/internal/cron.d.ts.map +1 -0
  299. package/dist/internal/cron.js +60 -0
  300. package/dist/internal/cursor/account-mcp.d.ts +95 -0
  301. package/dist/internal/cursor/account-mcp.d.ts.map +1 -0
  302. package/dist/internal/cursor/account-mcp.js +342 -0
  303. package/dist/internal/cursor/backend-client.d.ts +118 -0
  304. package/dist/internal/cursor/backend-client.d.ts.map +1 -0
  305. package/dist/internal/cursor/backend-client.js +477 -0
  306. package/dist/internal/cursor/credentials.d.ts +112 -0
  307. package/dist/internal/cursor/credentials.d.ts.map +1 -0
  308. package/dist/internal/cursor/credentials.js +329 -0
  309. package/dist/internal/cursor-event-relay.d.ts +111 -0
  310. package/dist/internal/cursor-event-relay.d.ts.map +1 -0
  311. package/dist/internal/cursor-event-relay.js +181 -0
  312. package/dist/internal/cursor-relay-core.d.ts +113 -0
  313. package/dist/internal/cursor-relay-core.d.ts.map +1 -0
  314. package/dist/internal/cursor-relay-core.js +364 -0
  315. package/dist/internal/cursor-slack-relay.d.ts +94 -0
  316. package/dist/internal/cursor-slack-relay.d.ts.map +1 -0
  317. package/dist/internal/cursor-slack-relay.js +171 -0
  318. package/dist/internal/describe-error.d.ts +3 -0
  319. package/dist/internal/describe-error.d.ts.map +1 -0
  320. package/dist/internal/describe-error.js +4 -0
  321. package/dist/internal/dev-mode.d.ts +13 -0
  322. package/dist/internal/dev-mode.d.ts.map +1 -0
  323. package/dist/internal/dev-mode.js +17 -0
  324. package/dist/internal/discovery.d.ts +55 -0
  325. package/dist/internal/discovery.d.ts.map +1 -0
  326. package/dist/internal/discovery.js +1427 -0
  327. package/dist/internal/distribution.d.ts +47 -0
  328. package/dist/internal/distribution.d.ts.map +1 -0
  329. package/dist/internal/distribution.js +82 -0
  330. package/dist/internal/docs-site.d.ts +28 -0
  331. package/dist/internal/docs-site.d.ts.map +1 -0
  332. package/dist/internal/docs-site.js +169 -0
  333. package/dist/internal/duration.d.ts +8 -0
  334. package/dist/internal/duration.d.ts.map +1 -0
  335. package/dist/internal/duration.js +35 -0
  336. package/dist/internal/eval-run-store.d.ts +81 -0
  337. package/dist/internal/eval-run-store.d.ts.map +1 -0
  338. package/dist/internal/eval-run-store.js +396 -0
  339. package/dist/internal/eval-runner.d.ts +76 -0
  340. package/dist/internal/eval-runner.d.ts.map +1 -0
  341. package/dist/internal/eval-runner.js +336 -0
  342. package/dist/internal/event-log.d.ts +51 -0
  343. package/dist/internal/event-log.d.ts.map +1 -0
  344. package/dist/internal/event-log.js +167 -0
  345. package/dist/internal/event-mapper.d.ts +46 -0
  346. package/dist/internal/event-mapper.d.ts.map +1 -0
  347. package/dist/internal/event-mapper.js +226 -0
  348. package/dist/internal/frontmatter.d.ts +12 -0
  349. package/dist/internal/frontmatter.d.ts.map +1 -0
  350. package/dist/internal/frontmatter.js +61 -0
  351. package/dist/internal/github-fanout.d.ts +32 -0
  352. package/dist/internal/github-fanout.d.ts.map +1 -0
  353. package/dist/internal/github-fanout.js +122 -0
  354. package/dist/internal/handleAgentServeTrigger.d.ts +59 -0
  355. package/dist/internal/handleAgentServeTrigger.d.ts.map +1 -0
  356. package/dist/internal/handleAgentServeTrigger.js +115 -0
  357. package/dist/internal/host-platforms.d.ts +40 -0
  358. package/dist/internal/host-platforms.d.ts.map +1 -0
  359. package/dist/internal/host-platforms.js +113 -0
  360. package/dist/internal/http-channel.d.ts +54 -0
  361. package/dist/internal/http-channel.d.ts.map +1 -0
  362. package/dist/internal/http-channel.js +382 -0
  363. package/dist/internal/ids.d.ts +19 -0
  364. package/dist/internal/ids.d.ts.map +1 -0
  365. package/dist/internal/ids.js +34 -0
  366. package/dist/internal/init-project.d.ts +22 -0
  367. package/dist/internal/init-project.d.ts.map +1 -0
  368. package/dist/internal/init-project.js +125 -0
  369. package/dist/internal/json-dir-store.d.ts +32 -0
  370. package/dist/internal/json-dir-store.d.ts.map +1 -0
  371. package/dist/internal/json-dir-store.js +100 -0
  372. package/dist/internal/json-schema.d.ts +18 -0
  373. package/dist/internal/json-schema.d.ts.map +1 -0
  374. package/dist/internal/json-schema.js +53 -0
  375. package/dist/internal/log-ring.d.ts +23 -0
  376. package/dist/internal/log-ring.d.ts.map +1 -0
  377. package/dist/internal/log-ring.js +42 -0
  378. package/dist/internal/map-pool.d.ts +6 -0
  379. package/dist/internal/map-pool.d.ts.map +1 -0
  380. package/dist/internal/map-pool.js +41 -0
  381. package/dist/internal/mcp-endpoint.d.ts +59 -0
  382. package/dist/internal/mcp-endpoint.d.ts.map +1 -0
  383. package/dist/internal/mcp-endpoint.js +355 -0
  384. package/dist/internal/mcp-host.d.ts +28 -0
  385. package/dist/internal/mcp-host.d.ts.map +1 -0
  386. package/dist/internal/mcp-host.js +162 -0
  387. package/dist/internal/net.d.ts +5 -0
  388. package/dist/internal/net.d.ts.map +1 -0
  389. package/dist/internal/net.js +30 -0
  390. package/dist/internal/peer-connections.d.ts +44 -0
  391. package/dist/internal/peer-connections.d.ts.map +1 -0
  392. package/dist/internal/peer-connections.js +67 -0
  393. package/dist/internal/playground/static.d.ts +35 -0
  394. package/dist/internal/playground/static.d.ts.map +1 -0
  395. package/dist/internal/playground/static.js +162 -0
  396. package/dist/internal/playground/toolchain.d.ts +57 -0
  397. package/dist/internal/playground/toolchain.d.ts.map +1 -0
  398. package/dist/internal/playground/toolchain.js +226 -0
  399. package/dist/internal/reminder-runner.d.ts +62 -0
  400. package/dist/internal/reminder-runner.d.ts.map +1 -0
  401. package/dist/internal/reminder-runner.js +582 -0
  402. package/dist/internal/reminder-schedule.d.ts +22 -0
  403. package/dist/internal/reminder-schedule.d.ts.map +1 -0
  404. package/dist/internal/reminder-schedule.js +82 -0
  405. package/dist/internal/reminder-store.d.ts +58 -0
  406. package/dist/internal/reminder-store.d.ts.map +1 -0
  407. package/dist/internal/reminder-store.js +106 -0
  408. package/dist/internal/resolved-connections.d.ts +41 -0
  409. package/dist/internal/resolved-connections.d.ts.map +1 -0
  410. package/dist/internal/resolved-connections.js +73 -0
  411. package/dist/internal/review-comments.d.ts +50 -0
  412. package/dist/internal/review-comments.d.ts.map +1 -0
  413. package/dist/internal/review-comments.js +194 -0
  414. package/dist/internal/router.d.ts +33 -0
  415. package/dist/internal/router.d.ts.map +1 -0
  416. package/dist/internal/router.js +93 -0
  417. package/dist/internal/run-client.d.ts +49 -0
  418. package/dist/internal/run-client.d.ts.map +1 -0
  419. package/dist/internal/run-client.js +208 -0
  420. package/dist/internal/schedule-runner.d.ts +31 -0
  421. package/dist/internal/schedule-runner.d.ts.map +1 -0
  422. package/dist/internal/schedule-runner.js +126 -0
  423. package/dist/internal/sdk-runner.d.ts +41 -0
  424. package/dist/internal/sdk-runner.d.ts.map +1 -0
  425. package/dist/internal/sdk-runner.js +221 -0
  426. package/dist/internal/server.d.ts +25 -0
  427. package/dist/internal/server.d.ts.map +1 -0
  428. package/dist/internal/server.js +1374 -0
  429. package/dist/internal/session-engine.d.ts +287 -0
  430. package/dist/internal/session-engine.d.ts.map +1 -0
  431. package/dist/internal/session-engine.js +1377 -0
  432. package/dist/internal/session-store.d.ts +29 -0
  433. package/dist/internal/session-store.d.ts.map +1 -0
  434. package/dist/internal/session-store.js +140 -0
  435. package/dist/internal/session-urls.d.ts +10 -0
  436. package/dist/internal/session-urls.d.ts.map +1 -0
  437. package/dist/internal/session-urls.js +25 -0
  438. package/dist/internal/stream-progress.d.ts +14 -0
  439. package/dist/internal/stream-progress.d.ts.map +1 -0
  440. package/dist/internal/stream-progress.js +195 -0
  441. package/dist/internal/tool-result.d.ts +20 -0
  442. package/dist/internal/tool-result.d.ts.map +1 -0
  443. package/dist/internal/tool-result.js +45 -0
  444. package/dist/internal/trajectory.d.ts +56 -0
  445. package/dist/internal/trajectory.d.ts.map +1 -0
  446. package/dist/internal/trajectory.js +248 -0
  447. package/dist/internal/workspace.d.ts +42 -0
  448. package/dist/internal/workspace.d.ts.map +1 -0
  449. package/dist/internal/workspace.js +199 -0
  450. package/dist/playground/assets/cursor-icons-outline-oY2V_mvK.woff2 +0 -0
  451. package/dist/playground/assets/index-1K-hG-7p.css +1 -0
  452. package/dist/playground/assets/index-FlWjhg3x.js +79 -0
  453. package/dist/playground/index.html +17 -0
  454. package/dist/reminders.d.ts +23 -0
  455. package/dist/reminders.d.ts.map +1 -0
  456. package/dist/reminders.js +22 -0
  457. package/dist/schedules.d.ts +23 -0
  458. package/dist/schedules.d.ts.map +1 -0
  459. package/dist/schedules.js +26 -0
  460. package/dist/skills.d.ts +22 -0
  461. package/dist/skills.d.ts.map +1 -0
  462. package/dist/skills.js +22 -0
  463. package/dist/tools.d.ts +92 -0
  464. package/dist/tools.d.ts.map +1 -0
  465. package/dist/tools.js +68 -0
  466. package/dist/types.d.ts +1609 -0
  467. package/dist/types.d.ts.map +1 -0
  468. package/dist/types.js +80 -0
  469. package/docs/README.md +174 -0
  470. package/docs/ab.md +355 -0
  471. package/docs/building-with-agents.md +129 -0
  472. package/docs/concepts.md +177 -0
  473. package/docs/deployment.md +218 -0
  474. package/docs/evals.md +383 -0
  475. package/docs/guides/agent-to-agent.md +118 -0
  476. package/docs/guides/cloud-runtime.md +122 -0
  477. package/docs/guides/github.md +172 -0
  478. package/docs/guides/human-in-the-loop.md +131 -0
  479. package/docs/guides/slack.md +245 -0
  480. package/docs/guides/webhooks.md +201 -0
  481. package/docs/hillclimbing.md +93 -0
  482. package/docs/quickstart.md +183 -0
  483. package/docs/reference/agent-config.md +154 -0
  484. package/docs/reference/channels.md +206 -0
  485. package/docs/reference/cli.md +257 -0
  486. package/docs/reference/connections.md +137 -0
  487. package/docs/reference/hooks.md +74 -0
  488. package/docs/reference/http-api.md +219 -0
  489. package/docs/reference/instructions.md +77 -0
  490. package/docs/reference/playground.md +67 -0
  491. package/docs/reference/project-layout.md +119 -0
  492. package/docs/reference/schedules.md +220 -0
  493. package/docs/reference/sessions.md +165 -0
  494. package/docs/reference/skills.md +79 -0
  495. package/docs/reference/subagents.md +74 -0
  496. package/docs/reference/tools.md +203 -0
  497. package/docs/scaffolding-agents.md +113 -0
  498. package/docs/troubleshooting.md +95 -0
  499. package/package.json +185 -0
  500. package/skills/ab/SKILL.md +139 -0
  501. package/skills/create-agent/SKILL.md +219 -0
  502. package/skills/debug/SKILL.md +71 -0
  503. package/skills/evals/SKILL.md +217 -0
  504. package/skills/framework-map/SKILL.md +142 -0
  505. package/skills/github/SKILL.md +144 -0
  506. package/skills/hillclimb/SKILL.md +162 -0
  507. package/skills/setup-slack/SKILL.md +180 -0
  508. package/src/ab.ts +675 -0
  509. package/src/bin/agent-serve.ts +949 -0
  510. package/src/channels/github/api.ts +374 -0
  511. package/src/channels/github/auth.ts +275 -0
  512. package/src/channels/github/binding.ts +223 -0
  513. package/src/channels/github/defaults.ts +111 -0
  514. package/src/channels/github/events.ts +72 -0
  515. package/src/channels/github/forward.ts +381 -0
  516. package/src/channels/github/github-channel.ts +2270 -0
  517. package/src/channels/github/index.ts +52 -0
  518. package/src/channels/github/replay.ts +387 -0
  519. package/src/channels/github/state.ts +95 -0
  520. package/src/channels/github/types.ts +490 -0
  521. package/src/channels/slack/api.ts +580 -0
  522. package/src/channels/slack/approvals.ts +198 -0
  523. package/src/channels/slack/assistant.ts +76 -0
  524. package/src/channels/slack/auth.ts +112 -0
  525. package/src/channels/slack/channel-watch.ts +219 -0
  526. package/src/channels/slack/constants.ts +30 -0
  527. package/src/channels/slack/credentials.ts +90 -0
  528. package/src/channels/slack/cursor-account.ts +166 -0
  529. package/src/channels/slack/defaults.ts +450 -0
  530. package/src/channels/slack/dispatch.ts +293 -0
  531. package/src/channels/slack/doctor.ts +135 -0
  532. package/src/channels/slack/event-id-dedupe.ts +30 -0
  533. package/src/channels/slack/inbound.ts +219 -0
  534. package/src/channels/slack/index.ts +45 -0
  535. package/src/channels/slack/init.ts +133 -0
  536. package/src/channels/slack/interactive.ts +194 -0
  537. package/src/channels/slack/links.ts +23 -0
  538. package/src/channels/slack/live-delivery.ts +201 -0
  539. package/src/channels/slack/log.ts +83 -0
  540. package/src/channels/slack/manifest.ts +179 -0
  541. package/src/channels/slack/pr-ref.ts +50 -0
  542. package/src/channels/slack/setup.ts +97 -0
  543. package/src/channels/slack/slack-channel.ts +374 -0
  544. package/src/channels/slack/socket-mode.ts +154 -0
  545. package/src/channels/slack/stream.ts +63 -0
  546. package/src/channels/slack/tool-approval-events.ts +136 -0
  547. package/src/channels/slack/types.ts +349 -0
  548. package/src/channels.ts +385 -0
  549. package/src/connections.ts +89 -0
  550. package/src/evals.ts +501 -0
  551. package/src/hooks.ts +33 -0
  552. package/src/index.ts +184 -0
  553. package/src/internal/ab-collector.ts +210 -0
  554. package/src/internal/ab-fold.ts +228 -0
  555. package/src/internal/ab-snapshot.ts +335 -0
  556. package/src/internal/approval-gate.ts +115 -0
  557. package/src/internal/auth.ts +39 -0
  558. package/src/internal/authored-alias-hooks.ts +69 -0
  559. package/src/internal/authored-loaders.ts +138 -0
  560. package/src/internal/bounded-int.ts +27 -0
  561. package/src/internal/brand.ts +29 -0
  562. package/src/internal/chat-client.ts +407 -0
  563. package/src/internal/cli-ax.ts +474 -0
  564. package/src/internal/cli-cursor.ts +275 -0
  565. package/src/internal/cli-github.ts +849 -0
  566. package/src/internal/cli-slack.ts +175 -0
  567. package/src/internal/cloud-merge.ts +41 -0
  568. package/src/internal/cron.ts +78 -0
  569. package/src/internal/cursor/account-mcp.ts +472 -0
  570. package/src/internal/cursor/backend-client.ts +614 -0
  571. package/src/internal/cursor/credentials.ts +401 -0
  572. package/src/internal/cursor-event-relay.ts +281 -0
  573. package/src/internal/cursor-relay-core.ts +444 -0
  574. package/src/internal/cursor-slack-relay.ts +242 -0
  575. package/src/internal/describe-error.ts +4 -0
  576. package/src/internal/dev-mode.ts +20 -0
  577. package/src/internal/discovery.ts +1709 -0
  578. package/src/internal/distribution.ts +97 -0
  579. package/src/internal/docs-site.ts +191 -0
  580. package/src/internal/duration.ts +39 -0
  581. package/src/internal/eval-run-store.ts +519 -0
  582. package/src/internal/eval-runner.ts +522 -0
  583. package/src/internal/event-log.ts +175 -0
  584. package/src/internal/event-mapper.ts +272 -0
  585. package/src/internal/frontmatter.ts +77 -0
  586. package/src/internal/github-fanout.ts +159 -0
  587. package/src/internal/handleAgentServeTrigger.ts +156 -0
  588. package/src/internal/host-platforms.ts +144 -0
  589. package/src/internal/http-channel.ts +546 -0
  590. package/src/internal/ids.ts +44 -0
  591. package/src/internal/init-project.ts +165 -0
  592. package/src/internal/json-dir-store.ts +109 -0
  593. package/src/internal/json-schema.ts +69 -0
  594. package/src/internal/log-ring.ts +59 -0
  595. package/src/internal/map-pool.ts +32 -0
  596. package/src/internal/mcp-endpoint.ts +518 -0
  597. package/src/internal/mcp-host.ts +211 -0
  598. package/src/internal/net.ts +31 -0
  599. package/src/internal/peer-connections.ts +100 -0
  600. package/src/internal/playground/static.ts +189 -0
  601. package/src/internal/playground/toolchain.ts +277 -0
  602. package/src/internal/reminder-runner.ts +756 -0
  603. package/src/internal/reminder-schedule.ts +106 -0
  604. package/src/internal/reminder-store.ts +145 -0
  605. package/src/internal/resolved-connections.ts +145 -0
  606. package/src/internal/review-comments.ts +268 -0
  607. package/src/internal/router.ts +145 -0
  608. package/src/internal/run-client.ts +320 -0
  609. package/src/internal/schedule-runner.ts +161 -0
  610. package/src/internal/sdk-runner.ts +315 -0
  611. package/src/internal/server.ts +1737 -0
  612. package/src/internal/session-engine.ts +1810 -0
  613. package/src/internal/session-store.ts +147 -0
  614. package/src/internal/session-urls.ts +40 -0
  615. package/src/internal/stream-progress.ts +254 -0
  616. package/src/internal/tool-result.ts +54 -0
  617. package/src/internal/trajectory.ts +306 -0
  618. package/src/internal/workspace.ts +223 -0
  619. package/src/reminders.ts +35 -0
  620. package/src/schedules.ts +37 -0
  621. package/src/skills.ts +27 -0
  622. package/src/tools.ts +127 -0
  623. package/src/types.ts +1848 -0
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Generate importable Slack app manifests (dev + prod).
3
+ *
4
+ * Import at https://api.slack.com/apps -> Create New App -> From a manifest.
5
+ * Always Socket Mode — no Events Request URL.
6
+ */
7
+ import type { SlackManifestOptions } from "./types.js";
8
+ export interface SlackAppManifest {
9
+ display_information: {
10
+ name: string;
11
+ description?: string;
12
+ };
13
+ features: {
14
+ bot_user: {
15
+ display_name: string;
16
+ always_online: boolean;
17
+ };
18
+ assistant_view?: {
19
+ assistant_description: string;
20
+ suggested_prompts: Array<{
21
+ title: string;
22
+ message: string;
23
+ }>;
24
+ };
25
+ app_home?: {
26
+ home_tab_enabled: boolean;
27
+ messages_tab_enabled: boolean;
28
+ messages_tab_read_only_enabled: boolean;
29
+ };
30
+ };
31
+ oauth_config: {
32
+ scopes: {
33
+ bot: string[];
34
+ };
35
+ };
36
+ settings: {
37
+ event_subscriptions: {
38
+ bot_events: string[];
39
+ };
40
+ interactivity: {
41
+ is_enabled: boolean;
42
+ };
43
+ org_deploy_enabled: boolean;
44
+ socket_mode_enabled: boolean;
45
+ token_rotation_enabled: boolean;
46
+ is_mcp_enabled: boolean;
47
+ };
48
+ }
49
+ /**
50
+ * Build a Slack app manifest suitable for Create from Manifest.
51
+ */
52
+ export declare function buildSlackManifest(options: SlackManifestOptions): SlackAppManifest;
53
+ export declare function buildSlackManifestPair(options: Omit<SlackManifestOptions, "env">): {
54
+ dev: SlackAppManifest;
55
+ prod: SlackAppManifest;
56
+ };
57
+ //# sourceMappingURL=manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/manifest.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEvD,MAAM,WAAW,gBAAgB;IAC/B,mBAAmB,EAAE;QACnB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,QAAQ,EAAE;QACR,QAAQ,EAAE;YACR,YAAY,EAAE,MAAM,CAAC;YACrB,aAAa,EAAE,OAAO,CAAC;SACxB,CAAC;QACF,cAAc,CAAC,EAAE;YACf,qBAAqB,EAAE,MAAM,CAAC;YAC9B,iBAAiB,EAAE,KAAK,CAAC;gBAAE,KAAK,EAAE,MAAM,CAAC;gBAAC,OAAO,EAAE,MAAM,CAAA;aAAE,CAAC,CAAC;SAC9D,CAAC;QACF,QAAQ,CAAC,EAAE;YACT,gBAAgB,EAAE,OAAO,CAAC;YAC1B,oBAAoB,EAAE,OAAO,CAAC;YAC9B,8BAA8B,EAAE,OAAO,CAAC;SACzC,CAAC;KACH,CAAC;IACF,YAAY,EAAE;QACZ,MAAM,EAAE;YACN,GAAG,EAAE,MAAM,EAAE,CAAC;SACf,CAAC;KACH,CAAC;IACF,QAAQ,EAAE;QACR,mBAAmB,EAAE;YACnB,UAAU,EAAE,MAAM,EAAE,CAAC;SACtB,CAAC;QACF,aAAa,EAAE;YACb,UAAU,EAAE,OAAO,CAAC;SACrB,CAAC;QACF,kBAAkB,EAAE,OAAO,CAAC;QAC5B,mBAAmB,EAAE,OAAO,CAAC;QAC7B,sBAAsB,EAAE,OAAO,CAAC;QAChC,cAAc,EAAE,OAAO,CAAC;KACzB,CAAC;CACH;AAyCD;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,oBAAoB,GAC5B,gBAAgB,CA0ElB;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,IAAI,CAAC,oBAAoB,EAAE,KAAK,CAAC,GACzC;IACD,GAAG,EAAE,gBAAgB,CAAC;IACtB,IAAI,EAAE,gBAAgB,CAAC;CACxB,CAKA"}
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Generate importable Slack app manifests (dev + prod).
3
+ *
4
+ * Import at https://api.slack.com/apps -> Create New App -> From a manifest.
5
+ * Always Socket Mode — no Events Request URL.
6
+ */
7
+ const BOT_SCOPES = [
8
+ "app_mentions:read",
9
+ "assistant:write",
10
+ "channels:history",
11
+ "chat:write",
12
+ "groups:history",
13
+ "im:history",
14
+ "im:read",
15
+ "im:write",
16
+ "mpim:history",
17
+ "users:read",
18
+ ];
19
+ const BOT_EVENTS = ["app_mention", "message.im"];
20
+ function appSlug(name) {
21
+ const base = name
22
+ .toLowerCase()
23
+ .replace(/[^a-zA-Z0-9_-]+/g, "-")
24
+ .replace(/^-+|-+$/g, "")
25
+ .slice(0, 32);
26
+ return base.length > 0 ? base : "agent";
27
+ }
28
+ function isBennyApp(name) {
29
+ return appSlug(name) === "benny";
30
+ }
31
+ function toBotDisplayName(name, env) {
32
+ const fallback = appSlug(name);
33
+ // The Cursor Automations Benny already owns @benny in the Anysphere
34
+ // workspace, so the agent-serve Benny app must use @benny-dev in both
35
+ // envs (not only the usual -dev suffix on the dev profile).
36
+ if (fallback === "benny") {
37
+ return "benny-dev";
38
+ }
39
+ return env === "dev" ? `${fallback}-dev`.slice(0, 35) : fallback;
40
+ }
41
+ /**
42
+ * Build a Slack app manifest suitable for Create from Manifest.
43
+ */
44
+ export function buildSlackManifest(options) {
45
+ var _a, _b;
46
+ const env = options.env;
47
+ const benny = isBennyApp(options.name);
48
+ // Benny's app title matches its handle so the Install App UI shows
49
+ // benny-dev (not "benny (dev)" / "Benny").
50
+ const displayName = benny
51
+ ? "benny-dev"
52
+ : env === "dev"
53
+ ? `${options.name} (dev)`
54
+ : options.name;
55
+ const botName = (_a = options.botDisplayName) !== null && _a !== void 0 ? _a : toBotDisplayName(options.name, env);
56
+ const includeAssistant = options.assistant !== false;
57
+ const botScopes = includeAssistant
58
+ ? [...BOT_SCOPES]
59
+ : BOT_SCOPES.filter((scope) => scope !== "assistant:write");
60
+ const botEvents = options.channelPosts === true
61
+ ? [...BOT_EVENTS, "message.channels", "message.groups"]
62
+ : [...BOT_EVENTS];
63
+ const suggested = options.suggestedPrompts !== undefined ? options.suggestedPrompts : [];
64
+ return {
65
+ display_information: Object.assign({ name: displayName }, (options.description === undefined
66
+ ? {}
67
+ : { description: options.description })),
68
+ features: Object.assign({ bot_user: {
69
+ display_name: botName,
70
+ always_online: true,
71
+ }, app_home: {
72
+ home_tab_enabled: false,
73
+ messages_tab_enabled: true,
74
+ messages_tab_read_only_enabled: false,
75
+ } }, (includeAssistant
76
+ ? {
77
+ assistant_view: {
78
+ assistant_description: (_b = options.description) !== null && _b !== void 0 ? _b : `${options.name} agent served by agent-serve`,
79
+ suggested_prompts: suggested,
80
+ },
81
+ }
82
+ : {})),
83
+ oauth_config: {
84
+ scopes: {
85
+ bot: botScopes,
86
+ },
87
+ },
88
+ settings: {
89
+ event_subscriptions: {
90
+ bot_events: botEvents,
91
+ },
92
+ interactivity: {
93
+ is_enabled: options.interactivity === true,
94
+ },
95
+ // Benny installs org-wide in the Cursor FE & ADM workspace.
96
+ org_deploy_enabled: benny,
97
+ // Always Socket Mode — agent-serve has no Events Request URL path.
98
+ // (Do not set false even if Slack's empty-app stub defaults to off.)
99
+ socket_mode_enabled: true,
100
+ token_rotation_enabled: false,
101
+ is_mcp_enabled: false,
102
+ },
103
+ };
104
+ }
105
+ export function buildSlackManifestPair(options) {
106
+ return {
107
+ dev: buildSlackManifest(Object.assign(Object.assign({}, options), { env: "dev" })),
108
+ prod: buildSlackManifest(Object.assign(Object.assign({}, options), { env: "prod" })),
109
+ };
110
+ }
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Best-effort GitHub PR references from free-form chat (Slack, etc.).
3
+ */
4
+ export interface GithubPrRef {
5
+ /** Normalized URL `https://github.com/owner/repo/pull/N`. */
6
+ url: string;
7
+ /** Compact `owner/repo#N`. */
8
+ label: string;
9
+ owner: string;
10
+ repo: string;
11
+ number: number;
12
+ }
13
+ /**
14
+ * Find the first GitHub PR URL or `owner/repo#N` in `text`.
15
+ * Returns `undefined` when none is present.
16
+ */
17
+ export declare function extractGithubPrRef(text: string): GithubPrRef | undefined;
18
+ //# sourceMappingURL=pr-ref.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pr-ref.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/pr-ref.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,WAAW;IAC1B,6DAA6D;IAC7D,GAAG,EAAE,MAAM,CAAC;IACZ,8BAA8B;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CA+BxE"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Best-effort GitHub PR references from free-form chat (Slack, etc.).
3
+ */
4
+ /**
5
+ * Find the first GitHub PR URL or `owner/repo#N` in `text`.
6
+ * Returns `undefined` when none is present.
7
+ */
8
+ export function extractGithubPrRef(text) {
9
+ const urlMatch = text.match(/https?:\/\/(?:www\.)?github\.com\/([\w.-]+)\/([\w.-]+)\/pull\/(\d+)/i);
10
+ if (urlMatch !== null) {
11
+ const owner = urlMatch[1];
12
+ const repo = urlMatch[2];
13
+ const number = Number(urlMatch[3]);
14
+ return {
15
+ owner,
16
+ repo,
17
+ number,
18
+ url: `https://github.com/${owner}/${repo}/pull/${number}`,
19
+ label: `${owner}/${repo}#${number}`,
20
+ };
21
+ }
22
+ const hashMatch = text.match(/\b([\w.-]+)\/([\w.-]+)#(\d+)\b/);
23
+ if (hashMatch === null) {
24
+ return undefined;
25
+ }
26
+ const owner = hashMatch[1];
27
+ const repo = hashMatch[2];
28
+ const number = Number(hashMatch[3]);
29
+ return {
30
+ owner,
31
+ repo,
32
+ number,
33
+ url: `https://github.com/${owner}/${repo}/pull/${number}`,
34
+ label: `${owner}/${repo}#${number}`,
35
+ };
36
+ }
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Slack setup guide printed by `agent-serve slack setup`.
3
+ *
4
+ * Mirrors the Cursor skill at skills/setup-slack/SKILL.md.
5
+ */
6
+ export interface SlackSetupPhase {
7
+ id: string;
8
+ actor: "agent" | "human";
9
+ title: string;
10
+ steps: string[];
11
+ }
12
+ export declare const SLACK_SETUP_PHASES: SlackSetupPhase[];
13
+ export declare function formatSlackSetupGuide(): string;
14
+ //# sourceMappingURL=setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/setup.ts"],"names":[],"mappings":"AAAA;;;;GAIG;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,EA4D/C,CAAC;AAEF,wBAAgB,qBAAqB,IAAI,MAAM,CAqB9C"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Slack setup guide printed by `agent-serve slack setup`.
3
+ *
4
+ * Mirrors the Cursor skill at skills/setup-slack/SKILL.md.
5
+ */
6
+ export const SLACK_SETUP_PHASES = [
7
+ {
8
+ id: "generate",
9
+ actor: "agent",
10
+ title: "Generate channel + manifests",
11
+ steps: [
12
+ "agent-serve slack init --dir . --name My Agent",
13
+ "Manifests default to Socket Mode (no public Request URL).",
14
+ ],
15
+ },
16
+ {
17
+ id: "createApps",
18
+ actor: "human",
19
+ title: "Create two Slack apps from manifests",
20
+ steps: [
21
+ "Open https://api.slack.com/apps -> Create New App from a manifest",
22
+ "Paste .agent-serve/slack/manifest.dev.json -> create the *dev* app",
23
+ "Repeat with manifest.prod.json for the *prod* app",
24
+ ],
25
+ },
26
+ {
27
+ id: "install",
28
+ actor: "human",
29
+ title: "Install + mint App-Level Token",
30
+ steps: [
31
+ "Install to Workspace; copy Bot User OAuth Token (xoxb-...)",
32
+ "App-Level Tokens: create token with connections:write; copy xapp-...",
33
+ ],
34
+ },
35
+ {
36
+ id: "env",
37
+ actor: "agent",
38
+ title: "Wire environment",
39
+ steps: [
40
+ "Write per-agent tokens into .env.local (see .agent-serve/slack/env.example)",
41
+ "Multi-agent: <PREFIX>_SLACK_BOT_TOKEN + <PREFIX>_SLACK_APP_TOKEN",
42
+ "Single agent: SLACK_BOT_TOKEN + SLACK_APP_TOKEN (--no-prefix)",
43
+ "agent-serve slack doctor --prefix <PREFIX>",
44
+ ],
45
+ },
46
+ {
47
+ id: "serve",
48
+ actor: "agent",
49
+ title: "Serve",
50
+ steps: [
51
+ "agent-serve serve --dir . --dev",
52
+ "Confirm log: [agent-serve/slack] Socket Mode connected",
53
+ ],
54
+ },
55
+ {
56
+ id: "smoke",
57
+ actor: "human",
58
+ title: "Smoke test",
59
+ steps: [
60
+ "Invite the bot to a channel",
61
+ "@mention it or DM it",
62
+ "Confirm logs: inbound → session start → reply delivered",
63
+ "Confirm streaming reply and rotating status",
64
+ ],
65
+ },
66
+ ];
67
+ export function formatSlackSetupGuide() {
68
+ const lines = [
69
+ "agent-serve — Slack setup (Socket Mode)",
70
+ "",
71
+ "Goal: importable dev + prod Slack apps over Socket Mode (no public URL).",
72
+ "App-Level Token (xapp-...) + Bot Token (xoxb-...) required.",
73
+ "",
74
+ ];
75
+ for (const [index, phase] of SLACK_SETUP_PHASES.entries()) {
76
+ lines.push(`## Phase ${index} — ${phase.title} (${phase.actor})`);
77
+ for (const step of phase.steps) {
78
+ lines.push(` - ${step}`);
79
+ }
80
+ lines.push("");
81
+ }
82
+ lines.push("Status file: .agent-serve/slack/setup-status.json");
83
+ lines.push("Skill (Cursor): packages/agent-serve/skills/setup-slack/SKILL.md");
84
+ lines.push("");
85
+ return lines.join("\n");
86
+ }
@@ -0,0 +1,15 @@
1
+ /**
2
+ * `slackChannel()` — platform channel pack for Slack (Socket Mode).
3
+ *
4
+ * Inbound events arrive over a WebSocket (`SLACK_APP_TOKEN`); no public
5
+ * Request URL or Events HTTP route is required. When `toolApprovals`
6
+ * is enabled, Approve/Deny buttons arrive as Socket Mode `interactive`
7
+ * envelopes.
8
+ */
9
+ import type { ChannelDefinition } from "../../types.js";
10
+ import type { SlackChannelOptions, SlackChannelState } from "./types.js";
11
+ /**
12
+ * Create a Slack channel. Author as `agent/channels/slack.ts` default export.
13
+ */
14
+ export declare function slackChannel(options?: SlackChannelOptions): ChannelDefinition<SlackChannelState>;
15
+ //# sourceMappingURL=slack-channel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slack-channel.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/slack-channel.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EACV,iBAAiB,EAMlB,MAAM,gBAAgB,CAAC;AAuCxB,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEzE;;GAEG;AACH,wBAAgB,YAAY,CAC1B,OAAO,GAAE,mBAAwB,GAChC,iBAAiB,CAAC,iBAAiB,CAAC,CAsTtC"}
@@ -0,0 +1,281 @@
1
+ /**
2
+ * `slackChannel()` — platform channel pack for Slack (Socket Mode).
3
+ *
4
+ * Inbound events arrive over a WebSocket (`SLACK_APP_TOKEN`); no public
5
+ * Request URL or Events HTTP route is required. When `toolApprovals`
6
+ * is enabled, Approve/Deny buttons arrive as Socket Mode `interactive`
7
+ * envelopes.
8
+ */
9
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
10
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
11
+ return new (P || (P = Promise))(function (resolve, reject) {
12
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
13
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
14
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
15
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
16
+ });
17
+ };
18
+ import { allowAll, defineChannel } from "../../channels.js";
19
+ import { slackContinuationKey } from "./api.js";
20
+ import { createChannelPostWatcher, resolveChannelNames, SlackChannelAllowlist, } from "./channel-watch.js";
21
+ import { credentialsFromEnv, slackEnvKeys, tryResolveAppToken, tryResolveBotToken, } from "./credentials.js";
22
+ import { createPendingSlackApiTransport, registerSlackCursorAccountRuntime, } from "./cursor-account.js";
23
+ import { buildDefaultEvents, defaultOnAppMention, defaultOnChannelPost, defaultOnDirectMessage, } from "./defaults.js";
24
+ import { dispatchInboundFromEventBody, dispatchInboundMessage, emptySlackChannelState, } from "./dispatch.js";
25
+ import { createEventIdDedupe } from "./event-id-dedupe.js";
26
+ import { dispatchInteractiveFromPayload } from "./interactive.js";
27
+ import { createSlackLogger } from "./log.js";
28
+ import { startSlackSocketMode, } from "./socket-mode.js";
29
+ import { buildToolApprovalEvents } from "./tool-approval-events.js";
30
+ /**
31
+ * Create a Slack channel. Author as `agent/channels/slack.ts` default export.
32
+ */
33
+ export function slackChannel(options = {}) {
34
+ var _a, _b, _c;
35
+ var _d, _e, _f, _g, _h;
36
+ const cursorAccount = options.cursorAccount === true;
37
+ if (cursorAccount) {
38
+ // Token pair and the Cursor connection are different Slack apps —
39
+ // they can't be mixed on one channel definition.
40
+ if (options.credentials !== undefined || options.envPrefix !== undefined) {
41
+ throw new Error("slackChannel({ cursorAccount: true }) uses the Cursor account's Slack connection — do not also set credentials/envPrefix. Author a second slack channel file for a dedicated Slack app.");
42
+ }
43
+ // Channel watching is Socket Mode only — cursorAccount agents must be
44
+ // explicitly addressed (@mention, DM, or claimed-thread reply).
45
+ if (((_a = options.engagement) === null || _a === void 0 ? void 0 : _a.channelPosts) !== undefined) {
46
+ throw new Error("slackChannel({ cursorAccount: true }) does not support engagement.channelPosts — agents must be explicitly addressed (@mention, DM, or claimed-thread reply). Channel watching is Socket Mode only.");
47
+ }
48
+ // Mentions/DMs are always routed by the backend. Disabling them
49
+ // client-side would black-hole events the webhook already stole from
50
+ // native Cursor handling — reject at construction instead.
51
+ if (((_b = options.engagement) === null || _b === void 0 ? void 0 : _b.mentions) === false) {
52
+ throw new Error("slackChannel({ cursorAccount: true }) cannot set engagement.mentions to false — the Cursor Slack relay always delivers mention and claimed-thread traffic.");
53
+ }
54
+ if (((_c = options.engagement) === null || _c === void 0 ? void 0 : _c.directMessages) === false) {
55
+ throw new Error("slackChannel({ cursorAccount: true }) cannot set engagement.directMessages to false — DM continuity is part of the Cursor Slack connection.");
56
+ }
57
+ // Tool approvals / interactivity ride Slack Socket Mode `interactive`
58
+ // envelopes; the Cursor connection does not relay Block Kit clicks, so
59
+ // there is no backend tap to route Approve/Deny over cursorAccount.
60
+ // Reject at construction (same posture as channelPosts) instead of
61
+ // silently dropping clicks. Approvals stay available on a dedicated
62
+ // Socket Mode Slack app channel.
63
+ if (options.toolApprovals === true) {
64
+ throw new Error("slackChannel({ cursorAccount: true }) does not support toolApprovals — Approve/Deny clicks are not relayed over the Cursor Slack connection. Tool approvals are Socket Mode only (author a dedicated Slack app channel for them).");
65
+ }
66
+ if (options.interactivity === true) {
67
+ throw new Error("slackChannel({ cursorAccount: true }) does not support interactivity — interactive Block Kit clicks are not relayed over the Cursor Slack connection. Interactivity is Socket Mode only.");
68
+ }
69
+ }
70
+ const accountTransport = cursorAccount
71
+ ? createPendingSlackApiTransport()
72
+ : undefined;
73
+ const credentials = accountTransport !== undefined
74
+ ? { botToken: accountTransport }
75
+ : ((_d = options.credentials) !== null && _d !== void 0 ? _d : credentialsFromEnv(options.envPrefix));
76
+ const envKeys = slackEnvKeys(options.envPrefix);
77
+ const onAppMention = (_e = options.onAppMention) !== null && _e !== void 0 ? _e : defaultOnAppMention;
78
+ const onDirectMessage = (_f = options.onDirectMessage) !== null && _f !== void 0 ? _f : defaultOnDirectMessage;
79
+ const onChannelPost = (_g = options.onChannelPost) !== null && _g !== void 0 ? _g : defaultOnChannelPost;
80
+ const engagement = (_h = options.engagement) !== null && _h !== void 0 ? _h : {};
81
+ const mentionsEnabled = engagement.mentions !== false;
82
+ const directMessagesEnabled = engagement.directMessages !== false;
83
+ const channelPosts = engagement.channelPosts;
84
+ if (channelPosts !== undefined) {
85
+ const entries = channelPosts.allow.filter((entry) => entry.trim() !== "");
86
+ if (entries.length === 0) {
87
+ throw new Error("slackChannel engagement.channelPosts.allow must list at least one channel (id or #name); there is no wildcard watch.");
88
+ }
89
+ }
90
+ const eventIds = createEventIdDedupe();
91
+ const toolApprovals = options.toolApprovals === true;
92
+ const interactivity = options.interactivity === true;
93
+ const routeInteractive = toolApprovals || interactivity;
94
+ const runtime = {
95
+ log: createSlackLogger(options.logger),
96
+ };
97
+ const getLog = () => runtime.log;
98
+ const events = {};
99
+ if (options.deliverDefaults !== false) {
100
+ Object.assign(events, buildDefaultEvents({
101
+ credentials,
102
+ // cursorAccount: never edit posts — setStatus for thinking, one
103
+ // final postMessage for the reply (proxy pins agent username/icon).
104
+ streaming: cursorAccount ? false : options.streaming,
105
+ thinkingSteps: options.thinkingSteps,
106
+ suggestedPrompts: options.suggestedPrompts,
107
+ suggestedPromptsTitle: options.suggestedPromptsTitle,
108
+ getLog,
109
+ }));
110
+ }
111
+ if (toolApprovals) {
112
+ Object.assign(events, buildToolApprovalEvents({ credentials, getLog }));
113
+ }
114
+ Object.assign(events, options.events);
115
+ let socketHandle = null;
116
+ let channelWatch;
117
+ function inboundDeps(args) {
118
+ return Object.assign({ send: args.send, waitUntil: args.waitUntil, onAppMention,
119
+ onDirectMessage,
120
+ credentials,
121
+ eventIds, host: args.host, log: getLog(), mentionsEnabled,
122
+ directMessagesEnabled }, (channelWatch === undefined ? {} : { channelWatch }));
123
+ }
124
+ const definition = defineChannel({
125
+ auth: [allowAll()],
126
+ state: emptySlackChannelState(),
127
+ routes: [],
128
+ meta: Object.assign(Object.assign({ kind: "slack" }, (cursorAccount ? { slackCursorAccount: true } : {})), (channelPosts === undefined
129
+ ? {}
130
+ : { slackChannelPosts: [...channelPosts.allow] })),
131
+ receive(input_1, _a) {
132
+ return __awaiter(this, arguments, void 0, function* (input, { send }) {
133
+ var _b;
134
+ const target = (_b = input.target) !== null && _b !== void 0 ? _b : {};
135
+ const channelId = typeof target.channelId === "string" ? target.channelId : "";
136
+ if (channelId === "") {
137
+ throw new Error("slackChannel().receive requires target.channelId (Slack channel id).");
138
+ }
139
+ const threadTs = typeof target.threadTs === "string" ? target.threadTs : "";
140
+ if (threadTs === "") {
141
+ throw new Error("slackChannel().receive requires target.threadTs (Slack thread ts).");
142
+ }
143
+ const teamId = typeof target.teamId === "string" ? target.teamId : undefined;
144
+ getLog().info("receive handoff", {
145
+ channel: channelId,
146
+ thread_ts: threadTs,
147
+ team: teamId,
148
+ });
149
+ return send(input.message, {
150
+ auth: input.auth,
151
+ continuationToken: slackContinuationKey(channelId, threadTs),
152
+ state: emptySlackChannelState({
153
+ channelId,
154
+ threadTs,
155
+ teamId: teamId !== null && teamId !== void 0 ? teamId : null,
156
+ }),
157
+ });
158
+ });
159
+ },
160
+ events,
161
+ onStart(args) {
162
+ return __awaiter(this, void 0, void 0, function* () {
163
+ var _a, _b, _c;
164
+ runtime.log = createSlackLogger((_a = args.logger) !== null && _a !== void 0 ? _a : options.logger);
165
+ if (cursorAccount) {
166
+ // Inbound arrives through the serve host's Cursor Slack relay
167
+ // (`/v0/slack-events`), not Socket Mode; outbound goes through the
168
+ // bound API transport. Nothing to start here.
169
+ getLog().info("channel start", { transport: "cursor-account" });
170
+ return;
171
+ }
172
+ getLog().info("channel start", { transport: "socket" });
173
+ const appToken = yield tryResolveAppToken(credentials);
174
+ const botToken = yield tryResolveBotToken(credentials);
175
+ if (appToken === undefined || botToken === undefined) {
176
+ getLog().info("channel idle", {
177
+ reason: "missing credentials",
178
+ need: `${envKeys.bot} and ${envKeys.app}`,
179
+ });
180
+ return;
181
+ }
182
+ if (channelPosts !== undefined) {
183
+ const allowlist = new SlackChannelAllowlist(channelPosts.allow);
184
+ let botUserId;
185
+ try {
186
+ const { WebClient } = yield import("@slack/web-api");
187
+ const client = new WebClient(botToken);
188
+ const identity = yield client.auth.test();
189
+ botUserId =
190
+ typeof identity.user_id === "string" ? identity.user_id : undefined;
191
+ const names = allowlist.unresolvedNames();
192
+ if (names.length > 0) {
193
+ allowlist.applyResolvedNames(yield resolveChannelNames(client, names, getLog()));
194
+ }
195
+ }
196
+ catch (error) {
197
+ getLog().error("channel watch setup degraded", {
198
+ error: error instanceof Error ? error.message : String(error),
199
+ });
200
+ }
201
+ channelWatch = createChannelPostWatcher({
202
+ options: channelPosts,
203
+ allowlist,
204
+ getBotUserId: () => botUserId,
205
+ log: getLog(),
206
+ dispatch: (message, eventId) => {
207
+ args.waitUntil(dispatchInboundMessage(Object.assign({ kind: "channel_post", message, handler: onChannelPost, send: args.send, credentials, host: args.host, log: getLog() }, (eventId === undefined ? {} : { eventId }))));
208
+ },
209
+ });
210
+ getLog().info("channel watch enabled", {
211
+ channels: channelPosts.allow.join(","),
212
+ posts: (_b = channelPosts.posts) !== null && _b !== void 0 ? _b : "top-level",
213
+ debounce_ms: (_c = channelPosts.debounceMs) !== null && _c !== void 0 ? _c : 0,
214
+ });
215
+ }
216
+ const socketOptions = {
217
+ appToken,
218
+ logger: (line) => getLog().write(line),
219
+ onEvent: (payload) => {
220
+ dispatchInboundFromEventBody(payload, inboundDeps({
221
+ send: args.send,
222
+ waitUntil: args.waitUntil,
223
+ host: args.host,
224
+ }));
225
+ },
226
+ };
227
+ if (routeInteractive) {
228
+ socketOptions.onInteractive = (payload) => __awaiter(this, void 0, void 0, function* () {
229
+ yield dispatchInteractiveFromPayload(payload, {
230
+ credentials,
231
+ getSession: args.getSession,
232
+ resolveApproval: args.resolveApproval,
233
+ waitUntil: args.waitUntil,
234
+ log: getLog(),
235
+ });
236
+ });
237
+ }
238
+ try {
239
+ socketHandle = yield startSlackSocketMode(socketOptions);
240
+ }
241
+ catch (error) {
242
+ // Bad Vault tokens / revoked apps: Socket Mode fails once with
243
+ // invalid_auth and does not reconnect. Treat as idle so one bad
244
+ // Slack pack does not blow up server start with a stack dump.
245
+ const message = error instanceof Error ? error.message : String(error);
246
+ if (message.includes("invalid_auth") ||
247
+ message.includes("not_authed")) {
248
+ getLog().info("channel idle", {
249
+ reason: "invalid credentials",
250
+ need: `${envKeys.bot} and ${envKeys.app}`,
251
+ });
252
+ return;
253
+ }
254
+ throw error;
255
+ }
256
+ });
257
+ },
258
+ onStop: () => __awaiter(this, void 0, void 0, function* () {
259
+ getLog().info("channel stop");
260
+ channelWatch === null || channelWatch === void 0 ? void 0 : channelWatch.stop();
261
+ channelWatch = undefined;
262
+ yield socketHandle === null || socketHandle === void 0 ? void 0 : socketHandle.stop();
263
+ socketHandle = null;
264
+ }),
265
+ });
266
+ if (accountTransport !== undefined) {
267
+ // Serve-time seam: the host discovers cursor-account channels through
268
+ // this registry, binds the outbound transport, and dispatches relayed
269
+ // inbound envelopes through the pack's normal path.
270
+ registerSlackCursorAccountRuntime(definition, {
271
+ options,
272
+ credentials,
273
+ transport: accountTransport,
274
+ eventIds,
275
+ onAppMention,
276
+ onDirectMessage,
277
+ getLog,
278
+ });
279
+ }
280
+ return definition;
281
+ }
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Slack Socket Mode via `@slack/socket-mode`.
3
+ *
4
+ * Thin wrapper: ACK envelopes immediately, then forward Events API
5
+ * payloads to the channel pack. Reconnect is handled by the SDK.
6
+ */
7
+ export interface SlackSocketModeOptions {
8
+ appToken: string;
9
+ /** Events API payloads (`type: events_api` envelope body). */
10
+ onEvent: (payload: unknown) => void | Promise<void>;
11
+ /**
12
+ * Interactive payloads (`type: interactive` — Block Kit actions).
13
+ * When omitted, interactive envelopes are ACKed and ignored.
14
+ */
15
+ onInteractive?: (payload: unknown) => void | Promise<void>;
16
+ logger?: (line: string) => void;
17
+ }
18
+ export interface SlackSocketModeHandle {
19
+ stop(): void | Promise<void>;
20
+ }
21
+ /**
22
+ * Start a Socket Mode connection. Call `stop()` to tear down.
23
+ * Resolves once the first WebSocket session is connected.
24
+ */
25
+ export declare function startSlackSocketMode(options: SlackSocketModeOptions): Promise<SlackSocketModeHandle>;
26
+ //# sourceMappingURL=socket-mode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"socket-mode.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/socket-mode.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,8DAA8D;IAC9D,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD;;;OAGG;IACH,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AA+DD;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,qBAAqB,CAAC,CA6DhC"}