@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,142 @@
1
+ ---
2
+ name: agent-serve-framework-map
3
+ description: >-
4
+ Orientation for @anysphere/agent-serve — folder structure, local vs cloud
5
+ runtimes, sessions, state layout, and invariants (Node not Bun, root
6
+ evals/, typecheck after tsx). Use when creating, editing, or running
7
+ agent-serve projects with agent/agent.ts and agent/instructions.md.
8
+ ---
9
+
10
+ # agent-serve framework map
11
+
12
+ `@anysphere/agent-serve` serves agents defined as ordinary files: markdown
13
+ for prose, TypeScript for typed behavior, under an `agent/` directory. The
14
+ framework discovers the files, compiles a manifest, and serves the agent
15
+ over HTTP/Slack/GitHub channels, with the Cursor SDK + harness as the
16
+ execution engine. Ground truth is the package `README.md` (full reference)
17
+ and `AGENTS.md` (coding-agent loop) — this skill is the map, not the spec.
18
+
19
+ Run the CLI as `agent-serve <cmd>`. In the everysphere monorepo there is no
20
+ installed bin — use:
21
+
22
+ ```bash
23
+ cd packages/agent-serve
24
+ pnpm exec tsx src/bin/agent-serve.ts <cmd> ...
25
+ ```
26
+
27
+ ## Hard invariants (violating these wastes hours)
28
+
29
+ 1. **Node 22+, never Bun.** Bun's HTTP/2 client corrupts harness
30
+ tool-result streams (`NGHTTP2_FRAME_SIZE_ERROR`): every built-in
31
+ read/grep the model makes fails and turns degrade into 8-minute retry
32
+ loops. All package mise tasks already use tsx.
33
+ 2. **Evals live at the project root `evals/`**, never `agent/evals/` (that
34
+ path is silently ignored).
35
+ 3. **tsx strips types without checking them.** `validate`/`run` passing
36
+ does not mean the code typechecks — run the repo's TypeScript check
37
+ (in everysphere: `dev check typecheck packages/agent-serve/... --timeout 120`)
38
+ before shipping. Classic miss: a tool `execute` return that fails
39
+ `ToolExecuteResult` — returns must be JSON-shaped, so use object
40
+ literals or `type` aliases, not `interface` types.
41
+ 4. **Keep session state out of big monorepos.** Session workspaces are real
42
+ Cursor project directories and inherit ambient `AGENTS.md`/`.cursor`
43
+ rules from **ancestors**. Set `defineAgent({ local: { cwd } })` outside
44
+ the monorepo or pass a temp `--state-root`. (`run`/`eval` already use a
45
+ temp state root.)
46
+ 5. **A model turn needs `CURSOR_API_KEY`.** Everything structural
47
+ (`validate`, `info`, `call`, `serve` bring-up) works without one.
48
+
49
+ ## Folder structure
50
+
51
+ One file per concept; the path is the identity. Full details for each
52
+ path live under README "Folder structure".
53
+
54
+ | Path | What it is |
55
+ | --- | --- |
56
+ | `agent/agent.ts` | `defineAgent({ model?, runtime?, cloud?, local? })`; model defaults to `grok-4.5` with `effort=high`, `fast=true` |
57
+ | `agent/instructions.md` | Always-on system prompt (required; `.ts`/dir forms exist) |
58
+ | `agent/tools/<name>.ts` | One typed tool; filename = tool name. `execution: "server"` (in-process, default) or `"agent"` (script that runs where the agent runs) |
59
+ | `agent/skills/*` | SKILL.md-convention procedures, loaded on demand |
60
+ | `agent/mcp-connections/<name>.ts` | MCP servers — available to the model, to server tools (`ctx.host.mcp`), and to channel/schedule handlers (`args.host.mcp`) |
61
+ | `agent/subagents/<id>/` | Child agent dir (`description` required; per-subagent tools/skills/MCP connections ignored for now) |
62
+ | `agent/channels/*.ts` | HTTP surfaces beyond the built-in session API; `slack.ts` / `github.ts` use the platform packs |
63
+ | `agent/hooks/*.ts` | Observe-only event subscribers (never fatal) |
64
+ | `agent/ab.ts` or `agent/ab/*.ts` | Live A/B metrics (`defineAB`); sticky `split` + `onSample` |
65
+ | `agent/ab.config.ts` | Optional A/B `maxPlaygroundSessions` / `persistSamples` / `persistSnapshots` |
66
+ | `agent/schedules/*` | Cron-driven runs (UTC, 5-field; never auto-fire under `--dev`) |
67
+ | `agent/sandbox/workspace/` | Files seeded into each session workspace (local runtime only) |
68
+ | `agent/lib/` | Import-only shared code, never discovered |
69
+ | `evals/**/*.eval.ts` | Filesystem evals; case id = path under `evals/` |
70
+
71
+ ## Local vs cloud runtime
72
+
73
+ `runtime: "local"` (default) runs turns on the Cursor SDK local harness on
74
+ the serve host; `runtime: "cloud"` runs them on Cursor cloud agents
75
+ (`bc-...` ids, needs `cloud: { repos: [...] }`).
76
+
77
+ | Capability | local | cloud |
78
+ | --- | --- | --- |
79
+ | Server tools (`execution: "server"`), approvals | yes | **no** |
80
+ | Agent tools (`execution: "agent"` scripts) | yes | yes |
81
+ | Skills, sandbox seeds | yes | only if in the cloud repo |
82
+ | Instructions | `AGENTS.md` in session workspace | prepended to first prompt |
83
+ | Checkout of a repo/PR | you arrange it | the VM carries it |
84
+
85
+ Rule of thumb: per-PR worktrees on the serve host die at
86
+ "hundreds of engineers issuing PRs" — when the job needs a repo checkout at
87
+ scale, use cloud and keep the host to routing, briefs, and bookkeeping.
88
+ `validate` warns when cloud is combined with local-only capabilities.
89
+
90
+ ## Sessions, tokens, streams
91
+
92
+ Two handles, two owners:
93
+
94
+ - **continuationToken** — channel-owned conversation key. Same token =
95
+ same durable session (a Slack `channelId:threadTs`, a `pr:owner/repo#N`).
96
+ Rotates on each accepted HTTP follow-up; stale tokens get `409`.
97
+ - **sessionId** — runtime-owned handle for streaming/inspection
98
+ (`GET /v1/session/:id/stream?startIndex=N`, durable NDJSON replay).
99
+
100
+ A follow-up to a busy session **interrupts the in-flight turn** and waits
101
+ for it to settle before the new turn sends. `POST /v1/session/:id/stop`
102
+ interrupts without sending. Session-bound deterministic tool calls are
103
+ rejected with `409 session_busy` while a turn runs.
104
+
105
+ Key built-in routes (each agent, under `/<slug>` in multi-agent mode):
106
+ `POST /v1/session`, `POST /v1/session/:id`, `GET /v1/session/:id/stream`,
107
+ `GET /v1/sessions`, `POST /v1/tools/:toolName` (deterministic call),
108
+ `GET/POST /v1/session/:id/approvals[/:callId]`, `GET /v1/info`,
109
+ `GET /v1/health`, and in dev `POST /v1/dev/schedules/:id`,
110
+ `POST /v1/dev/reminders/:id`.
111
+
112
+ ## State layout
113
+
114
+ ```
115
+ <project>/.agent-serve/ # or <stateRoot>/<slug>/ under serve
116
+ sessions/<id>/session.json # metadata
117
+ sessions/<id>/events.ndjson # durable stream (replayable)
118
+ sessions/<id>/workspace/ # the harness cwd for that session
119
+ traces/<sessionId>.ndjson # written by `run`
120
+ runner/ # SDK conversation store
121
+ ```
122
+
123
+ Delete a session directory to forget a conversation. The playground can
124
+ open any `events.ndjson` ("Open trace").
125
+
126
+ ## The loop
127
+
128
+ Edit → inspect → run → assert. Canonical commands and flags live in
129
+ `AGENTS.md` (`validate` / `info` / `call` / `run` / `eval` / `serve`).
130
+ Serve only your agent's directory during bring-up — mounting a parent
131
+ folder mounts every sibling agent too.
132
+
133
+ ## Where to go next
134
+
135
+ - Scaffolding → `packages/agent-serve/skills/create-agent/SKILL.md`
136
+ - Evals → `packages/agent-serve/skills/evals/SKILL.md`
137
+ - Live A/B metrics → `packages/agent-serve/skills/ab/SKILL.md`
138
+ - GitHub webhooks → `packages/agent-serve/skills/github/SKILL.md`
139
+ - Slack → `packages/agent-serve/skills/setup-slack/SKILL.md`
140
+ - Local triage → `packages/agent-serve/skills/debug/SKILL.md`
141
+ - Measured improvement → `packages/agent-serve/skills/hillclimb/SKILL.md`
142
+ - Dogfood / deploy → `packages/agent-serve/skills/operate/SKILL.md`
@@ -0,0 +1,144 @@
1
+ ---
2
+ name: agent-serve-github
3
+ description: >-
4
+ Build and test GitHub-webhook-driven agent-serve agents: githubChannel
5
+ hooks (auth turn vs host task), signature modes, and testing tiers
6
+ (fixtures, github replay, github forward, serve --cursor-events). Use
7
+ when wiring GitHub events, replaying PR webhooks, or debugging delivery.
8
+ ---
9
+
10
+ # GitHub channels in agent-serve
11
+
12
+ Author `agent/channels/github.ts` with `githubChannel()` from
13
+ `@anysphere/agent-serve/channels/github`. It mounts
14
+ `POST /<slug>/v1/channels/github` and publishes the events it dispatches on
15
+ (derived from declared hooks, or pinned via `webhookEvents`) so the CLI can
16
+ auto-derive forwarding.
17
+
18
+ ```ts
19
+ import { defaultGitHubAuth, githubChannel } from "@anysphere/agent-serve/channels/github";
20
+
21
+ export default githubChannel({
22
+ botName: "my-agent", // or GITHUB_APP_SLUG; used to ignore self-comments
23
+ credentials: { webhookSecret: () => process.env.GITHUB_WEBHOOK_SECRET },
24
+ onPullRequest: (ctx, pr) =>
25
+ pr.action === "opened" ? { auth: defaultGitHubAuth(ctx) } : null,
26
+ onCheckSuite: (ctx, suite) =>
27
+ suite.conclusion === "failure" ? { task: () => triage(ctx) } : null,
28
+ });
29
+ ```
30
+
31
+ Hooks: `onPullRequest`, `onComment`, `onIssue`, `onCheckSuite`,
32
+ `onCheckRun`, `onWorkflowRun`, `onStatus`, plus catch-all `onEvent` and
33
+ lifecycle `onStart`/`onStop`. Each hook returns one of:
34
+
35
+ | Return | Meaning |
36
+ | --- | --- |
37
+ | `{ auth }` | Start/continue a **model turn** as that actor (a chat session exists; shows in the playground) |
38
+ | `{ task }` | **Host-side work**, 202-ACKed immediately so it can run past GitHub's ~10s delivery timeout (no chat session) |
39
+ | `null` | Skip this delivery |
40
+
41
+ Use `{ task }` for deterministic pipelines (a security reviewer can run its
42
+ whole review loop this way and report via commit status); use `{ auth }` when
43
+ the model should reason about the event.
44
+
45
+ ## Auth modes
46
+
47
+ - **Secret set** → route auth is `allowAll()` + `X-Hub-Signature-256`
48
+ verification before parsing; the HMAC becomes the request principal.
49
+ - **No secret** → `localDevStrict()` (loopback only) — except under
50
+ `serve --dev`, which admits **unsigned loopback** deliveries so fixtures
51
+ and forwarding work with zero config.
52
+ - Non-dev targets always need the secret; keep the same value on the
53
+ server and whatever signs deliveries.
54
+
55
+ ## Testing tiers — pick deliberately
56
+
57
+ ### 1. Saved fixtures (offline, free)
58
+
59
+ ```bash
60
+ curl -s -X POST http://127.0.0.1:3000/<slug>/v1/channels/github \
61
+ -H 'content-type: application/json' \
62
+ -H 'x-github-event: pull_request' \
63
+ -d @fixtures/github/pull_request.synchronize.json
64
+ ```
65
+
66
+ No signature needed against `--dev`. Snapshot fixtures with replay's
67
+ `--dry-run --out` (below) instead of hand-writing payloads.
68
+
69
+ ### 2. `github replay` — deterministic, read-only (the hillclimbing tier)
70
+
71
+ Reads a real PR via `gh api` (**pull access is enough** — `GITHUB_TOKEN`
72
+ is fine here), synthesizes GitHub-shaped payloads, signs them when a secret
73
+ is configured, and POSTs them at the channel. Fully deterministic.
74
+
75
+ ```bash
76
+ agent-serve github replay https://github.com/owner/repo/pull/123 --dir <project>
77
+ agent-serve github replay owner/repo#123 --dir <project> --events '*' --conclusion failure
78
+ agent-serve github replay owner/repo#123 --dir <project> --events '*' --dry-run --out fixtures/github
79
+ ```
80
+
81
+ `--events` defaults to `pull_request` (`'*'` = the channel's declared
82
+ set); `--action` / `--conclusion` / `--comment` / `--context` shape each
83
+ event; `--secret` or `GITHUB_WEBHOOK_SECRET` signs.
84
+
85
+ ### 3. `github forward` — live deliveries (needs repo admin)
86
+
87
+ Wraps `gh webhook forward`: registers a real webhook and relays deliveries
88
+ to loopback. URL + events auto-derived; repo inferred from the git remote.
89
+
90
+ ```bash
91
+ agent-serve github doctor --install # one-time: gh + cli/gh-webhook
92
+ agent-serve github events --dir <parent> --json # what would be forwarded
93
+ GITHUB_TOKEN= GH_TOKEN= agent-serve github forward --dir <project>
94
+ ```
95
+
96
+ Traps, in order of hours lost:
97
+
98
+ 1. **`GITHUB_TOKEN`/`GH_TOKEN` in the env → every delivery 401s** while
99
+ hook creation still succeeds. The relay authenticates with the gh CLI
100
+ login and rejects env tokens. Blank them for the command. `doctor` and
101
+ `forward` warn about this.
102
+ 2. **One forwarder per repo** (GitHub limit). Point one
103
+ `forward --dir <parent>` at a folder of agents and it fans out each raw,
104
+ still-signed delivery to every channel whose event set matches; N
105
+ separate forwarders collide with `Hook already exists`.
106
+ 3. Requires **admin** on the repo (org owner for `--org`) — if you lack
107
+ it, use replay.
108
+ 4. Best-effort dev relay: deliveries while the process is down are lost.
109
+
110
+ `--repo owner/repo` / `--org ORG` override the target, `--events` narrows,
111
+ `--url` points at a tunnel, `--slug` / `--channel` target one agent.
112
+
113
+ ### 4. `serve --cursor-events` — pull from Cursor (`/v0/scm-events`)
114
+
115
+ ```bash
116
+ agent-serve serve --dir <project> --cursor-events --repo owner/repo
117
+ ```
118
+
119
+ Reads the stream as the host's Cursor user, so it **requires sign-in**
120
+ (`agent-serve login` / `CURSOR_API_KEY`) — `serve` refuses to start signed
121
+ out instead of running a relay that can never receive events. No public URL
122
+ or repo admin. Registers before consuming; offset + consumer id under
123
+ `<state-root>/cursor-events/`. `CURSOR_API_BASE_URL` for a non-default
124
+ backend. Stream is metadata-only today (payload lookup later).
125
+
126
+ ## Production-shaped channel patterns
127
+
128
+ Steal these when an agent must survive real webhook volume.
129
+
130
+ - **Debounce per PR** (~3s, latest event wins) and re-buffer while CI
131
+ settles; skip a flush when a turn for that PR is already in flight.
132
+ - **Persist the buffer before ACKing** the webhook
133
+ (e.g. `.agent-serve/<slug>/webhook-buffer.json`) and restore it on channel
134
+ start — a restart must not drop buffered wakes.
135
+ - **Stable continuation key** `pr:owner/repo#N` so every wake resumes the
136
+ PR's session; cross-channel resume needs an affinity store mapping PR →
137
+ SDK agent id (write it from an `agent.bound` hook).
138
+ - **Discard payload details in wake prompts** — send a generic "re-check
139
+ the PR" refresh; the agent re-reads ground truth instead of trusting a
140
+ stale payload.
141
+ - **Cancel PR-scoped reminders on `pull_request.closed`.**
142
+ - No repo allowlist means the channel wakes for whatever deliveries
143
+ reach it — decide explicitly what repos an agent may act on, and
144
+ remember each wake spends real model budget.
@@ -0,0 +1,162 @@
1
+ ---
2
+ name: agent-serve-hillclimb
3
+ description: >-
4
+ Iterate on a specific agent-serve agent by running the local server,
5
+ sending real requests, measuring correctness/efficiency, and proposing
6
+ the next harness or prompt change. Read this skill when improving an
7
+ existing agent.
8
+ paths:
9
+ - packages/agent-serve/**/*
10
+ ---
11
+
12
+ # Agent-serve hillclimb
13
+
14
+ Optimize one agent-serve agent project
15
+ with a tight measure → change → remeasure loop. Do not redesign the
16
+ whole framework; climb one concrete failure mode at a time. Sibling skills:
17
+ `framework-map` (orientation), `evals` (the ratchet), `ab` (live variant
18
+ metrics under serve), `github` (deterministic webhook replay), `debug`
19
+ (when a run misbehaves rather than underperforms).
20
+
21
+ ## Preconditions
22
+
23
+ Confirm with the user (or take from the invoking message):
24
+
25
+ 1. **Target agent** — path or slug, e.g. `./my-agent`
26
+ 2. **Fixture(s)** — fixed inputs to compare across runs (PR URL, webhook
27
+ payload, playground prompt, etc.)
28
+ 3. **Success criteria** — what “better” means this round (fewer tools, faster
29
+ wall time, higher finding quality, fewer wrong side-effects, …)
30
+ 4. **Freeze line** — what must not change (API contracts, public output shape)
31
+
32
+ If those are missing, ask before editing.
33
+
34
+ ## Make the fixture deterministic first
35
+
36
+ A climb over a moving input is noise. Before round 1:
37
+
38
+ - **GitHub agents** — replay, don't wait for live events:
39
+ `agent-serve github replay <pr> --dir <project>` synthesizes signed,
40
+ GitHub-shaped payloads from read access only, identically every run;
41
+ `--dry-run --out fixtures/github` snapshots them for offline replay.
42
+ - **Tool behavior** — isolate host tools from the model with
43
+ `agent-serve call <tool> --dir <project> --input '{...}'` (schema-validated,
44
+ in-process, no turn). If the tool output is wrong, no prompt change fixes it.
45
+ - **Chat agents** — `agent-serve run --dir <project> --message "<fixture>"`
46
+ gives a JSON trajectory plus an NDJSON trace under
47
+ `<project>/.agent-serve/traces/`; `agent-serve trajectory --events <file>`
48
+ re-summarizes any saved trace.
49
+ - **Manual probes** — the playground Try modal on any channel route
50
+ remembers your last body per endpoint and has Copy curl; a successful Try
51
+ opens the created session.
52
+
53
+ ## Loop
54
+
55
+ Repeat until the user stops or fixtures meet the criteria.
56
+
57
+ ### 1. Baseline
58
+
59
+ - Serve with Node (never Bun):
60
+
61
+ ```bash
62
+ agent-serve serve --dir <project> --dev
63
+ ```
64
+
65
+ - Hit the agent the way a user would (channel HTTP, playground, Slack in
66
+ `--dev` if that is the surface under test).
67
+
68
+ Custom channels live at `http://127.0.0.1:3000/<slug>/v1/channels/<id>`.
69
+ Playground: `http://127.0.0.1:3000/<slug>/playground`.
70
+
71
+ - Record for each fixture:
72
+ - HTTP/status and wall time
73
+ - `sessionId` + playground URL
74
+ - final result text / structured output
75
+ - tool trajectory from session `events.ndjson` (`actions.requested` /
76
+ `action.result`)
77
+ - workspace footprint (what the host seeded vs what the model opened)
78
+
79
+ Sessions typically live under:
80
+
81
+ `<project>/.agent-serve/<slug>/sessions/<sessionId>/`
82
+
83
+ ### 2. Reflect
84
+
85
+ Score the run on three axes; cite evidence from the trajectory, not vibes.
86
+
87
+ | Axis | Ask |
88
+ | --- | --- |
89
+ | **Correctness** | Right answer / findings? Misses? Hallucinated context? |
90
+ | **Efficiency** | Tool-call count, redundant reads/greps, fat evidence, latency |
91
+ | **Harness fit** | Did the model invent work the host should have done? Escape the intended workspace? Fight the instructions? |
92
+
93
+ Name the **single dominant failure mode** for this round (e.g. “full-file dumps
94
+ trigger grep loops”, “skill not on disk so model searches the monorepo”).
95
+
96
+ ### 3. Propose one change
97
+
98
+ Prefer the smallest lever that addresses that failure mode:
99
+
100
+ 1. **Host prep** — deterministic tools / channel handlers seed only what the
101
+ model needs (`workspaceFiles`, channel `callTool`, …)
102
+ 2. **Evidence shape** — trim, split, or order artifacts so the intended file
103
+ is primary
104
+ 3. **Instructions / skills** — tighten procedure, forbid escape hatches that
105
+ invite thrash
106
+ 4. **Tool surface** — remove or gate tools that enable wandering
107
+ 5. Framework changes only if the agent cannot express the fix otherwise
108
+
109
+ State the hypothesis in one sentence: *“If we X, metric Y should move because Z.”*
110
+
111
+ ### 4. Apply and remeasure
112
+
113
+ - Implement the change.
114
+ - Restart serve if needed (agent project code or package `src/`).
115
+ - Re-run the **same** fixtures.
116
+ - Diff metrics side-by-side (tools, bytes, time, quality notes).
117
+ - Keep the change only if the target metric improves without regressing the
118
+ freeze line; otherwise revert or narrow.
119
+ - **Ratchet every kept change**: land an eval that would have failed before
120
+ it (tool-choice gate, `action.result` count bound, output-shape regex —
121
+ see `evals/SKILL.md`), and never weaken an existing gate to make a round
122
+ pass. `agent-serve eval --dir <project> --json` is the regression check
123
+ between rounds.
124
+
125
+ Present a short round report to the user before starting the next climb.
126
+
127
+ ## Measurement tips
128
+
129
+ - Prefer `action.result` counts by `toolName` over raw event volume.
130
+ - Log paths the model actually read; escape outside the session workspace is a
131
+ harness smell.
132
+ - Separate **host** work (channel `callTool`, prepare steps) from **model**
133
+ tools when blaming latency. The biggest wins this framework has seen came
134
+ from moving deterministic work to the host (one PR reviewer's host-prepared
135
+ reviews cut ~8-minute tool-wandering turns to ~1 minute), not from prompt
136
+ tuning.
137
+ - For quality, spot-check against a known-good review or oracle on at least
138
+ one fixture; efficiency-only climbs will silently drop findings.
139
+ - `turn.failed` with `"turn interrupted"` in a trace means a follow-up or
140
+ stop preempted the turn — measurement artifact, not a regression.
141
+
142
+ ## Working agreements
143
+
144
+ - One failure mode per round — no mixed “also rewrite instructions while
145
+ trimming evidence” bundles unless the user asks.
146
+ - Keep fixtures fixed until a climb explicitly needs a harder case.
147
+ - Use mise/Node workflows already documented for this package; do not introduce
148
+ Bun.
149
+ - Do not deploy, post real GitHub reviews, or push unless the user asks.
150
+ - Commit only when asked.
151
+
152
+ ## Round report template
153
+
154
+ ```markdown
155
+ ### Hillclimb round N — <slug>
156
+ - Fixture(s): …
157
+ - Hypothesis: …
158
+ - Change: <files / one-liner>
159
+ - Before → after: tools …; wall …; evidence …; quality …
160
+ - Verdict: keep | revert | narrow
161
+ - Next failure mode (if any): …
162
+ ```
@@ -0,0 +1,180 @@
1
+ ---
2
+ name: agent-serve-setup-slack
3
+ description: >-
4
+ Set up a Slack channel for an agent-serve project — Socket Mode,
5
+ manifests, doctor, smoke test, and opt-in Slack tool approvals (HITL).
6
+ Read this skill when wiring Slack for an agent-serve project.
7
+ ---
8
+
9
+ # Setup Slack for agent-serve
10
+
11
+ Use this skill when a human asks to wire Slack to an agent-serve agent.
12
+
13
+ ## Goal
14
+
15
+ - Importable **dev** and **prod** Slack app manifests (Socket Mode on)
16
+ - App-level Token (`xapp-…`, `connections:write`) + Bot token (`xoxb-…`)
17
+ - No public Request URL (Socket Mode only)
18
+ - Thread ↔ session via `continuationToken = channelId:threadTs`
19
+ - One Slack app (token pair) **per agent** when serving multiple demos
20
+
21
+ ## Phases
22
+
23
+ Update `.agent-serve/slack/setup-status.json` as you complete phases.
24
+
25
+ ### Phase 0 — Generate (agent)
26
+
27
+ ```bash
28
+ pnpm exec tsx packages/agent-serve/src/bin/agent-serve.ts slack init \
29
+ --dir <agent> --name "My Agent"
30
+ ```
31
+
32
+ Creates:
33
+
34
+ - `agent/channels/slack.ts` with `envPrefix` from the directory name
35
+ - `.agent-serve/slack/manifest.{dev,prod}.json`
36
+ - `.agent-serve/slack/env.example` (`<PREFIX>_SLACK_BOT_TOKEN` / `_APP_TOKEN`)
37
+
38
+ Use `--no-prefix` for the shared `SLACK_BOT_TOKEN` / `SLACK_APP_TOKEN` globals
39
+ (single-agent only). Use `--prefix CUSTOM` to override the default prefix.
40
+
41
+ ### Phase 1 — Create apps (human)
42
+
43
+ 1. Open https://api.slack.com/apps → **Create New App** → **From a manifest**
44
+ 2. Paste `manifest.dev.json` → create the *dev* app
45
+ 3. Repeat with `manifest.prod.json` for prod
46
+
47
+ Stop and ask the human to complete this gate.
48
+
49
+ ### Phase 2 — Install + tokens (human)
50
+
51
+ For each app:
52
+
53
+ 1. **Install to Workspace** — copy Bot User OAuth Token (`xoxb-…`)
54
+ 2. **Basic Information → App-Level Tokens** — Create Token with scope `connections:write` → copy (`xapp-…`)
55
+
56
+ ### Phase 3 — Env (agent)
57
+
58
+ Write into `.env.local` (dev app), using the keys from `env.example`:
59
+
60
+ ```bash
61
+ MY_AGENT_SLACK_BOT_TOKEN=xoxb-…
62
+ MY_AGENT_SLACK_APP_TOKEN=xapp-…
63
+ ```
64
+
65
+ ```bash
66
+ agent-serve slack doctor --prefix MY_AGENT
67
+ ```
68
+
69
+ Stop when `app_token`, `connections_open`, `bot_token`, and `auth_test` are green.
70
+
71
+ ### Phase 4 — Serve + smoke (agent + human)
72
+
73
+ ```bash
74
+ agent-serve serve --dir . --dev
75
+ ```
76
+
77
+ Confirm log: `[agent-serve/slack] Socket Mode connected`.
78
+
79
+ When tokens are missing the channel logs
80
+ `channel idle reason=missing credentials need=…` and `serve` continues — useful
81
+ when mounting a folder of agents where only some have tokens.
82
+
83
+ Human:
84
+
85
+ 1. Invite the bot to a channel
86
+ 2. `@mention` it (or DM)
87
+ 3. Confirm Thinking… / Working… typing and a threaded reply
88
+ 4. Server logs should show correlated lines (`event_id`, `session`, `channel`, `thread_ts`):
89
+ - `inbound kind=app_mention …`
90
+ - `session start …`
91
+ - `reply delivered via postMessage|stream …`
92
+
93
+ ## Features (defaults ON)
94
+
95
+ - Chat streaming (`chat.startStream` / `appendStream` / `stopStream`) with postMessage fallback
96
+ - Thinking / task cards for tool calls
97
+ - `assistant.threads.setStatus` with rotating `loading_messages`
98
+ - Thread title + suggested prompts
99
+ - `markdown_text` when supported
100
+ - Handler `message` / `workspaceFiles` / `cloud` passthrough for PR demos
101
+
102
+ If a Slack API is unavailable (`method_not_found` / `missing_scope`), the pack falls back to postMessage + setStatus.
103
+
104
+ ## Engagement: mentions by default, channel watch opt-in
105
+
106
+ The pack dispatches only on `app_mention` + DMs unless told otherwise —
107
+ summoned, never proactive. To watch channels (dispatch on new posts without
108
+ a mention), opt in explicitly:
109
+
110
+ ```ts
111
+ export default slackChannel({
112
+ engagement: {
113
+ channelPosts: {
114
+ allow: ["#issues-glass"], // explicit allowlist; no wildcard exists
115
+ posts: "top-level", // default — thread replies never dispatch
116
+ debounceMs: 15_000, // optional: edits settle, deletes cancel
117
+ },
118
+ },
119
+ onChannelPost: async (ctx, message) => ({}), // null = skip
120
+ });
121
+ ```
122
+
123
+ Requirements: generate manifests with `slack init --channel-posts` (or add
124
+ `message.channels` / `message.groups` events + re-import), and invite the
125
+ bot to each watched channel. Posts mentioning the bot stay on the
126
+ `app_mention` path; watch sessions reuse the thread-scoped principal with an
127
+ `engagement: "channel_post"` attribute, so a later mention continues the
128
+ thread. `engagement.mentions` / `engagement.directMessages` can be set to
129
+ `false` to turn those surfaces off.
130
+
131
+ ## Tool approvals over Slack (opt-in HITL)
132
+
133
+ Tools with `needsApproval` park until a human approves or denies. To route
134
+ that through Slack, set `toolApprovals: true` on `slackChannel` — it posts
135
+ Block Kit Approve/Deny cards and routes Socket Mode `interactive` clicks
136
+ back to the parked call:
137
+
138
+ ```ts
139
+ export default slackChannel({
140
+ credentials: { /* … */ },
141
+ toolApprovals: true,
142
+ });
143
+ ```
144
+
145
+ Requirements and caveats:
146
+
147
+ - The Slack app manifest needs **interactivity** enabled
148
+ (`buildSlackManifest({ interactivity: true })`; `toolApprovals: true`
149
+ implies the Socket Mode routing, but the app must allow it). Re-import
150
+ the manifest after changing this.
151
+ - Composing by hand: spread `buildToolApprovalEvents({ credentials })` into
152
+ `events` **and** set `interactivity: true` on the channel.
153
+ - Cards show **redacted / truncated** args (Block Kit limits); execution
154
+ uses the full validated input. Review sensitive tools in the playground
155
+ when args may exceed the card.
156
+ - Approvals only exist for `execution: "server"` tools on the `local`
157
+ runtime, and parked calls do not survive a host restart.
158
+ - In `--dev` (loopback) or `--allow-anonymous` (trusted shared host), the
159
+ playground can also list Slack sessions and Approve/Deny
160
+ their parked tools (audit records the HTTP caller). Production and
161
+ bearer-auth hosts stay strict: Slack resolve must come from Slack
162
+ interactivity or a matching principal.
163
+
164
+ ## Notes
165
+
166
+ - Dev and prod are **separate Slack apps** (separate tokens).
167
+ - Socket Mode only — no Events HTTP / Request URL path.
168
+ - Do not `await waitForCompletion()` inside Slack dispatch handlers — the pack uses `waitUntil`.
169
+ - Do not share one token pair across multiple agents in the same process.
170
+
171
+ ## CLI reference
172
+
173
+ ```bash
174
+ agent-serve slack setup
175
+ agent-serve slack init --dir . --name "My Agent"
176
+ agent-serve slack init --dir . --no-prefix
177
+ agent-serve slack init --dir . --channel-posts # + message.channels/groups events
178
+ agent-serve slack manifest --env both
179
+ agent-serve slack doctor --prefix MY_AGENT
180
+ ```