@cursor/july 0.1.102 → 0.1.103

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (715) hide show
  1. package/AGENTS.md +34 -32
  2. package/README.md +10 -12
  3. package/dist/ab.d.ts +1 -1
  4. package/dist/ab.js +1 -1
  5. package/dist/bin/agent-serve.d.ts +12 -12
  6. package/dist/bin/agent-serve.js +114 -36
  7. package/dist/channels/bitbucket/api.d.ts +176 -0
  8. package/dist/channels/bitbucket/api.d.ts.map +1 -0
  9. package/dist/channels/bitbucket/api.js +419 -0
  10. package/dist/channels/bitbucket/binding.d.ts +71 -0
  11. package/dist/channels/bitbucket/binding.d.ts.map +1 -0
  12. package/dist/channels/bitbucket/binding.js +269 -0
  13. package/dist/channels/bitbucket/bitbucket-channel.d.ts +33 -0
  14. package/dist/channels/bitbucket/bitbucket-channel.d.ts.map +1 -0
  15. package/dist/channels/bitbucket/bitbucket-channel.js +120 -0
  16. package/dist/channels/bitbucket/bitbucket-webhook.d.ts +61 -0
  17. package/dist/channels/bitbucket/bitbucket-webhook.d.ts.map +1 -0
  18. package/dist/channels/bitbucket/bitbucket-webhook.js +394 -0
  19. package/dist/channels/bitbucket/checks.d.ts +67 -0
  20. package/dist/channels/bitbucket/checks.d.ts.map +1 -0
  21. package/dist/channels/bitbucket/checks.js +102 -0
  22. package/dist/channels/bitbucket/cursor-account.d.ts +37 -0
  23. package/dist/channels/bitbucket/cursor-account.d.ts.map +1 -0
  24. package/dist/channels/bitbucket/cursor-account.js +65 -0
  25. package/dist/channels/bitbucket/defaults.d.ts +26 -0
  26. package/dist/channels/bitbucket/defaults.d.ts.map +1 -0
  27. package/dist/channels/bitbucket/defaults.js +73 -0
  28. package/dist/channels/bitbucket/events.d.ts +22 -0
  29. package/dist/channels/bitbucket/events.d.ts.map +1 -0
  30. package/dist/channels/bitbucket/events.js +64 -0
  31. package/dist/channels/bitbucket/index.d.ts +34 -0
  32. package/dist/channels/bitbucket/index.d.ts.map +1 -0
  33. package/dist/channels/bitbucket/index.js +33 -0
  34. package/dist/channels/bitbucket/replay.d.ts +63 -0
  35. package/dist/channels/bitbucket/replay.d.ts.map +1 -0
  36. package/dist/channels/bitbucket/replay.js +304 -0
  37. package/dist/channels/bitbucket/state.d.ts +35 -0
  38. package/dist/channels/bitbucket/state.d.ts.map +1 -0
  39. package/dist/channels/bitbucket/state.js +21 -0
  40. package/dist/channels/bitbucket/types.d.ts +229 -0
  41. package/dist/channels/bitbucket/types.d.ts.map +1 -0
  42. package/dist/channels/bitbucket/types.js +1 -0
  43. package/dist/channels/deployments/deployments-channel.d.ts +22 -14
  44. package/dist/channels/deployments/deployments-channel.d.ts.map +1 -1
  45. package/dist/channels/deployments/deployments-channel.js +25 -27
  46. package/dist/channels/deployments/types.d.ts +12 -6
  47. package/dist/channels/deployments/types.d.ts.map +1 -1
  48. package/dist/channels/github/binding.d.ts +6 -0
  49. package/dist/channels/github/binding.d.ts.map +1 -1
  50. package/dist/channels/github/binding.js +3 -3
  51. package/dist/channels/github/cursor-account.d.ts +7 -3
  52. package/dist/channels/github/cursor-account.d.ts.map +1 -1
  53. package/dist/channels/github/cursor-account.js +10 -6
  54. package/dist/channels/github/events.d.ts +1 -1
  55. package/dist/channels/github/events.js +1 -1
  56. package/dist/channels/github/forward.d.ts +1 -1
  57. package/dist/channels/github/forward.d.ts.map +1 -1
  58. package/dist/channels/github/forward.js +3 -2
  59. package/dist/channels/github/github-channel.d.ts +29 -39
  60. package/dist/channels/github/github-channel.d.ts.map +1 -1
  61. package/dist/channels/github/github-channel.js +68 -101
  62. package/dist/channels/github/replay.d.ts +1 -1
  63. package/dist/channels/github/replay.js +1 -1
  64. package/dist/channels/github/state.d.ts +2 -0
  65. package/dist/channels/github/state.d.ts.map +1 -1
  66. package/dist/channels/github/state.js +14 -11
  67. package/dist/channels/github/types.d.ts +2 -4
  68. package/dist/channels/github/types.d.ts.map +1 -1
  69. package/dist/channels/gitlab/api.d.ts +91 -0
  70. package/dist/channels/gitlab/api.d.ts.map +1 -0
  71. package/dist/channels/gitlab/api.js +150 -0
  72. package/dist/channels/gitlab/binding.d.ts +58 -0
  73. package/dist/channels/gitlab/binding.d.ts.map +1 -0
  74. package/dist/channels/gitlab/binding.js +139 -0
  75. package/dist/channels/gitlab/checks.d.ts +110 -0
  76. package/dist/channels/gitlab/checks.d.ts.map +1 -0
  77. package/dist/channels/gitlab/checks.js +126 -0
  78. package/dist/channels/gitlab/cursor-account.d.ts +36 -0
  79. package/dist/channels/gitlab/cursor-account.d.ts.map +1 -0
  80. package/dist/channels/gitlab/cursor-account.js +65 -0
  81. package/dist/channels/gitlab/defaults.d.ts +25 -0
  82. package/dist/channels/gitlab/defaults.d.ts.map +1 -0
  83. package/dist/channels/gitlab/defaults.js +60 -0
  84. package/dist/channels/gitlab/events.d.ts +12 -0
  85. package/dist/channels/gitlab/events.d.ts.map +1 -0
  86. package/dist/channels/gitlab/events.js +28 -0
  87. package/dist/channels/gitlab/gitlab-channel.d.ts +33 -0
  88. package/dist/channels/gitlab/gitlab-channel.d.ts.map +1 -0
  89. package/dist/channels/gitlab/gitlab-channel.js +120 -0
  90. package/dist/channels/gitlab/gitlab-webhook.d.ts +45 -0
  91. package/dist/channels/gitlab/gitlab-webhook.d.ts.map +1 -0
  92. package/dist/channels/gitlab/gitlab-webhook.js +397 -0
  93. package/dist/channels/gitlab/index.d.ts +31 -0
  94. package/dist/channels/gitlab/index.d.ts.map +1 -0
  95. package/dist/channels/gitlab/index.js +30 -0
  96. package/dist/channels/gitlab/replay.d.ts +105 -0
  97. package/dist/channels/gitlab/replay.d.ts.map +1 -0
  98. package/dist/channels/gitlab/replay.js +206 -0
  99. package/dist/channels/gitlab/state.d.ts +33 -0
  100. package/dist/channels/gitlab/state.d.ts.map +1 -0
  101. package/dist/channels/gitlab/state.js +23 -0
  102. package/dist/channels/gitlab/types.d.ts +214 -0
  103. package/dist/channels/gitlab/types.d.ts.map +1 -0
  104. package/dist/channels/gitlab/types.js +1 -0
  105. package/dist/channels/origin/api.d.ts.map +1 -1
  106. package/dist/channels/origin/api.js +4 -2
  107. package/dist/channels/origin/origin-channel.d.ts +4 -9
  108. package/dist/channels/origin/origin-channel.d.ts.map +1 -1
  109. package/dist/channels/origin/origin-channel.js +8 -48
  110. package/dist/channels/origin/types.d.ts +20 -2
  111. package/dist/channels/origin/types.d.ts.map +1 -1
  112. package/dist/channels/slack/eval-directive.d.ts.map +1 -1
  113. package/dist/channels/slack/eval-directive.js +1 -7
  114. package/dist/channels/slack/init.d.ts.map +1 -1
  115. package/dist/channels/slack/init.js +3 -3
  116. package/dist/channels/slack/setup.d.ts +1 -1
  117. package/dist/channels/slack/setup.d.ts.map +1 -1
  118. package/dist/channels/slack/setup.js +6 -13
  119. package/dist/channels/slack/types.d.ts +1 -1
  120. package/dist/channels/slack/types.d.ts.map +1 -1
  121. package/dist/channels.d.ts +1 -1
  122. package/dist/channels.d.ts.map +1 -1
  123. package/dist/client.d.ts +1 -1
  124. package/dist/client.js +1 -1
  125. package/dist/connections.d.ts +1 -1
  126. package/dist/connections.js +1 -1
  127. package/dist/docs/404.html +2 -2
  128. package/dist/docs/ab.html +4 -4
  129. package/dist/docs/assets/{app.CLA03RCz.js → app.DW9pXkpL.js} +1 -1
  130. package/dist/docs/assets/chunks/@localSearchIndexroot.nrl1ifBq.js +1 -0
  131. package/dist/docs/assets/chunks/{VPLocalSearchBox.ifxv-cJV.js → VPLocalSearchBox.CdEIUwDg.js} +1 -1
  132. package/dist/docs/assets/chunks/{theme.DWCwM6p-.js → theme.YZMHgPgg.js} +2 -2
  133. package/dist/docs/assets/concepts.md.DgEcZOfT.js +1 -0
  134. package/dist/docs/assets/{concepts.md.rPzW2HZN.lean.js → concepts.md.DgEcZOfT.lean.js} +1 -1
  135. package/dist/docs/assets/{evals.md.CPzDAwoH.js → evals.md.CbMoebP1.js} +1 -1
  136. package/dist/docs/assets/guides_cloud-agents.md.DS8RIjwx.js +9 -0
  137. package/dist/docs/assets/{guides_github.md.BtPr9GaP.js → guides_github.md.DKYiT9do.js} +1 -1
  138. package/dist/docs/assets/{guides_opentelemetry.md.BVTXDCRg.js → guides_opentelemetry.md.COh9jFVg.js} +7 -8
  139. package/dist/docs/assets/{guides_opentelemetry.md.BVTXDCRg.lean.js → guides_opentelemetry.md.COh9jFVg.lean.js} +1 -1
  140. package/dist/docs/assets/{index.md.Kiht7ell.js → index.md.D75GWhPl.js} +1 -1
  141. package/dist/docs/assets/{reference_agent-config.md.BHeYMgme.js → reference_agent-config.md.CHNpiyp4.js} +3 -3
  142. package/dist/docs/assets/{reference_channels.md.Cd2f2iyV.js → reference_channels.md.Dz8Cnudp.js} +2 -2
  143. package/dist/docs/assets/{reference_channels.md.Cd2f2iyV.lean.js → reference_channels.md.Dz8Cnudp.lean.js} +1 -1
  144. package/dist/docs/assets/{reference_cli.md.DfoeyvL0.js → reference_cli.md.CJNc_xYK.js} +1 -1
  145. package/dist/docs/assets/{reference_extensions.md.9WQMZe1l.js → reference_extensions.md.DykHW3qL.js} +11 -5
  146. package/dist/docs/assets/reference_extensions.md.DykHW3qL.lean.js +1 -0
  147. package/dist/docs/assets/reference_hooks.md.Ddt5DdgJ.js +73 -0
  148. package/dist/docs/assets/{reference_hooks.md.a8BJxMR5.lean.js → reference_hooks.md.Ddt5DdgJ.lean.js} +1 -1
  149. package/dist/docs/assets/{reference_playground.md.DnX5nL-B.js → reference_playground.md.4myJPxrf.js} +1 -1
  150. package/dist/docs/assets/{reference_project-layout.md.CA6QP6Lw.js → reference_project-layout.md.DuBu9a96.js} +2 -2
  151. package/dist/docs/assets/reference_result.md.BK5SxDrf.js +19 -0
  152. package/dist/docs/assets/reference_result.md.BK5SxDrf.lean.js +1 -0
  153. package/dist/docs/assets/{reference_sessions.md.NxFP_CAC.js → reference_sessions.md.CueyOHSL.js} +1 -1
  154. package/dist/docs/assets/{reference_sessions.md.NxFP_CAC.lean.js → reference_sessions.md.CueyOHSL.lean.js} +1 -1
  155. package/dist/docs/assets/{reference_tools.md.B1up2r9W.js → reference_tools.md.aGrn99hP.js} +1 -1
  156. package/dist/docs/assets/skills_framework-map.md.haibFyoB.js +1 -0
  157. package/dist/docs/assets/{skills_otel.md.CgiZryR3.js → skills_otel.md.CqhobH3B.js} +3 -3
  158. package/dist/docs/assets/{skills_otel.md.CgiZryR3.lean.js → skills_otel.md.CqhobH3B.lean.js} +1 -1
  159. package/dist/docs/assets/{templates_pr-autofixer.md.x5zl6-GT.js → templates_pr-autofixer.md.Bds_XWcV.js} +2 -2
  160. package/dist/docs/assets/{templates_pr-autofixer.md.x5zl6-GT.lean.js → templates_pr-autofixer.md.Bds_XWcV.lean.js} +1 -1
  161. package/dist/docs/building-with-agents.html +4 -4
  162. package/dist/docs/concepts.html +5 -5
  163. package/dist/docs/concepts.md +2 -4
  164. package/dist/docs/deployment.html +4 -4
  165. package/dist/docs/design/runtime-abstraction.md +2 -3
  166. package/dist/docs/evals.html +6 -6
  167. package/dist/docs/evals.md +9 -7
  168. package/dist/docs/guides/agent-to-agent.html +4 -4
  169. package/dist/docs/guides/cloud-agents.html +6 -6
  170. package/dist/docs/guides/cloud-agents.md +4 -6
  171. package/dist/docs/guides/convert-automation.html +4 -4
  172. package/dist/docs/guides/github.html +6 -6
  173. package/dist/docs/guides/github.md +0 -1
  174. package/dist/docs/guides/human-in-the-loop.html +4 -4
  175. package/dist/docs/guides/mcp-oauth.html +5 -5
  176. package/dist/docs/guides/opentelemetry.html +10 -11
  177. package/dist/docs/guides/opentelemetry.md +41 -17
  178. package/dist/docs/guides/slack.html +4 -4
  179. package/dist/docs/guides/webhooks.html +4 -4
  180. package/dist/docs/hashmap.json +1 -1
  181. package/dist/docs/hillclimbing.html +4 -4
  182. package/dist/docs/index.html +6 -6
  183. package/dist/docs/index.md +2 -2
  184. package/dist/docs/llms-full.txt +501 -262
  185. package/dist/docs/llms.txt +2 -2
  186. package/dist/docs/quickstart.html +4 -4
  187. package/dist/docs/reference/agent-config.html +8 -8
  188. package/dist/docs/reference/agent-config.md +6 -10
  189. package/dist/docs/reference/artifacts.html +5 -5
  190. package/dist/docs/reference/channels.html +6 -6
  191. package/dist/docs/reference/channels.md +18 -8
  192. package/dist/docs/reference/cli.html +5 -5
  193. package/dist/docs/reference/cli.md +3 -4
  194. package/dist/docs/reference/connections.html +4 -4
  195. package/dist/docs/reference/extensions.html +16 -10
  196. package/dist/docs/reference/extensions.md +86 -22
  197. package/dist/docs/reference/hooks.html +69 -10
  198. package/dist/docs/reference/hooks.md +215 -46
  199. package/dist/docs/reference/http-api.html +4 -4
  200. package/dist/docs/reference/instructions.html +4 -4
  201. package/dist/docs/reference/playground.html +5 -5
  202. package/dist/docs/reference/playground.md +3 -0
  203. package/dist/docs/reference/project-layout.html +6 -6
  204. package/dist/docs/reference/project-layout.md +2 -1
  205. package/dist/docs/reference/prompt.html +4 -4
  206. package/dist/docs/reference/result.html +45 -0
  207. package/dist/docs/reference/result.md +89 -0
  208. package/dist/docs/reference/schedules.html +4 -4
  209. package/dist/docs/reference/sessions.html +5 -5
  210. package/dist/docs/reference/sessions.md +3 -1
  211. package/dist/docs/reference/skills.html +4 -4
  212. package/dist/docs/reference/subagents.html +4 -4
  213. package/dist/docs/reference/tools.html +5 -5
  214. package/dist/docs/reference/tools.md +1 -2
  215. package/dist/docs/scaffolding-agents.html +4 -4
  216. package/dist/docs/skills/ab.html +4 -4
  217. package/dist/docs/skills/create-agent.html +4 -4
  218. package/dist/docs/skills/debug.html +4 -4
  219. package/dist/docs/skills/evals.html +4 -4
  220. package/dist/docs/skills/framework-map.html +5 -5
  221. package/dist/docs/skills/framework-map.md +3 -1
  222. package/dist/docs/skills/github.html +4 -4
  223. package/dist/docs/skills/hillclimb.html +4 -4
  224. package/dist/docs/skills/index.html +4 -4
  225. package/dist/docs/skills/mcp-auth.html +4 -4
  226. package/dist/docs/skills/otel.html +7 -7
  227. package/dist/docs/skills/otel.md +8 -3
  228. package/dist/docs/skills/setup-slack.html +4 -4
  229. package/dist/docs/storage.html +4 -4
  230. package/dist/docs/templates/agentic-owners.html +4 -4
  231. package/dist/docs/templates/agents-md.html +4 -4
  232. package/dist/docs/templates/code-wiki.html +4 -4
  233. package/dist/docs/templates/demo.html +4 -4
  234. package/dist/docs/templates/pr-autofixer.html +6 -6
  235. package/dist/docs/templates/pr-autofixer.md +0 -3
  236. package/dist/docs/templates/security-help.html +4 -4
  237. package/dist/docs/templates/security-reviewer.html +4 -4
  238. package/dist/docs/templates/triage.html +4 -4
  239. package/dist/docs/troubleshooting.html +4 -4
  240. package/dist/evals.d.ts +1 -1
  241. package/dist/evals.d.ts.map +1 -1
  242. package/dist/extensions.d.ts +20 -7
  243. package/dist/extensions.d.ts.map +1 -1
  244. package/dist/extensions.js +36 -5
  245. package/dist/files.d.ts +16 -3
  246. package/dist/files.d.ts.map +1 -1
  247. package/dist/files.js +16 -3
  248. package/dist/index.d.ts +4 -4
  249. package/dist/index.d.ts.map +1 -1
  250. package/dist/index.js +3 -3
  251. package/dist/internal/ab-snapshot.d.ts.map +1 -1
  252. package/dist/internal/ab-snapshot.js +0 -1
  253. package/dist/internal/advertise-tools.d.ts.map +1 -1
  254. package/dist/internal/advertise-tools.js +1 -3
  255. package/dist/internal/authored-alias-hooks.d.ts +4 -13
  256. package/dist/internal/authored-alias-hooks.d.ts.map +1 -1
  257. package/dist/internal/authored-alias-hooks.js +4 -20
  258. package/dist/internal/authored-loaders.d.ts +2 -3
  259. package/dist/internal/authored-loaders.d.ts.map +1 -1
  260. package/dist/internal/authored-loaders.js +6 -20
  261. package/dist/internal/channel-dispatch.d.ts +43 -0
  262. package/dist/internal/channel-dispatch.d.ts.map +1 -0
  263. package/dist/internal/channel-dispatch.js +77 -0
  264. package/dist/internal/chat-client.d.ts +1 -1
  265. package/dist/internal/chat-client.js +1 -1
  266. package/dist/internal/cli-ax.d.ts +5 -5
  267. package/dist/internal/cli-ax.d.ts.map +1 -1
  268. package/dist/internal/cli-ax.js +5 -5
  269. package/dist/internal/cli-bitbucket.d.ts +33 -0
  270. package/dist/internal/cli-bitbucket.d.ts.map +1 -0
  271. package/dist/internal/cli-bitbucket.js +359 -0
  272. package/dist/internal/cli-convert-automation.d.ts +1 -1
  273. package/dist/internal/cli-convert-automation.js +2 -2
  274. package/dist/internal/cli-cursor.d.ts +1 -1
  275. package/dist/internal/cli-cursor.d.ts.map +1 -1
  276. package/dist/internal/cli-cursor.js +2 -4
  277. package/dist/internal/cli-deploy.d.ts.map +1 -1
  278. package/dist/internal/cli-deploy.js +2 -6
  279. package/dist/internal/cli-github.d.ts +1 -1
  280. package/dist/internal/cli-github.js +3 -3
  281. package/dist/internal/cli-gitlab.d.ts +37 -0
  282. package/dist/internal/cli-gitlab.d.ts.map +1 -0
  283. package/dist/internal/cli-gitlab.js +380 -0
  284. package/dist/internal/cli-mcp.d.ts.map +1 -1
  285. package/dist/internal/cli-mcp.js +2 -6
  286. package/dist/internal/cli-slack.d.ts +1 -1
  287. package/dist/internal/cli-slack.d.ts.map +1 -1
  288. package/dist/internal/cli-slack.js +2 -4
  289. package/dist/internal/continuation-channel.d.ts +14 -0
  290. package/dist/internal/continuation-channel.d.ts.map +1 -1
  291. package/dist/internal/continuation-channel.js +56 -3
  292. package/dist/internal/continuation-identity.d.ts +14 -15
  293. package/dist/internal/continuation-identity.d.ts.map +1 -1
  294. package/dist/internal/continuation-identity.js +182 -7
  295. package/dist/internal/conversation-mirror.d.ts.map +1 -1
  296. package/dist/internal/conversation-mirror.js +4 -3
  297. package/dist/internal/convert-automation/types.d.ts +1 -1
  298. package/dist/internal/convert-automation/types.js +1 -1
  299. package/dist/internal/cursor/account-mcp.d.ts.map +1 -1
  300. package/dist/internal/cursor/account-mcp.js +1 -3
  301. package/dist/internal/cursor/backend-client.d.ts +5 -4
  302. package/dist/internal/cursor/backend-client.d.ts.map +1 -1
  303. package/dist/internal/cursor/backend-client.js +5 -6
  304. package/dist/internal/cursor/bound-secret-file.d.ts +56 -0
  305. package/dist/internal/cursor/bound-secret-file.d.ts.map +1 -0
  306. package/dist/internal/cursor/bound-secret-file.js +88 -0
  307. package/dist/internal/cursor/credentials.d.ts +39 -5
  308. package/dist/internal/cursor/credentials.d.ts.map +1 -1
  309. package/dist/internal/cursor/credentials.js +58 -8
  310. package/dist/internal/cursor/hosted-bound-secrets.d.ts +41 -0
  311. package/dist/internal/cursor/hosted-bound-secrets.d.ts.map +1 -0
  312. package/dist/internal/cursor/hosted-bound-secrets.js +54 -0
  313. package/dist/internal/cursor/hosted-deployment-secrets.d.ts +19 -5
  314. package/dist/internal/cursor/hosted-deployment-secrets.d.ts.map +1 -1
  315. package/dist/internal/cursor/hosted-deployment-secrets.js +29 -9
  316. package/dist/internal/cursor/hosted-store-secrets.d.ts +1 -1
  317. package/dist/internal/cursor/hosted-store-secrets.js +1 -1
  318. package/dist/internal/cursor-account-mcp-auth.d.ts.map +1 -1
  319. package/dist/internal/cursor-account-mcp-auth.js +2 -4
  320. package/dist/internal/cursor-deployment-relay.d.ts +6 -2
  321. package/dist/internal/cursor-deployment-relay.d.ts.map +1 -1
  322. package/dist/internal/cursor-deployment-relay.js +13 -9
  323. package/dist/internal/deploy-manifest.d.ts +1 -1
  324. package/dist/internal/deploy-manifest.d.ts.map +1 -1
  325. package/dist/internal/deploy-manifest.js +1 -1
  326. package/dist/internal/discovery/ab.d.ts +1 -1
  327. package/dist/internal/discovery/ab.d.ts.map +1 -1
  328. package/dist/internal/discovery/ab.js +21 -9
  329. package/dist/internal/discovery/agent.d.ts +6 -1
  330. package/dist/internal/discovery/agent.d.ts.map +1 -1
  331. package/dist/internal/discovery/agent.js +65 -116
  332. package/dist/internal/discovery/channels.d.ts +1 -1
  333. package/dist/internal/discovery/channels.d.ts.map +1 -1
  334. package/dist/internal/discovery/channels.js +14 -14
  335. package/dist/internal/discovery/connections.d.ts +1 -5
  336. package/dist/internal/discovery/connections.d.ts.map +1 -1
  337. package/dist/internal/discovery/connections.js +30 -44
  338. package/dist/internal/discovery/cursor-plugin.d.ts.map +1 -1
  339. package/dist/internal/discovery/cursor-plugin.js +1 -3
  340. package/dist/internal/discovery/extension-overlay.d.ts +32 -0
  341. package/dist/internal/discovery/extension-overlay.d.ts.map +1 -0
  342. package/dist/internal/discovery/extension-overlay.js +191 -0
  343. package/dist/internal/discovery/extensions.d.ts +11 -2
  344. package/dist/internal/discovery/extensions.d.ts.map +1 -1
  345. package/dist/internal/discovery/extensions.js +211 -74
  346. package/dist/internal/discovery/hooks.d.ts +1 -1
  347. package/dist/internal/discovery/hooks.d.ts.map +1 -1
  348. package/dist/internal/discovery/hooks.js +15 -2
  349. package/dist/internal/discovery/info.d.ts.map +1 -1
  350. package/dist/internal/discovery/info.js +7 -1
  351. package/dist/internal/discovery/modules.d.ts.map +1 -1
  352. package/dist/internal/discovery/modules.js +8 -2
  353. package/dist/internal/discovery/names.d.ts +1 -1
  354. package/dist/internal/discovery/names.d.ts.map +1 -1
  355. package/dist/internal/discovery/names.js +1 -0
  356. package/dist/internal/discovery/project.d.ts +0 -2
  357. package/dist/internal/discovery/project.d.ts.map +1 -1
  358. package/dist/internal/discovery/project.js +64 -10
  359. package/dist/internal/discovery/runtime.d.ts.map +1 -1
  360. package/dist/internal/discovery/runtime.js +1 -2
  361. package/dist/internal/discovery/schedules.d.ts +1 -1
  362. package/dist/internal/discovery/schedules.d.ts.map +1 -1
  363. package/dist/internal/discovery/schedules.js +23 -2
  364. package/dist/internal/discovery/services.d.ts +6 -2
  365. package/dist/internal/discovery/services.d.ts.map +1 -1
  366. package/dist/internal/discovery/services.js +31 -1
  367. package/dist/internal/discovery/skills.d.ts +1 -6
  368. package/dist/internal/discovery/skills.d.ts.map +1 -1
  369. package/dist/internal/discovery/skills.js +8 -3
  370. package/dist/internal/discovery/subagent.d.ts +3 -0
  371. package/dist/internal/discovery/subagent.d.ts.map +1 -1
  372. package/dist/internal/discovery/subagent.js +109 -0
  373. package/dist/internal/discovery.d.ts +1 -2
  374. package/dist/internal/discovery.d.ts.map +1 -1
  375. package/dist/internal/discovery.js +1 -2
  376. package/dist/internal/distribution.d.ts +10 -27
  377. package/dist/internal/distribution.d.ts.map +1 -1
  378. package/dist/internal/distribution.js +25 -73
  379. package/dist/internal/docs-site.js +1 -1
  380. package/dist/internal/eval-run-store.d.ts +0 -1
  381. package/dist/internal/eval-run-store.d.ts.map +1 -1
  382. package/dist/internal/eval-runner.d.ts.map +1 -1
  383. package/dist/internal/framework-file-storage.d.ts +8 -0
  384. package/dist/internal/framework-file-storage.d.ts.map +1 -1
  385. package/dist/internal/framework-file-storage.js +8 -8
  386. package/dist/internal/github-fanout.d.ts +1 -1
  387. package/dist/internal/github-fanout.js +1 -1
  388. package/dist/internal/guest-network.d.ts +101 -0
  389. package/dist/internal/guest-network.d.ts.map +1 -0
  390. package/dist/internal/guest-network.js +304 -0
  391. package/dist/internal/host-otel.d.ts +3 -3
  392. package/dist/internal/host-otel.d.ts.map +1 -1
  393. package/dist/internal/host-otel.js +8 -4
  394. package/dist/internal/hosted-admission-adapter.d.ts +8 -7
  395. package/dist/internal/hosted-admission-adapter.d.ts.map +1 -1
  396. package/dist/internal/hosted-delivery-protocol.d.ts +6 -0
  397. package/dist/internal/hosted-delivery-protocol.d.ts.map +1 -1
  398. package/dist/internal/hosted-delivery-protocol.js +18 -5
  399. package/dist/internal/hosted-delivery.d.ts +18 -0
  400. package/dist/internal/hosted-delivery.d.ts.map +1 -1
  401. package/dist/internal/hosted-delivery.js +248 -118
  402. package/dist/internal/http-channel.d.ts.map +1 -1
  403. package/dist/internal/http-channel.js +1 -3
  404. package/dist/internal/init-interview.d.ts.map +1 -1
  405. package/dist/internal/init-interview.js +1 -3
  406. package/dist/internal/init-project.d.ts +2 -2
  407. package/dist/internal/init-project.js +2 -2
  408. package/dist/internal/inline-stdio-define-stub.d.ts +1 -1
  409. package/dist/internal/inline-stdio-define-stub.d.ts.map +1 -1
  410. package/dist/internal/inline-stdio-define-stub.js +1 -1
  411. package/dist/internal/is-record.d.ts +2 -0
  412. package/dist/internal/is-record.d.ts.map +1 -0
  413. package/dist/internal/is-record.js +3 -0
  414. package/dist/internal/json-schema.d.ts.map +1 -1
  415. package/dist/internal/json-schema.js +18 -10
  416. package/dist/internal/local-control-plane.d.ts +1 -2
  417. package/dist/internal/local-control-plane.d.ts.map +1 -1
  418. package/dist/internal/local-control-plane.js +3 -20
  419. package/dist/internal/mcp-endpoint.d.ts.map +1 -1
  420. package/dist/internal/mcp-endpoint.js +1 -3
  421. package/dist/internal/otel/collector.d.ts +12 -3
  422. package/dist/internal/otel/collector.d.ts.map +1 -1
  423. package/dist/internal/otel/collector.js +77 -125
  424. package/dist/internal/otel/config.d.ts +0 -2
  425. package/dist/internal/otel/config.d.ts.map +1 -1
  426. package/dist/internal/otel/config.js +17 -20
  427. package/dist/internal/otel/http.d.ts +2 -0
  428. package/dist/internal/otel/http.d.ts.map +1 -1
  429. package/dist/internal/otel/http.js +7 -1
  430. package/dist/internal/otel/mcp.d.ts.map +1 -1
  431. package/dist/internal/otel/mcp.js +3 -16
  432. package/dist/internal/otel/runtime.d.ts +26 -1
  433. package/dist/internal/otel/runtime.d.ts.map +1 -1
  434. package/dist/internal/otel/runtime.js +164 -15
  435. package/dist/internal/package-inline-stdio.d.ts.map +1 -1
  436. package/dist/internal/package-inline-stdio.js +3 -11
  437. package/dist/internal/playground/toolchain.d.ts +1 -1
  438. package/dist/internal/playground/toolchain.d.ts.map +1 -1
  439. package/dist/internal/playground/toolchain.js +1 -1
  440. package/dist/internal/request-error-status.d.ts +12 -0
  441. package/dist/internal/request-error-status.d.ts.map +1 -0
  442. package/dist/internal/request-error-status.js +52 -0
  443. package/dist/internal/resolve-prod-target.d.ts +1 -1
  444. package/dist/internal/resolve-prod-target.d.ts.map +1 -1
  445. package/dist/internal/resolve-prod-target.js +3 -7
  446. package/dist/internal/result-output.d.ts +18 -0
  447. package/dist/internal/result-output.d.ts.map +1 -0
  448. package/dist/internal/result-output.js +33 -0
  449. package/dist/internal/run-client.d.ts +2 -2
  450. package/dist/internal/run-client.js +2 -2
  451. package/dist/internal/runtime-dispatch-runner.d.ts +1 -11
  452. package/dist/internal/runtime-dispatch-runner.d.ts.map +1 -1
  453. package/dist/internal/runtime-dispatch-runner.js +2 -15
  454. package/dist/internal/sdk-runner.d.ts.map +1 -1
  455. package/dist/internal/sdk-runner.js +3 -6
  456. package/dist/internal/server.d.ts.map +1 -1
  457. package/dist/internal/server.js +110 -35
  458. package/dist/internal/session-cost.d.ts +3 -3
  459. package/dist/internal/session-cost.d.ts.map +1 -1
  460. package/dist/internal/session-cost.js +3 -3
  461. package/dist/internal/session-engine.d.ts +26 -11
  462. package/dist/internal/session-engine.d.ts.map +1 -1
  463. package/dist/internal/session-engine.js +146 -76
  464. package/dist/internal/session-run-log.d.ts.map +1 -1
  465. package/dist/internal/session-run-log.js +1 -3
  466. package/dist/internal/skills-sync.d.ts +1 -4
  467. package/dist/internal/skills-sync.d.ts.map +1 -1
  468. package/dist/internal/skills-sync.js +10 -50
  469. package/dist/internal/sleep.d.ts +2 -0
  470. package/dist/internal/sleep.d.ts.map +1 -0
  471. package/dist/internal/sleep.js +3 -0
  472. package/dist/internal/store-mirror.d.ts +29 -0
  473. package/dist/internal/store-mirror.d.ts.map +1 -0
  474. package/dist/internal/store-mirror.js +70 -0
  475. package/dist/internal/tenant-slack/relay.d.ts +73 -0
  476. package/dist/internal/tenant-slack/relay.d.ts.map +1 -0
  477. package/dist/internal/tenant-slack/relay.js +138 -0
  478. package/dist/internal/testing/scm-continuation-fixtures.d.ts +33 -0
  479. package/dist/internal/testing/scm-continuation-fixtures.d.ts.map +1 -0
  480. package/dist/internal/testing/scm-continuation-fixtures.js +253 -0
  481. package/dist/internal/workspace-sync.d.ts +22 -0
  482. package/dist/internal/workspace-sync.d.ts.map +1 -0
  483. package/dist/internal/workspace-sync.js +49 -0
  484. package/dist/internal/workspace.d.ts +7 -0
  485. package/dist/internal/workspace.d.ts.map +1 -1
  486. package/dist/internal/workspace.js +13 -0
  487. package/dist/otel.d.ts +23 -1
  488. package/dist/otel.d.ts.map +1 -1
  489. package/dist/otel.js +93 -2
  490. package/dist/playground/assets/index-59KvgREd.js +67 -0
  491. package/dist/playground/assets/index-MbMxXg-y.css +1 -0
  492. package/dist/playground/index.html +2 -2
  493. package/dist/result.d.ts +24 -0
  494. package/dist/result.d.ts.map +1 -0
  495. package/dist/result.js +27 -0
  496. package/dist/storage-backends/cursor-hosted.d.ts.map +1 -1
  497. package/dist/storage-backends/cursor-hosted.js +7 -4
  498. package/dist/storage-protocol.d.ts.map +1 -1
  499. package/dist/storage-protocol.js +1 -3
  500. package/dist/types.d.ts +90 -23
  501. package/dist/types.d.ts.map +1 -1
  502. package/docs/README.md +2 -2
  503. package/docs/concepts.md +2 -4
  504. package/docs/design/runtime-abstraction.md +2 -3
  505. package/docs/evals.md +9 -7
  506. package/docs/guides/cloud-agents.md +4 -6
  507. package/docs/guides/github.md +0 -1
  508. package/docs/guides/opentelemetry.md +41 -17
  509. package/docs/reference/agent-config.md +6 -10
  510. package/docs/reference/channels.md +18 -8
  511. package/docs/reference/cli.md +3 -4
  512. package/docs/reference/extensions.md +87 -23
  513. package/docs/reference/hooks.md +215 -46
  514. package/docs/reference/playground.md +3 -0
  515. package/docs/reference/project-layout.md +2 -1
  516. package/docs/reference/result.md +94 -0
  517. package/docs/reference/sessions.md +3 -1
  518. package/docs/reference/tools.md +1 -2
  519. package/docs/templates/pr-autofixer.md +0 -3
  520. package/package.json +29 -10
  521. package/skills/framework-map/SKILL.md +3 -1
  522. package/skills/otel/SKILL.md +8 -3
  523. package/src/ab.ts +1 -1
  524. package/src/bin/agent-serve.ts +121 -21
  525. package/src/channels/bitbucket/api.ts +623 -0
  526. package/src/channels/bitbucket/binding.ts +414 -0
  527. package/src/channels/bitbucket/bitbucket-channel.ts +182 -0
  528. package/src/channels/bitbucket/bitbucket-webhook.ts +576 -0
  529. package/src/channels/bitbucket/checks.ts +154 -0
  530. package/src/channels/bitbucket/cursor-account.ts +117 -0
  531. package/src/channels/bitbucket/defaults.ts +110 -0
  532. package/src/channels/bitbucket/events.ts +84 -0
  533. package/src/channels/bitbucket/index.ts +49 -0
  534. package/src/channels/bitbucket/replay.ts +439 -0
  535. package/src/channels/bitbucket/state.ts +59 -0
  536. package/src/channels/bitbucket/types.ts +266 -0
  537. package/src/channels/deployments/deployments-channel.ts +25 -43
  538. package/src/channels/deployments/types.ts +12 -6
  539. package/src/channels/github/binding.ts +8 -1
  540. package/src/channels/github/cursor-account.ts +17 -6
  541. package/src/channels/github/events.ts +1 -1
  542. package/src/channels/github/forward.ts +3 -2
  543. package/src/channels/github/github-channel.ts +74 -221
  544. package/src/channels/github/replay.ts +1 -1
  545. package/src/channels/github/state.ts +6 -0
  546. package/src/channels/github/types.ts +2 -5
  547. package/src/channels/gitlab/api.ts +228 -0
  548. package/src/channels/gitlab/binding.ts +233 -0
  549. package/src/channels/gitlab/checks.ts +243 -0
  550. package/src/channels/gitlab/cursor-account.ts +114 -0
  551. package/src/channels/gitlab/defaults.ts +93 -0
  552. package/src/channels/gitlab/events.ts +44 -0
  553. package/src/channels/gitlab/gitlab-channel.ts +176 -0
  554. package/src/channels/gitlab/gitlab-webhook.ts +555 -0
  555. package/src/channels/gitlab/index.ts +43 -0
  556. package/src/channels/gitlab/replay.ts +347 -0
  557. package/src/channels/gitlab/state.ts +55 -0
  558. package/src/channels/gitlab/types.ts +263 -0
  559. package/src/channels/origin/api.ts +4 -2
  560. package/src/channels/origin/origin-channel.ts +19 -94
  561. package/src/channels/origin/types.ts +23 -2
  562. package/src/channels/slack/eval-directive.ts +1 -6
  563. package/src/channels/slack/init.ts +6 -3
  564. package/src/channels/slack/setup.ts +7 -6
  565. package/src/channels/slack/types.ts +1 -1
  566. package/src/channels.ts +0 -1
  567. package/src/client.ts +1 -1
  568. package/src/connections.ts +1 -1
  569. package/src/evals.ts +1 -1
  570. package/src/extensions.ts +47 -5
  571. package/src/files.ts +21 -3
  572. package/src/index.ts +20 -28
  573. package/src/internal/ab-snapshot.ts +0 -3
  574. package/src/internal/advertise-tools.ts +1 -4
  575. package/src/internal/authored-alias-hooks.ts +4 -21
  576. package/src/internal/authored-loaders.ts +6 -23
  577. package/src/internal/channel-dispatch.ts +160 -0
  578. package/src/internal/chat-client.ts +1 -1
  579. package/src/internal/cli-ax.ts +5 -5
  580. package/src/internal/cli-bitbucket.ts +477 -0
  581. package/src/internal/cli-convert-automation.ts +7 -7
  582. package/src/internal/cli-cursor.ts +2 -5
  583. package/src/internal/cli-deploy.ts +2 -8
  584. package/src/internal/cli-github.ts +3 -3
  585. package/src/internal/cli-gitlab.ts +485 -0
  586. package/src/internal/cli-mcp.ts +2 -7
  587. package/src/internal/cli-slack.ts +2 -5
  588. package/src/internal/continuation-channel.ts +82 -1
  589. package/src/internal/continuation-identity.ts +229 -11
  590. package/src/internal/conversation-mirror.ts +4 -3
  591. package/src/internal/convert-automation/types.ts +1 -1
  592. package/src/internal/cursor/account-mcp.ts +1 -4
  593. package/src/internal/cursor/backend-client.ts +9 -10
  594. package/src/internal/cursor/bound-secret-file.ts +108 -0
  595. package/src/internal/cursor/credentials.ts +75 -10
  596. package/src/internal/cursor/hosted-bound-secrets.ts +75 -0
  597. package/src/internal/cursor/hosted-deployment-secrets.ts +42 -11
  598. package/src/internal/cursor/hosted-store-secrets.ts +1 -1
  599. package/src/internal/cursor-account-mcp-auth.ts +2 -5
  600. package/src/internal/cursor-deployment-relay.ts +11 -7
  601. package/src/internal/deploy-manifest.ts +4 -2
  602. package/src/internal/discovery/ab.ts +29 -9
  603. package/src/internal/discovery/agent.ts +94 -135
  604. package/src/internal/discovery/channels.ts +15 -13
  605. package/src/internal/discovery/connections.ts +55 -50
  606. package/src/internal/discovery/cursor-plugin.ts +1 -4
  607. package/src/internal/discovery/extension-overlay.ts +274 -0
  608. package/src/internal/discovery/extensions.ts +330 -105
  609. package/src/internal/discovery/hooks.ts +20 -2
  610. package/src/internal/discovery/info.ts +7 -0
  611. package/src/internal/discovery/modules.ts +8 -2
  612. package/src/internal/discovery/names.ts +2 -1
  613. package/src/internal/discovery/project.ts +80 -9
  614. package/src/internal/discovery/runtime.ts +1 -2
  615. package/src/internal/discovery/schedules.ts +28 -2
  616. package/src/internal/discovery/services.ts +37 -1
  617. package/src/internal/discovery/skills.ts +13 -3
  618. package/src/internal/discovery/subagent.ts +107 -0
  619. package/src/internal/discovery.ts +0 -2
  620. package/src/internal/distribution.ts +35 -83
  621. package/src/internal/docs-site.ts +1 -1
  622. package/src/internal/eval-run-store.ts +0 -7
  623. package/src/internal/eval-runner.ts +0 -1
  624. package/src/internal/framework-file-storage.ts +8 -8
  625. package/src/internal/github-fanout.ts +1 -1
  626. package/src/internal/guest-network.ts +383 -0
  627. package/src/internal/host-otel.ts +8 -4
  628. package/src/internal/hosted-admission-adapter.ts +8 -8
  629. package/src/internal/hosted-delivery-protocol.ts +26 -1
  630. package/src/internal/hosted-delivery.ts +376 -192
  631. package/src/internal/http-channel.ts +1 -4
  632. package/src/internal/init-interview.ts +1 -4
  633. package/src/internal/init-project.ts +2 -2
  634. package/src/internal/inline-stdio-define-stub.ts +1 -1
  635. package/src/internal/is-record.ts +3 -0
  636. package/src/internal/json-schema.ts +19 -10
  637. package/src/internal/local-control-plane.ts +5 -24
  638. package/src/internal/mcp-endpoint.ts +1 -4
  639. package/src/internal/otel/collector.ts +94 -159
  640. package/src/internal/otel/config.ts +10 -14
  641. package/src/internal/otel/http.ts +14 -1
  642. package/src/internal/otel/mcp.ts +3 -16
  643. package/src/internal/otel/runtime.ts +240 -25
  644. package/src/internal/package-inline-stdio.ts +3 -12
  645. package/src/internal/playground/toolchain.ts +1 -1
  646. package/src/internal/request-error-status.ts +72 -0
  647. package/src/internal/resolve-prod-target.ts +3 -8
  648. package/src/internal/result-output.ts +34 -0
  649. package/src/internal/run-client.ts +2 -2
  650. package/src/internal/runtime-dispatch-runner.ts +3 -21
  651. package/src/internal/sdk-runner.ts +3 -7
  652. package/src/internal/server.ts +153 -44
  653. package/src/internal/session-cost.ts +3 -3
  654. package/src/internal/session-engine.ts +182 -74
  655. package/src/internal/session-run-log.ts +1 -4
  656. package/src/internal/skills-sync.ts +13 -63
  657. package/src/internal/sleep.ts +3 -0
  658. package/src/internal/store-mirror.ts +86 -0
  659. package/src/internal/tenant-slack/relay.ts +179 -0
  660. package/src/internal/testing/scm-continuation-fixtures.ts +286 -0
  661. package/src/internal/workspace-sync.ts +55 -0
  662. package/src/internal/workspace.ts +14 -0
  663. package/src/otel.ts +143 -3
  664. package/src/result.ts +36 -0
  665. package/src/storage-backends/cursor-hosted.ts +7 -4
  666. package/src/storage-protocol.ts +1 -4
  667. package/src/types.ts +105 -34
  668. package/templates/triage/agent/lib/types.ts +0 -2
  669. package/dist/continuation.d.ts +0 -20
  670. package/dist/continuation.d.ts.map +0 -1
  671. package/dist/continuation.js +0 -18
  672. package/dist/docs/assets/chunks/@localSearchIndexroot.FAqdWIXo.js +0 -1
  673. package/dist/docs/assets/concepts.md.rPzW2HZN.js +0 -1
  674. package/dist/docs/assets/guides_cloud-agents.md.DumwWXba.js +0 -9
  675. package/dist/docs/assets/guides_cloud-runtime.md.BRirbRAN.js +0 -9
  676. package/dist/docs/assets/guides_cloud-runtime.md.BRirbRAN.lean.js +0 -1
  677. package/dist/docs/assets/reference_extensions.md.9WQMZe1l.lean.js +0 -1
  678. package/dist/docs/assets/reference_hooks.md.a8BJxMR5.js +0 -14
  679. package/dist/docs/assets/skills_framework-map.md.DDa4MeEW.js +0 -1
  680. package/dist/docs/guides/cloud-runtime.html +0 -35
  681. package/dist/docs/guides/cloud-runtime.md +0 -117
  682. package/dist/internal/convert-automation/index.d.ts +0 -3
  683. package/dist/internal/convert-automation/index.d.ts.map +0 -1
  684. package/dist/internal/convert-automation/index.js +0 -1
  685. package/dist/internal/grokbot/runner.d.ts +0 -64
  686. package/dist/internal/grokbot/runner.d.ts.map +0 -1
  687. package/dist/internal/grokbot/runner.js +0 -282
  688. package/dist/internal/managed-delivery.d.ts +0 -80
  689. package/dist/internal/managed-delivery.d.ts.map +0 -1
  690. package/dist/internal/managed-delivery.js +0 -86
  691. package/dist/internal/review-comments.d.ts +0 -370
  692. package/dist/internal/review-comments.d.ts.map +0 -1
  693. package/dist/internal/review-comments.js +0 -921
  694. package/dist/internal/shallow-clone.d.ts +0 -176
  695. package/dist/internal/shallow-clone.d.ts.map +0 -1
  696. package/dist/internal/shallow-clone.js +0 -419
  697. package/dist/playground/assets/index-B6C9S9nG.css +0 -1
  698. package/dist/playground/assets/index-ZqNoT8Ie.js +0 -69
  699. package/docs/guides/cloud-runtime.md +0 -122
  700. package/src/continuation.ts +0 -49
  701. package/src/internal/convert-automation/index.ts +0 -10
  702. package/src/internal/grokbot/runner.ts +0 -370
  703. package/src/internal/managed-delivery.ts +0 -125
  704. package/src/internal/review-comments.ts +0 -1363
  705. package/src/internal/shallow-clone.ts +0 -609
  706. /package/dist/docs/assets/{evals.md.CPzDAwoH.lean.js → evals.md.CbMoebP1.lean.js} +0 -0
  707. /package/dist/docs/assets/{guides_cloud-agents.md.DumwWXba.lean.js → guides_cloud-agents.md.DS8RIjwx.lean.js} +0 -0
  708. /package/dist/docs/assets/{guides_github.md.BtPr9GaP.lean.js → guides_github.md.DKYiT9do.lean.js} +0 -0
  709. /package/dist/docs/assets/{index.md.Kiht7ell.lean.js → index.md.D75GWhPl.lean.js} +0 -0
  710. /package/dist/docs/assets/{reference_agent-config.md.BHeYMgme.lean.js → reference_agent-config.md.CHNpiyp4.lean.js} +0 -0
  711. /package/dist/docs/assets/{reference_cli.md.DfoeyvL0.lean.js → reference_cli.md.CJNc_xYK.lean.js} +0 -0
  712. /package/dist/docs/assets/{reference_playground.md.DnX5nL-B.lean.js → reference_playground.md.4myJPxrf.lean.js} +0 -0
  713. /package/dist/docs/assets/{reference_project-layout.md.CA6QP6Lw.lean.js → reference_project-layout.md.DuBu9a96.lean.js} +0 -0
  714. /package/dist/docs/assets/{reference_tools.md.B1up2r9W.lean.js → reference_tools.md.aGrn99hP.lean.js} +0 -0
  715. /package/dist/docs/assets/{skills_framework-map.md.DDa4MeEW.lean.js → skills_framework-map.md.haibFyoB.lean.js} +0 -0
