@cursor/july 0.1.102 → 0.1.103

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (715) hide show
  1. package/AGENTS.md +34 -32
  2. package/README.md +10 -12
  3. package/dist/ab.d.ts +1 -1
  4. package/dist/ab.js +1 -1
  5. package/dist/bin/agent-serve.d.ts +12 -12
  6. package/dist/bin/agent-serve.js +114 -36
  7. package/dist/channels/bitbucket/api.d.ts +176 -0
  8. package/dist/channels/bitbucket/api.d.ts.map +1 -0
  9. package/dist/channels/bitbucket/api.js +419 -0
  10. package/dist/channels/bitbucket/binding.d.ts +71 -0
  11. package/dist/channels/bitbucket/binding.d.ts.map +1 -0
  12. package/dist/channels/bitbucket/binding.js +269 -0
  13. package/dist/channels/bitbucket/bitbucket-channel.d.ts +33 -0
  14. package/dist/channels/bitbucket/bitbucket-channel.d.ts.map +1 -0
  15. package/dist/channels/bitbucket/bitbucket-channel.js +120 -0
  16. package/dist/channels/bitbucket/bitbucket-webhook.d.ts +61 -0
  17. package/dist/channels/bitbucket/bitbucket-webhook.d.ts.map +1 -0
  18. package/dist/channels/bitbucket/bitbucket-webhook.js +394 -0
  19. package/dist/channels/bitbucket/checks.d.ts +67 -0
  20. package/dist/channels/bitbucket/checks.d.ts.map +1 -0
  21. package/dist/channels/bitbucket/checks.js +102 -0
  22. package/dist/channels/bitbucket/cursor-account.d.ts +37 -0
  23. package/dist/channels/bitbucket/cursor-account.d.ts.map +1 -0
  24. package/dist/channels/bitbucket/cursor-account.js +65 -0
  25. package/dist/channels/bitbucket/defaults.d.ts +26 -0
  26. package/dist/channels/bitbucket/defaults.d.ts.map +1 -0
  27. package/dist/channels/bitbucket/defaults.js +73 -0
  28. package/dist/channels/bitbucket/events.d.ts +22 -0
  29. package/dist/channels/bitbucket/events.d.ts.map +1 -0
  30. package/dist/channels/bitbucket/events.js +64 -0
  31. package/dist/channels/bitbucket/index.d.ts +34 -0
  32. package/dist/channels/bitbucket/index.d.ts.map +1 -0
  33. package/dist/channels/bitbucket/index.js +33 -0
  34. package/dist/channels/bitbucket/replay.d.ts +63 -0
  35. package/dist/channels/bitbucket/replay.d.ts.map +1 -0
  36. package/dist/channels/bitbucket/replay.js +304 -0
  37. package/dist/channels/bitbucket/state.d.ts +35 -0
  38. package/dist/channels/bitbucket/state.d.ts.map +1 -0
  39. package/dist/channels/bitbucket/state.js +21 -0
  40. package/dist/channels/bitbucket/types.d.ts +229 -0
  41. package/dist/channels/bitbucket/types.d.ts.map +1 -0
  42. package/dist/channels/bitbucket/types.js +1 -0
  43. package/dist/channels/deployments/deployments-channel.d.ts +22 -14
  44. package/dist/channels/deployments/deployments-channel.d.ts.map +1 -1
  45. package/dist/channels/deployments/deployments-channel.js +25 -27
  46. package/dist/channels/deployments/types.d.ts +12 -6
  47. package/dist/channels/deployments/types.d.ts.map +1 -1
  48. package/dist/channels/github/binding.d.ts +6 -0
  49. package/dist/channels/github/binding.d.ts.map +1 -1
  50. package/dist/channels/github/binding.js +3 -3
  51. package/dist/channels/github/cursor-account.d.ts +7 -3
  52. package/dist/channels/github/cursor-account.d.ts.map +1 -1
  53. package/dist/channels/github/cursor-account.js +10 -6
  54. package/dist/channels/github/events.d.ts +1 -1
  55. package/dist/channels/github/events.js +1 -1
  56. package/dist/channels/github/forward.d.ts +1 -1
  57. package/dist/channels/github/forward.d.ts.map +1 -1
  58. package/dist/channels/github/forward.js +3 -2
  59. package/dist/channels/github/github-channel.d.ts +29 -39
  60. package/dist/channels/github/github-channel.d.ts.map +1 -1
  61. package/dist/channels/github/github-channel.js +68 -101
  62. package/dist/channels/github/replay.d.ts +1 -1
  63. package/dist/channels/github/replay.js +1 -1
  64. package/dist/channels/github/state.d.ts +2 -0
  65. package/dist/channels/github/state.d.ts.map +1 -1
  66. package/dist/channels/github/state.js +14 -11
  67. package/dist/channels/github/types.d.ts +2 -4
  68. package/dist/channels/github/types.d.ts.map +1 -1
  69. package/dist/channels/gitlab/api.d.ts +91 -0
  70. package/dist/channels/gitlab/api.d.ts.map +1 -0
  71. package/dist/channels/gitlab/api.js +150 -0
  72. package/dist/channels/gitlab/binding.d.ts +58 -0
  73. package/dist/channels/gitlab/binding.d.ts.map +1 -0
  74. package/dist/channels/gitlab/binding.js +139 -0
  75. package/dist/channels/gitlab/checks.d.ts +110 -0
  76. package/dist/channels/gitlab/checks.d.ts.map +1 -0
  77. package/dist/channels/gitlab/checks.js +126 -0
  78. package/dist/channels/gitlab/cursor-account.d.ts +36 -0
  79. package/dist/channels/gitlab/cursor-account.d.ts.map +1 -0
  80. package/dist/channels/gitlab/cursor-account.js +65 -0
  81. package/dist/channels/gitlab/defaults.d.ts +25 -0
  82. package/dist/channels/gitlab/defaults.d.ts.map +1 -0
  83. package/dist/channels/gitlab/defaults.js +60 -0
  84. package/dist/channels/gitlab/events.d.ts +12 -0
  85. package/dist/channels/gitlab/events.d.ts.map +1 -0
  86. package/dist/channels/gitlab/events.js +28 -0
  87. package/dist/channels/gitlab/gitlab-channel.d.ts +33 -0
  88. package/dist/channels/gitlab/gitlab-channel.d.ts.map +1 -0
  89. package/dist/channels/gitlab/gitlab-channel.js +120 -0
  90. package/dist/channels/gitlab/gitlab-webhook.d.ts +45 -0
  91. package/dist/channels/gitlab/gitlab-webhook.d.ts.map +1 -0
  92. package/dist/channels/gitlab/gitlab-webhook.js +397 -0
  93. package/dist/channels/gitlab/index.d.ts +31 -0
  94. package/dist/channels/gitlab/index.d.ts.map +1 -0
  95. package/dist/channels/gitlab/index.js +30 -0
  96. package/dist/channels/gitlab/replay.d.ts +105 -0
  97. package/dist/channels/gitlab/replay.d.ts.map +1 -0
  98. package/dist/channels/gitlab/replay.js +206 -0
  99. package/dist/channels/gitlab/state.d.ts +33 -0
  100. package/dist/channels/gitlab/state.d.ts.map +1 -0
  101. package/dist/channels/gitlab/state.js +23 -0
  102. package/dist/channels/gitlab/types.d.ts +214 -0
  103. package/dist/channels/gitlab/types.d.ts.map +1 -0
  104. package/dist/channels/gitlab/types.js +1 -0
  105. package/dist/channels/origin/api.d.ts.map +1 -1
  106. package/dist/channels/origin/api.js +4 -2
  107. package/dist/channels/origin/origin-channel.d.ts +4 -9
  108. package/dist/channels/origin/origin-channel.d.ts.map +1 -1
  109. package/dist/channels/origin/origin-channel.js +8 -48
  110. package/dist/channels/origin/types.d.ts +20 -2
  111. package/dist/channels/origin/types.d.ts.map +1 -1
  112. package/dist/channels/slack/eval-directive.d.ts.map +1 -1
  113. package/dist/channels/slack/eval-directive.js +1 -7
  114. package/dist/channels/slack/init.d.ts.map +1 -1
  115. package/dist/channels/slack/init.js +3 -3
  116. package/dist/channels/slack/setup.d.ts +1 -1
  117. package/dist/channels/slack/setup.d.ts.map +1 -1
  118. package/dist/channels/slack/setup.js +6 -13
  119. package/dist/channels/slack/types.d.ts +1 -1
  120. package/dist/channels/slack/types.d.ts.map +1 -1
  121. package/dist/channels.d.ts +1 -1
  122. package/dist/channels.d.ts.map +1 -1
  123. package/dist/client.d.ts +1 -1
  124. package/dist/client.js +1 -1
  125. package/dist/connections.d.ts +1 -1
  126. package/dist/connections.js +1 -1
  127. package/dist/docs/404.html +2 -2
  128. package/dist/docs/ab.html +4 -4
  129. package/dist/docs/assets/{app.CLA03RCz.js → app.DW9pXkpL.js} +1 -1
  130. package/dist/docs/assets/chunks/@localSearchIndexroot.nrl1ifBq.js +1 -0
  131. package/dist/docs/assets/chunks/{VPLocalSearchBox.ifxv-cJV.js → VPLocalSearchBox.CdEIUwDg.js} +1 -1
  132. package/dist/docs/assets/chunks/{theme.DWCwM6p-.js → theme.YZMHgPgg.js} +2 -2
  133. package/dist/docs/assets/concepts.md.DgEcZOfT.js +1 -0
  134. package/dist/docs/assets/{concepts.md.rPzW2HZN.lean.js → concepts.md.DgEcZOfT.lean.js} +1 -1
  135. package/dist/docs/assets/{evals.md.CPzDAwoH.js → evals.md.CbMoebP1.js} +1 -1
  136. package/dist/docs/assets/guides_cloud-agents.md.DS8RIjwx.js +9 -0
  137. package/dist/docs/assets/{guides_github.md.BtPr9GaP.js → guides_github.md.DKYiT9do.js} +1 -1
  138. package/dist/docs/assets/{guides_opentelemetry.md.BVTXDCRg.js → guides_opentelemetry.md.COh9jFVg.js} +7 -8
  139. package/dist/docs/assets/{guides_opentelemetry.md.BVTXDCRg.lean.js → guides_opentelemetry.md.COh9jFVg.lean.js} +1 -1
  140. package/dist/docs/assets/{index.md.Kiht7ell.js → index.md.D75GWhPl.js} +1 -1
  141. package/dist/docs/assets/{reference_agent-config.md.BHeYMgme.js → reference_agent-config.md.CHNpiyp4.js} +3 -3
  142. package/dist/docs/assets/{reference_channels.md.Cd2f2iyV.js → reference_channels.md.Dz8Cnudp.js} +2 -2
  143. package/dist/docs/assets/{reference_channels.md.Cd2f2iyV.lean.js → reference_channels.md.Dz8Cnudp.lean.js} +1 -1
  144. package/dist/docs/assets/{reference_cli.md.DfoeyvL0.js → reference_cli.md.CJNc_xYK.js} +1 -1
  145. package/dist/docs/assets/{reference_extensions.md.9WQMZe1l.js → reference_extensions.md.DykHW3qL.js} +11 -5
  146. package/dist/docs/assets/reference_extensions.md.DykHW3qL.lean.js +1 -0
  147. package/dist/docs/assets/reference_hooks.md.Ddt5DdgJ.js +73 -0
  148. package/dist/docs/assets/{reference_hooks.md.a8BJxMR5.lean.js → reference_hooks.md.Ddt5DdgJ.lean.js} +1 -1
  149. package/dist/docs/assets/{reference_playground.md.DnX5nL-B.js → reference_playground.md.4myJPxrf.js} +1 -1
  150. package/dist/docs/assets/{reference_project-layout.md.CA6QP6Lw.js → reference_project-layout.md.DuBu9a96.js} +2 -2
  151. package/dist/docs/assets/reference_result.md.BK5SxDrf.js +19 -0
  152. package/dist/docs/assets/reference_result.md.BK5SxDrf.lean.js +1 -0
  153. package/dist/docs/assets/{reference_sessions.md.NxFP_CAC.js → reference_sessions.md.CueyOHSL.js} +1 -1
  154. package/dist/docs/assets/{reference_sessions.md.NxFP_CAC.lean.js → reference_sessions.md.CueyOHSL.lean.js} +1 -1
  155. package/dist/docs/assets/{reference_tools.md.B1up2r9W.js → reference_tools.md.aGrn99hP.js} +1 -1
  156. package/dist/docs/assets/skills_framework-map.md.haibFyoB.js +1 -0
  157. package/dist/docs/assets/{skills_otel.md.CgiZryR3.js → skills_otel.md.CqhobH3B.js} +3 -3
  158. package/dist/docs/assets/{skills_otel.md.CgiZryR3.lean.js → skills_otel.md.CqhobH3B.lean.js} +1 -1
  159. package/dist/docs/assets/{templates_pr-autofixer.md.x5zl6-GT.js → templates_pr-autofixer.md.Bds_XWcV.js} +2 -2
  160. package/dist/docs/assets/{templates_pr-autofixer.md.x5zl6-GT.lean.js → templates_pr-autofixer.md.Bds_XWcV.lean.js} +1 -1
  161. package/dist/docs/building-with-agents.html +4 -4
  162. package/dist/docs/concepts.html +5 -5
  163. package/dist/docs/concepts.md +2 -4
  164. package/dist/docs/deployment.html +4 -4
  165. package/dist/docs/design/runtime-abstraction.md +2 -3
  166. package/dist/docs/evals.html +6 -6
  167. package/dist/docs/evals.md +9 -7
  168. package/dist/docs/guides/agent-to-agent.html +4 -4
  169. package/dist/docs/guides/cloud-agents.html +6 -6
  170. package/dist/docs/guides/cloud-agents.md +4 -6
  171. package/dist/docs/guides/convert-automation.html +4 -4
  172. package/dist/docs/guides/github.html +6 -6
  173. package/dist/docs/guides/github.md +0 -1
  174. package/dist/docs/guides/human-in-the-loop.html +4 -4
  175. package/dist/docs/guides/mcp-oauth.html +5 -5
  176. package/dist/docs/guides/opentelemetry.html +10 -11
  177. package/dist/docs/guides/opentelemetry.md +41 -17
  178. package/dist/docs/guides/slack.html +4 -4
  179. package/dist/docs/guides/webhooks.html +4 -4
  180. package/dist/docs/hashmap.json +1 -1
  181. package/dist/docs/hillclimbing.html +4 -4
  182. package/dist/docs/index.html +6 -6
  183. package/dist/docs/index.md +2 -2
  184. package/dist/docs/llms-full.txt +501 -262
  185. package/dist/docs/llms.txt +2 -2
  186. package/dist/docs/quickstart.html +4 -4
  187. package/dist/docs/reference/agent-config.html +8 -8
  188. package/dist/docs/reference/agent-config.md +6 -10
  189. package/dist/docs/reference/artifacts.html +5 -5
  190. package/dist/docs/reference/channels.html +6 -6
  191. package/dist/docs/reference/channels.md +18 -8
  192. package/dist/docs/reference/cli.html +5 -5
  193. package/dist/docs/reference/cli.md +3 -4
  194. package/dist/docs/reference/connections.html +4 -4
  195. package/dist/docs/reference/extensions.html +16 -10
  196. package/dist/docs/reference/extensions.md +86 -22
  197. package/dist/docs/reference/hooks.html +69 -10
  198. package/dist/docs/reference/hooks.md +215 -46
  199. package/dist/docs/reference/http-api.html +4 -4
  200. package/dist/docs/reference/instructions.html +4 -4
  201. package/dist/docs/reference/playground.html +5 -5
  202. package/dist/docs/reference/playground.md +3 -0
  203. package/dist/docs/reference/project-layout.html +6 -6
  204. package/dist/docs/reference/project-layout.md +2 -1
  205. package/dist/docs/reference/prompt.html +4 -4
  206. package/dist/docs/reference/result.html +45 -0
  207. package/dist/docs/reference/result.md +89 -0
  208. package/dist/docs/reference/schedules.html +4 -4
  209. package/dist/docs/reference/sessions.html +5 -5
  210. package/dist/docs/reference/sessions.md +3 -1
  211. package/dist/docs/reference/skills.html +4 -4
  212. package/dist/docs/reference/subagents.html +4 -4
  213. package/dist/docs/reference/tools.html +5 -5
  214. package/dist/docs/reference/tools.md +1 -2
  215. package/dist/docs/scaffolding-agents.html +4 -4
  216. package/dist/docs/skills/ab.html +4 -4
  217. package/dist/docs/skills/create-agent.html +4 -4
  218. package/dist/docs/skills/debug.html +4 -4
  219. package/dist/docs/skills/evals.html +4 -4
  220. package/dist/docs/skills/framework-map.html +5 -5
  221. package/dist/docs/skills/framework-map.md +3 -1
  222. package/dist/docs/skills/github.html +4 -4
  223. package/dist/docs/skills/hillclimb.html +4 -4
  224. package/dist/docs/skills/index.html +4 -4
  225. package/dist/docs/skills/mcp-auth.html +4 -4
  226. package/dist/docs/skills/otel.html +7 -7
  227. package/dist/docs/skills/otel.md +8 -3
  228. package/dist/docs/skills/setup-slack.html +4 -4
  229. package/dist/docs/storage.html +4 -4
  230. package/dist/docs/templates/agentic-owners.html +4 -4
  231. package/dist/docs/templates/agents-md.html +4 -4
  232. package/dist/docs/templates/code-wiki.html +4 -4
  233. package/dist/docs/templates/demo.html +4 -4
  234. package/dist/docs/templates/pr-autofixer.html +6 -6
  235. package/dist/docs/templates/pr-autofixer.md +0 -3
  236. package/dist/docs/templates/security-help.html +4 -4
  237. package/dist/docs/templates/security-reviewer.html +4 -4
  238. package/dist/docs/templates/triage.html +4 -4
  239. package/dist/docs/troubleshooting.html +4 -4
  240. package/dist/evals.d.ts +1 -1
  241. package/dist/evals.d.ts.map +1 -1
  242. package/dist/extensions.d.ts +20 -7
  243. package/dist/extensions.d.ts.map +1 -1
  244. package/dist/extensions.js +36 -5
  245. package/dist/files.d.ts +16 -3
  246. package/dist/files.d.ts.map +1 -1
  247. package/dist/files.js +16 -3
  248. package/dist/index.d.ts +4 -4
  249. package/dist/index.d.ts.map +1 -1
  250. package/dist/index.js +3 -3
  251. package/dist/internal/ab-snapshot.d.ts.map +1 -1
  252. package/dist/internal/ab-snapshot.js +0 -1
  253. package/dist/internal/advertise-tools.d.ts.map +1 -1
  254. package/dist/internal/advertise-tools.js +1 -3
  255. package/dist/internal/authored-alias-hooks.d.ts +4 -13
  256. package/dist/internal/authored-alias-hooks.d.ts.map +1 -1
  257. package/dist/internal/authored-alias-hooks.js +4 -20
  258. package/dist/internal/authored-loaders.d.ts +2 -3
  259. package/dist/internal/authored-loaders.d.ts.map +1 -1
  260. package/dist/internal/authored-loaders.js +6 -20
  261. package/dist/internal/channel-dispatch.d.ts +43 -0
  262. package/dist/internal/channel-dispatch.d.ts.map +1 -0
  263. package/dist/internal/channel-dispatch.js +77 -0
  264. package/dist/internal/chat-client.d.ts +1 -1
  265. package/dist/internal/chat-client.js +1 -1
  266. package/dist/internal/cli-ax.d.ts +5 -5
  267. package/dist/internal/cli-ax.d.ts.map +1 -1
  268. package/dist/internal/cli-ax.js +5 -5
  269. package/dist/internal/cli-bitbucket.d.ts +33 -0
  270. package/dist/internal/cli-bitbucket.d.ts.map +1 -0
  271. package/dist/internal/cli-bitbucket.js +359 -0
  272. package/dist/internal/cli-convert-automation.d.ts +1 -1
  273. package/dist/internal/cli-convert-automation.js +2 -2
  274. package/dist/internal/cli-cursor.d.ts +1 -1
  275. package/dist/internal/cli-cursor.d.ts.map +1 -1
  276. package/dist/internal/cli-cursor.js +2 -4
  277. package/dist/internal/cli-deploy.d.ts.map +1 -1
  278. package/dist/internal/cli-deploy.js +2 -6
  279. package/dist/internal/cli-github.d.ts +1 -1
  280. package/dist/internal/cli-github.js +3 -3
  281. package/dist/internal/cli-gitlab.d.ts +37 -0
  282. package/dist/internal/cli-gitlab.d.ts.map +1 -0
  283. package/dist/internal/cli-gitlab.js +380 -0
  284. package/dist/internal/cli-mcp.d.ts.map +1 -1
  285. package/dist/internal/cli-mcp.js +2 -6
  286. package/dist/internal/cli-slack.d.ts +1 -1
  287. package/dist/internal/cli-slack.d.ts.map +1 -1
  288. package/dist/internal/cli-slack.js +2 -4
  289. package/dist/internal/continuation-channel.d.ts +14 -0
  290. package/dist/internal/continuation-channel.d.ts.map +1 -1
  291. package/dist/internal/continuation-channel.js +56 -3
  292. package/dist/internal/continuation-identity.d.ts +14 -15
  293. package/dist/internal/continuation-identity.d.ts.map +1 -1
  294. package/dist/internal/continuation-identity.js +182 -7
  295. package/dist/internal/conversation-mirror.d.ts.map +1 -1
  296. package/dist/internal/conversation-mirror.js +4 -3
  297. package/dist/internal/convert-automation/types.d.ts +1 -1
  298. package/dist/internal/convert-automation/types.js +1 -1
  299. package/dist/internal/cursor/account-mcp.d.ts.map +1 -1
  300. package/dist/internal/cursor/account-mcp.js +1 -3
  301. package/dist/internal/cursor/backend-client.d.ts +5 -4
  302. package/dist/internal/cursor/backend-client.d.ts.map +1 -1
  303. package/dist/internal/cursor/backend-client.js +5 -6
  304. package/dist/internal/cursor/bound-secret-file.d.ts +56 -0
  305. package/dist/internal/cursor/bound-secret-file.d.ts.map +1 -0
  306. package/dist/internal/cursor/bound-secret-file.js +88 -0
  307. package/dist/internal/cursor/credentials.d.ts +39 -5
  308. package/dist/internal/cursor/credentials.d.ts.map +1 -1
  309. package/dist/internal/cursor/credentials.js +58 -8
  310. package/dist/internal/cursor/hosted-bound-secrets.d.ts +41 -0
  311. package/dist/internal/cursor/hosted-bound-secrets.d.ts.map +1 -0
  312. package/dist/internal/cursor/hosted-bound-secrets.js +54 -0
  313. package/dist/internal/cursor/hosted-deployment-secrets.d.ts +19 -5
  314. package/dist/internal/cursor/hosted-deployment-secrets.d.ts.map +1 -1
  315. package/dist/internal/cursor/hosted-deployment-secrets.js +29 -9
  316. package/dist/internal/cursor/hosted-store-secrets.d.ts +1 -1
  317. package/dist/internal/cursor/hosted-store-secrets.js +1 -1
  318. package/dist/internal/cursor-account-mcp-auth.d.ts.map +1 -1
  319. package/dist/internal/cursor-account-mcp-auth.js +2 -4
  320. package/dist/internal/cursor-deployment-relay.d.ts +6 -2
  321. package/dist/internal/cursor-deployment-relay.d.ts.map +1 -1
  322. package/dist/internal/cursor-deployment-relay.js +13 -9
  323. package/dist/internal/deploy-manifest.d.ts +1 -1
  324. package/dist/internal/deploy-manifest.d.ts.map +1 -1
  325. package/dist/internal/deploy-manifest.js +1 -1
  326. package/dist/internal/discovery/ab.d.ts +1 -1
  327. package/dist/internal/discovery/ab.d.ts.map +1 -1
  328. package/dist/internal/discovery/ab.js +21 -9
  329. package/dist/internal/discovery/agent.d.ts +6 -1
  330. package/dist/internal/discovery/agent.d.ts.map +1 -1
  331. package/dist/internal/discovery/agent.js +65 -116
  332. package/dist/internal/discovery/channels.d.ts +1 -1
  333. package/dist/internal/discovery/channels.d.ts.map +1 -1
  334. package/dist/internal/discovery/channels.js +14 -14
  335. package/dist/internal/discovery/connections.d.ts +1 -5
  336. package/dist/internal/discovery/connections.d.ts.map +1 -1
  337. package/dist/internal/discovery/connections.js +30 -44
  338. package/dist/internal/discovery/cursor-plugin.d.ts.map +1 -1
  339. package/dist/internal/discovery/cursor-plugin.js +1 -3
  340. package/dist/internal/discovery/extension-overlay.d.ts +32 -0
  341. package/dist/internal/discovery/extension-overlay.d.ts.map +1 -0
  342. package/dist/internal/discovery/extension-overlay.js +191 -0
  343. package/dist/internal/discovery/extensions.d.ts +11 -2
  344. package/dist/internal/discovery/extensions.d.ts.map +1 -1
  345. package/dist/internal/discovery/extensions.js +211 -74
  346. package/dist/internal/discovery/hooks.d.ts +1 -1
  347. package/dist/internal/discovery/hooks.d.ts.map +1 -1
  348. package/dist/internal/discovery/hooks.js +15 -2
  349. package/dist/internal/discovery/info.d.ts.map +1 -1
  350. package/dist/internal/discovery/info.js +7 -1
  351. package/dist/internal/discovery/modules.d.ts.map +1 -1
  352. package/dist/internal/discovery/modules.js +8 -2
  353. package/dist/internal/discovery/names.d.ts +1 -1
  354. package/dist/internal/discovery/names.d.ts.map +1 -1
  355. package/dist/internal/discovery/names.js +1 -0
  356. package/dist/internal/discovery/project.d.ts +0 -2
  357. package/dist/internal/discovery/project.d.ts.map +1 -1
  358. package/dist/internal/discovery/project.js +64 -10
  359. package/dist/internal/discovery/runtime.d.ts.map +1 -1
  360. package/dist/internal/discovery/runtime.js +1 -2
  361. package/dist/internal/discovery/schedules.d.ts +1 -1
  362. package/dist/internal/discovery/schedules.d.ts.map +1 -1
  363. package/dist/internal/discovery/schedules.js +23 -2
  364. package/dist/internal/discovery/services.d.ts +6 -2
  365. package/dist/internal/discovery/services.d.ts.map +1 -1
  366. package/dist/internal/discovery/services.js +31 -1
  367. package/dist/internal/discovery/skills.d.ts +1 -6
  368. package/dist/internal/discovery/skills.d.ts.map +1 -1
  369. package/dist/internal/discovery/skills.js +8 -3
  370. package/dist/internal/discovery/subagent.d.ts +3 -0
  371. package/dist/internal/discovery/subagent.d.ts.map +1 -1
  372. package/dist/internal/discovery/subagent.js +109 -0
  373. package/dist/internal/discovery.d.ts +1 -2
  374. package/dist/internal/discovery.d.ts.map +1 -1
  375. package/dist/internal/discovery.js +1 -2
  376. package/dist/internal/distribution.d.ts +10 -27
  377. package/dist/internal/distribution.d.ts.map +1 -1
  378. package/dist/internal/distribution.js +25 -73
  379. package/dist/internal/docs-site.js +1 -1
  380. package/dist/internal/eval-run-store.d.ts +0 -1
  381. package/dist/internal/eval-run-store.d.ts.map +1 -1
  382. package/dist/internal/eval-runner.d.ts.map +1 -1
  383. package/dist/internal/framework-file-storage.d.ts +8 -0
  384. package/dist/internal/framework-file-storage.d.ts.map +1 -1
  385. package/dist/internal/framework-file-storage.js +8 -8
  386. package/dist/internal/github-fanout.d.ts +1 -1
  387. package/dist/internal/github-fanout.js +1 -1
  388. package/dist/internal/guest-network.d.ts +101 -0
  389. package/dist/internal/guest-network.d.ts.map +1 -0
  390. package/dist/internal/guest-network.js +304 -0
  391. package/dist/internal/host-otel.d.ts +3 -3
  392. package/dist/internal/host-otel.d.ts.map +1 -1
  393. package/dist/internal/host-otel.js +8 -4
  394. package/dist/internal/hosted-admission-adapter.d.ts +8 -7
  395. package/dist/internal/hosted-admission-adapter.d.ts.map +1 -1
  396. package/dist/internal/hosted-delivery-protocol.d.ts +6 -0
  397. package/dist/internal/hosted-delivery-protocol.d.ts.map +1 -1
  398. package/dist/internal/hosted-delivery-protocol.js +18 -5
  399. package/dist/internal/hosted-delivery.d.ts +18 -0
  400. package/dist/internal/hosted-delivery.d.ts.map +1 -1
  401. package/dist/internal/hosted-delivery.js +248 -118
  402. package/dist/internal/http-channel.d.ts.map +1 -1
  403. package/dist/internal/http-channel.js +1 -3
  404. package/dist/internal/init-interview.d.ts.map +1 -1
  405. package/dist/internal/init-interview.js +1 -3
  406. package/dist/internal/init-project.d.ts +2 -2
  407. package/dist/internal/init-project.js +2 -2
  408. package/dist/internal/inline-stdio-define-stub.d.ts +1 -1
  409. package/dist/internal/inline-stdio-define-stub.d.ts.map +1 -1
  410. package/dist/internal/inline-stdio-define-stub.js +1 -1
  411. package/dist/internal/is-record.d.ts +2 -0
  412. package/dist/internal/is-record.d.ts.map +1 -0
  413. package/dist/internal/is-record.js +3 -0
  414. package/dist/internal/json-schema.d.ts.map +1 -1
  415. package/dist/internal/json-schema.js +18 -10
  416. package/dist/internal/local-control-plane.d.ts +1 -2
  417. package/dist/internal/local-control-plane.d.ts.map +1 -1
  418. package/dist/internal/local-control-plane.js +3 -20
  419. package/dist/internal/mcp-endpoint.d.ts.map +1 -1
  420. package/dist/internal/mcp-endpoint.js +1 -3
  421. package/dist/internal/otel/collector.d.ts +12 -3
  422. package/dist/internal/otel/collector.d.ts.map +1 -1
  423. package/dist/internal/otel/collector.js +77 -125
  424. package/dist/internal/otel/config.d.ts +0 -2
  425. package/dist/internal/otel/config.d.ts.map +1 -1
  426. package/dist/internal/otel/config.js +17 -20
  427. package/dist/internal/otel/http.d.ts +2 -0
  428. package/dist/internal/otel/http.d.ts.map +1 -1
  429. package/dist/internal/otel/http.js +7 -1
  430. package/dist/internal/otel/mcp.d.ts.map +1 -1
  431. package/dist/internal/otel/mcp.js +3 -16
  432. package/dist/internal/otel/runtime.d.ts +26 -1
  433. package/dist/internal/otel/runtime.d.ts.map +1 -1
  434. package/dist/internal/otel/runtime.js +164 -15
  435. package/dist/internal/package-inline-stdio.d.ts.map +1 -1
  436. package/dist/internal/package-inline-stdio.js +3 -11
  437. package/dist/internal/playground/toolchain.d.ts +1 -1
  438. package/dist/internal/playground/toolchain.d.ts.map +1 -1
  439. package/dist/internal/playground/toolchain.js +1 -1
  440. package/dist/internal/request-error-status.d.ts +12 -0
  441. package/dist/internal/request-error-status.d.ts.map +1 -0
  442. package/dist/internal/request-error-status.js +52 -0
  443. package/dist/internal/resolve-prod-target.d.ts +1 -1
  444. package/dist/internal/resolve-prod-target.d.ts.map +1 -1
  445. package/dist/internal/resolve-prod-target.js +3 -7
  446. package/dist/internal/result-output.d.ts +18 -0
  447. package/dist/internal/result-output.d.ts.map +1 -0
  448. package/dist/internal/result-output.js +33 -0
  449. package/dist/internal/run-client.d.ts +2 -2
  450. package/dist/internal/run-client.js +2 -2
  451. package/dist/internal/runtime-dispatch-runner.d.ts +1 -11
  452. package/dist/internal/runtime-dispatch-runner.d.ts.map +1 -1
  453. package/dist/internal/runtime-dispatch-runner.js +2 -15
  454. package/dist/internal/sdk-runner.d.ts.map +1 -1
  455. package/dist/internal/sdk-runner.js +3 -6
  456. package/dist/internal/server.d.ts.map +1 -1
  457. package/dist/internal/server.js +110 -35
  458. package/dist/internal/session-cost.d.ts +3 -3
  459. package/dist/internal/session-cost.d.ts.map +1 -1
  460. package/dist/internal/session-cost.js +3 -3
  461. package/dist/internal/session-engine.d.ts +26 -11
  462. package/dist/internal/session-engine.d.ts.map +1 -1
  463. package/dist/internal/session-engine.js +146 -76
  464. package/dist/internal/session-run-log.d.ts.map +1 -1
  465. package/dist/internal/session-run-log.js +1 -3
  466. package/dist/internal/skills-sync.d.ts +1 -4
  467. package/dist/internal/skills-sync.d.ts.map +1 -1
  468. package/dist/internal/skills-sync.js +10 -50
  469. package/dist/internal/sleep.d.ts +2 -0
  470. package/dist/internal/sleep.d.ts.map +1 -0
  471. package/dist/internal/sleep.js +3 -0
  472. package/dist/internal/store-mirror.d.ts +29 -0
  473. package/dist/internal/store-mirror.d.ts.map +1 -0
  474. package/dist/internal/store-mirror.js +70 -0
  475. package/dist/internal/tenant-slack/relay.d.ts +73 -0
  476. package/dist/internal/tenant-slack/relay.d.ts.map +1 -0
  477. package/dist/internal/tenant-slack/relay.js +138 -0
  478. package/dist/internal/testing/scm-continuation-fixtures.d.ts +33 -0
  479. package/dist/internal/testing/scm-continuation-fixtures.d.ts.map +1 -0
  480. package/dist/internal/testing/scm-continuation-fixtures.js +253 -0
  481. package/dist/internal/workspace-sync.d.ts +22 -0
  482. package/dist/internal/workspace-sync.d.ts.map +1 -0
  483. package/dist/internal/workspace-sync.js +49 -0
  484. package/dist/internal/workspace.d.ts +7 -0
  485. package/dist/internal/workspace.d.ts.map +1 -1
  486. package/dist/internal/workspace.js +13 -0
  487. package/dist/otel.d.ts +23 -1
  488. package/dist/otel.d.ts.map +1 -1
  489. package/dist/otel.js +93 -2
  490. package/dist/playground/assets/index-59KvgREd.js +67 -0
  491. package/dist/playground/assets/index-MbMxXg-y.css +1 -0
  492. package/dist/playground/index.html +2 -2
  493. package/dist/result.d.ts +24 -0
  494. package/dist/result.d.ts.map +1 -0
  495. package/dist/result.js +27 -0
  496. package/dist/storage-backends/cursor-hosted.d.ts.map +1 -1
  497. package/dist/storage-backends/cursor-hosted.js +7 -4
  498. package/dist/storage-protocol.d.ts.map +1 -1
  499. package/dist/storage-protocol.js +1 -3
  500. package/dist/types.d.ts +90 -23
  501. package/dist/types.d.ts.map +1 -1
  502. package/docs/README.md +2 -2
  503. package/docs/concepts.md +2 -4
  504. package/docs/design/runtime-abstraction.md +2 -3
  505. package/docs/evals.md +9 -7
  506. package/docs/guides/cloud-agents.md +4 -6
  507. package/docs/guides/github.md +0 -1
  508. package/docs/guides/opentelemetry.md +41 -17
  509. package/docs/reference/agent-config.md +6 -10
  510. package/docs/reference/channels.md +18 -8
  511. package/docs/reference/cli.md +3 -4
  512. package/docs/reference/extensions.md +87 -23
  513. package/docs/reference/hooks.md +215 -46
  514. package/docs/reference/playground.md +3 -0
  515. package/docs/reference/project-layout.md +2 -1
  516. package/docs/reference/result.md +94 -0
  517. package/docs/reference/sessions.md +3 -1
  518. package/docs/reference/tools.md +1 -2
  519. package/docs/templates/pr-autofixer.md +0 -3
  520. package/package.json +29 -10
  521. package/skills/framework-map/SKILL.md +3 -1
  522. package/skills/otel/SKILL.md +8 -3
  523. package/src/ab.ts +1 -1
  524. package/src/bin/agent-serve.ts +121 -21
  525. package/src/channels/bitbucket/api.ts +623 -0
  526. package/src/channels/bitbucket/binding.ts +414 -0
  527. package/src/channels/bitbucket/bitbucket-channel.ts +182 -0
  528. package/src/channels/bitbucket/bitbucket-webhook.ts +576 -0
  529. package/src/channels/bitbucket/checks.ts +154 -0
  530. package/src/channels/bitbucket/cursor-account.ts +117 -0
  531. package/src/channels/bitbucket/defaults.ts +110 -0
  532. package/src/channels/bitbucket/events.ts +84 -0
  533. package/src/channels/bitbucket/index.ts +49 -0
  534. package/src/channels/bitbucket/replay.ts +439 -0
  535. package/src/channels/bitbucket/state.ts +59 -0
  536. package/src/channels/bitbucket/types.ts +266 -0
  537. package/src/channels/deployments/deployments-channel.ts +25 -43
  538. package/src/channels/deployments/types.ts +12 -6
  539. package/src/channels/github/binding.ts +8 -1
  540. package/src/channels/github/cursor-account.ts +17 -6
  541. package/src/channels/github/events.ts +1 -1
  542. package/src/channels/github/forward.ts +3 -2
  543. package/src/channels/github/github-channel.ts +74 -221
  544. package/src/channels/github/replay.ts +1 -1
  545. package/src/channels/github/state.ts +6 -0
  546. package/src/channels/github/types.ts +2 -5
  547. package/src/channels/gitlab/api.ts +228 -0
  548. package/src/channels/gitlab/binding.ts +233 -0
  549. package/src/channels/gitlab/checks.ts +243 -0
  550. package/src/channels/gitlab/cursor-account.ts +114 -0
  551. package/src/channels/gitlab/defaults.ts +93 -0
  552. package/src/channels/gitlab/events.ts +44 -0
  553. package/src/channels/gitlab/gitlab-channel.ts +176 -0
  554. package/src/channels/gitlab/gitlab-webhook.ts +555 -0
  555. package/src/channels/gitlab/index.ts +43 -0
  556. package/src/channels/gitlab/replay.ts +347 -0
  557. package/src/channels/gitlab/state.ts +55 -0
  558. package/src/channels/gitlab/types.ts +263 -0
  559. package/src/channels/origin/api.ts +4 -2
  560. package/src/channels/origin/origin-channel.ts +19 -94
  561. package/src/channels/origin/types.ts +23 -2
  562. package/src/channels/slack/eval-directive.ts +1 -6
  563. package/src/channels/slack/init.ts +6 -3
  564. package/src/channels/slack/setup.ts +7 -6
  565. package/src/channels/slack/types.ts +1 -1
  566. package/src/channels.ts +0 -1
  567. package/src/client.ts +1 -1
  568. package/src/connections.ts +1 -1
  569. package/src/evals.ts +1 -1
  570. package/src/extensions.ts +47 -5
  571. package/src/files.ts +21 -3
  572. package/src/index.ts +20 -28
  573. package/src/internal/ab-snapshot.ts +0 -3
  574. package/src/internal/advertise-tools.ts +1 -4
  575. package/src/internal/authored-alias-hooks.ts +4 -21
  576. package/src/internal/authored-loaders.ts +6 -23
  577. package/src/internal/channel-dispatch.ts +160 -0
  578. package/src/internal/chat-client.ts +1 -1
  579. package/src/internal/cli-ax.ts +5 -5
  580. package/src/internal/cli-bitbucket.ts +477 -0
  581. package/src/internal/cli-convert-automation.ts +7 -7
  582. package/src/internal/cli-cursor.ts +2 -5
  583. package/src/internal/cli-deploy.ts +2 -8
  584. package/src/internal/cli-github.ts +3 -3
  585. package/src/internal/cli-gitlab.ts +485 -0
  586. package/src/internal/cli-mcp.ts +2 -7
  587. package/src/internal/cli-slack.ts +2 -5
  588. package/src/internal/continuation-channel.ts +82 -1
  589. package/src/internal/continuation-identity.ts +229 -11
  590. package/src/internal/conversation-mirror.ts +4 -3
  591. package/src/internal/convert-automation/types.ts +1 -1
  592. package/src/internal/cursor/account-mcp.ts +1 -4
  593. package/src/internal/cursor/backend-client.ts +9 -10
  594. package/src/internal/cursor/bound-secret-file.ts +108 -0
  595. package/src/internal/cursor/credentials.ts +75 -10
  596. package/src/internal/cursor/hosted-bound-secrets.ts +75 -0
  597. package/src/internal/cursor/hosted-deployment-secrets.ts +42 -11
  598. package/src/internal/cursor/hosted-store-secrets.ts +1 -1
  599. package/src/internal/cursor-account-mcp-auth.ts +2 -5
  600. package/src/internal/cursor-deployment-relay.ts +11 -7
  601. package/src/internal/deploy-manifest.ts +4 -2
  602. package/src/internal/discovery/ab.ts +29 -9
  603. package/src/internal/discovery/agent.ts +94 -135
  604. package/src/internal/discovery/channels.ts +15 -13
  605. package/src/internal/discovery/connections.ts +55 -50
  606. package/src/internal/discovery/cursor-plugin.ts +1 -4
  607. package/src/internal/discovery/extension-overlay.ts +274 -0
  608. package/src/internal/discovery/extensions.ts +330 -105
  609. package/src/internal/discovery/hooks.ts +20 -2
  610. package/src/internal/discovery/info.ts +7 -0
  611. package/src/internal/discovery/modules.ts +8 -2
  612. package/src/internal/discovery/names.ts +2 -1
  613. package/src/internal/discovery/project.ts +80 -9
  614. package/src/internal/discovery/runtime.ts +1 -2
  615. package/src/internal/discovery/schedules.ts +28 -2
  616. package/src/internal/discovery/services.ts +37 -1
  617. package/src/internal/discovery/skills.ts +13 -3
  618. package/src/internal/discovery/subagent.ts +107 -0
  619. package/src/internal/discovery.ts +0 -2
  620. package/src/internal/distribution.ts +35 -83
  621. package/src/internal/docs-site.ts +1 -1
  622. package/src/internal/eval-run-store.ts +0 -7
  623. package/src/internal/eval-runner.ts +0 -1
  624. package/src/internal/framework-file-storage.ts +8 -8
  625. package/src/internal/github-fanout.ts +1 -1
  626. package/src/internal/guest-network.ts +383 -0
  627. package/src/internal/host-otel.ts +8 -4
  628. package/src/internal/hosted-admission-adapter.ts +8 -8
  629. package/src/internal/hosted-delivery-protocol.ts +26 -1
  630. package/src/internal/hosted-delivery.ts +376 -192
  631. package/src/internal/http-channel.ts +1 -4
  632. package/src/internal/init-interview.ts +1 -4
  633. package/src/internal/init-project.ts +2 -2
  634. package/src/internal/inline-stdio-define-stub.ts +1 -1
  635. package/src/internal/is-record.ts +3 -0
  636. package/src/internal/json-schema.ts +19 -10
  637. package/src/internal/local-control-plane.ts +5 -24
  638. package/src/internal/mcp-endpoint.ts +1 -4
  639. package/src/internal/otel/collector.ts +94 -159
  640. package/src/internal/otel/config.ts +10 -14
  641. package/src/internal/otel/http.ts +14 -1
  642. package/src/internal/otel/mcp.ts +3 -16
  643. package/src/internal/otel/runtime.ts +240 -25
  644. package/src/internal/package-inline-stdio.ts +3 -12
  645. package/src/internal/playground/toolchain.ts +1 -1
  646. package/src/internal/request-error-status.ts +72 -0
  647. package/src/internal/resolve-prod-target.ts +3 -8
  648. package/src/internal/result-output.ts +34 -0
  649. package/src/internal/run-client.ts +2 -2
  650. package/src/internal/runtime-dispatch-runner.ts +3 -21
  651. package/src/internal/sdk-runner.ts +3 -7
  652. package/src/internal/server.ts +153 -44
  653. package/src/internal/session-cost.ts +3 -3
  654. package/src/internal/session-engine.ts +182 -74
  655. package/src/internal/session-run-log.ts +1 -4
  656. package/src/internal/skills-sync.ts +13 -63
  657. package/src/internal/sleep.ts +3 -0
  658. package/src/internal/store-mirror.ts +86 -0
  659. package/src/internal/tenant-slack/relay.ts +179 -0
  660. package/src/internal/testing/scm-continuation-fixtures.ts +286 -0
  661. package/src/internal/workspace-sync.ts +55 -0
  662. package/src/internal/workspace.ts +14 -0
  663. package/src/otel.ts +143 -3
  664. package/src/result.ts +36 -0
  665. package/src/storage-backends/cursor-hosted.ts +7 -4
  666. package/src/storage-protocol.ts +1 -4
  667. package/src/types.ts +105 -34
  668. package/templates/triage/agent/lib/types.ts +0 -2
  669. package/dist/continuation.d.ts +0 -20
  670. package/dist/continuation.d.ts.map +0 -1
  671. package/dist/continuation.js +0 -18
  672. package/dist/docs/assets/chunks/@localSearchIndexroot.FAqdWIXo.js +0 -1
  673. package/dist/docs/assets/concepts.md.rPzW2HZN.js +0 -1
  674. package/dist/docs/assets/guides_cloud-agents.md.DumwWXba.js +0 -9
  675. package/dist/docs/assets/guides_cloud-runtime.md.BRirbRAN.js +0 -9
  676. package/dist/docs/assets/guides_cloud-runtime.md.BRirbRAN.lean.js +0 -1
  677. package/dist/docs/assets/reference_extensions.md.9WQMZe1l.lean.js +0 -1
  678. package/dist/docs/assets/reference_hooks.md.a8BJxMR5.js +0 -14
  679. package/dist/docs/assets/skills_framework-map.md.DDa4MeEW.js +0 -1
  680. package/dist/docs/guides/cloud-runtime.html +0 -35
  681. package/dist/docs/guides/cloud-runtime.md +0 -117
  682. package/dist/internal/convert-automation/index.d.ts +0 -3
  683. package/dist/internal/convert-automation/index.d.ts.map +0 -1
  684. package/dist/internal/convert-automation/index.js +0 -1
  685. package/dist/internal/grokbot/runner.d.ts +0 -64
  686. package/dist/internal/grokbot/runner.d.ts.map +0 -1
  687. package/dist/internal/grokbot/runner.js +0 -282
  688. package/dist/internal/managed-delivery.d.ts +0 -80
  689. package/dist/internal/managed-delivery.d.ts.map +0 -1
  690. package/dist/internal/managed-delivery.js +0 -86
  691. package/dist/internal/review-comments.d.ts +0 -370
  692. package/dist/internal/review-comments.d.ts.map +0 -1
  693. package/dist/internal/review-comments.js +0 -921
  694. package/dist/internal/shallow-clone.d.ts +0 -176
  695. package/dist/internal/shallow-clone.d.ts.map +0 -1
  696. package/dist/internal/shallow-clone.js +0 -419
  697. package/dist/playground/assets/index-B6C9S9nG.css +0 -1
  698. package/dist/playground/assets/index-ZqNoT8Ie.js +0 -69
  699. package/docs/guides/cloud-runtime.md +0 -122
  700. package/src/continuation.ts +0 -49
  701. package/src/internal/convert-automation/index.ts +0 -10
  702. package/src/internal/grokbot/runner.ts +0 -370
  703. package/src/internal/managed-delivery.ts +0 -125
  704. package/src/internal/review-comments.ts +0 -1363
  705. package/src/internal/shallow-clone.ts +0 -609
  706. /package/dist/docs/assets/{evals.md.CPzDAwoH.lean.js → evals.md.CbMoebP1.lean.js} +0 -0
  707. /package/dist/docs/assets/{guides_cloud-agents.md.DumwWXba.lean.js → guides_cloud-agents.md.DS8RIjwx.lean.js} +0 -0
  708. /package/dist/docs/assets/{guides_github.md.BtPr9GaP.lean.js → guides_github.md.DKYiT9do.lean.js} +0 -0
  709. /package/dist/docs/assets/{index.md.Kiht7ell.lean.js → index.md.D75GWhPl.lean.js} +0 -0
  710. /package/dist/docs/assets/{reference_agent-config.md.BHeYMgme.lean.js → reference_agent-config.md.CHNpiyp4.lean.js} +0 -0
  711. /package/dist/docs/assets/{reference_cli.md.DfoeyvL0.lean.js → reference_cli.md.CJNc_xYK.lean.js} +0 -0
  712. /package/dist/docs/assets/{reference_playground.md.DnX5nL-B.lean.js → reference_playground.md.4myJPxrf.lean.js} +0 -0
  713. /package/dist/docs/assets/{reference_project-layout.md.CA6QP6Lw.lean.js → reference_project-layout.md.DuBu9a96.lean.js} +0 -0
  714. /package/dist/docs/assets/{reference_tools.md.B1up2r9W.lean.js → reference_tools.md.aGrn99hP.lean.js} +0 -0
  715. /package/dist/docs/assets/{skills_framework-map.md.DDa4MeEW.lean.js → skills_framework-map.md.haibFyoB.lean.js} +0 -0
