@cursor/july 0.1.92 → 0.1.94

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 (448) hide show
  1. package/AGENTS.md +8 -20
  2. package/README.md +115 -182
  3. package/dist/channels/deployments/deployments-channel.d.ts +7 -0
  4. package/dist/channels/deployments/deployments-channel.d.ts.map +1 -1
  5. package/dist/channels/deployments/deployments-channel.js +26 -2
  6. package/dist/channels/deployments/types.d.ts +8 -0
  7. package/dist/channels/deployments/types.d.ts.map +1 -1
  8. package/dist/channels/github/github-channel.d.ts +3 -0
  9. package/dist/channels/github/github-channel.d.ts.map +1 -1
  10. package/dist/channels/github/github-channel.js +28 -56
  11. package/dist/channels/slack/attachments.js +2 -2
  12. package/dist/channels/slack/dispatch.d.ts +0 -7
  13. package/dist/channels/slack/dispatch.d.ts.map +1 -1
  14. package/dist/channels/slack/dispatch.js +4 -7
  15. package/dist/channels/slack/eval-directive.d.ts +5 -12
  16. package/dist/channels/slack/eval-directive.d.ts.map +1 -1
  17. package/dist/channels/slack/eval-directive.js +8 -19
  18. package/dist/channels/slack/index.d.ts +0 -6
  19. package/dist/channels/slack/index.d.ts.map +1 -1
  20. package/dist/channels/slack/index.js +0 -6
  21. package/dist/channels/slack/setup.d.ts +4 -4
  22. package/dist/channels/slack/setup.d.ts.map +1 -1
  23. package/dist/channels/slack/setup.js +8 -15
  24. package/dist/channels/slack/slack-channel.d.ts +6 -13
  25. package/dist/channels/slack/slack-channel.d.ts.map +1 -1
  26. package/dist/channels/slack/slack-channel.js +15 -101
  27. package/dist/channels/slack/types.d.ts +12 -79
  28. package/dist/channels/slack/types.d.ts.map +1 -1
  29. package/dist/channels/slack/types.js +1 -15
  30. package/dist/client.d.ts +14 -0
  31. package/dist/client.d.ts.map +1 -0
  32. package/dist/client.js +12 -0
  33. package/dist/connections.d.ts +18 -9
  34. package/dist/connections.d.ts.map +1 -1
  35. package/dist/connections.js +17 -8
  36. package/dist/continuation.d.ts +1 -1
  37. package/dist/continuation.js +1 -1
  38. package/dist/docs/404.html +2 -2
  39. package/dist/docs/ab.html +8 -8
  40. package/dist/docs/ab.md +7 -13
  41. package/dist/docs/assets/{ab.md.CVzWxLoB.js → ab.md.DJo5r4R-.js} +4 -4
  42. package/dist/docs/assets/{ab.md.CVzWxLoB.lean.js → ab.md.DJo5r4R-.lean.js} +1 -1
  43. package/dist/docs/assets/{app.Bci6CM9E.js → app.CFDEas4I.js} +1 -1
  44. package/dist/docs/assets/building-with-agents.md.DI4mEzlt.js +13 -0
  45. package/dist/docs/assets/{building-with-agents.md.DH8A_cHA.lean.js → building-with-agents.md.DI4mEzlt.lean.js} +1 -1
  46. package/dist/docs/assets/chunks/@localSearchIndexroot.DU3U2Ij2.js +1 -0
  47. package/dist/docs/assets/chunks/{VPLocalSearchBox.BCPT6xA-.js → VPLocalSearchBox.B1IIYpYS.js} +1 -1
  48. package/dist/docs/assets/chunks/{theme.BEA8BF3c.js → theme.Ct4NSiLm.js} +2 -2
  49. package/dist/docs/assets/concepts.md.lwAgBIMI.js +1 -0
  50. package/dist/docs/assets/{concepts.md.CRfU3bVg.lean.js → concepts.md.lwAgBIMI.lean.js} +1 -1
  51. package/dist/docs/assets/{deployment.md.DX_hc3ze.js → deployment.md.D9msOFOW.js} +9 -14
  52. package/dist/docs/assets/{deployment.md.DX_hc3ze.lean.js → deployment.md.D9msOFOW.lean.js} +1 -1
  53. package/dist/docs/assets/{evals.md.a0SMN6r9.js → evals.md.lfJoEVc8.js} +6 -6
  54. package/dist/docs/assets/{evals.md.a0SMN6r9.lean.js → evals.md.lfJoEVc8.lean.js} +1 -1
  55. package/dist/docs/assets/{guides_agent-to-agent.md.BCeVdJRJ.js → guides_agent-to-agent.md.BDb0t1QV.js} +2 -2
  56. package/dist/docs/assets/guides_cloud-runtime.md.CkYbjnAX.js +9 -0
  57. package/dist/docs/assets/guides_cloud-runtime.md.CkYbjnAX.lean.js +1 -0
  58. package/dist/docs/assets/{guides_convert-automation.md.D06eIzea.js → guides_convert-automation.md.B4sjlodG.js} +2 -2
  59. package/dist/docs/assets/{guides_github.md.Cdt1s2QC.js → guides_github.md.Cnh2mL4a.js} +5 -5
  60. package/dist/docs/assets/{guides_github.md.Cdt1s2QC.lean.js → guides_github.md.Cnh2mL4a.lean.js} +1 -1
  61. package/dist/docs/assets/{guides_mcp-oauth.md.Du0f7pGU.js → guides_mcp-oauth.md.DPYmBCbV.js} +7 -9
  62. package/dist/docs/assets/{guides_mcp-oauth.md.Du0f7pGU.lean.js → guides_mcp-oauth.md.DPYmBCbV.lean.js} +1 -1
  63. package/dist/docs/assets/{guides_slack.md.DiUmk_Oi.js → guides_slack.md.C32HsdKk.js} +7 -13
  64. package/dist/docs/assets/guides_slack.md.C32HsdKk.lean.js +1 -0
  65. package/dist/docs/assets/{guides_webhooks.md.BpnIdO0i.js → guides_webhooks.md.DKdA43Qm.js} +2 -2
  66. package/dist/docs/assets/{hillclimbing.md.ywF3yDAd.js → hillclimbing.md.DhESf3OO.js} +1 -1
  67. package/dist/docs/assets/index.md.DRakGHFe.js +5 -0
  68. package/dist/docs/assets/{index.md.BAaMXLFd.lean.js → index.md.DRakGHFe.lean.js} +1 -1
  69. package/dist/docs/assets/{quickstart.md.DsrarzEg.js → quickstart.md.Nj_LjW_a.js} +2 -2
  70. package/dist/docs/assets/{reference_agent-config.md.Bqylgw50.js → reference_agent-config.md.Cp_x38Nl.js} +3 -3
  71. package/dist/docs/assets/{reference_channels.md.DQZjCnyh.js → reference_channels.md.Cd2f2iyV.js} +2 -2
  72. package/dist/docs/assets/{reference_channels.md.DQZjCnyh.lean.js → reference_channels.md.Cd2f2iyV.lean.js} +1 -1
  73. package/dist/docs/assets/{reference_cli.md.B7GkAJRC.js → reference_cli.md.Cw6_ICYG.js} +10 -11
  74. package/dist/docs/assets/{reference_cli.md.B7GkAJRC.lean.js → reference_cli.md.Cw6_ICYG.lean.js} +1 -1
  75. package/dist/docs/assets/{reference_connections.md.DYidrb-j.js → reference_connections.md.BH8Oc0D0.js} +7 -7
  76. package/dist/docs/assets/{reference_connections.md.DYidrb-j.lean.js → reference_connections.md.BH8Oc0D0.lean.js} +1 -1
  77. package/dist/docs/assets/reference_hooks.md.a8BJxMR5.js +14 -0
  78. package/dist/docs/assets/{reference_hooks.md.B9FSgdDe.lean.js → reference_hooks.md.a8BJxMR5.lean.js} +1 -1
  79. package/dist/docs/assets/reference_http-api.md.D89k1mdm.js +11 -0
  80. package/dist/docs/assets/reference_http-api.md.D89k1mdm.lean.js +1 -0
  81. package/dist/docs/assets/{reference_instructions.md.DhNCOl7r.js → reference_instructions.md.CR7XSsGk.js} +3 -3
  82. package/dist/docs/assets/{reference_instructions.md.DhNCOl7r.lean.js → reference_instructions.md.CR7XSsGk.lean.js} +1 -1
  83. package/dist/docs/assets/reference_playground.md.DnX5nL-B.js +1 -0
  84. package/dist/docs/assets/reference_playground.md.DnX5nL-B.lean.js +1 -0
  85. package/dist/docs/assets/reference_project-layout.md.Bv4KOtlB.js +19 -0
  86. package/dist/docs/assets/{reference_prompt.md.DZUMtLPD.js → reference_prompt.md.DnaD5dNK.js} +1 -1
  87. package/dist/docs/assets/{reference_schedules.md.DNipebiG.js → reference_schedules.md.DI_JrHgq.js} +1 -1
  88. package/dist/docs/assets/reference_sessions.md.D0mIh4KK.js +1 -0
  89. package/dist/docs/assets/{reference_sessions.md.tUFzz98S.lean.js → reference_sessions.md.D0mIh4KK.lean.js} +1 -1
  90. package/dist/docs/assets/{reference_skills.md.B5ZEuHfG.js → reference_skills.md.8son6Hjm.js} +4 -4
  91. package/dist/docs/assets/{reference_subagents.md.Xoav0AII.js → reference_subagents.md.CfsIloPm.js} +1 -1
  92. package/dist/docs/assets/{reference_tools.md.wpaJtHn6.js → reference_tools.md.BHeXn2id.js} +3 -3
  93. package/dist/docs/assets/{reference_tools.md.wpaJtHn6.lean.js → reference_tools.md.BHeXn2id.lean.js} +1 -1
  94. package/dist/docs/assets/scaffolding-agents.md.D7UUkWw0.js +1 -0
  95. package/dist/docs/assets/{scaffolding-agents.md.CRDDUtYJ.lean.js → scaffolding-agents.md.D7UUkWw0.lean.js} +1 -1
  96. package/dist/docs/assets/{storage.md.JbjlHWZ6.js → storage.md.BOHeqk2M.js} +5 -5
  97. package/dist/docs/assets/{storage.md.JbjlHWZ6.lean.js → storage.md.BOHeqk2M.lean.js} +1 -1
  98. package/dist/docs/assets/{templates_agentic-owners.md.DSJSIpWU.js → templates_agentic-owners.md.DqtPdm6f.js} +2 -2
  99. package/dist/docs/assets/{templates_pr-autofixer.md.1HAR3RXE.js → templates_pr-autofixer.md.DU7dQpor.js} +2 -2
  100. package/dist/docs/assets/{templates_pr-autofixer.md.1HAR3RXE.lean.js → templates_pr-autofixer.md.DU7dQpor.lean.js} +1 -1
  101. package/dist/docs/assets/{templates_security-reviewer.md.ByFyRta2.js → templates_security-reviewer.md.CTa7u_l1.js} +2 -2
  102. package/dist/docs/assets/{templates_security-reviewer.md.ByFyRta2.lean.js → templates_security-reviewer.md.CTa7u_l1.lean.js} +1 -1
  103. package/dist/docs/assets/troubleshooting.md.Ctv3T8C2.js +1 -0
  104. package/dist/docs/assets/{troubleshooting.md.DYECCZiJ.lean.js → troubleshooting.md.Ctv3T8C2.lean.js} +1 -1
  105. package/dist/docs/building-with-agents.html +7 -7
  106. package/dist/docs/building-with-agents.md +5 -11
  107. package/dist/docs/concepts.html +5 -8
  108. package/dist/docs/concepts.md +13 -17
  109. package/dist/docs/deployment.html +13 -18
  110. package/dist/docs/deployment.md +9 -30
  111. package/dist/docs/design/agsh.md +406 -0
  112. package/dist/docs/evals.html +10 -10
  113. package/dist/docs/evals.md +16 -37
  114. package/dist/docs/guides/agent-to-agent.html +6 -6
  115. package/dist/docs/guides/agent-to-agent.md +3 -3
  116. package/dist/docs/guides/cloud-runtime.html +6 -6
  117. package/dist/docs/guides/cloud-runtime.md +9 -25
  118. package/dist/docs/guides/convert-automation.html +7 -7
  119. package/dist/docs/guides/convert-automation.md +4 -4
  120. package/dist/docs/guides/github.html +9 -9
  121. package/dist/docs/guides/github.md +16 -28
  122. package/dist/docs/guides/human-in-the-loop.html +4 -4
  123. package/dist/docs/guides/mcp-oauth.html +11 -13
  124. package/dist/docs/guides/mcp-oauth.md +14 -22
  125. package/dist/docs/guides/opentelemetry.html +5 -5
  126. package/dist/docs/guides/slack.html +11 -17
  127. package/dist/docs/guides/slack.md +13 -50
  128. package/dist/docs/guides/webhooks.html +6 -6
  129. package/dist/docs/guides/webhooks.md +3 -3
  130. package/dist/docs/hashmap.json +1 -1
  131. package/dist/docs/hillclimbing.html +6 -6
  132. package/dist/docs/hillclimbing.md +1 -1
  133. package/dist/docs/index.html +6 -6
  134. package/dist/docs/index.md +0 -36
  135. package/dist/docs/llms-full.txt +965 -3633
  136. package/dist/docs/llms.txt +3 -18
  137. package/dist/docs/quickstart.html +6 -6
  138. package/dist/docs/quickstart.md +3 -4
  139. package/dist/docs/reference/agent-config.html +8 -8
  140. package/dist/docs/reference/agent-config.md +10 -15
  141. package/dist/docs/reference/artifacts.html +4 -4
  142. package/dist/docs/reference/channels.html +6 -6
  143. package/dist/docs/reference/channels.md +20 -31
  144. package/dist/docs/reference/cli.html +14 -15
  145. package/dist/docs/reference/cli.md +29 -38
  146. package/dist/docs/reference/connections.html +11 -11
  147. package/dist/docs/reference/connections.md +24 -25
  148. package/dist/docs/reference/hooks.html +6 -6
  149. package/dist/docs/reference/hooks.md +12 -17
  150. package/dist/docs/reference/http-api.html +7 -7
  151. package/dist/docs/reference/http-api.md +25 -37
  152. package/dist/docs/reference/instructions.html +6 -6
  153. package/dist/docs/reference/instructions.md +1 -1
  154. package/dist/docs/reference/playground.html +5 -5
  155. package/dist/docs/reference/playground.md +14 -19
  156. package/dist/docs/reference/project-layout.html +9 -7
  157. package/dist/docs/reference/project-layout.md +7 -3
  158. package/dist/docs/reference/prompt.html +6 -6
  159. package/dist/docs/reference/prompt.md +1 -1
  160. package/dist/docs/reference/schedules.html +6 -6
  161. package/dist/docs/reference/schedules.md +1 -2
  162. package/dist/docs/reference/sessions.html +5 -12
  163. package/dist/docs/reference/sessions.md +8 -19
  164. package/dist/docs/reference/skills.html +8 -8
  165. package/dist/docs/reference/skills.md +3 -3
  166. package/dist/docs/reference/subagents.html +6 -6
  167. package/dist/docs/reference/subagents.md +2 -2
  168. package/dist/docs/reference/tools.html +8 -8
  169. package/dist/docs/reference/tools.md +30 -19
  170. package/dist/docs/scaffolding-agents.html +5 -5
  171. package/dist/docs/scaffolding-agents.md +4 -5
  172. package/dist/docs/storage.html +9 -9
  173. package/dist/docs/storage.md +37 -80
  174. package/dist/docs/templates/agentic-owners.html +7 -7
  175. package/dist/docs/templates/agentic-owners.md +2 -2
  176. package/dist/docs/templates/demo.html +4 -4
  177. package/dist/docs/templates/pr-autofixer.html +6 -6
  178. package/dist/docs/templates/pr-autofixer.md +7 -9
  179. package/dist/docs/templates/security-reviewer.html +5 -5
  180. package/dist/docs/templates/security-reviewer.md +2 -3
  181. package/dist/docs/templates/triage.html +4 -4
  182. package/dist/docs/troubleshooting.html +5 -5
  183. package/dist/docs/troubleshooting.md +8 -8
  184. package/dist/index.d.ts +1 -1
  185. package/dist/index.d.ts.map +1 -1
  186. package/dist/index.js +1 -1
  187. package/dist/internal/advertise-tools.d.ts +11 -0
  188. package/dist/internal/advertise-tools.d.ts.map +1 -1
  189. package/dist/internal/advertise-tools.js +47 -9
  190. package/dist/internal/authored-alias-hooks.d.ts +14 -11
  191. package/dist/internal/authored-alias-hooks.d.ts.map +1 -1
  192. package/dist/internal/authored-alias-hooks.js +14 -11
  193. package/dist/internal/authored-loaders.d.ts +7 -6
  194. package/dist/internal/authored-loaders.d.ts.map +1 -1
  195. package/dist/internal/authored-loaders.js +14 -10
  196. package/dist/internal/cli-deploy.d.ts +1 -1
  197. package/dist/internal/cli-deploy.js +5 -5
  198. package/dist/internal/cli-mcp-oauth.d.ts.map +1 -1
  199. package/dist/internal/cli-mcp-oauth.js +7 -4
  200. package/dist/internal/continuation-channel.d.ts +6 -3
  201. package/dist/internal/continuation-channel.d.ts.map +1 -1
  202. package/dist/internal/continuation-channel.js +44 -40
  203. package/dist/internal/continuation-identity.d.ts +17 -16
  204. package/dist/internal/continuation-identity.d.ts.map +1 -1
  205. package/dist/internal/continuation-identity.js +109 -36
  206. package/dist/internal/convert-automation/convert-workflow.d.ts.map +1 -1
  207. package/dist/internal/convert-automation/convert-workflow.js +26 -15
  208. package/dist/internal/convert-automation/slug.d.ts +0 -2
  209. package/dist/internal/convert-automation/slug.d.ts.map +1 -1
  210. package/dist/internal/convert-automation/slug.js +0 -8
  211. package/dist/internal/cursor/account-mcp.d.ts.map +1 -1
  212. package/dist/internal/cursor/account-mcp.js +5 -1
  213. package/dist/internal/deploy-manifest.d.ts +2 -2
  214. package/dist/internal/deploy-manifest.d.ts.map +1 -1
  215. package/dist/internal/deploy-manifest.js +4 -9
  216. package/dist/internal/discovery.d.ts.map +1 -1
  217. package/dist/internal/discovery.js +91 -13
  218. package/dist/internal/distribution.d.ts +4 -3
  219. package/dist/internal/distribution.d.ts.map +1 -1
  220. package/dist/internal/distribution.js +4 -3
  221. package/dist/internal/hosted-delivery-protocol.d.ts +38 -0
  222. package/dist/internal/hosted-delivery-protocol.d.ts.map +1 -0
  223. package/dist/internal/hosted-delivery-protocol.js +70 -0
  224. package/dist/internal/hosted-delivery.d.ts +35 -0
  225. package/dist/internal/hosted-delivery.d.ts.map +1 -0
  226. package/dist/internal/hosted-delivery.js +239 -0
  227. package/dist/internal/http-channel.d.ts.map +1 -1
  228. package/dist/internal/http-channel.js +1 -1
  229. package/dist/internal/mcp-endpoint.js +3 -3
  230. package/dist/internal/mcp-host.d.ts +8 -7
  231. package/dist/internal/mcp-host.d.ts.map +1 -1
  232. package/dist/internal/mcp-host.js +8 -7
  233. package/dist/internal/peer-connections.d.ts.map +1 -1
  234. package/dist/internal/peer-connections.js +5 -1
  235. package/dist/internal/playground/static.d.ts +0 -3
  236. package/dist/internal/playground/static.d.ts.map +1 -1
  237. package/dist/internal/resolved-connections.d.ts.map +1 -1
  238. package/dist/internal/resolved-connections.js +5 -7
  239. package/dist/internal/review-comments.d.ts +186 -63
  240. package/dist/internal/review-comments.d.ts.map +1 -1
  241. package/dist/internal/review-comments.js +350 -168
  242. package/dist/internal/server.d.ts.map +1 -1
  243. package/dist/internal/server.js +134 -175
  244. package/dist/internal/session-engine.d.ts +50 -10
  245. package/dist/internal/session-engine.d.ts.map +1 -1
  246. package/dist/internal/session-engine.js +221 -68
  247. package/dist/internal/shallow-clone.d.ts +8 -2
  248. package/dist/internal/shallow-clone.d.ts.map +1 -1
  249. package/dist/internal/shallow-clone.js +17 -10
  250. package/dist/internal/tool-catalog.d.ts +31 -0
  251. package/dist/internal/tool-catalog.d.ts.map +1 -0
  252. package/dist/internal/tool-catalog.js +67 -0
  253. package/dist/playground/assets/{index-DDvyC2z6.js → index-B3JCyigB.js} +2 -2
  254. package/dist/playground/index.html +1 -1
  255. package/dist/types.d.ts +81 -40
  256. package/dist/types.d.ts.map +1 -1
  257. package/dist/types.js +19 -0
  258. package/docs/README.md +0 -36
  259. package/docs/ab.md +7 -13
  260. package/docs/building-with-agents.md +5 -11
  261. package/docs/concepts.md +13 -17
  262. package/docs/deployment.md +9 -30
  263. package/docs/design/agsh.md +406 -0
  264. package/docs/evals.md +16 -37
  265. package/docs/guides/agent-to-agent.md +3 -3
  266. package/docs/guides/cloud-runtime.md +9 -25
  267. package/docs/guides/convert-automation.md +4 -4
  268. package/docs/guides/github.md +16 -28
  269. package/docs/guides/mcp-oauth.md +14 -22
  270. package/docs/guides/slack.md +14 -51
  271. package/docs/guides/webhooks.md +3 -3
  272. package/docs/hillclimbing.md +1 -1
  273. package/docs/quickstart.md +3 -4
  274. package/docs/reference/agent-config.md +10 -15
  275. package/docs/reference/channels.md +20 -31
  276. package/docs/reference/cli.md +29 -38
  277. package/docs/reference/connections.md +24 -25
  278. package/docs/reference/hooks.md +12 -17
  279. package/docs/reference/http-api.md +26 -38
  280. package/docs/reference/instructions.md +1 -1
  281. package/docs/reference/playground.md +14 -19
  282. package/docs/reference/project-layout.md +7 -3
  283. package/docs/reference/prompt.md +1 -1
  284. package/docs/reference/schedules.md +1 -2
  285. package/docs/reference/sessions.md +8 -19
  286. package/docs/reference/skills.md +3 -3
  287. package/docs/reference/subagents.md +2 -2
  288. package/docs/reference/tools.md +30 -19
  289. package/docs/scaffolding-agents.md +4 -5
  290. package/docs/storage.md +37 -80
  291. package/docs/templates/agentic-owners.md +2 -2
  292. package/docs/templates/pr-autofixer.md +7 -9
  293. package/docs/templates/security-reviewer.md +2 -3
  294. package/docs/troubleshooting.md +8 -8
  295. package/package.json +16 -2
  296. package/skills/create-agent/SKILL.md +6 -13
  297. package/skills/debug/SKILL.md +2 -4
  298. package/skills/evals/SKILL.md +1 -1
  299. package/skills/framework-map/SKILL.md +3 -2
  300. package/skills/mcp-auth/SKILL.md +10 -13
  301. package/skills/setup-slack/SKILL.md +21 -137
  302. package/src/channels/deployments/deployments-channel.ts +32 -2
  303. package/src/channels/deployments/types.ts +8 -0
  304. package/src/channels/github/github-channel.ts +71 -21
  305. package/src/channels/slack/attachments.ts +2 -2
  306. package/src/channels/slack/dispatch.ts +2 -16
  307. package/src/channels/slack/eval-directive.ts +8 -27
  308. package/src/channels/slack/index.ts +0 -6
  309. package/src/channels/slack/setup.ts +8 -15
  310. package/src/channels/slack/slack-channel.ts +14 -125
  311. package/src/channels/slack/types.ts +12 -96
  312. package/src/client.ts +23 -0
  313. package/src/connections.ts +20 -7
  314. package/src/continuation.ts +1 -1
  315. package/src/index.ts +2 -0
  316. package/src/internal/advertise-tools.ts +45 -7
  317. package/src/internal/authored-alias-hooks.ts +14 -11
  318. package/src/internal/authored-loaders.ts +14 -10
  319. package/src/internal/cli-deploy.ts +5 -5
  320. package/src/internal/cli-mcp-oauth.ts +6 -4
  321. package/src/internal/continuation-channel.ts +62 -45
  322. package/src/internal/continuation-identity.ts +123 -38
  323. package/src/internal/convert-automation/convert-workflow.ts +29 -17
  324. package/src/internal/convert-automation/slug.ts +0 -9
  325. package/src/internal/cursor/account-mcp.ts +4 -1
  326. package/src/internal/deploy-manifest.ts +5 -9
  327. package/src/internal/discovery.ts +107 -13
  328. package/src/internal/distribution.ts +4 -3
  329. package/src/internal/fixtures/units-server.ts +52 -0
  330. package/src/internal/hosted-delivery-protocol.ts +114 -0
  331. package/src/internal/hosted-delivery.ts +359 -0
  332. package/src/internal/http-channel.ts +0 -2
  333. package/src/internal/mcp-endpoint.ts +3 -3
  334. package/src/internal/mcp-host.ts +8 -7
  335. package/src/internal/peer-connections.ts +4 -1
  336. package/src/internal/playground/static.ts +1 -3
  337. package/src/internal/resolved-connections.ts +8 -10
  338. package/src/internal/review-comments.ts +542 -229
  339. package/src/internal/server.ts +180 -253
  340. package/src/internal/session-engine.ts +279 -70
  341. package/src/internal/shallow-clone.ts +30 -16
  342. package/src/internal/tool-catalog.ts +106 -0
  343. package/src/types.ts +99 -40
  344. package/templates/pr-autofixer/agent/channels/slack.ts +8 -2
  345. package/templates/triage/README.md +2 -1
  346. package/templates/triage/overlays/jira/agent/mcp-connections/tracker.ts +0 -1
  347. package/templates/triage/overlays/linear/agent/mcp-connections/tracker.ts +0 -1
  348. package/dist/channels/slack/cursor-account.d.ts +0 -87
  349. package/dist/channels/slack/cursor-account.d.ts.map +0 -1
  350. package/dist/channels/slack/cursor-account.js +0 -100
  351. package/dist/docs/assets/building-with-agents.md.DH8A_cHA.js +0 -13
  352. package/dist/docs/assets/chunks/@localSearchIndexroot.Dv-Q0XtU.js +0 -1
  353. package/dist/docs/assets/concepts.md.CRfU3bVg.js +0 -4
  354. package/dist/docs/assets/example-agents_approval-buddy.md.DNL83puR.js +0 -10
  355. package/dist/docs/assets/example-agents_approval-buddy.md.DNL83puR.lean.js +0 -1
  356. package/dist/docs/assets/example-agents_benny.md.C40vHRLc.js +0 -7
  357. package/dist/docs/assets/example-agents_benny.md.C40vHRLc.lean.js +0 -1
  358. package/dist/docs/assets/example-agents_bugbot.md.BRGMi9O2.js +0 -11
  359. package/dist/docs/assets/example-agents_bugbot.md.BRGMi9O2.lean.js +0 -1
  360. package/dist/docs/assets/example-agents_codebase-wiki.md.Dftj_tPp.js +0 -8
  361. package/dist/docs/assets/example-agents_codebase-wiki.md.Dftj_tPp.lean.js +0 -1
  362. package/dist/docs/assets/example-agents_codeowners-review.md.Bfta-lBU.js +0 -8
  363. package/dist/docs/assets/example-agents_codeowners-review.md.Bfta-lBU.lean.js +0 -1
  364. package/dist/docs/assets/example-agents_concierge.md.MrKpQndp.js +0 -23
  365. package/dist/docs/assets/example-agents_concierge.md.MrKpQndp.lean.js +0 -1
  366. package/dist/docs/assets/example-agents_fsd.md.ZWHWWZPE.js +0 -15
  367. package/dist/docs/assets/example-agents_fsd.md.ZWHWWZPE.lean.js +0 -1
  368. package/dist/docs/assets/example-agents_index.md.QZ8mhr6n.js +0 -2
  369. package/dist/docs/assets/example-agents_index.md.QZ8mhr6n.lean.js +0 -1
  370. package/dist/docs/assets/example-agents_knowledge-base.md.DqKqHQ9u.js +0 -11
  371. package/dist/docs/assets/example-agents_knowledge-base.md.DqKqHQ9u.lean.js +0 -1
  372. package/dist/docs/assets/example-agents_oncall.md.DK4XkYTd.js +0 -10
  373. package/dist/docs/assets/example-agents_oncall.md.DK4XkYTd.lean.js +0 -1
  374. package/dist/docs/assets/example-agents_security-reviewer.md.Bai6D0Ee.js +0 -19
  375. package/dist/docs/assets/example-agents_security-reviewer.md.Bai6D0Ee.lean.js +0 -1
  376. package/dist/docs/assets/example-agents_slack-agent.md.D7Kdj5BV.js +0 -5
  377. package/dist/docs/assets/example-agents_slack-agent.md.D7Kdj5BV.lean.js +0 -1
  378. package/dist/docs/assets/example-agents_weather-agent.md.lVEAbWFf.js +0 -25
  379. package/dist/docs/assets/example-agents_weather-agent.md.lVEAbWFf.lean.js +0 -1
  380. package/dist/docs/assets/guides_cloud-runtime.md.BSMLIBHr.js +0 -9
  381. package/dist/docs/assets/guides_cloud-runtime.md.BSMLIBHr.lean.js +0 -1
  382. package/dist/docs/assets/guides_slack.md.DiUmk_Oi.lean.js +0 -1
  383. package/dist/docs/assets/index.md.BAaMXLFd.js +0 -5
  384. package/dist/docs/assets/reference_hooks.md.B9FSgdDe.js +0 -14
  385. package/dist/docs/assets/reference_http-api.md.CSHVobzG.js +0 -11
  386. package/dist/docs/assets/reference_http-api.md.CSHVobzG.lean.js +0 -1
  387. package/dist/docs/assets/reference_playground.md.Dfb92yQf.js +0 -1
  388. package/dist/docs/assets/reference_playground.md.Dfb92yQf.lean.js +0 -1
  389. package/dist/docs/assets/reference_project-layout.md.CwkSbEWT.js +0 -17
  390. package/dist/docs/assets/reference_sessions.md.tUFzz98S.js +0 -8
  391. package/dist/docs/assets/scaffolding-agents.md.CRDDUtYJ.js +0 -1
  392. package/dist/docs/assets/troubleshooting.md.DYECCZiJ.js +0 -1
  393. package/dist/docs/example-agents/approval-buddy.html +0 -36
  394. package/dist/docs/example-agents/approval-buddy.md +0 -266
  395. package/dist/docs/example-agents/benny.html +0 -33
  396. package/dist/docs/example-agents/benny.md +0 -182
  397. package/dist/docs/example-agents/bugbot.html +0 -37
  398. package/dist/docs/example-agents/bugbot.md +0 -229
  399. package/dist/docs/example-agents/codebase-wiki.html +0 -34
  400. package/dist/docs/example-agents/codebase-wiki.md +0 -170
  401. package/dist/docs/example-agents/codeowners-review.html +0 -34
  402. package/dist/docs/example-agents/codeowners-review.md +0 -192
  403. package/dist/docs/example-agents/concierge.html +0 -49
  404. package/dist/docs/example-agents/concierge.md +0 -201
  405. package/dist/docs/example-agents/fsd.html +0 -41
  406. package/dist/docs/example-agents/fsd.md +0 -329
  407. package/dist/docs/example-agents/index.html +0 -28
  408. package/dist/docs/example-agents/index.md +0 -102
  409. package/dist/docs/example-agents/knowledge-base.html +0 -37
  410. package/dist/docs/example-agents/knowledge-base.md +0 -168
  411. package/dist/docs/example-agents/oncall.html +0 -36
  412. package/dist/docs/example-agents/oncall.md +0 -212
  413. package/dist/docs/example-agents/security-reviewer.html +0 -45
  414. package/dist/docs/example-agents/security-reviewer.md +0 -265
  415. package/dist/docs/example-agents/slack-agent.html +0 -31
  416. package/dist/docs/example-agents/slack-agent.md +0 -142
  417. package/dist/docs/example-agents/weather-agent.html +0 -51
  418. package/dist/docs/example-agents/weather-agent.md +0 -296
  419. package/dist/internal/cursor-slack-relay.d.ts +0 -96
  420. package/dist/internal/cursor-slack-relay.d.ts.map +0 -1
  421. package/dist/internal/cursor-slack-relay.js +0 -176
  422. package/docs/example-agents/approval-buddy.md +0 -271
  423. package/docs/example-agents/benny.md +0 -187
  424. package/docs/example-agents/bugbot.md +0 -234
  425. package/docs/example-agents/codebase-wiki.md +0 -175
  426. package/docs/example-agents/codeowners-review.md +0 -197
  427. package/docs/example-agents/concierge.md +0 -206
  428. package/docs/example-agents/fsd.md +0 -334
  429. package/docs/example-agents/index.md +0 -107
  430. package/docs/example-agents/knowledge-base.md +0 -173
  431. package/docs/example-agents/oncall.md +0 -217
  432. package/docs/example-agents/security-reviewer.md +0 -270
  433. package/docs/example-agents/slack-agent.md +0 -147
  434. package/docs/example-agents/weather-agent.md +0 -301
  435. package/src/channels/slack/cursor-account.ts +0 -202
  436. package/src/internal/cursor-slack-relay.ts +0 -249
  437. /package/dist/docs/assets/{guides_agent-to-agent.md.BCeVdJRJ.lean.js → guides_agent-to-agent.md.BDb0t1QV.lean.js} +0 -0
  438. /package/dist/docs/assets/{guides_convert-automation.md.D06eIzea.lean.js → guides_convert-automation.md.B4sjlodG.lean.js} +0 -0
  439. /package/dist/docs/assets/{guides_webhooks.md.BpnIdO0i.lean.js → guides_webhooks.md.DKdA43Qm.lean.js} +0 -0
  440. /package/dist/docs/assets/{hillclimbing.md.ywF3yDAd.lean.js → hillclimbing.md.DhESf3OO.lean.js} +0 -0
  441. /package/dist/docs/assets/{quickstart.md.DsrarzEg.lean.js → quickstart.md.Nj_LjW_a.lean.js} +0 -0
  442. /package/dist/docs/assets/{reference_agent-config.md.Bqylgw50.lean.js → reference_agent-config.md.Cp_x38Nl.lean.js} +0 -0
  443. /package/dist/docs/assets/{reference_project-layout.md.CwkSbEWT.lean.js → reference_project-layout.md.Bv4KOtlB.lean.js} +0 -0
  444. /package/dist/docs/assets/{reference_prompt.md.DZUMtLPD.lean.js → reference_prompt.md.DnaD5dNK.lean.js} +0 -0
  445. /package/dist/docs/assets/{reference_schedules.md.DNipebiG.lean.js → reference_schedules.md.DI_JrHgq.lean.js} +0 -0
  446. /package/dist/docs/assets/{reference_skills.md.B5ZEuHfG.lean.js → reference_skills.md.8son6Hjm.lean.js} +0 -0
  447. /package/dist/docs/assets/{reference_subagents.md.Xoav0AII.lean.js → reference_subagents.md.CfsIloPm.lean.js} +0 -0
  448. /package/dist/docs/assets/{templates_agentic-owners.md.DSJSIpWU.lean.js → templates_agentic-owners.md.DqtPdm6f.lean.js} +0 -0
