@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,116 @@
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
+ 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 { LogLevel, SocketModeClient } from "@slack/socket-mode";
17
+ function createBridgeLogger(write) {
18
+ let level = LogLevel.INFO;
19
+ const rank = {
20
+ [LogLevel.ERROR]: 0,
21
+ [LogLevel.WARN]: 1,
22
+ [LogLevel.INFO]: 2,
23
+ [LogLevel.DEBUG]: 3,
24
+ };
25
+ const emit = (msgLevel, msgs) => {
26
+ if (rank[msgLevel] > rank[level]) {
27
+ return;
28
+ }
29
+ const text = msgs
30
+ .map((m) => (typeof m === "string" ? m : JSON.stringify(m)))
31
+ .join(" ");
32
+ write(`[agent-serve/slack] Socket Mode ${text}`);
33
+ };
34
+ return {
35
+ debug: (...msgs) => emit(LogLevel.DEBUG, msgs),
36
+ info: (...msgs) => emit(LogLevel.INFO, msgs),
37
+ warn: (...msgs) => emit(LogLevel.WARN, msgs),
38
+ error: (...msgs) => emit(LogLevel.ERROR, msgs),
39
+ setLevel(next) {
40
+ level = next;
41
+ },
42
+ getLevel: () => level,
43
+ setName() {
44
+ // Name is unused; agent-serve prefixes lines itself.
45
+ },
46
+ };
47
+ }
48
+ function invokeHandler(log, label, handler, payload) {
49
+ try {
50
+ const result = handler(payload);
51
+ if (result !== undefined &&
52
+ typeof result.then === "function") {
53
+ void Promise.resolve(result).catch((error) => {
54
+ log(`[agent-serve/slack] Socket Mode ${label} failed: ${errorMessage(error)}`);
55
+ });
56
+ }
57
+ }
58
+ catch (error) {
59
+ log(`[agent-serve/slack] Socket Mode ${label} failed: ${errorMessage(error)}`);
60
+ }
61
+ }
62
+ function errorMessage(error) {
63
+ return error instanceof Error ? error.message : String(error);
64
+ }
65
+ /**
66
+ * Start a Socket Mode connection. Call `stop()` to tear down.
67
+ * Resolves once the first WebSocket session is connected.
68
+ */
69
+ export function startSlackSocketMode(options) {
70
+ return __awaiter(this, void 0, void 0, function* () {
71
+ var _a;
72
+ const write = (_a = options.logger) !== null && _a !== void 0 ? _a : ((line) => console.log(line));
73
+ const client = new SocketModeClient({
74
+ appToken: options.appToken,
75
+ logger: createBridgeLogger(write),
76
+ logLevel: LogLevel.INFO,
77
+ autoReconnectEnabled: true,
78
+ });
79
+ client.on("connected", () => {
80
+ write("[agent-serve/slack] Socket Mode connected");
81
+ });
82
+ client.on("reconnecting", () => {
83
+ write("[agent-serve/slack] Socket Mode reconnecting");
84
+ });
85
+ client.on("disconnected", () => {
86
+ write("[agent-serve/slack] Socket Mode disconnected");
87
+ });
88
+ client.on("slack_event", (evt) => {
89
+ // ACK immediately (3s envelope budget); then dispatch off-path.
90
+ void Promise.resolve(evt.ack()).catch((error) => {
91
+ write(`[agent-serve/slack] Socket Mode ACK failed: ${errorMessage(error)}`);
92
+ });
93
+ if (evt.type === "events_api") {
94
+ if (evt.body !== undefined) {
95
+ invokeHandler(write, "onEvent", options.onEvent, evt.body);
96
+ }
97
+ return;
98
+ }
99
+ if (evt.type === "interactive") {
100
+ if (evt.body !== undefined && options.onInteractive !== undefined) {
101
+ invokeHandler(write, "onInteractive", options.onInteractive, evt.body);
102
+ }
103
+ return;
104
+ }
105
+ });
106
+ yield client.start();
107
+ return {
108
+ stop() {
109
+ return __awaiter(this, void 0, void 0, function* () {
110
+ yield client.disconnect();
111
+ write("[agent-serve/slack] Socket Mode stopped");
112
+ });
113
+ },
114
+ };
115
+ });
116
+ }
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Chat streaming helpers for Slack AI / agent features.
3
+ */
4
+ export type StreamTaskStatus = "pending" | "in_progress" | "complete" | "error";
5
+ export interface StreamTaskChunk {
6
+ type: "task_update";
7
+ id: string;
8
+ title: string;
9
+ status: StreamTaskStatus;
10
+ }
11
+ /**
12
+ * Given previously sent cumulative text and the new cumulative text, return
13
+ * the suffix to append. Empty string when there is nothing new to send.
14
+ */
15
+ export declare function computeStreamAppend(lastPostedText: string | null | undefined, cumulative: string): string;
16
+ /** Build task_update chunks for tool calls. */
17
+ export declare function buildTaskChunksForCalls(calls: Array<{
18
+ callId: string;
19
+ toolName: string;
20
+ }>, status: StreamTaskStatus): StreamTaskChunk[];
21
+ export declare function buildTaskChunkForResult(args: {
22
+ callId: string;
23
+ toolName: string;
24
+ isError: boolean;
25
+ }): StreamTaskChunk;
26
+ //# sourceMappingURL=stream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/stream.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,aAAa,GAAG,UAAU,GAAG,OAAO,CAAC;AAEhF,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,aAAa,CAAC;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,gBAAgB,CAAC;CAC1B;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,cAAc,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACzC,UAAU,EAAE,MAAM,GACjB,MAAM,CAgBR;AAED,+CAA+C;AAC/C,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,KAAK,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,EAClD,MAAM,EAAE,gBAAgB,GACvB,eAAe,EAAE,CAOnB;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;CAClB,GAAG,eAAe,CAOlB"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Chat streaming helpers for Slack AI / agent features.
3
+ */
4
+ /**
5
+ * Given previously sent cumulative text and the new cumulative text, return
6
+ * the suffix to append. Empty string when there is nothing new to send.
7
+ */
8
+ export function computeStreamAppend(lastPostedText, cumulative) {
9
+ if (cumulative === "") {
10
+ return "";
11
+ }
12
+ if (lastPostedText === null ||
13
+ lastPostedText === undefined ||
14
+ lastPostedText === "") {
15
+ return cumulative;
16
+ }
17
+ if (cumulative.startsWith(lastPostedText)) {
18
+ return cumulative.slice(lastPostedText.length);
19
+ }
20
+ // Text rewound / rewritten — cannot unsend; skip append.
21
+ return "";
22
+ }
23
+ /** Build task_update chunks for tool calls. */
24
+ export function buildTaskChunksForCalls(calls, status) {
25
+ return calls.map((call) => ({
26
+ type: "task_update",
27
+ id: call.callId,
28
+ title: call.toolName,
29
+ status,
30
+ }));
31
+ }
32
+ export function buildTaskChunkForResult(args) {
33
+ return {
34
+ type: "task_update",
35
+ id: args.callId,
36
+ title: args.toolName,
37
+ status: args.isError ? "error" : "complete",
38
+ };
39
+ }
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Slack surface for human-in-the-loop tool approvals.
3
+ *
4
+ * Or compose with {@link buildDefaultEvents} (or your own handlers). When
5
+ * composing by hand, also set `slackChannel({ interactivity: true })` (or
6
+ * `toolApprovals: true`) so Socket Mode routes Approve/Deny clicks —
7
+ * otherwise cards post but button presses are ACKed and ignored:
8
+ *
9
+ * ```ts
10
+ * events: {
11
+ * ...buildDefaultEvents({ credentials }),
12
+ * ...buildToolApprovalEvents({ credentials }),
13
+ * }
14
+ * ```
15
+ *
16
+ * Or opt in via `slackChannel({ toolApprovals: true })`.
17
+ * Park/resume itself is the framework HITL primitive (`needsApproval`);
18
+ * this pack only delivers Approve/Deny in Slack.
19
+ */
20
+ import type { ChannelEventHandlers } from "../../types.js";
21
+ import { type SlackLog } from "./log.js";
22
+ import type { SlackChannelState, SlackCredentials } from "./types.js";
23
+ export interface BuildToolApprovalEventsOptions {
24
+ credentials?: SlackCredentials;
25
+ /** Resolved per-call so channel onStart can rebind the server logger. */
26
+ getLog?: () => SlackLog;
27
+ }
28
+ /**
29
+ * Stream-event handlers that post Block Kit Approve/Deny cards and
30
+ * update them when approval is resolved (HTTP, playground, or Slack).
31
+ */
32
+ export declare function buildToolApprovalEvents(options?: BuildToolApprovalEventsOptions): ChannelEventHandlers<SlackChannelState>;
33
+ //# sourceMappingURL=tool-approval-events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-approval-events.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/tool-approval-events.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAO3D,OAAO,EAAmB,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AAC1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEtE,MAAM,WAAW,8BAA8B;IAC7C,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,yEAAyE;IACzE,MAAM,CAAC,EAAE,MAAM,QAAQ,CAAC;CACzB;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,GAAE,8BAAmC,GAC3C,oBAAoB,CAAC,iBAAiB,CAAC,CA6FzC"}
@@ -0,0 +1,129 @@
1
+ /**
2
+ * Slack surface for human-in-the-loop tool approvals.
3
+ *
4
+ * Or compose with {@link buildDefaultEvents} (or your own handlers). When
5
+ * composing by hand, also set `slackChannel({ interactivity: true })` (or
6
+ * `toolApprovals: true`) so Socket Mode routes Approve/Deny clicks —
7
+ * otherwise cards post but button presses are ACKed and ignored:
8
+ *
9
+ * ```ts
10
+ * events: {
11
+ * ...buildDefaultEvents({ credentials }),
12
+ * ...buildToolApprovalEvents({ credentials }),
13
+ * }
14
+ * ```
15
+ *
16
+ * Or opt in via `slackChannel({ toolApprovals: true })`.
17
+ * Park/resume itself is the framework HITL primitive (`needsApproval`);
18
+ * this pack only delivers Approve/Deny in Slack.
19
+ */
20
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
21
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
22
+ return new (P || (P = Promise))(function (resolve, reject) {
23
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
24
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
25
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
26
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
27
+ });
28
+ };
29
+ import { postMessage, setThreadStatus, updateMessage } from "./api.js";
30
+ import { buildApprovalBlocks, buildResolvedApprovalBlocks, } from "./approvals.js";
31
+ import { SLACK_DEFAULT_LOADING_MESSAGES } from "./constants.js";
32
+ import { defaultSlackLog } from "./log.js";
33
+ /**
34
+ * Stream-event handlers that post Block Kit Approve/Deny cards and
35
+ * update them when approval is resolved (HTTP, playground, or Slack).
36
+ */
37
+ export function buildToolApprovalEvents(options = {}) {
38
+ var _a;
39
+ var _b;
40
+ const botToken = (_a = options.credentials) === null || _a === void 0 ? void 0 : _a.botToken;
41
+ const getLog = (_b = options.getLog) !== null && _b !== void 0 ? _b : (() => defaultSlackLog);
42
+ return {
43
+ "action.approval_requested"(event, channel, ctx) {
44
+ return __awaiter(this, void 0, void 0, function* () {
45
+ var _a;
46
+ const log = getLog();
47
+ const state = channel.state;
48
+ if (state.channelId === null || state.threadTs === null) {
49
+ return;
50
+ }
51
+ const blocks = buildApprovalBlocks({
52
+ sessionId: ctx.session.id,
53
+ callId: event.data.callId,
54
+ toolName: event.data.toolName,
55
+ args: event.data.args,
56
+ });
57
+ try {
58
+ const posted = yield postMessage({
59
+ botToken,
60
+ channel: state.channelId,
61
+ threadTs: state.threadTs,
62
+ text: `Approval required for \`${event.data.toolName}\``,
63
+ blocks,
64
+ });
65
+ channel.state.approvalMessageByCallId = Object.assign(Object.assign({}, ((_a = state.approvalMessageByCallId) !== null && _a !== void 0 ? _a : {})), { [event.data.callId]: posted.ts });
66
+ yield setThreadStatus({
67
+ botToken,
68
+ channelId: state.channelId,
69
+ threadTs: state.threadTs,
70
+ status: "Awaiting approval…",
71
+ loadingMessages: [
72
+ "Awaiting approval…",
73
+ ...SLACK_DEFAULT_LOADING_MESSAGES,
74
+ ],
75
+ });
76
+ log.info("approval card posted", {
77
+ call_id: event.data.callId,
78
+ tool: event.data.toolName,
79
+ message_ts: posted.ts,
80
+ });
81
+ }
82
+ catch (error) {
83
+ log.warn("approval card post failed", {
84
+ call_id: event.data.callId,
85
+ error: error instanceof Error ? error.message : String(error),
86
+ });
87
+ }
88
+ });
89
+ },
90
+ "action.approval_resolved"(event, channel) {
91
+ return __awaiter(this, void 0, void 0, function* () {
92
+ var _a;
93
+ var _b;
94
+ const log = getLog();
95
+ const state = channel.state;
96
+ const messageTs = (_a = state.approvalMessageByCallId) === null || _a === void 0 ? void 0 : _a[event.data.callId];
97
+ if (state.channelId !== null &&
98
+ messageTs !== undefined &&
99
+ messageTs !== "") {
100
+ const blocks = buildResolvedApprovalBlocks(Object.assign({ toolName: event.data.toolName, decision: event.data.decision }, (event.data.by === undefined ? {} : { byUserId: event.data.by })));
101
+ const verb = event.data.decision === "approve" ? "Approved" : "Denied";
102
+ yield updateMessage({
103
+ botToken,
104
+ channel: state.channelId,
105
+ ts: messageTs,
106
+ text: `${verb} — ${event.data.toolName}`,
107
+ blocks,
108
+ });
109
+ const next = Object.assign({}, ((_b = state.approvalMessageByCallId) !== null && _b !== void 0 ? _b : {}));
110
+ delete next[event.data.callId];
111
+ channel.state.approvalMessageByCallId = next;
112
+ }
113
+ if (state.channelId !== null && state.threadTs !== null) {
114
+ yield setThreadStatus({
115
+ botToken,
116
+ channelId: state.channelId,
117
+ threadTs: state.threadTs,
118
+ status: "Working…",
119
+ loadingMessages: [...SLACK_DEFAULT_LOADING_MESSAGES],
120
+ });
121
+ }
122
+ log.info("approval resolved in slack", {
123
+ call_id: event.data.callId,
124
+ decision: event.data.decision,
125
+ });
126
+ });
127
+ },
128
+ };
129
+ }
@@ -0,0 +1,326 @@
1
+ /**
2
+ * Types for the Slack platform channel pack.
3
+ */
4
+ import type { AgentCloudOptions, AuthContext, ChannelEventHandlers, HostContext } from "../../types.js";
5
+ /**
6
+ * Pluggable Slack Web API caller. Instead of holding a raw `xoxb-…` token,
7
+ * calls are executed by `call` — e.g. proxied through the Cursor backend
8
+ * with the signed-in account's Slack connection (`cursorAccount: true`).
9
+ * Implementations return the Slack response body (including `ok: false`
10
+ * platform errors) and only throw on programmer error.
11
+ */
12
+ export interface SlackApiTransport {
13
+ kind: "api-transport";
14
+ /** Human-readable transport label for logs (e.g. `cursor-account`). */
15
+ label: string;
16
+ call(method: string, args: Record<string, unknown>): Promise<Record<string, unknown>>;
17
+ }
18
+ /** Bot token as a string, a (possibly async) resolver, or an API transport. */
19
+ export type SlackBotToken = string | (() => string | Promise<string>) | SlackApiTransport;
20
+ export interface SlackCredentials {
21
+ /**
22
+ * Bot user OAuth token (`xoxb-…`), or a {@link SlackApiTransport} that
23
+ * executes Web API calls without a local token. When omitted, falls back
24
+ * to `SLACK_BOT_TOKEN` (or `{envPrefix}_SLACK_BOT_TOKEN` via
25
+ * {@link SlackChannelOptions.envPrefix}).
26
+ */
27
+ botToken?: SlackBotToken;
28
+ /**
29
+ * App-level token (`xapp-…`) for Socket Mode. Requires scope
30
+ * `connections:write`. Same fallback rules as `botToken`.
31
+ */
32
+ appToken?: string | (() => string | Promise<string>);
33
+ }
34
+ /** Per-session Slack adapter state. */
35
+ export interface SlackChannelState {
36
+ channelId: string | null;
37
+ threadTs: string | null;
38
+ teamId: string | null;
39
+ triggeringUserId: string | null;
40
+ pendingToolCallMessage: string | null;
41
+ lastReasoningTypingAtMs: number | null;
42
+ lastReasoningTypingStatus: string | null;
43
+ /** Active chat stream message ts (`chat.startStream`). */
44
+ streamTs: string | null;
45
+ /** Channel id used when the stream was started. */
46
+ streamChannelId?: string | null;
47
+ /** Last cumulative text sent via appendStream (for incremental append). */
48
+ lastPostedText?: string | null;
49
+ /**
50
+ * When true, stream APIs failed for this session — use postMessage
51
+ * for the rest of the turn.
52
+ */
53
+ streamingUnavailable?: boolean;
54
+ /**
55
+ * Message ts of approval cards keyed by tool call id (for
56
+ * replacing Approve/Deny buttons after a decision).
57
+ */
58
+ approvalMessageByCallId?: Record<string, string>;
59
+ }
60
+ export interface SlackAuthor {
61
+ userId: string;
62
+ userName?: string;
63
+ isBot: boolean;
64
+ }
65
+ export interface SlackMessage {
66
+ text: string;
67
+ /** Text roughly suitable for the model (mention markers cleaned). */
68
+ markdown: string;
69
+ ts: string;
70
+ threadTs: string;
71
+ channelId: string;
72
+ teamId?: string;
73
+ author?: SlackAuthor;
74
+ }
75
+ export interface SlackDispatchDecision {
76
+ auth: AuthContext | null;
77
+ /** Extra context blocks injected alongside the default Slack context. */
78
+ context?: string[];
79
+ /**
80
+ * Override the user prompt sent to the model. When omitted, uses the Slack
81
+ * message markdown (plus context blocks). Host-prepared reviews can pass
82
+ * a short "read pr.txt" prompt here.
83
+ */
84
+ message?: string;
85
+ /**
86
+ * Absolute directory used as the local harness `cwd` for this session
87
+ * (new sessions only).
88
+ */
89
+ workspaceDir?: string;
90
+ /**
91
+ * Relative path → contents written into the session workspace before the
92
+ * first turn (new sessions only). Prefer this for host-prepared files like
93
+ * `pr.txt` so default skill materialization stays on the session cwd.
94
+ */
95
+ workspaceFiles?: Record<string, string>;
96
+ /** Session display title (new sessions only). */
97
+ title?: string;
98
+ /**
99
+ * Per-session cloud options (new sessions only). Use this to attach a PR to
100
+ * a cloud agent from an inbound Slack mention.
101
+ */
102
+ cloud?: AgentCloudOptions;
103
+ /**
104
+ * Seed the Cursor SDK agent id for a new session (ignored when the thread
105
+ * already has one). Lets a handler reattach a Slack thread to an existing
106
+ * cloud conversation (e.g. per-PR `bc-…` affinity).
107
+ */
108
+ sdkAgentId?: string;
109
+ }
110
+ export interface SlackSuggestedPrompt {
111
+ title: string;
112
+ message: string;
113
+ }
114
+ export interface SlackThreadHandle {
115
+ post(text: string, options?: {
116
+ blocks?: unknown[];
117
+ }): Promise<{
118
+ ts: string;
119
+ }>;
120
+ startTyping(status: string, loadingMessages?: string[]): Promise<void>;
121
+ setTitle(title: string): Promise<void>;
122
+ setSuggestedPrompts(prompts: SlackSuggestedPrompt[], title?: string): Promise<void>;
123
+ }
124
+ export interface SlackBinding {
125
+ thread: SlackThreadHandle;
126
+ slack: {
127
+ channelId: string;
128
+ threadTs: string;
129
+ teamId?: string;
130
+ };
131
+ /** Shared host services (MCP / GitHub / Slack). */
132
+ host: HostContext;
133
+ }
134
+ export type SlackMessageHandler = (ctx: SlackBinding, message: SlackMessage) => SlackDispatchDecision | null | undefined | Promise<SlackDispatchDecision | null | undefined>;
135
+ /**
136
+ * Opt-in channel watch: dispatch on posts in explicitly allowlisted
137
+ * channels without requiring an @mention. There is deliberately no
138
+ * "every channel the bot is in" wildcard — watching a channel is a
139
+ * per-channel decision.
140
+ */
141
+ export interface SlackChannelPostsOptions {
142
+ /**
143
+ * Channels to watch: ids (`C…` / `G…`) or `#names`. Must be non-empty
144
+ * (empty is a definition error). `#names` are resolved to ids via
145
+ * `conversations.list` when the channel starts; the bot must be a member
146
+ * of each watched channel to receive its messages. Socket Mode only —
147
+ * `cursorAccount: true` rejects `engagement.channelPosts`.
148
+ */
149
+ allow: string[];
150
+ /**
151
+ * Which posts dispatch. `"top-level"` (default) fires only on new
152
+ * channel posts — never on replies inside other people's threads, so the
153
+ * agent can take fresh intake but cannot barge into conversations.
154
+ * `"all"` also dispatches thread replies (Socket Mode only).
155
+ */
156
+ posts?: "top-level" | "all";
157
+ /**
158
+ * Delay dispatch by this many milliseconds so rapid edits settle first.
159
+ * Edits during the window update the dispatched text; deleting the post
160
+ * cancels the dispatch. Defaults to `0` (immediate). Socket Mode only —
161
+ * the Cursor relay does not deliver edits/deletes.
162
+ */
163
+ debounceMs?: number;
164
+ }
165
+ /**
166
+ * How the agent engages over Slack. Omitted entirely = mentions + DMs,
167
+ * which is also the default for each flag — summoned, never proactive.
168
+ */
169
+ export interface SlackEngagementOptions {
170
+ /** Dispatch on `app_mention`. Defaults to `true`. */
171
+ mentions?: boolean;
172
+ /** Dispatch on direct messages (`message.im`). Defaults to `true`. */
173
+ directMessages?: boolean;
174
+ /**
175
+ * Opt-in channel watch (see {@link SlackChannelPostsOptions}). Requires
176
+ * the Slack app to subscribe to `message.channels` / `message.groups`
177
+ * (`slack init --channel-posts`, or add the events to an existing app).
178
+ */
179
+ channelPosts?: SlackChannelPostsOptions;
180
+ }
181
+ export interface SlackChannelOptions {
182
+ credentials?: SlackCredentials;
183
+ /**
184
+ * Per-agent env prefix for tokens. `envPrefix: "MY_AGENT"` reads
185
+ * `MY_AGENT_SLACK_BOT_TOKEN` + `MY_AGENT_SLACK_APP_TOKEN`. Prefer this over
186
+ * shared `SLACK_*` vars when serving multiple agents in one process.
187
+ * Ignored when `credentials` is set explicitly.
188
+ */
189
+ envPrefix?: string;
190
+ /**
191
+ * Use the signed-in Cursor account's Slack connection instead of a
192
+ * dedicated Slack app: no bot/app tokens, no extra install. Inbound
193
+ * traffic (`@Cursor <agent name> …` mentions, replies in threads the
194
+ * agent owns, and DMs) is relayed from the Cursor backend
195
+ * (`/v0/slack-events`), and outbound Web API calls are proxied through it
196
+ * — the agent posts as the Cursor Slack app with this agent's name and
197
+ * icon.
198
+ *
199
+ * Both paths stay first-class: omit this (default) for the classic
200
+ * Socket-Mode channel with your own Slack app and tokens. Requires a
201
+ * signed-in host (`agent-serve login` / `CURSOR_API_KEY`) and a Slack
202
+ * account linked to the Cursor account. Mutually exclusive with
203
+ * `credentials` / `envPrefix`. `engagement.mentions: false` and
204
+ * `engagement.directMessages: false` are rejected (the relay always
205
+ * carries that traffic). Channel watching (`engagement.channelPosts`) and
206
+ * tool approvals / interactivity (`toolApprovals` / `interactivity`) are
207
+ * Socket Mode only — not supported on cursorAccount; agents must be
208
+ * explicitly addressed, and Approve/Deny buttons need a dedicated Slack
209
+ * app.
210
+ */
211
+ cursorAccount?: boolean;
212
+ /**
213
+ * Display name registered with the Cursor backend when
214
+ * {@link cursorAccount} is on: `@Cursor <agentName> …` routes here, and
215
+ * replies post under this username. Defaults to a name derived from the
216
+ * agent's mount slug (or project name).
217
+ */
218
+ agentName?: string;
219
+ /** Avatar for posts when {@link cursorAccount} is on. */
220
+ agentIcon?: {
221
+ url?: string;
222
+ emoji?: string;
223
+ };
224
+ /**
225
+ * Optional log sink. When omitted, uses `console.log` until the server
226
+ * mounts the channel and rebinds to {@link ServeOptions.logger}.
227
+ */
228
+ logger?: (line: string) => void;
229
+ /**
230
+ * Engagement surface. Defaults to mentions + DMs only; channel watch is
231
+ * opt-in via {@link SlackEngagementOptions.channelPosts}.
232
+ */
233
+ engagement?: SlackEngagementOptions;
234
+ onAppMention?: SlackMessageHandler;
235
+ onDirectMessage?: SlackMessageHandler;
236
+ /**
237
+ * Handler for watched channel posts (same contract as `onAppMention`:
238
+ * return `null` to skip, or a {@link SlackDispatchDecision} to dispatch).
239
+ * Only consulted when `engagement.channelPosts` is configured.
240
+ */
241
+ onChannelPost?: SlackMessageHandler;
242
+ /**
243
+ * Override / extend the default stream-event handlers (typing, replies).
244
+ * Handlers you provide replace the matching default handlers.
245
+ */
246
+ events?: ChannelEventHandlers<SlackChannelState>;
247
+ /**
248
+ * When true (default), reply on final `message.completed` and show typing
249
+ * via `assistant.threads.setStatus` (and streaming when enabled).
250
+ */
251
+ deliverDefaults?: boolean;
252
+ /**
253
+ * Stream assistant text while the turn runs via `chat.startStream` /
254
+ * `appendStream` / `stopStream` (defaults to `true` for Socket Mode).
255
+ * Ignored when {@link cursorAccount} is on — that path never edits posts
256
+ * (`setStatus` + one final `chat.postMessage` only).
257
+ */
258
+ streaming?: boolean;
259
+ /**
260
+ * Show task-style thinking steps for tool calls (stream chunks or status).
261
+ * Defaults to `true`.
262
+ */
263
+ thinkingSteps?: boolean;
264
+ /**
265
+ * Opt in to Slack delivery for human-in-the-loop tool approvals.
266
+ *
267
+ * Framework park/resume is enabled by `needsApproval` on server tools.
268
+ * Set this to `true` to also post Block Kit Approve/Deny cards and route
269
+ * the Socket Mode `interactive` clicks to `resolveApproval`. Socket Mode
270
+ * only — rejected on `cursorAccount: true` (the Cursor Slack connection
271
+ * does not relay Block Kit clicks).
272
+ *
273
+ * Defaults to `false`. For custom composition, spread
274
+ * `buildToolApprovalEvents({ credentials })` into `events`.
275
+ */
276
+ toolApprovals?: boolean;
277
+ /**
278
+ * Route interactive payloads to approval resolution without opting into
279
+ * the full {@link buildToolApprovalEvents} handler pack. Use when
280
+ * composing `buildToolApprovalEvents` into `events` manually. Socket Mode
281
+ * only — rejected on `cursorAccount: true`.
282
+ */
283
+ interactivity?: boolean;
284
+ /**
285
+ * Suggested prompts shown when an assistant thread starts (and optionally
286
+ * after a turn completes).
287
+ */
288
+ suggestedPrompts?: SlackSuggestedPrompt[];
289
+ suggestedPromptsTitle?: string;
290
+ }
291
+ export interface SlackManifestOptions {
292
+ /** Display name for the Slack app. */
293
+ name: string;
294
+ /** Bot display name (handle without @). Defaults from `name`. */
295
+ botDisplayName?: string;
296
+ /** Env profile. Affects display name suffix. */
297
+ env: "dev" | "prod";
298
+ /** Optional short description shown in the Slack app. */
299
+ description?: string;
300
+ /** Include `assistant_view` + `assistant:write` for typing status. */
301
+ assistant?: boolean;
302
+ /**
303
+ * Enable Slack interactivity (needed for Approve/Deny cards).
304
+ * Defaults to `false` — enable when using `toolApprovals: true`.
305
+ */
306
+ interactivity?: boolean;
307
+ /**
308
+ * Subscribe to `message.channels` + `message.groups` for the opt-in
309
+ * channel watch (`engagement.channelPosts`). Defaults to `false`.
310
+ */
311
+ channelPosts?: boolean;
312
+ /** Seed suggested prompts into the manifest `assistant_view`. */
313
+ suggestedPrompts?: Array<{
314
+ title: string;
315
+ message: string;
316
+ }>;
317
+ }
318
+ /** Soft-fail result for optional Slack API features. */
319
+ export type SoftSlackResult<T extends Record<string, unknown> = Record<string, unknown>> = ({
320
+ ok: true;
321
+ } & T) | {
322
+ ok: false;
323
+ error: string;
324
+ unsupported?: boolean;
325
+ };
326
+ //# sourceMappingURL=types.d.ts.map