@@ -22,8 +22,19 @@ export type ConversationType =
22
22
  | "issue"
23
23
  | "thread"
24
24
  | "origin-pr"
25
+ | "gitlab-mr"
26
+ | "bitbucket-pr"
25
27
  | "deployment";
26
28
 
29
+ export type ContinuationKind =
30
+ | "github"
31
+ | "slack"
32
+ | "origin"
33
+ | "gitlab"
34
+ | "bitbucket"
35
+ | "deployments"
36
+ | "http";
37
+
27
38
  export const CONTINUATION_SELECTORS = [
28
39
  "github.pr/v1",
29
40
  "github.pr/v2",
@@ -36,6 +47,10 @@ export const CONTINUATION_SELECTORS = [
36
47
  "origin.pr/v1",
37
48
  "origin.pr/v2",
38
49
  "origin.none/v2",
50
+ "gitlab.mr/v2",
51
+ "gitlab.none/v2",
52
+ "bitbucket.pr/v2",
53
+ "bitbucket.none/v2",
39
54
  "deployments.none/v1",
40
55
  "deployments.none/v2",
41
56
  "deployments.deployment/v2",
@@ -52,7 +67,7 @@ export type ParsedContinuation = {
52
67
  selector: ContinuationSelector;
53
68
  version: 1 | 2;
54
69
  type: ConversationType | "none";
55
- kind: "github" | "slack" | "origin" | "deployments" | "http";
70
+ kind: ContinuationKind;
56
71
  };
57
72
 
58
73
  export type ContinuationClaim = {
@@ -70,7 +85,7 @@ export type MailboxContinuation = {
70
85
 
71
86
  export type ContinuationBuiltin = {
72
87
  type: ConversationType;
73
- kind: "github" | "slack" | "origin" | "deployments";
88
+ kind: Exclude<ContinuationKind, "http">;
74
89
  events: readonly string[];
75
90
  format: string;
76
91
  };
@@ -104,6 +119,9 @@ export const BUILTINS: readonly ContinuationBuiltin[] = [
104
119
  {
105
120
  type: "origin-pr",
106
121
  kind: "origin",
122
+ // Public webhook deliveries carry `pullRequest.number` + repository
123
+ // (`owner.slug` / `name`); keep in lockstep with the control plane's
124
+ // `conversation/origin.ts`.
107
125
  events: [
108
126
  "pull_request.created",
109
127
  "pull_request.published",
@@ -113,9 +131,34 @@ export const BUILTINS: readonly ContinuationBuiltin[] = [
113
131
  "pull_request.merged",
114
132
  "pull_request.comment.created",
115
133
  "pull_request.review.submitted",
134
+ "pull_request.metadata.updated",
116
135
  ],
117
136
  format: "origin-pr:{fullName}#{number}",
118
137
  },
138
+ {
139
+ type: "gitlab-mr",
140
+ kind: "gitlab",
141
+ // GitLab `object_kind`s that carry a merge request: `note` only when
142
+ // `noteable_type` is MergeRequest, `pipeline` only with `merge_request`.
143
+ events: ["merge_request", "note", "pipeline"],
144
+ format: "gitlab-mr:{fullName}!{number}",
145
+ },
146
+ {
147
+ type: "bitbucket-pr",
148
+ kind: "bitbucket",
149
+ // Cloud vocabulary; Data Center keys are normalized before the stamp.
150
+ events: [
151
+ "pullrequest:created",
152
+ "pullrequest:updated",
153
+ "pullrequest:approved",
154
+ "pullrequest:unapproved",
155
+ "pullrequest:changes_request_created",
156
+ "pullrequest:fulfilled",
157
+ "pullrequest:rejected",
158
+ "pullrequest:comment_created",
159
+ ],
160
+ format: "bitbucket-pr:{fullName}#{number}",
161
+ },
119
162
  {
120
163
  type: "deployment",
121
164
  kind: "deployments",
@@ -147,6 +190,10 @@ const SELECTOR_FIELDS: {
147
190
  "origin.pr/v1": { version: 1, type: "origin-pr", kind: "origin" },
148
191
  "origin.pr/v2": { version: 2, type: "origin-pr", kind: "origin" },
149
192
  "origin.none/v2": { version: 2, type: "none", kind: "origin" },
193
+ "gitlab.mr/v2": { version: 2, type: "gitlab-mr", kind: "gitlab" },
194
+ "gitlab.none/v2": { version: 2, type: "none", kind: "gitlab" },
195
+ "bitbucket.pr/v2": { version: 2, type: "bitbucket-pr", kind: "bitbucket" },
196
+ "bitbucket.none/v2": { version: 2, type: "none", kind: "bitbucket" },
150
197
  "deployments.none/v1": { version: 1, type: "none", kind: "deployments" },
151
198
  "deployments.none/v2": { version: 2, type: "none", kind: "deployments" },
152
199
  "deployments.deployment/v2": {
@@ -158,9 +205,7 @@ const SELECTOR_FIELDS: {
158
205
  "none/v2": { version: 2, type: "none", kind: "http" },
159
206
  };
160
207
 
161
- export function isContinuationSelector(
162
- value: string
163
- ): value is ContinuationSelector {
208
+ function isContinuationSelector(value: string): value is ContinuationSelector {
164
209
  return Object.hasOwn(SELECTOR_FIELDS, value);
165
210
  }
166
211
 
@@ -190,6 +235,20 @@ export function defaultContinuationSelector(
190
235
  return "slack.thread/v2";
191
236
  case "origin":
192
237
  return originV2Default(eventTypes);
238
+ case "gitlab":
239
+ return membershipOrNone(
240
+ eventTypes,
241
+ "gitlab-mr",
242
+ "gitlab.mr/v2",
243
+ "gitlab.none/v2"
244
+ );
245
+ case "bitbucket":
246
+ return membershipOrNone(
247
+ eventTypes,
248
+ "bitbucket-pr",
249
+ "bitbucket.pr/v2",
250
+ "bitbucket.none/v2"
251
+ );
193
252
  case "deployments":
194
253
  return deploymentsV2Default(eventTypes);
195
254
  default:
@@ -197,6 +256,20 @@ export function defaultContinuationSelector(
197
256
  }
198
257
  }
199
258
 
259
+ /** Typed selector when every declared event is in the type's membership. */
260
+ function membershipOrNone(
261
+ eventTypes: readonly string[] | undefined,
262
+ type: ConversationType,
263
+ typed: ContinuationSelector,
264
+ none: ContinuationSelector
265
+ ): ContinuationSelector {
266
+ const allowed = new Set(builtinForType(type)?.events ?? []);
267
+ if ((eventTypes ?? []).some((event) => !allowed.has(event))) {
268
+ return none;
269
+ }
270
+ return typed;
271
+ }
272
+
200
273
  function githubV2Default(eventTypes?: readonly string[]): ContinuationSelector {
201
274
  const events = eventTypes ?? [];
202
275
  const issueEvents = new Set(builtinForType("issue")?.events ?? []);
@@ -219,6 +292,45 @@ function originV2Default(eventTypes?: readonly string[]): ContinuationSelector {
219
292
  return "origin.pr/v2";
220
293
  }
221
294
 
295
+ /**
296
+ * Omitted `/v2` default became type `none` because a declared event sits
297
+ * outside the kind's typed membership. Validate warns; handshake stays
298
+ * silent on omitted selectors (type `none` is always admitted).
299
+ */
300
+ export function omittedV2MembershipDowngrade(
301
+ kind: string,
302
+ eventTypes?: readonly string[]
303
+ ):
304
+ | { selector: ContinuationSelector; unexpected: readonly string[] }
305
+ | undefined {
306
+ const events = eventTypes ?? [];
307
+ if (events.length === 0) {
308
+ return undefined;
309
+ }
310
+ const selector = defaultContinuationSelector(kind, "v2", events);
311
+ const parsed = parseContinuationSelector(selector);
312
+ if (parsed === undefined || parsed.type !== "none") {
313
+ return undefined;
314
+ }
315
+ const typed =
316
+ kind === "github"
317
+ ? builtinForType("pr")
318
+ : kind === "origin"
319
+ ? builtinForType("origin-pr")
320
+ : kind === "deployments"
321
+ ? builtinForType("deployment")
322
+ : undefined;
323
+ if (typed === undefined) {
324
+ return undefined;
325
+ }
326
+ const allowed = new Set(typed.events);
327
+ const unexpected = events.filter((event) => !allowed.has(event));
328
+ if (unexpected.length === 0) {
329
+ return undefined;
330
+ }
331
+ return { selector, unexpected };
332
+ }
333
+
222
334
  function deploymentsV2Default(
223
335
  eventTypes?: readonly string[]
224
336
  ): ContinuationSelector {
@@ -239,7 +351,7 @@ export function parseContinuationSelector(
239
351
  return { selector, ...SELECTOR_FIELDS[selector] };
240
352
  }
241
353
 
242
- export function resolveContinuation(
354
+ function resolveContinuation(
243
355
  raw?: ContinuationIdentity,
244
356
  kind?: string
245
357
  ): ParsedContinuation {
@@ -273,17 +385,17 @@ export function isV2DurableContinuationKey(key: string): boolean {
273
385
  return key.startsWith("cont:") || key.startsWith("evt:");
274
386
  }
275
387
 
276
- export function newEvtKey(): string {
388
+ function newEvtKey(): string {
277
389
  return `evt:${randomBytes(16).toString("hex")}`;
278
390
  }
279
391
 
280
- export function builtinForType(
392
+ function builtinForType(
281
393
  type: ConversationType
282
394
  ): ContinuationBuiltin | undefined {
283
395
  return BUILTINS.find((builtin) => builtin.type === type);
284
396
  }
285
397
 
286
- export function formatConversationKey(
398
+ function formatConversationKey(
287
399
  type: ConversationType,
288
400
  fields: {
289
401
  fullName?: string;
@@ -300,6 +412,10 @@ export function formatConversationKey(
300
412
  return `github-issue:${fields.fullName}#${fields.number}`;
301
413
  case "origin-pr":
302
414
  return `origin-pr:${fields.fullName}#${fields.number}`;
415
+ case "gitlab-mr":
416
+ return `gitlab-mr:${fields.fullName}!${fields.number}`;
417
+ case "bitbucket-pr":
418
+ return `bitbucket-pr:${fields.fullName}#${fields.number}`;
303
419
  case "thread":
304
420
  return `${fields.channelId}:${fields.threadTs}`;
305
421
  case "deployment":
@@ -327,7 +443,9 @@ export function mintClaim(claim: ContinuationClaim): string {
327
443
  }
328
444
  case "pr":
329
445
  case "issue":
330
- case "origin-pr": {
446
+ case "origin-pr":
447
+ case "gitlab-mr":
448
+ case "bitbucket-pr": {
331
449
  const resource = claim.resource;
332
450
  const fullName =
333
451
  "fullName" in resource
@@ -341,8 +459,15 @@ export function mintClaim(claim: ContinuationClaim): string {
341
459
  `v2: ${claim.type} claim requires repository and number`
342
460
  );
343
461
  }
462
+ // GitLab paths and Bitbucket project keys arrive in API-native casing;
463
+ // the webhook extractors lowercase them, so the claim must too or the
464
+ // two mint different keys for the same MR / PR.
465
+ const caseFolded =
466
+ claim.type === "gitlab-mr" || claim.type === "bitbucket-pr"
467
+ ? fullName.toLowerCase()
468
+ : fullName;
344
469
  return `cont:${formatConversationKey(claim.type, {
345
- fullName,
470
+ fullName: caseFolded,
346
471
  number,
347
472
  })}`;
348
473
  }
@@ -421,6 +546,10 @@ export function extractContinuation(
421
546
  return extractSlack(payload);
422
547
  case "origin-pr":
423
548
  return extractOrigin(payload);
549
+ case "gitlab-mr":
550
+ return extractGitlab(eventName, payload);
551
+ case "bitbucket-pr":
552
+ return extractBitbucket(payload);
424
553
  case "deployment":
425
554
  return extractDeployment(payload);
426
555
  }
@@ -629,6 +758,95 @@ function originExtractRecord(
629
758
  return record;
630
759
  }
631
760
 
761
+ /**
762
+ * GitLab merge request identity: `project.path_with_namespace` (nested
763
+ * groups keep their slashes; lowercased like the scope key) plus the MR
764
+ * `iid`. `merge_request` reads `object_attributes.iid`; `note` binds only
765
+ * MR notes (`noteable_type: "MergeRequest"`); `pipeline` binds only when
766
+ * the payload carries a `merge_request`.
767
+ */
768
+ function extractGitlab(
769
+ eventName: string,
770
+ payload: unknown
771
+ ): string | undefined {
772
+ const record = asRecord(payload);
773
+ if (record === undefined) {
774
+ return undefined;
775
+ }
776
+ const fullName = nonEmpty(
777
+ asRecord(record.project)?.path_with_namespace
778
+ )?.toLowerCase();
779
+ if (fullName === undefined) {
780
+ return undefined;
781
+ }
782
+ let number: number | undefined;
783
+ switch (eventName) {
784
+ case "merge_request":
785
+ number = positiveInt(asRecord(record.object_attributes)?.iid);
786
+ break;
787
+ case "note":
788
+ if (
789
+ asRecord(record.object_attributes)?.noteable_type !== "MergeRequest"
790
+ ) {
791
+ return undefined;
792
+ }
793
+ number = positiveInt(asRecord(record.merge_request)?.iid);
794
+ break;
795
+ case "pipeline":
796
+ number = positiveInt(asRecord(record.merge_request)?.iid);
797
+ break;
798
+ default:
799
+ return undefined;
800
+ }
801
+ if (number === undefined) {
802
+ return undefined;
803
+ }
804
+ return `cont:${formatConversationKey("gitlab-mr", { fullName, number })}`;
805
+ }
806
+
807
+ /**
808
+ * Bitbucket pull request identity from either dialect. Cloud payloads carry
809
+ * `repository.full_name` + `pullrequest.id`; Data Center payloads carry
810
+ * `pullRequest.id` and the repo under `pullRequest.toRef.repository`
811
+ * (`project.key/slug`). Lowercased so a Cloud/DC pair for one logical PR
812
+ * shares a key.
813
+ */
814
+ function extractBitbucket(payload: unknown): string | undefined {
815
+ const record = asRecord(payload);
816
+ if (record === undefined) {
817
+ return undefined;
818
+ }
819
+ const pullRequest =
820
+ asRecord(record.pullrequest) ?? asRecord(record.pullRequest);
821
+ const number = positiveInt(pullRequest?.id);
822
+ const fullName = bitbucketFullName(
823
+ asRecord(record.repository) ??
824
+ asRecord(asRecord(pullRequest?.toRef)?.repository)
825
+ );
826
+ if (number === undefined || fullName === undefined) {
827
+ return undefined;
828
+ }
829
+ return `cont:${formatConversationKey("bitbucket-pr", { fullName, number })}`;
830
+ }
831
+
832
+ function bitbucketFullName(
833
+ repository: Record<string, unknown> | undefined
834
+ ): string | undefined {
835
+ if (repository === undefined) {
836
+ return undefined;
837
+ }
838
+ const cloud = nonEmpty(repository.full_name);
839
+ if (cloud !== undefined) {
840
+ return cloud.toLowerCase();
841
+ }
842
+ const projectKey = nonEmpty(asRecord(repository.project)?.key);
843
+ const slug = nonEmpty(repository.slug);
844
+ if (projectKey === undefined || slug === undefined) {
845
+ return undefined;
846
+ }
847
+ return `${projectKey}/${slug}`.toLowerCase();
848
+ }
849
+
632
850
  function extractDeployment(payload: unknown): string | undefined {
633
851
  const record = asRecord(payload);
634
852
  const deploymentId = nonEmpty(record?.deploymentId);
@@ -395,9 +395,10 @@ export function selectConversationMirror(input: {
395
395
  sink: cursorHostedFiles({
396
396
  resolveStoreSourceId: () =>
397
397
  hosting.resolveStoreIds().frameworkStoreSourceId,
398
- // Full chain (env → key file → stored login): frozen engines listen
399
- // unsigned and bind CURSOR_API_KEY_FILE at task time, after this sink
400
- // is constructed.
398
+ // Full chain (env → key file → stored login), resolved lazily: frozen
399
+ // engines listen unsigned and only gain a credential at task time,
400
+ // after this sink is constructed. Hosted deliveries have consumed the
401
+ // bind file into CURSOR_API_KEY by then, so this resolves from env.
401
402
  resolveApiKey: () => resolveApiKeySync()?.apiKey,
402
403
  }),
403
404
  agentName: input.project.name,
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Types for `convertWorkflow` — the pure automation → agentsdk project
3
- * converter behind `agent-serve convert-automation`.
3
+ * converter behind `agent-sdk convert-automation`.
4
4
  *
5
5
  * The workflow arrives as generic proto3 JSON (lowerCamelCase field names,
6
6
  * enum value names as strings) produced by the backend export endpoint
@@ -28,6 +28,7 @@ import type {
28
28
  } from "../../types.js";
29
29
  import { isCursorAccountTransport } from "../../types.js";
30
30
  import { probeConnectorAuthUrls } from "../cursor-account-mcp-auth.js";
31
+ import { describeError } from "../describe-error.js";
31
32
  import { LOG_PREFIX } from "../distribution.js";
32
33
  import { handleStatelessMcpRequest } from "../mcp-endpoint.js";
33
34
  import { isLoopbackAddress } from "../net.js";
@@ -560,10 +561,6 @@ function trimTrailingSlash(url: string): string {
560
561
  return url.endsWith("/") ? url.slice(0, -1) : url;
561
562
  }
562
563
 
563
- function describeError(error: unknown): string {
564
- return error instanceof Error ? error.message : String(error);
565
- }
566
-
567
564
  export interface CursorAccountMcpWarningServer {
568
565
  serverIdentifier: string;
569
566
  status: string;
@@ -17,6 +17,8 @@
17
17
  import { randomUUID } from "node:crypto";
18
18
  import { z } from "zod";
19
19
  import type { McpToolAnnotations } from "../../types.js";
20
+ import { describeError } from "../describe-error.js";
21
+ import { CLI_COMMAND_NAME as CLI } from "../distribution.js";
20
22
  import { boundedToolAnnotations } from "../mcp-host.js";
21
23
  import {
22
24
  CURSOR_SESSION_EXCHANGE_PATH,
@@ -300,9 +302,10 @@ export interface CursorBackendClientOptions {
300
302
  backendUrl: string;
301
303
  apiKey: string;
302
304
  /**
303
- * Re-read the key on each authenticated call. Hosted freeze listens
304
- * unsigned and the binder drops the key after restore; a constructor-frozen
305
- * key would miss that bind.
305
+ * Re-resolve the key on each authenticated call. Hosted freeze listens
306
+ * unsigned and only gains a credential at task time (hosted deliveries
307
+ * consume the bind file into `CURSOR_API_KEY` before authored work); a
308
+ * constructor-frozen key would miss that bind.
306
309
  */
307
310
  getApiKey?: () => string;
308
311
  logger?: (line: string) => void;
@@ -607,7 +610,7 @@ export class CursorBackendClient {
607
610
  }
608
611
  throw new CursorBackendError(
609
612
  error.status === 401
610
- ? "The Cursor API key was rejected. Run `agent-serve login` again or update CURSOR_API_KEY."
613
+ ? `The Cursor API key was rejected. Run \`${CLI} login\` again or update CURSOR_API_KEY.`
611
614
  : `Cursor API key exchange failed (${error.status}).`,
612
615
  error.status
613
616
  );
@@ -623,7 +626,7 @@ export class CursorBackendClient {
623
626
 
624
627
  /**
625
628
  * Mint a named user API key from a short-lived login session token. Used
626
- * exactly once per `agent-serve login`; the session token is then discarded.
629
+ * exactly once per `agent-sdk login`; the session token is then discarded.
627
630
  */
628
631
  export async function createUserApiKeyWithSessionToken(args: {
629
632
  backendUrl: string;
@@ -867,7 +870,7 @@ function describeGithubTokenHttpFailure(
867
870
  if (status === 401) {
868
871
  return `The Cursor API key was rejected${
869
872
  detail === undefined ? "" : `: ${detail}`
870
- }. Run \`agent-serve login\` again or update CURSOR_API_KEY.`;
873
+ }. Run \`${CLI} login\` again or update CURSOR_API_KEY.`;
871
874
  }
872
875
  if (detail !== undefined) {
873
876
  return detail;
@@ -899,10 +902,6 @@ function retryAfterMsFromResponse(response: Response): number | undefined {
899
902
  return Math.min(retryAfter * 1000, MAX_GITHUB_TOKEN_RETRY_AFTER_MS);
900
903
  }
901
904
 
902
- function describeError(error: unknown): string {
903
- return error instanceof Error ? error.message : String(error);
904
- }
905
-
906
905
  /** Release undici/fetch connection slots on responses we will not parse. */
907
906
  async function drainResponseBody(response: Response): Promise<void> {
908
907
  try {
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Destroying a hosted v2 task-bind secret file after its value is in
3
+ * `process.env`.
4
+ *
5
+ * The bind files under `/run/cursor/secrets/` are an IPC channel, not a
6
+ * credential store: the control plane cannot set another process's
7
+ * environment, so it drops the value on tmpfs and July copies it into
8
+ * `process.env` before anything authored runs. Once that copy succeeds the
9
+ * on-disk value is pure liability — authored agent code runs in this pod and
10
+ * can read any world-readable path.
11
+ *
12
+ * Unlink is preferred. It is not always available: pod-daemon writes the
13
+ * files as root, and removing a directory entry needs write permission on
14
+ * `/run/cursor/secrets`, which is root-owned. Making that directory writable
15
+ * by the guest is not the fix — untrusted guest code could then plant a
16
+ * symlink that the next root-side bind write would follow. The binder instead
17
+ * relaxes the two secret files themselves so the guest can truncate them, and
18
+ * this module falls back to a zero-length overwrite. Both readers treat an
19
+ * empty bind file as unsigned.
20
+ */
21
+
22
+ import {
23
+ closeSync,
24
+ fsyncSync,
25
+ ftruncateSync,
26
+ openSync,
27
+ readFileSync,
28
+ unlinkSync,
29
+ } from "node:fs";
30
+
31
+ /**
32
+ * What happened to a bind file. Only `readable` is a failure: the secret
33
+ * survived the consume and callers must not run authored code.
34
+ */
35
+ export type BoundSecretFileDisposal =
36
+ /** Nothing recoverable was there — missing, empty, or unreadable already. */
37
+ | { state: "absent" }
38
+ /** Directory entry removed. */
39
+ | { state: "unlinked" }
40
+ /** Truncated to zero length and fsynced; an empty file remains. */
41
+ | { state: "wiped" }
42
+ /** Still recoverable by a later `readFile`. */
43
+ | { state: "readable"; reason: string };
44
+
45
+ /**
46
+ * Whether a later `readFile` of this path could still recover a secret.
47
+ * A read failure counts as unrecoverable: this process just read the file
48
+ * during hydrate, so losing access to it means the content is gone.
49
+ */
50
+ export function boundSecretFileIsReadable(path: string): boolean {
51
+ try {
52
+ return readFileSync(path, "utf8").trim() !== "";
53
+ } catch {
54
+ return false;
55
+ }
56
+ }
57
+
58
+ function errorReason(error: unknown): string {
59
+ const code = (error as { code?: unknown } | undefined)?.code;
60
+ return typeof code === "string" ? code : "unknown";
61
+ }
62
+
63
+ /**
64
+ * Remove a bind file's contents from disk, preferring unlink over an empty
65
+ * leftover. Callers must have already copied the value into `process.env`:
66
+ * this is destructive and there is no second bind until the control plane
67
+ * rewrites the file before the next hosted request.
68
+ */
69
+ export function destroyBoundSecretFile(path: string): BoundSecretFileDisposal {
70
+ if (!boundSecretFileIsReadable(path)) {
71
+ // Nothing recoverable, so nothing to fail over. Still try to clear the
72
+ // empty leftover: whether that succeeds does not change the disposal,
73
+ // because there is no secret here either way.
74
+ try {
75
+ unlinkSync(path);
76
+ } catch {
77
+ // Already gone, or a directory the guest cannot write. Both are fine.
78
+ }
79
+ return { state: "absent" };
80
+ }
81
+ let unlinkReason: string | undefined;
82
+ try {
83
+ unlinkSync(path);
84
+ if (!boundSecretFileIsReadable(path)) {
85
+ return { state: "unlinked" };
86
+ }
87
+ unlinkReason = "recreated";
88
+ } catch (error) {
89
+ unlinkReason = errorReason(error);
90
+ }
91
+ try {
92
+ const fd = openSync(path, "r+");
93
+ try {
94
+ ftruncateSync(fd, 0);
95
+ fsyncSync(fd);
96
+ } finally {
97
+ closeSync(fd);
98
+ }
99
+ } catch (error) {
100
+ return {
101
+ state: "readable",
102
+ reason: `unlink ${unlinkReason}, truncate ${errorReason(error)}`,
103
+ };
104
+ }
105
+ return boundSecretFileIsReadable(path)
106
+ ? { state: "readable", reason: `unlink ${unlinkReason}, truncate no-op` }
107
+ : { state: "wiped" };
108
+ }