@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/improve.md
CHANGED
|
@@ -1,25 +1,24 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: "Self-improvement"
|
|
3
|
-
description: "
|
|
3
|
+
description: "Let an agent propose a change to its own source through a branch and pull request, with review and deployment kept separate."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Self-improvement
|
|
7
7
|
|
|
8
|
-
The `improve` extension
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
request, and the agent reports that pull request. Nothing changes until
|
|
13
|
-
a person reviews it and deploys.
|
|
8
|
+
The `improve` extension teaches an agent how to turn "change how you
|
|
9
|
+
work" into a source change. The agent prepares a brief, a Cursor cloud
|
|
10
|
+
agent edits a checkout and opens a pull request, and the running agent
|
|
11
|
+
reports the verified PR for human review.
|
|
14
12
|
|
|
15
|
-
|
|
16
|
-
|
|
13
|
+
Durable behavior does not change until that source is merged and
|
|
14
|
+
deployed. A cloud-runtime turn may edit its ephemeral checkout, but it
|
|
15
|
+
does not rewrite the source of a running deployment.
|
|
17
16
|
|
|
18
17
|
## Mount it
|
|
19
18
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
19
|
+
On the local runtime, mount Cloud agents with the agent's own repository
|
|
20
|
+
allowlisted, keep launch approval explicit, then mount `improve` with
|
|
21
|
+
the source directory.
|
|
23
22
|
|
|
24
23
|
```ts
|
|
25
24
|
// agent/extensions/cloud.ts
|
|
@@ -27,8 +26,15 @@ import cursorCloudAgents from "@cursor/july/extensions/cursor-cloud-agents";
|
|
|
27
26
|
|
|
28
27
|
export default cursorCloudAgents({
|
|
29
28
|
cloud: {
|
|
30
|
-
repos: [
|
|
29
|
+
repos: [
|
|
30
|
+
{
|
|
31
|
+
url: "https://github.com/acme/agents",
|
|
32
|
+
startingRef: "main",
|
|
33
|
+
},
|
|
34
|
+
],
|
|
35
|
+
autoCreatePR: true,
|
|
31
36
|
},
|
|
37
|
+
needsApproval: true,
|
|
32
38
|
});
|
|
33
39
|
```
|
|
34
40
|
|
|
@@ -39,58 +45,105 @@ import improve from "@cursor/july/extensions/improve";
|
|
|
39
45
|
export default improve({
|
|
40
46
|
repo: "https://github.com/acme/agents",
|
|
41
47
|
path: "agents/concierge",
|
|
48
|
+
ref: "main",
|
|
42
49
|
});
|
|
43
50
|
```
|
|
44
51
|
|
|
45
|
-
`
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
52
|
+
Mounted as `improve`, the extension contributes the
|
|
53
|
+
`improve__yourself` skill. It does not contribute a tool that can bypass
|
|
54
|
+
the normal repository workflow.
|
|
55
|
+
|
|
56
|
+
## Ask for one behavioral change
|
|
57
|
+
|
|
58
|
+
State the change, how to tell it worked, and what behavior must stay
|
|
59
|
+
fixed. The agent maps the request to instructions, a skill, a tool,
|
|
60
|
+
channel configuration, or the model setting before preparing the coding
|
|
61
|
+
brief.
|
|
62
|
+
|
|
63
|
+
> Improve yourself: stop opening incident replies with a summary.
|
|
64
|
+
> Start with the decision, keep the existing evidence bullets, and
|
|
65
|
+
> preserve every current eval.
|
|
66
|
+
|
|
67
|
+
The success criterion and freeze line keep the cloud agent from turning
|
|
68
|
+
a narrow behavior request into an unrelated refactor.
|
|
69
|
+
|
|
70
|
+
## Follow the source change
|
|
71
|
+
|
|
72
|
+
On local runtime, the agent requests approval and launches one cloud
|
|
73
|
+
agent on the configured repository and ref. It reports the complete
|
|
74
|
+
cloud-agent ID and URL immediately, then checks the same run instead of
|
|
75
|
+
launching another agent for follow-up work.
|
|
76
|
+
|
|
77
|
+
When the cloud agent opens a pull request, the running agent reads the
|
|
78
|
+
result and the PR before reporting what changed and which checks passed.
|
|
79
|
+
The pull request, not the delegation transcript, is the durable
|
|
80
|
+
deliverable.
|
|
81
|
+
|
|
82
|
+
Use the [Cloud agents guide](./cloud-agents.md) for launch, status,
|
|
83
|
+
transcript, steering, and cancellation behavior.
|
|
84
|
+
|
|
85
|
+
## Review, merge, then deploy
|
|
86
|
+
|
|
87
|
+
The workflow stops at a pull request. A human reviews the diff and
|
|
88
|
+
decides whether to merge it; a separate deployment action decides when
|
|
89
|
+
the new behavior becomes live.
|
|
90
|
+
|
|
91
|
+
This separation gives each boundary a real control:
|
|
92
|
+
|
|
93
|
+
- Repository permissions limit who can push the branch.
|
|
94
|
+
- Branch protection and review policy govern the merge.
|
|
95
|
+
- Deployment authorization governs the running agent.
|
|
96
|
+
|
|
97
|
+
After deployment, repeat the original request or regression eval to
|
|
98
|
+
confirm the behavior changed without crossing the freeze line.
|
|
99
|
+
|
|
100
|
+
## Use it from a cloud-runtime agent
|
|
101
|
+
|
|
102
|
+
When the agent's own turn already runs on a cloud VM with the source
|
|
103
|
+
repository checked out, mount `improve` without the Cloud agents
|
|
104
|
+
extension. The skill branches and edits that ephemeral checkout, then
|
|
105
|
+
opens the same reviewable pull request.
|
|
106
|
+
|
|
107
|
+
Cloud-runtime tool approvals are unavailable. Repository permissions,
|
|
108
|
+
branch protection, human review, and separate deployment remain the
|
|
109
|
+
hard controls.
|
|
76
110
|
|
|
77
111
|
## Configure it
|
|
78
112
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
113
|
+
- `repo` is the source repository URL.
|
|
114
|
+
- `path` is the agent's repository-relative directory.
|
|
115
|
+
- `ref` is the deployed branch or ref that new branches and pull
|
|
116
|
+
requests target; it defaults to `main`.
|
|
117
|
+
- `notes` adds tree-specific guidance to every coding brief, such as a
|
|
118
|
+
required test command or PR convention.
|
|
119
|
+
- `deploy` tells the skill who deploys a merged change and when it
|
|
120
|
+
becomes live.
|
|
86
121
|
|
|
87
|
-
|
|
122
|
+
`notes` and `deploy` insert prose into the contributed skill. They do
|
|
123
|
+
not run checks, merge a branch, or trigger a deployment.
|
|
88
124
|
|
|
89
|
-
|
|
125
|
+
Validation checks the URL and path shape. It does not prove the source
|
|
126
|
+
exists, matches the current deployment, or appears in the Cloud agents
|
|
127
|
+
repository allowlist, so keep those values aligned yourself.
|
|
128
|
+
|
|
129
|
+
## What the extension enforces
|
|
130
|
+
|
|
131
|
+
`improve__yourself` is model guidance for locating the change, writing a
|
|
132
|
+
brief, following repository rules, opening a PR, and reporting it. Rules
|
|
133
|
+
such as "never merge" are instructions, not framework-enforced
|
|
134
|
+
permissions.
|
|
135
|
+
|
|
136
|
+
Use repository and deployment controls for hard enforcement. The
|
|
137
|
+
extension provides a repeatable path through those controls; it does not
|
|
138
|
+
replace them.
|
|
139
|
+
|
|
140
|
+
## What's next
|
|
90
141
|
|
|
91
|
-
- [
|
|
92
|
-
|
|
93
|
-
- [
|
|
94
|
-
|
|
95
|
-
- [
|
|
96
|
-
|
|
142
|
+
- [Cloud agents](./cloud-agents.md): delegation and steering on local
|
|
143
|
+
runtime
|
|
144
|
+
- [Build with a coding agent](../building-with-agents.md): have an
|
|
145
|
+
external coding agent edit the project directly
|
|
146
|
+
- [Extensions](../reference/extensions.md): namespaces and overlays
|
|
147
|
+
- [Deployment](../deployment.md): make a merged source change live
|
|
148
|
+
- [Evals](../evals.md): protect the requested behavior before and after
|
|
149
|
+
the change
|
|
@@ -0,0 +1,353 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Jev"
|
|
3
|
+
description: "Use typed Jev decisions to filter review findings, route pull requests, and gate software-factory writes."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Use Jev in review tools
|
|
7
|
+
|
|
8
|
+
Use Jev for narrow decisions where your software factory needs a typed
|
|
9
|
+
answer, not another paragraph. A review agent can filter speculative
|
|
10
|
+
findings, classify pull request risk, choose a reviewer, or decide
|
|
11
|
+
whether a merge needs a documentation follow-up. Jev returns a choice,
|
|
12
|
+
score, or probability; your TypeScript decides what happens next.
|
|
13
|
+
|
|
14
|
+
Ask one question per judgment. If an approval depends on risk, test
|
|
15
|
+
coverage, and the size of the change, ask three questions in one call
|
|
16
|
+
and combine the answers in code.
|
|
17
|
+
|
|
18
|
+
Set `TYPESAFE_API_KEY`. The default model is `jev-latest`.
|
|
19
|
+
|
|
20
|
+
```ts
|
|
21
|
+
// agent/extensions/jev.ts
|
|
22
|
+
import jev from "@cursor/july/extensions/jev";
|
|
23
|
+
|
|
24
|
+
export default jev();
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Start only the review turns you need
|
|
28
|
+
|
|
29
|
+
You can call Jev from a channel hook before a model turn starts. When a
|
|
30
|
+
pull request opens, this hook reads its title, labels, and filenames,
|
|
31
|
+
then asks whether the change needs security review. A high probability
|
|
32
|
+
starts the review. Otherwise the hook returns `null`, so the agent does
|
|
33
|
+
not run and nothing is posted to GitHub.
|
|
34
|
+
|
|
35
|
+
```ts
|
|
36
|
+
// agent/channels/github.ts
|
|
37
|
+
import {
|
|
38
|
+
defaultGitHubAuth,
|
|
39
|
+
githubChannel,
|
|
40
|
+
} from "@cursor/july/channels/github";
|
|
41
|
+
import { above, decide } from "@cursor/july/extensions/jev";
|
|
42
|
+
|
|
43
|
+
export default githubChannel({
|
|
44
|
+
botName: "security-reviewer",
|
|
45
|
+
cursorAccount: { repos: ["acme/checkout"] },
|
|
46
|
+
onPullRequest: async (ctx, pr) => {
|
|
47
|
+
if (pr.action !== "opened" && pr.action !== "ready_for_review") {
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const octokit = await ctx.github.getOctokit();
|
|
52
|
+
const [{ data }, files] = await Promise.all([
|
|
53
|
+
octokit.rest.pulls.get({
|
|
54
|
+
owner: ctx.repository.owner,
|
|
55
|
+
repo: ctx.repository.name,
|
|
56
|
+
pull_number: pr.number,
|
|
57
|
+
}),
|
|
58
|
+
octokit.paginate(octokit.rest.pulls.listFiles, {
|
|
59
|
+
owner: ctx.repository.owner,
|
|
60
|
+
repo: ctx.repository.name,
|
|
61
|
+
pull_number: pr.number,
|
|
62
|
+
}),
|
|
63
|
+
]);
|
|
64
|
+
const answers = await decide({
|
|
65
|
+
state: {
|
|
66
|
+
title: data.title,
|
|
67
|
+
body: data.body,
|
|
68
|
+
labels: data.labels.map(label => label.name),
|
|
69
|
+
files: files.map(file => file.filename),
|
|
70
|
+
},
|
|
71
|
+
questions: {
|
|
72
|
+
review: {
|
|
73
|
+
type: "boolean",
|
|
74
|
+
instructions:
|
|
75
|
+
"Does this change need security review? Answer yes for auth, permissions, secrets, request parsing, or external inputs.",
|
|
76
|
+
},
|
|
77
|
+
},
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
if (!above(answers.review, 0.8)) {
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
// `auth` starts a model turn running as the pull request sender.
|
|
84
|
+
return { auth: defaultGitHubAuth(ctx) };
|
|
85
|
+
},
|
|
86
|
+
});
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Only pull request metadata goes to Jev here. The review turn still reads
|
|
90
|
+
the diff itself.
|
|
91
|
+
|
|
92
|
+
## Filter findings before you post them
|
|
93
|
+
|
|
94
|
+
Let the chat model draft a finding, then ask Jev whether the finding is
|
|
95
|
+
a real bug in the new code. Below your threshold, the tool returns and
|
|
96
|
+
the author never sees the draft. Above it, the finding becomes a review
|
|
97
|
+
comment.
|
|
98
|
+
|
|
99
|
+
```ts
|
|
100
|
+
// agent/tools/post_finding.ts
|
|
101
|
+
import { parseGitHubPrContinuationKey } from "@cursor/july/channels/github";
|
|
102
|
+
import { above, decide } from "@cursor/july/extensions/jev";
|
|
103
|
+
import { defineTool } from "@cursor/july/tools";
|
|
104
|
+
import { z } from "zod";
|
|
105
|
+
|
|
106
|
+
export default defineTool({
|
|
107
|
+
description:
|
|
108
|
+
"Post one security finding on this session's pull request. Call once. Hold when it is not a real bug.",
|
|
109
|
+
inputSchema: z.object({
|
|
110
|
+
title: z.string(),
|
|
111
|
+
summary: z.string().describe("What the pull request changes."),
|
|
112
|
+
draft: z.string().describe("The finding to post, one or two sentences."),
|
|
113
|
+
}),
|
|
114
|
+
async execute({ title, summary, draft }, ctx) {
|
|
115
|
+
if (ctx.session.purpose === "eval") {
|
|
116
|
+
return { posted: false, reason: "eval" };
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
const ref = parseGitHubPrContinuationKey(ctx.session.continuationKey ?? "");
|
|
120
|
+
if (ref === undefined) {
|
|
121
|
+
throw new Error("post_finding requires a GitHub pull request session");
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
const answers = await decide({
|
|
125
|
+
state: { title, summary, draft },
|
|
126
|
+
questions: {
|
|
127
|
+
real: {
|
|
128
|
+
type: "boolean",
|
|
129
|
+
instructions:
|
|
130
|
+
"Is the draft an exploitable bug in the new code, not a style note or a hypothetical?",
|
|
131
|
+
},
|
|
132
|
+
},
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
if (!above(answers.real, 0.85)) {
|
|
136
|
+
return { posted: false, reason: "clean" };
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
const octokit = await ctx.host.github.getOctokit();
|
|
140
|
+
await octokit.rest.pulls.createReview({
|
|
141
|
+
owner: ref.owner,
|
|
142
|
+
repo: ref.repo,
|
|
143
|
+
pull_number: ref.number,
|
|
144
|
+
event: "COMMENT",
|
|
145
|
+
body: draft,
|
|
146
|
+
});
|
|
147
|
+
return {
|
|
148
|
+
posted: true,
|
|
149
|
+
pr: `${ref.owner}/${ref.repo}#${ref.number}`,
|
|
150
|
+
};
|
|
151
|
+
},
|
|
152
|
+
});
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
## Approve changes by risk tier
|
|
156
|
+
|
|
157
|
+
You can use the same pattern for Agentic Owners. Ask Jev to put the
|
|
158
|
+
pull request in a closed set of risk tiers. Approve only a confident
|
|
159
|
+
`very-low` or `low`; send everything else to a person.
|
|
160
|
+
|
|
161
|
+
```ts
|
|
162
|
+
import { decide, needsHuman } from "@cursor/july/extensions/jev";
|
|
163
|
+
|
|
164
|
+
const answers = await decide({
|
|
165
|
+
state: { title, summary },
|
|
166
|
+
questions: {
|
|
167
|
+
risk: {
|
|
168
|
+
type: "choice",
|
|
169
|
+
instructions: "What risk tier is this pull request?",
|
|
170
|
+
criteria: {
|
|
171
|
+
"very-low": "docs, formatting, or a mechanical rename",
|
|
172
|
+
low: "a local change with tests and no new trust boundary",
|
|
173
|
+
medium: "auth, billing, or a behavior change callers depend on",
|
|
174
|
+
high: "a likely exploit, data loss, or a broken public contract",
|
|
175
|
+
},
|
|
176
|
+
},
|
|
177
|
+
},
|
|
178
|
+
});
|
|
179
|
+
|
|
180
|
+
const tier = answers.risk.choice;
|
|
181
|
+
if (needsHuman(answers.risk) || tier === "medium" || tier === "high") {
|
|
182
|
+
return { verdict: "hold", tier };
|
|
183
|
+
}
|
|
184
|
+
return { verdict: "approve", tier };
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
Your GitHub tool resolves the pull request from `ctx.session` and posts
|
|
188
|
+
that verdict. The model does not choose the repository, pull request, or
|
|
189
|
+
approval event.
|
|
190
|
+
|
|
191
|
+
## Open documentation follow-ups selectively
|
|
192
|
+
|
|
193
|
+
After a pull request merges, a code-wiki agent can ask whether the
|
|
194
|
+
change introduced a durable fact that belongs in the docs. A low
|
|
195
|
+
probability means no follow-up. A high probability opens a documentation
|
|
196
|
+
pull request instead of turning every merge into churn.
|
|
197
|
+
|
|
198
|
+
```ts
|
|
199
|
+
import { above, decide } from "@cursor/july/extensions/jev";
|
|
200
|
+
import { openDocsPullRequest } from "../lib/wiki";
|
|
201
|
+
|
|
202
|
+
const answers = await decide({
|
|
203
|
+
state: { title, summary },
|
|
204
|
+
questions: {
|
|
205
|
+
updateDocs: {
|
|
206
|
+
type: "boolean",
|
|
207
|
+
instructions:
|
|
208
|
+
"Does this merge change a durable contract that the project docs should explain?",
|
|
209
|
+
},
|
|
210
|
+
},
|
|
211
|
+
});
|
|
212
|
+
|
|
213
|
+
if (!above(answers.updateDocs, 0.8)) {
|
|
214
|
+
return { action: "skip" };
|
|
215
|
+
}
|
|
216
|
+
return openDocsPullRequest({ title, summary });
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
## Write tools with Jev
|
|
220
|
+
|
|
221
|
+
`decide` is a regular async host function. Call it from a channel hook,
|
|
222
|
+
server tool, or router. It returns the answer map directly. `evaluate`
|
|
223
|
+
makes the same request and returns `{ answers }`.
|
|
224
|
+
|
|
225
|
+
Use a boolean for a yes-or-no gate, a choice for a closed set such as
|
|
226
|
+
risk tiers or owners, and a score for an ordered rubric. `above` checks
|
|
227
|
+
a boolean probability or score. `needsHuman` checks whether a boolean
|
|
228
|
+
or the selected choice clears your confidence bar.
|
|
229
|
+
|
|
230
|
+
Keep the questions atomic and combine them in TypeScript. For example,
|
|
231
|
+
ask separately whether a finding is real, whether its impact is
|
|
232
|
+
user-visible, and whether the changed line is new. Your code owns the
|
|
233
|
+
rule that decides whether all three are enough to post.
|
|
234
|
+
|
|
235
|
+
## Let the agent ask Jev
|
|
236
|
+
|
|
237
|
+
Mounting the extension adds a read-only harness tool named
|
|
238
|
+
`<namespace>__evaluate`. With the default `jev` filename, the model sees
|
|
239
|
+
`jev__evaluate`.
|
|
240
|
+
|
|
241
|
+
The tool accepts one state and a list of boolean, choice, or score
|
|
242
|
+
questions. It returns `{ answers }` and never posts, approves, or opens
|
|
243
|
+
a pull request. Use it when the agent needs the result during the turn.
|
|
244
|
+
Use `decide` inside a project tool when the answer and the write belong
|
|
245
|
+
in one operation.
|
|
246
|
+
|
|
247
|
+
## Skills included with the extension
|
|
248
|
+
|
|
249
|
+
The extension adds two skills by default:
|
|
250
|
+
|
|
251
|
+
- `jev__questions` teaches the model how to structure atomic questions,
|
|
252
|
+
choose a question type, and read the answers.
|
|
253
|
+
|
|
254
|
+
- `jev__gated-write` teaches the model to put `decide` and the write in
|
|
255
|
+
one server tool, hold on low confidence, and skip writes during evals.
|
|
256
|
+
|
|
257
|
+
The model sees each skill's description and loads the full procedure
|
|
258
|
+
when it applies.
|
|
259
|
+
|
|
260
|
+
## Choose what to mount
|
|
261
|
+
|
|
262
|
+
Both contribution groups are on by default. Turn off the harness tool
|
|
263
|
+
when Jev should only run inside tools you wrote. Turn off the skills
|
|
264
|
+
when your agent already has its own Jev instructions.
|
|
265
|
+
|
|
266
|
+
```ts
|
|
267
|
+
// agent/extensions/jev.ts
|
|
268
|
+
import jev from "@cursor/july/extensions/jev";
|
|
269
|
+
|
|
270
|
+
export default jev({
|
|
271
|
+
harnessTools: false,
|
|
272
|
+
skills: true,
|
|
273
|
+
});
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
`harnessTools: false` removes `jev__evaluate` from discovery.
|
|
277
|
+
`skills: false` removes both Jev skills. These switches do not remove
|
|
278
|
+
the exported helpers, so project tools can still import `decide`,
|
|
279
|
+
`above`, and `needsHuman`.
|
|
280
|
+
|
|
281
|
+
## Jev and trajectory evals
|
|
282
|
+
|
|
283
|
+
An eval checks a whole turn: the agent called the read, and it stayed
|
|
284
|
+
off approve. `decide` is the one call inside the tool, before GitHub.
|
|
285
|
+
Use the [Evals guide](../evals.md) when you want the turn to keep
|
|
286
|
+
behaving. Use `decide` when the tool itself needs a tier or a yes.
|
|
287
|
+
|
|
288
|
+
## Test without the live API
|
|
289
|
+
|
|
290
|
+
Pass `fetch` and `apiKey` and the same `decide` path runs in a test.
|
|
291
|
+
|
|
292
|
+
```ts
|
|
293
|
+
import { decide } from "@cursor/july/extensions/jev";
|
|
294
|
+
|
|
295
|
+
const answers = await decide({
|
|
296
|
+
state: {
|
|
297
|
+
title: "Skip the refund auth check",
|
|
298
|
+
summary: "acme/checkout#42 drops the session check on POST /refunds.",
|
|
299
|
+
},
|
|
300
|
+
questions: {
|
|
301
|
+
risk: {
|
|
302
|
+
type: "choice",
|
|
303
|
+
instructions: "What risk tier is this pull request?",
|
|
304
|
+
criteria: {
|
|
305
|
+
"very-low": "docs, formatting, or a mechanical rename",
|
|
306
|
+
low: "a local change with tests and no new trust boundary",
|
|
307
|
+
medium: "auth, billing, or a behavior change callers depend on",
|
|
308
|
+
high: "a likely exploit, data loss, or a broken public contract",
|
|
309
|
+
},
|
|
310
|
+
},
|
|
311
|
+
},
|
|
312
|
+
apiKey: "sk-test",
|
|
313
|
+
fetch: async () =>
|
|
314
|
+
new Response(
|
|
315
|
+
JSON.stringify({
|
|
316
|
+
answers: {
|
|
317
|
+
risk: {
|
|
318
|
+
type: "choice",
|
|
319
|
+
choice: "high",
|
|
320
|
+
probabilities: {
|
|
321
|
+
"very-low": 0.02,
|
|
322
|
+
low: 0.05,
|
|
323
|
+
medium: 0.18,
|
|
324
|
+
high: 0.75,
|
|
325
|
+
},
|
|
326
|
+
},
|
|
327
|
+
},
|
|
328
|
+
}),
|
|
329
|
+
{ status: 200 }
|
|
330
|
+
),
|
|
331
|
+
});
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
## Practices
|
|
335
|
+
|
|
336
|
+
- Pass the pull request title, a short summary, and the draft finding.
|
|
337
|
+
Don't send the checkout.
|
|
338
|
+
|
|
339
|
+
- Calibrate `above` and `needsHuman` on pull requests you have already
|
|
340
|
+
labeled. `needsHuman` defaults to `0.7`.
|
|
341
|
+
|
|
342
|
+
## Related
|
|
343
|
+
|
|
344
|
+
- [Agentic owners](../templates/agentic-owners.md): a risk tier, then
|
|
345
|
+
the host approves or asks for reviewers
|
|
346
|
+
- [Security reviewer](../templates/security-reviewer.md): a finding, or
|
|
347
|
+
no comment
|
|
348
|
+
- [Thermo review](../templates/thermo-review.md): bugs and breakage,
|
|
349
|
+
posted the same way
|
|
350
|
+
- [Code wiki](../reference/cli.md#init): documentation
|
|
351
|
+
follow-ups after a merge
|
|
352
|
+
- [Evals](../evals.md): checks on the full turn
|
|
353
|
+
- [GitHub agents](./github.md): how the review gets onto the pull request
|