@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
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* System One decisions for Agent SDK host code.
|
|
3
|
+
*
|
|
4
|
+
* Chat models write. {@link evaluate} asks Jev for typed choice / score /
|
|
5
|
+
* boolean answers over shared state. Call it from a project tool, a
|
|
6
|
+
* router, or other host code after mounting `@cursor/july/extensions/jev`.
|
|
7
|
+
* Do not set Jev as the `defineAgent` turn model.
|
|
8
|
+
*
|
|
9
|
+
* ```ts
|
|
10
|
+
* import { evaluate, decide, above, needsHuman } from "@cursor/july/extensions/jev";
|
|
11
|
+
*
|
|
12
|
+
* const { answers } = await evaluate({
|
|
13
|
+
* state: draft,
|
|
14
|
+
* questions: {
|
|
15
|
+
* route: {
|
|
16
|
+
* type: "choice",
|
|
17
|
+
* instructions: "Which queue should handle this?",
|
|
18
|
+
* criteria: {
|
|
19
|
+
* billing: "charges, invoices, refunds",
|
|
20
|
+
* shipping: "delivery",
|
|
21
|
+
* technical: "bugs and outages",
|
|
22
|
+
* },
|
|
23
|
+
* },
|
|
24
|
+
* post: {
|
|
25
|
+
* type: "boolean",
|
|
26
|
+
* instructions: "Is this safe to post publicly?",
|
|
27
|
+
* },
|
|
28
|
+
* },
|
|
29
|
+
* });
|
|
30
|
+
*
|
|
31
|
+
* if (needsHuman(answers.route) || !above(answers.post, 0.85)) {
|
|
32
|
+
* return { action: "review" };
|
|
33
|
+
* }
|
|
34
|
+
* ```
|
|
35
|
+
*
|
|
36
|
+
* Auth is `TYPESAFE_API_KEY`. `model` is a TypeSafe id (`jev-latest` by
|
|
37
|
+
* default).
|
|
38
|
+
*/
|
|
39
|
+
|
|
40
|
+
/** TypeSafe model used when {@link EvaluateArgs.model} is omitted. */
|
|
41
|
+
export const DEFAULT_EVALUATION_MODEL = "jev-latest";
|
|
42
|
+
|
|
43
|
+
/** Default bar for {@link needsHuman} when the caller does not pass one. */
|
|
44
|
+
export const DEFAULT_HUMAN_THRESHOLD = 0.7;
|
|
45
|
+
|
|
46
|
+
const DEFAULT_BASE_URL = "https://api.typesafe.ai/v1";
|
|
47
|
+
|
|
48
|
+
export type EvaluationState =
|
|
49
|
+
| string
|
|
50
|
+
| Record<string, unknown>
|
|
51
|
+
| readonly unknown[];
|
|
52
|
+
|
|
53
|
+
export type BooleanQuestion = {
|
|
54
|
+
type: "boolean";
|
|
55
|
+
instructions: string;
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
export type ChoiceCriterion =
|
|
59
|
+
| string
|
|
60
|
+
| readonly string[]
|
|
61
|
+
| { includes: readonly string[] }
|
|
62
|
+
| null;
|
|
63
|
+
|
|
64
|
+
export type ChoiceQuestion<
|
|
65
|
+
C extends Record<string, ChoiceCriterion> = Record<string, ChoiceCriterion>,
|
|
66
|
+
> = {
|
|
67
|
+
type: "choice";
|
|
68
|
+
instructions: string;
|
|
69
|
+
criteria: C;
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
export type ScoreQuestion = {
|
|
73
|
+
type: "score";
|
|
74
|
+
instructions: string;
|
|
75
|
+
criteria: readonly string[];
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
export type EvaluationQuestion =
|
|
79
|
+
| BooleanQuestion
|
|
80
|
+
| ChoiceQuestion
|
|
81
|
+
| ScoreQuestion;
|
|
82
|
+
|
|
83
|
+
export type QuestionMap = Record<string, EvaluationQuestion>;
|
|
84
|
+
|
|
85
|
+
export type BooleanAnswer = {
|
|
86
|
+
type: "boolean";
|
|
87
|
+
probability: number;
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
export type ChoiceAnswer<
|
|
91
|
+
C extends Record<string, unknown> = Record<string, unknown>,
|
|
92
|
+
> = {
|
|
93
|
+
type: "choice";
|
|
94
|
+
choice: keyof C & string;
|
|
95
|
+
probabilities: { [K in keyof C]: number };
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
export type ScoreAnswer = {
|
|
99
|
+
type: "score";
|
|
100
|
+
score: number;
|
|
101
|
+
probabilities: Record<string, number>;
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
export type EvaluationAnswer = BooleanAnswer | ChoiceAnswer | ScoreAnswer;
|
|
105
|
+
|
|
106
|
+
export type AnswerFor<Q> = Q extends BooleanQuestion
|
|
107
|
+
? BooleanAnswer
|
|
108
|
+
: Q extends ChoiceQuestion<infer C>
|
|
109
|
+
? ChoiceAnswer<C>
|
|
110
|
+
: Q extends ScoreQuestion
|
|
111
|
+
? ScoreAnswer
|
|
112
|
+
: never;
|
|
113
|
+
|
|
114
|
+
export type AnswersFor<Q extends QuestionMap> = {
|
|
115
|
+
[K in keyof Q]: AnswerFor<Q[K]>;
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
export type EvaluateResult<Q extends QuestionMap = QuestionMap> = {
|
|
119
|
+
answers: AnswersFor<Q>;
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
export type EvaluateArgs<Q extends QuestionMap = QuestionMap> = {
|
|
123
|
+
model?: string;
|
|
124
|
+
state: EvaluationState;
|
|
125
|
+
questions: Q;
|
|
126
|
+
apiKey?: string;
|
|
127
|
+
baseUrl?: string;
|
|
128
|
+
fetch?: typeof globalThis.fetch;
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
type WireQuestion =
|
|
132
|
+
| { type: "noul"; instructions: string }
|
|
133
|
+
| {
|
|
134
|
+
type: "choice";
|
|
135
|
+
instructions: string;
|
|
136
|
+
criteria: ChoiceQuestion["criteria"];
|
|
137
|
+
}
|
|
138
|
+
| { type: "score"; instructions: string; criteria: readonly string[] };
|
|
139
|
+
|
|
140
|
+
function resolveApiKey(explicit: string | undefined): string {
|
|
141
|
+
const key = (explicit ?? process.env.TYPESAFE_API_KEY)?.trim();
|
|
142
|
+
if (key === undefined || key === "") {
|
|
143
|
+
throw new Error("evaluate requires TYPESAFE_API_KEY");
|
|
144
|
+
}
|
|
145
|
+
return key;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
function toWireQuestion(question: EvaluationQuestion): WireQuestion {
|
|
149
|
+
if (question.type === "boolean") {
|
|
150
|
+
return { type: "noul", instructions: question.instructions };
|
|
151
|
+
}
|
|
152
|
+
return question;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
function asRecord(value: unknown, label: string): Record<string, unknown> {
|
|
156
|
+
if (value === null || typeof value !== "object") {
|
|
157
|
+
throw new Error(`evaluate ${label}`);
|
|
158
|
+
}
|
|
159
|
+
return value as Record<string, unknown>;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
function decodeAnswer(
|
|
163
|
+
question: EvaluationQuestion,
|
|
164
|
+
raw: unknown
|
|
165
|
+
): EvaluationAnswer {
|
|
166
|
+
const value = asRecord(raw, "answer is missing");
|
|
167
|
+
if (question.type === "boolean") {
|
|
168
|
+
if (typeof value.noul !== "number") {
|
|
169
|
+
throw new Error("evaluate noul is not a number");
|
|
170
|
+
}
|
|
171
|
+
return { type: "boolean", probability: value.noul };
|
|
172
|
+
}
|
|
173
|
+
if (question.type === "choice") {
|
|
174
|
+
if (typeof value.choice !== "string") {
|
|
175
|
+
throw new Error("evaluate choice is not a string");
|
|
176
|
+
}
|
|
177
|
+
return {
|
|
178
|
+
type: "choice",
|
|
179
|
+
choice: value.choice,
|
|
180
|
+
probabilities: asRecord(
|
|
181
|
+
value.probabilities,
|
|
182
|
+
"choice probabilities are missing"
|
|
183
|
+
) as ChoiceAnswer["probabilities"],
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
if (typeof value.score !== "number") {
|
|
187
|
+
throw new Error("evaluate score is not a number");
|
|
188
|
+
}
|
|
189
|
+
return {
|
|
190
|
+
type: "score",
|
|
191
|
+
score: value.score,
|
|
192
|
+
probabilities: asRecord(
|
|
193
|
+
value.probabilities,
|
|
194
|
+
"score probabilities are missing"
|
|
195
|
+
) as ScoreAnswer["probabilities"],
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
async function postSystemOne(args: {
|
|
200
|
+
url: string;
|
|
201
|
+
apiKey: string;
|
|
202
|
+
body: {
|
|
203
|
+
model: string;
|
|
204
|
+
state: EvaluationState;
|
|
205
|
+
questions: Record<string, WireQuestion>;
|
|
206
|
+
};
|
|
207
|
+
fetch: typeof globalThis.fetch;
|
|
208
|
+
}): Promise<Record<string, unknown>> {
|
|
209
|
+
const response = await args.fetch(args.url, {
|
|
210
|
+
method: "POST",
|
|
211
|
+
headers: {
|
|
212
|
+
Authorization: `Bearer ${args.apiKey}`,
|
|
213
|
+
"Content-Type": "application/json",
|
|
214
|
+
},
|
|
215
|
+
body: JSON.stringify(args.body),
|
|
216
|
+
});
|
|
217
|
+
const text = await response.text();
|
|
218
|
+
let parsed: unknown;
|
|
219
|
+
try {
|
|
220
|
+
parsed = text.length === 0 ? {} : JSON.parse(text);
|
|
221
|
+
} catch {
|
|
222
|
+
throw new Error(`evaluate returned non-JSON (${response.status})`);
|
|
223
|
+
}
|
|
224
|
+
if (!response.ok) {
|
|
225
|
+
throw new Error(
|
|
226
|
+
`evaluate failed (${response.status}): ${text.slice(0, 240)}`
|
|
227
|
+
);
|
|
228
|
+
}
|
|
229
|
+
return asRecord(
|
|
230
|
+
asRecord(parsed, "response is not an object").answers,
|
|
231
|
+
"response is missing answers"
|
|
232
|
+
);
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
/** Ask Jev for typed answers over one state. */
|
|
236
|
+
export async function evaluate<const Q extends QuestionMap>(
|
|
237
|
+
args: EvaluateArgs<Q>
|
|
238
|
+
): Promise<EvaluateResult<Q>> {
|
|
239
|
+
const questions: Record<string, WireQuestion> = {};
|
|
240
|
+
for (const [id, question] of Object.entries(args.questions)) {
|
|
241
|
+
questions[id] = toWireQuestion(question);
|
|
242
|
+
}
|
|
243
|
+
const raw = await postSystemOne({
|
|
244
|
+
url: `${(args.baseUrl ?? DEFAULT_BASE_URL).replace(/\/$/u, "")}/systemone`,
|
|
245
|
+
apiKey: resolveApiKey(args.apiKey),
|
|
246
|
+
fetch: args.fetch ?? globalThis.fetch,
|
|
247
|
+
body: {
|
|
248
|
+
model: args.model ?? DEFAULT_EVALUATION_MODEL,
|
|
249
|
+
state: args.state,
|
|
250
|
+
questions,
|
|
251
|
+
},
|
|
252
|
+
});
|
|
253
|
+
const answers = {} as AnswersFor<Q>;
|
|
254
|
+
for (const id of Object.keys(args.questions) as (keyof Q & string)[]) {
|
|
255
|
+
answers[id] = decodeAnswer(
|
|
256
|
+
args.questions[id],
|
|
257
|
+
raw[id]
|
|
258
|
+
) as AnswersFor<Q>[typeof id];
|
|
259
|
+
}
|
|
260
|
+
return { answers };
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
/** Same as {@link evaluate}, returning only `answers`. */
|
|
264
|
+
export async function decide<const Q extends QuestionMap>(
|
|
265
|
+
args: EvaluateArgs<Q>
|
|
266
|
+
): Promise<AnswersFor<Q>> {
|
|
267
|
+
const result = await evaluate(args);
|
|
268
|
+
return result.answers;
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
export function above(
|
|
272
|
+
answer: BooleanAnswer | ScoreAnswer,
|
|
273
|
+
threshold: number
|
|
274
|
+
): boolean {
|
|
275
|
+
if (answer.type === "boolean") {
|
|
276
|
+
return answer.probability >= threshold;
|
|
277
|
+
}
|
|
278
|
+
return answer.score >= threshold;
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
export function needsHuman(
|
|
282
|
+
answer: BooleanAnswer | ChoiceAnswer,
|
|
283
|
+
threshold: number = DEFAULT_HUMAN_THRESHOLD
|
|
284
|
+
): boolean {
|
|
285
|
+
if (answer.type === "boolean") {
|
|
286
|
+
return answer.probability < threshold;
|
|
287
|
+
}
|
|
288
|
+
return answer.probabilities[answer.choice] < threshold;
|
|
289
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Gate a channel wake, approval, or review comment on Jev by calling decide, then continuing or holding."
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Gating a GitHub write on Jev
|
|
6
|
+
|
|
7
|
+
Channel hooks can call `decide` before they start a model turn. Return
|
|
8
|
+
`null` when the answer misses the bar; return `{ auth }` or `{ task }`
|
|
9
|
+
when the agent should run.
|
|
10
|
+
|
|
11
|
+
This extension's `evaluate` tool does not write to GitHub. When an
|
|
12
|
+
approval or a review comment must follow the judgment, add a server tool
|
|
13
|
+
in this project that calls `decide`, then writes or holds in the same
|
|
14
|
+
`execute`.
|
|
15
|
+
|
|
16
|
+
```ts
|
|
17
|
+
import { above, decide, needsHuman } from "@cursor/july/extensions/jev";
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Hold when `needsHuman` is true or `above` misses the bar. Very low and
|
|
21
|
+
low risk can approve; medium and above hold. A finding comment posts
|
|
22
|
+
only when the draft is a real bug. Calibrate those numbers on labeled
|
|
23
|
+
pull requests from this workflow. Pass the pull request title, summary,
|
|
24
|
+
and draft, not the checkout. Return without writing when
|
|
25
|
+
`ctx.session.purpose === "eval"`.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Ask Jev for a risk tier, a finding judgment, or a score when you are not about to approve or comment."
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Asking Jev
|
|
6
|
+
|
|
7
|
+
Call this extension's `evaluate` tool when you need a typed judgment over
|
|
8
|
+
a pull request and you are not about to approve or comment. It returns
|
|
9
|
+
answers only. The tool appears as `<namespace>__evaluate`.
|
|
10
|
+
|
|
11
|
+
## Questions
|
|
12
|
+
|
|
13
|
+
Pass `state` (the pull request title, a short summary of the diff, and
|
|
14
|
+
any draft finding) and one or more questions. Each question has an `id`,
|
|
15
|
+
a `type`, and `instructions`.
|
|
16
|
+
|
|
17
|
+
- `boolean`: probability of true between 0 and 1
|
|
18
|
+
- `choice`: `criteria` maps each option name to a short description; the
|
|
19
|
+
answer names one option
|
|
20
|
+
- `score`: `criteria` from lowest to highest; the answer is a number
|
|
21
|
+
along that rubric
|
|
22
|
+
|
|
23
|
+
`instructions` can set the decision, who the review is for, and which
|
|
24
|
+
evidence to weigh. Pass the pull request summary, not the checkout.
|
|
25
|
+
|
|
26
|
+
## Reading answers
|
|
27
|
+
|
|
28
|
+
A boolean answer has `probability`. A choice has `choice` and
|
|
29
|
+
`probabilities`. A score has `score` and `probabilities`.
|
|
30
|
+
|
|
31
|
+
When an approval or a review comment must follow the judgment, use a
|
|
32
|
+
project tool that calls `decide` itself. Do not treat these answers as
|
|
33
|
+
a GitHub write.
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { defineTool } from "../../../tools.js";
|
|
3
|
+
import type { ToolDefinition } from "../../../types.js";
|
|
4
|
+
import extension from "../extension.js";
|
|
5
|
+
import { evaluate, type QuestionMap } from "../lib/evaluate.js";
|
|
6
|
+
|
|
7
|
+
const booleanQuestion = z.object({
|
|
8
|
+
id: z.string().min(1),
|
|
9
|
+
type: z.literal("boolean"),
|
|
10
|
+
instructions: z.string().min(1),
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
const choiceQuestion = z.object({
|
|
14
|
+
id: z.string().min(1),
|
|
15
|
+
type: z.literal("choice"),
|
|
16
|
+
instructions: z.string().min(1),
|
|
17
|
+
criteria: z.record(z.string()),
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
const scoreQuestion = z.object({
|
|
21
|
+
id: z.string().min(1),
|
|
22
|
+
type: z.literal("score"),
|
|
23
|
+
instructions: z.string().min(1),
|
|
24
|
+
criteria: z.array(z.string()).min(2),
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
const question = z.discriminatedUnion("type", [
|
|
28
|
+
booleanQuestion,
|
|
29
|
+
choiceQuestion,
|
|
30
|
+
scoreQuestion,
|
|
31
|
+
]);
|
|
32
|
+
|
|
33
|
+
function toQuestionMap(questions: z.infer<typeof question>[]): QuestionMap {
|
|
34
|
+
const map: QuestionMap = {};
|
|
35
|
+
for (const item of questions) {
|
|
36
|
+
if (item.type === "boolean") {
|
|
37
|
+
map[item.id] = {
|
|
38
|
+
type: "boolean",
|
|
39
|
+
instructions: item.instructions,
|
|
40
|
+
};
|
|
41
|
+
} else if (item.type === "choice") {
|
|
42
|
+
map[item.id] = {
|
|
43
|
+
type: "choice",
|
|
44
|
+
instructions: item.instructions,
|
|
45
|
+
criteria: item.criteria,
|
|
46
|
+
};
|
|
47
|
+
} else {
|
|
48
|
+
map[item.id] = {
|
|
49
|
+
type: "score",
|
|
50
|
+
instructions: item.instructions,
|
|
51
|
+
criteria: item.criteria,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return map;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
const evaluateTool: ToolDefinition = defineTool({
|
|
59
|
+
description:
|
|
60
|
+
"Ask Jev for typed boolean, choice, or score answers over one state. Returns answers only; it does not post, assign, or merge.",
|
|
61
|
+
effect: "read",
|
|
62
|
+
inputSchema: z
|
|
63
|
+
.object({
|
|
64
|
+
state: z
|
|
65
|
+
.union([z.string(), z.array(z.unknown()), z.record(z.unknown())])
|
|
66
|
+
.describe(
|
|
67
|
+
"Ticket, pull request, or other state Jev should judge. Not repo source."
|
|
68
|
+
),
|
|
69
|
+
questions: z
|
|
70
|
+
.array(question)
|
|
71
|
+
.min(1)
|
|
72
|
+
.describe("One or more typed questions over the same state."),
|
|
73
|
+
})
|
|
74
|
+
.refine(
|
|
75
|
+
input =>
|
|
76
|
+
new Set(input.questions.map(item => item.id)).size ===
|
|
77
|
+
input.questions.length,
|
|
78
|
+
"questions must not repeat an id"
|
|
79
|
+
),
|
|
80
|
+
async execute(input) {
|
|
81
|
+
return evaluate({
|
|
82
|
+
state: input.state,
|
|
83
|
+
questions: toQuestionMap(input.questions),
|
|
84
|
+
apiKey: extension.config.apiKey,
|
|
85
|
+
model: extension.config.model,
|
|
86
|
+
});
|
|
87
|
+
},
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
export default evaluateTool;
|
package/src/extensions.ts
CHANGED
|
@@ -87,6 +87,7 @@ export type {
|
|
|
87
87
|
DisabledToolDefinition,
|
|
88
88
|
DiscoveredExtension,
|
|
89
89
|
Extension,
|
|
90
|
+
ExtensionContributionSelection,
|
|
90
91
|
ExtensionDeclaration,
|
|
91
92
|
ExtensionMount,
|
|
92
93
|
ExtensionOptions,
|
|
@@ -105,6 +106,7 @@ export function defineExtension<TConfig = undefined, TInput = TConfig>(
|
|
|
105
106
|
return brandDefinition("extension", {
|
|
106
107
|
extension: handle,
|
|
107
108
|
config: parsed,
|
|
109
|
+
contributions: options.contributions?.(parsed),
|
|
108
110
|
});
|
|
109
111
|
};
|
|
110
112
|
const handle = Object.defineProperties(mount, {
|