@cursor/july 0.1.111 → 0.1.113

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 (441) hide show
  1. package/README.md +4 -0
  2. package/dist/bin/agent-serve.js +20 -4
  3. package/dist/channels/checks.d.ts +10 -0
  4. package/dist/channels/checks.d.ts.map +1 -1
  5. package/dist/channels/github/github-channel.d.ts +29 -19
  6. package/dist/channels/github/github-channel.d.ts.map +1 -1
  7. package/dist/channels/github/github-channel.js +29 -19
  8. package/dist/channels/origin/checks.d.ts +1 -1
  9. package/dist/channels/origin/checks.d.ts.map +1 -1
  10. package/dist/channels/slack/agentic-delivery.d.ts.map +1 -1
  11. package/dist/channels/slack/agentic-delivery.js +2 -0
  12. package/dist/channels/slack/dispatch.d.ts +11 -1
  13. package/dist/channels/slack/dispatch.d.ts.map +1 -1
  14. package/dist/channels/slack/dispatch.js +146 -39
  15. package/dist/channels/slack/placeholder.d.ts +26 -0
  16. package/dist/channels/slack/placeholder.d.ts.map +1 -1
  17. package/dist/channels/slack/placeholder.js +28 -0
  18. package/dist/channels/slack/slack-channel.d.ts.map +1 -1
  19. package/dist/channels/slack/slack-channel.js +9 -16
  20. package/dist/docs/404.html +2 -2
  21. package/dist/docs/assets/{app.Drol6mi6.js → app.CAeK13eM.js} +4 -4
  22. package/dist/docs/assets/building-with-agents.md.BBCx0AUo.js +9 -0
  23. package/dist/docs/assets/building-with-agents.md.BBCx0AUo.lean.js +1 -0
  24. package/dist/docs/assets/chunks/@localSearchIndexroot.Ck9E52Ls.js +1 -0
  25. package/dist/docs/assets/chunks/{VPLocalSearchBox.CdqoBZJX.js → VPLocalSearchBox.C9LbPHod.js} +1 -1
  26. package/dist/docs/assets/chunks/{arc.BVX3ycTn.js → arc.CmMq2zmS.js} +1 -1
  27. package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.CcChnMxX.js → architectureDiagram-Q4EWVU46.CCXB8Uj5.js} +1 -1
  28. package/dist/docs/assets/chunks/{baseUniq.xwtXO-yt.js → baseUniq.CyQo6eLe.js} +1 -1
  29. package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.CijZ_taK.js → blockDiagram-DXYQGD6D.JYq6w91N.js} +1 -1
  30. package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.0FBvwBvK.js → c4Diagram-AHTNJAMY.BRV8GPJJ.js} +1 -1
  31. package/dist/docs/assets/chunks/channel.BHiYmnZ4.js +1 -0
  32. package/dist/docs/assets/chunks/{chunk-4BX2VUAB.CELMmMDA.js → chunk-4BX2VUAB.Bv4ooYQR.js} +1 -1
  33. package/dist/docs/assets/chunks/{chunk-4TB4RGXK.C4bhFtSm.js → chunk-4TB4RGXK.t4JtKPcj.js} +1 -1
  34. package/dist/docs/assets/chunks/{chunk-55IACEB6.ZnQ9gRRQ.js → chunk-55IACEB6.34lCHj9Y.js} +1 -1
  35. package/dist/docs/assets/chunks/{chunk-EDXVE4YY.DPlmglG-.js → chunk-EDXVE4YY.BSwrPNrt.js} +1 -1
  36. package/dist/docs/assets/chunks/{chunk-FMBD7UC4.BrUk8pff.js → chunk-FMBD7UC4.Beeun-R-.js} +1 -1
  37. package/dist/docs/assets/chunks/{chunk-OYMX7WX6.CcmWIncu.js → chunk-OYMX7WX6.BUUFUcJc.js} +1 -1
  38. package/dist/docs/assets/chunks/{chunk-QZHKN3VN.D65-cs8I.js → chunk-QZHKN3VN.B2XjHzN_.js} +1 -1
  39. package/dist/docs/assets/chunks/{chunk-YZCP3GAM.qoXZpG9F.js → chunk-YZCP3GAM.CLYG8znk.js} +1 -1
  40. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.Degh8l90.js +1 -0
  41. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.Degh8l90.js +1 -0
  42. package/dist/docs/assets/chunks/clone.BIywbczV.js +1 -0
  43. package/dist/docs/assets/chunks/{cose-bilkent-S5V4N54A.8rYtqudO.js → cose-bilkent-S5V4N54A.DVEa6fZp.js} +1 -1
  44. package/dist/docs/assets/chunks/{dagre-KV5264BT.DrRP1fOh.js → dagre-KV5264BT.C9PZQK-S.js} +1 -1
  45. package/dist/docs/assets/chunks/{diagram-5BDNPKRD.DHj_xA2_.js → diagram-5BDNPKRD.DoN0uv3Y.js} +1 -1
  46. package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.Bz_6nAKj.js → diagram-G4DWMVQ6.Czv3duqx.js} +1 -1
  47. package/dist/docs/assets/chunks/{diagram-MMDJMWI5.BWA0xSW9.js → diagram-MMDJMWI5.BinJ5kWb.js} +1 -1
  48. package/dist/docs/assets/chunks/{diagram-TYMM5635.CpTJLNJI.js → diagram-TYMM5635.DW326M4K.js} +1 -1
  49. package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.-7AWWSrP.js → erDiagram-SMLLAGMA.U2pR_OA7.js} +1 -1
  50. package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.BTnQ742_.js → flowDiagram-DWJPFMVM.ByWJXeYK.js} +1 -1
  51. package/dist/docs/assets/chunks/framework.BNw1pucY.js +19 -0
  52. package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.B5_HiiQ5.js → ganttDiagram-T4ZO3ILL.OquF0Rtg.js} +1 -1
  53. package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.CZcNTFZd.js → gitGraphDiagram-UUTBAWPF.Bpn01P7X.js} +1 -1
  54. package/dist/docs/assets/chunks/{graph.V2GLaab4.js → graph.CNRB6ETL.js} +1 -1
  55. package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.7pZOkCCU.js → infoDiagram-42DDH7IO.CqhknMWi.js} +1 -1
  56. package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.DSMo3Qa3.js → ishikawaDiagram-UXIWVN3A.C6xpR2af.js} +1 -1
  57. package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.BNEgWN1S.js → journeyDiagram-VCZTEJTY.Cg5f7oB3.js} +1 -1
  58. package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.B-4d4tC7.js → kanban-definition-6JOO6SKY.Cx9YTwlU.js} +1 -1
  59. package/dist/docs/assets/chunks/{layout.Dvbn9nSb.js → layout.ljS-wFtK.js} +1 -1
  60. package/dist/docs/assets/chunks/{linear.D2GM4p4b.js → linear.jSxNrsFC.js} +1 -1
  61. package/dist/docs/assets/chunks/{min.DVBtLK-B.js → min.Cum8AlQw.js} +1 -1
  62. package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.CnJRI55x.js → mindmap-definition-QFDTVHPH.BLiysLpe.js} +1 -1
  63. package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.CtoaTFlA.js → pieDiagram-DEJITSTG.BoIDyuKF.js} +1 -1
  64. package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.DtT24_vN.js → quadrantDiagram-34T5L4WZ.DLkpDytR.js} +1 -1
  65. package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.CjSO4o8f.js → requirementDiagram-MS252O5E.DqTVqSu2.js} +1 -1
  66. package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.-wWiIVWa.js → sankeyDiagram-XADWPNL6.CG_6FF7j.js} +1 -1
  67. package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.DSk8s4gX.js → sequenceDiagram-FGHM5R23.BIp9602K.js} +1 -1
  68. package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.BFKAsdkN.js → stateDiagram-FHFEXIEX.COSXsD9I.js} +1 -1
  69. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.qrxrbFsX.js +1 -0
  70. package/dist/docs/assets/chunks/{theme.C0MctGaz.js → theme.CXJ7PNwy.js} +2 -2
  71. package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.TUNJbAFe.js → timeline-definition-GMOUNBTQ.CXdVqkLq.js} +1 -1
  72. package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.C-RGNnk4.js → vennDiagram-DHZGUBPP.CZxGuc4r.js} +1 -1
  73. package/dist/docs/assets/chunks/{wardley-RL74JXVD.g5efOWmT.js → wardley-RL74JXVD.3oVgfqQk.js} +1 -1
  74. package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.DH4zt73Y.js → wardleyDiagram-NUSXRM2D.6_irCgGJ.js} +1 -1
  75. package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.B-3k6bF6.js → xychartDiagram-5P7HB3ND.TRPe92m3.js} +1 -1
  76. package/dist/docs/assets/deployment.md.D2jQZuFx.js +32 -0
  77. package/dist/docs/assets/deployment.md.D2jQZuFx.lean.js +1 -0
  78. package/dist/docs/assets/evals.md.D3Y3Aixt.js +72 -0
  79. package/dist/docs/assets/evals.md.D3Y3Aixt.lean.js +1 -0
  80. package/dist/docs/assets/guides_agent-to-agent.md.CD4T5FIl.js +41 -0
  81. package/dist/docs/assets/guides_agent-to-agent.md.CD4T5FIl.lean.js +1 -0
  82. package/dist/docs/assets/guides_bitbucket.md.mpevW-VP.js +145 -0
  83. package/dist/docs/assets/guides_bitbucket.md.mpevW-VP.lean.js +1 -0
  84. package/dist/docs/assets/guides_cloud-agents.md.Cp1O3u-X.js +15 -0
  85. package/dist/docs/assets/guides_cloud-agents.md.Cp1O3u-X.lean.js +1 -0
  86. package/dist/docs/assets/guides_convert-automation.md.CqEyfP6Y.js +43 -0
  87. package/dist/docs/assets/guides_convert-automation.md.CqEyfP6Y.lean.js +1 -0
  88. package/dist/docs/assets/guides_github.md.BwpBp3ed.js +156 -0
  89. package/dist/docs/assets/guides_github.md.BwpBp3ed.lean.js +1 -0
  90. package/dist/docs/assets/guides_gitlab.md.DaEC3nMk.js +153 -0
  91. package/dist/docs/assets/guides_gitlab.md.DaEC3nMk.lean.js +1 -0
  92. package/dist/docs/assets/guides_grokbot-agents.md.CMhZNdEU.js +16 -0
  93. package/dist/docs/assets/guides_grokbot-agents.md.CMhZNdEU.lean.js +1 -0
  94. package/dist/docs/assets/guides_improve.md.Bnp4F99w.js +22 -0
  95. package/dist/docs/assets/guides_improve.md.Bnp4F99w.lean.js +1 -0
  96. package/dist/docs/assets/guides_jev.md.F5fAkkfN.js +189 -0
  97. package/dist/docs/assets/guides_jev.md.F5fAkkfN.lean.js +1 -0
  98. package/dist/docs/assets/guides_mcp-oauth.md.bSFakfCY.js +50 -0
  99. package/dist/docs/assets/guides_mcp-oauth.md.bSFakfCY.lean.js +1 -0
  100. package/dist/docs/assets/guides_opentelemetry.md.BKDxQmmd.js +35 -0
  101. package/dist/docs/assets/guides_opentelemetry.md.BKDxQmmd.lean.js +1 -0
  102. package/dist/docs/assets/guides_slack.md.Bo96y42E.js +70 -0
  103. package/dist/docs/assets/guides_slack.md.Bo96y42E.lean.js +1 -0
  104. package/dist/docs/assets/guides_webhooks.md.1A72_VEE.js +92 -0
  105. package/dist/docs/assets/guides_webhooks.md.1A72_VEE.lean.js +1 -0
  106. package/dist/docs/assets/hillclimbing.md.D4E1o5Sa.js +7 -0
  107. package/dist/docs/assets/hillclimbing.md.D4E1o5Sa.lean.js +1 -0
  108. package/dist/docs/assets/{index.md.BFVyY2KT.js → index.md.C-t81M5J.js} +2 -2
  109. package/dist/docs/assets/{index.md.BFVyY2KT.lean.js → index.md.C-t81M5J.lean.js} +1 -1
  110. package/dist/docs/assets/{quickstart.md.D3MjSZN-.js → quickstart.md.DAvVhuuU.js} +1 -1
  111. package/dist/docs/assets/{quickstart.md.D3MjSZN-.lean.js → quickstart.md.DAvVhuuU.lean.js} +1 -1
  112. package/dist/docs/assets/{reference_agent-config.md.CfVA-LZJ.js → reference_agent-config.md.DGPyw7ms.js} +1 -1
  113. package/dist/docs/assets/{reference_agent-config.md.CfVA-LZJ.lean.js → reference_agent-config.md.DGPyw7ms.lean.js} +1 -1
  114. package/dist/docs/assets/{reference_artifacts.md.Vf7qyIZ-.js → reference_artifacts.md.Bu_4HmsD.js} +1 -1
  115. package/dist/docs/assets/{reference_artifacts.md.Vf7qyIZ-.lean.js → reference_artifacts.md.Bu_4HmsD.lean.js} +1 -1
  116. package/dist/docs/assets/{reference_channels.md.icqLKcTc.js → reference_channels.md.nFWbzAic.js} +1 -1
  117. package/dist/docs/assets/{reference_channels.md.icqLKcTc.lean.js → reference_channels.md.nFWbzAic.lean.js} +1 -1
  118. package/dist/docs/assets/{reference_cli.md.B2dBL6L8.js → reference_cli.md.DLWDz9ij.js} +3 -1
  119. package/dist/docs/assets/{reference_cli.md.B2dBL6L8.lean.js → reference_cli.md.DLWDz9ij.lean.js} +1 -1
  120. package/dist/docs/assets/{reference_connections.md.Cb3U_c8n.js → reference_connections.md.Je9dMsdd.js} +2 -2
  121. package/dist/docs/assets/{reference_connections.md.Cb3U_c8n.lean.js → reference_connections.md.Je9dMsdd.lean.js} +1 -1
  122. package/dist/docs/assets/reference_evals.md.DNJzM_yf.js +57 -0
  123. package/dist/docs/assets/reference_evals.md.DNJzM_yf.lean.js +1 -0
  124. package/dist/docs/assets/reference_extensions.md.Cv5aLCz_.js +58 -0
  125. package/dist/docs/assets/reference_extensions.md.Cv5aLCz_.lean.js +1 -0
  126. package/dist/docs/assets/{reference_hooks.md.CZuynAxj.js → reference_hooks.md.B7uzNENk.js} +2 -2
  127. package/dist/docs/assets/{reference_hooks.md.CZuynAxj.lean.js → reference_hooks.md.B7uzNENk.lean.js} +1 -1
  128. package/dist/docs/assets/{reference_http-api.md.DTKcYE6L.js → reference_http-api.md.CduHavZ2.js} +1 -1
  129. package/dist/docs/assets/{reference_http-api.md.DTKcYE6L.lean.js → reference_http-api.md.CduHavZ2.lean.js} +1 -1
  130. package/dist/docs/assets/{reference_instructions.md.D7gkckK-.js → reference_instructions.md.CU1My5My.js} +1 -1
  131. package/dist/docs/assets/{reference_instructions.md.D7gkckK-.lean.js → reference_instructions.md.CU1My5My.lean.js} +1 -1
  132. package/dist/docs/assets/{reference_playground.md.D2YExv5K.js → reference_playground.md.Ch2d0Iqi.js} +1 -1
  133. package/dist/docs/assets/{reference_playground.md.D2YExv5K.lean.js → reference_playground.md.Ch2d0Iqi.lean.js} +1 -1
  134. package/dist/docs/assets/{reference_project-layout.md.DPxbUJyt.js → reference_project-layout.md.BGhgpy9V.js} +1 -1
  135. package/dist/docs/assets/{reference_project-layout.md.DPxbUJyt.lean.js → reference_project-layout.md.BGhgpy9V.lean.js} +1 -1
  136. package/dist/docs/assets/{reference_prompt.md.BQ5uAv1F.js → reference_prompt.md.Ccp0R53H.js} +1 -1
  137. package/dist/docs/assets/{reference_prompt.md.BQ5uAv1F.lean.js → reference_prompt.md.Ccp0R53H.lean.js} +1 -1
  138. package/dist/docs/assets/{reference_schedules.md.BasfZWO-.js → reference_schedules.md.B2Nm6FaD.js} +1 -1
  139. package/dist/docs/assets/{reference_schedules.md.BasfZWO-.lean.js → reference_schedules.md.B2Nm6FaD.lean.js} +1 -1
  140. package/dist/docs/assets/{reference_sessions.md.YKvIsWAx.js → reference_sessions.md.1_6Vyv7x.js} +1 -1
  141. package/dist/docs/assets/{reference_sessions.md.YKvIsWAx.lean.js → reference_sessions.md.1_6Vyv7x.lean.js} +1 -1
  142. package/dist/docs/assets/{reference_skills.md.rNgpsGd0.js → reference_skills.md.DjQkRefx.js} +1 -1
  143. package/dist/docs/assets/{reference_skills.md.rNgpsGd0.lean.js → reference_skills.md.DjQkRefx.lean.js} +1 -1
  144. package/dist/docs/assets/{reference_subagents.md.e5qitjJt.js → reference_subagents.md.Dl16gcBj.js} +2 -2
  145. package/dist/docs/assets/{reference_subagents.md.e5qitjJt.lean.js → reference_subagents.md.Dl16gcBj.lean.js} +1 -1
  146. package/dist/docs/assets/{reference_tools.md.BdCO2aHZ.js → reference_tools.md.B1dH1lpa.js} +3 -3
  147. package/dist/docs/assets/{reference_tools.md.BdCO2aHZ.lean.js → reference_tools.md.B1dH1lpa.lean.js} +1 -1
  148. package/dist/docs/assets/{templates_agentic-owners.md.Da_AGDlH.js → templates_agentic-owners.md.9M575F5C.js} +1 -1
  149. package/dist/docs/assets/{templates_agentic-owners.md.Da_AGDlH.lean.js → templates_agentic-owners.md.9M575F5C.lean.js} +1 -1
  150. package/dist/docs/assets/{templates_pr-autofixer.md.DqxocIGh.js → templates_pr-autofixer.md.ws0DDXDy.js} +1 -1
  151. package/dist/docs/assets/{templates_pr-autofixer.md.DqxocIGh.lean.js → templates_pr-autofixer.md.ws0DDXDy.lean.js} +1 -1
  152. package/dist/docs/assets/{templates_security-reviewer.md.Bhnvd8VE.js → templates_security-reviewer.md.KEFYXzfK.js} +1 -1
  153. package/dist/docs/assets/{templates_security-reviewer.md.Bhnvd8VE.lean.js → templates_security-reviewer.md.KEFYXzfK.lean.js} +1 -1
  154. package/dist/docs/assets/templates_thermo-quality-review.md.VNJ_mohX.js +3 -0
  155. package/dist/docs/assets/templates_thermo-quality-review.md.VNJ_mohX.lean.js +1 -0
  156. package/dist/docs/assets/templates_thermo-review.md.Hi3zWOkP.js +3 -0
  157. package/dist/docs/assets/templates_thermo-review.md.Hi3zWOkP.lean.js +1 -0
  158. package/dist/docs/assets/{templates_triage.md.BdBWO9Ic.js → templates_triage.md.CVGe_FG6.js} +1 -1
  159. package/dist/docs/assets/{templates_triage.md.BdBWO9Ic.lean.js → templates_triage.md.CVGe_FG6.lean.js} +1 -1
  160. package/dist/docs/assets/troubleshooting.md.mnfFG2Em.js +1 -0
  161. package/dist/docs/assets/troubleshooting.md.mnfFG2Em.lean.js +1 -0
  162. package/dist/docs/building-with-agents.html +44 -48
  163. package/dist/docs/building-with-agents.md +94 -82
  164. package/dist/docs/deployment.html +59 -78
  165. package/dist/docs/deployment.md +117 -363
  166. package/dist/docs/evals.html +85 -224
  167. package/dist/docs/evals.md +149 -673
  168. package/dist/docs/guides/agent-to-agent.html +74 -47
  169. package/dist/docs/guides/agent-to-agent.md +128 -46
  170. package/dist/docs/guides/bitbucket.html +179 -44
  171. package/dist/docs/guides/bitbucket.md +249 -48
  172. package/dist/docs/guides/cloud-agents.html +46 -40
  173. package/dist/docs/guides/cloud-agents.md +119 -66
  174. package/dist/docs/guides/convert-automation.html +80 -49
  175. package/dist/docs/guides/convert-automation.md +156 -147
  176. package/dist/docs/guides/github.html +184 -92
  177. package/dist/docs/guides/github.md +260 -245
  178. package/dist/docs/guides/gitlab.html +184 -45
  179. package/dist/docs/guides/gitlab.md +249 -50
  180. package/dist/docs/guides/grokbot-agents.html +48 -41
  181. package/dist/docs/guides/grokbot-agents.md +99 -53
  182. package/dist/docs/guides/improve.html +48 -40
  183. package/dist/docs/guides/improve.md +111 -58
  184. package/dist/docs/guides/jev.html +248 -0
  185. package/dist/docs/guides/jev.md +348 -0
  186. package/dist/docs/guides/mcp-oauth.html +74 -52
  187. package/dist/docs/guides/mcp-oauth.md +111 -121
  188. package/dist/docs/guides/opentelemetry.html +63 -54
  189. package/dist/docs/guides/opentelemetry.md +96 -165
  190. package/dist/docs/guides/slack.html +83 -59
  191. package/dist/docs/guides/slack.md +157 -227
  192. package/dist/docs/guides/webhooks.html +97 -230
  193. package/dist/docs/guides/webhooks.md +154 -385
  194. package/dist/docs/hashmap.json +1 -1
  195. package/dist/docs/hillclimbing.html +44 -38
  196. package/dist/docs/hillclimbing.md +101 -55
  197. package/dist/docs/index.html +38 -38
  198. package/dist/docs/index.md +2 -0
  199. package/dist/docs/llms-full.txt +3490 -3146
  200. package/dist/docs/llms.txt +22 -18
  201. package/dist/docs/quickstart.html +37 -37
  202. package/dist/docs/reference/agent-config.html +37 -37
  203. package/dist/docs/reference/artifacts.html +38 -38
  204. package/dist/docs/reference/channels.html +37 -37
  205. package/dist/docs/reference/cli.html +39 -37
  206. package/dist/docs/reference/cli.md +2 -0
  207. package/dist/docs/reference/connections.html +38 -38
  208. package/dist/docs/reference/connections.md +1 -1
  209. package/dist/docs/reference/evals.html +116 -0
  210. package/dist/docs/reference/evals.md +293 -0
  211. package/dist/docs/reference/extensions.html +80 -84
  212. package/dist/docs/reference/extensions.md +131 -202
  213. package/dist/docs/reference/hooks.html +39 -39
  214. package/dist/docs/reference/hooks.md +34 -34
  215. package/dist/docs/reference/http-api.html +37 -37
  216. package/dist/docs/reference/instructions.html +37 -37
  217. package/dist/docs/reference/playground.html +37 -37
  218. package/dist/docs/reference/project-layout.html +37 -37
  219. package/dist/docs/reference/prompt.html +37 -37
  220. package/dist/docs/reference/schedules.html +37 -37
  221. package/dist/docs/reference/sessions.html +37 -37
  222. package/dist/docs/reference/skills.html +37 -37
  223. package/dist/docs/reference/subagents.html +38 -38
  224. package/dist/docs/reference/subagents.md +1 -1
  225. package/dist/docs/reference/tools.html +38 -38
  226. package/dist/docs/reference/tools.md +4 -0
  227. package/dist/docs/templates/agentic-owners.html +38 -38
  228. package/dist/docs/templates/pr-autofixer.html +37 -37
  229. package/dist/docs/templates/security-reviewer.html +38 -38
  230. package/dist/docs/templates/thermo-quality-review.html +62 -0
  231. package/dist/docs/templates/thermo-quality-review.md +75 -0
  232. package/dist/docs/templates/thermo-review.html +62 -0
  233. package/dist/docs/templates/thermo-review.md +74 -0
  234. package/dist/docs/templates/triage.html +37 -37
  235. package/dist/docs/troubleshooting.html +38 -38
  236. package/dist/docs/troubleshooting.md +97 -66
  237. package/dist/extensions/cursor-cloud-agents/skills/handoff.md +3 -7
  238. package/dist/extensions/improve/extension.d.ts +3 -1
  239. package/dist/extensions/improve/extension.d.ts.map +1 -1
  240. package/dist/extensions/improve/extension.js +4 -2
  241. package/dist/extensions/improve/skills/yourself.js +1 -1
  242. package/dist/extensions/jev/extension.d.ts +43 -0
  243. package/dist/extensions/jev/extension.d.ts.map +1 -0
  244. package/dist/extensions/jev/extension.js +47 -0
  245. package/dist/extensions/jev/lib/evaluate.d.ts +101 -0
  246. package/dist/extensions/jev/lib/evaluate.d.ts.map +1 -0
  247. package/dist/extensions/jev/lib/evaluate.js +167 -0
  248. package/dist/extensions/jev/skills/gated-write.md +25 -0
  249. package/dist/extensions/jev/skills/questions.md +33 -0
  250. package/dist/extensions/jev/tools/evaluate.d.ts +4 -0
  251. package/dist/extensions/jev/tools/evaluate.d.ts.map +1 -0
  252. package/dist/extensions/jev/tools/evaluate.js +88 -0
  253. package/dist/extensions.d.ts +1 -1
  254. package/dist/extensions.d.ts.map +1 -1
  255. package/dist/extensions.js +2 -0
  256. package/dist/filesystem.d.ts +46 -2
  257. package/dist/filesystem.d.ts.map +1 -1
  258. package/dist/filesystem.js +149 -102
  259. package/dist/index.d.ts +2 -2
  260. package/dist/index.d.ts.map +1 -1
  261. package/dist/index.js +1 -1
  262. package/dist/internal/advertise-tools.d.ts.map +1 -1
  263. package/dist/internal/advertise-tools.js +6 -0
  264. package/dist/internal/cli-ax.d.ts +6 -0
  265. package/dist/internal/cli-ax.d.ts.map +1 -1
  266. package/dist/internal/cli-ax.js +72 -14
  267. package/dist/internal/continuation-identity.d.ts.map +1 -1
  268. package/dist/internal/continuation-identity.js +1 -0
  269. package/dist/internal/cursor-agent-template.d.ts +1 -1
  270. package/dist/internal/cursor-agent-template.d.ts.map +1 -1
  271. package/dist/internal/cursor-agent-template.js +2 -0
  272. package/dist/internal/discovery/connections.d.ts.map +1 -1
  273. package/dist/internal/discovery/connections.js +18 -0
  274. package/dist/internal/discovery/extensions.d.ts.map +1 -1
  275. package/dist/internal/discovery/extensions.js +8 -4
  276. package/dist/internal/discovery/info.d.ts.map +1 -1
  277. package/dist/internal/discovery/info.js +1 -0
  278. package/dist/internal/filesystem/tools.d.ts.map +1 -1
  279. package/dist/internal/filesystem/tools.js +2 -2
  280. package/dist/internal/filesystem/walk.d.ts +7 -4
  281. package/dist/internal/filesystem/walk.d.ts.map +1 -1
  282. package/dist/internal/filesystem/walk.js +34 -11
  283. package/dist/internal/hosted-admission-adapter.d.ts +3 -0
  284. package/dist/internal/hosted-admission-adapter.d.ts.map +1 -1
  285. package/dist/internal/hosted-delivery-protocol.d.ts +20 -0
  286. package/dist/internal/hosted-delivery-protocol.d.ts.map +1 -1
  287. package/dist/internal/hosted-delivery-protocol.js +51 -1
  288. package/dist/internal/hosted-delivery.d.ts.map +1 -1
  289. package/dist/internal/hosted-delivery.js +23 -25
  290. package/dist/internal/hosted-execution-diag.d.ts +12 -4
  291. package/dist/internal/hosted-execution-diag.d.ts.map +1 -1
  292. package/dist/internal/hosted-execution-diag.js +26 -4
  293. package/dist/internal/hosted-execution-flush.d.ts +1 -0
  294. package/dist/internal/hosted-execution-flush.d.ts.map +1 -1
  295. package/dist/internal/hosted-execution-flush.js +4 -2
  296. package/dist/internal/init-project.d.ts.map +1 -1
  297. package/dist/internal/init-project.js +4 -0
  298. package/dist/internal/server.d.ts.map +1 -1
  299. package/dist/internal/server.js +111 -48
  300. package/dist/internal/session-engine.d.ts +4 -1
  301. package/dist/internal/session-engine.d.ts.map +1 -1
  302. package/dist/internal/session-engine.js +39 -9
  303. package/dist/internal/skill-catalog.d.ts +28 -0
  304. package/dist/internal/skill-catalog.d.ts.map +1 -0
  305. package/dist/internal/skill-catalog.js +44 -0
  306. package/dist/playground/assets/index-DSMAewbx.css +1 -0
  307. package/dist/playground/assets/index-De_lpFxE.js +67 -0
  308. package/dist/playground/index.html +2 -2
  309. package/dist/types.d.ts +32 -3
  310. package/dist/types.d.ts.map +1 -1
  311. package/docs/README.md +2 -0
  312. package/docs/building-with-agents.md +96 -84
  313. package/docs/deployment.md +118 -364
  314. package/docs/evals.md +149 -673
  315. package/docs/guides/agent-to-agent.md +130 -48
  316. package/docs/guides/bitbucket.md +250 -49
  317. package/docs/guides/cloud-agents.md +119 -67
  318. package/docs/guides/convert-automation.md +157 -148
  319. package/docs/guides/github.md +261 -246
  320. package/docs/guides/gitlab.md +250 -51
  321. package/docs/guides/grokbot-agents.md +100 -55
  322. package/docs/guides/improve.md +112 -59
  323. package/docs/guides/jev.md +353 -0
  324. package/docs/guides/mcp-oauth.md +112 -122
  325. package/docs/guides/opentelemetry.md +97 -166
  326. package/docs/guides/slack.md +158 -228
  327. package/docs/guides/webhooks.md +155 -386
  328. package/docs/hillclimbing.md +102 -56
  329. package/docs/reference/cli.md +2 -0
  330. package/docs/reference/connections.md +1 -1
  331. package/docs/reference/evals.md +298 -0
  332. package/docs/reference/extensions.md +132 -203
  333. package/docs/reference/hooks.md +34 -34
  334. package/docs/reference/subagents.md +1 -1
  335. package/docs/reference/tools.md +4 -0
  336. package/docs/templates/thermo-quality-review.md +80 -0
  337. package/docs/templates/thermo-review.md +79 -0
  338. package/docs/troubleshooting.md +98 -67
  339. package/package.json +8 -1
  340. package/skills/github/SKILL.md +21 -13
  341. package/src/bin/agent-serve.ts +24 -3
  342. package/src/channels/checks.ts +8 -0
  343. package/src/channels/github/github-channel.ts +29 -19
  344. package/src/channels/origin/checks.ts +3 -1
  345. package/src/channels/slack/agentic-delivery.ts +2 -0
  346. package/src/channels/slack/dispatch.ts +131 -4
  347. package/src/channels/slack/placeholder.ts +51 -0
  348. package/src/channels/slack/slack-channel.ts +9 -2
  349. package/src/extensions/cursor-cloud-agents/skills/handoff.md +3 -7
  350. package/src/extensions/improve/extension.ts +4 -2
  351. package/src/extensions/improve/skills/yourself.ts +1 -1
  352. package/src/extensions/jev/extension.ts +95 -0
  353. package/src/extensions/jev/lib/evaluate.ts +289 -0
  354. package/src/extensions/jev/skills/gated-write.md +25 -0
  355. package/src/extensions/jev/skills/questions.md +33 -0
  356. package/src/extensions/jev/tools/evaluate.ts +90 -0
  357. package/src/extensions.ts +2 -0
  358. package/src/filesystem.ts +168 -65
  359. package/src/index.ts +3 -0
  360. package/src/internal/advertise-tools.ts +6 -0
  361. package/src/internal/cli-ax.ts +88 -15
  362. package/src/internal/continuation-identity.ts +1 -0
  363. package/src/internal/cursor-agent-template.ts +2 -0
  364. package/src/internal/discovery/connections.ts +21 -0
  365. package/src/internal/discovery/extensions.ts +12 -4
  366. package/src/internal/discovery/info.ts +1 -0
  367. package/src/internal/filesystem/tools.ts +2 -0
  368. package/src/internal/filesystem/walk.ts +60 -15
  369. package/src/internal/hosted-admission-adapter.ts +3 -0
  370. package/src/internal/hosted-delivery-protocol.ts +82 -1
  371. package/src/internal/hosted-delivery.ts +23 -0
  372. package/src/internal/hosted-execution-diag.ts +33 -4
  373. package/src/internal/hosted-execution-flush.ts +4 -0
  374. package/src/internal/init-project.ts +4 -0
  375. package/src/internal/server.ts +130 -53
  376. package/src/internal/session-engine.ts +46 -8
  377. package/src/internal/skill-catalog.ts +69 -0
  378. package/src/types.ts +33 -3
  379. package/templates/thermo-quality-review/README.md +35 -0
  380. package/templates/thermo-quality-review/agent/agent.ts +8 -0
  381. package/templates/thermo-quality-review/agent/channels/github.ts +42 -0
  382. package/templates/thermo-quality-review/agent/instructions.md +43 -0
  383. package/templates/thermo-quality-review/agent/tools/post_findings.ts +70 -0
  384. package/templates/thermo-quality-review/evals/evals.config.ts +5 -0
  385. package/templates/thermo-quality-review/evals/review.eval.ts +62 -0
  386. package/templates/thermo-quality-review/package.json +18 -0
  387. package/templates/thermo-quality-review/tsconfig.json +12 -0
  388. package/templates/thermo-review/README.md +35 -0
  389. package/templates/thermo-review/agent/agent.ts +8 -0
  390. package/templates/thermo-review/agent/channels/github.ts +42 -0
  391. package/templates/thermo-review/agent/instructions.md +40 -0
  392. package/templates/thermo-review/agent/tools/post_findings.ts +70 -0
  393. package/templates/thermo-review/evals/evals.config.ts +5 -0
  394. package/templates/thermo-review/evals/review.eval.ts +53 -0
  395. package/templates/thermo-review/package.json +18 -0
  396. package/templates/thermo-review/tsconfig.json +12 -0
  397. package/dist/docs/assets/building-with-agents.md.CEGVXkmO.js +0 -13
  398. package/dist/docs/assets/building-with-agents.md.CEGVXkmO.lean.js +0 -1
  399. package/dist/docs/assets/chunks/@localSearchIndexroot.DtXk1hy-.js +0 -1
  400. package/dist/docs/assets/chunks/channel.Bkv1N-gK.js +0 -1
  401. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.CZDco1o8.js +0 -1
  402. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.CZDco1o8.js +0 -1
  403. package/dist/docs/assets/chunks/clone.YSt_40_s.js +0 -1
  404. package/dist/docs/assets/chunks/framework.dypDpWZ3.js +0 -19
  405. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.C4CLm481.js +0 -1
  406. package/dist/docs/assets/deployment.md.Dm4Qo3hp.js +0 -51
  407. package/dist/docs/assets/deployment.md.Dm4Qo3hp.lean.js +0 -1
  408. package/dist/docs/assets/evals.md.BLDRt5LH.js +0 -211
  409. package/dist/docs/assets/evals.md.BLDRt5LH.lean.js +0 -1
  410. package/dist/docs/assets/guides_agent-to-agent.md.BI0xclmy.js +0 -14
  411. package/dist/docs/assets/guides_agent-to-agent.md.BI0xclmy.lean.js +0 -1
  412. package/dist/docs/assets/guides_bitbucket.md.CTpCl__f.js +0 -10
  413. package/dist/docs/assets/guides_bitbucket.md.CTpCl__f.lean.js +0 -1
  414. package/dist/docs/assets/guides_cloud-agents.md.lSE_l7lH.js +0 -9
  415. package/dist/docs/assets/guides_cloud-agents.md.lSE_l7lH.lean.js +0 -1
  416. package/dist/docs/assets/guides_convert-automation.md.Ck6Cr68A.js +0 -12
  417. package/dist/docs/assets/guides_convert-automation.md.Ck6Cr68A.lean.js +0 -1
  418. package/dist/docs/assets/guides_github.md.D6ER29dG.js +0 -64
  419. package/dist/docs/assets/guides_github.md.D6ER29dG.lean.js +0 -1
  420. package/dist/docs/assets/guides_gitlab.md.P-TjBnS5.js +0 -14
  421. package/dist/docs/assets/guides_gitlab.md.P-TjBnS5.lean.js +0 -1
  422. package/dist/docs/assets/guides_grokbot-agents.md.WBZIOvkz.js +0 -9
  423. package/dist/docs/assets/guides_grokbot-agents.md.WBZIOvkz.lean.js +0 -1
  424. package/dist/docs/assets/guides_improve.md.BKaDuKKK.js +0 -14
  425. package/dist/docs/assets/guides_improve.md.BKaDuKKK.lean.js +0 -1
  426. package/dist/docs/assets/guides_mcp-oauth.md.DMNMpXtO.js +0 -28
  427. package/dist/docs/assets/guides_mcp-oauth.md.DMNMpXtO.lean.js +0 -1
  428. package/dist/docs/assets/guides_opentelemetry.md._CRfDyzH.js +0 -26
  429. package/dist/docs/assets/guides_opentelemetry.md._CRfDyzH.lean.js +0 -1
  430. package/dist/docs/assets/guides_slack.md.DdT8rmsj.js +0 -46
  431. package/dist/docs/assets/guides_slack.md.DdT8rmsj.lean.js +0 -1
  432. package/dist/docs/assets/guides_webhooks.md.aQW10HRe.js +0 -225
  433. package/dist/docs/assets/guides_webhooks.md.aQW10HRe.lean.js +0 -1
  434. package/dist/docs/assets/hillclimbing.md.Dq4kkVIL.js +0 -1
  435. package/dist/docs/assets/hillclimbing.md.Dq4kkVIL.lean.js +0 -1
  436. package/dist/docs/assets/reference_extensions.md.wlFD3cUR.js +0 -62
  437. package/dist/docs/assets/reference_extensions.md.wlFD3cUR.lean.js +0 -1
  438. package/dist/docs/assets/troubleshooting.md.BcgNoYtJ.js +0 -1
  439. package/dist/docs/assets/troubleshooting.md.BcgNoYtJ.lean.js +0 -1
  440. package/dist/playground/assets/index-BLlKgZtI.css +0 -1
  441. package/dist/playground/assets/index-CDS5p9sR.js +0 -67
