@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
@@ -0,0 +1,189 @@
1
+ /**
2
+ * Versioned internal reminder control-plane protocol.
3
+ *
4
+ * CP owns reminder id, status, fireCount, nextFireAt, claim, and
5
+ * completion/rearm. The guest validates create input and executes an
6
+ * immutable fire descriptor, returning a structured outcome. Cursor-hosted
7
+ * HTTP CP is not implemented here; {@link ReminderControlPlane} is the
8
+ * surface the next backend PR will speak.
9
+ *
10
+ * Not part of the public package API — keep behind the internal boundary.
11
+ */
12
+ import type { JsonObject, ReminderBusyPolicy, ReminderScheduleKind } from "../types.js";
13
+ import type { ReminderRecord } from "./reminder-store.js";
14
+ /** Wire / persistence version for this control-plane protocol. */
15
+ export declare const REMINDER_CP_PROTOCOL_VERSION: 1;
16
+ /** Each recurring/retry fire can spend a model turn and create hosted work. */
17
+ export declare const REMINDER_CP_MIN_RECURRING_INTERVAL_MS: 60000;
18
+ export type ReminderCpProtocolVersion = typeof REMINDER_CP_PROTOCOL_VERSION;
19
+ /**
20
+ * Normalized raw schedule for create intents (JSON-safe).
21
+ * CP resolves this into nextFireAtMs / intervalMs — guests must not send
22
+ * authoritative fire times.
23
+ */
24
+ export type ReminderScheduleSpec = {
25
+ kind: "every";
26
+ every: string;
27
+ } | {
28
+ kind: "cron";
29
+ cron: string;
30
+ } | {
31
+ kind: "delay";
32
+ delay: string | number;
33
+ } | {
34
+ kind: "at";
35
+ at: string;
36
+ };
37
+ /**
38
+ * Guest → CP create intent. No id/status/fireCount/nextFireAt — CP assigns
39
+ * those after resolving {@link ReminderScheduleSpec}.
40
+ */
41
+ export interface ReminderCreateIntent {
42
+ protocolVersion: ReminderCpProtocolVersion;
43
+ purpose: string;
44
+ channelId: string;
45
+ continuationToken: string;
46
+ target?: Record<string, unknown>;
47
+ schedule: ReminderScheduleSpec;
48
+ prompt?: string;
49
+ handler?: string;
50
+ args?: JsonObject;
51
+ hasRunHandler: boolean;
52
+ hasUntilFn: boolean;
53
+ untilPrompt?: string;
54
+ busyPolicy: ReminderBusyPolicy;
55
+ }
56
+ /**
57
+ * Immutable fire descriptor issued after CP claim. Guest execution must not
58
+ * mutate authoritative status/fireCount; it returns {@link ReminderExecutionOutcome}.
59
+ */
60
+ export interface ReminderFireDescriptor {
61
+ protocolVersion: ReminderCpProtocolVersion;
62
+ id: string;
63
+ /** Fire index being executed (equals record.fireCount at claim time). */
64
+ fireCount: number;
65
+ /** CAS generation captured at claim; cancel/rekey bumps it. */
66
+ generation: number;
67
+ purpose: string;
68
+ channelId: string;
69
+ continuationToken: string;
70
+ target?: Record<string, unknown>;
71
+ scheduleKind: ReminderScheduleKind;
72
+ scheduleValue: string;
73
+ intervalMs?: number;
74
+ prompt?: string;
75
+ handler?: string;
76
+ args?: JsonObject;
77
+ hasRunHandler: boolean;
78
+ hasUntilFn: boolean;
79
+ untilPrompt?: string;
80
+ busyPolicy: ReminderBusyPolicy;
81
+ /** Due time that triggered this claim. */
82
+ nextFireAtMs: number;
83
+ claimedAtMs: number;
84
+ }
85
+ /** Claim token used to apply an outcome exactly once for (id, fireCount, generation). */
86
+ export interface ReminderFireClaim {
87
+ id: string;
88
+ fireCount: number;
89
+ generation: number;
90
+ }
91
+ /**
92
+ * Wire-JSON-safe guest execution outcome. Retry is explicit and keyed by
93
+ * (id, fireCount) — `"retry"` does not increment fireCount.
94
+ * `reschedule.at` is an ISO-8601 string (never a Date).
95
+ */
96
+ export type ReminderExecutionOutcome = {
97
+ kind: "delivered";
98
+ /** Optional one-shot reschedule override (same as handler reschedule). */
99
+ reschedule?: ReminderWireReschedule;
100
+ } | {
101
+ kind: "skipped";
102
+ reschedule?: ReminderWireReschedule;
103
+ } | {
104
+ kind: "stop";
105
+ reason: string;
106
+ } | {
107
+ /** Re-arm the same fireCount after an explicit, idempotent retry. */
108
+ kind: "retry";
109
+ delayMs?: number;
110
+ reason?: string;
111
+ };
112
+ /** JSON-safe reschedule override for outcomes / hosted wire. */
113
+ export interface ReminderWireReschedule {
114
+ delay?: string | number;
115
+ /** ISO-8601 timestamp — never a Date instance. */
116
+ at?: string;
117
+ }
118
+ export type ReminderOutcomeApplyResult = {
119
+ applied: true;
120
+ record: ReminderRecord;
121
+ } | {
122
+ applied: false;
123
+ reason: "missing" | "stale_generation" | "stale_fire_count" | "not_claimed" | "duplicate";
124
+ record?: ReminderRecord;
125
+ };
126
+ /** Guest executor callback invoked by the CP after a successful claim. */
127
+ export type ReminderGuestExecutor = (descriptor: ReminderFireDescriptor) => Promise<ReminderExecutionOutcome>;
128
+ /**
129
+ * Control-plane reminder API (local disk today; Cursor-hosted HTTP later).
130
+ * Extends document CRUD with create-intent, cancel/rekey CAS, and outcome apply.
131
+ */
132
+ export interface ReminderControlPlane {
133
+ readonly protocolVersion: ReminderCpProtocolVersion;
134
+ createReminder(intent: ReminderCreateIntent): Promise<ReminderRecord>;
135
+ getReminder(id: string): Promise<ReminderRecord | undefined>;
136
+ listReminders(): Promise<ReminderRecord[]>;
137
+ cancelReminder(id: string, reason?: string): Promise<ReminderRecord | undefined>;
138
+ /**
139
+ * Re-key armed (and in-flight) reminders for a continuation rotation.
140
+ * Bumps generation so an in-flight outcome cannot land on the old token.
141
+ */
142
+ rekeyReminders(channelId: string, oldToken: string, newToken: string): Promise<number>;
143
+ applyReminderOutcome(claim: ReminderFireClaim, outcome: ReminderExecutionOutcome): Promise<ReminderOutcomeApplyResult>;
144
+ }
145
+ export declare function newReminderId(): string;
146
+ export declare function recordGeneration(record: ReminderRecord): number;
147
+ /** Map a JSON-safe schedule spec into resolveSchedule create fields. */
148
+ export declare function scheduleSpecToCreateFields(schedule: ReminderScheduleSpec): {
149
+ every?: string;
150
+ cron?: string;
151
+ delay?: string | number;
152
+ at?: string;
153
+ };
154
+ /**
155
+ * Build a wire-safe schedule spec from guest create input.
156
+ * Normalizes `at` Dates/numbers to ISO strings.
157
+ */
158
+ export declare function scheduleSpecFromCreateInput(input: {
159
+ every?: string;
160
+ cron?: string;
161
+ delay?: string | number;
162
+ at?: Date | string | number;
163
+ }): ReminderScheduleSpec;
164
+ /**
165
+ * Normalize a guest-facing `at` value to an ISO string for the wire intent.
166
+ */
167
+ export declare function normalizeScheduleAt(at: Date | string | number): string;
168
+ /** Normalize handler reschedule into a wire-JSON-safe shape. */
169
+ export declare function toWireReschedule(reschedule: {
170
+ delay?: string | number;
171
+ at?: Date | string;
172
+ }): ReminderWireReschedule;
173
+ /**
174
+ * Build a durable record from a create intent. CP owns schedule resolution
175
+ * via {@link resolveSchedule}; pass `nowMs` for deterministic tests.
176
+ */
177
+ export declare function intentToNewRecord(intent: ReminderCreateIntent, nowMs?: number): ReminderRecord;
178
+ export declare function toFireDescriptor(record: ReminderRecord, claimedAtMs: number): ReminderFireDescriptor;
179
+ export declare function claimFromDescriptor(descriptor: ReminderFireDescriptor): ReminderFireClaim;
180
+ /** Next fire time from the record's recurring schedule (CP-owned). */
181
+ export declare function nextScheduleFireAtMs(record: ReminderRecord, afterMs: number): number;
182
+ export declare function isOneShotSchedule(kind: ReminderScheduleKind): boolean;
183
+ /**
184
+ * Pure CAS apply of a guest outcome onto a reminder record.
185
+ * Callers persist the returned record when `applied: true`.
186
+ * Requires `status === "firing"` — an armed record was never claimed.
187
+ */
188
+ export declare function applyOutcomeToRecord(record: ReminderRecord, claim: ReminderFireClaim, outcome: ReminderExecutionOutcome, nowMs?: number): ReminderOutcomeApplyResult;
189
+ //# sourceMappingURL=reminder-control-plane-protocol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reminder-control-plane-protocol.d.ts","sourceRoot":"","sources":["../../src/internal/reminder-control-plane-protocol.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,251 @@
1
+ /**
2
+ * Versioned internal reminder control-plane protocol.
3
+ *
4
+ * CP owns reminder id, status, fireCount, nextFireAt, claim, and
5
+ * completion/rearm. The guest validates create input and executes an
6
+ * immutable fire descriptor, returning a structured outcome. Cursor-hosted
7
+ * HTTP CP is not implemented here; {@link ReminderControlPlane} is the
8
+ * surface the next backend PR will speak.
9
+ *
10
+ * Not part of the public package API — keep behind the internal boundary.
11
+ */
12
+ import { randomBytes } from "node:crypto";
13
+ import { parseDuration } from "./duration.js";
14
+ import { nextCronFireMs, ReminderValidationError, resolveSchedule, } from "./reminder-schedule.js";
15
+ /** Wire / persistence version for this control-plane protocol. */
16
+ export const REMINDER_CP_PROTOCOL_VERSION = 1;
17
+ /** Each recurring/retry fire can spend a model turn and create hosted work. */
18
+ export const REMINDER_CP_MIN_RECURRING_INTERVAL_MS = 60000;
19
+ export function newReminderId() {
20
+ return `rem_${randomBytes(8).toString("hex")}`;
21
+ }
22
+ export function recordGeneration(record) {
23
+ var _a;
24
+ return (_a = record.generation) !== null && _a !== void 0 ? _a : 0;
25
+ }
26
+ /** Map a JSON-safe schedule spec into resolveSchedule create fields. */
27
+ export function scheduleSpecToCreateFields(schedule) {
28
+ switch (schedule.kind) {
29
+ case "every":
30
+ return { every: schedule.every };
31
+ case "cron":
32
+ return { cron: schedule.cron };
33
+ case "delay":
34
+ return { delay: schedule.delay };
35
+ case "at":
36
+ return { at: schedule.at };
37
+ }
38
+ }
39
+ /**
40
+ * Build a wire-safe schedule spec from guest create input.
41
+ * Normalizes `at` Dates/numbers to ISO strings.
42
+ */
43
+ export function scheduleSpecFromCreateInput(input) {
44
+ const shapes = [
45
+ input.every !== undefined,
46
+ input.cron !== undefined,
47
+ input.delay !== undefined,
48
+ input.at !== undefined,
49
+ ].filter(Boolean);
50
+ if (shapes.length !== 1) {
51
+ throw new ReminderValidationError("reminders.create requires exactly one of every, cron, delay, or at");
52
+ }
53
+ if (input.every !== undefined) {
54
+ return { kind: "every", every: input.every };
55
+ }
56
+ if (input.cron !== undefined) {
57
+ return { kind: "cron", cron: input.cron };
58
+ }
59
+ if (input.delay !== undefined) {
60
+ return { kind: "delay", delay: input.delay };
61
+ }
62
+ return { kind: "at", at: normalizeScheduleAt(input.at) };
63
+ }
64
+ /**
65
+ * Normalize a guest-facing `at` value to an ISO string for the wire intent.
66
+ */
67
+ export function normalizeScheduleAt(at) {
68
+ if (at instanceof Date) {
69
+ if (!Number.isFinite(at.getTime())) {
70
+ throw new ReminderValidationError(`Invalid at time: ${String(at)}`);
71
+ }
72
+ return at.toISOString();
73
+ }
74
+ if (typeof at === "number") {
75
+ if (!Number.isFinite(at)) {
76
+ throw new ReminderValidationError(`Invalid at time: ${String(at)}`);
77
+ }
78
+ return new Date(at).toISOString();
79
+ }
80
+ const ms = Date.parse(at);
81
+ if (!Number.isFinite(ms)) {
82
+ throw new ReminderValidationError(`Invalid at time: ${String(at)}`);
83
+ }
84
+ // Preserve caller string when it already parses; still wire-safe.
85
+ return at;
86
+ }
87
+ /** Normalize handler reschedule into a wire-JSON-safe shape. */
88
+ export function toWireReschedule(reschedule) {
89
+ const out = {};
90
+ if (reschedule.delay !== undefined) {
91
+ out.delay = reschedule.delay;
92
+ }
93
+ if (reschedule.at !== undefined) {
94
+ out.at =
95
+ reschedule.at instanceof Date
96
+ ? reschedule.at.toISOString()
97
+ : String(reschedule.at);
98
+ }
99
+ return out;
100
+ }
101
+ /**
102
+ * Build a durable record from a create intent. CP owns schedule resolution
103
+ * via {@link resolveSchedule}; pass `nowMs` for deterministic tests.
104
+ */
105
+ export function intentToNewRecord(intent, nowMs = Date.now()) {
106
+ var _a;
107
+ if (intent.protocolVersion !== REMINDER_CP_PROTOCOL_VERSION) {
108
+ throw new ReminderValidationError(`Unsupported reminder CP protocol version ${String(intent.protocolVersion)}`);
109
+ }
110
+ const resolved = resolveSchedule(scheduleSpecToCreateFields(intent.schedule), nowMs);
111
+ if (resolved.kind === "every" &&
112
+ ((_a = resolved.intervalMs) !== null && _a !== void 0 ? _a : 0) < REMINDER_CP_MIN_RECURRING_INTERVAL_MS) {
113
+ throw new ReminderValidationError(`every must be >= 1m (got ${intent.schedule.kind === "every" ? intent.schedule.every : ""})`);
114
+ }
115
+ const nowIso = new Date(nowMs).toISOString();
116
+ return {
117
+ version: 1,
118
+ id: newReminderId(),
119
+ purpose: intent.purpose,
120
+ channelId: intent.channelId,
121
+ continuationToken: intent.continuationToken,
122
+ target: intent.target,
123
+ scheduleKind: resolved.kind,
124
+ scheduleValue: resolved.value,
125
+ intervalMs: resolved.intervalMs,
126
+ prompt: intent.prompt,
127
+ handler: intent.handler,
128
+ args: intent.args,
129
+ hasRunHandler: intent.hasRunHandler,
130
+ hasUntilFn: intent.hasUntilFn,
131
+ untilPrompt: intent.untilPrompt,
132
+ busyPolicy: intent.busyPolicy,
133
+ status: "armed",
134
+ fireCount: 0,
135
+ nextFireAtMs: resolved.nextFireAtMs,
136
+ generation: 0,
137
+ createdAt: nowIso,
138
+ updatedAt: nowIso,
139
+ };
140
+ }
141
+ export function toFireDescriptor(record, claimedAtMs) {
142
+ return {
143
+ protocolVersion: REMINDER_CP_PROTOCOL_VERSION,
144
+ id: record.id,
145
+ fireCount: record.fireCount,
146
+ generation: recordGeneration(record),
147
+ purpose: record.purpose,
148
+ channelId: record.channelId,
149
+ continuationToken: record.continuationToken,
150
+ target: record.target,
151
+ scheduleKind: record.scheduleKind,
152
+ scheduleValue: record.scheduleValue,
153
+ intervalMs: record.intervalMs,
154
+ prompt: record.prompt,
155
+ handler: record.handler,
156
+ args: record.args,
157
+ hasRunHandler: record.hasRunHandler,
158
+ hasUntilFn: record.hasUntilFn,
159
+ untilPrompt: record.untilPrompt,
160
+ busyPolicy: record.busyPolicy,
161
+ nextFireAtMs: record.nextFireAtMs,
162
+ claimedAtMs,
163
+ };
164
+ }
165
+ export function claimFromDescriptor(descriptor) {
166
+ return {
167
+ id: descriptor.id,
168
+ fireCount: descriptor.fireCount,
169
+ generation: descriptor.generation,
170
+ };
171
+ }
172
+ function resolveRescheduleMs(reschedule, nowMs) {
173
+ if (reschedule.delay !== undefined) {
174
+ return nowMs + parseDuration(reschedule.delay);
175
+ }
176
+ if (reschedule.at !== undefined) {
177
+ const atMs = Date.parse(reschedule.at);
178
+ if (!Number.isFinite(atMs)) {
179
+ throw new ReminderValidationError("Invalid reminder reschedule.at");
180
+ }
181
+ return atMs;
182
+ }
183
+ throw new ReminderValidationError("reminder reschedule requires delay or at");
184
+ }
185
+ /** Next fire time from the record's recurring schedule (CP-owned). */
186
+ export function nextScheduleFireAtMs(record, afterMs) {
187
+ if (record.scheduleKind === "every" && record.intervalMs !== undefined) {
188
+ return afterMs + record.intervalMs;
189
+ }
190
+ if (record.scheduleKind === "cron") {
191
+ return nextCronFireMs(record.scheduleValue, afterMs);
192
+ }
193
+ throw new ReminderValidationError(`Cannot advance schedule for reminder "${record.id}" (kind=${record.scheduleKind})`);
194
+ }
195
+ export function isOneShotSchedule(kind) {
196
+ return kind === "delay" || kind === "at";
197
+ }
198
+ /**
199
+ * Pure CAS apply of a guest outcome onto a reminder record.
200
+ * Callers persist the returned record when `applied: true`.
201
+ * Requires `status === "firing"` — an armed record was never claimed.
202
+ */
203
+ export function applyOutcomeToRecord(record, claim, outcome, nowMs = Date.now()) {
204
+ var _a;
205
+ if (record.id !== claim.id) {
206
+ return { applied: false, reason: "missing", record };
207
+ }
208
+ // Prefer duplicate over generation mismatch: a successful prior apply
209
+ // bumps both fireCount and generation, and retries of (id, fireCount)
210
+ // must stay idempotent no-ops.
211
+ if (record.fireCount > claim.fireCount) {
212
+ return { applied: false, reason: "duplicate", record };
213
+ }
214
+ if (record.fireCount < claim.fireCount) {
215
+ return { applied: false, reason: "stale_fire_count", record };
216
+ }
217
+ if (recordGeneration(record) !== claim.generation) {
218
+ return { applied: false, reason: "stale_generation", record };
219
+ }
220
+ // Only a claimed (firing) reminder can accept an outcome.
221
+ if (record.status !== "firing") {
222
+ return { applied: false, reason: "not_claimed", record };
223
+ }
224
+ const nowIso = new Date(nowMs).toISOString();
225
+ if (outcome.kind === "retry") {
226
+ const delayMs = Math.max(REMINDER_CP_MIN_RECURRING_INTERVAL_MS, (_a = outcome.delayMs) !== null && _a !== void 0 ? _a : REMINDER_CP_MIN_RECURRING_INTERVAL_MS);
227
+ const updated = Object.assign(Object.assign({}, record), { status: "armed", nextFireAtMs: nowMs + delayMs,
228
+ // Same fireCount; bump generation so a second apply of the old claim is stale.
229
+ generation: recordGeneration(record) + 1, updatedAt: nowIso });
230
+ return { applied: true, record: updated };
231
+ }
232
+ if (outcome.kind === "stop") {
233
+ const updated = Object.assign(Object.assign({}, record), { status: "completed", disarmReason: outcome.reason, fireCount: record.fireCount + 1, generation: recordGeneration(record) + 1, updatedAt: nowIso });
234
+ return { applied: true, record: updated };
235
+ }
236
+ const reschedule = outcome.reschedule;
237
+ if (reschedule !== undefined) {
238
+ const nextFireAtMs = resolveRescheduleMs(reschedule, nowMs);
239
+ const updated = Object.assign(Object.assign({}, record), { status: "armed", fireCount: record.fireCount + 1, nextFireAtMs, scheduleKind: reschedule.delay !== undefined ? "delay" : "at", scheduleValue: reschedule.delay !== undefined
240
+ ? String(reschedule.delay)
241
+ : String(reschedule.at), intervalMs: undefined, generation: recordGeneration(record) + 1, updatedAt: nowIso });
242
+ return { applied: true, record: updated };
243
+ }
244
+ if (isOneShotSchedule(record.scheduleKind)) {
245
+ const updated = Object.assign(Object.assign({}, record), { status: "completed", disarmReason: outcome.kind === "skipped" ? "skipped_one_shot" : "one_shot_complete", fireCount: record.fireCount + 1, generation: recordGeneration(record) + 1, updatedAt: nowIso });
246
+ return { applied: true, record: updated };
247
+ }
248
+ const nextFireAtMs = nextScheduleFireAtMs(record, nowMs);
249
+ const updated = Object.assign(Object.assign({}, record), { status: "armed", fireCount: record.fireCount + 1, nextFireAtMs, generation: recordGeneration(record) + 1, updatedAt: nowIso });
250
+ return { applied: true, record: updated };
251
+ }
@@ -1,29 +1,63 @@
1
1
  /**
2
2
  * Per-session reminder runner: durable wake subscriptions with
3
- * prompt XOR run, every/cron/delay/at schedules, and until as
4
- * function XOR prompt.
3
+ * prompt XOR named handler XOR run, every/cron/delay/at schedules, and
4
+ * until as function XOR prompt.
5
5
  */
