@cursor/july 0.1.109 → 0.1.112
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/AGENTS.md +1 -1
- package/README.md +0 -15
- package/dist/bin/agent-serve.js +99 -67
- package/dist/channels/bitbucket/api.js +8 -8
- package/dist/channels/bitbucket/binding.js +4 -4
- package/dist/channels/bitbucket/bitbucket-channel.js +1 -1
- package/dist/channels/bitbucket/bitbucket-webhook.js +1 -1
- package/dist/channels/bitbucket/checks.d.ts.map +1 -1
- package/dist/channels/bitbucket/checks.js +1 -1
- package/dist/channels/bitbucket/cursor-account.js +1 -1
- package/dist/channels/bitbucket/events.js +1 -1
- package/dist/channels/change-monitors/change-monitors-channel.js +1 -1
- package/dist/channels/checks.d.ts.map +1 -1
- package/dist/channels/checks.js +2 -2
- package/dist/channels/deployments/deployments-channel.js +1 -1
- package/dist/channels/github/cursor-account.js +3 -3
- package/dist/channels/github/defaults.d.ts.map +1 -1
- package/dist/channels/github/defaults.js +5 -3
- package/dist/channels/github/events.js +1 -1
- package/dist/channels/github/forward.js +8 -8
- 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 +46 -32
- package/dist/channels/github/progress.d.ts.map +1 -1
- package/dist/channels/github/progress.js +7 -2
- package/dist/channels/github/state.d.ts +6 -0
- package/dist/channels/github/state.d.ts.map +1 -1
- package/dist/channels/github/types.d.ts +6 -0
- package/dist/channels/github/types.d.ts.map +1 -1
- package/dist/channels/gitlab/binding.js +4 -4
- package/dist/channels/gitlab/checks.d.ts.map +1 -1
- package/dist/channels/gitlab/checks.js +1 -1
- package/dist/channels/gitlab/cursor-account.js +1 -1
- package/dist/channels/gitlab/events.js +1 -1
- package/dist/channels/gitlab/gitlab-channel.js +1 -1
- package/dist/channels/gitlab/gitlab-webhook.js +1 -1
- package/dist/channels/gitlab/replay.js +2 -2
- package/dist/channels/origin/binding.d.ts +2 -0
- package/dist/channels/origin/binding.d.ts.map +1 -1
- package/dist/channels/origin/binding.js +3 -3
- package/dist/channels/origin/checks.d.ts +19 -7
- package/dist/channels/origin/checks.d.ts.map +1 -1
- package/dist/channels/origin/checks.js +13 -9
- package/dist/channels/origin/cursor-account.js +1 -1
- package/dist/channels/origin/defaults.d.ts.map +1 -1
- package/dist/channels/origin/defaults.js +3 -1
- package/dist/channels/origin/events.js +1 -1
- package/dist/channels/origin/origin-channel.d.ts.map +1 -1
- package/dist/channels/origin/origin-channel.js +2 -1
- package/dist/channels/origin/origin-webhook.js +2 -2
- package/dist/channels/slack/agentic-delivery.d.ts +23 -0
- package/dist/channels/slack/agentic-delivery.d.ts.map +1 -0
- package/dist/channels/slack/agentic-delivery.js +560 -0
- package/dist/channels/slack/agentic-posted.d.ts +30 -0
- package/dist/channels/slack/agentic-posted.d.ts.map +1 -0
- package/dist/channels/slack/agentic-posted.js +102 -0
- package/dist/channels/slack/agentic-signals.d.ts +48 -0
- package/dist/channels/slack/agentic-signals.d.ts.map +1 -0
- package/dist/channels/slack/agentic-signals.js +204 -0
- package/dist/channels/slack/api.d.ts +20 -1
- package/dist/channels/slack/api.d.ts.map +1 -1
- package/dist/channels/slack/api.js +43 -11
- package/dist/channels/slack/approvals.js +1 -1
- package/dist/channels/slack/auth.d.ts.map +1 -1
- package/dist/channels/slack/auth.js +3 -1
- package/dist/channels/slack/blocks.js +3 -3
- package/dist/channels/slack/bot-mentions.d.ts.map +1 -1
- package/dist/channels/slack/bot-mentions.js +5 -5
- package/dist/channels/slack/channel-watch.js +1 -1
- package/dist/channels/slack/cli-project.js +3 -3
- package/dist/channels/slack/defaults.d.ts +3 -0
- package/dist/channels/slack/defaults.d.ts.map +1 -1
- package/dist/channels/slack/defaults.js +90 -29
- package/dist/channels/slack/dispatch.d.ts +44 -1
- package/dist/channels/slack/dispatch.d.ts.map +1 -1
- package/dist/channels/slack/dispatch.js +323 -107
- package/dist/channels/slack/doctor.js +1 -1
- package/dist/channels/slack/eval-directive.js +1 -1
- package/dist/channels/slack/external-policy.d.ts +2 -1
- package/dist/channels/slack/external-policy.d.ts.map +1 -1
- package/dist/channels/slack/external-policy.js +13 -2
- package/dist/channels/slack/footer.d.ts +30 -0
- package/dist/channels/slack/footer.d.ts.map +1 -0
- package/dist/channels/slack/footer.js +88 -0
- package/dist/channels/slack/index.d.ts +2 -0
- package/dist/channels/slack/index.d.ts.map +1 -1
- package/dist/channels/slack/index.js +2 -0
- package/dist/channels/slack/interactive.d.ts.map +1 -1
- package/dist/channels/slack/interactive.js +5 -3
- package/dist/channels/slack/live-delivery.d.ts +1 -1
- package/dist/channels/slack/live-delivery.d.ts.map +1 -1
- package/dist/channels/slack/live-delivery.js +20 -6
- package/dist/channels/slack/log.d.ts.map +1 -1
- package/dist/channels/slack/log.js +1 -1
- package/dist/channels/slack/manifest.js +1 -1
- package/dist/channels/slack/nudge-carrier.js +1 -1
- package/dist/channels/slack/nudge-store.js +2 -2
- package/dist/channels/slack/paint-start.d.ts +22 -0
- package/dist/channels/slack/paint-start.d.ts.map +1 -0
- package/dist/channels/slack/paint-start.js +91 -0
- package/dist/channels/slack/placeholder.d.ts +62 -0
- package/dist/channels/slack/placeholder.d.ts.map +1 -0
- package/dist/channels/slack/placeholder.js +268 -0
- package/dist/channels/slack/progress-delivery.d.ts.map +1 -1
- package/dist/channels/slack/progress-delivery.js +13 -4
- package/dist/channels/slack/reasoning-chip.d.ts +8 -0
- package/dist/channels/slack/reasoning-chip.d.ts.map +1 -0
- package/dist/channels/slack/reasoning-chip.js +30 -0
- package/dist/channels/slack/recording-sink.d.ts +29 -0
- package/dist/channels/slack/recording-sink.d.ts.map +1 -0
- package/dist/channels/slack/recording-sink.js +142 -0
- package/dist/channels/slack/reply-options.d.ts +8 -1
- package/dist/channels/slack/reply-options.d.ts.map +1 -1
- package/dist/channels/slack/reply-options.js +59 -14
- package/dist/channels/slack/setup.js +1 -1
- package/dist/channels/slack/slack-channel.d.ts +2 -2
- package/dist/channels/slack/slack-channel.d.ts.map +1 -1
- package/dist/channels/slack/slack-channel.js +58 -30
- package/dist/channels/slack/socket-mode.js +2 -2
- package/dist/channels/slack/thread-context.js +5 -5
- package/dist/channels/slack/tool-approval-events.d.ts +5 -0
- package/dist/channels/slack/tool-approval-events.d.ts.map +1 -1
- package/dist/channels/slack/tool-approval-events.js +50 -38
- package/dist/channels/slack/tool-cards.js +1 -1
- package/dist/channels/slack/tool-chip.d.ts +9 -0
- package/dist/channels/slack/tool-chip.d.ts.map +1 -0
- package/dist/channels/slack/tool-chip.js +25 -0
- package/dist/channels/slack/types.d.ts +49 -7
- package/dist/channels/slack/types.d.ts.map +1 -1
- package/dist/channels/slack/upload.d.ts +13 -0
- package/dist/channels/slack/upload.d.ts.map +1 -0
- package/dist/channels/slack/upload.js +135 -0
- package/dist/channels.d.ts +10 -14
- package/dist/channels.d.ts.map +1 -1
- package/dist/channels.js +9 -21
- package/dist/dashboard-session-url.d.ts +15 -0
- package/dist/dashboard-session-url.d.ts.map +1 -0
- package/dist/dashboard-session-url.js +25 -0
- package/dist/docs/404.html +3 -3
- package/dist/docs/architecture.svg +59 -0
- package/dist/docs/assets/app.DxTdhphC.js +309 -0
- 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.QmjDU6Jh.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.CVQERt56.js → VPLocalSearchBox.CR3KTF0X.js} +2 -2
- package/dist/docs/assets/chunks/arc.CVVqBOdS.js +1 -0
- package/dist/docs/assets/chunks/architectureDiagram-Q4EWVU46.CJHGP4ki.js +36 -0
- package/dist/docs/assets/chunks/baseUniq.r7UVVRBP.js +1 -0
- package/dist/docs/assets/chunks/blockDiagram-DXYQGD6D.DKmMaTre.js +132 -0
- package/dist/docs/assets/chunks/c4Diagram-AHTNJAMY.DDJsntUO.js +10 -0
- package/dist/docs/assets/chunks/channel.BjpoSbz_.js +1 -0
- package/dist/docs/assets/chunks/chunk-4BX2VUAB.BK2rKt6W.js +1 -0
- package/dist/docs/assets/chunks/chunk-4TB4RGXK.DRLV8RnF.js +206 -0
- package/dist/docs/assets/chunks/chunk-55IACEB6.DaKjxtb7.js +1 -0
- package/dist/docs/assets/chunks/chunk-EDXVE4YY.C5sPCIT1.js +1 -0
- package/dist/docs/assets/chunks/chunk-FMBD7UC4.CSGWyNTB.js +15 -0
- package/dist/docs/assets/chunks/chunk-OYMX7WX6.D5tK9XEr.js +231 -0
- package/dist/docs/assets/chunks/chunk-QZHKN3VN.BeZGd1UZ.js +1 -0
- package/dist/docs/assets/chunks/chunk-YZCP3GAM.U_tfWwQR.js +1 -0
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.BgxOlMHw.js +1 -0
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.BgxOlMHw.js +1 -0
- package/dist/docs/assets/chunks/clone.DRuGBKZC.js +1 -0
- package/dist/docs/assets/chunks/cose-bilkent-S5V4N54A.DVeRXIb6.js +1 -0
- package/dist/docs/assets/chunks/cytoscape.esm.BQk4lpUV.js +331 -0
- package/dist/docs/assets/chunks/dagre-KV5264BT.BpKJAeRZ.js +4 -0
- package/dist/docs/assets/chunks/defaultLocale.C4B-KCzX.js +1 -0
- package/dist/docs/assets/chunks/diagram-5BDNPKRD.BQOtrd1Z.js +10 -0
- package/dist/docs/assets/chunks/diagram-G4DWMVQ6.CSDAhjPI.js +24 -0
- package/dist/docs/assets/chunks/diagram-MMDJMWI5.Dpztst2S.js +43 -0
- package/dist/docs/assets/chunks/diagram-TYMM5635.qJHRizHR.js +24 -0
- package/dist/docs/assets/chunks/erDiagram-SMLLAGMA.vbDotH3l.js +85 -0
- package/dist/docs/assets/chunks/flowDiagram-DWJPFMVM.CqS_ZQr4.js +162 -0
- package/dist/docs/assets/chunks/{framework.BCISBCiQ.js → framework.BNw1pucY.js} +6 -6
- package/dist/docs/assets/chunks/ganttDiagram-T4ZO3ILL.DTLdR4pN.js +292 -0
- package/dist/docs/assets/chunks/gitGraphDiagram-UUTBAWPF.D04lnbnr.js +106 -0
- package/dist/docs/assets/chunks/graph.BlfqLJsM.js +1 -0
- package/dist/docs/assets/chunks/infoDiagram-42DDH7IO.tAooImWA.js +2 -0
- package/dist/docs/assets/chunks/init.Gi6I4Gst.js +1 -0
- package/dist/docs/assets/chunks/ishikawaDiagram-UXIWVN3A.ClUsVqnJ.js +70 -0
- package/dist/docs/assets/chunks/journeyDiagram-VCZTEJTY.C3tUgyCg.js +139 -0
- package/dist/docs/assets/chunks/kanban-definition-6JOO6SKY.CtD9-QCe.js +89 -0
- package/dist/docs/assets/chunks/katex.DkKDou_j.js +257 -0
- package/dist/docs/assets/chunks/layout.D38U-LnT.js +1 -0
- package/dist/docs/assets/chunks/linear.BJmssyhN.js +1 -0
- package/dist/docs/assets/chunks/min.DNgXoouU.js +1 -0
- package/dist/docs/assets/chunks/mindmap-definition-QFDTVHPH.Dcp6cxeu.js +96 -0
- package/dist/docs/assets/chunks/ordinal.DBvzRdQf.js +1 -0
- package/dist/docs/assets/chunks/pieDiagram-DEJITSTG.CLDw6zIs.js +30 -0
- package/dist/docs/assets/chunks/quadrantDiagram-34T5L4WZ.CYaeeY4c.js +7 -0
- package/dist/docs/assets/chunks/requirementDiagram-MS252O5E.gMYuRpq2.js +84 -0
- package/dist/docs/assets/chunks/sankeyDiagram-XADWPNL6.CZqyHFbc.js +10 -0
- package/dist/docs/assets/chunks/sequenceDiagram-FGHM5R23.BTsCjUDN.js +157 -0
- package/dist/docs/assets/chunks/stateDiagram-FHFEXIEX.CftT9mLJ.js +1 -0
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.-43J68xB.js +1 -0
- package/dist/docs/assets/chunks/{theme.Dnsd3XOn.js → theme.B_7J9ZsV.js} +2 -2
- package/dist/docs/assets/chunks/timeline-definition-GMOUNBTQ.DbU3WUNw.js +120 -0
- package/dist/docs/assets/chunks/vennDiagram-DHZGUBPP.ixsq-q2u.js +34 -0
- package/dist/docs/assets/chunks/virtual_mermaid-config.DDnGl6nM.js +1 -0
- package/dist/docs/assets/chunks/wardley-RL74JXVD.WRXz-Dux.js +162 -0
- package/dist/docs/assets/chunks/wardleyDiagram-NUSXRM2D.C0ewvgbp.js +20 -0
- package/dist/docs/assets/chunks/xychartDiagram-5P7HB3ND.nAEhF4bO.js +7 -0
- 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.BYvfZ-PO.js +72 -0
- package/dist/docs/assets/evals.md.BYvfZ-PO.lean.js +1 -0
- package/dist/docs/assets/guides_agent-to-agent.md.8oDTfu-E.js +30 -0
- package/dist/docs/assets/guides_agent-to-agent.md.8oDTfu-E.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_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.C-t81M5J.js +17 -0
- package/dist/docs/assets/index.md.C-t81M5J.lean.js +1 -0
- package/dist/docs/assets/{quickstart.md.DdQOF7Y8.js → quickstart.md.DAvVhuuU.js} +30 -38
- package/dist/docs/assets/quickstart.md.DAvVhuuU.lean.js +1 -0
- package/dist/docs/assets/{reference_agent-config.md.CvoL6pof.js → reference_agent-config.md.DGPyw7ms.js} +1 -1
- package/dist/docs/assets/{reference_agent-config.md.CvoL6pof.lean.js → reference_agent-config.md.DGPyw7ms.lean.js} +1 -1
- package/dist/docs/assets/{reference_artifacts.md.Dior32Qw.js → reference_artifacts.md.Bu_4HmsD.js} +1 -1
- package/dist/docs/assets/{reference_artifacts.md.Dior32Qw.lean.js → reference_artifacts.md.Bu_4HmsD.lean.js} +1 -1
- package/dist/docs/assets/{reference_channels.md.CAo-iK4j.js → reference_channels.md.nFWbzAic.js} +2 -12
- package/dist/docs/assets/{reference_channels.md.CAo-iK4j.lean.js → reference_channels.md.nFWbzAic.lean.js} +1 -1
- package/dist/docs/assets/{reference_cli.md.Deg7849l.js → reference_cli.md.DLWDz9ij.js} +5 -3
- package/dist/docs/assets/{reference_cli.md.Deg7849l.lean.js → reference_cli.md.DLWDz9ij.lean.js} +1 -1
- package/dist/docs/assets/{reference_connections.md.BojkC6c5.js → reference_connections.md.CmyrlXfY.js} +4 -4
- package/dist/docs/assets/{reference_connections.md.BojkC6c5.lean.js → reference_connections.md.CmyrlXfY.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.Ceq-qT8d.js +58 -0
- package/dist/docs/assets/reference_extensions.md.Ceq-qT8d.lean.js +1 -0
- package/dist/docs/assets/{reference_hooks.md.BlM_bOg6.js → reference_hooks.md.B7uzNENk.js} +3 -3
- package/dist/docs/assets/{reference_hooks.md.BlM_bOg6.lean.js → reference_hooks.md.B7uzNENk.lean.js} +1 -1
- package/dist/docs/assets/{reference_http-api.md.BwaCo-VO.js → reference_http-api.md.CduHavZ2.js} +3 -3
- package/dist/docs/assets/{reference_http-api.md.BwaCo-VO.lean.js → reference_http-api.md.CduHavZ2.lean.js} +1 -1
- package/dist/docs/assets/{reference_instructions.md.CR7XSsGk.js → reference_instructions.md.CU1My5My.js} +1 -1
- package/dist/docs/assets/{reference_instructions.md.CR7XSsGk.lean.js → reference_instructions.md.CU1My5My.lean.js} +1 -1
- package/dist/docs/assets/{reference_playground.md.DLnoaczX.js → reference_playground.md.Ch2d0Iqi.js} +1 -1
- package/dist/docs/assets/{reference_playground.md.DLnoaczX.lean.js → reference_playground.md.Ch2d0Iqi.lean.js} +1 -1
- package/dist/docs/assets/{reference_project-layout.md.BEU8MtQV.js → reference_project-layout.md.BGhgpy9V.js} +3 -3
- package/dist/docs/assets/{reference_project-layout.md.BEU8MtQV.lean.js → reference_project-layout.md.BGhgpy9V.lean.js} +1 -1
- package/dist/docs/assets/{reference_prompt.md.DnaD5dNK.js → reference_prompt.md.Ccp0R53H.js} +1 -1
- package/dist/docs/assets/{reference_prompt.md.DnaD5dNK.lean.js → reference_prompt.md.Ccp0R53H.lean.js} +1 -1
- package/dist/docs/assets/{reference_schedules.md.DI_JrHgq.js → reference_schedules.md.B2Nm6FaD.js} +1 -1
- package/dist/docs/assets/{reference_schedules.md.DI_JrHgq.lean.js → reference_schedules.md.B2Nm6FaD.lean.js} +1 -1
- package/dist/docs/assets/{reference_sessions.md.CyXV1MUw.js → reference_sessions.md.1_6Vyv7x.js} +1 -1
- package/dist/docs/assets/{reference_sessions.md.CyXV1MUw.lean.js → reference_sessions.md.1_6Vyv7x.lean.js} +1 -1
- package/dist/docs/assets/{reference_skills.md.l2ezAcaN.js → reference_skills.md.DjQkRefx.js} +1 -1
- package/dist/docs/assets/{reference_skills.md.l2ezAcaN.lean.js → reference_skills.md.DjQkRefx.lean.js} +1 -1
- package/dist/docs/assets/{reference_subagents.md.CfsIloPm.js → reference_subagents.md.BHsSMMyO.js} +2 -2
- package/dist/docs/assets/{reference_subagents.md.CfsIloPm.lean.js → reference_subagents.md.BHsSMMyO.lean.js} +1 -1
- package/dist/docs/assets/{reference_tools.md.aGrn99hP.js → reference_tools.md.BYzUTeVA.js} +4 -4
- package/dist/docs/assets/{reference_tools.md.aGrn99hP.lean.js → reference_tools.md.BYzUTeVA.lean.js} +1 -1
- package/dist/docs/assets/{style.DCD_zyg3.css → style.Cfo2vbik.css} +1 -1
- package/dist/docs/assets/{templates_agentic-owners.md.BZSH4N9z.js → templates_agentic-owners.md.9M575F5C.js} +1 -1
- package/dist/docs/assets/{templates_agentic-owners.md.BZSH4N9z.lean.js → templates_agentic-owners.md.9M575F5C.lean.js} +1 -1
- package/dist/docs/assets/{templates_pr-autofixer.md.Bds_XWcV.js → templates_pr-autofixer.md.ws0DDXDy.js} +1 -1
- package/dist/docs/assets/{templates_pr-autofixer.md.Bds_XWcV.lean.js → templates_pr-autofixer.md.ws0DDXDy.lean.js} +1 -1
- package/dist/docs/assets/{templates_security-reviewer.md.lshxbCLK.js → templates_security-reviewer.md.KEFYXzfK.js} +1 -1
- package/dist/docs/assets/{templates_security-reviewer.md.lshxbCLK.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.Co4UNzkZ.js → templates_triage.md.CVGe_FG6.js} +1 -1
- package/dist/docs/assets/{templates_triage.md.Co4UNzkZ.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 +47 -18
- package/dist/docs/building-with-agents.md +94 -84
- package/dist/docs/deployment.html +62 -48
- package/dist/docs/deployment.md +117 -364
- package/dist/docs/evals.html +88 -194
- package/dist/docs/evals.md +146 -673
- package/dist/docs/guides/agent-to-agent.html +65 -12
- package/dist/docs/guides/agent-to-agent.md +125 -91
- package/dist/docs/guides/bitbucket.html +182 -14
- package/dist/docs/guides/bitbucket.md +249 -48
- package/dist/docs/guides/cloud-agents.html +49 -10
- package/dist/docs/guides/cloud-agents.md +123 -66
- package/dist/docs/guides/convert-automation.html +83 -19
- package/dist/docs/guides/convert-automation.md +156 -147
- package/dist/docs/guides/github.html +187 -62
- package/dist/docs/guides/github.md +260 -245
- package/dist/docs/guides/gitlab.html +187 -15
- package/dist/docs/guides/gitlab.md +249 -50
- package/dist/docs/guides/grokbot-agents.html +51 -11
- package/dist/docs/guides/grokbot-agents.md +116 -63
- package/dist/docs/guides/improve.html +51 -10
- package/dist/docs/guides/improve.md +111 -58
- package/dist/docs/guides/mcp-oauth.html +77 -22
- package/dist/docs/guides/mcp-oauth.md +111 -121
- package/dist/docs/guides/opentelemetry.html +72 -30
- package/dist/docs/guides/opentelemetry.md +105 -187
- package/dist/docs/guides/slack.html +89 -24
- package/dist/docs/guides/slack.md +170 -191
- package/dist/docs/guides/webhooks.html +100 -200
- package/dist/docs/guides/webhooks.md +154 -386
- package/dist/docs/hashmap.json +1 -1
- package/dist/docs/hillclimbing.html +47 -11
- package/dist/docs/hillclimbing.md +101 -55
- package/dist/docs/index.html +57 -12
- package/dist/docs/index.md +83 -150
- package/dist/docs/llms-full.txt +6244 -10784
- package/dist/docs/llms.txt +23 -46
- package/dist/docs/quickstart.html +70 -45
- package/dist/docs/quickstart.md +44 -105
- package/dist/docs/reference/agent-config.html +41 -8
- package/dist/docs/reference/artifacts.html +41 -8
- package/dist/docs/reference/channels.html +41 -18
- package/dist/docs/reference/channels.md +0 -16
- package/dist/docs/reference/cli.html +44 -9
- package/dist/docs/reference/cli.md +2 -16
- package/dist/docs/reference/connections.html +43 -10
- package/dist/docs/reference/connections.md +3 -5
- package/dist/docs/reference/evals.html +116 -0
- package/dist/docs/reference/evals.md +293 -0
- package/dist/docs/reference/extensions.html +83 -54
- package/dist/docs/reference/extensions.md +127 -199
- package/dist/docs/reference/hooks.html +42 -9
- package/dist/docs/reference/hooks.md +34 -36
- package/dist/docs/reference/http-api.html +42 -9
- package/dist/docs/reference/http-api.md +5 -5
- package/dist/docs/reference/instructions.html +41 -8
- package/dist/docs/reference/playground.html +40 -7
- package/dist/docs/reference/playground.md +2 -2
- package/dist/docs/reference/project-layout.html +42 -9
- package/dist/docs/reference/project-layout.md +3 -4
- package/dist/docs/reference/prompt.html +41 -8
- package/dist/docs/reference/schedules.html +41 -8
- package/dist/docs/reference/sessions.html +40 -7
- package/dist/docs/reference/sessions.md +5 -4
- package/dist/docs/reference/skills.html +41 -8
- package/dist/docs/reference/subagents.html +41 -8
- package/dist/docs/reference/subagents.md +2 -4
- package/dist/docs/reference/tools.html +43 -10
- package/dist/docs/reference/tools.md +2 -5
- package/dist/docs/templates/agentic-owners.html +41 -8
- package/dist/docs/templates/pr-autofixer.html +41 -8
- package/dist/docs/templates/security-reviewer.html +41 -8
- 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 +41 -8
- package/dist/docs/troubleshooting.html +41 -8
- package/dist/docs/troubleshooting.md +97 -67
- package/dist/evals/assertions.js +19 -19
- package/dist/evals/expect.js +1 -1
- package/dist/evals/judge.js +1 -1
- package/dist/evals/reporters.d.ts.map +1 -1
- package/dist/evals/reporters.js +8 -8
- package/dist/evals/run-facts.js +2 -2
- package/dist/evals.d.ts +1 -1
- package/dist/evals.d.ts.map +1 -1
- package/dist/evals.js +7 -7
- package/dist/extensions/cursor-cloud-agents/extension.js +1 -1
- package/dist/extensions/cursor-cloud-agents/lib/backend.js +3 -3
- package/dist/extensions/cursor-cloud-agents/lib/fleet.js +1 -1
- package/dist/extensions/cursor-cloud-agents/lib/repos.js +6 -6
- package/dist/extensions/cursor-cloud-agents/lib/transcript.d.ts.map +1 -1
- package/dist/extensions/cursor-cloud-agents/lib/transcript.js +2 -2
- package/dist/extensions/cursor-cloud-agents/skills/handoff.md +3 -7
- package/dist/extensions/cursor-cloud-agents/tools/list.js +1 -1
- 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 +2 -2
- package/dist/extensions/slack-communication/extension.d.ts +28 -0
- package/dist/extensions/slack-communication/extension.d.ts.map +1 -0
- package/dist/extensions/slack-communication/extension.js +32 -0
- package/dist/extensions/slack-communication/skills/slack-voice.d.ts +5 -0
- package/dist/extensions/slack-communication/skills/slack-voice.d.ts.map +1 -0
- package/dist/extensions/slack-communication/skills/slack-voice.js +54 -0
- package/dist/extensions/slack-communication/tools/delete-message.d.ts +4 -0
- package/dist/extensions/slack-communication/tools/delete-message.d.ts.map +1 -0
- package/dist/extensions/slack-communication/tools/delete-message.js +29 -0
- package/dist/extensions/slack-communication/tools/edit-message.d.ts +4 -0
- package/dist/extensions/slack-communication/tools/edit-message.d.ts.map +1 -0
- package/dist/extensions/slack-communication/tools/edit-message.js +37 -0
- package/dist/extensions/slack-communication/tools/post-card.d.ts +4 -0
- package/dist/extensions/slack-communication/tools/post-card.d.ts.map +1 -0
- package/dist/extensions/slack-communication/tools/post-card.js +25 -0
- package/dist/extensions/slack-communication/tools/post-file.d.ts +4 -0
- package/dist/extensions/slack-communication/tools/post-file.d.ts.map +1 -0
- package/dist/extensions/slack-communication/tools/post-file.js +76 -0
- package/dist/extensions/slack-communication/tools/post-update.d.ts +4 -0
- package/dist/extensions/slack-communication/tools/post-update.d.ts.map +1 -0
- package/dist/extensions/slack-communication/tools/post-update.js +36 -0
- package/dist/extensions/slack-communication/tools/react.d.ts +4 -0
- package/dist/extensions/slack-communication/tools/react.d.ts.map +1 -0
- package/dist/extensions/slack-communication/tools/react.js +27 -0
- package/dist/extensions/slack-communication/tools/set-status.d.ts +4 -0
- package/dist/extensions/slack-communication/tools/set-status.d.ts.map +1 -0
- package/dist/extensions/slack-communication/tools/set-status.js +18 -0
- package/dist/files-backends/cursor-hosted.d.ts +18 -6
- package/dist/files-backends/cursor-hosted.d.ts.map +1 -1
- package/dist/files-backends/cursor-hosted.js +357 -74
- package/dist/files-backends/local-fs.js +1 -1
- package/dist/files.d.ts +15 -0
- package/dist/files.d.ts.map +1 -1
- package/dist/filesystem.d.ts +46 -2
- package/dist/filesystem.d.ts.map +1 -1
- package/dist/filesystem.js +160 -113
- package/dist/index.d.ts +7 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -7
- package/dist/internal/advertise-tools.js +6 -6
- package/dist/internal/approval-gate.js +1 -1
- package/dist/internal/artifacts-store.js +3 -3
- package/dist/internal/as-of.js +2 -2
- package/dist/internal/authored-alias-hooks.js +1 -1
- package/dist/internal/builtin-tools/reminders.js +2 -2
- package/dist/internal/chat-client.js +5 -5
- package/dist/internal/cli-ax.d.ts +7 -0
- package/dist/internal/cli-ax.d.ts.map +1 -1
- package/dist/internal/cli-ax.js +140 -27
- package/dist/internal/cli-bitbucket.js +10 -10
- package/dist/internal/cli-convert-automation.js +2 -2
- package/dist/internal/cli-cursor.d.ts +3 -11
- package/dist/internal/cli-cursor.d.ts.map +1 -1
- package/dist/internal/cli-cursor.js +5 -10
- package/dist/internal/cli-deploy.d.ts +12 -2
- package/dist/internal/cli-deploy.d.ts.map +1 -1
- package/dist/internal/cli-deploy.js +328 -96
- package/dist/internal/cli-docs.js +5 -5
- package/dist/internal/cli-github.js +15 -16
- package/dist/internal/cli-gitlab.js +10 -10
- package/dist/internal/cli-manifest.js +1 -1
- package/dist/internal/cli-mcp-oauth.d.ts.map +1 -1
- package/dist/internal/cli-mcp-oauth.js +5 -5
- package/dist/internal/cli-mcp.js +3 -3
- package/dist/internal/cli-skills.js +2 -2
- package/dist/internal/cli-slack.js +5 -5
- package/dist/internal/cloud-turn-cost.js +1 -1
- package/dist/internal/continuation-identity.d.ts.map +1 -1
- package/dist/internal/continuation-identity.js +15 -9
- package/dist/internal/conversation-mirror.d.ts.map +1 -1
- package/dist/internal/conversation-mirror.js +33 -2
- package/dist/internal/convert-automation/convert-workflow.js +25 -24
- package/dist/internal/convert-automation/types.d.ts +8 -0
- package/dist/internal/convert-automation/types.d.ts.map +1 -1
- package/dist/internal/cursor/account-mcp.d.ts +2 -2
- package/dist/internal/cursor/account-mcp.d.ts.map +1 -1
- package/dist/internal/cursor/account-mcp.js +32 -27
- package/dist/internal/cursor/backend-client.d.ts +15 -10
- package/dist/internal/cursor/backend-client.d.ts.map +1 -1
- package/dist/internal/cursor/backend-client.js +17 -11
- package/dist/internal/cursor/credentials.js +1 -1
- package/dist/internal/cursor/hosted-store-secrets.d.ts +16 -0
- package/dist/internal/cursor/hosted-store-secrets.d.ts.map +1 -1
- package/dist/internal/cursor/hosted-store-secrets.js +25 -0
- package/dist/internal/cursor-account-mcp-auth.js +9 -9
- 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/cursor-deployment-relay.js +9 -9
- package/dist/internal/cursor-event-relay.js +10 -10
- package/dist/internal/cursor-relay-core.js +2 -2
- package/dist/internal/deploy-client.d.ts +106 -9
- package/dist/internal/deploy-client.d.ts.map +1 -1
- package/dist/internal/deploy-client.js +171 -23
- package/dist/internal/deploy-manifest.d.ts +13 -0
- package/dist/internal/deploy-manifest.d.ts.map +1 -1
- package/dist/internal/deploy-manifest.js +32 -16
- package/dist/internal/discovery/agent-config.d.ts +5 -0
- package/dist/internal/discovery/agent-config.d.ts.map +1 -1
- package/dist/internal/discovery/agent-config.js +27 -0
- package/dist/internal/discovery/agent.d.ts.map +1 -1
- package/dist/internal/discovery/agent.js +10 -8
- package/dist/internal/discovery/channels.js +4 -4
- package/dist/internal/discovery/connections.js +4 -4
- package/dist/internal/discovery/cursor-plugin.js +12 -12
- package/dist/internal/discovery/extension-overlay.js +3 -3
- package/dist/internal/discovery/extensions.js +6 -6
- package/dist/internal/discovery/info.js +9 -9
- package/dist/internal/discovery/instructions.js +1 -1
- package/dist/internal/discovery/project.d.ts.map +1 -1
- package/dist/internal/discovery/project.js +4 -4
- package/dist/internal/discovery/services.js +1 -1
- package/dist/internal/discovery/tools.js +1 -1
- package/dist/internal/docs-site.js +2 -2
- package/dist/internal/env-file.js +1 -1
- package/dist/internal/eval-run-store.d.ts.map +1 -1
- package/dist/internal/eval-run-store.js +7 -7
- package/dist/internal/eval-runner.js +14 -14
- package/dist/internal/evals-client.js +4 -4
- package/dist/internal/event-log.js +8 -8
- package/dist/internal/event-mapper.d.ts +18 -0
- package/dist/internal/event-mapper.d.ts.map +1 -1
- package/dist/internal/event-mapper.js +34 -2
- package/dist/internal/filesystem/format.d.ts.map +1 -1
- package/dist/internal/filesystem/format.js +6 -3
- package/dist/internal/filesystem/scratch.js +3 -3
- package/dist/internal/filesystem/tools.d.ts.map +1 -1
- package/dist/internal/filesystem/tools.js +7 -7
- 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 +35 -12
- package/dist/internal/framework-file-storage.d.ts +6 -2
- package/dist/internal/framework-file-storage.d.ts.map +1 -1
- package/dist/internal/framework-file-storage.js +91 -2
- package/dist/internal/framework-storage-selection.d.ts +0 -6
- package/dist/internal/framework-storage-selection.d.ts.map +1 -1
- package/dist/internal/framework-storage-selection.js +2 -11
- package/dist/internal/github-fanout.js +3 -3
- package/dist/internal/guest-network.js +4 -4
- package/dist/internal/host-files.js +1 -1
- package/dist/internal/host-kv.js +2 -2
- package/dist/internal/hosted-admission-adapter.d.ts +5 -0
- package/dist/internal/hosted-admission-adapter.d.ts.map +1 -1
- package/dist/internal/hosted-catch-protocol.d.ts.map +1 -1
- package/dist/internal/hosted-catch-protocol.js +2 -4
- package/dist/internal/hosted-catch.js +1 -1
- package/dist/internal/hosted-delivery-protocol.d.ts +46 -0
- package/dist/internal/hosted-delivery-protocol.d.ts.map +1 -1
- package/dist/internal/hosted-delivery-protocol.js +126 -9
- package/dist/internal/hosted-delivery.d.ts.map +1 -1
- package/dist/internal/hosted-delivery.js +209 -64
- package/dist/internal/hosted-execution-diag.js +3 -3
- package/dist/internal/hosted-execution-latency.d.ts +80 -0
- package/dist/internal/hosted-execution-latency.d.ts.map +1 -0
- package/dist/internal/hosted-execution-latency.js +220 -0
- package/dist/internal/hosting.d.ts +5 -5
- package/dist/internal/hosting.d.ts.map +1 -1
- package/dist/internal/hosting.js +5 -6
- package/dist/internal/http-channel-define.d.ts +11 -0
- package/dist/internal/http-channel-define.d.ts.map +1 -0
- package/dist/internal/http-channel-define.js +18 -0
- package/dist/internal/http-channel.d.ts +2 -3
- package/dist/internal/http-channel.d.ts.map +1 -1
- package/dist/internal/http-channel.js +3 -4
- package/dist/internal/http-control-plane-session.d.ts +7 -3
- package/dist/internal/http-control-plane-session.d.ts.map +1 -1
- package/dist/internal/http-control-plane-session.js +22 -10
- package/dist/internal/incoming-headers-to-fetch.d.ts +10 -0
- package/dist/internal/incoming-headers-to-fetch.d.ts.map +1 -0
- package/dist/internal/incoming-headers-to-fetch.js +41 -0
- package/dist/internal/init-interview.js +7 -7
- package/dist/internal/init-project.d.ts.map +1 -1
- package/dist/internal/init-project.js +18 -14
- package/dist/internal/init-scaffold.js +1 -1
- package/dist/internal/inline-stdio-mcp.js +2 -2
- package/dist/internal/install-cursor-skills.js +10 -10
- package/dist/internal/json-schema.js +1 -1
- package/dist/internal/local-control-plane.d.ts.map +1 -1
- package/dist/internal/local-control-plane.js +3 -3
- package/dist/internal/local-env.js +3 -3
- package/dist/internal/log-ring.js +1 -1
- package/dist/internal/logs-client.js +1 -1
- package/dist/internal/mcp-endpoint.js +8 -8
- package/dist/internal/mcp-host.js +4 -4
- package/dist/internal/mcp-oauth-on-demand.js +3 -3
- package/dist/internal/mcp-oauth.js +5 -5
- package/dist/internal/net.js +2 -2
- package/dist/internal/otel/config.js +3 -3
- package/dist/internal/otel/runtime.js +13 -13
- package/dist/internal/peer-connections.js +2 -2
- package/dist/internal/platform-schedule-sync.js +1 -1
- package/dist/internal/platform-timers.js +1 -1
- package/dist/internal/playground/static.js +2 -2
- package/dist/internal/playground/toolchain.js +2 -2
- package/dist/internal/playground-proxy.js +3 -3
- package/dist/internal/process-memory-telemetry.js +1 -1
- package/dist/internal/reminder-runner.d.ts.map +1 -1
- package/dist/internal/reminder-runner.js +7 -7
- package/dist/internal/reminder-store.js +1 -1
- package/dist/internal/request-error-status.d.ts.map +1 -1
- package/dist/internal/request-error-status.js +9 -0
- package/dist/internal/resolved-connections.js +8 -8
- package/dist/internal/result-output.d.ts +14 -2
- package/dist/internal/result-output.d.ts.map +1 -1
- package/dist/internal/result-output.js +45 -2
- package/dist/internal/router.js +4 -4
- package/dist/internal/run-client.js +2 -2
- package/dist/internal/schedule-runner.js +6 -6
- package/dist/internal/scm/pr-url.d.ts +3 -1
- package/dist/internal/scm/pr-url.d.ts.map +1 -1
- package/dist/internal/scm/pr-url.js +10 -2
- package/dist/internal/sdk-runner.d.ts.map +1 -1
- package/dist/internal/sdk-runner.js +14 -15
- package/dist/internal/serve-restart.js +1 -1
- package/dist/internal/server.d.ts.map +1 -1
- package/dist/internal/server.js +175 -126
- package/dist/internal/session-cost.js +3 -3
- package/dist/internal/session-engine.d.ts +34 -0
- package/dist/internal/session-engine.d.ts.map +1 -1
- package/dist/internal/session-engine.js +386 -184
- package/dist/internal/session-run-log.d.ts.map +1 -1
- package/dist/internal/session-run-log.js +4 -4
- package/dist/internal/session-store.d.ts +47 -3
- package/dist/internal/session-store.d.ts.map +1 -1
- package/dist/internal/session-store.js +198 -33
- package/dist/internal/sessions-client.js +3 -3
- 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/internal/slack-thread-key.d.ts +7 -0
- package/dist/internal/slack-thread-key.d.ts.map +1 -0
- package/dist/internal/slack-thread-key.js +10 -0
- package/dist/internal/sleep.js +1 -1
- package/dist/internal/storage-coordinator.d.ts +17 -0
- package/dist/internal/storage-coordinator.d.ts.map +1 -1
- package/dist/internal/storage-coordinator.js +111 -11
- package/dist/internal/storage.d.ts +2 -0
- package/dist/internal/storage.d.ts.map +1 -0
- package/dist/internal/storage.js +1 -0
- package/dist/internal/store-mirror.js +4 -4
- package/dist/internal/terminal-style.js +2 -2
- package/dist/internal/tool-result.js +3 -3
- package/dist/internal/trajectory.js +7 -7
- package/dist/internal/turn-governor.js +2 -2
- package/dist/internal/turn-outbox.js +1 -1
- package/dist/internal/update-check.js +2 -2
- package/dist/internal/v2-hosting.d.ts +9 -0
- package/dist/internal/v2-hosting.d.ts.map +1 -1
- package/dist/internal/v2-hosting.js +10 -0
- package/dist/internal/workspace.d.ts +13 -10
- package/dist/internal/workspace.d.ts.map +1 -1
- package/dist/internal/workspace.js +17 -16
- package/dist/kv/memory-kv.d.ts +6 -4
- package/dist/kv/memory-kv.d.ts.map +1 -1
- package/dist/kv/memory-kv.js +9 -7
- package/dist/kv.d.ts +4 -7
- package/dist/kv.d.ts.map +1 -1
- package/dist/kv.js +4 -7
- package/dist/otel-public.d.ts +7 -0
- package/dist/otel-public.d.ts.map +1 -0
- package/dist/otel-public.js +5 -0
- package/dist/otel.d.ts +7 -2
- package/dist/otel.d.ts.map +1 -1
- package/dist/otel.js +7 -2
- package/dist/playground/assets/index-B1c1LeIf.js +67 -0
- package/dist/playground/assets/index-CK2LX3iD.css +1 -0
- package/dist/playground/index.html +2 -2
- package/dist/prompt.js +1 -1
- package/dist/result.d.ts +10 -4
- package/dist/result.d.ts.map +1 -1
- package/dist/result.js +9 -3
- package/dist/storage-backends/cursor-hosted-v2.js +2 -2
- package/dist/storage-backends/cursor-hosted.d.ts +5 -17
- package/dist/storage-backends/cursor-hosted.d.ts.map +1 -1
- package/dist/storage-backends/cursor-hosted.js +6 -20
- package/dist/storage-backends/file-kv.js +7 -7
- package/dist/storage.d.ts +20 -2
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +7 -6
- package/dist/types.d.ts +76 -11
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +12 -4
- package/docs/README.md +85 -152
- package/docs/building-with-agents.md +96 -86
- package/docs/deployment.md +118 -365
- package/docs/evals.md +147 -674
- package/docs/guides/agent-to-agent.md +126 -92
- package/docs/guides/bitbucket.md +250 -49
- package/docs/guides/cloud-agents.md +124 -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 +117 -64
- package/docs/guides/improve.md +112 -59
- package/docs/guides/mcp-oauth.md +112 -122
- package/docs/guides/opentelemetry.md +106 -188
- package/docs/guides/slack.md +171 -192
- package/docs/guides/webhooks.md +155 -387
- package/docs/hillclimbing.md +102 -56
- package/docs/quickstart.md +45 -106
- package/docs/reference/channels.md +0 -16
- package/docs/reference/cli.md +2 -16
- package/docs/reference/connections.md +3 -5
- package/docs/reference/evals.md +298 -0
- package/docs/reference/extensions.md +128 -200
- package/docs/reference/hooks.md +34 -36
- package/docs/reference/http-api.md +5 -5
- package/docs/reference/playground.md +2 -2
- package/docs/reference/project-layout.md +3 -4
- package/docs/reference/sessions.md +5 -4
- package/docs/reference/subagents.md +2 -4
- package/docs/reference/tools.md +2 -5
- package/docs/templates/thermo-quality-review.md +80 -0
- package/docs/templates/thermo-review.md +79 -0
- package/docs/troubleshooting.md +98 -68
- package/package.json +55 -37
- package/skills/framework-map/SKILL.md +2 -2
- package/skills/github/SKILL.md +21 -13
- package/skills/otel/SKILL.md +8 -18
- package/src/bin/agent-serve.ts +115 -72
- package/src/channels/bitbucket/api.ts +8 -8
- package/src/channels/bitbucket/binding.ts +4 -4
- package/src/channels/bitbucket/bitbucket-channel.ts +1 -1
- package/src/channels/bitbucket/bitbucket-webhook.ts +1 -1
- package/src/channels/bitbucket/checks.ts +3 -4
- package/src/channels/bitbucket/cursor-account.ts +1 -1
- package/src/channels/bitbucket/events.ts +1 -1
- package/src/channels/change-monitors/change-monitors-channel.ts +2 -2
- package/src/channels/checks.ts +5 -4
- package/src/channels/deployments/deployments-channel.ts +1 -1
- package/src/channels/github/api.ts +1 -1
- package/src/channels/github/checks.ts +1 -1
- package/src/channels/github/cursor-account.ts +3 -3
- package/src/channels/github/defaults.ts +8 -4
- package/src/channels/github/events.ts +1 -1
- package/src/channels/github/forward.ts +8 -8
- package/src/channels/github/github-channel.ts +48 -21
- package/src/channels/github/progress.ts +7 -2
- package/src/channels/github/state.ts +6 -0
- package/src/channels/github/types.ts +6 -0
- package/src/channels/gitlab/binding.ts +4 -4
- package/src/channels/gitlab/checks.ts +3 -4
- package/src/channels/gitlab/cursor-account.ts +1 -1
- package/src/channels/gitlab/events.ts +1 -1
- package/src/channels/gitlab/gitlab-channel.ts +1 -1
- package/src/channels/gitlab/gitlab-webhook.ts +1 -1
- package/src/channels/gitlab/replay.ts +2 -2
- package/src/channels/origin/binding.ts +6 -3
- package/src/channels/origin/checks.ts +27 -17
- package/src/channels/origin/cursor-account.ts +1 -1
- package/src/channels/origin/defaults.ts +5 -1
- package/src/channels/origin/events.ts +1 -1
- package/src/channels/origin/origin-channel.ts +2 -1
- package/src/channels/origin/origin-webhook.ts +2 -2
- package/src/channels/slack/agentic-delivery.ts +661 -0
- package/src/channels/slack/agentic-posted.ts +148 -0
- package/src/channels/slack/agentic-signals.ts +248 -0
- package/src/channels/slack/api.ts +51 -11
- package/src/channels/slack/approvals.ts +1 -1
- package/src/channels/slack/attachments.ts +1 -1
- package/src/channels/slack/auth.ts +3 -1
- package/src/channels/slack/blocks.ts +3 -3
- package/src/channels/slack/bot-mentions.ts +5 -7
- package/src/channels/slack/channel-watch.ts +1 -1
- package/src/channels/slack/cli-project.ts +3 -3
- package/src/channels/slack/defaults.ts +109 -37
- package/src/channels/slack/dispatch.ts +419 -168
- package/src/channels/slack/doctor.ts +1 -1
- package/src/channels/slack/eval-directive.ts +1 -1
- package/src/channels/slack/external-policy.ts +15 -2
- package/src/channels/slack/footer.ts +108 -0
- package/src/channels/slack/index.ts +2 -0
- package/src/channels/slack/interactive.ts +4 -2
- package/src/channels/slack/live-delivery.ts +23 -7
- package/src/channels/slack/log.ts +1 -1
- package/src/channels/slack/manifest.ts +1 -1
- package/src/channels/slack/nudge-carrier.ts +1 -1
- package/src/channels/slack/nudge-store.ts +2 -2
- package/src/channels/slack/paint-start.ts +93 -0
- package/src/channels/slack/placeholder.ts +366 -0
- package/src/channels/slack/progress-delivery.ts +14 -1
- package/src/channels/slack/reasoning-chip.ts +48 -0
- package/src/channels/slack/recording-sink.ts +176 -0
- package/src/channels/slack/reply-options.ts +71 -15
- package/src/channels/slack/setup.ts +1 -1
- package/src/channels/slack/slack-channel.ts +81 -14
- package/src/channels/slack/socket-mode.ts +2 -2
- package/src/channels/slack/thread-context.ts +5 -5
- package/src/channels/slack/tool-approval-events.ts +54 -38
- package/src/channels/slack/tool-cards.ts +1 -1
- package/src/channels/slack/tool-chip.ts +36 -0
- package/src/channels/slack/types.ts +47 -7
- package/src/channels/slack/upload.ts +142 -0
- package/src/channels.ts +12 -30
- package/src/dashboard-session-url.ts +32 -0
- package/src/evals/assertions.ts +19 -19
- package/src/evals/expect.ts +1 -1
- package/src/evals/judge.ts +1 -1
- package/src/evals/reporters.ts +8 -9
- package/src/evals/run-facts.ts +2 -2
- package/src/evals.ts +7 -10
- package/src/extensions/cursor-cloud-agents/extension.ts +1 -1
- package/src/extensions/cursor-cloud-agents/lib/backend.ts +3 -3
- package/src/extensions/cursor-cloud-agents/lib/fleet.ts +1 -1
- package/src/extensions/cursor-cloud-agents/lib/repos.ts +3 -3
- package/src/extensions/cursor-cloud-agents/lib/transcript.ts +3 -4
- package/src/extensions/cursor-cloud-agents/skills/handoff.md +3 -7
- package/src/extensions/cursor-cloud-agents/tools/list.ts +1 -1
- package/src/extensions/improve/extension.ts +4 -2
- package/src/extensions/improve/skills/yourself.ts +2 -2
- package/src/extensions/slack-communication/evals/harness.ts +728 -0
- package/src/extensions/slack-communication/evals/slack-communication.eval.ts +953 -0
- package/src/extensions/slack-communication/evals/slack-placeholder.eval.ts +194 -0
- package/src/extensions/slack-communication/extension.ts +45 -0
- package/src/extensions/slack-communication/skills/slack-voice.ts +59 -0
- package/src/extensions/slack-communication/tools/delete-message.ts +34 -0
- package/src/extensions/slack-communication/tools/edit-message.ts +42 -0
- package/src/extensions/slack-communication/tools/post-card.ts +28 -0
- package/src/extensions/slack-communication/tools/post-file.ts +85 -0
- package/src/extensions/slack-communication/tools/post-update.ts +41 -0
- package/src/extensions/slack-communication/tools/react.ts +33 -0
- package/src/extensions/slack-communication/tools/set-status.ts +21 -0
- package/src/files-backends/cursor-hosted.ts +502 -98
- package/src/files-backends/local-fs.ts +1 -1
- package/src/files.ts +15 -0
- package/src/filesystem.ts +182 -81
- package/src/index.ts +7 -36
- package/src/internal/advertise-tools.ts +6 -6
- package/src/internal/approval-gate.ts +1 -1
- package/src/internal/artifacts-store.ts +3 -3
- package/src/internal/as-of.ts +2 -2
- package/src/internal/authored-alias-hooks.ts +1 -1
- package/src/internal/authored-loaders.ts +2 -3
- package/src/internal/builtin-tools/reminders.ts +2 -2
- package/src/internal/chat-client.ts +5 -5
- package/src/internal/cli-ax.ts +172 -29
- package/src/internal/cli-bitbucket.ts +11 -11
- package/src/internal/cli-convert-automation.ts +2 -2
- package/src/internal/cli-cursor.ts +5 -16
- package/src/internal/cli-deploy.ts +389 -104
- package/src/internal/cli-docs.ts +5 -5
- package/src/internal/cli-github.ts +16 -19
- package/src/internal/cli-gitlab.ts +11 -11
- package/src/internal/cli-manifest.ts +1 -1
- package/src/internal/cli-mcp-oauth.ts +5 -7
- package/src/internal/cli-mcp.ts +3 -3
- package/src/internal/cli-skills.ts +2 -2
- package/src/internal/cli-slack.ts +5 -5
- package/src/internal/cloud-turn-cost.ts +1 -1
- package/src/internal/continuation-identity.ts +14 -9
- package/src/internal/conversation-mirror.ts +36 -3
- package/src/internal/convert-automation/convert-workflow.ts +27 -27
- package/src/internal/convert-automation/types.ts +9 -0
- package/src/internal/cursor/account-mcp.ts +48 -31
- package/src/internal/cursor/backend-client.ts +28 -17
- package/src/internal/cursor/credentials.ts +1 -1
- package/src/internal/cursor/hosted-store-secrets.ts +34 -0
- package/src/internal/cursor-account-mcp-auth.ts +9 -9
- package/src/internal/cursor-agent-template.ts +2 -0
- package/src/internal/cursor-deployment-relay.ts +10 -10
- package/src/internal/cursor-event-relay.ts +10 -10
- package/src/internal/cursor-relay-core.ts +2 -2
- package/src/internal/deploy-client.ts +266 -24
- package/src/internal/deploy-manifest.ts +46 -8
- package/src/internal/discovery/agent-config.ts +34 -0
- package/src/internal/discovery/agent.ts +14 -6
- package/src/internal/discovery/channels.ts +4 -4
- package/src/internal/discovery/connections.ts +4 -4
- package/src/internal/discovery/cursor-plugin.ts +12 -12
- package/src/internal/discovery/extension-overlay.ts +3 -3
- package/src/internal/discovery/extensions.ts +6 -6
- package/src/internal/discovery/info.ts +9 -9
- package/src/internal/discovery/instructions.ts +1 -1
- package/src/internal/discovery/project.ts +4 -4
- package/src/internal/discovery/services.ts +1 -1
- package/src/internal/discovery/tools.ts +1 -1
- package/src/internal/docs-site.ts +2 -2
- package/src/internal/env-file.ts +2 -2
- package/src/internal/eval-run-store.ts +7 -9
- package/src/internal/eval-runner.ts +20 -20
- package/src/internal/evals-client.ts +6 -6
- package/src/internal/event-log.ts +10 -10
- package/src/internal/event-mapper.ts +37 -2
- package/src/internal/filesystem/format.ts +11 -12
- package/src/internal/filesystem/scratch.ts +3 -3
- package/src/internal/filesystem/tools.ts +8 -8
- package/src/internal/filesystem/walk.ts +61 -16
- package/src/internal/framework-file-storage.ts +104 -4
- package/src/internal/framework-storage-selection.ts +2 -12
- package/src/internal/github-fanout.ts +4 -4
- package/src/internal/guest-network.ts +4 -4
- package/src/internal/host-files.ts +1 -1
- package/src/internal/host-kv.ts +2 -2
- package/src/internal/hosted-admission-adapter.ts +5 -0
- package/src/internal/hosted-catch-protocol.ts +3 -5
- package/src/internal/hosted-catch.ts +1 -1
- package/src/internal/hosted-delivery-protocol.ts +189 -14
- package/src/internal/hosted-delivery.ts +294 -81
- package/src/internal/hosted-execution-diag.ts +3 -3
- package/src/internal/hosted-execution-latency.ts +334 -0
- package/src/internal/hosting.ts +5 -6
- package/src/internal/http-channel-define.ts +27 -0
- package/src/internal/http-channel.ts +3 -4
- package/src/internal/http-control-plane-session.ts +24 -11
- package/src/internal/incoming-headers-to-fetch.ts +54 -0
- package/src/internal/init-interview.ts +7 -7
- package/src/internal/init-project.ts +18 -16
- package/src/internal/init-scaffold.ts +1 -1
- package/src/internal/inline-stdio-mcp.ts +2 -2
- package/src/internal/install-cursor-skills.ts +11 -11
- package/src/internal/json-schema.ts +1 -1
- package/src/internal/local-control-plane.ts +4 -5
- package/src/internal/local-env.ts +3 -3
- package/src/internal/log-ring.ts +1 -1
- package/src/internal/logs-client.ts +1 -1
- package/src/internal/mcp-endpoint.ts +10 -10
- package/src/internal/mcp-host.ts +9 -9
- package/src/internal/mcp-oauth-on-demand.ts +3 -3
- package/src/internal/mcp-oauth.ts +5 -5
- package/src/internal/net.ts +2 -2
- package/src/internal/otel/config.ts +3 -3
- package/src/internal/otel/runtime.ts +14 -14
- package/src/internal/peer-connections.ts +2 -2
- package/src/internal/platform-schedule-sync.ts +1 -1
- package/src/internal/platform-timers.ts +1 -1
- package/src/internal/playground/static.ts +2 -2
- package/src/internal/playground/toolchain.ts +2 -2
- package/src/internal/playground-proxy.ts +3 -3
- package/src/internal/process-memory-telemetry.ts +1 -1
- package/src/internal/reminder-runner.ts +8 -10
- package/src/internal/reminder-store.ts +1 -1
- package/src/internal/request-error-status.ts +9 -0
- package/src/internal/resolved-connections.ts +8 -8
- package/src/internal/result-output.ts +62 -5
- package/src/internal/router.ts +4 -4
- package/src/internal/run-client.ts +2 -2
- package/src/internal/schedule-runner.ts +6 -6
- package/src/internal/scm/pr-url.ts +11 -2
- package/src/internal/sdk-runner.ts +14 -28
- package/src/internal/serve-restart.ts +1 -1
- package/src/internal/server.ts +201 -140
- package/src/internal/session-cost.ts +3 -3
- package/src/internal/session-engine.ts +516 -244
- package/src/internal/session-run-log.ts +4 -6
- package/src/internal/session-store.ts +213 -39
- package/src/internal/sessions-client.ts +3 -3
- package/src/internal/skill-catalog.ts +69 -0
- package/src/internal/slack-thread-key.ts +11 -0
- package/src/internal/sleep.ts +1 -1
- package/src/internal/storage-coordinator.ts +118 -21
- package/src/internal/storage.ts +1 -0
- package/src/internal/store-mirror.ts +4 -4
- package/src/internal/terminal-style.ts +2 -2
- package/src/internal/tool-result.ts +3 -3
- package/src/internal/trajectory.ts +7 -7
- package/src/internal/turn-governor.ts +2 -2
- package/src/internal/turn-outbox.ts +1 -1
- package/src/internal/update-check.ts +2 -2
- package/src/internal/v2-hosting.ts +14 -0
- package/src/internal/workspace.ts +17 -17
- package/src/kv/memory-kv.ts +9 -7
- package/src/kv.ts +4 -7
- package/src/otel-public.ts +24 -0
- package/src/otel.ts +7 -2
- package/src/prompt.ts +1 -1
- package/src/result.ts +10 -8
- package/src/storage-backends/cursor-hosted-v2.ts +2 -2
- package/src/storage-backends/cursor-hosted.ts +6 -23
- package/src/storage-backends/file-kv.ts +7 -7
- package/src/storage.ts +22 -7
- package/src/types.ts +91 -17
- package/templates/agentic-owners/agent/channels/github.ts +3 -6
- package/templates/agentic-owners/agent/lib/github.ts +5 -5
- package/templates/agentic-owners/agent/lib/owners/decision.ts +13 -10
- package/templates/agentic-owners/agent/lib/owners/handles.ts +2 -2
- package/templates/agentic-owners/agent/lib/owners/match.ts +3 -3
- package/templates/agentic-owners/agent/lib/owners/matching.ts +1 -1
- package/templates/agentic-owners/agent/lib/owners/parse.ts +4 -9
- package/templates/agentic-owners/agent/lib/owners/prompt.ts +1 -1
- package/templates/agentic-owners/agent/lib/review.ts +37 -30
- package/templates/agentic-owners/evals/owners.eval.ts +2 -2
- package/templates/agentic-owners/package.json +1 -1
- package/templates/agents-md/agent/lib/collect.ts +16 -10
- package/templates/agents-md/agent/lib/config.ts +1 -1
- package/templates/agents-md/agent/tools/apply_agents.ts +10 -8
- package/templates/agents-md/package.json +1 -1
- package/templates/code-wiki/agent/channels/github.ts +4 -7
- package/templates/code-wiki/agent/lib/repos.ts +1 -1
- package/templates/code-wiki/agent/tools/apply_wiki.ts +3 -4
- package/templates/code-wiki/package.json +1 -1
- package/templates/demo/agent/lib/collect.ts +6 -2
- package/templates/demo/agent/lib/repos.ts +1 -1
- package/templates/demo/agent/tools/record_demo.ts +1 -1
- package/templates/demo/evals/demo.eval.ts +1 -5
- package/templates/demo/package.json +1 -1
- package/templates/grokbot-agents/package.json +1 -1
- package/templates/pr-autofixer/agent/channels/github.ts +16 -13
- package/templates/pr-autofixer/agent/lib/merge-watch.ts +2 -4
- package/templates/pr-autofixer/agent/lib/repos.ts +2 -2
- package/templates/pr-autofixer/agent/lib/webhook-routing.ts +1 -1
- package/templates/pr-autofixer/package.json +1 -1
- package/templates/security-help/agent/lib/repos.ts +1 -1
- package/templates/security-help/package.json +1 -1
- package/templates/security-reviewer/agent/lib/repos.ts +1 -1
- package/templates/security-reviewer/agent/tools/post_findings.ts +1 -3
- package/templates/security-reviewer/package.json +1 -1
- 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/templates/triage/agent/lib/actuate.ts +26 -41
- package/templates/triage/agent/lib/parse-queue-event.ts +2 -1
- package/templates/triage/agent/lib/verify-webhook.ts +10 -5
- package/templates/triage/agent/tools/record_triage.ts +1 -4
- package/templates/triage/package.json +1 -1
- package/dist/client.d.ts +0 -14
- package/dist/client.d.ts.map +0 -1
- package/dist/client.js +0 -12
- package/dist/docs/assets/app.Cr-wVbnB.js +0 -1
- package/dist/docs/assets/building-with-agents.md.D0KbSkJn.js +0 -13
- package/dist/docs/assets/building-with-agents.md.D0KbSkJn.lean.js +0 -1
- package/dist/docs/assets/chunks/@localSearchIndexroot.CFVQ4S17.js +0 -1
- package/dist/docs/assets/concepts.md.B4o63Gul.js +0 -1
- package/dist/docs/assets/concepts.md.B4o63Gul.lean.js +0 -1
- package/dist/docs/assets/deployment.md.JenwuCCB.js +0 -51
- package/dist/docs/assets/deployment.md.JenwuCCB.lean.js +0 -1
- package/dist/docs/assets/evals.md.C7JLjoEP.js +0 -211
- package/dist/docs/assets/evals.md.C7JLjoEP.lean.js +0 -1
- package/dist/docs/assets/guides_agent-to-agent.md.BDb0t1QV.js +0 -10
- package/dist/docs/assets/guides_agent-to-agent.md.BDb0t1QV.lean.js +0 -1
- package/dist/docs/assets/guides_bitbucket.md.DZPzmUjU.js +0 -10
- package/dist/docs/assets/guides_bitbucket.md.DZPzmUjU.lean.js +0 -1
- package/dist/docs/assets/guides_cloud-agents.md.BsloyHdY.js +0 -9
- package/dist/docs/assets/guides_cloud-agents.md.BsloyHdY.lean.js +0 -1
- package/dist/docs/assets/guides_convert-automation.md.B4sjlodG.js +0 -12
- package/dist/docs/assets/guides_convert-automation.md.B4sjlodG.lean.js +0 -1
- package/dist/docs/assets/guides_github.md.TZaTZlfz.js +0 -64
- package/dist/docs/assets/guides_github.md.TZaTZlfz.lean.js +0 -1
- package/dist/docs/assets/guides_gitlab.md.BmqwQfdG.js +0 -14
- package/dist/docs/assets/guides_gitlab.md.BmqwQfdG.lean.js +0 -1
- package/dist/docs/assets/guides_grokbot-agents.md.DyV-WArv.js +0 -9
- package/dist/docs/assets/guides_grokbot-agents.md.DyV-WArv.lean.js +0 -1
- package/dist/docs/assets/guides_human-in-the-loop.md.By1G2T3_.js +0 -28
- package/dist/docs/assets/guides_human-in-the-loop.md.By1G2T3_.lean.js +0 -1
- package/dist/docs/assets/guides_improve.md.BGVk32bK.js +0 -14
- package/dist/docs/assets/guides_improve.md.BGVk32bK.lean.js +0 -1
- package/dist/docs/assets/guides_mcp-oauth.md.Dp6cDP7f.js +0 -28
- package/dist/docs/assets/guides_mcp-oauth.md.Dp6cDP7f.lean.js +0 -1
- package/dist/docs/assets/guides_opentelemetry.md.SCRMskno.js +0 -26
- package/dist/docs/assets/guides_opentelemetry.md.SCRMskno.lean.js +0 -1
- package/dist/docs/assets/guides_slack.md.D4RVMM4G.js +0 -38
- package/dist/docs/assets/guides_slack.md.D4RVMM4G.lean.js +0 -1
- package/dist/docs/assets/guides_webhooks.md.CJK484ex.js +0 -225
- package/dist/docs/assets/guides_webhooks.md.CJK484ex.lean.js +0 -1
- package/dist/docs/assets/hillclimbing.md.BOiVo1tf.js +0 -4
- package/dist/docs/assets/hillclimbing.md.BOiVo1tf.lean.js +0 -1
- package/dist/docs/assets/index.md.DD9Q2XuJ.js +0 -5
- package/dist/docs/assets/index.md.DD9Q2XuJ.lean.js +0 -1
- package/dist/docs/assets/quickstart.md.DdQOF7Y8.lean.js +0 -1
- package/dist/docs/assets/reference_extensions.md.ZAVUyuEX.js +0 -62
- package/dist/docs/assets/reference_extensions.md.ZAVUyuEX.lean.js +0 -1
- package/dist/docs/assets/reference_result.md.BK5SxDrf.js +0 -19
- package/dist/docs/assets/reference_result.md.BK5SxDrf.lean.js +0 -1
- package/dist/docs/assets/scaffolding-agents.md.Kctn3OVb.js +0 -1
- package/dist/docs/assets/scaffolding-agents.md.Kctn3OVb.lean.js +0 -1
- package/dist/docs/assets/skills_create-agent.md.Q3h6Je-e.js +0 -8
- package/dist/docs/assets/skills_create-agent.md.Q3h6Je-e.lean.js +0 -1
- package/dist/docs/assets/skills_debug.md.CVjCXMFF.js +0 -1
- package/dist/docs/assets/skills_debug.md.CVjCXMFF.lean.js +0 -1
- package/dist/docs/assets/skills_deploy.md.CWqi_ZxW.js +0 -35
- package/dist/docs/assets/skills_deploy.md.CWqi_ZxW.lean.js +0 -1
- package/dist/docs/assets/skills_evals.md.DFxYPErF.js +0 -25
- package/dist/docs/assets/skills_evals.md.DFxYPErF.lean.js +0 -1
- package/dist/docs/assets/skills_framework-map.md.BxLSOhSY.js +0 -1
- package/dist/docs/assets/skills_framework-map.md.BxLSOhSY.lean.js +0 -1
- package/dist/docs/assets/skills_github.md.hgFX_oKY.js +0 -16
- package/dist/docs/assets/skills_github.md.hgFX_oKY.lean.js +0 -1
- package/dist/docs/assets/skills_hillclimb.md.B_zJerxA.js +0 -7
- package/dist/docs/assets/skills_hillclimb.md.B_zJerxA.lean.js +0 -1
- package/dist/docs/assets/skills_index.md.DL7EHaQ-.js +0 -1
- package/dist/docs/assets/skills_index.md.DL7EHaQ-.lean.js +0 -1
- package/dist/docs/assets/skills_mcp-auth.md.DGvFP3HE.js +0 -18
- package/dist/docs/assets/skills_mcp-auth.md.DGvFP3HE.lean.js +0 -1
- package/dist/docs/assets/skills_otel.md.B5Ddv1xH.js +0 -8
- package/dist/docs/assets/skills_otel.md.B5Ddv1xH.lean.js +0 -1
- package/dist/docs/assets/skills_setup-slack.md.BBgx8lUz.js +0 -20
- package/dist/docs/assets/skills_setup-slack.md.BBgx8lUz.lean.js +0 -1
- package/dist/docs/assets/storage.md.BUrhJ-Zz.js +0 -30
- package/dist/docs/assets/storage.md.BUrhJ-Zz.lean.js +0 -1
- package/dist/docs/assets/templates_agents-md.md.CXSMZljE.js +0 -2
- package/dist/docs/assets/templates_agents-md.md.CXSMZljE.lean.js +0 -1
- package/dist/docs/assets/templates_code-wiki.md.CDYZIBFN.js +0 -2
- package/dist/docs/assets/templates_code-wiki.md.CDYZIBFN.lean.js +0 -1
- package/dist/docs/assets/templates_demo.md.BeQX9V3H.js +0 -4
- package/dist/docs/assets/templates_demo.md.BeQX9V3H.lean.js +0 -1
- package/dist/docs/assets/templates_grokbot-agents.md.c1s6Flp9.js +0 -3
- package/dist/docs/assets/templates_grokbot-agents.md.c1s6Flp9.lean.js +0 -1
- package/dist/docs/assets/templates_security-help.md.C3Ny_Qr2.js +0 -4
- package/dist/docs/assets/templates_security-help.md.C3Ny_Qr2.lean.js +0 -1
- package/dist/docs/assets/troubleshooting.md.CYEAO9bM.js +0 -1
- package/dist/docs/assets/troubleshooting.md.CYEAO9bM.lean.js +0 -1
- package/dist/docs/concepts.html +0 -27
- package/dist/docs/concepts.md +0 -166
- package/dist/docs/design/filesystem.md +0 -376
- package/dist/docs/design/runtime-abstraction.md +0 -1756
- package/dist/docs/guides/human-in-the-loop.html +0 -54
- package/dist/docs/guides/human-in-the-loop.md +0 -126
- package/dist/docs/reference/result.html +0 -45
- package/dist/docs/reference/result.md +0 -89
- package/dist/docs/scaffolding-agents.html +0 -27
- package/dist/docs/scaffolding-agents.md +0 -130
- package/dist/docs/skills/create-agent.html +0 -34
- package/dist/docs/skills/create-agent.md +0 -160
- package/dist/docs/skills/debug.html +0 -27
- package/dist/docs/skills/debug.md +0 -36
- package/dist/docs/skills/deploy.html +0 -61
- package/dist/docs/skills/deploy.md +0 -161
- package/dist/docs/skills/evals.html +0 -51
- package/dist/docs/skills/evals.md +0 -137
- package/dist/docs/skills/framework-map.html +0 -27
- package/dist/docs/skills/framework-map.md +0 -99
- package/dist/docs/skills/github.html +0 -42
- package/dist/docs/skills/github.md +0 -93
- package/dist/docs/skills/hillclimb.html +0 -33
- package/dist/docs/skills/hillclimb.md +0 -55
- package/dist/docs/skills/index.html +0 -27
- package/dist/docs/skills/index.md +0 -21
- package/dist/docs/skills/mcp-auth.html +0 -44
- package/dist/docs/skills/mcp-auth.md +0 -76
- package/dist/docs/skills/otel.html +0 -34
- package/dist/docs/skills/otel.md +0 -53
- package/dist/docs/skills/setup-slack.html +0 -46
- package/dist/docs/skills/setup-slack.md +0 -141
- package/dist/docs/storage.html +0 -56
- package/dist/docs/storage.md +0 -167
- package/dist/docs/templates/agents-md.html +0 -28
- package/dist/docs/templates/agents-md.md +0 -105
- package/dist/docs/templates/code-wiki.html +0 -28
- package/dist/docs/templates/code-wiki.md +0 -91
- package/dist/docs/templates/demo.html +0 -30
- package/dist/docs/templates/demo.md +0 -80
- package/dist/docs/templates/grokbot-agents.html +0 -29
- package/dist/docs/templates/grokbot-agents.md +0 -48
- package/dist/docs/templates/security-help.html +0 -30
- package/dist/docs/templates/security-help.md +0 -65
- package/dist/internal/tenant-slack/relay.d.ts +0 -75
- package/dist/internal/tenant-slack/relay.d.ts.map +0 -1
- package/dist/internal/tenant-slack/relay.js +0 -148
- package/dist/playground/assets/index-Bhxzrcf6.css +0 -1
- package/dist/playground/assets/index-CqLX5uF3.js +0 -67
- package/docs/concepts.md +0 -171
- package/docs/design/filesystem.md +0 -376
- package/docs/design/runtime-abstraction.md +0 -1756
- package/docs/guides/human-in-the-loop.md +0 -131
- package/docs/reference/result.md +0 -94
- package/docs/scaffolding-agents.md +0 -135
- package/docs/skills/index.md +0 -26
- package/docs/storage.md +0 -172
- package/docs/templates/agents-md.md +0 -110
- package/docs/templates/code-wiki.md +0 -96
- package/docs/templates/demo.md +0 -85
- package/docs/templates/grokbot-agents.md +0 -53
- package/docs/templates/security-help.md +0 -70
- package/src/client.ts +0 -23
- package/src/internal/tenant-slack/relay.ts +0 -203
- package/templates/pr-autofixer/agent/storage.ts +0 -7
package/docs/evals.md
CHANGED
|
@@ -1,783 +1,256 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: "Evals"
|
|
3
|
-
description: "
|
|
3
|
+
description: "Protect agent decisions with fixed inputs, trajectory assertions, and regression checks that run locally or in CI."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Evals
|
|
7
7
|
|
|
8
|
-
An eval sends a fixed
|
|
9
|
-
trajectory
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
month's fix still holds.
|
|
8
|
+
An eval sends a fixed input to the real agent and checks the resulting
|
|
9
|
+
trajectory: whether the turn succeeded, which tools ran, and what shape
|
|
10
|
+
the answer took. Use evals to protect behavior you already understand,
|
|
11
|
+
not to discover what the prompt should do.
|
|
13
12
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
back. The model runs and server tools execute, so
|
|
17
|
-
[keep side effects out of eval sessions](#keep-side-effects-out-of-eval-sessions)
|
|
18
|
-
before you point an eval at an agent that posts anywhere.
|
|
13
|
+
Evals run real model turns and real tools. Guard external writes before
|
|
14
|
+
running a suite against an agent that can post, merge, or deploy.
|
|
19
15
|
|
|
20
|
-
##
|
|
21
|
-
|
|
22
|
-
All three read the same session event stream. Pick by the question you
|
|
23
|
-
are asking.
|
|
24
|
-
|
|
25
|
-
| You want to | Use |
|
|
26
|
-
| --- | --- |
|
|
27
|
-
| Gate one fixed input's behavior, locally and in CI | Evals (this page) |
|
|
28
|
-
| Observe every live session: metrics, audit, alerts | [Hooks](./reference/hooks.md) |
|
|
29
|
-
| Improve an agent one measured round at a time | [Hillclimbing](./hillclimbing.md); each kept win lands an eval |
|
|
30
|
-
|
|
31
|
-
[Hooks, channel events, or evals?](./reference/hooks.md#hooks-channel-events-or-evals)
|
|
32
|
-
has the side-by-side table.
|
|
33
|
-
|
|
34
|
-
### When not to write an eval
|
|
35
|
-
|
|
36
|
-
- Test a server tool's own logic with
|
|
37
|
-
`agent-sdk call <tool> --dir . --input '{...}'` or a unit test. No
|
|
38
|
-
model turn, no credential.
|
|
39
|
-
- Explore a prompt with `agent-sdk run --dir . --message "..."` and
|
|
40
|
-
read the trajectory. Write the eval once you know which decision to
|
|
41
|
-
gate.
|
|
42
|
-
- Stop a bad turn while it runs with
|
|
43
|
-
[`needsApproval`](./reference/tools.md#gate-a-tool-on-human-approval)
|
|
44
|
-
on the tool or [`defineResult`](./reference/result.md). Evals grade
|
|
45
|
-
after the fact.
|
|
46
|
-
|
|
47
|
-
## Write your first eval
|
|
48
|
-
|
|
49
|
-
Evals live under the project-root `evals/` directory, a sibling of
|
|
50
|
-
`agent/`. `agent/evals/` is silently ignored. Discovery loads every
|
|
51
|
-
`.eval.ts` (or `.eval.js`) file under `evals/`, plus one config file.
|
|
52
|
-
|
|
53
|
-
```text
|
|
54
|
-
my-agent/
|
|
55
|
-
agent/
|
|
56
|
-
agent.ts
|
|
57
|
-
tools/inspect_pr.ts
|
|
58
|
-
evals/
|
|
59
|
-
evals.config.ts # required to run: maxConcurrency
|
|
60
|
-
readiness.eval.ts # id: readiness
|
|
61
|
-
prs.eval.ts # cases: prs/checkout, prs/search
|
|
62
|
-
```
|
|
16
|
+
## Protect a tool decision
|
|
63
17
|
|
|
64
|
-
|
|
65
|
-
and
|
|
18
|
+
This smoke case asks for a PR verdict, requires the read-only inspection
|
|
19
|
+
tool, and fails if the agent tries to approve. The CLI reports all three
|
|
20
|
+
decisions together instead of stopping at the first miss.
|
|
66
21
|
|
|
67
22
|
```ts
|
|
68
23
|
// evals/readiness.eval.ts
|
|
69
24
|
import { defineEval, includes } from "@cursor/july/evals";
|
|
70
25
|
|
|
71
26
|
export default defineEval({
|
|
72
|
-
description: "Inspects a PR without approving it.",
|
|
73
27
|
tags: ["smoke"],
|
|
74
|
-
timeoutMs: 120_000,
|
|
75
28
|
async test(t) {
|
|
76
29
|
await t.send(
|
|
77
30
|
"Is https://github.com/acme/checkout/pull/42 ready to approve?"
|
|
78
31
|
);
|
|
32
|
+
|
|
79
33
|
t.succeeded();
|
|
80
34
|
t.calledTool("inspect_pr");
|
|
81
35
|
t.notCalledTool("approve_pr");
|
|
82
|
-
t.check(t.reply, includes(/ready|approve/i));
|
|
36
|
+
t.check(t.reply, includes(/ready|blocked|approve/i));
|
|
83
37
|
},
|
|
84
38
|
});
|
|
85
39
|
```
|
|
86
40
|
|
|
41
|
+
Evals live in the project-root `evals/` directory, beside `agent/`.
|
|
42
|
+
Add the required concurrency config once:
|
|
43
|
+
|
|
87
44
|
```ts
|
|
88
45
|
// evals/evals.config.ts
|
|
89
46
|
import { defineEvalConfig } from "@cursor/july/evals";
|
|
90
47
|
|
|
91
|
-
export default defineEvalConfig({
|
|
48
|
+
export default defineEvalConfig({
|
|
49
|
+
maxConcurrency: 20,
|
|
50
|
+
});
|
|
92
51
|
```
|
|
93
52
|
|
|
94
|
-
Run it under Node 22.13 or newer (never Bun) with a Cursor credential
|
|
95
|
-
in place; see [Credentials](#credentials):
|
|
96
|
-
|
|
97
53
|
```bash
|
|
98
54
|
agent-sdk eval --dir . --list
|
|
99
|
-
agent-sdk eval --dir .
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
```text
|
|
103
|
-
PASS readiness (14.2s) — Inspects a PR without approving it.
|
|
104
|
-
✓ succeeded
|
|
105
|
-
✓ calledTool(inspect_pr)
|
|
106
|
-
✓ notCalledTool(approve_pr)
|
|
107
|
-
✓ check(includes)
|
|
108
|
-
|
|
109
|
-
1 passed, 0 failed, 1 total
|
|
110
|
-
artifacts: <project state directory>/evals/2026-09-11T15-02-11-402Z
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
Every local run writes each case's assertions, inputs, tool calls, and
|
|
114
|
-
`t.log` lines under that artifacts directory. Open
|
|
115
|
-
`evals/<case-id>.json` there when a case fails; see
|
|
116
|
-
[Where results land](#where-results-land).
|
|
117
|
-
|
|
118
|
-
## Name cases by path
|
|
119
|
-
|
|
120
|
-
The file path is the eval's identity, so you don't author an id.
|
|
121
|
-
`evals/builds/api.eval.ts` becomes `builds/api`. An `index` filename
|
|
122
|
-
collapses to its directory: `evals/builds/index.eval.ts` becomes
|
|
123
|
-
`builds`.
|
|
124
|
-
|
|
125
|
-
One file can hold several datapoints through `cases`. Provide either
|
|
126
|
-
`test` or `cases`, not both. Each case id becomes `<fileId>/<case.id>`:
|
|
127
|
-
|
|
128
|
-
```ts
|
|
129
|
-
// evals/prs.eval.ts: prs/checkout, prs/search
|
|
130
|
-
export default defineEval({
|
|
131
|
-
tags: ["smoke", "prs"],
|
|
132
|
-
cases: [
|
|
133
|
-
{
|
|
134
|
-
id: "checkout",
|
|
135
|
-
description: "Checkout PR readiness.",
|
|
136
|
-
async test(t) {
|
|
137
|
-
await t.send(
|
|
138
|
-
"Is https://github.com/acme/checkout/pull/42 ready to approve?"
|
|
139
|
-
);
|
|
140
|
-
t.succeeded();
|
|
141
|
-
t.calledTool("inspect_pr");
|
|
142
|
-
},
|
|
143
|
-
},
|
|
144
|
-
{
|
|
145
|
-
id: "search",
|
|
146
|
-
async test(t) {
|
|
147
|
-
await t.send(
|
|
148
|
-
"Check https://github.com/acme/search/pull/7 before approval."
|
|
149
|
-
);
|
|
150
|
-
t.succeeded();
|
|
151
|
-
t.calledTool("inspect_pr");
|
|
152
|
-
},
|
|
153
|
-
},
|
|
154
|
-
],
|
|
155
|
-
});
|
|
156
|
-
```
|
|
157
|
-
|
|
158
|
-
Case ids are single path segments, unique within the file. A case can
|
|
159
|
-
set its own `description`, `tags`, `timeoutMs`, `iterations`, `judge`,
|
|
160
|
-
`reporters`, and `metadata`. A case-level value replaces the file-level
|
|
161
|
-
one for that datapoint, except `metadata`, which merges with case keys
|
|
162
|
-
winning, and `reporters`, which adds to the file's list. `metadata` is
|
|
163
|
-
free-form data carried onto the result and every reporter.
|
|
164
|
-
|
|
165
|
-
A file may instead export an array of `defineEval` calls to fan out
|
|
166
|
-
over a dataset. Ids are then the file id plus a zero-padded index
|
|
167
|
-
(`sql/0000`, `sql/0001`, ...); see [Load a dataset](#load-a-dataset).
|
|
168
|
-
Prefer `cases` when datapoints are hand-written and deserve stable
|
|
169
|
-
names.
|
|
170
|
-
|
|
171
|
-
### Iterations
|
|
172
|
-
|
|
173
|
-
`iterations` (file or case, default `1`, cap `100`) runs a datapoint
|
|
174
|
-
repeatedly. Discovery expands `iterations: 3` on case `nyc` to runnable
|
|
175
|
-
ids `weather/nyc/1`, `weather/nyc/2`, and `weather/nyc/3`. The filter
|
|
176
|
-
`weather/nyc` still selects all three. Each expanded case exposes
|
|
177
|
-
`t.iteration` and `t.iterations`.
|
|
178
|
-
|
|
179
|
-
`maxConcurrency` counts authored datapoints, not expanded iterations.
|
|
180
|
-
Iterations of one datapoint share a concurrency slot and run in
|
|
181
|
-
sequence, so a suite of 11 cases with 3 iterations each and
|
|
182
|
-
`maxConcurrency: 20` has at most 11 cases in flight.
|
|
183
|
-
|
|
184
|
-
## Drive the agent with `t.send`
|
|
185
|
-
|
|
186
|
-
`t.send(message, options?)` runs one turn and waits for it to settle:
|
|
187
|
-
complete, park on an approval request, or fail. Several sends in one
|
|
188
|
-
case share the session, which is how you write multi-turn evals.
|
|
189
|
-
|
|
190
|
-
Each send resolves to a turn result: `message` (the assistant text),
|
|
191
|
-
`sessionId`, `events`, `toolCalls` (tool names in order), `ok`, and
|
|
192
|
-
`index`. The turn carries the same assertion vocabulary as `t`, scoped
|
|
193
|
-
to that turn, so you can grade an intermediate turn before the next
|
|
194
|
-
send overwrites `t.reply`. `turn.expectOk()` throws when the turn
|
|
195
|
-
failed, for later steps that depend on it.
|
|
196
|
-
|
|
197
|
-
Read the whole case with `t.reply` (last assistant text), `t.events`
|
|
198
|
-
(every event so far), `t.turns` (settled turns, oldest first), and
|
|
199
|
-
`t.sessionId`. `t.signal` aborts when the case hits its timeout; pass
|
|
200
|
-
it to your own async work.
|
|
201
|
-
|
|
202
|
-
Three options apply on the first send only, because they shape session
|
|
203
|
-
creation:
|
|
204
|
-
|
|
205
|
-
| Option | Effect |
|
|
206
|
-
| --- | --- |
|
|
207
|
-
| `workspaceFiles` | `{ path: contents }` seeded into the local session workspace. Prefer this over machine-local paths |
|
|
208
|
-
| `workspaceDir` | Absolute harness cwd for the local runtime |
|
|
209
|
-
| `cloud` | Per-session cloud options merged over the agent's static `cloud` config. Pin a fixture repo here for cloud evals instead of on the agent's default `cloud.repos`. On the cloud runtime, seeded files reach the agent as described under [Where does a turn run?](./concepts.md#where-does-a-turn-run) |
|
|
210
|
-
|
|
211
|
-
```ts
|
|
212
|
-
await t.send("Review pr/diff.patch and post findings.", {
|
|
213
|
-
workspaceFiles: {
|
|
214
|
-
"pr/diff.patch": [
|
|
215
|
-
"diff --git a/app/routes/search.ts b/app/routes/search.ts",
|
|
216
|
-
"+res.send(`<h1>Results for ${req.query.q}</h1>`);",
|
|
217
|
-
].join("\n"),
|
|
218
|
-
},
|
|
219
|
-
});
|
|
220
|
-
```
|
|
221
|
-
|
|
222
|
-
## Assert over the trajectory
|
|
223
|
-
|
|
224
|
-
Assertions record; they never throw. One run reports every failure
|
|
225
|
-
instead of dying on the first. Assertions on `t` read the whole run.
|
|
226
|
-
Assertions on a turn read only that turn.
|
|
227
|
-
|
|
228
|
-
| Gate | Checks |
|
|
229
|
-
| --- | --- |
|
|
230
|
-
| `t.succeeded()` | the run did not fail and is not parked on an unanswered approval |
|
|
231
|
-
| `t.parked()` | the run cleanly parked on an unanswered approval request |
|
|
232
|
-
| `t.messageIncludes(token)` | the joined assistant text matches a string or `RegExp` |
|
|
233
|
-
| `t.calledTool(name, matcher?)` | a matching call to `name` happened |
|
|
234
|
-
| `t.notCalledTool(name)` | no request for `name`, in any lifecycle state |
|
|
235
|
-
| `t.loadedSkill(name)` | the agent opened `skills/<name>/SKILL.md` (read, grep, or shell `cat`) |
|
|
236
|
-
| `t.toolOrder(names)` | tool requests appear in this relative order; extra calls allowed |
|
|
237
|
-
| `t.usedNoTools()` | no tool calls at all |
|
|
238
|
-
| `t.maxToolCalls(max)` | at most `max` tool calls |
|
|
239
|
-
| `t.noFailedActions()` | no tool call reported an error |
|
|
240
|
-
| `t.calledSubagent(name, matcher?)` | a matching subagent delegation happened |
|
|
241
|
-
| `t.taggedArtifact(kind?, predicate?)` | at least one [artifact](./reference/artifacts.md) was tagged |
|
|
242
|
-
| `t.event(type, matcher?)` | at least one matching [event](./reference/sessions.md#which-events-can-i-stream) of `type` |
|
|
243
|
-
| `t.notEvent(type, matcher?)` | no matching event of `type` |
|
|
244
|
-
| `t.eventOrder(matchers)` | matching event groups occur in this relative order |
|
|
245
|
-
| `t.eventsSatisfy(label, predicate)` | your predicate over the typed event stream |
|
|
246
|
-
| `t.check(value, expectation)` | any value, against a [builder](#grade-values-with-expectation-builders) |
|
|
247
|
-
| `t.score(name, value)` | a 0-1 score you computed; soft until you add a bar |
|
|
248
|
-
|
|
249
|
-
Three more assertions gate and return the matched fact. They stop the
|
|
250
|
-
test body when nothing matches, without a duplicate execution error.
|
|
251
|
-
`t.requireToolCall(name, matcher?)` returns the call so later code can
|
|
252
|
-
read its `input` and `output`. `t.requireInputRequest(filter?)` returns
|
|
253
|
-
the single pending approval request. `await t.require(value, expectation)`
|
|
254
|
-
does the same for a value check.
|
|
255
|
-
|
|
256
|
-
A case with no assertions passes when at least one turn completed. Add
|
|
257
|
-
`t.succeeded()` and behavior gates anyway. They make the contract
|
|
258
|
-
visible in review.
|
|
259
|
-
|
|
260
|
-
### What good cases assert
|
|
261
|
-
|
|
262
|
-
Gate decisions and shape, not prose. Model wording varies run to run.
|
|
263
|
-
Tool choice, tool avoidance, and output structure are the stable
|
|
264
|
-
contract.
|
|
265
|
-
|
|
266
|
-
1. `t.succeeded()`: always, first.
|
|
267
|
-
2. The tool decision: `calledTool` for the intended path,
|
|
268
|
-
`notCalledTool` for the likely wrong alternative. The pair is
|
|
269
|
-
stronger than either alone.
|
|
270
|
-
3. Output shape: a regex for the contract (`/ready|blocked/i`, a JSON
|
|
271
|
-
marker, a findings-block fence), never exact sentences.
|
|
272
|
-
4. For structured output, parse `t.reply` and check fields with
|
|
273
|
-
`matches` or `satisfies` instead of substring-matching JSON.
|
|
274
|
-
|
|
275
|
-
The common failure modes: asserting exact phrasing, packing more than
|
|
276
|
-
about five gates into one case (split it), and cases that depend on
|
|
277
|
-
live external state that drifts (pin the input).
|
|
278
|
-
|
|
279
|
-
### Narrow tool assertions with matchers
|
|
280
|
-
|
|
281
|
-
With no matcher, `calledTool` is request-based: a requested call counts
|
|
282
|
-
even before its result arrives. A matcher narrows it:
|
|
283
|
-
|
|
284
|
-
```ts
|
|
285
|
-
t.calledTool("inspect_pr", { status: "completed" });
|
|
286
|
-
t.calledTool("apply_agents", { input: { verdict: "update" } });
|
|
287
|
-
t.calledTool("bash", { input: { command: /^gh pr view/ }, count: 1 });
|
|
288
|
-
t.calledTool("read_file", {
|
|
289
|
-
output: (value) => String(value).includes("TODO"),
|
|
290
|
-
});
|
|
55
|
+
agent-sdk eval --dir . --tag smoke
|
|
291
56
|
```
|
|
292
57
|
|
|
293
|
-
|
|
294
|
-
predicate. Object literals partial-deep-match, so `{ verdict: "update" }`
|
|
295
|
-
matches arguments that also carry other keys. `status` is one of
|
|
296
|
-
`completed`, `failed`, `pending`, or `rejected` (a human denied the
|
|
297
|
-
approval). `calledSubagent` takes `{ output, status, count, callId }`.
|
|
298
|
-
`event`, `notEvent`, and `eventOrder` take `{ data, count }`.
|
|
58
|
+
## Check answer shape or quality
|
|
299
59
|
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
JSON field, a tool's output.
|
|
304
|
-
|
|
305
|
-
| Builder | Checks | Severity |
|
|
306
|
-
| --- | --- | --- |
|
|
307
|
-
| `includes(string \| RegExp)` | substring or match; structured values are stringified first | gate |
|
|
308
|
-
| `equals(value)` | deep equality | gate |
|
|
309
|
-
| `matches(schema)` | a Standard Schema (Zod, Valibot, ...) or anything with `safeParse` | gate |
|
|
310
|
-
| `similarity(expected)` | normalized text similarity, 0-1 | soft |
|
|
311
|
-
| `satisfies(predicate, label)` | your predicate; `label` is the failure detail | gate |
|
|
60
|
+
Prefer a deterministic shape check when the output has a contract. The
|
|
61
|
+
failure tells you which field was wrong, and the case remains stable
|
|
62
|
+
when the model changes its wording.
|
|
312
63
|
|
|
313
64
|
```ts
|
|
314
|
-
import { matches
|
|
65
|
+
import { matches } from "@cursor/july/evals";
|
|
315
66
|
import { z } from "zod";
|
|
316
67
|
|
|
317
68
|
const verdict = JSON.parse(t.reply ?? "{}");
|
|
318
69
|
t.check(
|
|
319
70
|
verdict,
|
|
320
|
-
matches(
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
71
|
+
matches(
|
|
72
|
+
z.object({
|
|
73
|
+
ready: z.boolean(),
|
|
74
|
+
blockers: z.array(z.string()),
|
|
75
|
+
})
|
|
76
|
+
)
|
|
325
77
|
);
|
|
326
78
|
```
|
|
327
79
|
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
### Record without gating
|
|
332
|
-
|
|
333
|
-
- `t.metric(name, value)` records a structured score or label. It shows
|
|
334
|
-
on the CLI result, the playground case card, JUnit output, and
|
|
335
|
-
artifacts.
|
|
336
|
-
- `t.log(message)` records a debug line, streamed under `--verbose`.
|
|
337
|
-
- `t.skip(reason)` ends the case as skipped. Skipped cases report
|
|
338
|
-
separately and never change the exit code. Call it before sending
|
|
339
|
-
messages.
|
|
340
|
-
|
|
341
|
-
## Gates, soft scores, and verdicts
|
|
342
|
-
|
|
343
|
-
Every assertion returns a handle, so severity rides on the assertion
|
|
344
|
-
instead of a separate thresholds map:
|
|
345
|
-
|
|
346
|
-
```ts
|
|
347
|
-
t.succeeded(); // gate (default)
|
|
348
|
-
t.calledTool("get_weather").soft(); // tracked, never fails
|
|
349
|
-
t.check(t.reply, similarity("Sunny, 72°F")).atLeast(0.8); // soft, with a bar
|
|
350
|
-
t.judge.closedQA("cites a source").gate(0.8); // promoted to a gate
|
|
351
|
-
```
|
|
352
|
-
|
|
353
|
-
- `.gate(threshold?)` is hard. A miss fails the case and `eval` exits 1.
|
|
354
|
-
- `.soft(threshold?)` is tracked. With no threshold it never fails.
|
|
355
|
-
- `.atLeast(threshold)` is soft with a bar. A miss marks the case
|
|
356
|
-
`scored`.
|
|
357
|
-
|
|
358
|
-
Each case ends with one verdict:
|
|
359
|
-
|
|
360
|
-
| Verdict | Meaning | Exit code |
|
|
361
|
-
| --- | --- | --- |
|
|
362
|
-
| `passed` | every gate passed and no soft bar was missed | 0 |
|
|
363
|
-
| `failed` | a gate failed, or the test body threw | 1 |
|
|
364
|
-
| `scored` | only soft bars were missed | 0, or 1 under `--strict` |
|
|
365
|
-
| `skipped` | `t.skip(reason)`, or a judge with no credentials | 0 |
|
|
366
|
-
|
|
367
|
-
The CLI prints soft misses as `~` and gate misses as `✗`. Start a new
|
|
368
|
-
benchmark with `t.score("recall", recall)` and `.atLeast()` so its
|
|
369
|
-
number reports for a while without blocking merges. Add `--strict`
|
|
370
|
-
once the bars are trustworthy.
|
|
371
|
-
|
|
372
|
-
## Judge free-form output
|
|
373
|
-
|
|
374
|
-
When wording matters and no regex captures it, `t.judge` grades with an
|
|
375
|
-
LLM. The graders are `factuality(expected)`, `summarizes(expected)`,
|
|
376
|
-
`closedQA(criteria)`, and `sql(expected)`. Each scores `t.reply` by
|
|
377
|
-
default; pass `{ on }` to grade another value.
|
|
80
|
+
Use a judge when correctness depends on meaning that a schema, regex, or
|
|
81
|
+
known value cannot capture:
|
|
378
82
|
|
|
379
83
|
```ts
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
84
|
+
t.judge
|
|
85
|
+
.factuality("The lint step failed on src/sidebar.ts.")
|
|
86
|
+
.atLeast(0.8);
|
|
383
87
|
```
|
|
384
88
|
|
|
385
|
-
Judge
|
|
386
|
-
|
|
387
|
-
|
|
89
|
+
Judge checks are tracked scores until you give them a hard gate.
|
|
90
|
+
Configure the judge model in `evals.config.ts`. The
|
|
91
|
+
[Evals reference](./reference/evals.md#judges) owns grader options and
|
|
92
|
+
severity rules.
|
|
388
93
|
|
|
389
|
-
|
|
390
|
-
`defineEval({ judge })`, a case-level `judge`, or a per-call
|
|
391
|
-
`{ model }`. The nearest one wins. A judge call with no model
|
|
392
|
-
configured fails the case. A judge that cannot reach a model (no
|
|
393
|
-
credential) ends the case as `skipped`, unless a deterministic gate
|
|
394
|
-
already failed.
|
|
94
|
+
## Test a conversation or approval
|
|
395
95
|
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
`t.check`. Anything derived from the agent under test is untrusted
|
|
400
|
-
input to your prompt: wrap it with `fenceUntrusted` and include
|
|
401
|
-
`EVAL_JUDGE_INJECTION_GUARD`, as the built-in graders do.
|
|
96
|
+
Several `t.send` calls in one case share a session. Assertions on a
|
|
97
|
+
returned turn inspect only that turn, while assertions on `t` inspect
|
|
98
|
+
the whole conversation.
|
|
402
99
|
|
|
403
100
|
```ts
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
fenceUntrusted,
|
|
407
|
-
} from "@cursor/july/evals";
|
|
408
|
-
|
|
409
|
-
const gold = ["XSS in search.ts", "open redirect in login.ts"];
|
|
410
|
-
const reply = await t.judge.model(
|
|
411
|
-
[
|
|
412
|
-
"For each GOLD finding, answer whether SUBMISSION reports it.",
|
|
413
|
-
"Reply with one line per finding: <index> YES|NO.",
|
|
414
|
-
EVAL_JUDGE_INJECTION_GUARD,
|
|
415
|
-
fenceUntrusted("GOLD", gold.map((g, i) => `${i + 1}. ${g}`).join("\n")),
|
|
416
|
-
fenceUntrusted("SUBMISSION", t.reply ?? ""),
|
|
417
|
-
].join("\n\n")
|
|
418
|
-
);
|
|
419
|
-
const hits = reply.match(/\bYES\b/g)?.length ?? 0;
|
|
420
|
-
t.score("recall", hits / gold.length).atLeast(0.5);
|
|
421
|
-
```
|
|
422
|
-
|
|
423
|
-
## Keep side effects out of eval sessions
|
|
101
|
+
const first = await t.send("Inspect PR 42.");
|
|
102
|
+
first.calledTool("inspect_pr");
|
|
424
103
|
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
tool, hook, or result handler that actuates:
|
|
430
|
-
|
|
431
|
-
```ts
|
|
432
|
-
// agent/tools/post_findings.ts
|
|
433
|
-
async execute({ findings }, ctx) {
|
|
434
|
-
if (ctx.session.purpose === "eval") {
|
|
435
|
-
return { posted: false, reason: "eval", count: findings.length };
|
|
436
|
-
}
|
|
437
|
-
// post the review
|
|
438
|
-
}
|
|
104
|
+
const followUp = await t.send("Now summarize only the blockers.");
|
|
105
|
+
followUp.usedNoTools();
|
|
106
|
+
t.check(followUp.message, includes(/blocker/i));
|
|
107
|
+
t.succeeded();
|
|
439
108
|
```
|
|
440
109
|
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
The same check belongs in [hooks](./reference/hooks.md) that meter or
|
|
444
|
-
page and in [`defineResult`](./reference/result.md) commits.
|
|
445
|
-
|
|
446
|
-
## Worked examples
|
|
447
|
-
|
|
448
|
-
### Multi-turn: grade each turn
|
|
110
|
+
For a tool that requires approval, the expected result is a parked turn
|
|
111
|
+
instead of a completed one:
|
|
449
112
|
|
|
450
113
|
```ts
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
description: "Introduces itself once; a repeat mention gets a short ack.",
|
|
456
|
-
async test(t) {
|
|
457
|
-
const intro = await t.send("Meet Jenny! @Jenny introduce yourself.");
|
|
458
|
-
intro.expectOk();
|
|
459
|
-
t.check(intro.message, includes(/jenny/i));
|
|
460
|
-
|
|
461
|
-
const repeat = await t.send("Meet, @Jenny!");
|
|
462
|
-
t.succeeded();
|
|
463
|
-
repeat.usedNoTools();
|
|
464
|
-
t.check(
|
|
465
|
-
repeat.message,
|
|
466
|
-
satisfies((r) => (r as string).trim().length <= 280, "short ack")
|
|
467
|
-
);
|
|
468
|
-
t.check(
|
|
469
|
-
repeat.message,
|
|
470
|
-
satisfies((r) => !/what i can do/i.test(r as string), "no second intro")
|
|
471
|
-
);
|
|
472
|
-
},
|
|
114
|
+
await t.send("Apply the approved policy update.");
|
|
115
|
+
t.parked();
|
|
116
|
+
t.calledTool("apply_policy", {
|
|
117
|
+
input: { verdict: "update" },
|
|
473
118
|
});
|
|
474
119
|
```
|
|
475
120
|
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
121
|
+
Pair an approval case with a safe branch that calls
|
|
122
|
+
`t.notCalledTool("apply_policy")`, so both sides of the decision stay
|
|
123
|
+
protected.
|
|
479
124
|
|
|
480
|
-
|
|
125
|
+
## Pin realistic inputs
|
|
481
126
|
|
|
482
|
-
|
|
483
|
-
|
|
127
|
+
A useful eval changes only when the agent changes. Freeze canonical chat
|
|
128
|
+
prompts, seed workspace evidence directly, and save webhook payloads
|
|
129
|
+
instead of depending on a developer's checkout or live external state.
|
|
484
130
|
|
|
485
131
|
```ts
|
|
486
|
-
|
|
487
|
-
{
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
workspaceFiles: {
|
|
493
|
-
"week/prs.md": RULE,
|
|
494
|
-
"week/slack.md": SLACK,
|
|
495
|
-
"week/tree/AGENTS.md.txt": "# API\n\nKeep handlers thin.\n",
|
|
496
|
-
},
|
|
497
|
-
});
|
|
498
|
-
t.parked();
|
|
499
|
-
t.calledTool("apply_agents", { input: { verdict: "update" } });
|
|
132
|
+
await t.send("Review pr/diff.patch and report blockers.", {
|
|
133
|
+
workspaceFiles: {
|
|
134
|
+
"pr/diff.patch": [
|
|
135
|
+
"diff --git a/app/routes/search.ts b/app/routes/search.ts",
|
|
136
|
+
"+res.send(`<h1>Results for ${req.query.q}</h1>`);",
|
|
137
|
+
].join("\n"),
|
|
500
138
|
},
|
|
501
|
-
},
|
|
502
|
-
```
|
|
503
|
-
|
|
504
|
-
`t.parked()` and `t.succeeded()` are exclusive: a parked run is a clean
|
|
505
|
-
stop on an unanswered approval, not a completed one. Pair the parked
|
|
506
|
-
case with a sibling that expects `verdict: "skip"` and `t.succeeded()`,
|
|
507
|
-
so both branches stay pinned.
|
|
508
|
-
|
|
509
|
-
## Pin fixtures
|
|
510
|
-
|
|
511
|
-
A fixed input is what makes an eval repeatable. Pick the fixture by the
|
|
512
|
-
surface under test.
|
|
513
|
-
|
|
514
|
-
| Agent surface | Fixture |
|
|
515
|
-
| --- | --- |
|
|
516
|
-
| Chat or domain assistant | One canonical prompt string, chosen once and frozen |
|
|
517
|
-
| Tool-heavy | Run `agent-sdk call <tool>` first to pin what the tool returns, then freeze the prompt that triggers it |
|
|
518
|
-
| GitHub webhook | `agent-sdk github replay <pr> --events '*' --dry-run --out fixtures/github` snapshots real payloads for offline replay ([GitHub guide](./guides/github.md#test-with-github-replay)) |
|
|
519
|
-
| PR reviewer with host preparation | Diff, metadata, and gold labels pinned to commit SHAs; keep any live PR matrix small |
|
|
520
|
-
| Workspace-dependent | `workspaceFiles` on the first `t.send`, never developer-machine paths |
|
|
521
|
-
|
|
522
|
-
Tag the fast, reliably passing core `smoke` and run `--tag smoke` in
|
|
523
|
-
the inner loop. Leave slow or drift-prone cases untagged for explicit
|
|
524
|
-
runs.
|
|
525
|
-
|
|
526
|
-
### Materialize API-backed fixtures
|
|
527
|
-
|
|
528
|
-
An input that only points at external data (a pull request URL, a
|
|
529
|
-
snapshot id, a pair of commit SHAs) is not self-contained. Fetch it once
|
|
530
|
-
and commit the rendered fixture before you expand the suite:
|
|
531
|
-
|
|
532
|
-
1. Save the diff, metadata, and labels under `fixtures/` at pinned
|
|
533
|
-
revisions.
|
|
534
|
-
2. Seed those files with `workspaceFiles`, or read them from the
|
|
535
|
-
fixture directory.
|
|
536
|
-
3. Assert decisions and output shape against the saved evidence.
|
|
537
|
-
4. Keep a small `smoke` subset for any remaining live checks.
|
|
538
|
-
|
|
539
|
-
`maxConcurrency` limits parallel datapoints, not the model or API
|
|
540
|
-
fan-out inside one datapoint. Materialized fixtures keep a large suite
|
|
541
|
-
from exhausting provider and GitHub rate limits.
|
|
542
|
-
|
|
543
|
-
### Load a dataset
|
|
544
|
-
|
|
545
|
-
Read committed fixtures with `loadJson`, `loadJsonl`, and `loadYaml`
|
|
546
|
-
from `@cursor/july/evals/loaders`. Relative paths resolve against the
|
|
547
|
-
project root the runner discovered, not the cwd the CLI ran from. Eval
|
|
548
|
-
files are ES modules, so top-level `await` can load a dataset and fan
|
|
549
|
-
one file out over it:
|
|
550
|
-
|
|
551
|
-
```ts
|
|
552
|
-
// evals/sql.eval.ts: sql/0000, sql/0001, ...
|
|
553
|
-
import { defineEval, equals } from "@cursor/july/evals";
|
|
554
|
-
import { loadYaml } from "@cursor/july/evals/loaders";
|
|
555
|
-
|
|
556
|
-
const rows = await loadYaml<{ task: string; prompt: string; sql: string }[]>(
|
|
557
|
-
"evals/data/cases.yaml"
|
|
558
|
-
);
|
|
559
|
-
|
|
560
|
-
export default rows.map((row) =>
|
|
561
|
-
defineEval({
|
|
562
|
-
description: row.task,
|
|
563
|
-
async test(t) {
|
|
564
|
-
await t.send(row.prompt);
|
|
565
|
-
t.succeeded();
|
|
566
|
-
t.check(t.reply, equals(row.sql));
|
|
567
|
-
},
|
|
568
|
-
})
|
|
569
|
-
);
|
|
570
|
-
```
|
|
571
|
-
|
|
572
|
-
## Configure eval runs
|
|
573
|
-
|
|
574
|
-
`evals/evals.config.ts` (or `.js`) holds project-wide defaults. It must
|
|
575
|
-
set `maxConcurrency`. Each case issues real model requests, so
|
|
576
|
-
concurrency is hard-capped at 200; the templates use 10.
|
|
577
|
-
`eval --list` works without the file. Running a case does not.
|
|
578
|
-
|
|
579
|
-
```ts
|
|
580
|
-
import { defineEvalConfig } from "@cursor/july/evals";
|
|
581
|
-
|
|
582
|
-
export default defineEvalConfig({
|
|
583
|
-
maxConcurrency: 20,
|
|
584
|
-
timeoutMs: 180_000,
|
|
585
|
-
judge: { model: "gpt-5.4-mini" },
|
|
586
139
|
});
|
|
587
140
|
```
|
|
588
141
|
|
|
589
|
-
|
|
590
|
-
| --- | --- | --- |
|
|
591
|
-
| `maxConcurrency` | required | Datapoints in flight at once, 1-200 |
|
|
592
|
-
| `timeoutMs` | `180_000` | Per-case timeout. Precedence: case or file `timeoutMs`, then `--timeout-ms`, then this value |
|
|
593
|
-
| `judge` | unset | Default judge model for `t.judge.*` |
|
|
594
|
-
| `reporters` | unset | Destinations that observe every case; `--skip-report` suppresses them |
|
|
595
|
-
| `maxPlaygroundRuns` | `20` | Batches kept in playground history (cap 500). Counts `--prod` and `--url` batches, not the default local run |
|
|
596
|
-
|
|
597
|
-
Reporters ship results somewhere; the runner still does the grading.
|
|
598
|
-
`JUnit({ filePath, suiteName? })` writes JUnit XML and
|
|
599
|
-
`Artifacts({ dir })` writes per-case files, both from
|
|
600
|
-
`@cursor/july/evals/reporters`. A custom reporter is an object with any
|
|
601
|
-
of `onRunStart`, `onEvalComplete`, and `onRunComplete`. A reporter that
|
|
602
|
-
throws is logged and never fails the run. CI usually attaches the
|
|
603
|
-
built-in two with `--junit` and `--artifacts` instead of `reporters`,
|
|
604
|
-
so output paths stay with the pipeline, not the eval author.
|
|
605
|
-
|
|
606
|
-
Playground batches survive restarts when the project has
|
|
607
|
-
[storage](./storage.md#eval-table). Otherwise they live in process
|
|
608
|
-
memory until `serve` exits.
|
|
609
|
-
|
|
610
|
-
## Run evals from the CLI
|
|
142
|
+
For GitHub agents, snapshot a PR into committed fixtures:
|
|
611
143
|
|
|
612
144
|
```bash
|
|
613
|
-
agent-sdk
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
agent-sdk eval --dir . --tag smoke --tag pull-request # any matching tag
|
|
618
|
-
agent-sdk eval --dir . --verbose # t.log lines + reply snippets
|
|
619
|
-
agent-sdk eval --dir . --timeout-ms 300000 # override the per-case timeout
|
|
145
|
+
agent-sdk github replay acme/checkout#42 \
|
|
146
|
+
--events '*' \
|
|
147
|
+
--dry-run \
|
|
148
|
+
--out fixtures/github
|
|
620
149
|
```
|
|
621
150
|
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
and
|
|
151
|
+
Keep a small, fast `smoke` set for every change. Put larger datasets and
|
|
152
|
+
drift-prone live cases behind an explicit selection. See
|
|
153
|
+
[Datasets and fixtures](./reference/evals.md#datasets-and-fixtures) for
|
|
154
|
+
loaders and case expansion.
|
|
626
155
|
|
|
627
|
-
|
|
628
|
-
cases don't inherit your checkout's `AGENTS.md` and session state stays
|
|
629
|
-
out of the project. Artifacts still land in the project state
|
|
630
|
-
directory; see [Where results land](#where-results-land). `--slug`
|
|
631
|
-
picks the target in a multi-agent directory.
|
|
156
|
+
## Run and debug a regression suite
|
|
632
157
|
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
`--artifacts`, `--max-concurrency`, `--skip-report`) do not apply. See
|
|
637
|
-
[Run evals in the playground or on a deployment](#run-evals-in-the-playground-or-on-a-deployment).
|
|
158
|
+
Run one case while iterating, then the smoke suite before review. A
|
|
159
|
+
failure artifact records the input, assertions, tool calls, and final
|
|
160
|
+
text, making it the first place to look before changing the prompt.
|
|
638
161
|
|
|
639
162
|
```bash
|
|
640
|
-
agent-sdk eval --
|
|
641
|
-
|
|
163
|
+
agent-sdk eval --dir . readiness
|
|
164
|
+
agent-sdk eval --dir . --tag smoke
|
|
165
|
+
agent-sdk eval --dir . --json
|
|
642
166
|
```
|
|
643
167
|
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
168
|
+
By default, results land under `evals/<stamp>/` in the project state
|
|
169
|
+
directory. Open `evals/<case-id>.json` inside that run directory for the
|
|
170
|
+
failed case. This artifact location is independent of `--state-root`;
|
|
171
|
+
pass `--artifacts <dir>` to choose another destination.
|
|
647
172
|
|
|
648
|
-
Model turns need a
|
|
649
|
-
|
|
650
|
-
`
|
|
651
|
-
`agent-sdk login`. The judge uses the same one. `eval --list` needs
|
|
652
|
-
none.
|
|
653
|
-
|
|
654
|
-
### Where results land
|
|
655
|
-
|
|
656
|
-
Every local run writes artifacts to a timestamped directory under
|
|
657
|
-
`evals/` in the project state directory, whatever `--state-root` says.
|
|
658
|
-
`--artifacts <dir>` chooses the path and `--no-artifacts` skips them.
|
|
659
|
-
The directory holds `summary.json`,
|
|
660
|
-
`results.jsonl`, and `evals/<case-id>.json` with every assertion, the
|
|
661
|
-
inputs, tool calls with arguments and output, the final text, and
|
|
662
|
-
`t.log` lines. Start there when a case fails. `--out <file>` also
|
|
663
|
-
writes the full results JSON to a path of your choice.
|
|
664
|
-
|
|
665
|
-
The artifact does not include the session's event stream. Pass
|
|
666
|
-
`--state-root <path>` to keep the ephemeral server's
|
|
667
|
-
[session data](./reference/sessions.md#where-does-the-agent-sdk-store-session-data)
|
|
668
|
-
on disk when you need the raw events.
|
|
173
|
+
Model turns need a credential. Resolution checks `CURSOR_API_KEY`,
|
|
174
|
+
`CURSOR_API_KEY_FILE`, `CURSOR_SERVICE_ACCOUNT_KEY`, then a saved
|
|
175
|
+
`agent-sdk login`. `eval --list` only discovers cases and needs none.
|
|
669
176
|
|
|
670
177
|
## Run evals in CI
|
|
671
178
|
|
|
672
|
-
|
|
673
|
-
|
|
179
|
+
Write machine-readable output and JUnit annotations, then let a failed
|
|
180
|
+
gate fail the job:
|
|
674
181
|
|
|
675
182
|
```bash
|
|
676
|
-
# CURSOR_API_KEY comes from the CI secret store
|
|
183
|
+
# CURSOR_API_KEY comes from the CI secret store.
|
|
677
184
|
agent-sdk eval --dir . --json --no-stream \
|
|
678
185
|
--junit reports/evals.xml \
|
|
679
186
|
--artifacts reports/evals \
|
|
680
187
|
> reports/evals.json
|
|
681
188
|
```
|
|
682
189
|
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
setting, for example to run lower on a shared runner.
|
|
687
|
-
|
|
688
|
-
The JSON on stdout carries the totals and one result per case:
|
|
689
|
-
|
|
690
|
-
```json
|
|
691
|
-
{
|
|
692
|
-
"ok": true,
|
|
693
|
-
"passed": 1,
|
|
694
|
-
"failed": 0,
|
|
695
|
-
"scored": 0,
|
|
696
|
-
"skipped": 0,
|
|
697
|
-
"strict": false,
|
|
698
|
-
"artifactsDir": "/work/my-agent/reports/evals",
|
|
699
|
-
"results": [
|
|
700
|
-
{
|
|
701
|
-
"id": "readiness",
|
|
702
|
-
"verdict": "passed",
|
|
703
|
-
"ok": true,
|
|
704
|
-
"assertions": [
|
|
705
|
-
{ "name": "succeeded", "passed": true },
|
|
706
|
-
{ "name": "calledTool(inspect_pr)", "passed": true }
|
|
707
|
-
],
|
|
708
|
-
"sessionId": "ses_123",
|
|
709
|
-
"inputs": ["Is https://github.com/acme/checkout/pull/42 ready to approve?"],
|
|
710
|
-
"toolCalls": [{ "toolName": "inspect_pr", "isError": false }],
|
|
711
|
-
"metrics": {},
|
|
712
|
-
"logs": [],
|
|
713
|
-
"durationMs": 12340
|
|
714
|
-
}
|
|
715
|
-
]
|
|
716
|
-
}
|
|
717
|
-
```
|
|
718
|
-
|
|
719
|
-
Each result can also include `description`, `finalText`, `tools`,
|
|
720
|
-
`error`, `skipReason`, `metadata`, `tags`, and tool `args` and `output`.
|
|
721
|
-
A soft miss shows as `"severity": "soft"` with `score` and `threshold`
|
|
722
|
-
on the assertion. This shape lets CI report the failed assertion
|
|
723
|
-
without parsing terminal text.
|
|
190
|
+
Run `--tag smoke` on pull requests and the full suite on a schedule when
|
|
191
|
+
cost or latency makes every-push coverage impractical. Use soft scores
|
|
192
|
+
for a new probabilistic benchmark until its threshold is trustworthy.
|
|
724
193
|
|
|
725
|
-
|
|
194
|
+
The [CLI reference](./reference/cli.md#eval) covers selectors, hosted
|
|
195
|
+
runs, exit codes, and JSON output.
|
|
726
196
|
|
|
727
|
-
|
|
728
|
-
- For probabilistic behavior, use `iterations` and a soft bar instead
|
|
729
|
-
of one hard gate.
|
|
197
|
+
## Keep side effects out of eval sessions
|
|
730
198
|
|
|
731
|
-
|
|
199
|
+
Eval sessions carry `purpose: "eval"`. Check it at the deterministic
|
|
200
|
+
write boundary and return the decision without performing the external
|
|
201
|
+
action:
|
|
732
202
|
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
203
|
+
```ts
|
|
204
|
+
async execute({ findings }, ctx) {
|
|
205
|
+
if (ctx.session.purpose === "eval") {
|
|
206
|
+
return {
|
|
207
|
+
posted: false,
|
|
208
|
+
reason: "eval",
|
|
209
|
+
count: findings.length,
|
|
210
|
+
};
|
|
211
|
+
}
|
|
737
212
|
|
|
738
|
-
|
|
739
|
-
|
|
213
|
+
return await postFindings(findings);
|
|
214
|
+
}
|
|
740
215
|
```
|
|
741
216
|
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
server's playground history:
|
|
217
|
+
This preserves the tool call in the trajectory, so the eval can still
|
|
218
|
+
assert that the agent chose to post.
|
|
745
219
|
|
|
746
|
-
|
|
747
|
-
agent-sdk eval --prod --slug vulnerability-scanner --tag deepsec
|
|
748
|
-
# Eval ID: <evalId>
|
|
749
|
-
# Playground: <deployment>/playground?view=evals&evalRunId=<evalId>
|
|
750
|
-
agent-sdk eval status <evalId> --prod --slug vulnerability-scanner
|
|
751
|
-
agent-sdk eval cancel <evalId> --prod --slug vulnerability-scanner
|
|
752
|
-
```
|
|
220
|
+
## Evals, hooks, or hillclimbing?
|
|
753
221
|
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
[Playground eval routes](./reference/http-api.md#playground-eval-routes).
|
|
222
|
+
Use an eval to gate one fixed input. Use a
|
|
223
|
+
[hook](./reference/hooks.md) to observe every live session for metrics,
|
|
224
|
+
auditing, or alerts. Use [hillclimbing](./hillclimbing.md) to decide
|
|
225
|
+
which source change improves a fixed set of inputs; every kept
|
|
226
|
+
hillclimb change should add an eval.
|
|
760
227
|
|
|
761
|
-
##
|
|
228
|
+
## Gates and scores
|
|
762
229
|
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
230
|
+
`t.succeeded()`, tool assertions, and deterministic checks are hard
|
|
231
|
+
gates by default. A failed gate fails the case. `.soft()` records a
|
|
232
|
+
measurement without blocking, while `.atLeast(threshold)` records a
|
|
233
|
+
score and marks a miss as `scored`.
|
|
234
|
+
|
|
235
|
+
Start with decisions and output shape: the intended tool, the tempting
|
|
236
|
+
wrong tool, and one structural check. Exact prose is rarely a stable
|
|
237
|
+
contract.
|
|
238
|
+
|
|
239
|
+
## Keep improvements with regression evals
|
|
768
240
|
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
241
|
+
Every kept improvement needs an eval that would have failed before the
|
|
242
|
+
change. A tool-choice gate, bounded `maxToolCalls`, or output-shape check
|
|
243
|
+
turns the improvement into a durable contract.
|
|
772
244
|
|
|
773
|
-
|
|
245
|
+
Never weaken an existing gate to make a new implementation pass. That
|
|
246
|
+
moves the freeze line instead of proving the change.
|
|
774
247
|
|
|
775
|
-
|
|
248
|
+
## Related
|
|
776
249
|
|
|
777
|
-
- [
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
- [Sessions
|
|
783
|
-
|
|
250
|
+
- [Evals reference](./reference/evals.md): complete authoring and runner
|
|
251
|
+
contracts
|
|
252
|
+
- [`skills/evals/SKILL.md`](../skills/evals/SKILL.md): author and seed
|
|
253
|
+
cases with a coding agent
|
|
254
|
+
- [Hillclimbing](./hillclimbing.md): measure a change and lock the win
|
|
255
|
+
- [Sessions](./reference/sessions.md): events available to trajectory
|
|
256
|
+
assertions
|