@@ -1,40 +1,240 @@
1
1
  ---
2
2
  title: "GitLab"
3
- description: "Wake your agent from GitLab merge requests, notes, pipelines, and pushes on GitLab.com or self-managed GitLab."
3
+ description: "Review merge requests, answer notes, and triage failed pipelines on GitLab.com or self-managed GitLab."
4
4
  ---
5
5
 
6
6
  # GitLab agents
7
7
 
8
- Use `gitlabChannel()` for GitLab.com and self-managed GitLab. The channel
9
- verifies project hooks, normalizes their payloads, and gives each hook a
10
- project-bound `ctx.gitlab` API client.
8
+ A GitLab agent wakes from a verified project event, reads the current
9
+ project or merge-request state, and writes the result back to GitLab.
10
+ `gitlabChannel()` supports the same hooks on GitLab.com and self-managed
11
+ GitLab.
11
12
 
12
- ## Define the channel
13
+ ## Review a merge request
13
14
 
14
- Author `agent/channels/gitlab.ts`:
15
+ Opening, reopening, or pushing commits to a merge request starts a
16
+ review. The hook reads the latest diff through the project-bound GitLab
17
+ client, the model returns a verdict, and the completed answer appears
18
+ as a note on the merge request.
15
19
 
16
20
  ```ts
17
- import { gitlabChannel } from "@cursor/july/channels/gitlab";
21
+ // agent/channels/gitlab.ts
22
+ import {
23
+ createGitLabApi,
24
+ defaultGitLabAuth,
25
+ gitlabChannel,
26
+ gitlabChannelStateForEvent,
27
+ } from "@cursor/july/channels/gitlab";
28
+ import {
29
+ postMergeRequestNote,
30
+ setPipelineTriageStatus,
31
+ } from "../lib/gitlab.js";
18
32
 
19
- export default gitlabChannel({});
33
+ export default gitlabChannel({
34
+ projects: ["acme/platform"],
35
+ onMergeRequest: async (ctx, mergeRequest) => {
36
+ if (mergeRequest.draft) {
37
+ return null;
38
+ }
39
+ const hasNewCommits =
40
+ mergeRequest.action === "update" && mergeRequest.oldrev !== undefined;
41
+ if (
42
+ mergeRequest.action !== "open" &&
43
+ mergeRequest.action !== "reopen" &&
44
+ !hasNewCommits
45
+ ) {
46
+ return null;
47
+ }
48
+
49
+ const api = createGitLabApi(
50
+ ctx.gitlab,
51
+ ctx.project.pathWithNamespace
52
+ );
53
+ const diffs = await api.listMergeRequestDiffs(mergeRequest.iid);
54
+ return {
55
+ // `auth` starts a model turn running as the event sender.
56
+ auth: defaultGitLabAuth(ctx),
57
+ message: `Review ${ctx.project.pathWithNamespace}!${mergeRequest.iid}.`,
58
+ context: [`<gitlab_diffs>${JSON.stringify(diffs)}</gitlab_diffs>`],
59
+ };
60
+ },
61
+ events: {
62
+ async "message.completed"(event, channel, ctx) {
63
+ if (ctx.session.purpose === "eval") {
64
+ return;
65
+ }
66
+ if (event.data.finishReason === "tool_call" || event.data.text === "") {
67
+ return;
68
+ }
69
+ const mergeRequestIid = channel.state.mergeRequestIid;
70
+ if (
71
+ (channel.state.eventType !== "merge_request" &&
72
+ channel.state.eventType !== "note") ||
73
+ mergeRequestIid === null
74
+ ) {
75
+ return;
76
+ }
77
+ await postMergeRequestNote(
78
+ channel.state.projectPath,
79
+ mergeRequestIid,
80
+ event.data.text
81
+ );
82
+ },
83
+ },
84
+ });
85
+ ```
86
+
87
+ `postMergeRequestNote` is a small wrapper around the GitLab REST API.
88
+ Configure it with the same API token and base described under
89
+ [Connect](#connect). It uses the project and MR IID stored from the
90
+ verified event, so the model never chooses where its review is posted.
91
+
92
+ ## Answer a note
93
+
94
+ Mentioning `@cursor-reviewer` in an MR note resumes that merge
95
+ request's conversation, and the reply sink from the first example posts
96
+ the answer back to the same MR. The author guard drops notes written by
97
+ the agent itself, preventing each reply from starting another turn.
98
+
99
+ ```ts
100
+ const AGENT_USERNAME = "cursor-reviewer";
101
+
102
+ onNote: (ctx, note) => {
103
+ if (note.author?.username === AGENT_USERNAME) {
104
+ return null;
105
+ }
106
+ if (!note.body.includes(`@${AGENT_USERNAME}`)) {
107
+ return null;
108
+ }
109
+ return {
110
+ auth: defaultGitLabAuth(ctx),
111
+ message: note.body,
112
+ };
113
+ },
114
+ ```
115
+
116
+ `onNote` receives merge-request notes by default. Add this property to
117
+ the same `gitlabChannel()` declaration as the review handler.
118
+
119
+ ## Triage a failed pipeline
120
+
121
+ When a pipeline fails, GitLab immediately shows a running
122
+ `cursor/pipeline-triage` status on the commit. The webhook is
123
+ acknowledged while the model investigates, then the status changes to
124
+ success or failure based on whether that triage turn completed.
125
+
126
+ ```ts
127
+ onPipeline: (ctx, pipeline) => {
128
+ if (pipeline.status !== "failed" || pipeline.sha === undefined) {
129
+ return null;
130
+ }
131
+ const sha = pipeline.sha;
132
+
133
+ return {
134
+ // `task` runs this host sequence after the webhook is acknowledged.
135
+ task: async ({ send }) => {
136
+ await ctx.gitlab.setCommitStatus({
137
+ sha,
138
+ state: "running",
139
+ name: "cursor/pipeline-triage",
140
+ description: "Investigating failed pipeline",
141
+ });
142
+
143
+ await send(
144
+ `Triage failed GitLab pipeline ${pipeline.id}.`,
145
+ {
146
+ auth: defaultGitLabAuth(ctx),
147
+ title: `GitLab pipeline ${pipeline.id}`,
148
+ state: {
149
+ ...gitlabChannelStateForEvent({
150
+ project: ctx.project,
151
+ headSha: sha,
152
+ eventType: ctx.eventType,
153
+ }),
154
+ },
155
+ }
156
+ );
157
+ },
158
+ };
159
+ },
160
+ ```
161
+
162
+ Extend the `events` map so the turn's terminal event concludes the
163
+ status through the same provider wrapper:
164
+
165
+ ```ts
166
+ async "message.completed"(event, channel, ctx) {
167
+ if (
168
+ ctx.session.purpose !== "eval" &&
169
+ channel.state.eventType === "pipeline" &&
170
+ channel.state.headSha !== null &&
171
+ event.data.finishReason !== "tool_call"
172
+ ) {
173
+ await setPipelineTriageStatus(
174
+ channel.state.projectPath,
175
+ channel.state.headSha,
176
+ "success",
177
+ "Pipeline triage complete"
178
+ );
179
+ return;
180
+ }
181
+
182
+ // Continue with the merge-request reply branch from the first example.
183
+ },
184
+ async "turn.failed"(_event, channel, ctx) {
185
+ if (
186
+ ctx.session.purpose === "eval" ||
187
+ channel.state.eventType !== "pipeline" ||
188
+ channel.state.headSha === null
189
+ ) {
190
+ return;
191
+ }
192
+ await setPipelineTriageStatus(
193
+ channel.state.projectPath,
194
+ channel.state.headSha,
195
+ "failed",
196
+ "Pipeline triage failed"
197
+ );
198
+ },
20
199
  ```
21
200
 
22
- Without `onMergeRequest`, new and reopened merge requests start turns.
23
- Updates start turns only when they include new commits. Notes, pushes, and
24
- pipelines are opt-in through `onNote`, `onPush`, and `onPipeline`.
25
- Use `onEvent` for other GitLab event types. Set `webhookEvents` when managed
26
- event delivery must subscribe to an event that only `onEvent` handles.
201
+ The status reports whether triage completed; it does not change the
202
+ failed pipeline's own result.
203
+
204
+ ## Events
205
+
206
+ Use `onMergeRequest`, `onNote`, or `onPipeline` for the events shown
207
+ above. Each hook returns one of three decisions:
208
+
209
+ | Return | What happens |
210
+ | --- | --- |
211
+ | `{ auth }` | Start a model turn as the GitLab event sender |
212
+ | `{ task }` | Acknowledge the webhook, then run host code that may also call `send` |
213
+ | `null` | Skip the event |
214
+
215
+ The [Channels reference](../reference/channels.md) covers the remaining
216
+ hook and session behavior.
217
+
218
+ ## Merge request affinity
219
+
220
+ Every merge-request event and note for the same project path and MR IID
221
+ resumes one agent session. An open, a new commit, and a later mention
222
+ therefore share the same conversation.
223
+
224
+ ## Call GitLab through `ctx.gitlab`
27
225
 
28
- Filter note hooks by author before starting a turn. This prevents comments
29
- posted by the agent from triggering another turn.
226
+ Each hook receives a GitLab client already bound to the project from
227
+ the verified delivery. Use `ctx.gitlab.request()` for REST calls,
228
+ `setCommitStatus()` for one status update, or `createCheck()` when you
229
+ need a status handle that changes throughout longer work.
30
230
 
31
- `ctx.gitlab` can call the project REST API and create commit statuses. See the
32
- [Channels reference](../reference/channels.md) for hook return values and
33
- session behavior.
231
+ The project does not come from model output. Keep API calls on this
232
+ bound client so the event decides where reads and writes go.
34
233
 
35
- ## Connect GitLab
234
+ ## Connect
36
235
 
37
- On Cursor-managed hosting, use the signed-in Cursor account:
236
+ On Cursor-managed hosting, use the signed-in Cursor account and list
237
+ the GitLab.com projects that may wake the agent:
38
238
 
39
239
  ```ts
40
240
  export default gitlabChannel({
@@ -44,54 +244,53 @@ export default gitlabChannel({
44
244
  });
45
245
  ```
46
246
 
47
- For direct webhooks, set a project hook secret and API token:
247
+ `cursorAccount` covers event delivery and API calls made through
248
+ `ctx.gitlab` inside hooks. The `postMergeRequestNote` and
249
+ `setPipelineTriageStatus` wrappers are separate REST clients, so
250
+ configure their GitLab API credential too.
48
251
 
49
- ```bash
50
- GITLAB_WEBHOOK_SECRET=...
51
- GITLAB_TOKEN=...
52
- ```
53
-
54
- Add a project webhook for
55
- `https://<your-host>/<slug>/v1/channels/gitlab`. Use the same value for the
56
- GitLab secret token and `GITLAB_WEBHOOK_SECRET`. The channel checks
57
- `X-Gitlab-Token` before it parses the payload.
58
-
59
- Self-managed GitLab also needs its REST API base:
252
+ For direct webhooks or self-managed GitLab, configure the project hook
253
+ secret, API token, and allowed projects. Add the API base for a
254
+ self-managed host:
60
255
 
61
256
  ```ts
62
257
  export default gitlabChannel({
63
- apiBaseUrl: "https://gitlab.example.com/api/v4",
64
258
  projects: ["acme/platform"],
259
+ webhookSecret: () => process.env.GITLAB_WEBHOOK_SECRET,
260
+ token: () => process.env.GITLAB_TOKEN ?? "",
261
+ apiBaseUrl: "https://gitlab.example.com/api/v4",
65
262
  });
66
263
  ```
67
264
 
68
- You can set `GITLAB_API_BASE_URL` instead.
265
+ Without `webhookSecret`, the direct production route stays
266
+ loopback-only. Setting it admits deliveries that carry the matching
267
+ project-hook secret; `token` authorizes the API reads and writes in the
268
+ examples.
269
+
270
+ Register the project webhook at
271
+ `https://<your-host>/<slug>/v1/channels/gitlab` with the same secret.
272
+ For GitLab.com, omit `apiBaseUrl`.
69
273
 
70
274
  ## Test locally
71
275
 
72
- Start the agent, then replay a merge request you can read:
276
+ Replay lets you exercise the same channel hooks with a merge request
277
+ you can read before registering a live project webhook.
73
278
 
74
279
  ```bash
75
280
  agent-sdk dev
76
281
  agent-sdk gitlab replay \
77
- https://gitlab.example.com/acme/platform/-/merge_requests/42
78
- ```
79
-
80
- `GITLAB_TOKEN` needs API read access. Replay reads the merge request,
81
- creates GitLab-shaped payloads, and sends them through the same channel route.
82
- Use `--events '*'` to replay the supported events declared by the channel.
83
- Use `--dry-run --out fixtures/gitlab` to save fixtures.
84
-
85
- ```bash
86
- agent-sdk gitlab events --dir .
87
- agent-sdk gitlab forward --dir .
282
+ https://gitlab.example.com/acme/platform/-/merge_requests/42 \
283
+ --events '*'
88
284
  ```
89
285
 
90
- GitLab has no local webhook relay. `forward` prints the project-hook and HTTPS
91
- tunnel setup for live deliveries.
286
+ Use `--dry-run --out fixtures/gitlab` to save the payloads instead of
287
+ posting them. `GITLAB_TOKEN` needs read access to the merge request.
92
288
 
93
289
  ## Related
94
290
 
95
- - [Channels reference](../reference/channels.md)
96
- - [Webhooks and custom channels](./webhooks.md)
97
- - [Evals](../evals.md)
291
+ - [Channels reference](../reference/channels.md): channel hooks,
292
+ dispatch decisions, and session behavior
293
+ - [Webhooks and custom channels](./webhooks.md): direct webhook auth
294
+ and reply delivery
295
+ - [Evals](../evals.md): turn saved GitLab payloads into regression
296
+ fixtures
@@ -1,22 +1,23 @@
1
1
  ---
2
2
  title: "Cursor Grok Bot agents"
3
- description: "Let an agent-sdk agent talk to your Grok Bot agents: mount the extension, name the bots it may reach, and decide what needs approval."
3
+ description: "Mount an extension that lets your agent consult named Grok Bot agents, wait for long replies, and interrupt work."
4
4
  ---
5
5
 
6
6
  # Grok Bot agents
7
7
 
8
- The `cursor-grokbot-agents` extension lets an agent send a message to
9
- one of your Grok Bot agents and read the reply. The Grok Bot keeps its
10
- own conversation, memory, and tools. Your agent stays where it is and
11
- consults that bot the way you would in the Grok Bot app.
8
+ The `cursor-grokbot-agents` extension lets an Agent SDK agent consult
9
+ the Grok Bot agents on its serve host's Cursor account. The bot keeps
10
+ its existing conversation, memory, and tools, while your agent carries
11
+ the delivered reply back into the current conversation.
12
12
 
13
- This is different from moving this agent's turns onto a hosted Grok Bot.
14
- The extension keeps the agent where it is and lets it talk to *other*
15
- Grok Bot agents.
13
+ Use this extension on the local runtime. It consults another Grok Bot;
14
+ it does not move this agent onto a Grok Bot runtime.
16
15
 
17
16
  ## Mount it
18
17
 
19
- The extension ships with `@cursor/july`. Mount it with one file.
18
+ List the bots your agent may contact and decide whether each new message
19
+ needs approval. Descriptions teach the model when to choose one bot over
20
+ another.
20
21
 
21
22
  ```ts
22
23
  // agent/extensions/grokbot.ts
@@ -24,78 +25,122 @@ import cursorGrokBotAgents from "@cursor/july/extensions/cursor-grokbot-agents";
24
25
 
25
26
  export default cursorGrokBotAgents({
26
27
  agents: [
27
- { name: "Plan Keeper", description: "Keeps or moves outdoor plans." },
28
- { name: "Chief of Staff", description: "Routes work and tracks priorities." },
28
+ {
29
+ name: "Plan Keeper",
30
+ description: "Decides whether outdoor plans should move.",
31
+ },
32
+ {
33
+ name: "Chief of Staff",
34
+ description: "Routes work and tracks priorities.",
35
+ },
29
36
  ],
37
+ needsApproval: true,
30
38
  });
31
39
  ```
32
40
 
33
- `agents` is the allowlist. List every Grok Bot the model may talk to;
34
- a name outside the list is refused. Calls run under the host's
35
- signed-in account (`agent-sdk login`, `CURSOR_API_KEY`, or
36
- `CURSOR_SERVICE_ACCOUNT_KEY`). Keep approval on when you can't.
41
+ Mounted as `grokbot`, the extension contributes `grokbot__ask`,
42
+ `grokbot__check`, `grokbot__interrupt`, and `grokbot__list`, plus
43
+ guidance for consulting them.
37
44
 
38
- To scaffold a project that already mounts this:
45
+ You can also scaffold the packaged example:
39
46
 
40
47
  ```bash
41
48
  npx @cursor/july init ./grokbot --template grokbot-agents
42
49
  ```
43
50
 
51
+ ## Ask a named bot
44
52
 
53
+ When someone says, "Ask Plan Keeper whether we should move the picnic,"
54
+ your agent prepares one self-contained message, requests approval, and
55
+ waits for the bot's delivered reply. That reply appears in the current
56
+ conversation as the consultation result.
45
57
 
46
- ## What the agent can do
58
+ The message must include who is asking, the relevant facts, and the
59
+ shape of the answer. The Grok Bot does not see the current Agent SDK
60
+ conversation.
47
61
 
48
- With the extension mounted, the agent can consult a Grok Bot and stay
49
- in its own conversation:
62
+ > Netto is deciding whether to move Saturday's picnic. The forecast is
63
+ > 70% rain from 1-4pm. Recommend keep or move, give one reason, and name
64
+ > the best alternate time.
50
65
 
51
- - **Ask.** Send a self-contained message to a Grok Bot by the name
52
- shown in the Grok Bot app. The message lands in your conversation
53
- with that bot. The tool waits for the bot's reply.
54
- - **Keep waiting.** A long turn returns `status: "running"`. Call check
55
- with the same name to read what arrived since the last look.
56
- - **Stop a turn.** Interrupt the bot's current work. The conversation
57
- stays; a later ask continues it.
58
- - **See who you can talk to.** List the configured bots and the ones
59
- this caller has already asked. Add a name to `agents` when you want
60
- the model to reach another bot.
66
+ When exactly one bot is configured, the model may omit its name.
61
67
 
62
- A skill teaches the model when to bring a Grok Bot in, how to write a
63
- message the bot can act on alone, and how to wait or interrupt. The
64
- reply is what the Grok Bot sent to the person. If a turn finishes with
65
- no reply, the bot sent nothing; ask again with a clearer request, or
66
- open the bot in the Grok Bot app.
68
+ ## Keep waiting for a long reply
67
69
 
68
- The tools reach Grok Bot agents on the signed-in account. A bot another
69
- user owns is out of reach. That separation is only as fine as your
70
- host's auth; a shared bearer token or `--allow-anonymous` makes every
71
- caller one principal, so use
72
- [authored auth](../reference/channels.md#auth-policies) when callers
73
- need their own.
70
+ If the bot is still working when `ask` reaches its wait limit, the tool
71
+ returns `status: "running"` and any reply received so far. Your agent
72
+ calls `check` for the same bot and reports the final answer when it
73
+ arrives.
74
+
75
+ `check` advances this caller's read position, so it returns only replies
76
+ not already consumed. Check when the answer is needed instead of
77
+ polling in a tight loop.
78
+
79
+ Earlier unread replies can arrive alongside the current result. Keep
80
+ their order and pass them on when they still matter.
81
+
82
+ ## Interrupt a bot turn
83
+
84
+ Use `interrupt` when the bot is pursuing the wrong task or the person
85
+ changes direction. The active turn stops, but the host account's
86
+ conversation with that bot remains, so a later `ask` continues with its
87
+ existing memory.
88
+
89
+ > Stop Plan Keeper's current turn. Then ask it to compare indoor venues
90
+ > instead of changing the time.
91
+
92
+ Only `ask` uses `needsApproval`. `check` and `interrupt` execute without
93
+ an approval card, so expose this extension only to callers who may read
94
+ or stop those bot conversations.
74
95
 
75
96
  ## Configure it
76
97
 
98
+ `agents` is a name allowlist, not an existence check. A name outside the
99
+ list is refused, but a misspelled configured name may create a new empty
100
+ bot on first use. If a result says `created: true`, tell the person and
101
+ check the name before sending more work.
77
102
 
78
- | Option | What it controls |
79
- | --------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
80
- | `agents` | The Grok Bot agents the model may talk to, by the name shown in the app. A lone entry is the default when a call names none. Omit `agents` to allow any name; an unknown name creates an empty Grok Bot on the account. |
81
- | `needsApproval` | Park asks for a [human decision](../reference/tools.md#gate-a-tool-on-human-approval). Defaults to `true` when no `agents` are configured, `false` otherwise. |
82
- | `apiKey` | A Cursor API key to call with instead of the host's own. |
103
+ With no `agents` list, any name is allowed and approval defaults on.
104
+ Prefer an explicit list for a shared agent. `list` returns configured
105
+ bots and bots this caller already contacted; it does not enumerate the
106
+ whole account.
83
107
 
108
+ Calls use the serve host credential: `CURSOR_API_KEY`,
109
+ `CURSOR_API_KEY_FILE`, `CURSOR_SERVICE_ACCOUNT_KEY`, or
110
+ `agent-sdk login`. Use `apiKey` only when the extension should run under
111
+ a different account.
84
112
 
113
+ `pollIntervalMs` changes how often a waiting tool reads for new bot
114
+ output. Keep the default unless the service needs a different balance
115
+ between response latency and request volume.
85
116
 
117
+ ## Account and caller boundaries
86
118
 
87
- ## Adjust it
119
+ Every tool reaches the serve host account's existing Grok Bot
120
+ conversation. Authenticated Agent SDK callers have separate contact
121
+ lists and read positions, but they do not get separate Grok Bot accounts
122
+ or isolated bot memory.
88
123
 
89
- To take a capability away, such as interrupting a turn, mount as a
90
- directory and disable that tool; see
91
- [overlays](../reference/extensions.md#adjust-a-mounted-extension).
124
+ A shared bearer token or anonymous host also collapses callers into one
125
+ Agent SDK principal. Use per-caller auth when contact history and read
126
+ positions must remain separate.
92
127
 
93
- ## What's next
128
+ If `ask` finds the bot busy with an earlier message, it sends nothing.
129
+ For a bot this caller already contacted, use `check` or `interrupt`.
130
+ On first contact, wait for the existing turn in the Grok Bot app to
131
+ finish, then ask again.
94
132
 
95
- Continue with these pages:
133
+ ## Adjust it
96
134
 
97
- - [Extensions](../reference/extensions.md): how mounts, namespaces, and
98
- overrides work
99
- - [Gate a tool on human approval](../reference/tools.md#gate-a-tool-on-human-approval):
100
- where parked asks get approved
135
+ To remove a capability such as `interrupt`, mount the extension as a
136
+ directory and disable that tool. See
137
+ [Adjust a mounted extension](../reference/extensions.md#adjust-a-mounted-extension).
138
+
139
+ ## What's next
101
140
 
141
+ - [Extensions](../reference/extensions.md): namespaces, trust, and
142
+ overlays
143
+ - [Tool approvals](../reference/tools.md#gate-a-tool-on-human-approval):
144
+ approve asks
145
+ - [Agent config](../reference/agent-config.md#choose-a-runtime): local
146
+ and hosted runtimes