@cursor/july 0.1.102 → 0.1.104

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 (789) hide show
  1. package/AGENTS.md +34 -32
  2. package/README.md +10 -12
  3. package/dist/ab.d.ts +1 -1
  4. package/dist/ab.js +1 -1
  5. package/dist/bin/agent-serve.d.ts +12 -12
  6. package/dist/bin/agent-serve.js +114 -36
  7. package/dist/channels/bitbucket/api.d.ts +176 -0
  8. package/dist/channels/bitbucket/api.d.ts.map +1 -0
  9. package/dist/channels/bitbucket/api.js +419 -0
  10. package/dist/channels/bitbucket/binding.d.ts +71 -0
  11. package/dist/channels/bitbucket/binding.d.ts.map +1 -0
  12. package/dist/channels/bitbucket/binding.js +269 -0
  13. package/dist/channels/bitbucket/bitbucket-channel.d.ts +33 -0
  14. package/dist/channels/bitbucket/bitbucket-channel.d.ts.map +1 -0
  15. package/dist/channels/bitbucket/bitbucket-channel.js +120 -0
  16. package/dist/channels/bitbucket/bitbucket-webhook.d.ts +61 -0
  17. package/dist/channels/bitbucket/bitbucket-webhook.d.ts.map +1 -0
  18. package/dist/channels/bitbucket/bitbucket-webhook.js +394 -0
  19. package/dist/channels/bitbucket/checks.d.ts +67 -0
  20. package/dist/channels/bitbucket/checks.d.ts.map +1 -0
  21. package/dist/channels/bitbucket/checks.js +102 -0
  22. package/dist/channels/bitbucket/cursor-account.d.ts +37 -0
  23. package/dist/channels/bitbucket/cursor-account.d.ts.map +1 -0
  24. package/dist/channels/bitbucket/cursor-account.js +65 -0
  25. package/dist/channels/bitbucket/defaults.d.ts +26 -0
  26. package/dist/channels/bitbucket/defaults.d.ts.map +1 -0
  27. package/dist/channels/bitbucket/defaults.js +73 -0
  28. package/dist/channels/bitbucket/events.d.ts +22 -0
  29. package/dist/channels/bitbucket/events.d.ts.map +1 -0
  30. package/dist/channels/bitbucket/events.js +64 -0
  31. package/dist/channels/bitbucket/index.d.ts +34 -0
  32. package/dist/channels/bitbucket/index.d.ts.map +1 -0
  33. package/dist/channels/bitbucket/index.js +33 -0
  34. package/dist/channels/bitbucket/replay.d.ts +63 -0
  35. package/dist/channels/bitbucket/replay.d.ts.map +1 -0
  36. package/dist/channels/bitbucket/replay.js +304 -0
  37. package/dist/channels/bitbucket/state.d.ts +35 -0
  38. package/dist/channels/bitbucket/state.d.ts.map +1 -0
  39. package/dist/channels/bitbucket/state.js +21 -0
  40. package/dist/channels/bitbucket/types.d.ts +229 -0
  41. package/dist/channels/bitbucket/types.d.ts.map +1 -0
  42. package/dist/channels/bitbucket/types.js +1 -0
  43. package/dist/channels/change-monitors/change-monitors-channel.d.ts +5 -0
  44. package/dist/channels/change-monitors/change-monitors-channel.d.ts.map +1 -0
  45. package/dist/channels/change-monitors/change-monitors-channel.js +41 -0
  46. package/dist/channels/change-monitors/index.d.ts +4 -0
  47. package/dist/channels/change-monitors/index.d.ts.map +1 -0
  48. package/dist/channels/change-monitors/index.js +2 -0
  49. package/dist/channels/change-monitors/types.d.ts +39 -0
  50. package/dist/channels/change-monitors/types.d.ts.map +1 -0
  51. package/dist/channels/change-monitors/types.js +1 -0
  52. package/dist/channels/deployments/deployments-channel.d.ts +22 -14
  53. package/dist/channels/deployments/deployments-channel.d.ts.map +1 -1
  54. package/dist/channels/deployments/deployments-channel.js +25 -27
  55. package/dist/channels/deployments/types.d.ts +12 -6
  56. package/dist/channels/deployments/types.d.ts.map +1 -1
  57. package/dist/channels/github/binding.d.ts +6 -0
  58. package/dist/channels/github/binding.d.ts.map +1 -1
  59. package/dist/channels/github/binding.js +3 -3
  60. package/dist/channels/github/cursor-account.d.ts +7 -3
  61. package/dist/channels/github/cursor-account.d.ts.map +1 -1
  62. package/dist/channels/github/cursor-account.js +10 -6
  63. package/dist/channels/github/defaults.d.ts.map +1 -1
  64. package/dist/channels/github/defaults.js +4 -0
  65. package/dist/channels/github/events.d.ts +1 -1
  66. package/dist/channels/github/events.js +1 -1
  67. package/dist/channels/github/forward.d.ts +1 -1
  68. package/dist/channels/github/forward.d.ts.map +1 -1
  69. package/dist/channels/github/forward.js +3 -2
  70. package/dist/channels/github/github-channel.d.ts +29 -39
  71. package/dist/channels/github/github-channel.d.ts.map +1 -1
  72. package/dist/channels/github/github-channel.js +68 -101
  73. package/dist/channels/github/progress.d.ts +22 -0
  74. package/dist/channels/github/progress.d.ts.map +1 -1
  75. package/dist/channels/github/progress.js +32 -5
  76. package/dist/channels/github/replay.d.ts +1 -1
  77. package/dist/channels/github/replay.js +1 -1
  78. package/dist/channels/github/state.d.ts +2 -0
  79. package/dist/channels/github/state.d.ts.map +1 -1
  80. package/dist/channels/github/state.js +14 -11
  81. package/dist/channels/github/types.d.ts +2 -4
  82. package/dist/channels/github/types.d.ts.map +1 -1
  83. package/dist/channels/gitlab/api.d.ts +91 -0
  84. package/dist/channels/gitlab/api.d.ts.map +1 -0
  85. package/dist/channels/gitlab/api.js +150 -0
  86. package/dist/channels/gitlab/binding.d.ts +58 -0
  87. package/dist/channels/gitlab/binding.d.ts.map +1 -0
  88. package/dist/channels/gitlab/binding.js +139 -0
  89. package/dist/channels/gitlab/checks.d.ts +110 -0
  90. package/dist/channels/gitlab/checks.d.ts.map +1 -0
  91. package/dist/channels/gitlab/checks.js +126 -0
  92. package/dist/channels/gitlab/cursor-account.d.ts +36 -0
  93. package/dist/channels/gitlab/cursor-account.d.ts.map +1 -0
  94. package/dist/channels/gitlab/cursor-account.js +65 -0
  95. package/dist/channels/gitlab/defaults.d.ts +25 -0
  96. package/dist/channels/gitlab/defaults.d.ts.map +1 -0
  97. package/dist/channels/gitlab/defaults.js +60 -0
  98. package/dist/channels/gitlab/events.d.ts +12 -0
  99. package/dist/channels/gitlab/events.d.ts.map +1 -0
  100. package/dist/channels/gitlab/events.js +28 -0
  101. package/dist/channels/gitlab/gitlab-channel.d.ts +33 -0
  102. package/dist/channels/gitlab/gitlab-channel.d.ts.map +1 -0
  103. package/dist/channels/gitlab/gitlab-channel.js +120 -0
  104. package/dist/channels/gitlab/gitlab-webhook.d.ts +45 -0
  105. package/dist/channels/gitlab/gitlab-webhook.d.ts.map +1 -0
  106. package/dist/channels/gitlab/gitlab-webhook.js +397 -0
  107. package/dist/channels/gitlab/index.d.ts +31 -0
  108. package/dist/channels/gitlab/index.d.ts.map +1 -0
  109. package/dist/channels/gitlab/index.js +30 -0
  110. package/dist/channels/gitlab/replay.d.ts +105 -0
  111. package/dist/channels/gitlab/replay.d.ts.map +1 -0
  112. package/dist/channels/gitlab/replay.js +206 -0
  113. package/dist/channels/gitlab/state.d.ts +33 -0
  114. package/dist/channels/gitlab/state.d.ts.map +1 -0
  115. package/dist/channels/gitlab/state.js +23 -0
  116. package/dist/channels/gitlab/types.d.ts +214 -0
  117. package/dist/channels/gitlab/types.d.ts.map +1 -0
  118. package/dist/channels/gitlab/types.js +1 -0
  119. package/dist/channels/issues/index.d.ts +4 -0
  120. package/dist/channels/issues/index.d.ts.map +1 -0
  121. package/dist/channels/issues/index.js +2 -0
  122. package/dist/channels/issues/issues-channel.d.ts +5 -0
  123. package/dist/channels/issues/issues-channel.d.ts.map +1 -0
  124. package/dist/channels/issues/issues-channel.js +37 -0
  125. package/dist/channels/issues/types.d.ts +33 -0
  126. package/dist/channels/issues/types.d.ts.map +1 -0
  127. package/dist/channels/issues/types.js +1 -0
  128. package/dist/channels/origin/api.d.ts.map +1 -1
  129. package/dist/channels/origin/api.js +4 -2
  130. package/dist/channels/origin/origin-channel.d.ts +4 -9
  131. package/dist/channels/origin/origin-channel.d.ts.map +1 -1
  132. package/dist/channels/origin/origin-channel.js +8 -48
  133. package/dist/channels/origin/types.d.ts +20 -2
  134. package/dist/channels/origin/types.d.ts.map +1 -1
  135. package/dist/channels/slack/eval-directive.d.ts.map +1 -1
  136. package/dist/channels/slack/eval-directive.js +1 -7
  137. package/dist/channels/slack/init.d.ts.map +1 -1
  138. package/dist/channels/slack/init.js +3 -3
  139. package/dist/channels/slack/setup.d.ts +1 -1
  140. package/dist/channels/slack/setup.d.ts.map +1 -1
  141. package/dist/channels/slack/setup.js +6 -13
  142. package/dist/channels/slack/types.d.ts +1 -1
  143. package/dist/channels/slack/types.d.ts.map +1 -1
  144. package/dist/channels.d.ts +1 -1
  145. package/dist/channels.d.ts.map +1 -1
  146. package/dist/client.d.ts +1 -1
  147. package/dist/client.js +1 -1
  148. package/dist/connections.d.ts +1 -1
  149. package/dist/connections.js +1 -1
  150. package/dist/docs/404.html +2 -2
  151. package/dist/docs/ab.html +4 -4
  152. package/dist/docs/assets/{app.CLA03RCz.js → app.DbMWUyGb.js} +1 -1
  153. package/dist/docs/assets/chunks/@localSearchIndexroot.Bqsulb9K.js +1 -0
  154. package/dist/docs/assets/chunks/{VPLocalSearchBox.ifxv-cJV.js → VPLocalSearchBox.DcNeTh9o.js} +1 -1
  155. package/dist/docs/assets/chunks/{theme.DWCwM6p-.js → theme.DMjhY3gl.js} +2 -2
  156. package/dist/docs/assets/concepts.md.DgEcZOfT.js +1 -0
  157. package/dist/docs/assets/{concepts.md.rPzW2HZN.lean.js → concepts.md.DgEcZOfT.lean.js} +1 -1
  158. package/dist/docs/assets/{evals.md.CPzDAwoH.js → evals.md.CbMoebP1.js} +1 -1
  159. package/dist/docs/assets/guides_cloud-agents.md.DS8RIjwx.js +9 -0
  160. package/dist/docs/assets/{guides_github.md.BtPr9GaP.js → guides_github.md.c0gdGJ-D.js} +1 -1
  161. package/dist/docs/assets/{guides_github.md.BtPr9GaP.lean.js → guides_github.md.c0gdGJ-D.lean.js} +1 -1
  162. package/dist/docs/assets/{guides_opentelemetry.md.BVTXDCRg.js → guides_opentelemetry.md.COh9jFVg.js} +7 -8
  163. package/dist/docs/assets/{guides_opentelemetry.md.BVTXDCRg.lean.js → guides_opentelemetry.md.COh9jFVg.lean.js} +1 -1
  164. package/dist/docs/assets/{index.md.Kiht7ell.js → index.md.D75GWhPl.js} +1 -1
  165. package/dist/docs/assets/{reference_agent-config.md.BHeYMgme.js → reference_agent-config.md.CHNpiyp4.js} +3 -3
  166. package/dist/docs/assets/{reference_channels.md.Cd2f2iyV.js → reference_channels.md.DBGcaB7m.js} +2 -2
  167. package/dist/docs/assets/{reference_channels.md.Cd2f2iyV.lean.js → reference_channels.md.DBGcaB7m.lean.js} +1 -1
  168. package/dist/docs/assets/{reference_cli.md.DfoeyvL0.js → reference_cli.md.CJNc_xYK.js} +1 -1
  169. package/dist/docs/assets/{reference_extensions.md.9WQMZe1l.js → reference_extensions.md.DykHW3qL.js} +11 -5
  170. package/dist/docs/assets/reference_extensions.md.DykHW3qL.lean.js +1 -0
  171. package/dist/docs/assets/reference_hooks.md.Ddt5DdgJ.js +73 -0
  172. package/dist/docs/assets/{reference_hooks.md.a8BJxMR5.lean.js → reference_hooks.md.Ddt5DdgJ.lean.js} +1 -1
  173. package/dist/docs/assets/{reference_playground.md.DnX5nL-B.js → reference_playground.md.4myJPxrf.js} +1 -1
  174. package/dist/docs/assets/{reference_project-layout.md.CA6QP6Lw.js → reference_project-layout.md.DuBu9a96.js} +2 -2
  175. package/dist/docs/assets/reference_result.md.BK5SxDrf.js +19 -0
  176. package/dist/docs/assets/reference_result.md.BK5SxDrf.lean.js +1 -0
  177. package/dist/docs/assets/{reference_sessions.md.NxFP_CAC.js → reference_sessions.md.CueyOHSL.js} +1 -1
  178. package/dist/docs/assets/{reference_sessions.md.NxFP_CAC.lean.js → reference_sessions.md.CueyOHSL.lean.js} +1 -1
  179. package/dist/docs/assets/{reference_tools.md.B1up2r9W.js → reference_tools.md.aGrn99hP.js} +1 -1
  180. package/dist/docs/assets/skills_framework-map.md.haibFyoB.js +1 -0
  181. package/dist/docs/assets/{skills_otel.md.CgiZryR3.js → skills_otel.md.CqhobH3B.js} +3 -3
  182. package/dist/docs/assets/{skills_otel.md.CgiZryR3.lean.js → skills_otel.md.CqhobH3B.lean.js} +1 -1
  183. package/dist/docs/assets/{templates_pr-autofixer.md.x5zl6-GT.js → templates_pr-autofixer.md.Bds_XWcV.js} +2 -2
  184. package/dist/docs/assets/{templates_pr-autofixer.md.x5zl6-GT.lean.js → templates_pr-autofixer.md.Bds_XWcV.lean.js} +1 -1
  185. package/dist/docs/building-with-agents.html +4 -4
  186. package/dist/docs/concepts.html +5 -5
  187. package/dist/docs/concepts.md +2 -4
  188. package/dist/docs/deployment.html +4 -4
  189. package/dist/docs/design/filesystem.md +376 -0
  190. package/dist/docs/design/runtime-abstraction.md +2 -3
  191. package/dist/docs/evals.html +6 -6
  192. package/dist/docs/evals.md +9 -7
  193. package/dist/docs/guides/agent-to-agent.html +4 -4
  194. package/dist/docs/guides/cloud-agents.html +6 -6
  195. package/dist/docs/guides/cloud-agents.md +4 -6
  196. package/dist/docs/guides/convert-automation.html +4 -4
  197. package/dist/docs/guides/github.html +6 -6
  198. package/dist/docs/guides/github.md +5 -1
  199. package/dist/docs/guides/human-in-the-loop.html +4 -4
  200. package/dist/docs/guides/mcp-oauth.html +5 -5
  201. package/dist/docs/guides/opentelemetry.html +10 -11
  202. package/dist/docs/guides/opentelemetry.md +41 -17
  203. package/dist/docs/guides/slack.html +4 -4
  204. package/dist/docs/guides/webhooks.html +4 -4
  205. package/dist/docs/hashmap.json +1 -1
  206. package/dist/docs/hillclimbing.html +4 -4
  207. package/dist/docs/index.html +6 -6
  208. package/dist/docs/index.md +2 -2
  209. package/dist/docs/llms-full.txt +907 -262
  210. package/dist/docs/llms.txt +3 -2
  211. package/dist/docs/quickstart.html +4 -4
  212. package/dist/docs/reference/agent-config.html +8 -8
  213. package/dist/docs/reference/agent-config.md +6 -10
  214. package/dist/docs/reference/artifacts.html +5 -5
  215. package/dist/docs/reference/channels.html +6 -6
  216. package/dist/docs/reference/channels.md +38 -8
  217. package/dist/docs/reference/cli.html +5 -5
  218. package/dist/docs/reference/cli.md +3 -4
  219. package/dist/docs/reference/connections.html +4 -4
  220. package/dist/docs/reference/extensions.html +16 -10
  221. package/dist/docs/reference/extensions.md +86 -22
  222. package/dist/docs/reference/hooks.html +69 -10
  223. package/dist/docs/reference/hooks.md +215 -46
  224. package/dist/docs/reference/http-api.html +4 -4
  225. package/dist/docs/reference/instructions.html +4 -4
  226. package/dist/docs/reference/playground.html +5 -5
  227. package/dist/docs/reference/playground.md +3 -0
  228. package/dist/docs/reference/project-layout.html +6 -6
  229. package/dist/docs/reference/project-layout.md +2 -1
  230. package/dist/docs/reference/prompt.html +4 -4
  231. package/dist/docs/reference/result.html +45 -0
  232. package/dist/docs/reference/result.md +89 -0
  233. package/dist/docs/reference/schedules.html +4 -4
  234. package/dist/docs/reference/sessions.html +5 -5
  235. package/dist/docs/reference/sessions.md +3 -1
  236. package/dist/docs/reference/skills.html +4 -4
  237. package/dist/docs/reference/subagents.html +4 -4
  238. package/dist/docs/reference/tools.html +5 -5
  239. package/dist/docs/reference/tools.md +1 -2
  240. package/dist/docs/scaffolding-agents.html +4 -4
  241. package/dist/docs/skills/ab.html +4 -4
  242. package/dist/docs/skills/create-agent.html +4 -4
  243. package/dist/docs/skills/debug.html +4 -4
  244. package/dist/docs/skills/evals.html +4 -4
  245. package/dist/docs/skills/framework-map.html +5 -5
  246. package/dist/docs/skills/framework-map.md +3 -1
  247. package/dist/docs/skills/github.html +4 -4
  248. package/dist/docs/skills/hillclimb.html +4 -4
  249. package/dist/docs/skills/index.html +4 -4
  250. package/dist/docs/skills/mcp-auth.html +4 -4
  251. package/dist/docs/skills/otel.html +7 -7
  252. package/dist/docs/skills/otel.md +8 -3
  253. package/dist/docs/skills/setup-slack.html +4 -4
  254. package/dist/docs/storage.html +4 -4
  255. package/dist/docs/templates/agentic-owners.html +4 -4
  256. package/dist/docs/templates/agents-md.html +4 -4
  257. package/dist/docs/templates/code-wiki.html +4 -4
  258. package/dist/docs/templates/demo.html +4 -4
  259. package/dist/docs/templates/pr-autofixer.html +6 -6
  260. package/dist/docs/templates/pr-autofixer.md +0 -3
  261. package/dist/docs/templates/security-help.html +4 -4
  262. package/dist/docs/templates/security-reviewer.html +4 -4
  263. package/dist/docs/templates/triage.html +4 -4
  264. package/dist/docs/troubleshooting.html +4 -4
  265. package/dist/evals.d.ts +1 -1
  266. package/dist/evals.d.ts.map +1 -1
  267. package/dist/extensions.d.ts +20 -7
  268. package/dist/extensions.d.ts.map +1 -1
  269. package/dist/extensions.js +36 -5
  270. package/dist/files.d.ts +16 -3
  271. package/dist/files.d.ts.map +1 -1
  272. package/dist/files.js +16 -3
  273. package/dist/filesystem.d.ts +440 -0
  274. package/dist/filesystem.d.ts.map +1 -0
  275. package/dist/filesystem.js +1694 -0
  276. package/dist/index.d.ts +6 -4
  277. package/dist/index.d.ts.map +1 -1
  278. package/dist/index.js +4 -3
  279. package/dist/internal/ab-snapshot.d.ts.map +1 -1
  280. package/dist/internal/ab-snapshot.js +0 -1
  281. package/dist/internal/advertise-tools.d.ts.map +1 -1
  282. package/dist/internal/advertise-tools.js +1 -3
  283. package/dist/internal/authored-alias-hooks.d.ts +4 -13
  284. package/dist/internal/authored-alias-hooks.d.ts.map +1 -1
  285. package/dist/internal/authored-alias-hooks.js +4 -20
  286. package/dist/internal/authored-loaders.d.ts +2 -3
  287. package/dist/internal/authored-loaders.d.ts.map +1 -1
  288. package/dist/internal/authored-loaders.js +6 -20
  289. package/dist/internal/channel-dispatch.d.ts +43 -0
  290. package/dist/internal/channel-dispatch.d.ts.map +1 -0
  291. package/dist/internal/channel-dispatch.js +77 -0
  292. package/dist/internal/chat-client.d.ts +1 -1
  293. package/dist/internal/chat-client.js +1 -1
  294. package/dist/internal/cli-ax.d.ts +5 -5
  295. package/dist/internal/cli-ax.d.ts.map +1 -1
  296. package/dist/internal/cli-ax.js +5 -5
  297. package/dist/internal/cli-bitbucket.d.ts +33 -0
  298. package/dist/internal/cli-bitbucket.d.ts.map +1 -0
  299. package/dist/internal/cli-bitbucket.js +359 -0
  300. package/dist/internal/cli-convert-automation.d.ts +1 -1
  301. package/dist/internal/cli-convert-automation.js +2 -2
  302. package/dist/internal/cli-cursor.d.ts +1 -1
  303. package/dist/internal/cli-cursor.d.ts.map +1 -1
  304. package/dist/internal/cli-cursor.js +2 -4
  305. package/dist/internal/cli-deploy.d.ts.map +1 -1
  306. package/dist/internal/cli-deploy.js +2 -6
  307. package/dist/internal/cli-github.d.ts +1 -1
  308. package/dist/internal/cli-github.js +3 -3
  309. package/dist/internal/cli-gitlab.d.ts +37 -0
  310. package/dist/internal/cli-gitlab.d.ts.map +1 -0
  311. package/dist/internal/cli-gitlab.js +380 -0
  312. package/dist/internal/cli-mcp.d.ts.map +1 -1
  313. package/dist/internal/cli-mcp.js +2 -6
  314. package/dist/internal/cli-slack.d.ts +1 -1
  315. package/dist/internal/cli-slack.d.ts.map +1 -1
  316. package/dist/internal/cli-slack.js +2 -4
  317. package/dist/internal/continuation-channel.d.ts +18 -2
  318. package/dist/internal/continuation-channel.d.ts.map +1 -1
  319. package/dist/internal/continuation-channel.js +67 -5
  320. package/dist/internal/continuation-identity.d.ts +24 -17
  321. package/dist/internal/continuation-identity.d.ts.map +1 -1
  322. package/dist/internal/continuation-identity.js +246 -32
  323. package/dist/internal/conversation-mirror.d.ts.map +1 -1
  324. package/dist/internal/conversation-mirror.js +4 -3
  325. package/dist/internal/convert-automation/types.d.ts +1 -1
  326. package/dist/internal/convert-automation/types.js +1 -1
  327. package/dist/internal/cursor/account-mcp.d.ts.map +1 -1
  328. package/dist/internal/cursor/account-mcp.js +1 -3
  329. package/dist/internal/cursor/backend-client.d.ts +5 -4
  330. package/dist/internal/cursor/backend-client.d.ts.map +1 -1
  331. package/dist/internal/cursor/backend-client.js +5 -6
  332. package/dist/internal/cursor/bound-secret-file.d.ts +56 -0
  333. package/dist/internal/cursor/bound-secret-file.d.ts.map +1 -0
  334. package/dist/internal/cursor/bound-secret-file.js +88 -0
  335. package/dist/internal/cursor/credentials.d.ts +39 -5
  336. package/dist/internal/cursor/credentials.d.ts.map +1 -1
  337. package/dist/internal/cursor/credentials.js +58 -8
  338. package/dist/internal/cursor/hosted-bound-secrets.d.ts +41 -0
  339. package/dist/internal/cursor/hosted-bound-secrets.d.ts.map +1 -0
  340. package/dist/internal/cursor/hosted-bound-secrets.js +54 -0
  341. package/dist/internal/cursor/hosted-deployment-secrets.d.ts +19 -5
  342. package/dist/internal/cursor/hosted-deployment-secrets.d.ts.map +1 -1
  343. package/dist/internal/cursor/hosted-deployment-secrets.js +29 -9
  344. package/dist/internal/cursor/hosted-store-secrets.d.ts +1 -1
  345. package/dist/internal/cursor/hosted-store-secrets.js +1 -1
  346. package/dist/internal/cursor-account-mcp-auth.d.ts.map +1 -1
  347. package/dist/internal/cursor-account-mcp-auth.js +2 -4
  348. package/dist/internal/cursor-deployment-relay.d.ts +6 -2
  349. package/dist/internal/cursor-deployment-relay.d.ts.map +1 -1
  350. package/dist/internal/cursor-deployment-relay.js +13 -9
  351. package/dist/internal/deploy-manifest.d.ts +1 -1
  352. package/dist/internal/deploy-manifest.d.ts.map +1 -1
  353. package/dist/internal/deploy-manifest.js +1 -1
  354. package/dist/internal/discovery/ab.d.ts +1 -1
  355. package/dist/internal/discovery/ab.d.ts.map +1 -1
  356. package/dist/internal/discovery/ab.js +21 -9
  357. package/dist/internal/discovery/agent.d.ts +6 -1
  358. package/dist/internal/discovery/agent.d.ts.map +1 -1
  359. package/dist/internal/discovery/agent.js +141 -120
  360. package/dist/internal/discovery/channels.d.ts +1 -1
  361. package/dist/internal/discovery/channels.d.ts.map +1 -1
  362. package/dist/internal/discovery/channels.js +14 -14
  363. package/dist/internal/discovery/connections.d.ts +1 -5
  364. package/dist/internal/discovery/connections.d.ts.map +1 -1
  365. package/dist/internal/discovery/connections.js +30 -44
  366. package/dist/internal/discovery/cursor-plugin.d.ts.map +1 -1
  367. package/dist/internal/discovery/cursor-plugin.js +1 -3
  368. package/dist/internal/discovery/extension-overlay.d.ts +32 -0
  369. package/dist/internal/discovery/extension-overlay.d.ts.map +1 -0
  370. package/dist/internal/discovery/extension-overlay.js +191 -0
  371. package/dist/internal/discovery/extensions.d.ts +11 -2
  372. package/dist/internal/discovery/extensions.d.ts.map +1 -1
  373. package/dist/internal/discovery/extensions.js +211 -74
  374. package/dist/internal/discovery/hooks.d.ts +1 -1
  375. package/dist/internal/discovery/hooks.d.ts.map +1 -1
  376. package/dist/internal/discovery/hooks.js +15 -2
  377. package/dist/internal/discovery/info.d.ts.map +1 -1
  378. package/dist/internal/discovery/info.js +10 -1
  379. package/dist/internal/discovery/modules.d.ts.map +1 -1
  380. package/dist/internal/discovery/modules.js +8 -2
  381. package/dist/internal/discovery/names.d.ts +1 -1
  382. package/dist/internal/discovery/names.d.ts.map +1 -1
  383. package/dist/internal/discovery/names.js +1 -0
  384. package/dist/internal/discovery/project.d.ts +0 -2
  385. package/dist/internal/discovery/project.d.ts.map +1 -1
  386. package/dist/internal/discovery/project.js +64 -10
  387. package/dist/internal/discovery/runtime.d.ts.map +1 -1
  388. package/dist/internal/discovery/runtime.js +1 -2
  389. package/dist/internal/discovery/schedules.d.ts +1 -1
  390. package/dist/internal/discovery/schedules.d.ts.map +1 -1
  391. package/dist/internal/discovery/schedules.js +23 -2
  392. package/dist/internal/discovery/services.d.ts +6 -2
  393. package/dist/internal/discovery/services.d.ts.map +1 -1
  394. package/dist/internal/discovery/services.js +31 -1
  395. package/dist/internal/discovery/skills.d.ts +1 -6
  396. package/dist/internal/discovery/skills.d.ts.map +1 -1
  397. package/dist/internal/discovery/skills.js +8 -3
  398. package/dist/internal/discovery/subagent.d.ts +3 -0
  399. package/dist/internal/discovery/subagent.d.ts.map +1 -1
  400. package/dist/internal/discovery/subagent.js +109 -0
  401. package/dist/internal/discovery.d.ts +1 -2
  402. package/dist/internal/discovery.d.ts.map +1 -1
  403. package/dist/internal/discovery.js +1 -2
  404. package/dist/internal/distribution.d.ts +10 -27
  405. package/dist/internal/distribution.d.ts.map +1 -1
  406. package/dist/internal/distribution.js +25 -73
  407. package/dist/internal/docs-site.js +1 -1
  408. package/dist/internal/eval-run-store.d.ts +0 -1
  409. package/dist/internal/eval-run-store.d.ts.map +1 -1
  410. package/dist/internal/eval-runner.d.ts.map +1 -1
  411. package/dist/internal/factory-resource-channel.d.ts +33 -0
  412. package/dist/internal/factory-resource-channel.d.ts.map +1 -0
  413. package/dist/internal/factory-resource-channel.js +77 -0
  414. package/dist/internal/filesystem/errors.d.ts +64 -0
  415. package/dist/internal/filesystem/errors.d.ts.map +1 -0
  416. package/dist/internal/filesystem/errors.js +175 -0
  417. package/dist/internal/filesystem/format.d.ts +28 -0
  418. package/dist/internal/filesystem/format.d.ts.map +1 -0
  419. package/dist/internal/filesystem/format.js +213 -0
  420. package/dist/internal/filesystem/merge.d.ts +34 -0
  421. package/dist/internal/filesystem/merge.d.ts.map +1 -0
  422. package/dist/internal/filesystem/merge.js +196 -0
  423. package/dist/internal/filesystem/scratch.d.ts +59 -0
  424. package/dist/internal/filesystem/scratch.d.ts.map +1 -0
  425. package/dist/internal/filesystem/scratch.js +212 -0
  426. package/dist/internal/filesystem/sdk-schemas.d.ts +29 -0
  427. package/dist/internal/filesystem/sdk-schemas.d.ts.map +1 -0
  428. package/dist/internal/filesystem/sdk-schemas.js +153 -0
  429. package/dist/internal/filesystem/tools.d.ts +42 -0
  430. package/dist/internal/filesystem/tools.d.ts.map +1 -0
  431. package/dist/internal/filesystem/tools.js +618 -0
  432. package/dist/internal/filesystem/walk.d.ts +74 -0
  433. package/dist/internal/filesystem/walk.d.ts.map +1 -0
  434. package/dist/internal/filesystem/walk.js +339 -0
  435. package/dist/internal/framework-file-storage.d.ts +8 -0
  436. package/dist/internal/framework-file-storage.d.ts.map +1 -1
  437. package/dist/internal/framework-file-storage.js +8 -8
  438. package/dist/internal/github-fanout.d.ts +1 -1
  439. package/dist/internal/github-fanout.js +1 -1
  440. package/dist/internal/guest-network.d.ts +104 -0
  441. package/dist/internal/guest-network.d.ts.map +1 -0
  442. package/dist/internal/guest-network.js +309 -0
  443. package/dist/internal/host-otel.d.ts +3 -3
  444. package/dist/internal/host-otel.d.ts.map +1 -1
  445. package/dist/internal/host-otel.js +8 -4
  446. package/dist/internal/hosted-admission-adapter.d.ts +8 -7
  447. package/dist/internal/hosted-admission-adapter.d.ts.map +1 -1
  448. package/dist/internal/hosted-delivery-protocol.d.ts +6 -0
  449. package/dist/internal/hosted-delivery-protocol.d.ts.map +1 -1
  450. package/dist/internal/hosted-delivery-protocol.js +18 -5
  451. package/dist/internal/hosted-delivery.d.ts +18 -0
  452. package/dist/internal/hosted-delivery.d.ts.map +1 -1
  453. package/dist/internal/hosted-delivery.js +258 -118
  454. package/dist/internal/http-channel.d.ts.map +1 -1
  455. package/dist/internal/http-channel.js +1 -3
  456. package/dist/internal/init-interview.d.ts.map +1 -1
  457. package/dist/internal/init-interview.js +1 -3
  458. package/dist/internal/init-project.d.ts +2 -2
  459. package/dist/internal/init-project.js +2 -2
  460. package/dist/internal/inline-stdio-define-stub.d.ts +1 -1
  461. package/dist/internal/inline-stdio-define-stub.d.ts.map +1 -1
  462. package/dist/internal/inline-stdio-define-stub.js +1 -1
  463. package/dist/internal/is-record.d.ts +2 -0
  464. package/dist/internal/is-record.d.ts.map +1 -0
  465. package/dist/internal/is-record.js +3 -0
  466. package/dist/internal/json-schema.d.ts.map +1 -1
  467. package/dist/internal/json-schema.js +18 -10
  468. package/dist/internal/local-control-plane.d.ts +1 -2
  469. package/dist/internal/local-control-plane.d.ts.map +1 -1
  470. package/dist/internal/local-control-plane.js +3 -20
  471. package/dist/internal/mcp-endpoint.d.ts.map +1 -1
  472. package/dist/internal/mcp-endpoint.js +1 -3
  473. package/dist/internal/otel/collector.d.ts +12 -3
  474. package/dist/internal/otel/collector.d.ts.map +1 -1
  475. package/dist/internal/otel/collector.js +77 -125
  476. package/dist/internal/otel/config.d.ts +0 -2
  477. package/dist/internal/otel/config.d.ts.map +1 -1
  478. package/dist/internal/otel/config.js +17 -20
  479. package/dist/internal/otel/http.d.ts +2 -0
  480. package/dist/internal/otel/http.d.ts.map +1 -1
  481. package/dist/internal/otel/http.js +7 -1
  482. package/dist/internal/otel/mcp.d.ts.map +1 -1
  483. package/dist/internal/otel/mcp.js +3 -16
  484. package/dist/internal/otel/runtime.d.ts +26 -1
  485. package/dist/internal/otel/runtime.d.ts.map +1 -1
  486. package/dist/internal/otel/runtime.js +164 -15
  487. package/dist/internal/package-inline-stdio.d.ts.map +1 -1
  488. package/dist/internal/package-inline-stdio.js +3 -11
  489. package/dist/internal/playground/toolchain.d.ts +1 -1
  490. package/dist/internal/playground/toolchain.d.ts.map +1 -1
  491. package/dist/internal/playground/toolchain.js +1 -1
  492. package/dist/internal/request-error-status.d.ts +12 -0
  493. package/dist/internal/request-error-status.d.ts.map +1 -0
  494. package/dist/internal/request-error-status.js +52 -0
  495. package/dist/internal/resolve-prod-target.d.ts +1 -1
  496. package/dist/internal/resolve-prod-target.d.ts.map +1 -1
  497. package/dist/internal/resolve-prod-target.js +3 -7
  498. package/dist/internal/result-output.d.ts +18 -0
  499. package/dist/internal/result-output.d.ts.map +1 -0
  500. package/dist/internal/result-output.js +33 -0
  501. package/dist/internal/run-client.d.ts +2 -2
  502. package/dist/internal/run-client.js +2 -2
  503. package/dist/internal/runtime-dispatch-runner.d.ts +1 -11
  504. package/dist/internal/runtime-dispatch-runner.d.ts.map +1 -1
  505. package/dist/internal/runtime-dispatch-runner.js +2 -15
  506. package/dist/internal/sdk-runner.d.ts +1 -1
  507. package/dist/internal/sdk-runner.d.ts.map +1 -1
  508. package/dist/internal/sdk-runner.js +6 -7
  509. package/dist/internal/server.d.ts.map +1 -1
  510. package/dist/internal/server.js +110 -35
  511. package/dist/internal/session-cost.d.ts +3 -3
  512. package/dist/internal/session-cost.d.ts.map +1 -1
  513. package/dist/internal/session-cost.js +3 -3
  514. package/dist/internal/session-engine.d.ts +48 -11
  515. package/dist/internal/session-engine.d.ts.map +1 -1
  516. package/dist/internal/session-engine.js +507 -115
  517. package/dist/internal/session-run-log.d.ts.map +1 -1
  518. package/dist/internal/session-run-log.js +1 -3
  519. package/dist/internal/skills-sync.d.ts +1 -4
  520. package/dist/internal/skills-sync.d.ts.map +1 -1
  521. package/dist/internal/skills-sync.js +10 -50
  522. package/dist/internal/sleep.d.ts +2 -0
  523. package/dist/internal/sleep.d.ts.map +1 -0
  524. package/dist/internal/sleep.js +3 -0
  525. package/dist/internal/store-mirror.d.ts +29 -0
  526. package/dist/internal/store-mirror.d.ts.map +1 -0
  527. package/dist/internal/store-mirror.js +70 -0
  528. package/dist/internal/tenant-slack/relay.d.ts +73 -0
  529. package/dist/internal/tenant-slack/relay.d.ts.map +1 -0
  530. package/dist/internal/tenant-slack/relay.js +138 -0
  531. package/dist/internal/testing/factory-resource-fixtures.d.ts +48 -0
  532. package/dist/internal/testing/factory-resource-fixtures.d.ts.map +1 -0
  533. package/dist/internal/testing/factory-resource-fixtures.js +41 -0
  534. package/dist/internal/testing/scm-continuation-fixtures.d.ts +33 -0
  535. package/dist/internal/testing/scm-continuation-fixtures.d.ts.map +1 -0
  536. package/dist/internal/testing/scm-continuation-fixtures.js +253 -0
  537. package/dist/internal/workspace-sync.d.ts +22 -0
  538. package/dist/internal/workspace-sync.d.ts.map +1 -0
  539. package/dist/internal/workspace-sync.js +49 -0
  540. package/dist/internal/workspace.d.ts +7 -0
  541. package/dist/internal/workspace.d.ts.map +1 -1
  542. package/dist/internal/workspace.js +13 -0
  543. package/dist/otel.d.ts +23 -1
  544. package/dist/otel.d.ts.map +1 -1
  545. package/dist/otel.js +93 -2
  546. package/dist/playground/assets/index-8YiozU89.js +67 -0
  547. package/dist/playground/assets/index-MbMxXg-y.css +1 -0
  548. package/dist/playground/index.html +2 -2
  549. package/dist/result.d.ts +24 -0
  550. package/dist/result.d.ts.map +1 -0
  551. package/dist/result.js +27 -0
  552. package/dist/storage-backends/cursor-hosted.d.ts.map +1 -1
  553. package/dist/storage-backends/cursor-hosted.js +7 -4
  554. package/dist/storage-protocol.d.ts.map +1 -1
  555. package/dist/storage-protocol.js +1 -3
  556. package/dist/types.d.ts +141 -26
  557. package/dist/types.d.ts.map +1 -1
  558. package/docs/README.md +2 -2
  559. package/docs/concepts.md +2 -4
  560. package/docs/design/filesystem.md +376 -0
  561. package/docs/design/runtime-abstraction.md +2 -3
  562. package/docs/evals.md +9 -7
  563. package/docs/guides/cloud-agents.md +4 -6
  564. package/docs/guides/github.md +5 -1
  565. package/docs/guides/opentelemetry.md +41 -17
  566. package/docs/reference/agent-config.md +6 -10
  567. package/docs/reference/channels.md +38 -8
  568. package/docs/reference/cli.md +3 -4
  569. package/docs/reference/extensions.md +87 -23
  570. package/docs/reference/hooks.md +215 -46
  571. package/docs/reference/playground.md +3 -0
  572. package/docs/reference/project-layout.md +2 -1
  573. package/docs/reference/result.md +94 -0
  574. package/docs/reference/sessions.md +3 -1
  575. package/docs/reference/tools.md +1 -2
  576. package/docs/templates/pr-autofixer.md +0 -3
  577. package/package.json +42 -9
  578. package/skills/framework-map/SKILL.md +3 -1
  579. package/skills/otel/SKILL.md +8 -3
  580. package/src/ab.ts +1 -1
  581. package/src/bin/agent-serve.ts +121 -21
  582. package/src/channels/bitbucket/api.ts +623 -0
  583. package/src/channels/bitbucket/binding.ts +414 -0
  584. package/src/channels/bitbucket/bitbucket-channel.ts +182 -0
  585. package/src/channels/bitbucket/bitbucket-webhook.ts +576 -0
  586. package/src/channels/bitbucket/checks.ts +154 -0
  587. package/src/channels/bitbucket/cursor-account.ts +117 -0
  588. package/src/channels/bitbucket/defaults.ts +110 -0
  589. package/src/channels/bitbucket/events.ts +84 -0
  590. package/src/channels/bitbucket/index.ts +49 -0
  591. package/src/channels/bitbucket/replay.ts +439 -0
  592. package/src/channels/bitbucket/state.ts +59 -0
  593. package/src/channels/bitbucket/types.ts +266 -0
  594. package/src/channels/change-monitors/change-monitors-channel.ts +62 -0
  595. package/src/channels/change-monitors/index.ts +8 -0
  596. package/src/channels/change-monitors/types.ts +44 -0
  597. package/src/channels/deployments/deployments-channel.ts +25 -43
  598. package/src/channels/deployments/types.ts +12 -6
  599. package/src/channels/github/binding.ts +8 -1
  600. package/src/channels/github/cursor-account.ts +17 -6
  601. package/src/channels/github/defaults.ts +4 -0
  602. package/src/channels/github/events.ts +1 -1
  603. package/src/channels/github/forward.ts +3 -2
  604. package/src/channels/github/github-channel.ts +74 -221
  605. package/src/channels/github/progress.ts +76 -10
  606. package/src/channels/github/replay.ts +1 -1
  607. package/src/channels/github/state.ts +6 -0
  608. package/src/channels/github/types.ts +2 -5
  609. package/src/channels/gitlab/api.ts +228 -0
  610. package/src/channels/gitlab/binding.ts +233 -0
  611. package/src/channels/gitlab/checks.ts +243 -0
  612. package/src/channels/gitlab/cursor-account.ts +114 -0
  613. package/src/channels/gitlab/defaults.ts +93 -0
  614. package/src/channels/gitlab/events.ts +44 -0
  615. package/src/channels/gitlab/gitlab-channel.ts +176 -0
  616. package/src/channels/gitlab/gitlab-webhook.ts +555 -0
  617. package/src/channels/gitlab/index.ts +43 -0
  618. package/src/channels/gitlab/replay.ts +347 -0
  619. package/src/channels/gitlab/state.ts +55 -0
  620. package/src/channels/gitlab/types.ts +263 -0
  621. package/src/channels/issues/index.ts +9 -0
  622. package/src/channels/issues/issues-channel.ts +51 -0
  623. package/src/channels/issues/types.ts +41 -0
  624. package/src/channels/origin/api.ts +4 -2
  625. package/src/channels/origin/origin-channel.ts +19 -94
  626. package/src/channels/origin/types.ts +23 -2
  627. package/src/channels/slack/eval-directive.ts +1 -6
  628. package/src/channels/slack/init.ts +6 -3
  629. package/src/channels/slack/setup.ts +7 -6
  630. package/src/channels/slack/types.ts +1 -1
  631. package/src/channels.ts +0 -1
  632. package/src/client.ts +1 -1
  633. package/src/connections.ts +1 -1
  634. package/src/evals.ts +1 -1
  635. package/src/extensions.ts +47 -5
  636. package/src/files.ts +21 -3
  637. package/src/filesystem.ts +2074 -0
  638. package/src/index.ts +48 -28
  639. package/src/internal/ab-snapshot.ts +0 -3
  640. package/src/internal/advertise-tools.ts +1 -4
  641. package/src/internal/authored-alias-hooks.ts +4 -21
  642. package/src/internal/authored-loaders.ts +6 -23
  643. package/src/internal/channel-dispatch.ts +160 -0
  644. package/src/internal/chat-client.ts +1 -1
  645. package/src/internal/cli-ax.ts +5 -5
  646. package/src/internal/cli-bitbucket.ts +477 -0
  647. package/src/internal/cli-convert-automation.ts +7 -7
  648. package/src/internal/cli-cursor.ts +2 -5
  649. package/src/internal/cli-deploy.ts +2 -8
  650. package/src/internal/cli-github.ts +3 -3
  651. package/src/internal/cli-gitlab.ts +485 -0
  652. package/src/internal/cli-mcp.ts +2 -7
  653. package/src/internal/cli-slack.ts +2 -5
  654. package/src/internal/continuation-channel.ts +102 -4
  655. package/src/internal/continuation-identity.ts +338 -35
  656. package/src/internal/conversation-mirror.ts +4 -3
  657. package/src/internal/convert-automation/types.ts +1 -1
  658. package/src/internal/cursor/account-mcp.ts +1 -4
  659. package/src/internal/cursor/backend-client.ts +9 -10
  660. package/src/internal/cursor/bound-secret-file.ts +108 -0
  661. package/src/internal/cursor/credentials.ts +75 -10
  662. package/src/internal/cursor/hosted-bound-secrets.ts +75 -0
  663. package/src/internal/cursor/hosted-deployment-secrets.ts +42 -11
  664. package/src/internal/cursor/hosted-store-secrets.ts +1 -1
  665. package/src/internal/cursor-account-mcp-auth.ts +2 -5
  666. package/src/internal/cursor-deployment-relay.ts +11 -7
  667. package/src/internal/deploy-manifest.ts +4 -2
  668. package/src/internal/discovery/ab.ts +29 -9
  669. package/src/internal/discovery/agent.ts +181 -136
  670. package/src/internal/discovery/channels.ts +15 -13
  671. package/src/internal/discovery/connections.ts +55 -50
  672. package/src/internal/discovery/cursor-plugin.ts +1 -4
  673. package/src/internal/discovery/extension-overlay.ts +274 -0
  674. package/src/internal/discovery/extensions.ts +330 -105
  675. package/src/internal/discovery/hooks.ts +20 -2
  676. package/src/internal/discovery/info.ts +10 -0
  677. package/src/internal/discovery/modules.ts +8 -2
  678. package/src/internal/discovery/names.ts +2 -1
  679. package/src/internal/discovery/project.ts +80 -9
  680. package/src/internal/discovery/runtime.ts +1 -2
  681. package/src/internal/discovery/schedules.ts +28 -2
  682. package/src/internal/discovery/services.ts +37 -1
  683. package/src/internal/discovery/skills.ts +13 -3
  684. package/src/internal/discovery/subagent.ts +107 -0
  685. package/src/internal/discovery.ts +0 -2
  686. package/src/internal/distribution.ts +35 -83
  687. package/src/internal/docs-site.ts +1 -1
  688. package/src/internal/eval-run-store.ts +0 -7
  689. package/src/internal/eval-runner.ts +0 -1
  690. package/src/internal/factory-resource-channel.ts +122 -0
  691. package/src/internal/filesystem/errors.ts +220 -0
  692. package/src/internal/filesystem/format.ts +276 -0
  693. package/src/internal/filesystem/merge.ts +195 -0
  694. package/src/internal/filesystem/scratch.ts +255 -0
  695. package/src/internal/filesystem/sdk-schemas.ts +204 -0
  696. package/src/internal/filesystem/tools.ts +821 -0
  697. package/src/internal/filesystem/walk.ts +369 -0
  698. package/src/internal/framework-file-storage.ts +8 -8
  699. package/src/internal/github-fanout.ts +1 -1
  700. package/src/internal/guest-network.ts +389 -0
  701. package/src/internal/host-otel.ts +8 -4
  702. package/src/internal/hosted-admission-adapter.ts +8 -8
  703. package/src/internal/hosted-delivery-protocol.ts +26 -1
  704. package/src/internal/hosted-delivery.ts +393 -192
  705. package/src/internal/http-channel.ts +1 -4
  706. package/src/internal/init-interview.ts +1 -4
  707. package/src/internal/init-project.ts +2 -2
  708. package/src/internal/inline-stdio-define-stub.ts +1 -1
  709. package/src/internal/is-record.ts +3 -0
  710. package/src/internal/json-schema.ts +19 -10
  711. package/src/internal/local-control-plane.ts +5 -24
  712. package/src/internal/mcp-endpoint.ts +1 -4
  713. package/src/internal/otel/collector.ts +94 -159
  714. package/src/internal/otel/config.ts +10 -14
  715. package/src/internal/otel/http.ts +14 -1
  716. package/src/internal/otel/mcp.ts +3 -16
  717. package/src/internal/otel/runtime.ts +240 -25
  718. package/src/internal/package-inline-stdio.ts +3 -12
  719. package/src/internal/playground/toolchain.ts +1 -1
  720. package/src/internal/request-error-status.ts +72 -0
  721. package/src/internal/resolve-prod-target.ts +3 -8
  722. package/src/internal/result-output.ts +34 -0
  723. package/src/internal/run-client.ts +2 -2
  724. package/src/internal/runtime-dispatch-runner.ts +3 -21
  725. package/src/internal/sdk-runner.ts +7 -7
  726. package/src/internal/server.ts +153 -44
  727. package/src/internal/session-cost.ts +3 -3
  728. package/src/internal/session-engine.ts +621 -103
  729. package/src/internal/session-run-log.ts +1 -4
  730. package/src/internal/skills-sync.ts +13 -63
  731. package/src/internal/sleep.ts +3 -0
  732. package/src/internal/store-mirror.ts +86 -0
  733. package/src/internal/tenant-slack/relay.ts +179 -0
  734. package/src/internal/testing/factory-resource-fixtures.ts +85 -0
  735. package/src/internal/testing/scm-continuation-fixtures.ts +286 -0
  736. package/src/internal/workspace-sync.ts +55 -0
  737. package/src/internal/workspace.ts +14 -0
  738. package/src/otel.ts +143 -3
  739. package/src/result.ts +36 -0
  740. package/src/storage-backends/cursor-hosted.ts +7 -4
  741. package/src/storage-protocol.ts +1 -4
  742. package/src/types.ts +154 -37
  743. package/templates/triage/agent/lib/types.ts +0 -2
  744. package/dist/continuation.d.ts +0 -20
  745. package/dist/continuation.d.ts.map +0 -1
  746. package/dist/continuation.js +0 -18
  747. package/dist/docs/assets/chunks/@localSearchIndexroot.FAqdWIXo.js +0 -1
  748. package/dist/docs/assets/concepts.md.rPzW2HZN.js +0 -1
  749. package/dist/docs/assets/guides_cloud-agents.md.DumwWXba.js +0 -9
  750. package/dist/docs/assets/guides_cloud-runtime.md.BRirbRAN.js +0 -9
  751. package/dist/docs/assets/guides_cloud-runtime.md.BRirbRAN.lean.js +0 -1
  752. package/dist/docs/assets/reference_extensions.md.9WQMZe1l.lean.js +0 -1
  753. package/dist/docs/assets/reference_hooks.md.a8BJxMR5.js +0 -14
  754. package/dist/docs/assets/skills_framework-map.md.DDa4MeEW.js +0 -1
  755. package/dist/docs/guides/cloud-runtime.html +0 -35
  756. package/dist/docs/guides/cloud-runtime.md +0 -117
  757. package/dist/internal/convert-automation/index.d.ts +0 -3
  758. package/dist/internal/convert-automation/index.d.ts.map +0 -1
  759. package/dist/internal/convert-automation/index.js +0 -1
  760. package/dist/internal/grokbot/runner.d.ts +0 -64
  761. package/dist/internal/grokbot/runner.d.ts.map +0 -1
  762. package/dist/internal/grokbot/runner.js +0 -282
  763. package/dist/internal/managed-delivery.d.ts +0 -80
  764. package/dist/internal/managed-delivery.d.ts.map +0 -1
  765. package/dist/internal/managed-delivery.js +0 -86
  766. package/dist/internal/review-comments.d.ts +0 -370
  767. package/dist/internal/review-comments.d.ts.map +0 -1
  768. package/dist/internal/review-comments.js +0 -921
  769. package/dist/internal/shallow-clone.d.ts +0 -176
  770. package/dist/internal/shallow-clone.d.ts.map +0 -1
  771. package/dist/internal/shallow-clone.js +0 -419
  772. package/dist/playground/assets/index-B6C9S9nG.css +0 -1
  773. package/dist/playground/assets/index-ZqNoT8Ie.js +0 -69
  774. package/docs/guides/cloud-runtime.md +0 -122
  775. package/src/continuation.ts +0 -49
  776. package/src/internal/convert-automation/index.ts +0 -10
  777. package/src/internal/grokbot/runner.ts +0 -370
  778. package/src/internal/managed-delivery.ts +0 -125
  779. package/src/internal/review-comments.ts +0 -1363
  780. package/src/internal/shallow-clone.ts +0 -609
  781. /package/dist/docs/assets/{evals.md.CPzDAwoH.lean.js → evals.md.CbMoebP1.lean.js} +0 -0
  782. /package/dist/docs/assets/{guides_cloud-agents.md.DumwWXba.lean.js → guides_cloud-agents.md.DS8RIjwx.lean.js} +0 -0
  783. /package/dist/docs/assets/{index.md.Kiht7ell.lean.js → index.md.D75GWhPl.lean.js} +0 -0
  784. /package/dist/docs/assets/{reference_agent-config.md.BHeYMgme.lean.js → reference_agent-config.md.CHNpiyp4.lean.js} +0 -0
  785. /package/dist/docs/assets/{reference_cli.md.DfoeyvL0.lean.js → reference_cli.md.CJNc_xYK.lean.js} +0 -0
  786. /package/dist/docs/assets/{reference_playground.md.DnX5nL-B.lean.js → reference_playground.md.4myJPxrf.lean.js} +0 -0
  787. /package/dist/docs/assets/{reference_project-layout.md.CA6QP6Lw.lean.js → reference_project-layout.md.DuBu9a96.lean.js} +0 -0
  788. /package/dist/docs/assets/{reference_tools.md.B1up2r9W.lean.js → reference_tools.md.aGrn99hP.lean.js} +0 -0
  789. /package/dist/docs/assets/{skills_framework-map.md.DDa4MeEW.lean.js → skills_framework-map.md.haibFyoB.lean.js} +0 -0
