@cursor/july 0.1.107 → 0.1.109

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 (523) hide show
  1. package/AGENTS.md +2 -6
  2. package/README.md +13 -11
  3. package/dist/bin/agent-serve.js +30 -8
  4. package/dist/channels/bitbucket/api.d.ts +41 -0
  5. package/dist/channels/bitbucket/api.d.ts.map +1 -1
  6. package/dist/channels/bitbucket/api.js +260 -0
  7. package/dist/channels/bitbucket/binding.d.ts +4 -0
  8. package/dist/channels/bitbucket/binding.d.ts.map +1 -1
  9. package/dist/channels/bitbucket/binding.js +16 -0
  10. package/dist/channels/bitbucket/index.d.ts +1 -1
  11. package/dist/channels/bitbucket/index.d.ts.map +1 -1
  12. package/dist/channels/bitbucket/index.js +1 -1
  13. package/dist/channels/github/github-channel.js +8 -5
  14. package/dist/channels/github/types.d.ts +5 -1
  15. package/dist/channels/github/types.d.ts.map +1 -1
  16. package/dist/channels/gitlab/api.d.ts +27 -0
  17. package/dist/channels/gitlab/api.d.ts.map +1 -1
  18. package/dist/channels/gitlab/api.js +88 -0
  19. package/dist/channels/gitlab/binding.d.ts +5 -0
  20. package/dist/channels/gitlab/binding.d.ts.map +1 -1
  21. package/dist/channels/gitlab/binding.js +10 -0
  22. package/dist/channels/gitlab/index.d.ts +1 -1
  23. package/dist/channels/gitlab/index.d.ts.map +1 -1
  24. package/dist/channels/gitlab/index.js +1 -1
  25. package/dist/channels/origin/origin-channel.d.ts.map +1 -1
  26. package/dist/channels/origin/origin-channel.js +27 -13
  27. package/dist/channels/origin/types.d.ts +5 -1
  28. package/dist/channels/origin/types.d.ts.map +1 -1
  29. package/dist/channels/slack/dispatch.d.ts +10 -0
  30. package/dist/channels/slack/dispatch.d.ts.map +1 -1
  31. package/dist/channels/slack/dispatch.js +20 -3
  32. package/dist/channels/slack/slack-channel.d.ts +12 -5
  33. package/dist/channels/slack/slack-channel.d.ts.map +1 -1
  34. package/dist/channels/slack/slack-channel.js +59 -8
  35. package/dist/channels.d.ts +45 -0
  36. package/dist/channels.d.ts.map +1 -1
  37. package/dist/channels.js +106 -7
  38. package/dist/connections.d.ts +2 -1
  39. package/dist/connections.d.ts.map +1 -1
  40. package/dist/connections.js +2 -1
  41. package/dist/docs/404.html +2 -2
  42. package/dist/docs/assets/{app.CtuckIiL.js → app.Cr-wVbnB.js} +1 -1
  43. package/dist/docs/assets/{building-with-agents.md.CUSWxlP_.js → building-with-agents.md.D0KbSkJn.js} +2 -2
  44. package/dist/docs/assets/{building-with-agents.md.CUSWxlP_.lean.js → building-with-agents.md.D0KbSkJn.lean.js} +1 -1
  45. package/dist/docs/assets/chunks/@localSearchIndexroot.CFVQ4S17.js +1 -0
  46. package/dist/docs/assets/chunks/{VPLocalSearchBox.Bkkhnu8K.js → VPLocalSearchBox.CVQERt56.js} +1 -1
  47. package/dist/docs/assets/chunks/{theme.DhpIe0Pa.js → theme.Dnsd3XOn.js} +2 -2
  48. package/dist/docs/assets/concepts.md.B4o63Gul.js +1 -0
  49. package/dist/docs/assets/{deployment.md.MFPKqsqI.js → deployment.md.JenwuCCB.js} +4 -4
  50. package/dist/docs/assets/{deployment.md.MFPKqsqI.lean.js → deployment.md.JenwuCCB.lean.js} +1 -1
  51. package/dist/docs/assets/evals.md.C7JLjoEP.js +211 -0
  52. package/dist/docs/assets/evals.md.C7JLjoEP.lean.js +1 -0
  53. package/dist/docs/assets/guides_bitbucket.md.DZPzmUjU.js +10 -0
  54. package/dist/docs/assets/guides_bitbucket.md.DZPzmUjU.lean.js +1 -0
  55. package/dist/docs/assets/guides_cloud-agents.md.BsloyHdY.js +9 -0
  56. package/dist/docs/assets/{guides_cloud-agents.md.DS8RIjwx.lean.js → guides_cloud-agents.md.BsloyHdY.lean.js} +1 -1
  57. package/dist/docs/assets/{guides_github.md.c0gdGJ-D.js → guides_github.md.TZaTZlfz.js} +13 -3
  58. package/dist/docs/assets/{guides_github.md.c0gdGJ-D.lean.js → guides_github.md.TZaTZlfz.lean.js} +1 -1
  59. package/dist/docs/assets/guides_gitlab.md.BmqwQfdG.js +14 -0
  60. package/dist/docs/assets/guides_gitlab.md.BmqwQfdG.lean.js +1 -0
  61. package/dist/docs/assets/{guides_grokbot-agents.md.DVqdhBKb.js → guides_grokbot-agents.md.DyV-WArv.js} +1 -1
  62. package/dist/docs/assets/guides_improve.md.BGVk32bK.js +14 -0
  63. package/dist/docs/assets/guides_improve.md.BGVk32bK.lean.js +1 -0
  64. package/dist/docs/assets/{guides_slack.md.9oHPye9o.js → guides_slack.md.D4RVMM4G.js} +3 -3
  65. package/dist/docs/assets/{guides_slack.md.9oHPye9o.lean.js → guides_slack.md.D4RVMM4G.lean.js} +1 -1
  66. package/dist/docs/assets/{guides_webhooks.md.DKdA43Qm.js → guides_webhooks.md.CJK484ex.js} +2 -2
  67. package/dist/docs/assets/{hillclimbing.md.CpTGTCle.js → hillclimbing.md.BOiVo1tf.js} +1 -1
  68. package/dist/docs/assets/index.md.DD9Q2XuJ.js +5 -0
  69. package/dist/docs/assets/{index.md.BW_6tOgR.lean.js → index.md.DD9Q2XuJ.lean.js} +1 -1
  70. package/dist/docs/assets/{reference_agent-config.md.CHNpiyp4.js → reference_agent-config.md.CvoL6pof.js} +1 -1
  71. package/dist/docs/assets/{reference_channels.md.D-qTqwcq.js → reference_channels.md.CAo-iK4j.js} +2 -2
  72. package/dist/docs/assets/{reference_channels.md.D-qTqwcq.lean.js → reference_channels.md.CAo-iK4j.lean.js} +1 -1
  73. package/dist/docs/assets/{reference_cli.md.Dm67hd2D.js → reference_cli.md.Deg7849l.js} +7 -7
  74. package/dist/docs/assets/{reference_cli.md.Dm67hd2D.lean.js → reference_cli.md.Deg7849l.lean.js} +1 -1
  75. package/dist/docs/assets/{reference_connections.md.Di6jJAXF.js → reference_connections.md.BojkC6c5.js} +1 -1
  76. package/dist/docs/assets/{reference_extensions.md.CGmMLblt.js → reference_extensions.md.ZAVUyuEX.js} +3 -3
  77. package/dist/docs/assets/{reference_hooks.md.Ddt5DdgJ.js → reference_hooks.md.BlM_bOg6.js} +3 -3
  78. package/dist/docs/assets/{reference_hooks.md.Ddt5DdgJ.lean.js → reference_hooks.md.BlM_bOg6.lean.js} +1 -1
  79. package/dist/docs/assets/{reference_http-api.md.oySXBO8o.js → reference_http-api.md.BwaCo-VO.js} +1 -1
  80. package/dist/docs/assets/{reference_playground.md.4myJPxrf.js → reference_playground.md.DLnoaczX.js} +1 -1
  81. package/dist/docs/assets/{reference_playground.md.4myJPxrf.lean.js → reference_playground.md.DLnoaczX.lean.js} +1 -1
  82. package/dist/docs/assets/{reference_project-layout.md.DuBu9a96.js → reference_project-layout.md.BEU8MtQV.js} +3 -3
  83. package/dist/docs/assets/{reference_project-layout.md.DuBu9a96.lean.js → reference_project-layout.md.BEU8MtQV.lean.js} +1 -1
  84. package/dist/docs/assets/reference_sessions.md.CyXV1MUw.js +1 -0
  85. package/dist/docs/assets/{scaffolding-agents.md.em43xlY1.js → scaffolding-agents.md.Kctn3OVb.js} +1 -1
  86. package/dist/docs/assets/{skills_create-agent.md.BVoWPcan.js → skills_create-agent.md.Q3h6Je-e.js} +1 -1
  87. package/dist/docs/assets/{skills_debug.md.CDbPhHfg.js → skills_debug.md.CVjCXMFF.js} +1 -1
  88. package/dist/docs/assets/{skills_debug.md.CDbPhHfg.lean.js → skills_debug.md.CVjCXMFF.lean.js} +1 -1
  89. package/dist/docs/assets/skills_deploy.md.CWqi_ZxW.js +35 -0
  90. package/dist/docs/assets/skills_deploy.md.CWqi_ZxW.lean.js +1 -0
  91. package/dist/docs/assets/skills_evals.md.DFxYPErF.js +25 -0
  92. package/dist/docs/assets/skills_evals.md.DFxYPErF.lean.js +1 -0
  93. package/dist/docs/assets/skills_framework-map.md.BxLSOhSY.js +1 -0
  94. package/dist/docs/assets/{skills_framework-map.md.haibFyoB.lean.js → skills_framework-map.md.BxLSOhSY.lean.js} +1 -1
  95. package/dist/docs/assets/{skills_github.md.D0JahM8c.js → skills_github.md.hgFX_oKY.js} +1 -1
  96. package/dist/docs/assets/skills_index.md.DL7EHaQ-.js +1 -0
  97. package/dist/docs/assets/skills_index.md.DL7EHaQ-.lean.js +1 -0
  98. package/dist/docs/assets/{storage.md.BOHeqk2M.js → storage.md.BUrhJ-Zz.js} +4 -4
  99. package/dist/docs/assets/{storage.md.BOHeqk2M.lean.js → storage.md.BUrhJ-Zz.lean.js} +1 -1
  100. package/dist/docs/assets/troubleshooting.md.CYEAO9bM.js +1 -0
  101. package/dist/docs/building-with-agents.html +5 -5
  102. package/dist/docs/building-with-agents.md +3 -2
  103. package/dist/docs/concepts.html +5 -5
  104. package/dist/docs/concepts.md +2 -4
  105. package/dist/docs/deployment.html +7 -7
  106. package/dist/docs/deployment.md +7 -2
  107. package/dist/docs/evals.html +161 -35
  108. package/dist/docs/evals.md +612 -296
  109. package/dist/docs/guides/agent-to-agent.html +4 -4
  110. package/dist/docs/guides/bitbucket.html +36 -0
  111. package/dist/docs/guides/bitbucket.md +84 -0
  112. package/dist/docs/guides/cloud-agents.html +6 -6
  113. package/dist/docs/guides/cloud-agents.md +4 -3
  114. package/dist/docs/guides/convert-automation.html +4 -4
  115. package/dist/docs/guides/github.html +17 -7
  116. package/dist/docs/guides/github.md +33 -1
  117. package/dist/docs/guides/gitlab.html +40 -0
  118. package/dist/docs/guides/gitlab.md +92 -0
  119. package/dist/docs/guides/grokbot-agents.html +6 -6
  120. package/dist/docs/guides/grokbot-agents.md +2 -2
  121. package/dist/docs/guides/human-in-the-loop.html +4 -4
  122. package/dist/docs/guides/improve.html +40 -0
  123. package/dist/docs/guides/improve.md +91 -0
  124. package/dist/docs/guides/mcp-oauth.html +4 -4
  125. package/dist/docs/guides/opentelemetry.html +5 -5
  126. package/dist/docs/guides/slack.html +7 -7
  127. package/dist/docs/guides/slack.md +2 -1
  128. package/dist/docs/guides/webhooks.html +6 -6
  129. package/dist/docs/guides/webhooks.md +4 -2
  130. package/dist/docs/hashmap.json +1 -1
  131. package/dist/docs/hillclimbing.html +6 -6
  132. package/dist/docs/hillclimbing.md +2 -2
  133. package/dist/docs/index.html +6 -6
  134. package/dist/docs/index.md +14 -6
  135. package/dist/docs/llms-full.txt +1274 -814
  136. package/dist/docs/llms.txt +7 -5
  137. package/dist/docs/quickstart.html +4 -4
  138. package/dist/docs/reference/agent-config.html +6 -6
  139. package/dist/docs/reference/agent-config.md +5 -2
  140. package/dist/docs/reference/artifacts.html +4 -4
  141. package/dist/docs/reference/channels.html +6 -6
  142. package/dist/docs/reference/channels.md +16 -3
  143. package/dist/docs/reference/cli.html +11 -11
  144. package/dist/docs/reference/cli.md +24 -15
  145. package/dist/docs/reference/connections.html +6 -6
  146. package/dist/docs/reference/connections.md +2 -1
  147. package/dist/docs/reference/extensions.html +8 -8
  148. package/dist/docs/reference/extensions.md +2 -3
  149. package/dist/docs/reference/hooks.html +7 -7
  150. package/dist/docs/reference/hooks.md +9 -12
  151. package/dist/docs/reference/http-api.html +6 -6
  152. package/dist/docs/reference/http-api.md +2 -3
  153. package/dist/docs/reference/instructions.html +4 -4
  154. package/dist/docs/reference/playground.html +5 -5
  155. package/dist/docs/reference/playground.md +0 -4
  156. package/dist/docs/reference/project-layout.html +7 -7
  157. package/dist/docs/reference/project-layout.md +1 -8
  158. package/dist/docs/reference/prompt.html +4 -4
  159. package/dist/docs/reference/result.html +4 -4
  160. package/dist/docs/reference/schedules.html +4 -4
  161. package/dist/docs/reference/sessions.html +5 -5
  162. package/dist/docs/reference/sessions.md +1 -2
  163. package/dist/docs/reference/skills.html +4 -4
  164. package/dist/docs/reference/subagents.html +4 -4
  165. package/dist/docs/reference/tools.html +4 -4
  166. package/dist/docs/scaffolding-agents.html +5 -5
  167. package/dist/docs/scaffolding-agents.md +2 -1
  168. package/dist/docs/skills/create-agent.html +6 -6
  169. package/dist/docs/skills/create-agent.md +1 -1
  170. package/dist/docs/skills/debug.html +5 -5
  171. package/dist/docs/skills/debug.md +1 -1
  172. package/dist/docs/skills/deploy.html +61 -0
  173. package/dist/docs/skills/deploy.md +161 -0
  174. package/dist/docs/skills/evals.html +8 -8
  175. package/dist/docs/skills/evals.md +44 -6
  176. package/dist/docs/skills/framework-map.html +5 -5
  177. package/dist/docs/skills/framework-map.md +5 -4
  178. package/dist/docs/skills/github.html +6 -6
  179. package/dist/docs/skills/github.md +1 -1
  180. package/dist/docs/skills/hillclimb.html +4 -4
  181. package/dist/docs/skills/index.html +6 -6
  182. package/dist/docs/skills/index.md +1 -1
  183. package/dist/docs/skills/mcp-auth.html +4 -4
  184. package/dist/docs/skills/otel.html +4 -4
  185. package/dist/docs/skills/setup-slack.html +4 -4
  186. package/dist/docs/storage.html +8 -8
  187. package/dist/docs/storage.md +15 -24
  188. package/dist/docs/templates/agentic-owners.html +4 -4
  189. package/dist/docs/templates/agents-md.html +4 -4
  190. package/dist/docs/templates/code-wiki.html +4 -4
  191. package/dist/docs/templates/demo.html +4 -4
  192. package/dist/docs/templates/grokbot-agents.html +4 -4
  193. package/dist/docs/templates/pr-autofixer.html +4 -4
  194. package/dist/docs/templates/security-help.html +4 -4
  195. package/dist/docs/templates/security-reviewer.html +4 -4
  196. package/dist/docs/templates/triage.html +4 -4
  197. package/dist/docs/troubleshooting.html +5 -5
  198. package/dist/docs/troubleshooting.md +1 -1
  199. package/dist/extensions/improve/extension.d.ts +46 -0
  200. package/dist/extensions/improve/extension.d.ts.map +1 -0
  201. package/dist/extensions/improve/extension.js +41 -0
  202. package/dist/extensions/improve/skills/yourself.d.ts +4 -0
  203. package/dist/extensions/improve/skills/yourself.d.ts.map +1 -0
  204. package/dist/extensions/improve/skills/yourself.js +43 -0
  205. package/dist/extensions.d.ts +2 -3
  206. package/dist/extensions.d.ts.map +1 -1
  207. package/dist/extensions.js +2 -5
  208. package/dist/index.d.ts +2 -3
  209. package/dist/index.d.ts.map +1 -1
  210. package/dist/index.js +1 -2
  211. package/dist/internal/authored-alias-hooks.d.ts +5 -0
  212. package/dist/internal/authored-alias-hooks.d.ts.map +1 -1
  213. package/dist/internal/authored-alias-hooks.js +17 -0
  214. package/dist/internal/authored-loaders.d.ts +4 -0
  215. package/dist/internal/authored-loaders.d.ts.map +1 -1
  216. package/dist/internal/authored-loaders.js +21 -2
  217. package/dist/internal/builtin-tools/artifacts.d.ts.map +1 -1
  218. package/dist/internal/builtin-tools/artifacts.js +2 -3
  219. package/dist/internal/channel-route-dispatch.d.ts +13 -0
  220. package/dist/internal/channel-route-dispatch.d.ts.map +1 -0
  221. package/dist/internal/channel-route-dispatch.js +62 -0
  222. package/dist/internal/channel-state.d.ts +17 -0
  223. package/dist/internal/channel-state.d.ts.map +1 -0
  224. package/dist/internal/channel-state.js +78 -0
  225. package/dist/internal/cli-ax.d.ts +8 -2
  226. package/dist/internal/cli-ax.d.ts.map +1 -1
  227. package/dist/internal/cli-ax.js +100 -3
  228. package/dist/internal/cli-cursor.d.ts.map +1 -1
  229. package/dist/internal/cli-cursor.js +2 -0
  230. package/dist/internal/cli-deploy.d.ts.map +1 -1
  231. package/dist/internal/cli-deploy.js +38 -14
  232. package/dist/internal/cli-mcp-oauth.d.ts.map +1 -1
  233. package/dist/internal/cli-mcp-oauth.js +15 -0
  234. package/dist/internal/cli-mcp.d.ts.map +1 -1
  235. package/dist/internal/cli-mcp.js +12 -0
  236. package/dist/internal/cli-slack.d.ts.map +1 -1
  237. package/dist/internal/cli-slack.js +8 -2
  238. package/dist/internal/continuation-channel.d.ts.map +1 -1
  239. package/dist/internal/continuation-channel.js +2 -2
  240. package/dist/internal/continuation-identity.js +8 -3
  241. package/dist/internal/cursor/credentials.d.ts +8 -2
  242. package/dist/internal/cursor/credentials.d.ts.map +1 -1
  243. package/dist/internal/cursor/credentials.js +27 -5
  244. package/dist/internal/deploy-client.d.ts +27 -0
  245. package/dist/internal/deploy-client.d.ts.map +1 -1
  246. package/dist/internal/deploy-client.js +32 -0
  247. package/dist/internal/deploy-manifest.d.ts +23 -0
  248. package/dist/internal/deploy-manifest.d.ts.map +1 -1
  249. package/dist/internal/deploy-manifest.js +84 -1
  250. package/dist/internal/describe-error.d.ts +1 -0
  251. package/dist/internal/describe-error.d.ts.map +1 -1
  252. package/dist/internal/describe-error.js +25 -0
  253. package/dist/internal/discovery/agent.d.ts +1 -1
  254. package/dist/internal/discovery/agent.d.ts.map +1 -1
  255. package/dist/internal/discovery/agent.js +0 -5
  256. package/dist/internal/discovery/extension-overlay.d.ts +1 -2
  257. package/dist/internal/discovery/extension-overlay.d.ts.map +1 -1
  258. package/dist/internal/discovery/extension-overlay.js +0 -14
  259. package/dist/internal/discovery/extensions.d.ts +1 -2
  260. package/dist/internal/discovery/extensions.d.ts.map +1 -1
  261. package/dist/internal/discovery/extensions.js +4 -22
  262. package/dist/internal/discovery/info.d.ts.map +1 -1
  263. package/dist/internal/discovery/info.js +42 -24
  264. package/dist/internal/discovery/modules.js +0 -1
  265. package/dist/internal/discovery/project.d.ts.map +1 -1
  266. package/dist/internal/discovery/project.js +0 -16
  267. package/dist/internal/eval-runner.js +0 -1
  268. package/dist/internal/framework-file-storage.d.ts +4 -5
  269. package/dist/internal/framework-file-storage.d.ts.map +1 -1
  270. package/dist/internal/framework-file-storage.js +4 -5
  271. package/dist/internal/framework-storage-selection.d.ts +2 -2
  272. package/dist/internal/framework-storage-selection.js +2 -2
  273. package/dist/internal/guest-network.d.ts +4 -10
  274. package/dist/internal/guest-network.d.ts.map +1 -1
  275. package/dist/internal/guest-network.js +42 -26
  276. package/dist/internal/hosted-admission-adapter.d.ts +2 -0
  277. package/dist/internal/hosted-admission-adapter.d.ts.map +1 -1
  278. package/dist/internal/hosted-catch-protocol.d.ts +51 -0
  279. package/dist/internal/hosted-catch-protocol.d.ts.map +1 -0
  280. package/dist/internal/hosted-catch-protocol.js +103 -0
  281. package/dist/internal/hosted-catch.d.ts +40 -0
  282. package/dist/internal/hosted-catch.d.ts.map +1 -0
  283. package/dist/internal/hosted-catch.js +149 -0
  284. package/dist/internal/hosted-delivery-protocol.d.ts +41 -0
  285. package/dist/internal/hosted-delivery-protocol.d.ts.map +1 -1
  286. package/dist/internal/hosted-delivery-protocol.js +249 -0
  287. package/dist/internal/hosted-delivery.d.ts +10 -1
  288. package/dist/internal/hosted-delivery.d.ts.map +1 -1
  289. package/dist/internal/hosted-delivery.js +100 -22
  290. package/dist/internal/hosted-execution-diag.d.ts +4 -1
  291. package/dist/internal/hosted-execution-diag.d.ts.map +1 -1
  292. package/dist/internal/hosted-execution-diag.js +13 -4
  293. package/dist/internal/hosted-execution-flush.d.ts +3 -0
  294. package/dist/internal/hosted-execution-flush.d.ts.map +1 -1
  295. package/dist/internal/hosted-execution-flush.js +2 -4
  296. package/dist/internal/http-control-plane-session.d.ts +30 -0
  297. package/dist/internal/http-control-plane-session.d.ts.map +1 -0
  298. package/dist/internal/http-control-plane-session.js +83 -0
  299. package/dist/internal/init-scaffold.d.ts.map +1 -1
  300. package/dist/internal/init-scaffold.js +1 -2
  301. package/dist/internal/install-cursor-skills.d.ts +5 -2
  302. package/dist/internal/install-cursor-skills.d.ts.map +1 -1
  303. package/dist/internal/install-cursor-skills.js +25 -5
  304. package/dist/internal/legacy-command-guard.d.ts +22 -0
  305. package/dist/internal/legacy-command-guard.d.ts.map +1 -0
  306. package/dist/internal/legacy-command-guard.js +51 -0
  307. package/dist/internal/platform-timers.d.ts +7 -0
  308. package/dist/internal/platform-timers.d.ts.map +1 -1
  309. package/dist/internal/platform-timers.js +139 -0
  310. package/dist/internal/reminder-control-plane-protocol.d.ts +2 -0
  311. package/dist/internal/reminder-control-plane-protocol.d.ts.map +1 -1
  312. package/dist/internal/reminder-control-plane-protocol.js +9 -2
  313. package/dist/internal/reminder-runner.d.ts +8 -0
  314. package/dist/internal/reminder-runner.d.ts.map +1 -1
  315. package/dist/internal/reminder-runner.js +36 -9
  316. package/dist/internal/resolve-prod-target.d.ts +2 -0
  317. package/dist/internal/resolve-prod-target.d.ts.map +1 -1
  318. package/dist/internal/resolve-prod-target.js +13 -0
  319. package/dist/internal/run-client.d.ts +1 -1
  320. package/dist/internal/sdk-runner.d.ts.map +1 -1
  321. package/dist/internal/sdk-runner.js +5 -4
  322. package/dist/internal/server.d.ts.map +1 -1
  323. package/dist/internal/server.js +57 -70
  324. package/dist/internal/session-engine.d.ts +7 -41
  325. package/dist/internal/session-engine.d.ts.map +1 -1
  326. package/dist/internal/session-engine.js +110 -227
  327. package/dist/internal/storage-coordinator.d.ts +5 -19
  328. package/dist/internal/storage-coordinator.d.ts.map +1 -1
  329. package/dist/internal/storage-coordinator.js +3 -62
  330. package/dist/internal/storage-roles.d.ts +4 -9
  331. package/dist/internal/storage-roles.d.ts.map +1 -1
  332. package/dist/internal/storage-roles.js +2 -2
  333. package/dist/playground/assets/index-Bhxzrcf6.css +1 -0
  334. package/dist/playground/assets/index-CqLX5uF3.js +67 -0
  335. package/dist/playground/index.html +2 -2
  336. package/dist/storage-backends/cursor-hosted-v2.d.ts +4 -5
  337. package/dist/storage-backends/cursor-hosted-v2.d.ts.map +1 -1
  338. package/dist/storage-backends/cursor-hosted-v2.js +4 -5
  339. package/dist/storage-backends/cursor-hosted.d.ts +7 -2
  340. package/dist/storage-backends/cursor-hosted.d.ts.map +1 -1
  341. package/dist/storage-backends/cursor-hosted.js +29 -31
  342. package/dist/storage-backends/file-kv.d.ts +9 -12
  343. package/dist/storage-backends/file-kv.d.ts.map +1 -1
  344. package/dist/storage-backends/file-kv.js +11 -47
  345. package/dist/storage-protocol.d.ts +3 -11
  346. package/dist/storage-protocol.d.ts.map +1 -1
  347. package/dist/storage-protocol.js +3 -11
  348. package/dist/storage.d.ts +8 -36
  349. package/dist/storage.d.ts.map +1 -1
  350. package/dist/storage.js +8 -44
  351. package/dist/types.d.ts +53 -62
  352. package/dist/types.d.ts.map +1 -1
  353. package/docs/README.md +14 -6
  354. package/docs/building-with-agents.md +3 -2
  355. package/docs/concepts.md +2 -4
  356. package/docs/deployment.md +7 -2
  357. package/docs/evals.md +613 -297
  358. package/docs/guides/bitbucket.md +89 -0
  359. package/docs/guides/cloud-agents.md +4 -3
  360. package/docs/guides/github.md +33 -1
  361. package/docs/guides/gitlab.md +97 -0
  362. package/docs/guides/grokbot-agents.md +2 -2
  363. package/docs/guides/improve.md +96 -0
  364. package/docs/guides/slack.md +2 -1
  365. package/docs/guides/webhooks.md +4 -2
  366. package/docs/hillclimbing.md +2 -2
  367. package/docs/reference/agent-config.md +5 -2
  368. package/docs/reference/channels.md +16 -3
  369. package/docs/reference/cli.md +24 -15
  370. package/docs/reference/connections.md +2 -1
  371. package/docs/reference/extensions.md +2 -3
  372. package/docs/reference/hooks.md +9 -12
  373. package/docs/reference/http-api.md +2 -3
  374. package/docs/reference/playground.md +0 -4
  375. package/docs/reference/project-layout.md +1 -8
  376. package/docs/reference/sessions.md +1 -2
  377. package/docs/scaffolding-agents.md +2 -1
  378. package/docs/skills/index.md +2 -2
  379. package/docs/storage.md +15 -24
  380. package/docs/troubleshooting.md +1 -1
  381. package/package.json +8 -7
  382. package/skills/create-agent/SKILL.md +1 -1
  383. package/skills/debug/SKILL.md +1 -1
  384. package/skills/deploy/SKILL.md +169 -0
  385. package/skills/evals/SKILL.md +45 -8
  386. package/skills/framework-map/SKILL.md +5 -4
  387. package/skills/github/SKILL.md +1 -1
  388. package/src/bin/agent-serve.ts +27 -2
  389. package/src/channels/bitbucket/api.ts +341 -0
  390. package/src/channels/bitbucket/binding.ts +25 -0
  391. package/src/channels/bitbucket/index.ts +2 -0
  392. package/src/channels/github/github-channel.ts +8 -8
  393. package/src/channels/github/types.ts +5 -0
  394. package/src/channels/gitlab/api.ts +123 -0
  395. package/src/channels/gitlab/binding.ts +12 -0
  396. package/src/channels/gitlab/index.ts +1 -0
  397. package/src/channels/origin/origin-channel.ts +29 -13
  398. package/src/channels/origin/types.ts +5 -0
  399. package/src/channels/slack/dispatch.ts +30 -0
  400. package/src/channels/slack/slack-channel.ts +69 -7
  401. package/src/channels.ts +157 -10
  402. package/src/connections.ts +2 -1
  403. package/src/extensions/improve/extension.ts +70 -0
  404. package/src/extensions/improve/skills/yourself.ts +50 -0
  405. package/src/extensions.ts +2 -6
  406. package/src/index.ts +0 -3
  407. package/src/internal/authored-alias-hooks.ts +32 -0
  408. package/src/internal/authored-loaders.ts +26 -2
  409. package/src/internal/builtin-tools/artifacts.ts +2 -3
  410. package/src/internal/channel-route-dispatch.ts +66 -0
  411. package/src/internal/channel-state.ts +96 -0
  412. package/src/internal/cli-ax.ts +111 -3
  413. package/src/internal/cli-cursor.ts +4 -1
  414. package/src/internal/cli-deploy.ts +50 -10
  415. package/src/internal/cli-mcp-oauth.ts +18 -0
  416. package/src/internal/cli-mcp.ts +11 -0
  417. package/src/internal/cli-slack.ts +15 -2
  418. package/src/internal/continuation-channel.ts +2 -1
  419. package/src/internal/continuation-identity.ts +10 -2
  420. package/src/internal/cursor/credentials.ts +35 -7
  421. package/src/internal/deploy-client.ts +54 -0
  422. package/src/internal/deploy-manifest.ts +115 -1
  423. package/src/internal/describe-error.ts +28 -0
  424. package/src/internal/discovery/agent.ts +1 -7
  425. package/src/internal/discovery/extension-overlay.ts +0 -18
  426. package/src/internal/discovery/extensions.ts +2 -26
  427. package/src/internal/discovery/info.ts +3 -13
  428. package/src/internal/discovery/modules.ts +0 -1
  429. package/src/internal/discovery/project.ts +0 -16
  430. package/src/internal/eval-runner.ts +0 -1
  431. package/src/internal/framework-file-storage.ts +4 -5
  432. package/src/internal/framework-storage-selection.ts +2 -2
  433. package/src/internal/guest-network.ts +43 -29
  434. package/src/internal/hosted-admission-adapter.ts +2 -0
  435. package/src/internal/hosted-catch-protocol.ts +130 -0
  436. package/src/internal/hosted-catch.ts +192 -0
  437. package/src/internal/hosted-delivery-protocol.ts +387 -0
  438. package/src/internal/hosted-delivery.ts +155 -22
  439. package/src/internal/hosted-execution-diag.ts +21 -3
  440. package/src/internal/hosted-execution-flush.ts +6 -3
  441. package/src/internal/http-control-plane-session.ts +104 -0
  442. package/src/internal/init-scaffold.ts +1 -2
  443. package/src/internal/install-cursor-skills.ts +38 -5
  444. package/src/internal/legacy-command-guard.ts +59 -0
  445. package/src/internal/platform-timers.ts +191 -0
  446. package/src/internal/reminder-control-plane-protocol.ts +15 -2
  447. package/src/internal/reminder-runner.ts +60 -9
  448. package/src/internal/resolve-prod-target.ts +15 -0
  449. package/src/internal/run-client.ts +1 -1
  450. package/src/internal/sdk-runner.ts +3 -2
  451. package/src/internal/server.ts +89 -95
  452. package/src/internal/session-engine.ts +155 -285
  453. package/src/internal/storage-coordinator.ts +5 -76
  454. package/src/internal/storage-roles.ts +4 -9
  455. package/src/storage-backends/cursor-hosted-v2.ts +4 -7
  456. package/src/storage-backends/cursor-hosted.ts +40 -38
  457. package/src/storage-backends/file-kv.ts +10 -51
  458. package/src/storage-protocol.ts +3 -17
  459. package/src/storage.ts +10 -101
  460. package/src/types.ts +58 -62
  461. package/templates/demo/README.md +10 -6
  462. package/templates/demo/agent/channels/github.ts +2 -0
  463. package/templates/demo/agent/channels/queue.ts +6 -2
  464. package/templates/demo/agent/lib/repos.ts +5 -0
  465. package/templates/demo/init.json +25 -0
  466. package/dist/ab.d.ts +0 -209
  467. package/dist/ab.d.ts.map +0 -1
  468. package/dist/ab.js +0 -246
  469. package/dist/docs/ab.html +0 -80
  470. package/dist/docs/ab.md +0 -332
  471. package/dist/docs/assets/ab.md.mlVgqvSk.js +0 -54
  472. package/dist/docs/assets/ab.md.mlVgqvSk.lean.js +0 -1
  473. package/dist/docs/assets/chunks/@localSearchIndexroot.DXXZxiMv.js +0 -1
  474. package/dist/docs/assets/concepts.md.DgEcZOfT.js +0 -1
  475. package/dist/docs/assets/evals.md.CbMoebP1.js +0 -85
  476. package/dist/docs/assets/evals.md.CbMoebP1.lean.js +0 -1
  477. package/dist/docs/assets/guides_cloud-agents.md.DS8RIjwx.js +0 -9
  478. package/dist/docs/assets/index.md.BW_6tOgR.js +0 -5
  479. package/dist/docs/assets/reference_sessions.md.CueyOHSL.js +0 -1
  480. package/dist/docs/assets/skills_ab.md.CsFNatVx.js +0 -26
  481. package/dist/docs/assets/skills_ab.md.CsFNatVx.lean.js +0 -1
  482. package/dist/docs/assets/skills_evals.md.723kpUmA.js +0 -25
  483. package/dist/docs/assets/skills_evals.md.723kpUmA.lean.js +0 -1
  484. package/dist/docs/assets/skills_framework-map.md.haibFyoB.js +0 -1
  485. package/dist/docs/assets/skills_index.md.DKwIxzGg.js +0 -1
  486. package/dist/docs/assets/skills_index.md.DKwIxzGg.lean.js +0 -1
  487. package/dist/docs/assets/troubleshooting.md.Cus_YZga.js +0 -1
  488. package/dist/docs/skills/ab.html +0 -52
  489. package/dist/docs/skills/ab.md +0 -50
  490. package/dist/internal/ab-collector.d.ts +0 -44
  491. package/dist/internal/ab-collector.d.ts.map +0 -1
  492. package/dist/internal/ab-collector.js +0 -142
  493. package/dist/internal/ab-fold.d.ts +0 -36
  494. package/dist/internal/ab-fold.d.ts.map +0 -1
  495. package/dist/internal/ab-fold.js +0 -175
  496. package/dist/internal/ab-snapshot.d.ts +0 -68
  497. package/dist/internal/ab-snapshot.d.ts.map +0 -1
  498. package/dist/internal/ab-snapshot.js +0 -208
  499. package/dist/internal/discovery/ab.d.ts +0 -9
  500. package/dist/internal/discovery/ab.d.ts.map +0 -1
  501. package/dist/internal/discovery/ab.js +0 -113
  502. package/dist/playground/assets/index-Bq2HpEQB.js +0 -67
  503. package/dist/playground/assets/index-CZKKNlmb.css +0 -1
  504. package/docs/ab.md +0 -337
  505. package/skills/ab/SKILL.md +0 -58
  506. package/src/ab.ts +0 -430
  507. package/src/internal/ab-collector.ts +0 -200
  508. package/src/internal/ab-fold.ts +0 -232
  509. package/src/internal/ab-snapshot.ts +0 -331
  510. package/src/internal/discovery/ab.ts +0 -131
  511. /package/dist/docs/assets/{concepts.md.DgEcZOfT.lean.js → concepts.md.B4o63Gul.lean.js} +0 -0
  512. /package/dist/docs/assets/{guides_grokbot-agents.md.DVqdhBKb.lean.js → guides_grokbot-agents.md.DyV-WArv.lean.js} +0 -0
  513. /package/dist/docs/assets/{guides_webhooks.md.DKdA43Qm.lean.js → guides_webhooks.md.CJK484ex.lean.js} +0 -0
  514. /package/dist/docs/assets/{hillclimbing.md.CpTGTCle.lean.js → hillclimbing.md.BOiVo1tf.lean.js} +0 -0
  515. /package/dist/docs/assets/{reference_agent-config.md.CHNpiyp4.lean.js → reference_agent-config.md.CvoL6pof.lean.js} +0 -0
  516. /package/dist/docs/assets/{reference_connections.md.Di6jJAXF.lean.js → reference_connections.md.BojkC6c5.lean.js} +0 -0
  517. /package/dist/docs/assets/{reference_extensions.md.CGmMLblt.lean.js → reference_extensions.md.ZAVUyuEX.lean.js} +0 -0
  518. /package/dist/docs/assets/{reference_http-api.md.oySXBO8o.lean.js → reference_http-api.md.BwaCo-VO.lean.js} +0 -0
  519. /package/dist/docs/assets/{reference_sessions.md.CueyOHSL.lean.js → reference_sessions.md.CyXV1MUw.lean.js} +0 -0
  520. /package/dist/docs/assets/{scaffolding-agents.md.em43xlY1.lean.js → scaffolding-agents.md.Kctn3OVb.lean.js} +0 -0
  521. /package/dist/docs/assets/{skills_create-agent.md.BVoWPcan.lean.js → skills_create-agent.md.Q3h6Je-e.lean.js} +0 -0
  522. /package/dist/docs/assets/{skills_github.md.D0JahM8c.lean.js → skills_github.md.hgFX_oKY.lean.js} +0 -0
  523. /package/dist/docs/assets/{troubleshooting.md.Cus_YZga.lean.js → troubleshooting.md.CYEAO9bM.lean.js} +0 -0
