@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
@@ -8,6 +8,14 @@
8
8
  * executes fires.
9
9
  */
10
10
 
11
+ import {
12
+ REMINDER_CP_PROTOCOL_VERSION,
13
+ type ReminderControlPlane,
14
+ type ReminderCreateIntent,
15
+ type ReminderExecutionOutcome,
16
+ type ReminderFireClaim,
17
+ type ReminderOutcomeApplyResult,
18
+ } from "./reminder-control-plane-protocol.js";
11
19
  import { isReminderRecord, type ReminderRecord } from "./reminder-store.js";
12
20
 
13
21
  const DEFAULT_CURSOR_EXTERNAL_API_URL = "https://api.cursor.com";
@@ -171,3 +179,186 @@ export function createCursorHostedPlatformTimers(
171
179
  },
172
180
  };
173
181
  }
182
+
183
+ /** v2 reminder CP is factory ECS (`/internal/agentsdk/*`), not timed-work. */
184
+ const AGENTSDK_REMINDERS_PREFIX = "/internal/agentsdk";
185
+
186
+ /**
187
+ * Bounded retries for idempotent CP outcome writes after the guest handler
188
+ * has already run. Delivery is at-least-once: a transient apply failure may
189
+ * re-enter the handler on the next Temporal admission. Do not claim
190
+ * exactly-once handler execution.
191
+ */
192
+ const APPLY_REMINDER_OUTCOME_MAX_ATTEMPTS = 3;
193
+ const APPLY_REMINDER_OUTCOME_RETRY_DELAY_MS = 50;
194
+
195
+ async function sleepMs(ms: number): Promise<void> {
196
+ await new Promise((resolve) => setTimeout(resolve, ms));
197
+ }
198
+
199
+ async function withBoundedApplyRetries<T>(run: () => Promise<T>): Promise<T> {
200
+ let lastError: unknown;
201
+ for (
202
+ let attempt = 1;
203
+ attempt <= APPLY_REMINDER_OUTCOME_MAX_ATTEMPTS;
204
+ attempt++
205
+ ) {
206
+ try {
207
+ return await run();
208
+ } catch (error) {
209
+ lastError = error;
210
+ if (attempt >= APPLY_REMINDER_OUTCOME_MAX_ATTEMPTS) {
211
+ break;
212
+ }
213
+ await sleepMs(APPLY_REMINDER_OUTCOME_RETRY_DELAY_MS * attempt);
214
+ }
215
+ }
216
+ throw lastError;
217
+ }
218
+
219
+ async function timedWorkJsonFetch(
220
+ options: CursorHostedPlatformTimersOptions,
221
+ method: "GET" | "POST" | "PUT" | "DELETE",
222
+ path: string,
223
+ body?: unknown
224
+ ): Promise<Response> {
225
+ const fetchImpl = options.fetch ?? globalThis.fetch;
226
+ if (typeof fetchImpl !== "function") {
227
+ throw new Error("reminder control plane requires fetch");
228
+ }
229
+ return fetchImpl(`${resolveBaseUrl(options)}${path}`, {
230
+ method,
231
+ headers: {
232
+ Authorization: `Bearer ${resolveApiKey(options)}`,
233
+ ...(body === undefined ? {} : { "Content-Type": "application/json" }),
234
+ },
235
+ ...(body === undefined ? {} : { body: JSON.stringify(body) }),
236
+ });
237
+ }
238
+
239
+ /**
240
+ * Cursor-hosted HTTP ReminderControlPlane for architecture v2.
241
+ * Speaks factory `/internal/agentsdk/reminders` (ELB → factory ECS).
242
+ * CP owns ids and time. v1 PUT/DELETE reminders stay on timed-work.
243
+ */
244
+ export function createCursorHostedReminderControlPlane(
245
+ options: CursorHostedPlatformTimersOptions = {}
246
+ ): ReminderControlPlane {
247
+ return {
248
+ protocolVersion: REMINDER_CP_PROTOCOL_VERSION,
249
+ async createReminder(intent: ReminderCreateIntent) {
250
+ const response = await timedWorkJsonFetch(
251
+ options,
252
+ "POST",
253
+ `${AGENTSDK_REMINDERS_PREFIX}/reminders`,
254
+ intent
255
+ );
256
+ if (!response.ok) {
257
+ const text = await response.text();
258
+ throw new Error(
259
+ `reminder CP create failed: HTTP ${response.status} ${text}`
260
+ );
261
+ }
262
+ const parsed: unknown = await response.json();
263
+ if (!isReminderRecord(parsed)) {
264
+ throw new Error("reminder CP create returned invalid record");
265
+ }
266
+ return parsed;
267
+ },
268
+ async getReminder(id) {
269
+ const response = await timedWorkJsonFetch(
270
+ options,
271
+ "GET",
272
+ `${AGENTSDK_REMINDERS_PREFIX}/reminders/${encodeURIComponent(id)}`
273
+ );
274
+ if (response.status === 404) {
275
+ return undefined;
276
+ }
277
+ if (!response.ok) {
278
+ throw new Error(`reminder CP get failed: HTTP ${response.status}`);
279
+ }
280
+ const parsed: unknown = await response.json();
281
+ return isReminderRecord(parsed) ? parsed : undefined;
282
+ },
283
+ async listReminders() {
284
+ const response = await timedWorkJsonFetch(
285
+ options,
286
+ "GET",
287
+ `${AGENTSDK_REMINDERS_PREFIX}/reminders`
288
+ );
289
+ if (!response.ok) {
290
+ throw new Error(`reminder CP list failed: HTTP ${response.status}`);
291
+ }
292
+ const parsed: unknown = await response.json();
293
+ if (
294
+ parsed === null ||
295
+ typeof parsed !== "object" ||
296
+ !("reminders" in parsed) ||
297
+ !Array.isArray((parsed as { reminders: unknown }).reminders)
298
+ ) {
299
+ return [];
300
+ }
301
+ return (parsed as { reminders: unknown[] }).reminders.filter(
302
+ isReminderRecord
303
+ );
304
+ },
305
+ async cancelReminder(id, reason) {
306
+ const response = await timedWorkJsonFetch(
307
+ options,
308
+ "POST",
309
+ `${AGENTSDK_REMINDERS_PREFIX}/reminders/${encodeURIComponent(id)}/cancel`,
310
+ reason === undefined ? {} : { reason }
311
+ );
312
+ if (response.status === 404) {
313
+ return undefined;
314
+ }
315
+ if (!response.ok) {
316
+ throw new Error(`reminder CP cancel failed: HTTP ${response.status}`);
317
+ }
318
+ const parsed: unknown = await response.json();
319
+ return isReminderRecord(parsed) ? parsed : undefined;
320
+ },
321
+ async rekeyReminders(channelId, oldToken, newToken) {
322
+ const response = await timedWorkJsonFetch(
323
+ options,
324
+ "POST",
325
+ `${AGENTSDK_REMINDERS_PREFIX}/reminders/rekey`,
326
+ { channelId, oldToken, newToken }
327
+ );
328
+ if (!response.ok) {
329
+ throw new Error(`reminder CP rekey failed: HTTP ${response.status}`);
330
+ }
331
+ const parsed: unknown = await response.json();
332
+ if (
333
+ parsed === null ||
334
+ typeof parsed !== "object" ||
335
+ typeof (parsed as { count?: unknown }).count !== "number"
336
+ ) {
337
+ throw new Error("reminder CP rekey returned invalid body");
338
+ }
339
+ return (parsed as { count: number }).count;
340
+ },
341
+ async applyReminderOutcome(
342
+ claim: ReminderFireClaim,
343
+ outcome: ReminderExecutionOutcome
344
+ ): Promise<ReminderOutcomeApplyResult> {
345
+ // Handler side effects may already have run; retry only the idempotent
346
+ // CP write. Exhausted failures stay thrown so Temporal can re-admit
347
+ // (at-least-once — not exactly-once).
348
+ return await withBoundedApplyRetries(async () => {
349
+ const response = await timedWorkJsonFetch(
350
+ options,
351
+ "POST",
352
+ `${AGENTSDK_REMINDERS_PREFIX}/reminders/outcome`,
353
+ { claim, outcome }
354
+ );
355
+ if (!response.ok) {
356
+ throw new Error(
357
+ `reminder CP outcome apply failed: HTTP ${response.status}`
358
+ );
359
+ }
360
+ return (await response.json()) as ReminderOutcomeApplyResult;
361
+ });
362
+ },
363
+ };
364
+ }
@@ -27,6 +27,8 @@ import type { ReminderRecord } from "./reminder-store.js";
27
27
 
