@cursor/bdk 0.2.1 → 0.2.3
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 +1 -6
- package/dist/artifacts.d.ts +5 -2
- package/dist/artifacts.d.ts.map +1 -1
- package/dist/artifacts.js +5 -2
- package/dist/bin/agent-serve.js +23 -7
- package/dist/channels/github/auth.d.ts.map +1 -1
- package/dist/channels/github/auth.js +36 -5
- package/dist/channels/slack/manifest.d.ts.map +1 -1
- package/dist/channels/slack/manifest.js +3 -2
- package/dist/channels/slack/types.d.ts +6 -1
- package/dist/channels/slack/types.d.ts.map +1 -1
- package/dist/connections.d.ts +1 -1
- package/dist/connections.js +1 -1
- package/dist/docs/404.html +2 -2
- package/dist/docs/assets/{app.JVQvbRO-.js → app.BOIHhrKi.js} +4 -4
- package/dist/docs/assets/chunks/@localSearchIndexroot.D5L-b34G.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.BkhY63uW.js → VPLocalSearchBox.D49zVZqM.js} +1 -1
- package/dist/docs/assets/chunks/{arc.Cc1unYd3.js → arc.hmjb-sc4.js} +1 -1
- package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.CAY_TPVz.js → architectureDiagram-Q4EWVU46.CxEI1KqM.js} +1 -1
- package/dist/docs/assets/chunks/{baseUniq.my2VD3Xm.js → baseUniq.DHHvBWoV.js} +1 -1
- package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.CQXAOmqd.js → blockDiagram-DXYQGD6D.DnXW-3bu.js} +1 -1
- package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.D0AsQFSX.js → c4Diagram-AHTNJAMY.e-47O2jM.js} +1 -1
- package/dist/docs/assets/chunks/channel.BbOGaJQP.js +1 -0
- package/dist/docs/assets/chunks/{chunk-4BX2VUAB.DZjhgNls.js → chunk-4BX2VUAB.3ry4pYXB.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-4TB4RGXK.qdcp_qbo.js → chunk-4TB4RGXK.DGIZFRx6.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-55IACEB6.BHXoZhJ-.js → chunk-55IACEB6.DKBnqg9U.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-EDXVE4YY.Cds_Vwj3.js → chunk-EDXVE4YY.BIU8Ue5k.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-FMBD7UC4.CSl0HknT.js → chunk-FMBD7UC4.DP-TFhjI.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-OYMX7WX6.DJMvAt5N.js → chunk-OYMX7WX6.Ux0OYj5v.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-QZHKN3VN.BYQzBK9D.js → chunk-QZHKN3VN.BzHMwYox.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-YZCP3GAM.BAvw7N4o.js → chunk-YZCP3GAM.D4OGAsSP.js} +1 -1
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.Db58HCb1.js +1 -0
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.Db58HCb1.js +1 -0
- package/dist/docs/assets/chunks/clone.Co4MBflG.js +1 -0
- package/dist/docs/assets/chunks/{cose-bilkent-S5V4N54A.Buf3seya.js → cose-bilkent-S5V4N54A.Jq_7BUNx.js} +1 -1
- package/dist/docs/assets/chunks/{dagre-KV5264BT.DMGGa3uA.js → dagre-KV5264BT.Di-skR2x.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-5BDNPKRD.DDjnwRmY.js → diagram-5BDNPKRD.DeREHIdH.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.RwyrIr8Q.js → diagram-G4DWMVQ6.C7Kcqxro.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-MMDJMWI5.DRvQV16Z.js → diagram-MMDJMWI5.BK3eohyo.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-TYMM5635.Dw8W9BTk.js → diagram-TYMM5635.C6TyymXT.js} +1 -1
- package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.DQT1Hnwf.js → erDiagram-SMLLAGMA.DYGG-gGx.js} +1 -1
- package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.6_Aky-ut.js → flowDiagram-DWJPFMVM.C9nBcSV4.js} +1 -1
- package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.DHIwqnqN.js → ganttDiagram-T4ZO3ILL.wAg_ymsp.js} +1 -1
- package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.CGd_eJbn.js → gitGraphDiagram-UUTBAWPF.B87j9Oeg.js} +1 -1
- package/dist/docs/assets/chunks/{graph.ChMEylkh.js → graph.CuFMj31w.js} +1 -1
- package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.Cd4gMyAz.js → infoDiagram-42DDH7IO.P_mLGumP.js} +1 -1
- package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.D1uw7MXq.js → ishikawaDiagram-UXIWVN3A.DyuL_MsT.js} +1 -1
- package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.AWLXtelc.js → journeyDiagram-VCZTEJTY.CtP09IoJ.js} +1 -1
- package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.CagPhAn5.js → kanban-definition-6JOO6SKY.BoeSYPZo.js} +1 -1
- package/dist/docs/assets/chunks/{layout.ClTBBkE_.js → layout.B0lMMtNo.js} +1 -1
- package/dist/docs/assets/chunks/{linear.SwS2rOLA.js → linear.HxRBiAFX.js} +1 -1
- package/dist/docs/assets/chunks/{min.By_x-Btb.js → min.BGlFFHwS.js} +1 -1
- package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.By_RAMaP.js → mindmap-definition-QFDTVHPH.JyLBD9M8.js} +1 -1
- package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.DfAl9sy4.js → pieDiagram-DEJITSTG.DnSmNZF8.js} +1 -1
- package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.CNuqFRBj.js → quadrantDiagram-34T5L4WZ.CUCnbfCa.js} +1 -1
- package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.DJ5CmTCl.js → requirementDiagram-MS252O5E.py0IVUn5.js} +1 -1
- package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.D-T_AKJj.js → sankeyDiagram-XADWPNL6.Bkc-HWYp.js} +1 -1
- package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.BRn9WcrR.js → sequenceDiagram-FGHM5R23.Dqn8Mlv2.js} +1 -1
- package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.F12urmm7.js → stateDiagram-FHFEXIEX.JikkoQUU.js} +1 -1
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.CMsKhrW0.js +1 -0
- package/dist/docs/assets/chunks/{theme.zK3OJa_C.js → theme.b6HQ6zG_.js} +2 -2
- package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.B7GiQBeC.js → timeline-definition-GMOUNBTQ.BvpSXiBj.js} +1 -1
- package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.D0niwuY_.js → vennDiagram-DHZGUBPP.CU7MVnZx.js} +1 -1
- package/dist/docs/assets/chunks/{wardley-RL74JXVD.1zhHNRsx.js → wardley-RL74JXVD.BKwC4ctG.js} +1 -1
- package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.DKaqpT7K.js → wardleyDiagram-NUSXRM2D.BfaF6Uhe.js} +1 -1
- package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.e8BPicch.js → xychartDiagram-5P7HB3ND.Bg5dcpj4.js} +1 -1
- package/dist/docs/assets/{deployment.md.nGo1yIsa.js → deployment.md.BJ8i7Q6p.js} +5 -8
- package/dist/docs/assets/{deployment.md.nGo1yIsa.lean.js → deployment.md.BJ8i7Q6p.lean.js} +1 -1
- package/dist/docs/assets/{guides_github.md.C2_DSWlE.js → guides_github.md.Bq9kQU9B.js} +9 -3
- package/dist/docs/assets/{guides_github.md.C2_DSWlE.lean.js → guides_github.md.Bq9kQU9B.lean.js} +1 -1
- package/dist/docs/assets/{guides_slack.md.ZbHQETOT.js → guides_slack.md.diqqXTTm.js} +2 -2
- package/dist/docs/assets/{guides_slack.md.ZbHQETOT.lean.js → guides_slack.md.diqqXTTm.lean.js} +1 -1
- package/dist/docs/assets/{quickstart.md.wG4shE1f.js → quickstart.md.CHpHPBUN.js} +5 -3
- package/dist/docs/assets/{quickstart.md.wG4shE1f.lean.js → quickstart.md.CHpHPBUN.lean.js} +1 -1
- package/dist/docs/assets/{reference_artifacts.md.IFFC5Zln.js → reference_artifacts.md.CQfKq8F2.js} +1 -1
- package/dist/docs/assets/reference_cli.md.DgeLTO18.js +91 -0
- package/dist/docs/assets/reference_cli.md.DgeLTO18.lean.js +1 -0
- package/dist/docs/assets/{reference_connections.md._XpKiOaF.js → reference_connections.md.COq--gAm.js} +7 -3
- package/dist/docs/assets/{reference_connections.md._XpKiOaF.lean.js → reference_connections.md.COq--gAm.lean.js} +1 -1
- package/dist/docs/assets/{reference_evals.md.DqNyHMA6.js → reference_evals.md.CJm3uCUm.js} +4 -4
- package/dist/docs/assets/{reference_evals.md.DqNyHMA6.lean.js → reference_evals.md.CJm3uCUm.lean.js} +1 -1
- package/dist/docs/assets/{reference_hooks.md.Dg3dEugd.js → reference_hooks.md.DbthhtIR.js} +1 -1
- package/dist/docs/assets/{reference_sessions.md.BtpTjZmh.js → reference_sessions.md.DeRUItHD.js} +1 -1
- package/dist/docs/assets/troubleshooting.md.Cw5PKa3t.js +1 -0
- package/dist/docs/assets/{troubleshooting.md.BzZSu1Gz.lean.js → troubleshooting.md.Cw5PKa3t.lean.js} +1 -1
- package/dist/docs/building-with-agents.html +35 -35
- package/dist/docs/deployment.html +40 -43
- package/dist/docs/deployment.md +45 -15
- package/dist/docs/evals.html +35 -35
- package/dist/docs/guides/agent-to-agent.html +35 -35
- package/dist/docs/guides/bitbucket.html +35 -35
- package/dist/docs/guides/cloud-agents.html +35 -35
- package/dist/docs/guides/convert-automation.html +35 -35
- package/dist/docs/guides/github.html +43 -37
- package/dist/docs/guides/github.md +34 -0
- package/dist/docs/guides/gitlab.html +35 -35
- package/dist/docs/guides/grokbot-agents.html +35 -35
- package/dist/docs/guides/hooks.html +35 -35
- package/dist/docs/guides/improve.html +35 -35
- package/dist/docs/guides/jev.html +35 -35
- package/dist/docs/guides/mcp-oauth.html +35 -35
- package/dist/docs/guides/opentelemetry.html +35 -35
- package/dist/docs/guides/slack.html +37 -37
- package/dist/docs/guides/slack.md +5 -0
- package/dist/docs/guides/webhooks.html +35 -35
- package/dist/docs/hashmap.json +1 -1
- package/dist/docs/hillclimbing.html +35 -35
- package/dist/docs/index.html +35 -35
- package/dist/docs/llms-full.txt +205 -97
- package/dist/docs/quickstart.html +40 -38
- package/dist/docs/quickstart.md +7 -1
- package/dist/docs/reference/agent-config.html +35 -35
- package/dist/docs/reference/artifacts.html +37 -37
- package/dist/docs/reference/artifacts.md +1 -1
- package/dist/docs/reference/channels.html +35 -35
- package/dist/docs/reference/cli.html +55 -61
- package/dist/docs/reference/cli.md +65 -63
- package/dist/docs/reference/connections.html +42 -38
- package/dist/docs/reference/connections.md +28 -2
- package/dist/docs/reference/evals.html +39 -39
- package/dist/docs/reference/evals.md +6 -7
- package/dist/docs/reference/extensions.html +35 -35
- package/dist/docs/reference/hooks.html +37 -37
- package/dist/docs/reference/hooks.md +3 -2
- package/dist/docs/reference/http-api.html +35 -35
- package/dist/docs/reference/instructions.html +35 -35
- package/dist/docs/reference/playground.html +35 -35
- package/dist/docs/reference/project-layout.html +35 -35
- package/dist/docs/reference/prompt.html +35 -35
- package/dist/docs/reference/schedules.html +35 -35
- package/dist/docs/reference/sessions.html +36 -36
- package/dist/docs/reference/sessions.md +4 -3
- package/dist/docs/reference/skills.html +35 -35
- package/dist/docs/reference/subagents.html +35 -35
- package/dist/docs/reference/tools.html +35 -35
- package/dist/docs/templates/agentic-owners.html +35 -35
- package/dist/docs/templates/security-reviewer.html +35 -35
- package/dist/docs/templates/thermo-quality-review.html +35 -35
- package/dist/docs/templates/thermo-review.html +35 -35
- package/dist/docs/templates/triage.html +35 -35
- package/dist/docs/troubleshooting.html +36 -36
- package/dist/docs/troubleshooting.md +7 -3
- package/dist/extensions/cursor-cloud-agents/extension.d.ts +16 -4
- package/dist/extensions/cursor-cloud-agents/extension.d.ts.map +1 -1
- package/dist/extensions/cursor-cloud-agents/extension.js +7 -3
- package/dist/extensions/cursor-cloud-agents/lib/channels.d.ts +3 -0
- package/dist/extensions/cursor-cloud-agents/lib/channels.d.ts.map +1 -0
- package/dist/extensions/cursor-cloud-agents/lib/channels.js +7 -0
- package/dist/extensions/cursor-cloud-agents/lib/repos.d.ts +4 -2
- package/dist/extensions/cursor-cloud-agents/lib/repos.d.ts.map +1 -1
- package/dist/extensions/cursor-cloud-agents/lib/repos.js +21 -12
- package/dist/extensions/cursor-cloud-agents/tools/cancel.d.ts.map +1 -1
- package/dist/extensions/cursor-cloud-agents/tools/cancel.js +2 -0
- package/dist/extensions/cursor-cloud-agents/tools/launch.d.ts.map +1 -1
- package/dist/extensions/cursor-cloud-agents/tools/launch.js +3 -1
- package/dist/extensions/cursor-cloud-agents/tools/reply.d.ts.map +1 -1
- package/dist/extensions/cursor-cloud-agents/tools/reply.js +2 -0
- package/dist/extensions/cursor-grokbot-agents/extension.d.ts +77 -0
- package/dist/extensions/cursor-grokbot-agents/extension.d.ts.map +1 -0
- package/dist/extensions/cursor-grokbot-agents/extension.js +63 -0
- package/dist/extensions/cursor-grokbot-agents/lib/agents.d.ts +11 -0
- package/dist/extensions/cursor-grokbot-agents/lib/agents.d.ts.map +1 -0
- package/dist/extensions/cursor-grokbot-agents/lib/agents.js +31 -0
- package/dist/extensions/cursor-grokbot-agents/lib/backend.d.ts +56 -0
- package/dist/extensions/cursor-grokbot-agents/lib/backend.d.ts.map +1 -0
- package/dist/extensions/cursor-grokbot-agents/lib/backend.js +158 -0
- package/dist/extensions/cursor-grokbot-agents/lib/contacts.d.ts +28 -0
- package/dist/extensions/cursor-grokbot-agents/lib/contacts.d.ts.map +1 -0
- package/dist/extensions/cursor-grokbot-agents/lib/contacts.js +59 -0
- package/dist/extensions/cursor-grokbot-agents/lib/conversation.d.ts +53 -0
- package/dist/extensions/cursor-grokbot-agents/lib/conversation.d.ts.map +1 -0
- package/dist/extensions/cursor-grokbot-agents/lib/conversation.js +206 -0
- package/dist/extensions/cursor-grokbot-agents/lib/inputs.d.ts +4 -0
- package/dist/extensions/cursor-grokbot-agents/lib/inputs.d.ts.map +1 -0
- package/dist/extensions/cursor-grokbot-agents/lib/inputs.js +15 -0
- package/dist/extensions/cursor-grokbot-agents/lib/lock.d.ts +12 -0
- package/dist/extensions/cursor-grokbot-agents/lib/lock.d.ts.map +1 -0
- package/dist/extensions/cursor-grokbot-agents/lib/lock.js +25 -0
- package/dist/extensions/cursor-grokbot-agents/skills/consult.md +40 -0
- package/dist/extensions/cursor-grokbot-agents/tools/ask.d.ts +4 -0
- package/dist/extensions/cursor-grokbot-agents/tools/ask.d.ts.map +1 -0
- package/dist/extensions/cursor-grokbot-agents/tools/ask.js +37 -0
- package/dist/extensions/cursor-grokbot-agents/tools/check.d.ts +4 -0
- package/dist/extensions/cursor-grokbot-agents/tools/check.d.ts.map +1 -0
- package/dist/extensions/cursor-grokbot-agents/tools/check.js +32 -0
- package/dist/extensions/cursor-grokbot-agents/tools/interrupt.d.ts +4 -0
- package/dist/extensions/cursor-grokbot-agents/tools/interrupt.d.ts.map +1 -0
- package/dist/extensions/cursor-grokbot-agents/tools/interrupt.js +24 -0
- package/dist/extensions/cursor-grokbot-agents/tools/list.d.ts +4 -0
- package/dist/extensions/cursor-grokbot-agents/tools/list.d.ts.map +1 -0
- package/dist/extensions/cursor-grokbot-agents/tools/list.js +34 -0
- package/dist/files-backends/cursor-hosted.js +4 -4
- package/dist/internal/artifacts-store.d.ts +12 -2
- package/dist/internal/artifacts-store.d.ts.map +1 -1
- package/dist/internal/artifacts-store.js +8 -4
- package/dist/internal/cli-ax.d.ts +1 -0
- package/dist/internal/cli-ax.d.ts.map +1 -1
- package/dist/internal/cli-ax.js +43 -10
- package/dist/internal/cli-deploy.d.ts +5 -1
- package/dist/internal/cli-deploy.d.ts.map +1 -1
- package/dist/internal/cli-deploy.js +22 -4
- package/dist/internal/cli-mcp-oauth.d.ts.map +1 -1
- package/dist/internal/cli-mcp-oauth.js +2 -1
- package/dist/internal/cli-skills.d.ts +1 -1
- package/dist/internal/cli-skills.d.ts.map +1 -1
- package/dist/internal/cli-skills.js +5 -5
- package/dist/internal/connection-env.d.ts +31 -0
- package/dist/internal/connection-env.d.ts.map +1 -0
- package/dist/internal/connection-env.js +84 -0
- package/dist/internal/cursor/backend-client.js +5 -0
- package/dist/internal/deploy-client.d.ts +30 -6
- package/dist/internal/deploy-client.d.ts.map +1 -1
- package/dist/internal/deploy-client.js +45 -9
- package/dist/internal/discovery/connections.d.ts.map +1 -1
- package/dist/internal/discovery/connections.js +11 -0
- package/dist/internal/event-mapper.d.ts +46 -4
- package/dist/internal/event-mapper.d.ts.map +1 -1
- package/dist/internal/event-mapper.js +316 -25
- package/dist/internal/hosted-delivery-protocol.d.ts +36 -11
- package/dist/internal/hosted-delivery-protocol.d.ts.map +1 -1
- package/dist/internal/hosted-delivery-protocol.js +31 -8
- package/dist/internal/hosted-delivery.d.ts +2 -2
- package/dist/internal/hosted-delivery.d.ts.map +1 -1
- package/dist/internal/hosted-delivery.js +229 -49
- package/dist/internal/hosting.d.ts +2 -2
- package/dist/internal/hosting.d.ts.map +1 -1
- package/dist/internal/hosting.js +9 -3
- package/dist/internal/install-cursor-skills.d.ts +20 -24
- package/dist/internal/install-cursor-skills.d.ts.map +1 -1
- package/dist/internal/install-cursor-skills.js +50 -48
- package/dist/internal/legacy-command-guard.d.ts +2 -0
- package/dist/internal/legacy-command-guard.d.ts.map +1 -1
- package/dist/internal/legacy-command-guard.js +10 -1
- package/dist/internal/mcp-host.d.ts +6 -0
- package/dist/internal/mcp-host.d.ts.map +1 -1
- package/dist/internal/mcp-host.js +35 -16
- package/dist/internal/sdk-runner.d.ts +2 -0
- package/dist/internal/sdk-runner.d.ts.map +1 -1
- package/dist/internal/sdk-runner.js +10 -0
- package/dist/internal/server.d.ts.map +1 -1
- package/dist/internal/server.js +11 -1
- package/dist/internal/session-engine.d.ts +1 -1
- package/dist/internal/session-engine.d.ts.map +1 -1
- package/dist/internal/session-engine.js +33 -8
- package/dist/playground/assets/index-6BbTPnaT.css +1 -0
- package/dist/playground/assets/{index-FFdUqTt_.js → index-CI7FAmOP.js} +43 -43
- package/dist/playground/index.html +2 -2
- package/dist/types.d.ts +50 -4
- package/dist/types.d.ts.map +1 -1
- package/docs/deployment.md +45 -15
- package/docs/guides/github.md +34 -0
- package/docs/guides/slack.md +5 -0
- package/docs/quickstart.md +7 -1
- package/docs/reference/artifacts.md +1 -1
- package/docs/reference/cli.md +65 -63
- package/docs/reference/connections.md +28 -2
- package/docs/reference/evals.md +6 -7
- package/docs/reference/hooks.md +3 -2
- package/docs/reference/sessions.md +4 -3
- package/docs/troubleshooting.md +7 -3
- package/package.json +2 -4
- package/scripts/install-cursor-skills.mjs +1 -1
- package/skills/create-agent/SKILL.md +1 -1
- package/skills/debug/SKILL.md +1 -1
- package/skills/deploy/SKILL.md +1 -1
- package/skills/evals/SKILL.md +1 -1
- package/skills/framework-map/SKILL.md +1 -1
- package/skills/github/SKILL.md +1 -1
- package/skills/hillclimb/SKILL.md +1 -1
- package/skills/mcp-auth/SKILL.md +1 -1
- package/skills/otel/SKILL.md +1 -1
- package/skills/setup-slack/SKILL.md +1 -1
- package/src/artifacts.ts +5 -2
- package/src/bin/agent-serve.ts +27 -6
- package/src/channels/github/auth.ts +44 -5
- package/src/channels/slack/manifest.ts +2 -1
- package/src/channels/slack/types.ts +6 -1
- package/src/connections.ts +1 -1
- package/src/extensions/cursor-cloud-agents/extension.ts +23 -6
- package/src/extensions/cursor-cloud-agents/lib/channels.ts +11 -0
- package/src/extensions/cursor-cloud-agents/lib/repos.ts +19 -7
- package/src/extensions/cursor-cloud-agents/tools/cancel.ts +2 -0
- package/src/extensions/cursor-cloud-agents/tools/launch.ts +3 -1
- package/src/extensions/cursor-cloud-agents/tools/reply.ts +2 -0
- package/src/extensions/cursor-grokbot-agents/extension.ts +132 -0
- package/src/extensions/cursor-grokbot-agents/lib/agents.ts +42 -0
- package/src/extensions/cursor-grokbot-agents/lib/backend.ts +208 -0
- package/src/extensions/cursor-grokbot-agents/lib/contacts.ts +74 -0
- package/src/extensions/cursor-grokbot-agents/lib/conversation.ts +260 -0
- package/src/extensions/cursor-grokbot-agents/lib/inputs.ts +21 -0
- package/src/extensions/cursor-grokbot-agents/lib/lock.ts +26 -0
- package/src/extensions/cursor-grokbot-agents/skills/consult.md +40 -0
- package/src/extensions/cursor-grokbot-agents/tools/ask.ts +32 -0
- package/src/extensions/cursor-grokbot-agents/tools/check.ts +25 -0
- package/src/extensions/cursor-grokbot-agents/tools/interrupt.ts +17 -0
- package/src/extensions/cursor-grokbot-agents/tools/list.ts +26 -0
- package/src/files-backends/cursor-hosted.ts +4 -4
- package/src/internal/artifacts-store.ts +14 -3
- package/src/internal/cli-ax.ts +52 -7
- package/src/internal/cli-deploy.ts +39 -6
- package/src/internal/cli-mcp-oauth.ts +2 -1
- package/src/internal/cli-skills.ts +4 -5
- package/src/internal/connection-env.ts +106 -0
- package/src/internal/cursor/backend-client.ts +6 -0
- package/src/internal/deploy-client.ts +79 -9
- package/src/internal/discovery/connections.ts +11 -0
- package/src/internal/event-mapper.ts +367 -36
- package/src/internal/hosted-delivery-protocol.ts +57 -20
- package/src/internal/hosted-delivery.ts +487 -229
- package/src/internal/hosting.ts +10 -3
- package/src/internal/install-cursor-skills.ts +56 -53
- package/src/internal/legacy-command-guard.ts +13 -1
- package/src/internal/mcp-host.ts +45 -17
- package/src/internal/sdk-runner.ts +11 -0
- package/src/internal/server.ts +13 -1
- package/src/internal/session-engine.ts +33 -13
- package/src/types.ts +56 -5
- package/templates/agents-md/bot/lib/collect.ts +1 -4
- package/templates/code-wiki/bot/channels/github.ts +2 -2
- package/templates/demo/bot/channels/github.ts +5 -1
- package/templates/pr-autofixer/bot/lib/start-drive.ts +4 -4
- package/templates/triage/bot/lib/types.ts +6 -6
- package/dist/docs/assets/chunks/@localSearchIndexroot.Caw9W1pM.js +0 -1
- package/dist/docs/assets/chunks/channel.Sapo9HJZ.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.NPiy3Hz7.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.NPiy3Hz7.js +0 -1
- package/dist/docs/assets/chunks/clone.zl2qolPE.js +0 -1
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2._auCa3fR.js +0 -1
- package/dist/docs/assets/reference_cli.md.BK2QUH67.js +0 -97
- package/dist/docs/assets/reference_cli.md.BK2QUH67.lean.js +0 -1
- package/dist/docs/assets/troubleshooting.md.BzZSu1Gz.js +0 -1
- package/dist/playground/assets/index-BMV_IcEE.css +0 -1
- /package/dist/docs/assets/{reference_artifacts.md.IFFC5Zln.lean.js → reference_artifacts.md.CQfKq8F2.lean.js} +0 -0
- /package/dist/docs/assets/{reference_hooks.md.Dg3dEugd.lean.js → reference_hooks.md.DbthhtIR.lean.js} +0 -0
- /package/dist/docs/assets/{reference_sessions.md.BtpTjZmh.lean.js → reference_sessions.md.DeRUItHD.lean.js} +0 -0
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
* backend stays authoritative — these exist so mistakes fail fast and
|
|
7
7
|
* locally with the same grammar the server enforces.
|
|
8
8
|
*/
|
|
9
|
-
/** `hosting.egressDomains` cap (
|
|
10
|
-
export declare const MAX_EGRESS_DOMAINS =
|
|
9
|
+
/** `hosting.egressDomains` cap (the manifest schema and deploy body agree). */
|
|
10
|
+
export declare const MAX_EGRESS_DOMAINS = 64;
|
|
11
11
|
/** Max secrets per deployment. */
|
|
12
12
|
export declare const MAX_SECRETS = 32;
|
|
13
13
|
/** Max secret value size in bytes. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hosting.d.ts","sourceRoot":"","sources":["../../src/internal/hosting.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH
|
|
1
|
+
{"version":3,"file":"hosting.d.ts","sourceRoot":"","sources":["../../src/internal/hosting.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,+EAA+E;AAC/E,eAAO,MAAM,kBAAkB,KAAK,CAAC;AACrC,kCAAkC;AAClC,eAAO,MAAM,WAAW,KAAK,CAAC;AAC9B,sCAAsC;AACtC,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAC3C,8BAA8B;AAC9B,eAAO,MAAM,sBAAsB,KAAK,CAAC;AACzC,mEAAmE;AACnE,eAAO,MAAM,2BAA2B,YAAY,CAAC;AACrD,oEAAoE;AACpE,eAAO,MAAM,oBAAoB,MAAM,CAAC;AACxC,sDAAsD;AACtD,eAAO,MAAM,yBAAyB,EAAE,MAA+B,CAAC;AAIxE,gFAAgF;AAChF,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAK3E;AAED;;;;;GAKG;AACH,eAAO,MAAM,oCAAoC,YAAI,2BAA2B,CAAU,CAAC;AAW3F,4EAA4E;AAC5E,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CASvE;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAQnE;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAQ1D;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAS3E;AAID,sEAAsE;AACtE,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE5D"}
|
package/dist/internal/hosting.js
CHANGED
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
* backend stays authoritative — these exist so mistakes fail fast and
|
|
7
7
|
* locally with the same grammar the server enforces.
|
|
8
8
|
*/
|
|
9
|
-
/** `hosting.egressDomains` cap (
|
|
10
|
-
export const MAX_EGRESS_DOMAINS =
|
|
9
|
+
/** `hosting.egressDomains` cap (the manifest schema and deploy body agree). */
|
|
10
|
+
export const MAX_EGRESS_DOMAINS = 64;
|
|
11
11
|
/** Max secrets per deployment. */
|
|
12
12
|
export const MAX_SECRETS = 32;
|
|
13
13
|
/** Max secret value size in bytes. */
|
|
@@ -39,12 +39,18 @@ const SECRET_NAME_PATTERN = /^[A-Z][A-Z0-9_]*$/;
|
|
|
39
39
|
// Lowercase hostname with >=2 labels, an alphabetic TLD, and at most one
|
|
40
40
|
// leading `*.` wildcard. Labels: alphanumeric with interior hyphens.
|
|
41
41
|
const EGRESS_DOMAIN_PATTERN = /^(\*\.)?([a-z0-9]([a-z0-9-]*[a-z0-9])?\.)+[a-z]+$/;
|
|
42
|
+
/** `host:port` asks for raw TCP egress; a wildcard host has no address to open. */
|
|
43
|
+
const EGRESS_TCP_PATTERN = /^([a-z0-9]([a-z0-9-]*[a-z0-9])?\.)+[a-z]+:([1-9]\d{0,4})$/;
|
|
42
44
|
/** Returns a human error message, or undefined when the domain is valid. */
|
|
43
45
|
export function validateEgressDomain(domain) {
|
|
44
46
|
if (EGRESS_DOMAIN_PATTERN.test(domain)) {
|
|
45
47
|
return undefined;
|
|
46
48
|
}
|
|
47
|
-
|
|
49
|
+
const tcp = EGRESS_TCP_PATTERN.exec(domain);
|
|
50
|
+
if (tcp !== null && Number(tcp[3]) <= 65535) {
|
|
51
|
+
return undefined;
|
|
52
|
+
}
|
|
53
|
+
return `Invalid egress domain ${JSON.stringify(domain)}: use a lowercase hostname with at least two labels and an alphabetic TLD (e.g. "api.example.com"), optionally with a single leading "*." wildcard or a trailing ":port" for raw TCP.`;
|
|
48
54
|
}
|
|
49
55
|
/**
|
|
50
56
|
* Returns a human error message, or undefined when the name is a valid
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Offer to install the package's coding-agent skills into the user's
|
|
3
|
-
* personal Cursor skills dir under `~/.cursor/skills/
|
|
3
|
+
* personal Cursor skills dir under `~/.cursor/skills/bdk/<skill>/`.
|
|
4
4
|
*
|
|
5
|
-
* Cursor walks `~/.cursor/skills` recursively, so the `
|
|
5
|
+
* Cursor walks `~/.cursor/skills` recursively, so the `bdk/` folder is
|
|
6
6
|
* only organizational — identity comes from the leaf folder that holds
|
|
7
7
|
* SKILL.md. Installed copies get `alwaysApply: true` so Cursor injects the
|
|
8
8
|
* skill body as a global rule instead of leaving it as an on-demand catalog
|
|
@@ -14,9 +14,7 @@
|
|
|
14
14
|
* install, so `pnpm install` in everysphere does not overwrite `~/.cursor`.
|
|
15
15
|
*/
|
|
16
16
|
/** Category folder under ~/.cursor/skills (Cursor discovers nested skills). */
|
|
17
|
-
export declare const CURSOR_SKILLS_NAMESPACE = "
|
|
18
|
-
/** Pre-rename install folder. Install deletes this so `/agentkit-*` rows disappear. */
|
|
19
|
-
export declare const LEGACY_CURSOR_SKILLS_NAMESPACE = "agentkit";
|
|
17
|
+
export declare const CURSOR_SKILLS_NAMESPACE = "bdk";
|
|
20
18
|
/** How long the `init` offer waits for an answer before skipping the install. */
|
|
21
19
|
export declare const SKILL_PROMPT_TIMEOUT_MS = 45000;
|
|
22
20
|
/**
|
|
@@ -27,9 +25,9 @@ export declare const CURSOR_JULY_SKILLS_HOME_ENV = "CURSOR_JULY_SKILLS_HOME";
|
|
|
27
25
|
/** Set to `1` to skip the postinstall skill copy. */
|
|
28
26
|
export declare const CURSOR_JULY_SKIP_SKILL_INSTALL_ENV = "CURSOR_JULY_SKIP_SKILL_INSTALL";
|
|
29
27
|
export interface PackageSkill {
|
|
30
|
-
/** Frontmatter `name` (e.g.
|
|
28
|
+
/** Frontmatter `name` (e.g. bdk-create-agent). */
|
|
31
29
|
name: string;
|
|
32
|
-
/** Leaf install directory under
|
|
30
|
+
/** Leaf install directory under bdk/ (e.g. create-agent). */
|
|
33
31
|
leafDir: string;
|
|
34
32
|
/** Absolute path to the source skill directory in the package. */
|
|
35
33
|
sourceDir: string;
|
|
@@ -42,19 +40,17 @@ export declare function cursorSkillsHome(home?: string): string;
|
|
|
42
40
|
* (npm, pnpm, yarn, npx, global), not the everysphere source checkout.
|
|
43
41
|
*/
|
|
44
42
|
export declare function isConsumerPackageInstall(packageRoot: string): boolean;
|
|
45
|
-
/** `~/.cursor/skills/
|
|
46
|
-
export declare function
|
|
47
|
-
/**
|
|
48
|
-
export declare function legacyAgentkitCursorSkillsDir(skillsHome?: string): string;
|
|
49
|
-
/** Absolute install path for one skill: `…/agentsdk/<leafDir>`. */
|
|
43
|
+
/** `~/.cursor/skills/bdk` — where package skills are installed. */
|
|
44
|
+
export declare function bdkCursorSkillsDir(skillsHome?: string): string;
|
|
45
|
+
/** Absolute install path for one skill: `…/bdk/<leafDir>`. */
|
|
50
46
|
export declare function skillInstallPath(skill: Pick<PackageSkill, "leafDir">, skillsHome?: string): string;
|
|
51
47
|
/**
|
|
52
48
|
* Skills shipped next to the running package. Uses the frontmatter `name`
|
|
53
|
-
* when present, otherwise `
|
|
49
|
+
* when present, otherwise `bdk-<dir>`.
|
|
54
50
|
*/
|
|
55
51
|
export declare function listShippedPackageSkills(packageRoot?: string): Promise<PackageSkill[]>;
|
|
56
52
|
/**
|
|
57
|
-
* Skills that do not yet have a SKILL.md under ~/.cursor/skills/
|
|
53
|
+
* Skills that do not yet have a SKILL.md under ~/.cursor/skills/bdk/.
|
|
58
54
|
* Install still overwrites every shipped skill when the user confirms — this
|
|
59
55
|
* helper is for messaging (fresh install vs update).
|
|
60
56
|
*/
|
|
@@ -67,15 +63,15 @@ export interface SkillInstallResult {
|
|
|
67
63
|
installed: string[];
|
|
68
64
|
/** Leaf dirs deleted because the package no longer ships them. */
|
|
69
65
|
removed: string[];
|
|
70
|
-
/**
|
|
71
|
-
|
|
66
|
+
/** Leftover namespace dirs deleted (`…/agentsdk`, `…/agentkit`). */
|
|
67
|
+
removedLegacyDirs: string[];
|
|
72
68
|
}
|
|
73
69
|
/**
|
|
74
|
-
* Copy each skill directory into `skillsHome/
|
|
70
|
+
* Copy each skill directory into `skillsHome/bdk/<leafDir>/`.
|
|
75
71
|
* Always overwrites so a package upgrade refreshes local Cursor skills.
|
|
76
72
|
* Strips monorepo-only frontmatter, sets `alwaysApply: true` so Cursor
|
|
77
73
|
* loads the body into context, and removes leaf dirs no longer shipped.
|
|
78
|
-
* Also deletes leftover `skillsHome/
|
|
74
|
+
* Also deletes leftover `skillsHome/agentsdk/` and `skillsHome/agentkit/`.
|
|
79
75
|
*/
|
|
80
76
|
export declare function installCursorSkills(skills: readonly PackageSkill[], skillsHome?: string): Promise<SkillInstallResult>;
|
|
81
77
|
/**
|
|
@@ -88,7 +84,7 @@ export interface SkillInstallPlan {
|
|
|
88
84
|
shipped: PackageSkill[];
|
|
89
85
|
/** Resolved `~/.cursor/skills`, to install into. */
|
|
90
86
|
skillsHome: string;
|
|
91
|
-
/** Install target: `<skillsHome>/
|
|
87
|
+
/** Install target: `<skillsHome>/bdk`. */
|
|
92
88
|
directory: string;
|
|
93
89
|
/** Leaf dirs the package ships. */
|
|
94
90
|
leaves: string[];
|
|
@@ -96,15 +92,15 @@ export interface SkillInstallPlan {
|
|
|
96
92
|
firstInstall: boolean;
|
|
97
93
|
/** Installed leaf dirs the package dropped; installing deletes them. */
|
|
98
94
|
orphans: string[];
|
|
99
|
-
/**
|
|
100
|
-
|
|
95
|
+
/** Leftover namespace dirs that still exist. Installing deletes them. */
|
|
96
|
+
legacyDirs: string[];
|
|
101
97
|
}
|
|
102
98
|
/** What an install would do, for the offer and for `install-skills`. */
|
|
103
99
|
export declare function planSkillInstall(options?: {
|
|
104
100
|
packageRoot?: string;
|
|
105
101
|
skillsHome?: string;
|
|
106
102
|
}): Promise<SkillInstallPlan>;
|
|
107
|
-
/** `Installed 9
|
|
103
|
+
/** `Installed 9 BDK skills`, what it dropped, and where it went. */
|
|
108
104
|
export declare function formatSkillInstall(plan: SkillInstallPlan, result: SkillInstallResult): string;
|
|
109
105
|
export type PackageInstallSkillSyncResult = {
|
|
110
106
|
status: "installed";
|
|
@@ -123,7 +119,7 @@ export interface SyncCursorSkillsOnPackageInstallOptions {
|
|
|
123
119
|
out?: (text: string) => void;
|
|
124
120
|
}
|
|
125
121
|
/**
|
|
126
|
-
* Copy shipped coding-agent skills into ~/.cursor/skills/
|
|
122
|
+
* Copy shipped coding-agent skills into ~/.cursor/skills/bdk during a
|
|
127
123
|
* consumer `npm install` / `npx`. Never throws: a failed copy must not fail
|
|
128
124
|
* the package install. No-op in the monorepo source tree and when
|
|
129
125
|
* `CURSOR_JULY_SKIP_SKILL_INSTALL=1`.
|
|
@@ -140,7 +136,7 @@ export interface OfferInstallCursorSkillsOptions {
|
|
|
140
136
|
}
|
|
141
137
|
/**
|
|
142
138
|
* On a TTY, offer to install/update every shipped package skill into
|
|
143
|
-
* ~/.cursor/skills/
|
|
139
|
+
* ~/.cursor/skills/bdk (always overwriting). No-op when non-interactive
|
|
144
140
|
* or the package ships no skills. An unanswered prompt skips the install
|
|
145
141
|
* rather than blocking the caller — see `SKILL_PROMPT_TIMEOUT_MS`.
|
|
146
142
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install-cursor-skills.d.ts","sourceRoot":"","sources":["../../src/internal/install-cursor-skills.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AASH,+EAA+E;AAC/E,eAAO,MAAM,uBAAuB,
|
|
1
|
+
{"version":3,"file":"install-cursor-skills.d.ts","sourceRoot":"","sources":["../../src/internal/install-cursor-skills.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Offer to install the package's coding-agent skills into the user's
|
|
3
|
-
* personal Cursor skills dir under `~/.cursor/skills/
|
|
3
|
+
* personal Cursor skills dir under `~/.cursor/skills/bdk/<skill>/`.
|
|
4
4
|
*
|
|
5
|
-
* Cursor walks `~/.cursor/skills` recursively, so the `
|
|
5
|
+
* Cursor walks `~/.cursor/skills` recursively, so the `bdk/` folder is
|
|
6
6
|
* only organizational — identity comes from the leaf folder that holds
|
|
7
7
|
* SKILL.md. Installed copies get `alwaysApply: true` so Cursor injects the
|
|
8
8
|
* skill body as a global rule instead of leaving it as an on-demand catalog
|
|
@@ -29,9 +29,12 @@ import { CLI_COMMAND_NAME, packageRootDir } from "./distribution.js";
|
|
|
29
29
|
import { parseFrontmatter } from "./frontmatter.js";
|
|
30
30
|
import { stdoutPalette } from "./terminal-style.js";
|
|
31
31
|
/** Category folder under ~/.cursor/skills (Cursor discovers nested skills). */
|
|
32
|
-
export const CURSOR_SKILLS_NAMESPACE = "
|
|
33
|
-
/**
|
|
34
|
-
|
|
32
|
+
export const CURSOR_SKILLS_NAMESPACE = "bdk";
|
|
33
|
+
/**
|
|
34
|
+
* Earlier install folders. Deleted on install so stale skill ids stop
|
|
35
|
+
* being discovered next to the current copies.
|
|
36
|
+
*/
|
|
37
|
+
const LEGACY_CURSOR_SKILLS_NAMESPACES = ["agentsdk", "agentkit"];
|
|
35
38
|
/** How long the `init` offer waits for an answer before skipping the install. */
|
|
36
39
|
export const SKILL_PROMPT_TIMEOUT_MS = 45000;
|
|
37
40
|
/**
|
|
@@ -61,21 +64,20 @@ export function isConsumerPackageInstall(packageRoot) {
|
|
|
61
64
|
// matches when this runs (or is tested) on POSIX. Do not rewrite the path.
|
|
62
65
|
return packageRoot.split(/[\\/]/).includes("node_modules");
|
|
63
66
|
}
|
|
64
|
-
/** `~/.cursor/skills/
|
|
65
|
-
export function
|
|
67
|
+
/** `~/.cursor/skills/bdk` — where package skills are installed. */
|
|
68
|
+
export function bdkCursorSkillsDir(skillsHome = cursorSkillsHome()) {
|
|
66
69
|
return join(skillsHome, CURSOR_SKILLS_NAMESPACE);
|
|
67
70
|
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
return join(skillsHome, LEGACY_CURSOR_SKILLS_NAMESPACE);
|
|
71
|
+
function legacyCursorSkillsDirs(skillsHome) {
|
|
72
|
+
return LEGACY_CURSOR_SKILLS_NAMESPACES.map(name => join(skillsHome, name));
|
|
71
73
|
}
|
|
72
|
-
/** Absolute install path for one skill: `…/
|
|
74
|
+
/** Absolute install path for one skill: `…/bdk/<leafDir>`. */
|
|
73
75
|
export function skillInstallPath(skill, skillsHome = cursorSkillsHome()) {
|
|
74
|
-
return join(
|
|
76
|
+
return join(bdkCursorSkillsDir(skillsHome), skill.leafDir);
|
|
75
77
|
}
|
|
76
78
|
/**
|
|
77
79
|
* Skills shipped next to the running package. Uses the frontmatter `name`
|
|
78
|
-
* when present, otherwise `
|
|
80
|
+
* when present, otherwise `bdk-<dir>`.
|
|
79
81
|
*/
|
|
80
82
|
export function listShippedPackageSkills() {
|
|
81
83
|
return __awaiter(this, arguments, void 0, function* (packageRoot = packageRootDir()) {
|
|
@@ -121,7 +123,7 @@ function readPackageVersion(packageRoot) {
|
|
|
121
123
|
});
|
|
122
124
|
}
|
|
123
125
|
/**
|
|
124
|
-
* Skills that do not yet have a SKILL.md under ~/.cursor/skills/
|
|
126
|
+
* Skills that do not yet have a SKILL.md under ~/.cursor/skills/bdk/.
|
|
125
127
|
* Install still overwrites every shipped skill when the user confirms — this
|
|
126
128
|
* helper is for messaging (fresh install vs update).
|
|
127
129
|
*/
|
|
@@ -143,15 +145,15 @@ export function findMissingCursorSkills(options) {
|
|
|
143
145
|
});
|
|
144
146
|
}
|
|
145
147
|
/**
|
|
146
|
-
* Copy each skill directory into `skillsHome/
|
|
148
|
+
* Copy each skill directory into `skillsHome/bdk/<leafDir>/`.
|
|
147
149
|
* Always overwrites so a package upgrade refreshes local Cursor skills.
|
|
148
150
|
* Strips monorepo-only frontmatter, sets `alwaysApply: true` so Cursor
|
|
149
151
|
* loads the body into context, and removes leaf dirs no longer shipped.
|
|
150
|
-
* Also deletes leftover `skillsHome/
|
|
152
|
+
* Also deletes leftover `skillsHome/agentsdk/` and `skillsHome/agentkit/`.
|
|
151
153
|
*/
|
|
152
154
|
export function installCursorSkills(skills_1) {
|
|
153
155
|
return __awaiter(this, arguments, void 0, function* (skills, skillsHome = cursorSkillsHome()) {
|
|
154
|
-
const namespaceDir =
|
|
156
|
+
const namespaceDir = bdkCursorSkillsDir(skillsHome);
|
|
155
157
|
yield mkdir(namespaceDir, { recursive: true });
|
|
156
158
|
const removed = yield orphanLeaves(namespaceDir, skills);
|
|
157
159
|
for (const leaf of removed) {
|
|
@@ -174,8 +176,8 @@ export function installCursorSkills(skills_1) {
|
|
|
174
176
|
}
|
|
175
177
|
installed.push(skill.leafDir);
|
|
176
178
|
}
|
|
177
|
-
const
|
|
178
|
-
return { installed, removed,
|
|
179
|
+
const removedLegacyDirs = yield removeLegacyCursorSkillsNamespaces(skillsHome);
|
|
180
|
+
return { installed, removed, removedLegacyDirs };
|
|
179
181
|
});
|
|
180
182
|
}
|
|
181
183
|
function makeTreeWritable(root) {
|
|
@@ -218,29 +220,29 @@ function orphanLeaves(namespaceDir, skills) {
|
|
|
218
220
|
.map(entry => entry.name);
|
|
219
221
|
});
|
|
220
222
|
}
|
|
221
|
-
/** Drop leftover
|
|
222
|
-
function
|
|
223
|
+
/** Drop leftover earlier install folders so stale skill ids are not discovered. */
|
|
224
|
+
function removeLegacyCursorSkillsNamespaces(skillsHome) {
|
|
223
225
|
return __awaiter(this, void 0, void 0, function* () {
|
|
224
|
-
const
|
|
225
|
-
|
|
226
|
-
yield
|
|
227
|
-
}
|
|
228
|
-
catch (_a) {
|
|
229
|
-
return false;
|
|
226
|
+
const present = yield existingLegacyCursorSkillsDirs(skillsHome);
|
|
227
|
+
for (const dir of present) {
|
|
228
|
+
yield rm(dir, { recursive: true, force: true });
|
|
230
229
|
}
|
|
231
|
-
|
|
232
|
-
return true;
|
|
230
|
+
return present;
|
|
233
231
|
});
|
|
234
232
|
}
|
|
235
|
-
function
|
|
233
|
+
function existingLegacyCursorSkillsDirs(skillsHome) {
|
|
236
234
|
return __awaiter(this, void 0, void 0, function* () {
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
235
|
+
const present = [];
|
|
236
|
+
for (const dir of legacyCursorSkillsDirs(skillsHome)) {
|
|
237
|
+
try {
|
|
238
|
+
yield stat(dir);
|
|
239
|
+
present.push(dir);
|
|
240
|
+
}
|
|
241
|
+
catch (_a) {
|
|
242
|
+
continue;
|
|
243
|
+
}
|
|
243
244
|
}
|
|
245
|
+
return present;
|
|
244
246
|
});
|
|
245
247
|
}
|
|
246
248
|
/**
|
|
@@ -259,7 +261,7 @@ export function prepareSkillMarkdownForCursorInstall(content, packageVersion) {
|
|
|
259
261
|
const adjustedBody = body.replace(/\[`docs\/([^`]+)`\]\(\.\.\/\.\.\/docs\/[^)]+\)/g, "docs/$1 in the @cursor/bdk package");
|
|
260
262
|
if (adjustedBody.includes(PACKAGE_VERSION_PLACEHOLDER) &&
|
|
261
263
|
(packageVersion === undefined || packageVersion.trim() === "")) {
|
|
262
|
-
throw new Error("Cannot install
|
|
264
|
+
throw new Error("Cannot install a BDK skill without a package version.");
|
|
263
265
|
}
|
|
264
266
|
const versionBoundBody = packageVersion === undefined
|
|
265
267
|
? adjustedBody
|
|
@@ -301,7 +303,7 @@ export function planSkillInstall(options) {
|
|
|
301
303
|
return __awaiter(this, void 0, void 0, function* () {
|
|
302
304
|
var _a;
|
|
303
305
|
const skillsHome = (_a = options === null || options === void 0 ? void 0 : options.skillsHome) !== null && _a !== void 0 ? _a : cursorSkillsHome();
|
|
304
|
-
const directory =
|
|
306
|
+
const directory = bdkCursorSkillsDir(skillsHome);
|
|
305
307
|
const shipped = yield listShippedPackageSkills(options === null || options === void 0 ? void 0 : options.packageRoot);
|
|
306
308
|
const present = yield Promise.all(shipped.map((skill) => __awaiter(this, void 0, void 0, function* () {
|
|
307
309
|
try {
|
|
@@ -319,26 +321,26 @@ export function planSkillInstall(options) {
|
|
|
319
321
|
leaves: shipped.map(skill => skill.leafDir),
|
|
320
322
|
firstInstall: present.every(isPresent => !isPresent),
|
|
321
323
|
orphans: yield orphanLeaves(directory, shipped),
|
|
322
|
-
|
|
324
|
+
legacyDirs: yield existingLegacyCursorSkillsDirs(skillsHome),
|
|
323
325
|
};
|
|
324
326
|
});
|
|
325
327
|
}
|
|
326
|
-
/** `Installed 9
|
|
328
|
+
/** `Installed 9 BDK skills`, what it dropped, and where it went. */
|
|
327
329
|
export function formatSkillInstall(plan, result) {
|
|
328
330
|
const noun = result.installed.length === 1 ? "skill" : "skills";
|
|
329
331
|
const verb = plan.firstInstall ? "Installed" : "Updated";
|
|
330
|
-
const lines = [`${verb} ${result.installed.length}
|
|
332
|
+
const lines = [`${verb} ${result.installed.length} BDK ${noun}`];
|
|
331
333
|
if (result.removed.length > 0) {
|
|
332
334
|
lines.push(` removed: ${result.removed.join(", ")}`);
|
|
333
335
|
}
|
|
334
|
-
|
|
335
|
-
lines.push(` removed: ${
|
|
336
|
+
for (const dir of result.removedLegacyDirs) {
|
|
337
|
+
lines.push(` removed: ${dir}`);
|
|
336
338
|
}
|
|
337
339
|
lines.push(` location: ${plan.directory}`);
|
|
338
340
|
return `${lines.join("\n")}\n`;
|
|
339
341
|
}
|
|
340
342
|
/**
|
|
341
|
-
* Copy shipped coding-agent skills into ~/.cursor/skills/
|
|
343
|
+
* Copy shipped coding-agent skills into ~/.cursor/skills/bdk during a
|
|
342
344
|
* consumer `npm install` / `npx`. Never throws: a failed copy must not fail
|
|
343
345
|
* the package install. No-op in the monorepo source tree and when
|
|
344
346
|
* `CURSOR_JULY_SKIP_SKILL_INSTALL=1`.
|
|
@@ -379,7 +381,7 @@ export function syncCursorSkillsOnPackageInstall() {
|
|
|
379
381
|
}
|
|
380
382
|
/**
|
|
381
383
|
* On a TTY, offer to install/update every shipped package skill into
|
|
382
|
-
* ~/.cursor/skills/
|
|
384
|
+
* ~/.cursor/skills/bdk (always overwriting). No-op when non-interactive
|
|
383
385
|
* or the package ships no skills. An unanswered prompt skips the install
|
|
384
386
|
* rather than blocking the caller — see `SKILL_PROMPT_TIMEOUT_MS`.
|
|
385
387
|
*/
|
|
@@ -401,7 +403,7 @@ export function offerInstallCursorSkills() {
|
|
|
401
403
|
const noun = plan.shipped.length === 1 ? "skill" : "skills";
|
|
402
404
|
const verb = plan.firstInstall ? "Install" : "Update";
|
|
403
405
|
const c = stdoutPalette();
|
|
404
|
-
out(`${verb} ${plan.shipped.length}
|
|
406
|
+
out(`${verb} ${plan.shipped.length} BDK ${noun} in ${plan.directory}?\n`);
|
|
405
407
|
out(c.dim(` ${plan.leaves.join(", ")}\n`));
|
|
406
408
|
if (!plan.firstInstall) {
|
|
407
409
|
out(c.dim(" (overwrites existing copies with the package version)\n"));
|
|
@@ -409,8 +411,8 @@ export function offerInstallCursorSkills() {
|
|
|
409
411
|
if (plan.orphans.length > 0) {
|
|
410
412
|
out(c.dim(` (deletes ${plan.orphans.join(", ")})\n`));
|
|
411
413
|
}
|
|
412
|
-
|
|
413
|
-
out(c.dim(` (deletes leftover ${
|
|
414
|
+
for (const dir of plan.legacyDirs) {
|
|
415
|
+
out(c.dim(` (deletes leftover ${dir})\n`));
|
|
414
416
|
}
|
|
415
417
|
const confirm = (_c = options.confirm) !== null && _c !== void 0 ? _c : (q => promptYesNo(q, {
|
|
416
418
|
defaultYes: true,
|
|
@@ -12,6 +12,8 @@ export declare function deploymentArchitecture(args: {
|
|
|
12
12
|
teamId: number;
|
|
13
13
|
slug: string;
|
|
14
14
|
}): Promise<"v1" | "v2">;
|
|
15
|
+
/** `run --prod` returns a delivery; read the session after it is allocated. */
|
|
16
|
+
export declare function v2HostedVerifyHint(slug?: string): string;
|
|
15
17
|
export declare function unsupportedV2LegacyCommandError(slug: string): DeployApiError;
|
|
16
18
|
export declare function isUnsupportedV2LegacyCommandError(error: unknown): error is DeployApiError;
|
|
17
19
|
export declare function rejectV2ForLegacyCommand(args: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"legacy-command-guard.d.ts","sourceRoot":"","sources":["../../src/internal/legacy-command-guard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,sBAAsB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"legacy-command-guard.d.ts","sourceRoot":"","sources":["../../src/internal/legacy-command-guard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,sBAAsB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGjF;;;;;;;GAOG;AACH,wBAAsB,sBAAsB,CAAC,IAAI,EAAE;IACjD,MAAM,EAAE,sBAAsB,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAavB;AAED,+EAA+E;AAC/E,wBAAgB,kBAAkB,CAAC,IAAI,SAAW,GAAG,MAAM,CAO1D;AAED,wBAAgB,+BAA+B,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAM5E;AAED,wBAAgB,iCAAiC,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,cAAc,CAMzF;AAED,wBAAsB,wBAAwB,CAAC,IAAI,EAAE;IACnD,MAAM,EAAE,sBAAsB,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd,GAAG,OAAO,CAAC,IAAI,CAAC,CAKhB"}
|
|
@@ -8,6 +8,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
8
|
});
|
|
9
9
|
};
|
|
10
10
|
import { DeployApiError } from "./deploy-client.js";
|
|
11
|
+
import { CLI_COMMAND_NAME } from "./distribution.js";
|
|
11
12
|
/**
|
|
12
13
|
* Classify a hosted slug by probing the v2 control plane.
|
|
13
14
|
*
|
|
@@ -33,8 +34,16 @@ export function deploymentArchitecture(args) {
|
|
|
33
34
|
}
|
|
34
35
|
});
|
|
35
36
|
}
|
|
37
|
+
/** `run --prod` returns a delivery; read the session after it is allocated. */
|
|
38
|
+
export function v2HostedVerifyHint(slug = "<slug>") {
|
|
39
|
+
return (`\`${CLI_COMMAND_NAME} run --prod\` returns a delivery. ` +
|
|
40
|
+
`An accept without sessionId is expected. ` +
|
|
41
|
+
`Poll the delivery until the session is allocated, then ` +
|
|
42
|
+
`\`${CLI_COMMAND_NAME} session <ses_> --prod --slug ${slug}\`.`);
|
|
43
|
+
}
|
|
36
44
|
export function unsupportedV2LegacyCommandError(slug) {
|
|
37
|
-
return new DeployApiError(`This command is not supported for architecture v2 deployment "${slug}".
|
|
45
|
+
return new DeployApiError(`This command is not supported for architecture v2 deployment "${slug}". ` +
|
|
46
|
+
`call and sessions stay on the v1 API. ${v2HostedVerifyHint(slug)}`, 409);
|
|
38
47
|
}
|
|
39
48
|
export function isUnsupportedV2LegacyCommandError(error) {
|
|
40
49
|
return (error instanceof DeployApiError &&
|
|
@@ -61,6 +61,12 @@ export declare class McpHost implements HostMcpRegistry {
|
|
|
61
61
|
* call fails until the serve process restarts.
|
|
62
62
|
*/
|
|
63
63
|
private withClient;
|
|
64
|
+
/**
|
|
65
|
+
* Cached per connection, but only for as long as the credentials it opened
|
|
66
|
+
* with still apply: a hosted deployment binds its secrets per request, so a
|
|
67
|
+
* rotated (or first-ever) value would otherwise never reach a client opened
|
|
68
|
+
* on an earlier turn.
|
|
69
|
+
*/
|
|
64
70
|
private getClient;
|
|
65
71
|
private invalidateClient;
|
|
66
72
|
private requireConnection;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-host.d.ts","sourceRoot":"","sources":["../../src/internal/mcp-host.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAOH,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,eAAe,EAEpB,KAAK,kBAAkB,EACxB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"mcp-host.d.ts","sourceRoot":"","sources":["../../src/internal/mcp-host.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAOH,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,eAAe,EAEpB,KAAK,kBAAkB,EACxB,MAAM,aAAa,CAAC;AASrB,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAE5B,YAAY,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,EAS9C;CACF;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,iBAAiB,CAE9E;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAMvE;AAoBD;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,SAAS,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACxF;AAED,qBAAa,OAAQ,YAAW,eAAe;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA2C;IAClE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmC;IAC3D,OAAO,CAAC,gBAAgB,CAAqB;IAE7C,YAAY,WAAW,EAAE,oBAAoB,EAAE,EAI9C;IAED,gFAAgF;IAChF,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAErC;IAED;;;OAGG;IACH,aAAa,CAAC,UAAU,EAAE,oBAAoB,GAAG,IAAI,CAEpD;IAED,KAAK,IAAI,MAAM,EAAE,CAEhB;IAEK,SAAS,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAUlE;IAED;;;;;;;;OAQG;IACH,MAAM,CAAC,UAAU,EAAE,oBAAoB,GAAG,aAAa,CAwCtD;IAEK,QAAQ,CACZ,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,MAAM,EAChB,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACjC,OAAO,CAAC,iBAAiB,CAAC,CAa5B;IAEK,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAW5C;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAU3B;IAED;;;;;;;;OAQG;YACW,UAAU;IAcxB;;;;;OAKG;IACH,OAAO,CAAC,SAAS;YAwBH,gBAAgB;IAc9B,OAAO,CAAC,iBAAiB;YASX,OAAO;CAGtB;AASD,+BAA+B;AAC/B,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAU9D;AAKD;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,OAAO,GAAG,kBAAkB,GAAG,SAAS,CAqB3F"}
|
|
@@ -24,6 +24,7 @@ import { SSEClientTransport } from "@modelcontextprotocol/sdk/client/sse.js";
|
|
|
24
24
|
import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";
|
|
25
25
|
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
|
|
26
26
|
import { connectionAllowsTool, } from "../types.js";
|
|
27
|
+
import { connectionCredentialsFingerprint, resolveConnectionEnvTemplates, } from "./connection-env.js";
|
|
27
28
|
import { CLI_COMMAND_NAME as CLI } from "./distribution.js";
|
|
28
29
|
import { createHostMcpOAuthProvider } from "./mcp-oauth.js";
|
|
29
30
|
import { instrumentedMcpFetch, mcpTraceMeta, runMcpClientSpan } from "./otel/mcp.js";
|
|
@@ -138,13 +139,13 @@ export class McpHost {
|
|
|
138
139
|
}
|
|
139
140
|
dropClient(name) {
|
|
140
141
|
return __awaiter(this, void 0, void 0, function* () {
|
|
141
|
-
const
|
|
142
|
+
const cached = this.clients.get(name);
|
|
142
143
|
this.clients.delete(name);
|
|
143
|
-
if (
|
|
144
|
+
if (cached === undefined) {
|
|
144
145
|
return;
|
|
145
146
|
}
|
|
146
147
|
try {
|
|
147
|
-
yield (yield
|
|
148
|
+
yield (yield cached.opened).close();
|
|
148
149
|
}
|
|
149
150
|
catch (_a) {
|
|
150
151
|
// Best-effort teardown.
|
|
@@ -153,7 +154,7 @@ export class McpHost {
|
|
|
153
154
|
}
|
|
154
155
|
close() {
|
|
155
156
|
return __awaiter(this, void 0, void 0, function* () {
|
|
156
|
-
const opened = yield Promise.allSettled([...this.clients.values()]);
|
|
157
|
+
const opened = yield Promise.allSettled([...this.clients.values()].map(entry => entry.opened));
|
|
157
158
|
this.clients.clear();
|
|
158
159
|
yield Promise.allSettled(opened.map((settled) => __awaiter(this, void 0, void 0, function* () {
|
|
159
160
|
if (settled.status === "fulfilled") {
|
|
@@ -187,23 +188,41 @@ export class McpHost {
|
|
|
187
188
|
}
|
|
188
189
|
});
|
|
189
190
|
}
|
|
191
|
+
/**
|
|
192
|
+
* Cached per connection, but only for as long as the credentials it opened
|
|
193
|
+
* with still apply: a hosted deployment binds its secrets per request, so a
|
|
194
|
+
* rotated (or first-ever) value would otherwise never reach a client opened
|
|
195
|
+
* on an earlier turn.
|
|
196
|
+
*/
|
|
190
197
|
getClient(name) {
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
}
|
|
197
|
-
this.
|
|
198
|
+
const credentials = connectionCredentialsFingerprint(this.requireConnection(name).transport);
|
|
199
|
+
const cached = this.clients.get(name);
|
|
200
|
+
if (cached !== undefined) {
|
|
201
|
+
if (cached.credentials === credentials) {
|
|
202
|
+
return cached.opened;
|
|
203
|
+
}
|
|
204
|
+
void this.dropClient(name);
|
|
198
205
|
}
|
|
199
|
-
|
|
206
|
+
// Only evict this entry: a connect that fails after its credentials were
|
|
207
|
+
// replaced would otherwise orphan the client that replaced it.
|
|
208
|
+
const entry = {
|
|
209
|
+
credentials,
|
|
210
|
+
opened: this.connect(name).catch(error => {
|
|
211
|
+
if (this.clients.get(name) === entry) {
|
|
212
|
+
this.clients.delete(name);
|
|
213
|
+
}
|
|
214
|
+
throw error;
|
|
215
|
+
}),
|
|
216
|
+
};
|
|
217
|
+
this.clients.set(name, entry);
|
|
218
|
+
return entry.opened;
|
|
200
219
|
}
|
|
201
220
|
invalidateClient(name, opened) {
|
|
202
221
|
return __awaiter(this, void 0, void 0, function* () {
|
|
203
|
-
const
|
|
204
|
-
if (
|
|
222
|
+
const cached = this.clients.get(name);
|
|
223
|
+
if (cached !== undefined) {
|
|
205
224
|
try {
|
|
206
|
-
if ((yield
|
|
225
|
+
if ((yield cached.opened) === opened) {
|
|
207
226
|
this.clients.delete(name);
|
|
208
227
|
}
|
|
209
228
|
}
|
|
@@ -325,7 +344,7 @@ function openConnection(connection, oauthRedirectUrl) {
|
|
|
325
344
|
function createTransport(connection, oauthRedirectUrl) {
|
|
326
345
|
return __awaiter(this, void 0, void 0, function* () {
|
|
327
346
|
var _a;
|
|
328
|
-
const transport = connection.transport;
|
|
347
|
+
const transport = resolveConnectionEnvTemplates(connection.transport);
|
|
329
348
|
if ("agent" in transport) {
|
|
330
349
|
// Peers are resolved to concrete URLs by the serve host before any call
|
|
331
350
|
// (SessionEngine.setResolvedConnections); reaching here means the
|
|
@@ -101,6 +101,8 @@ export declare function isUnavailableModelSelectionError(error: unknown): boolea
|
|
|
101
101
|
* a loose "temporarily unavailable" substring.
|
|
102
102
|
*/
|
|
103
103
|
export declare function isModelCapacityError(message: string | undefined, code?: string | undefined): boolean;
|
|
104
|
+
/** GitHub token 429s share `resource_exhausted` with model capacity. */
|
|
105
|
+
export declare function isGithubApiRateLimitMessage(message: string | undefined): boolean;
|
|
104
106
|
export declare function isModelCapacityErrorMessage(message: string | undefined): boolean;
|
|
105
107
|
/** Catalog refusal or capacity: the authored fallback list can still save the turn. */
|
|
106
108
|
export declare function shouldFallbackToNextModel(message: string | undefined, code?: string | undefined): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk-runner.d.ts","sourceRoot":"","sources":["../../src/internal/sdk-runner.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAOL,KAAK,eAAe,EACpB,KAAK,cAAc,EAEnB,KAAK,SAAS,EAEf,MAAM,aAAa,CAAC;AAErB,OAAO,EAEL,KAAK,YAAY,EAEjB,KAAK,iBAAiB,EACtB,KAAK,WAAW,EAEjB,MAAM,aAAa,CAAC;AAErB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAMnE,gFAAgF;AAChF,MAAM,MAAM,eAAe,GAAG,oBAAoB,GAAG,oBAAoB,CAAC;AAE1E,2EAA2E;AAC3E,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAC1D,KAAK,CAAC,CAAC,OAAO,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAC/E;;;;;OAKG;IACH,OAAO,CAAC,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IACjE,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAAG,IAAI,CACrC,iBAAiB,EACf,cAAc,GACd,gBAAgB,GAChB,SAAS,GACT,OAAO,GACP,iBAAiB,GACjB,YAAY,GACZ,mBAAmB,GACnB,WAAW,GACX,OAAO,CACV,CAAC;AAEF,6EAA6E;AAC7E,MAAM,MAAM,cAAc,GACtB;IAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAA;CAAE,GACzB;IAAE,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAExD;;;;;;GAMG;AACH,eAAO,MAAM,iCAAiC,EAAE,MAA4B,CAAC;AAE7E;;;GAGG;AACH,wBAAgB,mCAAmC,CAAC,IAAI,EAAE;IACxD,GAAG,EAAE,OAAO,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB,GAAG,MAAM,GAAG,SAAS,CAYrB;AAED,MAAM,WAAW,sBAAsB;IACrC,6EAA6E;IAC7E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,6DAA6D;IAC7D,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC;;;OAGG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAClC;AAwBD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAKvE;AAqBD;;;;;GAKG;AACH,wBAAgB,kCAAkC,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAEvF;AAED,wBAAgB,gCAAgC,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAGxE;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,GACxB,OAAO,
|
|
1
|
+
{"version":3,"file":"sdk-runner.d.ts","sourceRoot":"","sources":["../../src/internal/sdk-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -115,11 +115,21 @@ export function isUnavailableModelSelectionError(error) {
|
|
|
115
115
|
* a loose "temporarily unavailable" substring.
|
|
116
116
|
*/
|
|
117
117
|
export function isModelCapacityError(message, code) {
|
|
118
|
+
if (isGithubApiRateLimitMessage(message)) {
|
|
119
|
+
return false;
|
|
120
|
+
}
|
|
118
121
|
if (code !== undefined && /^(resource_exhausted|unavailable)$/i.test(code)) {
|
|
119
122
|
return true;
|
|
120
123
|
}
|
|
121
124
|
return message !== undefined && /resource_exhausted|\[unavailable\]/i.test(message);
|
|
122
125
|
}
|
|
126
|
+
/** GitHub token 429s share `resource_exhausted` with model capacity. */
|
|
127
|
+
export function isGithubApiRateLimitMessage(message) {
|
|
128
|
+
if (message === undefined) {
|
|
129
|
+
return false;
|
|
130
|
+
}
|
|
131
|
+
return /github/i.test(message) && /(rate limit|\b429\b)/i.test(message);
|
|
132
|
+
}
|
|
123
133
|
export function isModelCapacityErrorMessage(message) {
|
|
124
134
|
return isModelCapacityError(message);
|
|
125
135
|
}
|