@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
@@ -0,0 +1,219 @@
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
+
37
+ import type {
38
+ StorageABTable,
39
+ StorageCasTable,
40
+ StorageConfig,
41
+ StorageEntry,
42
+ StorageEvalsTable,
43
+ } from "../storage.js";
44
+ import type { JsonValue, KvCasResult, KvVersionedEntry } from "../types.js";
45
+ import {
46
+ CURSOR_HOSTED_STORAGE,
47
+ type CursorHostedStorageOptions,
48
+ cursorHostedStorage,
49
+ storageRpc,
50
+ } from "./cursor-hosted.js";
51
+
52
+ const KV_V2_PREFIX = "/internal/agentsdk/kv";
53
+
54
+ /** Wire shape of the v2 `get` route. `null` ⇒ JSON `undefined`. */
55
+ export interface KvV2GetResponse {
56
+ found: boolean;
57
+ value: JsonValue | null;
58
+ version: string | null;
59
+ }
60
+
61
+ /** Wire shape of the v2 `put` route (all three write modes). */
62
+ export interface KvV2PutResponse {
63
+ ok: boolean;
64
+ /** New version token on an accepted write, else `null`. */
65
+ version: string | null;
66
+ /** Entry observed when a conditional write lost; `null` when absent. */
67
+ current: { value: JsonValue | null; version: string } | null;
68
+ }
69
+
70
+ /** Wire shape of the v2 `list` route. */
71
+ export interface KvV2ListResponse {
72
+ entries: Array<{
73
+ key: string;
74
+ /** Omitted when the request asked for keys only. */
75
+ value?: JsonValue | null;
76
+ version: string;
77
+ }>;
78
+ /** Last key of this page when more rows remain, else `null`. */
79
+ nextCursor: string | null;
80
+ }
81
+
82
+ type CursorHostedStorageV2Methods = Required<
83
+ Pick<StorageConfig, "put" | "get" | "delete" | "list">
84
+ > & {
85
+ readonly [CURSOR_HOSTED_STORAGE]: true;
86
+ cas: StorageCasTable;
87
+ evals: StorageEvalsTable;
88
+ abs: StorageABTable;
89
+ };
90
+
91
+ function toCasResult(response: KvV2PutResponse): KvCasResult {
92
+ if (response.ok) {
93
+ if (response.version === null) {
94
+ throw new Error(
95
+ "cursorHostedStorageV2: conditional write succeeded without a version token"
96
+ );
97
+ }
98
+ return { ok: true, version: response.version };
99
+ }
100
+ const current: KvVersionedEntry | undefined =
101
+ response.current === null
102
+ ? undefined
103
+ : {
104
+ value: response.current.value ?? null,
105
+ version: response.current.version,
106
+ };
107
+ return { ok: false, current };
108
+ }
109
+
110
+ /**
111
+ * Drain every page of a v2 `list` scan. The server pages by keyset (each
112
+ * `nextCursor` is the strictly-greatest key returned so far), so a cursor
113
+ * that fails to advance means a broken server — fail loudly rather than
114
+ * loop forever.
115
+ */
116
+ async function listAllPages(
117
+ options: CursorHostedStorageOptions,
118
+ body: { prefix: string; keysOnly?: boolean }
119
+ ): Promise<KvV2ListResponse["entries"]> {
120
+ const entries: KvV2ListResponse["entries"] = [];
121
+ let cursor: string | undefined;
122
+ for (;;) {
123
+ const page = await storageRpc<KvV2ListResponse>(
124
+ options,
125
+ `${KV_V2_PREFIX}/list`,
126
+ cursor === undefined ? body : { ...body, cursor }
127
+ );
128
+ entries.push(...page.entries);
129
+ if (page.nextCursor === null) {
130
+ return entries;
131
+ }
132
+ if (cursor !== undefined && page.nextCursor <= cursor) {
133
+ throw new Error(
134
+ `cursorHostedStorageV2: list("${body.prefix}") cursor did not advance`
135
+ );
136
+ }
137
+ cursor = page.nextCursor;
138
+ }
139
+ }
140
+
141
+ /**
142
+ * Architecture-v2 `defineStorage` methods (AgentSDK v2 KV proxy → factorydb
143
+ * `agentsdk_kv`). Platform-selected; spread into `defineStorage({...})` by
144
+ * framework-storage-selection.ts. No `listNewest`: v2 session records live
145
+ * on the framework file store, so the only consumer of write-time ordering
146
+ * never reaches this backend and the engine's `list` fallback covers the
147
+ * rest.
148
+ */
149
+ export function cursorHostedStorageV2(
150
+ options: CursorHostedStorageOptions = {}
151
+ ): CursorHostedStorageV2Methods {
152
+ // Eval runs and A/B samples stay on the v1 proxy's dedicated tables.
153
+ const v1 = cursorHostedStorage(options);
154
+ return {
155
+ [CURSOR_HOSTED_STORAGE]: true,
156
+ async put(key, value): Promise<void> {
157
+ await storageRpc(options, `${KV_V2_PREFIX}/put`, { key, value });
158
+ },
159
+ async get(key): Promise<JsonValue | undefined> {
160
+ const result = await storageRpc<KvV2GetResponse>(
161
+ options,
162
+ `${KV_V2_PREFIX}/get`,
163
+ { key }
164
+ );
165
+ if (!result.found) {
166
+ return undefined;
167
+ }
168
+ return result.value ?? undefined;
169
+ },
170
+ async delete(key): Promise<void> {
171
+ await storageRpc(options, `${KV_V2_PREFIX}/delete`, { key });
172
+ },
173
+ async list(prefix): Promise<StorageEntry[]> {
174
+ const entries = await listAllPages(options, { prefix });
175
+ return entries.map((entry) => ({
176
+ key: entry.key,
177
+ value: entry.value ?? null,
178
+ }));
179
+ },
180
+ cas: {
181
+ async getWithVersion(key): Promise<KvVersionedEntry | undefined> {
182
+ const result = await storageRpc<KvV2GetResponse>(
183
+ options,
184
+ `${KV_V2_PREFIX}/get`,
185
+ { key }
186
+ );
187
+ if (!result.found || result.version === null) {
188
+ return undefined;
189
+ }
190
+ return { value: result.value ?? null, version: result.version };
191
+ },
192
+ async putIfAbsent(key, value): Promise<KvCasResult> {
193
+ const result = await storageRpc<KvV2PutResponse>(
194
+ options,
195
+ `${KV_V2_PREFIX}/put`,
196
+ { key, value, ifAbsent: true }
197
+ );
198
+ return toCasResult(result);
199
+ },
200
+ async putIfVersion(key, value, expectedVersion): Promise<KvCasResult> {
201
+ const result = await storageRpc<KvV2PutResponse>(
202
+ options,
203
+ `${KV_V2_PREFIX}/put`,
204
+ { key, value, ifVersion: expectedVersion }
205
+ );
206
+ return toCasResult(result);
207
+ },
208
+ async listKeys(prefix): Promise<string[]> {
209
+ const entries = await listAllPages(options, {
210
+ prefix,
211
+ keysOnly: true,
212
+ });
213
+ return entries.map((entry) => entry.key);
214
+ },
215
+ },
216
+ evals: v1.evals,
217
+ abs: v1.abs,
218
+ };
219
+ }
@@ -207,7 +207,12 @@ function resolveBaseUrl(options: CursorHostedStorageOptions): string {
207
207
  return raw.endsWith("/") ? raw.slice(0, -1) : raw;
208
208
  }
