@cursor/july 0.1.105 → 0.1.108

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 (395) hide show
  1. package/README.md +10 -5
  2. package/dist/bin/agent-serve.js +31 -16
  3. package/dist/channels/bitbucket/types.d.ts +2 -4
  4. package/dist/channels/bitbucket/types.d.ts.map +1 -1
  5. package/dist/channels/deployments/types.d.ts +5 -8
  6. package/dist/channels/deployments/types.d.ts.map +1 -1
  7. package/dist/channels/github/github-channel.js +8 -5
  8. package/dist/channels/github/types.d.ts +7 -5
  9. package/dist/channels/github/types.d.ts.map +1 -1
  10. package/dist/channels/gitlab/types.d.ts +2 -5
  11. package/dist/channels/gitlab/types.d.ts.map +1 -1
  12. package/dist/channels/origin/origin-channel.d.ts.map +1 -1
  13. package/dist/channels/origin/origin-channel.js +27 -13
  14. package/dist/channels/origin/types.d.ts +7 -4
  15. package/dist/channels/origin/types.d.ts.map +1 -1
  16. package/dist/channels/slack/defaults.d.ts.map +1 -1
  17. package/dist/channels/slack/defaults.js +3 -0
  18. package/dist/channels/slack/dispatch.d.ts.map +1 -1
  19. package/dist/channels/slack/dispatch.js +1 -1
  20. package/dist/channels/slack/live-delivery.d.ts.map +1 -1
  21. package/dist/channels/slack/live-delivery.js +48 -11
  22. package/dist/channels/slack/types.d.ts +4 -3
  23. package/dist/channels/slack/types.d.ts.map +1 -1
  24. package/dist/channels.d.ts +45 -0
  25. package/dist/channels.d.ts.map +1 -1
  26. package/dist/channels.js +106 -7
  27. package/dist/connections.d.ts +2 -1
  28. package/dist/connections.d.ts.map +1 -1
  29. package/dist/connections.js +2 -1
  30. package/dist/docs/404.html +3 -3
  31. package/dist/docs/ab.html +6 -6
  32. package/dist/docs/assets/{app.BVwaffdK.js → app.BASKM3M4.js} +1 -1
  33. package/dist/docs/assets/chunks/@localSearchIndexroot.BHZYsNVi.js +1 -0
  34. package/dist/docs/assets/chunks/{VPLocalSearchBox.WuWTZ1x8.js → VPLocalSearchBox.BOKxlYGP.js} +2 -2
  35. package/dist/docs/assets/chunks/{theme.BYdI_6sF.js → theme.DbDZW-zb.js} +2 -2
  36. package/dist/docs/assets/{deployment.md.MFPKqsqI.js → deployment.md.JenwuCCB.js} +4 -4
  37. package/dist/docs/assets/{deployment.md.MFPKqsqI.lean.js → deployment.md.JenwuCCB.lean.js} +1 -1
  38. package/dist/docs/assets/{evals.md.CbMoebP1.js → evals.md.C1ekS3k2.js} +1 -1
  39. package/dist/docs/assets/guides_cloud-agents.md.BsloyHdY.js +9 -0
  40. package/dist/docs/assets/{guides_cloud-agents.md.DS8RIjwx.lean.js → guides_cloud-agents.md.BsloyHdY.lean.js} +1 -1
  41. package/dist/docs/assets/{guides_github.md.c0gdGJ-D.js → guides_github.md.BH33UEBJ.js} +1 -1
  42. package/dist/docs/assets/{guides_grokbot-agents.md.DVqdhBKb.js → guides_grokbot-agents.md.DyV-WArv.js} +1 -1
  43. package/dist/docs/assets/guides_improve.md.BGVk32bK.js +14 -0
  44. package/dist/docs/assets/guides_improve.md.BGVk32bK.lean.js +1 -0
  45. package/dist/docs/assets/{guides_opentelemetry.md.COh9jFVg.js → guides_opentelemetry.md.SCRMskno.js} +3 -3
  46. package/dist/docs/assets/{guides_opentelemetry.md.COh9jFVg.lean.js → guides_opentelemetry.md.SCRMskno.lean.js} +1 -1
  47. package/dist/docs/assets/{guides_slack.md.9oHPye9o.js → guides_slack.md.D4RVMM4G.js} +3 -3
  48. package/dist/docs/assets/{guides_slack.md.9oHPye9o.lean.js → guides_slack.md.D4RVMM4G.lean.js} +1 -1
  49. package/dist/docs/assets/index.md.BjH1w2ZW.js +5 -0
  50. package/dist/docs/assets/{reference_agent-config.md.CHNpiyp4.js → reference_agent-config.md.CvoL6pof.js} +1 -1
  51. package/dist/docs/assets/{reference_channels.md.DBGcaB7m.js → reference_channels.md.D-qTqwcq.js} +2 -2
  52. package/dist/docs/assets/{reference_channels.md.DBGcaB7m.lean.js → reference_channels.md.D-qTqwcq.lean.js} +1 -1
  53. package/dist/docs/assets/{reference_cli.md.C6Lo8SEd.js → reference_cli.md.Ca26u0Es.js} +6 -6
  54. package/dist/docs/assets/{reference_cli.md.C6Lo8SEd.lean.js → reference_cli.md.Ca26u0Es.lean.js} +1 -1
  55. package/dist/docs/assets/{reference_connections.md.Di6jJAXF.js → reference_connections.md.BojkC6c5.js} +1 -1
  56. package/dist/docs/assets/{reference_extensions.md.CGmMLblt.js → reference_extensions.md.CPWt00ds.js} +1 -1
  57. package/dist/docs/assets/{scaffolding-agents.md.em43xlY1.js → scaffolding-agents.md.Kctn3OVb.js} +1 -1
  58. package/dist/docs/assets/{skills_create-agent.md.BVoWPcan.js → skills_create-agent.md.Q3h6Je-e.js} +1 -1
  59. package/dist/docs/assets/{skills_debug.md.CDbPhHfg.js → skills_debug.md.CVjCXMFF.js} +1 -1
  60. package/dist/docs/assets/{skills_debug.md.CDbPhHfg.lean.js → skills_debug.md.CVjCXMFF.lean.js} +1 -1
  61. package/dist/docs/assets/{skills_evals.md.723kpUmA.js → skills_evals.md.BhovOvrl.js} +1 -1
  62. package/dist/docs/assets/skills_framework-map.md.D-tFZhFS.js +1 -0
  63. package/dist/docs/assets/{skills_framework-map.md.haibFyoB.lean.js → skills_framework-map.md.D-tFZhFS.lean.js} +1 -1
  64. package/dist/docs/assets/{skills_github.md.D0JahM8c.js → skills_github.md.hgFX_oKY.js} +1 -1
  65. package/dist/docs/assets/{skills_otel.md.CqhobH3B.js → skills_otel.md.B5Ddv1xH.js} +1 -1
  66. package/dist/docs/assets/{style.BRuM8477.css → style.DCD_zyg3.css} +1 -1
  67. package/dist/docs/assets/troubleshooting.md.CYEAO9bM.js +1 -0
  68. package/dist/docs/building-with-agents.html +6 -6
  69. package/dist/docs/concepts.html +5 -5
  70. package/dist/docs/deployment.html +9 -9
  71. package/dist/docs/deployment.md +7 -2
  72. package/dist/docs/evals.html +8 -8
  73. package/dist/docs/evals.md +3 -2
  74. package/dist/docs/guides/agent-to-agent.html +6 -6
  75. package/dist/docs/guides/cloud-agents.html +7 -7
  76. package/dist/docs/guides/cloud-agents.md +4 -3
  77. package/dist/docs/guides/convert-automation.html +6 -6
  78. package/dist/docs/guides/github.html +7 -7
  79. package/dist/docs/guides/github.md +2 -1
  80. package/dist/docs/guides/grokbot-agents.html +7 -7
  81. package/dist/docs/guides/grokbot-agents.md +2 -2
  82. package/dist/docs/guides/human-in-the-loop.html +6 -6
  83. package/dist/docs/guides/improve.html +40 -0
  84. package/dist/docs/guides/improve.md +91 -0
  85. package/dist/docs/guides/mcp-oauth.html +6 -6
  86. package/dist/docs/guides/opentelemetry.html +8 -8
  87. package/dist/docs/guides/opentelemetry.md +3 -4
  88. package/dist/docs/guides/slack.html +8 -8
  89. package/dist/docs/guides/slack.md +2 -1
  90. package/dist/docs/guides/webhooks.html +6 -6
  91. package/dist/docs/hashmap.json +1 -1
  92. package/dist/docs/hillclimbing.html +6 -6
  93. package/dist/docs/index.html +8 -8
  94. package/dist/docs/index.md +4 -0
  95. package/dist/docs/llms-full.txt +180 -61
  96. package/dist/docs/llms.txt +1 -0
  97. package/dist/docs/quickstart.html +6 -6
  98. package/dist/docs/reference/agent-config.html +7 -7
  99. package/dist/docs/reference/agent-config.md +5 -2
  100. package/dist/docs/reference/artifacts.html +6 -6
  101. package/dist/docs/reference/channels.html +7 -7
  102. package/dist/docs/reference/channels.md +11 -19
  103. package/dist/docs/reference/cli.html +11 -11
  104. package/dist/docs/reference/cli.md +23 -13
  105. package/dist/docs/reference/connections.html +8 -8
  106. package/dist/docs/reference/connections.md +2 -1
  107. package/dist/docs/reference/extensions.html +7 -7
  108. package/dist/docs/reference/extensions.md +2 -0
  109. package/dist/docs/reference/hooks.html +6 -6
  110. package/dist/docs/reference/http-api.html +6 -6
  111. package/dist/docs/reference/instructions.html +6 -6
  112. package/dist/docs/reference/playground.html +5 -5
  113. package/dist/docs/reference/project-layout.html +6 -6
  114. package/dist/docs/reference/prompt.html +6 -6
  115. package/dist/docs/reference/result.html +6 -6
  116. package/dist/docs/reference/schedules.html +6 -6
  117. package/dist/docs/reference/sessions.html +5 -5
  118. package/dist/docs/reference/skills.html +6 -6
  119. package/dist/docs/reference/subagents.html +6 -6
  120. package/dist/docs/reference/tools.html +6 -6
  121. package/dist/docs/scaffolding-agents.html +6 -6
  122. package/dist/docs/scaffolding-agents.md +2 -1
  123. package/dist/docs/skills/ab.html +6 -6
  124. package/dist/docs/skills/create-agent.html +8 -8
  125. package/dist/docs/skills/create-agent.md +1 -1
  126. package/dist/docs/skills/debug.html +6 -6
  127. package/dist/docs/skills/debug.md +1 -1
  128. package/dist/docs/skills/evals.html +8 -8
  129. package/dist/docs/skills/evals.md +1 -1
  130. package/dist/docs/skills/framework-map.html +6 -6
  131. package/dist/docs/skills/framework-map.md +4 -2
  132. package/dist/docs/skills/github.html +8 -8
  133. package/dist/docs/skills/github.md +1 -1
  134. package/dist/docs/skills/hillclimb.html +6 -6
  135. package/dist/docs/skills/index.html +5 -5
  136. package/dist/docs/skills/mcp-auth.html +6 -6
  137. package/dist/docs/skills/otel.html +8 -8
  138. package/dist/docs/skills/otel.md +3 -3
  139. package/dist/docs/skills/setup-slack.html +6 -6
  140. package/dist/docs/storage.html +6 -6
  141. package/dist/docs/templates/agentic-owners.html +6 -6
  142. package/dist/docs/templates/agents-md.html +6 -6
  143. package/dist/docs/templates/code-wiki.html +6 -6
  144. package/dist/docs/templates/demo.html +6 -6
  145. package/dist/docs/templates/grokbot-agents.html +6 -6
  146. package/dist/docs/templates/pr-autofixer.html +6 -6
  147. package/dist/docs/templates/security-help.html +6 -6
  148. package/dist/docs/templates/security-reviewer.html +6 -6
  149. package/dist/docs/templates/triage.html +6 -6
  150. package/dist/docs/troubleshooting.html +6 -6
  151. package/dist/docs/troubleshooting.md +1 -1
  152. package/dist/extensions/improve/extension.d.ts +46 -0
  153. package/dist/extensions/improve/extension.d.ts.map +1 -0
  154. package/dist/extensions/improve/extension.js +41 -0
  155. package/dist/extensions/improve/skills/yourself.d.ts +4 -0
  156. package/dist/extensions/improve/skills/yourself.d.ts.map +1 -0
  157. package/dist/extensions/improve/skills/yourself.js +43 -0
  158. package/dist/index.d.ts +4 -5
  159. package/dist/index.d.ts.map +1 -1
  160. package/dist/index.js +3 -4
  161. package/dist/internal/builtin-tools/artifacts.d.ts.map +1 -1
  162. package/dist/internal/builtin-tools/artifacts.js +2 -3
  163. package/dist/internal/channel-route-dispatch.d.ts +13 -0
  164. package/dist/internal/channel-route-dispatch.d.ts.map +1 -0
  165. package/dist/internal/channel-route-dispatch.js +62 -0
  166. package/dist/internal/channel-state.d.ts +17 -0
  167. package/dist/internal/channel-state.d.ts.map +1 -0
  168. package/dist/internal/channel-state.js +78 -0
  169. package/dist/internal/cli-ax.d.ts +7 -0
  170. package/dist/internal/cli-ax.d.ts.map +1 -1
  171. package/dist/internal/cli-ax.js +99 -1
  172. package/dist/internal/cli-cursor.d.ts.map +1 -1
  173. package/dist/internal/cli-cursor.js +2 -0
  174. package/dist/internal/cli-deploy.d.ts.map +1 -1
  175. package/dist/internal/cli-deploy.js +61 -25
  176. package/dist/internal/cli-mcp-oauth.d.ts.map +1 -1
  177. package/dist/internal/cli-mcp-oauth.js +15 -0
  178. package/dist/internal/cli-mcp.d.ts.map +1 -1
  179. package/dist/internal/cli-mcp.js +12 -0
  180. package/dist/internal/cli-slack.d.ts.map +1 -1
  181. package/dist/internal/cli-slack.js +8 -2
  182. package/dist/internal/cursor/backend-client.d.ts +25 -0
  183. package/dist/internal/cursor/backend-client.d.ts.map +1 -1
  184. package/dist/internal/cursor/backend-client.js +57 -2
  185. package/dist/internal/cursor/credentials.d.ts +8 -2
  186. package/dist/internal/cursor/credentials.d.ts.map +1 -1
  187. package/dist/internal/cursor/credentials.js +27 -5
  188. package/dist/internal/deploy-client.d.ts +35 -0
  189. package/dist/internal/deploy-client.d.ts.map +1 -1
  190. package/dist/internal/deploy-client.js +46 -0
  191. package/dist/internal/deploy-manifest.d.ts +26 -0
  192. package/dist/internal/deploy-manifest.d.ts.map +1 -1
  193. package/dist/internal/deploy-manifest.js +99 -13
  194. package/dist/internal/describe-error.d.ts +1 -0
  195. package/dist/internal/describe-error.d.ts.map +1 -1
  196. package/dist/internal/describe-error.js +25 -0
  197. package/dist/internal/discovery/agent.d.ts.map +1 -1
  198. package/dist/internal/discovery/agent.js +1 -0
  199. package/dist/internal/discovery/info.d.ts.map +1 -1
  200. package/dist/internal/discovery/info.js +7 -3
  201. package/dist/internal/discovery/modules.d.ts +1 -1
  202. package/dist/internal/discovery/modules.d.ts.map +1 -1
  203. package/dist/internal/discovery/modules.js +1 -0
  204. package/dist/internal/discovery/project.d.ts.map +1 -1
  205. package/dist/internal/discovery/project.js +3 -0
  206. package/dist/internal/discovery/reminders.d.ts +7 -0
  207. package/dist/internal/discovery/reminders.d.ts.map +1 -0
  208. package/dist/internal/discovery/reminders.js +65 -0
  209. package/dist/internal/discovery/subagent.js +1 -0
  210. package/dist/internal/distribution.d.ts +5 -0
  211. package/dist/internal/distribution.d.ts.map +1 -1
  212. package/dist/internal/distribution.js +17 -0
  213. package/dist/internal/framework-storage-selection.d.ts +14 -3
  214. package/dist/internal/framework-storage-selection.d.ts.map +1 -1
  215. package/dist/internal/framework-storage-selection.js +36 -6
  216. package/dist/internal/guest-network.d.ts +4 -10
  217. package/dist/internal/guest-network.d.ts.map +1 -1
  218. package/dist/internal/guest-network.js +44 -26
  219. package/dist/internal/hosted-admission-adapter.d.ts +2 -0
  220. package/dist/internal/hosted-admission-adapter.d.ts.map +1 -1
  221. package/dist/internal/hosted-catch-protocol.d.ts +51 -0
  222. package/dist/internal/hosted-catch-protocol.d.ts.map +1 -0
  223. package/dist/internal/hosted-catch-protocol.js +103 -0
  224. package/dist/internal/hosted-catch.d.ts +40 -0
  225. package/dist/internal/hosted-catch.d.ts.map +1 -0
  226. package/dist/internal/hosted-catch.js +149 -0
  227. package/dist/internal/hosted-delivery-protocol.d.ts +89 -0
  228. package/dist/internal/hosted-delivery-protocol.d.ts.map +1 -1
  229. package/dist/internal/hosted-delivery-protocol.js +309 -0
  230. package/dist/internal/hosted-delivery.d.ts +20 -1
  231. package/dist/internal/hosted-delivery.d.ts.map +1 -1
  232. package/dist/internal/hosted-delivery.js +179 -36
  233. package/dist/internal/hosted-execution-diag.d.ts +4 -1
  234. package/dist/internal/hosted-execution-diag.d.ts.map +1 -1
  235. package/dist/internal/hosted-execution-diag.js +13 -4
  236. package/dist/internal/hosted-execution-flush.d.ts +3 -0
  237. package/dist/internal/hosted-execution-flush.d.ts.map +1 -1
  238. package/dist/internal/hosted-execution-flush.js +2 -4
  239. package/dist/internal/http-control-plane-session.d.ts +30 -0
  240. package/dist/internal/http-control-plane-session.d.ts.map +1 -0
  241. package/dist/internal/http-control-plane-session.js +83 -0
  242. package/dist/internal/legacy-command-guard.d.ts +22 -0
  243. package/dist/internal/legacy-command-guard.d.ts.map +1 -0
  244. package/dist/internal/legacy-command-guard.js +51 -0
  245. package/dist/internal/local-control-plane.d.ts +18 -2
  246. package/dist/internal/local-control-plane.d.ts.map +1 -1
  247. package/dist/internal/local-control-plane.js +199 -17
  248. package/dist/internal/platform-timers.d.ts +7 -0
  249. package/dist/internal/platform-timers.d.ts.map +1 -1
  250. package/dist/internal/platform-timers.js +139 -0
  251. package/dist/internal/reminder-control-plane-protocol.d.ts +189 -0
  252. package/dist/internal/reminder-control-plane-protocol.d.ts.map +1 -0
  253. package/dist/internal/reminder-control-plane-protocol.js +251 -0
  254. package/dist/internal/reminder-runner.d.ts +56 -6
  255. package/dist/internal/reminder-runner.d.ts.map +1 -1
  256. package/dist/internal/reminder-runner.js +372 -57
  257. package/dist/internal/reminder-schedule.d.ts +5 -2
  258. package/dist/internal/reminder-schedule.d.ts.map +1 -1
  259. package/dist/internal/reminder-schedule.js +8 -6
  260. package/dist/internal/reminder-store.d.ts +24 -7
  261. package/dist/internal/reminder-store.d.ts.map +1 -1
  262. package/dist/internal/reminder-store.js +6 -5
  263. package/dist/internal/request-error-status.d.ts +2 -0
  264. package/dist/internal/request-error-status.d.ts.map +1 -1
  265. package/dist/internal/request-error-status.js +22 -3
  266. package/dist/internal/resolve-prod-target.d.ts +2 -0
  267. package/dist/internal/resolve-prod-target.d.ts.map +1 -1
  268. package/dist/internal/resolve-prod-target.js +13 -0
  269. package/dist/internal/scm/pr-url.d.ts +40 -0
  270. package/dist/internal/scm/pr-url.d.ts.map +1 -1
  271. package/dist/internal/scm/pr-url.js +93 -14
  272. package/dist/internal/sdk-runner.d.ts.map +1 -1
  273. package/dist/internal/sdk-runner.js +4 -3
  274. package/dist/internal/server.d.ts.map +1 -1
  275. package/dist/internal/server.js +118 -77
  276. package/dist/internal/session-engine.d.ts +6 -6
  277. package/dist/internal/session-engine.d.ts.map +1 -1
  278. package/dist/internal/session-engine.js +100 -67
  279. package/dist/playground/assets/{index-BaQzjaNK.js → index-BMDqAeXu.js} +34 -34
  280. package/dist/playground/assets/index-LUgJoWdL.css +1 -0
  281. package/dist/playground/index.html +2 -2
  282. package/dist/reminders.d.ts +24 -5
  283. package/dist/reminders.d.ts.map +1 -1
  284. package/dist/reminders.js +28 -5
  285. package/dist/storage-backends/cursor-hosted.d.ts +6 -0
  286. package/dist/storage-backends/cursor-hosted.d.ts.map +1 -1
  287. package/dist/storage-backends/cursor-hosted.js +29 -1
  288. package/dist/types.d.ts +122 -25
  289. package/dist/types.d.ts.map +1 -1
  290. package/docs/README.md +4 -0
  291. package/docs/deployment.md +7 -2
  292. package/docs/evals.md +3 -2
  293. package/docs/guides/cloud-agents.md +4 -3
  294. package/docs/guides/github.md +2 -1
  295. package/docs/guides/grokbot-agents.md +2 -2
  296. package/docs/guides/improve.md +96 -0
  297. package/docs/guides/opentelemetry.md +3 -4
  298. package/docs/guides/slack.md +2 -1
  299. package/docs/reference/agent-config.md +5 -2
  300. package/docs/reference/channels.md +11 -19
  301. package/docs/reference/cli.md +23 -13
  302. package/docs/reference/connections.md +2 -1
  303. package/docs/reference/extensions.md +2 -0
  304. package/docs/scaffolding-agents.md +2 -1
  305. package/docs/troubleshooting.md +1 -1
  306. package/package.json +10 -3
  307. package/skills/create-agent/SKILL.md +1 -1
  308. package/skills/debug/SKILL.md +1 -1
  309. package/skills/evals/SKILL.md +1 -1
  310. package/skills/framework-map/SKILL.md +4 -2
  311. package/skills/github/SKILL.md +1 -1
  312. package/skills/otel/SKILL.md +3 -3
  313. package/src/bin/agent-serve.ts +28 -11
  314. package/src/channels/bitbucket/types.ts +2 -4
  315. package/src/channels/deployments/types.ts +5 -8
  316. package/src/channels/github/github-channel.ts +8 -8
  317. package/src/channels/github/types.ts +7 -4
  318. package/src/channels/gitlab/types.ts +2 -5
  319. package/src/channels/origin/origin-channel.ts +29 -13
  320. package/src/channels/origin/types.ts +7 -3
  321. package/src/channels/slack/defaults.ts +3 -0
  322. package/src/channels/slack/dispatch.ts +1 -0
  323. package/src/channels/slack/live-delivery.ts +53 -12
  324. package/src/channels/slack/types.ts +4 -3
  325. package/src/channels.ts +157 -10
  326. package/src/connections.ts +2 -1
  327. package/src/extensions/improve/extension.ts +70 -0
  328. package/src/extensions/improve/skills/yourself.ts +50 -0
  329. package/src/index.ts +6 -3
  330. package/src/internal/builtin-tools/artifacts.ts +2 -3
  331. package/src/internal/channel-route-dispatch.ts +66 -0
  332. package/src/internal/channel-state.ts +96 -0
  333. package/src/internal/cli-ax.ts +110 -1
  334. package/src/internal/cli-cursor.ts +4 -1
  335. package/src/internal/cli-deploy.ts +80 -22
  336. package/src/internal/cli-mcp-oauth.ts +18 -0
  337. package/src/internal/cli-mcp.ts +11 -0
  338. package/src/internal/cli-slack.ts +15 -2
  339. package/src/internal/cursor/backend-client.ts +90 -2
  340. package/src/internal/cursor/credentials.ts +35 -7
  341. package/src/internal/deploy-client.ts +70 -0
  342. package/src/internal/deploy-manifest.ts +131 -12
  343. package/src/internal/describe-error.ts +28 -0
  344. package/src/internal/discovery/agent.ts +1 -0
  345. package/src/internal/discovery/info.ts +6 -0
  346. package/src/internal/discovery/modules.ts +2 -4
  347. package/src/internal/discovery/project.ts +3 -0
  348. package/src/internal/discovery/reminders.ts +65 -0
  349. package/src/internal/discovery/subagent.ts +1 -0
  350. package/src/internal/distribution.ts +20 -0
  351. package/src/internal/framework-storage-selection.ts +43 -6
  352. package/src/internal/guest-network.ts +46 -29
  353. package/src/internal/hosted-admission-adapter.ts +2 -0
  354. package/src/internal/hosted-catch-protocol.ts +130 -0
  355. package/src/internal/hosted-catch.ts +192 -0
  356. package/src/internal/hosted-delivery-protocol.ts +483 -0
  357. package/src/internal/hosted-delivery.ts +303 -43
  358. package/src/internal/hosted-execution-diag.ts +21 -3
  359. package/src/internal/hosted-execution-flush.ts +6 -3
  360. package/src/internal/http-control-plane-session.ts +104 -0
  361. package/src/internal/legacy-command-guard.ts +59 -0
  362. package/src/internal/local-control-plane.ts +281 -22
  363. package/src/internal/platform-timers.ts +191 -0
  364. package/src/internal/reminder-control-plane-protocol.ts +512 -0
  365. package/src/internal/reminder-runner.ts +481 -57
  366. package/src/internal/reminder-schedule.ts +11 -6
  367. package/src/internal/reminder-store.ts +27 -7
  368. package/src/internal/request-error-status.ts +27 -3
  369. package/src/internal/resolve-prod-target.ts +15 -0
  370. package/src/internal/scm/pr-url.ts +167 -20
  371. package/src/internal/sdk-runner.ts +2 -1
  372. package/src/internal/server.ts +151 -88
  373. package/src/internal/session-engine.ts +146 -83
  374. package/src/reminders.ts +35 -4
  375. package/src/storage-backends/cursor-hosted.ts +40 -1
  376. package/src/types.ts +134 -26
  377. package/dist/docs/assets/chunks/@localSearchIndexroot.CJxMklAy.js +0 -1
  378. package/dist/docs/assets/guides_cloud-agents.md.DS8RIjwx.js +0 -9
  379. package/dist/docs/assets/index.md.BW_6tOgR.js +0 -5
  380. package/dist/docs/assets/skills_framework-map.md.haibFyoB.js +0 -1
  381. package/dist/docs/assets/troubleshooting.md.Cus_YZga.js +0 -1
  382. package/dist/playground/assets/index-CceqnLTX.css +0 -1
  383. /package/dist/docs/assets/{evals.md.CbMoebP1.lean.js → evals.md.C1ekS3k2.lean.js} +0 -0
  384. /package/dist/docs/assets/{guides_github.md.c0gdGJ-D.lean.js → guides_github.md.BH33UEBJ.lean.js} +0 -0
  385. /package/dist/docs/assets/{guides_grokbot-agents.md.DVqdhBKb.lean.js → guides_grokbot-agents.md.DyV-WArv.lean.js} +0 -0
  386. /package/dist/docs/assets/{index.md.BW_6tOgR.lean.js → index.md.BjH1w2ZW.lean.js} +0 -0
  387. /package/dist/docs/assets/{reference_agent-config.md.CHNpiyp4.lean.js → reference_agent-config.md.CvoL6pof.lean.js} +0 -0
  388. /package/dist/docs/assets/{reference_connections.md.Di6jJAXF.lean.js → reference_connections.md.BojkC6c5.lean.js} +0 -0
  389. /package/dist/docs/assets/{reference_extensions.md.CGmMLblt.lean.js → reference_extensions.md.CPWt00ds.lean.js} +0 -0
  390. /package/dist/docs/assets/{scaffolding-agents.md.em43xlY1.lean.js → scaffolding-agents.md.Kctn3OVb.lean.js} +0 -0
  391. /package/dist/docs/assets/{skills_create-agent.md.BVoWPcan.lean.js → skills_create-agent.md.Q3h6Je-e.lean.js} +0 -0
  392. /package/dist/docs/assets/{skills_evals.md.723kpUmA.lean.js → skills_evals.md.BhovOvrl.lean.js} +0 -0
  393. /package/dist/docs/assets/{skills_github.md.D0JahM8c.lean.js → skills_github.md.hgFX_oKY.lean.js} +0 -0
  394. /package/dist/docs/assets/{skills_otel.md.CqhobH3B.lean.js → skills_otel.md.B5Ddv1xH.lean.js} +0 -0
  395. /package/dist/docs/assets/{troubleshooting.md.Cus_YZga.lean.js → troubleshooting.md.CYEAO9bM.lean.js} +0 -0