28
28
  /** Wire / persistence version for this control-plane protocol. */
29
29
  export const REMINDER_CP_PROTOCOL_VERSION = 1 as const;
30
+ /** Each recurring/retry fire can spend a model turn and create hosted work. */
31
+ export const REMINDER_CP_MIN_RECURRING_INTERVAL_MS = 60_000 as const;
30
32
 
31
33
  export type ReminderCpProtocolVersion = typeof REMINDER_CP_PROTOCOL_VERSION;
32
34
 
@@ -293,6 +295,14 @@ export function intentToNewRecord(
293
295
  scheduleSpecToCreateFields(intent.schedule),
294
296
  nowMs
295
297
  );
298
+ if (
299
+ resolved.kind === "every" &&
300
+ (resolved.intervalMs ?? 0) < REMINDER_CP_MIN_RECURRING_INTERVAL_MS
301
+ ) {
302
+ throw new ReminderValidationError(
303
+ `every must be >= 1m (got ${intent.schedule.kind === "every" ? intent.schedule.every : ""})`
304
+ );
305
+ }
296
306
  const nowIso = new Date(nowMs).toISOString();
297
307
  return {
298
308
  version: 1,
@@ -429,11 +439,14 @@ export function applyOutcomeToRecord(
429
439
  const nowIso = new Date(nowMs).toISOString();
430
440
 
431
441
  if (outcome.kind === "retry") {
432
- const delayMs = outcome.delayMs ?? 0;
442
+ const delayMs = Math.max(
443
+ REMINDER_CP_MIN_RECURRING_INTERVAL_MS,
444
+ outcome.delayMs ?? REMINDER_CP_MIN_RECURRING_INTERVAL_MS
445
+ );
433
446
  const updated: ReminderRecord = {
434
447
  ...record,
435
448
  status: "armed",
436
- nextFireAtMs: nowMs + Math.max(0, delayMs),
449
+ nextFireAtMs: nowMs + delayMs,
437
450
  // Same fireCount; bump generation so a second apply of the old claim is stale.
438
451
  generation: recordGeneration(record) + 1,
439
452
  updatedAt: nowIso,
@@ -18,6 +18,11 @@ import type {
18
18
  ReminderStatus,
19
19
  ReminderUntilContext,
20
20
  } from "../types.js";
21
+ import {
22
+ channelContinuationIdentity,
23
+ httpContinuationIdentity,
24
+ } from "./continuation-channel.js";
25
+ import { continuationSource } from "./continuation-identity.js";
21
26
  import { NAME_PATTERN } from "./discovery/names.js";
22
27
  import { parseDuration } from "./duration.js";
23
28
  import type { PlatformTimers } from "./platform-timers.js";
@@ -39,7 +44,12 @@ import {
39
44
  } from "./reminder-schedule.js";
40
45
  import type { ReminderBusyPolicy, ReminderRecord } from "./reminder-store.js";
41
46
  import { APP_AUTH } from "./schedule-runner.js";
42
- import { SessionBusyError, type SessionEngine } from "./session-engine.js";
47
+ import {
48
+ type EngineSendOptions,
49
+ HTTP_CHANNEL_ID,
50
+ SessionBusyError,
51
+ type SessionEngine,
52
+ } from "./session-engine.js";
43
53
 
44
54
  export { ReminderValidationError } from "./reminder-schedule.js";
45
55
 
@@ -1040,16 +1050,56 @@ export class ReminderRunner {
1040
1050
  return this.sendFollowup(record, buildFirePrompt(record), auth);
1041
1051
  }
1042
1052
 
1053
+ /**
1054
+ * Join the reminder's existing session. Control-plane (`/v2`) channels
1055
+ * refuse authored `continuationToken`; pass the stored key as
1056
+ * {@link EngineSendOptions.mailboxContinuation} so the engine reuses the
1057
+ * CP-selected identity without channel admission.
1058
+ */
1059
+ private followupSendOptions(
1060
+ record: ReminderRecord,
1061
+ auth: AuthContext | null
1062
+ ): EngineSendOptions {
1063
+ if (this.channelUsesControlPlaneContinuation(record.channelId)) {
1064
+ return {
1065
+ auth,
1066
+ mailboxContinuation: { key: record.continuationToken },
1067
+ };
1068
+ }
1069
+ return {
1070
+ auth,
1071
+ continuationToken: record.continuationToken,
1072
+ };
1073
+ }
1074
+
1075
+ private channelUsesControlPlaneContinuation(channelId: string): boolean {
1076
+ const project = this.engine.project;
1077
+ // Test doubles may omit `project`; keep the legacy continuationToken path.
1078
+ if (project === undefined) {
1079
+ return false;
1080
+ }
1081
+ const identity =
1082
+ channelId === HTTP_CHANNEL_ID
1083
+ ? httpContinuationIdentity(project.httpChannel)
1084
+ : channelContinuationIdentity(
1085
+ project.channels.find((channel) => channel.id === channelId)
1086
+ ?.definition
1087
+ );
1088
+ return continuationSource(identity) === "control-plane";
1089
+ }
1090
+
1043
1091
  private async sendFollowup(
1044
1092
  record: ReminderRecord,
1045
1093
  message: string,
1046
1094
  auth: AuthContext | null
1047
1095
  ): Promise<ReminderFireResult> {
1096
+ const sendOptions = this.followupSendOptions(record, auth);
1048
1097
  try {
1049
- const session = await this.engine.send(record.channelId, message, {
1050
- auth,
1051
- continuationToken: record.continuationToken,
1052
- });
1098
+ const session = await this.engine.send(
1099
+ record.channelId,
1100
+ message,
1101
+ sendOptions
1102
+ );
1053
1103
  this.engine.trackBackground(this.engine.waitForCompletion(session.id));
1054
1104
  return { action: "delivered" };
1055
1105
  } catch (error) {
@@ -1059,10 +1109,11 @@ export class ReminderRunner {
1059
1109
  }
1060
1110
  await this.whenSessionIdle(record.channelId, record.continuationToken);
1061
1111
  try {
1062
- const session = await this.engine.send(record.channelId, message, {
1063
- auth,
1064
- continuationToken: record.continuationToken,
1065
- });
1112
+ const session = await this.engine.send(
1113
+ record.channelId,
1114
+ message,
1115
+ sendOptions
1116
+ );
1066
1117
  this.engine.trackBackground(
1067
1118
  this.engine.waitForCompletion(session.id)
1068
1119
  );
@@ -16,6 +16,7 @@ import {
16
16
  validateDeploymentSlug,
17
17
  } from "./deploy-client.js";
18
18
  import { CLI_COMMAND_NAME as CLI } from "./distribution.js";
19
+ import { rejectV2ForLegacyCommand } from "./legacy-command-guard.js";
19
20
  import { sleep as defaultSleep } from "./sleep.js";
20
21
  import { stderrPalette } from "./terminal-style.js";
21
22
 
@@ -38,6 +39,8 @@ export interface ResolveProdTargetOptions {
38
39
  apiKey?: string;
39
40
  fetchImpl?: typeof fetch;
40
41
  err?: (text: string) => void;
42
+ /** Skip when the caller already ran {@link rejectV2ForLegacyCommand}. */
43
+ skipLegacyArchitectureCheck?: boolean;
41
44
  /** Test seam for reachability-retry backoff. */
42
45
  sleep?: (ms: number) => Promise<void>;
43
46
  }
@@ -95,6 +98,13 @@ export async function resolveProdTarget(
95
98
  `Could not resolve Cursor credentials/team for the hosted deployment (see above).`
96
99
  );
97
100
  }
101
+ if (options.skipLegacyArchitectureCheck !== true) {
102
+ await rejectV2ForLegacyCommand({
103
+ client: auth.client,
104
+ teamId: auth.teamId,
105
+ slug,
106
+ });
107
+ }
98
108
 
99
109
  // A hibernated engine can briefly omit engineAccess while getPod fails
100
110
  // during wake. Retry a few times before surfacing "not reachable yet".
@@ -198,6 +208,11 @@ export async function resolveProdAliasPlaygroundUrl(
198
208
  `Could not resolve Cursor credentials/team for the hosted deployment (see above).`
199
209
  );
200
210
  }
211
+ await rejectV2ForLegacyCommand({
212
+ client: auth.client,
213
+ teamId: auth.teamId,
214
+ slug,
215
+ });
201
216
 
202
217
  let detail: DeploymentDetail;
203
218
  try {
@@ -34,7 +34,7 @@ export interface RunClientOptions extends RequestAuth {
34
34
  onEvent?: (event: SessionEvent) => void;
35
35
  /**
36
36
  * Create-time session purpose. Pass `"eval"` from the eval harness so
37
- * live `defineAB` enrollment is skipped. Default `"live"`.
37
+ * the session is marked as regression traffic. Default `"live"`.
38
38
  */
39
39
  purpose?: SessionPurpose;
40
40
  }
@@ -355,7 +355,7 @@ export class CursorSdkRunner implements AgentRunner {
355
355
  ) {
356
356
  // Cloud `wait()` drops usage after stream reconnect / getRun replay,
357
357
  // or returns an all-zero stub. `getUsage` still has the run's tokens
358
- // (eventually); without them traces/ABs never record an estimated cost.
358
+ // (eventually); without them traces never record an estimated cost.
359
359
  outcome = await fillMissingCloudUsage(agent, result.id, outcome);
360
360
  }
361
361
  return outcome;
@@ -518,7 +518,7 @@ export class CursorSdkRunner implements AgentRunner {
518
518
  const resolved = resolveApiKeySync({ apiKey: this.options.apiKey });
519
519
  if (resolved === undefined) {
520
520
  throw new Error(
521
- `The Cursor SDK runner requires a Cursor credential: run \`${CLI} login\`, set CURSOR_API_KEY or CURSOR_API_KEY_FILE, or pass serve({ apiKey }).`
521
+ `The Cursor SDK runner requires a Cursor credential: run \`${CLI} login\`, set CURSOR_API_KEY, CURSOR_SERVICE_ACCOUNT_KEY, or CURSOR_API_KEY_FILE, or pass serve({ apiKey }).`
522
522
  );
523
523
  }
524
524
  return resolved.apiKey;
@@ -805,6 +805,7 @@ function toTurnOutcome(result: RunResult): TurnOutcome {
805
805
  ...(result.status === "error"
806
806
  ? { errorMessage: runErrorMessage(result) }
807
807
  : {}),
808
+ errorCode: result.status === "error" ? result.error?.code : undefined,
808
809
  ...(usage === undefined ? {} : { usage }),
809
810
  };
810
811
  }