@cursor/july 0.1.90 → 0.1.92
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 +12 -0
- package/README.md +8 -7
- package/dist/channels/slack/channel-watch.d.ts +1 -1
- package/dist/channels/slack/channel-watch.js +1 -1
- package/dist/channels/slack/slack-channel.js +1 -1
- package/dist/channels/slack/types.d.ts +2 -4
- package/dist/channels/slack/types.d.ts.map +1 -1
- package/dist/docs/404.html +5 -3
- package/dist/docs/ab.html +9 -7
- package/dist/docs/ab.md +338 -0
- package/dist/docs/assets/{ab.md.DYjwREAP.js → ab.md.CVzWxLoB.js} +1 -1
- package/dist/docs/assets/{ab.md.DYjwREAP.lean.js → ab.md.CVzWxLoB.lean.js} +1 -1
- package/dist/docs/assets/{app.wiNkt6G7.js → app.Bci6CM9E.js} +1 -1
- package/dist/docs/assets/{building-with-agents.md.PeZaZA1P.js → building-with-agents.md.DH8A_cHA.js} +1 -1
- package/dist/docs/assets/{building-with-agents.md.PeZaZA1P.lean.js → building-with-agents.md.DH8A_cHA.lean.js} +1 -1
- package/dist/docs/assets/chunks/@localSearchIndexroot.Dv-Q0XtU.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.ByhUGu47.js → VPLocalSearchBox.BCPT6xA-.js} +1 -1
- package/dist/docs/assets/chunks/{framework.CAZyNGu9.js → framework.BCISBCiQ.js} +1 -1
- package/dist/docs/assets/chunks/theme.BEA8BF3c.js +2 -0
- package/dist/docs/assets/{concepts.md.2NfkGjqM.js → concepts.md.CRfU3bVg.js} +1 -1
- package/dist/docs/assets/{concepts.md.2NfkGjqM.lean.js → concepts.md.CRfU3bVg.lean.js} +1 -1
- package/dist/docs/assets/{deployment.md.B8kW-h7P.js → deployment.md.DX_hc3ze.js} +6 -5
- package/dist/docs/assets/{deployment.md.B8kW-h7P.lean.js → deployment.md.DX_hc3ze.lean.js} +1 -1
- package/dist/docs/assets/{evals.md.CVe_O75-.js → evals.md.a0SMN6r9.js} +3 -3
- package/dist/docs/assets/{evals.md.CVe_O75-.lean.js → evals.md.a0SMN6r9.lean.js} +1 -1
- package/dist/docs/assets/{example-agents_approval-buddy.md.CIiZ9coo.js → example-agents_approval-buddy.md.DNL83puR.js} +1 -1
- package/dist/docs/assets/{example-agents_approval-buddy.md.CIiZ9coo.lean.js → example-agents_approval-buddy.md.DNL83puR.lean.js} +1 -1
- package/dist/docs/assets/{example-agents_benny.md.B-LIDGja.js → example-agents_benny.md.C40vHRLc.js} +1 -1
- package/dist/docs/assets/{example-agents_benny.md.B-LIDGja.lean.js → example-agents_benny.md.C40vHRLc.lean.js} +1 -1
- package/dist/docs/assets/{example-agents_bugbot.md.Dp5JqHSQ.js → example-agents_bugbot.md.BRGMi9O2.js} +1 -1
- package/dist/docs/assets/{example-agents_bugbot.md.Dp5JqHSQ.lean.js → example-agents_bugbot.md.BRGMi9O2.lean.js} +1 -1
- package/dist/docs/assets/{example-agents_codebase-wiki.md.D-lteFf0.js → example-agents_codebase-wiki.md.Dftj_tPp.js} +1 -1
- package/dist/docs/assets/{example-agents_codebase-wiki.md.D-lteFf0.lean.js → example-agents_codebase-wiki.md.Dftj_tPp.lean.js} +1 -1
- package/dist/docs/assets/{example-agents_codeowners-review.md.BU2ZXLf-.js → example-agents_codeowners-review.md.Bfta-lBU.js} +1 -1
- package/dist/docs/assets/{example-agents_codeowners-review.md.BU2ZXLf-.lean.js → example-agents_codeowners-review.md.Bfta-lBU.lean.js} +1 -1
- package/dist/docs/assets/{example-agents_concierge.md.DA2al_NK.js → example-agents_concierge.md.MrKpQndp.js} +1 -1
- package/dist/docs/assets/{example-agents_concierge.md.DA2al_NK.lean.js → example-agents_concierge.md.MrKpQndp.lean.js} +1 -1
- package/dist/docs/assets/{example-agents_fsd.md.ZeGEpAw_.js → example-agents_fsd.md.ZWHWWZPE.js} +1 -1
- package/dist/docs/assets/{example-agents_fsd.md.ZeGEpAw_.lean.js → example-agents_fsd.md.ZWHWWZPE.lean.js} +1 -1
- package/dist/docs/assets/example-agents_index.md.QZ8mhr6n.js +2 -0
- package/dist/docs/assets/{example-agents_index.md.xmJ87d_3.lean.js → example-agents_index.md.QZ8mhr6n.lean.js} +1 -1
- package/dist/docs/assets/{example-agents_knowledge-base.md.IneynQSR.js → example-agents_knowledge-base.md.DqKqHQ9u.js} +1 -1
- package/dist/docs/assets/{example-agents_knowledge-base.md.IneynQSR.lean.js → example-agents_knowledge-base.md.DqKqHQ9u.lean.js} +1 -1
- package/dist/docs/assets/{example-agents_oncall.md.CBmyuAKc.js → example-agents_oncall.md.DK4XkYTd.js} +1 -1
- package/dist/docs/assets/{example-agents_oncall.md.CBmyuAKc.lean.js → example-agents_oncall.md.DK4XkYTd.lean.js} +1 -1
- package/dist/docs/assets/{example-agents_security-reviewer.md.DBL1TwtP.js → example-agents_security-reviewer.md.Bai6D0Ee.js} +4 -4
- package/dist/docs/assets/{example-agents_security-reviewer.md.DBL1TwtP.lean.js → example-agents_security-reviewer.md.Bai6D0Ee.lean.js} +1 -1
- package/dist/docs/assets/{example-agents_slack-agent.md.06jQXTAI.js → example-agents_slack-agent.md.D7Kdj5BV.js} +1 -1
- package/dist/docs/assets/{example-agents_slack-agent.md.06jQXTAI.lean.js → example-agents_slack-agent.md.D7Kdj5BV.lean.js} +1 -1
- package/dist/docs/assets/{example-agents_weather-agent.md.DC3lINjo.js → example-agents_weather-agent.md.lVEAbWFf.js} +5 -5
- package/dist/docs/assets/example-agents_weather-agent.md.lVEAbWFf.lean.js +1 -0
- package/dist/docs/assets/{guides_agent-to-agent.md.Bmbxy-FA.js → guides_agent-to-agent.md.BCeVdJRJ.js} +1 -1
- package/dist/docs/assets/{guides_agent-to-agent.md.Bmbxy-FA.lean.js → guides_agent-to-agent.md.BCeVdJRJ.lean.js} +1 -1
- package/dist/docs/assets/{guides_cloud-runtime.md.CbklWfzh.js → guides_cloud-runtime.md.BSMLIBHr.js} +1 -1
- package/dist/docs/assets/{guides_cloud-runtime.md.CbklWfzh.lean.js → guides_cloud-runtime.md.BSMLIBHr.lean.js} +1 -1
- package/dist/docs/assets/{guides_convert-automation.md.BhMzTkE5.js → guides_convert-automation.md.D06eIzea.js} +1 -1
- package/dist/docs/assets/{guides_convert-automation.md.BhMzTkE5.lean.js → guides_convert-automation.md.D06eIzea.lean.js} +1 -1
- package/dist/docs/assets/{guides_github.md.CLLQJKRB.js → guides_github.md.Cdt1s2QC.js} +4 -4
- package/dist/docs/assets/{guides_github.md.CLLQJKRB.lean.js → guides_github.md.Cdt1s2QC.lean.js} +1 -1
- package/dist/docs/assets/{guides_human-in-the-loop.md.Cf8kIIqC.js → guides_human-in-the-loop.md.By1G2T3_.js} +1 -1
- package/dist/docs/assets/{guides_human-in-the-loop.md.Cf8kIIqC.lean.js → guides_human-in-the-loop.md.By1G2T3_.lean.js} +1 -1
- package/dist/docs/assets/{guides_mcp-oauth.md.CzEB6RaG.js → guides_mcp-oauth.md.Du0f7pGU.js} +1 -1
- package/dist/docs/assets/{guides_mcp-oauth.md.CzEB6RaG.lean.js → guides_mcp-oauth.md.Du0f7pGU.lean.js} +1 -1
- package/dist/docs/assets/{guides_opentelemetry.md.Csn7ZI25.js → guides_opentelemetry.md.bmPmkvJu.js} +1 -1
- package/dist/docs/assets/{guides_opentelemetry.md.Csn7ZI25.lean.js → guides_opentelemetry.md.bmPmkvJu.lean.js} +1 -1
- package/dist/docs/assets/{guides_slack.md.DP4H75WP.js → guides_slack.md.DiUmk_Oi.js} +5 -5
- package/dist/docs/assets/{guides_slack.md.DP4H75WP.lean.js → guides_slack.md.DiUmk_Oi.lean.js} +1 -1
- package/dist/docs/assets/{guides_webhooks.md.DB-r_er9.js → guides_webhooks.md.BpnIdO0i.js} +5 -6
- package/dist/docs/assets/{guides_webhooks.md.DB-r_er9.lean.js → guides_webhooks.md.BpnIdO0i.lean.js} +1 -1
- package/dist/docs/assets/{hillclimbing.md.yXqdlv2R.js → hillclimbing.md.ywF3yDAd.js} +1 -1
- package/dist/docs/assets/{hillclimbing.md.yXqdlv2R.lean.js → hillclimbing.md.ywF3yDAd.lean.js} +1 -1
- package/dist/docs/assets/index.md.BAaMXLFd.js +5 -0
- package/dist/docs/assets/{index.md.DhRHS_-L.lean.js → index.md.BAaMXLFd.lean.js} +1 -1
- package/dist/docs/assets/{quickstart.md.DZxBu44y.js → quickstart.md.DsrarzEg.js} +1 -1
- package/dist/docs/assets/{quickstart.md.DZxBu44y.lean.js → quickstart.md.DsrarzEg.lean.js} +1 -1
- package/dist/docs/assets/{reference_agent-config.md.CTWp4DnU.js → reference_agent-config.md.Bqylgw50.js} +1 -1
- package/dist/docs/assets/{reference_agent-config.md.CTWp4DnU.lean.js → reference_agent-config.md.Bqylgw50.lean.js} +1 -1
- package/dist/docs/assets/{reference_artifacts.md.BGG4bZo-.js → reference_artifacts.md.Dior32Qw.js} +1 -1
- package/dist/docs/assets/{reference_artifacts.md.BGG4bZo-.lean.js → reference_artifacts.md.Dior32Qw.lean.js} +1 -1
- package/dist/docs/assets/{reference_channels.md.CboFd5IH.js → reference_channels.md.DQZjCnyh.js} +2 -2
- package/dist/docs/assets/{reference_channels.md.CboFd5IH.lean.js → reference_channels.md.DQZjCnyh.lean.js} +1 -1
- package/dist/docs/assets/{reference_cli.md.TAaYU8br.js → reference_cli.md.B7GkAJRC.js} +8 -7
- package/dist/docs/assets/{reference_cli.md.TAaYU8br.lean.js → reference_cli.md.B7GkAJRC.lean.js} +1 -1
- package/dist/docs/assets/{reference_connections.md.Cu3N-S3Q.js → reference_connections.md.DYidrb-j.js} +5 -5
- package/dist/docs/assets/{reference_connections.md.Cu3N-S3Q.lean.js → reference_connections.md.DYidrb-j.lean.js} +1 -1
- package/dist/docs/assets/{reference_hooks.md.DJE5DXcT.js → reference_hooks.md.B9FSgdDe.js} +1 -1
- package/dist/docs/assets/{reference_hooks.md.DJE5DXcT.lean.js → reference_hooks.md.B9FSgdDe.lean.js} +1 -1
- package/dist/docs/assets/{reference_http-api.md.DMbdFGVQ.js → reference_http-api.md.CSHVobzG.js} +4 -4
- package/dist/docs/assets/{reference_http-api.md.DMbdFGVQ.lean.js → reference_http-api.md.CSHVobzG.lean.js} +1 -1
- package/dist/docs/assets/{reference_instructions.md.CgoV-YEb.js → reference_instructions.md.DhNCOl7r.js} +1 -1
- package/dist/docs/assets/{reference_instructions.md.CgoV-YEb.lean.js → reference_instructions.md.DhNCOl7r.lean.js} +1 -1
- package/dist/docs/assets/{reference_playground.md.CPZhfYaO.js → reference_playground.md.Dfb92yQf.js} +1 -1
- package/dist/docs/assets/{reference_playground.md.CPZhfYaO.lean.js → reference_playground.md.Dfb92yQf.lean.js} +1 -1
- package/dist/docs/assets/{reference_project-layout.md.CueaKpjr.js → reference_project-layout.md.CwkSbEWT.js} +1 -1
- package/dist/docs/assets/{reference_project-layout.md.CueaKpjr.lean.js → reference_project-layout.md.CwkSbEWT.lean.js} +1 -1
- package/dist/docs/assets/{reference_prompt.md.BaiweQxE.js → reference_prompt.md.DZUMtLPD.js} +1 -1
- package/dist/docs/assets/{reference_prompt.md.BaiweQxE.lean.js → reference_prompt.md.DZUMtLPD.lean.js} +1 -1
- package/dist/docs/assets/{reference_schedules.md.gmfYzf_I.js → reference_schedules.md.DNipebiG.js} +1 -1
- package/dist/docs/assets/{reference_schedules.md.gmfYzf_I.lean.js → reference_schedules.md.DNipebiG.lean.js} +1 -1
- package/dist/docs/assets/{reference_sessions.md.B0DdlM-K.js → reference_sessions.md.tUFzz98S.js} +1 -1
- package/dist/docs/assets/{reference_sessions.md.B0DdlM-K.lean.js → reference_sessions.md.tUFzz98S.lean.js} +1 -1
- package/dist/docs/assets/{reference_skills.md.BRF2nDv9.js → reference_skills.md.B5ZEuHfG.js} +1 -1
- package/dist/docs/assets/{reference_skills.md.BRF2nDv9.lean.js → reference_skills.md.B5ZEuHfG.lean.js} +1 -1
- package/dist/docs/assets/{reference_subagents.md.DSrGLIuB.js → reference_subagents.md.Xoav0AII.js} +1 -1
- package/dist/docs/assets/{reference_subagents.md.DSrGLIuB.lean.js → reference_subagents.md.Xoav0AII.lean.js} +1 -1
- package/dist/docs/assets/{reference_tools.md.XmeFP_3d.js → reference_tools.md.wpaJtHn6.js} +2 -3
- package/dist/docs/assets/{reference_tools.md.XmeFP_3d.lean.js → reference_tools.md.wpaJtHn6.lean.js} +1 -1
- package/dist/docs/assets/{scaffolding-agents.md.BpMFXv2J.js → scaffolding-agents.md.CRDDUtYJ.js} +1 -1
- package/dist/docs/assets/{scaffolding-agents.md.BpMFXv2J.lean.js → scaffolding-agents.md.CRDDUtYJ.lean.js} +1 -1
- package/dist/docs/assets/{storage.md.ks1u64_R.js → storage.md.JbjlHWZ6.js} +1 -1
- package/dist/docs/assets/{storage.md.ks1u64_R.lean.js → storage.md.JbjlHWZ6.lean.js} +1 -1
- package/dist/docs/assets/{style.kTsvp4pE.css → style.BRuM8477.css} +1 -1
- package/dist/docs/assets/{templates_agentic-owners.md.BkTLORaU.js → templates_agentic-owners.md.DSJSIpWU.js} +1 -1
- package/dist/docs/assets/{templates_agentic-owners.md.BkTLORaU.lean.js → templates_agentic-owners.md.DSJSIpWU.lean.js} +1 -1
- package/dist/docs/assets/{templates_demo.md.Bgd6MBaZ.js → templates_demo.md.DhFcWN6j.js} +1 -1
- package/dist/docs/assets/{templates_demo.md.Bgd6MBaZ.lean.js → templates_demo.md.DhFcWN6j.lean.js} +1 -1
- package/dist/docs/assets/{templates_pr-autofixer.md.DcmoeUNZ.js → templates_pr-autofixer.md.1HAR3RXE.js} +1 -1
- package/dist/docs/assets/{templates_pr-autofixer.md.DcmoeUNZ.lean.js → templates_pr-autofixer.md.1HAR3RXE.lean.js} +1 -1
- package/dist/docs/assets/{templates_security-reviewer.md.C0yIUaYs.js → templates_security-reviewer.md.ByFyRta2.js} +1 -1
- package/dist/docs/assets/{templates_security-reviewer.md.C0yIUaYs.lean.js → templates_security-reviewer.md.ByFyRta2.lean.js} +1 -1
- package/dist/docs/assets/{templates_triage.md.DWuQ1bZz.js → templates_triage.md.CVlpctKS.js} +2 -2
- package/dist/docs/assets/{templates_triage.md.DWuQ1bZz.lean.js → templates_triage.md.CVlpctKS.lean.js} +1 -1
- package/dist/docs/assets/troubleshooting.md.DYECCZiJ.js +1 -0
- package/dist/docs/assets/{troubleshooting.md.KgmmaCgw.lean.js → troubleshooting.md.DYECCZiJ.lean.js} +1 -1
- package/dist/docs/building-with-agents.html +9 -7
- package/dist/docs/building-with-agents.md +124 -0
- package/dist/docs/concepts.html +9 -7
- package/dist/docs/concepts.md +174 -0
- package/dist/docs/deployment.html +13 -10
- package/dist/docs/deployment.md +464 -0
- package/dist/docs/evals.html +10 -8
- package/dist/docs/evals.md +481 -0
- package/dist/docs/example-agents/approval-buddy.html +9 -7
- package/dist/docs/example-agents/approval-buddy.md +266 -0
- package/dist/docs/example-agents/benny.html +9 -7
- package/dist/docs/example-agents/benny.md +182 -0
- package/dist/docs/example-agents/bugbot.html +9 -7
- package/dist/docs/example-agents/bugbot.md +229 -0
- package/dist/docs/example-agents/codebase-wiki.html +9 -7
- package/dist/docs/example-agents/codebase-wiki.md +170 -0
- package/dist/docs/example-agents/codeowners-review.html +9 -7
- package/dist/docs/example-agents/codeowners-review.md +192 -0
- package/dist/docs/example-agents/concierge.html +9 -7
- package/dist/docs/example-agents/concierge.md +201 -0
- package/dist/docs/example-agents/fsd.html +9 -7
- package/dist/docs/example-agents/fsd.md +329 -0
- package/dist/docs/example-agents/index.html +9 -7
- package/dist/docs/example-agents/index.md +102 -0
- package/dist/docs/example-agents/knowledge-base.html +9 -7
- package/dist/docs/example-agents/knowledge-base.md +168 -0
- package/dist/docs/example-agents/oncall.html +9 -7
- package/dist/docs/example-agents/oncall.md +212 -0
- package/dist/docs/example-agents/security-reviewer.html +12 -10
- package/dist/docs/example-agents/security-reviewer.md +265 -0
- package/dist/docs/example-agents/slack-agent.html +9 -7
- package/dist/docs/example-agents/slack-agent.md +142 -0
- package/dist/docs/example-agents/weather-agent.html +14 -12
- package/dist/docs/example-agents/weather-agent.md +296 -0
- package/dist/docs/guides/agent-to-agent.html +9 -7
- package/dist/docs/guides/agent-to-agent.md +113 -0
- package/dist/docs/guides/cloud-runtime.html +9 -7
- package/dist/docs/guides/cloud-runtime.md +131 -0
- package/dist/docs/guides/convert-automation.html +9 -7
- package/dist/docs/guides/convert-automation.md +171 -0
- package/dist/docs/guides/github.html +11 -9
- package/dist/docs/guides/github.md +287 -0
- package/dist/docs/guides/human-in-the-loop.html +9 -7
- package/dist/docs/guides/human-in-the-loop.md +126 -0
- package/dist/docs/guides/mcp-oauth.html +9 -7
- package/dist/docs/guides/mcp-oauth.md +159 -0
- package/dist/docs/guides/opentelemetry.html +9 -7
- package/dist/docs/guides/opentelemetry.md +209 -0
- package/dist/docs/guides/slack.html +12 -10
- package/dist/docs/guides/slack.md +337 -0
- package/dist/docs/guides/webhooks.html +12 -11
- package/dist/docs/guides/webhooks.md +463 -0
- package/dist/docs/hashmap.json +1 -1
- package/dist/docs/hillclimbing.html +9 -7
- package/dist/docs/hillclimbing.md +88 -0
- package/dist/docs/index.html +10 -8
- package/dist/docs/index.md +179 -0
- package/dist/docs/llms-full.txt +11518 -0
- package/dist/docs/llms.txt +75 -0
- package/dist/docs/quickstart.html +9 -7
- package/dist/docs/quickstart.md +364 -0
- package/dist/docs/reference/agent-config.html +9 -7
- package/dist/docs/reference/agent-config.md +256 -0
- package/dist/docs/reference/artifacts.html +9 -7
- package/dist/docs/reference/artifacts.md +112 -0
- package/dist/docs/reference/channels.html +10 -8
- package/dist/docs/reference/channels.md +255 -0
- package/dist/docs/reference/cli.html +15 -12
- package/dist/docs/reference/cli.md +957 -0
- package/dist/docs/reference/connections.html +12 -10
- package/dist/docs/reference/connections.md +268 -0
- package/dist/docs/reference/hooks.html +9 -7
- package/dist/docs/reference/hooks.md +102 -0
- package/dist/docs/reference/http-api.html +12 -10
- package/dist/docs/reference/http-api.md +267 -0
- package/dist/docs/reference/instructions.html +9 -7
- package/dist/docs/reference/instructions.md +74 -0
- package/dist/docs/reference/playground.html +9 -7
- package/dist/docs/reference/playground.md +62 -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 +9 -7
- package/dist/docs/reference/prompt.md +42 -0
- package/dist/docs/reference/schedules.html +9 -7
- package/dist/docs/reference/schedules.md +215 -0
- package/dist/docs/reference/sessions.html +9 -7
- package/dist/docs/reference/sessions.md +170 -0
- package/dist/docs/reference/skills.html +9 -7
- package/dist/docs/reference/skills.md +83 -0
- package/dist/docs/reference/subagents.html +9 -7
- package/dist/docs/reference/subagents.md +71 -0
- package/dist/docs/reference/tools.html +10 -9
- package/dist/docs/reference/tools.md +298 -0
- package/dist/docs/scaffolding-agents.html +9 -7
- package/dist/docs/scaffolding-agents.md +130 -0
- package/dist/docs/storage.html +9 -7
- package/dist/docs/storage.md +219 -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 +9 -7
- package/dist/docs/templates/demo.md +79 -0
- package/dist/docs/templates/pr-autofixer.html +9 -7
- package/dist/docs/templates/pr-autofixer.md +131 -0
- package/dist/docs/templates/security-reviewer.html +9 -7
- package/dist/docs/templates/security-reviewer.md +84 -0
- package/dist/docs/templates/triage.html +10 -8
- package/dist/docs/templates/triage.md +98 -0
- package/dist/docs/troubleshooting.html +9 -7
- package/dist/docs/troubleshooting.md +111 -0
- package/dist/internal/cli-deploy.d.ts.map +1 -1
- package/dist/internal/cli-deploy.js +21 -3
- 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 +1 -0
- package/dist/internal/deploy-client.d.ts +18 -0
- package/dist/internal/deploy-client.d.ts.map +1 -1
- package/dist/internal/deploy-client.js +25 -1
- package/dist/internal/deploy-manifest.d.ts.map +1 -1
- package/dist/internal/deploy-manifest.js +5 -1
- package/dist/internal/discovery.d.ts +5 -1
- package/dist/internal/discovery.d.ts.map +1 -1
- package/dist/internal/discovery.js +16 -0
- package/dist/internal/http-channel.d.ts +2 -2
- package/dist/internal/http-channel.d.ts.map +1 -1
- package/dist/internal/http-channel.js +11 -31
- package/dist/internal/init-project.d.ts.map +1 -1
- package/dist/internal/init-project.js +2 -0
- 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/session-engine.d.ts +8 -0
- package/dist/internal/session-engine.d.ts.map +1 -1
- package/dist/internal/session-engine.js +50 -6
- package/dist/playground/assets/index-D9N7-q97.css +1 -0
- package/dist/playground/assets/{index-DxapiDj_.js → index-DDvyC2z6.js} +49 -49
- package/dist/playground/index.html +2 -2
- package/dist/types.d.ts +8 -5
- package/dist/types.d.ts.map +1 -1
- package/docs/README.md +3 -1
- package/docs/concepts.md +1 -1
- package/docs/deployment.md +9 -6
- package/docs/evals.md +1 -5
- package/docs/example-agents/codebase-wiki.md +2 -3
- package/docs/example-agents/fsd.md +1 -1
- package/docs/example-agents/index.md +2 -2
- package/docs/example-agents/knowledge-base.md +3 -3
- package/docs/example-agents/security-reviewer.md +17 -48
- package/docs/example-agents/weather-agent.md +14 -45
- package/docs/guides/github.md +7 -4
- package/docs/guides/slack.md +7 -2
- package/docs/guides/webhooks.md +12 -15
- package/docs/reference/channels.md +4 -0
- package/docs/reference/cli.md +21 -7
- package/docs/reference/connections.md +13 -32
- package/docs/reference/http-api.md +14 -9
- package/docs/reference/tools.md +1 -3
- package/docs/templates/triage.md +3 -5
- package/docs/troubleshooting.md +1 -1
- package/package.json +2 -2
- package/skills/ab/SKILL.md +3 -0
- package/skills/create-agent/SKILL.md +9 -7
- package/skills/debug/SKILL.md +3 -0
- package/skills/evals/SKILL.md +3 -0
- package/skills/framework-map/SKILL.md +9 -6
- 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 +4 -1
- package/src/channels/slack/channel-watch.ts +1 -1
- package/src/channels/slack/slack-channel.ts +1 -1
- package/src/channels/slack/types.ts +2 -4
- package/src/internal/cli-deploy.ts +27 -7
- package/src/internal/cursor-agent-template.ts +1 -0
- package/src/internal/deploy-client.ts +40 -1
- package/src/internal/deploy-manifest.ts +10 -1
- package/src/internal/discovery.ts +20 -0
- package/src/internal/http-channel.ts +14 -41
- package/src/internal/init-project.ts +2 -0
- package/src/internal/init-scaffold.ts +1 -0
- package/src/internal/playground/static.ts +2 -0
- package/src/internal/session-engine.ts +62 -14
- package/src/types.ts +8 -5
- package/templates/security-help/README.md +37 -0
- package/templates/security-help/agent/agent.ts +18 -0
- package/templates/security-help/agent/channels/github.ts +13 -0
- package/templates/security-help/agent/channels/slack.ts +89 -0
- package/templates/security-help/agent/instructions.md +20 -0
- package/templates/security-help/agent/knowledge/faq/approvals.md +5 -0
- package/templates/security-help/agent/knowledge/faq/channels.md +6 -0
- package/templates/security-help/agent/knowledge/faq/phishing.md +10 -0
- package/templates/security-help/agent/lib/pr-first-pass.ts +42 -0
- package/templates/security-help/agent/lib/repos.ts +5 -0
- package/templates/security-help/agent/skills/access-request.md +10 -0
- package/templates/security-help/agent/skills/security-first-pass.md +15 -0
- package/templates/security-help/agent/skills/security-playbooks.md +12 -0
- package/templates/security-help/agent/skills/security-pr-first-pass.md +12 -0
- package/templates/security-help/evals/evals.config.ts +5 -0
- package/templates/security-help/evals/security-help.eval.ts +53 -0
- package/templates/security-help/init.json +31 -0
- package/templates/security-help/package.json +18 -0
- package/templates/security-help/tsconfig.json +12 -0
- package/templates/triage/agent/channels/webhook.ts +2 -2
- package/dist/docs/assets/chunks/@localSearchIndexroot.FV0R6kOb.js +0 -1
- package/dist/docs/assets/chunks/theme.Dx7j_-0n.js +0 -2
- package/dist/docs/assets/example-agents_index.md.xmJ87d_3.js +0 -2
- package/dist/docs/assets/example-agents_weather-agent.md.DC3lINjo.lean.js +0 -1
- package/dist/docs/assets/index.md.DhRHS_-L.js +0 -5
- package/dist/docs/assets/troubleshooting.md.KgmmaCgw.js +0 -1
- package/dist/playground/assets/index-BpVS-paP.css +0 -1
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
# Channels
|
|
2
|
+
|
|
3
|
+
A channel is the surface an agent lives on. The built-in HTTP session
|
|
4
|
+
channel is always mounted. Custom channels declare their own routes
|
|
5
|
+
under `/v1/channels/<id>`. The Slack and GitHub packs are prebuilt
|
|
6
|
+
channels with platform transports. This page is the authoring reference;
|
|
7
|
+
for the walkthrough, see the [Webhooks guide](/docs/guides/webhooks.md).
|
|
8
|
+
|
|
9
|
+
## The built-in HTTP channel
|
|
10
|
+
|
|
11
|
+
It's always mounted, under `/<slug>` in the default multi-agent layout:
|
|
12
|
+
session create, follow-up, stream, stop, the sessions list, approvals,
|
|
13
|
+
deterministic tool calls, health, and info. For the route-by-route
|
|
14
|
+
contract, see the [HTTP API reference](/docs/reference/http-api.md).
|
|
15
|
+
|
|
16
|
+
Author `agent/channels/http.ts` only to override its defaults:
|
|
17
|
+
|
|
18
|
+
```ts
|
|
19
|
+
import {
|
|
20
|
+
bearerAuth,
|
|
21
|
+
httpChannel,
|
|
22
|
+
localDevStrict,
|
|
23
|
+
} from "@cursor/july/channels";
|
|
24
|
+
|
|
25
|
+
export default httpChannel({
|
|
26
|
+
auth: [localDevStrict(), bearerAuth(process.env.AGENT_TOKEN ?? "")],
|
|
27
|
+
onMessage: (message, { auth }) =>
|
|
28
|
+
`[caller ${auth?.principalId ?? "anonymous"}] ${message}`,
|
|
29
|
+
});
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Define a custom channel
|
|
33
|
+
|
|
34
|
+
Author `agent/channels/<id>.ts`. The filename is the channel id and the
|
|
35
|
+
route prefix:
|
|
36
|
+
|
|
37
|
+
```ts
|
|
38
|
+
import { defineChannel, POST } from "@cursor/july/channels";
|
|
39
|
+
import { z } from "zod";
|
|
40
|
+
|
|
41
|
+
export default defineChannel({
|
|
42
|
+
routes: [
|
|
43
|
+
POST("/review", {
|
|
44
|
+
description: "Review a pull request on this channel",
|
|
45
|
+
bodySchema: z.object({
|
|
46
|
+
message: z.string(),
|
|
47
|
+
prUrl: z.string().url(),
|
|
48
|
+
thread: z.string().optional(),
|
|
49
|
+
}),
|
|
50
|
+
handler: async (_req, { callTool, send, body }) => {
|
|
51
|
+
const prepared = await callTool("inspect_pr", {
|
|
52
|
+
prUrl: body.prUrl,
|
|
53
|
+
});
|
|
54
|
+
if (prepared.isError) {
|
|
55
|
+
return Response.json(
|
|
56
|
+
{ error: prepared.errorMessage ?? "Could not inspect pull request" },
|
|
57
|
+
{ status: 502 }
|
|
58
|
+
);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
const session = await send(
|
|
62
|
+
`${body.message}\n\nRead pr.json before answering.`,
|
|
63
|
+
{
|
|
64
|
+
continuationToken: body.thread ?? `pr:${body.prUrl}`,
|
|
65
|
+
workspaceFiles: {
|
|
66
|
+
"pr.json": JSON.stringify(prepared.result, null, 2) ?? "null",
|
|
67
|
+
},
|
|
68
|
+
}
|
|
69
|
+
);
|
|
70
|
+
return Response.json({ sessionId: session.id });
|
|
71
|
+
},
|
|
72
|
+
}),
|
|
73
|
+
],
|
|
74
|
+
events: {
|
|
75
|
+
"message.completed"(event, channel, ctx) {
|
|
76
|
+
// deliver the reply to the surface that owns this channel
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
// auth: [...], state: {...}, onStart(...), onStop(...)
|
|
80
|
+
});
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
This example assumes `agent/tools/inspect_pr.ts` exists. The handler
|
|
84
|
+
calls it before the model turn, so every review starts with validated PR
|
|
85
|
+
data. It also derives a stable conversation key from the PR URL and
|
|
86
|
+
writes the tool result to `pr.json`. Instructions can ask the model to
|
|
87
|
+
inspect a PR, but host code guarantees it.
|
|
88
|
+
|
|
89
|
+
## Route verbs and schemas
|
|
90
|
+
|
|
91
|
+
`GET`, `POST`, `PUT`, `PATCH`, and `DELETE` helpers build routes. Their
|
|
92
|
+
schemas are Zod, enforced at compile time:
|
|
93
|
+
|
|
94
|
+
| Verb | Required schema |
|
|
95
|
+
| ------------------------ | ------------------------------------- |
|
|
96
|
+
| `GET` | `querySchema` |
|
|
97
|
+
| `POST` / `PUT` / `PATCH` | `bodySchema` (optional `querySchema`) |
|
|
98
|
+
| `DELETE` | both optional |
|
|
99
|
+
|
|
100
|
+
Plain JSON Schema objects won't type-check; use `z.object({})` or
|
|
101
|
+
`z.unknown()` for intentionally open surfaces. The host validates before
|
|
102
|
+
the handler runs. Handlers receive typed `args.body` and `args.query`,
|
|
103
|
+
and empty POST bodies are coerced to `{}` first. Declared schemas are
|
|
104
|
+
projected on `GET /v1/info`, which powers the playground's **Try**
|
|
105
|
+
buttons and composer **slash commands**.
|
|
106
|
+
|
|
107
|
+
## Handler arguments
|
|
108
|
+
|
|
109
|
+
Handlers receive the Fetch `Request` and an args object:
|
|
110
|
+
|
|
111
|
+
| Member | What it is |
|
|
112
|
+
| ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
113
|
+
| `send(message, options?)` | Run a model turn on this channel; returns the session handle (options below) |
|
|
114
|
+
| `getSession(sessionId)` | Look up an existing session on this channel |
|
|
115
|
+
| `receive(channelDefinition, input)` | Hand off to another channel (schedules use this) |
|
|
116
|
+
| `callTool(name, input, options?)` | Deterministic server-tool call ([Tools](/docs/reference/tools.md#call-a-tool-without-a-model-turn)) |
|
|
117
|
+
| `body`, `query`, `params` | Validated payloads and `:param` path segments |
|
|
118
|
+
| `auth` | The `AuthContext` resolved by this route's auth chain |
|
|
119
|
+
| `requestIp` | The TCP peer address |
|
|
120
|
+
| `host` | Shared services: `host.mcp`, `host.github`, `host.slack`, `host.kv`, `host.files`, `host.reminders` |
|
|
121
|
+
| `waitUntil(promise)` | Background work that outlives the response |
|
|
122
|
+
| `sessionUrls(request, sessionId)` | Absolute playground + trace URLs for a session on this mount |
|
|
123
|
+
| `artifacts` | Unbound [artifacts](/docs/reference/artifacts.md) facade; pass `sessionId` in `tag` input to attribute one |
|
|
124
|
+
|
|
125
|
+
`send` options: `continuationToken` (the conversation key),
|
|
126
|
+
`admission` (`"preempt"` interrupts a busy session, the default;
|
|
127
|
+
`"coalesce"` enqueues behind the running turn, the
|
|
128
|
+
[Slack policy](/docs/reference/sessions.md#what-happens-when-i-send-a-follow-up)),
|
|
129
|
+
`workspaceFiles`, `workspaceDir`, `cloud` (attach cloud repos for this
|
|
130
|
+
session), `auth` (defaults to the request principal), `sdkAgentId`
|
|
131
|
+
(resume a specific SDK agent), `state` (starting channel state for new
|
|
132
|
+
sessions), `title` (session display title), `purpose` (`"eval"` skips
|
|
133
|
+
sticky A/B enrollment), and `coalesceSourceTs` (dedupe key for coalesce
|
|
134
|
+
queue items already delivered mid-turn).
|
|
135
|
+
|
|
136
|
+
## Events
|
|
137
|
+
|
|
138
|
+
The `events` map subscribes the channel to stream events for the
|
|
139
|
+
sessions it owns. Keys are event types from the
|
|
140
|
+
[event vocabulary](/docs/reference/sessions.md#which-events-can-i-stream), or `"*"`.
|
|
141
|
+
Handlers receive `(event, channel, ctx)`, where `channel.state` is the
|
|
142
|
+
per-session adapter state and `ctx` exposes session info and host
|
|
143
|
+
services. This is where a channel delivers replies back to its surface.
|
|
144
|
+
|
|
145
|
+
## State and lifecycle
|
|
146
|
+
|
|
147
|
+
`state` declares the starting per-session adapter state (JSON), persisted
|
|
148
|
+
on the session record. Routes and event handlers read and mutate it
|
|
149
|
+
through `channel.state`. `onStart(args)` runs when the channel mounts;
|
|
150
|
+
the Slack pack opens its Socket Mode connection here. `onStop()` runs
|
|
151
|
+
when the server drains.
|
|
152
|
+
|
|
153
|
+
`onStart` receives the route helpers (`send`, `getSession`, `receive`,
|
|
154
|
+
`callTool`, `host`, `waitUntil`, `artifacts`, and a `logger` that
|
|
155
|
+
respects the server's log sink) plus a set that exists for long-lived
|
|
156
|
+
transports:
|
|
157
|
+
|
|
158
|
+
- `emitAssistantMessage(sessionId, text)` appends an assistant message
|
|
159
|
+
without a model turn, for host tasks that already produced the final
|
|
160
|
+
text.
|
|
161
|
+
- `hasContinuationSession(token)` and `isContinuationBusy(token)`
|
|
162
|
+
report whether a continuation token has a live session and whether a
|
|
163
|
+
turn is in flight on it.
|
|
164
|
+
- `getContinuationLastBotMessageTs(token)` reads the Slack warm-delta
|
|
165
|
+
watermark from channel state.
|
|
166
|
+
- `interruptContinuation(token)` stops the in-flight turn and clears
|
|
167
|
+
coalesced follow-ups queued behind it.
|
|
168
|
+
- `resolveApproval(sessionId, callId, decision, auth, options?)`
|
|
169
|
+
approves or denies a parked tool call, how Slack Block Kit buttons
|
|
170
|
+
unblock a turn without the HTTP approvals route.
|
|
171
|
+
|
|
172
|
+
## Auth policies
|
|
173
|
+
|
|
174
|
+
Every route runs an auth-policy chain: the channel's `auth` array, or
|
|
175
|
+
`[localDevStrict()]` when unset. A policy is a function
|
|
176
|
+
`(request, info) => AuthContext | null` (async allowed); the first
|
|
177
|
+
non-null wins, and a request no policy admits gets `401`.
|
|
178
|
+
|
|
179
|
+
| Policy | Admits |
|
|
180
|
+
| ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
181
|
+
| `localDevStrict()` | Direct loopback callers with no proxy-forwarding headers (`X-Forwarded-For`, `X-Real-IP`, `Forwarded`, and `X-Forwarded-Host` are all rejected, so tunnels and same-host reverse proxies don't silently re-expose the route), plus a loopback `Host` header, which rejects DNS-rebinding callers that reach 127.0.0.1 with a remote hostname. |
|
|
182
|
+
| `localDev()` | Like `localDevStrict()` but without the `Host` check. An explicit, weaker opt-in. |
|
|
183
|
+
| `loopbackOnly()` | A loopback TCP peer, ignoring forwarding headers; for dev relays that legitimately carry them, like `gh webhook forward`. |
|
|
184
|
+
| `bearerAuth(token)` | `Authorization: Bearer <token>`, compared in constant time. Also accepts a verifier function mapping a presented token to an `AuthContext`. |
|
|
185
|
+
| `allowAll()` | Everyone, as an `anonymous` principal. Only for surfaces protected upstream (an HMAC-verified webhook) or intentionally public. |
|
|
186
|
+
| `publicEndpoint()` | Everyone on this custom channel. Managed hosting also serves the channel without an alias token. Use it only when the handler verifies the provider signature. |
|
|
187
|
+
|
|
188
|
+
`publicEndpoint()` applies only to custom channel routes. It does not open
|
|
189
|
+
the built-in session or tool API.
|
|
190
|
+
|
|
191
|
+
The resolved `AuthContext` (`{ authenticator, principalId,
|
|
192
|
+
principalType, attributes? }`) becomes the request principal. Sessions
|
|
193
|
+
bind to the principal that created them, and follow-up, stream, and list
|
|
194
|
+
routes enforce ownership (`403` otherwise).
|
|
195
|
+
|
|
196
|
+
Server flags interact with authored auth: `--bearer-token` swaps the
|
|
197
|
+
default `localDevStrict()` for `bearerAuth(...)` on channels that don't
|
|
198
|
+
author their own chain, and `--allow-anonymous` swaps it for
|
|
199
|
+
`allowAll()`. Authored `auth` arrays always win over both. A channel that
|
|
200
|
+
declares `[localDevStrict()]` stays loopback-only even on an
|
|
201
|
+
`--allow-anonymous` host.
|
|
202
|
+
|
|
203
|
+
## First class channels
|
|
204
|
+
|
|
205
|
+
**Slack** (`@cursor/july/channels/slack`): Socket Mode
|
|
206
|
+
transport, streaming replies, engagement rules, approval cards, and a
|
|
207
|
+
default block on Slack Connect / guest / other-workspace senders. Author
|
|
208
|
+
`agent/channels/slack.ts` with `slackChannel()`. Guide:
|
|
209
|
+
[Slack](/docs/guides/slack.md).
|
|
210
|
+
|
|
211
|
+
**GitHub** (`@cursor/july/channels/github`): webhook dispatch
|
|
212
|
+
with signature verification, per-event hooks returning `{ auth }` (a
|
|
213
|
+
model turn), `{ task }` (host work), or `null`, and CLI tooling for
|
|
214
|
+
replay and live forwarding. Author `agent/channels/github.ts` with
|
|
215
|
+
`githubChannel()`. Opt-in `progress.commitStatus` and `progress.banner`
|
|
216
|
+
converge a merge-box check and sticky PR comment from default stream
|
|
217
|
+
events. Guide: [GitHub](/docs/guides/github.md).
|
|
218
|
+
|
|
219
|
+
**Deployments** (`@cursor/july/channels/deployments`): pull transport
|
|
220
|
+
over `/v0/deployment-events`. Subscribe per deploy source with
|
|
221
|
+
`deploySourceUris`, narrow with `environments` / `events`, and handle
|
|
222
|
+
each event in `onEvent`. `deploySourceUris` must match
|
|
223
|
+
`Deployment.deploy_source_uri` as your deployment writer records it; the
|
|
224
|
+
field has no format, and matching is case-insensitive but otherwise
|
|
225
|
+
literal. Each event carries `deploySourceUri` and `deployVersion`.
|
|
226
|
+
Author `agent/channels/deployments.ts` with `deploymentsChannel()`. The
|
|
227
|
+
serve host discovers every mounted deployments channel, runs one relay
|
|
228
|
+
for the process against the union of their deploy sources, and routes
|
|
229
|
+
each event to the channels that asked for it; the Slack and SCM relays
|
|
230
|
+
use the same ownership. It authenticates with the host credential and
|
|
231
|
+
keeps a durable offset, so a restart resumes rather than dropping
|
|
232
|
+
events. An empty `deploySourceUris` list mounts the channel but starts
|
|
233
|
+
no relay for it, so an env-configured agent stays inert until its
|
|
234
|
+
deploy sources are set.
|
|
235
|
+
|
|
236
|
+
For other platforms like Discord or Teams, use the authored
|
|
237
|
+
`defineChannel` webhook form.
|
|
238
|
+
|
|
239
|
+
## Continuation semantics
|
|
240
|
+
|
|
241
|
+
Channels own their continuation-token format. The built-in HTTP channel
|
|
242
|
+
mints opaque rotating tokens, Slack uses `channelId:threadTs`, and PR
|
|
243
|
+
automations use keys like `pr:owner/repo#N`. Same token, same durable
|
|
244
|
+
session; one active continuation per session; the HTTP channel returns
|
|
245
|
+
`409` for stale tokens. For the full session model, see
|
|
246
|
+
[Sessions](/docs/reference/sessions.md).
|
|
247
|
+
|
|
248
|
+
## What's next
|
|
249
|
+
|
|
250
|
+
Continue with these pages:
|
|
251
|
+
|
|
252
|
+
- [Webhooks guide](/docs/guides/webhooks.md): the same API, walked through
|
|
253
|
+
- [HTTP API](/docs/reference/http-api.md): the built-in routes precisely
|
|
254
|
+
- [Sessions and streaming](/docs/reference/sessions.md): the events channels
|
|
255
|
+
subscribe to
|