@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.
- package/README.md +4 -0
- package/dist/bin/agent-serve.js +20 -4
- package/dist/channels/checks.d.ts +10 -0
- package/dist/channels/checks.d.ts.map +1 -1
- package/dist/channels/github/github-channel.d.ts +29 -19
- package/dist/channels/github/github-channel.d.ts.map +1 -1
- package/dist/channels/github/github-channel.js +29 -19
- package/dist/channels/origin/checks.d.ts +1 -1
- package/dist/channels/origin/checks.d.ts.map +1 -1
- package/dist/channels/slack/agentic-delivery.d.ts.map +1 -1
- package/dist/channels/slack/agentic-delivery.js +2 -0
- package/dist/channels/slack/dispatch.d.ts +11 -1
- package/dist/channels/slack/dispatch.d.ts.map +1 -1
- package/dist/channels/slack/dispatch.js +146 -39
- package/dist/channels/slack/placeholder.d.ts +26 -0
- package/dist/channels/slack/placeholder.d.ts.map +1 -1
- package/dist/channels/slack/placeholder.js +28 -0
- package/dist/channels/slack/slack-channel.d.ts.map +1 -1
- package/dist/channels/slack/slack-channel.js +9 -16
- package/dist/docs/404.html +2 -2
- package/dist/docs/assets/{app.Drol6mi6.js → app.CAeK13eM.js} +4 -4
- package/dist/docs/assets/building-with-agents.md.BBCx0AUo.js +9 -0
- package/dist/docs/assets/building-with-agents.md.BBCx0AUo.lean.js +1 -0
- package/dist/docs/assets/chunks/@localSearchIndexroot.Ck9E52Ls.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.CdqoBZJX.js → VPLocalSearchBox.C9LbPHod.js} +1 -1
- package/dist/docs/assets/chunks/{arc.BVX3ycTn.js → arc.CmMq2zmS.js} +1 -1
- package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.CcChnMxX.js → architectureDiagram-Q4EWVU46.CCXB8Uj5.js} +1 -1
- package/dist/docs/assets/chunks/{baseUniq.xwtXO-yt.js → baseUniq.CyQo6eLe.js} +1 -1
- package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.CijZ_taK.js → blockDiagram-DXYQGD6D.JYq6w91N.js} +1 -1
- package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.0FBvwBvK.js → c4Diagram-AHTNJAMY.BRV8GPJJ.js} +1 -1
- package/dist/docs/assets/chunks/channel.BHiYmnZ4.js +1 -0
- package/dist/docs/assets/chunks/{chunk-4BX2VUAB.CELMmMDA.js → chunk-4BX2VUAB.Bv4ooYQR.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-4TB4RGXK.C4bhFtSm.js → chunk-4TB4RGXK.t4JtKPcj.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-55IACEB6.ZnQ9gRRQ.js → chunk-55IACEB6.34lCHj9Y.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-EDXVE4YY.DPlmglG-.js → chunk-EDXVE4YY.BSwrPNrt.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-FMBD7UC4.BrUk8pff.js → chunk-FMBD7UC4.Beeun-R-.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-OYMX7WX6.CcmWIncu.js → chunk-OYMX7WX6.BUUFUcJc.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-QZHKN3VN.D65-cs8I.js → chunk-QZHKN3VN.B2XjHzN_.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-YZCP3GAM.qoXZpG9F.js → chunk-YZCP3GAM.CLYG8znk.js} +1 -1
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.Degh8l90.js +1 -0
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.Degh8l90.js +1 -0
- package/dist/docs/assets/chunks/clone.BIywbczV.js +1 -0
- package/dist/docs/assets/chunks/{cose-bilkent-S5V4N54A.8rYtqudO.js → cose-bilkent-S5V4N54A.DVEa6fZp.js} +1 -1
- package/dist/docs/assets/chunks/{dagre-KV5264BT.DrRP1fOh.js → dagre-KV5264BT.C9PZQK-S.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-5BDNPKRD.DHj_xA2_.js → diagram-5BDNPKRD.DoN0uv3Y.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.Bz_6nAKj.js → diagram-G4DWMVQ6.Czv3duqx.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-MMDJMWI5.BWA0xSW9.js → diagram-MMDJMWI5.BinJ5kWb.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-TYMM5635.CpTJLNJI.js → diagram-TYMM5635.DW326M4K.js} +1 -1
- package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.-7AWWSrP.js → erDiagram-SMLLAGMA.U2pR_OA7.js} +1 -1
- package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.BTnQ742_.js → flowDiagram-DWJPFMVM.ByWJXeYK.js} +1 -1
- package/dist/docs/assets/chunks/framework.BNw1pucY.js +19 -0
- package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.B5_HiiQ5.js → ganttDiagram-T4ZO3ILL.OquF0Rtg.js} +1 -1
- package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.CZcNTFZd.js → gitGraphDiagram-UUTBAWPF.Bpn01P7X.js} +1 -1
- package/dist/docs/assets/chunks/{graph.V2GLaab4.js → graph.CNRB6ETL.js} +1 -1
- package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.7pZOkCCU.js → infoDiagram-42DDH7IO.CqhknMWi.js} +1 -1
- package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.DSMo3Qa3.js → ishikawaDiagram-UXIWVN3A.C6xpR2af.js} +1 -1
- package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.BNEgWN1S.js → journeyDiagram-VCZTEJTY.Cg5f7oB3.js} +1 -1
- package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.B-4d4tC7.js → kanban-definition-6JOO6SKY.Cx9YTwlU.js} +1 -1
- package/dist/docs/assets/chunks/{layout.Dvbn9nSb.js → layout.ljS-wFtK.js} +1 -1
- package/dist/docs/assets/chunks/{linear.D2GM4p4b.js → linear.jSxNrsFC.js} +1 -1
- package/dist/docs/assets/chunks/{min.DVBtLK-B.js → min.Cum8AlQw.js} +1 -1
- package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.CnJRI55x.js → mindmap-definition-QFDTVHPH.BLiysLpe.js} +1 -1
- package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.CtoaTFlA.js → pieDiagram-DEJITSTG.BoIDyuKF.js} +1 -1
- package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.DtT24_vN.js → quadrantDiagram-34T5L4WZ.DLkpDytR.js} +1 -1
- package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.CjSO4o8f.js → requirementDiagram-MS252O5E.DqTVqSu2.js} +1 -1
- package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.-wWiIVWa.js → sankeyDiagram-XADWPNL6.CG_6FF7j.js} +1 -1
- package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.DSk8s4gX.js → sequenceDiagram-FGHM5R23.BIp9602K.js} +1 -1
- package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.BFKAsdkN.js → stateDiagram-FHFEXIEX.COSXsD9I.js} +1 -1
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.qrxrbFsX.js +1 -0
- package/dist/docs/assets/chunks/{theme.C0MctGaz.js → theme.CXJ7PNwy.js} +2 -2
- package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.TUNJbAFe.js → timeline-definition-GMOUNBTQ.CXdVqkLq.js} +1 -1
- package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.C-RGNnk4.js → vennDiagram-DHZGUBPP.CZxGuc4r.js} +1 -1
- package/dist/docs/assets/chunks/{wardley-RL74JXVD.g5efOWmT.js → wardley-RL74JXVD.3oVgfqQk.js} +1 -1
- package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.DH4zt73Y.js → wardleyDiagram-NUSXRM2D.6_irCgGJ.js} +1 -1
- package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.B-3k6bF6.js → xychartDiagram-5P7HB3ND.TRPe92m3.js} +1 -1
- package/dist/docs/assets/deployment.md.D2jQZuFx.js +32 -0
- package/dist/docs/assets/deployment.md.D2jQZuFx.lean.js +1 -0
- package/dist/docs/assets/evals.md.D3Y3Aixt.js +72 -0
- package/dist/docs/assets/evals.md.D3Y3Aixt.lean.js +1 -0
- package/dist/docs/assets/guides_agent-to-agent.md.CD4T5FIl.js +41 -0
- package/dist/docs/assets/guides_agent-to-agent.md.CD4T5FIl.lean.js +1 -0
- package/dist/docs/assets/guides_bitbucket.md.mpevW-VP.js +145 -0
- package/dist/docs/assets/guides_bitbucket.md.mpevW-VP.lean.js +1 -0
- package/dist/docs/assets/guides_cloud-agents.md.Cp1O3u-X.js +15 -0
- package/dist/docs/assets/guides_cloud-agents.md.Cp1O3u-X.lean.js +1 -0
- package/dist/docs/assets/guides_convert-automation.md.CqEyfP6Y.js +43 -0
- package/dist/docs/assets/guides_convert-automation.md.CqEyfP6Y.lean.js +1 -0
- package/dist/docs/assets/guides_github.md.BwpBp3ed.js +156 -0
- package/dist/docs/assets/guides_github.md.BwpBp3ed.lean.js +1 -0
- package/dist/docs/assets/guides_gitlab.md.DaEC3nMk.js +153 -0
- package/dist/docs/assets/guides_gitlab.md.DaEC3nMk.lean.js +1 -0
- package/dist/docs/assets/guides_grokbot-agents.md.CMhZNdEU.js +16 -0
- package/dist/docs/assets/guides_grokbot-agents.md.CMhZNdEU.lean.js +1 -0
- package/dist/docs/assets/guides_improve.md.Bnp4F99w.js +22 -0
- package/dist/docs/assets/guides_improve.md.Bnp4F99w.lean.js +1 -0
- package/dist/docs/assets/guides_jev.md.F5fAkkfN.js +189 -0
- package/dist/docs/assets/guides_jev.md.F5fAkkfN.lean.js +1 -0
- package/dist/docs/assets/guides_mcp-oauth.md.bSFakfCY.js +50 -0
- package/dist/docs/assets/guides_mcp-oauth.md.bSFakfCY.lean.js +1 -0
- package/dist/docs/assets/guides_opentelemetry.md.BKDxQmmd.js +35 -0
- package/dist/docs/assets/guides_opentelemetry.md.BKDxQmmd.lean.js +1 -0
- package/dist/docs/assets/guides_slack.md.Bo96y42E.js +70 -0
- package/dist/docs/assets/guides_slack.md.Bo96y42E.lean.js +1 -0
- package/dist/docs/assets/guides_webhooks.md.1A72_VEE.js +92 -0
- package/dist/docs/assets/guides_webhooks.md.1A72_VEE.lean.js +1 -0
- package/dist/docs/assets/hillclimbing.md.D4E1o5Sa.js +7 -0
- package/dist/docs/assets/hillclimbing.md.D4E1o5Sa.lean.js +1 -0
- package/dist/docs/assets/{index.md.BFVyY2KT.js → index.md.C-t81M5J.js} +2 -2
- package/dist/docs/assets/{index.md.BFVyY2KT.lean.js → index.md.C-t81M5J.lean.js} +1 -1
- package/dist/docs/assets/{quickstart.md.D3MjSZN-.js → quickstart.md.DAvVhuuU.js} +1 -1
- package/dist/docs/assets/{quickstart.md.D3MjSZN-.lean.js → quickstart.md.DAvVhuuU.lean.js} +1 -1
- package/dist/docs/assets/{reference_agent-config.md.CfVA-LZJ.js → reference_agent-config.md.DGPyw7ms.js} +1 -1
- package/dist/docs/assets/{reference_agent-config.md.CfVA-LZJ.lean.js → reference_agent-config.md.DGPyw7ms.lean.js} +1 -1
- package/dist/docs/assets/{reference_artifacts.md.Vf7qyIZ-.js → reference_artifacts.md.Bu_4HmsD.js} +1 -1
- package/dist/docs/assets/{reference_artifacts.md.Vf7qyIZ-.lean.js → reference_artifacts.md.Bu_4HmsD.lean.js} +1 -1
- package/dist/docs/assets/{reference_channels.md.icqLKcTc.js → reference_channels.md.nFWbzAic.js} +1 -1
- package/dist/docs/assets/{reference_channels.md.icqLKcTc.lean.js → reference_channels.md.nFWbzAic.lean.js} +1 -1
- package/dist/docs/assets/{reference_cli.md.B2dBL6L8.js → reference_cli.md.DLWDz9ij.js} +3 -1
- package/dist/docs/assets/{reference_cli.md.B2dBL6L8.lean.js → reference_cli.md.DLWDz9ij.lean.js} +1 -1
- package/dist/docs/assets/{reference_connections.md.Cb3U_c8n.js → reference_connections.md.Je9dMsdd.js} +2 -2
- package/dist/docs/assets/{reference_connections.md.Cb3U_c8n.lean.js → reference_connections.md.Je9dMsdd.lean.js} +1 -1
- package/dist/docs/assets/reference_evals.md.DNJzM_yf.js +57 -0
- package/dist/docs/assets/reference_evals.md.DNJzM_yf.lean.js +1 -0
- package/dist/docs/assets/reference_extensions.md.Cv5aLCz_.js +58 -0
- package/dist/docs/assets/reference_extensions.md.Cv5aLCz_.lean.js +1 -0
- package/dist/docs/assets/{reference_hooks.md.CZuynAxj.js → reference_hooks.md.B7uzNENk.js} +2 -2
- package/dist/docs/assets/{reference_hooks.md.CZuynAxj.lean.js → reference_hooks.md.B7uzNENk.lean.js} +1 -1
- package/dist/docs/assets/{reference_http-api.md.DTKcYE6L.js → reference_http-api.md.CduHavZ2.js} +1 -1
- package/dist/docs/assets/{reference_http-api.md.DTKcYE6L.lean.js → reference_http-api.md.CduHavZ2.lean.js} +1 -1
- package/dist/docs/assets/{reference_instructions.md.D7gkckK-.js → reference_instructions.md.CU1My5My.js} +1 -1
- package/dist/docs/assets/{reference_instructions.md.D7gkckK-.lean.js → reference_instructions.md.CU1My5My.lean.js} +1 -1
- package/dist/docs/assets/{reference_playground.md.D2YExv5K.js → reference_playground.md.Ch2d0Iqi.js} +1 -1
- package/dist/docs/assets/{reference_playground.md.D2YExv5K.lean.js → reference_playground.md.Ch2d0Iqi.lean.js} +1 -1
- package/dist/docs/assets/{reference_project-layout.md.DPxbUJyt.js → reference_project-layout.md.BGhgpy9V.js} +1 -1
- package/dist/docs/assets/{reference_project-layout.md.DPxbUJyt.lean.js → reference_project-layout.md.BGhgpy9V.lean.js} +1 -1
- package/dist/docs/assets/{reference_prompt.md.BQ5uAv1F.js → reference_prompt.md.Ccp0R53H.js} +1 -1
- package/dist/docs/assets/{reference_prompt.md.BQ5uAv1F.lean.js → reference_prompt.md.Ccp0R53H.lean.js} +1 -1
- package/dist/docs/assets/{reference_schedules.md.BasfZWO-.js → reference_schedules.md.B2Nm6FaD.js} +1 -1
- package/dist/docs/assets/{reference_schedules.md.BasfZWO-.lean.js → reference_schedules.md.B2Nm6FaD.lean.js} +1 -1
- package/dist/docs/assets/{reference_sessions.md.YKvIsWAx.js → reference_sessions.md.1_6Vyv7x.js} +1 -1
- package/dist/docs/assets/{reference_sessions.md.YKvIsWAx.lean.js → reference_sessions.md.1_6Vyv7x.lean.js} +1 -1
- package/dist/docs/assets/{reference_skills.md.rNgpsGd0.js → reference_skills.md.DjQkRefx.js} +1 -1
- package/dist/docs/assets/{reference_skills.md.rNgpsGd0.lean.js → reference_skills.md.DjQkRefx.lean.js} +1 -1
- package/dist/docs/assets/{reference_subagents.md.e5qitjJt.js → reference_subagents.md.Dl16gcBj.js} +2 -2
- package/dist/docs/assets/{reference_subagents.md.e5qitjJt.lean.js → reference_subagents.md.Dl16gcBj.lean.js} +1 -1
- package/dist/docs/assets/{reference_tools.md.BdCO2aHZ.js → reference_tools.md.B1dH1lpa.js} +3 -3
- package/dist/docs/assets/{reference_tools.md.BdCO2aHZ.lean.js → reference_tools.md.B1dH1lpa.lean.js} +1 -1
- package/dist/docs/assets/{templates_agentic-owners.md.Da_AGDlH.js → templates_agentic-owners.md.9M575F5C.js} +1 -1
- package/dist/docs/assets/{templates_agentic-owners.md.Da_AGDlH.lean.js → templates_agentic-owners.md.9M575F5C.lean.js} +1 -1
- package/dist/docs/assets/{templates_pr-autofixer.md.DqxocIGh.js → templates_pr-autofixer.md.ws0DDXDy.js} +1 -1
- package/dist/docs/assets/{templates_pr-autofixer.md.DqxocIGh.lean.js → templates_pr-autofixer.md.ws0DDXDy.lean.js} +1 -1
- package/dist/docs/assets/{templates_security-reviewer.md.Bhnvd8VE.js → templates_security-reviewer.md.KEFYXzfK.js} +1 -1
- package/dist/docs/assets/{templates_security-reviewer.md.Bhnvd8VE.lean.js → templates_security-reviewer.md.KEFYXzfK.lean.js} +1 -1
- package/dist/docs/assets/templates_thermo-quality-review.md.VNJ_mohX.js +3 -0
- package/dist/docs/assets/templates_thermo-quality-review.md.VNJ_mohX.lean.js +1 -0
- package/dist/docs/assets/templates_thermo-review.md.Hi3zWOkP.js +3 -0
- package/dist/docs/assets/templates_thermo-review.md.Hi3zWOkP.lean.js +1 -0
- package/dist/docs/assets/{templates_triage.md.BdBWO9Ic.js → templates_triage.md.CVGe_FG6.js} +1 -1
- package/dist/docs/assets/{templates_triage.md.BdBWO9Ic.lean.js → templates_triage.md.CVGe_FG6.lean.js} +1 -1
- package/dist/docs/assets/troubleshooting.md.mnfFG2Em.js +1 -0
- package/dist/docs/assets/troubleshooting.md.mnfFG2Em.lean.js +1 -0
- package/dist/docs/building-with-agents.html +44 -48
- package/dist/docs/building-with-agents.md +94 -82
- package/dist/docs/deployment.html +59 -78
- package/dist/docs/deployment.md +117 -363
- package/dist/docs/evals.html +85 -224
- package/dist/docs/evals.md +149 -673
- package/dist/docs/guides/agent-to-agent.html +74 -47
- package/dist/docs/guides/agent-to-agent.md +128 -46
- package/dist/docs/guides/bitbucket.html +179 -44
- package/dist/docs/guides/bitbucket.md +249 -48
- package/dist/docs/guides/cloud-agents.html +46 -40
- package/dist/docs/guides/cloud-agents.md +119 -66
- package/dist/docs/guides/convert-automation.html +80 -49
- package/dist/docs/guides/convert-automation.md +156 -147
- package/dist/docs/guides/github.html +184 -92
- package/dist/docs/guides/github.md +260 -245
- package/dist/docs/guides/gitlab.html +184 -45
- package/dist/docs/guides/gitlab.md +249 -50
- package/dist/docs/guides/grokbot-agents.html +48 -41
- package/dist/docs/guides/grokbot-agents.md +99 -53
- package/dist/docs/guides/improve.html +48 -40
- package/dist/docs/guides/improve.md +111 -58
- package/dist/docs/guides/jev.html +248 -0
- package/dist/docs/guides/jev.md +348 -0
- package/dist/docs/guides/mcp-oauth.html +74 -52
- package/dist/docs/guides/mcp-oauth.md +111 -121
- package/dist/docs/guides/opentelemetry.html +63 -54
- package/dist/docs/guides/opentelemetry.md +96 -165
- package/dist/docs/guides/slack.html +83 -59
- package/dist/docs/guides/slack.md +157 -227
- package/dist/docs/guides/webhooks.html +97 -230
- package/dist/docs/guides/webhooks.md +154 -385
- package/dist/docs/hashmap.json +1 -1
- package/dist/docs/hillclimbing.html +44 -38
- package/dist/docs/hillclimbing.md +101 -55
- package/dist/docs/index.html +38 -38
- package/dist/docs/index.md +2 -0
- package/dist/docs/llms-full.txt +3490 -3146
- package/dist/docs/llms.txt +22 -18
- package/dist/docs/quickstart.html +37 -37
- package/dist/docs/reference/agent-config.html +37 -37
- package/dist/docs/reference/artifacts.html +38 -38
- package/dist/docs/reference/channels.html +37 -37
- package/dist/docs/reference/cli.html +39 -37
- package/dist/docs/reference/cli.md +2 -0
- package/dist/docs/reference/connections.html +38 -38
- package/dist/docs/reference/connections.md +1 -1
- package/dist/docs/reference/evals.html +116 -0
- package/dist/docs/reference/evals.md +293 -0
- package/dist/docs/reference/extensions.html +80 -84
- package/dist/docs/reference/extensions.md +131 -202
- package/dist/docs/reference/hooks.html +39 -39
- package/dist/docs/reference/hooks.md +34 -34
- package/dist/docs/reference/http-api.html +37 -37
- package/dist/docs/reference/instructions.html +37 -37
- package/dist/docs/reference/playground.html +37 -37
- package/dist/docs/reference/project-layout.html +37 -37
- package/dist/docs/reference/prompt.html +37 -37
- package/dist/docs/reference/schedules.html +37 -37
- package/dist/docs/reference/sessions.html +37 -37
- package/dist/docs/reference/skills.html +37 -37
- package/dist/docs/reference/subagents.html +38 -38
- package/dist/docs/reference/subagents.md +1 -1
- package/dist/docs/reference/tools.html +38 -38
- package/dist/docs/reference/tools.md +4 -0
- package/dist/docs/templates/agentic-owners.html +38 -38
- package/dist/docs/templates/pr-autofixer.html +37 -37
- package/dist/docs/templates/security-reviewer.html +38 -38
- package/dist/docs/templates/thermo-quality-review.html +62 -0
- package/dist/docs/templates/thermo-quality-review.md +75 -0
- package/dist/docs/templates/thermo-review.html +62 -0
- package/dist/docs/templates/thermo-review.md +74 -0
- package/dist/docs/templates/triage.html +37 -37
- package/dist/docs/troubleshooting.html +38 -38
- package/dist/docs/troubleshooting.md +97 -66
- package/dist/extensions/cursor-cloud-agents/skills/handoff.md +3 -7
- package/dist/extensions/improve/extension.d.ts +3 -1
- package/dist/extensions/improve/extension.d.ts.map +1 -1
- package/dist/extensions/improve/extension.js +4 -2
- package/dist/extensions/improve/skills/yourself.js +1 -1
- package/dist/extensions/jev/extension.d.ts +43 -0
- package/dist/extensions/jev/extension.d.ts.map +1 -0
- package/dist/extensions/jev/extension.js +47 -0
- package/dist/extensions/jev/lib/evaluate.d.ts +101 -0
- package/dist/extensions/jev/lib/evaluate.d.ts.map +1 -0
- package/dist/extensions/jev/lib/evaluate.js +167 -0
- package/dist/extensions/jev/skills/gated-write.md +25 -0
- package/dist/extensions/jev/skills/questions.md +33 -0
- package/dist/extensions/jev/tools/evaluate.d.ts +4 -0
- package/dist/extensions/jev/tools/evaluate.d.ts.map +1 -0
- package/dist/extensions/jev/tools/evaluate.js +88 -0
- package/dist/extensions.d.ts +1 -1
- package/dist/extensions.d.ts.map +1 -1
- package/dist/extensions.js +2 -0
- package/dist/filesystem.d.ts +46 -2
- package/dist/filesystem.d.ts.map +1 -1
- package/dist/filesystem.js +149 -102
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/internal/advertise-tools.d.ts.map +1 -1
- package/dist/internal/advertise-tools.js +6 -0
- package/dist/internal/cli-ax.d.ts +6 -0
- package/dist/internal/cli-ax.d.ts.map +1 -1
- package/dist/internal/cli-ax.js +72 -14
- package/dist/internal/continuation-identity.d.ts.map +1 -1
- package/dist/internal/continuation-identity.js +1 -0
- package/dist/internal/cursor-agent-template.d.ts +1 -1
- package/dist/internal/cursor-agent-template.d.ts.map +1 -1
- package/dist/internal/cursor-agent-template.js +2 -0
- package/dist/internal/discovery/connections.d.ts.map +1 -1
- package/dist/internal/discovery/connections.js +18 -0
- package/dist/internal/discovery/extensions.d.ts.map +1 -1
- package/dist/internal/discovery/extensions.js +8 -4
- package/dist/internal/discovery/info.d.ts.map +1 -1
- package/dist/internal/discovery/info.js +1 -0
- package/dist/internal/filesystem/tools.d.ts.map +1 -1
- package/dist/internal/filesystem/tools.js +2 -2
- package/dist/internal/filesystem/walk.d.ts +7 -4
- package/dist/internal/filesystem/walk.d.ts.map +1 -1
- package/dist/internal/filesystem/walk.js +34 -11
- package/dist/internal/hosted-admission-adapter.d.ts +3 -0
- package/dist/internal/hosted-admission-adapter.d.ts.map +1 -1
- package/dist/internal/hosted-delivery-protocol.d.ts +20 -0
- package/dist/internal/hosted-delivery-protocol.d.ts.map +1 -1
- package/dist/internal/hosted-delivery-protocol.js +51 -1
- package/dist/internal/hosted-delivery.d.ts.map +1 -1
- package/dist/internal/hosted-delivery.js +23 -25
- package/dist/internal/hosted-execution-diag.d.ts +12 -4
- package/dist/internal/hosted-execution-diag.d.ts.map +1 -1
- package/dist/internal/hosted-execution-diag.js +26 -4
- package/dist/internal/hosted-execution-flush.d.ts +1 -0
- package/dist/internal/hosted-execution-flush.d.ts.map +1 -1
- package/dist/internal/hosted-execution-flush.js +4 -2
- package/dist/internal/init-project.d.ts.map +1 -1
- package/dist/internal/init-project.js +4 -0
- package/dist/internal/server.d.ts.map +1 -1
- package/dist/internal/server.js +111 -48
- package/dist/internal/session-engine.d.ts +4 -1
- package/dist/internal/session-engine.d.ts.map +1 -1
- package/dist/internal/session-engine.js +39 -9
- package/dist/internal/skill-catalog.d.ts +28 -0
- package/dist/internal/skill-catalog.d.ts.map +1 -0
- package/dist/internal/skill-catalog.js +44 -0
- package/dist/playground/assets/index-DSMAewbx.css +1 -0
- package/dist/playground/assets/index-De_lpFxE.js +67 -0
- package/dist/playground/index.html +2 -2
- package/dist/types.d.ts +32 -3
- package/dist/types.d.ts.map +1 -1
- package/docs/README.md +2 -0
- package/docs/building-with-agents.md +96 -84
- package/docs/deployment.md +118 -364
- package/docs/evals.md +149 -673
- package/docs/guides/agent-to-agent.md +130 -48
- package/docs/guides/bitbucket.md +250 -49
- package/docs/guides/cloud-agents.md +119 -67
- package/docs/guides/convert-automation.md +157 -148
- package/docs/guides/github.md +261 -246
- package/docs/guides/gitlab.md +250 -51
- package/docs/guides/grokbot-agents.md +100 -55
- package/docs/guides/improve.md +112 -59
- package/docs/guides/jev.md +353 -0
- package/docs/guides/mcp-oauth.md +112 -122
- package/docs/guides/opentelemetry.md +97 -166
- package/docs/guides/slack.md +158 -228
- package/docs/guides/webhooks.md +155 -386
- package/docs/hillclimbing.md +102 -56
- package/docs/reference/cli.md +2 -0
- package/docs/reference/connections.md +1 -1
- package/docs/reference/evals.md +298 -0
- package/docs/reference/extensions.md +132 -203
- package/docs/reference/hooks.md +34 -34
- package/docs/reference/subagents.md +1 -1
- package/docs/reference/tools.md +4 -0
- package/docs/templates/thermo-quality-review.md +80 -0
- package/docs/templates/thermo-review.md +79 -0
- package/docs/troubleshooting.md +98 -67
- package/package.json +8 -1
- package/skills/github/SKILL.md +21 -13
- package/src/bin/agent-serve.ts +24 -3
- package/src/channels/checks.ts +8 -0
- package/src/channels/github/github-channel.ts +29 -19
- package/src/channels/origin/checks.ts +3 -1
- package/src/channels/slack/agentic-delivery.ts +2 -0
- package/src/channels/slack/dispatch.ts +131 -4
- package/src/channels/slack/placeholder.ts +51 -0
- package/src/channels/slack/slack-channel.ts +9 -2
- package/src/extensions/cursor-cloud-agents/skills/handoff.md +3 -7
- package/src/extensions/improve/extension.ts +4 -2
- package/src/extensions/improve/skills/yourself.ts +1 -1
- package/src/extensions/jev/extension.ts +95 -0
- package/src/extensions/jev/lib/evaluate.ts +289 -0
- package/src/extensions/jev/skills/gated-write.md +25 -0
- package/src/extensions/jev/skills/questions.md +33 -0
- package/src/extensions/jev/tools/evaluate.ts +90 -0
- package/src/extensions.ts +2 -0
- package/src/filesystem.ts +168 -65
- package/src/index.ts +3 -0
- package/src/internal/advertise-tools.ts +6 -0
- package/src/internal/cli-ax.ts +88 -15
- package/src/internal/continuation-identity.ts +1 -0
- package/src/internal/cursor-agent-template.ts +2 -0
- package/src/internal/discovery/connections.ts +21 -0
- package/src/internal/discovery/extensions.ts +12 -4
- package/src/internal/discovery/info.ts +1 -0
- package/src/internal/filesystem/tools.ts +2 -0
- package/src/internal/filesystem/walk.ts +60 -15
- package/src/internal/hosted-admission-adapter.ts +3 -0
- package/src/internal/hosted-delivery-protocol.ts +82 -1
- package/src/internal/hosted-delivery.ts +23 -0
- package/src/internal/hosted-execution-diag.ts +33 -4
- package/src/internal/hosted-execution-flush.ts +4 -0
- package/src/internal/init-project.ts +4 -0
- package/src/internal/server.ts +130 -53
- package/src/internal/session-engine.ts +46 -8
- package/src/internal/skill-catalog.ts +69 -0
- package/src/types.ts +33 -3
- package/templates/thermo-quality-review/README.md +35 -0
- package/templates/thermo-quality-review/agent/agent.ts +8 -0
- package/templates/thermo-quality-review/agent/channels/github.ts +42 -0
- package/templates/thermo-quality-review/agent/instructions.md +43 -0
- package/templates/thermo-quality-review/agent/tools/post_findings.ts +70 -0
- package/templates/thermo-quality-review/evals/evals.config.ts +5 -0
- package/templates/thermo-quality-review/evals/review.eval.ts +62 -0
- package/templates/thermo-quality-review/package.json +18 -0
- package/templates/thermo-quality-review/tsconfig.json +12 -0
- package/templates/thermo-review/README.md +35 -0
- package/templates/thermo-review/agent/agent.ts +8 -0
- package/templates/thermo-review/agent/channels/github.ts +42 -0
- package/templates/thermo-review/agent/instructions.md +40 -0
- package/templates/thermo-review/agent/tools/post_findings.ts +70 -0
- package/templates/thermo-review/evals/evals.config.ts +5 -0
- package/templates/thermo-review/evals/review.eval.ts +53 -0
- package/templates/thermo-review/package.json +18 -0
- package/templates/thermo-review/tsconfig.json +12 -0
- package/dist/docs/assets/building-with-agents.md.CEGVXkmO.js +0 -13
- package/dist/docs/assets/building-with-agents.md.CEGVXkmO.lean.js +0 -1
- package/dist/docs/assets/chunks/@localSearchIndexroot.DtXk1hy-.js +0 -1
- package/dist/docs/assets/chunks/channel.Bkv1N-gK.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.CZDco1o8.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.CZDco1o8.js +0 -1
- package/dist/docs/assets/chunks/clone.YSt_40_s.js +0 -1
- package/dist/docs/assets/chunks/framework.dypDpWZ3.js +0 -19
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.C4CLm481.js +0 -1
- package/dist/docs/assets/deployment.md.Dm4Qo3hp.js +0 -51
- package/dist/docs/assets/deployment.md.Dm4Qo3hp.lean.js +0 -1
- package/dist/docs/assets/evals.md.BLDRt5LH.js +0 -211
- package/dist/docs/assets/evals.md.BLDRt5LH.lean.js +0 -1
- package/dist/docs/assets/guides_agent-to-agent.md.BI0xclmy.js +0 -14
- package/dist/docs/assets/guides_agent-to-agent.md.BI0xclmy.lean.js +0 -1
- package/dist/docs/assets/guides_bitbucket.md.CTpCl__f.js +0 -10
- package/dist/docs/assets/guides_bitbucket.md.CTpCl__f.lean.js +0 -1
- package/dist/docs/assets/guides_cloud-agents.md.lSE_l7lH.js +0 -9
- package/dist/docs/assets/guides_cloud-agents.md.lSE_l7lH.lean.js +0 -1
- package/dist/docs/assets/guides_convert-automation.md.Ck6Cr68A.js +0 -12
- package/dist/docs/assets/guides_convert-automation.md.Ck6Cr68A.lean.js +0 -1
- package/dist/docs/assets/guides_github.md.D6ER29dG.js +0 -64
- package/dist/docs/assets/guides_github.md.D6ER29dG.lean.js +0 -1
- package/dist/docs/assets/guides_gitlab.md.P-TjBnS5.js +0 -14
- package/dist/docs/assets/guides_gitlab.md.P-TjBnS5.lean.js +0 -1
- package/dist/docs/assets/guides_grokbot-agents.md.WBZIOvkz.js +0 -9
- package/dist/docs/assets/guides_grokbot-agents.md.WBZIOvkz.lean.js +0 -1
- package/dist/docs/assets/guides_improve.md.BKaDuKKK.js +0 -14
- package/dist/docs/assets/guides_improve.md.BKaDuKKK.lean.js +0 -1
- package/dist/docs/assets/guides_mcp-oauth.md.DMNMpXtO.js +0 -28
- package/dist/docs/assets/guides_mcp-oauth.md.DMNMpXtO.lean.js +0 -1
- package/dist/docs/assets/guides_opentelemetry.md._CRfDyzH.js +0 -26
- package/dist/docs/assets/guides_opentelemetry.md._CRfDyzH.lean.js +0 -1
- package/dist/docs/assets/guides_slack.md.DdT8rmsj.js +0 -46
- package/dist/docs/assets/guides_slack.md.DdT8rmsj.lean.js +0 -1
- package/dist/docs/assets/guides_webhooks.md.aQW10HRe.js +0 -225
- package/dist/docs/assets/guides_webhooks.md.aQW10HRe.lean.js +0 -1
- package/dist/docs/assets/hillclimbing.md.Dq4kkVIL.js +0 -1
- package/dist/docs/assets/hillclimbing.md.Dq4kkVIL.lean.js +0 -1
- package/dist/docs/assets/reference_extensions.md.wlFD3cUR.js +0 -62
- package/dist/docs/assets/reference_extensions.md.wlFD3cUR.lean.js +0 -1
- package/dist/docs/assets/troubleshooting.md.BcgNoYtJ.js +0 -1
- package/dist/docs/assets/troubleshooting.md.BcgNoYtJ.lean.js +0 -1
- package/dist/playground/assets/index-BLlKgZtI.css +0 -1
- package/dist/playground/assets/index-CDS5p9sR.js +0 -67
package/docs/guides/gitlab.md
CHANGED
|
@@ -1,40 +1,240 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: "GitLab"
|
|
3
|
-
description: "
|
|
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
|
-
|
|
9
|
-
|
|
10
|
-
|
|
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
|
-
##
|
|
13
|
+
## Review a merge request
|
|
13
14
|
|
|
14
|
-
|
|
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
|
-
|
|
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
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
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
|
-
|
|
29
|
-
|
|
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
|
-
|
|
32
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
50
|
-
|
|
51
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
91
|
-
|
|
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
|
-
|
|
97
|
-
- [
|
|
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: "
|
|
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
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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
|
-
|
|
14
|
-
|
|
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
|
-
|
|
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
|
-
{
|
|
28
|
-
|
|
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
|
-
|
|
34
|
-
|
|
35
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
49
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
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
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
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
|
-
|
|
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
|
-
|
|
90
|
-
|
|
91
|
-
|
|
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
|
-
|
|
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
|
-
|
|
133
|
+
## Adjust it
|
|
96
134
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
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
|