@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
@@ -0,0 +1,243 @@
1
+ /**
2
+ * GitLab commit statuses — the GitLab {@link CiCheckWriter} behind the shared
3
+ * check lifecycle in `../checks.js`.
4
+ *
5
+ * GitLab has no Checks API; the merge-request widget shows **commit
6
+ * statuses** (`POST /projects/:id/statuses/:sha`, one row per `name`). The
7
+ * writer maps the shared status / conclusion pair onto GitLab's state set
8
+ * and re-posts the full desired state on every write, so `resumeGitLabCheck`
9
+ * needs only `(project, sha, name)` to rebuild a handle after a restart.
10
+ *
11
+ * Posting needs a token with `api` scope (Developer role or above); through
12
+ * the SCM proxy that is the tenant's project / host credential.
13
+ */
14
+
15
+ import {
16
+ type CiCheck,
17
+ type CiCheckConcludeInput,
18
+ type CiCheckConclusion,
19
+ type CiCheckCreateInput,
20
+ type CiCheckOutput,
21
+ type CiCheckRef,
22
+ type CiCheckStatus,
23
+ type CiChecksClient,
24
+ type CiCheckUpdateInput,
25
+ type CiCheckWriter,
26
+ openCiCheck,
27
+ resumeCiCheck,
28
+ } from "../checks.js";
29
+ import { type GitLabApiMethod, gitlabProjectPathSegment } from "./api.js";
30
+
31
+ /** Any client that can call the GitLab REST API. */
32
+ export interface GitLabCheckClient {
33
+ request<T = unknown>(input: {
34
+ method: GitLabApiMethod;
35
+ path: string;
36
+ body?: unknown;
37
+ }): Promise<T>;
38
+ }
39
+
40
+ /** GitLab commit status `state` values. */
41
+ export type GitLabCommitStatusState =
42
+ | "pending"
43
+ | "running"
44
+ | "success"
45
+ | "failed"
46
+ | "canceled";
47
+
48
+ export interface GitLabCommitStatusInput {
49
+ /** Numeric project id or `group/project` path. */
50
+ project: number | string;
51
+ sha: string;
52
+ state: GitLabCommitStatusState;
53
+ /** Status name shown in the MR widget, e.g. `cursor/security-review`. */
54
+ name: string;
55
+ /** "Details" link. */
56
+ targetUrl?: string;
57
+ /** Short description (GitLab truncates long values). */
58
+ description?: string;
59
+ /** Attach the status to a specific pipeline instead of the latest one. */
60
+ pipelineId?: number;
61
+ }
62
+
63
+ /** Response subset of `POST /projects/:id/statuses/:sha`. */
64
+ export interface GitLabCommitStatus {
65
+ id?: number;
66
+ status?: string;
67
+ target_url?: string | null;
68
+ [key: string]: unknown;
69
+ }
70
+
71
+ const DESCRIPTION_MAX_CHARS = 255;
72
+
73
+ /** Post one commit status. Throws `GitLabApiError` on API failure. */
74
+ export async function setGitLabCommitStatus(
75
+ gitlab: GitLabCheckClient,
76
+ input: GitLabCommitStatusInput
77
+ ): Promise<GitLabCommitStatus> {
78
+ return await gitlab.request<GitLabCommitStatus>({
79
+ method: "POST",
80
+ path: `/projects/${gitlabProjectPathSegment(input.project)}/statuses/${encodeURIComponent(input.sha)}`,
81
+ body: {
82
+ state: input.state,
83
+ name: input.name,
84
+ ...(input.targetUrl === undefined ? {} : { target_url: input.targetUrl }),
85
+ ...(input.description === undefined
86
+ ? {}
87
+ : { description: input.description.slice(0, DESCRIPTION_MAX_CHARS) }),
88
+ ...(input.pipelineId === undefined
89
+ ? {}
90
+ : { pipeline_id: input.pipelineId }),
91
+ },
92
+ });
93
+ }
94
+
95
+ /** Shared check status / conclusion → GitLab commit status state. */
96
+ export function gitlabCommitStatusState(input: {
97
+ status: CiCheckStatus;
98
+ conclusion?: CiCheckConclusion;
99
+ }): GitLabCommitStatusState {
100
+ if (input.status === "queued") {
101
+ return "pending";
102
+ }
103
+ if (input.status === "in_progress") {
104
+ return "running";
105
+ }
106
+ switch (input.conclusion) {
107
+ case "success":
108
+ case "neutral":
109
+ case "skipped":
110
+ return "success";
111
+ case "cancelled":
112
+ return "canceled";
113
+ case "failure":
114
+ case "action_required":
115
+ case "timed_out":
116
+ case undefined:
117
+ return "failed";
118
+ }
119
+ }
120
+
121
+ export type GitLabCheckOutput = CiCheckOutput;
122
+ export type GitLabCheckUpdateInput = CiCheckUpdateInput;
123
+ export type GitLabCheckConcludeInput = CiCheckConcludeInput;
124
+
125
+ /** A created commit status. All methods throw `GitLabApiError` on failure. */
126
+ export type GitLabCheck = CiCheck & CiCheckRef;
127
+
128
+ export interface GitLabCheckIdentityInput {
129
+ /** Client used for every API call on the returned handle. */
130
+ gitlab: GitLabCheckClient;
131
+ /** Numeric project id or `group/project` path. */
132
+ project: number | string;
133
+ /** Status name shown in the MR widget, e.g. `"cursor/security-review"`. */
134
+ name: string;
135
+ /** Commit the status attaches to (usually the MR head SHA). */
136
+ sha: string;
137
+ /** Pin the status to one pipeline. */
138
+ pipelineId?: number;
139
+ }
140
+
141
+ export interface GitLabCheckCreateInput
142
+ extends GitLabCheckIdentityInput,
143
+ CiCheckCreateInput {}
144
+
145
+ /**
146
+ * GitLab writer: every write re-posts the status row for `(sha, name)`, and
147
+ * a commit status has no partial update, so the writer carries the last
148
+ * status, details link, and title forward when a write omits them.
149
+ */
150
+ function gitlabCheckWriter(
151
+ input: GitLabCheckIdentityInput & {
152
+ status?: CiCheckStatus;
153
+ url?: string;
154
+ title?: string;
155
+ }
156
+ ): CiCheckWriter {
157
+ let lastStatus: CiCheckStatus = input.status ?? "in_progress";
158
+ let lastUrl: string | undefined = input.url;
159
+ let lastTitle: string | undefined = input.title;
160
+ return async (write) => {
161
+ const status =
162
+ write.status ??
163
+ (write.conclusion === undefined ? lastStatus : "completed");
164
+ lastStatus = status;
165
+ lastUrl = write.detailsUrl ?? lastUrl;
166
+ lastTitle = write.output?.title ?? lastTitle;
167
+ const posted = await setGitLabCommitStatus(input.gitlab, {
168
+ project: input.project,
169
+ sha: input.sha,
170
+ name: input.name,
171
+ state: gitlabCommitStatusState({ status, conclusion: write.conclusion }),
172
+ targetUrl: lastUrl,
173
+ description: lastTitle,
174
+ pipelineId: input.pipelineId,
175
+ });
176
+ return {
177
+ ...(typeof posted?.id === "number" ? { id: posted.id } : {}),
178
+ ...(typeof posted?.target_url === "string"
179
+ ? { url: posted.target_url }
180
+ : {}),
181
+ };
182
+ };
183
+ }
184
+
185
+ /**
186
+ * Open a commit status on `sha` and return a handle for later updates.
187
+ *
188
+ * ```ts
189
+ * const check = await createGitLabCheck({
190
+ * gitlab: ctx.gitlab,
191
+ * project: ctx.project.id,
192
+ * name: "cursor/security-review",
193
+ * sha: mergeRequest.headSha,
194
+ * detailsUrl: sessionUrl,
195
+ * output: { title: "Running…", summary: "" },
196
+ * });
197
+ * await check.conclude({ conclusion: "success", output: { title: "Clean", summary: "" } });
198
+ * ```
199
+ */
200
+ export function createGitLabCheck(
201
+ input: GitLabCheckCreateInput
202
+ ): Promise<GitLabCheck> {
203
+ return openCiCheck(gitlabCheckWriter(input), input);
204
+ }
205
+
206
+ /**
207
+ * Rebuild a {@link GitLabCheck} handle for an existing status row from its
208
+ * identity. No API call is made until the first update.
209
+ */
210
+ export function resumeGitLabCheck(
211
+ input: GitLabCheckIdentityInput & {
212
+ /** Last known status; defaults to `"in_progress"`. */
213
+ status?: CiCheckStatus;
214
+ /** Last known details link, kept on writes that omit `detailsUrl`. */
215
+ url?: string;
216
+ /** Last known title, kept on writes that omit `output`. */
217
+ title?: string;
218
+ id?: number;
219
+ }
220
+ ): GitLabCheck {
221
+ return resumeCiCheck(
222
+ gitlabCheckWriter(input),
223
+ input.id === undefined ? undefined : { id: input.id }
224
+ );
225
+ }
226
+
227
+ /**
228
+ * Project-bound checks adapter satisfying the shared {@link CiChecksClient}
229
+ * contract for forge-agnostic check code.
230
+ */
231
+ export function bindGitLabChecks(input: {
232
+ gitlab: GitLabCheckClient;
233
+ project: number | string;
234
+ }): CiChecksClient {
235
+ return {
236
+ createCheck: (check) =>
237
+ createGitLabCheck({
238
+ ...check,
239
+ gitlab: input.gitlab,
240
+ project: input.project,
241
+ }),
242
+ };
243
+ }
@@ -0,0 +1,114 @@
1
+ /**
2
+ * Cursor-account mode for GitLab channels.
3
+ *
4
+ * `gitlabChannel({ cursorAccount })` declares that outbound GitLab calls run
5
+ * through the Cursor SCM proxy (`/v0/gitlab-proxy`) with the tenant's
6
+ * credential swapped in server-side. The serve host binds the Cursor API key
7
+ * and the proxy transport at startup when `--cursor-scm-proxy` is set; until
8
+ * then `ctx.gitlab` falls back to direct `GITLAB_TOKEN` access.
9
+ */
10
+
11
+ import { resolveCursorScmProxyUrl } from "../github/cursor-account.js";
12
+ import type { GitLabProxyTransport } from "./api.js";
13
+ import type { GitLabChannelOptions } from "./types.js";
14
+
15
+ export const CURSOR_GITLAB_MAX_PROJECTS = 20;
16
+ /** `group/project`, with nested groups (`group/sub/project`). */
17
+ const CURSOR_GITLAB_PROJECT_PATTERN = /^[A-Za-z0-9_.-]+(?:\/[A-Za-z0-9_.-]+)+$/;
18
+
19
+ export interface CursorGitLabProjectScope {
20
+ /** Lowercased `group/project` paths. */
21
+ projects: readonly string[];
22
+ }
23
+
24
+ /** Host-bound credential: Cursor API key + proxy transport, bound at serve. */
25
+ export interface PendingCursorGitLabCredentials {
26
+ bind(getApiKey: () => Promise<string>): void;
27
+ bindProxyTransport(transport: Omit<GitLabProxyTransport, "getApiKey">): void;
28
+ /** The full proxy transport once both halves are bound. */
29
+ getProxyTransport(): GitLabProxyTransport | undefined;
30
+ }
31
+
32
+ export interface GitLabCursorAccountRuntime {
33
+ /** Authored channel options (not rewritten). */
34
+ options: GitLabChannelOptions;
35
+ credentials: PendingCursorGitLabCredentials;
36
+ scope: CursorGitLabProjectScope | undefined;
37
+ }
38
+
39
+ const runtimeByDefinition = new WeakMap<object, GitLabCursorAccountRuntime>();
40
+
41
+ export function parseCursorGitLabProjectScope(
42
+ values: readonly string[]
43
+ ): CursorGitLabProjectScope {
44
+ const projects = [
45
+ ...new Set(
46
+ values
47
+ .map((project) =>
48
+ project
49
+ .trim()
50
+ .replace(/^\/+|\/+$/g, "")
51
+ .toLowerCase()
52
+ )
53
+ .filter(Boolean)
54
+ ),
55
+ ];
56
+ if (projects.length === 0) {
57
+ throw new Error(
58
+ "gitlabChannel({ cursorAccount }) requires at least one project."
59
+ );
60
+ }
61
+ if (projects.length > CURSOR_GITLAB_MAX_PROJECTS) {
62
+ throw new Error(
63
+ `gitlabChannel({ cursorAccount }) supports at most ${CURSOR_GITLAB_MAX_PROJECTS} projects.`
64
+ );
65
+ }
66
+ for (const project of projects) {
67
+ if (
68
+ !CURSOR_GITLAB_PROJECT_PATTERN.test(project) ||
69
+ project.includes("..")
70
+ ) {
71
+ throw new Error(
72
+ `Invalid GitLab project "${project}"; expected group/project.`
73
+ );
74
+ }
75
+ }
76
+ return { projects };
77
+ }
78
+
79
+ export function createPendingCursorGitLabCredentials(): PendingCursorGitLabCredentials {
80
+ let getApiKey: (() => Promise<string>) | undefined;
81
+ let transport: Omit<GitLabProxyTransport, "getApiKey"> | undefined;
82
+ return {
83
+ bind(next) {
84
+ getApiKey = next;
85
+ },
86
+ bindProxyTransport(next) {
87
+ transport = next;
88
+ },
89
+ getProxyTransport() {
90
+ if (getApiKey === undefined || transport === undefined) {
91
+ return undefined;
92
+ }
93
+ return { ...transport, getApiKey };
94
+ },
95
+ };
96
+ }
97
+
98
+ /** GitLab-proxy base URL (`/v0/gitlab-proxy`, `AGENT_SERVE_GITLAB_PROXY_URL`). */
99
+ export function resolveCursorGitLabProxyUrl(backendBaseUrl: string): string {
100
+ return resolveCursorScmProxyUrl("gitlab", backendBaseUrl);
101
+ }
102
+
103
+ export function registerGitLabCursorAccountRuntime(
104
+ definition: object,
105
+ runtime: GitLabCursorAccountRuntime
106
+ ): void {
107
+ runtimeByDefinition.set(definition, runtime);
108
+ }
109
+
110
+ export function getGitLabCursorAccountRuntime(
111
+ definition: object
112
+ ): GitLabCursorAccountRuntime | undefined {
113
+ return runtimeByDefinition.get(definition);
114
+ }
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Default dispatch decisions for the GitLab channel: turn auth derived from
3
+ * the delivery's actor, the title / message a turn starts with, and which
4
+ * merge-request actions dispatch when no `onMergeRequest` hook is declared.
5
+ */
6
+
7
+ import type { AuthContext } from "../../types.js";
8
+ import type {
9
+ GitLabEventContext,
10
+ GitLabMergeRequestEvent,
11
+ GitLabTurnDispatch,
12
+ } from "./types.js";
13
+
14
+ type DispatchContext = Omit<
15
+ GitLabEventContext,
16
+ "host" | "artifacts" | "gitlab" | "send"
17
+ >;
18
+
19
+ /**
20
+ * Derive the turn's auth from the actor that triggered the delivery — the
21
+ * standard `{ auth: defaultGitLabAuth(ctx) }` dispatch from an inbound hook.
22
+ * The subscriber's Cursor identity is not the turn principal (same pattern
23
+ * as `defaultGitHubAuth` / `defaultOriginAuth`).
24
+ */
25
+ export function defaultGitLabAuth(ctx: DispatchContext): AuthContext {
26
+ const sender = ctx.sender;
27
+ const host = new URL(ctx.project.webUrl).host;
28
+ return {
29
+ authenticator: "gitlab-webhook",
30
+ principalId: sender === undefined ? "gitlab" : String(sender.id),
31
+ principalType: "user",
32
+ attributes: {
33
+ conversation_kind:
34
+ ctx.mergeRequestIid === undefined ? ctx.eventType : "merge_request",
35
+ project: ctx.project.pathWithNamespace,
36
+ project_id: String(ctx.project.id),
37
+ ...(ctx.deliveryId === undefined ? {} : { delivery_id: ctx.deliveryId }),
38
+ ...(sender === undefined
39
+ ? {}
40
+ : { subject: String(sender.id), username: sender.username }),
41
+ issuer: `gitlab:${host}`,
42
+ },
43
+ };
44
+ }
45
+
46
+ export function defaultGitLabTitle(
47
+ ctx: Pick<GitLabEventContext, "project" | "mergeRequestIid" | "eventType">
48
+ ): string {
49
+ return ctx.mergeRequestIid === undefined
50
+ ? `GitLab ${ctx.project.pathWithNamespace} ${ctx.eventType}`
51
+ : `GitLab ${ctx.project.pathWithNamespace}!${ctx.mergeRequestIid}`;
52
+ }
53
+
54
+ export function defaultGitLabMergeRequestMessage(
55
+ ctx: DispatchContext,
56
+ mergeRequest: GitLabMergeRequestEvent
57
+ ): string {
58
+ const head =
59
+ mergeRequest.sourceBranch !== undefined &&
60
+ mergeRequest.headSha !== undefined
61
+ ? `Head: ${mergeRequest.sourceBranch} (${mergeRequest.headSha})`
62
+ : undefined;
63
+ return [
64
+ `GitLab merge request trigger: ${ctx.project.pathWithNamespace}!${mergeRequest.iid}`,
65
+ `Action: ${mergeRequest.action ?? "unknown"}`,
66
+ `URL: ${mergeRequest.url}`,
67
+ ...(mergeRequest.title === undefined
68
+ ? []
69
+ : [`Title: ${mergeRequest.title}`]),
70
+ ...(head === undefined ? [] : [head]),
71
+ "Handle this merge request event.",
72
+ ].join("\n");
73
+ }
74
+
75
+ /**
76
+ * Default gate when no `onMergeRequest` hook is declared: a new or reopened
77
+ * merge request, or an `update` that pushed commits (`oldrev` present —
78
+ * title / label edits carry no `oldrev`), starts a turn as the actor.
79
+ */
80
+ export function defaultGitLabMergeRequestDispatch(
81
+ ctx: DispatchContext,
82
+ mergeRequest: GitLabMergeRequestEvent
83
+ ): GitLabTurnDispatch | null {
84
+ const action = mergeRequest.action;
85
+ const dispatches =
86
+ action === "open" ||
87
+ action === "reopen" ||
88
+ (action === "update" && mergeRequest.oldrev !== undefined);
89
+ if (!dispatches) {
90
+ return null;
91
+ }
92
+ return { auth: defaultGitLabAuth(ctx) };
93
+ }
@@ -0,0 +1,44 @@
1
+ /** {@link ChannelMeta.kind} value used by {@link gitlabChannel}. */
2
+ export const GITLAB_CHANNEL_KIND = "gitlab";
3
+
4
+ /**
5
+ * GitLab `object_kind` values (the `X-Gitlab-Event` payload discriminator)
6
+ * each authored hook subscribes to. `merge_request` is always declared: it
7
+ * is the default dispatch when no `onMergeRequest` hook exists.
8
+ */
9
+ const HOOK_EVENTS: ReadonlyArray<readonly [hook: string, objectKind: string]> =
10
+ [
11
+ ["onMergeRequest", "merge_request"],
12
+ ["onNote", "note"],
13
+ ["onPush", "push"],
14
+ ["onPipeline", "pipeline"],
15
+ ["onTagPush", "tag_push"],
16
+ ];
17
+
18
+ export interface GitLabWebhookEventOptions {
19
+ webhookEvents?: readonly string[];
20
+ onMergeRequest?: unknown;
21
+ onNote?: unknown;
22
+ onPush?: unknown;
23
+ onPipeline?: unknown;
24
+ onTagPush?: unknown;
25
+ }
26
+
27
+ export function deriveGitLabWebhookEvents(
28
+ options: GitLabWebhookEventOptions
29
+ ): string[] {
30
+ if (options.webhookEvents !== undefined) {
31
+ return [
32
+ ...new Set(
33
+ options.webhookEvents.map((event) => event.trim()).filter(Boolean)
34
+ ),
35
+ ];
36
+ }
37
+ const events = ["merge_request"];
38
+ for (const [hook, objectKind] of HOOK_EVENTS) {
39
+ if ((options as Record<string, unknown>)[hook] !== undefined) {
40
+ events.push(objectKind);
41
+ }
42
+ }
43
+ return [...new Set(events)];
44
+ }
@@ -0,0 +1,176 @@
1
+ import { z } from "zod";
2
+ import {
3
+ allowAll,
4
+ defineChannel,
5
+ localDevStrict,
6
+ loopbackOnly,
7
+ POST,
8
+ } from "../../channels.js";
9
+ import { withPropagatingBackgroundErrors } from "../../internal/channel-dispatch.js";
10
+ import { normalizeIdentity } from "../../internal/continuation-identity.js";
11
+ import { isDevMode } from "../../internal/dev-mode.js";
12
+ import { attachHostedAdmissionAdapter } from "../../internal/hosted-admission-adapter.js";
13
+ import type { ChannelDefinition } from "../../types.js";
14
+ import {
15
+ createPendingCursorGitLabCredentials,
16
+ parseCursorGitLabProjectScope,
17
+ registerGitLabCursorAccountRuntime,
18
+ } from "./cursor-account.js";
19
+ import { deriveGitLabWebhookEvents, GITLAB_CHANNEL_KIND } from "./events.js";
20
+ import {
21
+ dispatchGitLabWebhook,
22
+ handleGitLabWebhookRequest,
23
+ parseGitLabWebhookPayload,
24
+ resolveGitLabWebhookSecret,
25
+ } from "./gitlab-webhook.js";
26
+ import { emptyGitLabChannelState, type GitLabChannelState } from "./state.js";
27
+ import type { GitLabChannelOptions } from "./types.js";
28
+
29
+ const gitlabChannelOptionsByDefinition = new WeakMap<
30
+ object,
31
+ GitLabChannelOptions
32
+ >();
33
+
34
+ export function getGitLabChannelOptions(
35
+ definition: object
36
+ ): GitLabChannelOptions | undefined {
37
+ return gitlabChannelOptionsByDefinition.get(definition);
38
+ }
39
+
40
+ export function gitlabChannel(
41
+ options: GitLabChannelOptions = {}
42
+ ): ChannelDefinition<GitLabChannelState> {
43
+ const routePath = options.path ?? "/";
44
+ // With a hook secret the `X-Gitlab-Token` compare is the request auth
45
+ // (allowAll), matching GitHub HMAC + webhookSecret. Without one, prod stays
46
+ // loopback-strict; `--dev` admits loopback only. `isDevMode()` and the
47
+ // secret are read per request: channel modules construct at import time.
48
+ const auth = options.auth ?? [
49
+ (request, info) =>
50
+ (resolveGitLabWebhookSecret(options) !== undefined
51
+ ? allowAll()
52
+ : isDevMode()
53
+ ? loopbackOnly()
54
+ : localDevStrict())(request, info),
55
+ ];
56
+
57
+ const channelOptions: GitLabChannelOptions = { ...options };
58
+ if (channelOptions.continuation !== undefined) {
59
+ channelOptions.continuation = normalizeIdentity(
60
+ channelOptions.continuation,
61
+ GITLAB_CHANNEL_KIND
62
+ );
63
+ }
64
+ // `cursorAccount` routes `ctx.gitlab` through the SCM proxy once the serve
65
+ // host binds the Cursor API key + transport (`--cursor-scm-proxy`).
66
+ const cursorAccount =
67
+ options.cursorAccount === undefined || options.cursorAccount === false
68
+ ? undefined
69
+ : {
70
+ credentials: createPendingCursorGitLabCredentials(),
71
+ scope:
72
+ typeof options.cursorAccount === "object"
73
+ ? parseCursorGitLabProjectScope(options.cursorAccount.projects)
74
+ : undefined,
75
+ };
76
+ const proxy = () => cursorAccount?.credentials.getProxyTransport();
77
+
78
+ const definition = defineChannel<GitLabChannelState>({
79
+ auth,
80
+ state: emptyGitLabChannelState(),
81
+ events: options.events ?? {},
82
+ onStart: options.onStart,
83
+ onStop: options.onStop,
84
+ meta: {
85
+ kind: GITLAB_CHANNEL_KIND,
86
+ gitlabWebhookEvents: deriveGitLabWebhookEvents(channelOptions),
87
+ },
88
+ routes: [
89
+ POST(routePath, {
90
+ bodySchema: z.unknown(),
91
+ description: "GitLab webhook ingress",
92
+ handler: async (request, args) =>
93
+ handleGitLabWebhookRequest({
94
+ options: channelOptions,
95
+ request,
96
+ args,
97
+ proxy,
98
+ }),
99
+ }),
100
+ ],
101
+ });
102
+ gitlabChannelOptionsByDefinition.set(definition, channelOptions);
103
+ if (cursorAccount !== undefined) {
104
+ registerGitLabCursorAccountRuntime(definition, {
105
+ options: channelOptions,
106
+ ...cursorAccount,
107
+ });
108
+ }
109
+ attachHostedAdmissionAdapter(definition, {
110
+ kind: GITLAB_CHANNEL_KIND,
111
+ prepareArgs: withPropagatingBackgroundErrors,
112
+ dispatch: async ({ eventType, payload, deliveryId, args }) => {
113
+ const delivery = parseGitLabWebhookPayload(payload, eventType);
114
+ if (delivery === null) {
115
+ return Response.json(
116
+ { ok: false, error: "invalid_gitlab_payload" },
117
+ { status: 400 }
118
+ );
119
+ }
120
+ delivery.deliveryId = deliveryId;
121
+ return dispatchGitLabWebhook({
122
+ options: channelOptions,
123
+ delivery,
124
+ args,
125
+ proxy,
126
+ });
127
+ },
128
+ });
129
+ return definition;
130
+ }
131
+
132
+ /** Minimal mount shape shared by `serve` / the `gitlab` CLI. */
133
+ export interface GitLabAgentMountLike {
134
+ slug: string;
135
+ project: {
136
+ channels: Array<{
137
+ id: string;
138
+ definition: {
139
+ meta?: { kind?: string; gitlabWebhookEvents?: readonly string[] };
140
+ routes?: ReadonlyArray<{ method: string; path: string }>;
141
+ };
142
+ }>;
143
+ };
144
+ }
145
+
146
+ export interface GitLabChannelTarget {
147
+ slug: string;
148
+ channelId: string;
149
+ /** Route path under the channel (default `/`). */
150
+ routePath: string;
151
+ events: string[];
152
+ }
153
+
154
+ export function findGitLabChannelTargets(
155
+ mounts: ReadonlyArray<GitLabAgentMountLike>
156
+ ): GitLabChannelTarget[] {
157
+ const targets: GitLabChannelTarget[] = [];
158
+ for (const { slug, project } of mounts) {
159
+ for (const channel of project.channels) {
160
+ const meta = channel.definition.meta;
161
+ if (meta?.kind !== GITLAB_CHANNEL_KIND) {
162
+ continue;
163
+ }
164
+ const postRoute = (channel.definition.routes ?? []).find(
165
+ (route) => route.method === "POST"
166
+ );
167
+ targets.push({
168
+ slug,
169
+ channelId: channel.id,
170
+ routePath: postRoute?.path ?? "/",
171
+ events: [...(meta.gitlabWebhookEvents ?? [])],
172
+ });
173
+ }
174
+ }
175
+ return targets;
176
+ }