@@ -1,15 +1,20 @@
1
1
  ---
2
2
  title: "Extensions"
3
- description: "Mount a package of tools and skills or a Cursor plugin under a namespace with one file, adjust what it contributes, and author your own as a directory laid out like agent/."
3
+ description: "Mount a package of agent contributions or a Cursor plugin under a namespace with one file, adjust what it contributes, and author your own as a directory laid out like agent/."
4
4
  ---
5
5
 
6
6
  # Extensions
7
7
 
8
- An extension packages tools and skills an agent installs as one unit. You
9
- mount it with a single file under `agent/extensions/`, and its
10
- contributions join the agent under a namespace. The package updates
11
- like any other dependency; nothing is copied into your project. A Cursor
12
- plugin mounts the same way; see [Mount a Cursor plugin](#mount-a-cursor-plugin).
8
+ An extension packages the same contributions an agent authors under
9
+ `agent/` and installs them as one unit. You mount it with a single file
10
+ under `agent/extensions/`, and its contributions join the agent under a
11
+ namespace. The package updates like any other dependency; nothing is
12
+ copied into your project. A Cursor plugin mounts the same way; see
13
+ [Mount a Cursor plugin](#mount-a-cursor-plugin).
14
+
15
+ Extensions are native to the Agent SDK. Slot files use the `@cursor/july`
16
+ helpers, so a package built on another agent framework fails
17
+ `agent-sdk validate` until you rewrite it onto `@cursor/july`.
13
18
 
14
19
  ## Mount an extension
15
20
 
@@ -36,6 +41,48 @@ Namespaces follow the tool-name rule, and `__` is reserved: an authored
36
41
  `agent/tools/ci__failed_jobs.ts` fails discovery, so nothing outside a
37
42
  mount can pose as one of its tools.
38
43
 
44
+ ## What an extension can contribute
45
+
46
+ An extension tree uses the same slots as [`agent/`](./project-layout.md).
47
+ Each shareable contribution lands on the agent under the mount's
48
+ namespace:
49
+
50
+ | Path | Becomes |
51
+ | --- | --- |
52
+ | `tools/<name>.ts` | tool `<ns>__<name>` |
53
+ | `skills/<name>` | skill `<ns>__<name>` |
54
+ | `mcp-connections/<name>.ts` | connection `<ns>__<name>` |
55
+ | `host-connections/<name>.ts` | host connection `<ns>__<name>` |
56
+ | `hooks/<name>.ts` | hook `<ns>__<name>` |
57
+ | `channels/<name>.ts` | channel `<ns>__<name>` |
58
+ | `schedules/<name>` | schedule `<ns>__<name>` |
59
+ | `subagents/<id>/` | subagent `<ns>__<id>` |
60
+ | `instructions.md` / `.ts` / dir | appended to the agent's system prompt |
61
+ | `sandbox/workspace/**` | seeded into each local session workspace |
62
+ | `ab.ts` / `ab/<name>.ts` | A/B experiment `<ns>__<name>` |
63
+ | `artifacts.ts` | artifact kinds `<ns>__<kind>` |
64
+
65
+ The root agent still needs its own `instructions.md`. Extension
66
+ instructions are extra fragments, not a substitute.
67
+
68
+ `httpChannel()` stays on the agent. An extension authors
69
+ `defineChannel` only; a file named `http.ts` becomes `<ns>__http`.
70
+
71
+ These stay on the agent that mounts the extension. Each is a singleton
72
+ or is outside discovery:
73
+
74
+ | Path | Why it stays on the agent |
75
+ | --- | --- |
76
+ | `agent.ts` | One `defineAgent` runtime per agent |
77
+ | `storage.ts` | One `host.kv` / `host.files` backend |
78
+ | `otel.ts` | One OTLP exporter |
79
+ | `ab.config.ts` | One experiment-platform config; `ab.ts` / `ab/` still merge |
80
+ | `playground/` | Custom chips are a Vite glob of the agent tree, not a discovery walk |
81
+ | `extensions/` | Nested mounts are not loaded |
82
+ | `sandbox.ts` | Custom sandbox backends stay on the agent |
83
+
84
+ `agent-sdk validate` warns when a tree carries those paths.
85
+
39
86
  ## Adjust a mounted extension
40
87
 
41
88
  To replace or remove a contribution, mount the extension as a directory
@@ -47,15 +94,35 @@ agent/extensions/ci/
47
94
  ├── tools/
48
95
  │ ├── job_log.ts # replaces ci__job_log with your own defineTool
49
96
  │ └── retry_job.ts # export default disableTool() removes ci__retry_job
97
+ ├── hooks/
98
+ │ └── audit.ts # export default disableHook() removes ci__audit
50
99
  └── skills/
51
- └── triage.md # replaces ci__triage
100
+ └── triage.ts # export default disableSkill() removes ci__triage
52
101
  ```
53
102
 
54
103
  Use the extension's own names inside the directory, without the
55
104
  namespace. A file with a name the extension doesn't contribute adds a
56
- new tool or skill under the namespace. `disableTool()` comes from
57
- `@cursor/july/extensions` and fails discovery when it names a tool the
58
- extension doesn't have, so a typo can't silently keep a tool alive.
105
+ new contribution under the namespace. Each helper comes from
106
+ `@cursor/july/extensions` and fails discovery when it names a
107
+ contribution the extension doesn't have, so a typo can't silently keep
108
+ it alive.
109
+
110
+ | Slot | Helper |
111
+ | --- | --- |
112
+ | `tools/<name>.ts` | `disableTool()` |
113
+ | `mcp-connections/<name>.ts` / `host-connections/<name>.ts` | `disableConnection()` |
114
+ | `skills/<name>.ts` | `disableSkill()` |
115
+ | `hooks/<name>.ts` | `disableHook()` |
116
+ | `channels/<name>.ts` | `disableChannel()` |
117
+ | `schedules/<name>.ts` | `disableSchedule()` |
118
+ | `subagents/<id>.ts` | `disableSubagent()` |
119
+ | `instructions.ts` | `disableInstructions()` |
120
+ | `ab.ts` / `ab/<name>.ts` | `disableAB()` |
121
+ | `artifacts.ts` | `disableArtifacts()` |
122
+
123
+ `disable()` is the same brand as the slot helpers above and works in
124
+ any of those files.
125
+
59
126
  A Cursor plugin mount overlays its MCP servers the same way; see below.
60
127
 
61
128
  ## Mount a Cursor plugin
@@ -119,8 +186,8 @@ discovery when it names a server the plugin doesn't declare.
119
186
  ## Build an extension
120
187
 
121
188
  An extension is a directory laid out like `agent/`. `extension.ts`
122
- declares it; `tools/` and `skills/` hold the contributions in the same
123
- authoring forms as [Tools](./tools.md) and [Skills](./skills.md).
189
+ declares it; the slots in [What an extension can contribute](#what-an-extension-can-contribute)
190
+ use the same authoring forms as the rest of this reference.
124
191
 
125
192
  ```text
126
193
  @acme/ci-triage/
@@ -132,6 +199,10 @@ authoring forms as [Tools](./tools.md) and [Skills](./skills.md).
132
199
  │ └── retry_job.ts
133
200
  ├── skills/
134
201
  │ └── triage.md
202
+ ├── hooks/
203
+ │ └── audit.ts
204
+ ├── mcp-connections/
205
+ │ └── buildkite.ts
135
206
  └── lib/
136
207
  └── buildkite.ts # shared code, never discovered
137
208
  ```
@@ -181,17 +252,10 @@ Because the consumer picks the namespace, have skills and tool
181
252
  descriptions refer to sibling tools by their short names and say they
182
253
  appear under the mount's namespace (`<namespace>__job_log`).
183
254
 
184
- Publish the built `extension.js` as the package entry point with
185
- `tools/` and `skills/` beside it. `root` is read from the built file, so
186
- copy `skills/*.md` into the build output or author skills as `.ts` with
187
- `defineSkill`.
188
-
189
- Only `tools/` and `skills/` are mounted from an extension tree.
190
- Instructions, connections, hooks, channels, and the runtime
191
- configuration belong to the agent that mounts the extension;
192
- `agent-sdk validate` warns when a tree carries agent slots such as
193
- `instructions.md`, `connections/`, `hooks/`, `channels/`, or
194
- `schedules/`.
255
+ Publish the built `extension.js` as the package entry point with the
256
+ slot directories beside it. `root` is read from the built file, so copy
257
+ `skills/*.md` and `instructions.md` into the build output or author them
258
+ as `.ts`.
195
259
 
196
260
  ## What's next
197
261
 
@@ -5,56 +5,119 @@ description: "Observe-only subscribers to the session event stream: audit logs,
5
5
 
6
6
  # Hooks
7
7
 
8
- A hook is an observe-only subscriber to the session event stream. Hooks
9
- run after each event is recorded. They cannot change the event or the
10
- turn. That makes them the home for audit logging, metrics, mirroring
11
- transcripts into your own store, and maintaining derived state. Handler
12
- errors are logged and never fatal. A hook can't inject context into the
13
- next turn or block a turn.
14
-
15
- For deterministic context composition before the model runs, use the
16
- host path that already owns the wake: channel handlers (fetch, `callTool`,
17
- `workspaceFiles`, and the message you pass to `send`), plus
18
- `instructions.md`, skills, and `sandbox/workspace/` seed files. Hooks
19
- observe what happened; they do not assemble the prompt.
8
+ A hook subscribes to the session event stream and runs a side effect
9
+ after each event is recorded: an audit line, a metric, a copy of the
10
+ transcript in your own store, or derived state for later turns. Hooks
11
+ run in the serving process for every session of the agent, on local and
12
+ cloud runtime turns alike.
13
+
14
+ Hooks observe. They can't change the turn, the prompt, or the reply, and
15
+ a handler that throws is logged and skipped. Treat the event as
16
+ read-only; later subscribers see the same object. That makes hooks safe
17
+ to add to a production agent, and the wrong tool for anything that must
18
+ happen before the model runs or must fail a turn; see
19
+ [When not to use a hook](#when-not-to-use-a-hook).
20
+
21
+ `defineHook` is unrelated to
22
+ [Cursor Agent hooks](https://cursor.com/docs/agent/hooks), the
23
+ `.cursor/hooks.json` scripts that can observe, block, or modify the
24
+ agent loop. Those still run inside a local session workspace.
25
+
26
+ ## Author a hook
20
27
 
21
28
  Author `agent/hooks/<name>.ts` with `defineHook` from
22
- `@cursor/july/hooks`:
29
+ `@cursor/july/hooks`. This one meters tokens:
23
30
 
24
31
  ```ts
32
+ // agent/hooks/usage.ts
25
33
  import { defineHook } from "@cursor/july/hooks";
26
34
 
27
35
  export default defineHook({
28
36
  events: {
29
37
  async "turn.completed"(event, ctx) {
30
- const prior = await ctx.host.kv.get("last-result");
31
- const notes = await ctx.host.files.read("notes.md");
32
- console.log("turn done", ctx.session.id, event.data.usage, prior, notes);
38
+ if (ctx.session.purpose === "eval" || event.data.usage === undefined) {
39
+ return;
40
+ }
41
+ const { inputTokens, outputTokens } = event.data.usage;
42
+ ctx.host.otel.increment("acme.tokens.input", inputTokens);
43
+ ctx.host.otel.increment("acme.tokens.output", outputTokens);
33
44
  },
34
- async "turn.failed"(event, ctx) {
35
- // page, count, or record
45
+ async "turn.failed"(_event, ctx) {
46
+ ctx.host.otel.increment("acme.turn.failed", { channel: ctx.channel.id });
36
47
  },
37
48
  },
38
49
  });
39
50
  ```
40
51
 
41
- Keys are event types (see the
42
- [event vocabulary](./sessions.md#which-events-can-i-stream)), or `"*"`
43
- for everything. Handlers receive the event with its envelope (`index`,
44
- `sessionId`, `turnId?`, `at`) and a `HookContext`:
52
+ Any module under `agent/hooks/`, subfolders included, is a hook named by
53
+ its path without the extension: `agent/hooks/audit/usage.ts` is
54
+ `audit/usage`. `*.test.ts` and `*.spec.ts` files are skipped. The
55
+ default export must be `defineHook(...)`, names can't contain `__`, and
56
+ an empty `events` map skips the hook with a warning; `agent-sdk validate`
57
+ reports all three. An extension mounts its hooks as `<ns>__<name>`, and
58
+ `disableHook()` removes one
59
+ ([Adjust a mounted extension](./extensions.md#adjust-a-mounted-extension)).
60
+
61
+ `agent-sdk init` scaffolds `agent/hooks/memory.ts`, which exports
62
+ `memoryHook()` from `@cursor/july/memory` and journals every turn for
63
+ later sessions to read. Delete the file to opt out.
64
+
65
+ ## Events and payloads
66
+
67
+ Keys are event types from the
68
+ [event vocabulary](./sessions.md#which-events-can-i-stream), or `"*"`
69
+ for every event. A typed key narrows `event.data`; a `"*"` handler
70
+ receives the union, so switch on `event.type`. Every event carries the
71
+ stream envelope `{ type, index, sessionId, turnId?, at, data }`, with
72
+ `turnId` set on turn-scoped events.
73
+
74
+ The payloads hooks read most often:
75
+
76
+ | Event | `event.data` |
77
+ | --- | --- |
78
+ | `message.received` | `{ text }` |
79
+ | `turn.completed` | `{ result?, usage?, cost? }`. `usage` has `inputTokens`, `outputTokens`, `cacheReadTokens`, `cacheWriteTokens`, and optional `reasoningTokens`. `cost` has `totalUsd` and the `model` it was priced against |
80
+ | `turn.failed` | `{ message }` |
81
+ | `actions.requested` | `{ calls: [{ callId, toolName, args? }] }`. A call with `parentCallId` belongs to a subagent |
82
+ | `action.result` | `{ callId, toolName, output?, isError, stubbed? }`. `stubbed` means a dry-run session answered a write without running it |
83
+
84
+ The types are `SessionEvent`, `SessionEventType`, and `HookContext`,
85
+ exported from `@cursor/july`.
86
+
87
+ ## Handler context
45
88
 
46
89
  | Member | What it is |
47
90
  | --- | --- |
48
- | `ctx.session` | Read-only session info: id, channel, mode, auth |
91
+ | `ctx.session` | Read-only session info: `id`, `channelId`, `mode` (`chat` or `task`), `purpose` (`live` or `eval`), `auth`, plus `title`, `sdkAgentId`, and `abs` when set |
49
92
  | `ctx.agent` | `{ name }` of the agent the event belongs to |
50
- | `ctx.channel` | `{ id, continuationToken }` for the owning channel |
51
- | `ctx.stateRoot` | The agent's durable state root. Prefer `ctx.host.kv` / `ctx.host.files` for derived state; this tree resets on hosted replace |
52
- | `ctx.host` | Shared host services; same as a tool's `ctx.host`. Pull JSON with `ctx.host.kv` and file-shaped state with `ctx.host.files` (session-bound by default; pass `{ scope: "deployment" }` for agent-wide files) |
53
- | `ctx.artifacts` | Session-bound [artifacts](./artifacts.md) facade: `tag` auto-fills the session |
93
+ | `ctx.channel` | `{ id, continuationToken }`. The token is `null` when the session can't take follow-ups |
94
+ | `ctx.host.kv` | Durable JSON, shared by every session of the agent; the [storage backend](../storage.md#author-kv-ctx-host-kv) decides whether it survives a hosted replace. Prefix keys with `ctx.session.id` for per-session state |
95
+ | `ctx.host.files` | Durable files, bound to this session. Pass `{ scope: "deployment" }` for agent-wide files |
96
+ | `ctx.host.otel` | Counters, histograms, and tags, attributed to this session |
97
+ | `ctx.host.mcp`, `ctx.host.github`, `ctx.host.slack` | The same shared clients tools get |
98
+ | `ctx.host.reminders` | Per-session [reminders](./schedules.md), the same API tools get |
99
+ | `ctx.artifacts` | Session-bound [artifacts](./artifacts.md) facade: `tag` fills in `sessionId` and `turnId` |
100
+ | `ctx.stateRoot` | Absolute path of the local state root. It resets when a hosted deployment is replaced; keep derived state in `kv` or `files` |
101
+
102
+ ## When hooks run
103
+
104
+ A hook runs after the event is durably recorded. It never delays the
105
+ model turn and never sees an event that wasn't recorded.
106
+
107
+ Within one session, events dispatch in order, one at a time: the
108
+ channel's `events` handlers first, then each hook in discovery order.
109
+ Sessions don't wait on each other.
54
110
 
55
- Hook context includes `ctx.host`, the same shared services a tool
56
- gets. Persist JSON with `ctx.host.kv` and file-shaped state with
57
- `ctx.host.files`. Hooks observe; they do not own delivery surfaces.
111
+ Two consequences:
112
+
113
+ - A slow handler holds up the next event's handlers for that session,
114
+ not the model. Keep handlers short and queue anything slow.
115
+ - Hooks fire for eval sessions too. Check
116
+ `ctx.session.purpose === "eval"` before metering or paging.
117
+
118
+ Each event reaches a hook at most once. A restart doesn't replay the log
119
+ into hooks, so a mirror needs no dedupe, and the event log rather than
120
+ the hook's copy is the source of truth.
58
121
 
59
122
  ## Hooks, channel events, evals, or A/B?
60
123
 
@@ -62,37 +125,143 @@ All of them consume the same stream, for different jobs:
62
125
 
63
126
  | | Hooks | Channel `events` | Evals | A/B (`defineAB`) |
64
127
  | --- | --- | --- | --- | --- |
65
- | Scope | every session on the agent | sessions the channel owns | one test turn | every live session; enrollment at creation, metrics on each turn |
66
- | Job | observe: audit, metrics, mirrors, derived state | deliver: replies back to the channel's surface | assert: gates over the trajectory | `ab.assigned` + fold stream `onSample` |
128
+ | Scope | every session of the agent | sessions the channel owns | one test turn | every live session; enrollment at creation, metrics on each turn |
129
+ | Job | observe: audit, metrics, mirrors, derived state | deliver: replies back to the channel's surface | assert: gates over the trajectory | compare: sticky arms, then fold the stream into `onSample` metrics |
130
+ | Context | `ctx.host`, `ctx.artifacts`, session info | `channel.state`, `setContinuationToken`, `ctx.host`, session info | the `t` assertion helpers | per-session samples in `onSample` |
67
131
  | Can affect the run | no | yes, it owns the surface | n/a | yes through arm instructions or `session.abs`; collection is observe-only |
68
132
  | Authored at | `agent/hooks/*.ts` | channel config | `evals/**/*.eval.ts` | [`agent/ab.ts` or `agent/ab/*.ts`](../ab.md) |
69
133
 
70
- For GitHub merge-box checks and sticky PR banners, use
71
- `githubChannel({ progress: { commitStatus, banner } })` from
72
- `@cursor/july/channels/github`. That is the supported Autofix-style
73
- path. See [GitHub: Show PR progress](../guides/github.md#show-pr-progress).
74
- Override channel `events` only when the lifecycle is custom, such as
75
- never-red status from tool output. Do not use `defineHook` for those
76
- writes.
134
+ ## When not to use a hook
135
+
136
+ | You want to | Use instead |
137
+ | --- | --- |
138
+ | Add context before the model runs | The channel's `send` message and `workspaceFiles`, `instructions.md`, skills, or `sandbox/workspace/` seed files |
139
+ | Reply on Slack, comment on a PR, or post any other delivery | The channel's `events` map, or the Slack and GitHub packs |
140
+ | Show PR progress (merge-box check, sticky banner) | `githubChannel({ progress: { commitStatus, banner } })`; see [Show PR progress](../guides/github.md#show-pr-progress) |
141
+ | Block, approve, or rewrite a tool call | [`needsApproval`](./tools.md#gate-a-tool-on-human-approval) on the tool |
142
+ | Act on the final assistant text, or fail a bad turn | [`defineResult`](./result.md) |
143
+ | Gate a change on behavior | [Evals](../evals.md) |
144
+ | Compare two prompts on live traffic | [`defineAB`](../ab.md) |
77
145
 
78
146
  ## Patterns
79
147
 
80
- Usage metering: subscribe to `turn.completed` and forward
81
- `event.data.usage` (token counts) to your metrics system.
148
+ Usage metering is the [authoring example](#author-a-hook). Three more:
149
+
150
+ ### Alert on failure
151
+
152
+ `turn.failed` carries the message, and `ctx.session.id` points at the
153
+ trace. Skip interrupted turns; those are preemptions, not failures. Read
154
+ secrets inside the handler: hosted deployments bind them after the
155
+ process starts, so a module-scope read stays empty. Give the call a
156
+ timeout, since a stalled request holds up later handlers on that
157
+ session.
158
+
159
+ ```ts
160
+ // agent/hooks/page-on-failure.ts
161
+ import { defineHook } from "@cursor/july/hooks";
162
+
163
+ export default defineHook({
164
+ events: {
165
+ async "turn.failed"(event, ctx) {
166
+ const pagerUrl = process.env.PAGER_WEBHOOK_URL;
167
+ if (
168
+ pagerUrl === undefined ||
169
+ ctx.session.purpose === "eval" ||
170
+ event.data.message === "turn interrupted"
171
+ ) {
172
+ return;
173
+ }
174
+ await fetch(pagerUrl, {
175
+ method: "POST",
176
+ headers: { "content-type": "application/json" },
177
+ body: JSON.stringify({
178
+ agent: ctx.agent.name,
179
+ session: ctx.session.id,
180
+ channel: ctx.channel.id,
181
+ message: event.data.message,
182
+ }),
183
+ signal: AbortSignal.timeout(5_000),
184
+ });
185
+ },
186
+ },
187
+ });
188
+ ```
189
+
190
+ ### Mirror the transcript
191
+
192
+ Subscribe to `"*"` and write one file per event, skipping the
193
+ `*.appended` deltas: they arrive per token, and `message.completed`
194
+ carries the final text. Session scope keeps transcripts apart without a
195
+ session id in the path. The mirror holds reasoning text and raw tool
196
+ arguments and outputs, so pick the store accordingly, and write to your
197
+ own store instead when you need cross-session queries.
198
+
199
+ ```ts
200
+ // agent/hooks/mirror.ts
201
+ import { defineHook } from "@cursor/july/hooks";
202
+
203
+ export default defineHook({
204
+ events: {
205
+ async "*"(event, ctx) {
206
+ if (event.type.endsWith(".appended")) {
207
+ return;
208
+ }
209
+ const name = String(event.index).padStart(6, "0");
210
+ await ctx.host.files.write(
211
+ `transcript/${name}.json`,
212
+ JSON.stringify(event)
213
+ );
214
+ },
215
+ },
216
+ });
217
+ ```
218
+
219
+ ### Keep derived state across a replace
220
+
221
+ Write it to `ctx.host.kv` under a session-prefixed key; a tool reads it
222
+ back with `ctx.host.kv.get`.
223
+
224
+ ```ts
225
+ // agent/hooks/last-result.ts
226
+ import { defineHook } from "@cursor/july/hooks";
227
+
228
+ export default defineHook({
229
+ events: {
230
+ async "turn.completed"(event, ctx) {
231
+ await ctx.host.kv.put(`last-result/${ctx.session.id}`, {
232
+ at: event.at,
233
+ result: event.data.result ?? null,
234
+ });
235
+ },
236
+ },
237
+ });
238
+ ```
239
+
240
+ ## Test and debug a hook
82
241
 
83
- Failure alerting: `turn.failed` carries the message, and
84
- `ctx.session.id` points at the trace.
242
+ A hook definition is a plain object, so a unit test calls
243
+ `hook.events["turn.completed"]` directly with an event and a stub
244
+ `HookContext`. Discovery skips `*.test.ts`, so the test can live next to
245
+ the hook.
85
246
 
86
- Derived state: persist ids that must survive hosted replace with
87
- `ctx.host.kv` or `ctx.host.files`. `stateRoot` resets on replace.
247
+ At runtime:
88
248
 
89
- Transcript export: subscribe to `"*"` and append to your own store.
249
+ - `agent-sdk validate --dir .` reports discovery errors and the
250
+ empty-handlers warning.
251
+ - `agent-sdk info --dir . --json` lists the loaded hooks under
252
+ `agents[].hooks`.
253
+ - Send a turn with `agent-sdk dev` or `agent-sdk run --dir . --message "…"`
254
+ and watch the serve log for
255
+ `hook "<name>" handler for <event> threw: …`. `run` prints that log on
256
+ stderr. On hosting, read it with [`agent-sdk logs`](./cli.md#logs).
90
257
 
91
258
  ## What's next
92
259
 
93
260
  Continue with these pages:
94
261
 
262
+ - [Turn result](./result.md): fail a turn from `commit`, not from a hook
95
263
  - [Sessions and streaming](./sessions.md): the event vocabulary hooks observe
264
+ - [Storage](../storage.md): where `ctx.host.kv` and `ctx.host.files` live
96
265
  - [OpenTelemetry](../guides/opentelemetry.md): OTLP traces and metrics
97
266
  from the same event stream
98
267
  - [Deployment](../deployment.md#observability): runtime logs and export
@@ -32,6 +32,9 @@ Use the playground to chat, try channel routes, and inspect sessions.
32
32
  `/v1/dev/evals`). Schedule hand-dispatch still requires `--dev`.
33
33
  - **The surface**: inspect the discovered tools, skills, subagents, MCP
34
34
  connections, channels, and hooks.
35
+ - **Custom tool chips**: drop `agent/playground/tools/<toolName>.tsx` to
36
+ change how that tool renders. Chips compile from the agent tree;
37
+ an [extension](./extensions.md) cannot contribute them.
35
38
  - **Raw events pane**: flip it on to inspect the event stream.
36
39
  - **Logs tab**: recent server log lines, polled from `GET /v1/logs`.
37
40
  - **A/Bs tab**: per-session and aggregate
@@ -21,7 +21,7 @@ experiments can override their file-derived name.
21
21
  | `agent/host-connections/anytool.ts` | Host MCP connection `anytool` (host + `mcp oauth` only) |
22
22
  | `agent/skills/pr-review.md` | skill `pr-review` |
23
23
  | `agent/subagents/reviewer/` | subagent `reviewer` |
24
- | `agent/extensions/ci.ts` | extension mount `ci`; its tools and skills become `ci__<name>` |
24
+ | `agent/extensions/ci.ts` | extension mount `ci`; its contributions become `ci__<name>` |
25
25
  | `agent/extensions/notion.ts` | Cursor plugin mount `notion` (`cursorPlugin`); its skills, agents, and MCP servers become `notion__<name>` |
26
26
  | `agent/channels/drive.ts` | channel `drive`, routes under `/v1/channels/drive` |
27
27
  | `agent/ab.ts` | A/B experiment `ab` unless `name` overrides it |
@@ -81,6 +81,7 @@ Each path maps to a capability and a reference page.
81
81
  | `agent/ab.config.ts` | `defineABConfig` shared A/B settings | [Live A/B metrics](../ab.md) |
82
82
  | `agent/storage.ts` | `defineStorage` backend for the durable `host.kv` / `host.files` APIs | [Storage](../storage.md) |
83
83
  | `agent/artifacts.ts` | `defineArtifacts` kinds, the `tag_artifact` opt-in, and retention | [Artifacts](./artifacts.md) |
84
+ | `agent/result.ts` | `defineResult` host `commit` on the final assistant text | [Turn result](./result.md) |
84
85
  | `agent/schedules/*` | Cron-driven runs (UTC, 5-field; never auto-fire under `--dev`) | [Schedules](./schedules.md) |
85
86
  | `agent/sandbox/workspace/**` | Seed files copied into each local session workspace | [Sessions](./sessions.md#what-goes-into-a-local-session-workspace) |
86
87
  | `agent/playground/` | Custom playground tool chips | [Playground](./playground.md) |
@@ -0,0 +1,94 @@
1
+ ---
2
+ title: "Turn result"
3
+ description: "Run host code on the final assistant text when a turn finishes. Throw to fail the turn."
4
+ ---
5
+
6
+ # Turn result
7
+
8
+ Judgment agents need a place to act on the model's last message: parse
9
+ it, then page, comment, or close a ticket. Author `agent/result.ts`
10
+ with `defineResult` from `@cursor/july/result`. When that file exists,
11
+ every finished turn runs `commit` on the serving host with the full
12
+ assistant text.
13
+
14
+ A thrown `commit` fails the turn. Empty assistant text fails it too.
15
+ Hooks still observe only; they cannot fail a valid turn.
16
+
17
+ Use this for an end-of-turn actuation. Mid-turn actions belong in
18
+ [tools](./tools.md). Durable records that outlive a session belong in
19
+ [artifacts](./artifacts.md).
20
+
21
+ ## Author `agent/result.ts`
22
+
23
+ ```ts
24
+ import { defineResult } from "@cursor/july/result";
25
+ import { applyDecision, parseDecision } from "./lib/actuate.js";
26
+
27
+ export default defineResult({
28
+ async commit(ctx) {
29
+ if (ctx.session.purpose === "eval") {
30
+ return;
31
+ }
32
+ await applyDecision(parseDecision(ctx.text), ctx.host);
33
+ },
34
+ });
35
+ ```
36
+
37
+ `commit` is required. Parse `ctx.text` however the agent needs. Tell
38
+ the model the document shape in `instructions.md`. The Agent SDK does
39
+ not inject a schema.
40
+
41
+ Put `result.ts` on the root agent only. A copy under a subagent is
42
+ ignored with a warning.
43
+
44
+ ## Commit on the host
45
+
46
+ `commit` runs in the serving process after the model finishes, before
47
+ the turn completes. `ctx` is the same host surface a server tool gets,
48
+ plus the turn text:
49
+
50
+ | Member | What it is |
51
+ | --- | --- |
52
+ | `ctx.session` | The session that produced this turn, including `purpose` |
53
+ | `ctx.host` | Shared host services (`kv`, `files`, `mcp`) |
54
+ | `ctx.artifacts` | Session-bound [artifacts](./artifacts.md) facade |
55
+ | `ctx.stateRoot` | The agent's durable state root |
56
+ | `ctx.workspaceDir` | The session workspace |
57
+ | `ctx.text` | The full assistant string |
58
+
59
+ A dry-run session skips `commit` and still completes. Eval sessions do
60
+ run `commit`; return early when `ctx.session.purpose === "eval"` if the
61
+ handler must not actuate.
62
+
63
+ On cloud runtime, the model still runs on the VM. `commit` runs on the
64
+ serving host after the turn returns.
65
+
66
+ `GET /v1/info` reports `result: true` when the file is authored.
67
+
68
+ ## Assert in evals
69
+
70
+ `t.succeeded()` fails when `commit` throws or the turn produced no
71
+ text, because those are turn failures. Read the document on `t.reply`.
72
+
73
+ ```ts
74
+ import { defineEval, includes } from "@cursor/july/evals";
75
+
76
+ export default defineEval({
77
+ async test(t) {
78
+ await t.send("Triage LIN-1842. It duplicates LIN-1801.");
79
+ t.succeeded();
80
+ t.check(t.reply, includes("duplicate"));
81
+ },
82
+ });
83
+ ```
84
+
85
+ ## What's next
86
+
87
+ Continue with these pages:
88
+
89
+ - [Evals](../evals.md): `t.succeeded` and `t.reply`
90
+ - [Sessions and streaming](./sessions.md): `turn.completed` and
91
+ `turn.failed`
92
+ - [Hooks](./hooks.md): observe the stream after the turn has already
93
+ settled
94
+ - [Project layout](./project-layout.md): where `agent/result.ts` lives
@@ -94,7 +94,9 @@ within one session. The `at` field is an ISO-8601 timestamp.
94
94
 
95
95
  Pair `actions.requested` with `action.result` to reconstruct the tool
96
96
  trajectory. Read `turn.completed.data.usage` for input, output, and
97
- cache token counts.
97
+ cache token counts. When `agent/result.ts` is authored, a thrown
98
+ `commit` or empty assistant text emits `turn.failed` instead of
99
+ `turn.completed`. See [Turn result](./result.md).
98
100
 
99
101
  ## How do I stream or replay session events?
100
102
 
@@ -19,8 +19,7 @@ access to `process.env` and your `agent/lib/` code. Local turns call
19
19
  server tools as SDK custom tools. Cloud turns reach them over
20
20
  authenticated HTTP MCP back to the serve host when `--public-url` or
21
21
  `--cloud-tools-url` is set; without either, the server warns at startup
22
- and cloud turns omit them (see
23
- [Cloud runtime](../guides/cloud-runtime.md#what-changes-on-cloud)).
22
+ and cloud turns omit them.
24
23
 
25
24
  ```ts
26
25
  // agent/tools/inspect_pr.ts
@@ -123,6 +123,3 @@ agent-sdk deploy
123
123
  Run it from the agent's git checkout. It infers repository, ref, path,
124
124
  and slug, builds on Cursor-managed hosting, and prints the URL.
125
125
  `agent-sdk deployments` shows status.
126
-
127
- See [Cloud runtime](../guides/cloud-runtime.md) for what changes on
128
- the VM.