@@ -3,14 +3,16 @@
3
3
  * on a channel constructor stays `/v1` (engine pack minting) so existing
4
4
  * agents do not change: `githubChannel()` → `github.pr/v1`, `slackChannel()`
5
5
  * → `slack.thread/v1`, `originChannel()` → `origin.pr/v1`,
6
- * `deploymentsChannel()` → `deployments.none/v1`, `httpChannel()`
6
+ * `deploymentsChannel()` → `deployments.none/v1`, `changeMonitorsChannel()`
7
+ * → `none/v1`, `issuesChannel()` → `none/v1`, `httpChannel()` →
7
8
  * `none/v1`.
8
9
  *
9
10
  * Opt the whole agent into the v2 control plane with
10
11
  * `defineAgent({ architecture: "v2" })`. That stamps `/v2` defaults from
11
12
  * the channel kind and declared events (`github.pr/v2`, `github.issue/v2`,
12
13
  * `github.none/v2`, `slack.thread/v2`, `origin.pr/v2`,
13
- * `deployments.deployment/v2`, …) onto every channel that omitted a
14
+ * `deployments.deployment/v2`, `change_monitors.checkpoint/v2`,
15
+ * `issues.issue/v2`, …) onto every channel that omitted a
14
16
  * selector. An explicit per-channel selector still overrides. JSONPath
