@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,206 @@
1
+ ---
2
+ title: "Channels"
3
+ description: "The authoring reference for defineChannel, the built-in HTTP channel, route schemas, handler args, and the auth policies."
4
+ ---
5
+
6
+ # Channels
7
+
8
+ A channel is the surface an agent lives on. The built-in HTTP session
9
+ channel is always mounted. Custom channels declare their own routes
10
+ under `/v1/channels/<id>`. The Slack and GitHub packs are prebuilt
11
+ channels with platform transports. This page is the authoring reference;
12
+ for the walkthrough, see the [Webhooks guide](../guides/webhooks.md).
13
+
14
+ ## The built-in HTTP channel
15
+
16
+ It's always mounted, under `/<slug>` in the default multi-agent layout:
17
+ session create, follow-up, stream, stop, the sessions list, approvals,
18
+ deterministic tool calls, health, and info. For the route-by-route
19
+ contract, see the [HTTP API reference](./http-api.md).
20
+
21
+ Author `agent/channels/http.ts` only to override its defaults:
22
+
23
+ ```ts
24
+ import {
25
+ bearerAuth,
26
+ httpChannel,
27
+ localDevStrict,
28
+ } from "@cursor/july/channels";
29
+
30
+ export default httpChannel({
31
+ auth: [localDevStrict(), bearerAuth(process.env.AGENT_TOKEN ?? "")],
32
+ onMessage: (message, { auth }) =>
33
+ `[caller ${auth?.principalId ?? "anonymous"}] ${message}`,
34
+ });
35
+ ```
36
+
37
+ ## Define a custom channel
38
+
39
+ Author `agent/channels/<id>.ts`. The filename is the channel id and the
40
+ route prefix:
41
+
42
+ ```ts
43
+ import { defineChannel, POST } from "@cursor/july/channels";
44
+ import { z } from "zod";
45
+
46
+ export default defineChannel({
47
+ routes: [
48
+ POST("/review", {
49
+ description: "Review a pull request on this channel",
50
+ bodySchema: z.object({
51
+ message: z.string(),
52
+ prUrl: z.string().url(),
53
+ thread: z.string().optional(),
54
+ }),
55
+ handler: async (_req, { callTool, send, body }) => {
56
+ const prepared = await callTool("inspect_pr", {
57
+ prUrl: body.prUrl,
58
+ });
59
+ if (prepared.isError) {
60
+ return Response.json(
61
+ { error: prepared.errorMessage ?? "Could not inspect pull request" },
62
+ { status: 502 }
63
+ );
64
+ }
65
+
66
+ const session = await send(
67
+ `${body.message}\n\nRead pr.json before answering.`,
68
+ {
69
+ continuationToken: body.thread ?? `pr:${body.prUrl}`,
70
+ workspaceFiles: {
71
+ "pr.json": JSON.stringify(prepared.result, null, 2) ?? "null",
72
+ },
73
+ }
74
+ );
75
+ return Response.json({ sessionId: session.id });
76
+ },
77
+ }),
78
+ ],
79
+ events: {
80
+ "message.completed"(event, channel, ctx) {
81
+ // deliver the reply to the surface that owns this channel
82
+ },
83
+ },
84
+ // auth: [...], state: {...}, onStart(...), onStop(...)
85
+ });
86
+ ```
87
+
88
+ This example assumes `agent/tools/inspect_pr.ts` exists. The handler
89
+ calls it before the model turn, so every review starts with validated PR
90
+ data. It also derives a stable conversation key from the PR URL and
91
+ writes the tool result to `pr.json`. Instructions can ask the model to
92
+ inspect a PR, but host code guarantees it.
93
+
94
+ ## Route verbs and schemas
95
+
96
+ `GET`, `POST`, `PUT`, `PATCH`, and `DELETE` helpers build routes. Their
97
+ schemas are Zod, enforced at compile time:
98
+
99
+ | Verb | Required schema |
100
+ | ------------------------ | ------------------------------------- |
101
+ | `GET` | `querySchema` |
102
+ | `POST` / `PUT` / `PATCH` | `bodySchema` (optional `querySchema`) |
103
+ | `DELETE` | both optional |
104
+
105
+ Plain JSON Schema objects won't type-check; use `z.object({})` or
106
+ `z.unknown()` for intentionally open surfaces. The host validates before
107
+ the handler runs. Handlers receive typed `args.body` and `args.query`,
108
+ and empty POST bodies are coerced to `{}` first. Declared schemas are
109
+ projected on `GET /v1/info`, which powers the playground's **Try**
110
+ buttons and composer **slash commands**.
111
+
112
+ ## Handler arguments
113
+
114
+ Handlers receive the Fetch `Request` and an args object:
115
+
116
+ | Member | What it is |
117
+ | ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
118
+ | `send(message, options?)` | Run a model turn on this channel; returns the session handle. Options: `continuationToken` (the conversation key), `workspaceFiles`, `workspaceDir`, `cloud` (attach cloud repos for this session), `auth` (defaults to the request principal), `sdkAgentId` (resume a specific SDK agent). |
119
+ | `getSession(sessionId)` | Look up an existing session on this channel |
120
+ | `receive(channelDefinition, input)` | Hand off to another channel (schedules use this) |
121
+ | `callTool(name, input, options?)` | Deterministic server-tool call ([Tools](./tools.md#call-a-tool-without-a-model-turn)) |
122
+ | `body`, `query`, `params` | Validated payloads and `:param` path segments |
123
+ | `auth` | The `AuthContext` resolved by this route's auth chain |
124
+ | `requestIp` | The TCP peer address |
125
+ | `host` | Shared services: `host.mcp`, `host.github`, `host.slack`, `host.reminders` |
126
+ | `waitUntil(promise)` | Background work that outlives the response |
127
+ | `sessionUrls(request, sessionId)` | Absolute playground + trace URLs for a session on this mount |
128
+
129
+ ## Events
130
+
131
+ The `events` map subscribes the channel to stream events for the
132
+ sessions it owns. Keys are event types from the
133
+ [event vocabulary](./sessions.md#the-event-vocabulary), or `"*"`.
134
+ Handlers receive `(event, channel, ctx)`, where `channel.state` is the
135
+ per-session adapter state and `ctx` exposes session info and host
136
+ services. This is where a channel delivers replies back to its surface.
137
+
138
+ ## State and lifecycle
139
+
140
+ `state` declares the starting per-session adapter state (JSON), persisted
141
+ on the session record. Routes and event handlers read and mutate it
142
+ through `channel.state`. `onStart(args)` runs when the channel mounts. It
143
+ receives `send`, `receive`, `callTool`, `host`, and friends; the Slack
144
+ pack opens its Socket Mode connection here. `onStop()` runs when the
145
+ server drains.
146
+
147
+ ## Auth policies
148
+
149
+ Every route runs an auth-policy chain: the channel's `auth` array, or
150
+ `[localDevStrict()]` when unset. A policy is a function
151
+ `(request, info) => AuthContext | null` (async allowed); the first
152
+ non-null wins, and a request no policy admits gets `401`.
153
+
154
+ | Policy | Admits |
155
+ | ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
156
+ | `localDevStrict()` | Direct loopback callers with no proxy-forwarding headers (`X-Forwarded-For`, `X-Real-IP`, `Forwarded`, and `X-Forwarded-Host` are all rejected, so tunnels and same-host reverse proxies don't silently re-expose the route), plus a loopback `Host` header, which rejects DNS-rebinding callers that reach 127.0.0.1 with a remote hostname. |
157
+ | `localDev()` | Like `localDevStrict()` but without the `Host` check. An explicit, weaker opt-in. |
158
+ | `loopbackOnly()` | A loopback TCP peer, ignoring forwarding headers; for dev relays that legitimately carry them, like `gh webhook forward`. |
159
+ | `bearerAuth(token)` | `Authorization: Bearer <token>`, compared in constant time. Also accepts a verifier function mapping a presented token to an `AuthContext`. |
160
+ | `allowAll()` | Everyone, as an `anonymous` principal. Only for surfaces protected upstream (an HMAC-verified webhook) or intentionally public. |
161
+
162
+ The resolved `AuthContext` (`{ authenticator, principalId,
163
+ principalType, attributes? }`) becomes the request principal. Sessions
164
+ bind to the principal that created them, and follow-up, stream, and list
165
+ routes enforce ownership (`403` otherwise).
166
+
167
+ Server flags interact with authored auth: `--bearer-token` swaps the
168
+ default `localDevStrict()` for `bearerAuth(...)` on channels that don't
169
+ author their own chain, and `--allow-anonymous` swaps it for
170
+ `allowAll()`. Authored `auth` arrays always win over both. A channel that
171
+ declares `[localDevStrict()]` stays loopback-only even on an
172
+ `--allow-anonymous` host.
173
+
174
+ ## First class channels
175
+
176
+ **Slack** (`@cursor/july/channels/slack`): Socket Mode
177
+ transport, streaming replies, engagement rules, approval cards. Author
178
+ `agent/channels/slack.ts` with `slackChannel()`. Guide:
179
+ [Slack](../guides/slack.md).
180
+
181
+ **GitHub** (`@cursor/july/channels/github`): webhook dispatch
182
+ with signature verification, per-event hooks returning `{ auth }` (a
183
+ model turn), `{ task }` (host work), or `null`, and CLI tooling for
184
+ replay and live forwarding. Author `agent/channels/github.ts` with
185
+ `githubChannel()`. Guide: [GitHub](../guides/github.md).
186
+
187
+ For other platforms like Discord or Teams, use the authored
188
+ `defineChannel` webhook form.
189
+
190
+ ## Continuation semantics
191
+
192
+ Channels own their continuation-token format. The built-in HTTP channel
193
+ mints opaque rotating tokens, Slack uses `channelId:threadTs`, and PR
194
+ automations use keys like `pr:owner/repo#N`. Same token, same durable
195
+ session; one active continuation per session; the HTTP channel returns
196
+ `409` for stale tokens. For the full session model, see
197
+ [Sessions](./sessions.md).
198
+
199
+ ## What's next
200
+
201
+ Continue with these pages:
202
+
203
+ - [Webhooks guide](../guides/webhooks.md): the same API, walked through
204
+ - [HTTP API](./http-api.md): the built-in routes precisely
205
+ - [Sessions and streaming](./sessions.md): the events channels
206
+ subscribe to
@@ -0,0 +1,257 @@
1
+ ---
2
+ title: "CLI"
3
+ description: "Every agentkit command and the flags that matter, from serve and run to the slack and github packs."
4
+ ---
5
+
6
+ # CLI reference
7
+
8
+ Run the CLI with Node 22.13+. `agentkit help` prints the
9
+ built-in summary, and most commands print their own usage when a
10
+ required argument is missing.
11
+
12
+ | Command | Description |
13
+ | ------------------------------------------------------- | ----------------------------------------------------- |
14
+ | [`serve`](#serve) | Serve agents over HTTP (multi-agent by default) |
15
+ | [`chat`](#chat) | Talk to a running server from the terminal |
16
+ | [`run`](#run) | One-shot turn on an ephemeral server; JSON trajectory |
17
+ | [`call`](#call) | Call a server tool directly, no model turn |
18
+ | [`eval`](#eval) | Run filesystem evals |
19
+ | [`trajectory`](#trajectory) | Summarize a saved events.ndjson |
20
+ | [`init`](#init) | Scaffold a project (or print the setup guide) |
21
+ | [`info`](#info) | Print the discovered agent surface |
22
+ | [`validate`](#validate) | Check the project; non-zero exit on errors |
23
+ | [`login` / `logout` / `whoami`](#login--logout--whoami) | Manage the host's Cursor credential |
24
+ | [`slack …`](#slack) | Slack pack: init, manifests, doctor |
25
+ | [`github …`](#github) | GitHub pack: forward, replay, events, doctor |
26
+
27
+ The flags shared across commands: `--dir <path>` (project root, default
28
+ `.`), `--json` (machine output where supported), `--url <baseUrl>`
29
+ (target a running server instead of starting one), `--bearer-token`
30
+ (require it on `serve`; send it from `chat`, `run`, `eval`, and `call`),
31
+ and `--state-root <path>` (durable state directory, default
32
+ `<dir>/.agentkit`).
33
+
34
+ ## serve
35
+
36
+ `serve` hosts every agent under a directory, multi-agent by default.
37
+
38
+ ```bash
39
+ agentkit serve [--dir <path>] [--port 3000] [--host 127.0.0.1] [--dev]
40
+ [--mode multi|single] [--api-key <key>]
41
+ [--state-root <path>] [--bearer-token <secret> | --allow-anonymous]
42
+ [--public-url <url>] [--no-schedules] [--no-playground]
43
+ [--no-docs] [--cursor-events --repo owner/name]
44
+ ```
45
+
46
+ Serves every agent under `--dir`. A directory that is itself an agent
47
+ project mounts under its directory name; a directory of projects mounts
48
+ each child. The index lives at `/`, each agent at `/<slug>/v1/*` and
49
+ `/<slug>/playground`. On a TTY, press Enter to restart; it reloads
50
+ agent code.
51
+
52
+ | Flag | Meaning |
53
+ | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
54
+ | `--dev` | Dev mode. Schedules and reminders never auto-fire (dispatch through `/v1/dev/...`), the playground session list widens (loopback), GitHub channels accept unsigned loopback deliveries, and Vite HMR starts when the toolchain is present. |
55
+ | `--mode` | `multi` (default: slugged routes plus an index) or `single` (one agent at the unslugged `/v1/*`). |
56
+ | `--api-key` | Cursor API key. Falls back to `CURSOR_API_KEY`, then the stored `login` credential. |
57
+ | `--bearer-token` | Require this bearer token on API routes; replaces the loopback-only default on channels without authored auth. Mutually exclusive with `--allow-anonymous`. |
58
+ | `--allow-anonymous` | Admit every HTTP caller as one `anonymous` principal. Trusted networks only. |
59
+ | `--public-url` | The base URL where this host is reachable from outside. Required for peer MCP connections on cloud-runtime turns. |
60
+ | `--no-schedules` | Disable the cron runner outside dev mode. |
61
+ | `--no-playground` | Skip the web playground (and its auto-build / HMR). |
62
+ | `--no-docs` | Skip the documentation site at `/docs` (and its auto-build). |
63
+ | `--cursor-events` | Pull SCM webhook events from Cursor's `/v0/scm-events` instead of receiving webhooks. Requires a signed-in host and `--repo` (repeatable). Offset state lives under `<state-root>/cursor-events/`. |
64
+
65
+ ## chat
66
+
67
+ `chat` talks to a running server from the terminal.
68
+
69
+ ```bash
70
+ agentkit chat --url http://127.0.0.1:3000/<slug> # interactive REPL
71
+ agentkit chat --url … --message "Is the PR ready to approve?" # one-shot
72
+ agentkit chat --url … --message "hello" --json # JSON trajectory
73
+ agentkit chat --url https://host --bearer-token "$TOKEN" # authed server
74
+ ```
75
+
76
+ Streams the reply live: text, tool calls, and a per-turn usage footer.
77
+ `--json` requires `--message` and prints
78
+ `{ ok, sessionId, continuationToken, trajectory }`. `--text` prints a
79
+ compact dump, and `--no-color` forces plain output.
80
+
81
+ ## run
82
+
83
+ `run` executes one turn on an ephemeral server and prints a JSON trajectory.
84
+
85
+ ```bash
86
+ agentkit run --dir . --message "Is https://github.com/acme/checkout/pull/42 ready?"
87
+ agentkit run --dir . --message "first" --message "then this" # multi-turn
88
+ agentkit run --url http://127.0.0.1:3000/<slug> --message "…" # running server
89
+ agentkit run --dir . --message "…" --events /tmp/run.ndjson # custom trace path
90
+ ```
91
+
92
+ The create-and-test loop in one command: start an ephemeral server
93
+ (port 0, temp state root outside the project), send the message(s), print a
94
+ JSON trajectory, and write an NDJSON trace (default
95
+ `<dir>/.agentkit/traces/<sessionId>.ndjson`). Progress streams to
96
+ stderr on a TTY.
97
+
98
+ | Flag | Meaning |
99
+ | ------------------------------------ | --------------------------------------------------------------------------------------------- |
100
+ | `--message` | The user message; repeatable for multi-turn. `--messages-file` takes a JSON array of strings. |
101
+ | `--session` / `--continuation-token` | Follow up an existing session on a running server. |
102
+ | `--events <file>` / `--no-events` | Override the trace path, or skip the trace. |
103
+ | `--text` | Compact text output instead of JSON. |
104
+ | `--timeout-ms` | Abort a hung turn. |
105
+ | `--no-stream` | Silence live progress on stderr. |
106
+ | `--slug` | Pick one agent when `--dir` mounts several. |
107
+
108
+ ## call
109
+
110
+ `call` invokes a server tool directly, with no model turn.
111
+
112
+ ```bash
113
+ agentkit call inspect_pr --dir . \
114
+ --input '{"prUrl":"https://github.com/acme/checkout/pull/42"}'
115
+ agentkit call inspect_pr --url http://127.0.0.1:3000/<slug> --input '{…}'
116
+ agentkit call inspect_pr --dir . --input '{…}' --session ses_…
117
+ ```
118
+
119
+ Deterministic server-tool invocation through `POST /v1/tools/:toolName`:
120
+ schema-validated, in-process, no model turn, no API key. `--session`
121
+ runs it inside an existing session and records it on that session's
122
+ stream (serializing with model turns). See
123
+ [Tools](./tools.md#call-a-tool-without-a-model-turn).
124
+
125
+ ## eval
126
+
127
+ `eval` runs the project's filesystem evals.
128
+
129
+ ```bash
130
+ agentkit eval --dir . --list # discovered datapoints
131
+ agentkit eval --dir . # run all
132
+ agentkit eval --dir . builds/checkout # one datapoint
133
+ agentkit eval --dir . builds # every datapoint in the file
134
+ agentkit eval --dir . --tag smoke # by tag (repeatable)
135
+ agentkit eval --dir . --json # machine-readable results
136
+ agentkit eval --dir . --verbose # stream t.log lines + reply snippets
137
+ ```
138
+
139
+ Runs `evals/**/*.eval.{ts,js}` on an ephemeral server, or against `--url`.
140
+ Select by exact case id, file id (a prefix), several of either, tags, or
141
+ nothing for all. See [Evals](../evals.md).
142
+
143
+ ## trajectory
144
+
145
+ `trajectory` summarizes a saved event stream.
146
+
147
+ ```bash
148
+ agentkit trajectory --events /tmp/run.ndjson [--text]
149
+ ```
150
+
151
+ Turns any saved NDJSON event stream into the same trajectory JSON `run`
152
+ prints.
153
+
154
+ ## init
155
+
156
+ `init` scaffolds a new project.
157
+
158
+ ```bash
159
+ agentkit init ./my-agent # scaffold package.json + agent/ + a demo tool
160
+ agentkit init # no directory: print the setup guide
161
+ ```
162
+
163
+ Refuses to overwrite existing files.
164
+
165
+ ## info
166
+
167
+ `info` prints the discovered agent surface.
168
+
169
+ ```bash
170
+ agentkit info --dir . [--json]
171
+ ```
172
+
173
+ The discovered surface: model, instructions size, tools, skills, MCP
174
+ connections, subagents, channels and their routes, schedules, hooks, and
175
+ diagnostics. `--json` matches `GET /v1/info`; with multiple agents it
176
+ prints one entry per slug.
177
+
178
+ ## validate
179
+
180
+ `validate` checks the project and sets the exit code.
181
+
182
+ ```bash
183
+ agentkit validate --dir .
184
+ ```
185
+
186
+ Prints diagnostics per agent and exits non-zero when any has
187
+ error-severity diagnostics (`serve` refuses to start in that state).
188
+ Warnings (cloud runtime combined with local-only capabilities, say) print
189
+ without failing it.
190
+
191
+ ## login / logout / whoami
192
+
193
+ Three commands manage the host's Cursor credential.
194
+
195
+ ```bash
196
+ agentkit login [--api-key <key>] [--key-name <name>]
197
+ agentkit whoami [--json]
198
+ agentkit logout
199
+ ```
200
+
201
+ `login` signs the host in to Cursor: browser sign-in mints a named,
202
+ dashboard-revocable API key, and only the key is stored (the default
203
+ name is `agentkit (<hostname>)`). It powers inference, the cloud
204
+ runtime, and Cursor account MCP connections. `whoami` shows which credential
205
+ is active and why: explicit flag, then `CURSOR_API_KEY`, then the
206
+ stored login. `logout` removes the stored key.
207
+
208
+ Non-production backends: login and account RPCs honor
209
+ `CURSOR_API_BASE_URL` while the SDK harness honors `CURSOR_BACKEND_URL`.
210
+ Set both to the same URL, or keys minted on one backend are rejected by
211
+ the other.
212
+
213
+ ## slack
214
+
215
+ The `slack` subcommands generate and verify the Slack side of a channel.
216
+
217
+ ```bash
218
+ agentkit slack setup # guided checklist
219
+ agentkit slack init --dir . --name "My Agent" # channel + manifests + env.example
220
+ agentkit slack init --dir . --no-prefix # shared SLACK_* vars
221
+ agentkit slack init --dir . --channel-posts # + message.channels/groups events
222
+ agentkit slack manifest --env dev|prod|both # regenerate manifests
223
+ agentkit slack doctor --prefix MY_AGENT # token / connectivity checks
224
+ ```
225
+
226
+ See the [Slack guide](../guides/slack.md).
227
+
228
+ ## github
229
+
230
+ The `github` subcommands test webhook channels against real repositories.
231
+
232
+ ```bash
233
+ agentkit github doctor [--install] # gh + cli/gh-webhook extension
234
+ agentkit github events --dir . [--json] # per-agent URL + event list
235
+ agentkit github forward --dir . [--repo owner/repo | --org ORG]
236
+ agentkit github replay <pr-url|owner/repo#N> --dir .
237
+ [--events a,b,c|'*'] [--action …] [--conclusion …] [--comment …]
238
+ [--context …] [--secret …] [--dry-run] [--out DIR]
239
+ ```
240
+
241
+ `forward` wraps `gh webhook forward`: repo admin required, and blank
242
+ any env `GITHUB_TOKEN` / `GH_TOKEN` or deliveries 401. `replay`
243
+ synthesizes GitHub-shaped payloads from read access only, the
244
+ deterministic tier. `--slug` and `--channel` target one agent among
245
+ several. See the [GitHub guide](../guides/github.md).
246
+
247
+ ## Environment variables
248
+
249
+ These are the most common environment variables the CLI and the
250
+ channel packs read.
251
+
252
+ | Variable | Meaning |
253
+ | ------------------------------------------------------------------------- | ---------------------------------------------------------------------------- |
254
+ | `CURSOR_API_KEY` | The Cursor credential, checked after `--api-key` and before the stored login |
255
+ | `GITHUB_APP_ID` / `GITHUB_APP_PRIVATE_KEY` / `GITHUB_APP_INSTALLATION_ID` | GitHub App auth for outbound API calls |
256
+ | `GITHUB_TOKEN` / `GH_TOKEN` | Token auth for outbound API calls; must be blank for `github forward` |
257
+ | `SLACK_BOT_TOKEN` / `SLACK_APP_TOKEN` | Slack tokens (single-agent); `<PREFIX>_SLACK_*` per agent otherwise |
@@ -0,0 +1,137 @@
1
+ ---
2
+ title: "MCP Connections"
3
+ description: "Pull in tools from MCP servers: remote, stdio, the signed-in Cursor account's connectors, and peer agents."
4
+ ---
5
+
6
+ # MCP Connections
7
+
8
+ An MCP connection gives the agent tools from an MCP server. One file per
9
+ server under `agent/mcp-connections/`, and the filename becomes the server
10
+ name the model sees. An MCP connection default-exports `defineConnection`
11
+ from `@cursor/july/connections`, and the transport comes in
12
+ four shapes: remote HTTP, local stdio, the signed-in Cursor account's
13
+ connectors, and peer agents on the same host.
14
+
15
+ ## Remote MCP server
16
+
17
+ Point an MCP connection at a remote server with a URL.
18
+
19
+ ```ts
20
+ import { defineConnection } from "@cursor/july/connections";
21
+
22
+ export default defineConnection({
23
+ url: "https://mcp.linear.app/mcp",
24
+ headers: { authorization: `Bearer ${process.env.LINEAR_TOKEN}` },
25
+ });
26
+ ```
27
+
28
+ Tokens come from env vars. Never hardcode them in the file.
29
+
30
+ ## Local stdio MCP server
31
+
32
+ Run a local MCP server as a child process with `command`.
33
+
34
+ ```ts
35
+ export default defineConnection({
36
+ command: "node",
37
+ args: ["--import", "tsx", "mcp/units-server.ts"],
38
+ // env, cwd
39
+ });
40
+ ```
41
+
42
+ This suits small purpose-built servers, like a `units` converter
43
+ shipped next to the agent.
44
+
45
+ ## Cursor account MCP connection
46
+
47
+ `{ cursorAccount: true }` exposes the MCP connectors the signed-in
48
+ Cursor account already authorized (dashboard → MCP): Linear, Notion,
49
+ Slack, and the rest, without any token configuration. Every tool executes on
50
+ the Cursor backend with the account's stored OAuth credentials, so raw
51
+ tokens never reach the serve host, session workspaces, or traces.
52
+
53
+ ```ts
54
+ // agent/mcp-connections/cursor.ts
55
+ export default defineConnection({ cursorAccount: true, servers: ["Linear"] });
56
+ ```
57
+
58
+ The host must be signed in (`agentkit login` or `CURSOR_API_KEY`);
59
+ `serve` fails fast at startup otherwise, and logs each connector's live
60
+ status (`connected`, `needsAuth`, `error`) as it starts. The optional
61
+ `servers` list restricts which connectors are exposed.
62
+
63
+ Local turns and host-side calls go through a loopback bridge guarded by
64
+ a per-startup secret. Cloud-runtime turns reach the same bridge through
65
+ the serve `--public-url`, so `servers` filters apply there too. A
66
+ cloud-capable agent that combines a `servers` filter with no
67
+ `--public-url` fails at startup rather than running unfiltered. Backend
68
+ execution covers the
69
+ account's HTTP/SSE servers. Stdio servers can't run server-side, so
70
+ author a `{ command }` MCP connection for those.
71
+
72
+ > [!CAUTION]
73
+ > Whoever can talk to the agent can drive these connectors, because they
74
+ > are ordinary agent tools. `serve` refuses to start when
75
+ > `--allow-anonymous` is combined with account MCP connections. Prefer
76
+ > `--bearer-token` on shared hosts.
77
+
78
+ ## Peer MCP connection
79
+
80
+ `{ agent: "<slug>" }` addresses another agent mounted on the same serve
81
+ host. The model gets the peer's `ask` and `check` (and `call_tool`)
82
+ tools and can delegate work to it:
83
+
84
+ ```ts
85
+ export default defineConnection({
86
+ agent: "weather-agent",
87
+ description: "Delegate weather questions to the weather agent.",
88
+ });
89
+ ```
90
+
91
+ Unknown slugs and self-references fail `serve` at startup. Resolution
92
+ (loopback versus `--public-url`), loop caveats, and the delegation model
93
+ are in the [Agent-to-agent guide](../guides/agent-to-agent.md).
94
+
95
+ ## Every MCP connection is available in three places
96
+
97
+ One authored MCP connection serves three consumers.
98
+
99
+ 1. **Cursor agent:** Local or cloud turns see the MCP connection
100
+ through SDK `mcpServers`, and the model calls its tools directly.
101
+ 2. **Server tools:** Deterministic host code composes MCP calls
102
+ through `ctx.host.mcp`:
103
+
104
+ ```ts
105
+ export default defineTool({
106
+ description: "Search Linear issues.",
107
+ inputSchema: z.object({ query: z.string() }),
108
+ async execute({ query }, ctx) {
109
+ return ctx.host.mcp.callTool("linear", "list_issues", { query });
110
+ },
111
+ });
112
+ ```
113
+
114
+ 3. **Channel and schedule handlers:** Webhooks hit MCP servers with no
115
+ model turn at all, through `args.host.mcp`:
116
+
117
+ ```ts
118
+ POST("/sync", {
119
+ bodySchema: z.object({}),
120
+ handler: async (_req, { host }) => {
121
+ const result = await host.mcp.callTool("linear", "list_issues", {});
122
+ return Response.json(result);
123
+ },
124
+ });
125
+ ```
126
+
127
+ The host registry is small: `host.mcp.names()` lists MCP connection names,
128
+ and `listTools(name)` / `callTool(name, tool, args)` open the client
129
+ lazily on first use.
130
+
131
+ ## What's next
132
+
133
+ Continue with these pages:
134
+
135
+ - [Agent-to-agent](../guides/agent-to-agent.md): peers in depth
136
+ - [Tools](./tools.md): authored tools that wrap MCP connections
137
+ - [Webhooks](../guides/webhooks.md): calling MCP connections from handlers