@cursor/bdk 0.2.9 → 0.2.11
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/dist/artifacts.js +3 -5
- package/dist/bin/agent-serve.js +803 -812
- package/dist/channels/bitbucket/api.js +305 -321
- package/dist/channels/bitbucket/binding.js +97 -61
- package/dist/channels/bitbucket/bitbucket-channel.d.ts +15 -1
- package/dist/channels/bitbucket/bitbucket-channel.d.ts.map +1 -1
- package/dist/channels/bitbucket/bitbucket-channel.js +95 -42
- package/dist/channels/bitbucket/bitbucket-webhook.d.ts +11 -0
- package/dist/channels/bitbucket/bitbucket-webhook.d.ts.map +1 -1
- package/dist/channels/bitbucket/bitbucket-webhook.js +214 -204
- package/dist/channels/bitbucket/checks.js +9 -21
- package/dist/channels/bitbucket/cursor-account.js +1 -1
- package/dist/channels/bitbucket/defaults.js +14 -4
- package/dist/channels/bitbucket/events.js +1 -2
- package/dist/channels/bitbucket/index.d.ts +6 -2
- package/dist/channels/bitbucket/index.d.ts.map +1 -1
- package/dist/channels/bitbucket/index.js +6 -2
- package/dist/channels/bitbucket/replay.js +80 -56
- package/dist/channels/bitbucket/state.js +16 -7
- package/dist/channels/bitbucket/types.d.ts +11 -2
- package/dist/channels/bitbucket/types.d.ts.map +1 -1
- package/dist/channels/checks.js +18 -28
- package/dist/channels/deployments/deployments-channel.js +26 -34
- package/dist/channels/github/api.js +216 -210
- package/dist/channels/github/auth.d.ts +5 -1
- package/dist/channels/github/auth.d.ts.map +1 -1
- package/dist/channels/github/auth.js +157 -174
- package/dist/channels/github/binding.js +48 -39
- package/dist/channels/github/checks.js +9 -14
- package/dist/channels/github/cursor-account.js +6 -11
- package/dist/channels/github/defaults.js +105 -130
- package/dist/channels/github/forward.js +13 -17
- package/dist/channels/github/github-channel.d.ts +43 -2
- package/dist/channels/github/github-channel.d.ts.map +1 -1
- package/dist/channels/github/github-channel.js +1228 -958
- package/dist/channels/github/progress.js +145 -146
- package/dist/channels/github/replay.js +30 -39
- package/dist/channels/github/state.js +40 -16
- package/dist/channels/github/types.d.ts +30 -6
- package/dist/channels/github/types.d.ts.map +1 -1
- package/dist/channels/gitlab/api.js +100 -114
- package/dist/channels/gitlab/binding.js +52 -33
- package/dist/channels/gitlab/checks.js +28 -29
- package/dist/channels/gitlab/cursor-account.js +1 -1
- package/dist/channels/gitlab/defaults.js +9 -3
- package/dist/channels/gitlab/gitlab-channel.d.ts +16 -1
- package/dist/channels/gitlab/gitlab-channel.d.ts.map +1 -1
- package/dist/channels/gitlab/gitlab-channel.js +95 -42
- package/dist/channels/gitlab/gitlab-webhook.d.ts +10 -1
- package/dist/channels/gitlab/gitlab-webhook.d.ts.map +1 -1
- package/dist/channels/gitlab/gitlab-webhook.js +282 -249
- package/dist/channels/gitlab/index.d.ts +6 -2
- package/dist/channels/gitlab/index.d.ts.map +1 -1
- package/dist/channels/gitlab/index.js +6 -2
- package/dist/channels/gitlab/replay.js +50 -27
- package/dist/channels/gitlab/state.js +14 -6
- package/dist/channels/gitlab/types.d.ts +13 -2
- package/dist/channels/gitlab/types.d.ts.map +1 -1
- package/dist/channels/origin/api.js +100 -116
- package/dist/channels/origin/binding.js +15 -16
- package/dist/channels/origin/checks.js +30 -28
- package/dist/channels/origin/defaults.js +50 -65
- package/dist/channels/origin/origin-channel.js +266 -272
- package/dist/channels/origin/origin-webhook.js +70 -88
- package/dist/channels/origin/reactions.js +9 -21
- package/dist/channels/origin/state.js +13 -5
- package/dist/channels/slack/agentic-delivery.js +426 -478
- package/dist/channels/slack/agentic-posted.js +9 -10
- package/dist/channels/slack/agentic-signals.js +2 -3
- package/dist/channels/slack/api.js +417 -427
- package/dist/channels/slack/approvals.js +1 -1
- package/dist/channels/slack/assistant.js +37 -47
- package/dist/channels/slack/attachments.js +188 -206
- package/dist/channels/slack/auth.js +8 -6
- package/dist/channels/slack/bot-mentions.js +31 -45
- package/dist/channels/slack/channel-watch.js +42 -48
- package/dist/channels/slack/cli-project.js +112 -137
- package/dist/channels/slack/code-fences.js +3 -5
- package/dist/channels/slack/constants.js +2 -2
- package/dist/channels/slack/credentials.js +23 -38
- package/dist/channels/slack/defaults.js +292 -331
- package/dist/channels/slack/dispatch.d.ts.map +1 -1
- package/dist/channels/slack/dispatch.js +533 -460
- package/dist/channels/slack/doctor.js +200 -214
- package/dist/channels/slack/eval-directive.js +79 -96
- package/dist/channels/slack/event-id-dedupe.js +1 -1
- package/dist/channels/slack/external-policy.js +26 -39
- package/dist/channels/slack/footer.js +28 -41
- package/dist/channels/slack/inbound.d.ts +1 -0
- package/dist/channels/slack/inbound.d.ts.map +1 -1
- package/dist/channels/slack/inbound.js +50 -31
- package/dist/channels/slack/init.d.ts +1 -5
- package/dist/channels/slack/init.d.ts.map +1 -1
- package/dist/channels/slack/init.js +42 -59
- package/dist/channels/slack/interactive.d.ts +9 -3
- package/dist/channels/slack/interactive.d.ts.map +1 -1
- package/dist/channels/slack/interactive.js +160 -162
- package/dist/channels/slack/links.js +1 -2
- package/dist/channels/slack/live-delivery.js +172 -190
- package/dist/channels/slack/manifest.d.ts.map +1 -1
- package/dist/channels/slack/manifest.js +44 -23
- package/dist/channels/slack/message-body.js +2 -2
- package/dist/channels/slack/nudge-carrier.js +30 -42
- package/dist/channels/slack/nudge-store.js +164 -191
- package/dist/channels/slack/paint-start.js +66 -81
- package/dist/channels/slack/placeholder.js +123 -152
- package/dist/channels/slack/pr-ref.js +1 -1
- package/dist/channels/slack/progress-delivery.js +65 -78
- package/dist/channels/slack/reasoning-card.js +36 -49
- package/dist/channels/slack/recording-sink.js +12 -24
- package/dist/channels/slack/reply-options.js +7 -12
- package/dist/channels/slack/self-identity.js +27 -35
- package/dist/channels/slack/sender-name.d.ts +12 -3
- package/dist/channels/slack/sender-name.d.ts.map +1 -1
- package/dist/channels/slack/sender-name.js +57 -61
- package/dist/channels/slack/setup.js +2 -4
- package/dist/channels/slack/slack-channel.d.ts +6 -4
- package/dist/channels/slack/slack-channel.d.ts.map +1 -1
- package/dist/channels/slack/slack-channel.js +441 -308
- package/dist/channels/slack/socket-mode.js +38 -52
- package/dist/channels/slack/thread-context.js +143 -160
- package/dist/channels/slack/tool-approval-events.js +149 -166
- package/dist/channels/slack/tool-cards.js +6 -11
- package/dist/channels/slack/tool-chip.js +1 -2
- package/dist/channels/slack/types.d.ts +15 -17
- package/dist/channels/slack/types.d.ts.map +1 -1
- package/dist/channels/slack/upload.js +84 -97
- package/dist/channels/slack/user-info.js +27 -41
- package/dist/channels.js +9 -20
- package/dist/dashboard-session-url.js +3 -4
- package/dist/docs/404.html +2 -2
- package/dist/docs/assets/{app.BNhEdGa8.js → app.DXI7bwox.js} +4 -4
- package/dist/docs/assets/{building-with-agents.md.BPjPFxFg.js → building-with-agents.md.Df87rAe1.js} +1 -1
- package/dist/docs/assets/chunks/@localSearchIndexroot.CtLtpWcx.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.DIdUV1Ph.js → VPLocalSearchBox.BrbO5mEe.js} +1 -1
- package/dist/docs/assets/chunks/{arc.lELI4_SR.js → arc.BOG1yms8.js} +1 -1
- package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.iCMdvuoM.js → architectureDiagram-Q4EWVU46.C0hsMZnZ.js} +1 -1
- package/dist/docs/assets/chunks/{baseUniq.C1-nDJBf.js → baseUniq.H044KjKs.js} +1 -1
- package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.ClemzBox.js → blockDiagram-DXYQGD6D.BsRW6GoB.js} +1 -1
- package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.BqTak6cR.js → c4Diagram-AHTNJAMY.B9HV5PFR.js} +1 -1
- package/dist/docs/assets/chunks/channel.CBwrU9rP.js +1 -0
- package/dist/docs/assets/chunks/{chunk-4BX2VUAB.CUS3qs_R.js → chunk-4BX2VUAB.CPoT_ajl.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-4TB4RGXK.dz5fdHcl.js → chunk-4TB4RGXK.DZBwWuCL.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-55IACEB6.D6BEBmve.js → chunk-55IACEB6.CZ3yTiyq.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-EDXVE4YY.B5uK4ID9.js → chunk-EDXVE4YY.6DfvHSd8.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-FMBD7UC4.PgOJgNQs.js → chunk-FMBD7UC4.CpBj8HfK.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-OYMX7WX6.CvkTrCii.js → chunk-OYMX7WX6.BdKo8YqS.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-QZHKN3VN.BnSfKYsB.js → chunk-QZHKN3VN.BnXNyxJx.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-YZCP3GAM.MZH6v5UC.js → chunk-YZCP3GAM.Cg1OcF8G.js} +1 -1
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.CbC_mrvB.js +1 -0
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.CbC_mrvB.js +1 -0
- package/dist/docs/assets/chunks/clone.BTvFyY1a.js +1 -0
- package/dist/docs/assets/chunks/{cose-bilkent-S5V4N54A.BBbw_YZi.js → cose-bilkent-S5V4N54A.1SP8al9c.js} +1 -1
- package/dist/docs/assets/chunks/{dagre-KV5264BT.CNJB2l7E.js → dagre-KV5264BT.DS1L6hJt.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-5BDNPKRD.BQzlnFfq.js → diagram-5BDNPKRD.ChsausbG.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.DkgqqZMz.js → diagram-G4DWMVQ6.3XsptNWj.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-MMDJMWI5.DIT8L7H_.js → diagram-MMDJMWI5.DPA9Dk_P.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-TYMM5635.3xLPZWGJ.js → diagram-TYMM5635.BVswXWrB.js} +1 -1
- package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.5_IHz8jF.js → erDiagram-SMLLAGMA.BSak5OSP.js} +1 -1
- package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.BGUCXz8A.js → flowDiagram-DWJPFMVM.CQgN4TTz.js} +1 -1
- package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.DbfFavS1.js → ganttDiagram-T4ZO3ILL.GrT0kA4a.js} +1 -1
- package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.D2yKdeNW.js → gitGraphDiagram-UUTBAWPF.CdS7Ucll.js} +1 -1
- package/dist/docs/assets/chunks/{graph.CSCxwHba.js → graph.BVqKRmRo.js} +1 -1
- package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.FDeb6xHY.js → infoDiagram-42DDH7IO.C3C9FRto.js} +1 -1
- package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.DbeYs9VL.js → ishikawaDiagram-UXIWVN3A.2FuAh_Zj.js} +1 -1
- package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.CWjKINpx.js → journeyDiagram-VCZTEJTY.CaHMfK4b.js} +1 -1
- package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.B4FrAlwz.js → kanban-definition-6JOO6SKY.CjhIUwcA.js} +1 -1
- package/dist/docs/assets/chunks/{layout.DFGxQ9ab.js → layout.CGU3gfSf.js} +1 -1
- package/dist/docs/assets/chunks/{linear.BmjZ-G59.js → linear.DaihpW_n.js} +1 -1
- package/dist/docs/assets/chunks/{min.DZSxulMW.js → min.BS-j8kHQ.js} +1 -1
- package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.CHLi3-aN.js → mindmap-definition-QFDTVHPH.BVJ1Bbnk.js} +1 -1
- package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.DteG-CkU.js → pieDiagram-DEJITSTG.Cz1WIv9r.js} +1 -1
- package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.D458ipN3.js → quadrantDiagram-34T5L4WZ.DKLFxcjy.js} +1 -1
- package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.DcFgUxst.js → requirementDiagram-MS252O5E.BHegiK7x.js} +1 -1
- package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.BwQAMmSA.js → sankeyDiagram-XADWPNL6.DYkY6yPc.js} +1 -1
- package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.B_Xdsrh9.js → sequenceDiagram-FGHM5R23.DYQ1QUrI.js} +1 -1
- package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.CdfDW6-C.js → stateDiagram-FHFEXIEX.Iru8BsFo.js} +1 -1
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.BYXl4LW6.js +1 -0
- package/dist/docs/assets/chunks/{theme.sfdL3srp.js → theme.DaplWQhQ.js} +2 -2
- package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.56-4hXaC.js → timeline-definition-GMOUNBTQ.BwFA8hiX.js} +1 -1
- package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.CvZSQBO7.js → vennDiagram-DHZGUBPP.CZ60W1C_.js} +1 -1
- package/dist/docs/assets/chunks/{wardley-RL74JXVD.C9qc8k39.js → wardley-RL74JXVD.iXazD3Z7.js} +1 -1
- package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.D9s0nihi.js → wardleyDiagram-NUSXRM2D.B69D2r8-.js} +1 -1
- package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.BVJSpYrC.js → xychartDiagram-5P7HB3ND.CLPZEIU9.js} +1 -1
- package/dist/docs/assets/{deployment.md.BdqTiGdc.js → deployment.md.BYuEcDBv.js} +2 -2
- package/dist/docs/assets/{guides_bitbucket.md.BB6fqD-M.js → guides_bitbucket.md.CKUayYtD.js} +3 -3
- package/dist/docs/assets/{guides_bitbucket.md.BB6fqD-M.lean.js → guides_bitbucket.md.CKUayYtD.lean.js} +1 -1
- package/dist/docs/assets/{guides_github.md.Cr1Xlf-m.js → guides_github.md.TuNiZAOQ.js} +4 -4
- package/dist/docs/assets/{guides_github.md.Cr1Xlf-m.lean.js → guides_github.md.TuNiZAOQ.lean.js} +1 -1
- package/dist/docs/assets/{guides_gitlab.md.CMpmFi4M.js → guides_gitlab.md.CtNI4fSH.js} +4 -4
- package/dist/docs/assets/{guides_gitlab.md.CMpmFi4M.lean.js → guides_gitlab.md.CtNI4fSH.lean.js} +1 -1
- package/dist/docs/assets/guides_migrate.md.sCAvvlC6.js +7 -0
- package/dist/docs/assets/guides_migrate.md.sCAvvlC6.lean.js +1 -0
- package/dist/docs/assets/{reference_cli.md.GwugN3n-.js → reference_cli.md.dYCAL2lB.js} +4 -3
- package/dist/docs/assets/reference_cli.md.dYCAL2lB.lean.js +1 -0
- package/dist/docs/assets/troubleshooting.md.x-GBa7wN.js +1 -0
- package/dist/docs/assets/{troubleshooting.md.Bscj6ODe.lean.js → troubleshooting.md.x-GBa7wN.lean.js} +1 -1
- package/dist/docs/building-with-agents.html +37 -37
- package/dist/docs/building-with-agents.md +2 -0
- package/dist/docs/deployment.html +38 -38
- package/dist/docs/deployment.md +7 -0
- package/dist/docs/evals.html +36 -36
- package/dist/docs/guides/agent-to-agent.html +35 -35
- package/dist/docs/guides/bitbucket.html +38 -38
- package/dist/docs/guides/bitbucket.md +9 -1
- package/dist/docs/guides/cloud-agents.html +35 -35
- package/dist/docs/guides/convert-automation.html +35 -35
- package/dist/docs/guides/github.html +39 -39
- package/dist/docs/guides/github.md +20 -4
- package/dist/docs/guides/gitlab.html +38 -38
- package/dist/docs/guides/gitlab.md +9 -1
- 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/migrate.html +66 -0
- package/dist/docs/guides/migrate.md +122 -0
- package/dist/docs/guides/opentelemetry.html +35 -35
- package/dist/docs/guides/slack.html +35 -35
- 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 +214 -6
- package/dist/docs/llms.txt +1 -0
- package/dist/docs/quickstart.html +35 -35
- package/dist/docs/reference/agent-config.html +35 -35
- package/dist/docs/reference/artifacts.html +35 -35
- package/dist/docs/reference/channels.html +35 -35
- package/dist/docs/reference/cli.html +39 -38
- package/dist/docs/reference/cli.md +39 -0
- package/dist/docs/reference/connections.html +35 -35
- package/dist/docs/reference/evals.html +35 -35
- package/dist/docs/reference/extensions.html +35 -35
- package/dist/docs/reference/hooks.html +35 -35
- 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 +35 -35
- 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/grokbot-agents.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 +1 -0
- package/dist/evals/assertions.js +20 -34
- package/dist/evals/expect.js +3 -6
- package/dist/evals/judge.js +5 -8
- package/dist/evals/loaders.js +45 -62
- package/dist/evals/matchers.js +2 -3
- package/dist/evals/reporters.js +43 -67
- package/dist/evals/results.js +1 -1
- package/dist/evals/run-facts.js +5 -6
- package/dist/evals.js +27 -15
- package/dist/extensions/cursor-cloud-agents/extension.js +4 -1
- package/dist/extensions/cursor-cloud-agents/lib/backend.js +100 -126
- package/dist/extensions/cursor-cloud-agents/lib/fleet.js +22 -38
- package/dist/extensions/cursor-cloud-agents/lib/repos.js +8 -10
- package/dist/extensions/cursor-cloud-agents/lib/transcript.js +2 -3
- package/dist/extensions/cursor-cloud-agents/lib/watch.js +52 -66
- package/dist/extensions/cursor-cloud-agents/reminders/cloud-agent-stop-watch.js +29 -40
- package/dist/extensions/cursor-cloud-agents/tools/cancel.js +6 -17
- package/dist/extensions/cursor-cloud-agents/tools/dump.js +25 -36
- package/dist/extensions/cursor-cloud-agents/tools/get.js +3 -14
- package/dist/extensions/cursor-cloud-agents/tools/launch.js +13 -21
- package/dist/extensions/cursor-cloud-agents/tools/list.js +8 -19
- package/dist/extensions/cursor-cloud-agents/tools/reply.js +5 -16
- package/dist/extensions/cursor-grokbot-agents/extension.js +4 -1
- package/dist/extensions/cursor-grokbot-agents/lib/agents.js +3 -3
- package/dist/extensions/cursor-grokbot-agents/lib/backend.js +53 -73
- package/dist/extensions/cursor-grokbot-agents/lib/contacts.js +10 -23
- package/dist/extensions/cursor-grokbot-agents/lib/conversation.js +112 -132
- package/dist/extensions/cursor-grokbot-agents/lib/lock.js +1 -2
- package/dist/extensions/cursor-grokbot-agents/tools/ask.js +5 -16
- package/dist/extensions/cursor-grokbot-agents/tools/check.js +4 -15
- package/dist/extensions/cursor-grokbot-agents/tools/interrupt.js +2 -13
- package/dist/extensions/cursor-grokbot-agents/tools/list.js +11 -23
- package/dist/extensions/jev/extension.js +3 -3
- package/dist/extensions/jev/lib/evaluate.js +43 -60
- package/dist/extensions/jev/tools/evaluate.js +6 -17
- package/dist/extensions/slack-communication/tools/post-file.js +1 -1
- package/dist/extensions.js +3 -5
- package/dist/files-backends/cursor-hosted.js +504 -523
- package/dist/files-backends/local-fs.js +72 -134
- package/dist/files.js +3 -3
- package/dist/filesystem.js +562 -861
- package/dist/index.js +16 -35
- package/dist/internal/advertise-tools.js +74 -86
- package/dist/internal/artifacts-store.js +298 -361
- package/dist/internal/as-of.js +2 -4
- package/dist/internal/authored-alias-hooks.js +6 -4
- package/dist/internal/authored-loaders.js +37 -52
- package/dist/internal/bounded-int.js +1 -2
- package/dist/internal/bounded.js +13 -24
- package/dist/internal/brand.js +1 -1
- package/dist/internal/browser-origin-guard.js +4 -4
- package/dist/internal/builtin-tools/artifacts.js +15 -27
- package/dist/internal/builtin-tools/index.js +2 -3
- package/dist/internal/builtin-tools/reminders.js +33 -52
- package/dist/internal/channel-architecture.d.ts +21 -0
- package/dist/internal/channel-architecture.d.ts.map +1 -0
- package/dist/internal/channel-architecture.js +41 -0
- package/dist/internal/channel-dispatch.js +3 -4
- package/dist/internal/channel-route-dispatch.js +40 -51
- package/dist/internal/channel-state.js +1 -1
- package/dist/internal/chat-client.js +319 -340
- package/dist/internal/cli-ax.js +1262 -1294
- package/dist/internal/cli-bitbucket.js +244 -272
- package/dist/internal/cli-convert-automation.js +137 -151
- package/dist/internal/cli-cursor.js +126 -147
- package/dist/internal/cli-deploy.d.ts.map +1 -1
- package/dist/internal/cli-deploy.js +1457 -1507
- package/dist/internal/cli-docs.js +130 -147
- package/dist/internal/cli-github.js +437 -476
- package/dist/internal/cli-gitlab.js +259 -288
- package/dist/internal/cli-images.js +266 -334
- package/dist/internal/cli-manifest.js +25 -37
- package/dist/internal/cli-mcp-oauth.js +228 -247
- package/dist/internal/cli-mcp.js +358 -383
- package/dist/internal/cli-migrate.js +73 -90
- package/dist/internal/cli-skills.js +35 -47
- package/dist/internal/cli-slack-manual.d.ts +0 -1
- package/dist/internal/cli-slack-manual.d.ts.map +1 -1
- package/dist/internal/cli-slack-manual.js +175 -204
- package/dist/internal/cli-slack.d.ts +1 -1
- package/dist/internal/cli-slack.d.ts.map +1 -1
- package/dist/internal/cli-slack.js +416 -456
- package/dist/internal/cloud-merge.js +7 -3
- package/dist/internal/cloud-turn-cost.js +8 -1
- package/dist/internal/connection-env.js +5 -6
- package/dist/internal/continuation-channel.js +10 -7
- package/dist/internal/continuation-identity.js +85 -67
- package/dist/internal/conversation-mirror.js +112 -131
- package/dist/internal/convert-automation/convert-workflow.js +21 -31
- package/dist/internal/cron.js +3 -3
- package/dist/internal/cursor/account-mcp.js +147 -146
- package/dist/internal/cursor/backend-client.js +290 -320
- package/dist/internal/cursor/bound-secret-file.js +3 -3
- package/dist/internal/cursor/credentials.js +127 -142
- package/dist/internal/cursor/cursor-api-transport.js +4 -8
- package/dist/internal/cursor/github-credentials.js +91 -108
- package/dist/internal/cursor/hosted-bound-secrets.js +3 -4
- package/dist/internal/cursor/hosted-deployment-secrets.js +1 -1
- package/dist/internal/cursor/hosted-store-secrets.js +5 -9
- package/dist/internal/cursor/session-token.js +36 -48
- package/dist/internal/cursor/store-api-client.js +77 -92
- package/dist/internal/cursor-account-mcp-auth.js +132 -149
- package/dist/internal/cursor-agent-template.js +1 -1
- package/dist/internal/cursor-deployment-relay.js +33 -54
- package/dist/internal/cursor-event-relay.js +65 -59
- package/dist/internal/cursor-relay-core.js +258 -286
- package/dist/internal/deferred-channel-session.js +3 -12
- package/dist/internal/deploy-client.d.ts.map +1 -1
- package/dist/internal/deploy-client.js +413 -475
- package/dist/internal/deploy-manifest.d.ts +17 -0
- package/dist/internal/deploy-manifest.d.ts.map +1 -1
- package/dist/internal/deploy-manifest.js +71 -21
- package/dist/internal/deploy-source.js +31 -43
- package/dist/internal/discovery/agent-config.js +45 -59
- package/dist/internal/discovery/agent.js +276 -280
- package/dist/internal/discovery/channels.js +67 -80
- package/dist/internal/discovery/connections.js +286 -296
- package/dist/internal/discovery/context.js +2 -13
- package/dist/internal/discovery/cursor-plugin.js +223 -259
- package/dist/internal/discovery/extension-overlay.js +104 -131
- package/dist/internal/discovery/extensions.js +276 -281
- package/dist/internal/discovery/fs.js +56 -79
- package/dist/internal/discovery/hooks.js +39 -50
- package/dist/internal/discovery/info.js +17 -19
- package/dist/internal/discovery/instructions.js +58 -71
- package/dist/internal/discovery/modules.js +45 -58
- package/dist/internal/discovery/project.d.ts.map +1 -1
- package/dist/internal/discovery/project.js +192 -215
- package/dist/internal/discovery/reminders.js +41 -52
- package/dist/internal/discovery/runtime.js +1 -1
- package/dist/internal/discovery/schedules.js +71 -82
- package/dist/internal/discovery/seed-files.js +21 -32
- package/dist/internal/discovery/services.js +74 -96
- package/dist/internal/discovery/skills.js +77 -94
- package/dist/internal/discovery/subagent.js +79 -95
- package/dist/internal/discovery/tools.js +12 -23
- package/dist/internal/distribution.js +2 -2
- package/dist/internal/docs-site.js +30 -45
- package/dist/internal/duration.js +1 -1
- package/dist/internal/env-file.js +48 -64
- package/dist/internal/eval-judge-model.js +17 -28
- package/dist/internal/eval-run-store.js +265 -254
- package/dist/internal/eval-runner.d.ts +8 -0
- package/dist/internal/eval-runner.d.ts.map +1 -1
- package/dist/internal/eval-runner.js +406 -408
- package/dist/internal/eval-transport.d.ts +24 -0
- package/dist/internal/eval-transport.d.ts.map +1 -0
- package/dist/internal/eval-transport.js +22 -0
- package/dist/internal/evals-client.js +242 -246
- package/dist/internal/event-log.js +72 -120
- package/dist/internal/event-mapper.js +30 -31
- package/dist/internal/factory-resource-channel.js +16 -30
- package/dist/internal/filesystem/errors.js +6 -6
- package/dist/internal/filesystem/format.js +10 -13
- package/dist/internal/filesystem/merge.js +52 -94
- package/dist/internal/filesystem/nearest.js +15 -27
- package/dist/internal/filesystem/scratch.js +65 -85
- package/dist/internal/filesystem/tools.js +221 -241
- package/dist/internal/filesystem/walk.js +76 -143
- package/dist/internal/framework-file-storage.js +118 -139
- package/dist/internal/framework-storage-selection.js +21 -13
- package/dist/internal/frontmatter.js +4 -6
- package/dist/internal/github-fanout.js +50 -64
- package/dist/internal/guest-network.js +96 -109
- package/dist/internal/handleAgentServeTrigger.js +121 -126
- package/dist/internal/host-files.js +73 -88
- package/dist/internal/host-kv.js +21 -36
- package/dist/internal/host-otel.js +22 -19
- package/dist/internal/host-platforms.js +49 -63
- package/dist/internal/hosted-catch-protocol.d.ts +1 -0
- package/dist/internal/hosted-catch-protocol.d.ts.map +1 -1
- package/dist/internal/hosted-catch-protocol.js +1 -0
- package/dist/internal/hosted-catch.d.ts +5 -3
- package/dist/internal/hosted-catch.d.ts.map +1 -1
- package/dist/internal/hosted-catch.js +84 -93
- package/dist/internal/hosted-delivery-protocol.js +32 -8
- package/dist/internal/hosted-delivery.d.ts +13 -1
- package/dist/internal/hosted-delivery.d.ts.map +1 -1
- package/dist/internal/hosted-delivery.js +614 -584
- package/dist/internal/hosted-eval-cases.d.ts +21 -0
- package/dist/internal/hosted-eval-cases.d.ts.map +1 -0
- package/dist/internal/hosted-eval-cases.js +162 -0
- package/dist/internal/hosted-execution-diag.js +38 -30
- package/dist/internal/hosted-execution-flush.js +75 -66
- package/dist/internal/hosted-execution-latency.js +16 -8
- package/dist/internal/hosted-managed-automation.js +2 -2
- package/dist/internal/hosting.js +2 -3
- package/dist/internal/http-channel-define.js +4 -1
- package/dist/internal/http-channel.js +101 -112
- package/dist/internal/http-control-plane-session.d.ts +18 -1
- package/dist/internal/http-control-plane-session.d.ts.map +1 -1
- package/dist/internal/http-control-plane-session.js +66 -32
- package/dist/internal/incoming-headers-to-fetch.js +1 -2
- package/dist/internal/init-interview.js +73 -93
- package/dist/internal/init-project.js +182 -214
- package/dist/internal/init-scaffold.js +10 -21
- package/dist/internal/inline-stdio-mcp.js +80 -86
- package/dist/internal/install-cursor-skills.js +231 -273
- package/dist/internal/legacy-command-guard.js +18 -31
- package/dist/internal/listen-port.js +34 -45
- package/dist/internal/local-control-plane.js +293 -307
- package/dist/internal/local-env.js +1 -1
- package/dist/internal/local-ingress.js +15 -9
- package/dist/internal/log-ring.js +1 -2
- package/dist/internal/logs-client.js +207 -227
- package/dist/internal/map-pool.js +24 -38
- package/dist/internal/mcp-endpoint.js +204 -180
- package/dist/internal/mcp-host.js +165 -168
- package/dist/internal/mcp-oauth-on-demand.js +170 -207
- package/dist/internal/mcp-oauth-persist.js +15 -29
- package/dist/internal/mcp-oauth.js +209 -266
- package/dist/internal/named-webhook-secret.d.ts +39 -0
- package/dist/internal/named-webhook-secret.d.ts.map +1 -0
- package/dist/internal/named-webhook-secret.js +47 -0
- package/dist/internal/open-browser.js +2 -3
- package/dist/internal/otel/collector.js +104 -68
- package/dist/internal/otel/config.js +24 -37
- package/dist/internal/otel/http.js +5 -7
- package/dist/internal/otel/mcp.js +3 -12
- package/dist/internal/otel/runtime.js +69 -83
- package/dist/internal/package-inline-stdio.js +57 -65
- package/dist/internal/peer-connections.js +9 -5
- package/dist/internal/platform-schedule-sync.js +39 -54
- package/dist/internal/platform-timers.js +176 -210
- package/dist/internal/playground/static.js +1 -2
- package/dist/internal/playground/toolchain.js +37 -53
- package/dist/internal/playground-proxy.js +230 -270
- package/dist/internal/process-memory-telemetry.js +33 -51
- package/dist/internal/prompt-context.js +3 -6
- package/dist/internal/reminder-control-plane-protocol.js +46 -13
- package/dist/internal/reminder-runner.js +770 -785
- package/dist/internal/reminder-schedule.js +1 -1
- package/dist/internal/reminder-store.js +57 -78
- package/dist/internal/request-error-status.js +1 -3
- package/dist/internal/request-headers.js +2 -2
- package/dist/internal/resolve-prod-target.js +119 -135
- package/dist/internal/resolved-connections.js +16 -6
- package/dist/internal/run-client.js +221 -229
- package/dist/internal/runtime-dispatch-runner.js +18 -43
- package/dist/internal/schedule-runner.js +49 -58
- package/dist/internal/scm/pr-url.js +7 -6
- package/dist/internal/sdk-runner.js +388 -363
- package/dist/internal/serve-restart.js +26 -39
- package/dist/internal/server.d.ts.map +1 -1
- package/dist/internal/server.js +1283 -1244
- package/dist/internal/session-cost.js +7 -9
- package/dist/internal/session-engine.d.ts +3 -1
- package/dist/internal/session-engine.d.ts.map +1 -1
- package/dist/internal/session-engine.js +2801 -2777
- package/dist/internal/session-links.js +12 -16
- package/dist/internal/session-run-log.js +134 -82
- package/dist/internal/session-store.js +133 -164
- package/dist/internal/sessions-client.js +97 -118
- package/dist/internal/skill-catalog.js +18 -23
- package/dist/internal/skills-sync.js +16 -30
- package/dist/internal/slack-provision-client.js +90 -116
- package/dist/internal/start-log-store.js +48 -67
- package/dist/internal/steering.js +1 -2
- package/dist/internal/storage-coordinator.js +160 -196
- package/dist/internal/store-mirror.js +16 -30
- package/dist/internal/stream-progress.js +6 -8
- package/dist/internal/terminal-style.js +3 -4
- package/dist/internal/testing/scm-continuation-fixtures.js +6 -2
- package/dist/internal/testing/slack-continuation-fixtures.d.ts +26 -0
- package/dist/internal/testing/slack-continuation-fixtures.d.ts.map +1 -0
- package/dist/internal/testing/slack-continuation-fixtures.js +136 -0
- package/dist/internal/tool-catalog.js +11 -5
- package/dist/internal/tool-result.js +1 -1
- package/dist/internal/trajectory.js +19 -22
- package/dist/internal/turn-cost.js +52 -62
- package/dist/internal/turn-governor.js +5 -8
- package/dist/internal/turn-lease-store.js +85 -105
- package/dist/internal/turn-outbox.js +28 -43
- package/dist/internal/update-check.js +231 -259
- package/dist/internal/v2-hosting.js +1 -2
- package/dist/internal/workspace-sync.js +25 -41
- package/dist/internal/workspace.js +111 -139
- package/dist/kv/memory-kv.js +27 -51
- package/dist/memory.js +106 -148
- package/dist/otel.js +5 -8
- package/dist/playground/assets/{index-Co4CUVTQ.js → index-Be0-1hw2.js} +45 -45
- package/dist/playground/assets/index-Clz6uHj9.css +1 -0
- package/dist/playground/index.html +2 -2
- package/dist/prompt.js +2 -4
- package/dist/storage-backends/cursor-hosted-v2.js +53 -83
- package/dist/storage-backends/cursor-hosted.js +105 -145
- package/dist/storage-backends/file-kv.js +100 -128
- package/dist/storage-protocol.js +3 -5
- package/dist/storage.js +17 -26
- package/dist/types.d.ts +68 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +20 -18
- package/docs/building-with-agents.md +2 -0
- package/docs/deployment.md +7 -0
- package/docs/guides/bitbucket.md +9 -1
- package/docs/guides/github.md +20 -4
- package/docs/guides/gitlab.md +9 -1
- package/docs/guides/migrate.md +127 -0
- package/docs/reference/cli.md +39 -0
- package/docs/troubleshooting.md +1 -0
- package/package.json +1 -1
- package/skills/debug/SKILL.md +1 -0
- package/skills/github/SKILL.md +23 -0
- package/skills/migrate-v2/SKILL.md +51 -10
- package/dist/docs/assets/chunks/@localSearchIndexroot.BJ8UZggu.js +0 -1
- package/dist/docs/assets/chunks/channel.BTJ5J9FI.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.D4BZ3cVV.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.D4BZ3cVV.js +0 -1
- package/dist/docs/assets/chunks/clone.62tX-O-1.js +0 -1
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.DkTs1aEU.js +0 -1
- package/dist/docs/assets/reference_cli.md.GwugN3n-.lean.js +0 -1
- package/dist/docs/assets/troubleshooting.md.Bscj6ODe.js +0 -1
- package/dist/playground/assets/index-C1g_PTTZ.css +0 -1
- /package/dist/docs/assets/{building-with-agents.md.BPjPFxFg.lean.js → building-with-agents.md.Df87rAe1.lean.js} +0 -0
- /package/dist/docs/assets/{deployment.md.BdqTiGdc.lean.js → deployment.md.BYuEcDBv.lean.js} +0 -0
|
@@ -1,22 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Shared discovery state: the loader options, the per-project context every loader receives, and the diagnostic helpers.
|
|
3
3
|
*/
|
|
4
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
5
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
6
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
7
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
8
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
9
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
10
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
11
|
-
});
|
|
12
|
-
};
|
|
13
4
|
import { relative } from "node:path";
|
|
14
5
|
import { pathToFileURL } from "node:url";
|
|
15
6
|
import { toPosix } from "./fs.js";
|
|
16
|
-
export function defaultImportModule(absolutePath) {
|
|
17
|
-
return
|
|
18
|
-
return (yield import(pathToFileURL(absolutePath).href));
|
|
19
|
-
});
|
|
7
|
+
export async function defaultImportModule(absolutePath) {
|
|
8
|
+
return (await import(pathToFileURL(absolutePath).href));
|
|
20
9
|
}
|
|
21
10
|
export function displayPath(ctx, absolutePath) {
|
|
22
11
|
const rel = relative(ctx.rootDir, absolutePath);
|
|
@@ -1,15 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* A Cursor plugin directory read as an extension tree: skills, commands, agents, and MCP servers under the plugin's own names.
|
|
3
3
|
*/
|
|
4
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
5
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
6
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
7
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
8
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
9
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
10
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
11
|
-
});
|
|
12
|
-
};
|
|
13
4
|
import { readFile } from "node:fs/promises";
|
|
14
5
|
import { basename, dirname, extname, isAbsolute, join } from "node:path";
|
|
15
6
|
import { z } from "zod";
|
|
@@ -51,7 +42,7 @@ const manifestSchema = z.object({
|
|
|
51
42
|
])
|
|
52
43
|
.optional()
|
|
53
44
|
.transform(value => {
|
|
54
|
-
const items = value === undefined || Array.isArray(value) ? (value
|
|
45
|
+
const items = value === undefined || Array.isArray(value) ? (value ?? []) : [value];
|
|
55
46
|
return {
|
|
56
47
|
paths: items.filter(item => typeof item === "string"),
|
|
57
48
|
inline: items.filter(item => typeof item !== "string"),
|
|
@@ -80,248 +71,230 @@ const mcpServerSchema = z.object({
|
|
|
80
71
|
/** Cursor disables unlisted tools; an empty list would disable them all. */
|
|
81
72
|
enabledTools: z.array(z.string()).nonempty().optional(),
|
|
82
73
|
});
|
|
83
|
-
export function readCursorPlugin(ctx, root, mountPath, variables, overlaid) {
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
if (skills.some(skill => skill.name === command.name)) {
|
|
98
|
-
ctx.diagnostics.push({
|
|
99
|
-
severity: "warning",
|
|
100
|
-
path: displayPath(ctx, root),
|
|
101
|
-
message: `Plugin command "${command.name}" has the same name as a skill; the skill wins. Ignoring the command.`,
|
|
102
|
-
});
|
|
103
|
-
continue;
|
|
104
|
-
}
|
|
105
|
-
skills.push(command);
|
|
106
|
-
}
|
|
107
|
-
yield warnUnmountedSlots(plugin, manifest.data);
|
|
108
|
-
return Object.assign(Object.assign({ description: manifest.data.description, skills }, (yield loadPluginConnections(plugin, manifest.data.mcpServers, overlaid))), { agents: yield loadPluginAgents(plugin, manifest.data.agents) });
|
|
109
|
-
});
|
|
110
|
-
}
|
|
111
|
-
function readManifest(ctx, root, mountPath) {
|
|
112
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
113
|
-
for (const rel of MANIFEST_PATHS) {
|
|
114
|
-
const path = join(root, rel);
|
|
115
|
-
if (!(yield isFile(path))) {
|
|
116
|
-
continue;
|
|
117
|
-
}
|
|
118
|
-
const data = yield readJson(ctx, path);
|
|
119
|
-
if (data === undefined) {
|
|
120
|
-
return undefined;
|
|
121
|
-
}
|
|
122
|
-
const parsed = manifestSchema.safeParse(data);
|
|
123
|
-
if (parsed.success) {
|
|
124
|
-
return { data: parsed.data, path };
|
|
125
|
-
}
|
|
74
|
+
export async function readCursorPlugin(ctx, root, mountPath, variables, overlaid) {
|
|
75
|
+
const manifest = await readManifest(ctx, root, mountPath);
|
|
76
|
+
if (manifest === undefined) {
|
|
77
|
+
return undefined;
|
|
78
|
+
}
|
|
79
|
+
const plugin = {
|
|
80
|
+
ctx,
|
|
81
|
+
root,
|
|
82
|
+
manifestPath: manifest.path,
|
|
83
|
+
variables,
|
|
84
|
+
};
|
|
85
|
+
const skills = await loadPluginSkills(plugin, manifest.data.skills);
|
|
86
|
+
for (const command of await loadPluginCommands(plugin, manifest.data.commands)) {
|
|
87
|
+
if (skills.some(skill => skill.name === command.name)) {
|
|
126
88
|
ctx.diagnostics.push({
|
|
127
|
-
severity: "
|
|
128
|
-
path: displayPath(ctx,
|
|
129
|
-
message: `
|
|
89
|
+
severity: "warning",
|
|
90
|
+
path: displayPath(ctx, root),
|
|
91
|
+
message: `Plugin command "${command.name}" has the same name as a skill; the skill wins. Ignoring the command.`,
|
|
130
92
|
});
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
skills.push(command);
|
|
96
|
+
}
|
|
97
|
+
await warnUnmountedSlots(plugin, manifest.data);
|
|
98
|
+
return {
|
|
99
|
+
description: manifest.data.description,
|
|
100
|
+
skills,
|
|
101
|
+
...(await loadPluginConnections(plugin, manifest.data.mcpServers, overlaid)),
|
|
102
|
+
agents: await loadPluginAgents(plugin, manifest.data.agents),
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
async function readManifest(ctx, root, mountPath) {
|
|
106
|
+
for (const rel of MANIFEST_PATHS) {
|
|
107
|
+
const path = join(root, rel);
|
|
108
|
+
if (!(await isFile(path))) {
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
const data = await readJson(ctx, path);
|
|
112
|
+
if (data === undefined) {
|
|
131
113
|
return undefined;
|
|
132
114
|
}
|
|
115
|
+
const parsed = manifestSchema.safeParse(data);
|
|
116
|
+
if (parsed.success) {
|
|
117
|
+
return { data: parsed.data, path };
|
|
118
|
+
}
|
|
133
119
|
ctx.diagnostics.push({
|
|
134
120
|
severity: "error",
|
|
135
|
-
path: displayPath(ctx,
|
|
136
|
-
message:
|
|
121
|
+
path: displayPath(ctx, path),
|
|
122
|
+
message: `The plugin manifest is malformed: ${firstIssue(parsed.error)}.`,
|
|
137
123
|
});
|
|
138
124
|
return undefined;
|
|
125
|
+
}
|
|
126
|
+
ctx.diagnostics.push({
|
|
127
|
+
severity: "error",
|
|
128
|
+
path: displayPath(ctx, mountPath),
|
|
129
|
+
message: `${displayPath(ctx, root)} is not a Cursor plugin: it has no ${MANIFEST_PATHS.join(", ")}.`,
|
|
139
130
|
});
|
|
131
|
+
return undefined;
|
|
140
132
|
}
|
|
141
133
|
/** Slots Cursor applies through the IDE that have no agent-sdk mapping yet. */
|
|
142
|
-
function warnUnmountedSlots(plugin, manifest) {
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
message: `Cursor plugin ${unmounted.join(" and ")} are not mounted yet; skills, commands, agents, and MCP servers are. Ignoring.`,
|
|
158
|
-
});
|
|
134
|
+
async function warnUnmountedSlots(plugin, manifest) {
|
|
135
|
+
const unmounted = [];
|
|
136
|
+
if (manifest.rules !== undefined || (await isDirectory(join(plugin.root, "rules")))) {
|
|
137
|
+
unmounted.push("rules");
|
|
138
|
+
}
|
|
139
|
+
if (manifest.hooks !== undefined || (await isFile(join(plugin.root, "hooks", "hooks.json")))) {
|
|
140
|
+
unmounted.push("hooks");
|
|
141
|
+
}
|
|
142
|
+
if (unmounted.length === 0) {
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
plugin.ctx.diagnostics.push({
|
|
146
|
+
severity: "warning",
|
|
147
|
+
path: displayPath(plugin.ctx, plugin.root),
|
|
148
|
+
message: `Cursor plugin ${unmounted.join(" and ")} are not mounted yet; skills, commands, agents, and MCP servers are. Ignoring.`,
|
|
159
149
|
});
|
|
160
150
|
}
|
|
161
|
-
function loadPluginSkills(plugin, declared) {
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
if (
|
|
165
|
-
|
|
166
|
-
dirs.push(plugin.root);
|
|
167
|
-
}
|
|
168
|
-
dirs.push(...(yield skillDirsIn(join(plugin.root, "skills"))));
|
|
151
|
+
async function loadPluginSkills(plugin, declared) {
|
|
152
|
+
const dirs = [];
|
|
153
|
+
if (declared === undefined) {
|
|
154
|
+
if (await isFile(join(plugin.root, "SKILL.md"))) {
|
|
155
|
+
dirs.push(plugin.root);
|
|
169
156
|
}
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
dirs.push(path);
|
|
176
|
-
}
|
|
177
|
-
else {
|
|
178
|
-
dirs.push(...(yield skillDirsIn(path)));
|
|
179
|
-
}
|
|
157
|
+
dirs.push(...(await skillDirsIn(join(plugin.root, "skills"))));
|
|
158
|
+
}
|
|
159
|
+
for (const path of declaredPaths(plugin, declared ?? [])) {
|
|
160
|
+
if (basename(path) === "SKILL.md" && (await isFile(path))) {
|
|
161
|
+
dirs.push(dirname(path));
|
|
180
162
|
}
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
const skill = yield readSkillDir(plugin, dir);
|
|
184
|
-
if (skill !== undefined && !skills.some(s => s.name === skill.name)) {
|
|
185
|
-
skills.push(skill);
|
|
186
|
-
}
|
|
163
|
+
else if (await isFile(join(path, "SKILL.md"))) {
|
|
164
|
+
dirs.push(path);
|
|
187
165
|
}
|
|
188
|
-
|
|
189
|
-
|
|
166
|
+
else {
|
|
167
|
+
dirs.push(...(await skillDirsIn(path)));
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
const skills = [];
|
|
171
|
+
for (const dir of dirs) {
|
|
172
|
+
const skill = await readSkillDir(plugin, dir);
|
|
173
|
+
if (skill !== undefined && !skills.some(s => s.name === skill.name)) {
|
|
174
|
+
skills.push(skill);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
return skills;
|
|
190
178
|
}
|
|
191
179
|
/** Immediate subdirectories holding a SKILL.md. */
|
|
192
|
-
function skillDirsIn(dir) {
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
dirs.push(path);
|
|
202
|
-
}
|
|
180
|
+
async function skillDirsIn(dir) {
|
|
181
|
+
if (!(await isDirectory(dir))) {
|
|
182
|
+
return [];
|
|
183
|
+
}
|
|
184
|
+
const dirs = [];
|
|
185
|
+
for (const entry of await sortedEntries(dir)) {
|
|
186
|
+
const path = join(dir, entry.name);
|
|
187
|
+
if (entry.isDirectory() && (await isFile(join(path, "SKILL.md")))) {
|
|
188
|
+
dirs.push(path);
|
|
203
189
|
}
|
|
204
|
-
|
|
205
|
-
|
|
190
|
+
}
|
|
191
|
+
return dirs;
|
|
192
|
+
}
|
|
193
|
+
async function readSkillDir(plugin, dir) {
|
|
194
|
+
const skillMdPath = join(dir, "SKILL.md");
|
|
195
|
+
const { data, body } = await readMarkdown(plugin, skillMdPath);
|
|
196
|
+
const name = componentName(plugin, data.name ?? basename(dir), skillMdPath);
|
|
197
|
+
if (name === undefined) {
|
|
198
|
+
return undefined;
|
|
199
|
+
}
|
|
200
|
+
return {
|
|
201
|
+
name,
|
|
202
|
+
description: skillDescription(name, data.description, body),
|
|
203
|
+
markdown: body.trim(),
|
|
204
|
+
files: await skillFiles(dir),
|
|
205
|
+
};
|
|
206
206
|
}
|
|
207
|
-
function
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
const
|
|
211
|
-
const
|
|
212
|
-
const name = componentName(plugin, (_a = data.name) !== null && _a !== void 0 ? _a : basename(dir), skillMdPath);
|
|
207
|
+
async function loadPluginCommands(plugin, declared) {
|
|
208
|
+
const skills = [];
|
|
209
|
+
for (const path of await componentFiles(plugin, declared, "commands", COMMAND_EXTENSIONS)) {
|
|
210
|
+
const { data, body } = await readMarkdown(plugin, path);
|
|
211
|
+
const name = componentName(plugin, data.name ?? fileStem(path), path);
|
|
213
212
|
if (name === undefined) {
|
|
214
|
-
|
|
213
|
+
continue;
|
|
215
214
|
}
|
|
216
|
-
|
|
215
|
+
skills.push({
|
|
217
216
|
name,
|
|
218
217
|
description: skillDescription(name, data.description, body),
|
|
219
218
|
markdown: body.trim(),
|
|
220
|
-
files:
|
|
221
|
-
};
|
|
222
|
-
}
|
|
219
|
+
files: {},
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
return skills;
|
|
223
223
|
}
|
|
224
|
-
function
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
const
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
if (name === undefined) {
|
|
232
|
-
continue;
|
|
233
|
-
}
|
|
234
|
-
skills.push({
|
|
235
|
-
name,
|
|
236
|
-
description: skillDescription(name, data.description, body),
|
|
237
|
-
markdown: body.trim(),
|
|
238
|
-
files: {},
|
|
239
|
-
});
|
|
224
|
+
async function loadPluginAgents(plugin, declared) {
|
|
225
|
+
const agents = [];
|
|
226
|
+
for (const path of await componentFiles(plugin, declared, "agents", MARKDOWN_EXTENSIONS)) {
|
|
227
|
+
const { data, body } = await readMarkdown(plugin, path);
|
|
228
|
+
const name = componentName(plugin, data.name ?? fileStem(path), path);
|
|
229
|
+
if (name === undefined || agents.some(agent => agent.name === name)) {
|
|
230
|
+
continue;
|
|
240
231
|
}
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
var _a;
|
|
247
|
-
const agents = [];
|
|
248
|
-
for (const path of yield componentFiles(plugin, declared, "agents", MARKDOWN_EXTENSIONS)) {
|
|
249
|
-
const { data, body } = yield readMarkdown(plugin, path);
|
|
250
|
-
const name = componentName(plugin, (_a = data.name) !== null && _a !== void 0 ? _a : fileStem(path), path);
|
|
251
|
-
if (name === undefined || agents.some(agent => agent.name === name)) {
|
|
252
|
-
continue;
|
|
253
|
-
}
|
|
254
|
-
if (isBlank(body)) {
|
|
255
|
-
plugin.ctx.diagnostics.push({
|
|
256
|
-
severity: "warning",
|
|
257
|
-
path: displayPath(plugin.ctx, path),
|
|
258
|
-
message: "Plugin agent has no prompt body; ignoring.",
|
|
259
|
-
});
|
|
260
|
-
continue;
|
|
261
|
-
}
|
|
262
|
-
agents.push({
|
|
263
|
-
name,
|
|
264
|
-
description: data.description,
|
|
265
|
-
model: data.model === "inherit" ? undefined : data.model,
|
|
266
|
-
prompt: body.trim(),
|
|
232
|
+
if (isBlank(body)) {
|
|
233
|
+
plugin.ctx.diagnostics.push({
|
|
234
|
+
severity: "warning",
|
|
235
|
+
path: displayPath(plugin.ctx, path),
|
|
236
|
+
message: "Plugin agent has no prompt body; ignoring.",
|
|
267
237
|
});
|
|
238
|
+
continue;
|
|
268
239
|
}
|
|
269
|
-
|
|
270
|
-
|
|
240
|
+
agents.push({
|
|
241
|
+
name,
|
|
242
|
+
description: data.description,
|
|
243
|
+
model: data.model === "inherit" ? undefined : data.model,
|
|
244
|
+
prompt: body.trim(),
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
return agents;
|
|
271
248
|
}
|
|
272
249
|
/**
|
|
273
250
|
* The plugin's MCP servers as connections. A server the mount overlays is
|
|
274
251
|
* reported by name and never compiled, so its placeholders need no values.
|
|
275
252
|
*/
|
|
276
|
-
function loadPluginConnections(plugin, declared, overlaid) {
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
continue;
|
|
283
|
-
}
|
|
284
|
-
for (const [name, raw] of Object.entries(yield readMcpFile(plugin, path))) {
|
|
285
|
-
if (!servers.has(name)) {
|
|
286
|
-
servers.set(name, { raw, path });
|
|
287
|
-
}
|
|
288
|
-
}
|
|
253
|
+
async function loadPluginConnections(plugin, declared, overlaid) {
|
|
254
|
+
const servers = new Map();
|
|
255
|
+
for (const file of MCP_CONFIG_FILES) {
|
|
256
|
+
const path = join(plugin.root, file);
|
|
257
|
+
if (!(await isFile(path))) {
|
|
258
|
+
continue;
|
|
289
259
|
}
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
for (const [name, raw] of Object.entries(yield readMcpFile(plugin, path))) {
|
|
260
|
+
for (const [name, raw] of Object.entries(await readMcpFile(plugin, path))) {
|
|
261
|
+
if (!servers.has(name)) {
|
|
293
262
|
servers.set(name, { raw, path });
|
|
294
263
|
}
|
|
295
264
|
}
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
265
|
+
}
|
|
266
|
+
// The manifest's own `mcpServers` wins on a name both declare.
|
|
267
|
+
for (const path of declaredPaths(plugin, declared.paths)) {
|
|
268
|
+
for (const [name, raw] of Object.entries(await readMcpFile(plugin, path))) {
|
|
269
|
+
servers.set(name, { raw, path });
|
|
300
270
|
}
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
for (const [
|
|
304
|
-
|
|
305
|
-
if (name === undefined) {
|
|
306
|
-
continue;
|
|
307
|
-
}
|
|
308
|
-
if (overlaid.has(name)) {
|
|
309
|
-
overlaidServers.push(name);
|
|
310
|
-
continue;
|
|
311
|
-
}
|
|
312
|
-
const connection = serverConnection(plugin, name, raw, path);
|
|
313
|
-
if (connection !== undefined) {
|
|
314
|
-
connections.push(connection);
|
|
315
|
-
}
|
|
271
|
+
}
|
|
272
|
+
for (const inline of declared.inline) {
|
|
273
|
+
for (const [name, raw] of Object.entries(mcpServersOf(inline))) {
|
|
274
|
+
servers.set(name, { raw, path: plugin.manifestPath });
|
|
316
275
|
}
|
|
317
|
-
|
|
318
|
-
|
|
276
|
+
}
|
|
277
|
+
const connections = [];
|
|
278
|
+
const overlaidServers = [];
|
|
279
|
+
for (const [rawName, { raw, path }] of servers) {
|
|
280
|
+
const name = componentName(plugin, rawName, path);
|
|
281
|
+
if (name === undefined) {
|
|
282
|
+
continue;
|
|
283
|
+
}
|
|
284
|
+
if (overlaid.has(name)) {
|
|
285
|
+
overlaidServers.push(name);
|
|
286
|
+
continue;
|
|
287
|
+
}
|
|
288
|
+
const connection = serverConnection(plugin, name, raw, path);
|
|
289
|
+
if (connection !== undefined) {
|
|
290
|
+
connections.push(connection);
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
return { connections, overlaidServers };
|
|
319
294
|
}
|
|
320
|
-
function readMcpFile(plugin, path) {
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
return isRecord(data) ? mcpServersOf(data) : {};
|
|
324
|
-
});
|
|
295
|
+
async function readMcpFile(plugin, path) {
|
|
296
|
+
const data = await readJson(plugin.ctx, path);
|
|
297
|
+
return isRecord(data) ? mcpServersOf(data) : {};
|
|
325
298
|
}
|
|
326
299
|
/** `{ mcpServers: { ... } }`, or a bare map of server-like entries. */
|
|
327
300
|
function mcpServersOf(data) {
|
|
@@ -339,11 +312,10 @@ function mcpServersOf(data) {
|
|
|
339
312
|
function serverConnection(plugin, name, raw, path) {
|
|
340
313
|
const unresolved = new Set();
|
|
341
314
|
const expanded = expandPlaceholders(raw, key => {
|
|
342
|
-
var _a;
|
|
343
315
|
if (PLUGIN_ROOT_VARIABLES.has(key)) {
|
|
344
316
|
return plugin.root;
|
|
345
317
|
}
|
|
346
|
-
return
|
|
318
|
+
return lookupVariable(plugin.variables, key) ?? process.env[key];
|
|
347
319
|
}, unresolved);
|
|
348
320
|
if (unresolved.size > 0) {
|
|
349
321
|
plugin.ctx.diagnostics.push({
|
|
@@ -413,9 +385,8 @@ function serverTransport(plugin, name, server, path) {
|
|
|
413
385
|
function expandPlaceholders(value, lookup, unresolved) {
|
|
414
386
|
if (typeof value === "string") {
|
|
415
387
|
return value.replace(PLACEHOLDER, (match, envKey, key, fallback) => {
|
|
416
|
-
|
|
417
|
-
const
|
|
418
|
-
const resolved = (_b = lookup(name)) !== null && _b !== void 0 ? _b : fallback;
|
|
388
|
+
const name = envKey ?? key ?? "";
|
|
389
|
+
const resolved = lookup(name) ?? fallback;
|
|
419
390
|
if (resolved === undefined) {
|
|
420
391
|
unresolved.add(name);
|
|
421
392
|
return match;
|
|
@@ -441,31 +412,28 @@ function expandPlaceholders(value, lookup, unresolved) {
|
|
|
441
412
|
* declared variable is `DD_SITE`.
|
|
442
413
|
*/
|
|
443
414
|
function lookupVariable(variables, key) {
|
|
444
|
-
var _a;
|
|
445
415
|
if (variables[key] !== undefined) {
|
|
446
416
|
return variables[key];
|
|
447
417
|
}
|
|
448
418
|
const lower = key.toLowerCase();
|
|
449
|
-
return
|
|
419
|
+
return Object.entries(variables).find(([name]) => name.toLowerCase() === lower)?.[1];
|
|
450
420
|
}
|
|
451
421
|
/**
|
|
452
422
|
* Files a component slot resolves to: the manifest's declaration (files and
|
|
453
423
|
* directories, walked) or the conventional folder.
|
|
454
424
|
*/
|
|
455
|
-
function componentFiles(plugin, declared, folder, extensions) {
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
files.push(...(yield walkFiles(path)));
|
|
462
|
-
}
|
|
463
|
-
else if (yield isFile(path)) {
|
|
464
|
-
files.push(path);
|
|
465
|
-
}
|
|
425
|
+
async function componentFiles(plugin, declared, folder, extensions) {
|
|
426
|
+
const roots = declared === undefined ? [join(plugin.root, folder)] : declaredPaths(plugin, declared);
|
|
427
|
+
const files = [];
|
|
428
|
+
for (const path of roots) {
|
|
429
|
+
if (await isDirectory(path)) {
|
|
430
|
+
files.push(...(await walkFiles(path)));
|
|
466
431
|
}
|
|
467
|
-
|
|
468
|
-
|
|
432
|
+
else if (await isFile(path)) {
|
|
433
|
+
files.push(path);
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
return files.filter(file => extensions.has(extname(file)));
|
|
469
437
|
}
|
|
470
438
|
/** Manifest paths resolve against the plugin root; escaping ones are refused, as in Cursor. */
|
|
471
439
|
function declaredPaths(plugin, declared) {
|
|
@@ -484,36 +452,32 @@ function declaredPaths(plugin, declared) {
|
|
|
484
452
|
}
|
|
485
453
|
return paths;
|
|
486
454
|
}
|
|
487
|
-
function readJson(ctx, path) {
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
}
|
|
500
|
-
});
|
|
455
|
+
async function readJson(ctx, path) {
|
|
456
|
+
try {
|
|
457
|
+
return JSON.parse(await readFile(path, "utf8"));
|
|
458
|
+
}
|
|
459
|
+
catch (error) {
|
|
460
|
+
ctx.diagnostics.push({
|
|
461
|
+
severity: "error",
|
|
462
|
+
path: displayPath(ctx, path),
|
|
463
|
+
message: `Failed to parse ${basename(path)}: ${errorMessage(error)}`,
|
|
464
|
+
});
|
|
465
|
+
return undefined;
|
|
466
|
+
}
|
|
501
467
|
}
|
|
502
468
|
/** Frontmatter the reader understands; a malformed block warns and reads as empty. */
|
|
503
|
-
function readMarkdown(plugin, path) {
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
return { data: parsed.success ? parsed.data : {}, body };
|
|
516
|
-
});
|
|
469
|
+
async function readMarkdown(plugin, path) {
|
|
470
|
+
const { data, body, error } = parseYamlFrontmatter(await readFile(path, "utf8"));
|
|
471
|
+
const parsed = frontmatterSchema.safeParse(data);
|
|
472
|
+
const problem = error ?? (parsed.success ? undefined : firstIssue(parsed.error));
|
|
473
|
+
if (problem !== undefined) {
|
|
474
|
+
plugin.ctx.diagnostics.push({
|
|
475
|
+
severity: "warning",
|
|
476
|
+
path: displayPath(plugin.ctx, path),
|
|
477
|
+
message: `Frontmatter is malformed (${problem}); using the file name and body.`,
|
|
478
|
+
});
|
|
479
|
+
}
|
|
480
|
+
return { data: parsed.success ? parsed.data : {}, body };
|
|
517
481
|
}
|
|
518
482
|
/**
|
|
519
483
|
* Cursor lowercases and hyphenates component names; `_` and `.` fold to `-`
|