@cursor/july 0.1.102 → 0.1.103

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 (715) 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/deployments/deployments-channel.d.ts +22 -14
  44. package/dist/channels/deployments/deployments-channel.d.ts.map +1 -1
  45. package/dist/channels/deployments/deployments-channel.js +25 -27
  46. package/dist/channels/deployments/types.d.ts +12 -6
  47. package/dist/channels/deployments/types.d.ts.map +1 -1
  48. package/dist/channels/github/binding.d.ts +6 -0
  49. package/dist/channels/github/binding.d.ts.map +1 -1
  50. package/dist/channels/github/binding.js +3 -3
  51. package/dist/channels/github/cursor-account.d.ts +7 -3
  52. package/dist/channels/github/cursor-account.d.ts.map +1 -1
  53. package/dist/channels/github/cursor-account.js +10 -6
  54. package/dist/channels/github/events.d.ts +1 -1
  55. package/dist/channels/github/events.js +1 -1
  56. package/dist/channels/github/forward.d.ts +1 -1
  57. package/dist/channels/github/forward.d.ts.map +1 -1
  58. package/dist/channels/github/forward.js +3 -2
  59. package/dist/channels/github/github-channel.d.ts +29 -39
  60. package/dist/channels/github/github-channel.d.ts.map +1 -1
  61. package/dist/channels/github/github-channel.js +68 -101
  62. package/dist/channels/github/replay.d.ts +1 -1
  63. package/dist/channels/github/replay.js +1 -1
  64. package/dist/channels/github/state.d.ts +2 -0
  65. package/dist/channels/github/state.d.ts.map +1 -1
  66. package/dist/channels/github/state.js +14 -11
  67. package/dist/channels/github/types.d.ts +2 -4
  68. package/dist/channels/github/types.d.ts.map +1 -1
  69. package/dist/channels/gitlab/api.d.ts +91 -0
  70. package/dist/channels/gitlab/api.d.ts.map +1 -0
  71. package/dist/channels/gitlab/api.js +150 -0
  72. package/dist/channels/gitlab/binding.d.ts +58 -0
  73. package/dist/channels/gitlab/binding.d.ts.map +1 -0
  74. package/dist/channels/gitlab/binding.js +139 -0
  75. package/dist/channels/gitlab/checks.d.ts +110 -0
  76. package/dist/channels/gitlab/checks.d.ts.map +1 -0
  77. package/dist/channels/gitlab/checks.js +126 -0
  78. package/dist/channels/gitlab/cursor-account.d.ts +36 -0
  79. package/dist/channels/gitlab/cursor-account.d.ts.map +1 -0
  80. package/dist/channels/gitlab/cursor-account.js +65 -0
  81. package/dist/channels/gitlab/defaults.d.ts +25 -0
  82. package/dist/channels/gitlab/defaults.d.ts.map +1 -0
  83. package/dist/channels/gitlab/defaults.js +60 -0
  84. package/dist/channels/gitlab/events.d.ts +12 -0
  85. package/dist/channels/gitlab/events.d.ts.map +1 -0
  86. package/dist/channels/gitlab/events.js +28 -0
  87. package/dist/channels/gitlab/gitlab-channel.d.ts +33 -0
  88. package/dist/channels/gitlab/gitlab-channel.d.ts.map +1 -0
  89. package/dist/channels/gitlab/gitlab-channel.js +120 -0
  90. package/dist/channels/gitlab/gitlab-webhook.d.ts +45 -0
  91. package/dist/channels/gitlab/gitlab-webhook.d.ts.map +1 -0
  92. package/dist/channels/gitlab/gitlab-webhook.js +397 -0
  93. package/dist/channels/gitlab/index.d.ts +31 -0
  94. package/dist/channels/gitlab/index.d.ts.map +1 -0
  95. package/dist/channels/gitlab/index.js +30 -0
  96. package/dist/channels/gitlab/replay.d.ts +105 -0
  97. package/dist/channels/gitlab/replay.d.ts.map +1 -0
  98. package/dist/channels/gitlab/replay.js +206 -0
  99. package/dist/channels/gitlab/state.d.ts +33 -0
  100. package/dist/channels/gitlab/state.d.ts.map +1 -0
  101. package/dist/channels/gitlab/state.js +23 -0
  102. package/dist/channels/gitlab/types.d.ts +214 -0
  103. package/dist/channels/gitlab/types.d.ts.map +1 -0
  104. package/dist/channels/gitlab/types.js +1 -0
  105. package/dist/channels/origin/api.d.ts.map +1 -1
  106. package/dist/channels/origin/api.js +4 -2
  107. package/dist/channels/origin/origin-channel.d.ts +4 -9
  108. package/dist/channels/origin/origin-channel.d.ts.map +1 -1
  109. package/dist/channels/origin/origin-channel.js +8 -48
  110. package/dist/channels/origin/types.d.ts +20 -2
  111. package/dist/channels/origin/types.d.ts.map +1 -1
  112. package/dist/channels/slack/eval-directive.d.ts.map +1 -1
  113. package/dist/channels/slack/eval-directive.js +1 -7
  114. package/dist/channels/slack/init.d.ts.map +1 -1
  115. package/dist/channels/slack/init.js +3 -3
  116. package/dist/channels/slack/setup.d.ts +1 -1
  117. package/dist/channels/slack/setup.d.ts.map +1 -1
  118. package/dist/channels/slack/setup.js +6 -13
  119. package/dist/channels/slack/types.d.ts +1 -1
  120. package/dist/channels/slack/types.d.ts.map +1 -1
  121. package/dist/channels.d.ts +1 -1
  122. package/dist/channels.d.ts.map +1 -1
  123. package/dist/client.d.ts +1 -1
  124. package/dist/client.js +1 -1
  125. package/dist/connections.d.ts +1 -1
  126. package/dist/connections.js +1 -1
  127. package/dist/docs/404.html +2 -2
  128. package/dist/docs/ab.html +4 -4
  129. package/dist/docs/assets/{app.CLA03RCz.js → app.DW9pXkpL.js} +1 -1
  130. package/dist/docs/assets/chunks/@localSearchIndexroot.nrl1ifBq.js +1 -0
  131. package/dist/docs/assets/chunks/{VPLocalSearchBox.ifxv-cJV.js → VPLocalSearchBox.CdEIUwDg.js} +1 -1
  132. package/dist/docs/assets/chunks/{theme.DWCwM6p-.js → theme.YZMHgPgg.js} +2 -2
  133. package/dist/docs/assets/concepts.md.DgEcZOfT.js +1 -0
  134. package/dist/docs/assets/{concepts.md.rPzW2HZN.lean.js → concepts.md.DgEcZOfT.lean.js} +1 -1
  135. package/dist/docs/assets/{evals.md.CPzDAwoH.js → evals.md.CbMoebP1.js} +1 -1
  136. package/dist/docs/assets/guides_cloud-agents.md.DS8RIjwx.js +9 -0
  137. package/dist/docs/assets/{guides_github.md.BtPr9GaP.js → guides_github.md.DKYiT9do.js} +1 -1
  138. package/dist/docs/assets/{guides_opentelemetry.md.BVTXDCRg.js → guides_opentelemetry.md.COh9jFVg.js} +7 -8
  139. package/dist/docs/assets/{guides_opentelemetry.md.BVTXDCRg.lean.js → guides_opentelemetry.md.COh9jFVg.lean.js} +1 -1
  140. package/dist/docs/assets/{index.md.Kiht7ell.js → index.md.D75GWhPl.js} +1 -1
  141. package/dist/docs/assets/{reference_agent-config.md.BHeYMgme.js → reference_agent-config.md.CHNpiyp4.js} +3 -3
  142. package/dist/docs/assets/{reference_channels.md.Cd2f2iyV.js → reference_channels.md.Dz8Cnudp.js} +2 -2
  143. package/dist/docs/assets/{reference_channels.md.Cd2f2iyV.lean.js → reference_channels.md.Dz8Cnudp.lean.js} +1 -1
  144. package/dist/docs/assets/{reference_cli.md.DfoeyvL0.js → reference_cli.md.CJNc_xYK.js} +1 -1
  145. package/dist/docs/assets/{reference_extensions.md.9WQMZe1l.js → reference_extensions.md.DykHW3qL.js} +11 -5
  146. package/dist/docs/assets/reference_extensions.md.DykHW3qL.lean.js +1 -0
  147. package/dist/docs/assets/reference_hooks.md.Ddt5DdgJ.js +73 -0
  148. package/dist/docs/assets/{reference_hooks.md.a8BJxMR5.lean.js → reference_hooks.md.Ddt5DdgJ.lean.js} +1 -1
  149. package/dist/docs/assets/{reference_playground.md.DnX5nL-B.js → reference_playground.md.4myJPxrf.js} +1 -1
  150. package/dist/docs/assets/{reference_project-layout.md.CA6QP6Lw.js → reference_project-layout.md.DuBu9a96.js} +2 -2
  151. package/dist/docs/assets/reference_result.md.BK5SxDrf.js +19 -0
  152. package/dist/docs/assets/reference_result.md.BK5SxDrf.lean.js +1 -0
  153. package/dist/docs/assets/{reference_sessions.md.NxFP_CAC.js → reference_sessions.md.CueyOHSL.js} +1 -1
  154. package/dist/docs/assets/{reference_sessions.md.NxFP_CAC.lean.js → reference_sessions.md.CueyOHSL.lean.js} +1 -1
  155. package/dist/docs/assets/{reference_tools.md.B1up2r9W.js → reference_tools.md.aGrn99hP.js} +1 -1
  156. package/dist/docs/assets/skills_framework-map.md.haibFyoB.js +1 -0
  157. package/dist/docs/assets/{skills_otel.md.CgiZryR3.js → skills_otel.md.CqhobH3B.js} +3 -3
  158. package/dist/docs/assets/{skills_otel.md.CgiZryR3.lean.js → skills_otel.md.CqhobH3B.lean.js} +1 -1
  159. package/dist/docs/assets/{templates_pr-autofixer.md.x5zl6-GT.js → templates_pr-autofixer.md.Bds_XWcV.js} +2 -2
  160. package/dist/docs/assets/{templates_pr-autofixer.md.x5zl6-GT.lean.js → templates_pr-autofixer.md.Bds_XWcV.lean.js} +1 -1
  161. package/dist/docs/building-with-agents.html +4 -4
  162. package/dist/docs/concepts.html +5 -5
  163. package/dist/docs/concepts.md +2 -4
  164. package/dist/docs/deployment.html +4 -4
  165. package/dist/docs/design/runtime-abstraction.md +2 -3
  166. package/dist/docs/evals.html +6 -6
  167. package/dist/docs/evals.md +9 -7
  168. package/dist/docs/guides/agent-to-agent.html +4 -4
  169. package/dist/docs/guides/cloud-agents.html +6 -6
  170. package/dist/docs/guides/cloud-agents.md +4 -6
  171. package/dist/docs/guides/convert-automation.html +4 -4
  172. package/dist/docs/guides/github.html +6 -6
  173. package/dist/docs/guides/github.md +0 -1
  174. package/dist/docs/guides/human-in-the-loop.html +4 -4
  175. package/dist/docs/guides/mcp-oauth.html +5 -5
  176. package/dist/docs/guides/opentelemetry.html +10 -11
  177. package/dist/docs/guides/opentelemetry.md +41 -17
  178. package/dist/docs/guides/slack.html +4 -4
  179. package/dist/docs/guides/webhooks.html +4 -4
  180. package/dist/docs/hashmap.json +1 -1
  181. package/dist/docs/hillclimbing.html +4 -4
  182. package/dist/docs/index.html +6 -6
  183. package/dist/docs/index.md +2 -2
  184. package/dist/docs/llms-full.txt +501 -262
  185. package/dist/docs/llms.txt +2 -2
  186. package/dist/docs/quickstart.html +4 -4
  187. package/dist/docs/reference/agent-config.html +8 -8
  188. package/dist/docs/reference/agent-config.md +6 -10
  189. package/dist/docs/reference/artifacts.html +5 -5
  190. package/dist/docs/reference/channels.html +6 -6
  191. package/dist/docs/reference/channels.md +18 -8
  192. package/dist/docs/reference/cli.html +5 -5
  193. package/dist/docs/reference/cli.md +3 -4
  194. package/dist/docs/reference/connections.html +4 -4
  195. package/dist/docs/reference/extensions.html +16 -10
  196. package/dist/docs/reference/extensions.md +86 -22
  197. package/dist/docs/reference/hooks.html +69 -10
  198. package/dist/docs/reference/hooks.md +215 -46
  199. package/dist/docs/reference/http-api.html +4 -4
  200. package/dist/docs/reference/instructions.html +4 -4
  201. package/dist/docs/reference/playground.html +5 -5
  202. package/dist/docs/reference/playground.md +3 -0
  203. package/dist/docs/reference/project-layout.html +6 -6
  204. package/dist/docs/reference/project-layout.md +2 -1
  205. package/dist/docs/reference/prompt.html +4 -4
  206. package/dist/docs/reference/result.html +45 -0
  207. package/dist/docs/reference/result.md +89 -0
  208. package/dist/docs/reference/schedules.html +4 -4
  209. package/dist/docs/reference/sessions.html +5 -5
  210. package/dist/docs/reference/sessions.md +3 -1
  211. package/dist/docs/reference/skills.html +4 -4
  212. package/dist/docs/reference/subagents.html +4 -4
  213. package/dist/docs/reference/tools.html +5 -5
  214. package/dist/docs/reference/tools.md +1 -2
  215. package/dist/docs/scaffolding-agents.html +4 -4
  216. package/dist/docs/skills/ab.html +4 -4
  217. package/dist/docs/skills/create-agent.html +4 -4
  218. package/dist/docs/skills/debug.html +4 -4
  219. package/dist/docs/skills/evals.html +4 -4
  220. package/dist/docs/skills/framework-map.html +5 -5
  221. package/dist/docs/skills/framework-map.md +3 -1
  222. package/dist/docs/skills/github.html +4 -4
  223. package/dist/docs/skills/hillclimb.html +4 -4
  224. package/dist/docs/skills/index.html +4 -4
  225. package/dist/docs/skills/mcp-auth.html +4 -4
  226. package/dist/docs/skills/otel.html +7 -7
  227. package/dist/docs/skills/otel.md +8 -3
  228. package/dist/docs/skills/setup-slack.html +4 -4
  229. package/dist/docs/storage.html +4 -4
  230. package/dist/docs/templates/agentic-owners.html +4 -4
  231. package/dist/docs/templates/agents-md.html +4 -4
  232. package/dist/docs/templates/code-wiki.html +4 -4
  233. package/dist/docs/templates/demo.html +4 -4
  234. package/dist/docs/templates/pr-autofixer.html +6 -6
  235. package/dist/docs/templates/pr-autofixer.md +0 -3
  236. package/dist/docs/templates/security-help.html +4 -4
  237. package/dist/docs/templates/security-reviewer.html +4 -4
  238. package/dist/docs/templates/triage.html +4 -4
  239. package/dist/docs/troubleshooting.html +4 -4
  240. package/dist/evals.d.ts +1 -1
  241. package/dist/evals.d.ts.map +1 -1
  242. package/dist/extensions.d.ts +20 -7
  243. package/dist/extensions.d.ts.map +1 -1
  244. package/dist/extensions.js +36 -5
  245. package/dist/files.d.ts +16 -3
  246. package/dist/files.d.ts.map +1 -1
  247. package/dist/files.js +16 -3
  248. package/dist/index.d.ts +4 -4
  249. package/dist/index.d.ts.map +1 -1
  250. package/dist/index.js +3 -3
  251. package/dist/internal/ab-snapshot.d.ts.map +1 -1
  252. package/dist/internal/ab-snapshot.js +0 -1
  253. package/dist/internal/advertise-tools.d.ts.map +1 -1
  254. package/dist/internal/advertise-tools.js +1 -3
  255. package/dist/internal/authored-alias-hooks.d.ts +4 -13
  256. package/dist/internal/authored-alias-hooks.d.ts.map +1 -1
  257. package/dist/internal/authored-alias-hooks.js +4 -20
  258. package/dist/internal/authored-loaders.d.ts +2 -3
  259. package/dist/internal/authored-loaders.d.ts.map +1 -1
  260. package/dist/internal/authored-loaders.js +6 -20
  261. package/dist/internal/channel-dispatch.d.ts +43 -0
  262. package/dist/internal/channel-dispatch.d.ts.map +1 -0
  263. package/dist/internal/channel-dispatch.js +77 -0
  264. package/dist/internal/chat-client.d.ts +1 -1
  265. package/dist/internal/chat-client.js +1 -1
  266. package/dist/internal/cli-ax.d.ts +5 -5
  267. package/dist/internal/cli-ax.d.ts.map +1 -1
  268. package/dist/internal/cli-ax.js +5 -5
  269. package/dist/internal/cli-bitbucket.d.ts +33 -0
  270. package/dist/internal/cli-bitbucket.d.ts.map +1 -0
  271. package/dist/internal/cli-bitbucket.js +359 -0
  272. package/dist/internal/cli-convert-automation.d.ts +1 -1
  273. package/dist/internal/cli-convert-automation.js +2 -2
  274. package/dist/internal/cli-cursor.d.ts +1 -1
  275. package/dist/internal/cli-cursor.d.ts.map +1 -1
  276. package/dist/internal/cli-cursor.js +2 -4
  277. package/dist/internal/cli-deploy.d.ts.map +1 -1
  278. package/dist/internal/cli-deploy.js +2 -6
  279. package/dist/internal/cli-github.d.ts +1 -1
  280. package/dist/internal/cli-github.js +3 -3
  281. package/dist/internal/cli-gitlab.d.ts +37 -0
  282. package/dist/internal/cli-gitlab.d.ts.map +1 -0
  283. package/dist/internal/cli-gitlab.js +380 -0
  284. package/dist/internal/cli-mcp.d.ts.map +1 -1
  285. package/dist/internal/cli-mcp.js +2 -6
  286. package/dist/internal/cli-slack.d.ts +1 -1
  287. package/dist/internal/cli-slack.d.ts.map +1 -1
  288. package/dist/internal/cli-slack.js +2 -4
  289. package/dist/internal/continuation-channel.d.ts +14 -0
  290. package/dist/internal/continuation-channel.d.ts.map +1 -1
  291. package/dist/internal/continuation-channel.js +56 -3
  292. package/dist/internal/continuation-identity.d.ts +14 -15
  293. package/dist/internal/continuation-identity.d.ts.map +1 -1
  294. package/dist/internal/continuation-identity.js +182 -7
  295. package/dist/internal/conversation-mirror.d.ts.map +1 -1
  296. package/dist/internal/conversation-mirror.js +4 -3
  297. package/dist/internal/convert-automation/types.d.ts +1 -1
  298. package/dist/internal/convert-automation/types.js +1 -1
  299. package/dist/internal/cursor/account-mcp.d.ts.map +1 -1
  300. package/dist/internal/cursor/account-mcp.js +1 -3
  301. package/dist/internal/cursor/backend-client.d.ts +5 -4
  302. package/dist/internal/cursor/backend-client.d.ts.map +1 -1
  303. package/dist/internal/cursor/backend-client.js +5 -6
  304. package/dist/internal/cursor/bound-secret-file.d.ts +56 -0
  305. package/dist/internal/cursor/bound-secret-file.d.ts.map +1 -0
  306. package/dist/internal/cursor/bound-secret-file.js +88 -0
  307. package/dist/internal/cursor/credentials.d.ts +39 -5
  308. package/dist/internal/cursor/credentials.d.ts.map +1 -1
  309. package/dist/internal/cursor/credentials.js +58 -8
  310. package/dist/internal/cursor/hosted-bound-secrets.d.ts +41 -0
  311. package/dist/internal/cursor/hosted-bound-secrets.d.ts.map +1 -0
  312. package/dist/internal/cursor/hosted-bound-secrets.js +54 -0
  313. package/dist/internal/cursor/hosted-deployment-secrets.d.ts +19 -5
  314. package/dist/internal/cursor/hosted-deployment-secrets.d.ts.map +1 -1
  315. package/dist/internal/cursor/hosted-deployment-secrets.js +29 -9
  316. package/dist/internal/cursor/hosted-store-secrets.d.ts +1 -1
  317. package/dist/internal/cursor/hosted-store-secrets.js +1 -1
  318. package/dist/internal/cursor-account-mcp-auth.d.ts.map +1 -1
  319. package/dist/internal/cursor-account-mcp-auth.js +2 -4
  320. package/dist/internal/cursor-deployment-relay.d.ts +6 -2
  321. package/dist/internal/cursor-deployment-relay.d.ts.map +1 -1
  322. package/dist/internal/cursor-deployment-relay.js +13 -9
  323. package/dist/internal/deploy-manifest.d.ts +1 -1
  324. package/dist/internal/deploy-manifest.d.ts.map +1 -1
  325. package/dist/internal/deploy-manifest.js +1 -1
  326. package/dist/internal/discovery/ab.d.ts +1 -1
  327. package/dist/internal/discovery/ab.d.ts.map +1 -1
  328. package/dist/internal/discovery/ab.js +21 -9
  329. package/dist/internal/discovery/agent.d.ts +6 -1
  330. package/dist/internal/discovery/agent.d.ts.map +1 -1
  331. package/dist/internal/discovery/agent.js +65 -116
  332. package/dist/internal/discovery/channels.d.ts +1 -1
  333. package/dist/internal/discovery/channels.d.ts.map +1 -1
  334. package/dist/internal/discovery/channels.js +14 -14
  335. package/dist/internal/discovery/connections.d.ts +1 -5
  336. package/dist/internal/discovery/connections.d.ts.map +1 -1
  337. package/dist/internal/discovery/connections.js +30 -44
  338. package/dist/internal/discovery/cursor-plugin.d.ts.map +1 -1
  339. package/dist/internal/discovery/cursor-plugin.js +1 -3
  340. package/dist/internal/discovery/extension-overlay.d.ts +32 -0
  341. package/dist/internal/discovery/extension-overlay.d.ts.map +1 -0
  342. package/dist/internal/discovery/extension-overlay.js +191 -0
  343. package/dist/internal/discovery/extensions.d.ts +11 -2
  344. package/dist/internal/discovery/extensions.d.ts.map +1 -1
  345. package/dist/internal/discovery/extensions.js +211 -74
  346. package/dist/internal/discovery/hooks.d.ts +1 -1
  347. package/dist/internal/discovery/hooks.d.ts.map +1 -1
  348. package/dist/internal/discovery/hooks.js +15 -2
  349. package/dist/internal/discovery/info.d.ts.map +1 -1
  350. package/dist/internal/discovery/info.js +7 -1
  351. package/dist/internal/discovery/modules.d.ts.map +1 -1
  352. package/dist/internal/discovery/modules.js +8 -2
  353. package/dist/internal/discovery/names.d.ts +1 -1
  354. package/dist/internal/discovery/names.d.ts.map +1 -1
  355. package/dist/internal/discovery/names.js +1 -0
  356. package/dist/internal/discovery/project.d.ts +0 -2
  357. package/dist/internal/discovery/project.d.ts.map +1 -1
  358. package/dist/internal/discovery/project.js +64 -10
  359. package/dist/internal/discovery/runtime.d.ts.map +1 -1
  360. package/dist/internal/discovery/runtime.js +1 -2
  361. package/dist/internal/discovery/schedules.d.ts +1 -1
  362. package/dist/internal/discovery/schedules.d.ts.map +1 -1
  363. package/dist/internal/discovery/schedules.js +23 -2
  364. package/dist/internal/discovery/services.d.ts +6 -2
  365. package/dist/internal/discovery/services.d.ts.map +1 -1
  366. package/dist/internal/discovery/services.js +31 -1
  367. package/dist/internal/discovery/skills.d.ts +1 -6
  368. package/dist/internal/discovery/skills.d.ts.map +1 -1
  369. package/dist/internal/discovery/skills.js +8 -3
  370. package/dist/internal/discovery/subagent.d.ts +3 -0
  371. package/dist/internal/discovery/subagent.d.ts.map +1 -1
  372. package/dist/internal/discovery/subagent.js +109 -0
  373. package/dist/internal/discovery.d.ts +1 -2
  374. package/dist/internal/discovery.d.ts.map +1 -1
  375. package/dist/internal/discovery.js +1 -2
  376. package/dist/internal/distribution.d.ts +10 -27
  377. package/dist/internal/distribution.d.ts.map +1 -1
  378. package/dist/internal/distribution.js +25 -73
  379. package/dist/internal/docs-site.js +1 -1
  380. package/dist/internal/eval-run-store.d.ts +0 -1
  381. package/dist/internal/eval-run-store.d.ts.map +1 -1
  382. package/dist/internal/eval-runner.d.ts.map +1 -1
  383. package/dist/internal/framework-file-storage.d.ts +8 -0
  384. package/dist/internal/framework-file-storage.d.ts.map +1 -1
  385. package/dist/internal/framework-file-storage.js +8 -8
  386. package/dist/internal/github-fanout.d.ts +1 -1
  387. package/dist/internal/github-fanout.js +1 -1
  388. package/dist/internal/guest-network.d.ts +101 -0
  389. package/dist/internal/guest-network.d.ts.map +1 -0
  390. package/dist/internal/guest-network.js +304 -0
  391. package/dist/internal/host-otel.d.ts +3 -3
  392. package/dist/internal/host-otel.d.ts.map +1 -1
  393. package/dist/internal/host-otel.js +8 -4
  394. package/dist/internal/hosted-admission-adapter.d.ts +8 -7
  395. package/dist/internal/hosted-admission-adapter.d.ts.map +1 -1
  396. package/dist/internal/hosted-delivery-protocol.d.ts +6 -0
  397. package/dist/internal/hosted-delivery-protocol.d.ts.map +1 -1
  398. package/dist/internal/hosted-delivery-protocol.js +18 -5
  399. package/dist/internal/hosted-delivery.d.ts +18 -0
  400. package/dist/internal/hosted-delivery.d.ts.map +1 -1
  401. package/dist/internal/hosted-delivery.js +248 -118
  402. package/dist/internal/http-channel.d.ts.map +1 -1
  403. package/dist/internal/http-channel.js +1 -3
  404. package/dist/internal/init-interview.d.ts.map +1 -1
  405. package/dist/internal/init-interview.js +1 -3
  406. package/dist/internal/init-project.d.ts +2 -2
  407. package/dist/internal/init-project.js +2 -2
  408. package/dist/internal/inline-stdio-define-stub.d.ts +1 -1
  409. package/dist/internal/inline-stdio-define-stub.d.ts.map +1 -1
  410. package/dist/internal/inline-stdio-define-stub.js +1 -1
  411. package/dist/internal/is-record.d.ts +2 -0
  412. package/dist/internal/is-record.d.ts.map +1 -0
  413. package/dist/internal/is-record.js +3 -0
  414. package/dist/internal/json-schema.d.ts.map +1 -1
  415. package/dist/internal/json-schema.js +18 -10
  416. package/dist/internal/local-control-plane.d.ts +1 -2
  417. package/dist/internal/local-control-plane.d.ts.map +1 -1
  418. package/dist/internal/local-control-plane.js +3 -20
  419. package/dist/internal/mcp-endpoint.d.ts.map +1 -1
  420. package/dist/internal/mcp-endpoint.js +1 -3
  421. package/dist/internal/otel/collector.d.ts +12 -3
  422. package/dist/internal/otel/collector.d.ts.map +1 -1
  423. package/dist/internal/otel/collector.js +77 -125
  424. package/dist/internal/otel/config.d.ts +0 -2
  425. package/dist/internal/otel/config.d.ts.map +1 -1
  426. package/dist/internal/otel/config.js +17 -20
  427. package/dist/internal/otel/http.d.ts +2 -0
  428. package/dist/internal/otel/http.d.ts.map +1 -1
  429. package/dist/internal/otel/http.js +7 -1
  430. package/dist/internal/otel/mcp.d.ts.map +1 -1
  431. package/dist/internal/otel/mcp.js +3 -16
  432. package/dist/internal/otel/runtime.d.ts +26 -1
  433. package/dist/internal/otel/runtime.d.ts.map +1 -1
  434. package/dist/internal/otel/runtime.js +164 -15
  435. package/dist/internal/package-inline-stdio.d.ts.map +1 -1
  436. package/dist/internal/package-inline-stdio.js +3 -11
  437. package/dist/internal/playground/toolchain.d.ts +1 -1
  438. package/dist/internal/playground/toolchain.d.ts.map +1 -1
  439. package/dist/internal/playground/toolchain.js +1 -1
  440. package/dist/internal/request-error-status.d.ts +12 -0
  441. package/dist/internal/request-error-status.d.ts.map +1 -0
  442. package/dist/internal/request-error-status.js +52 -0
  443. package/dist/internal/resolve-prod-target.d.ts +1 -1
  444. package/dist/internal/resolve-prod-target.d.ts.map +1 -1
  445. package/dist/internal/resolve-prod-target.js +3 -7
  446. package/dist/internal/result-output.d.ts +18 -0
  447. package/dist/internal/result-output.d.ts.map +1 -0
  448. package/dist/internal/result-output.js +33 -0
  449. package/dist/internal/run-client.d.ts +2 -2
  450. package/dist/internal/run-client.js +2 -2
  451. package/dist/internal/runtime-dispatch-runner.d.ts +1 -11
  452. package/dist/internal/runtime-dispatch-runner.d.ts.map +1 -1
  453. package/dist/internal/runtime-dispatch-runner.js +2 -15
  454. package/dist/internal/sdk-runner.d.ts.map +1 -1
  455. package/dist/internal/sdk-runner.js +3 -6
  456. package/dist/internal/server.d.ts.map +1 -1
  457. package/dist/internal/server.js +110 -35
  458. package/dist/internal/session-cost.d.ts +3 -3
  459. package/dist/internal/session-cost.d.ts.map +1 -1
  460. package/dist/internal/session-cost.js +3 -3
  461. package/dist/internal/session-engine.d.ts +26 -11
  462. package/dist/internal/session-engine.d.ts.map +1 -1
  463. package/dist/internal/session-engine.js +146 -76
  464. package/dist/internal/session-run-log.d.ts.map +1 -1
  465. package/dist/internal/session-run-log.js +1 -3
  466. package/dist/internal/skills-sync.d.ts +1 -4
  467. package/dist/internal/skills-sync.d.ts.map +1 -1
  468. package/dist/internal/skills-sync.js +10 -50
  469. package/dist/internal/sleep.d.ts +2 -0
  470. package/dist/internal/sleep.d.ts.map +1 -0
  471. package/dist/internal/sleep.js +3 -0
  472. package/dist/internal/store-mirror.d.ts +29 -0
  473. package/dist/internal/store-mirror.d.ts.map +1 -0
  474. package/dist/internal/store-mirror.js +70 -0
  475. package/dist/internal/tenant-slack/relay.d.ts +73 -0
  476. package/dist/internal/tenant-slack/relay.d.ts.map +1 -0
  477. package/dist/internal/tenant-slack/relay.js +138 -0
  478. package/dist/internal/testing/scm-continuation-fixtures.d.ts +33 -0
  479. package/dist/internal/testing/scm-continuation-fixtures.d.ts.map +1 -0
  480. package/dist/internal/testing/scm-continuation-fixtures.js +253 -0
  481. package/dist/internal/workspace-sync.d.ts +22 -0
  482. package/dist/internal/workspace-sync.d.ts.map +1 -0
  483. package/dist/internal/workspace-sync.js +49 -0
  484. package/dist/internal/workspace.d.ts +7 -0
  485. package/dist/internal/workspace.d.ts.map +1 -1
  486. package/dist/internal/workspace.js +13 -0
  487. package/dist/otel.d.ts +23 -1
  488. package/dist/otel.d.ts.map +1 -1
  489. package/dist/otel.js +93 -2
  490. package/dist/playground/assets/index-59KvgREd.js +67 -0
  491. package/dist/playground/assets/index-MbMxXg-y.css +1 -0
  492. package/dist/playground/index.html +2 -2
  493. package/dist/result.d.ts +24 -0
  494. package/dist/result.d.ts.map +1 -0
  495. package/dist/result.js +27 -0
  496. package/dist/storage-backends/cursor-hosted.d.ts.map +1 -1
  497. package/dist/storage-backends/cursor-hosted.js +7 -4
  498. package/dist/storage-protocol.d.ts.map +1 -1
  499. package/dist/storage-protocol.js +1 -3
  500. package/dist/types.d.ts +90 -23
  501. package/dist/types.d.ts.map +1 -1
  502. package/docs/README.md +2 -2
  503. package/docs/concepts.md +2 -4
  504. package/docs/design/runtime-abstraction.md +2 -3
  505. package/docs/evals.md +9 -7
  506. package/docs/guides/cloud-agents.md +4 -6
  507. package/docs/guides/github.md +0 -1
  508. package/docs/guides/opentelemetry.md +41 -17
  509. package/docs/reference/agent-config.md +6 -10
  510. package/docs/reference/channels.md +18 -8
  511. package/docs/reference/cli.md +3 -4
  512. package/docs/reference/extensions.md +87 -23
  513. package/docs/reference/hooks.md +215 -46
  514. package/docs/reference/playground.md +3 -0
  515. package/docs/reference/project-layout.md +2 -1
  516. package/docs/reference/result.md +94 -0
  517. package/docs/reference/sessions.md +3 -1
  518. package/docs/reference/tools.md +1 -2
  519. package/docs/templates/pr-autofixer.md +0 -3
  520. package/package.json +29 -10
  521. package/skills/framework-map/SKILL.md +3 -1
  522. package/skills/otel/SKILL.md +8 -3
  523. package/src/ab.ts +1 -1
  524. package/src/bin/agent-serve.ts +121 -21
  525. package/src/channels/bitbucket/api.ts +623 -0
  526. package/src/channels/bitbucket/binding.ts +414 -0
  527. package/src/channels/bitbucket/bitbucket-channel.ts +182 -0
  528. package/src/channels/bitbucket/bitbucket-webhook.ts +576 -0
  529. package/src/channels/bitbucket/checks.ts +154 -0
  530. package/src/channels/bitbucket/cursor-account.ts +117 -0
  531. package/src/channels/bitbucket/defaults.ts +110 -0
  532. package/src/channels/bitbucket/events.ts +84 -0
  533. package/src/channels/bitbucket/index.ts +49 -0
  534. package/src/channels/bitbucket/replay.ts +439 -0
  535. package/src/channels/bitbucket/state.ts +59 -0
  536. package/src/channels/bitbucket/types.ts +266 -0
  537. package/src/channels/deployments/deployments-channel.ts +25 -43
  538. package/src/channels/deployments/types.ts +12 -6
  539. package/src/channels/github/binding.ts +8 -1
  540. package/src/channels/github/cursor-account.ts +17 -6
  541. package/src/channels/github/events.ts +1 -1
  542. package/src/channels/github/forward.ts +3 -2
  543. package/src/channels/github/github-channel.ts +74 -221
  544. package/src/channels/github/replay.ts +1 -1
  545. package/src/channels/github/state.ts +6 -0
  546. package/src/channels/github/types.ts +2 -5
  547. package/src/channels/gitlab/api.ts +228 -0
  548. package/src/channels/gitlab/binding.ts +233 -0
  549. package/src/channels/gitlab/checks.ts +243 -0
  550. package/src/channels/gitlab/cursor-account.ts +114 -0
  551. package/src/channels/gitlab/defaults.ts +93 -0
  552. package/src/channels/gitlab/events.ts +44 -0
  553. package/src/channels/gitlab/gitlab-channel.ts +176 -0
  554. package/src/channels/gitlab/gitlab-webhook.ts +555 -0
  555. package/src/channels/gitlab/index.ts +43 -0
  556. package/src/channels/gitlab/replay.ts +347 -0
  557. package/src/channels/gitlab/state.ts +55 -0
  558. package/src/channels/gitlab/types.ts +263 -0
  559. package/src/channels/origin/api.ts +4 -2
  560. package/src/channels/origin/origin-channel.ts +19 -94
  561. package/src/channels/origin/types.ts +23 -2
  562. package/src/channels/slack/eval-directive.ts +1 -6
  563. package/src/channels/slack/init.ts +6 -3
  564. package/src/channels/slack/setup.ts +7 -6
  565. package/src/channels/slack/types.ts +1 -1
  566. package/src/channels.ts +0 -1
  567. package/src/client.ts +1 -1
  568. package/src/connections.ts +1 -1
  569. package/src/evals.ts +1 -1
  570. package/src/extensions.ts +47 -5
  571. package/src/files.ts +21 -3
  572. package/src/index.ts +20 -28
  573. package/src/internal/ab-snapshot.ts +0 -3
  574. package/src/internal/advertise-tools.ts +1 -4
  575. package/src/internal/authored-alias-hooks.ts +4 -21
  576. package/src/internal/authored-loaders.ts +6 -23
  577. package/src/internal/channel-dispatch.ts +160 -0
  578. package/src/internal/chat-client.ts +1 -1
  579. package/src/internal/cli-ax.ts +5 -5
  580. package/src/internal/cli-bitbucket.ts +477 -0
  581. package/src/internal/cli-convert-automation.ts +7 -7
  582. package/src/internal/cli-cursor.ts +2 -5
  583. package/src/internal/cli-deploy.ts +2 -8
  584. package/src/internal/cli-github.ts +3 -3
  585. package/src/internal/cli-gitlab.ts +485 -0
  586. package/src/internal/cli-mcp.ts +2 -7
  587. package/src/internal/cli-slack.ts +2 -5
  588. package/src/internal/continuation-channel.ts +82 -1
  589. package/src/internal/continuation-identity.ts +229 -11
  590. package/src/internal/conversation-mirror.ts +4 -3
  591. package/src/internal/convert-automation/types.ts +1 -1
  592. package/src/internal/cursor/account-mcp.ts +1 -4
  593. package/src/internal/cursor/backend-client.ts +9 -10
  594. package/src/internal/cursor/bound-secret-file.ts +108 -0
  595. package/src/internal/cursor/credentials.ts +75 -10
  596. package/src/internal/cursor/hosted-bound-secrets.ts +75 -0
  597. package/src/internal/cursor/hosted-deployment-secrets.ts +42 -11
  598. package/src/internal/cursor/hosted-store-secrets.ts +1 -1
  599. package/src/internal/cursor-account-mcp-auth.ts +2 -5
  600. package/src/internal/cursor-deployment-relay.ts +11 -7
  601. package/src/internal/deploy-manifest.ts +4 -2
  602. package/src/internal/discovery/ab.ts +29 -9
  603. package/src/internal/discovery/agent.ts +94 -135
  604. package/src/internal/discovery/channels.ts +15 -13
  605. package/src/internal/discovery/connections.ts +55 -50
  606. package/src/internal/discovery/cursor-plugin.ts +1 -4
  607. package/src/internal/discovery/extension-overlay.ts +274 -0
  608. package/src/internal/discovery/extensions.ts +330 -105
  609. package/src/internal/discovery/hooks.ts +20 -2
  610. package/src/internal/discovery/info.ts +7 -0
  611. package/src/internal/discovery/modules.ts +8 -2
  612. package/src/internal/discovery/names.ts +2 -1
  613. package/src/internal/discovery/project.ts +80 -9
  614. package/src/internal/discovery/runtime.ts +1 -2
  615. package/src/internal/discovery/schedules.ts +28 -2
  616. package/src/internal/discovery/services.ts +37 -1
  617. package/src/internal/discovery/skills.ts +13 -3
  618. package/src/internal/discovery/subagent.ts +107 -0
  619. package/src/internal/discovery.ts +0 -2
  620. package/src/internal/distribution.ts +35 -83
  621. package/src/internal/docs-site.ts +1 -1
  622. package/src/internal/eval-run-store.ts +0 -7
  623. package/src/internal/eval-runner.ts +0 -1
  624. package/src/internal/framework-file-storage.ts +8 -8
  625. package/src/internal/github-fanout.ts +1 -1
  626. package/src/internal/guest-network.ts +383 -0
  627. package/src/internal/host-otel.ts +8 -4
  628. package/src/internal/hosted-admission-adapter.ts +8 -8
  629. package/src/internal/hosted-delivery-protocol.ts +26 -1
  630. package/src/internal/hosted-delivery.ts +376 -192
  631. package/src/internal/http-channel.ts +1 -4
  632. package/src/internal/init-interview.ts +1 -4
  633. package/src/internal/init-project.ts +2 -2
  634. package/src/internal/inline-stdio-define-stub.ts +1 -1
  635. package/src/internal/is-record.ts +3 -0
  636. package/src/internal/json-schema.ts +19 -10
  637. package/src/internal/local-control-plane.ts +5 -24
  638. package/src/internal/mcp-endpoint.ts +1 -4
  639. package/src/internal/otel/collector.ts +94 -159
  640. package/src/internal/otel/config.ts +10 -14
  641. package/src/internal/otel/http.ts +14 -1
  642. package/src/internal/otel/mcp.ts +3 -16
  643. package/src/internal/otel/runtime.ts +240 -25
  644. package/src/internal/package-inline-stdio.ts +3 -12
  645. package/src/internal/playground/toolchain.ts +1 -1
  646. package/src/internal/request-error-status.ts +72 -0
  647. package/src/internal/resolve-prod-target.ts +3 -8
  648. package/src/internal/result-output.ts +34 -0
  649. package/src/internal/run-client.ts +2 -2
  650. package/src/internal/runtime-dispatch-runner.ts +3 -21
  651. package/src/internal/sdk-runner.ts +3 -7
  652. package/src/internal/server.ts +153 -44
  653. package/src/internal/session-cost.ts +3 -3
  654. package/src/internal/session-engine.ts +182 -74
  655. package/src/internal/session-run-log.ts +1 -4
  656. package/src/internal/skills-sync.ts +13 -63
  657. package/src/internal/sleep.ts +3 -0
  658. package/src/internal/store-mirror.ts +86 -0
  659. package/src/internal/tenant-slack/relay.ts +179 -0
  660. package/src/internal/testing/scm-continuation-fixtures.ts +286 -0
  661. package/src/internal/workspace-sync.ts +55 -0
  662. package/src/internal/workspace.ts +14 -0
  663. package/src/otel.ts +143 -3
  664. package/src/result.ts +36 -0
  665. package/src/storage-backends/cursor-hosted.ts +7 -4
  666. package/src/storage-protocol.ts +1 -4
  667. package/src/types.ts +105 -34
  668. package/templates/triage/agent/lib/types.ts +0 -2
  669. package/dist/continuation.d.ts +0 -20
  670. package/dist/continuation.d.ts.map +0 -1
  671. package/dist/continuation.js +0 -18
  672. package/dist/docs/assets/chunks/@localSearchIndexroot.FAqdWIXo.js +0 -1
  673. package/dist/docs/assets/concepts.md.rPzW2HZN.js +0 -1
  674. package/dist/docs/assets/guides_cloud-agents.md.DumwWXba.js +0 -9
  675. package/dist/docs/assets/guides_cloud-runtime.md.BRirbRAN.js +0 -9
  676. package/dist/docs/assets/guides_cloud-runtime.md.BRirbRAN.lean.js +0 -1
  677. package/dist/docs/assets/reference_extensions.md.9WQMZe1l.lean.js +0 -1
  678. package/dist/docs/assets/reference_hooks.md.a8BJxMR5.js +0 -14
  679. package/dist/docs/assets/skills_framework-map.md.DDa4MeEW.js +0 -1
  680. package/dist/docs/guides/cloud-runtime.html +0 -35
  681. package/dist/docs/guides/cloud-runtime.md +0 -117
  682. package/dist/internal/convert-automation/index.d.ts +0 -3
  683. package/dist/internal/convert-automation/index.d.ts.map +0 -1
  684. package/dist/internal/convert-automation/index.js +0 -1
  685. package/dist/internal/grokbot/runner.d.ts +0 -64
  686. package/dist/internal/grokbot/runner.d.ts.map +0 -1
  687. package/dist/internal/grokbot/runner.js +0 -282
  688. package/dist/internal/managed-delivery.d.ts +0 -80
  689. package/dist/internal/managed-delivery.d.ts.map +0 -1
  690. package/dist/internal/managed-delivery.js +0 -86
  691. package/dist/internal/review-comments.d.ts +0 -370
  692. package/dist/internal/review-comments.d.ts.map +0 -1
  693. package/dist/internal/review-comments.js +0 -921
  694. package/dist/internal/shallow-clone.d.ts +0 -176
  695. package/dist/internal/shallow-clone.d.ts.map +0 -1
  696. package/dist/internal/shallow-clone.js +0 -419
  697. package/dist/playground/assets/index-B6C9S9nG.css +0 -1
  698. package/dist/playground/assets/index-ZqNoT8Ie.js +0 -69
  699. package/docs/guides/cloud-runtime.md +0 -122
  700. package/src/continuation.ts +0 -49
  701. package/src/internal/convert-automation/index.ts +0 -10
  702. package/src/internal/grokbot/runner.ts +0 -370
  703. package/src/internal/managed-delivery.ts +0 -125
  704. package/src/internal/review-comments.ts +0 -1363
  705. package/src/internal/shallow-clone.ts +0 -609
  706. /package/dist/docs/assets/{evals.md.CPzDAwoH.lean.js → evals.md.CbMoebP1.lean.js} +0 -0
  707. /package/dist/docs/assets/{guides_cloud-agents.md.DumwWXba.lean.js → guides_cloud-agents.md.DS8RIjwx.lean.js} +0 -0
  708. /package/dist/docs/assets/{guides_github.md.BtPr9GaP.lean.js → guides_github.md.DKYiT9do.lean.js} +0 -0
  709. /package/dist/docs/assets/{index.md.Kiht7ell.lean.js → index.md.D75GWhPl.lean.js} +0 -0
  710. /package/dist/docs/assets/{reference_agent-config.md.BHeYMgme.lean.js → reference_agent-config.md.CHNpiyp4.lean.js} +0 -0
  711. /package/dist/docs/assets/{reference_cli.md.DfoeyvL0.lean.js → reference_cli.md.CJNc_xYK.lean.js} +0 -0
  712. /package/dist/docs/assets/{reference_playground.md.DnX5nL-B.lean.js → reference_playground.md.4myJPxrf.lean.js} +0 -0
  713. /package/dist/docs/assets/{reference_project-layout.md.CA6QP6Lw.lean.js → reference_project-layout.md.DuBu9a96.lean.js} +0 -0
  714. /package/dist/docs/assets/{reference_tools.md.B1up2r9W.lean.js → reference_tools.md.aGrn99hP.lean.js} +0 -0
  715. /package/dist/docs/assets/{skills_framework-map.md.DDa4MeEW.lean.js → skills_framework-map.md.haibFyoB.lean.js} +0 -0