@@ -11,7 +11,7 @@
11
11
  */
12
12
 
13
13
  import { basename, resolve } from "node:path";
14
- import { isPublicEndpointPolicy } from "../channels.js";
14
+ import { catchAuthDeclaration, isPublicEndpointPolicy } from "../channels.js";
15
15
  import {
16
16
  type AgentArchitecture,
17
17
  type AgentHostingOptions,
@@ -62,6 +62,10 @@ import {
62
62
  isValidCursorEventRepo,
63
63
  validateSettableSecretName,
64
64
  } from "./hosting.js";
65
+ import {
66
+ deploymentArchitecture,
67
+ rejectV2ForLegacyCommand,
68
+ } from "./legacy-command-guard.js";
65
69
  import { deployProgressLabel, sanitizeCustomerError } from "./logs-client.js";
66
70
  import { sleep } from "./sleep.js";
67
71
  import { stderrPalette } from "./terminal-style.js";
@@ -739,6 +743,17 @@ async function deployOne(
739
743
  ` public: ${publicRoutePaths.join(", ")} (served WITHOUT the alias token — these channels authenticate requests themselves)\n`
740
744
  );
741
745
  }
746
+ const deadSecretChannels =
747
+ manifest?.publicChannelIdsWithDeadSecretPolicies ?? [];
748
+ if (!ctx.json && deadSecretChannels.length > 0) {
749
+ ctx.err(
750
+ `warning: ${deadSecretChannels
751
+ .map((channelId) => `/v1/channels/${channelId}`)
752
+ .join(
753
+ ", "
754
+ )}: publicEndpoint() sits beside sharedSecretAuth()/hmacSignatureAuth() — auth chains are any-of, so every request is admitted and those secret policies never run. Drop publicEndpoint() to enforce them, or drop them to make the intent explicit.\n`
755
+ );
756
+ }
742
757
 
