@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/src/internal/server.ts
CHANGED
|
@@ -137,7 +137,10 @@ import {
|
|
|
137
137
|
HOSTED_GUEST_RETRY_TERMINAL,
|
|
138
138
|
hostedGuestErrorResponse,
|
|
139
139
|
} from "./hosted-delivery-protocol.js";
|
|
140
|
-
import {
|
|
140
|
+
import {
|
|
141
|
+
hostedErrorMessageOnly,
|
|
142
|
+
hostedErrorStackSnippet,
|
|
143
|
+
} from "./hosted-execution-diag.js";
|
|
141
144
|
import { flushHostedExecutionProcessDeath } from "./hosted-execution-flush.js";
|
|
142
145
|
import {
|
|
143
146
|
buildHttpChannelRoutes,
|
|
@@ -238,6 +241,11 @@ import {
|
|
|
238
241
|
unregisterSessionRunFatalFlush,
|
|
239
242
|
} from "./session-run-log.js";
|
|
240
243
|
import { sessionUrlsForRequest } from "./session-urls.js";
|
|
244
|
+
import {
|
|
245
|
+
readSkillDetail,
|
|
246
|
+
skillListEntry,
|
|
247
|
+
UnknownSkillError,
|
|
248
|
+
} from "./skill-catalog.js";
|
|
241
249
|
import { flushLocalStartLog, selectStartLogStore } from "./start-log-store.js";
|
|
242
250
|
import { catalogDetailEntry, catalogListEntry } from "./tool-catalog.js";
|
|
243
251
|
|
|
@@ -1316,11 +1324,18 @@ export async function startServer(
|
|
|
1316
1324
|
);
|
|
1317
1325
|
}
|
|
1318
1326
|
} else {
|
|
1327
|
+
const resolveCloudToolsHeaders =
|
|
1328
|
+
options.cloudToolsUrl === undefined
|
|
1329
|
+
? undefined
|
|
1330
|
+
: (): Record<string, string> | undefined => {
|
|
1331
|
+
const apiKey = liveCursorApiKey();
|
|
1332
|
+
return apiKey === undefined
|
|
1333
|
+
? undefined
|
|
1334
|
+
: { authorization: `Bearer ${apiKey}` };
|
|
1335
|
+
};
|
|
1319
1336
|
const headers =
|
|
1320
1337
|
options.cloudToolsUrl !== undefined
|
|
1321
|
-
?
|
|
1322
|
-
? undefined
|
|
1323
|
-
: { authorization: `Bearer ${accountKey.apiKey}` }
|
|
1338
|
+
? resolveCloudToolsHeaders?.()
|
|
1324
1339
|
: options.authToken === undefined
|
|
1325
1340
|
? undefined
|
|
1326
1341
|
: { authorization: `Bearer ${options.authToken}` };
|
|
@@ -1331,14 +1346,17 @@ export async function startServer(
|
|
|
1331
1346
|
);
|
|
1332
1347
|
}
|
|
1333
1348
|
logger(
|
|
1334
|
-
`[agent-sdk] --cloud-tools-url: listening unsigned; Bearer
|
|
1349
|
+
`[agent-sdk] --cloud-tools-url: listening unsigned; Bearer resolves after task-time credential binding`
|
|
1335
1350
|
);
|
|
1336
1351
|
}
|
|
1337
|
-
runtime.engine.setCloudServerToolsConnection(
|
|
1338
|
-
|
|
1339
|
-
|
|
1340
|
-
|
|
1341
|
-
|
|
1352
|
+
runtime.engine.setCloudServerToolsConnection(
|
|
1353
|
+
{
|
|
1354
|
+
type: "http",
|
|
1355
|
+
url: publicToolsUrl,
|
|
1356
|
+
...(headers === undefined ? {} : { headers }),
|
|
1357
|
+
},
|
|
1358
|
+
resolveCloudToolsHeaders
|
|
1359
|
+
);
|
|
1342
1360
|
}
|
|
1343
1361
|
}
|
|
1344
1362
|
}
|
|
@@ -1568,7 +1586,15 @@ function mountAgentRoutes(
|
|
|
1568
1586
|
}
|
|
1569
1587
|
return null;
|
|
1570
1588
|
};
|
|
1571
|
-
|
|
1589
|
+
// A v2 mount served under `--no-control-plane` is a hosted v2 guest: the
|
|
1590
|
+
// hosted control plane drives it through the hosted delivery route below.
|
|
1591
|
+
// Session HTTP is a control-plane surface, so such a guest mounts no
|
|
1592
|
+
// `/v1/session*` or `/v1/sessions` routes — session starts arrive as hosted
|
|
1593
|
+
// admissions (`agentsdk.session` on the built-in http channel) and session
|
|
1594
|
+
// reads come from the control plane's runs surface and durable storage.
|
|
1595
|
+
// Local dev, self-hosted serve, and hosted v1 keep the engine mounts.
|
|
1596
|
+
const hostedV2Guest = noControlPlane === true && isV2Project(project);
|
|
1597
|
+
if (hostedV2Guest) {
|
|
1572
1598
|
registerHostedDeliveryRoute({
|
|
1573
1599
|
router,
|
|
1574
1600
|
base,
|
|
@@ -1747,34 +1773,38 @@ function mountAgentRoutes(
|
|
|
1747
1773
|
},
|
|
1748
1774
|
});
|
|
1749
1775
|
|
|
1750
|
-
|
|
1751
|
-
|
|
1752
|
-
|
|
1753
|
-
|
|
1754
|
-
|
|
1755
|
-
|
|
1756
|
-
|
|
1757
|
-
|
|
1758
|
-
|
|
1759
|
-
|
|
1760
|
-
|
|
1761
|
-
|
|
1762
|
-
|
|
1763
|
-
|
|
1764
|
-
|
|
1765
|
-
|
|
1766
|
-
|
|
1767
|
-
|
|
1768
|
-
|
|
1769
|
-
|
|
1770
|
-
|
|
1771
|
-
|
|
1772
|
-
|
|
1773
|
-
|
|
1774
|
-
|
|
1775
|
-
|
|
1776
|
-
|
|
1777
|
-
|
|
1776
|
+
// Session list is session surface: not mounted on a hosted v2 guest (the
|
|
1777
|
+
// control plane owns session reads there; see hostedV2Guest above).
|
|
1778
|
+
if (!hostedV2Guest) {
|
|
1779
|
+
router.add({
|
|
1780
|
+
method: "GET",
|
|
1781
|
+
pattern: `${base}/v1/sessions`,
|
|
1782
|
+
auth: httpAuth,
|
|
1783
|
+
handler: async (request, ctx) => {
|
|
1784
|
+
// Same gate as requireSessionOwner / relaxSessionReadAuth: never with
|
|
1785
|
+
// bearer or custom channel auth (strict per-principal isolation).
|
|
1786
|
+
// `--allow-anonymous` alone is a shared-principal trust boundary (corp
|
|
1787
|
+
// Okta ALB); `--dev` alone stays loopback-only.
|
|
1788
|
+
const includeAll =
|
|
1789
|
+
relaxSessionReadAuth &&
|
|
1790
|
+
(relaxSessionReadAuthBeyondLoopback ||
|
|
1791
|
+
(typeof ctx.requestIp === "string" &&
|
|
1792
|
+
isLoopbackAddress(ctx.requestIp)));
|
|
1793
|
+
// `?latest=1` — only the newest visible session. Clients binding a
|
|
1794
|
+
// default session (agsh) do not need the whole list, and on hosted
|
|
1795
|
+
// storage the whole list is a database scan.
|
|
1796
|
+
const latest = new URL(request.url).searchParams.get("latest");
|
|
1797
|
+
const listed =
|
|
1798
|
+
latest === "1" || latest === "true"
|
|
1799
|
+
? await engine.latestSessionWithSource(ctx.auth, { includeAll })
|
|
1800
|
+
: await engine.listSessionsWithSource(ctx.auth, { includeAll });
|
|
1801
|
+
return jsonResponse({
|
|
1802
|
+
sessions: listed.sessions,
|
|
1803
|
+
source: listed.source,
|
|
1804
|
+
});
|
|
1805
|
+
},
|
|
1806
|
+
});
|
|
1807
|
+
}
|
|
1778
1808
|
|
|
1779
1809
|
// Durable artifacts (ctx.artifacts / tag_artifact), newest-updated first.
|
|
1780
1810
|
router.add({
|
|
@@ -2084,6 +2114,45 @@ function mountAgentRoutes(
|
|
|
2084
2114
|
},
|
|
2085
2115
|
});
|
|
2086
2116
|
|
|
2117
|
+
// Deterministic skill reads: the body the harness would receive, plus
|
|
2118
|
+
// resolved sibling files. Read-only, so plain GETs with no session binding.
|
|
2119
|
+
router.add({
|
|
2120
|
+
method: "GET",
|
|
2121
|
+
pattern: `${base}/v1/skills`,
|
|
2122
|
+
auth: httpAuth,
|
|
2123
|
+
handler: async () =>
|
|
2124
|
+
jsonResponse({
|
|
2125
|
+
skills: project.agent.skills.map(skillListEntry),
|
|
2126
|
+
}),
|
|
2127
|
+
});
|
|
2128
|
+
|
|
2129
|
+
router.add({
|
|
2130
|
+
method: "GET",
|
|
2131
|
+
pattern: `${base}/v1/skills/:skillName`,
|
|
2132
|
+
auth: httpAuth,
|
|
2133
|
+
handler: async (_request, ctx) => {
|
|
2134
|
+
const skillName = ctx.params.skillName ?? "";
|
|
2135
|
+
try {
|
|
2136
|
+
return jsonResponse(
|
|
2137
|
+
await readSkillDetail(project.agent.skills, skillName)
|
|
2138
|
+
);
|
|
2139
|
+
} catch (error) {
|
|
2140
|
+
if (error instanceof UnknownSkillError) {
|
|
2141
|
+
return jsonResponse(
|
|
2142
|
+
{
|
|
2143
|
+
ok: false,
|
|
2144
|
+
error: "unknown_skill",
|
|
2145
|
+
message: error.message,
|
|
2146
|
+
availableSkills: error.availableSkillNames,
|
|
2147
|
+
},
|
|
2148
|
+
{ status: 404 }
|
|
2149
|
+
);
|
|
2150
|
+
}
|
|
2151
|
+
throw error;
|
|
2152
|
+
}
|
|
2153
|
+
},
|
|
2154
|
+
});
|
|
2155
|
+
|
|
2087
2156
|
if (playground) {
|
|
2088
2157
|
// Serve the built Vite SPA. `<base href>` is injected so the SPA's relative
|
|
2089
2158
|
// asset URLs resolve under this mount regardless of the trailing slash the
|
|
@@ -2107,18 +2176,25 @@ function mountAgentRoutes(
|
|
|
2107
2176
|
});
|
|
2108
2177
|
}
|
|
2109
2178
|
|
|
2110
|
-
|
|
2111
|
-
|
|
2112
|
-
|
|
2113
|
-
|
|
2114
|
-
|
|
2115
|
-
|
|
2116
|
-
|
|
2117
|
-
|
|
2118
|
-
|
|
2119
|
-
|
|
2120
|
-
|
|
2121
|
-
|
|
2179
|
+
// The built-in HTTP session channel (`/v1/session*`, including the
|
|
2180
|
+
// session-scoped approvals/auths routes) is session surface: not mounted on
|
|
2181
|
+
// a hosted v2 guest (see hostedV2Guest above). The `http` channel itself
|
|
2182
|
+
// stays registered with the hosted delivery route, which is how the control
|
|
2183
|
+
// plane's session starts reach it.
|
|
2184
|
+
if (!hostedV2Guest) {
|
|
2185
|
+
for (const route of buildHttpChannelRoutes({
|
|
2186
|
+
engine,
|
|
2187
|
+
config: project.httpChannel,
|
|
2188
|
+
auth: httpAuth,
|
|
2189
|
+
basePath: base,
|
|
2190
|
+
// Dev playground lists every session (`includeAll`); allow opening them
|
|
2191
|
+
// (see relaxSessionReadAuth above).
|
|
2192
|
+
relaxSessionReadAuth,
|
|
2193
|
+
relaxSessionReadAuthBeyondLoopback,
|
|
2194
|
+
relaxSessionApprovalAuth,
|
|
2195
|
+
})) {
|
|
2196
|
+
router.add(route);
|
|
2197
|
+
}
|
|
2122
2198
|
}
|
|
2123
2199
|
|
|
2124
2200
|
// Playground eval list/run — available without `--dev` (corp / allow-anonymous).
|
|
@@ -3087,8 +3163,9 @@ async function handleRequest(
|
|
|
3087
3163
|
}`
|
|
3088
3164
|
);
|
|
3089
3165
|
const snippet = hostedErrorStackSnippet(error);
|
|
3090
|
-
const message =
|
|
3091
|
-
|
|
3166
|
+
const message = hostedDeliveryRequest
|
|
3167
|
+
? hostedErrorMessageOnly(error)
|
|
3168
|
+
: snippet.length > 0
|
|
3092
3169
|
? `Internal server error: ${snippet}`
|
|
3093
3170
|
: "Internal server error.";
|
|
3094
3171
|
response = hostedDeliveryRequest
|
|
@@ -591,6 +591,10 @@ export class SessionEngine {
|
|
|
591
591
|
private resolvedConnections: EngineResolvedConnection[] = [];
|
|
592
592
|
/** Direct server-tool HTTP MCP transport exposed only to cloud turns. */
|
|
593
593
|
private cloudServerToolsConnection: ConnectionTransport | undefined;
|
|
594
|
+
/** Re-resolved after hosted v2 task binding writes the Cursor credential. */
|
|
595
|
+
private cloudServerToolsHeaders:
|
|
596
|
+
| (() => Record<string, string> | undefined)
|
|
597
|
+
| undefined;
|
|
594
598
|
private readonly getCloudUsage: (
|
|
595
599
|
sdkAgentId: string
|
|
596
600
|
) => Promise<CloudAgentUsage | undefined>;
|
|
@@ -756,8 +760,30 @@ export class SessionEngine {
|
|
|
756
760
|
);
|
|
757
761
|
}
|
|
758
762
|
|
|
759
|
-
setCloudServerToolsConnection(
|
|
763
|
+
setCloudServerToolsConnection(
|
|
764
|
+
connection: ConnectionTransport,
|
|
765
|
+
resolveHeaders?: () => Record<string, string> | undefined
|
|
766
|
+
): void {
|
|
760
767
|
this.cloudServerToolsConnection = connection;
|
|
768
|
+
this.cloudServerToolsHeaders = resolveHeaders;
|
|
769
|
+
}
|
|
770
|
+
|
|
771
|
+
private currentCloudServerToolsConnection(): ConnectionTransport | undefined {
|
|
772
|
+
const connection = this.cloudServerToolsConnection;
|
|
773
|
+
const resolveHeaders = this.cloudServerToolsHeaders;
|
|
774
|
+
if (
|
|
775
|
+
connection === undefined ||
|
|
776
|
+
!("url" in connection) ||
|
|
777
|
+
resolveHeaders === undefined
|
|
778
|
+
) {
|
|
779
|
+
return connection;
|
|
780
|
+
}
|
|
781
|
+
const { headers: _headers, ...withoutHeaders } = connection;
|
|
782
|
+
const headers = resolveHeaders();
|
|
783
|
+
return {
|
|
784
|
+
...withoutHeaders,
|
|
785
|
+
...(headers === undefined ? {} : { headers }),
|
|
786
|
+
};
|
|
761
787
|
}
|
|
762
788
|
|
|
763
789
|
setMcpOauthCallbackUrl(url: string): void {
|
|
@@ -1037,6 +1063,11 @@ export class SessionEngine {
|
|
|
1037
1063
|
// on a sessionless pod.
|
|
1038
1064
|
throw new HostedAdmissionLocalSendError();
|
|
1039
1065
|
}
|
|
1066
|
+
if (options.clearCloudOverride === true && options.cloud !== undefined) {
|
|
1067
|
+
throw new Error(
|
|
1068
|
+
"send options cloud and clearCloudOverride cannot be combined"
|
|
1069
|
+
);
|
|
1070
|
+
}
|
|
1040
1071
|
const identity =
|
|
1041
1072
|
channelId === HTTP_CHANNEL_ID
|
|
1042
1073
|
? httpContinuationIdentity(this.project.httpChannel)
|
|
@@ -1127,11 +1158,18 @@ export class SessionEngine {
|
|
|
1127
1158
|
),
|
|
1128
1159
|
}));
|
|
1129
1160
|
}
|
|
1130
|
-
//
|
|
1131
|
-
//
|
|
1132
|
-
//
|
|
1133
|
-
// stale repo/prUrl for the session's lifetime.
|
|
1161
|
+
// A caller can explicitly return a continuation to the agent's
|
|
1162
|
+
// configured runtime. Omission remains sticky for compatibility:
|
|
1163
|
+
// follow-ups that do not know the original attach keep it.
|
|
1134
1164
|
if (
|
|
1165
|
+
sendOptions.clearCloudOverride === true &&
|
|
1166
|
+
record.cloudOverride !== undefined
|
|
1167
|
+
) {
|
|
1168
|
+
record = await this.updateRecord(record.sessionId, current => ({
|
|
1169
|
+
...current,
|
|
1170
|
+
cloudOverride: undefined,
|
|
1171
|
+
}));
|
|
1172
|
+
} else if (
|
|
1135
1173
|
sendOptions.cloud !== undefined &&
|
|
1136
1174
|
JSON.stringify(sendOptions.cloud) !==
|
|
1137
1175
|
JSON.stringify(record.cloudOverride)
|
|
@@ -3184,7 +3222,7 @@ export class SessionEngine {
|
|
|
3184
3222
|
sessionId: string,
|
|
3185
3223
|
connectionName: string
|
|
3186
3224
|
): ConnectionTransport | undefined {
|
|
3187
|
-
const connection = this.
|
|
3225
|
+
const connection = this.currentCloudServerToolsConnection();
|
|
3188
3226
|
if (connection === undefined || !("url" in connection)) {
|
|
3189
3227
|
return undefined;
|
|
3190
3228
|
}
|
|
@@ -3338,8 +3376,8 @@ export class SessionEngine {
|
|
|
3338
3376
|
`MCP connection name "${SERVER_TOOLS_MCP_SERVER_NAME}" is reserved for authored server tools on cloud turns.`
|
|
3339
3377
|
);
|
|
3340
3378
|
}
|
|
3341
|
-
const connection = this.
|
|
3342
|
-
if ("url" in connection) {
|
|
3379
|
+
const connection = this.currentCloudServerToolsConnection();
|
|
3380
|
+
if (connection !== undefined && "url" in connection) {
|
|
3343
3381
|
const url = new URL(connection.url);
|
|
3344
3382
|
url.searchParams.set("agentkitSessionId", sessionId);
|
|
3345
3383
|
servers[SERVER_TOOLS_MCP_SERVER_NAME] = {
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deterministic skill reads (`GET /v1/skills`, `GET /v1/skills/:name`,
|
|
3
|
+
* `agent-sdk skill <name>`): the skill body exactly as the harness would
|
|
4
|
+
* receive it, plus resolved sibling files. No model turn, no session.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { readFile } from "node:fs/promises";
|
|
8
|
+
import type { DiscoveredSkill } from "../types.js";
|
|
9
|
+
import { buildSkillMd } from "./workspace.js";
|
|
10
|
+
|
|
11
|
+
export class UnknownSkillError extends Error {
|
|
12
|
+
constructor(
|
|
13
|
+
skillName: string,
|
|
14
|
+
readonly availableSkillNames: string[]
|
|
15
|
+
) {
|
|
16
|
+
super(`Unknown skill "${skillName}"`);
|
|
17
|
+
this.name = "UnknownSkillError";
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/** Light listing entry: routing hint only, like `info` shows. */
|
|
22
|
+
export interface SkillListEntry {
|
|
23
|
+
name: string;
|
|
24
|
+
description: string;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/** Full read behind `GET /v1/skills/:name`. */
|
|
28
|
+
export interface SkillDetailEntry extends SkillListEntry {
|
|
29
|
+
/** SKILL.md body without generated frontmatter. */
|
|
30
|
+
markdown: string;
|
|
31
|
+
/** Rendered SKILL.md the harness reads (frontmatter + body). */
|
|
32
|
+
skillMd: string;
|
|
33
|
+
/** Sibling files by package-relative path, with contents resolved. */
|
|
34
|
+
files: Record<string, string>;
|
|
35
|
+
extension?: string;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export function skillListEntry(skill: DiscoveredSkill): SkillListEntry {
|
|
39
|
+
return { name: skill.name, description: skill.description };
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export async function readSkillDetail(
|
|
43
|
+
skills: readonly DiscoveredSkill[],
|
|
44
|
+
skillName: string
|
|
45
|
+
): Promise<SkillDetailEntry> {
|
|
46
|
+
const skill = skills.find(s => s.name === skillName);
|
|
47
|
+
if (skill === undefined) {
|
|
48
|
+
throw new UnknownSkillError(
|
|
49
|
+
skillName,
|
|
50
|
+
skills.map(s => s.name)
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
// Null-prototype: authored keys (`defineSkill`) pass through
|
|
54
|
+
// unvalidated, and `__proto__` would silently vanish on a plain object.
|
|
55
|
+
const files: Record<string, string> = Object.create(null);
|
|
56
|
+
for (const [rel, source] of Object.entries(skill.files)) {
|
|
57
|
+
files[rel] =
|
|
58
|
+
"contents" in source
|
|
59
|
+
? source.contents
|
|
60
|
+
: await readFile(source.sourcePath, "utf8");
|
|
61
|
+
}
|
|
62
|
+
return {
|
|
63
|
+
...skillListEntry(skill),
|
|
64
|
+
markdown: skill.markdown,
|
|
65
|
+
skillMd: buildSkillMd(skill),
|
|
66
|
+
files,
|
|
67
|
+
extension: skill.extension,
|
|
68
|
+
};
|
|
69
|
+
}
|
package/src/types.ts
CHANGED
|
@@ -1147,6 +1147,16 @@ export interface ExtensionOptions<TConfig, TInput = TConfig> {
|
|
|
1147
1147
|
description?: string;
|
|
1148
1148
|
/** Mount configuration schema. A consumer's settings are validated at mount. */
|
|
1149
1149
|
config?: z.ZodType<TConfig, z.ZodTypeDef, TInput>;
|
|
1150
|
+
/** Choose which contribution groups this mount includes. */
|
|
1151
|
+
contributions?: (config: TConfig) => ExtensionContributionSelection;
|
|
1152
|
+
}
|
|
1153
|
+
|
|
1154
|
+
/** Contribution groups a configured extension mount may include or omit. */
|
|
1155
|
+
export interface ExtensionContributionSelection {
|
|
1156
|
+
/** Include tools from the extension tree. Defaults to true. */
|
|
1157
|
+
tools?: boolean;
|
|
1158
|
+
/** Include skills from the extension tree. Defaults to true. */
|
|
1159
|
+
skills?: boolean;
|
|
1150
1160
|
}
|
|
1151
1161
|
|
|
1152
1162
|
/**
|
|
@@ -1181,6 +1191,7 @@ export interface CursorPluginDeclaration extends ExtensionDeclaration {
|
|
|
1181
1191
|
export interface ExtensionMount extends BrandedDefinition<"extension"> {
|
|
1182
1192
|
readonly extension: ExtensionDeclaration | CursorPluginDeclaration;
|
|
1183
1193
|
readonly config: unknown;
|
|
1194
|
+
readonly contributions?: ExtensionContributionSelection;
|
|
1184
1195
|
}
|
|
1185
1196
|
|
|
1186
1197
|
/** `cursorPlugin({ ... })`: mount a Cursor plugin directory as an extension. */
|
|
@@ -1479,13 +1490,20 @@ export type ConnectionConfig = (
|
|
|
1479
1490
|
* Fail-closed: a `listTools` failure, an invalid tool name, or a name
|
|
1480
1491
|
* collision (with an authored tool or another advertised connection)
|
|
1481
1492
|
* fails the turn — a turn never silently runs with a shrunken toolset.
|
|
1482
|
-
*
|
|
1483
|
-
*
|
|
1484
|
-
*
|
|
1493
|
+
* Set {@link optional} to skip this connection instead of failing the
|
|
1494
|
+
* turn. Local runtime only, like all server tools: a `runtime: "cloud"`
|
|
1495
|
+
* agent fails discovery, and hybrid per-send cloud sessions refuse the
|
|
1496
|
+
* turn. The listing runs once per turn; point this at endpoints that can
|
|
1485
1497
|
* answer `tools/list` cheaply. Tools whose MCP `annotations.title` is
|
|
1486
1498
|
* `do-not-call` are omitted (vendor host-UI / MCP Apps helpers).
|
|
1487
1499
|
*/
|
|
1488
1500
|
advertiseTools?: boolean;
|
|
1501
|
+
/**
|
|
1502
|
+
* With {@link advertiseTools}, a `listTools` or `auth` failure skips this
|
|
1503
|
+
* connection (zero tools from it) instead of failing the turn. Other
|
|
1504
|
+
* advertised connections still fail closed. Requires `advertiseTools`.
|
|
1505
|
+
*/
|
|
1506
|
+
optional?: boolean;
|
|
1489
1507
|
/**
|
|
1490
1508
|
* Intended effects of tools this connection serves. When set, only
|
|
1491
1509
|
* tools whose classified effect is in this set are advertised — a
|
|
@@ -2130,6 +2148,15 @@ export interface SendMessageOptions {
|
|
|
2130
2148
|
* runtime is forced local with no override path.
|
|
2131
2149
|
*/
|
|
2132
2150
|
cloud?: AgentCloudOptions;
|
|
2151
|
+
/**
|
|
2152
|
+
* Clear cloud options retained by an existing continuation session before
|
|
2153
|
+
* starting this turn. Use when a caller intentionally moves a previously
|
|
2154
|
+
* cloud-attached session back to the agent's configured runtime. Cannot be
|
|
2155
|
+
* combined with {@link cloud}.
|
|
2156
|
+
*
|
|
2157
|
+
* On a new session this is a no-op.
|
|
2158
|
+
*/
|
|
2159
|
+
clearCloudOverride?: boolean;
|
|
2133
2160
|
/**
|
|
2134
2161
|
* Seed the Cursor SDK agent id for a **new** session (ignored when the
|
|
2135
2162
|
* continuation token matches an existing session). For cloud agents this
|
|
@@ -3237,6 +3264,8 @@ export interface DiscoveredConnection {
|
|
|
3237
3264
|
auth?: ConnectionAuthProvider;
|
|
3238
3265
|
/** Advertise-by-name from {@link ConnectionConfig.advertiseTools}. */
|
|
3239
3266
|
advertiseTools?: boolean;
|
|
3267
|
+
/** Skip a listing failure instead of failing the turn. */
|
|
3268
|
+
optional?: boolean;
|
|
3240
3269
|
/**
|
|
3241
3270
|
* Normalized intended effects from {@link ConnectionConfig.effects}.
|
|
3242
3271
|
* Absent means every listed tool is advertised.
|
|
@@ -3415,6 +3444,7 @@ export interface AgentProjectInfo {
|
|
|
3415
3444
|
name: string;
|
|
3416
3445
|
transport: string;
|
|
3417
3446
|
advertiseTools?: boolean;
|
|
3447
|
+
optional?: boolean;
|
|
3418
3448
|
effects?: readonly ToolEffect[];
|
|
3419
3449
|
tools?: readonly string[];
|
|
3420
3450
|
disallowedTools?: readonly string[];
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Thermo quality review
|
|
2
|
+
|
|
3
|
+
Reviews pull requests for structural code quality. Posts one review comment.
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
npx @cursor/july init ./thermo-quality-review --template thermo-quality-review
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
## Run hosted
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
cd thermo-quality-review
|
|
13
|
+
agent-sdk login
|
|
14
|
+
agent-sdk deploy --cursor-events-repo acme/api
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
The deployment watches that repo through your team's Cursor GitHub
|
|
18
|
+
connection. Open a PR to get a review.
|
|
19
|
+
|
|
20
|
+
## Run locally
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
agent-sdk dev --cursor-events --repo acme/api
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Or replay a PR without pushing:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
agent-sdk github replay https://github.com/acme/api/pull/12 --dir .
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Files
|
|
33
|
+
|
|
34
|
+
- `agent/instructions.md`: what counts as a finding
|
|
35
|
+
- `evals/review.eval.ts`: two smoke cases
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import {
|
|
2
|
+
defaultGitHubPullRequestDispatch,
|
|
3
|
+
githubChannel,
|
|
4
|
+
} from "@cursor/july/channels/github";
|
|
5
|
+
|
|
6
|
+
const MAX_DIFF_CHARS = 150_000;
|
|
7
|
+
|
|
8
|
+
export default githubChannel({
|
|
9
|
+
cursorAccount: true,
|
|
10
|
+
deliverReplies: false,
|
|
11
|
+
onComment: () => null,
|
|
12
|
+
onPullRequest: (ctx, pr) => {
|
|
13
|
+
if (pr.draft) {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
const dispatch = defaultGitHubPullRequestDispatch(ctx, pr);
|
|
17
|
+
if (dispatch === null) {
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
return {
|
|
21
|
+
auth: dispatch.auth,
|
|
22
|
+
context: ["Read pr/diff.patch."],
|
|
23
|
+
async workspaceFiles() {
|
|
24
|
+
const octokit = await ctx.github.getOctokit();
|
|
25
|
+
const diff = await octokit.rest.pulls.get({
|
|
26
|
+
owner: ctx.repository.owner,
|
|
27
|
+
repo: ctx.repository.name,
|
|
28
|
+
pull_number: pr.number,
|
|
29
|
+
mediaType: { format: "diff" },
|
|
30
|
+
});
|
|
31
|
+
const text = String(diff.data);
|
|
32
|
+
return {
|
|
33
|
+
"pr/diff.patch":
|
|
34
|
+
text.length > MAX_DIFF_CHARS
|
|
35
|
+
? `${text.slice(0, MAX_DIFF_CHARS)}\n…[truncated]\n`
|
|
36
|
+
: text,
|
|
37
|
+
"pr/head.sha": pr.headSha,
|
|
38
|
+
};
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
},
|
|
42
|
+
});
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Thermo quality review
|
|
2
|
+
|
|
3
|
+
You review pull requests for structural code quality. Be ambitious:
|
|
4
|
+
look for restructures that delete whole branches, helpers, or layers,
|
|
5
|
+
not tidier versions of the same idea.
|
|
6
|
+
|
|
7
|
+
## Hunt
|
|
8
|
+
|
|
9
|
+
- Missed code-judo moves: reframings that make complexity disappear.
|
|
10
|
+
- Spaghetti growth: new conditionals or special cases bolted onto
|
|
11
|
+
unrelated flows. Push them behind their own abstraction.
|
|
12
|
+
- Files the PR pushes past 1,000 lines. Ask for decomposition first.
|
|
13
|
+
- Feature logic leaking into shared paths. Isolate it.
|
|
14
|
+
- Wrappers, casts, `any`, and optionality that hide the real contract.
|
|
15
|
+
- Bespoke helpers where a canonical one exists. Reuse it.
|
|
16
|
+
- Gratuitous sequential orchestration and half-applied updates.
|
|
17
|
+
|
|
18
|
+
## Skip
|
|
19
|
+
|
|
20
|
+
- Style nits and behavior disputes.
|
|
21
|
+
- Renames when the real issue is structural.
|
|
22
|
+
|
|
23
|
+
## Bar
|
|
24
|
+
|
|
25
|
+
Approve only with no structural regression, no unjustified size
|
|
26
|
+
explosion, and no obvious missed simplification. Otherwise push for
|
|
27
|
+
the cleaner decomposition.
|
|
28
|
+
|
|
29
|
+
## Review
|
|
30
|
+
|
|
31
|
+
The workspace has `pr/diff.patch`. Read it once. Call `post_findings`
|
|
32
|
+
once with structured findings. Reply with the count and one line per
|
|
33
|
+
finding. Clean review: empty findings.
|
|
34
|
+
|
|
35
|
+
The host writes the GitHub comment. Verdict is CLEAN when the list
|
|
36
|
+
is empty.
|
|
37
|
+
|
|
38
|
+
## Finding
|
|
39
|
+
|
|
40
|
+
- `severity`: `high`, `medium`, or `low`
|
|
41
|
+
- `file`, `line`: path and line in the diff
|
|
42
|
+
- `title`: short name
|
|
43
|
+
- `detail`: one-line impact and fix
|