209
209
 
210
- async function storageRpc<T>(
210
+ /**
211
+ * One authenticated POST to the control-plane proxy. Shared with the
212
+ * architecture-v2 backend (`cursor-hosted-v2.ts`), which speaks a different
213
+ * route family over the same transport and credential chain.
214
+ */
215
+ export async function storageRpc<T>(
211
216
  options: CursorHostedStorageOptions,
212
217
  path: string,
213
218
  body: Record<string, unknown>
@@ -38,6 +38,7 @@ const DURABLE_SESSION_RECORD_KEY_RE =
38
38
  * | --- | --- |
39
39
  * | `agentkit/v1/{agent}/session/{sessionId}` | `SessionRecord` |
40
40
  * | `agentkit/v1/{agent}/session-events/{sessionId}/{index}` | `SessionEvent[]` chunk (index = first event's index, zero-padded) |
41
+ * | `agentkit/v1/{agent}/session-runs/{sessionPublicId}` | One session-level hosted-execution log (executions[] + lastFailure) |
41
42
  * | `agentkit/v1/{agent}/continuation/{channelId}/{token}` | `{ sessionId }` |
42
43
  * | `agentkit/v1/{agent}/kv/{key}` | Author JSON via `HostContext.kv` |
43
44
  *
@@ -59,6 +60,15 @@ export const storageKeys = {
59
60
  `${STORAGE_KEY_ROOT}/${agent}/session-events/${sessionId}/${String(firstIndex).padStart(8, "0")}`,
60
61
  sessionEventsPrefix: (agent: string, sessionId: string): string =>
61
62
  `${STORAGE_KEY_ROOT}/${agent}/session-events/${sessionId}/`,
63
+ /**
64
+ * One session-level hosted-execution log (v2 only). `sessionPublicId` is
65
+ * the factory `ses_…` so a throw that never minted a July session still
66
+ * lands under a stable key. Per-execution rows live inside the document.
67
+ */
68
+ sessionRun: (agent: string, sessionPublicId: string): string =>
69
+ `${STORAGE_KEY_ROOT}/${agent}/session-runs/${keySegment(sessionPublicId)}`,
70
+ sessionRunsPrefix: (agent: string): string =>
71
+ `${STORAGE_KEY_ROOT}/${agent}/session-runs/`,
62
72
  continuation: (
63
73
  agent: string,
64
74
  channelId: string,
package/src/tools.ts CHANGED
@@ -99,6 +99,15 @@ type ServerToolConfig<TSchema> = {
99
99
  * write, so a dry-run session answers it instead of running it.
100
100
  */
101
101
  effect?: ToolEffectDeclaration<ToolInput<TSchema>>;
102
+ /**
103
+ * Input properties carrying time bounds. In an `asOf` session each named
104
+ * argument must be an absolute ISO-8601 instant with a timezone, no later
105
+ * than the frozen instant; a call that omits one, or supplies a relative
106
+ * or later value, is refused so the model retries with absolute bounds.
107
+ * Names must exist in {@link inputSchema} or the frozen session refuses to
108
+ * start. Ignored without `asOf`.
109
+ */
110
+ timeArgs?: readonly string[];
102
111
  /** What a `"write"` tool returns in a dry-run session. */
103
112
  dryRunResult?:
104
113
  | ToolExecuteResult
@@ -126,10 +135,11 @@ type AgentToolConfig<TSchema> = {
126
135
  needsApproval?: never;
127
136
  /**
128
137
  * Agent tools run inside the harness, not through the host's tool path, so
129
- * a dry run cannot answer them. Classify the work as a server tool if it
130
- * needs to be dry-runnable.
138
+ * a dry run cannot answer them and an `asOf` session cannot bound them.
139
+ * Classify the work as a server tool if it needs either.
131
140
  */
132
141
  effect?: never;
142
+ timeArgs?: never;
133
143
  dryRunResult?: never;
134
144
  };
135
145
 
package/src/types.ts CHANGED
@@ -880,6 +880,8 @@ export interface ToolContext {
880
880
  * `subagent.completed`). Omitted for scratch `callTool` with no session.
881
881
  */
882
882
  emit?: (payload: SessionEventPayload) => void;
883
+ /** The session's frozen `asOf`, or the wall clock. Use instead of `Date.now()`. */
884
+ now(): Date;
883
885
  }
884
886
 
885
887
  /**
@@ -992,6 +994,17 @@ export interface ToolConfig<TInput> {
992
994
  * write, so a dry run stubs it — see {@link ToolEffect}.
993
995
  */
994
996
  effect?: ToolEffectDeclaration<TInput>;
997
+ /**
998
+ * Input properties that carry time bounds. In a session created with
999
+ * {@link SendMessageOptions.asOf}, every named argument must be an
1000
+ * absolute ISO-8601 instant with a timezone, no later than the session's
1001
+ * frozen instant — a call that omits one, or supplies a relative or later
1002
+ * value, is refused so the model retries with absolute bounds. Names must
1003
+ * exist in {@link inputSchema}; a session with `asOf` refuses to start
1004
+ * otherwise, because a misspelled name would silently check nothing.
1005
+ * Ignored in sessions without `asOf`.
1006
+ */
1007
+ timeArgs?: readonly string[];
995
1008
  /**
996
1009
  * What a write tool returns in a dry-run session instead of executing.
997
1010
  *
@@ -1025,6 +1038,7 @@ export interface ToolDefinition extends BrandedDefinition<"tool"> {
1025
1038
  readonly outputSchema?: z.ZodTypeAny | JsonSchemaObject;
1026
1039
  readonly needsApproval?: ToolNeedsApproval<never>;
1027
1040
  readonly effect?: ToolEffectDeclaration<never>;
1041
+ readonly timeArgs?: readonly string[];
1028
1042
  readonly dryRunResult?:
1029
1043
  | ToolExecuteResult
1030
1044
  | ((input: never) => ToolExecuteResult);
@@ -1624,6 +1638,8 @@ export interface SessionInfo {
1624
1638
  purpose?: SessionPurpose;
1625
1639
  /** True when write-classified tool calls are answered by the host. */
1626
1640
  dryRun?: boolean;
1641
+ /** Frozen instant this session reads at; absent means the wall clock. */
1642
+ asOf?: string;
1627
1643
  auth: AuthContext | null;
1628
1644
  title?: string;
1629
1645
  /**
@@ -1658,6 +1674,8 @@ export interface SessionRecord {
1658
1674
  purpose?: SessionPurpose;
1659
1675
  /** Frozen at create from {@link SendMessageOptions.dryRun}. */
1660
1676
  dryRun?: boolean;
1677
+ /** Frozen at create from {@link SendMessageOptions.asOf}. */
1678
+ asOf?: string;
1661
1679
  /**
1662
1680
  * Denormalized sticky A/B arms (mirrors durable `ab.assigned` events) so
1663
1681
  * the agent loop / tools can read arms without re-folding the log. Source
@@ -1853,6 +1871,13 @@ export interface SendMessageOptions {
1853
1871
  * model chose stay on the session log as the record of the intended action.
1854
1872
  */
1855
1873
  dryRun?: boolean;
1874
+ /**
1875
+ * ISO-8601 instant with a timezone, frozen at create: the prompt states
1876
+ * it, {@link ToolContext.now} returns it, and tools that declare
1877
+ * {@link ToolConfig.timeArgs} refuse calls not bounded at or before it. A
1878
+ * tool that declares nothing still reads the present.
1879
+ */
1880
+ asOf?: string;
1856
1881
  /**
1857
1882
  * Absolute directory used as the local harness `cwd` for this session.
1858
1883
  * On create, sets the session workspace. On resume (continuation hit),
@@ -2289,6 +2314,11 @@ export interface ChannelMeta {
2289
2314
  * by `info` so watched channels are auditable.
2290
2315
  */
2291
2316
  slackChannelPosts?: readonly string[];
2317
+ /**
2318
+ * Author-facing notices about deprecated options the pack still honored.
2319
+ * Discovery surfaces each one as a `validate` warning on the channel file.
2320
+ */
2321
+ deprecations?: readonly string[];
2292
2322
  }
2293
2323
 
2294
2324
  export interface ChannelConfig<TState = JsonValue> {