@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,389 @@
1
+ /**
2
+ * Guest egress readiness for hosted v2.
3
+ *
4
+ * `waitForEngineReady` only polls July `/v1/health` (process listening). After
5
+ * a freeze restore the guest network (DNS, egress programming, dead sockets)
6
+ * often comes up later. Authored admission/execution that `fetch`es in that
7
+ * window throws undici `TypeError: fetch failed`, which used to become a
8
+ * redacted HTTP 500 `internal_error` and a minutes-long Temporal retry.
9
+ *
10
+ * TAS waits on GET `/v1/guest-network` (90s, Sand's resume bar) before
11
+ * opening the hosted POST. The in-POST wait stays a short last-line check
12
+ * so leftover races still return 503 `guest_network_unavailable` instead of
13
+ * a redacted 500.
14
+ *
15
+ * Quiet guest Connect (`TypeError: fetch failed` with no errno, Connect
16
+ * `[unknown]`/`[canceled]`/`[unavailable]`, headers/body timeout) is a
17
+ * stall, not a dead NIC. Those become `guest_connect_stalled` so TAS
18
+ * retries the same pod — including when `waitForCompletion` resolves
19
+ * with that message instead of throwing.
20
+ */
21
+
22
+ export const GUEST_NETWORK_UNAVAILABLE = "guest_network_unavailable";
23
+ export const GUEST_CONNECT_STALLED = "guest_connect_stalled";
24
+
25
+ /** Control-plane readiness probe. Auth none, same as `/v1/health`. */
26
+ export const GUEST_NETWORK_PATH = "/v1/guest-network";
27
+
28
+ /**
29
+ * Sand `READY_TIMEOUT_MS` / resume reachability bar. The in-POST wait stays
30
+ * at {@link DEFAULT_WAIT_TIMEOUT_MS}; this budget is for GET `/v1/guest-network`
31
+ * so TAS does not open a hosted turn on a dead NIC.
32
+ */
33
+ export const GUEST_NETWORK_READY_WAIT_TIMEOUT_MS = 90_000;
34
+
35
+ /**
36
+ * Node/undici codes that mean the request never produced an HTTP response.
37
+ * `ENOTFOUND`/`EAI_AGAIN` cover restored-pod DNS races.
38
+ */
39
+ const TRANSIENT_NETWORK_ERROR_CODES: ReadonlySet<string> = new Set([
40
+ "ECONNREFUSED",
41
+ "ECONNRESET",
42
+ "EAI_AGAIN",
43
+ "EHOSTUNREACH",
44
+ "ENETDOWN",
45
+ "ENETUNREACH",
46
+ "ENOTFOUND",
47
+ "EPIPE",
48
+ "ETIMEDOUT",
49
+ "UND_ERR_CONNECT_TIMEOUT",
50
+ "UND_ERR_SOCKET",
51
+ "UND_ERR_CLOSED",
52
+ ]);
53
+
54
+ const MAX_CAUSE_DEPTH = 8;
55
+
56
+ export class GuestNetworkUnavailableError extends Error {
57
+ readonly code: typeof GUEST_NETWORK_UNAVAILABLE = GUEST_NETWORK_UNAVAILABLE;
58
+ readonly waitMs: number;
59
+ readonly probeAttempts: number;
60
+
61
+ constructor(
62
+ message = "Guest network is not ready for outbound requests.",
63
+ extras: { waitMs?: number; probeAttempts?: number } = {}
64
+ ) {
65
+ super(message);
66
+ this.name = "GuestNetworkUnavailableError";
67
+ this.waitMs = extras.waitMs ?? 0;
68
+ this.probeAttempts = extras.probeAttempts ?? 0;
69
+ }
70
+ }
71
+
72
+ /**
73
+ * True when the error (or anything on its `cause` chain, or inside an
74
+ * `AggregateError`) is a network-level fetch failure. Connect-web wraps
75
+ * undici's `TypeError: fetch failed` as `ConnectError` and keeps the
76
+ * original on `cause`.
77
+ */
78
+ export function isTransientGuestNetworkError(error: unknown): boolean {
79
+ return isTransientAtDepth(error, 0);
80
+ }
81
+
82
+ /**
83
+ * Connect/undici codes that mean the socket was up but the RPC went quiet
84
+ * (headers never arrived, body stalled, caller aborted). Not a DNS/egress
85
+ * miss — those live in the network errno set.
86
+ */
87
+ const QUIET_CONNECT_ERROR_CODES: ReadonlySet<string> = new Set([
88
+ "ABORT_ERR",
89
+ "UND_ERR_BODY_TIMEOUT",
90
+ "UND_ERR_HEADERS_TIMEOUT",
91
+ ]);
92
+
93
+ const QUIET_CONNECT_MESSAGE =
94
+ /^(?:\[(?:unknown|canceled|unavailable)\])|connection stalled|this operation was aborted/i;
95
+
96
+ export function hasGuestNetworkErrno(error: unknown): boolean {
97
+ return hasCodeAtDepth(error, 0, TRANSIENT_NETWORK_ERROR_CODES);
98
+ }
99
+
100
+ /**
101
+ * Quiet guest Connect: the request left the guest but never produced a
102
+ * useful RPC outcome. Distinct from {@link isTransientGuestNetworkError}
103
+ * so the in-POST wait still retries bare `fetch failed`, while the HTTP
104
+ * mapper can return `guest_connect_stalled` instead of a mystery 503.
105
+ */
106
+ export function isQuietGuestConnectStall(error: unknown): boolean {
107
+ if (error instanceof GuestNetworkUnavailableError) {
108
+ return false;
109
+ }
110
+ if (hasGuestNetworkErrno(error)) {
111
+ return false;
112
+ }
113
+ return isQuietSignatureAtDepth(error, 0);
114
+ }
115
+
116
+ /** Message-only form for `waitForCompletion` outcomes that do not throw. */
117
+ export function isQuietGuestConnectStallMessage(message: string): boolean {
118
+ return QUIET_CONNECT_MESSAGE.test(message);
119
+ }
120
+
121
+ function errorCode(error: Error): string | undefined {
122
+ const code = (error as NodeJS.ErrnoException).code;
123
+ return typeof code === "string" && code.length > 0 ? code : undefined;
124
+ }
125
+
126
+ function hasCodeAtDepth(
127
+ error: unknown,
128
+ depth: number,
129
+ codes: ReadonlySet<string>
130
+ ): boolean {
131
+ if (depth >= MAX_CAUSE_DEPTH || !(error instanceof Error)) {
132
+ return false;
133
+ }
134
+ const code = errorCode(error);
135
+ if (code !== undefined && codes.has(code)) {
136
+ return true;
137
+ }
138
+ if (
139
+ error instanceof AggregateError &&
140
+ error.errors.some((inner) => hasCodeAtDepth(inner, depth + 1, codes))
141
+ ) {
142
+ return true;
143
+ }
144
+ return hasCodeAtDepth(error.cause, depth + 1, codes);
145
+ }
146
+
147
+ function isQuietSignatureAtDepth(error: unknown, depth: number): boolean {
148
+ if (depth >= MAX_CAUSE_DEPTH || !(error instanceof Error)) {
149
+ return false;
150
+ }
151
+ if (error instanceof TypeError && error.message === "fetch failed") {
152
+ return true;
153
+ }
154
+ const code = errorCode(error);
155
+ if (code !== undefined && QUIET_CONNECT_ERROR_CODES.has(code)) {
156
+ return true;
157
+ }
158
+ if (QUIET_CONNECT_MESSAGE.test(error.message)) {
159
+ return true;
160
+ }
161
+ if (
162
+ error instanceof AggregateError &&
163
+ error.errors.some((inner) => isQuietSignatureAtDepth(inner, depth + 1))
164
+ ) {
165
+ return true;
166
+ }
167
+ return isQuietSignatureAtDepth(error.cause, depth + 1);
168
+ }
169
+
170
+ function isTransientAtDepth(error: unknown, depth: number): boolean {
171
+ if (depth >= MAX_CAUSE_DEPTH || !(error instanceof Error)) {
172
+ return false;
173
+ }
174
+ if (error instanceof TypeError && error.message === "fetch failed") {
175
+ return true;
176
+ }
177
+ if (error instanceof GuestNetworkUnavailableError) {
178
+ return true;
179
+ }
180
+ const code = errorCode(error);
181
+ if (
182
+ code !== undefined &&
183
+ (TRANSIENT_NETWORK_ERROR_CODES.has(code) ||
184
+ QUIET_CONNECT_ERROR_CODES.has(code))
185
+ ) {
186
+ return true;
187
+ }
188
+ if (
189
+ error instanceof AggregateError &&
190
+ error.errors.some((inner) => isTransientAtDepth(inner, depth + 1))
191
+ ) {
192
+ return true;
193
+ }
194
+ return isTransientAtDepth(error.cause, depth + 1);
195
+ }
196
+
197
+ const DEFAULT_PROBE_TIMEOUT_MS = 2_000;
198
+ /** Last-line wait inside an already-open hosted POST. */
199
+ export const DEFAULT_WAIT_TIMEOUT_MS = 8_000;
200
+ const DEFAULT_POLL_MS = 250;
201
+
202
+ export type GuestNetworkWaitOptions = {
203
+ /**
204
+ * When omitted, wait is enabled only on hosted engines (probe URL set and
205
+ * not running under Vitest). Tests pass `true` plus a mock `probe`.
206
+ */
207
+ enabled?: boolean;
208
+ /** Override the allowlisted probe URL. */
209
+ probeUrl?: string;
210
+ waitTimeoutMs?: number;
211
+ pollMs?: number;
212
+ probeTimeoutMs?: number;
213
+ probe?: () => Promise<void>;
214
+ now?: () => number;
215
+ sleep?: (ms: number) => Promise<void>;
216
+ };
217
+
218
+ function defaultSleep(ms: number): Promise<void> {
219
+ return new Promise((resolve) => {
220
+ setTimeout(resolve, ms);
221
+ });
222
+ }
223
+
224
+ function resolveProbeUrl(explicit?: string): string | undefined {
225
+ const raw =
226
+ explicit ??
227
+ process.env.AGENT_SERVE_EGRESS_PROBE_URL ??
228
+ process.env.AGENT_SERVE_CURSOR_BACKEND_URL;
229
+ const trimmed = raw?.trim() ?? "";
230
+ return trimmed.length > 0 ? trimmed : undefined;
231
+ }
232
+
233
+ function waitEnabled(options: GuestNetworkWaitOptions): boolean {
234
+ if (options.enabled !== undefined) {
235
+ return options.enabled;
236
+ }
237
+ if (process.env.VITEST === "true") {
238
+ return false;
239
+ }
240
+ if (process.env.AGENT_SERVE_SKIP_GUEST_NETWORK_WAIT === "1") {
241
+ return false;
242
+ }
243
+ return resolveProbeUrl(options.probeUrl) !== undefined;
244
+ }
245
+
246
+ async function defaultProbe(
247
+ probeUrl: string,
248
+ probeTimeoutMs: number
249
+ ): Promise<void> {
250
+ // Any HTTP response means egress and DNS work. 401/404 are ready.
251
+ const response = await fetch(probeUrl, {
252
+ method: "GET",
253
+ redirect: "manual",
254
+ signal: AbortSignal.timeout(probeTimeoutMs),
255
+ });
256
+ void response.body?.cancel();
257
+ }
258
+
259
+ export type GuestNetworkWaitOutcome = "ready" | "skipped" | "unavailable";
260
+
261
+ export type GuestNetworkWaitResult = {
262
+ outcome: Exclude<GuestNetworkWaitOutcome, "unavailable">;
263
+ waitMs: number;
264
+ probeAttempts: number;
265
+ };
266
+
267
+ export type GuestNetworkWaitStats = {
268
+ outcome: GuestNetworkWaitOutcome;
269
+ waitMs: number;
270
+ probeAttempts: number;
271
+ };
272
+
273
+ /**
274
+ * `Server-Timing` metric the control plane scrapes for Datadog
275
+ * `hosted_*.guest_network_wait_ms`. Any HTTP response (ok or 503) can
276
+ * carry it so restore time-to-egress is visible on both paths.
277
+ */
278
+ export function formatGuestNetworkServerTiming(
279
+ stats: GuestNetworkWaitStats
280
+ ): string {
281
+ return `guest_net;desc="${stats.outcome}";dur=${Math.max(0, stats.waitMs).toFixed(1)};probes=${String(stats.probeAttempts)}`;
282
+ }
283
+
284
+ /**
285
+ * Poll until a cheap allowlisted GET succeeds or the wait budget expires.
286
+ * Throws {@link GuestNetworkUnavailableError} on timeout so hosted routes
287
+ * can return 503 without running authored code.
288
+ */
289
+ export async function waitForGuestNetworkReady(
290
+ options: GuestNetworkWaitOptions = {}
291
+ ): Promise<GuestNetworkWaitResult> {
292
+ if (!waitEnabled(options)) {
293
+ return { outcome: "skipped", waitMs: 0, probeAttempts: 0 };
294
+ }
295
+ const probeUrl = resolveProbeUrl(options.probeUrl);
296
+ const probe =
297
+ options.probe ??
298
+ (probeUrl === undefined
299
+ ? undefined
300
+ : () =>
301
+ defaultProbe(
302
+ probeUrl,
303
+ options.probeTimeoutMs ?? DEFAULT_PROBE_TIMEOUT_MS
304
+ ));
305
+ if (probe === undefined) {
306
+ return { outcome: "skipped", waitMs: 0, probeAttempts: 0 };
307
+ }
308
+ const waitTimeoutMs = options.waitTimeoutMs ?? DEFAULT_WAIT_TIMEOUT_MS;
309
+ const pollMs = options.pollMs ?? DEFAULT_POLL_MS;
310
+ const now = options.now ?? Date.now;
311
+ const sleep = options.sleep ?? defaultSleep;
312
+ const startedAt = now();
313
+ let lastError: unknown;
314
+ let probeAttempts = 0;
315
+ for (;;) {
316
+ probeAttempts += 1;
317
+ try {
318
+ await probe();
319
+ return {
320
+ outcome: "ready",
321
+ waitMs: Math.max(0, now() - startedAt),
322
+ probeAttempts,
323
+ };
324
+ } catch (error) {
325
+ lastError = error;
326
+ if (!isTransientGuestNetworkError(error)) {
327
+ throw error;
328
+ }
329
+ }
330
+ const elapsedMs = now() - startedAt;
331
+ if (elapsedMs >= waitTimeoutMs) {
332
+ const detail =
333
+ lastError instanceof Error ? lastError.message : String(lastError);
334
+ throw new GuestNetworkUnavailableError(
335
+ `Guest network did not become ready within ${String(waitTimeoutMs)}ms (${detail}).`,
336
+ { waitMs: Math.max(0, elapsedMs), probeAttempts }
337
+ );
338
+ }
339
+ await sleep(pollMs);
340
+ }
341
+ }
342
+
343
+ /**
344
+ * GET `/v1/guest-network`: wait up to
345
+ * {@link GUEST_NETWORK_READY_WAIT_TIMEOUT_MS} and return 200 (ready/skipped)
346
+ * or 503 `guest_network_unavailable`. Server-Timing matches the hosted POST
347
+ * so TAS can scrape the same `guest_net` metric before `postHosted`.
348
+ */
349
+ export async function guestNetworkReadinessResponse(
350
+ options: GuestNetworkWaitOptions = {}
351
+ ): Promise<Response> {
352
+ try {
353
+ const result = await waitForGuestNetworkReady({
354
+ waitTimeoutMs: GUEST_NETWORK_READY_WAIT_TIMEOUT_MS,
355
+ ...options,
356
+ });
357
+ return new Response(JSON.stringify({ ok: true, ...result }), {
358
+ status: 200,
359
+ headers: {
360
+ "content-type": "application/json; charset=utf-8",
361
+ "server-timing": formatGuestNetworkServerTiming(result),
362
+ },
363
+ });
364
+ } catch (error) {
365
+ if (!(error instanceof GuestNetworkUnavailableError)) {
366
+ throw error;
367
+ }
368
+ return new Response(
369
+ JSON.stringify({
370
+ ok: false,
371
+ error: GUEST_NETWORK_UNAVAILABLE,
372
+ message: error.message,
373
+ waitMs: error.waitMs,
374
+ probeAttempts: error.probeAttempts,
375
+ }),
376
+ {
377
+ status: 503,
378
+ headers: {
379
+ "content-type": "application/json; charset=utf-8",
380
+ "server-timing": formatGuestNetworkServerTiming({
381
+ outcome: "unavailable",
382
+ waitMs: error.waitMs,
383
+ probeAttempts: error.probeAttempts,
384
+ }),
385
+ },
386
+ }
387
+ );
388
+ }
389
+ }
@@ -2,9 +2,9 @@
2
2
  * Author-facing OpenTelemetry surface for {@link HostContext.otel}.
