@cursor/july 0.1.97 → 0.1.100

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 (337) hide show
  1. package/AGENTS.md +5 -3
  2. package/dist/bin/agent-serve.js +6 -7
  3. package/dist/channels/github/defaults.d.ts.map +1 -1
  4. package/dist/channels/github/defaults.js +28 -3
  5. package/dist/channels/github/github-channel.d.ts.map +1 -1
  6. package/dist/channels/github/github-channel.js +16 -0
  7. package/dist/channels/github/progress.d.ts +7 -0
  8. package/dist/channels/github/progress.d.ts.map +1 -1
  9. package/dist/channels/origin/origin-channel.d.ts +2 -0
  10. package/dist/channels/origin/origin-channel.d.ts.map +1 -1
  11. package/dist/channels/origin/origin-channel.js +37 -4
  12. package/dist/channels/slack/api.d.ts +16 -7
  13. package/dist/channels/slack/api.d.ts.map +1 -1
  14. package/dist/channels/slack/api.js +29 -13
  15. package/dist/channels/slack/constants.d.ts +6 -0
  16. package/dist/channels/slack/constants.d.ts.map +1 -1
  17. package/dist/channels/slack/constants.js +6 -0
  18. package/dist/channels/slack/defaults.d.ts +9 -4
  19. package/dist/channels/slack/defaults.d.ts.map +1 -1
  20. package/dist/channels/slack/defaults.js +221 -122
  21. package/dist/channels/slack/dispatch.d.ts.map +1 -1
  22. package/dist/channels/slack/dispatch.js +3 -3
  23. package/dist/channels/slack/inbound.d.ts +9 -0
  24. package/dist/channels/slack/inbound.d.ts.map +1 -1
  25. package/dist/channels/slack/inbound.js +14 -0
  26. package/dist/channels/slack/index.d.ts +1 -0
  27. package/dist/channels/slack/index.d.ts.map +1 -1
  28. package/dist/channels/slack/index.js +1 -0
  29. package/dist/channels/slack/live-delivery.d.ts +6 -1
  30. package/dist/channels/slack/live-delivery.d.ts.map +1 -1
  31. package/dist/channels/slack/live-delivery.js +110 -20
  32. package/dist/channels/slack/progress-delivery.d.ts +28 -0
  33. package/dist/channels/slack/progress-delivery.d.ts.map +1 -0
  34. package/dist/channels/slack/progress-delivery.js +115 -0
  35. package/dist/channels/slack/reasoning-card.d.ts +38 -0
  36. package/dist/channels/slack/reasoning-card.d.ts.map +1 -0
  37. package/dist/channels/slack/reasoning-card.js +104 -0
  38. package/dist/channels/slack/redact.d.ts +2 -0
  39. package/dist/channels/slack/redact.d.ts.map +1 -0
  40. package/dist/channels/slack/redact.js +5 -0
  41. package/dist/channels/slack/reply-options.d.ts +40 -0
  42. package/dist/channels/slack/reply-options.d.ts.map +1 -0
  43. package/dist/channels/slack/reply-options.js +150 -0
  44. package/dist/channels/slack/slack-channel.d.ts.map +1 -1
  45. package/dist/channels/slack/slack-channel.js +8 -4
  46. package/dist/channels/slack/stream.d.ts +22 -10
  47. package/dist/channels/slack/stream.d.ts.map +1 -1
  48. package/dist/channels/slack/stream.js +9 -16
  49. package/dist/channels/slack/tool-cards.d.ts +22 -0
  50. package/dist/channels/slack/tool-cards.d.ts.map +1 -0
  51. package/dist/channels/slack/tool-cards.js +178 -0
  52. package/dist/channels/slack/types.d.ts +154 -7
  53. package/dist/channels/slack/types.d.ts.map +1 -1
  54. package/dist/docs/404.html +2 -2
  55. package/dist/docs/ab.html +6 -6
  56. package/dist/docs/ab.md +1 -1
  57. package/dist/docs/assets/{ab.md.DJo5r4R-.js → ab.md.mlVgqvSk.js} +1 -1
  58. package/dist/docs/assets/{app.B3rWNYE1.js → app.DZ1e0Ycq.js} +1 -1
  59. package/dist/docs/assets/{building-with-agents.md.DI4mEzlt.js → building-with-agents.md.CUSWxlP_.js} +2 -2
  60. package/dist/docs/assets/chunks/@localSearchIndexroot.j70vvPL4.js +1 -0
  61. package/dist/docs/assets/chunks/{VPLocalSearchBox.C1lhqJJR.js → VPLocalSearchBox.l8omwc6D.js} +1 -1
  62. package/dist/docs/assets/chunks/{theme.B40_SXuv.js → theme.JVcD6gel.js} +2 -2
  63. package/dist/docs/assets/{evals.md.lfJoEVc8.js → evals.md.CPzDAwoH.js} +1 -1
  64. package/dist/docs/assets/{guides_github.md.Cnh2mL4a.js → guides_github.md.BtPr9GaP.js} +1 -1
  65. package/dist/docs/assets/{guides_mcp-oauth.md.CN-6YmTJ.js → guides_mcp-oauth.md.Dp6cDP7f.js} +1 -1
  66. package/dist/docs/assets/{guides_opentelemetry.md.bmPmkvJu.js → guides_opentelemetry.md.BVTXDCRg.js} +2 -2
  67. package/dist/docs/assets/{guides_slack.md.VDXQV3ja.js → guides_slack.md.9oHPye9o.js} +19 -3
  68. package/dist/docs/assets/{guides_slack.md.VDXQV3ja.lean.js → guides_slack.md.9oHPye9o.lean.js} +1 -1
  69. package/dist/docs/assets/hillclimbing.md.CpTGTCle.js +4 -0
  70. package/dist/docs/assets/{index.md.CVeRUOeZ.js → index.md.Bb4k8kUm.js} +1 -1
  71. package/dist/docs/assets/{quickstart.md.Nj_LjW_a.js → quickstart.md.DdQOF7Y8.js} +1 -1
  72. package/dist/docs/assets/{reference_cli.md.RyZf5OTE.js → reference_cli.md.DfoeyvL0.js} +4 -4
  73. package/dist/docs/assets/{reference_cli.md.RyZf5OTE.lean.js → reference_cli.md.DfoeyvL0.lean.js} +1 -1
  74. package/dist/docs/assets/{reference_connections.md.DxldvyIB.js → reference_connections.md.BiGoBAk2.js} +1 -1
  75. package/dist/docs/assets/{reference_http-api.md.5zOAbV86.js → reference_http-api.md.BEJx9XVj.js} +1 -1
  76. package/dist/docs/assets/{reference_tools.md.B84gw9Ii.js → reference_tools.md.CvAHsdSp.js} +10 -2
  77. package/dist/docs/assets/{reference_tools.md.B84gw9Ii.lean.js → reference_tools.md.CvAHsdSp.lean.js} +1 -1
  78. package/dist/docs/assets/scaffolding-agents.md.em43xlY1.js +1 -0
  79. package/dist/docs/assets/skills_ab.md.CsFNatVx.js +26 -0
  80. package/dist/docs/assets/skills_ab.md.CsFNatVx.lean.js +1 -0
  81. package/dist/docs/assets/skills_create-agent.md.BVoWPcan.js +8 -0
  82. package/dist/docs/assets/skills_create-agent.md.BVoWPcan.lean.js +1 -0
  83. package/dist/docs/assets/skills_debug.md.CDbPhHfg.js +1 -0
  84. package/dist/docs/assets/skills_debug.md.CDbPhHfg.lean.js +1 -0
  85. package/dist/docs/assets/skills_evals.md.723kpUmA.js +25 -0
  86. package/dist/docs/assets/skills_evals.md.723kpUmA.lean.js +1 -0
  87. package/dist/docs/assets/skills_framework-map.md.BTi817yv.js +1 -0
  88. package/dist/docs/assets/skills_framework-map.md.BTi817yv.lean.js +1 -0
  89. package/dist/docs/assets/skills_github.md.D0JahM8c.js +16 -0
  90. package/dist/docs/assets/skills_github.md.D0JahM8c.lean.js +1 -0
  91. package/dist/docs/assets/skills_hillclimb.md.B_zJerxA.js +7 -0
  92. package/dist/docs/assets/skills_hillclimb.md.B_zJerxA.lean.js +1 -0
  93. package/dist/docs/assets/skills_index.md.DKwIxzGg.js +1 -0
  94. package/dist/docs/assets/skills_index.md.DKwIxzGg.lean.js +1 -0
  95. package/dist/docs/assets/skills_mcp-auth.md.DGvFP3HE.js +18 -0
  96. package/dist/docs/assets/skills_mcp-auth.md.DGvFP3HE.lean.js +1 -0
  97. package/dist/docs/assets/skills_otel.md.CgiZryR3.js +8 -0
  98. package/dist/docs/assets/skills_otel.md.CgiZryR3.lean.js +1 -0
  99. package/dist/docs/assets/skills_setup-slack.md.BBgx8lUz.js +20 -0
  100. package/dist/docs/assets/skills_setup-slack.md.BBgx8lUz.lean.js +1 -0
  101. package/dist/docs/assets/{troubleshooting.md.DCiPBhYs.js → troubleshooting.md.Cus_YZga.js} +1 -1
  102. package/dist/docs/building-with-agents.html +6 -6
  103. package/dist/docs/building-with-agents.md +14 -11
  104. package/dist/docs/concepts.html +4 -4
  105. package/dist/docs/deployment.html +4 -4
  106. package/dist/docs/design/runtime-abstraction.md +1757 -0
  107. package/dist/docs/evals.html +6 -6
  108. package/dist/docs/evals.md +1 -1
  109. package/dist/docs/guides/agent-to-agent.html +4 -4
  110. package/dist/docs/guides/cloud-runtime.html +4 -4
  111. package/dist/docs/guides/convert-automation.html +4 -4
  112. package/dist/docs/guides/github.html +5 -5
  113. package/dist/docs/guides/github.md +1 -1
  114. package/dist/docs/guides/human-in-the-loop.html +4 -4
  115. package/dist/docs/guides/mcp-oauth.html +5 -5
  116. package/dist/docs/guides/mcp-oauth.md +1 -1
  117. package/dist/docs/guides/opentelemetry.html +7 -7
  118. package/dist/docs/guides/opentelemetry.md +2 -2
  119. package/dist/docs/guides/slack.html +22 -6
  120. package/dist/docs/guides/slack.md +80 -1
  121. package/dist/docs/guides/webhooks.html +5 -5
  122. package/dist/docs/hashmap.json +1 -1
  123. package/dist/docs/hillclimbing.html +6 -6
  124. package/dist/docs/hillclimbing.md +5 -5
  125. package/dist/docs/index.html +6 -6
  126. package/dist/docs/index.md +1 -1
  127. package/dist/docs/llms-full.txt +2830 -37
  128. package/dist/docs/llms.txt +15 -0
  129. package/dist/docs/quickstart.html +5 -5
  130. package/dist/docs/quickstart.md +1 -1
  131. package/dist/docs/reference/agent-config.html +4 -4
  132. package/dist/docs/reference/artifacts.html +4 -4
  133. package/dist/docs/reference/channels.html +4 -4
  134. package/dist/docs/reference/cli.html +7 -7
  135. package/dist/docs/reference/cli.md +1 -7
  136. package/dist/docs/reference/connections.html +6 -6
  137. package/dist/docs/reference/connections.md +1 -1
  138. package/dist/docs/reference/hooks.html +4 -4
  139. package/dist/docs/reference/http-api.html +6 -6
  140. package/dist/docs/reference/http-api.md +1 -0
  141. package/dist/docs/reference/instructions.html +4 -4
  142. package/dist/docs/reference/playground.html +4 -4
  143. package/dist/docs/reference/project-layout.html +4 -4
  144. package/dist/docs/reference/prompt.html +4 -4
  145. package/dist/docs/reference/schedules.html +4 -4
  146. package/dist/docs/reference/sessions.html +4 -4
  147. package/dist/docs/reference/skills.html +4 -4
  148. package/dist/docs/reference/subagents.html +4 -4
  149. package/dist/docs/reference/tools.html +14 -6
  150. package/dist/docs/reference/tools.md +25 -0
  151. package/dist/docs/scaffolding-agents.html +5 -5
  152. package/dist/docs/scaffolding-agents.md +3 -3
  153. package/dist/docs/skills/ab.html +52 -0
  154. package/dist/docs/skills/ab.md +50 -0
  155. package/dist/docs/skills/create-agent.html +34 -0
  156. package/dist/docs/skills/create-agent.md +160 -0
  157. package/dist/docs/skills/debug.html +27 -0
  158. package/dist/docs/skills/debug.md +36 -0
  159. package/dist/docs/skills/evals.html +51 -0
  160. package/dist/docs/skills/evals.md +99 -0
  161. package/dist/docs/skills/framework-map.html +27 -0
  162. package/dist/docs/skills/framework-map.md +95 -0
  163. package/dist/docs/skills/github.html +42 -0
  164. package/dist/docs/skills/github.md +93 -0
  165. package/dist/docs/skills/hillclimb.html +33 -0
  166. package/dist/docs/skills/hillclimb.md +55 -0
  167. package/dist/docs/skills/index.html +27 -0
  168. package/dist/docs/skills/index.md +21 -0
  169. package/dist/docs/skills/mcp-auth.html +44 -0
  170. package/dist/docs/skills/mcp-auth.md +76 -0
  171. package/dist/docs/skills/otel.html +34 -0
  172. package/dist/docs/skills/otel.md +48 -0
  173. package/dist/docs/skills/setup-slack.html +46 -0
  174. package/dist/docs/skills/setup-slack.md +141 -0
  175. package/dist/docs/storage.html +4 -4
  176. package/dist/docs/templates/agentic-owners.html +4 -4
  177. package/dist/docs/templates/agents-md.html +4 -4
  178. package/dist/docs/templates/code-wiki.html +4 -4
  179. package/dist/docs/templates/demo.html +4 -4
  180. package/dist/docs/templates/pr-autofixer.html +4 -4
  181. package/dist/docs/templates/security-help.html +4 -4
  182. package/dist/docs/templates/security-reviewer.html +4 -4
  183. package/dist/docs/templates/triage.html +4 -4
  184. package/dist/docs/troubleshooting.html +5 -5
  185. package/dist/docs/troubleshooting.md +1 -1
  186. package/dist/files-backends/cursor-hosted.d.ts +9 -2
  187. package/dist/files-backends/cursor-hosted.d.ts.map +1 -1
  188. package/dist/files-backends/cursor-hosted.js +9 -11
  189. package/dist/index.d.ts +1 -0
  190. package/dist/index.d.ts.map +1 -1
  191. package/dist/index.js +1 -0
  192. package/dist/internal/as-of.d.ts +19 -0
  193. package/dist/internal/as-of.d.ts.map +1 -0
  194. package/dist/internal/as-of.js +82 -0
  195. package/dist/internal/cli-deploy.d.ts +2 -1
  196. package/dist/internal/cli-deploy.d.ts.map +1 -1
  197. package/dist/internal/cli-deploy.js +102 -7
  198. package/dist/internal/conversation-mirror.d.ts.map +1 -1
  199. package/dist/internal/conversation-mirror.js +3 -4
  200. package/dist/internal/cursor/hosted-store-secrets.d.ts +15 -0
  201. package/dist/internal/cursor/hosted-store-secrets.d.ts.map +1 -0
  202. package/dist/internal/cursor/hosted-store-secrets.js +48 -0
  203. package/dist/internal/cursor-event-relay.d.ts.map +1 -1
  204. package/dist/internal/cursor-event-relay.js +5 -6
  205. package/dist/internal/deploy-client.d.ts +6 -6
  206. package/dist/internal/deploy-client.js +7 -7
  207. package/dist/internal/discovery.d.ts.map +1 -1
  208. package/dist/internal/discovery.js +11 -1
  209. package/dist/internal/framework-file-storage.d.ts +5 -4
  210. package/dist/internal/framework-file-storage.d.ts.map +1 -1
  211. package/dist/internal/framework-file-storage.js +6 -4
  212. package/dist/internal/framework-storage-selection.d.ts +13 -11
  213. package/dist/internal/framework-storage-selection.d.ts.map +1 -1
  214. package/dist/internal/framework-storage-selection.js +28 -23
  215. package/dist/internal/hosted-admission-adapter.d.ts +28 -0
  216. package/dist/internal/hosted-admission-adapter.d.ts.map +1 -0
  217. package/dist/internal/hosted-admission-adapter.js +7 -0
  218. package/dist/internal/hosted-delivery-protocol.d.ts +6 -1
  219. package/dist/internal/hosted-delivery-protocol.d.ts.map +1 -1
  220. package/dist/internal/hosted-delivery-protocol.js +1 -1
  221. package/dist/internal/hosted-delivery.d.ts +15 -1
  222. package/dist/internal/hosted-delivery.d.ts.map +1 -1
  223. package/dist/internal/hosted-delivery.js +47 -21
  224. package/dist/internal/hosted-execution-diag.d.ts +11 -0
  225. package/dist/internal/hosted-execution-diag.d.ts.map +1 -1
  226. package/dist/internal/hosted-execution-diag.js +39 -2
  227. package/dist/internal/http-channel.d.ts.map +1 -1
  228. package/dist/internal/http-channel.js +4 -1
  229. package/dist/internal/server.d.ts +3 -0
  230. package/dist/internal/server.d.ts.map +1 -1
  231. package/dist/internal/server.js +82 -19
  232. package/dist/internal/session-engine.d.ts.map +1 -1
  233. package/dist/internal/session-engine.js +24 -4
  234. package/dist/internal/session-run-log.d.ts +120 -0
  235. package/dist/internal/session-run-log.d.ts.map +1 -0
  236. package/dist/internal/session-run-log.js +358 -0
  237. package/dist/internal/tool-policy.d.ts +20 -8
  238. package/dist/internal/tool-policy.d.ts.map +1 -1
  239. package/dist/internal/tool-policy.js +11 -0
  240. package/dist/playground/assets/index-BszoQDc6.css +1 -0
  241. package/dist/playground/assets/index-DVs98vPL.js +69 -0
  242. package/dist/playground/index.html +2 -2
  243. package/dist/storage-backends/cursor-hosted-v2.d.ts +83 -0
  244. package/dist/storage-backends/cursor-hosted-v2.d.ts.map +1 -0
  245. package/dist/storage-backends/cursor-hosted-v2.js +164 -0
  246. package/dist/storage-backends/cursor-hosted.d.ts +6 -0
  247. package/dist/storage-backends/cursor-hosted.d.ts.map +1 -1
  248. package/dist/storage-backends/cursor-hosted.js +6 -1
  249. package/dist/storage-protocol.d.ts +8 -0
  250. package/dist/storage-protocol.d.ts.map +1 -1
  251. package/dist/storage-protocol.js +8 -0
  252. package/dist/tools.d.ts +12 -2
  253. package/dist/tools.d.ts.map +1 -1
  254. package/dist/types.d.ts +30 -0
  255. package/dist/types.d.ts.map +1 -1
  256. package/docs/README.md +1 -1
  257. package/docs/ab.md +1 -1
  258. package/docs/building-with-agents.md +14 -11
  259. package/docs/design/runtime-abstraction.md +1757 -0
  260. package/docs/evals.md +1 -1
  261. package/docs/guides/github.md +1 -1
  262. package/docs/guides/mcp-oauth.md +1 -1
  263. package/docs/guides/opentelemetry.md +2 -2
  264. package/docs/guides/slack.md +80 -1
  265. package/docs/hillclimbing.md +5 -5
  266. package/docs/quickstart.md +1 -1
  267. package/docs/reference/cli.md +1 -7
  268. package/docs/reference/connections.md +1 -1
  269. package/docs/reference/http-api.md +1 -0
  270. package/docs/reference/tools.md +25 -0
  271. package/docs/scaffolding-agents.md +3 -3
  272. package/docs/skills/index.md +26 -0
  273. package/docs/troubleshooting.md +1 -1
  274. package/package.json +1 -1
  275. package/src/bin/agent-serve.ts +6 -7
  276. package/src/channels/github/defaults.ts +36 -3
  277. package/src/channels/github/github-channel.ts +17 -0
  278. package/src/channels/github/progress.ts +7 -0
  279. package/src/channels/origin/origin-channel.ts +74 -10
  280. package/src/channels/slack/api.ts +35 -17
  281. package/src/channels/slack/constants.ts +6 -0
  282. package/src/channels/slack/defaults.ts +253 -144
  283. package/src/channels/slack/dispatch.ts +10 -1
  284. package/src/channels/slack/inbound.ts +17 -0
  285. package/src/channels/slack/index.ts +1 -0
  286. package/src/channels/slack/live-delivery.ts +135 -22
  287. package/src/channels/slack/progress-delivery.ts +133 -0
  288. package/src/channels/slack/reasoning-card.ts +140 -0
  289. package/src/channels/slack/redact.ts +6 -0
  290. package/src/channels/slack/reply-options.ts +229 -0
  291. package/src/channels/slack/slack-channel.ts +7 -2
  292. package/src/channels/slack/stream.ts +31 -24
  293. package/src/channels/slack/tool-cards.ts +221 -0
  294. package/src/channels/slack/types.ts +168 -7
  295. package/src/files-backends/cursor-hosted.ts +18 -7
  296. package/src/index.ts +4 -0
  297. package/src/internal/as-of.ts +107 -0
  298. package/src/internal/cli-deploy.ts +130 -10
  299. package/src/internal/conversation-mirror.ts +3 -8
  300. package/src/internal/cursor/hosted-store-secrets.ts +72 -0
  301. package/src/internal/cursor-event-relay.ts +5 -6
  302. package/src/internal/deploy-client.ts +10 -10
  303. package/src/internal/discovery.ts +9 -1
  304. package/src/internal/framework-file-storage.ts +6 -4
  305. package/src/internal/framework-storage-selection.ts +28 -25
  306. package/src/internal/hosted-admission-adapter.ts +42 -0
  307. package/src/internal/hosted-delivery-protocol.ts +7 -2
  308. package/src/internal/hosted-delivery.ts +88 -36
  309. package/src/internal/hosted-execution-diag.ts +45 -0
  310. package/src/internal/http-channel.ts +8 -0
  311. package/src/internal/server.ts +100 -2
  312. package/src/internal/session-engine.ts +32 -1
  313. package/src/internal/session-run-log.ts +579 -0
  314. package/src/internal/tool-policy.ts +31 -9
  315. package/src/storage-backends/cursor-hosted-v2.ts +219 -0
  316. package/src/storage-backends/cursor-hosted.ts +6 -1
  317. package/src/storage-protocol.ts +10 -0
  318. package/src/tools.ts +12 -2
  319. package/src/types.ts +30 -0
  320. package/dist/docs/assets/chunks/@localSearchIndexroot.BU9nHdnQ.js +0 -1
  321. package/dist/docs/assets/hillclimbing.md.DhESf3OO.js +0 -4
  322. package/dist/docs/assets/scaffolding-agents.md.D7UUkWw0.js +0 -1
  323. package/dist/playground/assets/index-DrkI6y5O.js +0 -88
  324. package/dist/playground/assets/index-DzNGwm7q.css +0 -1
  325. /package/dist/docs/assets/{ab.md.DJo5r4R-.lean.js → ab.md.mlVgqvSk.lean.js} +0 -0
  326. /package/dist/docs/assets/{building-with-agents.md.DI4mEzlt.lean.js → building-with-agents.md.CUSWxlP_.lean.js} +0 -0
  327. /package/dist/docs/assets/{evals.md.lfJoEVc8.lean.js → evals.md.CPzDAwoH.lean.js} +0 -0
  328. /package/dist/docs/assets/{guides_github.md.Cnh2mL4a.lean.js → guides_github.md.BtPr9GaP.lean.js} +0 -0
  329. /package/dist/docs/assets/{guides_mcp-oauth.md.CN-6YmTJ.lean.js → guides_mcp-oauth.md.Dp6cDP7f.lean.js} +0 -0
  330. /package/dist/docs/assets/{guides_opentelemetry.md.bmPmkvJu.lean.js → guides_opentelemetry.md.BVTXDCRg.lean.js} +0 -0
  331. /package/dist/docs/assets/{hillclimbing.md.DhESf3OO.lean.js → hillclimbing.md.CpTGTCle.lean.js} +0 -0
  332. /package/dist/docs/assets/{index.md.CVeRUOeZ.lean.js → index.md.Bb4k8kUm.lean.js} +0 -0
  333. /package/dist/docs/assets/{quickstart.md.Nj_LjW_a.lean.js → quickstart.md.DdQOF7Y8.lean.js} +0 -0
  334. /package/dist/docs/assets/{reference_connections.md.DxldvyIB.lean.js → reference_connections.md.BiGoBAk2.lean.js} +0 -0
  335. /package/dist/docs/assets/{reference_http-api.md.5zOAbV86.lean.js → reference_http-api.md.BEJx9XVj.lean.js} +0 -0
  336. /package/dist/docs/assets/{scaffolding-agents.md.D7UUkWw0.lean.js → scaffolding-agents.md.em43xlY1.lean.js} +0 -0
  337. /package/dist/docs/assets/{troubleshooting.md.DCiPBhYs.lean.js → troubleshooting.md.Cus_YZga.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-DrkI6y5O.js"></script>
12
- <link rel="stylesheet" crossorigin href="./assets/index-DzNGwm7q.css">
11
+ <script type="module" crossorigin src="./assets/index-DVs98vPL.js"></script>
12
+ <link rel="stylesheet" crossorigin href="./assets/index-BszoQDc6.css">
13
13
  </head>
14
14
  <body>
15
15
  <div id="root"></div>
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Cursor-managed durable KV for hosted **architecture v2** agents.
3
+ *
4
+ * Talks to the AgentSDK v2 KV proxy
5
+ * (`POST /internal/agentsdk/kv/*`) using the engine's pod
6
+ * `CURSOR_API_KEY`. The server resolves the v2 deployment from that service
7
+ * account (factorydb `agentsdk_deployment`) and persists rows in factorydb
8
+ * `agentsdk_kv` — v1's Bugbot-backed `/internal/agent-serve/storage/*`
9
+ * routes cannot resolve a v2 pod credential at all.
10
+ *
11
+ * The v2 wire protocol is four routes, not v1's eight:
12
+ *
13
+ * - `POST /internal/agentsdk/kv/get`
14
+ * `{ key }` → `{ found, value, version }` — reads always carry the CAS
15
+ * version token ({@link KvV2GetResponse}).
16
+ * - `POST /internal/agentsdk/kv/put`
17
+ * `{ key, value, ifAbsent? | ifVersion? }` → `{ ok, version, current }`
18
+ * ({@link KvV2PutResponse}) — one write primitive: last-write-wins when
19
+ * unconditional (still bumps the token), atomic create-if-absent with
20
+ * `ifAbsent: true`, atomic compare-and-swap with `ifVersion`.
21
+ * - `POST /internal/agentsdk/kv/delete` `{ key }` → `{ ok }`.
22
+ * - `POST /internal/agentsdk/kv/list`
23
+ * `{ prefix, limit?, cursor?, keysOnly? }` → `{ entries, nextCursor }`
24
+ * ({@link KvV2ListResponse}) — ascending key order with keyset
25
+ * pagination. `list` / `listKeys` below drain every page, so the v1
26
+ * truncated-scan failure mode does not exist here.
27
+ *
28
+ * Eval runs and A/B samples still ride the v1 storage proxy's dedicated
29
+ * tables (`evals` / `abs` below); moving them to factorydb is a separate
30
+ * follow-up from the KV cutover.
31
+ *
32
+ * This backend is platform-selected for architecture v2
33
+ * (framework-storage-selection.ts) — authors never import it; `agent/storage.ts`
34
+ * is rejected on v2.
35
+ */
36
+ import type { StorageABTable, StorageCasTable, StorageConfig, StorageEvalsTable } from "../storage.js";
37
+ import type { JsonValue } from "../types.js";
38
+ import { CURSOR_HOSTED_STORAGE, type CursorHostedStorageOptions } from "./cursor-hosted.js";
39
+ /** Wire shape of the v2 `get` route. `null` ⇒ JSON `undefined`. */
40
+ export interface KvV2GetResponse {
41
+ found: boolean;
42
+ value: JsonValue | null;
43
+ version: string | null;
44
+ }
45
+ /** Wire shape of the v2 `put` route (all three write modes). */
46
+ export interface KvV2PutResponse {
47
+ ok: boolean;
48
+ /** New version token on an accepted write, else `null`. */
49
+ version: string | null;
50
+ /** Entry observed when a conditional write lost; `null` when absent. */
51
+ current: {
52
+ value: JsonValue | null;
53
+ version: string;
54
+ } | null;
55
+ }
56
+ /** Wire shape of the v2 `list` route. */
57
+ export interface KvV2ListResponse {
58
+ entries: Array<{
59
+ key: string;
60
+ /** Omitted when the request asked for keys only. */
61
+ value?: JsonValue | null;
62
+ version: string;
63
+ }>;
64
+ /** Last key of this page when more rows remain, else `null`. */
65
+ nextCursor: string | null;
66
+ }
67
+ type CursorHostedStorageV2Methods = Required<Pick<StorageConfig, "put" | "get" | "delete" | "list">> & {
68
+ readonly [CURSOR_HOSTED_STORAGE]: true;
69
+ cas: StorageCasTable;
70
+ evals: StorageEvalsTable;
71
+ abs: StorageABTable;
72
+ };
73
+ /**
74
+ * Architecture-v2 `defineStorage` methods (AgentSDK v2 KV proxy → factorydb
75
+ * `agentsdk_kv`). Platform-selected; spread into `defineStorage({...})` by
76
+ * framework-storage-selection.ts. No `listNewest`: v2 session records live
77
+ * on the framework file store, so the only consumer of write-time ordering
78
+ * never reaches this backend and the engine's `list` fallback covers the
79
+ * rest.
80
+ */
81
+ export declare function cursorHostedStorageV2(options?: CursorHostedStorageOptions): CursorHostedStorageV2Methods;
82
+ export {};
83
+ //# sourceMappingURL=cursor-hosted-v2.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor-hosted-v2.d.ts","sourceRoot":"","sources":["../../src/storage-backends/cursor-hosted-v2.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EACf,aAAa,EAEb,iBAAiB,EAClB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,SAAS,EAAiC,MAAM,aAAa,CAAC;AAC5E,OAAO,EACL,qBAAqB,EACrB,KAAK,0BAA0B,EAGhC,MAAM,oBAAoB,CAAC;AAI5B,mEAAmE;AACnE,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IACxB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,gEAAgE;AAChE,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,OAAO,CAAC;IACZ,2DAA2D;IAC3D,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,wEAAwE;IACxE,OAAO,EAAE;QAAE,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CAC9D;AAED,yCAAyC;AACzC,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,KAAK,CAAC;QACb,GAAG,EAAE,MAAM,CAAC;QACZ,oDAAoD;QACpD,KAAK,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;QACzB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;IACH,gEAAgE;IAChE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,KAAK,4BAA4B,GAAG,QAAQ,CAC1C,IAAI,CAAC,aAAa,EAAE,KAAK,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC,CACvD,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;AAoDF;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,GAAE,0BAA+B,GACvC,4BAA4B,CAoE9B"}
@@ -0,0 +1,164 @@
1
+ /**
2
+ * Cursor-managed durable KV for hosted **architecture v2** agents.
3
+ *
4
+ * Talks to the AgentSDK v2 KV proxy
5
+ * (`POST /internal/agentsdk/kv/*`) using the engine's pod
6
+ * `CURSOR_API_KEY`. The server resolves the v2 deployment from that service
7
+ * account (factorydb `agentsdk_deployment`) and persists rows in factorydb
8
+ * `agentsdk_kv` — v1's Bugbot-backed `/internal/agent-serve/storage/*`
9
+ * routes cannot resolve a v2 pod credential at all.
10
+ *
11
+ * The v2 wire protocol is four routes, not v1's eight:
12
+ *
13
+ * - `POST /internal/agentsdk/kv/get`
14
+ * `{ key }` → `{ found, value, version }` — reads always carry the CAS
15
+ * version token ({@link KvV2GetResponse}).
16
+ * - `POST /internal/agentsdk/kv/put`
17
+ * `{ key, value, ifAbsent? | ifVersion? }` → `{ ok, version, current }`
18
+ * ({@link KvV2PutResponse}) — one write primitive: last-write-wins when
19
+ * unconditional (still bumps the token), atomic create-if-absent with
20
+ * `ifAbsent: true`, atomic compare-and-swap with `ifVersion`.
21
+ * - `POST /internal/agentsdk/kv/delete` `{ key }` → `{ ok }`.
22
+ * - `POST /internal/agentsdk/kv/list`
23
+ * `{ prefix, limit?, cursor?, keysOnly? }` → `{ entries, nextCursor }`
24
+ * ({@link KvV2ListResponse}) — ascending key order with keyset
25
+ * pagination. `list` / `listKeys` below drain every page, so the v1
26
+ * truncated-scan failure mode does not exist here.
27
+ *
28
+ * Eval runs and A/B samples still ride the v1 storage proxy's dedicated
29
+ * tables (`evals` / `abs` below); moving them to factorydb is a separate
30
+ * follow-up from the KV cutover.
31
+ *
32
+ * This backend is platform-selected for architecture v2
33
+ * (framework-storage-selection.ts) — authors never import it; `agent/storage.ts`
34
+ * is rejected on v2.
35
+ */
36
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
37
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
38
+ return new (P || (P = Promise))(function (resolve, reject) {
39
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
40
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
41
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
42
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
43
+ });
44
+ };
45
+ import { CURSOR_HOSTED_STORAGE, cursorHostedStorage, storageRpc, } from "./cursor-hosted.js";
46
+ const KV_V2_PREFIX = "/internal/agentsdk/kv";
47
+ function toCasResult(response) {
48
+ var _a;
49
+ if (response.ok) {
50
+ if (response.version === null) {
51
+ throw new Error("cursorHostedStorageV2: conditional write succeeded without a version token");
52
+ }
53
+ return { ok: true, version: response.version };
54
+ }
55
+ const current = response.current === null
56
+ ? undefined
57
+ : {
58
+ value: (_a = response.current.value) !== null && _a !== void 0 ? _a : null,
59
+ version: response.current.version,
60
+ };
61
+ return { ok: false, current };
62
+ }
63
+ /**
64
+ * Drain every page of a v2 `list` scan. The server pages by keyset (each
65
+ * `nextCursor` is the strictly-greatest key returned so far), so a cursor
66
+ * that fails to advance means a broken server — fail loudly rather than
67
+ * loop forever.
68
+ */
69
+ function listAllPages(options, body) {
70
+ return __awaiter(this, void 0, void 0, function* () {
71
+ const entries = [];
72
+ let cursor;
73
+ for (;;) {
74
+ const page = yield storageRpc(options, `${KV_V2_PREFIX}/list`, cursor === undefined ? body : Object.assign(Object.assign({}, body), { cursor }));
75
+ entries.push(...page.entries);
76
+ if (page.nextCursor === null) {
77
+ return entries;
78
+ }
79
+ if (cursor !== undefined && page.nextCursor <= cursor) {
80
+ throw new Error(`cursorHostedStorageV2: list("${body.prefix}") cursor did not advance`);
81
+ }
82
+ cursor = page.nextCursor;
83
+ }
84
+ });
85
+ }
86
+ /**
87
+ * Architecture-v2 `defineStorage` methods (AgentSDK v2 KV proxy → factorydb
88
+ * `agentsdk_kv`). Platform-selected; spread into `defineStorage({...})` by
89
+ * framework-storage-selection.ts. No `listNewest`: v2 session records live
90
+ * on the framework file store, so the only consumer of write-time ordering
91
+ * never reaches this backend and the engine's `list` fallback covers the
92
+ * rest.
93
+ */
94
+ export function cursorHostedStorageV2(options = {}) {
95
+ // Eval runs and A/B samples stay on the v1 proxy's dedicated tables.
96
+ const v1 = cursorHostedStorage(options);
97
+ return {
98
+ [CURSOR_HOSTED_STORAGE]: true,
99
+ put(key, value) {
100
+ return __awaiter(this, void 0, void 0, function* () {
101
+ yield storageRpc(options, `${KV_V2_PREFIX}/put`, { key, value });
102
+ });
103
+ },
104
+ get(key) {
105
+ return __awaiter(this, void 0, void 0, function* () {
106
+ var _a;
107
+ const result = yield storageRpc(options, `${KV_V2_PREFIX}/get`, { key });
108
+ if (!result.found) {
109
+ return undefined;
110
+ }
111
+ return (_a = result.value) !== null && _a !== void 0 ? _a : undefined;
112
+ });
113
+ },
114
+ delete(key) {
115
+ return __awaiter(this, void 0, void 0, function* () {
116
+ yield storageRpc(options, `${KV_V2_PREFIX}/delete`, { key });
117
+ });
118
+ },
119
+ list(prefix) {
120
+ return __awaiter(this, void 0, void 0, function* () {
121
+ const entries = yield listAllPages(options, { prefix });
122
+ return entries.map((entry) => { var _a; return ({
123
+ key: entry.key,
124
+ value: (_a = entry.value) !== null && _a !== void 0 ? _a : null,
125
+ }); });
126
+ });
127
+ },
128
+ cas: {
129
+ getWithVersion(key) {
130
+ return __awaiter(this, void 0, void 0, function* () {
131
+ var _a;
132
+ const result = yield storageRpc(options, `${KV_V2_PREFIX}/get`, { key });
133
+ if (!result.found || result.version === null) {
134
+ return undefined;
135
+ }
136
+ return { value: (_a = result.value) !== null && _a !== void 0 ? _a : null, version: result.version };
137
+ });
138
+ },
139
+ putIfAbsent(key, value) {
140
+ return __awaiter(this, void 0, void 0, function* () {
141
+ const result = yield storageRpc(options, `${KV_V2_PREFIX}/put`, { key, value, ifAbsent: true });
142
+ return toCasResult(result);
143
+ });
144
+ },
145
+ putIfVersion(key, value, expectedVersion) {
146
+ return __awaiter(this, void 0, void 0, function* () {
147
+ const result = yield storageRpc(options, `${KV_V2_PREFIX}/put`, { key, value, ifVersion: expectedVersion });
148
+ return toCasResult(result);
149
+ });
150
+ },
151
+ listKeys(prefix) {
152
+ return __awaiter(this, void 0, void 0, function* () {
153
+ const entries = yield listAllPages(options, {
154
+ prefix,
155
+ keysOnly: true,
156
+ });
157
+ return entries.map((entry) => entry.key);
158
+ });
159
+ },
160
+ },
161
+ evals: v1.evals,
162
+ abs: v1.abs,
163
+ };
164
+ }
@@ -101,6 +101,12 @@ export interface KvListKeysResponse {
101
101
  */
102
102
  truncated?: boolean;
103
103
  }