743
758
  if (manifest?.architecture === "v2") {
744
759
  if (!ctx.json) {
@@ -1192,6 +1207,13 @@ interface DeployManifest {
1192
1207
  * `X-Agent-Alias-Token` (the channel authenticates deliveries itself).
1193
1208
  */
1194
1209
  publicChannelIds: string[];
1210
+ /**
1211
+ * Public channels whose auth chain also carries `sharedSecretAuth` /
1212
+ * `hmacSignatureAuth`. Chains are any-of, so `publicEndpoint()` admits
1213
+ * every request and those secret policies never gate anything — locally
1214
+ * or on the control plane; surfaced as a warning.
1215
+ */
1216
+ publicChannelIdsWithDeadSecretPolicies: string[];
1195
1217
  /**
1196
1218
  * `publicEndpoint()` on the built-in HTTP channel — a no-op on hosting
1197
1219
  * (only `/v1/channels/…` subtrees can be public); surfaced as a warning.
@@ -1240,6 +1262,18 @@ async function readDeployManifest(dir: string): Promise<DeployManifest> {
1240
1262
  (channel.definition.auth ?? []).some(isPublicEndpointPolicy)
1241
1263
  )
1242
1264
  .map((channel) => channel.id),
1265
+ publicChannelIdsWithDeadSecretPolicies: project.channels
1266
+ .filter((channel) => {
1267
+ const auth = channel.definition.auth ?? [];
1268
+ return (
1269
+ auth.some(isPublicEndpointPolicy) &&
1270
+ auth.some((policy) => {
1271
+ const kind = catchAuthDeclaration(policy)?.kind;
1272
+ return kind !== undefined && kind !== "public";
1273
+ })
1274
+ );
1275
+ })
1276
+ .map((channel) => channel.id),
1243
1277
  httpChannelPublicEndpoint: (project.httpChannel.auth ?? []).some(
1244
1278
  isPublicEndpointPolicy
1245
1279
  ),
@@ -1636,6 +1670,11 @@ export async function cmdRotateToken(
1636
1670
  }
1637
1671
  let aliasToken: string;
1638
1672
  try {
1673
+ await rejectV2ForLegacyCommand({
1674
+ client: ctx.client,
1675
+ teamId: ctx.teamId,
1676
+ slug,
1677
+ });
1639
1678
  aliasToken = await ctx.client.rotateAliasToken({
1640
1679
  teamId: ctx.teamId,
1641
1680
  slug,
@@ -1673,6 +1712,11 @@ export async function cmdRotatePodCredential(
1673
1712
  }
1674
1713
  let podCredentialMaskedKey: string;
1675
1714
  try {
1715
+ await rejectV2ForLegacyCommand({
1716
+ client: ctx.client,
1717
+ teamId: ctx.teamId,
1718
+ slug,
1719
+ });
1676
1720
  podCredentialMaskedKey = await ctx.client.rotatePodCredential({
1677
1721
  teamId: ctx.teamId,
1678
1722
  slug,
@@ -1699,15 +1743,11 @@ async function secretDeploymentArchitecture(
1699
1743
  ctx: DeployCliContext,
1700
1744
  slug: string
1701
1745
  ): Promise<"v1" | "v2"> {
1702
- try {
1703
- await ctx.client.getAgentkitDeploy({ teamId: ctx.teamId, slug });
1704
- return "v2";
1705
- } catch (error) {
1706
- if (error instanceof DeployApiError && error.status === 404) {
1707
- return "v1";
1708
- }
1709
- throw error;
1710
- }
1746
+ return deploymentArchitecture({
1747
+ client: ctx.client,
1748
+ teamId: ctx.teamId,
1749
+ slug,
1750
+ });
1711
1751
  }
1712
1752
 
1713
1753
  export async function cmdSecretsSet(
@@ -20,6 +20,10 @@ import { authorizeCursorAccountConnectors } from "./cursor-account-mcp-auth.js";
20
20
  import { deploymentServiceAccountId } from "./deploy-client.js";
21
21
  import { loadAgentProject } from "./discovery.js";
22
22
  import { CLI_COMMAND_NAME as CLI, LOG_PREFIX } from "./distribution.js";
23
+ import {
24
+ isUnsupportedV2LegacyCommandError,
25
+ rejectV2ForLegacyCommand,
26
+ } from "./legacy-command-guard.js";
23
27
  import {
24
28
  createHostMcpOAuthProvider,
25
29
  MCP_OAUTH_CALLBACK_URL,
@@ -290,12 +294,21 @@ async function cmdMcpOauthCursorAccount(
290
294
 
291
295
  let serviceAccountId: string | undefined;
292
296
  try {
297
+ await rejectV2ForLegacyCommand({
298
+ client: auth.client,
299
+ teamId: auth.teamId,
300
+ slug,
301
+ });
293
302
  const detail = await auth.client.getDeployment({
294
303
  teamId: auth.teamId,
295
304
  slug,
296
305
  });
297
306
  serviceAccountId = deploymentServiceAccountId(detail);
298
307
  } catch (error) {
308
+ if (isUnsupportedV2LegacyCommandError(error)) {
309
+ err(`${LOG_PREFIX} ${error.message}\n`);
310
+ return 1;
311
+ }
299
312
  err(
300
313
  `${LOG_PREFIX} Could not load deployment "${slug}" (team ${auth.teamId}): ${describe(error)}\n` +
301
314
  `${LOG_PREFIX} Deploy first with \`${CLI} deploy\`.\n`
@@ -382,6 +395,11 @@ async function storeOauthSecrets(args: {
382
395
  }
383
396
 
384
397
  try {
398
+ await rejectV2ForLegacyCommand({
399
+ client: auth.client,
400
+ teamId: auth.teamId,
401
+ slug,
402
+ });
385
403
  const secretNames = await upsertHostMcpOauthSecrets({
386
404
  connection: args.connection,
387
405
  tokens,
@@ -32,6 +32,7 @@ import { dirname, join } from "node:path";
32
32
  import { resolveDeployAuth } from "./cli-deploy.js";
33
33
  import { DeployApiError } from "./deploy-client.js";
34
34
  import { CLI_COMMAND_NAME as CLI, LOG_PREFIX } from "./distribution.js";
35
+ import { rejectV2ForLegacyCommand } from "./legacy-command-guard.js";
35
36
  import {
36
37
  ProdTargetError,
37
38
  resolveProdSlug,
@@ -653,6 +654,16 @@ async function cmdMcpInstallRemote(options: McpCliOptions): Promise<number> {
653
654
  if (typeof auth === "number") {
654
655
  return auth;
655
656
  }
657
+ try {
658
+ await rejectV2ForLegacyCommand({
659
+ client: auth.client,
660
+ teamId: auth.teamId,
661
+ slug,
662
+ });
663
+ } catch (error) {
664
+ err(`${describeError(error)}\n`);
665
+ return 1;
666
+ }
656
667
 
657
668
  // Verify the deployment resolves before writing config that cannot work.
658
669
  // A 403 here is team membership or cloud-agent entitlement, not an
@@ -20,7 +20,10 @@ import {
20
20
  runSlackManifest,
21
21
  type SlackCliExec,
22
22
  } from "./cli-slack-manual.js";
23
- import { cursorExternalApiUrl } from "./cursor/credentials.js";
23
+ import {
24
+ cursorExternalApiUrl,
25
+ resolveApiKeySync,
26
+ } from "./cursor/credentials.js";
24
27
  import { slugFromDirectoryName } from "./deploy-client.js";
25
28
  import { inferDeployGitSource } from "./deploy-source.js";
26
29
  import { describeError } from "./describe-error.js";
@@ -113,7 +116,8 @@ create/destroy/icon — dedicated Socket Mode app via the Cursor dashboard:
113
116
  create Opens the signed-in dashboard wizard. Finish name, workspace,
114
117
  and Slack consent there. The CLI writes the token pair into
115
118
  <dir>/.env.local and runs doctor. Requires \`${CLI} login\`
116
- (or CURSOR_API_KEY). --prod provisions the prod app (default
119
+ (or CURSOR_API_KEY). A team service-account key cannot
120
+ provision Slack apps. --prod provisions the prod app (default
117
121
  dev). --name / --icon / --channel-posts prefill the wizard.
118
122
  destroy Delete the provisioned Slack app for this agent (+env). Tokens
119
123
  already in .env.local are left in place (they just stop working).
@@ -397,6 +401,15 @@ async function prepareProvision(
397
401
  const out =
398
402
  options.out ?? ((text: string) => void process.stdout.write(text));
399
403
  const err = errStream(options);
404
+ const credential = resolveApiKeySync(
405
+ options.apiKey === undefined ? undefined : { apiKey: options.apiKey }
406
+ );
407
+ if (credential?.source === "service-account") {
408
+ err(
409
+ `A team service-account key cannot provision Slack apps. Sign in with \`${CLI} login\` or set CURSOR_API_KEY.\n`
410
+ );
411
+ return 1;
412
+ }
400
413
  const auth = await resolveDeployAuth({
401
414
  team: options.team,
402
415
  apiKey: options.apiKey,
@@ -222,7 +222,8 @@ export function channelDeclaredEventTypes(
222
222
  meta?.gitlabWebhookEvents ??
223
223
  meta?.bitbucketWebhookEvents ??
224
224
  meta?.deploymentEventTypes ??
225
- meta?.factoryEventTypes
225
+ meta?.factoryEventTypes ??
226
+ meta?.slackEventTypes
226
227
  );
227
228
  }
228
229
 
@@ -787,14 +787,22 @@ function extractSlack(payload: unknown): string | undefined {
787
787
  if (record === undefined) {
788
788
  return undefined;
789
789
  }
790
+ // Events-API deliveries are the full event_callback body, so the
791
+ // identity fields live under `event`. Top-level fields still win for
792
+ // pre-flattened payloads (Socket Mode local dev, tests). Keep in
793
+ // lockstep with the control-plane twin (SlackThreadExtractor).
794
+ const event = asRecord(record.event);
790
795
  const channelId =
791
796
  nonEmpty(record.channelId) ??
792
797
  nonEmpty(record.channel_id) ??
793
- nonEmpty(record.channel);
798
+ nonEmpty(record.channel) ??
799
+ nonEmpty(event?.channel);
794
800
  const threadTs =
795
801
  nonEmpty(record.threadTs) ??
796
802
  nonEmpty(record.thread_ts) ??
797
- nonEmpty(record.ts);
803
+ nonEmpty(event?.thread_ts) ??
804
+ nonEmpty(record.ts) ??
805
+ nonEmpty(event?.ts);
798
806
  if (channelId === undefined || threadTs === undefined) {
799
807
  return undefined;
800
808
  }
@@ -176,10 +176,15 @@ export async function clearStoredCredentials(): Promise<boolean> {
176
176
  }
177
177
 
178
178
  // ============================================================================
179
- // Resolution (option > env > file > stored login)
179
+ // Resolution (option > env > file > service account > stored login)
180
180
  // ============================================================================
181
181
 
182
- export type ApiKeySource = "option" | "env" | "file" | "login";
182
+ export type ApiKeySource =
183
+ | "option"
184
+ | "env"
185
+ | "file"
186
+ | "service-account"
187
+ | "login";
183
188
 
184
189
  export interface ResolvedApiKey {
185
190
  apiKey: string;
@@ -274,10 +279,25 @@ export function consumeBoundCursorApiKey(options?: {
274
279
  };
275
280
  }
276
281
 
282
+ function presentEnvKey(name: string): string | undefined {
283
+ const value = process.env[name];
284
+ if (value === undefined) {
285
+ return undefined;
286
+ }
287
+ const trimmed = value.trim();
288
+ return trimmed === "" ? undefined : trimmed;
289
+ }
290
+
277
291
  /**
278
292
  * First present source wins. We define the order; operators do not.
279
293
  * `--api-key` / `serve({ apiKey })` → `CURSOR_API_KEY` → `CURSOR_API_KEY_FILE`
280
- * (hosted default path if unset) → stored `july login`.
294
+ * (hosted default path if unset) → `CURSOR_SERVICE_ACCOUNT_KEY` → stored
295
+ * `july login`.
296
+ *
297
+ * A cloud-agent VM often has the service-account key and no user API key.
298
+ * The explicit key and the hosted bind file still win, so a task credential
299
+ * is not replaced by the ambient service-account key. The service-account
300
+ * key wins over a leftover personal login.
281
301
  */
282
302
  export function resolveApiKeySync(options?: {
283
303
  apiKey?: string;
@@ -287,14 +307,22 @@ export function resolveApiKeySync(options?: {
287
307
  if (options?.apiKey !== undefined && options.apiKey.trim() !== "") {
288
308
  return { apiKey: options.apiKey.trim(), source: "option", backendUrl };
289
309
  }
290
- const envKey = process.env.CURSOR_API_KEY;
291
- if (envKey !== undefined && envKey.trim() !== "") {
292
- return { apiKey: envKey.trim(), source: "env", backendUrl };
310
+ const envKey = presentEnvKey("CURSOR_API_KEY");
311
+ if (envKey !== undefined) {
312
+ return { apiKey: envKey, source: "env", backendUrl };
293
313
  }
294
314
  const fileKey = readApiKeyFromFile();
295
315
  if (fileKey !== undefined) {
296
316
  return { apiKey: fileKey, source: "file", backendUrl };
297
317
  }
318
+ const serviceAccountKey = presentEnvKey("CURSOR_SERVICE_ACCOUNT_KEY");
319
+ if (serviceAccountKey !== undefined) {
320
+ return {
321
+ apiKey: serviceAccountKey,
322
+ source: "service-account",
323
+ backendUrl,
324
+ };
325
+ }
298
326
  const stored = readStoredCredentialsSync();
299
327
  if (stored !== undefined && stored.backendUrl === backendUrl) {
300
328
  return { apiKey: stored.apiKey, source: "login", backendUrl };
@@ -313,7 +341,7 @@ export async function resolveApiKey(options?: {
313
341
  }
314
342
 
315
343
  /** One-line hint for "no credentials" errors, shared across surfaces. */
316
- export const SIGN_IN_HINT: string = `Run \`${CLI_COMMAND_NAME} login\` (or set CURSOR_API_KEY / CURSOR_API_KEY_FILE / pass serve({ apiKey })).`;
344
+ export const SIGN_IN_HINT: string = `Run \`${CLI_COMMAND_NAME} login\` (or set CURSOR_API_KEY / CURSOR_API_KEY_FILE / CURSOR_SERVICE_ACCOUNT_KEY / pass serve({ apiKey })).`;
317
345
 
318
346
  // ============================================================================
319
347
  // PKCE browser login (mirrors cursor-agent / Sand)
@@ -285,6 +285,21 @@ export interface AgentkitStopAccepted {
285
285
  status: string;
286
286
  }
287
287
 
288
+ /**
289
+ * `POST /internal/agentsdk/deployments/:slug/sessions` 202 body. A hosted v2
290
+ * session start is a Temporal delivery: a fresh start allocates `ses_…`
291
+ * only after admission (poll the session list), so the ack is the delivery
292
+ * and workflow ids. `sessionId` is present only when the call resumed one.
293
+ */
294
+ export interface AgentkitStartSessionAccepted {
295
+ deliveryId: string;
296
+ workflowId: string;
297
+ sessionMode: "event" | "continuation";
298
+ sessionId?: string;
299
+ dryRun?: true;
300
+ asOf?: string;
301
+ }
302
+
288
303
  /** One secret's metadata from the list endpoint — names only, never values. */
289
304
  export interface SecretInfo {
290
305
  name: string;
@@ -373,6 +388,17 @@ const agentkitStopAcceptedSchema = z
373
388
  })
374
389
  .passthrough();
375
390
 
391
+ const agentkitStartSessionAcceptedSchema = z
392
+ .object({
393
+ deliveryId: z.string().min(1),
394
+ workflowId: z.string().min(1),
395
+ sessionMode: z.enum(["event", "continuation"]),
396
+ sessionId: z.string().min(1).optional(),
397
+ dryRun: z.literal(true).optional(),
398
+ asOf: z.string().min(1).optional(),
399
+ })
400
+ .passthrough();
401
+
376
402
  const deploymentSchema = z.object({
377
403
  id: z.number(),
378
404
  slug: z.string(),
@@ -691,6 +717,34 @@ export class AgentServeDeployClient {
691
717
  return agentkitStopAcceptedSchema.parse(raw);
692
718
  }
693
719
 
720
+ /**
721
+ * Start (or, with `sessionId`, resume) a hosted v2 session through the
722
+ * control plane (`POST /internal/agentsdk/deployments/:slug/sessions`).
723
+ * Does not talk to the v1 engine alias or `/engine/*`.
724
+ */
725
+ async startSession(args: {
726
+ teamId: number;
727
+ slug: string;
728
+ message: string;
729
+ sessionId?: string;
730
+ dryRun?: boolean;
731
+ asOf?: string;
732
+ }): Promise<AgentkitStartSessionAccepted> {
733
+ const raw = await this.request({
734
+ method: "POST",
735
+ path: `/internal/agentsdk/deployments/${encodeURIComponent(args.slug)}/sessions`,
736
+ body: {
737
+ teamId: args.teamId,
738
+ message: args.message,
739
+ sessionId: args.sessionId,
740
+ dryRun: args.dryRun === true ? true : undefined,
741
+ asOf: args.asOf,
742
+ },
743
+ context: { verb: "start session", slug: args.slug },
744
+ });
745
+ return agentkitStartSessionAcceptedSchema.parse(raw);
746
+ }
747
+
694
748
  async listDeployments(args: { teamId: number }): Promise<Deployment[]> {
695
749
  const raw = await this.request({
696
750
  method: "GET",
@@ -30,7 +30,11 @@
30
30
  */
31
31
 
32
32
  import { z } from "zod";
33
- import { isPublicEndpointPolicy } from "../channels.js";
33
+ import {
34
+ type CatchAuthDeclaration,
35
+ catchAuthDeclaration,
36
+ isPublicEndpointPolicy,
37
+ } from "../channels.js";
34
38
  import { isCursorHostedStorage } from "../storage-backends/cursor-hosted.js";
35
39
  import type { AgentProject, AgentProjectInfo } from "../types.js";
36
40
  import {
@@ -58,6 +62,40 @@ export const DEPLOY_MANIFEST_VERSION: 1 = 1;
58
62
  */
59
63
  const continuationIdentitySchema = z.enum(CONTINUATION_SELECTORS);
60
64
 
65
+ const CATCH_MAX_ROUTES = 32;
66
+ const CATCH_MAX_AUTH_POLICIES = 4;
67
+
68
+ const catchDeclarationSchema = z.object({
69
+ routes: z
70
+ .array(
71
+ z.object({
72
+ method: z.enum(["GET", "POST", "PUT", "PATCH", "DELETE"]),
73
+ path: z.string().min(1).max(1024),
74
+ })
75
+ )
76
+ .min(1)
77
+ .max(CATCH_MAX_ROUTES),
78
+ auth: z
79
+ .array(
80
+ z.discriminatedUnion("kind", [
81
+ z.object({
82
+ kind: z.literal("header"),
83
+ header: z.string().min(1).max(128),
84
+ secret: z.string().min(1).max(64),
85
+ }),
86
+ z.object({
87
+ kind: z.literal("hmac-sha256"),
88
+ header: z.string().min(1).max(128),
89
+ secret: z.string().min(1).max(64),
90
+ prefix: z.string().max(32).optional(),
91
+ }),
92
+ z.object({ kind: z.literal("public") }),
93
+ ])
94
+ )
95
+ .min(1)
96
+ .max(CATCH_MAX_AUTH_POLICIES),
97
+ });
98
+
61
99
  const agentDeployManifestV1Schema = z.object({
62
100
  manifestVersion: z.literal(DEPLOY_MANIFEST_VERSION),
63
101
  generatedAtMs: z.number().int().nonnegative(),
@@ -78,6 +116,7 @@ const agentDeployManifestV1Schema = z.object({
78
116
  kind: z.string().min(1).max(32).optional(),
79
117
  eventTypes: z.array(z.string().min(1).max(64)).max(64).optional(),
80
118
  continuation: continuationIdentitySchema,
119
+ catch: catchDeclarationSchema.optional(),
81
120
  })
82
121
  )
83
122
  .max(64),
@@ -110,7 +149,22 @@ export interface AgentDeployManifestDeclarations {
110
149
  kind?: string;
111
150
  eventTypes?: string[];
112
151
  continuation: ContinuationIdentity;
152
+ /**
153
+ * Control-plane catch routes: present only for an authored channel
154
+ * whose auth chain carries a `sharedSecretAuth` / `hmacSignatureAuth`
155
+ * policy. The control plane accepts exactly these `(method, path)`
156
+ * pairs and verifies the named deployment secret before any compute.
157
+ */
158
+ catch?: AgentDeployManifestCatchDeclaration;
159
+ }>;
160
+ }
161
+
162
+ export interface AgentDeployManifestCatchDeclaration {
163
+ routes: Array<{
164
+ method: "GET" | "POST" | "PUT" | "PATCH" | "DELETE";
165
+ path: string;
113
166
  }>;
167
+ auth: CatchAuthDeclaration[];
114
168
  }
115
169
 
116
170
  export interface AgentDeployManifestV1 {
@@ -158,6 +212,7 @@ export function buildAgentDeployManifest(
158
212
  kind,
159
213
  eventTypes,
160
214
  continuation: channelContinuationIdentity(channel.definition),
215
+ catch: channelCatchDeclaration(channel.definition),
161
216
  };
162
217
  });
163
218
 
@@ -195,6 +250,65 @@ export function buildAgentDeployManifest(
195
250
  };
196
251
  }
197
252
 
253
+ /**
254
+ * Catch declaration for one authored channel: its routes, gated by the
255
+ * catch-capable policies in its auth chain (`sharedSecretAuth`,
256
+ * `hmacSignatureAuth`, or `publicEndpoint()` for handler-verified routes).
257
+ * A routed channel with none of those declares nothing and is not reachable
258
+ * through the catch API.
259
+ */
260
+ export function channelCatchDeclaration(
261
+ definition: AgentProject["channels"][number]["definition"]
262
+ ): AgentDeployManifestCatchDeclaration | undefined {
263
+ const routes = definition.routes ?? [];
264
+ if (routes.length === 0) {
265
+ return undefined;
266
+ }
267
+ const declared = (definition.auth ?? [])
268
+ .map(catchAuthDeclaration)
269
+ .filter((declaration) => declaration !== undefined);
270
+ if (declared.length === 0) {
271
+ return undefined;
272
+ }
273
+ // An auth chain is any-of, so `publicEndpoint()` beside secret policies
274
+ // admits everything locally and on the control plane alike. Declare one
275
+ // `public` entry (the control plane then decrypts nothing) but keep the
276
+ // shared-secret header policies next to it: they are what the control
277
+ // plane uses to strip those header values before the request is
278
+ // claim-checked, and senders keep sending the secret regardless of
279
+ // whether anything still checks it. HMAC policies carry body digests,
280
+ // not secrets, so nothing is lost by dropping them.
281
+ const isPublic = declared.some((policy) => policy.kind === "public");
282
+ const auth = isPublic
283
+ ? [
284
+ { kind: "public" as const },
285
+ ...declared.filter((policy) => policy.kind === "header"),
286
+ ]
287
+ : declared;
288
+ if (routes.length > CATCH_MAX_ROUTES) {
289
+ if (isPublic) {
290
+ // publicEndpoint() channels deployed before catch existed; they stay
291
+ // reachable the way they were (not through catch) rather than
292
+ // failing the deploy.
293
+ return undefined;
294
+ }
295
+ throw new Error(
296
+ `Catch channels may declare at most ${CATCH_MAX_ROUTES} routes (got ${routes.length}).`
297
+ );
298
+ }
299
+ if (auth.length > CATCH_MAX_AUTH_POLICIES) {
300
+ throw new Error(
301
+ isPublic
302
+ ? `Catch channels may declare at most ${CATCH_MAX_AUTH_POLICIES} auth policies; publicEndpoint() plus ${String(auth.length - 1)} sharedSecretAuth() policies is ${String(auth.length)}. Drop publicEndpoint() or the shared-secret policies it makes dead.`
303
+ : `Catch channels may declare at most ${CATCH_MAX_AUTH_POLICIES} secret policies (got ${auth.length}).`
304
+ );
305
+ }
306
+ return {
307
+ routes: routes.map((route) => ({ method: route.method, path: route.path })),
308
+ auth,
309
+ };
310
+ }
311
+
198
312
  /**
199
313
  * Parse an untrusted manifest (round-trip check for the CLI's own output;
200
314
  * the CP re-validates server-side with its own copy of the contract).
@@ -2,3 +2,31 @@
2
2
  export function describeError(error: unknown): string {
3
3
  return error instanceof Error ? error.message : String(error);
4
4
  }
5
+
6
+ export function describeErrorCode(error: unknown): string | undefined {
7
+ if (typeof error === "object" && error !== null && "code" in error) {
8
+ const numericCode = (error as { code?: unknown }).code;
9
+ if (numericCode === 1) {
10
+ return "canceled";
11
+ }
12
+ if (numericCode === 14) {
13
+ return "unavailable";
14
+ }
15
+ if (numericCode === 2) {
16
+ return "unknown";
17
+ }
18
+ }
19
+ if (
20
+ typeof error === "object" &&
21
+ error !== null &&
22
+ "name" in error &&
23
+ (error as { name?: unknown }).name === "AbortError"
24
+ ) {
25
+ return "ABORT_ERR";
26
+ }
27
+ if (typeof error !== "object" || error === null || !("code" in error)) {
28
+ return undefined;
29
+ }
30
+ const code = (error as { code?: unknown }).code;
31
+ return typeof code === "string" && code.length <= 64 ? code : undefined;
32
+ }
@@ -12,7 +12,6 @@ import {
12
12
  import {
13
13
  type ArtifactsDefinition,
14
14
  DEFAULT_MODEL,
15
- type DiscoveredAB,
16
15
  type DiscoveredChannel,
17
16
  type DiscoveredHook,
18
17
  type DiscoveredSchedule,
@@ -50,7 +49,7 @@ export interface LoadedRootAgent {
50
49
  agent: ResolvedAgent;
51
50
  projectSlots: Pick<
52
51
  ExtensionContributions,
53
- "hooks" | "channels" | "schedules" | "abs" | "artifacts"
52
+ "hooks" | "channels" | "schedules" | "artifacts"
54
53
  >;
55
54
  }
56
55
 
@@ -66,7 +65,6 @@ export async function loadAgent(
66
65
  hooks: [],
67
66
  channels: [],
68
67
  schedules: [],
69
- abs: [],
70
68
  artifacts: undefined,
71
69
  },
72
70
  };
@@ -92,7 +90,6 @@ export async function loadAgent(
92
90
  const hooks: DiscoveredHook[] = [];
93
91
  const channels: DiscoveredChannel[] = [];
94
92
  const schedules: DiscoveredSchedule[] = [];
95
- const abs: DiscoveredAB[] = [];
96
93
  const instructionParts: string[] = [];
97
94
  const contributions = {
98
95
  tools,
@@ -105,7 +102,6 @@ export async function loadAgent(
105
102
  schedules,
106
103
  instructionParts,
107
104
  seedFiles,
108
- abs,
109
105
  artifacts: undefined as ArtifactsDefinition | undefined,
110
106
  };
111
107
  const extensions = await appendExtensions(
@@ -351,7 +347,6 @@ export async function loadAgent(
351
347
  hooks,
352
348
  channels,
353
349
  schedules,
354
- abs,
355
350
  artifacts: contributions.artifacts,
356
351
  },
357
352
  };
@@ -374,7 +369,6 @@ export async function warnUnknownSlots(
374
369
  "schedules",
375
370
  "reminders",
376
371
  "hooks",
377
- "ab",
378
372
  "sandbox",
379
373
  "lib",
380
374
  // Vite playground custom tool chips (agent/playground/tools).