@@ -37,6 +37,7 @@ import type { AgentProject, AgentProjectInfo } from "../types.js";
37
37
  import {
38
38
  applyAgentContinuationDefaults,
39
39
  channelContinuationIdentity,
40
+ channelDeclaredEventTypes,
40
41
  handshakeChannelContinuation,
41
42
  } from "./continuation-channel.js";
42
43
  import { CONTINUATION_SELECTORS } from "./continuation-identity.js";
@@ -95,8 +96,8 @@ export interface AgentDeployManifestDeclarations {
95
96
  * Scope keys are installation config and are never extracted here.
96
97
  * Omitted channel `continuation` is `/v1` (engine minting) unless the
97
98
  * agent set `architecture: "v2"`, which stamps kind `/v2` defaults
98
- * (`github.pr/v2`, `slack.thread/v2`, `origin.pr/v2`). Per-channel
99
- * selectors still override type.
99
+ * (`github.pr/v2`, `slack.thread/v2`, `origin.pr/v2`,
100
+ * `deployments.deployment/v2`). Per-channel selectors still override type.
100
101
  */
101
102
  channels: Array<{
102
103
  id: string;
@@ -141,14 +142,9 @@ export function buildAgentDeployManifest(
141
142
  throw new Error(handshake.error);
142
143
  }
143
144
  const kind = channel.definition.meta?.kind;
144
- const githubEvents = channel.definition.meta?.githubWebhookEvents;
145
- const originEvents = channel.definition.meta?.originWebhookEvents;
145
+ const declaredEvents = channelDeclaredEventTypes(channel.definition.meta);
146
146
  const eventTypes =
147
- githubEvents !== undefined
148
- ? [...githubEvents].sort()
149
- : originEvents !== undefined
150
- ? [...originEvents].sort()
151
- : undefined;
147
+ declaredEvents === undefined ? undefined : [...declaredEvents].sort();
152
148
  return {
153
149
  id: channel.id,
154
150
  kind,
@@ -50,8 +50,10 @@ import {
50
50
  type InlineStdioConnectionConfig,
51
51
  type InstructionsDefinition,
52
52
  isInlineStdioConnection,
53
+ isToolEffect,
53
54
  MAX_RUNNING_TURNS_LIMIT,
54
55
  type ModelSetting,
56
+ normalizeConnectionEffects,
55
57
  normalizeCursorAccountServers,
56
58
  type ResolvedAgent,
57
59
  type ScheduleDefinition,
@@ -423,6 +425,7 @@ async function loadAgent(
423
425
  tools: [],
424
426
  skills: [],
425
427
  connections: [],
428
+ hostConnections: [],
426
429
  subagents: [],
427
430
  seedFiles: [],
428
431
  };
@@ -434,6 +437,7 @@ async function loadAgent(
434
437
  ctx,
435
438
  await resolveMcpConnectionsDir(ctx, agentDir)
436
439
  );
440
+ const hostConnections = await loadHostConnections(ctx, agentDir, connections);
437
441
  const seedFiles = await loadSeedFiles(ctx, agentDir);
438
442
  const subagents = await loadSubagents(ctx, join(agentDir, "subagents"));
439
443
  const runtime = resolveRuntime(ctx, agentDir, config?.runtime);
@@ -553,7 +557,7 @@ async function loadAgent(
553
557
  agentTools: tools.filter((tool) => tool.execution === "agent").length,
554
558
  skills: skills.length,
555
559
  seedFiles: seedFiles.length,
556
- connections: connections.length,
560
+ connections: connections.length + hostConnections.length,
557
561
  subagents: subagents.length,
558
562
  hasCloudOptions: cloud !== undefined,
559
563
  hasLocalSandbox: localSandbox,
@@ -576,6 +580,7 @@ async function loadAgent(
576
580
  tools,
577
581
  skills,
578
582
  connections,
583
+ hostConnections,
579
584
  subagents,
580
585
  seedFiles,
581
586
  };
@@ -1143,6 +1148,26 @@ function hasAuthorizationHeader(
1143
1148
  );
1144
1149
  }
1145
1150
 
1151
+ function parseConnectionEffects(
1152
+ effects: unknown
1153
+ ): { ok: true; value: ToolEffect[] | undefined } | { ok: false } {
1154
+ if (effects === undefined) {
1155
+ return { ok: true, value: undefined };
1156
+ }
1157
+ const raw = typeof effects === "string" ? [effects] : effects;
1158
+ if (!Array.isArray(raw) || raw.length === 0) {
1159
+ return { ok: false };
1160
+ }
1161
+ const parsed: ToolEffect[] = [];
1162
+ for (const value of raw) {
1163
+ if (!isToolEffect(value)) {
1164
+ return { ok: false };
1165
+ }
1166
+ parsed.push(value);
1167
+ }
1168
+ return { ok: true, value: normalizeConnectionEffects(parsed) };
1169
+ }
1170
+
1146
1171
  function connectionHasSpawnOrRemote(connection: ConnectionDefinition): boolean {
1147
1172
  if ("cursorAccount" in connection && connection.cursorAccount === true) {
1148
1173
  return true;
@@ -1265,6 +1290,49 @@ async function resolveMcpConnectionsDir(
1265
1290
  return preferred;
1266
1291
  }
1267
1292
 
1293
+ async function loadHostConnections(
1294
+ ctx: DiscoveryContext,
1295
+ agentDir: string,
1296
+ modelConnections: readonly DiscoveredConnection[]
1297
+ ): Promise<DiscoveredConnection[]> {
1298
+ const hostDir = join(agentDir, "host-connections");
1299
+ const loaded = await loadConnections(ctx, hostDir);
1300
+ const modelNames = new Set(
1301
+ modelConnections.map((connection) => connection.name)
1302
+ );
1303
+ const hostConnections: DiscoveredConnection[] = [];
1304
+ for (const connection of loaded) {
1305
+ if (modelNames.has(connection.name)) {
1306
+ ctx.diagnostics.push({
1307
+ severity: "error",
1308
+ path: displayPath(ctx, join(hostDir, `${connection.name}.ts`)),
1309
+ message: `Host connection "${connection.name}" collides with agent/mcp-connections/${connection.name}. Rename one of them.`,
1310
+ });
1311
+ continue;
1312
+ }
1313
+ if (connection.advertiseTools === true) {
1314
+ ctx.diagnostics.push({
1315
+ severity: "error",
1316
+ path: displayPath(ctx, join(hostDir, `${connection.name}.ts`)),
1317
+ message:
1318
+ "Host connections are off the model. `advertiseTools` cannot apply. Drop it.",
1319
+ });
1320
+ continue;
1321
+ }
1322
+ if (connection.auth !== undefined) {
1323
+ ctx.diagnostics.push({
1324
+ severity: "error",
1325
+ path: displayPath(ctx, join(hostDir, `${connection.name}.ts`)),
1326
+ message:
1327
+ "Host connections are off the model. `auth` cannot apply. Use static headers or `oauth: true`.",
1328
+ });
1329
+ continue;
1330
+ }
1331
+ hostConnections.push(connection);
1332
+ }
1333
+ return hostConnections;
1334
+ }
1335
+
1268
1336
  async function loadConnections(
1269
1337
  ctx: DiscoveryContext,
1270
1338
  connectionsDir: string
@@ -1292,6 +1360,15 @@ async function loadConnections(
1292
1360
  continue;
1293
1361
  }
1294
1362
  const connection = definition as ConnectionDefinition;
1363
+ if (Object.hasOwn(connection, "hostOnly")) {
1364
+ ctx.diagnostics.push({
1365
+ severity: "error",
1366
+ path: displayPath(ctx, entryPath),
1367
+ message:
1368
+ "MCP connection `hostOnly` was removed. Files under `agent/mcp-connections/` are always visible to the model. Put privileged servers in `agent/host-connections/` so only host tools can call them.",
1369
+ });
1370
+ continue;
1371
+ }
1295
1372
  if (
1296
1373
  isInlineStdioConnection(connection) &&
1297
1374
  connectionHasSpawnOrRemote(connection)
@@ -1336,24 +1413,37 @@ async function loadConnections(
1336
1413
  });
1337
1414
  continue;
1338
1415
  }
1416
+ const parsedEffects = parseConnectionEffects(connection.effects);
1417
+ if (!parsedEffects.ok) {
1418
+ ctx.diagnostics.push({
1419
+ severity: "error",
1420
+ path: displayPath(ctx, entryPath),
1421
+ message:
1422
+ 'MCP connection `effects` must be "read", "write", or a non-empty array of those.',
1423
+ });
1424
+ continue;
1425
+ }
1339
1426
  if (
1340
- connection.advertiseTools === true &&
1341
- isInlineStdioConnection(connection)
1427
+ parsedEffects.value !== undefined &&
1428
+ connection.advertiseTools !== true
1342
1429
  ) {
1343
1430
  ctx.diagnostics.push({
1344
1431
  severity: "error",
1345
1432
  path: displayPath(ctx, entryPath),
1346
1433
  message:
1347
- "MCP connection `advertiseTools` is not supported on inline `tools` connections author those as agent/tools/ server tools instead.",
1434
+ "MCP connection `effects` filters advertised tools; set `advertiseTools: true` or drop `effects`.",
1348
1435
  });
1349
1436
  continue;
1350
1437
  }
1351
- if (connection.advertiseTools === true && connection.hostOnly === true) {
1438
+ if (
1439
+ connection.advertiseTools === true &&
1440
+ isInlineStdioConnection(connection)
1441
+ ) {
1352
1442
  ctx.diagnostics.push({
1353
1443
  severity: "error",
1354
1444
  path: displayPath(ctx, entryPath),
1355
1445
  message:
1356
- "MCP connection `advertiseTools` puts the connection's tools in the model's toolset, which contradicts `hostOnly` (off the model entirely). Drop one of them.",
1446
+ "MCP connection `advertiseTools` is not supported on inline `tools` connections author those as agent/tools/ server tools instead.",
1357
1447
  });
1358
1448
  continue;
1359
1449
  }
@@ -1445,9 +1535,9 @@ async function loadConnections(
1445
1535
  name,
1446
1536
  transport,
1447
1537
  description: connection.description,
1448
- hostOnly: connection.hostOnly,
1449
1538
  auth: connection.auth,
1450
1539
  advertiseTools: connection.advertiseTools,
1540
+ effects: parsedEffects.value,
1451
1541
  });
1452
1542
  }
1453
1543
  return connections;
@@ -1459,7 +1549,6 @@ async function loadInlineStdioConnection(
1459
1549
  entryPath: string,
1460
1550
  connection: InlineStdioConnectionConfig & {
1461
1551
  description?: string;
1462
- hostOnly?: boolean;
1463
1552
  }
1464
1553
  ): Promise<DiscoveredConnection | undefined> {
1465
1554
  const tools = connection.tools;
@@ -1510,7 +1599,6 @@ async function loadInlineStdioConnection(
1510
1599
  name,
1511
1600
  transport,
1512
1601
  description: connection.description,
1513
- hostOnly: connection.hostOnly,
1514
1602
  };
1515
1603
  } catch (error) {
1516
1604
  ctx.diagnostics.push({
@@ -1562,6 +1650,7 @@ async function warnUnsupportedSubagentSlots(
1562
1650
  ["tools", "tools"],
1563
1651
  ["skills", "skills"],
1564
1652
  ["mcp-connections", "MCP connections"],
1653
+ ["host-connections", "host MCP connections"],
1565
1654
  ["connections", "MCP connections"],
1566
1655
  ["subagents", "nested subagents"],
1567
1656
  ["channels", "channels"],
@@ -1670,8 +1759,8 @@ function checkGrokBotRuntimeLimitations(
1670
1759
  }
1671
1760
  if (counts.connections > 0) {
1672
1761
  error(
1673
- displayPath(ctx, join(agentDir, "mcp-connections")),
1674
- "MCP connections are not wired into grokbot turns yet. Remove them or run the agent on the local runtime."
1762
+ displayPath(ctx, agentDir),
1763
+ "MCP connections (agent/mcp-connections/ or agent/host-connections/) are not wired into grokbot turns yet. Remove them or run the agent on the local runtime."
1675
1764
  );
1676
1765
  }
1677
1766
  if (counts.subagents > 0) {
@@ -2256,6 +2345,7 @@ export function projectInfo(project: AgentProject): AgentProjectInfo {
2256
2345
  description: tool.description,
2257
2346
  execution: tool.execution,
2258
2347
  needsApproval: tool.needsApproval,
2348
+ effect: tool.effect,
2259
2349
  inputSchema: tool.inputSchema,
2260
2350
  })),
2261
2351
  skills: agent.skills.map((skill) => ({
@@ -2265,8 +2355,8 @@ export function projectInfo(project: AgentProject): AgentProjectInfo {
2265
2355
  connections: agent.connections.map((connection) => ({
2266
2356
  name: connection.name,
2267
2357
  transport: connectionTransportLabel(connection.transport),
2268
- hostOnly: connection.hostOnly,
2269
2358
  advertiseTools: connection.advertiseTools,
2359
+ effects: connection.effects,
2270
2360
  cursorAccountServers:
2271
2361
  "cursorAccount" in connection.transport
2272
2362
  ? (connection.transport.servers ?? "*")
@@ -2311,6 +2401,9 @@ export function projectInfo(project: AgentProject): AgentProjectInfo {
2311
2401
  if (meta?.originWebhookEvents !== undefined) {
2312
2402
  info.originWebhookEvents = meta.originWebhookEvents;
2313
2403
  }
2404
+ if (meta?.deploymentEventTypes !== undefined) {
2405
+ info.deploymentEventTypes = meta.deploymentEventTypes;
2406
+ }
2314
2407
  if (meta?.slackChannelPosts !== undefined) {
2315
2408
  info.slackChannelPosts = meta.slackChannelPosts;
2316
2409
  }
@@ -2445,6 +2538,7 @@ async function warnUnknownSlots(
2445
2538
  "tools",
2446
2539
  "skills",
2447
2540
  "mcp-connections",
2541
+ "host-connections",
2448
2542
  // Legacy slot name; resolveMcpConnectionsDir warns and still loads it.
2449
2543
  "connections",
2450
2544
  "subagents",
@@ -2454,7 +2548,7 @@ async function warnUnknownSlots(
2454
2548
  "ab",
2455
2549
  "sandbox",
2456
2550
  "lib",
2457
- // Vite playground custom tool chips (examples/*/agent/playground/tools).
2551
+ // Vite playground custom tool chips (agent/playground/tools).
2458
2552
  "playground",
2459
2553
  ]);
2460
2554
  for (const entry of await sortedEntries(agentDir)) {
@@ -21,8 +21,9 @@ export const PACKAGE_NAME = "@cursor/july";
21
21
  export const LEGACY_PACKAGE_NAME = "@anysphere/agent-serve";
22
22
 
23
23
  /**
24
- * Future public package name; aliased with the same fallback-only semantics
25
- * as PACKAGE_NAME so the eventual rename keeps authored imports working.
24
+ * Future public package name; aliased with the same direct-to-running-dist
25
+ * semantics as PACKAGE_NAME so the eventual rename keeps authored imports
26
+ * on the CLI's module identity.
26
27
  */
27
28
  export const AGENTKIT_PACKAGE_NAME = "@cursor/agentkit";
28
29
 
@@ -117,7 +118,7 @@ export function formatCliVersion(options?: { json?: boolean }): string {
117
118
  * runtime mirror of the package `exports` map (the source of truth;
118
119
  * `authored-loaders.test.ts` asserts they stay identical). The alias hooks
119
120
  * derive `@anysphere/agent-serve[/x]`, `@cursor/july[/x]`, and
120
- * `@cursor/agentkit[/x]` targets from this list.
121
+ * `@cursor/agentkit[/x]` direct targets from this list.
121
122
  */
122
123
  export const AUTHORING_ENTRY_FILES: ReadonlyArray<
123
124
  readonly [subpath: string, file: string]
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Tiny stdio MCP server used by mcp-host tests.
3
+ *
4
+ * Exposed as the `units` connection so the host can list and call tools
5
+ * over a real stdio transport.
6
+ */
7
+
8
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
9
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
10
+ import { z } from "zod";
11
+
12
+ const server = new McpServer({
13
+ name: "weather-units",
14
+ version: "0.1.0",
15
+ });
16
+
17
+ server.tool(
18
+ "celsius_to_fahrenheit",
19
+ "Convert a temperature from Celsius to Fahrenheit.",
20
+ { value: z.number().describe("Temperature in °C") },
21
+ async ({ value }) => {
22
+ const fahrenheit = Math.round((value * 9) / 5 + 32);
23
+ return {
24
+ content: [
25
+ {
26
+ type: "text",
27
+ text: JSON.stringify({ celsius: value, fahrenheit }),
28
+ },
29
+ ],
30
+ };
31
+ }
32
+ );
33
+
34
+ server.tool(
35
+ "fahrenheit_to_celsius",
36
+ "Convert a temperature from Fahrenheit to Celsius.",
37
+ { value: z.number().describe("Temperature in Fahrenheit") },
38
+ async ({ value }) => {
39
+ const celsius = Math.round(((value - 32) * 5) / 9);
40
+ return {
41
+ content: [
42
+ {
43
+ type: "text",
44
+ text: JSON.stringify({ fahrenheit: value, celsius }),
45
+ },
46
+ ],
47
+ };
48
+ }
49
+ );
50
+
51
+ const transport = new StdioServerTransport();
52
+ await server.connect(transport);
@@ -0,0 +1,114 @@
1
+ export const HOSTED_DELIVERY_PROTOCOL_VERSION = 2;
2
+ export const HOSTED_DELIVERY_HEADER = "x-agent-sdk-hosted-delivery";
3
+ export const HOSTED_ADMISSION_PATH = "/v1/internal/hosted-admission";
4
+ export const HOSTED_EXECUTION_PATH = "/v1/internal/hosted-execution";
5
+
6
+ export type HostedAdmission = {
7
+ v: 2;
8
+ channelId: string;
9
+ channelKind: "github";
10
+ eventType: string;
11
+ deliveryId: string;
12
+ sessionMode: "event" | "continuation";
13
+ mailboxContinuationKey: string;
14
+ payload: unknown;
15
+ };
16
+
17
+ export type HostedAdmissionOutcome =
18
+ | { ok: true; v: 2; outcome: "skip" | "task" }
19
+ | { ok: true; v: 2; outcome: "send"; admissionToken: string };
20
+
21
+ export type HostedExecution = {
22
+ v: 2;
23
+ admissionToken: string;
24
+ sessionPublicId: string;
25
+ };
26
+
27
+ export type HostedExecutionOutcome = {
28
+ ok: true;
29
+ v: 2;
30
+ outcome: "send";
31
+ };
32
+
33
+ const DELIVERY_KEYS = new Set([
34
+ "v",
35
+ "channelId",
36
+ "channelKind",
37
+ "eventType",
38
+ "deliveryId",
39
+ "sessionMode",
40
+ "mailboxContinuationKey",
41
+ "payload",
42
+ ]);
43
+ const EXECUTION_KEYS = new Set(["v", "admissionToken", "sessionPublicId"]);
44
+
45
+ function boundedString(value: unknown, max: number): value is string {
46
+ return typeof value === "string" && value.length > 0 && value.length <= max;
47
+ }
48
+
49
+ export function parseHostedAdmission(
50
+ value: unknown
51
+ ): HostedAdmission | undefined {
52
+ if (typeof value !== "object" || value === null || Array.isArray(value)) {
53
+ return undefined;
54
+ }
55
+ const body = value as Record<string, unknown>;
56
+ if (
57
+ Object.keys(body).some((key) => !DELIVERY_KEYS.has(key)) ||
58
+ !Object.hasOwn(body, "payload") ||
59
+ body.v !== HOSTED_DELIVERY_PROTOCOL_VERSION ||
60
+ !boundedString(body.channelId, 128) ||
61
+ body.channelKind !== "github" ||
62
+ !boundedString(body.eventType, 128) ||
63
+ !boundedString(body.deliveryId, 256) ||
64
+ (body.sessionMode !== "event" && body.sessionMode !== "continuation") ||
65
+ !boundedString(body.mailboxContinuationKey, 512)
66
+ ) {
67
+ return undefined;
68
+ }
69
+ const prefix = body.sessionMode === "event" ? "evt:" : "cont:";
70
+ return body.mailboxContinuationKey.startsWith(prefix)
71
+ ? (body as HostedAdmission)
72
+ : undefined;
73
+ }
74
+
75
+ export function parseHostedExecution(
76
+ value: unknown
77
+ ): HostedExecution | undefined {
78
+ if (typeof value !== "object" || value === null || Array.isArray(value)) {
79
+ return undefined;
80
+ }
81
+ const body = value as Record<string, unknown>;
82
+ if (
83
+ Object.keys(body).some((key) => !EXECUTION_KEYS.has(key)) ||
84
+ body.v !== HOSTED_DELIVERY_PROTOCOL_VERSION ||
85
+ !boundedString(body.admissionToken, 128) ||
86
+ typeof body.sessionPublicId !== "string" ||
87
+ !/^ses_[a-f0-9]{24}$/.test(body.sessionPublicId)
88
+ ) {
89
+ return undefined;
90
+ }
91
+ return body as HostedExecution;
92
+ }
93
+
94
+ export function parseHostedAdmissionOutcome(
95
+ value: unknown
96
+ ): HostedAdmissionOutcome | undefined {
97
+ if (typeof value !== "object" || value === null || Array.isArray(value)) {
98
+ return undefined;
99
+ }
100
+ const body = value as Record<string, unknown>;
101
+ if (
102
+ body.ok !== true ||
103
+ body.v !== HOSTED_DELIVERY_PROTOCOL_VERSION ||
104
+ (body.outcome !== "skip" &&
105
+ body.outcome !== "send" &&
106
+ body.outcome !== "task")
107
+ ) {
108
+ return undefined;
109
+ }
110
+ if (body.outcome === "send" && !boundedString(body.admissionToken, 128)) {
111
+ return undefined;
112
+ }
113
+ return body as HostedAdmissionOutcome;
114
+ }