@cursor/july 0.1.92 → 0.1.93

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 (324) hide show
  1. package/README.md +117 -162
  2. package/dist/channels/deployments/deployments-channel.d.ts +7 -0
  3. package/dist/channels/deployments/deployments-channel.d.ts.map +1 -1
  4. package/dist/channels/deployments/deployments-channel.js +26 -2
  5. package/dist/channels/deployments/types.d.ts +8 -0
  6. package/dist/channels/deployments/types.d.ts.map +1 -1
  7. package/dist/channels/github/github-channel.d.ts +3 -0
  8. package/dist/channels/github/github-channel.d.ts.map +1 -1
  9. package/dist/channels/github/github-channel.js +28 -56
  10. package/dist/continuation.d.ts +1 -1
  11. package/dist/continuation.js +1 -1
  12. package/dist/docs/404.html +2 -2
  13. package/dist/docs/ab.html +8 -8
  14. package/dist/docs/ab.md +7 -13
  15. package/dist/docs/assets/{ab.md.CVzWxLoB.js → ab.md.DJo5r4R-.js} +4 -4
  16. package/dist/docs/assets/{ab.md.CVzWxLoB.lean.js → ab.md.DJo5r4R-.lean.js} +1 -1
  17. package/dist/docs/assets/{app.Bci6CM9E.js → app.CjWU-x0z.js} +1 -1
  18. package/dist/docs/assets/building-with-agents.md.DI4mEzlt.js +13 -0
  19. package/dist/docs/assets/{building-with-agents.md.DH8A_cHA.lean.js → building-with-agents.md.DI4mEzlt.lean.js} +1 -1
  20. package/dist/docs/assets/chunks/@localSearchIndexroot.ChpIC3Zy.js +1 -0
  21. package/dist/docs/assets/chunks/{VPLocalSearchBox.BCPT6xA-.js → VPLocalSearchBox.Cxy8ySFQ.js} +1 -1
  22. package/dist/docs/assets/chunks/{theme.BEA8BF3c.js → theme.Dvq1Bktu.js} +2 -2
  23. package/dist/docs/assets/concepts.md.F6AiPorA.js +1 -0
  24. package/dist/docs/assets/{concepts.md.CRfU3bVg.lean.js → concepts.md.F6AiPorA.lean.js} +1 -1
  25. package/dist/docs/assets/{deployment.md.DX_hc3ze.js → deployment.md.DoLFAzfm.js} +6 -6
  26. package/dist/docs/assets/{evals.md.a0SMN6r9.js → evals.md.lfJoEVc8.js} +6 -6
  27. package/dist/docs/assets/{evals.md.a0SMN6r9.lean.js → evals.md.lfJoEVc8.lean.js} +1 -1
  28. package/dist/docs/assets/{example-agents_approval-buddy.md.DNL83puR.js → example-agents_approval-buddy.md.DmezILPg.js} +1 -1
  29. package/dist/docs/assets/{example-agents_benny.md.C40vHRLc.js → example-agents_benny.md.B0kwY7D_.js} +2 -4
  30. package/dist/docs/assets/{example-agents_benny.md.C40vHRLc.lean.js → example-agents_benny.md.B0kwY7D_.lean.js} +1 -1
  31. package/dist/docs/assets/{example-agents_codebase-wiki.md.Dftj_tPp.js → example-agents_codebase-wiki.md.BBNw9Ekr.js} +3 -3
  32. package/dist/docs/assets/{example-agents_codebase-wiki.md.Dftj_tPp.lean.js → example-agents_codebase-wiki.md.BBNw9Ekr.lean.js} +1 -1
  33. package/dist/docs/assets/{example-agents_concierge.md.MrKpQndp.js → example-agents_concierge.md.BzB2b20R.js} +2 -3
  34. package/dist/docs/assets/example-agents_index.md.ChBp0AX6.js +2 -0
  35. package/dist/docs/assets/example-agents_index.md.ChBp0AX6.lean.js +1 -0
  36. package/dist/docs/assets/{example-agents_knowledge-base.md.DqKqHQ9u.js → example-agents_knowledge-base.md.CrA85ig-.js} +1 -1
  37. package/dist/docs/assets/{example-agents_security-reviewer.md.Bai6D0Ee.js → example-agents_security-reviewer.md.74pPpWYj.js} +1 -1
  38. package/dist/docs/assets/{example-agents_weather-agent.md.lVEAbWFf.js → example-agents_weather-agent.md.CaGpmw3Y.js} +2 -2
  39. package/dist/docs/assets/{guides_agent-to-agent.md.BCeVdJRJ.js → guides_agent-to-agent.md.B3JIaAqz.js} +1 -1
  40. package/dist/docs/assets/{guides_cloud-runtime.md.BSMLIBHr.js → guides_cloud-runtime.md.BnvjPiia.js} +2 -2
  41. package/dist/docs/assets/{guides_cloud-runtime.md.BSMLIBHr.lean.js → guides_cloud-runtime.md.BnvjPiia.lean.js} +1 -1
  42. package/dist/docs/assets/{guides_convert-automation.md.D06eIzea.js → guides_convert-automation.md.Bboisykk.js} +1 -1
  43. package/dist/docs/assets/{guides_github.md.Cdt1s2QC.js → guides_github.md.DqJhuaN1.js} +5 -5
  44. package/dist/docs/assets/{guides_github.md.Cdt1s2QC.lean.js → guides_github.md.DqJhuaN1.lean.js} +1 -1
  45. package/dist/docs/assets/{guides_mcp-oauth.md.Du0f7pGU.js → guides_mcp-oauth.md.CJvrXtkN.js} +2 -2
  46. package/dist/docs/assets/{guides_slack.md.DiUmk_Oi.js → guides_slack.md.mqeNKs84.js} +2 -2
  47. package/dist/docs/assets/{guides_webhooks.md.BpnIdO0i.js → guides_webhooks.md.DKdA43Qm.js} +2 -2
  48. package/dist/docs/assets/{hillclimbing.md.ywF3yDAd.js → hillclimbing.md.DhESf3OO.js} +1 -1
  49. package/dist/docs/assets/{index.md.BAaMXLFd.js → index.md.B-lVR4wT.js} +3 -3
  50. package/dist/docs/assets/{index.md.BAaMXLFd.lean.js → index.md.B-lVR4wT.lean.js} +1 -1
  51. package/dist/docs/assets/{quickstart.md.DsrarzEg.js → quickstart.md.BrmfrrIr.js} +1 -1
  52. package/dist/docs/assets/{reference_agent-config.md.Bqylgw50.js → reference_agent-config.md.Cp_x38Nl.js} +3 -3
  53. package/dist/docs/assets/{reference_channels.md.DQZjCnyh.js → reference_channels.md.Cd2f2iyV.js} +2 -2
  54. package/dist/docs/assets/{reference_channels.md.DQZjCnyh.lean.js → reference_channels.md.Cd2f2iyV.lean.js} +1 -1
  55. package/dist/docs/assets/{reference_cli.md.B7GkAJRC.js → reference_cli.md.D9KESDsD.js} +10 -11
  56. package/dist/docs/assets/{reference_cli.md.B7GkAJRC.lean.js → reference_cli.md.D9KESDsD.lean.js} +1 -1
  57. package/dist/docs/assets/{reference_connections.md.DYidrb-j.js → reference_connections.md.DB6SsN6U.js} +3 -3
  58. package/dist/docs/assets/reference_hooks.md.BxN87gCw.js +14 -0
  59. package/dist/docs/assets/{reference_hooks.md.B9FSgdDe.lean.js → reference_hooks.md.BxN87gCw.lean.js} +1 -1
  60. package/dist/docs/assets/reference_http-api.md.C68BERYr.js +11 -0
  61. package/dist/docs/assets/reference_http-api.md.C68BERYr.lean.js +1 -0
  62. package/dist/docs/assets/{reference_instructions.md.DhNCOl7r.js → reference_instructions.md.CR7XSsGk.js} +3 -3
  63. package/dist/docs/assets/{reference_instructions.md.DhNCOl7r.lean.js → reference_instructions.md.CR7XSsGk.lean.js} +1 -1
  64. package/dist/docs/assets/reference_playground.md.DnX5nL-B.js +1 -0
  65. package/dist/docs/assets/reference_playground.md.DnX5nL-B.lean.js +1 -0
  66. package/dist/docs/assets/{reference_project-layout.md.CwkSbEWT.js → reference_project-layout.md.WN9nwJht.js} +2 -2
  67. package/dist/docs/assets/{reference_prompt.md.DZUMtLPD.js → reference_prompt.md.DnaD5dNK.js} +1 -1
  68. package/dist/docs/assets/{reference_schedules.md.DNipebiG.js → reference_schedules.md.DI_JrHgq.js} +1 -1
  69. package/dist/docs/assets/reference_sessions.md.D0mIh4KK.js +1 -0
  70. package/dist/docs/assets/{reference_sessions.md.tUFzz98S.lean.js → reference_sessions.md.D0mIh4KK.lean.js} +1 -1
  71. package/dist/docs/assets/{reference_skills.md.B5ZEuHfG.js → reference_skills.md.BFW9retM.js} +1 -1
  72. package/dist/docs/assets/{reference_tools.md.wpaJtHn6.js → reference_tools.md.DuKvkYWG.js} +4 -4
  73. package/dist/docs/assets/{reference_tools.md.wpaJtHn6.lean.js → reference_tools.md.DuKvkYWG.lean.js} +1 -1
  74. package/dist/docs/assets/scaffolding-agents.md.D7UUkWw0.js +1 -0
  75. package/dist/docs/assets/{scaffolding-agents.md.CRDDUtYJ.lean.js → scaffolding-agents.md.D7UUkWw0.lean.js} +1 -1
  76. package/dist/docs/assets/{storage.md.JbjlHWZ6.js → storage.md.BOHeqk2M.js} +5 -5
  77. package/dist/docs/assets/{storage.md.JbjlHWZ6.lean.js → storage.md.BOHeqk2M.lean.js} +1 -1
  78. package/dist/docs/assets/{templates_agentic-owners.md.DSJSIpWU.js → templates_agentic-owners.md.DqtPdm6f.js} +2 -2
  79. package/dist/docs/assets/{templates_pr-autofixer.md.1HAR3RXE.js → templates_pr-autofixer.md.R4K_qytS.js} +2 -2
  80. package/dist/docs/assets/{templates_pr-autofixer.md.1HAR3RXE.lean.js → templates_pr-autofixer.md.R4K_qytS.lean.js} +1 -1
  81. package/dist/docs/assets/troubleshooting.md.vCWwvqcJ.js +1 -0
  82. package/dist/docs/assets/{troubleshooting.md.DYECCZiJ.lean.js → troubleshooting.md.vCWwvqcJ.lean.js} +1 -1
  83. package/dist/docs/building-with-agents.html +7 -7
  84. package/dist/docs/building-with-agents.md +5 -11
  85. package/dist/docs/concepts.html +5 -8
  86. package/dist/docs/concepts.md +12 -17
  87. package/dist/docs/deployment.html +11 -11
  88. package/dist/docs/deployment.md +8 -10
  89. package/dist/docs/evals.html +10 -10
  90. package/dist/docs/evals.md +16 -37
  91. package/dist/docs/example-agents/approval-buddy.html +5 -5
  92. package/dist/docs/example-agents/approval-buddy.md +1 -1
  93. package/dist/docs/example-agents/benny.html +5 -7
  94. package/dist/docs/example-agents/benny.md +4 -13
  95. package/dist/docs/example-agents/bugbot.html +4 -4
  96. package/dist/docs/example-agents/codebase-wiki.html +6 -6
  97. package/dist/docs/example-agents/codebase-wiki.md +5 -8
  98. package/dist/docs/example-agents/codeowners-review.html +4 -4
  99. package/dist/docs/example-agents/concierge.html +7 -8
  100. package/dist/docs/example-agents/concierge.md +2 -3
  101. package/dist/docs/example-agents/index.html +6 -6
  102. package/dist/docs/example-agents/index.md +5 -8
  103. package/dist/docs/example-agents/knowledge-base.html +6 -6
  104. package/dist/docs/example-agents/knowledge-base.md +2 -2
  105. package/dist/docs/example-agents/oncall.html +4 -4
  106. package/dist/docs/example-agents/security-reviewer.html +7 -7
  107. package/dist/docs/example-agents/security-reviewer.md +5 -5
  108. package/dist/docs/example-agents/slack-agent.html +4 -4
  109. package/dist/docs/example-agents/weather-agent.html +7 -7
  110. package/dist/docs/example-agents/weather-agent.md +4 -3
  111. package/dist/docs/guides/agent-to-agent.html +5 -5
  112. package/dist/docs/guides/agent-to-agent.md +1 -1
  113. package/dist/docs/guides/cloud-runtime.html +6 -6
  114. package/dist/docs/guides/cloud-runtime.md +8 -25
  115. package/dist/docs/guides/convert-automation.html +6 -6
  116. package/dist/docs/guides/convert-automation.md +3 -3
  117. package/dist/docs/guides/github.html +9 -9
  118. package/dist/docs/guides/github.md +11 -23
  119. package/dist/docs/guides/human-in-the-loop.html +4 -4
  120. package/dist/docs/guides/mcp-oauth.html +6 -6
  121. package/dist/docs/guides/mcp-oauth.md +4 -4
  122. package/dist/docs/guides/opentelemetry.html +4 -4
  123. package/dist/docs/guides/slack.html +7 -7
  124. package/dist/docs/guides/slack.md +4 -4
  125. package/dist/docs/guides/webhooks.html +6 -6
  126. package/dist/docs/guides/webhooks.md +3 -3
  127. package/dist/docs/hashmap.json +1 -1
  128. package/dist/docs/hillclimbing.html +6 -6
  129. package/dist/docs/hillclimbing.md +1 -1
  130. package/dist/docs/index.html +6 -6
  131. package/dist/docs/index.md +2 -10
  132. package/dist/docs/llms-full.txt +300 -850
  133. package/dist/docs/llms.txt +2 -3
  134. package/dist/docs/quickstart.html +5 -5
  135. package/dist/docs/quickstart.md +1 -1
  136. package/dist/docs/reference/agent-config.html +8 -8
  137. package/dist/docs/reference/agent-config.md +10 -15
  138. package/dist/docs/reference/artifacts.html +4 -4
  139. package/dist/docs/reference/channels.html +6 -6
  140. package/dist/docs/reference/channels.md +20 -31
  141. package/dist/docs/reference/cli.html +14 -15
  142. package/dist/docs/reference/cli.md +27 -37
  143. package/dist/docs/reference/connections.html +8 -8
  144. package/dist/docs/reference/connections.md +9 -14
  145. package/dist/docs/reference/hooks.html +6 -6
  146. package/dist/docs/reference/hooks.md +10 -14
  147. package/dist/docs/reference/http-api.html +7 -7
  148. package/dist/docs/reference/http-api.md +17 -37
  149. package/dist/docs/reference/instructions.html +6 -6
  150. package/dist/docs/reference/instructions.md +1 -1
  151. package/dist/docs/reference/playground.html +5 -5
  152. package/dist/docs/reference/playground.md +14 -19
  153. package/dist/docs/reference/project-layout.html +7 -7
  154. package/dist/docs/reference/project-layout.md +2 -2
  155. package/dist/docs/reference/prompt.html +6 -6
  156. package/dist/docs/reference/prompt.md +1 -1
  157. package/dist/docs/reference/schedules.html +6 -6
  158. package/dist/docs/reference/schedules.md +1 -2
  159. package/dist/docs/reference/sessions.html +5 -12
  160. package/dist/docs/reference/sessions.md +8 -19
  161. package/dist/docs/reference/skills.html +6 -6
  162. package/dist/docs/reference/skills.md +3 -3
  163. package/dist/docs/reference/subagents.html +4 -4
  164. package/dist/docs/reference/tools.html +8 -8
  165. package/dist/docs/reference/tools.md +12 -17
  166. package/dist/docs/scaffolding-agents.html +5 -5
  167. package/dist/docs/scaffolding-agents.md +4 -5
  168. package/dist/docs/storage.html +9 -9
  169. package/dist/docs/storage.md +37 -80
  170. package/dist/docs/templates/agentic-owners.html +7 -7
  171. package/dist/docs/templates/agentic-owners.md +2 -2
  172. package/dist/docs/templates/demo.html +4 -4
  173. package/dist/docs/templates/pr-autofixer.html +6 -6
  174. package/dist/docs/templates/pr-autofixer.md +3 -6
  175. package/dist/docs/templates/security-reviewer.html +4 -4
  176. package/dist/docs/templates/triage.html +4 -4
  177. package/dist/docs/troubleshooting.html +5 -5
  178. package/dist/docs/troubleshooting.md +6 -6
  179. package/dist/internal/authored-alias-hooks.d.ts +14 -11
  180. package/dist/internal/authored-alias-hooks.d.ts.map +1 -1
  181. package/dist/internal/authored-alias-hooks.js +14 -11
  182. package/dist/internal/authored-loaders.d.ts +7 -6
  183. package/dist/internal/authored-loaders.d.ts.map +1 -1
  184. package/dist/internal/authored-loaders.js +14 -10
  185. package/dist/internal/cli-deploy.d.ts +1 -1
  186. package/dist/internal/cli-deploy.js +5 -5
  187. package/dist/internal/continuation-channel.d.ts +6 -3
  188. package/dist/internal/continuation-channel.d.ts.map +1 -1
  189. package/dist/internal/continuation-channel.js +44 -40
  190. package/dist/internal/continuation-identity.d.ts +17 -16
  191. package/dist/internal/continuation-identity.d.ts.map +1 -1
  192. package/dist/internal/continuation-identity.js +109 -36
  193. package/dist/internal/deploy-manifest.d.ts +2 -2
  194. package/dist/internal/deploy-manifest.d.ts.map +1 -1
  195. package/dist/internal/deploy-manifest.js +4 -9
  196. package/dist/internal/discovery.d.ts.map +1 -1
  197. package/dist/internal/discovery.js +3 -0
  198. package/dist/internal/distribution.d.ts +4 -3
  199. package/dist/internal/distribution.d.ts.map +1 -1
  200. package/dist/internal/distribution.js +4 -3
  201. package/dist/internal/hosted-delivery-protocol.d.ts +38 -0
  202. package/dist/internal/hosted-delivery-protocol.d.ts.map +1 -0
  203. package/dist/internal/hosted-delivery-protocol.js +70 -0
  204. package/dist/internal/hosted-delivery.d.ts +35 -0
  205. package/dist/internal/hosted-delivery.d.ts.map +1 -0
  206. package/dist/internal/hosted-delivery.js +226 -0
  207. package/dist/internal/http-channel.d.ts.map +1 -1
  208. package/dist/internal/http-channel.js +1 -1
  209. package/dist/internal/review-comments.d.ts +186 -63
  210. package/dist/internal/review-comments.d.ts.map +1 -1
  211. package/dist/internal/review-comments.js +350 -168
  212. package/dist/internal/server.d.ts.map +1 -1
  213. package/dist/internal/server.js +21 -3
  214. package/dist/internal/session-engine.d.ts +5 -0
  215. package/dist/internal/session-engine.d.ts.map +1 -1
  216. package/dist/internal/session-engine.js +13 -3
  217. package/dist/internal/shallow-clone.d.ts +8 -2
  218. package/dist/internal/shallow-clone.d.ts.map +1 -1
  219. package/dist/internal/shallow-clone.js +17 -10
  220. package/dist/playground/assets/{index-DDvyC2z6.js → index-D9MFzhNE.js} +1 -1
  221. package/dist/playground/index.html +1 -1
  222. package/dist/types.d.ts +9 -17
  223. package/dist/types.d.ts.map +1 -1
  224. package/docs/README.md +2 -10
  225. package/docs/ab.md +7 -13
  226. package/docs/building-with-agents.md +5 -11
  227. package/docs/concepts.md +12 -17
  228. package/docs/deployment.md +8 -10
  229. package/docs/evals.md +16 -37
  230. package/docs/example-agents/approval-buddy.md +1 -1
  231. package/docs/example-agents/benny.md +4 -13
  232. package/docs/example-agents/codebase-wiki.md +5 -8
  233. package/docs/example-agents/concierge.md +2 -3
  234. package/docs/example-agents/index.md +6 -9
  235. package/docs/example-agents/knowledge-base.md +2 -2
  236. package/docs/example-agents/security-reviewer.md +5 -5
  237. package/docs/example-agents/weather-agent.md +4 -3
  238. package/docs/guides/agent-to-agent.md +1 -1
  239. package/docs/guides/cloud-runtime.md +8 -25
  240. package/docs/guides/convert-automation.md +3 -3
  241. package/docs/guides/github.md +11 -23
  242. package/docs/guides/mcp-oauth.md +4 -4
  243. package/docs/guides/slack.md +4 -4
  244. package/docs/guides/webhooks.md +3 -3
  245. package/docs/hillclimbing.md +1 -1
  246. package/docs/quickstart.md +1 -1
  247. package/docs/reference/agent-config.md +10 -15
  248. package/docs/reference/channels.md +20 -31
  249. package/docs/reference/cli.md +27 -37
  250. package/docs/reference/connections.md +9 -14
  251. package/docs/reference/hooks.md +10 -14
  252. package/docs/reference/http-api.md +18 -38
  253. package/docs/reference/instructions.md +1 -1
  254. package/docs/reference/playground.md +14 -19
  255. package/docs/reference/project-layout.md +2 -2
  256. package/docs/reference/prompt.md +1 -1
  257. package/docs/reference/schedules.md +1 -2
  258. package/docs/reference/sessions.md +8 -19
  259. package/docs/reference/skills.md +3 -3
  260. package/docs/reference/tools.md +12 -17
  261. package/docs/scaffolding-agents.md +4 -5
  262. package/docs/storage.md +37 -80
  263. package/docs/templates/agentic-owners.md +2 -2
  264. package/docs/templates/pr-autofixer.md +3 -6
  265. package/docs/troubleshooting.md +6 -6
  266. package/package.json +8 -1
  267. package/src/channels/deployments/deployments-channel.ts +32 -2
  268. package/src/channels/deployments/types.ts +8 -0
  269. package/src/channels/github/github-channel.ts +71 -21
  270. package/src/continuation.ts +1 -1
  271. package/src/internal/authored-alias-hooks.ts +14 -11
  272. package/src/internal/authored-loaders.ts +14 -10
  273. package/src/internal/cli-deploy.ts +5 -5
  274. package/src/internal/continuation-channel.ts +62 -45
  275. package/src/internal/continuation-identity.ts +123 -38
  276. package/src/internal/deploy-manifest.ts +5 -9
  277. package/src/internal/discovery.ts +3 -0
  278. package/src/internal/distribution.ts +4 -3
  279. package/src/internal/hosted-delivery-protocol.ts +114 -0
  280. package/src/internal/hosted-delivery.ts +327 -0
  281. package/src/internal/http-channel.ts +0 -2
  282. package/src/internal/review-comments.ts +542 -229
  283. package/src/internal/server.ts +29 -2
  284. package/src/internal/session-engine.ts +25 -1
  285. package/src/internal/shallow-clone.ts +30 -16
  286. package/src/types.ts +9 -17
  287. package/dist/docs/assets/building-with-agents.md.DH8A_cHA.js +0 -13
  288. package/dist/docs/assets/chunks/@localSearchIndexroot.Dv-Q0XtU.js +0 -1
  289. package/dist/docs/assets/concepts.md.CRfU3bVg.js +0 -4
  290. package/dist/docs/assets/example-agents_fsd.md.ZWHWWZPE.js +0 -15
  291. package/dist/docs/assets/example-agents_fsd.md.ZWHWWZPE.lean.js +0 -1
  292. package/dist/docs/assets/example-agents_index.md.QZ8mhr6n.js +0 -2
  293. package/dist/docs/assets/example-agents_index.md.QZ8mhr6n.lean.js +0 -1
  294. package/dist/docs/assets/reference_hooks.md.B9FSgdDe.js +0 -14
  295. package/dist/docs/assets/reference_http-api.md.CSHVobzG.js +0 -11
  296. package/dist/docs/assets/reference_http-api.md.CSHVobzG.lean.js +0 -1
  297. package/dist/docs/assets/reference_playground.md.Dfb92yQf.js +0 -1
  298. package/dist/docs/assets/reference_playground.md.Dfb92yQf.lean.js +0 -1
  299. package/dist/docs/assets/reference_sessions.md.tUFzz98S.js +0 -8
  300. package/dist/docs/assets/scaffolding-agents.md.CRDDUtYJ.js +0 -1
  301. package/dist/docs/assets/troubleshooting.md.DYECCZiJ.js +0 -1
  302. package/dist/docs/example-agents/fsd.html +0 -41
  303. package/dist/docs/example-agents/fsd.md +0 -329
  304. package/docs/example-agents/fsd.md +0 -334
  305. /package/dist/docs/assets/{deployment.md.DX_hc3ze.lean.js → deployment.md.DoLFAzfm.lean.js} +0 -0
  306. /package/dist/docs/assets/{example-agents_approval-buddy.md.DNL83puR.lean.js → example-agents_approval-buddy.md.DmezILPg.lean.js} +0 -0
  307. /package/dist/docs/assets/{example-agents_concierge.md.MrKpQndp.lean.js → example-agents_concierge.md.BzB2b20R.lean.js} +0 -0
  308. /package/dist/docs/assets/{example-agents_knowledge-base.md.DqKqHQ9u.lean.js → example-agents_knowledge-base.md.CrA85ig-.lean.js} +0 -0
  309. /package/dist/docs/assets/{example-agents_security-reviewer.md.Bai6D0Ee.lean.js → example-agents_security-reviewer.md.74pPpWYj.lean.js} +0 -0
  310. /package/dist/docs/assets/{example-agents_weather-agent.md.lVEAbWFf.lean.js → example-agents_weather-agent.md.CaGpmw3Y.lean.js} +0 -0
  311. /package/dist/docs/assets/{guides_agent-to-agent.md.BCeVdJRJ.lean.js → guides_agent-to-agent.md.B3JIaAqz.lean.js} +0 -0
  312. /package/dist/docs/assets/{guides_convert-automation.md.D06eIzea.lean.js → guides_convert-automation.md.Bboisykk.lean.js} +0 -0
  313. /package/dist/docs/assets/{guides_mcp-oauth.md.Du0f7pGU.lean.js → guides_mcp-oauth.md.CJvrXtkN.lean.js} +0 -0
  314. /package/dist/docs/assets/{guides_slack.md.DiUmk_Oi.lean.js → guides_slack.md.mqeNKs84.lean.js} +0 -0
  315. /package/dist/docs/assets/{guides_webhooks.md.BpnIdO0i.lean.js → guides_webhooks.md.DKdA43Qm.lean.js} +0 -0
  316. /package/dist/docs/assets/{hillclimbing.md.ywF3yDAd.lean.js → hillclimbing.md.DhESf3OO.lean.js} +0 -0
  317. /package/dist/docs/assets/{quickstart.md.DsrarzEg.lean.js → quickstart.md.BrmfrrIr.lean.js} +0 -0
  318. /package/dist/docs/assets/{reference_agent-config.md.Bqylgw50.lean.js → reference_agent-config.md.Cp_x38Nl.lean.js} +0 -0
  319. /package/dist/docs/assets/{reference_connections.md.DYidrb-j.lean.js → reference_connections.md.DB6SsN6U.lean.js} +0 -0
  320. /package/dist/docs/assets/{reference_project-layout.md.CwkSbEWT.lean.js → reference_project-layout.md.WN9nwJht.lean.js} +0 -0
  321. /package/dist/docs/assets/{reference_prompt.md.DZUMtLPD.lean.js → reference_prompt.md.DnaD5dNK.lean.js} +0 -0
  322. /package/dist/docs/assets/{reference_schedules.md.DNipebiG.lean.js → reference_schedules.md.DI_JrHgq.lean.js} +0 -0
  323. /package/dist/docs/assets/{reference_skills.md.B5ZEuHfG.lean.js → reference_skills.md.BFW9retM.lean.js} +0 -0
  324. /package/dist/docs/assets/{templates_agentic-owners.md.DSJSIpWU.lean.js → templates_agentic-owners.md.DqtPdm6f.lean.js} +0 -0
