@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,437 @@
1
+ /**
2
+ * Slack Web API helpers used by the channel pack (`@slack/web-api`).
3
+ */
4
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
5
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
6
+ return new (P || (P = Promise))(function (resolve, reject) {
7
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
8
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
9
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
10
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
11
+ });
12
+ };
13
+ import { ErrorCode, WebClient } from "@slack/web-api";
14
+ import { SLACK_DEFAULT_LOADING_MESSAGES, SLACK_LOADING_MESSAGE_MAX_LEN, SLACK_STATUS_MAX_LEN, SLACK_TITLE_MAX_LEN, SLACK_UNSUPPORTED_ERRORS, } from "./constants.js";
15
+ import { tryResolveAppToken, tryResolveBotToken } from "./credentials.js";
16
+ import { defaultSlackLog } from "./log.js";
17
+ /** Whether a bot token slot holds an API transport instead of a token. */
18
+ export function isSlackApiTransport(token) {
19
+ return (typeof token === "object" &&
20
+ token !== null &&
21
+ token.kind === "api-transport");
22
+ }
23
+ export function resolveBotToken(credentials) {
24
+ return __awaiter(this, void 0, void 0, function* () {
25
+ const token = yield tryResolveBotToken(credentials);
26
+ if (token === undefined) {
27
+ throw new Error("SLACK_BOT_TOKEN is required (set credentials.botToken, envPrefix, or the env var).");
28
+ }
29
+ return token;
30
+ });
31
+ }
32
+ /** Resolve the Socket Mode app-level token (`xapp-…`). */
33
+ export function resolveAppToken(credentials) {
34
+ return __awaiter(this, void 0, void 0, function* () {
35
+ const token = yield tryResolveAppToken(credentials);
36
+ if (token === undefined) {
37
+ throw new Error("SLACK_APP_TOKEN is required for Socket Mode (set credentials.appToken, envPrefix, or the env var).");
38
+ }
39
+ return token;
40
+ });
41
+ }
42
+ /** Channel-local continuation key: `<slackChannelId>:<threadTs>`. */
43
+ export function slackContinuationKey(channelId, threadTs) {
44
+ return `${channelId}:${threadTs}`;
45
+ }
46
+ function isPlatformError(error) {
47
+ return (typeof error === "object" &&
48
+ error !== null &&
49
+ "code" in error &&
50
+ error.code === ErrorCode.PlatformError &&
51
+ "data" in error);
52
+ }
53
+ function createWebClient(botToken) {
54
+ return __awaiter(this, void 0, void 0, function* () {
55
+ return new WebClient(yield resolveBotToken({ botToken }));
56
+ });
57
+ }
58
+ /**
59
+ * Call a Slack Web API method. Platform errors (`ok: false`) are returned as
60
+ * the response body (not thrown) so callers can soft-fail cleanly. When the
61
+ * bot token slot holds a {@link SlackApiTransport} (e.g. the Cursor account
62
+ * proxy), the call is executed by the transport instead of `@slack/web-api`.
63
+ */
64
+ export function callSlackApi(args) {
65
+ return __awaiter(this, void 0, void 0, function* () {
66
+ if (isSlackApiTransport(args.botToken)) {
67
+ return args.botToken.call(args.operation, args.body);
68
+ }
69
+ const client = yield createWebClient(args.botToken);
70
+ try {
71
+ const result = yield client.apiCall(args.operation, args.body);
72
+ return result;
73
+ }
74
+ catch (error) {
75
+ if (isPlatformError(error)) {
76
+ return error.data;
77
+ }
78
+ throw error;
79
+ }
80
+ });
81
+ }
82
+ /**
83
+ * Soft-fail wrapper: never throws for Slack API errors. Network/throw
84
+ * errors become `{ ok: false, error }`. Unsupported feature errors set
85
+ * `unsupported: true`.
86
+ */
87
+ export function callSlackApiSoft(args) {
88
+ return __awaiter(this, void 0, void 0, function* () {
89
+ try {
90
+ const response = yield callSlackApi(args);
91
+ if (response.ok === true) {
92
+ return Object.assign({ ok: true }, response);
93
+ }
94
+ const error = typeof response.error === "string" ? response.error : "unknown_error";
95
+ return Object.assign({ ok: false, error }, (SLACK_UNSUPPORTED_ERRORS.has(error) ? { unsupported: true } : {}));
96
+ }
97
+ catch (error) {
98
+ return {
99
+ ok: false,
100
+ error: error instanceof Error ? error.message : String(error),
101
+ };
102
+ }
103
+ });
104
+ }
105
+ export function truncateTypingStatus(status, max) {
106
+ const limit = max !== null && max !== void 0 ? max : SLACK_STATUS_MAX_LEN;
107
+ const trimmed = status.trim().replace(/\s+/g, " ");
108
+ if (trimmed.length <= limit) {
109
+ return trimmed;
110
+ }
111
+ return `${trimmed.slice(0, limit - 1)}…`;
112
+ }
113
+ function truncateLoadingMessages(messages) {
114
+ return messages
115
+ .map((message) => truncateTypingStatus(message, SLACK_LOADING_MESSAGE_MAX_LEN))
116
+ .filter((message) => message.length > 0)
117
+ .slice(0, 5);
118
+ }
119
+ export function truncateTitle(title, max) {
120
+ const limit = max !== null && max !== void 0 ? max : SLACK_TITLE_MAX_LEN;
121
+ const trimmed = title.trim().replace(/\s+/g, " ");
122
+ if (trimmed.length <= limit) {
123
+ return trimmed;
124
+ }
125
+ return `${trimmed.slice(0, limit - 1)}…`;
126
+ }
127
+ // ---------------------------------------------------------------------------
128
+ // Assistant / stream helpers
129
+ // ---------------------------------------------------------------------------
130
+ export function setThreadStatus(args) {
131
+ return __awaiter(this, void 0, void 0, function* () {
132
+ if (args.channelId === "" || args.threadTs === "") {
133
+ return { ok: false, error: "missing_channel_or_thread" };
134
+ }
135
+ const status = truncateTypingStatus(args.status);
136
+ const loadingRaw = args.loadingMessages !== undefined && args.loadingMessages.length > 0
137
+ ? args.loadingMessages
138
+ : status.length > 0
139
+ ? [
140
+ status,
141
+ ...SLACK_DEFAULT_LOADING_MESSAGES.filter((m) => m !== status),
142
+ ]
143
+ : [...SLACK_DEFAULT_LOADING_MESSAGES];
144
+ const loading_messages = truncateLoadingMessages(loadingRaw);
145
+ return callSlackApiSoft({
146
+ botToken: args.botToken,
147
+ operation: "assistant.threads.setStatus",
148
+ body: Object.assign({ channel_id: args.channelId, thread_ts: args.threadTs, status }, (loading_messages.length > 0 ? { loading_messages } : {})),
149
+ });
150
+ });
151
+ }
152
+ export function setThreadTitle(args) {
153
+ return __awaiter(this, void 0, void 0, function* () {
154
+ return callSlackApiSoft({
155
+ botToken: args.botToken,
156
+ operation: "assistant.threads.setTitle",
157
+ body: {
158
+ channel_id: args.channelId,
159
+ thread_ts: args.threadTs,
160
+ title: truncateTitle(args.title),
161
+ },
162
+ });
163
+ });
164
+ }
165
+ export function setSuggestedPrompts(args) {
166
+ return __awaiter(this, void 0, void 0, function* () {
167
+ const body = {
168
+ channel_id: args.channelId,
169
+ thread_ts: args.threadTs,
170
+ prompts: args.prompts.map((p) => ({
171
+ title: p.title,
172
+ message: p.message,
173
+ })),
174
+ };
175
+ if (args.title !== undefined && args.title !== "") {
176
+ body.title = args.title;
177
+ }
178
+ return callSlackApiSoft({
179
+ botToken: args.botToken,
180
+ operation: "assistant.threads.setSuggestedPrompts",
181
+ body,
182
+ });
183
+ });
184
+ }
185
+ export function startChatStream(args) {
186
+ return __awaiter(this, void 0, void 0, function* () {
187
+ const body = {
188
+ channel: args.channel,
189
+ };
190
+ if (args.thread_ts !== undefined && args.thread_ts !== "") {
191
+ body.thread_ts = args.thread_ts;
192
+ }
193
+ if (args.markdown_text !== undefined) {
194
+ body.markdown_text = args.markdown_text;
195
+ }
196
+ const result = yield callSlackApiSoft({
197
+ botToken: args.botToken,
198
+ operation: "chat.startStream",
199
+ body,
200
+ });
201
+ if (!result.ok) {
202
+ return result;
203
+ }
204
+ const ts = typeof result.ts === "string" ? result.ts : "";
205
+ const channel = typeof result.channel === "string" ? result.channel : args.channel;
206
+ if (ts === "") {
207
+ return { ok: false, error: "missing_ts" };
208
+ }
209
+ return { ok: true, ts, channel };
210
+ });
211
+ }
212
+ export function appendChatStream(args) {
213
+ return __awaiter(this, void 0, void 0, function* () {
214
+ const body = {
215
+ channel: args.channel,
216
+ ts: args.ts,
217
+ };
218
+ if (args.markdown_text !== undefined) {
219
+ body.markdown_text = args.markdown_text;
220
+ }
221
+ if (args.chunks !== undefined && args.chunks.length > 0) {
222
+ body.chunks = args.chunks;
223
+ }
224
+ return callSlackApiSoft({
225
+ botToken: args.botToken,
226
+ operation: "chat.appendStream",
227
+ body,
228
+ });
229
+ });
230
+ }
231
+ export function stopChatStream(args) {
232
+ return __awaiter(this, void 0, void 0, function* () {
233
+ const body = {
234
+ channel: args.channel,
235
+ ts: args.ts,
236
+ };
237
+ if (args.markdown_text !== undefined) {
238
+ body.markdown_text = args.markdown_text;
239
+ }
240
+ if (args.blocks !== undefined && args.blocks.length > 0) {
241
+ body.blocks = args.blocks;
242
+ }
243
+ return callSlackApiSoft({
244
+ botToken: args.botToken,
245
+ operation: "chat.stopStream",
246
+ body,
247
+ });
248
+ });
249
+ }
250
+ export function postMessage(args) {
251
+ return __awaiter(this, void 0, void 0, function* () {
252
+ var _a, _b;
253
+ // Slack treats markdown_text as mutually exclusive with text and blocks
254
+ // (error: markdown_text_conflict). Prefer markdown when we have no
255
+ // blocks; with Block Kit, use text as body/fallback.
256
+ const base = {
257
+ channel: args.channel,
258
+ unfurl_links: false,
259
+ unfurl_media: false,
260
+ };
261
+ if (args.threadTs !== undefined && args.threadTs !== "") {
262
+ base.thread_ts = args.threadTs;
263
+ }
264
+ const hasBlocks = args.blocks !== undefined && args.blocks.length > 0;
265
+ let response;
266
+ if (hasBlocks) {
267
+ response = yield callSlackApi({
268
+ botToken: args.botToken,
269
+ operation: "chat.postMessage",
270
+ body: Object.assign(Object.assign({}, base), { text: args.text, blocks: args.blocks }),
271
+ });
272
+ }
273
+ else {
274
+ response = yield callSlackApi({
275
+ botToken: args.botToken,
276
+ operation: "chat.postMessage",
277
+ body: Object.assign(Object.assign({}, base), { markdown_text: args.text }),
278
+ });
279
+ // Older workspaces / scopes may not accept markdown_text — retry with text.
280
+ if (response.ok !== true &&
281
+ (response.error === "markdown_text_conflict" ||
282
+ response.error === "invalid_arguments" ||
283
+ response.error === "invalid_blocks" ||
284
+ SLACK_UNSUPPORTED_ERRORS.has(String((_a = response.error) !== null && _a !== void 0 ? _a : "")))) {
285
+ response = yield callSlackApi({
286
+ botToken: args.botToken,
287
+ operation: "chat.postMessage",
288
+ body: Object.assign(Object.assign({}, base), { text: args.text }),
289
+ });
290
+ }
291
+ }
292
+ if (response.ok !== true) {
293
+ throw new Error(`Slack chat.postMessage failed: ${String((_b = response.error) !== null && _b !== void 0 ? _b : "unknown_error")}`);
294
+ }
295
+ const ts = typeof response.ts === "string" ? response.ts : "";
296
+ return { ts };
297
+ });
298
+ }
299
+ /** Replace an existing message (e.g. strip Approve/Deny after a decision). */
300
+ export function updateMessage(args) {
301
+ return __awaiter(this, void 0, void 0, function* () {
302
+ var _a;
303
+ const base = {
304
+ channel: args.channel,
305
+ ts: args.ts,
306
+ };
307
+ if (args.blocks !== undefined) {
308
+ // Blocks force the legacy text path (same as postMessage).
309
+ return callSlackApiSoft({
310
+ botToken: args.botToken,
311
+ operation: "chat.update",
312
+ body: Object.assign(Object.assign({}, base), { text: args.text, blocks: args.blocks }),
313
+ });
314
+ }
315
+ let result = yield callSlackApiSoft({
316
+ botToken: args.botToken,
317
+ operation: "chat.update",
318
+ body: Object.assign(Object.assign({}, base), { markdown_text: args.text }),
319
+ });
320
+ // Older workspaces / scopes may not accept markdown_text — retry with text.
321
+ if (!result.ok &&
322
+ (result.error === "markdown_text_conflict" ||
323
+ result.error === "invalid_arguments" ||
324
+ result.error === "invalid_blocks" ||
325
+ SLACK_UNSUPPORTED_ERRORS.has(String((_a = result.error) !== null && _a !== void 0 ? _a : "")))) {
326
+ result = yield callSlackApiSoft({
327
+ botToken: args.botToken,
328
+ operation: "chat.update",
329
+ body: Object.assign(Object.assign({}, base), { text: args.text }),
330
+ });
331
+ }
332
+ return result;
333
+ });
334
+ }
335
+ /**
336
+ * Delete a message (`chat.delete`). Soft-fails — used best-effort to remove an
337
+ * orphaned skeleton before falling back to a fresh post, so a failed delete
338
+ * never blocks delivery of the reply.
339
+ */
340
+ export function deleteMessage(args) {
341
+ return __awaiter(this, void 0, void 0, function* () {
342
+ if (args.channel === "" || args.ts === "") {
343
+ return { ok: false, error: "missing_channel_or_ts" };
344
+ }
345
+ return callSlackApiSoft({
346
+ botToken: args.botToken,
347
+ operation: "chat.delete",
348
+ body: {
349
+ channel: args.channel,
350
+ ts: args.ts,
351
+ },
352
+ });
353
+ });
354
+ }
355
+ export function buildSlackBinding(args) {
356
+ var _a;
357
+ let threadTs = args.threadTs;
358
+ const log = (_a = args.log) !== null && _a !== void 0 ? _a : defaultSlackLog;
359
+ const thread = {
360
+ post(text, options) {
361
+ return __awaiter(this, void 0, void 0, function* () {
362
+ var _a;
363
+ const result = yield postMessage(Object.assign({ botToken: args.botToken, channel: args.channelId, text,
364
+ threadTs }, ((options === null || options === void 0 ? void 0 : options.blocks) === undefined ? {} : { blocks: options.blocks })));
365
+ if (result.ts !== "" && threadTs === "") {
366
+ threadTs = result.ts;
367
+ (_a = args.onThreadTsChanged) === null || _a === void 0 ? void 0 : _a.call(args, result.ts);
368
+ }
369
+ log.info("postMessage ok", {
370
+ channel: args.channelId,
371
+ thread_ts: threadTs,
372
+ message_ts: result.ts,
373
+ });
374
+ return { ts: result.ts };
375
+ });
376
+ },
377
+ startTyping(status, loadingMessages) {
378
+ return __awaiter(this, void 0, void 0, function* () {
379
+ if (args.channelId === "" || threadTs === "") {
380
+ return;
381
+ }
382
+ const result = yield setThreadStatus(Object.assign({ botToken: args.botToken, channelId: args.channelId, threadTs,
383
+ status }, (loadingMessages === undefined ? {} : { loadingMessages })));
384
+ if (!result.ok) {
385
+ log.warn("assistant.threads.setStatus not-ok", {
386
+ error: result.error,
387
+ channel: args.channelId,
388
+ thread_ts: threadTs,
389
+ });
390
+ }
391
+ });
392
+ },
393
+ setTitle(title) {
394
+ return __awaiter(this, void 0, void 0, function* () {
395
+ if (args.channelId === "" || threadTs === "") {
396
+ return;
397
+ }
398
+ const result = yield setThreadTitle({
399
+ botToken: args.botToken,
400
+ channelId: args.channelId,
401
+ threadTs,
402
+ title,
403
+ });
404
+ if (!result.ok) {
405
+ log.warn("assistant.threads.setTitle not-ok", {
406
+ error: result.error,
407
+ channel: args.channelId,
408
+ thread_ts: threadTs,
409
+ });
410
+ }
411
+ });
412
+ },
413
+ setSuggestedPrompts(prompts, title) {
414
+ return __awaiter(this, void 0, void 0, function* () {
415
+ if (args.channelId === "" || threadTs === "" || prompts.length === 0) {
416
+ return;
417
+ }
418
+ const result = yield setSuggestedPrompts(Object.assign({ botToken: args.botToken, channelId: args.channelId, threadTs,
419
+ prompts }, (title === undefined ? {} : { title })));
420
+ if (!result.ok) {
421
+ log.warn("assistant.threads.setSuggestedPrompts not-ok", {
422
+ error: result.error,
423
+ channel: args.channelId,
424
+ thread_ts: threadTs,
425
+ });
426
+ }
427
+ });
428
+ },
429
+ };
430
+ return {
431
+ thread,
432
+ slack: Object.assign({ channelId: args.channelId, get threadTs() {
433
+ return threadTs;
434
+ } }, (args.teamId === undefined ? {} : { teamId: args.teamId })),
435
+ host: args.host,
436
+ };
437
+ }
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Slack Block Kit cards for human-in-the-loop tool approvals.
3
+ */
4
+ import type { ApprovalDecision } from "../../types.js";
5
+ export declare const SLACK_APPROVE_ACTION_ID = "agent_serve_approve";
6
+ export declare const SLACK_DENY_ACTION_ID = "agent_serve_deny";
7
+ export interface SlackApprovalActionValue {
8
+ sessionId: string;
9
+ callId: string;
10
+ }
11
+ export declare function encodeApprovalActionValue(payload: SlackApprovalActionValue): string;
12
+ export declare function parseApprovalActionValue(raw: string): SlackApprovalActionValue | null;
13
+ export declare function decisionFromActionId(actionId: string): ApprovalDecision | null;
14
+ /** Strip likely secrets before args are shown in Slack cards. */
15
+ export declare function redactSensitiveValues(value: unknown): unknown;
16
+ /**
17
+ * Full redacted JSON for Slack display. Never silently truncates without
18
+ * noting that execution still uses the complete args.
19
+ */
20
+ export declare function formatArgsForSlackDisplay(value: unknown): string;
21
+ export declare function buildApprovalBlocks(args: {
22
+ sessionId: string;
23
+ callId: string;
24
+ toolName: string;
25
+ args?: unknown;
26
+ }): unknown[];
27
+ export declare function buildResolvedApprovalBlocks(args: {
28
+ toolName: string;
29
+ decision: ApprovalDecision;
30
+ byUserId?: string;
31
+ }): unknown[];
32
+ //# sourceMappingURL=approvals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"approvals.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/approvals.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,eAAO,MAAM,uBAAuB,wBAAwB,CAAC;AAC7D,eAAO,MAAM,oBAAoB,qBAAqB,CAAC;AAEvD,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,wBAAwB,GAChC,MAAM,CAER;AAED,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,MAAM,GACV,wBAAwB,GAAG,IAAI,CAoBjC;AAED,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,GACf,gBAAgB,GAAG,IAAI,CAQzB;AAMD,iEAAiE;AACjE,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAmB7D;AASD;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAgBhE;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,GAAG,OAAO,EAAE,CA4DZ;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE;IAChD,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,EAAE,CAeZ"}
@@ -0,0 +1,157 @@
1
+ /**
2
+ * Slack Block Kit cards for human-in-the-loop tool approvals.
3
+ */
4
+ export const SLACK_APPROVE_ACTION_ID = "agent_serve_approve";
5
+ export const SLACK_DENY_ACTION_ID = "agent_serve_deny";
6
+ export function encodeApprovalActionValue(payload) {
7
+ return JSON.stringify(payload);
8
+ }
9
+ export function parseApprovalActionValue(raw) {
10
+ try {
11
+ const value = JSON.parse(raw);
12
+ if (typeof value !== "object" ||
13
+ value === null ||
14
+ typeof value.sessionId !== "string" ||
15
+ typeof value.callId !== "string") {
16
+ return null;
17
+ }
18
+ const sessionId = value.sessionId;
19
+ const callId = value.callId;
20
+ if (sessionId === "" || callId === "") {
21
+ return null;
22
+ }
23
+ return { sessionId, callId };
24
+ }
25
+ catch (_a) {
26
+ return null;
27
+ }
28
+ }
29
+ export function decisionFromActionId(actionId) {
30
+ if (actionId === SLACK_APPROVE_ACTION_ID) {
31
+ return "approve";
32
+ }
33
+ if (actionId === SLACK_DENY_ACTION_ID) {
34
+ return "deny";
35
+ }
36
+ return null;
37
+ }
38
+ const REDACTED = "[REDACTED]";
39
+ const SENSITIVE_KEY = /(?:pass(?:word|wd)?|secret|token|api[_-]?key|authorization|credential|private[_-]?key|access[_-]?key)/i;
40
+ /** Strip likely secrets before args are shown in Slack cards. */
41
+ export function redactSensitiveValues(value) {
42
+ if (value === null || value === undefined) {
43
+ return value;
44
+ }
45
+ if (Array.isArray(value)) {
46
+ return value.map((item) => redactSensitiveValues(item));
47
+ }
48
+ if (typeof value === "object") {
49
+ const out = {};
50
+ for (const [key, nested] of Object.entries(value)) {
51
+ out[key] = SENSITIVE_KEY.test(key)
52
+ ? REDACTED
53
+ : redactSensitiveValues(nested);
54
+ }
55
+ return out;
56
+ }
57
+ return value;
58
+ }
59
+ const SLACK_FIELD_MRDKWN_MAX = 2000;
60
+ const SLACK_ARGS_LABEL = "*Args (redacted)*\n```";
61
+ /** Max arg body that fits a section `fields` mrkdwn entry (2000 chars incl. label + fences). */
62
+ const SLACK_ARGS_DISPLAY_MAX = SLACK_FIELD_MRDKWN_MAX - SLACK_ARGS_LABEL.length - "```".length - 1;
63
+ /**
64
+ * Full redacted JSON for Slack display. Never silently truncates without
65
+ * noting that execution still uses the complete args.
66
+ */
67
+ export function formatArgsForSlackDisplay(value) {
68
+ if (value === undefined || value === null) {
69
+ return "";
70
+ }
71
+ const redacted = redactSensitiveValues(value);
72
+ const text = typeof redacted === "string" ? redacted : JSON.stringify(redacted, null, 2);
73
+ if (text.length <= SLACK_ARGS_DISPLAY_MAX) {
74
+ return text;
75
+ }
76
+ const suffix = `\n(${text.length} chars total; execution uses full args)`;
77
+ const bodyBudget = Math.max(0, SLACK_ARGS_DISPLAY_MAX - suffix.length - 1);
78
+ const out = `${text.slice(0, bodyBudget)}…${suffix}`;
79
+ return out.length <= SLACK_ARGS_DISPLAY_MAX
80
+ ? out
81
+ : out.slice(0, SLACK_ARGS_DISPLAY_MAX);
82
+ }
83
+ export function buildApprovalBlocks(args) {
84
+ const value = encodeApprovalActionValue({
85
+ sessionId: args.sessionId,
86
+ callId: args.callId,
87
+ });
88
+ const argsText = formatArgsForSlackDisplay(args.args);
89
+ const fields = [
90
+ {
91
+ type: "mrkdwn",
92
+ text: `*Tool*\n\`${args.toolName}\``,
93
+ },
94
+ ];
95
+ if (argsText !== "") {
96
+ fields.push({
97
+ type: "mrkdwn",
98
+ text: `*Args (redacted)*\n\`\`\`${argsText}\`\`\``,
99
+ });
100
+ }
101
+ return [
102
+ {
103
+ type: "header",
104
+ text: {
105
+ type: "plain_text",
106
+ text: "Approval required",
107
+ emoji: true,
108
+ },
109
+ },
110
+ {
111
+ type: "section",
112
+ text: {
113
+ type: "mrkdwn",
114
+ text: "A tool call is parked until someone in this thread approves or denies it.",
115
+ },
116
+ },
117
+ {
118
+ type: "section",
119
+ fields,
120
+ },
121
+ {
122
+ type: "actions",
123
+ block_id: `approval_${args.callId}`.slice(0, 255),
124
+ elements: [
125
+ {
126
+ type: "button",
127
+ action_id: SLACK_APPROVE_ACTION_ID,
128
+ text: { type: "plain_text", text: "Approve", emoji: true },
129
+ style: "primary",
130
+ value,
131
+ },
132
+ {
133
+ type: "button",
134
+ action_id: SLACK_DENY_ACTION_ID,
135
+ text: { type: "plain_text", text: "Deny", emoji: true },
136
+ style: "danger",
137
+ value,
138
+ },
139
+ ],
140
+ },
141
+ ];
142
+ }
143
+ export function buildResolvedApprovalBlocks(args) {
144
+ const verb = args.decision === "approve" ? "Approved" : "Denied";
145
+ const by = args.byUserId === undefined || args.byUserId === ""
146
+ ? ""
147
+ : ` by <@${args.byUserId}>`;
148
+ return [
149
+ {
150
+ type: "section",
151
+ text: {
152
+ type: "mrkdwn",
153
+ text: `*${verb}*${by} — \`${args.toolName}\``,
154
+ },
155
+ },
156
+ ];
157
+ }
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Assistant thread UX: titles and suggested prompts.
3
+ */
4
+ import { type SlackLog } from "./log.js";
5
+ import type { SlackBotToken, SlackSuggestedPrompt } from "./types.js";
6
+ export declare function firstNonEmptyLine(text: string): string | undefined;
7
+ export declare function firstLineTitle(text: string): string;
8
+ export declare function maybeSetThreadTitle(args: {
9
+ botToken: SlackBotToken | undefined;
10
+ channelId: string;
11
+ threadTs: string;
12
+ title: string;
13
+ log?: SlackLog;
14
+ }): Promise<boolean>;
15
+ export declare function maybeSetSuggestedPrompts(args: {
16
+ botToken: SlackBotToken | undefined;
17
+ channelId: string;
18
+ threadTs: string;
19
+ prompts: SlackSuggestedPrompt[];
20
+ title?: string;
21
+ log?: SlackLog;
22
+ }): Promise<boolean>;
23
+ //# sourceMappingURL=assistant.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assistant.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/assistant.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAmB,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEtE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAQlE;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,wBAAsB,mBAAmB,CAAC,IAAI,EAAE;IAC9C,QAAQ,EAAE,aAAa,GAAG,SAAS,CAAC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,QAAQ,CAAC;CAChB,GAAG,OAAO,CAAC,OAAO,CAAC,CAiBnB;AAED,wBAAsB,wBAAwB,CAAC,IAAI,EAAE;IACnD,QAAQ,EAAE,aAAa,GAAG,SAAS,CAAC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,oBAAoB,EAAE,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,QAAQ,CAAC;CAChB,GAAG,OAAO,CAAC,OAAO,CAAC,CAqBnB"}