@@ -8,8 +8,8 @@
8
8
  />
9
9
  <meta name="viewport" content="width=device-width, initial-scale=1" />
10
10
  <title>agent-serve playground</title>
11
- <script type="module" crossorigin src="./assets/index-BaQzjaNK.js"></script>
12
- <link rel="stylesheet" crossorigin href="./assets/index-CceqnLTX.css">
11
+ <script type="module" crossorigin src="./assets/index-BMDqAeXu.js"></script>
12
+ <link rel="stylesheet" crossorigin href="./assets/index-LUgJoWdL.css">
13
13
  </head>
14
14
  <body>
15
15
  <div id="root"></div>
@@ -1,23 +1,42 @@
1
1
  /**
2
- * Runtime reminders — per-session durable wakes.
2
+ * Runtime reminders — per-session durable wakes — and named handlers
3
+ * authored at `agent/reminders/<name>.ts`.
3
4
  *
4
5
  * ```ts
6
+ * import { defineReminder } from "@cursor/july/reminders";
5
7
  * import type { ReminderCreateInput } from "@cursor/july/reminders";
6
8
  *
9
+ * // agent/reminders/verdict_recheck.ts
10
+ * export default defineReminder({
11
+ * async run({ args, followup }) {
12
+ * await followup({ message: `Recheck ${String(args.headSha)}` });
13
+ * return { action: "delivered" };
14
+ * },
15
+ * });
16
+ *
17
+ * import verdictRecheck from "./reminders/verdict_recheck.js";
18
+ *
7
19
  * // Recurring ≈ setInterval; one-shot ≈ setTimeout.
8
20
  * await host.reminders?.create({
9
21
  * purpose: "ci_recheck",
10
22
  * channelId: session.channelId,
11
23
  * continuationToken: session.continuationKey!,
12
24
  * delay: "2h",
13
- * prompt: "Re-check CI. Only act if still failing.",
25
+ * handler: verdictRecheck,
26
+ * args: { headSha: "abc" },
14
27
  * });
15
28
  * ```
16
29
  *
17
30
  * Distinct from `defineSchedule` (deploy-time global cron under
18
31
  * `agent/schedules/`). Reminders are created at runtime and bound to a
19
- * channel continuation. Prefer `run` + function `until` for host policy
20
- * (silent ticks); agents use prompt-form create via tools.
32
+ * channel continuation. Prefer named `handler` + serializable `args` for
33
+ * hosted v2 durability; anonymous `run` remains on local and hosted v1.
34
+ */
35
+ import type { ReminderDefinition, ReminderHandlerConfig } from "./types.js";
36
+ export type { ReminderBusyPolicy, ReminderCreateInput, ReminderDefinition, ReminderFireContext, ReminderFireResult, ReminderHandlerConfig, ReminderHostApi, ReminderInfo, ReminderReschedule, ReminderScheduleKind, ReminderStatus, ReminderTarget, ReminderUntilContext, } from "./types.js";
37
+ /**
38
+ * Brand a named reminder handler for `agent/reminders/<name>.ts`.
39
+ * The registry name is the module stem (not a field on the definition).
21
40
  */
