@cursor/july 0.1.91 → 0.1.93
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 +4 -0
- package/README.md +117 -162
- package/dist/channels/deployments/deployments-channel.d.ts +7 -0
- package/dist/channels/deployments/deployments-channel.d.ts.map +1 -1
- package/dist/channels/deployments/deployments-channel.js +26 -2
- package/dist/channels/deployments/types.d.ts +8 -0
- package/dist/channels/deployments/types.d.ts.map +1 -1
- package/dist/channels/github/github-channel.d.ts +3 -0
- package/dist/channels/github/github-channel.d.ts.map +1 -1
- package/dist/channels/github/github-channel.js +28 -56
- package/dist/continuation.d.ts +1 -1
- package/dist/continuation.js +1 -1
- package/dist/docs/404.html +4 -2
- package/dist/docs/ab.html +10 -8
- package/dist/docs/ab.md +332 -0
- package/dist/docs/assets/{ab.md.CVzWxLoB.js → ab.md.DJo5r4R-.js} +4 -4
- package/dist/docs/assets/{ab.md.CVzWxLoB.lean.js → ab.md.DJo5r4R-.lean.js} +1 -1
- package/dist/docs/assets/{app.Bci6CM9E.js → app.CjWU-x0z.js} +1 -1
- package/dist/docs/assets/building-with-agents.md.DI4mEzlt.js +13 -0
- package/dist/docs/assets/{building-with-agents.md.DH8A_cHA.lean.js → building-with-agents.md.DI4mEzlt.lean.js} +1 -1
- package/dist/docs/assets/chunks/@localSearchIndexroot.ChpIC3Zy.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.BCPT6xA-.js → VPLocalSearchBox.Cxy8ySFQ.js} +1 -1
- package/dist/docs/assets/chunks/{theme.BEA8BF3c.js → theme.Dvq1Bktu.js} +2 -2
- package/dist/docs/assets/concepts.md.F6AiPorA.js +1 -0
- package/dist/docs/assets/{concepts.md.CRfU3bVg.lean.js → concepts.md.F6AiPorA.lean.js} +1 -1
- package/dist/docs/assets/{deployment.md.DX_hc3ze.js → deployment.md.DoLFAzfm.js} +6 -6
- package/dist/docs/assets/{evals.md.a0SMN6r9.js → evals.md.lfJoEVc8.js} +6 -6
- package/dist/docs/assets/{evals.md.a0SMN6r9.lean.js → evals.md.lfJoEVc8.lean.js} +1 -1
- package/dist/docs/assets/{example-agents_approval-buddy.md.DNL83puR.js → example-agents_approval-buddy.md.DmezILPg.js} +1 -1
- package/dist/docs/assets/{example-agents_benny.md.C40vHRLc.js → example-agents_benny.md.B0kwY7D_.js} +2 -4
- package/dist/docs/assets/{example-agents_benny.md.C40vHRLc.lean.js → example-agents_benny.md.B0kwY7D_.lean.js} +1 -1
- package/dist/docs/assets/{example-agents_codebase-wiki.md.Dftj_tPp.js → example-agents_codebase-wiki.md.BBNw9Ekr.js} +3 -3
- package/dist/docs/assets/{example-agents_codebase-wiki.md.Dftj_tPp.lean.js → example-agents_codebase-wiki.md.BBNw9Ekr.lean.js} +1 -1
- package/dist/docs/assets/{example-agents_concierge.md.MrKpQndp.js → example-agents_concierge.md.BzB2b20R.js} +2 -3
- package/dist/docs/assets/example-agents_index.md.ChBp0AX6.js +2 -0
- package/dist/docs/assets/example-agents_index.md.ChBp0AX6.lean.js +1 -0
- package/dist/docs/assets/{example-agents_knowledge-base.md.DqKqHQ9u.js → example-agents_knowledge-base.md.CrA85ig-.js} +1 -1
- package/dist/docs/assets/{example-agents_security-reviewer.md.Bai6D0Ee.js → example-agents_security-reviewer.md.74pPpWYj.js} +1 -1
- package/dist/docs/assets/{example-agents_weather-agent.md.lVEAbWFf.js → example-agents_weather-agent.md.CaGpmw3Y.js} +2 -2
- package/dist/docs/assets/{guides_agent-to-agent.md.BCeVdJRJ.js → guides_agent-to-agent.md.B3JIaAqz.js} +1 -1
- package/dist/docs/assets/{guides_cloud-runtime.md.BSMLIBHr.js → guides_cloud-runtime.md.BnvjPiia.js} +2 -2
- package/dist/docs/assets/{guides_cloud-runtime.md.BSMLIBHr.lean.js → guides_cloud-runtime.md.BnvjPiia.lean.js} +1 -1
- package/dist/docs/assets/{guides_convert-automation.md.D06eIzea.js → guides_convert-automation.md.Bboisykk.js} +1 -1
- package/dist/docs/assets/{guides_github.md.Cdt1s2QC.js → guides_github.md.DqJhuaN1.js} +5 -5
- package/dist/docs/assets/{guides_github.md.Cdt1s2QC.lean.js → guides_github.md.DqJhuaN1.lean.js} +1 -1
- package/dist/docs/assets/{guides_mcp-oauth.md.Du0f7pGU.js → guides_mcp-oauth.md.CJvrXtkN.js} +2 -2
- package/dist/docs/assets/{guides_slack.md.DiUmk_Oi.js → guides_slack.md.mqeNKs84.js} +2 -2
- package/dist/docs/assets/{guides_webhooks.md.BpnIdO0i.js → guides_webhooks.md.DKdA43Qm.js} +2 -2
- package/dist/docs/assets/{hillclimbing.md.ywF3yDAd.js → hillclimbing.md.DhESf3OO.js} +1 -1
- package/dist/docs/assets/{index.md.BAaMXLFd.js → index.md.B-lVR4wT.js} +3 -3
- package/dist/docs/assets/{index.md.BAaMXLFd.lean.js → index.md.B-lVR4wT.lean.js} +1 -1
- package/dist/docs/assets/{quickstart.md.DsrarzEg.js → quickstart.md.BrmfrrIr.js} +1 -1
- package/dist/docs/assets/{reference_agent-config.md.Bqylgw50.js → reference_agent-config.md.Cp_x38Nl.js} +3 -3
- package/dist/docs/assets/{reference_channels.md.DQZjCnyh.js → reference_channels.md.Cd2f2iyV.js} +2 -2
- package/dist/docs/assets/{reference_channels.md.DQZjCnyh.lean.js → reference_channels.md.Cd2f2iyV.lean.js} +1 -1
- package/dist/docs/assets/{reference_cli.md.B7GkAJRC.js → reference_cli.md.D9KESDsD.js} +10 -11
- package/dist/docs/assets/{reference_cli.md.B7GkAJRC.lean.js → reference_cli.md.D9KESDsD.lean.js} +1 -1
- package/dist/docs/assets/{reference_connections.md.DYidrb-j.js → reference_connections.md.DB6SsN6U.js} +3 -3
- package/dist/docs/assets/reference_hooks.md.BxN87gCw.js +14 -0
- package/dist/docs/assets/{reference_hooks.md.B9FSgdDe.lean.js → reference_hooks.md.BxN87gCw.lean.js} +1 -1
- package/dist/docs/assets/reference_http-api.md.C68BERYr.js +11 -0
- package/dist/docs/assets/reference_http-api.md.C68BERYr.lean.js +1 -0
- package/dist/docs/assets/{reference_instructions.md.DhNCOl7r.js → reference_instructions.md.CR7XSsGk.js} +3 -3
- package/dist/docs/assets/{reference_instructions.md.DhNCOl7r.lean.js → reference_instructions.md.CR7XSsGk.lean.js} +1 -1
- package/dist/docs/assets/reference_playground.md.DnX5nL-B.js +1 -0
- package/dist/docs/assets/reference_playground.md.DnX5nL-B.lean.js +1 -0
- package/dist/docs/assets/{reference_project-layout.md.CwkSbEWT.js → reference_project-layout.md.WN9nwJht.js} +2 -2
- package/dist/docs/assets/{reference_prompt.md.DZUMtLPD.js → reference_prompt.md.DnaD5dNK.js} +1 -1
- package/dist/docs/assets/{reference_schedules.md.DNipebiG.js → reference_schedules.md.DI_JrHgq.js} +1 -1
- package/dist/docs/assets/reference_sessions.md.D0mIh4KK.js +1 -0
- package/dist/docs/assets/{reference_sessions.md.tUFzz98S.lean.js → reference_sessions.md.D0mIh4KK.lean.js} +1 -1
- package/dist/docs/assets/{reference_skills.md.B5ZEuHfG.js → reference_skills.md.BFW9retM.js} +1 -1
- package/dist/docs/assets/{reference_tools.md.wpaJtHn6.js → reference_tools.md.DuKvkYWG.js} +4 -4
- package/dist/docs/assets/{reference_tools.md.wpaJtHn6.lean.js → reference_tools.md.DuKvkYWG.lean.js} +1 -1
- package/dist/docs/assets/scaffolding-agents.md.D7UUkWw0.js +1 -0
- package/dist/docs/assets/{scaffolding-agents.md.CRDDUtYJ.lean.js → scaffolding-agents.md.D7UUkWw0.lean.js} +1 -1
- package/dist/docs/assets/{storage.md.JbjlHWZ6.js → storage.md.BOHeqk2M.js} +5 -5
- package/dist/docs/assets/{storage.md.JbjlHWZ6.lean.js → storage.md.BOHeqk2M.lean.js} +1 -1
- package/dist/docs/assets/{templates_agentic-owners.md.DSJSIpWU.js → templates_agentic-owners.md.DqtPdm6f.js} +2 -2
- package/dist/docs/assets/{templates_pr-autofixer.md.1HAR3RXE.js → templates_pr-autofixer.md.R4K_qytS.js} +2 -2
- package/dist/docs/assets/{templates_pr-autofixer.md.1HAR3RXE.lean.js → templates_pr-autofixer.md.R4K_qytS.lean.js} +1 -1
- package/dist/docs/assets/troubleshooting.md.vCWwvqcJ.js +1 -0
- package/dist/docs/assets/{troubleshooting.md.DYECCZiJ.lean.js → troubleshooting.md.vCWwvqcJ.lean.js} +1 -1
- package/dist/docs/building-with-agents.html +9 -7
- package/dist/docs/building-with-agents.md +118 -0
- package/dist/docs/concepts.html +7 -8
- package/dist/docs/concepts.md +169 -0
- package/dist/docs/deployment.html +13 -11
- package/dist/docs/deployment.md +462 -0
- package/dist/docs/evals.html +12 -10
- package/dist/docs/evals.md +460 -0
- package/dist/docs/example-agents/approval-buddy.html +7 -5
- package/dist/docs/example-agents/approval-buddy.md +266 -0
- package/dist/docs/example-agents/benny.html +7 -7
- package/dist/docs/example-agents/benny.md +173 -0
- package/dist/docs/example-agents/bugbot.html +6 -4
- package/dist/docs/example-agents/bugbot.md +229 -0
- package/dist/docs/example-agents/codebase-wiki.html +8 -6
- package/dist/docs/example-agents/codebase-wiki.md +167 -0
- package/dist/docs/example-agents/codeowners-review.html +6 -4
- package/dist/docs/example-agents/codeowners-review.md +192 -0
- package/dist/docs/example-agents/concierge.html +9 -8
- package/dist/docs/example-agents/concierge.md +200 -0
- package/dist/docs/example-agents/index.html +8 -6
- package/dist/docs/example-agents/index.md +99 -0
- package/dist/docs/example-agents/knowledge-base.html +8 -6
- package/dist/docs/example-agents/knowledge-base.md +168 -0
- package/dist/docs/example-agents/oncall.html +6 -4
- package/dist/docs/example-agents/oncall.md +212 -0
- package/dist/docs/example-agents/security-reviewer.html +9 -7
- package/dist/docs/example-agents/security-reviewer.md +265 -0
- package/dist/docs/example-agents/slack-agent.html +6 -4
- package/dist/docs/example-agents/slack-agent.md +142 -0
- package/dist/docs/example-agents/weather-agent.html +9 -7
- package/dist/docs/example-agents/weather-agent.md +297 -0
- package/dist/docs/guides/agent-to-agent.html +7 -5
- package/dist/docs/guides/agent-to-agent.md +113 -0
- package/dist/docs/guides/cloud-runtime.html +8 -6
- package/dist/docs/guides/cloud-runtime.md +114 -0
- package/dist/docs/guides/convert-automation.html +8 -6
- package/dist/docs/guides/convert-automation.md +171 -0
- package/dist/docs/guides/github.html +11 -9
- package/dist/docs/guides/github.md +275 -0
- package/dist/docs/guides/human-in-the-loop.html +6 -4
- package/dist/docs/guides/human-in-the-loop.md +126 -0
- package/dist/docs/guides/mcp-oauth.html +8 -6
- package/dist/docs/guides/mcp-oauth.md +159 -0
- package/dist/docs/guides/opentelemetry.html +6 -4
- package/dist/docs/guides/opentelemetry.md +209 -0
- package/dist/docs/guides/slack.html +9 -7
- package/dist/docs/guides/slack.md +337 -0
- package/dist/docs/guides/webhooks.html +8 -6
- package/dist/docs/guides/webhooks.md +463 -0
- package/dist/docs/hashmap.json +1 -1
- package/dist/docs/hillclimbing.html +8 -6
- package/dist/docs/hillclimbing.md +88 -0
- package/dist/docs/index.html +8 -6
- package/dist/docs/index.md +171 -0
- package/dist/docs/llms-full.txt +10968 -0
- package/dist/docs/llms.txt +74 -0
- package/dist/docs/quickstart.html +7 -5
- package/dist/docs/quickstart.md +364 -0
- package/dist/docs/reference/agent-config.html +10 -8
- package/dist/docs/reference/agent-config.md +251 -0
- package/dist/docs/reference/artifacts.html +6 -4
- package/dist/docs/reference/artifacts.md +112 -0
- package/dist/docs/reference/channels.html +8 -6
- package/dist/docs/reference/channels.md +244 -0
- package/dist/docs/reference/cli.html +16 -15
- package/dist/docs/reference/cli.md +947 -0
- package/dist/docs/reference/connections.html +10 -8
- package/dist/docs/reference/connections.md +263 -0
- package/dist/docs/reference/hooks.html +8 -6
- package/dist/docs/reference/hooks.md +98 -0
- package/dist/docs/reference/http-api.html +9 -7
- package/dist/docs/reference/http-api.md +247 -0
- package/dist/docs/reference/instructions.html +8 -6
- package/dist/docs/reference/instructions.md +74 -0
- package/dist/docs/reference/playground.html +7 -5
- package/dist/docs/reference/playground.md +57 -0
- package/dist/docs/reference/project-layout.html +9 -7
- package/dist/docs/reference/project-layout.md +107 -0
- package/dist/docs/reference/prompt.html +8 -6
- package/dist/docs/reference/prompt.md +42 -0
- package/dist/docs/reference/schedules.html +8 -6
- package/dist/docs/reference/schedules.md +214 -0
- package/dist/docs/reference/sessions.html +7 -12
- package/dist/docs/reference/sessions.md +159 -0
- package/dist/docs/reference/skills.html +8 -6
- package/dist/docs/reference/skills.md +83 -0
- package/dist/docs/reference/subagents.html +6 -4
- package/dist/docs/reference/subagents.md +71 -0
- package/dist/docs/reference/tools.html +10 -8
- package/dist/docs/reference/tools.md +293 -0
- package/dist/docs/scaffolding-agents.html +7 -5
- package/dist/docs/scaffolding-agents.md +129 -0
- package/dist/docs/storage.html +11 -9
- package/dist/docs/storage.md +176 -0
- package/dist/docs/templates/agentic-owners.html +9 -7
- package/dist/docs/templates/agentic-owners.md +92 -0
- package/dist/docs/templates/demo.html +6 -4
- package/dist/docs/templates/demo.md +79 -0
- package/dist/docs/templates/pr-autofixer.html +8 -6
- package/dist/docs/templates/pr-autofixer.md +128 -0
- package/dist/docs/templates/security-reviewer.html +6 -4
- package/dist/docs/templates/security-reviewer.md +84 -0
- package/dist/docs/templates/triage.html +6 -4
- package/dist/docs/templates/triage.md +98 -0
- package/dist/docs/troubleshooting.html +7 -5
- package/dist/docs/troubleshooting.md +111 -0
- package/dist/internal/authored-alias-hooks.d.ts +14 -11
- package/dist/internal/authored-alias-hooks.d.ts.map +1 -1
- package/dist/internal/authored-alias-hooks.js +14 -11
- package/dist/internal/authored-loaders.d.ts +7 -6
- package/dist/internal/authored-loaders.d.ts.map +1 -1
- package/dist/internal/authored-loaders.js +14 -10
- package/dist/internal/cli-deploy.d.ts +1 -1
- package/dist/internal/cli-deploy.js +5 -5
- package/dist/internal/continuation-channel.d.ts +6 -3
- package/dist/internal/continuation-channel.d.ts.map +1 -1
- package/dist/internal/continuation-channel.js +44 -40
- package/dist/internal/continuation-identity.d.ts +17 -16
- package/dist/internal/continuation-identity.d.ts.map +1 -1
- package/dist/internal/continuation-identity.js +109 -36
- package/dist/internal/deploy-manifest.d.ts +2 -2
- package/dist/internal/deploy-manifest.d.ts.map +1 -1
- package/dist/internal/deploy-manifest.js +4 -9
- package/dist/internal/discovery.d.ts.map +1 -1
- package/dist/internal/discovery.js +3 -0
- package/dist/internal/distribution.d.ts +4 -3
- package/dist/internal/distribution.d.ts.map +1 -1
- package/dist/internal/distribution.js +4 -3
- package/dist/internal/hosted-delivery-protocol.d.ts +38 -0
- package/dist/internal/hosted-delivery-protocol.d.ts.map +1 -0
- package/dist/internal/hosted-delivery-protocol.js +70 -0
- package/dist/internal/hosted-delivery.d.ts +35 -0
- package/dist/internal/hosted-delivery.d.ts.map +1 -0
- package/dist/internal/hosted-delivery.js +226 -0
- package/dist/internal/http-channel.d.ts.map +1 -1
- package/dist/internal/http-channel.js +1 -1
- package/dist/internal/init-scaffold.d.ts.map +1 -1
- package/dist/internal/init-scaffold.js +1 -0
- package/dist/internal/playground/static.d.ts.map +1 -1
- package/dist/internal/playground/static.js +2 -0
- package/dist/internal/review-comments.d.ts +186 -63
- package/dist/internal/review-comments.d.ts.map +1 -1
- package/dist/internal/review-comments.js +350 -168
- package/dist/internal/server.d.ts.map +1 -1
- package/dist/internal/server.js +21 -3
- package/dist/internal/session-engine.d.ts +5 -0
- package/dist/internal/session-engine.d.ts.map +1 -1
- package/dist/internal/session-engine.js +16 -4
- package/dist/internal/shallow-clone.d.ts +8 -2
- package/dist/internal/shallow-clone.d.ts.map +1 -1
- package/dist/internal/shallow-clone.js +17 -10
- package/dist/playground/assets/{index-DDvyC2z6.js → index-D9MFzhNE.js} +1 -1
- package/dist/playground/index.html +1 -1
- package/dist/types.d.ts +9 -17
- package/dist/types.d.ts.map +1 -1
- package/docs/README.md +2 -10
- package/docs/ab.md +7 -13
- package/docs/building-with-agents.md +5 -11
- package/docs/concepts.md +12 -17
- package/docs/deployment.md +8 -10
- package/docs/evals.md +16 -37
- package/docs/example-agents/approval-buddy.md +1 -1
- package/docs/example-agents/benny.md +4 -13
- package/docs/example-agents/codebase-wiki.md +5 -8
- package/docs/example-agents/concierge.md +2 -3
- package/docs/example-agents/index.md +6 -9
- package/docs/example-agents/knowledge-base.md +2 -2
- package/docs/example-agents/security-reviewer.md +5 -5
- package/docs/example-agents/weather-agent.md +4 -3
- package/docs/guides/agent-to-agent.md +1 -1
- package/docs/guides/cloud-runtime.md +8 -25
- package/docs/guides/convert-automation.md +3 -3
- package/docs/guides/github.md +11 -23
- package/docs/guides/mcp-oauth.md +4 -4
- package/docs/guides/slack.md +4 -4
- package/docs/guides/webhooks.md +3 -3
- package/docs/hillclimbing.md +1 -1
- package/docs/quickstart.md +1 -1
- package/docs/reference/agent-config.md +10 -15
- package/docs/reference/channels.md +20 -31
- package/docs/reference/cli.md +27 -37
- package/docs/reference/connections.md +9 -14
- package/docs/reference/hooks.md +10 -14
- package/docs/reference/http-api.md +18 -38
- package/docs/reference/instructions.md +1 -1
- package/docs/reference/playground.md +14 -19
- package/docs/reference/project-layout.md +2 -2
- package/docs/reference/prompt.md +1 -1
- package/docs/reference/schedules.md +1 -2
- package/docs/reference/sessions.md +8 -19
- package/docs/reference/skills.md +3 -3
- package/docs/reference/tools.md +12 -17
- package/docs/scaffolding-agents.md +4 -5
- package/docs/storage.md +37 -80
- package/docs/templates/agentic-owners.md +2 -2
- package/docs/templates/pr-autofixer.md +3 -6
- package/docs/troubleshooting.md +6 -6
- package/package.json +9 -2
- package/skills/ab/SKILL.md +3 -0
- package/skills/create-agent/SKILL.md +3 -0
- package/skills/debug/SKILL.md +3 -0
- package/skills/evals/SKILL.md +3 -0
- package/skills/framework-map/SKILL.md +3 -0
- package/skills/github/SKILL.md +3 -0
- package/skills/hillclimb/SKILL.md +3 -0
- package/skills/mcp-auth/SKILL.md +3 -0
- package/skills/otel/SKILL.md +3 -0
- package/skills/setup-slack/SKILL.md +3 -0
- package/src/channels/deployments/deployments-channel.ts +32 -2
- package/src/channels/deployments/types.ts +8 -0
- package/src/channels/github/github-channel.ts +71 -21
- package/src/continuation.ts +1 -1
- package/src/internal/authored-alias-hooks.ts +14 -11
- package/src/internal/authored-loaders.ts +14 -10
- package/src/internal/cli-deploy.ts +5 -5
- package/src/internal/continuation-channel.ts +62 -45
- package/src/internal/continuation-identity.ts +123 -38
- package/src/internal/deploy-manifest.ts +5 -9
- package/src/internal/discovery.ts +3 -0
- package/src/internal/distribution.ts +4 -3
- package/src/internal/hosted-delivery-protocol.ts +114 -0
- package/src/internal/hosted-delivery.ts +327 -0
- package/src/internal/http-channel.ts +0 -2
- package/src/internal/init-scaffold.ts +1 -0
- package/src/internal/playground/static.ts +2 -0
- package/src/internal/review-comments.ts +542 -229
- package/src/internal/server.ts +29 -2
- package/src/internal/session-engine.ts +29 -7
- package/src/internal/shallow-clone.ts +30 -16
- package/src/types.ts +9 -17
- package/dist/docs/assets/building-with-agents.md.DH8A_cHA.js +0 -13
- package/dist/docs/assets/chunks/@localSearchIndexroot.Dv-Q0XtU.js +0 -1
- package/dist/docs/assets/concepts.md.CRfU3bVg.js +0 -4
- package/dist/docs/assets/example-agents_fsd.md.ZWHWWZPE.js +0 -15
- package/dist/docs/assets/example-agents_fsd.md.ZWHWWZPE.lean.js +0 -1
- package/dist/docs/assets/example-agents_index.md.QZ8mhr6n.js +0 -2
- package/dist/docs/assets/example-agents_index.md.QZ8mhr6n.lean.js +0 -1
- package/dist/docs/assets/reference_hooks.md.B9FSgdDe.js +0 -14
- package/dist/docs/assets/reference_http-api.md.CSHVobzG.js +0 -11
- package/dist/docs/assets/reference_http-api.md.CSHVobzG.lean.js +0 -1
- package/dist/docs/assets/reference_playground.md.Dfb92yQf.js +0 -1
- package/dist/docs/assets/reference_playground.md.Dfb92yQf.lean.js +0 -1
- package/dist/docs/assets/reference_sessions.md.tUFzz98S.js +0 -8
- package/dist/docs/assets/scaffolding-agents.md.CRDDUtYJ.js +0 -1
- package/dist/docs/assets/troubleshooting.md.DYECCZiJ.js +0 -1
- package/dist/docs/example-agents/fsd.html +0 -39
- package/docs/example-agents/fsd.md +0 -334
- /package/dist/docs/assets/{deployment.md.DX_hc3ze.lean.js → deployment.md.DoLFAzfm.lean.js} +0 -0
- /package/dist/docs/assets/{example-agents_approval-buddy.md.DNL83puR.lean.js → example-agents_approval-buddy.md.DmezILPg.lean.js} +0 -0
- /package/dist/docs/assets/{example-agents_concierge.md.MrKpQndp.lean.js → example-agents_concierge.md.BzB2b20R.lean.js} +0 -0
- /package/dist/docs/assets/{example-agents_knowledge-base.md.DqKqHQ9u.lean.js → example-agents_knowledge-base.md.CrA85ig-.lean.js} +0 -0
- /package/dist/docs/assets/{example-agents_security-reviewer.md.Bai6D0Ee.lean.js → example-agents_security-reviewer.md.74pPpWYj.lean.js} +0 -0
- /package/dist/docs/assets/{example-agents_weather-agent.md.lVEAbWFf.lean.js → example-agents_weather-agent.md.CaGpmw3Y.lean.js} +0 -0
- /package/dist/docs/assets/{guides_agent-to-agent.md.BCeVdJRJ.lean.js → guides_agent-to-agent.md.B3JIaAqz.lean.js} +0 -0
- /package/dist/docs/assets/{guides_convert-automation.md.D06eIzea.lean.js → guides_convert-automation.md.Bboisykk.lean.js} +0 -0
- /package/dist/docs/assets/{guides_mcp-oauth.md.Du0f7pGU.lean.js → guides_mcp-oauth.md.CJvrXtkN.lean.js} +0 -0
- /package/dist/docs/assets/{guides_slack.md.DiUmk_Oi.lean.js → guides_slack.md.mqeNKs84.lean.js} +0 -0
- /package/dist/docs/assets/{guides_webhooks.md.BpnIdO0i.lean.js → guides_webhooks.md.DKdA43Qm.lean.js} +0 -0
- /package/dist/docs/assets/{hillclimbing.md.ywF3yDAd.lean.js → hillclimbing.md.DhESf3OO.lean.js} +0 -0
- /package/dist/docs/assets/{quickstart.md.DsrarzEg.lean.js → quickstart.md.BrmfrrIr.lean.js} +0 -0
- /package/dist/docs/assets/{reference_agent-config.md.Bqylgw50.lean.js → reference_agent-config.md.Cp_x38Nl.lean.js} +0 -0
- /package/dist/docs/assets/{reference_connections.md.DYidrb-j.lean.js → reference_connections.md.DB6SsN6U.lean.js} +0 -0
- /package/dist/docs/assets/{reference_project-layout.md.CwkSbEWT.lean.js → reference_project-layout.md.WN9nwJht.lean.js} +0 -0
- /package/dist/docs/assets/{reference_prompt.md.DZUMtLPD.lean.js → reference_prompt.md.DnaD5dNK.lean.js} +0 -0
- /package/dist/docs/assets/{reference_schedules.md.DNipebiG.lean.js → reference_schedules.md.DI_JrHgq.lean.js} +0 -0
- /package/dist/docs/assets/{reference_skills.md.B5ZEuHfG.lean.js → reference_skills.md.BFW9retM.lean.js} +0 -0
- /package/dist/docs/assets/{templates_agentic-owners.md.DSJSIpWU.lean.js → templates_agentic-owners.md.DqtPdm6f.lean.js} +0 -0
|
@@ -0,0 +1,364 @@
|
|
|
1
|
+
# Build your first PR reviewer
|
|
2
|
+
|
|
3
|
+
Build a GitHub PR reviewer that classifies changes as `trivial`,
|
|
4
|
+
`moderate`, or `large`, then approves safe changes or requests human
|
|
5
|
+
review. Add GitHub event handling so pull requests can trigger reviews.
|
|
6
|
+
|
|
7
|
+
## Getting started
|
|
8
|
+
|
|
9
|
+
- **Get started with an agent in Cursor:** follow
|
|
10
|
+
[Scaffold an agent with Cursor](/docs/scaffolding-agents.md) and ask Cursor
|
|
11
|
+
to read [`skills/create-agent/SKILL.md`](https://github.com/cursor/cursor/blob/main/packages/agent-serve/skills/create-agent/SKILL.md).
|
|
12
|
+
- **Get started in the CLI:** continue below.
|
|
13
|
+
|
|
14
|
+
## Prerequisites
|
|
15
|
+
|
|
16
|
+
- Node 22.13 or newer. Bun isn't supported.
|
|
17
|
+
- Run commands as `agent-sdk <command>`, or use
|
|
18
|
+
`npx @cursor/july <command>` when the CLI isn't on `PATH`. See
|
|
19
|
+
[Run the CLI](/docs/index.md#run-the-cli) if `agent-sdk` is not on `PATH`.
|
|
20
|
+
- A Cursor credential for model turns. Sign in once:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
agent-sdk login
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
You can also set `CURSOR_API_KEY` instead of signing in.
|
|
27
|
+
|
|
28
|
+
- Authenticate with `gh auth login` or `GITHUB_TOKEN`. You can read
|
|
29
|
+
public pull requests. Posting reviews requires repository write access.
|
|
30
|
+
|
|
31
|
+
## Create and run the project
|
|
32
|
+
|
|
33
|
+
Initialize the project and start the development server:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
npx @cursor/july init ./sdk-pr-reviewer
|
|
37
|
+
cd sdk-pr-reviewer
|
|
38
|
+
agent-sdk dev
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Keep `agent-sdk dev` running. In a second terminal, run:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
agent-sdk run --dir . --message "Introduce yourself in one sentence."
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Confirm the agent replies.
|
|
48
|
+
|
|
49
|
+
## Add review instructions
|
|
50
|
+
|
|
51
|
+
Replace `agent/instructions.md`:
|
|
52
|
+
|
|
53
|
+
```md
|
|
54
|
+
# PR reviewer
|
|
55
|
+
|
|
56
|
+
You review GitHub pull requests. Be specific and brief.
|
|
57
|
+
|
|
58
|
+
For every pull request:
|
|
59
|
+
|
|
60
|
+
1. Call `inspect_pr` first. Never judge a change you haven't fetched.
|
|
61
|
+
2. Match your review to the complexity it reports:
|
|
62
|
+
- `trivial`: read the patches. If the diff does what the title says
|
|
63
|
+
and nothing looks risky, call `submit_review` with verdict
|
|
64
|
+
`approve`.
|
|
65
|
+
- `moderate`: read every patch. Approve only when you understand the
|
|
66
|
+
whole change and see no risk. Otherwise ask for a human review and
|
|
67
|
+
say which files worry you.
|
|
68
|
+
- `large`: call `submit_review` with verdict `request_human_review`
|
|
69
|
+
right away. Use the stats you already have to point the reviewer at
|
|
70
|
+
the biggest files; don't dig further.
|
|
71
|
+
3. Never approve a draft. Point out anything surprising, even when you
|
|
72
|
+
approve.
|
|
73
|
+
|
|
74
|
+
End with one sentence: the verdict and why.
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Remove the demo echo tool:
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
rm agent/tools/echo.ts
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## Add a shared helper
|
|
84
|
+
|
|
85
|
+
Create `agent/lib/github.ts`:
|
|
86
|
+
|
|
87
|
+
```ts
|
|
88
|
+
export interface PullRef {
|
|
89
|
+
owner: string;
|
|
90
|
+
repo: string;
|
|
91
|
+
number: number;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/** Split https://github.com/owner/repo/pull/123 into its parts. */
|
|
95
|
+
export function parsePullUrl(prUrl: string): PullRef {
|
|
96
|
+
const url = new URL(prUrl);
|
|
97
|
+
const [owner, repo, pulls, number] = url.pathname.split("/").filter(Boolean);
|
|
98
|
+
const parsed = Number.parseInt(number ?? "", 10);
|
|
99
|
+
if (pulls !== "pull" || owner === undefined || Number.isNaN(parsed)) {
|
|
100
|
+
throw new Error(`Not a pull request URL: ${prUrl}`);
|
|
101
|
+
}
|
|
102
|
+
return { owner, repo, number: parsed };
|
|
103
|
+
}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
## Add the inspect tool
|
|
107
|
+
|
|
108
|
+
Create `agent/tools/inspect_pr.ts`:
|
|
109
|
+
|
|
110
|
+
```ts
|
|
111
|
+
import { defineTool } from "@cursor/july/tools";
|
|
112
|
+
import { z } from "zod";
|
|
113
|
+
import { parsePullUrl } from "../lib/github.js";
|
|
114
|
+
|
|
115
|
+
export type Complexity = "trivial" | "moderate" | "large";
|
|
116
|
+
|
|
117
|
+
/** Rate complexity from fixed line and file-count thresholds. */
|
|
118
|
+
function rateComplexity(linesChanged: number, changedFiles: number): Complexity {
|
|
119
|
+
if (linesChanged <= 25 && changedFiles <= 2) {
|
|
120
|
+
return "trivial";
|
|
121
|
+
}
|
|
122
|
+
if (linesChanged <= 400 && changedFiles <= 15) {
|
|
123
|
+
return "moderate";
|
|
124
|
+
}
|
|
125
|
+
return "large";
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/** Keep one oversized file from flooding the model's context. */
|
|
129
|
+
function trimPatch(patch: string | undefined): string | undefined {
|
|
130
|
+
if (patch === undefined || patch.length <= 3000) {
|
|
131
|
+
return patch;
|
|
132
|
+
}
|
|
133
|
+
return `${patch.slice(0, 3000)}\n[... patch trimmed ...]`;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
export default defineTool({
|
|
137
|
+
description:
|
|
138
|
+
"Fetch a pull request's title, stats, and per-file patches, plus a deterministic complexity rating (trivial, moderate, or large). Call this before any review decision.",
|
|
139
|
+
inputSchema: z.object({
|
|
140
|
+
prUrl: z
|
|
141
|
+
.string()
|
|
142
|
+
.describe("Pull request URL: https://github.com/owner/repo/pull/123"),
|
|
143
|
+
}),
|
|
144
|
+
async execute({ prUrl }, ctx) {
|
|
145
|
+
const { owner, repo, number } = parsePullUrl(prUrl);
|
|
146
|
+
const octokit = await ctx.host.github.getOctokit();
|
|
147
|
+
const { data: pr } = await octokit.rest.pulls.get({
|
|
148
|
+
owner,
|
|
149
|
+
repo,
|
|
150
|
+
pull_number: number,
|
|
151
|
+
});
|
|
152
|
+
const { data: files } = await octokit.rest.pulls.listFiles({
|
|
153
|
+
owner,
|
|
154
|
+
repo,
|
|
155
|
+
pull_number: number,
|
|
156
|
+
per_page: 100,
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
const complexity = rateComplexity(
|
|
160
|
+
pr.additions + pr.deletions,
|
|
161
|
+
pr.changed_files
|
|
162
|
+
);
|
|
163
|
+
return {
|
|
164
|
+
title: pr.title,
|
|
165
|
+
author: pr.user?.login,
|
|
166
|
+
state: pr.state,
|
|
167
|
+
draft: pr.draft ?? false,
|
|
168
|
+
additions: pr.additions,
|
|
169
|
+
deletions: pr.deletions,
|
|
170
|
+
changedFiles: pr.changed_files,
|
|
171
|
+
complexity,
|
|
172
|
+
files: files.map((file) => ({
|
|
173
|
+
path: file.filename,
|
|
174
|
+
additions: file.additions,
|
|
175
|
+
deletions: file.deletions,
|
|
176
|
+
// Large changes get a stats-only skim; a human reads the code.
|
|
177
|
+
...(complexity === "large" ? {} : { patch: trimPatch(file.patch) }),
|
|
178
|
+
})),
|
|
179
|
+
};
|
|
180
|
+
},
|
|
181
|
+
});
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
## Verify complexity classification
|
|
185
|
+
|
|
186
|
+
Run `inspect_pr` against a small pull request:
|
|
187
|
+
|
|
188
|
+
```bash
|
|
189
|
+
agent-sdk call inspect_pr --dir . \
|
|
190
|
+
--input '{"prUrl":"https://github.com/facebook/react/pull/35623"}'
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
Confirm the result contains `"complexity": "trivial"`.
|
|
194
|
+
|
|
195
|
+
Run it against a large pull request:
|
|
196
|
+
|
|
197
|
+
```bash
|
|
198
|
+
agent-sdk call inspect_pr --dir . \
|
|
199
|
+
--input '{"prUrl":"https://github.com/facebook/react/pull/25229"}'
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
Confirm the result contains `"complexity": "large"` and no `patch`
|
|
203
|
+
fields.
|
|
204
|
+
|
|
205
|
+
## Add the review tool
|
|
206
|
+
|
|
207
|
+
Create `agent/tools/submit_review.ts` to post each verdict:
|
|
208
|
+
|
|
209
|
+
```ts
|
|
210
|
+
import { defineTool } from "@cursor/july/tools";
|
|
211
|
+
import { z } from "zod";
|
|
212
|
+
import { parsePullUrl } from "../lib/github.js";
|
|
213
|
+
|
|
214
|
+
export default defineTool({
|
|
215
|
+
description:
|
|
216
|
+
"Post the review decision to GitHub: approve the pull request, or comment asking for a human review.",
|
|
217
|
+
inputSchema: z.object({
|
|
218
|
+
prUrl: z
|
|
219
|
+
.string()
|
|
220
|
+
.describe("Pull request URL: https://github.com/owner/repo/pull/123"),
|
|
221
|
+
verdict: z.enum(["approve", "request_human_review"]),
|
|
222
|
+
summary: z
|
|
223
|
+
.string()
|
|
224
|
+
.describe("One or two sentences explaining the verdict."),
|
|
225
|
+
}),
|
|
226
|
+
async execute({ prUrl, verdict, summary }, ctx) {
|
|
227
|
+
const { owner, repo, number } = parsePullUrl(prUrl);
|
|
228
|
+
const review =
|
|
229
|
+
verdict === "approve"
|
|
230
|
+
? { event: "APPROVE" as const, body: `PR reviewer: ${summary}` }
|
|
231
|
+
: {
|
|
232
|
+
event: "COMMENT" as const,
|
|
233
|
+
body: `PR reviewer: this change needs a human review. ${summary}`,
|
|
234
|
+
};
|
|
235
|
+
|
|
236
|
+
const octokit = await ctx.host.github.getOctokit();
|
|
237
|
+
await octokit.rest.pulls.createReview({
|
|
238
|
+
owner,
|
|
239
|
+
repo,
|
|
240
|
+
pull_number: number,
|
|
241
|
+
event: review.event,
|
|
242
|
+
body: review.body,
|
|
243
|
+
});
|
|
244
|
+
return { posted: true, ...review };
|
|
245
|
+
},
|
|
246
|
+
});
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
Use a GitHub credential with write access and a pull request you didn't
|
|
250
|
+
author.
|
|
251
|
+
|
|
252
|
+
## Review a pull request
|
|
253
|
+
|
|
254
|
+
Review an open pull request:
|
|
255
|
+
|
|
256
|
+
```bash
|
|
257
|
+
agent-sdk run --dir . \
|
|
258
|
+
--message "Review https://github.com/acme/checkout/pull/42"
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
Confirm `inspect_pr` runs before `submit_review`, then verify the review
|
|
262
|
+
on GitHub.
|
|
263
|
+
|
|
264
|
+
## Trigger reviews from GitHub
|
|
265
|
+
|
|
266
|
+
Create `agent/channels/github.ts`:
|
|
267
|
+
|
|
268
|
+
```ts
|
|
269
|
+
import {
|
|
270
|
+
defaultGitHubAuth,
|
|
271
|
+
githubChannel,
|
|
272
|
+
} from "@cursor/july/channels/github";
|
|
273
|
+
|
|
274
|
+
const REVIEW_ACTIONS = new Set(["opened", "reopened", "ready_for_review"]);
|
|
275
|
+
|
|
276
|
+
export default githubChannel({
|
|
277
|
+
botName: "sdk-pr-reviewer",
|
|
278
|
+
webhookEvents: ["pull_request"],
|
|
279
|
+
deliverReplies: false,
|
|
280
|
+
progress: { reactions: false },
|
|
281
|
+
onPullRequest: (ctx, pr) => {
|
|
282
|
+
if (!REVIEW_ACTIONS.has(pr.action) || pr.draft) {
|
|
283
|
+
return null;
|
|
284
|
+
}
|
|
285
|
+
return {
|
|
286
|
+
auth: defaultGitHubAuth(ctx),
|
|
287
|
+
title: `Review ${ctx.repository.fullName}#${pr.number}`,
|
|
288
|
+
context: [
|
|
289
|
+
"",
|
|
290
|
+
`Review ${pr.url}. Inspect it first, then submit your verdict with submit_review.`,
|
|
291
|
+
],
|
|
292
|
+
};
|
|
293
|
+
},
|
|
294
|
+
});
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
Keep `agent-sdk dev` running. In a second terminal, replay an open pull
|
|
298
|
+
request. Pull access is enough; repo admin isn't required:
|
|
299
|
+
|
|
300
|
+
```bash
|
|
301
|
+
agent-sdk github replay https://github.com/acme/checkout/pull/42 \
|
|
302
|
+
--dir . --action opened
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
Open the playground and confirm `Review acme/checkout#42` contains the
|
|
306
|
+
trigger, both tool calls, and the verdict.
|
|
307
|
+
|
|
308
|
+
## Run options
|
|
309
|
+
|
|
310
|
+
1. **CLI message**
|
|
311
|
+
|
|
312
|
+
```bash
|
|
313
|
+
agent-sdk run --dir . --message "Review https://github.com/acme/checkout/pull/42"
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
2. **Local replay**
|
|
317
|
+
|
|
318
|
+
```bash
|
|
319
|
+
agent-sdk github replay https://github.com/acme/checkout/pull/42 \
|
|
320
|
+
--dir . --action opened
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
3. **Forward or `--cursor-events`**
|
|
324
|
+
|
|
325
|
+
Pull Cursor events:
|
|
326
|
+
|
|
327
|
+
```bash
|
|
328
|
+
agent-sdk serve --dir . --cursor-events --repo owner/repo
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
Forward GitHub webhooks:
|
|
332
|
+
|
|
333
|
+
```bash
|
|
334
|
+
agent-sdk github forward --dir .
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
Keep the local `dev` or `serve` process running.
|
|
338
|
+
|
|
339
|
+
4. **Hosted deployment**
|
|
340
|
+
|
|
341
|
+
Deploy once, set the GitHub App secrets, then redeploy:
|
|
342
|
+
|
|
343
|
+
```bash
|
|
344
|
+
agent-sdk deploy
|
|
345
|
+
agent-sdk secrets set sdk-pr-reviewer GITHUB_APP_ID GITHUB_APP_PRIVATE_KEY
|
|
346
|
+
agent-sdk deploy
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
See [GitHub](/docs/guides/github.md) for local event delivery and
|
|
350
|
+
[Deployment](/docs/deployment.md) for hosting.
|
|
351
|
+
|
|
352
|
+
## Where to go next
|
|
353
|
+
|
|
354
|
+
- [`examples/approval-buddy`](https://github.com/cursor/cursor/tree/main/packages/agent-serve/examples/approval-buddy/): an example
|
|
355
|
+
with commit statuses, review subagents, and a deterministic stamp
|
|
356
|
+
policy
|
|
357
|
+
- [Evals](/docs/evals.md): freeze these two PRs as regression checks so
|
|
358
|
+
prompt changes can't flip a verdict
|
|
359
|
+
- [Tools](/docs/reference/tools.md): more on typed tools, approvals, and
|
|
360
|
+
direct calls
|
|
361
|
+
- [GitHub](/docs/guides/github.md): fixtures, forwarding, and pulling
|
|
362
|
+
events from Cursor
|
|
363
|
+
- [Building agents with agents](/docs/building-with-agents.md): have a
|
|
364
|
+
coding agent extend the project for you
|