@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,32 @@
1
+ /**
2
+ * Scaffold a Slack channel into an agent-serve project.
3
+ */
4
+ export interface InitSlackOptions {
5
+ dir: string;
6
+ /** Display name for the Slack app. Defaults to directory basename. */
7
+ name?: string;
8
+ description?: string;
9
+ /**
10
+ * Env prefix for tokens (`MY_AGENT` → `MY_AGENT_SLACK_BOT_TOKEN`). Defaults to
11
+ * the directory basename so multi-agent serve can mount several Slack bots.
12
+ * Pass `""` to use the shared `SLACK_BOT_TOKEN` / `SLACK_APP_TOKEN` globals.
13
+ */
14
+ envPrefix?: string;
15
+ /**
16
+ * Subscribe the generated manifests to `message.channels` +
17
+ * `message.groups` for the opt-in channel watch
18
+ * (`engagement.channelPosts` on `slackChannel`).
19
+ */
20
+ channelPosts?: boolean;
21
+ }
22
+ export interface InitSlackResult {
23
+ rootDir: string;
24
+ files: string[];
25
+ envPrefix: string | undefined;
26
+ envKeys: {
27
+ bot: string;
28
+ app: string;
29
+ };
30
+ }
31
+ export declare function initSlackChannel(options: InitSlackOptions): Promise<InitSlackResult>;
32
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/init.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,sEAAsE;IACtE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;CACvC;AAED,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,eAAe,CAAC,CA+F1B"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Scaffold a Slack channel into an agent-serve project.
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 { mkdir, writeFile } from "node:fs/promises";
14
+ import { basename, join, resolve } from "node:path";
15
+ import { envPrefixFromName, slackEnvKeys } from "./credentials.js";
16
+ import { buildSlackManifestPair } from "./manifest.js";
17
+ export function initSlackChannel(options) {
18
+ return __awaiter(this, void 0, void 0, function* () {
19
+ var _a, _b;
20
+ const rootDir = resolve(options.dir);
21
+ const name = (_a = options.name) !== null && _a !== void 0 ? _a : basename(rootDir);
22
+ const envPrefix = options.envPrefix === ""
23
+ ? undefined
24
+ : ((_b = options.envPrefix) !== null && _b !== void 0 ? _b : envPrefixFromName(basename(rootDir)));
25
+ const envKeys = slackEnvKeys(envPrefix);
26
+ const written = [];
27
+ const write = (rel, contents) => __awaiter(this, void 0, void 0, function* () {
28
+ const abs = join(rootDir, rel);
29
+ yield mkdir(join(abs, ".."), { recursive: true });
30
+ yield writeFile(abs, contents, { flag: "wx" });
31
+ written.push(rel);
32
+ });
33
+ const envPrefixLine = envPrefix === undefined
34
+ ? ""
35
+ : ` envPrefix: ${JSON.stringify(envPrefix)},\n`;
36
+ yield write("agent/channels/slack.ts", `import { slackChannel } from "@anysphere/agent-serve/channels/slack";
37
+
38
+ /**
39
+ * Slack channel (Socket Mode).
40
+ *
41
+ * Tokens: ${envKeys.bot} + ${envKeys.app}
42
+ * (see .agent-serve/slack/env.example).
43
+ *
44
+ * Full setup: agent-serve slack setup
45
+ */
46
+ export default slackChannel({
47
+ ${envPrefixLine} // Streaming and thinking steps default to true.
48
+ suggestedPrompts: [
49
+ { title: "Help", message: "How can you help me?" },
50
+ { title: "Status", message: "What are you working on?" },
51
+ ],
52
+ });
53
+ `);
54
+ const pair = buildSlackManifestPair(Object.assign(Object.assign({ name }, (options.description === undefined
55
+ ? {}
56
+ : { description: options.description })), (options.channelPosts === true ? { channelPosts: true } : {})));
57
+ yield write(".agent-serve/slack/manifest.dev.json", `${JSON.stringify(pair.dev, null, 2)}\n`);
58
+ yield write(".agent-serve/slack/manifest.prod.json", `${JSON.stringify(pair.prod, null, 2)}\n`);
59
+ yield write(".agent-serve/slack/env.example", `# Copy to .env.local (or export in your shell). Use the *dev* Slack app
60
+ # for local development; use the Prod app tokens in deployment secrets.
61
+ #
62
+ # Multi-agent serve needs a distinct Slack app (and token pair) per agent.
63
+
64
+ ${envKeys.bot}=xoxb-...
65
+ ${envKeys.app}=xapp-...
66
+ `);
67
+ yield write(".agent-serve/slack/setup-status.json", `${JSON.stringify({
68
+ updatedAt: new Date().toISOString(),
69
+ envPrefix: envPrefix !== null && envPrefix !== void 0 ? envPrefix : null,
70
+ envKeys,
71
+ phases: {
72
+ generate: true,
73
+ createApps: false,
74
+ install: false,
75
+ env: false,
76
+ serve: false,
77
+ smoke: false,
78
+ },
79
+ }, null, 2)}\n`);
80
+ return { rootDir, files: written, envPrefix, envKeys };
81
+ });
82
+ }
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Socket Mode interactive payloads (Block Kit Approve/Deny).
3
+ */
4
+ import type { ApprovalDecision, AuthContext, ChannelSession, PendingApproval } from "../../types.js";
5
+ import { type SlackLog } from "./log.js";
6
+ import type { SlackCredentials } from "./types.js";
7
+ export interface SlackInteractiveDispatchDeps {
8
+ credentials: SlackCredentials | undefined;
9
+ getSession: (sessionId: string) => Promise<ChannelSession | null>;
10
+ resolveApproval: (sessionId: string, callId: string, decision: ApprovalDecision, auth: AuthContext | null) => Promise<PendingApproval>;
11
+ waitUntil: (promise: Promise<unknown>) => void;
12
+ log?: SlackLog;
13
+ }
14
+ /**
15
+ * Handle a Socket Mode `interactive` body. Returns true when this was
16
+ * an agent-serve approval action (handled or rejected with a reason).
17
+ */
18
+ export declare function dispatchInteractiveFromPayload(payload: unknown, deps: SlackInteractiveDispatchDeps): Promise<boolean>;
19
+ //# sourceMappingURL=interactive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactive.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/interactive.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,eAAe,EAChB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAmB,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,MAAM,WAAW,4BAA4B;IAC3C,WAAW,EAAE,gBAAgB,GAAG,SAAS,CAAC;IAC1C,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAClE,eAAe,EAAE,CACf,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,gBAAgB,EAC1B,IAAI,EAAE,WAAW,GAAG,IAAI,KACrB,OAAO,CAAC,eAAe,CAAC,CAAC;IAC9B,SAAS,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;IAC/C,GAAG,CAAC,EAAE,QAAQ,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAsB,8BAA8B,CAClD,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,4BAA4B,GACjC,OAAO,CAAC,OAAO,CAAC,CAyFlB"}
@@ -0,0 +1,142 @@
1
+ /**
2
+ * Socket Mode interactive payloads (Block Kit Approve/Deny).
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 { decisionFromActionId, parseApprovalActionValue } from "./approvals.js";
14
+ import { buildSlackInteractiveApprovalAuth } from "./auth.js";
15
+ import { defaultSlackLog } from "./log.js";
16
+ /**
17
+ * Handle a Socket Mode `interactive` body. Returns true when this was
18
+ * an agent-serve approval action (handled or rejected with a reason).
19
+ */
20
+ export function dispatchInteractiveFromPayload(payload, deps) {
21
+ return __awaiter(this, void 0, void 0, function* () {
22
+ var _a;
23
+ var _b, _c, _d, _e;
24
+ const log = (_b = deps.log) !== null && _b !== void 0 ? _b : defaultSlackLog;
25
+ const parsed = parseBlockActionsPayload(payload);
26
+ if (parsed === null) {
27
+ return false;
28
+ }
29
+ const decision = decisionFromActionId(parsed.actionId);
30
+ const value = parseApprovalActionValue(parsed.value);
31
+ if (decision === null || value === null) {
32
+ return false;
33
+ }
34
+ log.info("interactive approval", {
35
+ decision,
36
+ session: value.sessionId,
37
+ call_id: value.callId,
38
+ user: parsed.userId,
39
+ channel: parsed.channelId,
40
+ });
41
+ const session = yield deps.getSession(value.sessionId);
42
+ if (session === null) {
43
+ log.warn("interactive approval: unknown session", {
44
+ session: value.sessionId,
45
+ });
46
+ return true;
47
+ }
48
+ const attrs = (_c = (_a = session.info.auth) === null || _a === void 0 ? void 0 : _a.attributes) !== null && _c !== void 0 ? _c : {};
49
+ const sessionChannel = (_d = attrs.channel_id) !== null && _d !== void 0 ? _d : "";
50
+ const sessionThread = (_e = attrs.thread_ts) !== null && _e !== void 0 ? _e : "";
51
+ if (sessionChannel !== "" &&
52
+ parsed.channelId !== "" &&
53
+ sessionChannel !== parsed.channelId) {
54
+ log.warn("interactive approval: channel mismatch", {
55
+ session: value.sessionId,
56
+ expected: sessionChannel,
57
+ got: parsed.channelId,
58
+ });
59
+ return true;
60
+ }
61
+ if (sessionThread !== "" &&
62
+ parsed.threadTs !== "" &&
63
+ sessionThread !== parsed.threadTs) {
64
+ log.warn("interactive approval: thread mismatch", {
65
+ session: value.sessionId,
66
+ expected: sessionThread,
67
+ got: parsed.threadTs,
68
+ });
69
+ return true;
70
+ }
71
+ const sessionAuth = session.info.auth;
72
+ if (sessionAuth === undefined || sessionAuth === null) {
73
+ log.warn("interactive approval: session has no auth", {
74
+ session: value.sessionId,
75
+ });
76
+ return true;
77
+ }
78
+ const teamId = attrs.team_id;
79
+ const clickingAuth = buildSlackInteractiveApprovalAuth(Object.assign(Object.assign({ sessionAuth, channelId: parsed.channelId || sessionChannel, threadTs: parsed.threadTs || sessionThread }, (teamId === undefined || teamId === "" ? {} : { teamId })), { clickingUserId: parsed.userId }));
80
+ try {
81
+ yield deps.resolveApproval(value.sessionId, value.callId, decision, clickingAuth);
82
+ }
83
+ catch (error) {
84
+ log.warn("interactive approval resolve failed", {
85
+ session: value.sessionId,
86
+ call_id: value.callId,
87
+ error: error instanceof Error ? error.message : String(error),
88
+ });
89
+ }
90
+ return true;
91
+ });
92
+ }
93
+ function parseBlockActionsPayload(payload) {
94
+ if (typeof payload !== "object" || payload === null) {
95
+ return null;
96
+ }
97
+ const record = payload;
98
+ if (record.type !== "block_actions") {
99
+ return null;
100
+ }
101
+ const actions = record.actions;
102
+ if (!Array.isArray(actions) || actions.length === 0) {
103
+ return null;
104
+ }
105
+ const first = actions[0];
106
+ if (typeof first !== "object" || first === null) {
107
+ return null;
108
+ }
109
+ const action = first;
110
+ if (typeof action.action_id !== "string" ||
111
+ typeof action.value !== "string") {
112
+ return null;
113
+ }
114
+ const channel = typeof record.channel === "object" && record.channel !== null
115
+ ? record.channel
116
+ : {};
117
+ const message = typeof record.message === "object" && record.message !== null
118
+ ? record.message
119
+ : {};
120
+ const user = typeof record.user === "object" && record.user !== null
121
+ ? record.user
122
+ : {};
123
+ const channelId = typeof channel.id === "string" ? channel.id : "";
124
+ const messageTs = typeof message.ts === "string" ? message.ts : "";
125
+ const threadTs = typeof message.thread_ts === "string"
126
+ ? message.thread_ts
127
+ : typeof record.container === "object" &&
128
+ record.container !== null &&
129
+ typeof record.container.thread_ts ===
130
+ "string"
131
+ ? record.container.thread_ts
132
+ : messageTs;
133
+ const userId = typeof user.id === "string" ? user.id : "";
134
+ return {
135
+ actionId: action.action_id,
136
+ value: action.value,
137
+ channelId,
138
+ threadTs,
139
+ userId,
140
+ messageTs,
141
+ };
142
+ }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Slack deep links for threads / messages.
3
+ */
4
+ /** Build a web permalink that opens a Slack thread in the browser. */
5
+ export declare function slackThreadPermalink(args: {
6
+ channelId: string;
7
+ threadTs: string;
8
+ teamId?: string;
9
+ }): string | null;
10
+ //# sourceMappingURL=links.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"links.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/links.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,sEAAsE;AACtE,wBAAgB,oBAAoB,CAAC,IAAI,EAAE;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,MAAM,GAAG,IAAI,CAahB"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Slack deep links for threads / messages.
3
+ */
4
+ /** Build a web permalink that opens a Slack thread in the browser. */
5
+ export function slackThreadPermalink(args) {
6
+ var _a;
7
+ const channelId = args.channelId.trim();
8
+ const threadTs = args.threadTs.trim();
9
+ if (channelId === "" || threadTs === "") {
10
+ return null;
11
+ }
12
+ const teamId = (_a = args.teamId) === null || _a === void 0 ? void 0 : _a.trim();
13
+ if (teamId !== undefined && teamId !== "" && teamId !== "unknown") {
14
+ // Client deep link opens the thread pane in the right workspace.
15
+ return `https://app.slack.com/client/${encodeURIComponent(teamId)}/${encodeURIComponent(channelId)}/thread/${encodeURIComponent(channelId)}-${encodeURIComponent(threadTs)}`;
16
+ }
17
+ const pTs = `p${threadTs.replace(".", "")}`;
18
+ return `https://app.slack.com/archives/${encodeURIComponent(channelId)}/${pTs}?thread_ts=${encodeURIComponent(threadTs)}`;
19
+ }
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Live-reply delivery for Slack `chat.startStream` / append / stop.
3
+ *
4
+ * Cursor-account channels do not use this path — they reply with a single
5
+ * final `chat.postMessage` and put thinking on `assistant.threads.setStatus`
6
+ * (no message edits).
7
+ */
8
+ import type { ChannelEventContext } from "../../types.js";
9
+ import type { SlackLog } from "./log.js";
10
+ import type { SlackBotToken, SlackChannelState } from "./types.js";
11
+ type SlackChannel = ChannelEventContext<SlackChannelState>;
12
+ export interface LiveDeliveryDeps {
13
+ botToken: SlackBotToken | undefined;
14
+ getLog: () => SlackLog;
15
+ }
16
+ /**
17
+ * How the default handlers deliver an in-progress reply. Methods write live
18
+ * delivery state (`streamTs`, `streamChannelId`, `lastPostedText`,
19
+ * `streamingUnavailable`) on `channel.state` directly.
20
+ */
21
+ export interface LiveDeliveryStrategy {
22
+ /** True when tool-call thinking steps can be appended to the live message. */
23
+ readonly inlineToolSteps: boolean;
24
+ /** Open the live message (stream start). */
25
+ start(args: {
26
+ channel: SlackChannel;
27
+ channelId: string;
28
+ threadTs: string;
29
+ sessionId: string;
30
+ }): Promise<void>;
31
+ /** Push the latest cumulative text to the live message (throttled). */
32
+ append(args: {
33
+ channel: SlackChannel;
34
+ channelId: string;
35
+ streamTs: string;
36
+ text: string;
37
+ sessionId: string;
38
+ }): Promise<void>;
39
+ /**
40
+ * Flush the final reply text. `delivered` is false only when the caller must
41
+ * post the full reply as a fresh message (finalize failed on partial text).
42
+ */
43
+ finalize(args: {
44
+ channel: SlackChannel;
45
+ channelId: string;
46
+ streamTs: string;
47
+ text: string;
48
+ sessionId: string;
49
+ }): Promise<{
50
+ delivered: boolean;
51
+ }>;
52
+ /** Close the live message when the turn produced no final text. */
53
+ finalizeEmpty(args: {
54
+ channel: SlackChannel;
55
+ channelId: string;
56
+ streamTs: string;
57
+ }): Promise<void>;
58
+ /** Best-effort remove a live message left open after the turn ended. */
59
+ cleanupOrphan(args: {
60
+ channel: SlackChannel;
61
+ }): Promise<void>;
62
+ /** Deliver the error text into the live message; `delivered` gates a fallback post. */
63
+ fail(args: {
64
+ channel: SlackChannel;
65
+ channelId: string;
66
+ streamTs: string;
67
+ errorText: string;
68
+ sessionId: string;
69
+ }): Promise<{
70
+ delivered: boolean;
71
+ }>;
72
+ }
73
+ export declare function createStreamDeliveryStrategy(deps: LiveDeliveryDeps): LiveDeliveryStrategy;
74
+ export {};
75
+ //# sourceMappingURL=live-delivery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"live-delivery.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/live-delivery.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAE1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEnE,KAAK,YAAY,GAAG,mBAAmB,CAAC,iBAAiB,CAAC,CAAC;AAE3D,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,aAAa,GAAG,SAAS,CAAC;IACpC,MAAM,EAAE,MAAM,QAAQ,CAAC;CACxB;AAED;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACnC,8EAA8E;IAC9E,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,4CAA4C;IAC5C,KAAK,CAAC,IAAI,EAAE;QACV,OAAO,EAAE,YAAY,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClB,uEAAuE;IACvE,MAAM,CAAC,IAAI,EAAE;QACX,OAAO,EAAE,YAAY,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClB;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE;QACb,OAAO,EAAE,YAAY,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACpC,mEAAmE;IACnE,aAAa,CAAC,IAAI,EAAE;QAClB,OAAO,EAAE,YAAY,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;KAClB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClB,wEAAwE;IACxE,aAAa,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,YAAY,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D,uFAAuF;IACvF,IAAI,CAAC,IAAI,EAAE;QACT,OAAO,EAAE,YAAY,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CACrC;AAED,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,gBAAgB,GACrB,oBAAoB,CA6HtB"}
@@ -0,0 +1,143 @@
1
+ /**
2
+ * Live-reply delivery for Slack `chat.startStream` / append / stop.
3
+ *
4
+ * Cursor-account channels do not use this path — they reply with a single
5
+ * final `chat.postMessage` and put thinking on `assistant.threads.setStatus`
6
+ * (no message edits).
7
+ */
8
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
9
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
10
+ return new (P || (P = Promise))(function (resolve, reject) {
11
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
12
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
13
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
14
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
15
+ });
16
+ };
17
+ import { appendChatStream, startChatStream, stopChatStream } from "./api.js";
18
+ import { computeStreamAppend } from "./stream.js";
19
+ export function createStreamDeliveryStrategy(deps) {
20
+ const { botToken, getLog } = deps;
21
+ return {
22
+ inlineToolSteps: true,
23
+ start(_a) {
24
+ return __awaiter(this, arguments, void 0, function* ({ channel, channelId, threadTs, sessionId }) {
25
+ const log = getLog();
26
+ const started = yield startChatStream({
27
+ botToken,
28
+ channel: channelId,
29
+ thread_ts: threadTs,
30
+ markdown_text: "",
31
+ });
32
+ if (!started.ok) {
33
+ log.warn("chat.startStream unavailable", {
34
+ error: started.error,
35
+ channel: channelId,
36
+ thread_ts: threadTs,
37
+ session: sessionId,
38
+ });
39
+ if (started.unsupported === true) {
40
+ channel.state.streamingUnavailable = true;
41
+ }
42
+ return;
43
+ }
44
+ channel.state.streamTs = started.ts;
45
+ channel.state.streamChannelId = started.channel;
46
+ channel.state.lastPostedText = "";
47
+ log.info("chat.startStream ok", {
48
+ channel: started.channel,
49
+ stream_ts: started.ts,
50
+ session: sessionId,
51
+ });
52
+ });
53
+ },
54
+ append(_a) {
55
+ return __awaiter(this, arguments, void 0, function* ({ channel, channelId, streamTs, text, sessionId }) {
56
+ const appendText = computeStreamAppend(channel.state.lastPostedText, text);
57
+ if (appendText === "") {
58
+ return;
59
+ }
60
+ const result = yield appendChatStream({
61
+ botToken,
62
+ channel: channelId,
63
+ ts: streamTs,
64
+ markdown_text: appendText,
65
+ });
66
+ if (!result.ok) {
67
+ getLog().warn("appendStream failed", {
68
+ error: result.error,
69
+ channel: channelId,
70
+ stream_ts: streamTs,
71
+ session: sessionId,
72
+ });
73
+ if (result.unsupported === true) {
74
+ channel.state.streamingUnavailable = true;
75
+ }
76
+ return;
77
+ }
78
+ channel.state.lastPostedText = text;
79
+ });
80
+ },
81
+ finalize(_a) {
82
+ return __awaiter(this, arguments, void 0, function* ({ channel, channelId, streamTs, text, sessionId }) {
83
+ const log = getLog();
84
+ // Only send the unsent suffix — full text was already appended.
85
+ const appendText = computeStreamAppend(channel.state.lastPostedText, text);
86
+ const stopped = yield stopChatStream({
87
+ botToken,
88
+ channel: channelId,
89
+ ts: streamTs,
90
+ markdown_text: appendText === "" ? undefined : appendText,
91
+ });
92
+ if (stopped.ok) {
93
+ channel.state.streamTs = null;
94
+ channel.state.lastPostedText = text;
95
+ log.info("reply delivered via stream", {
96
+ channel: channelId,
97
+ stream_ts: streamTs,
98
+ session: sessionId,
99
+ chars: text.length,
100
+ });
101
+ return { delivered: true };
102
+ }
103
+ log.warn("chat.stopStream failed; falling back to postMessage", {
104
+ error: stopped.error,
105
+ channel: channelId,
106
+ stream_ts: streamTs,
107
+ session: sessionId,
108
+ });
109
+ if (stopped.unsupported === true) {
110
+ channel.state.streamingUnavailable = true;
111
+ }
112
+ channel.state.streamTs = null;
113
+ // If we already streamed content, do not post the full reply again.
114
+ const alreadyStreamed = typeof channel.state.lastPostedText === "string" &&
115
+ channel.state.lastPostedText.length > 0;
116
+ return { delivered: alreadyStreamed };
117
+ });
118
+ },
119
+ finalizeEmpty(_a) {
120
+ return __awaiter(this, arguments, void 0, function* ({ channelId, streamTs }) {
121
+ yield stopChatStream({ botToken, channel: channelId, ts: streamTs });
122
+ });
123
+ },
124
+ cleanupOrphan() {
125
+ return __awaiter(this, void 0, void 0, function* () {
126
+ // The stream path closes its message in message.completed / turn.failed;
127
+ // there is nothing to clean up after turn.completed.
128
+ });
129
+ },
130
+ fail(_a) {
131
+ return __awaiter(this, arguments, void 0, function* ({ channel, channelId, streamTs, errorText }) {
132
+ const stopped = yield stopChatStream({
133
+ botToken,
134
+ channel: channelId,
135
+ ts: streamTs,
136
+ markdown_text: errorText,
137
+ });
138
+ channel.state.streamTs = null;
139
+ return { delivered: stopped.ok };
140
+ });
141
+ },
142
+ };
143
+ }
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Shared logging for the Slack channel pack.
3
+ *
4
+ * Uses the same `(line: string) => void` contract as ServeOptions.logger.
5
+ * Lines always start with `[agent-serve/slack]` so Socket Mode docs and greps
6
+ * keep working. Optional key=value fields carry correlation ids.
7
+ */
8
+ export type SlackLogWrite = (line: string) => void;
9
+ export type SlackLogLevel = "debug" | "info" | "warn" | "error";
10
+ export type SlackLogFields = Record<string, string | number | boolean | null | undefined>;
11
+ export interface SlackLog {
12
+ /** Raw sink used by Socket Mode (already-prefixed lines ok). */
13
+ write: SlackLogWrite;
14
+ debug: (message: string, fields?: SlackLogFields) => void;
15
+ info: (message: string, fields?: SlackLogFields) => void;
16
+ warn: (message: string, fields?: SlackLogFields) => void;
17
+ error: (message: string, fields?: SlackLogFields) => void;
18
+ }
19
+ /** Format `key=value` pairs; omit null/undefined. */
20
+ export declare function formatSlackLogFields(fields?: SlackLogFields): string;
21
+ export declare function formatSlackLogLine(level: SlackLogLevel, message: string, fields?: SlackLogFields): string;
22
+ export declare function createSlackLogger(write?: SlackLogWrite): SlackLog;
23
+ /** Default logger when none is injected (console). */
24
+ export declare const defaultSlackLog: SlackLog;
25
+ //# sourceMappingURL=log.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/log.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;AAEnD,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAEhE,MAAM,MAAM,cAAc,GAAG,MAAM,CACjC,MAAM,EACN,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAC7C,CAAC;AAEF,MAAM,WAAW,QAAQ;IACvB,gEAAgE;IAChE,KAAK,EAAE,aAAa,CAAC;IACrB,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,cAAc,KAAK,IAAI,CAAC;IAC1D,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,cAAc,KAAK,IAAI,CAAC;IACzD,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,cAAc,KAAK,IAAI,CAAC;IACzD,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,cAAc,KAAK,IAAI,CAAC;CAC3D;AAED,qDAAqD;AACrD,wBAAgB,oBAAoB,CAAC,MAAM,CAAC,EAAE,cAAc,GAAG,MAAM,CAgBpE;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,cAAc,GACtB,MAAM,CAGR;AAED,wBAAgB,iBAAiB,CAC/B,KAAK,GAAE,aAA2C,GACjD,QAAQ,CAuBV;AAED,sDAAsD;AACtD,eAAO,MAAM,eAAe,EAAE,QAA8B,CAAC"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Shared logging for the Slack channel pack.
3
+ *
4
+ * Uses the same `(line: string) => void` contract as ServeOptions.logger.
5
+ * Lines always start with `[agent-serve/slack]` so Socket Mode docs and greps
6
+ * keep working. Optional key=value fields carry correlation ids.
7
+ */
8
+ /** Format `key=value` pairs; omit null/undefined. */
9
+ export function formatSlackLogFields(fields) {
10
+ if (fields === undefined) {
11
+ return "";
12
+ }
13
+ const parts = [];
14
+ for (const [key, value] of Object.entries(fields)) {
15
+ if (value === undefined || value === null) {
16
+ continue;
17
+ }
18
+ const rendered = typeof value === "string" && /[\s=]/.test(value)
19
+ ? JSON.stringify(value)
20
+ : String(value);
21
+ parts.push(`${key}=${rendered}`);
22
+ }
23
+ return parts.length === 0 ? "" : ` ${parts.join(" ")}`;
24
+ }
25
+ export function formatSlackLogLine(level, message, fields) {
26
+ const levelTag = level === "info" ? "" : `${level} `;
27
+ return `[agent-serve/slack] ${levelTag}${message}${formatSlackLogFields(fields)}`;
28
+ }
29
+ export function createSlackLogger(write = (line) => console.log(line)) {
30
+ const emit = (level, message, fields) => {
31
+ write(formatSlackLogLine(level, message, fields));
32
+ };
33
+ return {
34
+ write(line) {
35
+ // Preserve Socket Mode messages that already include the prefix.
36
+ write(line.startsWith("[agent-serve/slack]")
37
+ ? line
38
+ : `[agent-serve/slack] ${line}`);
39
+ },
40
+ debug: (message, fields) => emit("debug", message, fields),
41
+ info: (message, fields) => emit("info", message, fields),
42
+ warn: (message, fields) => emit("warn", message, fields),
43
+ error: (message, fields) => emit("error", message, fields),
44
+ };
45
+ }
46
+ /** Default logger when none is injected (console). */
47
+ export const defaultSlackLog = createSlackLogger();