104
+ /**
105
+ * One authenticated POST to the control-plane proxy. Shared with the
106
+ * architecture-v2 backend (`cursor-hosted-v2.ts`), which speaks a different
107
+ * route family over the same transport and credential chain.
108
+ */
109
+ export declare function storageRpc<T>(options: CursorHostedStorageOptions, path: string, body: Record<string, unknown>): Promise<T>;
104
110
  /**
105
111
  * Cursor-hosted `defineStorage` methods (control-plane storage proxy →
106
112
  * Bugbot `agent_serve_*` tables). Spread into `defineStorage({...})`.
@@ -1 +1 @@
1
- {"version":3,"file":"cursor-hosted.d.ts","sourceRoot":"","sources":["../../src/storage-backends/cursor-hosted.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAIH,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;AAkFD;;;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;AAIH,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,CAmCZ;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,GAAE,0BAA+B,GACvC,0BAA0B,CAuJ5B"}
@@ -100,7 +100,12 @@ function resolveBaseUrl(options) {
100
100
  const raw = ((_b = (_a = options.baseUrl) !== null && _a !== void 0 ? _a : process.env.CURSOR_API_BASE_URL) !== null && _b !== void 0 ? _b : DEFAULT_CURSOR_EXTERNAL_API_URL).trim();
101
101
  return raw.endsWith("/") ? raw.slice(0, -1) : raw;
102
102
  }
103
- function storageRpc(options, path, body) {
103
+ /**
104
+ * One authenticated POST to the control-plane proxy. Shared with the
105
+ * architecture-v2 backend (`cursor-hosted-v2.ts`), which speaks a different
106
+ * route family over the same transport and credential chain.
107
+ */
108
+ export function storageRpc(options, path, body) {
104
109
  return __awaiter(this, void 0, void 0, function* () {
105
110
  var _a;
106
111
  const baseUrl = resolveBaseUrl(options);
@@ -27,6 +27,7 @@ export declare const STORAGE_KEY_ROOT: "agentkit/v1";
27
27
  * | --- | --- |
28
28
  * | `agentkit/v1/{agent}/session/{sessionId}` | `SessionRecord` |
29
29
  * | `agentkit/v1/{agent}/session-events/{sessionId}/{index}` | `SessionEvent[]` chunk (index = first event's index, zero-padded) |
30
+ * | `agentkit/v1/{agent}/session-runs/{sessionPublicId}` | One session-level hosted-execution log (executions[] + lastFailure) |
30
31
  * | `agentkit/v1/{agent}/continuation/{channelId}/{token}` | `{ sessionId }` |
31
32
  * | `agentkit/v1/{agent}/kv/{key}` | Author JSON via `HostContext.kv` |
32
33
  *
@@ -40,6 +41,13 @@ export declare const storageKeys: {
40
41
  readonly sessionPrefix: (agent: string) => string;
41
42
  readonly sessionEvents: (agent: string, sessionId: string, firstIndex: number) => string;
42
43
  readonly sessionEventsPrefix: (agent: string, sessionId: string) => string;
44
+ /**
45
+ * One session-level hosted-execution log (v2 only). `sessionPublicId` is
46
+ * the factory `ses_…` so a throw that never minted a July session still
47
+ * lands under a stable key. Per-execution rows live inside the document.
48
+ */
49
+ readonly sessionRun: (agent: string, sessionPublicId: string) => string;
50
+ readonly sessionRunsPrefix: (agent: string) => string;
43
51
  readonly continuation: (agent: string, channelId: string, continuationKey: string) => string;
44
52
  /**
45
53
  * Author-facing opaque JSON (see `HostContext.kv`). `key` is URI-encoded /
@@ -1 +1 @@
1
- {"version":3,"file":"storage-protocol.d.ts","sourceRoot":"","sources":["../src/storage-protocol.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAG,aAAsB,CAAC;AASvD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,WAAW;aACtB,OAAO,UAAU,MAAM,aAAa,MAAM,KAAG,MAAM;aAEnD,aAAa,UAAU,MAAM,KAAG,MAAM;aAEtC,aAAa,UACJ,MAAM,aACF,MAAM,cACL,MAAM,KACjB,MAAM;aAET,mBAAmB,UAAU,MAAM,aAAa,MAAM,KAAG,MAAM;aAE/D,YAAY,UACH,MAAM,aACF,MAAM,mBACA,MAAM,KACtB,MAAM;IAET;;;OAGG;aACH,EAAE,UAAU,MAAM,OAAO,MAAM,KAAG,MAAM;aAExC,QAAQ,UAAU,MAAM,KAAG,MAAM;IACjC,gEAAgE;aAChE,OAAO,UAAU,MAAM,SAAS,MAAM,KAAG,MAAM;aAE/C,cAAc,UAAU,MAAM,KAAG,MAAM;IAEvC;;;OAGG;aACH,QAAQ,UACC,MAAM,cACD,MAAM,aACP,MAAM,MACb,MAAM,KACT,MAAM;IAET,gEAAgE;aAChE,UAAU,UAAU,MAAM,KAAG,MAAM;CAE3B,CAAC;AAEX;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAEzC;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAM9C;AAED,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAG9D;AAED,kFAAkF;AAClF,MAAM,MAAM,oBAAoB,GAAG;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC3C,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,GAAG,SAAS,CAAC;CAC9B,CAAC;AAUF;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,OAAO,GACb,oBAAoB,GAAG,SAAS,CAwClC;AAED,wBAAgB,6BAA6B,CAAC,IAAI,EAAE;IAClD,MAAM,EAAE,oBAAoB,CAAC;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,GAAG,qBAAqB,CAYxB;AAED;;;GAGG;AACH,eAAO,MAAM,6BAA6B,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAYjE,CAAC"}
1
+ {"version":3,"file":"storage-protocol.d.ts","sourceRoot":"","sources":["../src/storage-protocol.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAG,aAAsB,CAAC;AASvD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,eAAO,MAAM,WAAW;aACtB,OAAO,UAAU,MAAM,aAAa,MAAM,KAAG,MAAM;aAEnD,aAAa,UAAU,MAAM,KAAG,MAAM;aAEtC,aAAa,UACJ,MAAM,aACF,MAAM,cACL,MAAM,KACjB,MAAM;aAET,mBAAmB,UAAU,MAAM,aAAa,MAAM,KAAG,MAAM;IAE/D;;;;OAIG;aACH,UAAU,UAAU,MAAM,mBAAmB,MAAM,KAAG,MAAM;aAE5D,iBAAiB,UAAU,MAAM,KAAG,MAAM;aAE1C,YAAY,UACH,MAAM,aACF,MAAM,mBACA,MAAM,KACtB,MAAM;IAET;;;OAGG;aACH,EAAE,UAAU,MAAM,OAAO,MAAM,KAAG,MAAM;aAExC,QAAQ,UAAU,MAAM,KAAG,MAAM;IACjC,gEAAgE;aAChE,OAAO,UAAU,MAAM,SAAS,MAAM,KAAG,MAAM;aAE/C,cAAc,UAAU,MAAM,KAAG,MAAM;IAEvC;;;OAGG;aACH,QAAQ,UACC,MAAM,cACD,MAAM,aACP,MAAM,MACb,MAAM,KACT,MAAM;IAET,gEAAgE;aAChE,UAAU,UAAU,MAAM,KAAG,MAAM;CAE3B,CAAC;AAEX;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAEzC;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAM9C;AAED,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAG9D;AAED,kFAAkF;AAClF,MAAM,MAAM,oBAAoB,GAAG;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC3C,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,GAAG,SAAS,CAAC;CAC9B,CAAC;AAUF;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,OAAO,GACb,oBAAoB,GAAG,SAAS,CAwClC;AAED,wBAAgB,6BAA6B,CAAC,IAAI,EAAE;IAClD,MAAM,EAAE,oBAAoB,CAAC;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,GAAG,qBAAqB,CAYxB;AAED;;;GAGG;AACH,eAAO,MAAM,6BAA6B,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAYjE,CAAC"}
@@ -33,6 +33,7 @@ const DURABLE_SESSION_RECORD_KEY_RE = /^agentkit\/v1\/([^/]+)\/session\/([^/]+)$
33
33
  * | --- | --- |
34
34
  * | `agentkit/v1/{agent}/session/{sessionId}` | `SessionRecord` |
35
35
  * | `agentkit/v1/{agent}/session-events/{sessionId}/{index}` | `SessionEvent[]` chunk (index = first event's index, zero-padded) |
36
+ * | `agentkit/v1/{agent}/session-runs/{sessionPublicId}` | One session-level hosted-execution log (executions[] + lastFailure) |
36
37
  * | `agentkit/v1/{agent}/continuation/{channelId}/{token}` | `{ sessionId }` |
37
38
  * | `agentkit/v1/{agent}/kv/{key}` | Author JSON via `HostContext.kv` |
38
39
  *
@@ -46,6 +47,13 @@ export const storageKeys = {
46
47
  sessionPrefix: (agent) => `${STORAGE_KEY_ROOT}/${agent}/session/`,
47
48
  sessionEvents: (agent, sessionId, firstIndex) => `${STORAGE_KEY_ROOT}/${agent}/session-events/${sessionId}/${String(firstIndex).padStart(8, "0")}`,
48
49
  sessionEventsPrefix: (agent, sessionId) => `${STORAGE_KEY_ROOT}/${agent}/session-events/${sessionId}/`,
50
+ /**
51
+ * One session-level hosted-execution log (v2 only). `sessionPublicId` is
52
+ * the factory `ses_…` so a throw that never minted a July session still
53
+ * lands under a stable key. Per-execution rows live inside the document.
54
+ */
55
+ sessionRun: (agent, sessionPublicId) => `${STORAGE_KEY_ROOT}/${agent}/session-runs/${keySegment(sessionPublicId)}`,
56
+ sessionRunsPrefix: (agent) => `${STORAGE_KEY_ROOT}/${agent}/session-runs/`,
49
57
  continuation: (agent, channelId, continuationKey) => `${STORAGE_KEY_ROOT}/${agent}/continuation/${keySegment(channelId)}/${keySegment(continuationKey)}`,
50
58
  /**
51
59
  * Author-facing opaque JSON (see `HostContext.kv`). `key` is URI-encoded /
package/dist/tools.d.ts CHANGED
@@ -71,6 +71,15 @@ type ServerToolConfig<TSchema> = {
71
71
  * write, so a dry-run session answers it instead of running it.
72
72
  */
73
73
  effect?: ToolEffectDeclaration<ToolInput<TSchema>>;
74
+ /**
75
+ * Input properties carrying time bounds. In an `asOf` session each named
76
+ * argument must be an absolute ISO-8601 instant with a timezone, no later
77
+ * than the frozen instant; a call that omits one, or supplies a relative
78
+ * or later value, is refused so the model retries with absolute bounds.
79
+ * Names must exist in {@link inputSchema} or the frozen session refuses to
80
+ * start. Ignored without `asOf`.
81
+ */
82
+ timeArgs?: readonly string[];
74
83
  /** What a `"write"` tool returns in a dry-run session. */
75
84
  dryRunResult?: ToolExecuteResult | ((input: ToolInput<TSchema>) => ToolExecuteResult);
76
85
  execute: (input: ToolInput<TSchema>, ctx: ToolContext) => ToolExecuteResult | Promise<ToolExecuteResult>;
@@ -92,10 +101,11 @@ type AgentToolConfig<TSchema> = {
92
101
  needsApproval?: never;
93
102
  /**
94
103
  * Agent tools run inside the harness, not through the host's tool path, so
95
- * a dry run cannot answer them. Classify the work as a server tool if it
96
- * needs to be dry-runnable.
104
+ * a dry run cannot answer them and an `asOf` session cannot bound them.
105
+ * Classify the work as a server tool if it needs either.
97
106
  */
98
107
  effect?: never;
108
+ timeArgs?: never;
99
109
  dryRunResult?: never;
100
110
  };
101
111
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AAEH,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B,OAAO,KAAK,EACV,UAAU,EACV,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,EAClB,MAAM,YAAY,CAAC;AAEpB,YAAY,EACV,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,UAAU,EACV,WAAW,EACX,cAAc,EACd,UAAU,EACV,qBAAqB,EACrB,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,YAAY,CAAC;AAEpB,4EAA4E;AAC5E,MAAM,MAAM,SAAS,CAAC,OAAO,IAAI,OAAO,SAAS,CAAC,CAAC,UAAU,GACzD,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAChB,UAAU,CAAC;AAEf,KAAK,gBAAgB,CAAC,OAAO,IAAI;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,QAAQ,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,CAAC,UAAU,GAAG,gBAAgB,CAAC;IAC/C,aAAa,CAAC,EAAE,iBAAiB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IACtD;;;OAGG;IACH,MAAM,CAAC,EAAE,qBAAqB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IACnD,0DAA0D;IAC1D,YAAY,CAAC,EACT,iBAAiB,GACjB,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,OAAO,CAAC,KAAK,iBAAiB,CAAC,CAAC;IACvD,OAAO,EAAE,CACP,KAAK,EAAE,SAAS,CAAC,OAAO,CAAC,EACzB,GAAG,EAAE,WAAW,KACb,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACpD,MAAM,CAAC,EAAE,KAAK,CAAC;CAChB,CAAC;AAEF,KAAK,eAAe,CAAC,OAAO,IAAI;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,6EAA6E;IAC7E,YAAY,CAAC,EAAE,CAAC,CAAC,UAAU,GAAG,gBAAgB,CAAC;IAC/C;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,KAAK,CAAC;IAChB,uEAAuE;IACvE,aAAa,CAAC,EAAE,KAAK,CAAC;IACtB;;;;OAIG;IACH,MAAM,CAAC,EAAE,KAAK,CAAC;IACf,YAAY,CAAC,EAAE,KAAK,CAAC;CACtB,CAAC;AAEF;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CACxB,OAAO,SAAS,CAAC,CAAC,UAAU,GAAG,gBAAgB,GAAG,SAAS,GAAG,SAAS,EAEvE,MAAM,EAAE,gBAAgB,CAAC,OAAO,CAAC,GAAG,eAAe,CAAC,OAAO,CAAC,GAC3D,cAAc,CAEhB"}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AAEH,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B,OAAO,KAAK,EACV,UAAU,EACV,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,EAClB,MAAM,YAAY,CAAC;AAEpB,YAAY,EACV,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,UAAU,EACV,WAAW,EACX,cAAc,EACd,UAAU,EACV,qBAAqB,EACrB,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,YAAY,CAAC;AAEpB,4EAA4E;AAC5E,MAAM,MAAM,SAAS,CAAC,OAAO,IAAI,OAAO,SAAS,CAAC,CAAC,UAAU,GACzD,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAChB,UAAU,CAAC;AAEf,KAAK,gBAAgB,CAAC,OAAO,IAAI;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,QAAQ,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,CAAC,UAAU,GAAG,gBAAgB,CAAC;IAC/C,aAAa,CAAC,EAAE,iBAAiB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IACtD;;;OAGG;IACH,MAAM,CAAC,EAAE,qBAAqB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IACnD;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,0DAA0D;IAC1D,YAAY,CAAC,EACT,iBAAiB,GACjB,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,OAAO,CAAC,KAAK,iBAAiB,CAAC,CAAC;IACvD,OAAO,EAAE,CACP,KAAK,EAAE,SAAS,CAAC,OAAO,CAAC,EACzB,GAAG,EAAE,WAAW,KACb,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACpD,MAAM,CAAC,EAAE,KAAK,CAAC;CAChB,CAAC;AAEF,KAAK,eAAe,CAAC,OAAO,IAAI;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,6EAA6E;IAC7E,YAAY,CAAC,EAAE,CAAC,CAAC,UAAU,GAAG,gBAAgB,CAAC;IAC/C;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,KAAK,CAAC;IAChB,uEAAuE;IACvE,aAAa,CAAC,EAAE,KAAK,CAAC;IACtB;;;;OAIG;IACH,MAAM,CAAC,EAAE,KAAK,CAAC;IACf,QAAQ,CAAC,EAAE,KAAK,CAAC;IACjB,YAAY,CAAC,EAAE,KAAK,CAAC;CACtB,CAAC;AAEF;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CACxB,OAAO,SAAS,CAAC,CAAC,UAAU,GAAG,gBAAgB,GAAG,SAAS,GAAG,SAAS,EAEvE,MAAM,EAAE,gBAAgB,CAAC,OAAO,CAAC,GAAG,eAAe,CAAC,OAAO,CAAC,GAC3D,cAAc,CAEhB"}
package/dist/types.d.ts CHANGED
@@ -718,6 +718,8 @@ export interface ToolContext {
718
718
  * `subagent.completed`). Omitted for scratch `callTool` with no session.
719
719
  */
720
720
  emit?: (payload: SessionEventPayload) => void;
721
+ /** The session's frozen `asOf`, or the wall clock. Use instead of `Date.now()`. */
722
+ now(): Date;
721
723
  }
722
724
  /**
723
725
  * Where a tool's body runs.
@@ -803,6 +805,17 @@ export interface ToolConfig<TInput> {
803
805
  * write, so a dry run stubs it — see {@link ToolEffect}.
804
806
  */
805
807
  effect?: ToolEffectDeclaration<TInput>;
808
+ /**
809
+ * Input properties that carry time bounds. In a session created with
810
+ * {@link SendMessageOptions.asOf}, every named argument must be an
811
+ * absolute ISO-8601 instant with a timezone, no later than the session's
812
+ * frozen instant — a call that omits one, or supplies a relative or later
813
+ * value, is refused so the model retries with absolute bounds. Names must
814
+ * exist in {@link inputSchema}; a session with `asOf` refuses to start
815
+ * otherwise, because a misspelled name would silently check nothing.
816
+ * Ignored in sessions without `asOf`.
817
+ */
818
+ timeArgs?: readonly string[];
806
819
  /**
807
820
  * What a write tool returns in a dry-run session instead of executing.
808
821
  *
@@ -832,6 +845,7 @@ export interface ToolDefinition extends BrandedDefinition<"tool"> {
832
845
  readonly outputSchema?: z.ZodTypeAny | JsonSchemaObject;
833
846
  readonly needsApproval?: ToolNeedsApproval<never>;
834
847
  readonly effect?: ToolEffectDeclaration<never>;
848
+ readonly timeArgs?: readonly string[];
835
849
  readonly dryRunResult?: ToolExecuteResult | ((input: never) => ToolExecuteResult);
836
850
  readonly execute?: (input: never, ctx: ToolContext) => ToolExecuteResult | Promise<ToolExecuteResult>;
837
851
  readonly script?: string;
@@ -1384,6 +1398,8 @@ export interface SessionInfo {
1384
1398
  purpose?: SessionPurpose;
1385
1399
  /** True when write-classified tool calls are answered by the host. */
1386
1400
  dryRun?: boolean;
1401
+ /** Frozen instant this session reads at; absent means the wall clock. */
1402
+ asOf?: string;
1387
1403
  auth: AuthContext | null;
1388
1404
  title?: string;
1389
1405
  /**
@@ -1417,6 +1433,8 @@ export interface SessionRecord {
1417
1433
  purpose?: SessionPurpose;
1418
1434
  /** Frozen at create from {@link SendMessageOptions.dryRun}. */
1419
1435
  dryRun?: boolean;
1436
+ /** Frozen at create from {@link SendMessageOptions.asOf}. */
1437
+ asOf?: string;
1420
1438
  /**
1421
1439
  * Denormalized sticky A/B arms (mirrors durable `ab.assigned` events) so
1422
1440
  * the agent loop / tools can read arms without re-folding the log. Source
@@ -1611,6 +1629,13 @@ export interface SendMessageOptions {
1611
1629
  * model chose stay on the session log as the record of the intended action.
1612
1630
  */
1613
1631
  dryRun?: boolean;
1632
+ /**
1633
+ * ISO-8601 instant with a timezone, frozen at create: the prompt states
1634
+ * it, {@link ToolContext.now} returns it, and tools that declare
1635
+ * {@link ToolConfig.timeArgs} refuse calls not bounded at or before it. A
1636
+ * tool that declares nothing still reads the present.
1637
+ */
1638
+ asOf?: string;
1614
1639
  /**
1615
1640
  * Absolute directory used as the local harness `cwd` for this session.
1616
1641
  * On create, sets the session workspace. On resume (continuation hit),
@@ -1965,6 +1990,11 @@ export interface ChannelMeta {
1965
1990
  * by `info` so watched channels are auditable.
1966
1991
  */
1967
1992
  slackChannelPosts?: readonly string[];
1993
+ /**
1994
+ * Author-facing notices about deprecated options the pack still honored.
1995
+ * Discovery surfaces each one as a `validate` warning on the channel file.
1996
+ */
1997
+ deprecations?: readonly string[];
1968
1998
  }
1969
1999
  export interface ChannelConfig<TState = JsonValue> {
1970
2000
  /**