@cursor/july 0.1.101 → 0.1.102

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 (374) hide show
  1. package/README.md +27 -0
  2. package/dist/channels/slack/api.d.ts +1 -1
  3. package/dist/channels/slack/api.d.ts.map +1 -1
  4. package/dist/channels/slack/api.js +3 -1
  5. package/dist/channels/slack/assistant.d.ts +1 -1
  6. package/dist/channels/slack/assistant.d.ts.map +1 -1
  7. package/dist/channels/slack/dispatch.d.ts +3 -2
  8. package/dist/channels/slack/dispatch.d.ts.map +1 -1
  9. package/dist/channels/slack/dispatch.js +28 -8
  10. package/dist/channels/slack/inbound.d.ts +8 -0
  11. package/dist/channels/slack/inbound.d.ts.map +1 -1
  12. package/dist/channels/slack/inbound.js +28 -0
  13. package/dist/channels/slack/manifest.d.ts.map +1 -1
  14. package/dist/channels/slack/manifest.js +2 -1
  15. package/dist/docs/404.html +2 -2
  16. package/dist/docs/ab.html +4 -4
  17. package/dist/docs/assets/{app.BASO9Kih.js → app.CLA03RCz.js} +1 -1
  18. package/dist/docs/assets/chunks/@localSearchIndexroot.FAqdWIXo.js +1 -0
  19. package/dist/docs/assets/chunks/{VPLocalSearchBox.DwkqxoE0.js → VPLocalSearchBox.ifxv-cJV.js} +1 -1
  20. package/dist/docs/assets/chunks/{theme.CCil_13e.js → theme.DWCwM6p-.js} +2 -2
  21. package/dist/docs/assets/concepts.md.rPzW2HZN.js +1 -0
  22. package/dist/docs/assets/guides_cloud-agents.md.DumwWXba.js +9 -0
  23. package/dist/docs/assets/guides_cloud-agents.md.DumwWXba.lean.js +1 -0
  24. package/dist/docs/assets/{guides_cloud-runtime.md.CkYbjnAX.js → guides_cloud-runtime.md.BRirbRAN.js} +1 -1
  25. package/dist/docs/assets/index.md.Kiht7ell.js +5 -0
  26. package/dist/docs/assets/{index.md.Bb4k8kUm.lean.js → index.md.Kiht7ell.lean.js} +1 -1
  27. package/dist/docs/assets/reference_extensions.md.9WQMZe1l.js +56 -0
  28. package/dist/docs/assets/reference_extensions.md.9WQMZe1l.lean.js +1 -0
  29. package/dist/docs/assets/{reference_project-layout.md.Bv4KOtlB.js → reference_project-layout.md.CA6QP6Lw.js} +2 -2
  30. package/dist/docs/assets/{reference_project-layout.md.Bv4KOtlB.lean.js → reference_project-layout.md.CA6QP6Lw.lean.js} +1 -1
  31. package/dist/docs/assets/{reference_skills.md.BFW9retM.js → reference_skills.md.l2ezAcaN.js} +1 -1
  32. package/dist/docs/assets/{reference_tools.md.CvAHsdSp.js → reference_tools.md.B1up2r9W.js} +1 -1
  33. package/dist/docs/assets/skills_framework-map.md.DDa4MeEW.js +1 -0
  34. package/dist/docs/assets/{skills_framework-map.md.BTi817yv.lean.js → skills_framework-map.md.DDa4MeEW.lean.js} +1 -1
  35. package/dist/docs/building-with-agents.html +4 -4
  36. package/dist/docs/concepts.html +5 -5
  37. package/dist/docs/concepts.md +3 -3
  38. package/dist/docs/deployment.html +4 -4
  39. package/dist/docs/evals.html +4 -4
  40. package/dist/docs/guides/agent-to-agent.html +4 -4
  41. package/dist/docs/guides/cloud-agents.html +35 -0
  42. package/dist/docs/guides/cloud-agents.md +93 -0
  43. package/dist/docs/guides/cloud-runtime.html +6 -6
  44. package/dist/docs/guides/cloud-runtime.md +2 -0
  45. package/dist/docs/guides/convert-automation.html +4 -4
  46. package/dist/docs/guides/github.html +4 -4
  47. package/dist/docs/guides/human-in-the-loop.html +4 -4
  48. package/dist/docs/guides/mcp-oauth.html +4 -4
  49. package/dist/docs/guides/opentelemetry.html +5 -5
  50. package/dist/docs/guides/slack.html +4 -4
  51. package/dist/docs/guides/webhooks.html +4 -4
  52. package/dist/docs/hashmap.json +1 -1
  53. package/dist/docs/hillclimbing.html +4 -4
  54. package/dist/docs/index.html +6 -6
  55. package/dist/docs/index.md +5 -1
  56. package/dist/docs/llms-full.txt +321 -4
  57. package/dist/docs/llms.txt +2 -0
  58. package/dist/docs/quickstart.html +4 -4
  59. package/dist/docs/reference/agent-config.html +4 -4
  60. package/dist/docs/reference/artifacts.html +4 -4
  61. package/dist/docs/reference/channels.html +5 -5
  62. package/dist/docs/reference/cli.html +4 -4
  63. package/dist/docs/reference/connections.html +4 -4
  64. package/dist/docs/reference/extensions.html +82 -0
  65. package/dist/docs/reference/extensions.md +200 -0
  66. package/dist/docs/reference/hooks.html +4 -4
  67. package/dist/docs/reference/http-api.html +4 -4
  68. package/dist/docs/reference/instructions.html +4 -4
  69. package/dist/docs/reference/playground.html +4 -4
  70. package/dist/docs/reference/project-layout.html +6 -6
  71. package/dist/docs/reference/project-layout.md +3 -0
  72. package/dist/docs/reference/prompt.html +4 -4
  73. package/dist/docs/reference/schedules.html +4 -4
  74. package/dist/docs/reference/sessions.html +4 -4
  75. package/dist/docs/reference/skills.html +6 -6
  76. package/dist/docs/reference/skills.md +2 -0
  77. package/dist/docs/reference/subagents.html +5 -5
  78. package/dist/docs/reference/tools.html +6 -6
  79. package/dist/docs/reference/tools.md +2 -0
  80. package/dist/docs/scaffolding-agents.html +4 -4
  81. package/dist/docs/skills/ab.html +4 -4
  82. package/dist/docs/skills/create-agent.html +4 -4
  83. package/dist/docs/skills/debug.html +4 -4
  84. package/dist/docs/skills/evals.html +4 -4
  85. package/dist/docs/skills/framework-map.html +5 -5
  86. package/dist/docs/skills/framework-map.md +1 -0
  87. package/dist/docs/skills/github.html +4 -4
  88. package/dist/docs/skills/hillclimb.html +4 -4
  89. package/dist/docs/skills/index.html +4 -4
  90. package/dist/docs/skills/mcp-auth.html +4 -4
  91. package/dist/docs/skills/otel.html +4 -4
  92. package/dist/docs/skills/setup-slack.html +4 -4
  93. package/dist/docs/storage.html +4 -4
  94. package/dist/docs/templates/agentic-owners.html +4 -4
  95. package/dist/docs/templates/agents-md.html +4 -4
  96. package/dist/docs/templates/code-wiki.html +4 -4
  97. package/dist/docs/templates/demo.html +4 -4
  98. package/dist/docs/templates/pr-autofixer.html +4 -4
  99. package/dist/docs/templates/security-help.html +4 -4
  100. package/dist/docs/templates/security-reviewer.html +4 -4
  101. package/dist/docs/templates/triage.html +4 -4
  102. package/dist/docs/troubleshooting.html +4 -4
  103. package/dist/extensions/cursor-cloud-agents/extension.d.ts +9 -7
  104. package/dist/extensions/cursor-cloud-agents/extension.d.ts.map +1 -1
  105. package/dist/extensions/cursor-cloud-agents/extension.js +9 -7
  106. package/dist/extensions/cursor-cloud-agents/lib/backend.d.ts +78 -0
  107. package/dist/extensions/cursor-cloud-agents/lib/backend.d.ts.map +1 -0
  108. package/dist/extensions/cursor-cloud-agents/lib/backend.js +286 -0
  109. package/dist/extensions/cursor-cloud-agents/lib/inputs.d.ts +5 -0
  110. package/dist/extensions/cursor-cloud-agents/lib/inputs.d.ts.map +1 -0
  111. package/dist/extensions/cursor-cloud-agents/lib/inputs.js +4 -0
  112. package/dist/extensions/cursor-cloud-agents/lib/transcript.d.ts +8 -0
  113. package/dist/extensions/cursor-cloud-agents/lib/transcript.d.ts.map +1 -0
  114. package/dist/extensions/cursor-cloud-agents/lib/transcript.js +15 -0
  115. package/dist/extensions/cursor-cloud-agents/skills/handoff.md +21 -7
  116. package/dist/extensions/cursor-cloud-agents/tools/cancel.d.ts +4 -0
  117. package/dist/extensions/cursor-cloud-agents/tools/cancel.d.ts.map +1 -0
  118. package/dist/extensions/cursor-cloud-agents/tools/cancel.js +26 -0
  119. package/dist/extensions/cursor-cloud-agents/tools/dump.d.ts +4 -0
  120. package/dist/extensions/cursor-cloud-agents/tools/dump.d.ts.map +1 -0
  121. package/dist/extensions/cursor-cloud-agents/tools/dump.js +54 -0
  122. package/dist/extensions/cursor-cloud-agents/tools/get.d.ts +4 -0
  123. package/dist/extensions/cursor-cloud-agents/tools/get.d.ts.map +1 -0
  124. package/dist/extensions/cursor-cloud-agents/tools/get.js +25 -0
  125. package/dist/extensions/cursor-cloud-agents/tools/launch.d.ts.map +1 -1
  126. package/dist/extensions/cursor-cloud-agents/tools/launch.js +14 -38
  127. package/dist/extensions/cursor-cloud-agents/tools/list.js +1 -1
  128. package/dist/extensions/cursor-cloud-agents/tools/reply.d.ts +4 -0
  129. package/dist/extensions/cursor-cloud-agents/tools/reply.d.ts.map +1 -0
  130. package/dist/extensions/cursor-cloud-agents/tools/{follow_up.js → reply.js} +12 -14
  131. package/dist/extensions.d.ts +38 -14
  132. package/dist/extensions.d.ts.map +1 -1
  133. package/dist/extensions.js +49 -12
  134. package/dist/files-backends/cursor-hosted.d.ts +0 -8
  135. package/dist/files-backends/cursor-hosted.d.ts.map +1 -1
  136. package/dist/files-backends/cursor-hosted.js +1 -11
  137. package/dist/files.d.ts +5 -1
  138. package/dist/files.d.ts.map +1 -1
  139. package/dist/files.js +22 -18
  140. package/dist/index.d.ts +3 -3
  141. package/dist/index.d.ts.map +1 -1
  142. package/dist/index.js +2 -2
  143. package/dist/internal/conversation-mirror.d.ts.map +1 -1
  144. package/dist/internal/conversation-mirror.js +13 -15
  145. package/dist/internal/cursor/backend-client.d.ts +8 -1
  146. package/dist/internal/cursor/backend-client.d.ts.map +1 -1
  147. package/dist/internal/cursor/backend-client.js +25 -9
  148. package/dist/internal/cursor/hosted-store-secrets.d.ts +11 -0
  149. package/dist/internal/cursor/hosted-store-secrets.d.ts.map +1 -1
  150. package/dist/internal/cursor/hosted-store-secrets.js +15 -0
  151. package/dist/internal/discovery/ab.d.ts +9 -0
  152. package/dist/internal/discovery/ab.d.ts.map +1 -0
  153. package/dist/internal/discovery/ab.js +101 -0
  154. package/dist/internal/discovery/agent-config.d.ts +35 -0
  155. package/dist/internal/discovery/agent-config.d.ts.map +1 -0
  156. package/dist/internal/discovery/agent-config.js +173 -0
  157. package/dist/internal/discovery/agent.d.ts +11 -0
  158. package/dist/internal/discovery/agent.d.ts.map +1 -0
  159. package/dist/internal/discovery/agent.js +306 -0
  160. package/dist/internal/discovery/channels.d.ts +10 -0
  161. package/dist/internal/discovery/channels.d.ts.map +1 -0
  162. package/dist/internal/discovery/channels.js +97 -0
  163. package/dist/internal/discovery/connections.d.ts +17 -0
  164. package/dist/internal/discovery/connections.d.ts.map +1 -0
  165. package/dist/internal/discovery/connections.js +436 -0
  166. package/dist/internal/discovery/context.d.ts +20 -0
  167. package/dist/internal/discovery/context.d.ts.map +1 -0
  168. package/dist/internal/discovery/context.js +30 -0
  169. package/dist/internal/discovery/cursor-plugin.d.ts +25 -0
  170. package/dist/internal/discovery/cursor-plugin.d.ts.map +1 -0
  171. package/dist/internal/discovery/cursor-plugin.js +570 -0
  172. package/dist/internal/discovery/extensions.d.ts +19 -0
  173. package/dist/internal/discovery/extensions.d.ts.map +1 -0
  174. package/dist/internal/discovery/extensions.js +238 -0
  175. package/dist/internal/discovery/fs.d.ts +15 -0
  176. package/dist/internal/discovery/fs.d.ts.map +1 -0
  177. package/dist/internal/discovery/fs.js +115 -0
  178. package/dist/internal/discovery/hooks.d.ts +7 -0
  179. package/dist/internal/discovery/hooks.d.ts.map +1 -0
  180. package/dist/internal/discovery/hooks.js +48 -0
  181. package/dist/internal/discovery/info.d.ts +6 -0
  182. package/dist/internal/discovery/info.d.ts.map +1 -0
  183. package/dist/internal/discovery/info.js +141 -0
  184. package/dist/internal/discovery/instructions.d.ts +7 -0
  185. package/dist/internal/discovery/instructions.d.ts.map +1 -0
  186. package/dist/internal/discovery/instructions.js +95 -0
  187. package/dist/internal/discovery/modules.d.ts +20 -0
  188. package/dist/internal/discovery/modules.d.ts.map +1 -0
  189. package/dist/internal/discovery/modules.js +101 -0
  190. package/dist/internal/discovery/names.d.ts +12 -0
  191. package/dist/internal/discovery/names.d.ts.map +1 -0
  192. package/dist/internal/discovery/names.js +36 -0
  193. package/dist/internal/discovery/project.d.ts +53 -0
  194. package/dist/internal/discovery/project.d.ts.map +1 -0
  195. package/dist/internal/discovery/project.js +239 -0
  196. package/dist/internal/discovery/runtime.d.ts +34 -0
  197. package/dist/internal/discovery/runtime.d.ts.map +1 -0
  198. package/dist/internal/discovery/runtime.js +98 -0
  199. package/dist/internal/discovery/schedules.d.ts +7 -0
  200. package/dist/internal/discovery/schedules.d.ts.map +1 -0
  201. package/dist/internal/discovery/schedules.js +97 -0
  202. package/dist/internal/discovery/seed-files.d.ts +7 -0
  203. package/dist/internal/discovery/seed-files.d.ts.map +1 -0
  204. package/dist/internal/discovery/seed-files.js +41 -0
  205. package/dist/internal/discovery/services.d.ts +17 -0
  206. package/dist/internal/discovery/services.d.ts.map +1 -0
  207. package/dist/internal/discovery/services.js +104 -0
  208. package/dist/internal/discovery/skills.d.ts +16 -0
  209. package/dist/internal/discovery/skills.d.ts.map +1 -0
  210. package/dist/internal/discovery/skills.js +151 -0
  211. package/dist/internal/discovery/subagent.d.ts +13 -0
  212. package/dist/internal/discovery/subagent.d.ts.map +1 -0
  213. package/dist/internal/discovery/subagent.js +19 -0
  214. package/dist/internal/discovery/tools.d.ts +18 -0
  215. package/dist/internal/discovery/tools.d.ts.map +1 -0
  216. package/dist/internal/discovery/tools.js +159 -0
  217. package/dist/internal/discovery.d.ts +8 -62
  218. package/dist/internal/discovery.d.ts.map +1 -1
  219. package/dist/internal/discovery.js +8 -2505
  220. package/dist/internal/framework-file-storage.js +6 -6
  221. package/dist/internal/framework-storage-selection.d.ts.map +1 -1
  222. package/dist/internal/framework-storage-selection.js +8 -7
  223. package/dist/internal/frontmatter.d.ts +11 -3
  224. package/dist/internal/frontmatter.d.ts.map +1 -1
  225. package/dist/internal/frontmatter.js +29 -3
  226. package/dist/internal/mcp-host.d.ts.map +1 -1
  227. package/dist/internal/mcp-host.js +37 -20
  228. package/dist/internal/otel/collector.d.ts +13 -0
  229. package/dist/internal/otel/collector.d.ts.map +1 -1
  230. package/dist/internal/otel/collector.js +84 -17
  231. package/dist/internal/otel/http.d.ts.map +1 -1
  232. package/dist/internal/otel/http.js +2 -10
  233. package/dist/internal/otel/mcp.d.ts +16 -0
  234. package/dist/internal/otel/mcp.d.ts.map +1 -0
  235. package/dist/internal/otel/mcp.js +68 -0
  236. package/dist/internal/otel/propagation.d.ts +6 -0
  237. package/dist/internal/otel/propagation.d.ts.map +1 -0
  238. package/dist/internal/otel/propagation.js +14 -0
  239. package/dist/internal/otel/runtime.d.ts.map +1 -1
  240. package/dist/internal/otel/runtime.js +2 -0
  241. package/dist/internal/session-engine.d.ts +5 -0
  242. package/dist/internal/session-engine.d.ts.map +1 -1
  243. package/dist/internal/session-engine.js +68 -32
  244. package/dist/internal/session-run-log.d.ts +2 -1
  245. package/dist/internal/session-run-log.d.ts.map +1 -1
  246. package/dist/internal/session-run-log.js +13 -14
  247. package/dist/internal/start-log-store.d.ts +1 -1
  248. package/dist/internal/start-log-store.d.ts.map +1 -1
  249. package/dist/internal/start-log-store.js +12 -14
  250. package/dist/internal/storage-coordinator.d.ts +4 -1
  251. package/dist/internal/storage-coordinator.d.ts.map +1 -1
  252. package/dist/internal/storage-coordinator.js +15 -13
  253. package/dist/internal/tool-catalog.d.ts.map +1 -1
  254. package/dist/internal/tool-catalog.js +9 -6
  255. package/dist/internal/turn-cost.d.ts +14 -0
  256. package/dist/internal/turn-cost.d.ts.map +1 -1
  257. package/dist/internal/turn-cost.js +41 -9
  258. package/dist/internal/v2-hosting.d.ts +22 -0
  259. package/dist/internal/v2-hosting.d.ts.map +1 -0
  260. package/dist/internal/v2-hosting.js +23 -0
  261. package/dist/otel.d.ts +16 -0
  262. package/dist/otel.d.ts.map +1 -1
  263. package/dist/otel.js +26 -0
  264. package/dist/playground/assets/index-B6C9S9nG.css +1 -0
  265. package/dist/playground/index.html +2 -2
  266. package/dist/storage-protocol.d.ts +24 -23
  267. package/dist/storage-protocol.d.ts.map +1 -1
  268. package/dist/storage-protocol.js +68 -65
  269. package/dist/storage.d.ts +2 -2
  270. package/dist/storage.d.ts.map +1 -1
  271. package/dist/storage.js +1 -1
  272. package/dist/tools.d.ts +9 -0
  273. package/dist/tools.d.ts.map +1 -1
  274. package/dist/tools.js +9 -0
  275. package/dist/types.d.ts +39 -3
  276. package/dist/types.d.ts.map +1 -1
  277. package/docs/README.md +5 -1
  278. package/docs/concepts.md +3 -3
  279. package/docs/guides/cloud-agents.md +98 -0
  280. package/docs/guides/cloud-runtime.md +2 -0
  281. package/docs/reference/extensions.md +205 -0
  282. package/docs/reference/project-layout.md +3 -0
  283. package/docs/reference/skills.md +2 -0
  284. package/docs/reference/tools.md +2 -0
  285. package/package.json +1 -1
  286. package/skills/framework-map/SKILL.md +1 -0
  287. package/src/channels/slack/api.ts +4 -2
  288. package/src/channels/slack/assistant.ts +1 -1
  289. package/src/channels/slack/dispatch.ts +27 -2
  290. package/src/channels/slack/inbound.ts +37 -0
  291. package/src/channels/slack/manifest.ts +2 -1
  292. package/src/extensions/cursor-cloud-agents/extension.ts +9 -7
  293. package/src/extensions/cursor-cloud-agents/lib/backend.ts +395 -0
  294. package/src/extensions/cursor-cloud-agents/lib/inputs.ts +5 -0
  295. package/src/extensions/cursor-cloud-agents/lib/transcript.ts +23 -0
  296. package/src/extensions/cursor-cloud-agents/skills/handoff.md +21 -7
  297. package/src/extensions/cursor-cloud-agents/tools/cancel.ts +19 -0
  298. package/src/extensions/cursor-cloud-agents/tools/dump.ts +51 -0
  299. package/src/extensions/cursor-cloud-agents/tools/get.ts +18 -0
  300. package/src/extensions/cursor-cloud-agents/tools/launch.ts +22 -42
  301. package/src/extensions/cursor-cloud-agents/tools/list.ts +1 -1
  302. package/src/extensions/cursor-cloud-agents/tools/reply.ts +34 -0
  303. package/src/extensions.ts +55 -12
  304. package/src/files-backends/cursor-hosted.ts +1 -17
  305. package/src/files.ts +43 -34
  306. package/src/index.ts +10 -1
  307. package/src/internal/conversation-mirror.ts +23 -18
  308. package/src/internal/cursor/backend-client.ts +32 -10
  309. package/src/internal/cursor/hosted-store-secrets.ts +27 -0
  310. package/src/internal/discovery/ab.ts +111 -0
  311. package/src/internal/discovery/agent-config.ts +222 -0
  312. package/src/internal/discovery/agent.ts +360 -0
  313. package/src/internal/discovery/channels.ts +103 -0
  314. package/src/internal/discovery/connections.ts +540 -0
  315. package/src/internal/discovery/context.ts +46 -0
  316. package/src/internal/discovery/cursor-plugin.ts +708 -0
  317. package/src/internal/discovery/extensions.ts +348 -0
  318. package/src/internal/discovery/fs.ts +108 -0
  319. package/src/internal/discovery/hooks.ts +45 -0
  320. package/src/internal/discovery/info.ts +179 -0
  321. package/src/internal/discovery/instructions.ts +113 -0
  322. package/src/internal/discovery/modules.ts +107 -0
  323. package/src/internal/discovery/names.ts +44 -0
  324. package/src/internal/discovery/project.ts +270 -0
  325. package/src/internal/discovery/runtime.ts +159 -0
  326. package/src/internal/discovery/schedules.ts +94 -0
  327. package/src/internal/discovery/seed-files.ts +37 -0
  328. package/src/internal/discovery/services.ts +124 -0
  329. package/src/internal/discovery/skills.ts +176 -0
  330. package/src/internal/discovery/subagent.ts +29 -0
  331. package/src/internal/discovery/tools.ts +182 -0
  332. package/src/internal/discovery.ts +20 -3081
  333. package/src/internal/framework-file-storage.ts +6 -6
  334. package/src/internal/framework-storage-selection.ts +9 -9
  335. package/src/internal/frontmatter.ts +36 -3
  336. package/src/internal/mcp-host.ts +84 -31
  337. package/src/internal/otel/collector.ts +125 -25
  338. package/src/internal/otel/http.ts +2 -12
  339. package/src/internal/otel/mcp.ts +69 -0
  340. package/src/internal/otel/propagation.ts +17 -0
  341. package/src/internal/otel/runtime.ts +2 -0
  342. package/src/internal/session-engine.ts +96 -11
  343. package/src/internal/session-run-log.ts +17 -16
  344. package/src/internal/start-log-store.ts +13 -16
  345. package/src/internal/storage-coordinator.ts +19 -16
  346. package/src/internal/tool-catalog.ts +9 -6
  347. package/src/internal/turn-cost.ts +47 -4
  348. package/src/internal/v2-hosting.ts +38 -0
  349. package/src/otel.ts +38 -0
  350. package/src/storage-protocol.ts +101 -91
  351. package/src/storage.ts +4 -0
  352. package/src/tools.ts +18 -0
  353. package/src/types.ts +43 -2
  354. package/dist/docs/assets/chunks/@localSearchIndexroot.DbFXINq2.js +0 -1
  355. package/dist/docs/assets/concepts.md.lwAgBIMI.js +0 -1
  356. package/dist/docs/assets/index.md.Bb4k8kUm.js +0 -5
  357. package/dist/docs/assets/skills_framework-map.md.BTi817yv.js +0 -1
  358. package/dist/extensions/cursor-cloud-agents/lib/cloud.d.ts +0 -30
  359. package/dist/extensions/cursor-cloud-agents/lib/cloud.d.ts.map +0 -1
  360. package/dist/extensions/cursor-cloud-agents/lib/cloud.js +0 -45
  361. package/dist/extensions/cursor-cloud-agents/tools/follow_up.d.ts +0 -4
  362. package/dist/extensions/cursor-cloud-agents/tools/follow_up.d.ts.map +0 -1
  363. package/dist/extensions/cursor-cloud-agents/tools/status.d.ts +0 -4
  364. package/dist/extensions/cursor-cloud-agents/tools/status.d.ts.map +0 -1
  365. package/dist/extensions/cursor-cloud-agents/tools/status.js +0 -41
  366. package/dist/playground/assets/index-DBQCwFp0.css +0 -1
  367. package/src/extensions/cursor-cloud-agents/lib/cloud.ts +0 -79
  368. package/src/extensions/cursor-cloud-agents/tools/follow_up.ts +0 -29
  369. package/src/extensions/cursor-cloud-agents/tools/status.ts +0 -39
  370. /package/dist/docs/assets/{concepts.md.lwAgBIMI.lean.js → concepts.md.rPzW2HZN.lean.js} +0 -0
  371. /package/dist/docs/assets/{guides_cloud-runtime.md.CkYbjnAX.lean.js → guides_cloud-runtime.md.BRirbRAN.lean.js} +0 -0
  372. /package/dist/docs/assets/{reference_skills.md.BFW9retM.lean.js → reference_skills.md.l2ezAcaN.lean.js} +0 -0
  373. /package/dist/docs/assets/{reference_tools.md.CvAHsdSp.lean.js → reference_tools.md.B1up2r9W.lean.js} +0 -0
  374. /package/dist/playground/assets/{index-BnNN1-EK.js → index-ZqNoT8Ie.js} +0 -0