6
- import type { ReminderCreateInput, ReminderInfo } from "../types.js";
6
+ import type { DiscoveredReminder, ReminderCreateInput, ReminderInfo, ReminderStatus } from "../types.js";
7
7
  import type { PlatformTimers } from "./platform-timers.js";
8
- import type { ReminderRecord } from "./reminder-store.js";
8
+ import { type ReminderControlPlane, type ReminderExecutionOutcome, type ReminderFireDescriptor } from "./reminder-control-plane-protocol.js";
9
9
  import { type SessionEngine } from "./session-engine.js";
10
10
  export { ReminderValidationError } from "./reminder-schedule.js";
11
+ /** Max UTF-8 byte length of `JSON.stringify(args)` on named-handler create. */
12
+ export declare const REMINDER_ARGS_MAX_BYTES: number;
11
13
  export declare class UnknownReminderError extends Error {
12
14
  readonly availableReminderIds: string[];
13
15
  constructor(reminderId: string, availableReminderIds: string[]);
14
16
  }
17
+ export interface ReminderRunnerOptions {
18
+ /** Discovered `agent/reminders/*` handlers, keyed by module stem. */
19
+ namedHandlers?: readonly DiscoveredReminder[];
20
+ /**
21
+ * Architecture v2: reject anonymous `run` and function `until` at create
22
+ * (named `handler` + prompt remain), whether local or hosted.
23
+ */
24
+ rejectAnonymousHandlers?: boolean;
25
+ /**
26
+ * When set (local self-hosted architecture v2), create/cancel/rekey go
27
+ * through the control-plane protocol and fires are guest executions of
28
+ * immutable descriptors.
29
+ */
30
+ controlPlane?: ReminderControlPlane;
31
+ /** Agent architecture; used with {@link controlPlane} for v2 protocol path. */
32
+ architecture?: "v1" | "v2";
33
+ }
34
+ /**
35
+ * Server wiring for {@link ReminderRunnerOptions.rejectAnonymousHandlers}:
36
+ * architecture v2 always rejects anonymous run/until (local or hosted).
37
+ */
38
+ export declare function rejectAnonymousReminderHandlers(options: {
39
+ noControlPlane?: boolean;
40
+ architecture?: string;
41
+ }): boolean;
15
42
  export declare class ReminderRunner {
16
43
  private readonly engine;
17
44
  private readonly logger;
18
45
  private readonly platformTimers?;
19
46
  private readonly records;
20
47
  private readonly handlers;
48
+ private readonly namedHandlers;
49
+ private readonly namedHandlerNames;
21
50
  private readonly timers;
22
51
  private readonly firing;
23
52
  /** Single-flight idle gates keyed by `channelId:continuationToken`. */
24
53
  private readonly idleGates;
25
54
  private started;
26
- constructor(engine: SessionEngine, logger?: (line: string) => void, platformTimers?: PlatformTimers | undefined);
55
+ private readonly rejectAnonymousHandlers;
56
+ private readonly controlPlane;
57
+ private readonly architecture;
58
+ constructor(engine: SessionEngine, logger?: (line: string) => void, platformTimers?: PlatformTimers | undefined, options?: ReminderRunnerOptions);
59
+ /** True when create/cancel/rekey/fire go through the CP protocol. */
60
+ private get usesControlPlaneProtocol();
27
61
  /**
28
62
  * Load reminder documents from the control plane into memory. Does not
29
63
  * arm in-process timers — the CP owns clocks.
@@ -37,7 +71,7 @@ export declare class ReminderRunner {
37
71
  stop(): void;
38
72
  create(input: ReminderCreateInput): Promise<ReminderInfo>;
39
73
  list(filter?: {
40
- status?: ReminderRecord["status"];
74
+ status?: ReminderStatus;
41
75
  purpose?: string;
42
76
  continuationToken?: string;
43
77
  }): Promise<ReminderInfo[]>;
@@ -59,8 +93,16 @@ export declare class ReminderRunner {
59
93
  outcome: "fired" | "noop";
60
94
  reason?: string;
61
95
  }>;
96
+ /**
97
+ * Architecture v2 / CP protocol guest entrypoint: execute an immutable fire
98
+ * descriptor and return an outcome. Does not mint ids or mutate
99
+ * authoritative status/fireCount — the control plane applies the outcome.
100
+ */
101
+ executeFire(descriptor: ReminderFireDescriptor): Promise<ReminderExecutionOutcome>;
102
+ private recordFromDescriptor;
62
103
  private armTimer;
63
104
  private clearTimer;
105
+ private resolveNamedHandler;
64
106
  private fire;
65
107
  private isSessionBusy;
66
108
  private whenSessionIdle;
@@ -70,6 +112,14 @@ export declare class ReminderRunner {
70
112
  */
71
113
  private resolveFollowupAuth;
72
114
  private deliverPrompt;
115
+ /**
116
+ * Join the reminder's existing session. Control-plane (`/v2`) channels
117
+ * refuse authored `continuationToken`; pass the stored key as
118
+ * {@link EngineSendOptions.mailboxContinuation} so the engine reuses the
119
+ * CP-selected identity without channel admission.
120
+ */
121
+ private followupSendOptions;
122
+ private channelUsesControlPlaneContinuation;
73
123
  private sendFollowup;
74
124
  private buildFireContext;
75
125
  private buildUntilContext;
@@ -1 +1 @@
1
- {"version":3,"file":"reminder-runner.d.ts","sourceRoot":"","sources":["../../src/internal/reminder-runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reminder-runner.d.ts","sourceRoot":"","sources":["../../src/internal/reminder-runner.ts"],"names":[],"mappings":"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"}