@cursor/bdk 0.2.8 → 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.d.ts +1 -0
- package/dist/bin/agent-serve.d.ts.map +1 -1
- package/dist/bin/agent-serve.js +820 -807
- 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.oyjtOr3W.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.D0P6J_UJ.js → VPLocalSearchBox.BrbO5mEe.js} +1 -1
- package/dist/docs/assets/chunks/{arc.B0LY1J1h.js → arc.BOG1yms8.js} +1 -1
- package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.dPduLUxY.js → architectureDiagram-Q4EWVU46.C0hsMZnZ.js} +1 -1
- package/dist/docs/assets/chunks/{baseUniq.B_Ohm21h.js → baseUniq.H044KjKs.js} +1 -1
- package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.B4zcanaJ.js → blockDiagram-DXYQGD6D.BsRW6GoB.js} +1 -1
- package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.D9Iw21nx.js → c4Diagram-AHTNJAMY.B9HV5PFR.js} +1 -1
- package/dist/docs/assets/chunks/channel.CBwrU9rP.js +1 -0
- package/dist/docs/assets/chunks/{chunk-4BX2VUAB.DDVwRShI.js → chunk-4BX2VUAB.CPoT_ajl.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-4TB4RGXK.DsYcdn1i.js → chunk-4TB4RGXK.DZBwWuCL.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-55IACEB6.BzzQvcYp.js → chunk-55IACEB6.CZ3yTiyq.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-EDXVE4YY.BMiXZ7FX.js → chunk-EDXVE4YY.6DfvHSd8.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-FMBD7UC4.D_mBcLoc.js → chunk-FMBD7UC4.CpBj8HfK.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-OYMX7WX6.CMVjWVMx.js → chunk-OYMX7WX6.BdKo8YqS.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-QZHKN3VN.BG-FrPv9.js → chunk-QZHKN3VN.BnXNyxJx.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-YZCP3GAM.CkFE1ap3.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.BVNnCTvY.js → cose-bilkent-S5V4N54A.1SP8al9c.js} +1 -1
- package/dist/docs/assets/chunks/{dagre-KV5264BT.CDN5PR9l.js → dagre-KV5264BT.DS1L6hJt.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-5BDNPKRD.DQRUlT-i.js → diagram-5BDNPKRD.ChsausbG.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.CoeblYQT.js → diagram-G4DWMVQ6.3XsptNWj.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-MMDJMWI5.DW3ymjl0.js → diagram-MMDJMWI5.DPA9Dk_P.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-TYMM5635.BP0uN4Jw.js → diagram-TYMM5635.BVswXWrB.js} +1 -1
- package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.DVFUWEn4.js → erDiagram-SMLLAGMA.BSak5OSP.js} +1 -1
- package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.HU-eHspv.js → flowDiagram-DWJPFMVM.CQgN4TTz.js} +1 -1
- package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.DHNhXijY.js → ganttDiagram-T4ZO3ILL.GrT0kA4a.js} +1 -1
- package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.DkISXcO3.js → gitGraphDiagram-UUTBAWPF.CdS7Ucll.js} +1 -1
- package/dist/docs/assets/chunks/{graph.CCV0fuRR.js → graph.BVqKRmRo.js} +1 -1
- package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.bgILzOoc.js → infoDiagram-42DDH7IO.C3C9FRto.js} +1 -1
- package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.CuryXC0F.js → ishikawaDiagram-UXIWVN3A.2FuAh_Zj.js} +1 -1
- package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.BL1Pr-wu.js → journeyDiagram-VCZTEJTY.CaHMfK4b.js} +1 -1
- package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.BbGjvk4l.js → kanban-definition-6JOO6SKY.CjhIUwcA.js} +1 -1
- package/dist/docs/assets/chunks/{layout.C4PfdldS.js → layout.CGU3gfSf.js} +1 -1
- package/dist/docs/assets/chunks/{linear.C3xD1T6X.js → linear.DaihpW_n.js} +1 -1
- package/dist/docs/assets/chunks/{min.CzgRAQ9c.js → min.BS-j8kHQ.js} +1 -1
- package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.CA9rSWum.js → mindmap-definition-QFDTVHPH.BVJ1Bbnk.js} +1 -1
- package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.B8MprgJu.js → pieDiagram-DEJITSTG.Cz1WIv9r.js} +1 -1
- package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.DndDwbKT.js → quadrantDiagram-34T5L4WZ.DKLFxcjy.js} +1 -1
- package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.Zhfgwlnn.js → requirementDiagram-MS252O5E.BHegiK7x.js} +1 -1
- package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.B6RRm6N5.js → sankeyDiagram-XADWPNL6.DYkY6yPc.js} +1 -1
- package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.Bfmz-1PN.js → sequenceDiagram-FGHM5R23.DYQ1QUrI.js} +1 -1
- package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.gbrdNqgj.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.gpWjytMh.js → theme.DaplWQhQ.js} +2 -2
- package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.Bl1l7M1f.js → timeline-definition-GMOUNBTQ.BwFA8hiX.js} +1 -1
- package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.Dfle4U0d.js → vennDiagram-DHZGUBPP.CZ60W1C_.js} +1 -1
- package/dist/docs/assets/chunks/wardley-RL74JXVD.iXazD3Z7.js +162 -0
- package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.CM_4lmvZ.js → wardleyDiagram-NUSXRM2D.B69D2r8-.js} +1 -1
- package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.CHT5X28R.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.d.ts +0 -1
- package/dist/extensions/cursor-cloud-agents/lib/backend.d.ts.map +1 -1
- package/dist/extensions/cursor-cloud-agents/lib/backend.js +101 -130
- 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.d.ts.map +1 -1
- package/dist/extensions/cursor-cloud-agents/tools/list.js +9 -20
- 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.d.ts +18 -0
- package/dist/internal/cli-migrate.d.ts.map +1 -0
- package/dist/internal/cli-migrate.js +136 -0
- 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.d.ts +1 -0
- package/dist/internal/cursor/credentials.d.ts.map +1 -1
- package/dist/internal/cursor/credentials.js +130 -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.d.ts.map +1 -1
- package/dist/internal/install-cursor-skills.js +238 -274
- 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-MijLHTbB.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 +264 -0
- package/dist/docs/assets/chunks/@localSearchIndexroot.C25zYVuc.js +0 -1
- package/dist/docs/assets/chunks/channel.CRUyWDV-.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.CG_UObcQ.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.CG_UObcQ.js +0 -1
- package/dist/docs/assets/chunks/clone.NYSZ9qZN.js +0 -1
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.DOOmulfQ.js +0 -1
- package/dist/docs/assets/chunks/wardley-RL74JXVD.BJrCW6xc.js +0 -162
- 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-DPKLl4C_.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--;
|
|
@@ -286,8 +255,14 @@ function stripPathsFromFrontmatter(frontmatter) {
|
|
|
286
255
|
}
|
|
287
256
|
return out.join("\n");
|
|
288
257
|
}
|
|
289
|
-
/**
|
|
258
|
+
/**
|
|
259
|
+
* Cursor loads `alwaysApply: true` skills as global rules, not catalog rows.
|
|
260
|
+
* A situational skill opts out with an explicit `alwaysApply: false`.
|
|
261
|
+
*/
|
|
290
262
|
function withAlwaysApply(frontmatter) {
|
|
263
|
+
if (/^\s*alwaysApply\s*:\s*false\s*$/m.test(frontmatter)) {
|
|
264
|
+
return frontmatter;
|
|
265
|
+
}
|
|
291
266
|
const without = frontmatter
|
|
292
267
|
.split(/\r?\n/)
|
|
293
268
|
.filter(line => !/^\s*alwaysApply\s*:/.test(line))
|
|
@@ -299,31 +274,28 @@ function withAlwaysApply(frontmatter) {
|
|
|
299
274
|
return `${without}\nalwaysApply: true`;
|
|
300
275
|
}
|
|
301
276
|
/** What an install would do, for the offer and for `install-skills`. */
|
|
302
|
-
export function planSkillInstall(options) {
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
legacyDirs: yield existingLegacyCursorSkillsDirs(skillsHome),
|
|
325
|
-
};
|
|
326
|
-
});
|
|
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
|
+
};
|
|
327
299
|
}
|
|
328
300
|
/** `Installed 9 BDK skills`, what it dropped, and where it went. */
|
|
329
301
|
export function formatSkillInstall(plan, result) {
|
|
@@ -345,39 +317,36 @@ export function formatSkillInstall(plan, result) {
|
|
|
345
317
|
* the package install. No-op in the monorepo source tree and when
|
|
346
318
|
* `CURSOR_JULY_SKIP_SKILL_INSTALL=1`.
|
|
347
319
|
*/
|
|
348
|
-
export function syncCursorSkillsOnPackageInstall() {
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
if (env[CURSOR_JULY_SKIP_SKILL_INSTALL_ENV] === "1") {
|
|
354
|
-
return { status: "skipped", reason: "opt-out" };
|
|
355
|
-
}
|
|
356
|
-
const packageRoot = (_b = options.packageRoot) !== null && _b !== void 0 ? _b : packageRootDir();
|
|
357
|
-
const consumer = (_c = options.consumer) !== null && _c !== void 0 ? _c : isConsumerPackageInstall(packageRoot);
|
|
358
|
-
if (!consumer) {
|
|
359
|
-
return { status: "skipped", reason: "not-consumer" };
|
|
360
|
-
}
|
|
361
|
-
const plan = yield planSkillInstall({
|
|
362
|
-
packageRoot,
|
|
363
|
-
skillsHome: options.skillsHome,
|
|
364
|
-
});
|
|
365
|
-
if (plan.shipped.length === 0) {
|
|
366
|
-
return { status: "skipped", reason: "no-skills" };
|
|
367
|
-
}
|
|
368
|
-
const result = yield installCursorSkills(plan.shipped, plan.skillsHome);
|
|
369
|
-
const out = (_d = options.out) !== null && _d !== void 0 ? _d : (text => process.stderr.write(text));
|
|
370
|
-
out(formatSkillInstall(plan, result));
|
|
371
|
-
return {
|
|
372
|
-
status: "installed",
|
|
373
|
-
installed: result.installed,
|
|
374
|
-
removed: result.removed,
|
|
375
|
-
};
|
|
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" };
|
|
376
325
|
}
|
|
377
|
-
|
|
378
|
-
|
|
326
|
+
const packageRoot = options.packageRoot ?? packageRootDir();
|
|
327
|
+
const consumer = options.consumer ?? isConsumerPackageInstall(packageRoot);
|
|
328
|
+
if (!consumer) {
|
|
329
|
+
return { status: "skipped", reason: "not-consumer" };
|
|
379
330
|
}
|
|
380
|
-
|
|
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
|
+
}
|
|
381
350
|
}
|
|
382
351
|
/**
|
|
383
352
|
* On a TTY, offer to install/update every shipped package skill into
|
|
@@ -385,82 +354,77 @@ export function syncCursorSkillsOnPackageInstall() {
|
|
|
385
354
|
* or the package ships no skills. An unanswered prompt skips the install
|
|
386
355
|
* rather than blocking the caller — see `SKILL_PROMPT_TIMEOUT_MS`.
|
|
387
356
|
*/
|
|
388
|
-
export function offerInstallCursorSkills() {
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
}
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
out(c.dim(
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
}
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
}
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
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, {
|
|
418
386
|
defaultYes: true,
|
|
419
387
|
out,
|
|
420
388
|
timeoutMs: SKILL_PROMPT_TIMEOUT_MS,
|
|
421
389
|
}));
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
});
|
|
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 };
|
|
434
401
|
}
|
|
435
402
|
/**
|
|
436
403
|
* Ask a yes/no question. Resolves `undefined` when the answer never comes —
|
|
437
404
|
* the prompt timed out, or stdin closed on an empty line.
|
|
438
405
|
*/
|
|
439
|
-
export function promptYesNo(question, options) {
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
}
|
|
452
|
-
if (line.trim() === "") {
|
|
453
|
-
return options.defaultYes;
|
|
454
|
-
}
|
|
455
|
-
const answer = line.trim().toLowerCase();
|
|
456
|
-
if (answer === "y" || answer === "yes") {
|
|
457
|
-
return true;
|
|
458
|
-
}
|
|
459
|
-
if (answer === "n" || answer === "no") {
|
|
460
|
-
return false;
|
|
461
|
-
}
|
|
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() === "") {
|
|
462
418
|
return options.defaultYes;
|
|
463
|
-
}
|
|
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;
|
|
464
428
|
}
|
|
465
429
|
/** The line, or `undefined` when the stream ends or the clock runs out first. */
|
|
466
430
|
function readOneLine(stream, timeoutMs) {
|