@cursor/bdk 0.2.9 → 0.2.10
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/{reference_skills.md.ClkMoQsV.js → reference_skills.md.C0guGcH0.js} +3 -3
- 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 +38 -38
- 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.js +410 -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-DXm_VXAQ.css +1 -0
- package/dist/playground/assets/{index-Co4CUVTQ.js → index-JekUQERK.js} +45 -45
- 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
- /package/dist/docs/assets/{reference_skills.md.ClkMoQsV.lean.js → reference_skills.md.C0guGcH0.lean.js} +0 -0
|
@@ -13,15 +13,6 @@
|
|
|
13
13
|
* fails the package install. The monorepo source checkout is not a consumer
|
|
14
14
|
* install, so `pnpm install` in everysphere does not overwrite `~/.cursor`.
|
|
15
15
|
*/
|
|
16
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
17
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
18
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
19
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
20
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
21
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
22
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
23
|
-
});
|
|
24
|
-
};
|
|
25
16
|
import { access, chmod, cp, mkdir, readdir, readFile, rm, stat, writeFile } from "node:fs/promises";
|
|
26
17
|
import { homedir } from "node:os";
|
|
27
18
|
import { join } from "node:path";
|
|
@@ -36,7 +27,7 @@ export const CURSOR_SKILLS_NAMESPACE = "bdk";
|
|
|
36
27
|
*/
|
|
37
28
|
const LEGACY_CURSOR_SKILLS_NAMESPACES = ["agentsdk", "agentkit"];
|
|
38
29
|
/** How long the `init` offer waits for an answer before skipping the install. */
|
|
39
|
-
export const SKILL_PROMPT_TIMEOUT_MS =
|
|
30
|
+
export const SKILL_PROMPT_TIMEOUT_MS = 45_000;
|
|
40
31
|
/**
|
|
41
32
|
* Override the resolved `~/.cursor/skills` directory (not the user home).
|
|
42
33
|
* Used by the postinstall hook in tests and publish smoke.
|
|
@@ -45,11 +36,10 @@ export const CURSOR_JULY_SKILLS_HOME_ENV = "CURSOR_JULY_SKILLS_HOME";
|
|
|
45
36
|
/** Set to `1` to skip the postinstall skill copy. */
|
|
46
37
|
export const CURSOR_JULY_SKIP_SKILL_INSTALL_ENV = "CURSOR_JULY_SKIP_SKILL_INSTALL";
|
|
47
38
|
export function cursorSkillsHome(home) {
|
|
48
|
-
var _a;
|
|
49
39
|
if (home !== undefined) {
|
|
50
40
|
return join(home.trim() === "" ? homedir() : home, ".cursor", "skills");
|
|
51
41
|
}
|
|
52
|
-
const override =
|
|
42
|
+
const override = process.env[CURSOR_JULY_SKILLS_HOME_ENV]?.trim();
|
|
53
43
|
if (override !== undefined && override !== "") {
|
|
54
44
|
return override;
|
|
55
45
|
}
|
|
@@ -79,70 +69,63 @@ export function skillInstallPath(skill, skillsHome = cursorSkillsHome()) {
|
|
|
79
69
|
* Skills shipped next to the running package. Uses the frontmatter `name`
|
|
80
70
|
* when present, otherwise `bdk-<dir>`.
|
|
81
71
|
*/
|
|
82
|
-
export function listShippedPackageSkills() {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
72
|
+
export async function listShippedPackageSkills(packageRoot = packageRootDir()) {
|
|
73
|
+
const skillsRoot = join(packageRoot, "skills");
|
|
74
|
+
let entries;
|
|
75
|
+
try {
|
|
76
|
+
entries = await readdir(skillsRoot, { withFileTypes: true });
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
return [];
|
|
80
|
+
}
|
|
81
|
+
const packageVersion = await readPackageVersion(packageRoot);
|
|
82
|
+
const skills = [];
|
|
83
|
+
for (const entry of entries) {
|
|
84
|
+
if (!entry.isDirectory()) {
|
|
85
|
+
continue;
|
|
88
86
|
}
|
|
89
|
-
|
|
90
|
-
|
|
87
|
+
const sourceDir = join(skillsRoot, entry.name);
|
|
88
|
+
const skillMd = join(sourceDir, "SKILL.md");
|
|
89
|
+
try {
|
|
90
|
+
await access(skillMd);
|
|
91
91
|
}
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
for (const entry of entries) {
|
|
95
|
-
if (!entry.isDirectory()) {
|
|
96
|
-
continue;
|
|
97
|
-
}
|
|
98
|
-
const sourceDir = join(skillsRoot, entry.name);
|
|
99
|
-
const skillMd = join(sourceDir, "SKILL.md");
|
|
100
|
-
try {
|
|
101
|
-
yield access(skillMd);
|
|
102
|
-
}
|
|
103
|
-
catch (_b) {
|
|
104
|
-
continue;
|
|
105
|
-
}
|
|
106
|
-
const raw = yield readFile(skillMd, "utf8");
|
|
107
|
-
const name = parseFrontmatter(raw).data.name || `${CURSOR_SKILLS_NAMESPACE}-${entry.name}`;
|
|
108
|
-
skills.push({ name, leafDir: entry.name, sourceDir, packageVersion });
|
|
92
|
+
catch {
|
|
93
|
+
continue;
|
|
109
94
|
}
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
95
|
+
const raw = await readFile(skillMd, "utf8");
|
|
96
|
+
const name = parseFrontmatter(raw).data.name || `${CURSOR_SKILLS_NAMESPACE}-${entry.name}`;
|
|
97
|
+
skills.push({ name, leafDir: entry.name, sourceDir, packageVersion });
|
|
98
|
+
}
|
|
99
|
+
skills.sort((a, b) => a.leafDir.localeCompare(b.leafDir));
|
|
100
|
+
return skills;
|
|
113
101
|
}
|
|
114
102
|
const PACKAGE_VERSION_PLACEHOLDER = "__CURSOR_JULY_VERSION__";
|
|
115
|
-
function readPackageVersion(packageRoot) {
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
return manifest.version;
|
|
123
|
-
});
|
|
103
|
+
async function readPackageVersion(packageRoot) {
|
|
104
|
+
const raw = await readFile(join(packageRoot, "package.json"), "utf8");
|
|
105
|
+
const manifest = JSON.parse(raw);
|
|
106
|
+
if (typeof manifest.version !== "string" || manifest.version.trim() === "") {
|
|
107
|
+
throw new Error("The @cursor/bdk package must declare a version.");
|
|
108
|
+
}
|
|
109
|
+
return manifest.version;
|
|
124
110
|
}
|
|
125
111
|
/**
|
|
126
112
|
* Skills that do not yet have a SKILL.md under ~/.cursor/skills/bdk/.
|
|
127
113
|
* Install still overwrites every shipped skill when the user confirms — this
|
|
128
114
|
* helper is for messaging (fresh install vs update).
|
|
129
115
|
*/
|
|
130
|
-
export function findMissingCursorSkills(options) {
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
try {
|
|
138
|
-
yield access(join(skillInstallPath(skill, home), "SKILL.md"));
|
|
139
|
-
}
|
|
140
|
-
catch (_b) {
|
|
141
|
-
missing.push(skill);
|
|
142
|
-
}
|
|
116
|
+
export async function findMissingCursorSkills(options) {
|
|
117
|
+
const shipped = await listShippedPackageSkills(options?.packageRoot);
|
|
118
|
+
const home = options?.skillsHome ?? cursorSkillsHome();
|
|
119
|
+
const missing = [];
|
|
120
|
+
for (const skill of shipped) {
|
|
121
|
+
try {
|
|
122
|
+
await access(join(skillInstallPath(skill, home), "SKILL.md"));
|
|
143
123
|
}
|
|
144
|
-
|
|
145
|
-
|
|
124
|
+
catch {
|
|
125
|
+
missing.push(skill);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return missing;
|
|
146
129
|
}
|
|
147
130
|
/**
|
|
148
131
|
* Copy each skill directory into `skillsHome/bdk/<leafDir>/`.
|
|
@@ -151,99 +134,87 @@ export function findMissingCursorSkills(options) {
|
|
|
151
134
|
* loads the body into context, and removes leaf dirs no longer shipped.
|
|
152
135
|
* Also deletes leftover `skillsHome/agentsdk/` and `skillsHome/agentkit/`.
|
|
153
136
|
*/
|
|
154
|
-
export function installCursorSkills(
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
yield writeFile(skillMdPath, adjusted, "utf8");
|
|
176
|
-
}
|
|
177
|
-
installed.push(skill.leafDir);
|
|
137
|
+
export async function installCursorSkills(skills, skillsHome = cursorSkillsHome()) {
|
|
138
|
+
const namespaceDir = bdkCursorSkillsDir(skillsHome);
|
|
139
|
+
await mkdir(namespaceDir, { recursive: true });
|
|
140
|
+
const removed = await orphanLeaves(namespaceDir, skills);
|
|
141
|
+
for (const leaf of removed) {
|
|
142
|
+
await rm(join(namespaceDir, leaf), { recursive: true, force: true });
|
|
143
|
+
}
|
|
144
|
+
const installed = [];
|
|
145
|
+
for (const skill of skills) {
|
|
146
|
+
const target = skillInstallPath(skill, skillsHome);
|
|
147
|
+
await cp(skill.sourceDir, target, { recursive: true, force: true });
|
|
148
|
+
// cp() preserves source modes, and installs can come from read-only
|
|
149
|
+
// stores (Bazel runfiles, pnpm's content-addressed store, nix). Make the
|
|
150
|
+
// copies writable so the SKILL.md rewrite below and the overwrite on the
|
|
151
|
+
// next upgrade both work.
|
|
152
|
+
await makeTreeWritable(target);
|
|
153
|
+
const skillMdPath = join(target, "SKILL.md");
|
|
154
|
+
const raw = await readFile(skillMdPath, "utf8");
|
|
155
|
+
const adjusted = prepareSkillMarkdownForCursorInstall(raw, skill.packageVersion);
|
|
156
|
+
if (adjusted !== raw) {
|
|
157
|
+
await writeFile(skillMdPath, adjusted, "utf8");
|
|
178
158
|
}
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
159
|
+
installed.push(skill.leafDir);
|
|
160
|
+
}
|
|
161
|
+
const removedLegacyDirs = await removeLegacyCursorSkillsNamespaces(skillsHome);
|
|
162
|
+
return { installed, removed, removedLegacyDirs };
|
|
182
163
|
}
|
|
183
|
-
function makeTreeWritable(root) {
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
yield makeTreeWritable(child);
|
|
191
|
-
}
|
|
192
|
-
else {
|
|
193
|
-
yield addOwnerWrite(child);
|
|
194
|
-
}
|
|
164
|
+
async function makeTreeWritable(root) {
|
|
165
|
+
await addOwnerWrite(root);
|
|
166
|
+
const entries = await readdir(root, { withFileTypes: true });
|
|
167
|
+
for (const entry of entries) {
|
|
168
|
+
const child = join(root, entry.name);
|
|
169
|
+
if (entry.isDirectory()) {
|
|
170
|
+
await makeTreeWritable(child);
|
|
195
171
|
}
|
|
196
|
-
|
|
172
|
+
else {
|
|
173
|
+
await addOwnerWrite(child);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
197
176
|
}
|
|
198
177
|
/** Add owner-write, preserving every other mode bit (e.g. exec on scripts). */
|
|
199
|
-
function addOwnerWrite(path) {
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
}
|
|
205
|
-
});
|
|
178
|
+
async function addOwnerWrite(path) {
|
|
179
|
+
const mode = (await stat(path)).mode & 0o7777;
|
|
180
|
+
if ((mode & 0o200) === 0) {
|
|
181
|
+
await chmod(path, mode | 0o200);
|
|
182
|
+
}
|
|
206
183
|
}
|
|
207
184
|
/** Installed leaf dirs the package no longer ships. Installing deletes these. */
|
|
208
|
-
function orphanLeaves(namespaceDir, skills) {
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
.map(entry => entry.name);
|
|
221
|
-
});
|
|
185
|
+
async function orphanLeaves(namespaceDir, skills) {
|
|
186
|
+
const shipped = new Set(skills.map(skill => skill.leafDir));
|
|
187
|
+
let entries;
|
|
188
|
+
try {
|
|
189
|
+
entries = await readdir(namespaceDir, { withFileTypes: true });
|
|
190
|
+
}
|
|
191
|
+
catch {
|
|
192
|
+
return [];
|
|
193
|
+
}
|
|
194
|
+
return entries
|
|
195
|
+
.filter(entry => entry.isDirectory() && !shipped.has(entry.name))
|
|
196
|
+
.map(entry => entry.name);
|
|
222
197
|
}
|
|
223
198
|
/** Drop leftover earlier install folders so stale skill ids are not discovered. */
|
|
224
|
-
function removeLegacyCursorSkillsNamespaces(skillsHome) {
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
return present;
|
|
231
|
-
});
|
|
199
|
+
async function removeLegacyCursorSkillsNamespaces(skillsHome) {
|
|
200
|
+
const present = await existingLegacyCursorSkillsDirs(skillsHome);
|
|
201
|
+
for (const dir of present) {
|
|
202
|
+
await rm(dir, { recursive: true, force: true });
|
|
203
|
+
}
|
|
204
|
+
return present;
|
|
232
205
|
}
|
|
233
|
-
function existingLegacyCursorSkillsDirs(skillsHome) {
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
present.push(dir);
|
|
240
|
-
}
|
|
241
|
-
catch (_a) {
|
|
242
|
-
continue;
|
|
243
|
-
}
|
|
206
|
+
async function existingLegacyCursorSkillsDirs(skillsHome) {
|
|
207
|
+
const present = [];
|
|
208
|
+
for (const dir of legacyCursorSkillsDirs(skillsHome)) {
|
|
209
|
+
try {
|
|
210
|
+
await stat(dir);
|
|
211
|
+
present.push(dir);
|
|
244
212
|
}
|
|
245
|
-
|
|
246
|
-
|
|
213
|
+
catch {
|
|
214
|
+
continue;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
return present;
|
|
247
218
|
}
|
|
248
219
|
/**
|
|
249
220
|
* Drop monorepo `paths` globs, set `alwaysApply: true` so Cursor injects the
|
|
@@ -251,12 +222,11 @@ function existingLegacyCursorSkillsDirs(skillsHome) {
|
|
|
251
222
|
* fix package doc links for ~/.cursor installs.
|
|
252
223
|
*/
|
|
253
224
|
export function prepareSkillMarkdownForCursorInstall(content, packageVersion) {
|
|
254
|
-
var _a;
|
|
255
225
|
const match = /^---\r?\n([\s\S]*?)\r?\n---/.exec(content);
|
|
256
226
|
if (match === null) {
|
|
257
227
|
return content;
|
|
258
228
|
}
|
|
259
|
-
const frontmatter = withAlwaysApply(stripPathsFromFrontmatter(
|
|
229
|
+
const frontmatter = withAlwaysApply(stripPathsFromFrontmatter(match[1] ?? ""));
|
|
260
230
|
const body = content.slice(match[0].length);
|
|
261
231
|
const adjustedBody = body.replace(/\[`docs\/([^`]+)`\]\(\.\.\/\.\.\/docs\/[^)]+\)/g, "docs/$1 in the @cursor/bdk package");
|
|
262
232
|
if (adjustedBody.includes(PACKAGE_VERSION_PLACEHOLDER) &&
|
|
@@ -269,14 +239,13 @@ export function prepareSkillMarkdownForCursorInstall(content, packageVersion) {
|
|
|
269
239
|
return `---\n${frontmatter.trimEnd()}\n---${versionBoundBody}`;
|
|
270
240
|
}
|
|
271
241
|
function stripPathsFromFrontmatter(frontmatter) {
|
|
272
|
-
var _a, _b;
|
|
273
242
|
const lines = frontmatter.split(/\r?\n/);
|
|
274
243
|
const out = [];
|
|
275
244
|
for (let i = 0; i < lines.length; i++) {
|
|
276
|
-
const line =
|
|
245
|
+
const line = lines[i] ?? "";
|
|
277
246
|
if (line.trimStart().startsWith("paths:")) {
|
|
278
247
|
i++;
|
|
279
|
-
while (i < lines.length && /^[ \t]*-/.test(
|
|
248
|
+
while (i < lines.length && /^[ \t]*-/.test(lines[i] ?? "")) {
|
|
280
249
|
i++;
|
|
281
250
|
}
|
|
282
251
|
i--;
|
|
@@ -305,31 +274,28 @@ function withAlwaysApply(frontmatter) {
|
|
|
305
274
|
return `${without}\nalwaysApply: true`;
|
|
306
275
|
}
|
|
307
276
|
/** What an install would do, for the offer and for `install-skills`. */
|
|
308
|
-
export function planSkillInstall(options) {
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
legacyDirs: yield existingLegacyCursorSkillsDirs(skillsHome),
|
|
331
|
-
};
|
|
332
|
-
});
|
|
277
|
+
export async function planSkillInstall(options) {
|
|
278
|
+
const skillsHome = options?.skillsHome ?? cursorSkillsHome();
|
|
279
|
+
const directory = bdkCursorSkillsDir(skillsHome);
|
|
280
|
+
const shipped = await listShippedPackageSkills(options?.packageRoot);
|
|
281
|
+
const present = await Promise.all(shipped.map(async (skill) => {
|
|
282
|
+
try {
|
|
283
|
+
await access(join(skillInstallPath(skill, skillsHome), "SKILL.md"));
|
|
284
|
+
return true;
|
|
285
|
+
}
|
|
286
|
+
catch {
|
|
287
|
+
return false;
|
|
288
|
+
}
|
|
289
|
+
}));
|
|
290
|
+
return {
|
|
291
|
+
shipped,
|
|
292
|
+
skillsHome,
|
|
293
|
+
directory,
|
|
294
|
+
leaves: shipped.map(skill => skill.leafDir),
|
|
295
|
+
firstInstall: present.every(isPresent => !isPresent),
|
|
296
|
+
orphans: await orphanLeaves(directory, shipped),
|
|
297
|
+
legacyDirs: await existingLegacyCursorSkillsDirs(skillsHome),
|
|
298
|
+
};
|
|
333
299
|
}
|
|
334
300
|
/** `Installed 9 BDK skills`, what it dropped, and where it went. */
|
|
335
301
|
export function formatSkillInstall(plan, result) {
|
|
@@ -351,39 +317,36 @@ export function formatSkillInstall(plan, result) {
|
|
|
351
317
|
* the package install. No-op in the monorepo source tree and when
|
|
352
318
|
* `CURSOR_JULY_SKIP_SKILL_INSTALL=1`.
|
|
353
319
|
*/
|
|
354
|
-
export function syncCursorSkillsOnPackageInstall() {
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
if (env[CURSOR_JULY_SKIP_SKILL_INSTALL_ENV] === "1") {
|
|
360
|
-
return { status: "skipped", reason: "opt-out" };
|
|
361
|
-
}
|
|
362
|
-
const packageRoot = (_b = options.packageRoot) !== null && _b !== void 0 ? _b : packageRootDir();
|
|
363
|
-
const consumer = (_c = options.consumer) !== null && _c !== void 0 ? _c : isConsumerPackageInstall(packageRoot);
|
|
364
|
-
if (!consumer) {
|
|
365
|
-
return { status: "skipped", reason: "not-consumer" };
|
|
366
|
-
}
|
|
367
|
-
const plan = yield planSkillInstall({
|
|
368
|
-
packageRoot,
|
|
369
|
-
skillsHome: options.skillsHome,
|
|
370
|
-
});
|
|
371
|
-
if (plan.shipped.length === 0) {
|
|
372
|
-
return { status: "skipped", reason: "no-skills" };
|
|
373
|
-
}
|
|
374
|
-
const result = yield installCursorSkills(plan.shipped, plan.skillsHome);
|
|
375
|
-
const out = (_d = options.out) !== null && _d !== void 0 ? _d : (text => process.stderr.write(text));
|
|
376
|
-
out(formatSkillInstall(plan, result));
|
|
377
|
-
return {
|
|
378
|
-
status: "installed",
|
|
379
|
-
installed: result.installed,
|
|
380
|
-
removed: result.removed,
|
|
381
|
-
};
|
|
320
|
+
export async function syncCursorSkillsOnPackageInstall(options = {}) {
|
|
321
|
+
try {
|
|
322
|
+
const env = options.env ?? process.env;
|
|
323
|
+
if (env[CURSOR_JULY_SKIP_SKILL_INSTALL_ENV] === "1") {
|
|
324
|
+
return { status: "skipped", reason: "opt-out" };
|
|
382
325
|
}
|
|
383
|
-
|
|
384
|
-
|
|
326
|
+
const packageRoot = options.packageRoot ?? packageRootDir();
|
|
327
|
+
const consumer = options.consumer ?? isConsumerPackageInstall(packageRoot);
|
|
328
|
+
if (!consumer) {
|
|
329
|
+
return { status: "skipped", reason: "not-consumer" };
|
|
385
330
|
}
|
|
386
|
-
|
|
331
|
+
const plan = await planSkillInstall({
|
|
332
|
+
packageRoot,
|
|
333
|
+
skillsHome: options.skillsHome,
|
|
334
|
+
});
|
|
335
|
+
if (plan.shipped.length === 0) {
|
|
336
|
+
return { status: "skipped", reason: "no-skills" };
|
|
337
|
+
}
|
|
338
|
+
const result = await installCursorSkills(plan.shipped, plan.skillsHome);
|
|
339
|
+
const out = options.out ?? (text => process.stderr.write(text));
|
|
340
|
+
out(formatSkillInstall(plan, result));
|
|
341
|
+
return {
|
|
342
|
+
status: "installed",
|
|
343
|
+
installed: result.installed,
|
|
344
|
+
removed: result.removed,
|
|
345
|
+
};
|
|
346
|
+
}
|
|
347
|
+
catch {
|
|
348
|
+
return { status: "skipped", reason: "error" };
|
|
349
|
+
}
|
|
387
350
|
}
|
|
388
351
|
/**
|
|
389
352
|
* On a TTY, offer to install/update every shipped package skill into
|
|
@@ -391,82 +354,77 @@ export function syncCursorSkillsOnPackageInstall() {
|
|
|
391
354
|
* or the package ships no skills. An unanswered prompt skips the install
|
|
392
355
|
* rather than blocking the caller — see `SKILL_PROMPT_TIMEOUT_MS`.
|
|
393
356
|
*/
|
|
394
|
-
export function offerInstallCursorSkills() {
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
}
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
out(c.dim(
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
}
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
}
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
const confirm = (_c = options.confirm) !== null && _c !== void 0 ? _c : (q => promptYesNo(q, {
|
|
357
|
+
export async function offerInstallCursorSkills(options = {}) {
|
|
358
|
+
const out = options.out ?? (text => process.stdout.write(text));
|
|
359
|
+
const interactive = options.interactive ?? (process.stdin.isTTY === true && process.stdout.isTTY === true);
|
|
360
|
+
if (!interactive) {
|
|
361
|
+
return { installed: [], skipped: true };
|
|
362
|
+
}
|
|
363
|
+
const plan = await planSkillInstall({
|
|
364
|
+
packageRoot: options.packageRoot,
|
|
365
|
+
skillsHome: options.skillsHome,
|
|
366
|
+
});
|
|
367
|
+
if (plan.shipped.length === 0) {
|
|
368
|
+
return { installed: [], skipped: true };
|
|
369
|
+
}
|
|
370
|
+
const noun = plan.shipped.length === 1 ? "skill" : "skills";
|
|
371
|
+
const verb = plan.firstInstall ? "Install" : "Update";
|
|
372
|
+
const c = stdoutPalette();
|
|
373
|
+
out(`${verb} ${plan.shipped.length} BDK ${noun} in ${plan.directory}?\n`);
|
|
374
|
+
out(c.dim(` ${plan.leaves.join(", ")}\n`));
|
|
375
|
+
if (!plan.firstInstall) {
|
|
376
|
+
out(c.dim(" (overwrites existing copies with the package version)\n"));
|
|
377
|
+
}
|
|
378
|
+
if (plan.orphans.length > 0) {
|
|
379
|
+
out(c.dim(` (deletes ${plan.orphans.join(", ")})\n`));
|
|
380
|
+
}
|
|
381
|
+
for (const dir of plan.legacyDirs) {
|
|
382
|
+
out(c.dim(` (deletes leftover ${dir})\n`));
|
|
383
|
+
}
|
|
384
|
+
const confirm = options.confirm ??
|
|
385
|
+
(q => promptYesNo(q, {
|
|
424
386
|
defaultYes: true,
|
|
425
387
|
out,
|
|
426
388
|
timeoutMs: SKILL_PROMPT_TIMEOUT_MS,
|
|
427
389
|
}));
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
});
|
|
390
|
+
const accepted = await confirm(`${verb} now?`);
|
|
391
|
+
if (accepted !== true) {
|
|
392
|
+
// `undefined` is the prompt timing out or stdin closing; both mean nobody
|
|
393
|
+
// said yes, so do not claim a duration neither case is guaranteed to have.
|
|
394
|
+
const why = accepted === undefined ? "No answer — skipped the skill install." : "Skipped skill install.";
|
|
395
|
+
out(c.dim(`${why}\nInstall later: ${CLI_COMMAND_NAME} install-skills (${plan.directory})\n\n`));
|
|
396
|
+
return { installed: [], skipped: true };
|
|
397
|
+
}
|
|
398
|
+
const result = await installCursorSkills(plan.shipped, plan.skillsHome);
|
|
399
|
+
out(`${formatSkillInstall(plan, result)}\n`);
|
|
400
|
+
return { installed: result.installed, skipped: false };
|
|
440
401
|
}
|
|
441
402
|
/**
|
|
442
403
|
* Ask a yes/no question. Resolves `undefined` when the answer never comes —
|
|
443
404
|
* the prompt timed out, or stdin closed on an empty line.
|
|
444
405
|
*/
|
|
445
|
-
export function promptYesNo(question, options) {
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
}
|
|
458
|
-
if (line.trim() === "") {
|
|
459
|
-
return options.defaultYes;
|
|
460
|
-
}
|
|
461
|
-
const answer = line.trim().toLowerCase();
|
|
462
|
-
if (answer === "y" || answer === "yes") {
|
|
463
|
-
return true;
|
|
464
|
-
}
|
|
465
|
-
if (answer === "n" || answer === "no") {
|
|
466
|
-
return false;
|
|
467
|
-
}
|
|
406
|
+
export async function promptYesNo(question, options) {
|
|
407
|
+
const hint = options.defaultYes ? "Y/n" : "y/N";
|
|
408
|
+
const input = options.input ?? process.stdin;
|
|
409
|
+
options.out(`${question} [${hint}] `);
|
|
410
|
+
input.resume();
|
|
411
|
+
const line = await readOneLine(input, options.timeoutMs);
|
|
412
|
+
input.pause();
|
|
413
|
+
if (line === undefined) {
|
|
414
|
+
options.out("\n");
|
|
415
|
+
return undefined;
|
|
416
|
+
}
|
|
417
|
+
if (line.trim() === "") {
|
|
468
418
|
return options.defaultYes;
|
|
469
|
-
}
|
|
419
|
+
}
|
|
420
|
+
const answer = line.trim().toLowerCase();
|
|
421
|
+
if (answer === "y" || answer === "yes") {
|
|
422
|
+
return true;
|
|
423
|
+
}
|
|
424
|
+
if (answer === "n" || answer === "no") {
|
|
425
|
+
return false;
|
|
426
|
+
}
|
|
427
|
+
return options.defaultYes;
|
|
470
428
|
}
|
|
471
429
|
/** The line, or `undefined` when the stream ends or the clock runs out first. */
|
|
472
430
|
function readOneLine(stream, timeoutMs) {
|