@@ -79,7 +79,7 @@ within one session. The `at` field is an ISO-8601 timestamp.
79
79
  | Phase | Events | What they tell you |
80
80
  | --- | --- | --- |
81
81
  | Session | `session.started`, [`ab.assigned`](../ab.md#assign-sticky-variants), `session.waiting`, `session.completed`, `session.failed` | Session creation, A/B enrollment, readiness, and task completion |
82
- | Agent | `agent.bound` | Cursor SDK agent ID and cloud conversation URL |
82
+ | Agent | `agent.bound` | Cloud conversation URL |
83
83
  | Input | `message.received` | A user message was accepted |
84
84
  | Turn | `turn.queued`, `turn.started`, `turn.completed`, `turn.failed` | Queue position under a [`maxRunningTurns` cap](./agent-config.md#concurrency), then turn status, final result, and token usage |
85
85
  | Steps | `step.started`, `step.completed` | Model step boundaries and duration |
@@ -118,7 +118,7 @@ The Agent SDK creates a workspace before the first local turn:
118
118
  | ---------------------------------- | ----------------------------------------------------------------------- |
119
119
  | `instructions.*` | `AGENTS.md` |
120
120
  | `skills/*` | `.cursor/skills/<name>/SKILL.md` |
121
- | agent tools (`execution: "agent"`) | scripts under `.agent-serve/tools/`, with a catalog in `AGENTS.md` |
121
+ | agent tools (`execution: "agent"`) | scripts in the session workspace, with a catalog in `AGENTS.md` |
122
122
  | `sandbox/workspace/**` | copied in as seed files |
123
123
  | per-send `workspaceFiles` | written before the turn |
124
124
 
@@ -133,34 +133,23 @@ inheritance rules.
133
133
 
134
134
  ## Where does the Agent SDK store session data?
135
135
 
136
- Local state uses one directory tree:
137
-
138
- ```text
139
- <project>/.agent-serve/ # or <stateRoot>/<slug>/ under serve
140
- sessions/<id>/session.json # metadata: channel, mode, principal, tokens
141
- sessions/<id>/events.ndjson # the durable stream
142
- sessions/<id>/workspace/ # the harness cwd
143
- traces/<sessionId>.ndjson # written by `run`
144
- runner/ # Cursor SDK conversation store
145
- tool-calls/<callId>/ # ephemeral deterministic-call workspaces
146
- ```
136
+ Local state lives under `--state-root`. Slugged mounts store it under
137
+ a subdirectory named for the slug.
147
138
 
148
139
  Deleting a session directory removes the session from the server: it
149
140
  disappears from listings and can no longer be streamed or continued.
150
- The `runner/` store keeps its own conversation copy until you remove it.
151
141
  Cloud conversations remain on the Cursor backend.
152
142
 
153
- Change the root with `--state-root` or `stateRoot`. Nested git checkouts
154
- already default `local.cwd` outside the enclosing repo. See
143
+ Nested git checkouts already default `local.cwd` outside the enclosing
144
+ repo. See
155
145
  [local session workspaces](../concepts.md#what-files-can-a-local-session-access).
156
146
 
157
147
  ## How do I inspect a saved event stream?
158
148
 
159
- Use `trajectory` with a trace or session event file:
149
+ Use `trajectory` with a saved trace:
160
150
 
161
151
  ```bash
162
- agent-sdk trajectory --events .agent-serve/traces/<sessionId>.ndjson
163
- agent-sdk trajectory --events <stateRoot>/<slug>/sessions/<id>/events.ndjson
152
+ agent-sdk trajectory --events <state-root>/traces/<sessionId>.ndjson
164
153
  ```
165
154
 
166
155
  The command prints tool calls, the reply, and token usage in the same
@@ -57,9 +57,9 @@ the engine copies the same SKILL.md tree onto an Agent Store for native
57
57
  discovery:
58
58
 
59
59
  - Hosted deployments write store-root `skills/<name>/`.
60
- - `agent-serve serve` / `run` with a personal `CURSOR_API_KEY` write
61
- `agent-serve/<agent>/skills/<name>/` on the USER store, namespaced so
62
- they cannot collide with the user's own skills.
60
+ - `agent-sdk serve` / `run` with a personal `CURSOR_API_KEY` write
61
+ namespaced skills on the USER store so they cannot collide with the
62
+ user's own skills.
63
63
 
64
64
  `validate` still warns about the combination so the store path is
65
65
  visible. Cloud turns with neither a hosted store nor an API key see
@@ -64,7 +64,7 @@ export default defineTool({
64
64
  });
65
65
  ```
66
66
 
67
- ### The `ctx` parameter
67
+ ### Tool context
68
68
 
69
69
  `execute` receives a `ctx` with the runtime accessors:
70
70
 
@@ -76,7 +76,7 @@ export default defineTool({
76
76
  | `ctx.stateRoot` | The agent's durable state root, shared across every session |
77
77
  | `ctx.host` | Shared host services (see below) |
78
78
  | `ctx.send(channelId, message, options?)` | Start or resume a session on any channel: the cross-channel handoff primitive, e.g. a chat tool opening a `drive` cloud session for a PR. `auth` defaults to this call's session principal |
79
- | `ctx.getSession(channelId, sessionId)` | Look up a session on a channel, e.g. refresh `sdkAgentId` after a turn |
79
+ | `ctx.getSession(channelId, sessionId)` | Look up a session on a channel |
80
80
  | `ctx.artifacts` | Session-bound [artifacts](./artifacts.md) facade: `tag` auto-fills the session |
81
81
 
82
82
  `ctx.host` carries the shared host services: `host.mcp` (authored MCP
@@ -84,9 +84,7 @@ connections: `names()`, `listTools(name)`, `callTool(name, tool, args)`),
84
84
  `host.github` and `host.slack` (shared platform clients), `host.kv` and
85
85
  `host.files` (durable [storage](../storage.md)), `host.otel` (custom
86
86
  metrics and session tags; see [OpenTelemetry](../guides/opentelemetry.md)),
87
- `host.reminders` (per-session wakes, when attached), `host.evals`
88
- (playground eval batches, when attached), and `host.slackNudges`
89
- (Slack ask-dedupe helpers).
87
+ `host.reminders` (per-session wakes, when attached).
90
88
 
91
89
  ### Return values
92
90
 
@@ -174,15 +172,15 @@ printf '%s\\n' "$message"
174
172
  });
175
173
  ```
176
174
 
177
- On the local runtime, scripts land under `.agent-serve/tools/` in the
178
- session workspace with a catalog in `AGENTS.md`. On cloud, the catalog
179
- and script bodies travel on the first prompt.
175
+ On the local runtime, scripts land in the session workspace with a
176
+ catalog in `AGENTS.md`. On cloud, the catalog and script bodies travel
177
+ on the first prompt.
180
178
 
181
179
  ## Tools from an MCP connection, advertised by name
182
180
 
183
181
  Authored `agent/tools/` files are one catalog for every session. When
184
- the tools should come from an MCP server including per-tenant toolsets
185
- resolved at runtime declare the connection with
182
+ the tools should come from an MCP server, including per-tenant toolsets
183
+ resolved at runtime, declare the connection with
186
184
  `advertiseTools: true` (plus per-session `auth` when the credential
187
185
  depends on who the session is for) and the engine synthesizes named 1:1
188
186
  passthrough server tools from the connection's live `listTools` on every
@@ -259,15 +257,12 @@ const outcome = await handle.callTool("inspect_pr", {
259
257
  // { toolName, callId, isError, result, durationMs }
260
258
  ```
261
259
 
262
- By default the call runs against an ephemeral scratch workspace under
263
- `<stateRoot>/tool-calls/<callId>`, materialized like a session workspace
264
- and removed when the call returns. Pass a `sessionId` (a body field over
260
+ By default the call runs against an ephemeral workspace and is removed
261
+ when the call returns. Pass a `sessionId` (a body field over
265
262
  HTTP, `--session` on the CLI, `options.sessionId` programmatically) to
266
263
  run inside an existing session instead: the tool sees that session's
267
- workspace, and the call is recorded on the session's event stream under
268
- a per-call `turnId`, visible in the playground and trajectories like
269
- any model-initiated call. Session-bound calls serialize with model
270
- turns and return `409 session_busy` while a turn runs.
264
+ workspace, and the call is recorded on the session's event stream.
265
+ Session-bound calls return `409 session_busy` while a turn runs.
271
266
 
272
267
  The error semantics match the model path. Unknown tools are rejected
273
268
  with the available names, agent-execution tools cannot be called on the
@@ -22,12 +22,11 @@ Where to find the file depends on how you got the package:
22
22
  injects the skill body into context instead of waiting for the
23
23
  model to pick it from the catalog. The `/` menu lists them as
24
24
  `/agentsdk-create-agent`, `/agentsdk-hillclimb`, and the rest. Re-installing overwrites those
25
- copies with the package version. Set
26
- `CURSOR_JULY_SKIP_SKILL_INSTALL=1` to skip the copy.
25
+ copies with the package version.
27
26
  - Installed `@cursor/july` as a dependency? The skill also ships inside
28
27
  the package at `node_modules/@cursor/july/skills/create-agent/SKILL.md`.
29
- - Working in the monorepo? It's at
30
- `packages/agent-serve/skills/create-agent/SKILL.md`. Run
28
+ - Working from this package's source? The skill is at
29
+ [`skills/create-agent/SKILL.md`](../skills/create-agent/SKILL.md). Run
31
30
  `agent-sdk install-skills` if you want the same copies in
32
31
  `~/.cursor/skills/agentsdk/` (the package postinstall skips the
33
32
  source checkout).
@@ -127,7 +126,7 @@ inputs again, and adds an eval for each improvement you keep.
127
126
 
128
127
  ## Related
129
128
 
130
- - [Build your first PR approver](./quickstart.md)
129
+ - [Build your first PR reviewer](./quickstart.md)
131
130
  - [Convert a Cursor Automation](./guides/convert-automation.md)
132
131
  - [Building agents with agents](./building-with-agents.md)
133
132
  - [Evals](./evals.md)
package/docs/storage.md CHANGED
@@ -7,15 +7,10 @@ description: "Point the Agent SDK's durable storage at a backend you own with de
7
7
 
8
8
  The Agent SDK owns durable storage for sessions, continuation tokens,
9
9
  reminders, playground eval history, and live A/B samples. It chooses the
10
- keys (under `agentkit/v1/`), when to read and write, and how to restore
11
- after restart.
10
+ keys, when to read and write, and how to restore after restart.
12
11
 
13
- Keys have bounded length: caller-controlled segments (channel ids,
14
- continuation tokens) are URI-encoded, and any segment past 256 encoded
15
- bytes is replaced by its `sha256:…` digest — deterministically, so writes
16
- and lookups always agree. Backends can rely on this instead of imposing
17
- their own key-length caps (which would silently drop writes, since a
18
- throwing `put` is at-most-once).
12
+ The Agent SDK owns key encoding. Backends must accept the keys they are
13
+ given. Do not fail `put` to enforce a shorter cap.
19
14
 
20
15
  By default that storage lives under `--state-root` on local disk. Fine
21
16
  for one machine; it does not survive replacing the host.
@@ -23,8 +18,7 @@ for one machine; it does not survive replacing the host.
23
18
  To keep the same framework storage across hosts, plug in a key-value
24
19
  backend with `agent/storage.ts`. You provide `put` / `get` / `delete` /
25
20
  `list`. The optional `cas` group adds conditional writes (see
26
- [Conditional writes](#conditional-writes-the-cas-group)). The Agent SDK
27
- does the rest.
21
+ [Conditional writes](#conditional-writes-the-cas-group)).
28
22
 
29
23
  ```ts
30
24
  // agent/storage.ts
@@ -44,15 +38,10 @@ export default defineStorage({
44
38
  });
45
39
  ```
46
40
 
47
- > [!NOTE]
48
- > Import paths here use `@cursor/july/storage`. On projects still
49
- > using `@anysphere/agent-serve`, swap the import. See
50
- > [Run the CLI](/#run-the-cli) for the full rename table.
51
-
52
41
  ## Which fields to provide
53
42
 
54
- Implement the small KV core `put`/`get`/`delete`/`list` plus the `cas`
55
- group and you get **full functionality**: eval-run and A/B history are
43
+ Implement the small KV core (`put`/`get`/`delete`/`list` plus the `cas`
44
+ group) and you get **full functionality**: eval-run and A/B history are
56
45
  derived over the core automatically. The dedicated `evals` / `abs` groups
57
46
  are backend-native optimizations, not required-or-lose-history hooks.
58
47
 
@@ -60,13 +49,13 @@ are backend-native optimizations, not required-or-lose-history hooks.
60
49
  | --- | --- | --- |
61
50
  | `put` | Yes | Write or update a value |
62
51
  | `cas` | Optional | Conditional writes; see [Conditional writes](#conditional-writes-the-cas-group) |
63
- | `get` | For restore | Look up one key (also: derived A/B snapshot backfill) |
64
- | `list` | For restore | Return entries under a prefix, in key order (also: derived eval-runs hydrate) |
65
- | `delete` | For cleanup | Remove a key (also: derived eval-runs pruning) |
52
+ | `get` | For restore | Look up one key |
53
+ | `list` | For restore | Return entries under a prefix, in key order |
54
+ | `delete` | For cleanup | Remove a key |
66
55
  | `name` | No | Label surfaced on `GET /v1/info` diagnostics |
67
56
  | `policy` | No | Timing knobs; see [Policy](#policy) |
68
- | `evals` | No | Backend-native eval-runs table; derived over the core when omitted see [Eval and A/B tables](#eval-and-a-b-tables) |
69
- | `abs` | No | Backend-native A/B metrics table; derived over the core when omitted see [Eval and A/B tables](#eval-and-a-b-tables) |
57
+ | `evals` | No | Backend-native eval-runs table; derived over the core when omitted. See [Eval and A/B tables](#eval-and-a-b-tables) |
58
+ | `abs` | No | Backend-native A/B metrics table; derived over the core when omitted. See [Eval and A/B tables](#eval-and-a-b-tables) |
70
59
 
71
60
  A throwing `put` is logged and dropped. It never fails a turn. When
72
61
  resolving a missing continuation token, a throwing `get` fails the
@@ -80,30 +69,20 @@ values. Both are **optional optimizations**: when a group is not
80
69
  authored, `defineStorage` derives it over the KV core, so a backend that
81
70
  implements only the core loses nothing. Author a group only when the
82
71
  backend has a better native shape (a real database table, an analytics
83
- pipeline) the built-in `fileKv` and `cursorHostedStorage` both do.
72
+ pipeline). The built-in `fileKv` and `cursorHostedStorage` both do.
84
73
 
85
74
  `evals` keeps playground eval batches across restarts (`put`, `delete`,
86
- `list` over run snapshots keyed by `runId`). The Agent SDK upserts a
87
- snapshot as a batch starts, progresses, and finishes, prunes runs past
88
- the playground history window, and lists everything back at serve start.
89
- **Derived form**: one key per run under
90
- `agentkit/v1/{agent}/eval-runs/{runId}` — needs core `put` + `delete` +
91
- `list`. Only a core missing `delete` or `list` leaves eval history in
92
- process memory (cleared on restart). See
93
- [Evals](./evals.md#configure-eval-runs).
75
+ `list` over run snapshots keyed by `runId`). A core missing `delete` or
76
+ `list` leaves eval history in memory until restart.
77
+ See [Evals](./evals.md#configure-eval-runs).
94
78
 
95
79
  `abs` exports live A/B metrics: `putSample` appends one cumulative
96
80
  metric sample per enrolled experiment on each completed or failed turn;
97
81
  optional `putSnapshot` / `getSnapshot` store and serve back the latest
98
- aggregate so a replacement host with no local sessions can still serve
99
- the A/Bs surface. **Derived form**: each sample lands as its own key
100
- (`agentkit/v1/{agent}/ab-samples/{experiment}/{sessionId}/{at}` a
101
- blind append-only put, never a read-modify-write of one growing array)
102
- and the snapshot lives at the fixed `agentkit/v1/{agent}/ab-snapshot`
103
- key (last-write-wins is correct for "latest aggregate"). `putSample` and
104
- `putSnapshot` need only core `put`; `getSnapshot` needs core `get`.
105
- Session event logs remain the assignment source of truth either way. See
106
- [Live A/B metrics](./ab.md).
82
+ aggregate so a replacement host can still serve the A/Bs surface.
83
+ `putSample` and `putSnapshot` need only core `put`; `getSnapshot` needs
84
+ core `get`. Session event logs remain the assignment source of truth
85
+ either way. See [Live A/B metrics](./ab.md).
107
86
 
108
87
  ## Policy
109
88
 
@@ -137,8 +116,6 @@ follow-up arrives instead of at startup.
137
116
  With `get` and `list`, serve can rebuild local state from your store:
138
117
 
139
118
  - At startup, the Agent SDK loads recent sessions up to the restore caps.
140
- Local disk wins when both sides have the same session. Reminders
141
- hydrate the same way into `--state-root/reminders`.
142
119
  - On demand, a missing continuation token resolves through the store
143
120
  and resumes that session.
144
121
  - Playground eval history and A/B aggregates can load from the same
@@ -157,19 +134,16 @@ await ctx.host.kv.put("alert-memory/abc", { updated: "…" });
157
134
  const prior = await ctx.host.kv.get("alert-memory/abc");
158
135
  ```
159
136
 
160
- The Agent SDK prefixes author keys as `agentkit/v1/{agent}/kv/{key}` (same
161
- bounded encoding as continuation tokens). Writes **await** the sink and
162
- propagate errors — unlike session mirrors, which are at-most-once.
137
+ Writes **await** the sink and propagate errors, unlike session mirrors,
138
+ which are at-most-once.
163
139
 
164
- Without `agent/storage.ts`, `host.kv` falls back to files under
165
- `--state-root/kv`. That is fine for local dogfood; it does **not**
166
- survive replacing the host. For Cursor-managed hosting, prefer
167
- `@cursor/july/storage/cursor-hosted` so sessions and author KV share the
168
- platform Bugbot tables through a control-plane HTTP proxy (authenticated
169
- as the deployment pod credential — engines never receive a database URL).
140
+ Without `agent/storage.ts`, `host.kv` is local-only and does not
141
+ survive replacing the host. Hosted agents should author
142
+ `cursorHostedStorage()` so session and `host.kv` records survive
143
+ replace.
170
144
 
171
145
  ```ts
172
- // agent/storage.ts Cursor-managed hosting
146
+ // agent/storage.ts: Cursor-managed hosting
173
147
  import { defineStorage } from "@cursor/july/storage";
174
148
  import { cursorHostedStorage } from "@cursor/july/storage/cursor-hosted";
175
149
 
@@ -182,32 +156,18 @@ Built-in helpers:
182
156
 
183
157
  | Import | Backend |
184
158
  | --- | --- |
185
- | `@cursor/july/storage/file-kv` | File-per-key under `.agent-serve/kv` |
186
- | `@cursor/july/storage/cursor-hosted` | Platform Bugbot `agent_serve_*` via control-plane proxy |
159
+ | `@cursor/july/storage/file-kv` | File-per-key under the project state directory |
160
+ | `@cursor/july/storage/cursor-hosted` | Cursor-managed hosting; records survive replace |
187
161
 
188
162
  ## Bring your own backend
189
163
 
190
- There is no built-in Postgres backend on purpose. Cursor's internal
191
- `agent_serve_*` tables are owned by the backend and reachable only
192
- through the hosted proxy, and this doc does not prescribe a schema —
193
- what you back the KV with is your call. Any durable store works:
194
-
195
- - **Local disk** the built-in `fileKv` (single process only).
196
- - **Object storage (S3-class)** one object per key; conditional
197
- writes map directly onto the contract (`putIfAbsent` = put with
198
- `If-None-Match: *`, `putIfVersion` = put with `If-Match: <etag>`,
199
- the ETag is the version token, `listKeys` is a prefix listing).
200
- - **Redis, DynamoDB, a SQL table, …** — anything that can do an
201
- atomic compare-and-set and a prefix listing.
202
-
203
- Implement the `StorageConfig` methods (and the optional `cas` group)
204
- against that store. The
205
- contract, defined at `@cursor/july/kv`: version tokens are opaque
206
- strings that change on every successful write — including plain
207
- `put`, so a stale token fences instead of clobbering; conditional
208
- writes are atomic; `listKeys` returns every key under the prefix.
209
- `@cursor/july/kv/memory` is a complete reference implementation to
210
- compare behavior against.
164
+ Any durable store works if it can put, get, delete, list by prefix,
165
+ and optionally compare-and-set. Implement the `StorageConfig` methods
166
+ (and the optional `cas` group) against that store. The contract,
167
+ defined at `@cursor/july/kv`: version tokens are opaque strings that
168
+ change on every successful write, including plain `put`, so a stale
169
+ token fences instead of clobbering; conditional writes are atomic;
170
+ `listKeys` returns every key under the prefix.
211
171
 
212
172
  ## Conditional writes (the `cas` group)
213
173
 
@@ -215,10 +175,7 @@ The `cas` group is compare-and-swap over the same keyspace:
215
175
  `getWithVersion` / `putIfAbsent` / `putIfVersion` / `listKeys`, defined
216
176
  backend-agnostically at `@cursor/july/kv`. Plain storage works without
217
177
  it, so an existing backend keeps working across a platform upgrade.
218
- `defineStorage` rejects a partial group implement all four methods or
178
+ `defineStorage` rejects a partial group. Implement all four methods or
219
179
  none. Version tokens are opaque strings that must change on every write
220
180
  (a counter column, a row version, a content hash). The built-in backends
221
- both include it: `fileKv` uses content-hash tokens (single-process
222
- correctness) and `cursorHostedStorage` the control-plane proxy (a
223
- `version` counter on the server). `memoryCasTable()` is for test fixtures
224
- and inert sinks only.
181
+ both include the group.
@@ -32,7 +32,7 @@ agent-sdk login
32
32
  agent-sdk dev
33
33
  ```
34
34
 
35
- PR events stream through your Cursor account no webhook or GitHub App
35
+ PR events stream through your Cursor account. No webhook or GitHub App
36
36
  setup. Open a PR, or replay a real one deterministically (this also works
37
37
  with `repos` empty):
38
38
 
@@ -75,7 +75,7 @@ applies the deterministic decision:
75
75
 
76
76
  - **Approve** when the tier is low and no matched rule demands a human,
77
77
  bound to the head SHA.
78
- - **Request reviewers** otherwise the policy owners (max 2, never the
78
+ - **Request reviewers** otherwise: the policy owners (max 2, never the
79
79
  author), plus one status comment the agent keeps updated in place.
80
80
 
81
81
  The model never writes to GitHub. A broken policy file fails closed with
@@ -91,12 +91,9 @@ opted-in PR wakes the agent. A comment on a plain GitHub issue does
91
91
  not. The channel buffers about 3 seconds per PR. Payload details are
92
92
  dropped on purpose. The follow-up says something changed.
93
93
 
94
- Pending wakes snapshot to `host.kv` (`webhook-buffer`) before the
95
- webhook is ACKed, and restore on restart. Affinity is
96
- `affinity/{owner/repo#N}` `bc-…` in the same store, written from
97
- `agent.bound`. `agent/storage.ts` uses `cursorHostedStorage`, so both
98
- survive host replace. Local serve without that plug-in falls back to
99
- `--state-root/kv`.
94
+ Pending wakes and the PR-to-cloud-agent map persist in `host.kv` so
95
+ they survive restart. `cursorHostedStorage` keeps both across replace.
96
+ Without that plug-in, `host.kv` is local-only.
100
97
 
101
98
  Closing a PR cancels its merge-conflict reminder and drops buffered
102
99
  wakes.
@@ -12,8 +12,8 @@ Start with four checks, in order:
12
12
  3. What the playground or HTTP API shows
13
13
  4. The session event stream (trace)
14
14
 
15
- Match your symptom below. Keep the commands as `agent-sdk`; see
16
- [Run the CLI](/#run-the-cli) if you still need an alias.
15
+ Match your symptom below. Keep the commands as `agent-sdk`. If it is
16
+ not on `PATH`, use `npx @cursor/july`.
17
17
 
18
18
  ## What if serve or the playground looks wrong?
19
19
 
@@ -21,9 +21,9 @@ Match your symptom below. Keep the commands as `agent-sdk`; see
21
21
  | --- | --- |
22
22
  | `serve` won't start | Run `agent-sdk validate --dir .` and fix the reported errors. |
23
23
  | Playground is blank or says there are no agents | The UI needs a running `serve` process. Building the playground assets alone is not enough. |
24
- | Edits to the playground don't show up | Use `serve --dev` and open the printed playground HMR URL (often port `5273`), not only the static `:3000` URL. |
25
- | Sessions exist on disk but the playground list is empty | The list shows sessions for the authenticated caller. In `--dev` on loopback the list is wider. Otherwise open `/<slug>/playground?sessionId=ses_…` or inspect `sessions/` under your state root. |
26
- | Port 3000 or 5273 is already in use | For the default serve port, the CLI tries the next free port and prints a notice. Pass `--port` to pick one, or `--port 0` for any free port. Stop leftover Vite or webhook-forwarder processes if you need the original port. |
24
+ | The playground UI looks stale | `serve --dev` prints a playground URL. Open that URL. Agent-file edits still need a restart (press Enter on the TTY). |
25
+ | Sessions exist but the playground list is empty | The list shows sessions for the authenticated caller. In `--dev` on loopback the list is wider. Otherwise open `/<slug>/playground?sessionId=ses_…`. |
26
+ | Port 3000 is already in use | For the default serve port, the CLI tries the next free port and prints a notice. Pass `--port` to pick one, or `--port 0` for any free port. Stop leftover playground or webhook-forwarder processes if you need the original port. |
27
27
 
28
28
  ## What if a model turn goes wrong?
29
29
 
@@ -31,7 +31,7 @@ Match your symptom below. Keep the commands as `agent-sdk`; see
31
31
  | --- | --- |
32
32
  | Built-in file reads and greps fail; the turn retries for a long time | Run under Node 22.13+ (or `tsx`), never Bun. Look for `NGHTTP2_FRAME_SIZE_ERROR` in logs. |
33
33
  | The turn fails immediately with an API-key error | Sign in with `agent-sdk login`, or set `CURSOR_API_KEY`. Discovery, `info`, `call`, and serve bring-up work without a key; model turns need one. |
34
- | Replies quote rules or `AGENTS.md` from outside your agent project | The session workspace inherited parent-folder config. Nested git checkouts default `local.cwd` to `~/.cache/agent-serve/<dir>`. Point `defineAgent({ local: { cwd } })` at a checkout only when the agent should inherit that tree, or set `--state-root` to a clean directory (for example under `/tmp`). |
34
+ | Replies quote rules or `AGENTS.md` from outside your agent project | The session workspace inherited parent-folder config. Nested git checkouts default `local.cwd` to a per-project cache directory under `~/.cache`. Point `defineAgent({ local: { cwd } })` at a checkout only when the agent should inherit that tree, or set `--state-root` to a clean directory (for example under `/tmp`). |
35
35
  | Yellow box shows Datadog/Linear tools, but the model lists `GetDynamicTools` / IDE `cursor` tools and never calls them | Attached MCP sits behind harness meta-tools, or `hostOnly` hid the connection, or the harness cwd is still inside another checkout. Set `advertiseTools: true` for named tools on local turns. Check `GET /v1/info` `local.cwd` and `connections[].advertiseTools`. |
36
36
  | Server tools, skills, or workspace seed files never appear | Server tools and sandbox seeds apply on the local runtime (cloud server tools need `--public-url` / `--cloud-tools-url`). Skills reach cloud through the Agent Store when hosting or a personal `CURSOR_API_KEY` is available; otherwise only skills already in the cloud repo. `validate` warns when this combination is present. |
37
37
  | `validate` and `run` succeed, but typecheck fails in CI | The CLI runs TypeScript with type-stripping only. Keep tool `execute` return types as object literals or `type` aliases, not `interface` types. |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cursor/july",
3
- "version": "0.1.92",
3
+ "version": "0.1.93",
4
4
  "description": "(early alpha) Filesystem-first framework for defining Cursor agents as markdown and TypeScript and serving them over channels with the Cursor SDK.",
5
5
  "license": "SEE LICENSE IN LICENSE.md",
6
6
  "repository": {
@@ -47,6 +47,13 @@
47
47
  "import": "./dist/index.js",
48
48
  "default": "./dist/index.js"
49
49
  },
50
+ "./internal/hosted-delivery-protocol": {
51
+ "anysphere-source": "./src/internal/hosted-delivery-protocol.ts",
52
+ "bun": "./dist/internal/hosted-delivery-protocol.js",
53
+ "types": "./dist/internal/hosted-delivery-protocol.d.ts",
54
+ "import": "./dist/internal/hosted-delivery-protocol.js",
55
+ "default": "./dist/internal/hosted-delivery-protocol.js"
56
+ },
50
57
  "./tools": {
51
58
  "anysphere-source": "./src/tools.ts",
52
59
  "types": "./dist/tools.d.ts",
@@ -2,6 +2,7 @@ import { z } from "zod";
2
2
 
3
3
  import { defineChannel, localDevStrict, POST } from "../../channels.js";
4
4
  import { resolveDeploymentSubscriptions } from "../../internal/cursor-deployment-relay.js";
5
+ import { bindLocalIngressSend } from "../../internal/local-ingress.js";
5
6
  import type { ChannelDefinition, ChannelHandlerArgs } from "../../types.js";
6
7
  import {
7
8
  DEPLOYMENT_EVENT_TYPES,
@@ -39,6 +40,24 @@ export function getDeploymentsChannelOptions(
39
40
  return deploymentsChannelOptionsByDefinition.get(definition);
40
41
  }
41
42
 
43
+ /**
44
+ * Events a {@link deploymentsChannel} dispatches on, unioned from its
45
+ * subscriptions. Published as `meta.deploymentEventTypes` so the deploy
46
+ * manifest can extract `eventTypes`. An empty deploy-source list is an
47
+ * inert channel and yields no events.
48
+ */
49
+ export function deriveDeploymentEventTypes(
50
+ options: Pick<DeploymentsChannelOptions, "deploySourceUris" | "events">
51
+ ): string[] {
52
+ const events = new Set<string>();
53
+ for (const subscription of resolveDeploymentSubscriptions(options)) {
54
+ for (const event of subscription.events) {
55
+ events.add(event);
56
+ }
57
+ }
58
+ return [...events].sort();
59
+ }
60
+
42
61
  /**
43
62
  * Core deployment-event dispatch, used by the channel's replay route and by
44
63
  * the serve host's relay fan-out. Whether the event matches this channel's
@@ -49,7 +68,15 @@ export async function dispatchDeploymentEvent(input: {
49
68
  event: DeploymentEvent;
50
69
  args: ChannelHandlerArgs;
51
70
  }): Promise<Response> {
52
- await input.options.onEvent(input.event, input.args);
71
+ await input.options.onEvent(
72
+ input.event,
73
+ bindLocalIngressSend(input.args, {
74
+ identity: input.options.continuation,
75
+ kind: DEPLOYMENTS_CHANNEL_KIND,
76
+ eventType: input.event.eventType,
77
+ payload: input.event,
78
+ })
79
+ );
53
80
  return Response.json({ ok: true });
54
81
  }
55
82
 
@@ -89,7 +116,10 @@ export function deploymentsChannel(
89
116
 
90
117
  const definition = defineChannel({
91
118
  auth: options.auth ?? [localDevStrict()],
92
- meta: { kind: DEPLOYMENTS_CHANNEL_KIND },
119
+ meta: {
120
+ kind: DEPLOYMENTS_CHANNEL_KIND,
121
+ deploymentEventTypes: deriveDeploymentEventTypes(options),
122
+ },
93
123
  ...(options.onStart === undefined ? {} : { onStart: options.onStart }),
94
124
  ...(options.onStop === undefined ? {} : { onStop: options.onStop }),
95
125
  routes: [
@@ -1,3 +1,4 @@
1
+ import type { ContinuationIdentity } from "../../continuation.js";
1
2
  import type { ChannelDefinition, ChannelHandlerArgs } from "../../types.js";
2
3
 
3
4
  /** {@link ChannelMeta.kind} value used by {@link deploymentsChannel}. */
@@ -77,4 +78,11 @@ export interface DeploymentsChannelOptions {
77
78
  auth?: ChannelDefinition["auth"];
78
79
  onStart?: ChannelDefinition["onStart"];
79
80
  onStop?: ChannelDefinition["onStop"];
81
+ /**
82
+ * Continuation selector. Omitted inherits {@link AgentConfig.architecture}:
83
+ * `"deployments.none/v1"` unless the agent set `architecture: "v2"` (then
84
+ * `"deployments.deployment/v2"`). Override with `"deployments.none/v2"`
85
+ * for one-shot events.
86
+ */
87
+ continuation?: ContinuationIdentity;
80
88
  }