@@ -1,122 +0,0 @@
1
- ---
2
- title: "Cloud runtime"
3
- description: "Run turns on Cursor cloud agents instead of the local harness: when to switch, what changes, and the patterns that hold up."
4
- ---
5
-
6
- # Cloud runtime
7
-
8
- By default, turns execute on the Cursor SDK's local harness, on the same
9
- machine as the server. Set `runtime: "cloud"` and turns execute on
10
- Cursor cloud agents instead. They're ephemeral VMs that carry a repo
11
- checkout, run `gh`, `git`, and tests for real, and scale past what one
12
- host's disk and CPU can do. The serve host keeps handling routing, host
13
- preparation, sessions, and bookkeeping.
14
-
15
- A canonical use is a PR driver whose triage runs on cloud VMs. The
16
- patterns in this guide come from running one against real PR traffic.
17
-
18
- ## When to switch
19
-
20
- A guideline from running PR agents at scale: per-PR worktrees on the serve host
21
- don't scale to hundreds of engineers opening PRs. When the job needs a
22
- repo checkout at scale, use cloud. The signals:
23
-
24
- - The agent must run repo commands (tests, builds, `git`) against many
25
- different refs concurrently.
26
- - Turns are long and heavy, and you don't want them competing with the
27
- server for resources.
28
- - The work product is a PR or branch the VM can push, not a local file.
29
-
30
- Stay local when the agent is conversational, tool-driven against APIs,
31
- or works over host-prepared evidence. Local turns are cheaper, start
32
- faster, and support the full authored surface.
33
-
34
- ## Configure it
35
-
36
- Cloud runtime is two fields on the agent config.
37
-
38
- ```ts
39
- import { defineAgent } from "@cursor/july";
40
-
41
- export default defineAgent({
42
- runtime: "cloud",
43
- cloud: {
44
- repos: [{ url: "https://github.com/org/repo", startingRef: "main" }],
45
- // env / envVars / … forwarded to the Cursor SDK
46
- },
47
- });
48
- ```
49
-
50
- The host must be signed in (`agent-sdk login` or `CURSOR_API_KEY`).
51
-
52
- > [!IMPORTANT]
53
- > Cloud agents run against the Cursor backend under the signed-in
54
- > account, and every wake spends real cloud-agent budget. Decide
55
- > explicitly what may trigger one.
56
-
57
- ## What changes on cloud
58
-
59
- Cloud turns run on a VM without your authored files, so the runtime
60
- mapping shifts:
61
-
62
- | Folder or file | Local runtime | Cloud runtime |
63
- | --- | --- | --- |
64
- | `instructions.*` | `AGENTS.md` in the session workspace | prepended to the first prompt |
65
- | Server tools (`execution: "server"`) | in-process SDK custom tools | authenticated HTTP MCP back to the AgentSDK host, when `--public-url` or `--cloud-tools-url` is set |
66
- | Agent tools (`execution: "agent"`) | scripts in the session workspace | catalog + script bodies on the first prompt |
67
- | `skills/*` | `.cursor/skills/` in the workspace | native discovery after the first turn, from the hosted store or the signed-in account |
68
- | `mcp-connections/*.ts` | SDK `mcpServers` | SDK `mcpServers` (peers need `--public-url`) |
69
- | `host-connections/*.ts` | `ctx.host.mcp` only | `ctx.host.mcp` only |
70
- | `sandbox/workspace/**` | seeded into the session workspace | ignored |
71
- | Tool approvals (`needsApproval`) | supported | not supported; keep approval-gated tools on local turns |
72
-
73
- Authored skills are discovered natively after the first cloud turn,
74
- using the hosted store or the signed-in account.
75
-
76
- Approvals are a local-runtime contract. On cloud, a `needsApproval` tool
77
- call rides one HTTP MCP request from the VM, and a parked call would
78
- hold that request open until it times out; there is no durable approval
79
- flow for cloud turns.
80
-
81
- Peer MCP connections need `--public-url` for cloud turns. Without one,
82
- peers are omitted and the server warns at startup.
83
-
84
- ## Hybrid: local agent, cloud sessions
85
-
86
- A local-runtime agent can still open cloud-attached sessions per send.
87
- Channel handlers may pass a `cloud` block (repos pinned to a PR ref, say)
88
- in `send` options, and Slack handlers may return `cloud` from a mention
89
- hook. A PR driver works this way: chat stays local, and the `drive`
90
- flow attaches the PR to a cloud VM. The agent-level `cloud` config is the
91
- base that per-session options merge over.
92
-
93
- ## Patterns that hold up
94
-
95
- These come from running a PR driver against real PR traffic:
96
-
97
- - One cloud session per unit of work, keyed with a stable continuation
98
- token (`pr:owner/repo#N`) so every wake lands on the same conversation.
99
- - Keep the host deterministic: fetch briefs and metadata on the host,
100
- send the VM a compact prompt, and let the VM re-read source of truth
101
- with its own `gh` and `git` instead of trusting payload snapshots.
102
- - Limit exposure: add repository allowlists on webhook channels,
103
- because every wake spends the account's budget.
104
-
105
- ## Verify cloud agents
106
-
107
- `agent-sdk run` and `eval` work unchanged. The trajectory records the
108
- same event vocabulary plus `agent.bound` with the cloud URL, so you can
109
- open the cloud conversation for any session. Cloud turns take minutes.
110
- Pass generous `--timeout-ms` values, and keep curl timeouts long when
111
- driving channels directly.
112
-
113
- ## What's next
114
-
115
- Continue with these pages:
116
-
117
- - [Agent config](../reference/agent-config.md): the `runtime` and
118
- `cloud` fields
119
- - [GitHub guide](./github.md): the webhook patterns that pair with
120
- cloud triage
121
- - [Cursor cloud agents](./cloud-agents.md): keep the agent local and
122
- let it launch cloud agents instead
@@ -1,49 +0,0 @@
1
- /**
2
- * Public continuation-identity surface for `@cursor/july`.
3
- *
4
- * Omitted `continuation` on a channel constructor stays `/v1` (engine
5
- * minting). Deploy onto the v2 control plane with a root architecture
6
- * flag; omitted channels then inherit the kind `/v2` default:
7
- *
8
- * ```ts
9
- * export default defineAgent({
10
- * architecture: "v2",
11
- * });
12
- * ```
13
- *
14
- * Per-channel selectors still override type (`"github.issue/v2"`,
15
- * `"github.none/v2"`). Other `/v2` selectors: `"slack.thread/v2"`,
16
- * `"origin.pr/v2"`, `"deployments.deployment/v2"`, `"none/v2"`.
17
- */
18
-
19
- export type {
20
- ContinuationBuiltin,
21
- ContinuationClaim,
22
- ContinuationIdentity,
23
- ContinuationProtocolVersion,
24
- ContinuationSelector,
25
- ConversationType,
26
- MailboxContinuation,
27
- ParsedContinuation,
28
- } from "./internal/continuation-identity.js";
29
- export {
30
- BUILTINS,
31
- bindMailboxContinuationSend,
32
- builtinForType,
33
- CONTINUATION_SELECTORS,
34
- continuationSource,
35
- defaultContinuationSelector,
36
- extractContinuation,
37
- formatConversationKey,
38
- handshakeContinuation,
39
- isContinuationSelector,
40
- isV2DurableContinuationKey,
41
- mintClaim,
42
- newEvtKey,
43
- normalizeIdentity,
44
- parseContinuationSelector,
45
- resolveContinuation,
46
- resolveV2Key,
47
- stampMailboxContinuation,
48
- V2EngineError,
49
- } from "./internal/continuation-identity.js";
@@ -1,10 +0,0 @@
1
- export { convertWorkflow } from "./convert-workflow.js";
2
- export type {
3
- ConvertAutomationMetadata,
4
- ConvertedFile,
5
- ConvertedMcpConnection,
6
- ConvertMcpServer,
7
- ConvertWorkflowInput,
8
- ConvertWorkflowResult,
9
- WorkflowJson,
10
- } from "./types.js";
@@ -1,370 +0,0 @@
1
- /**
2
- * The grokbot runtime's remote client — a thin client like `"cloud"`.
3
- * Turns execute on Cursor's hosted Grok Bot (Sand) harness (the Temporal
4
- * turn workflow and the account's own computer), reached through the
5
- * public `/v0/grokbot` session API.
6
- *
7
- * Sand delivery contract, preserved end to end: only content the agent
8
- * delivers through SendToUser becomes the user-visible reply. The hosted
9
- * transcript exposes those deliveries as `send-message` entries; the
10
- * agent's internal monologue never appears in the transcript, so it can
11
- * never leak into the session reply.
12
- */
13
-
14
- import { randomUUID } from "node:crypto";
15
- import type { RunnerTurnRequest, TurnOutcome } from "../../types.js";
16
- import {
17
- cursorExternalApiUrl,
18
- resolveApiKeySync,
19
- } from "../cursor/credentials.js";
20
- import type { AgentRunner } from "./../sdk-runner.js";
21
-
22
- export interface GrokBotRunnerOptions {
23
- /** Cursor API key. Resolved as option → env → file → stored login. */
24
- apiKey?: string;
25
- /** Test seam. Defaults to global fetch. */
26
- fetchImpl?: typeof fetch;
27
- /**
28
- * Test seam. Defaults to {@link cursorExternalApiUrl} (`api.cursor.com`).
29
- * `/v0/grokbot` is an external-api microlith route — it 404s on api2.
30
- */
31
- backendUrl?: string;
32
- /** Test seam. Poll interval while a turn runs. */
33
- pollIntervalMs?: number;
34
- /** Test seam. Hard turn deadline. */
35
- turnTimeoutMs?: number;
36
- }
37
-
38
- /** One transcript entry as `/v0/grokbot/sessions/:id/entries` exposes it. */
39
- export interface GrokBotEntry {
40
- seq: string;
41
- updatedSeq: string;
42
- kind: string;
43
- role?: string;
44
- text?: string;
45
- createdAtMs: number;
46
- }
47
-
48
- interface GrokBotTurnStatus {
49
- idle: boolean;
50
- inFlight: boolean;
51
- queued: number;
52
- }
53
-
54
- interface EntriesPage {
55
- entries: GrokBotEntry[];
56
- latestUpdatedSeq: string;
57
- turn: GrokBotTurnStatus;
58
- }
59
-
60
- interface HostedAgent {
61
- /** The `/v0/grokbot` session id (the hosted agent's durable id). */
62
- remoteId: string;
63
- /** Transcript cursor: newest `updatedSeq` this client has consumed. */
64
- lastUpdatedSeq: bigint;
65
- }
66
-
67
- const DEFAULT_POLL_INTERVAL_MS = 750;
68
- const DEFAULT_TURN_TIMEOUT_MS = 20 * 60 * 1000;
69
-
70
- /**
71
- * Idle polls required after a send before the turn is considered settled
72
- * when the workflow never reported busy — covers the window between the
73
- * accepted dispatch and the workflow picking the signal up.
74
- */
75
- const MIN_IDLE_POLLS_WITHOUT_BUSY = 4;
76
-
77
- class GrokBotApiError extends Error {
78
- constructor(
79
- readonly status: number,
80
- readonly path: string,
81
- body: string
82
- ) {
83
- super(
84
- `Grok Bot API ${path} failed (HTTP ${status}): ${body.slice(0, 300)}`
85
- );
86
- this.name = "GrokBotApiError";
87
- }
88
- }
89
-
90
- /** Minimal `/v0/grokbot` client: bearer API key, JSON in/out. */
91
- class GrokBotApiClient {
92
- private readonly fetchImpl: typeof fetch;
93
- private readonly baseUrl: string;
94
- private readonly apiKey: string;
95
-
96
- constructor(options: GrokBotRunnerOptions) {
97
- this.fetchImpl = options.fetchImpl ?? fetch;
98
- this.baseUrl = (options.backendUrl ?? cursorExternalApiUrl()).replace(
99
- /\/$/,
100
- ""
101
- );
102
- const apiKey = resolveApiKeySync({
103
- apiKey: options.apiKey,
104
- backendUrl: options.backendUrl,
105
- })?.apiKey;
106
- if (apiKey === undefined || apiKey === "") {
107
- throw new Error(
108
- 'runtime: "grokbot" needs a Cursor API key (CURSOR_API_KEY, CURSOR_API_KEY_FILE, or agent-sdk login) to reach the hosted Grok Bot harness.'
109
- );
110
- }
111
- this.apiKey = apiKey;
112
- }
113
-
114
- private async request<T>(args: {
115
- method: string;
116
- path: string;
117
- body?: unknown;
118
- }): Promise<T> {
119
- const headers: Record<string, string> = {
120
- authorization: `Bearer ${this.apiKey}`,
121
- };
122
- if (args.body !== undefined) {
123
- headers["content-type"] = "application/json";
124
- }
125
- const response = await this.fetchImpl(`${this.baseUrl}${args.path}`, {
126
- method: args.method,
127
- headers,
128
- body: args.body === undefined ? undefined : JSON.stringify(args.body),
129
- });
130
- if (!response.ok) {
131
- throw new GrokBotApiError(
132
- response.status,
133
- args.path,
134
- await response.text().catch(() => "")
135
- );
136
- }
137
- return (await response.json()) as T;
138
- }
139
-
140
- async createSession(args: {
141
- name: string;
142
- instructions: string | undefined;
143
- }): Promise<{ id: string; latestUpdatedSeq: string }> {
144
- return await this.request({
145
- method: "POST",
146
- path: "/v0/grokbot/sessions",
147
- body: { name: args.name, instructions: args.instructions },
148
- });
149
- }
150
-
151
- async sendMessage(args: {
152
- sessionId: string;
153
- text: string;
154
- }): Promise<{ messageId: string; delivery: string }> {
155
- return await this.request({
156
- method: "POST",
157
- path: `/v0/grokbot/sessions/${args.sessionId}/messages`,
158
- body: { text: args.text, messageId: randomUUID() },
159
- });
160
- }
161
-
162
- async listEntries(args: {
163
- sessionId: string;
164
- afterUpdatedSeq: bigint;
165
- }): Promise<EntriesPage> {
166
- return await this.request({
167
- method: "GET",
168
- path: `/v0/grokbot/sessions/${args.sessionId}/entries?afterUpdatedSeq=${args.afterUpdatedSeq}`,
169
- });
170
- }
171
-
172
- async interrupt(args: { sessionId: string; reason: string }): Promise<void> {
173
- await this.request({
174
- method: "POST",
175
- path: `/v0/grokbot/sessions/${args.sessionId}/interrupt`,
176
- body: { reason: args.reason },
177
- });
178
- }
179
- }
180
-
181
- export class GrokBotRunner implements AgentRunner {
182
- /**
183
- * One hosted Grok Bot agent per SDK agent name — the backend
184
- * get-or-creates by name, so every SDK session forwards into the same
185
- * hosted agent and conversation, and the Grok Bot app shows one agent
186
- * rather than one per session.
187
- */
188
- private readonly agents = new Map<string, HostedAgent>();
189
- /**
190
- * Per-hosted-agent turn chain. Sessions share one hosted conversation
191
- * and one transcript cursor, so turns run one at a time per agent:
192
- * deliveries attribute to the turn that sent them, and an abort only
193
- * interrupts its own turn — mirroring the hosted workflow's own queue.
194
- */
195
- private readonly turns = new Map<string, Promise<unknown>>();
196
- private client: GrokBotApiClient | undefined;
197
-
198
- constructor(private readonly options: GrokBotRunnerOptions = {}) {}
199
-
200
- async runTurn(request: RunnerTurnRequest): Promise<TurnOutcome> {
201
- if (request.runtime !== "grokbot") {
202
- throw new Error(
203
- `Session ${request.sessionId} is a ${request.runtime} turn, which the Grok Bot runner cannot execute.`
204
- );
205
- }
206
- if (request.images !== undefined && request.images.length > 0) {
207
- // Attachments ride the hosted box's upload path, which the /v0
208
- // session API does not expose yet. Refuse rather than silently
209
- // dropping what the user attached.
210
- throw new Error(
211
- "Image attachments are not supported on grokbot turns yet."
212
- );
213
- }
214
- const name = hostedAgentName(request);
215
- const previous = this.turns.get(name) ?? Promise.resolve();
216
- const run = previous.then(() => this.executeTurn(request));
217
- this.turns.set(
218
- name,
219
- run.catch(() => {})
220
- );
221
- return await run;
222
- }
223
-
224
- private async executeTurn(request: RunnerTurnRequest): Promise<TurnOutcome> {
225
- const signal = request.signal;
226
- if (signal?.aborted === true) {
227
- return { status: "cancelled" };
228
- }
229
- const client = this.ensureClient();
230
- const entry = await this.getAgent(client, request);
231
-
232
- const send = await client.sendMessage({
233
- sessionId: entry.remoteId,
234
- text: request.prompt,
235
- });
236
- if (
237
- send.delivery !== "accepted_temporal" &&
238
- send.delivery !== "duplicate"
239
- ) {
240
- throw new Error(
241
- `The hosted Grok Bot harness did not accept the turn (delivery: ${send.delivery}).`
242
- );
243
- }
244
-
245
- const pollIntervalMs =
246
- this.options.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS;
247
- const turnTimeoutMs = this.options.turnTimeoutMs ?? DEFAULT_TURN_TIMEOUT_MS;
248
- const deadline = Date.now() + turnTimeoutMs;
249
- const delivered: string[] = [];
250
- let sawBusy = false;
251
- let idlePolls = 0;
252
-
253
- while (true) {
254
- // On abort: interrupt the hosted run, drain entries once so a reply
255
- // that already landed still streams out, then cancel.
256
- const aborted = isAborted(signal);
257
- if (aborted) {
258
- await client
259
- .interrupt({
260
- sessionId: entry.remoteId,
261
- reason: "The user sent a new message.",
262
- })
263
- .catch(() => {});
264
- }
265
- const page = await client.listEntries({
266
- sessionId: entry.remoteId,
267
- afterUpdatedSeq: entry.lastUpdatedSeq,
268
- });
269
- entry.lastUpdatedSeq = BigInt(page.latestUpdatedSeq);
270
- for (const item of page.entries) {
271
- if (item.kind !== "send-message" || item.text === undefined) {
272
- continue;
273
- }
274
- const delta = delivered.length === 0 ? item.text : `\n\n${item.text}`;
275
- delivered.push(item.text);
276
- // The emit callback may be async; a rejection must never escape
277
- // the poll loop.
278
- void Promise.resolve(
279
- request.onUpdate({ type: "text-delta", text: delta })
280
- ).catch(() => {});
281
- }
282
- if (aborted) {
283
- return { status: "cancelled" };
284
- }
285
- if (page.turn.inFlight || page.turn.queued > 0) {
286
- sawBusy = true;
287
- } else if (page.turn.idle) {
288
- idlePolls += 1;
289
- if (sawBusy || idlePolls >= MIN_IDLE_POLLS_WITHOUT_BUSY) {
290
- return {
291
- status: "finished",
292
- result: delivered.length === 0 ? undefined : delivered.join("\n\n"),
293
- };
294
- }
295
- }
296
- if (Date.now() >= deadline) {
297
- throw new Error(
298
- `The grokbot turn for session ${request.sessionId} did not settle within ${Math.round(turnTimeoutMs / 60_000)} minutes.`
299
- );
300
- }
301
- await this.sleep(pollIntervalMs, signal);
302
- }
303
- }
304
-
305
- async dispose(): Promise<void> {
306
- // Hosted agents live server-side (the account's Grok Bot agents);
307
- // nothing in this process holds conversation state.
308
- this.agents.clear();
309
- }
310
-
311
- private ensureClient(): GrokBotApiClient {
312
- this.client ??= new GrokBotApiClient(this.options);
313
- return this.client;
314
- }
315
-
316
- private async getAgent(
317
- client: GrokBotApiClient,
318
- request: RunnerTurnRequest
319
- ): Promise<HostedAgent> {
320
- const name = hostedAgentName(request);
321
- const existing = this.agents.get(name);
322
- if (existing !== undefined) {
323
- return existing;
324
- }
325
- // Get-or-create: a reconnect (new process, same agent name) lands on
326
- // the existing hosted agent. The returned tail seq starts the cursor
327
- // after the hosted conversation's history so an old transcript never
328
- // replays into this turn's reply.
329
- const created = await client.createSession({
330
- name,
331
- instructions: request.instructions,
332
- });
333
- const entry: HostedAgent = {
334
- remoteId: created.id,
335
- lastUpdatedSeq: BigInt(created.latestUpdatedSeq),
336
- };
337
- this.agents.set(name, entry);
338
- return entry;
339
- }
340
-
341
- private async sleep(
342
- ms: number,
343
- signal: AbortSignal | undefined
344
- ): Promise<void> {
345
- await new Promise<void>((resolve) => {
346
- const timer = setTimeout(() => {
347
- signal?.removeEventListener("abort", onAbort);
348
- resolve();
349
- }, ms);
350
- const onAbort = (): void => {
351
- clearTimeout(timer);
352
- resolve();
353
- };
354
- signal?.addEventListener("abort", onAbort, { once: true });
355
- });
356
- }
357
- }
358
-
359
- function hostedAgentName(request: RunnerTurnRequest): string {
360
- return request.agentName ?? "Agent SDK agent";
361
- }
362
-
363
- /**
364
- * `AbortSignal.aborted` is readonly to TypeScript, so an inline recheck
365
- * after an await narrows to the stale pre-await value; the function
366
- * boundary keeps the recheck honest.
367
- */
368
- function isAborted(signal: AbortSignal | undefined): boolean {
369
- return signal?.aborted === true;
370
- }
@@ -1,125 +0,0 @@
1
- /**
2
- * Envelope-carried installation config for managed-product deliveries
3
- * (plan 0002 Stack H1; envelope shape from Stack B1).
4
- *
5
- * On the v2 architecture a managed product (security-reviewer, …) is many
6
- * single-tenant deployments: the pre-signal trigger gate matches the
7
- * customer's automation trigger before a workflow starts and stamps the
8
- * matched automation uuid + an opaque installation-config reference on the
9
- * attributed session envelope. The delivery activity forwards the matched
10
- * installation-config document to the fork **inside the webhook payload it
11
- * POSTs to the channel**, under {@link MANAGED_DELIVERY_PAYLOAD_KEY} — the
12
- * same embed-in-payload pattern the legacy deployment event stream used
13
- * for its source marker.
14
- *
15
- * This module is the one contract both sides share: the control-plane
16
- * delivery path embeds with {@link withManagedDeliveryConfig}; the agent's
17
- * channels detect and read with {@link parseManagedDeliveryConfig}. The
18
- * document mirrors the sync layer's `ManagedAutomationConfigDoc` **policy**
19
- * fields that "ride the delivery envelope to the fork" (posting mode,
20
- * managed config, trigger snapshots for the channel's staleness guard);
21
- * readers ignore unknown fields so a newer sync can add material without
22
- * breaking older forks. The automation's MCP server refs deliberately do
23
- * NOT ride here: they travel on the hosted-admission envelope's
24
- * `managedAutomation` slice (plan 0002 G2, `hosted-delivery-protocol.ts` /
25
- * `hosted-managed-automation.ts`) so one mechanism owns MCP attach.
26
- *
27
- * INTERNAL: first-party host plumbing shared by agents in `factory/*`,
28
- * consumed via relative source imports. Deliberately excluded from the
29
- * published `@cursor/july` npm package (see the `files` whitelist).
30
- */
31
-
32
- /**
33
- * Key inside the delivered webhook payload under which the delivery
34
- * activity embeds the matched installation config. Chosen to never
35
- * collide with a provider webhook field (GitHub and Origin payloads have
36
- * no `cursor*` keys).
37
- */
38
- export const MANAGED_DELIVERY_PAYLOAD_KEY = "cursorManagedDelivery" as const;
39
-
40
- /**
41
- * The matched installation-config document as it rides the delivery to
42
- * the fork. Required: the matched automation uuid (B1 attribution).
43
- * Everything else is optional; absent fields keep the channel's default
44
- * posture (post, all modules enabled, no staleness guard).
45
- */
46
- export interface ManagedDeliveryInstallationConfig {
47
- /** Source managed automation uuid the pre-signal gate matched. */
48
- matchedAutomationUuid: string;
49
- /** Opaque `<installationId>@<resourceVersion>` config reference. */
50
- installationConfigRef?: string;
51
- managedType?: string;
52
- name?: string;
53
- /**
54
- * Whether product output (PR comments, …) posts for this installation,
55
- * or the run stays check/shadow-only. Channels post only on `"post"`
56
- * (or when the field is absent) — any other value fails closed to
57
- * shadow, so a newer mode name never posts by accident.
58
- */
59
- postingMode?: string;
60
- managedConfig?: Record<string, unknown>;
61
- /**
62
- * The automation's git triggers as `GitTrigger.toJson()` snapshots.
63
- * The channel re-checks the delivery against them (staleness guard:
64
- * the config may have changed between admission and delivery).
65
- */
66
- triggerSnapshots?: unknown[];
67
- }
68
-
69
- function isRecord(value: unknown): value is Record<string, unknown> {
70
- return typeof value === "object" && value !== null && !Array.isArray(value);
71
- }
72
-
73
- function nonEmptyString(value: unknown): string | undefined {
74
- if (typeof value !== "string") {
75
- return undefined;
76
- }
77
- const trimmed = value.trim();
78
- return trimmed === "" ? undefined : trimmed;
79
- }
80
-
81
- /**
82
- * Read the embedded installation config out of a delivered webhook
83
- * payload. Returns undefined for payloads without the key (legacy
84
- * deliveries, host relay, fixtures) and for documents missing the
85
- * required matched automation uuid — the channel then runs its legacy
86
- * path unchanged. Malformed optional fields are dropped, not fatal.
87
- */
88
- export function parseManagedDeliveryConfig(
89
- payload: unknown
90
- ): ManagedDeliveryInstallationConfig | undefined {
91
- if (!isRecord(payload)) {
92
- return undefined;
93
- }
94
- const doc = payload[MANAGED_DELIVERY_PAYLOAD_KEY];
95
- if (!isRecord(doc)) {
96
- return undefined;
97
- }
98
- const matchedAutomationUuid = nonEmptyString(doc.matchedAutomationUuid);
99
- if (matchedAutomationUuid === undefined) {
100
- return undefined;
101
- }
102
- return {
103
- matchedAutomationUuid,
104
- installationConfigRef: nonEmptyString(doc.installationConfigRef),
105
- managedType: nonEmptyString(doc.managedType),
106
- name: nonEmptyString(doc.name),
107
- postingMode: nonEmptyString(doc.postingMode),
108
- managedConfig: isRecord(doc.managedConfig) ? doc.managedConfig : undefined,
109
- triggerSnapshots: Array.isArray(doc.triggerSnapshots)
110
- ? doc.triggerSnapshots
111
- : undefined,
112
- };
113
- }
114
-
115
- /**
116
- * Embed one matched installation config into the webhook payload the
117
- * delivery activity POSTs to the channel. Pure; used by the control-plane
118
- * delivery path and by channel tests building fixture envelopes.
119
- */
120
- export function withManagedDeliveryConfig(
121
- payload: Record<string, unknown>,
122
- config: ManagedDeliveryInstallationConfig
123
- ): Record<string, unknown> {
124
- return { ...payload, [MANAGED_DELIVERY_PAYLOAD_KEY]: config };
125
- }