@@ -0,0 +1,51 @@
1
+ import { mkdir, writeFile } from "node:fs/promises";
2
+ import { dirname, join } from "node:path";
3
+ import { defineTool } from "../../../tools.js";
4
+ import type { ToolDefinition } from "../../../types.js";
5
+ import { cloudAgentsBackend } from "../lib/backend.js";
6
+ import { assertOwned } from "../lib/fleet.js";
7
+ import { agentRef } from "../lib/inputs.js";
8
+ import {
9
+ lastAssistantText,
10
+ transcriptLines,
11
+ transcriptPath,
12
+ } from "../lib/transcript.js";
13
+
14
+ const dump: ToolDefinition = defineTool({
15
+ description:
16
+ "Write a cloud agent's full conversation to a JSONL file in your workspace so you can read what it did: one JSON message per line (prompts, assistant text, thinking, tool calls). Read the last line for the final report.",
17
+ effect: "read",
18
+ inputSchema: agentRef,
19
+ async execute(input, ctx) {
20
+ await assertOwned(ctx, input.agent_id);
21
+ const backend = cloudAgentsBackend();
22
+ const [messages, info] = await Promise.all([
23
+ backend.conversation(input.agent_id),
24
+ backend.info(input.agent_id),
25
+ ]);
26
+ if (messages.length === 0) {
27
+ return {
28
+ agentId: input.agent_id,
29
+ lineCount: 0,
30
+ status: info.status,
31
+ note: "The agent has not produced any transcript yet.",
32
+ };
33
+ }
34
+ // Absolute: the harness's shell does not run in the workspace directory.
35
+ const path = join(ctx.workspaceDir, transcriptPath(input.agent_id));
36
+ const jsonl = `${transcriptLines(messages).join("\n")}\n`;
37
+ await mkdir(dirname(path), { recursive: true });
38
+ await writeFile(path, jsonl, "utf8");
39
+ return {
40
+ agentId: input.agent_id,
41
+ path,
42
+ sizeBytes: Buffer.byteLength(jsonl),
43
+ lineCount: messages.length,
44
+ status: info.status,
45
+ finalMessage: lastAssistantText(messages),
46
+ note: `One JSON message per line. Grep it, or read the final report with \`tail -n 1 ${path}\`.`,
47
+ };
48
+ },
49
+ });
50
+
51
+ export default dump;
@@ -0,0 +1,18 @@
1
+ import { defineTool } from "../../../tools.js";
2
+ import type { ToolDefinition } from "../../../types.js";
3
+ import { cloudAgentsBackend } from "../lib/backend.js";
4
+ import { assertOwned } from "../lib/fleet.js";
5
+ import { agentRef } from "../lib/inputs.js";
6
+
7
+ const get: ToolDefinition = defineTool({
8
+ description:
9
+ "Look up a cloud agent you launched by id: its status, branch, pull request, changed-file counts, summary, and any error. Use dump to read everything it did.",
10
+ effect: "read",
11
+ inputSchema: agentRef,
12
+ async execute(input, ctx) {
13
+ await assertOwned(ctx, input.agent_id);
14
+ return cloudAgentsBackend().info(input.agent_id);
15
+ },
16
+ });
17
+
18
+ export default get;
@@ -1,15 +1,14 @@
1
- import { Agent } from "@cursor/sdk";
2
1
  import { z } from "zod";