15
17
  * and per-agent format strings are rejected.
16
18
  */
@@ -22,7 +24,22 @@ export type ConversationType =
22
24
  | "issue"
23
25
  | "thread"
24
26
  | "origin-pr"
25
- | "deployment";
27
+ | "gitlab-mr"
28
+ | "bitbucket-pr"
29
+ | "deployment"
30
+ | "change-monitor-checkpoint"
31
+ | "factory-issue";
32
+
33
+ export type ContinuationKind =
34
+ | "github"
35
+ | "slack"
36
+ | "origin"
37
+ | "gitlab"
38
+ | "bitbucket"
39
+ | "deployments"
40
+ | "change_monitors"
41
+ | "issues"
42
+ | "http";
26
43
 
27
44
  export const CONTINUATION_SELECTORS = [
28
45
  "github.pr/v1",
@@ -36,9 +53,15 @@ export const CONTINUATION_SELECTORS = [
36
53
  "origin.pr/v1",
37
54
  "origin.pr/v2",
38
55
  "origin.none/v2",
56
+ "gitlab.mr/v2",
57
+ "gitlab.none/v2",
58
+ "bitbucket.pr/v2",
59
+ "bitbucket.none/v2",
39
60
  "deployments.none/v1",
40
61
  "deployments.none/v2",
41
62
  "deployments.deployment/v2",
63
+ "change_monitors.checkpoint/v2",
64
+ "issues.issue/v2",
42
65
  "none/v1",
43
66
  "none/v2",
44
67
  ] as const;
@@ -52,7 +75,7 @@ export type ParsedContinuation = {
52
75
  selector: ContinuationSelector;
53
76
  version: 1 | 2;
54
77
  type: ConversationType | "none";
55
- kind: "github" | "slack" | "origin" | "deployments" | "http";
78
+ kind: ContinuationKind;
56
79
  };
57
80
 
58
81
  export type ContinuationClaim = {
@@ -61,7 +84,9 @@ export type ContinuationClaim = {
61
84
  | { owner: string; repo: string; number: number }
62
85
  | { channelId: string; threadTs: string }
63
86
  | { fullName: string; number: number }
64
- | { deploymentId: string };
87
+ | { deploymentId: string }
88
+ | { checkpointName: string }
89
+ | { issueName: string };
65
90
  };
66
91
 
67
92
  export type MailboxContinuation = {
@@ -70,7 +95,7 @@ export type MailboxContinuation = {
70
95
 
71
96
  export type ContinuationBuiltin = {
72
97
  type: ConversationType;
73
- kind: "github" | "slack" | "origin" | "deployments";
98
+ kind: Exclude<ContinuationKind, "http">;
74
99
  events: readonly string[];
75
100
  format: string;
76
101
  };
@@ -104,6 +129,9 @@ export const BUILTINS: readonly ContinuationBuiltin[] = [
104
129
  {
105
130
  type: "origin-pr",
106
131
  kind: "origin",
132
+ // Public webhook deliveries carry `pullRequest.number` + repository
133
+ // (`owner.slug` / `name`); keep in lockstep with the control plane's
134
+ // `conversation/origin.ts`.
107
135
  events: [
108
136
  "pull_request.created",
109
137
  "pull_request.published",
@@ -113,9 +141,34 @@ export const BUILTINS: readonly ContinuationBuiltin[] = [
113
141
  "pull_request.merged",
114
142
  "pull_request.comment.created",
115
143
  "pull_request.review.submitted",
144
+ "pull_request.metadata.updated",
116
145
  ],
117
146
  format: "origin-pr:{fullName}#{number}",
118
147
  },
148
+ {
149
+ type: "gitlab-mr",
150
+ kind: "gitlab",
151
+ // GitLab `object_kind`s that carry a merge request: `note` only when
152
+ // `noteable_type` is MergeRequest, `pipeline` only with `merge_request`.
153
+ events: ["merge_request", "note", "pipeline"],
154
+ format: "gitlab-mr:{fullName}!{number}",
155
+ },
156
+ {
157
+ type: "bitbucket-pr",
158
+ kind: "bitbucket",
159
+ // Cloud vocabulary; Data Center keys are normalized before the stamp.
160
+ events: [
161
+ "pullrequest:created",
162
+ "pullrequest:updated",
163
+ "pullrequest:approved",
164
+ "pullrequest:unapproved",
165
+ "pullrequest:changes_request_created",
166
+ "pullrequest:fulfilled",
167
+ "pullrequest:rejected",
168
+ "pullrequest:comment_created",
169
+ ],
170
+ format: "bitbucket-pr:{fullName}#{number}",
171
+ },
119
172
  {
120
173
  type: "deployment",
121
174
  kind: "deployments",
@@ -124,6 +177,18 @@ export const BUILTINS: readonly ContinuationBuiltin[] = [
124
177
  events: ["deployment.created", "deployment.succeeded", "deployment.failed"],
125
178
  format: "deployments:{deploymentId}",
126
179
  },
180
+ {
181
+ type: "change-monitor-checkpoint",
182
+ kind: "change_monitors",
183
+ events: ["checkpoint.created"],
184
+ format: "change_monitors:{checkpointName}",
185
+ },
186
+ {
187
+ type: "factory-issue",
188
+ kind: "issues",
189
+ events: ["issue.created"],
190
+ format: "issues:{issueName}",
191
+ },
127
192
  ] as const;
128
193
 
129
194
  export class V2EngineError extends Error {
@@ -147,6 +212,10 @@ const SELECTOR_FIELDS: {
147
212
  "origin.pr/v1": { version: 1, type: "origin-pr", kind: "origin" },
148
213
  "origin.pr/v2": { version: 2, type: "origin-pr", kind: "origin" },
149
214
  "origin.none/v2": { version: 2, type: "none", kind: "origin" },
215
+ "gitlab.mr/v2": { version: 2, type: "gitlab-mr", kind: "gitlab" },
216
+ "gitlab.none/v2": { version: 2, type: "none", kind: "gitlab" },
217
+ "bitbucket.pr/v2": { version: 2, type: "bitbucket-pr", kind: "bitbucket" },
218
+ "bitbucket.none/v2": { version: 2, type: "none", kind: "bitbucket" },
150
219
  "deployments.none/v1": { version: 1, type: "none", kind: "deployments" },
151
220
  "deployments.none/v2": { version: 2, type: "none", kind: "deployments" },
152
221
  "deployments.deployment/v2": {
@@ -154,13 +223,21 @@ const SELECTOR_FIELDS: {
154
223
  type: "deployment",
155
224
  kind: "deployments",
156
225
  },
226
+ "change_monitors.checkpoint/v2": {
227
+ version: 2,
228
+ type: "change-monitor-checkpoint",
229
+ kind: "change_monitors",
230
+ },
231
+ "issues.issue/v2": {
232
+ version: 2,
233
+ type: "factory-issue",
234
+ kind: "issues",
235
+ },
157
236
  "none/v1": { version: 1, type: "none", kind: "http" },
158
237
  "none/v2": { version: 2, type: "none", kind: "http" },
159
238
  };
160
239
 
161
- export function isContinuationSelector(
162
- value: string
163
- ): value is ContinuationSelector {
240
+ function isContinuationSelector(value: string): value is ContinuationSelector {
164
241
  return Object.hasOwn(SELECTOR_FIELDS, value);
165
242
  }
166
243
 
@@ -189,14 +266,66 @@ export function defaultContinuationSelector(
189
266
  case "slack":
190
267
  return "slack.thread/v2";
191
268
  case "origin":
192
- return originV2Default(eventTypes);
269
+ return membershipOrNone(
270
+ eventTypes,
271
+ "origin-pr",
272
+ "origin.pr/v2",
273
+ "origin.none/v2"
274
+ );
275
+ case "gitlab":
276
+ return membershipOrNone(
277
+ eventTypes,
278
+ "gitlab-mr",
279
+ "gitlab.mr/v2",
280
+ "gitlab.none/v2"
281
+ );
282
+ case "bitbucket":
283
+ return membershipOrNone(
284
+ eventTypes,
285
+ "bitbucket-pr",
286
+ "bitbucket.pr/v2",
287
+ "bitbucket.none/v2"
288
+ );
193
289
  case "deployments":
194
- return deploymentsV2Default(eventTypes);
290
+ return membershipOrNone(
291
+ eventTypes,
292
+ "deployment",
293
+ "deployments.deployment/v2",
294
+ "deployments.none/v2"
295
+ );
296
+ case "change_monitors":
297
+ return membershipOrNone(
298
+ eventTypes,
299
+ "change-monitor-checkpoint",
300
+ "change_monitors.checkpoint/v2",
301
+ "none/v2"
302
+ );
303
+ case "issues":
304
+ return membershipOrNone(
305
+ eventTypes,
306
+ "factory-issue",
307
+ "issues.issue/v2",
308
+ "none/v2"
309
+ );
195
310
  default:
196
311
  return "none/v2";
197
312
  }
198
313
  }
199
314
 
315
+ /** Typed selector when every declared event is in the type's membership. */
316
+ function membershipOrNone(
317
+ eventTypes: readonly string[] | undefined,
318
+ type: ConversationType,
319
+ typed: ContinuationSelector,
320
+ none: ContinuationSelector
321
+ ): ContinuationSelector {
322
+ const allowed = new Set(builtinForType(type)?.events ?? []);
323
+ if ((eventTypes ?? []).some((event) => !allowed.has(event))) {
324
+ return none;
325
+ }
326
+ return typed;
327
+ }
328
+
200
329
  function githubV2Default(eventTypes?: readonly string[]): ContinuationSelector {
201
330
  const events = eventTypes ?? [];
202
331
  const issueEvents = new Set(builtinForType("issue")?.events ?? []);
@@ -210,24 +339,50 @@ function githubV2Default(eventTypes?: readonly string[]): ContinuationSelector {
210
339
  return "github.pr/v2";
211
340
  }
212
341
 
213
- function originV2Default(eventTypes?: readonly string[]): ContinuationSelector {
214
- const events = eventTypes ?? [];
215
- const prEvents = new Set(builtinForType("origin-pr")?.events ?? []);
216
- if (events.some((event) => !prEvents.has(event))) {
217
- return "origin.none/v2";
218
- }
219
- return "origin.pr/v2";
342
+ const OMITTED_V2_TYPED_TYPE = {
343
+ github: "pr",
344
+ origin: "origin-pr",
345
+ deployments: "deployment",
346
+ change_monitors: "change-monitor-checkpoint",
347
+ issues: "factory-issue",
348
+ } as const satisfies Partial<Record<string, ConversationType>>;
349
+
350
+ /** Typed membership used when an omitted `/v2` selector becomes type `none`. */
351
+ export function omittedV2TypedType(kind: string): ConversationType | undefined {
352
+ return OMITTED_V2_TYPED_TYPE[kind as keyof typeof OMITTED_V2_TYPED_TYPE];
220
353
  }
221
354
 
222
- function deploymentsV2Default(
355
+ /**
356
+ * Omitted `/v2` default became type `none` because a declared event sits
357
+ * outside the kind's typed membership. Validate warns; handshake stays
358
+ * silent on omitted selectors (type `none` is always admitted).
359
+ */
360
+ export function omittedV2MembershipDowngrade(
361
+ kind: string,
223
362
  eventTypes?: readonly string[]
224
- ): ContinuationSelector {
363
+ ):
364
+ | { selector: ContinuationSelector; unexpected: readonly string[] }
365
+ | undefined {
225
366
  const events = eventTypes ?? [];
226
- const deploymentEvents = new Set(builtinForType("deployment")?.events ?? []);
227
- if (events.some((event) => !deploymentEvents.has(event))) {
228
- return "deployments.none/v2";
367
+ if (events.length === 0) {
368
+ return undefined;
369
+ }
370
+ const selector = defaultContinuationSelector(kind, "v2", events);
371
+ const parsed = parseContinuationSelector(selector);
372
+ if (parsed === undefined || parsed.type !== "none") {
373
+ return undefined;
374
+ }
375
+ const typedType = omittedV2TypedType(kind);
376
+ const typed = typedType === undefined ? undefined : builtinForType(typedType);
377
+ if (typed === undefined) {
378
+ return undefined;
379
+ }
380
+ const allowed = new Set(typed.events);
381
+ const unexpected = events.filter((event) => !allowed.has(event));
382
+ if (unexpected.length === 0) {
383
+ return undefined;
229
384
  }
230
- return "deployments.deployment/v2";
385
+ return { selector, unexpected };
231
386
  }
232
387
 
233
388
  export function parseContinuationSelector(
@@ -239,7 +394,7 @@ export function parseContinuationSelector(
239
394
  return { selector, ...SELECTOR_FIELDS[selector] };
240
395
  }
241
396
 
242
- export function resolveContinuation(
397
+ function resolveContinuation(
243
398
  raw?: ContinuationIdentity,
244
399
  kind?: string
245
400
  ): ParsedContinuation {
@@ -273,17 +428,17 @@ export function isV2DurableContinuationKey(key: string): boolean {
273
428
  return key.startsWith("cont:") || key.startsWith("evt:");
274
429
  }
275
430
 
276
- export function newEvtKey(): string {
431
+ function newEvtKey(): string {
277
432
  return `evt:${randomBytes(16).toString("hex")}`;
278
433
  }
279
434
 
280
- export function builtinForType(
435
+ function builtinForType(
281
436
  type: ConversationType
282
437
  ): ContinuationBuiltin | undefined {
283
438
  return BUILTINS.find((builtin) => builtin.type === type);
284
439
  }
285
440
 
286
- export function formatConversationKey(
441
+ function formatConversationKey(
287
442
  type: ConversationType,
288
443
  fields: {
289
444
  fullName?: string;
@@ -291,6 +446,8 @@ export function formatConversationKey(
291
446
  channelId?: string;
292
447
  threadTs?: string;
293
448
  deploymentId?: string;
449
+ checkpointName?: string;
450
+ issueName?: string;
294
451
  }
295
452
  ): string {
296
453
  switch (type) {
@@ -300,10 +457,18 @@ export function formatConversationKey(
300
457
  return `github-issue:${fields.fullName}#${fields.number}`;
301
458
  case "origin-pr":
302
459
  return `origin-pr:${fields.fullName}#${fields.number}`;
460
+ case "gitlab-mr":
461
+ return `gitlab-mr:${fields.fullName}!${fields.number}`;
462
+ case "bitbucket-pr":
463
+ return `bitbucket-pr:${fields.fullName}#${fields.number}`;
303
464
  case "thread":
304
465
  return `${fields.channelId}:${fields.threadTs}`;
305
466
  case "deployment":
306
467
  return `deployments:${fields.deploymentId}`;
468
+ case "change-monitor-checkpoint":
469
+ return `change_monitors:${fields.checkpointName}`;
470
+ case "factory-issue":
471
+ return `issues:${fields.issueName}`;
307
472
  }
308
473
  }
309
474
 
@@ -325,9 +490,27 @@ export function mintClaim(claim: ContinuationClaim): string {
325
490
  }
326
491
  return `cont:${formatConversationKey("deployment", resource)}`;
327
492
  }
493
+ case "change-monitor-checkpoint": {
494
+ const resource = claim.resource;
495
+ if (!("checkpointName" in resource)) {
496
+ throw new V2EngineError(
497
+ "v2: change-monitor-checkpoint claim requires checkpointName"
498
+ );
499
+ }
500
+ return `cont:${formatConversationKey("change-monitor-checkpoint", resource)}`;
501
+ }
502
+ case "factory-issue": {
503
+ const resource = claim.resource;
504
+ if (!("issueName" in resource)) {
505
+ throw new V2EngineError("v2: factory-issue claim requires issueName");
506
+ }
507
+ return `cont:${formatConversationKey("factory-issue", resource)}`;
508
+ }
328
509
  case "pr":
329
510
  case "issue":
330
- case "origin-pr": {
511
+ case "origin-pr":
512
+ case "gitlab-mr":
513
+ case "bitbucket-pr": {
331
514
  const resource = claim.resource;
332
515
  const fullName =
333
516
  "fullName" in resource
@@ -341,8 +524,15 @@ export function mintClaim(claim: ContinuationClaim): string {
341
524
  `v2: ${claim.type} claim requires repository and number`
342
525
  );
343
526
  }
527
+ // GitLab paths and Bitbucket project keys arrive in API-native casing;
528
+ // the webhook extractors lowercase them, so the claim must too or the
529
+ // two mint different keys for the same MR / PR.
530
+ const caseFolded =
531
+ claim.type === "gitlab-mr" || claim.type === "bitbucket-pr"
532
+ ? fullName.toLowerCase()
533
+ : fullName;
344
534
  return `cont:${formatConversationKey(claim.type, {
345
- fullName,
535
+ fullName: caseFolded,
346
536
  number,
347
537
  })}`;
348
538
  }
@@ -421,8 +611,26 @@ export function extractContinuation(
421
611
  return extractSlack(payload);
422
612
  case "origin-pr":
423
613
  return extractOrigin(payload);
614
+ case "gitlab-mr":
615
+ return extractGitlab(eventName, payload);
616
+ case "bitbucket-pr":
617
+ return extractBitbucket(payload);
424
618
  case "deployment":
425
- return extractDeployment(payload);
619
+ return extractNamedResource("deployment", "deploymentId", payload);
620
+ case "change-monitor-checkpoint":
621
+ return extractNamedResource(
622
+ "change-monitor-checkpoint",
623
+ "checkpointName",
624
+ payload,
625
+ "checkpoint"
626
+ );
627
+ case "factory-issue":
628
+ return extractNamedResource(
629
+ "factory-issue",
630
+ "issueName",
631
+ payload,
632
+ "issue"
633
+ );
426
634
  }
427
635
  }
428
636
 
@@ -629,13 +837,108 @@ function originExtractRecord(
629
837
  return record;
630
838
  }
631
839
 
632
- function extractDeployment(payload: unknown): string | undefined {
840
+ /**
841
+ * GitLab merge request identity: `project.path_with_namespace` (nested
842
+ * groups keep their slashes; lowercased like the scope key) plus the MR
843
+ * `iid`. `merge_request` reads `object_attributes.iid`; `note` binds only
844
+ * MR notes (`noteable_type: "MergeRequest"`); `pipeline` binds only when
845
+ * the payload carries a `merge_request`.
846
+ */
847
+ function extractGitlab(
848
+ eventName: string,
849
+ payload: unknown
850
+ ): string | undefined {
851
+ const record = asRecord(payload);
852
+ if (record === undefined) {
853
+ return undefined;
854
+ }
855
+ const fullName = nonEmpty(
856
+ asRecord(record.project)?.path_with_namespace
857
+ )?.toLowerCase();
858
+ if (fullName === undefined) {
859
+ return undefined;
860
+ }
861
+ let number: number | undefined;
862
+ switch (eventName) {
863
+ case "merge_request":
864
+ number = positiveInt(asRecord(record.object_attributes)?.iid);
865
+ break;
866
+ case "note":
867
+ if (
868
+ asRecord(record.object_attributes)?.noteable_type !== "MergeRequest"
869
+ ) {
870
+ return undefined;
871
+ }
872
+ number = positiveInt(asRecord(record.merge_request)?.iid);
873
+ break;
874
+ case "pipeline":
875
+ number = positiveInt(asRecord(record.merge_request)?.iid);
876
+ break;
877
+ default:
878
+ return undefined;
879
+ }
880
+ if (number === undefined) {
881
+ return undefined;
882
+ }
883
+ return `cont:${formatConversationKey("gitlab-mr", { fullName, number })}`;
884
+ }
885
+
886
+ /**
887
+ * Bitbucket pull request identity from either dialect. Cloud payloads carry
888
+ * `repository.full_name` + `pullrequest.id`; Data Center payloads carry
889
+ * `pullRequest.id` and the repo under `pullRequest.toRef.repository`
890
+ * (`project.key/slug`). Lowercased so a Cloud/DC pair for one logical PR
891
+ * shares a key.
892
+ */
893
+ function extractBitbucket(payload: unknown): string | undefined {
894
+ const record = asRecord(payload);
895
+ if (record === undefined) {
896
+ return undefined;
897
+ }
898
+ const pullRequest =
899
+ asRecord(record.pullrequest) ?? asRecord(record.pullRequest);
900
+ const number = positiveInt(pullRequest?.id);
901
+ const fullName = bitbucketFullName(
902
+ asRecord(record.repository) ??
903
+ asRecord(asRecord(pullRequest?.toRef)?.repository)
904
+ );
905
+ if (number === undefined || fullName === undefined) {
906
+ return undefined;
907
+ }
908
+ return `cont:${formatConversationKey("bitbucket-pr", { fullName, number })}`;
909
+ }
910
+
911
+ function bitbucketFullName(
912
+ repository: Record<string, unknown> | undefined
913
+ ): string | undefined {
914
+ if (repository === undefined) {
915
+ return undefined;
916
+ }
917
+ const cloud = nonEmpty(repository.full_name);
918
+ if (cloud !== undefined) {
919
+ return cloud.toLowerCase();
920
+ }
921
+ const projectKey = nonEmpty(asRecord(repository.project)?.key);
922
+ const slug = nonEmpty(repository.slug);
923
+ if (projectKey === undefined || slug === undefined) {
924
+ return undefined;
925
+ }
926
+ return `${projectKey}/${slug}`.toLowerCase();
927
+ }
928
+
929
+ function extractNamedResource(
930
+ type: "deployment" | "change-monitor-checkpoint" | "factory-issue",
931
+ field: "deploymentId" | "checkpointName" | "issueName",
932
+ payload: unknown,
933
+ wrapper?: "checkpoint" | "issue"
934
+ ): string | undefined {
633
935
  const record = asRecord(payload);
634
- const deploymentId = nonEmpty(record?.deploymentId);
635
- if (deploymentId === undefined) {
936
+ const source = wrapper === undefined ? record : asRecord(record?.[wrapper]);
937
+ const value = nonEmpty(source?.[wrapper === undefined ? field : "name"]);
938
+ if (value === undefined) {
636
939
  return undefined;
637
940
  }
638
- return `cont:${formatConversationKey("deployment", { deploymentId })}`;
941
+ return `cont:${formatConversationKey(type, { [field]: value })}`;
639
942
  }
640
943
 
641
944
  function githubFullName(payload: Record<string, unknown>): string | undefined {
@@ -395,9 +395,10 @@ export function selectConversationMirror(input: {
395
395
  sink: cursorHostedFiles({
396
396
  resolveStoreSourceId: () =>
397
397
  hosting.resolveStoreIds().frameworkStoreSourceId,
398
- // Full chain (env → key file → stored login): frozen engines listen
399
- // unsigned and bind CURSOR_API_KEY_FILE at task time, after this sink
400
- // is constructed.
398
+ // Full chain (env → key file → stored login), resolved lazily: frozen
399
+ // engines listen unsigned and only gain a credential at task time,
400
+ // after this sink is constructed. Hosted deliveries have consumed the
401
+ // bind file into CURSOR_API_KEY by then, so this resolves from env.
401
402
  resolveApiKey: () => resolveApiKeySync()?.apiKey,
402
403
  }),
403
404
  agentName: input.project.name,
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Types for `convertWorkflow` — the pure automation → agentsdk project
3
- * converter behind `agent-serve convert-automation`.
3
+ * converter behind `agent-sdk convert-automation`.
4
4
  *
5
5
  * The workflow arrives as generic proto3 JSON (lowerCamelCase field names,
6
6
  * enum value names as strings) produced by the backend export endpoint
@@ -28,6 +28,7 @@ import type {
28
28
  } from "../../types.js";
29
29
  import { isCursorAccountTransport } from "../../types.js";
30
30
  import { probeConnectorAuthUrls } from "../cursor-account-mcp-auth.js";
31
+ import { describeError } from "../describe-error.js";
31
32
  import { LOG_PREFIX } from "../distribution.js";
32
33
  import { handleStatelessMcpRequest } from "../mcp-endpoint.js";
33
34
  import { isLoopbackAddress } from "../net.js";
@@ -560,10 +561,6 @@ function trimTrailingSlash(url: string): string {
560
561
  return url.endsWith("/") ? url.slice(0, -1) : url;
561
562
  }
562
563
 
563
- function describeError(error: unknown): string {
564
- return error instanceof Error ? error.message : String(error);
565
- }
566
-
567
564
  export interface CursorAccountMcpWarningServer {
568
565
  serverIdentifier: string;
569
566
  status: string;
@@ -17,6 +17,8 @@
17
17
  import { randomUUID } from "node:crypto";
18
18
  import { z } from "zod";
19
19
  import type { McpToolAnnotations } from "../../types.js";
20
+ import { describeError } from "../describe-error.js";
21
+ import { CLI_COMMAND_NAME as CLI } from "../distribution.js";
20
22
  import { boundedToolAnnotations } from "../mcp-host.js";
21
23
  import {
22
24
  CURSOR_SESSION_EXCHANGE_PATH,
@@ -300,9 +302,10 @@ export interface CursorBackendClientOptions {
300
302
  backendUrl: string;
301
303
  apiKey: string;
302
304
  /**
303
- * Re-read the key on each authenticated call. Hosted freeze listens
304
- * unsigned and the binder drops the key after restore; a constructor-frozen
305
- * key would miss that bind.
305
+ * Re-resolve the key on each authenticated call. Hosted freeze listens
306
+ * unsigned and only gains a credential at task time (hosted deliveries
307
+ * consume the bind file into `CURSOR_API_KEY` before authored work); a
308
+ * constructor-frozen key would miss that bind.
306
309
  */
307
310
  getApiKey?: () => string;
308
311
  logger?: (line: string) => void;
@@ -607,7 +610,7 @@ export class CursorBackendClient {
607
610
  }
608
611
  throw new CursorBackendError(
609
612
  error.status === 401
610
- ? "The Cursor API key was rejected. Run `agent-serve login` again or update CURSOR_API_KEY."
613
+ ? `The Cursor API key was rejected. Run \`${CLI} login\` again or update CURSOR_API_KEY.`
611
614
  : `Cursor API key exchange failed (${error.status}).`,
612
615
  error.status
613
616
  );
@@ -623,7 +626,7 @@ export class CursorBackendClient {
623
626
 
624
627
  /**
625
628
  * Mint a named user API key from a short-lived login session token. Used
626
- * exactly once per `agent-serve login`; the session token is then discarded.
629
+ * exactly once per `agent-sdk login`; the session token is then discarded.
627
630
  */
628
631
  export async function createUserApiKeyWithSessionToken(args: {
629
632
  backendUrl: string;
@@ -867,7 +870,7 @@ function describeGithubTokenHttpFailure(
867
870
  if (status === 401) {
868
871
  return `The Cursor API key was rejected${
869
872
  detail === undefined ? "" : `: ${detail}`
870
- }. Run \`agent-serve login\` again or update CURSOR_API_KEY.`;
873
+ }. Run \`${CLI} login\` again or update CURSOR_API_KEY.`;
871
874
  }
872
875
  if (detail !== undefined) {
873
876
  return detail;
@@ -899,10 +902,6 @@ function retryAfterMsFromResponse(response: Response): number | undefined {
899
902
  return Math.min(retryAfter * 1000, MAX_GITHUB_TOKEN_RETRY_AFTER_MS);
900
903
  }
901
904
 
902
- function describeError(error: unknown): string {
903
- return error instanceof Error ? error.message : String(error);
904
- }
905
-
906
905
  /** Release undici/fetch connection slots on responses we will not parse. */
907
906
  async function drainResponseBody(response: Response): Promise<void> {
908
907
  try {