3
3
  *
4
4
  * Always present on `ctx.host`. Counters and histograms no-op when no meter
5
- * is running. `setAttributes` still tags the open session when a collector
6
- * is attached. `forSession` is engine-only so a tool cannot retarget another
7
- * conversation's tags.
5
+ * is running. `setAttributes` still tags open turn/tool spans when a
6
+ * collector is attached. `forSession` is engine-only so a tool cannot
7
+ * retarget another conversation's tags.
8
8
  */
9
9
 
10
10
  import type { Counter, Histogram, Meter } from "@opentelemetry/api";
@@ -27,6 +27,7 @@ const RESERVED_METRICS = new Set([
27
27
 
28
28
  const RESERVED_ATTRIBUTES = new Set([
29
29
  "cursor.conversation.id",
30
+ "agent_sdk.session_id",
30
31
  "agent_sdk.agent",
31
32
  "agent_sdk.turn_id",
32
33
  "agent_sdk.framework",
@@ -157,7 +158,10 @@ function emitAttributes(
157
158
  "agent_sdk.agent": state.shared.agentName,
158
159
  ...(state.sessionId === undefined
159
160
  ? {}
160
- : { "cursor.conversation.id": state.sessionId }),
161
+ : {
162
+ "cursor.conversation.id": state.sessionId,
163
+ "agent_sdk.session_id": state.sessionId,
164
+ }),
161
165
  });
162
166
  }
163
167
 
@@ -4,17 +4,18 @@ import type { ChannelHandlerArgs } from "../types.js";
4
4
  * Hosted-admission hook a channel pack attaches to its definition.
5
5
  *
6
6
  * Hosted delivery looks this up from the mounted definition — it does not
7
- * switch on `channelKind`. A new forge implements `dispatch` / `getOutcome`
8
- * next to its webhook handler and calls {@link attachHostedAdmissionAdapter}
9
- * from the channel constructor.
7
+ * switch on `channelKind`. A new forge implements `dispatch` next to its
8
+ * webhook handler and calls {@link attachHostedAdmissionAdapter} from the
9
+ * channel constructor. Every 2xx from `dispatch` must carry a tag from
10
+ * `internal/channel-dispatch`; an untagged one is answered with 502
11
+ * `channel_outcome_missing`.
10
12
  */
11
- export type HostedAdmissionDispatchOutcome = "skip" | "task";
12
-
13
13
  export type HostedAdmissionAdapter = {
14
14
  kind: string;
15
15
  /**
16
- * Optional wrap of the capturing `send` / `waitUntil` args (GitHub uses
17
- * this to propagate background-task errors). Identity when omitted.
16
+ * Optional wrap of the capturing `send` / `waitUntil` args (the PR
17
+ * channels use this to propagate background-task errors). Identity when
18
+ * omitted.
18
19
  */
19
20
  prepareArgs?(args: ChannelHandlerArgs): ChannelHandlerArgs;
20
21
  dispatch(input: {
@@ -23,7 +24,6 @@ export type HostedAdmissionAdapter = {
23
24
  deliveryId: string;
24
25
  args: ChannelHandlerArgs;
25
26
  }): Promise<Response>;
26
- getOutcome(response: Response): HostedAdmissionDispatchOutcome | undefined;
27
27
  };
28
28
 
29
29
  const adapters = new WeakMap<object, HostedAdmissionAdapter>();
@@ -13,6 +13,12 @@ export const HOSTED_EXECUTION_DIAG_FILENAME = "hosted-execution.json";
13
13
  export type HostedAdmissionManagedAutomation = {
14
14
  automationUuid: string;
15
15
  mcpServerNames: string[];
16
+ /**
17
+ * Slack channel ids the automation's "Send to Slack" action targets,
18
+ * posted through the control-plane Slack relay. Omitted when the action
19
+ * is toggled off (never empty).
20
+ */
21
+ slackChannels?: string[];
16
22
  };
17
23
 
18
24
  export type HostedAdmission = {
@@ -59,9 +65,15 @@ const DELIVERY_KEYS = new Set([
59
65
  "payload",
60
66
  "managedAutomation",
61
67
  ]);
62
- const MANAGED_AUTOMATION_KEYS = new Set(["automationUuid", "mcpServerNames"]);
68
+ const MANAGED_AUTOMATION_KEYS = new Set([
69
+ "automationUuid",
70
+ "mcpServerNames",
71
+ "slackChannels",
72
+ ]);
63
73
  /** More names than any real automation configures is a malformed envelope. */
64
74
  const MANAGED_AUTOMATION_MAX_SERVERS = 64;
75
+ /** More channels than the dashboard picker allows is a malformed envelope. */
76
+ const MANAGED_AUTOMATION_MAX_SLACK_CHANNELS = 64;
65
77
  const EXECUTION_KEYS = new Set(["v", "admissionToken", "sessionPublicId"]);
66
78
 
67
79
  function boundedString(value: unknown, max: number): value is string {
@@ -92,10 +104,23 @@ function parseManagedAutomation(
92
104
  ) {
93
105
  return undefined;
94
106
  }
107
+ if (body.slackChannels !== undefined) {
108
+ if (
109
+ !Array.isArray(body.slackChannels) ||
110
+ body.slackChannels.length === 0 ||
111
+ body.slackChannels.length > MANAGED_AUTOMATION_MAX_SLACK_CHANNELS ||
112
+ !body.slackChannels.every((channel) => boundedString(channel, 64))
113
+ ) {
114
+ return undefined;
115
+ }
116
+ }
95
117
  return {
96
118
  managedAutomation: {
97
119
  automationUuid: body.automationUuid,
98
120
  mcpServerNames: body.mcpServerNames,
121
+ ...(body.slackChannels === undefined
122
+ ? {}
123
+ : { slackChannels: body.slackChannels as string[] }),
99
124
  },
100
125
  };
101
126
  }