22
- export type { ReminderBusyPolicy, ReminderCreateInput, ReminderFireContext, ReminderFireResult, ReminderHostApi, ReminderInfo, ReminderReschedule, ReminderScheduleKind, ReminderStatus, ReminderTarget, ReminderUntilContext, } from "./types.js";
41
+ export declare function defineReminder(config: ReminderHandlerConfig): ReminderDefinition;
23
42
  //# sourceMappingURL=reminders.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"reminders.d.ts","sourceRoot":"","sources":["../src/reminders.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,YAAY,EACV,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,YAAY,EACZ,kBAAkB,EAClB,oBAAoB,EACpB,cAAc,EACd,cAAc,EACd,oBAAoB,GACrB,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"reminders.d.ts","sourceRoot":"","sources":["../src/reminders.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAGH,OAAO,KAAK,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAE5E,YAAY,EACV,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,EACrB,eAAe,EACf,YAAY,EACZ,kBAAkB,EAClB,oBAAoB,EACpB,cAAc,EACd,cAAc,EACd,oBAAoB,GACrB,MAAM,YAAY,CAAC;AAEpB;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,qBAAqB,GAC5B,kBAAkB,CAKpB"}
package/dist/reminders.js CHANGED
@@ -1,22 +1,45 @@
1
1
  /**
2
- * Runtime reminders — per-session durable wakes.
2
+ * Runtime reminders — per-session durable wakes — and named handlers
3
+ * authored at `agent/reminders/<name>.ts`.
3
4
  *
4
5
  * ```ts
6
+ * import { defineReminder } from "@cursor/july/reminders";
5
7
  * import type { ReminderCreateInput } from "@cursor/july/reminders";
6
8
  *
9
+ * // agent/reminders/verdict_recheck.ts
10
+ * export default defineReminder({
11
+ * async run({ args, followup }) {
12
+ * await followup({ message: `Recheck ${String(args.headSha)}` });
13
+ * return { action: "delivered" };
14
+ * },
15
+ * });
16
+ *
17
+ * import verdictRecheck from "./reminders/verdict_recheck.js";
18
+ *
7
19
  * // Recurring ≈ setInterval; one-shot ≈ setTimeout.
8
20
  * await host.reminders?.create({
9
21
  * purpose: "ci_recheck",
10
22
  * channelId: session.channelId,
11
23
  * continuationToken: session.continuationKey!,
12
24
  * delay: "2h",
13
- * prompt: "Re-check CI. Only act if still failing.",
25
+ * handler: verdictRecheck,
26
+ * args: { headSha: "abc" },
14
27
  * });
15
28
  * ```
16
29
  *
17
30
  * Distinct from `defineSchedule` (deploy-time global cron under
18
31
  * `agent/schedules/`). Reminders are created at runtime and bound to a
19
- * channel continuation. Prefer `run` + function `until` for host policy
20
- * (silent ticks); agents use prompt-form create via tools.
32
+ * channel continuation. Prefer named `handler` + serializable `args` for
33
+ * hosted v2 durability; anonymous `run` remains on local and hosted v1.
34
+ */
35
+ import { brandDefinition } from "./internal/brand.js";
36
+ /**
37
+ * Brand a named reminder handler for `agent/reminders/<name>.ts`.
38
+ * The registry name is the module stem (not a field on the definition).
21
39
  */