3
2
  import { defineTool } from "../../../tools.js";
4
3
  import type { ToolDefinition } from "../../../types.js";
5
4
  import extension from "../extension.js";
6
- import { agentUrl, agentView, apiKey, modelSelection } from "../lib/cloud.js";
5
+ import { cloudAgentsBackend } from "../lib/backend.js";
7
6
  import { recordLaunch } from "../lib/fleet.js";
8
7
  import { launchRepos } from "../lib/repos.js";
9
8
 
10
9
  const launch: ToolDefinition = defineTool({
11
10
  description:
12
- "Launch a Cursor cloud agent on a repository with a self-contained task. Returns the agent id and URL; check progress with the status tool.",
11
+ "Launch a Cursor cloud agent on a repository with a self-contained task. Returns the agent id and URL; check on it with get, read what it did with dump.",
13
12
  effect: "write",
14
13
  needsApproval: () => extension.config.needsApproval,
15
14
  inputSchema: z.object({
@@ -26,8 +25,13 @@ const launch: ToolDefinition = defineTool({
26
25
  .describe(
27
26
  "GitHub repository URL, one of the configured repositories. Defaults to the configured repository."
28
27
  ),
29
- ref: z.string().optional().describe("Starting branch or commit."),
30
- prUrl: z
28
+ starting_ref: z
29
+ .string()
30
+ .optional()
31
+ .describe(
32
+ "Branch or commit to start from; defaults to the configured or default branch."
33
+ ),
34
+ pr_url: z
31
35
  .string()
32
36
  .url()
33
37
  .optional()
@@ -39,45 +43,21 @@ const launch: ToolDefinition = defineTool({
39
43
  .describe("Display name; derived from the prompt when omitted."),
40
44
  }),
41
45
  async execute(input, ctx) {
42
- const { cloud } = extension.config;
43
- const key = apiKey();
44
- const agent = await Agent.create({
45
- apiKey: key,
46
- model: modelSelection(),
46
+ const { cloud, model } = extension.config;
47
+ const launched = await cloudAgentsBackend().launch({
48
+ prompt: input.prompt,
47
49
  name: input.name,
48
- cloud: { ...cloud, repos: launchRepos(input, cloud) },
50
+ model,
51
+ cloud: {
52
+ ...cloud,
53
+ repos: launchRepos(
54
+ { repo: input.repo, ref: input.starting_ref, prUrl: input.pr_url },
55
+ cloud
56
+ ),
57
+ },
49
58
  });
50
- try {
51
- const run = await agent.send(input.prompt);
52
- await recordLaunch(ctx, agent.agentId, input.name);
53
- return {
54
- agentId: agent.agentId,
55
- runId: run.id,
56
- status: run.status,
57
- url: agentUrl(agent.agentId),
58
- };
59
- } catch (error) {
60
- // The API can fail after the agent exists (slow admission,
61
- // post-create checks). The SDK seeded the id unless envVars made
62
- // the server mint it, so read the agent back and keep the handle;
63
- // envVars launches have no id to read back and surface the error.
64
- const info =
65
- cloud.envVars === undefined
66
- ? await Agent.get(agent.agentId, { apiKey: key }).catch(
67
- () => undefined
68
- )
69
- : undefined;
70
- if (info === undefined) {
71
- throw error;
72
- }
73
- await recordLaunch(ctx, info.agentId, input.name);
74
- return {
75
- ...agentView(info),
76
- launchError: error instanceof Error ? error.message : String(error),
77
- };
78
- } finally {
79
- agent.close();
80
- }
59
+ await recordLaunch(ctx, launched.agentId, input.name);
60
+ return launched;
81
61
  },
82
62
  });
83
63
 
@@ -1,7 +1,7 @@
1
1
  import { z } from "zod";
2
2
  import { defineTool } from "../../../tools.js";
3
3
  import type { ToolDefinition } from "../../../types.js";
4
- import { agentUrl } from "../lib/cloud.js";
4
+ import { agentUrl } from "../lib/backend.js";
5
5
  import { listFleet } from "../lib/fleet.js";
6
6
 
7
7
  const list: ToolDefinition = defineTool({
@@ -0,0 +1,34 @@
1
+ import { z } from "zod";
2
+ import { defineTool } from "../../../tools.js";
3
+ import type { ToolDefinition } from "../../../types.js";
4
+ import extension from "../extension.js";
5
+ import { cloudAgentsBackend } from "../lib/backend.js";
6
+ import { assertOwned } from "../lib/fleet.js";
7
+ import { agentRef } from "../lib/inputs.js";
8
+
9
+ const reply: ToolDefinition = defineTool({
10
+ description:
11
+ "Send a follow-up prompt to a cloud agent you launched. It queues behind the current run; pass interrupt to stop that run's current step and deliver it now.",
12
+ effect: "write",
13
+ needsApproval: () => extension.config.needsApproval,
14
+ inputSchema: agentRef.extend({
15
+ prompt: z.string().min(1).describe("The follow-up instruction."),
16
+ interrupt: z
17
+ .boolean()
18
+ .default(false)
19
+ .describe(
20
+ "Deliver now, cancelling the in-flight step, instead of waiting for the current run to finish."
21
+ ),
22
+ }),
23
+ async execute(input, ctx) {
24
+ await assertOwned(ctx, input.agent_id);
25
+ const { runId } = await cloudAgentsBackend().followUp(
26
+ input.agent_id,
27
+ input.prompt,
28
+ input.interrupt
29
+ );
30
+ return { agentId: input.agent_id, runId, queued: !input.interrupt };
31
+ },
32
+ });
33
+
34
+ export default reply;
package/src/extensions.ts CHANGED
@@ -12,39 +12,63 @@
12
12
  *
13
13
  * export default defineExtension({
14
14
  * root: import.meta.dirname,
15
- * description: "CRM lookups.",
16
- * config: z.object({ apiKey: z.string() }),
15
+ * description: "Investigate failing CI builds.",
16
+ * config: z.object({ org: z.string(), token: z.string() }),
17
17
  * });
18
18
  *
19
- * // tools/search.ts
19
+ * // tools/failed_jobs.ts
20
20
  * import extension from "../extension.js";
21
21
  *
22
22
  * export default defineTool({
23
- * description: "Search the CRM.",
24
- * execute: (input) => search(extension.config.apiKey, input),
23
+ * description: "List the failed jobs of a build.",
24
+ * execute: (input) => failedJobs(extension.config, input),
25
25
  * });
26
26
  * ```
27
27
  *
28
28
  * A consumer mounts it from `agent/extensions/<ns>.ts`; the filename is the
29
29
  * namespace, and every contribution is exposed as `<ns>__<name>`
30
- * (`crm__search`). `__` is reserved for that: an authored `agent/tools/` or
31
- * `agent/skills/` name may not contain it.
30
+ * (`ci__failed_jobs`). `__` is reserved for that: an authored `agent/tools/`
31
+ * or `agent/skills/` name may not contain it.
32
32
  *
33
33
  * ```ts
34
- * // agent/extensions/crm.ts
35
- * import crm from "@acme/crm";
34
+ * // agent/extensions/ci.ts
35
+ * import ci from "@acme/ci-triage";
36
36
  *
37
- * export default crm({ apiKey: process.env.CRM_API_KEY! });
37
+ * export default ci({ org: "acme", token: process.env.BUILDKITE_TOKEN! });
38
38
  * ```
39
39
  *
40
40
  * To adjust a contribution, mount as a directory instead and overlay the
41
- * slot: `agent/extensions/crm/extension.ts` holds the mount, and
42
- * `agent/extensions/crm/tools/search.ts` replaces `crm__search` — or removes
41
+ * slot: `agent/extensions/ci/extension.ts` holds the mount, and
42
+ * `agent/extensions/ci/tools/job_log.ts` replaces `ci__job_log` — or removes
43
43
  * it with `export default disableTool()`.
44
+ *
45
+ * A Cursor plugin (the marketplace format: `.cursor-plugin/plugin.json`,
46
+ * `skills/`, `commands/`, `agents/`, `mcp.json`) mounts the same way with
47
+ * `cursorPlugin`. Its skills and commands become `<ns>__<name>` skills, its
48
+ * agents `<ns>__<name>` subagents, and its MCP servers `<ns>__<server>`
49
+ * connections. Rules and hooks are not mounted yet.
50
+ *
51
+ * ```ts
52
+ * // agent/extensions/notion.ts
53
+ * import { cursorPlugin } from "@cursor/july/extensions";
54
+ *
55
+ * export default cursorPlugin({
56
+ * path: "plugins/notion-workspace",
57
+ * variables: { NOTION_TOKEN: process.env.NOTION_TOKEN! },
58
+ * });
59
+ * ```
60
+ *
61
+ * A directory mount overlays its MCP servers too:
62
+ * `agent/extensions/notion/mcp-connections/notion.ts` replaces
63
+ * `notion__notion` with your own `defineConnection` (headers, `oauth`,
64
+ * `advertiseTools`), and `export default disableConnection()` drops a server
65
+ * the agent should not carry.
44
66
  */
45
67
 
46
68
  import { brandDefinition } from "./internal/brand.js";
47
69
  import type {
70
+ CursorPluginOptions,
71
+ DisabledConnectionDefinition,
48
72
  DisabledToolDefinition,
49
73
  Extension,
50
74
  ExtensionMount,
@@ -52,6 +76,9 @@ import type {
52
76
  } from "./types.js";
53
77
 
54
78
  export type {
79
+ CursorPluginDeclaration,
80
+ CursorPluginOptions,
81
+ DisabledConnectionDefinition,
55
82
  DisabledToolDefinition,
56
83
  DiscoveredExtension,
57
84
  Extension,
@@ -96,3 +123,19 @@ export function defineExtension<TConfig = undefined, TInput = TConfig>(
96
123
  export function disableTool(): DisabledToolDefinition {
97
124
  return brandDefinition("disabled-tool", {});
98
125
  }
126
+
127
+ export function disableConnection(): DisabledConnectionDefinition {
128
+ return brandDefinition("disabled-connection", {});
129
+ }
130
+
131
+ export function cursorPlugin(options: CursorPluginOptions): ExtensionMount {
132
+ return brandDefinition("extension", {
133
+ extension: {
134
+ root: options.path,
135
+ description: undefined,
136
+ layout: "cursor-plugin",
137
+ variables: options.variables ?? {},
138
+ },
139
+ config: undefined,
140
+ });
141
+ }
@@ -51,10 +51,7 @@ import {
51
51
  type FileSinkEntry,
52
52
  type FileSinkPutResult,
53
53
  } from "../files.js";
54
- import {
55
- resolveDeploymentStoreSourceIdSync,
56
- resolveFrameworkStoreSourceIdSync,
57
- } from "../internal/cursor/hosted-store-secrets.js";
54
+ import { resolveDeploymentStoreSourceIdSync } from "../internal/cursor/hosted-store-secrets.js";
58
55
  import { createAgentStorePresignedUrlValidatorForBackend } from "./agent-store-presigned-url.js";
59
56
 
60
57
  /**
@@ -118,19 +115,6 @@ export function isCursorHostedFilesAvailable(
118
115
  return resolveDeploymentStoreSourceIdSync(env) !== undefined;
119
116
  }
120
117
 
121
- /**
122
- * The framework-level store's source id, or `undefined` when the deployment
123
- * has none (v1, self-hosted, or a v2 deploy predating framework-store
124
- * provisioning). Same detection posture as
125
- * {@link isCursorHostedFilesAvailable}: keyed on the id alone — a missing
126
- * credential must fail loudly at use, not silently deselect the store.
127
- */
128
- export function cursorFrameworkStoreSourceId(
129
- env: NodeJS.ProcessEnv = process.env
130
- ): string | undefined {
131
- return resolveFrameworkStoreSourceIdSync(env);
132
- }
133
-
134
118
  /**
135
119
  * Local `serve`/`run` with a personal `CURSOR_API_KEY` can address
136
120
  * `/v0/agent-serve-files/user`. Hosted deployments have a store source id
package/src/files.ts CHANGED
@@ -23,7 +23,7 @@
23
23
  * know the write did not land.
24
24
  */
25
25
 
26
- import { STORAGE_KEY_ROOT } from "./storage.js";
26
+ import { AGENTSDK_STORAGE_KEY_ROOT, STORAGE_KEY_ROOT } from "./storage.js";
27
27
 
28
28
  // ============================================================================
29
29
  // Sink interface
@@ -163,39 +163,48 @@ export const AGENT_SERVE_USER_STORE_KEY_PREFIX = "agent-serve";
163
163
  * `--agent-store-skills-dir` walk finds them the same way it finds user-store
164
164
  * skills. Memory and artifacts stay under {@link STORAGE_KEY_ROOT}.
165
165
  */
166
- export const agentStoreKeys = {
167
- artifactRow: (agent: string, id: string): string =>
168
- `${STORAGE_KEY_ROOT}/${agent}/artifacts/rows/${encodeURIComponent(id)}.json`,
169
- artifactRowPrefix: (agent: string): string =>
170
- `${STORAGE_KEY_ROOT}/${agent}/artifacts/rows/`,
171
- artifactContent: (agent: string, id: string): string =>
172
- `${STORAGE_KEY_ROOT}/${agent}/artifacts/content/${encodeURIComponent(id)}`,
173
- skillFile: (
174
- skillName: string,
175
- relPath: string,
176
- skillsPrefix: string = "skills/"
177
- ): string => `${skillsPrefix}${skillName}/${relPath}`,
178
- skillsPrefix: (): string => "skills/",
179
- /** Personal-key cloud agents: namespaced so they cannot collide with the user's own `skills/`. */
180
- userSkillsPrefix: (agent: string): string =>
181
- `${AGENT_SERVE_USER_STORE_KEY_PREFIX}/${agent}/skills/`,
182
- memoryDir: (agent: string): string => `${STORAGE_KEY_ROOT}/${agent}/memory`,
183
- memoryJournal: (agent: string): string =>
184
- `${STORAGE_KEY_ROOT}/${agent}/memory/journal.jsonl`,
185
- memoryJournalRotated: (agent: string, stamp: string): string =>
186
- `${STORAGE_KEY_ROOT}/${agent}/memory/journal-${stamp}.jsonl`,
187
- // SDK conversation mirror (the runner's SQLite store, exported through the
188
- // store APIs): one manifest per SDK agent id plus its content-addressed
189
- // checkpoint blobs. See internal/conversation-mirror.ts.
190
- conversationManifest: (agent: string, sdkAgentId: string): string =>
191
- `${STORAGE_KEY_ROOT}/${agent}/conversations/${encodeURIComponent(sdkAgentId)}/manifest.json`,
192
- conversationBlob: (
193
- agent: string,
194
- sdkAgentId: string,
195
- blobId: string
196
- ): string =>
197
- `${STORAGE_KEY_ROOT}/${agent}/conversations/${encodeURIComponent(sdkAgentId)}/blobs/${encodeURIComponent(blobId)}`,
198
- } as const;
166
+ function createAgentStoreKeys(root: string) {
167
+ return {
168
+ artifactRow: (agent: string, id: string): string =>
169
+ `${root}/${agent}/artifacts/rows/${encodeURIComponent(id)}.json`,
170
+ artifactRowPrefix: (agent: string): string =>
171
+ `${root}/${agent}/artifacts/rows/`,
172
+ artifactContent: (agent: string, id: string): string =>
173
+ `${root}/${agent}/artifacts/content/${encodeURIComponent(id)}`,
174
+ skillFile: (
175
+ skillName: string,
176
+ relPath: string,
177
+ skillsPrefix: string = "skills/"
178
+ ): string => `${skillsPrefix}${skillName}/${relPath}`,
179
+ skillsPrefix: (): string => "skills/",
180
+ /** Personal-key cloud agents: namespaced so they cannot collide with the user's own `skills/`. */
181
+ userSkillsPrefix: (agent: string): string =>
182
+ `${AGENT_SERVE_USER_STORE_KEY_PREFIX}/${agent}/skills/`,
183
+ memoryDir: (agent: string): string => `${root}/${agent}/memory`,
184
+ memoryJournal: (agent: string): string =>
185
+ `${root}/${agent}/memory/journal.jsonl`,
186
+ memoryJournalRotated: (agent: string, stamp: string): string =>
187
+ `${root}/${agent}/memory/journal-${stamp}.jsonl`,
188
+ // SDK conversation mirror (the runner's SQLite store, exported through the
189
+ // store APIs): one manifest per SDK agent id plus its content-addressed
190
+ // checkpoint blobs. See internal/conversation-mirror.ts.
191
+ conversationManifest: (agent: string, sdkAgentId: string): string =>
192
+ `${root}/${agent}/conversations/${encodeURIComponent(sdkAgentId)}/manifest.json`,
193
+ conversationBlob: (
194
+ agent: string,
195
+ sdkAgentId: string,
196
+ blobId: string
197
+ ): string =>
198
+ `${root}/${agent}/conversations/${encodeURIComponent(sdkAgentId)}/blobs/${encodeURIComponent(blobId)}`,
199
+ } as const;
200
+ }
201
+
202
+ export type AgentStoreKeys = ReturnType<typeof createAgentStoreKeys>;
203
+ export const agentStoreKeys: AgentStoreKeys =
204
+ createAgentStoreKeys(STORAGE_KEY_ROOT);
205
+ export const agentSdkAgentStoreKeys: AgentStoreKeys = createAgentStoreKeys(
206
+ AGENTSDK_STORAGE_KEY_ROOT
207
+ );
199
208
 
200
209
  /**
201
210
  * Deployment store FUSE mount on cloud-runtime VMs. Mirrors
package/src/index.ts CHANGED
@@ -78,7 +78,12 @@ export {
78
78
  stampMailboxContinuation,
79
79
  V2EngineError,
80
80
  } from "./continuation.js";
81
- export { defineExtension, disableTool } from "./extensions.js";
81
+ export {
82
+ cursorPlugin,
83
+ defineExtension,
84
+ disableConnection,
85
+ disableTool,
86
+ } from "./extensions.js";
82
87
  export { defineHook } from "./hooks.js";
83
88
  export {
84
89
  InvalidAsOfError,
@@ -167,15 +172,19 @@ export type {
167
172
  StorageDefinition,
168
173
  StorageEntry,
169
174
  StorageEvalsTable,
175
+ StorageKeys,
170
176
  StoragePolicy,
171
177
  StorageRestorePolicy,
172
178
  } from "./storage.js";
173
179
  export {
180
+ AGENTSDK_STORAGE_KEY_ROOT,
181
+ agentSdkStorageKeys,
174
182
  defineStorage,
175
183
  isDurableSessionRecordKey,
176
184
  parseDurableSessionRecord,
177
185
  STORAGE_KEY_ROOT,
178
186
  storageKeys,
187
+ storageKeysForArchitecture,
179
188
  summarizeDurableSessionRecord,
180
189
  } from "./storage.js";
181
190
  export { defineTool } from "./tools.js";
@@ -37,16 +37,13 @@
37
37
  */
38
38
 
39
39
  import type { LocalAgentDocument, LocalAgentStore } from "@cursor/sdk";
40
- import { agentStoreKeys, type FileSink } from "../files.js";
41
- import {
42
- cursorFrameworkStoreSourceId,
43
- cursorHostedFiles,
44
- } from "../files-backends/cursor-hosted.js";
40
+ import { agentSdkAgentStoreKeys, type FileSink } from "../files.js";
41
+ import { cursorHostedFiles } from "../files-backends/cursor-hosted.js";
45
42
  import type { AgentProject } from "../types.js";
46
43
  import { mapBounded } from "./bounded.js";
47
44
  import { resolveApiKeySync } from "./cursor/credentials.js";
48
- import { AGENT_SERVE_GENERATION_ENV_VAR } from "./cursor-relay-core.js";
49
45
  import { describeError } from "./describe-error.js";
46
+ import { resolveAgentV2Hosting } from "./v2-hosting.js";
50
47
 
51
48
  /**
52
49
  * Persist/restore one SDK conversation between a {@link LocalAgentStore} and
@@ -70,7 +67,7 @@ export interface ConversationMirror {
70
67
  persist(store: LocalAgentStore, sdkAgentId: string): Promise<void>;
71
68
  }
72
69
 
73
- /** Wire shape at {@link agentStoreKeys.conversationManifest}. */
70
+ /** Wire shape at {@link agentSdkAgentStoreKeys.conversationManifest}. */
74
71
  interface ConversationManifestV1 {
75
72
  v: 1;
76
73
  /** The SDK agent document, verbatim apart from `activeRunId` (nulled). */
@@ -181,7 +178,11 @@ export function createConversationMirror(
181
178
  continue;
182
179
  }
183
180
  await sink.put(
184
- agentStoreKeys.conversationBlob(agentName, sdkAgentId, blobId),
181
+ agentSdkAgentStoreKeys.conversationBlob(
182
+ agentName,
183
+ sdkAgentId,
184
+ blobId
185
+ ),
185
186
  bytes
186
187
  );
187
188
  // Content-addressed: once in the sink, never re-uploaded.
@@ -197,7 +198,7 @@ export function createConversationMirror(
197
198
  };
198
199
  // Manifest last: it only ever references blobs already uploaded.
199
200
  await sink.put(
200
- agentStoreKeys.conversationManifest(agentName, sdkAgentId),
201
+ agentSdkAgentStoreKeys.conversationManifest(agentName, sdkAgentId),
201
202
  new TextEncoder().encode(JSON.stringify(manifest))
202
203
  );
203
204
  });
@@ -242,7 +243,11 @@ export function createConversationMirror(
242
243
  async (blobId) => ({
243
244
  blobId,
244
245
  body: await sink.get(
245
- agentStoreKeys.conversationBlob(agentName, sdkAgentId, blobId)
246
+ agentSdkAgentStoreKeys.conversationBlob(
247
+ agentName,
248
+ sdkAgentId,
249
+ blobId
250
+ )
246
251
  ),
247
252
  })
248
253
  );
@@ -317,7 +322,7 @@ async function readManifest(
317
322
  sdkAgentId: string
318
323
  ): Promise<ManifestRead> {
319
324
  const body = await sink.get(
320
- agentStoreKeys.conversationManifest(agentName, sdkAgentId)
325
+ agentSdkAgentStoreKeys.conversationManifest(agentName, sdkAgentId)
321
326
  );
322
327
  if (body === undefined) {
323
328
  return { outcome: "miss" };
@@ -379,17 +384,17 @@ export function selectConversationMirror(input: {
379
384
  logger?: (line: string) => void;
380
385
  env?: Record<string, string | undefined>;
381
386
  }): ConversationMirror | undefined {
382
- if (input.project.agent.architecture !== "v2") {
383
- return undefined;
384
- }
385
- const env = input.env ?? process.env;
386
- if (env[AGENT_SERVE_GENERATION_ENV_VAR] === undefined) {
387
+ const hosting = resolveAgentV2Hosting({
388
+ architecture: input.project.agent.architecture,
389
+ env: input.env as NodeJS.ProcessEnv | undefined,
390
+ });
391
+ if (hosting.kind !== "cursor-managed") {
387
392
  return undefined;
388
393
  }
389
- const envSnapshot = env as NodeJS.ProcessEnv;
390
394
  return createConversationMirror({
391
395
  sink: cursorHostedFiles({
392
- resolveStoreSourceId: () => cursorFrameworkStoreSourceId(envSnapshot),
396
+ resolveStoreSourceId: () =>
397
+ hosting.resolveStoreIds().frameworkStoreSourceId,
393
398
  // Full chain (env → key file → stored login): frozen engines listen
394
399
  // unsigned and bind CURSOR_API_KEY_FILE at task time, after this sink
395
400
  // is constructed.