22
- export {};
40
+ export function defineReminder(config) {
41
+ if (typeof config.run !== "function") {
42
+ throw new Error("defineReminder requires a `run` function");
43
+ }
44
+ return brandDefinition("reminder", config);
45
+ }
@@ -101,6 +101,12 @@ export interface KvListKeysResponse {
101
101
  */
102
102
  truncated?: boolean;
103
103
  }
104
+ export declare class StorageRpcError extends Error {
105
+ readonly code = "agent_dependency_failed";
106
+ readonly reasonCode: string;
107
+ readonly status: number;
108
+ constructor(message: string, reasonCode: string, status: number);
109
+ }
104
110
  /**
105
111
  * One authenticated POST to the control-plane proxy. Shared with the
106
112
  * architecture-v2 backend (`cursor-hosted-v2.ts`), which speaks a different
@@ -1 +1 @@
1
- {"version":3,"file":"cursor-hosted.d.ts","sourceRoot":"","sources":["../../src/storage-backends/cursor-hosted.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAKH,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EACf,aAAa,EAEb,iBAAiB,EAClB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,SAAS,EAAiC,MAAM,aAAa,CAAC;AAW5E;;;GAGG;AACH,eAAO,MAAM,+CAA+C,EAC1D,cAAuB,CAAC;AAE1B;;;GAGG;AACH,eAAO,MAAM,iCAAiC,EAC5C,2BAAoC,CAAC;AAEvC;;;GAGG;AACH,eAAO,MAAM,8BAA8B,EAAE,SAAS;IACpD,OAAO,+CAA+C;IACtD,OAAO,iCAAiC;CAIzC,CAAC;AAEF,MAAM,WAAW,0BAA0B;IACzC;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qDAAqD;IACrD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IACzC,0BAA0B;IAC1B,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;CACtB;AAED;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,EAAE,OAAO,MAE1C,CAAC;AAEF,4EAA4E;AAC5E,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAM7D;AAED,KAAK,0BAA0B,GAAG,QAAQ,CACxC,IAAI,CAAC,aAAa,EAAE,KAAK,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,YAAY,CAAC,CACtE,GAAG;IACF,QAAQ,CAAC,CAAC,qBAAqB,CAAC,EAAE,IAAI,CAAC;IACvC,GAAG,EAAE,eAAe,CAAC;IACrB,KAAK,EAAE,iBAAiB,CAAC;IACzB,GAAG,EAAE,cAAc,CAAC;CACrB,CAAC;AA4BF,6EAA6E;AAC7E,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IACxB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,mEAAmE;AACnE,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,OAAO,CAAC;IACZ,2CAA2C;IAC3C,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,iEAAiE;IACjE,OAAO,EAAE;QAAE,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CAC9D;AAED,2CAA2C;AAC3C,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,EAAE,CAAC;IACf;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAyCD;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,CAAC,EAChC,OAAO,EAAE,0BAA0B,EACnC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,CAAC,CAAC,CAqCZ;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,GAAE,0BAA+B,GACvC,0BAA0B,CAuJ5B"}
1
+ {"version":3,"file":"cursor-hosted.d.ts","sourceRoot":"","sources":["../../src/storage-backends/cursor-hosted.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAKH,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EACf,aAAa,EAEb,iBAAiB,EAClB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,SAAS,EAAiC,MAAM,aAAa,CAAC;AAW5E;;;GAGG;AACH,eAAO,MAAM,+CAA+C,EAC1D,cAAuB,CAAC;AAE1B;;;GAGG;AACH,eAAO,MAAM,iCAAiC,EAC5C,2BAAoC,CAAC;AAEvC;;;GAGG;AACH,eAAO,MAAM,8BAA8B,EAAE,SAAS;IACpD,OAAO,+CAA+C;IACtD,OAAO,iCAAiC;CAIzC,CAAC;AAEF,MAAM,WAAW,0BAA0B;IACzC;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qDAAqD;IACrD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IACzC,0BAA0B;IAC1B,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;CACtB;AAED;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,EAAE,OAAO,MAE1C,CAAC;AAEF,4EAA4E;AAC5E,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAM7D;AAED,KAAK,0BAA0B,GAAG,QAAQ,CACxC,IAAI,CAAC,aAAa,EAAE,KAAK,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,YAAY,CAAC,CACtE,GAAG;IACF,QAAQ,CAAC,CAAC,qBAAqB,CAAC,EAAE,IAAI,CAAC;IACvC,GAAG,EAAE,eAAe,CAAC;IACrB,KAAK,EAAE,iBAAiB,CAAC;IACzB,GAAG,EAAE,cAAc,CAAC;CACrB,CAAC;AA4BF,6EAA6E;AAC7E,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IACxB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,mEAAmE;AACnE,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,OAAO,CAAC;IACZ,2CAA2C;IAC3C,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,iEAAiE;IACjE,OAAO,EAAE;QAAE,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CAC9D;AAED,2CAA2C;AAC3C,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,EAAE,CAAC;IACf;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAaD,qBAAa,eAAgB,SAAQ,KAAK;IACxC,QAAQ,CAAC,IAAI,6BAA6B;IAC1C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB,YAAY,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAK9D;CACF;AAyCD;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,CAAC,EAChC,OAAO,EAAE,0BAA0B,EACnC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,CAAC,CAAC,CAoDZ;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,GAAE,0BAA+B,GACvC,0BAA0B,CAuJ5B"}
@@ -70,6 +70,25 @@ export function isCursorHostedStorage(value) {
70
70
  value !== null &&
71
71
  value[CURSOR_HOSTED_STORAGE] === true);
72
72
  }
73
+ const STORAGE_RPC_ERROR_CODES = new Set([
74
+ "agentsdk_kv_credential_missing",
75
+ "agentsdk_kv_cursor_invalid",
76
+ "agentsdk_kv_deployment_unbound",
77
+ "agentsdk_kv_key_invalid",
78
+ "agentsdk_kv_request_invalid",
79
+ "agentsdk_kv_storage_not_allowed",
80
+ "agentsdk_kv_value_invalid",
81
+ "agentsdk_kv_version_invalid",
82
+ ]);
83
+ export class StorageRpcError extends Error {
84
+ constructor(message, reasonCode, status) {
85
+ super(message);
86
+ this.code = "agent_dependency_failed";
87
+ this.name = "StorageRpcError";
88
+ this.reasonCode = reasonCode;
89
+ this.status = status;
90
+ }
91
+ }
73
92
  function toCasResult(response) {
74
93
  var _a;
75
94
  if (response.ok) {
@@ -140,7 +159,16 @@ export function storageRpc(options, path, body) {
140
159
  typeof parsed.error === "string"
141
160
  ? parsed.error
142
161
  : `HTTP ${response.status}`;
143
- throw new Error(`cursorHostedStorage ${path}: ${error}`);
162
+ const candidate = parsed !== null &&
163
+ typeof parsed === "object" &&
164
+ "code" in parsed &&
165
+ typeof parsed.code === "string"
166
+ ? parsed.code
167
+ : undefined;
168
+ const code = candidate !== undefined && STORAGE_RPC_ERROR_CODES.has(candidate)
169
+ ? candidate
170
+ : "agentsdk_storage_http_error";
171
+ throw new StorageRpcError(`cursorHostedStorage ${path}: ${error}`, code, response.status);
144
172
  }
145
173
  return parsed;
146
174
  });
package/dist/types.d.ts CHANGED
@@ -205,20 +205,8 @@ export interface AgentConfig {
205
205
  */
206
206
  tools?: ToolName[];
207
207
  /**
208
- * Hosted architecture this agent deploys onto. Omit or `"v1"` keeps the
209
- * current control plane and engine-minted conversation keys. `"v2"`
210
- * deploys onto the v2 control plane (v2 APIs and schemas). Omitted
211
- * channel `continuation` then inherits from declared events (`github.pr/v2`,
212
- * `github.issue/v2`, `github.none/v2`, `slack.thread/v2`, `origin.pr/v2`,
213
- * `deployments.deployment/v2`, `change_monitors.checkpoint/v2`,
214
- * `issues.issue/v2`, `none/v2`). An explicit per-channel selector
215
- * still overrides.
216
- *
217
- * ```ts
218
- * export default defineAgent({
219
- * architecture: "v2",
220
- * });
221
- * ```
208
+ * Hosted architecture override. Leave this unset unless Cursor instructs
209
+ * you to select a specific architecture.
222
210
  */
223
211
  architecture?: AgentArchitecture;
224
212
  }
@@ -1502,6 +1490,8 @@ export type SessionEventPayload = {
1502
1490
  type: "turn.failed";
1503
1491
  data: {
1504
1492
  message: string;
1493
+ /** Machine-readable terminal status. Omitted on legacy stored events. */
1494
+ status?: "error" | "cancelled";
1505
1495
  };
1506
1496
  } | {
1507
1497
  /**
@@ -1677,6 +1667,10 @@ export interface TurnOutcome {
1677
1667
  status: "finished" | "error" | "cancelled";
1678
1668
  result?: string;
1679
1669
  errorMessage?: string;
1670
+ /** Stable machine-readable runner code when the failure supplied one. */
1671
+ errorCode?: string;
1672
+ /** Why a cancelled turn stopped, when the engine observed the boundary. */
1673
+ cancellationReason?: "signal" | "runner";
1680
1674
  usage?: TurnUsage;
1681
1675
  /** Cost of {@link usage} from the Cloud Agents cost endpoint. */
1682
1676
  cost?: TurnCost;
@@ -1744,7 +1738,10 @@ export interface ChannelSession {
1744
1738
  getEventStream(options?: {
1745
1739
  startIndex?: number;
1746
1740
  }): Promise<ReadableStream<Uint8Array>>;
1747
- /** Resolves when the currently running turn reaches a terminal event. */
1741
+ /**
1742
+ * Resolves after the currently running turn reaches a terminal event and
1743
+ * handlers already queued for that session have settled.
1744
+ */
1748
1745
  waitForCompletion(): Promise<TurnOutcome>;
1749
1746
  /** Re-key the session's channel-local continuation token. */
1750
1747
  setContinuationToken(token: string | null): Promise<void>;
@@ -2052,7 +2049,14 @@ export interface ReceiveInput {
2052
2049
  /** Channel-specific delivery target (e.g. a chat channel id). */
2053
2050
  target?: JsonObject;
2054
2051
  }
2055
- /** Per-event channel context: live (persisted) state plus session ops. */
2052
+ /**
2053
+ * Per-event channel context. `state` is mutable. Turn events receive the
2054
+ * state snapshot captured for that turn; handler mutations are recursively
2055
+ * merged into the latest persisted state so fields refreshed by overlapping
2056
+ * deliveries survive. At paths changed by the handler, objects merge
2057
+ * recursively, arrays and scalars replace the latest value, and deletion
2058
+ * removes the latest value. Events outside a turn receive current live state.
2059
+ */
2056
2060
  export interface ChannelEventContext<TState = JsonValue> {
2057
2061
  channelId: string;
2058
2062
  state: TState;
@@ -2068,6 +2072,11 @@ export interface SessionContext {
2068
2072
  * relative path cannot read another session's files.
2069
2073
  */
2070
2074
  host: HostContext;
2075
+ /**
2076
+ * Durable artifacts bound to this event's session and turn. `tag`
2077
+ * auto-fills both ids and rejects a conflicting explicit `sessionId`.
2078
+ */
2079
+ artifacts: ArtifactsApi;
2071
2080
  }
2072
2081
  export type ChannelEventHandler<TState = JsonValue, TEvent extends SessionEvent = SessionEvent> = (event: TEvent, channel: ChannelEventContext<TState>, ctx: SessionContext) => void | Promise<void>;
2073
2082
  /** Handlers are keyed by event type and receive the narrowed event. */
@@ -2081,6 +2090,13 @@ export type ChannelEventHandlers<TState = JsonValue> = {
2081
2090
  /** Bound helpers passed to {@link ChannelConfig.onStart}. */
2082
2091
  export interface ChannelStartArgs {
2083
2092
  send: SendMessageFn;
2093
+ /**
2094
+ * Hosted architecture from {@link AgentConfig.architecture}. Omitted
2095
+ * means v1. Host pipelines that call `send()` themselves (instead of
2096
+ * letting the channel adapter stamp continuation) branch on this so
2097
+ * v1 `continuationToken` and v2 `claim` stay mutually exclusive.
2098
+ */
2099
+ architecture?: AgentArchitecture;
2084
2100
  getSession(sessionId: string): Promise<ChannelSession | null>;
2085
2101
  receive(channel: ChannelDefinition | HttpChannelDefinition | string, input: ReceiveInput): Promise<ChannelSession>;
2086
2102
  /** Call an authored server tool directly (no model turn). */
@@ -2232,9 +2248,8 @@ export interface HttpChannelConfig {
2232
2248
  /** Route auth chain. Defaults to `[localDevStrict()]`. */
2233
2249
  auth?: AuthPolicy[];
2234
2250
  /**
2235
- * Continuation selector. Omitted inherits {@link AgentConfig.architecture}:
2236
- * `"none/v1"` unless the agent set `architecture: "v2"` (then `"none/v2"`
2237
- * → `evt:`). Override with an explicit `"none/v1"` or `"none/v2"`.
2251
+ * Continuation selector. Omit this to inherit the agent architecture's
2252
+ * default. Set it explicitly only when migrating persisted identities.
2238
2253
  */
2239
2254
  continuation?: ContinuationIdentity;
2240
2255
  /**
@@ -2321,6 +2336,8 @@ export type ArtifactsDefinition = ArtifactsConfig & BrandedDefinition<"artifacts
2321
2336
  */
2322
2337
  export interface ResultContext {
2323
2338
  session: SessionInfo;
2339
+ /** Durable channel state captured for this turn. */
2340
+ channelState: JsonValue;
2324
2341
  host: HostContext;
2325
2342
  artifacts: ArtifactsApi;
2326
2343
  stateRoot: string;
@@ -2432,7 +2449,26 @@ export interface ScheduleConfig {
2432
2449
  run?: (args: ScheduleHandlerArgs) => void | Promise<void>;
2433
2450
  }
2434
2451
  export type ScheduleDefinition = ScheduleConfig & BrandedDefinition<"schedule">;
2452
+ /**
2453
+ * Authored at `agent/reminders/<name>.ts`. The registry name is the module
2454
+ * stem. Pass the discovered definition to {@link ReminderCreateInput.handler}
2455
+ * with serializable {@link ReminderCreateInput.args}; the engine persists the
2456
+ * stem, not the function.
2457
+ */
2458
+ export interface ReminderHandlerConfig {
2459
+ /**
2460
+ * Invoked on every fire with {@link ReminderFireContext} (including the
2461
+ * create-time {@link ReminderFireContext.args} blob).
2462
+ */
2463
+ run: (ctx: ReminderFireContext) => Promise<ReminderFireResult>;
2464
+ }
2465
+ export type ReminderDefinition = ReminderHandlerConfig & BrandedDefinition<"reminder">;
2466
+ export interface DiscoveredReminder {
2467
+ name: string;
2468
+ definition: ReminderDefinition;
2469
+ }
2435
2470
  export type ReminderBusyPolicy = "skipIfBusy" | "queueBehindTurn";
2471
+ /** Public reminder status. Internal claim state (`firing`) is not exposed. */
2436
2472
  export type ReminderStatus = "armed" | "completed" | "cancelled" | "disarmed";
2437
2473
  export type ReminderScheduleKind = "every" | "cron" | "delay" | "at";
2438
2474
  export type ReminderFireResult = {
@@ -2463,6 +2499,11 @@ export interface ReminderUntilContext {
2463
2499
  }
2464
2500
  export interface ReminderFireContext extends ReminderUntilContext {
2465
2501
  appAuth: AuthContext;
2502
+ /**
2503
+ * Serializable args from {@link ReminderCreateInput.args} when the fire
2504
+ * uses a named {@link ReminderCreateInput.handler}. Empty object otherwise.
2505
+ */
2506
+ args: JsonObject;
2466
2507
  /** Wake the reminder's already-bound session (target is implicit). */
2467
2508
  followup(args: {
2468
2509
  message: string;
@@ -2478,9 +2519,11 @@ export interface ReminderFireContext extends ReminderUntilContext {
2478
2519
  /**
2479
2520
  * Create a durable wake bound to a channel continuation.
2480
2521
  *
2481
- * Exactly one of `prompt` | `run`, and exactly one of
2522
+ * Exactly one of `prompt` | `handler` | `run`, and exactly one of
2482
2523
  * `every` | `cron` | `delay` | `at`. Prompt fires always follow up into the
2483
- * bound session.
2524
+ * bound session. Named `handler` resolves `agent/reminders/<name>.ts` on
2525
+ * every fire (survives restart). Anonymous `run` stays supported on local
2526
+ * and hosted v1; hosted architecture v2 rejects it at create.
2484
2527
  *
2485
2528
  * @example Recurring (host policy)
2486
2529
  * ```ts
@@ -2498,6 +2541,28 @@ export interface ReminderFireContext extends ReminderUntilContext {
2498
2541
  * });
2499
2542
  * ```
2500
2543
  *
2544
+ * @example Named handler (durable across restart / hosted v2)
2545
+ * ```ts
2546
+ * // agent/reminders/verdict_recheck.ts
2547
+ * export default defineReminder({
2548
+ * async run({ args, followup }) {
2549
+ * // ...
2550
+ * return { action: "delivered" };
2551
+ * },
2552
+ * });
2553
+ *
2554
+ * import verdictRecheck from "./reminders/verdict_recheck.js";
2555
+ *
2556
+ * await host.reminders.create({
2557
+ * purpose: "verdict_recheck",
2558
+ * channelId: "origin",
2559
+ * continuationToken,
2560
+ * delay: "15m",
2561
+ * handler: verdictRecheck,
2562
+ * args: { headSha: "abc" },
2563
+ * });
2564
+ * ```
2565
+ *
2501
2566
  * @example One-shot (agent tool / prompt form)
2502
2567
  * ```ts
2503
2568
  * await host.reminders.create({
@@ -2518,8 +2583,22 @@ export interface ReminderCreateInput {
2518
2583
  continuationToken: string;
2519
2584
  /** Optional opaque metadata (e.g. `{ prUrl }`). */
2520
2585
  target?: Record<string, unknown>;
2521
- /** Exactly one of prompt or run. */
2586
+ /** Exactly one of prompt, handler, or run. */
2522
2587
  prompt?: string;
2588
+ /**
2589
+ * A definition discovered from `agent/reminders/<name>.ts`, or its stem
2590
+ * for compatibility. Mutually exclusive with `prompt` and `run`. The
2591
+ * definition form avoids coupling callers to a filename string; discovery
2592
+ * resolves it to the stable stem persisted by the control plane. Do not
2593
+ * combine with {@link until}; encode stop conditions in {@link args} and
2594
+ * the handler body.
2595
+ */
2596
+ handler?: ReminderDefinition | string;
2597
+ /**
2598
+ * Serializable args for {@link handler} (UTF-8 JSON capped at 32 KiB).
2599
+ * Only valid with `handler`.
2600
+ */
2601
+ args?: JsonObject;
2523
2602
  run?: (ctx: ReminderFireContext) => Promise<ReminderFireResult>;
2524
2603
  /** Exactly one schedule shape. */
2525
2604
  every?: string;
@@ -2529,6 +2608,9 @@ export interface ReminderCreateInput {
2529
2608
  /**
2530
2609
  * Auto-cancel: function (host evaluates, true → cancel) XOR prompt string
2531
2610
  * (agent-facing stop condition; platform does not interpret it).
2611
+ * Valid with `prompt` (string until) and legacy `run` (function until on
2612
+ * local / hosted v1). Not valid with named `handler`. Function until is
2613
+ * rejected on hosted architecture v2.
2532
2614
  */
2533
2615
  until?: string | ((ctx: ReminderUntilContext) => Promise<boolean>);
2534
2616
  /**
@@ -2545,6 +2627,10 @@ export interface ReminderInfo {
2545
2627
  scheduleKind: ReminderScheduleKind;
2546
2628
  scheduleValue: string;
2547
2629
  prompt?: string;
2630
+ /** Named handler stem when create used `handler`. */
2631
+ handler?: string;
2632
+ /** Serializable args when create used `handler`. */
2633
+ args?: JsonObject;
2548
2634
  untilPrompt?: string;
2549
2635
  busyPolicy: ReminderBusyPolicy;
2550
2636
  status: ReminderStatus;
@@ -2776,6 +2862,8 @@ export interface AgentProject {
2776
2862
  httpChannel: HttpChannelDefinition;
2777
2863
  channels: DiscoveredChannel[];
2778
2864
  schedules: DiscoveredSchedule[];
2865
+ /** Named reminder handlers from `agent/reminders/*` (optional / additive). */
2866
+ reminders?: DiscoveredReminder[];
2779
2867
  hooks: DiscoveredHook[];
2780
2868
  /** Live A/B metric experiments (`defineAB`). */
2781
2869
  abs: DiscoveredAB[];
@@ -2899,6 +2987,10 @@ export interface AgentProjectInfo {
2899
2987
  cron: string;
2900
2988
  kind: "markdown" | "run";
2901
2989
  }>;
2990
+ /** Named reminder handlers (`agent/reminders/<name>.ts`) when present. */
2991
+ reminders?: Array<{
2992
+ name: string;
2993
+ }>;
2902
2994
  hooks: string[];
2903
2995
  /** Live A/B experiment names (`defineAB` under `agent/ab`). */
2904
2996
  abs: string[];
@@ -3048,8 +3140,11 @@ export interface ServeOptions {
3048
3140
  stateRoot?: string;
3049
3141
  /**
3050
3142
  * Cursor API key for the SDK runner and Cursor account MCP connections.
3051
- * When omitted, falls back to `CURSOR_API_KEY`, then to the credential
3052
- * stored by `agent-sdk login`.
3143
+ * When omitted, falls back to `CURSOR_API_KEY`, then
3144
+ * `CURSOR_API_KEY_FILE` (hosted default `/run/cursor/secrets/CURSOR_API_KEY`
3145
+ * when unset), then `CURSOR_SERVICE_ACCOUNT_KEY`, then the credential
3146
+ * stored by `agent-sdk login`. A bind file wins over
3147
+ * `CURSOR_SERVICE_ACCOUNT_KEY`.
3053
3148
  */
3054
3149
  apiKey?: string;
3055
3150
  /** Run schedules on their cron cadence. Defaults to `!dev`. */
@@ -3134,7 +3229,9 @@ export interface ServeOptions {
3134
3229
  * GitHub and Origin subscriptions are registered independently.
3135
3230
  * The stream is read as the host's Cursor user, so this requires a signed-in
3136
3231
  * host: `serve` throws when no key resolves from `apiKey` here,
3137
- * {@link ServeOptions.apiKey}, `CURSOR_API_KEY`, or `agent-sdk login`.
3232
+ * {@link ServeOptions.apiKey}, `CURSOR_API_KEY`, `CURSOR_API_KEY_FILE`
3233
+ * (hosted default `/run/cursor/secrets/CURSOR_API_KEY` when unset),
3234
+ * `CURSOR_SERVICE_ACCOUNT_KEY`, or `agent-sdk login`.
3138
3235
  */
3139
3236
  cursorEvents?: {
3140
3237
  repos: string[];