@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
|
@@ -28,12 +28,12 @@ export function boundSecretFileIsReadable(path) {
|
|
|
28
28
|
try {
|
|
29
29
|
return readFileSync(path, "utf8").trim() !== "";
|
|
30
30
|
}
|
|
31
|
-
catch
|
|
31
|
+
catch {
|
|
32
32
|
return false;
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
35
|
function errorReason(error) {
|
|
36
|
-
const code = error
|
|
36
|
+
const code = error?.code;
|
|
37
37
|
return typeof code === "string" ? code : "unknown";
|
|
38
38
|
}
|
|
39
39
|
/**
|
|
@@ -50,7 +50,7 @@ export function destroyBoundSecretFile(path) {
|
|
|
50
50
|
try {
|
|
51
51
|
unlinkSync(path);
|
|
52
52
|
}
|
|
53
|
-
catch
|
|
53
|
+
catch {
|
|
54
54
|
// Already gone, or a directory the guest cannot write. Both are fine.
|
|
55
55
|
}
|
|
56
56
|
return { state: "absent" };
|
|
@@ -21,15 +21,6 @@
|
|
|
21
21
|
* cross-tool credential sharing here: short-lived access tokens are minted
|
|
22
22
|
* on demand from the API key (see `backend-client.ts`).
|
|
23
23
|
*/
|
|
24
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
25
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
26
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
27
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
28
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
29
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
30
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
31
|
-
});
|
|
32
|
-
};
|
|
33
24
|
import { createHash, randomBytes, randomUUID } from "node:crypto";
|
|
34
25
|
import { readFileSync } from "node:fs";
|
|
35
26
|
import { chmod, mkdir, readFile, rm, writeFile } from "node:fs/promises";
|
|
@@ -49,8 +40,9 @@ const DEFAULT_CURSOR_WEBSITE_URL = "https://cursor.com";
|
|
|
49
40
|
* which reads the generic `CURSOR_BACKEND_URL` for its own hosts.
|
|
50
41
|
*/
|
|
51
42
|
export function cursorBackendUrl() {
|
|
52
|
-
|
|
53
|
-
|
|
43
|
+
return trimTrailingSlash(process.env.AGENT_SERVE_CURSOR_BACKEND_URL ??
|
|
44
|
+
process.env.CURSOR_API_BASE_URL ??
|
|
45
|
+
DEFAULT_CURSOR_BACKEND_URL);
|
|
54
46
|
}
|
|
55
47
|
/**
|
|
56
48
|
* External API base URL for routes served only by the external-api
|
|
@@ -61,13 +53,11 @@ export function cursorBackendUrl() {
|
|
|
61
53
|
* one server mounts all routes.
|
|
62
54
|
*/
|
|
63
55
|
export function cursorExternalApiUrl() {
|
|
64
|
-
|
|
65
|
-
return trimTrailingSlash((_a = process.env.CURSOR_API_BASE_URL) !== null && _a !== void 0 ? _a : DEFAULT_CURSOR_EXTERNAL_API_URL);
|
|
56
|
+
return trimTrailingSlash(process.env.CURSOR_API_BASE_URL ?? DEFAULT_CURSOR_EXTERNAL_API_URL);
|
|
66
57
|
}
|
|
67
58
|
/** Website base URL for the login deep link (`CURSOR_WEBSITE_URL` override). */
|
|
68
59
|
export function cursorWebsiteUrl() {
|
|
69
|
-
|
|
70
|
-
return trimTrailingSlash((_a = process.env.CURSOR_WEBSITE_URL) !== null && _a !== void 0 ? _a : DEFAULT_CURSOR_WEBSITE_URL);
|
|
60
|
+
return trimTrailingSlash(process.env.CURSOR_WEBSITE_URL ?? DEFAULT_CURSOR_WEBSITE_URL);
|
|
71
61
|
}
|
|
72
62
|
export function cloudAgentUrl(agentId) {
|
|
73
63
|
return `${cursorWebsiteUrl()}/agents/${agentId}`;
|
|
@@ -89,8 +79,8 @@ const storedCredentialsSchema = z.object({
|
|
|
89
79
|
* `AGENT_SERVE_CONFIG_DIR` pins the directory outright (tests, containers).
|
|
90
80
|
*/
|
|
91
81
|
export function configDirPath() {
|
|
92
|
-
|
|
93
|
-
|
|
82
|
+
return (process.env.AGENT_SERVE_CONFIG_DIR ??
|
|
83
|
+
join(process.env.XDG_CONFIG_HOME ?? join(homedir(), ".config"), "agent-serve"));
|
|
94
84
|
}
|
|
95
85
|
/** `<configDir>/credentials.json` (0600). */
|
|
96
86
|
export function credentialsFilePath() {
|
|
@@ -101,7 +91,7 @@ function parseStoredCredentialsJson(raw) {
|
|
|
101
91
|
try {
|
|
102
92
|
parsed = JSON.parse(raw);
|
|
103
93
|
}
|
|
104
|
-
catch
|
|
94
|
+
catch {
|
|
105
95
|
return undefined;
|
|
106
96
|
}
|
|
107
97
|
const credentials = storedCredentialsSchema.safeParse(parsed);
|
|
@@ -118,44 +108,38 @@ export function readStoredCredentialsSync() {
|
|
|
118
108
|
try {
|
|
119
109
|
raw = readFileSync(credentialsFilePath(), "utf8");
|
|
120
110
|
}
|
|
121
|
-
catch
|
|
111
|
+
catch {
|
|
122
112
|
return undefined;
|
|
123
113
|
}
|
|
124
114
|
return parseStoredCredentialsJson(raw);
|
|
125
115
|
}
|
|
126
|
-
export function readStoredCredentials() {
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
return parseStoredCredentialsJson(raw);
|
|
136
|
-
});
|
|
116
|
+
export async function readStoredCredentials() {
|
|
117
|
+
let raw;
|
|
118
|
+
try {
|
|
119
|
+
raw = await readFile(credentialsFilePath(), "utf8");
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
return undefined;
|
|
123
|
+
}
|
|
124
|
+
return parseStoredCredentialsJson(raw);
|
|
137
125
|
}
|
|
138
|
-
export function writeStoredCredentials(credentials) {
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
mode: 0o600,
|
|
144
|
-
});
|
|
145
|
-
// writeFile mode only applies on create; clamp pre-existing files too.
|
|
146
|
-
yield chmod(path, 0o600);
|
|
126
|
+
export async function writeStoredCredentials(credentials) {
|
|
127
|
+
const path = credentialsFilePath();
|
|
128
|
+
await mkdir(dirname(path), { recursive: true, mode: 0o700 });
|
|
129
|
+
await writeFile(path, `${JSON.stringify(credentials, null, 2)}\n`, {
|
|
130
|
+
mode: 0o600,
|
|
147
131
|
});
|
|
132
|
+
// writeFile mode only applies on create; clamp pre-existing files too.
|
|
133
|
+
await chmod(path, 0o600);
|
|
148
134
|
}
|
|
149
|
-
export function clearStoredCredentials() {
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
}
|
|
158
|
-
});
|
|
135
|
+
export async function clearStoredCredentials() {
|
|
136
|
+
try {
|
|
137
|
+
await rm(credentialsFilePath());
|
|
138
|
+
return true;
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
return false;
|
|
142
|
+
}
|
|
159
143
|
}
|
|
160
144
|
/**
|
|
161
145
|
* Hosted task-bind path. Not a secret: the snapshot may name this path.
|
|
@@ -173,7 +157,7 @@ export const DEFAULT_CURSOR_API_KEY_FILE = "/run/cursor/secrets/CURSOR_API_KEY";
|
|
|
173
157
|
* env or login.
|
|
174
158
|
*/
|
|
175
159
|
export function resolveCursorApiKeyFilePath(filePath, env = process.env) {
|
|
176
|
-
const configured = filePath
|
|
160
|
+
const configured = filePath ?? env.CURSOR_API_KEY_FILE;
|
|
177
161
|
return configured !== undefined && configured.trim() !== ""
|
|
178
162
|
? configured.trim()
|
|
179
163
|
: DEFAULT_CURSOR_API_KEY_FILE;
|
|
@@ -184,7 +168,7 @@ export function readApiKeyFromFile(filePath) {
|
|
|
184
168
|
const raw = readFileSync(path, "utf8").trim();
|
|
185
169
|
return raw === "" ? undefined : raw;
|
|
186
170
|
}
|
|
187
|
-
catch
|
|
171
|
+
catch {
|
|
188
172
|
return undefined;
|
|
189
173
|
}
|
|
190
174
|
}
|
|
@@ -207,15 +191,14 @@ export function readApiKeyFromFile(filePath) {
|
|
|
207
191
|
* must fail the request rather than run authored code.
|
|
208
192
|
*/
|
|
209
193
|
export function consumeBoundCursorApiKey(options) {
|
|
210
|
-
|
|
211
|
-
const
|
|
212
|
-
const path = resolveCursorApiKeyFilePath(options === null || options === void 0 ? void 0 : options.filePath, env);
|
|
194
|
+
const env = options?.env ?? process.env;
|
|
195
|
+
const path = resolveCursorApiKeyFilePath(options?.filePath, env);
|
|
213
196
|
const envKeyAlreadySet = env.CURSOR_API_KEY !== undefined && env.CURSOR_API_KEY.trim() !== "";
|
|
214
197
|
let raw = "";
|
|
215
198
|
try {
|
|
216
199
|
raw = readFileSync(path, "utf8").trim();
|
|
217
200
|
}
|
|
218
|
-
catch
|
|
201
|
+
catch {
|
|
219
202
|
return { applied: false, disposal: { state: "absent" } };
|
|
220
203
|
}
|
|
221
204
|
if (raw === "") {
|
|
@@ -249,9 +232,8 @@ function presentEnvKey(name) {
|
|
|
249
232
|
* key wins over a leftover personal login.
|
|
250
233
|
*/
|
|
251
234
|
export function resolveApiKeySync(options) {
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
if ((options === null || options === void 0 ? void 0 : options.apiKey) !== undefined && options.apiKey.trim() !== "") {
|
|
235
|
+
const backendUrl = options?.backendUrl ?? cursorBackendUrl();
|
|
236
|
+
if (options?.apiKey !== undefined && options.apiKey.trim() !== "") {
|
|
255
237
|
return { apiKey: options.apiKey.trim(), source: "option", backendUrl };
|
|
256
238
|
}
|
|
257
239
|
const envKey = presentEnvKey("CURSOR_API_KEY");
|
|
@@ -279,10 +261,8 @@ export function resolveApiKeySync(options) {
|
|
|
279
261
|
/**
|
|
280
262
|
* {@link resolveApiKeySync} as a Promise for call sites that already await.
|
|
281
263
|
*/
|
|
282
|
-
export function resolveApiKey(options) {
|
|
283
|
-
return
|
|
284
|
-
return resolveApiKeySync(options);
|
|
285
|
-
});
|
|
264
|
+
export async function resolveApiKey(options) {
|
|
265
|
+
return resolveApiKeySync(options);
|
|
286
266
|
}
|
|
287
267
|
/** One-line hint for "no credentials" errors, shared across surfaces. */
|
|
288
268
|
export const SIGN_IN_HINT = `Run \`${CLI_COMMAND_NAME} login\` (or set CURSOR_API_KEY / CURSOR_API_KEY_FILE / CURSOR_SERVICE_ACCOUNT_KEY / pass serve({ apiKey })).`;
|
|
@@ -324,95 +304,100 @@ const POLL_PENDING_BODY = "Not found";
|
|
|
324
304
|
* string, which is the exposure POST was added to remove, so it warns; it
|
|
325
305
|
* disappears on its own once the backend serves POST.
|
|
326
306
|
*/
|
|
327
|
-
export function pollForLoginTokens(args) {
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
const
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
};
|
|
373
|
-
}
|
|
374
|
-
// Pending: the browser sign-in has not landed yet. On GET this is
|
|
375
|
-
// deliberately lenient — treating an unrecognized 404 body as fatal is
|
|
376
|
-
// what made an earlier poll die on its first attempt and call it a
|
|
377
|
-
// timeout.
|
|
378
|
-
consecutiveErrors = 0;
|
|
379
|
-
}
|
|
380
|
-
else if (!response.ok) {
|
|
381
|
-
consecutiveErrors++;
|
|
382
|
-
if (consecutiveErrors >= 3) {
|
|
383
|
-
return {
|
|
384
|
-
status: "failed",
|
|
385
|
-
message: `${backendUrl}/auth/poll kept failing (${response.status}: ${redact((yield response.text()).trim())})`,
|
|
386
|
-
};
|
|
387
|
-
}
|
|
307
|
+
export async function pollForLoginTokens(args) {
|
|
308
|
+
const backendUrl = trimTrailingSlash(args.backendUrl ?? cursorBackendUrl());
|
|
309
|
+
const fetchImpl = args.fetchImpl ?? fetch;
|
|
310
|
+
const redact = (text) => truncate(redactVerifier(text, args.verifier));
|
|
311
|
+
const postUrl = `${backendUrl}/auth/poll`;
|
|
312
|
+
// Only built if the backend leaves us no choice (see the doc comment).
|
|
313
|
+
const getUrl = () => {
|
|
314
|
+
const url = new URL("/auth/poll", `${backendUrl}/`);
|
|
315
|
+
url.searchParams.set("uuid", args.uuid);
|
|
316
|
+
url.searchParams.set("verifier", args.verifier);
|
|
317
|
+
return url.toString();
|
|
318
|
+
};
|
|
319
|
+
const maxAttempts = args.maxAttempts ?? 150;
|
|
320
|
+
let useGet = false;
|
|
321
|
+
let consecutiveErrors = 0;
|
|
322
|
+
for (let attempt = 0; attempt < maxAttempts; attempt++) {
|
|
323
|
+
if (isAborted(args.signal)) {
|
|
324
|
+
return { status: "cancelled" };
|
|
325
|
+
}
|
|
326
|
+
try {
|
|
327
|
+
const response = useGet
|
|
328
|
+
? await fetchImpl(getUrl(), {
|
|
329
|
+
method: "GET",
|
|
330
|
+
headers: { accept: "application/json" },
|
|
331
|
+
...(args.signal === undefined ? {} : { signal: args.signal }),
|
|
332
|
+
})
|
|
333
|
+
: await fetchImpl(postUrl, {
|
|
334
|
+
method: "POST",
|
|
335
|
+
headers: {
|
|
336
|
+
accept: "application/json",
|
|
337
|
+
"content-type": "application/json",
|
|
338
|
+
},
|
|
339
|
+
body: JSON.stringify({ uuid: args.uuid, verifier: args.verifier }),
|
|
340
|
+
...(args.signal === undefined ? {} : { signal: args.signal }),
|
|
341
|
+
});
|
|
342
|
+
if (response.status === 404) {
|
|
343
|
+
const body = (await response.text()).trim();
|
|
344
|
+
if (!useGet && body !== POLL_PENDING_BODY) {
|
|
345
|
+
// Any 404 on POST that is not the pending marker means this backend
|
|
346
|
+
// has no POST route. Retry the same attempt over GET rather than
|
|
347
|
+
// guessing at body shapes; GET's handling below is deliberately
|
|
348
|
+
// lenient, so an unrecognized body cannot strand the login.
|
|
349
|
+
useGet = true;
|
|
350
|
+
args.logger?.(`${backendUrl} has no POST /auth/poll; falling back to GET, which puts the single-use login verifier in the request URL (and the backend's access log). It will use POST once the backend deploys that route.`);
|
|
351
|
+
continue;
|
|
388
352
|
}
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
if (body.success && body.data.accessToken !== "") {
|
|
392
|
-
return { status: "signed_in", accessToken: body.data.accessToken };
|
|
393
|
-
}
|
|
353
|
+
if (useGet && isRouteNotFoundBody(body)) {
|
|
354
|
+
// Neither verb is served — polling harder cannot fix that.
|
|
394
355
|
return {
|
|
395
356
|
status: "failed",
|
|
396
|
-
message: `${backendUrl}/auth/poll
|
|
357
|
+
message: `${backendUrl} serves neither POST nor GET /auth/poll (404: ${redact(body)})`,
|
|
397
358
|
};
|
|
398
359
|
}
|
|
360
|
+
// Pending: the browser sign-in has not landed yet. On GET this is
|
|
361
|
+
// deliberately lenient — treating an unrecognized 404 body as fatal is
|
|
362
|
+
// what made an earlier poll die on its first attempt and call it a
|
|
363
|
+
// timeout.
|
|
364
|
+
consecutiveErrors = 0;
|
|
399
365
|
}
|
|
400
|
-
|
|
401
|
-
if (isAborted(args.signal)) {
|
|
402
|
-
return { status: "cancelled" };
|
|
403
|
-
}
|
|
366
|
+
else if (!response.ok) {
|
|
404
367
|
consecutiveErrors++;
|
|
405
368
|
if (consecutiveErrors >= 3) {
|
|
406
369
|
return {
|
|
407
370
|
status: "failed",
|
|
408
|
-
message:
|
|
371
|
+
message: `${backendUrl}/auth/poll kept failing (${response.status}: ${redact((await response.text()).trim())})`,
|
|
409
372
|
};
|
|
410
373
|
}
|
|
411
374
|
}
|
|
412
|
-
|
|
375
|
+
else {
|
|
376
|
+
const body = loginPollResponseSchema.safeParse(await response.json());
|
|
377
|
+
if (body.success && body.data.accessToken !== "") {
|
|
378
|
+
return { status: "signed_in", accessToken: body.data.accessToken };
|
|
379
|
+
}
|
|
380
|
+
return {
|
|
381
|
+
status: "failed",
|
|
382
|
+
message: `${backendUrl}/auth/poll returned 200 without an accessToken`,
|
|
383
|
+
};
|
|
384
|
+
}
|
|
413
385
|
}
|
|
414
|
-
|
|
415
|
-
|
|
386
|
+
catch (error) {
|
|
387
|
+
if (isAborted(args.signal)) {
|
|
388
|
+
return { status: "cancelled" };
|
|
389
|
+
}
|
|
390
|
+
consecutiveErrors++;
|
|
391
|
+
if (consecutiveErrors >= 3) {
|
|
392
|
+
return {
|
|
393
|
+
status: "failed",
|
|
394
|
+
message: `could not reach ${backendUrl}/auth/poll (${redact(error instanceof Error ? error.message : String(error))})`,
|
|
395
|
+
};
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
await sleep(Math.min(1000 * 1.2 ** attempt, 10_000), args.signal);
|
|
399
|
+
}
|
|
400
|
+
return { status: "timed_out" };
|
|
416
401
|
}
|
|
417
402
|
/**
|
|
418
403
|
* Fastify's route-not-found envelope: `{"message":"Route GET:/auth/poll not
|
|
@@ -429,7 +414,7 @@ function isRouteNotFoundBody(body) {
|
|
|
429
414
|
/^Route \w+:/.test(parsed.message) &&
|
|
430
415
|
parsed.message.includes("not found"));
|
|
431
416
|
}
|
|
432
|
-
catch
|
|
417
|
+
catch {
|
|
433
418
|
return false;
|
|
434
419
|
}
|
|
435
420
|
}
|
|
@@ -457,22 +442,22 @@ function truncate(value, max = 200) {
|
|
|
457
442
|
// `await` aren't collapsed by control-flow narrowing (the signal is mutated
|
|
458
443
|
// by another task, so `aborted` really can flip mid-loop).
|
|
459
444
|
function isAborted(signal) {
|
|
460
|
-
return
|
|
445
|
+
return signal?.aborted === true;
|
|
461
446
|
}
|
|
462
447
|
function sleep(ms, signal) {
|
|
463
448
|
return new Promise(resolve => {
|
|
464
|
-
if (
|
|
449
|
+
if (signal?.aborted === true) {
|
|
465
450
|
resolve();
|
|
466
451
|
return;
|
|
467
452
|
}
|
|
468
453
|
const timer = setTimeout(() => {
|
|
469
|
-
signal
|
|
454
|
+
signal?.removeEventListener("abort", onAbort);
|
|
470
455
|
resolve();
|
|
471
456
|
}, ms);
|
|
472
457
|
const onAbort = () => {
|
|
473
458
|
clearTimeout(timer);
|
|
474
459
|
resolve();
|
|
475
460
|
};
|
|
476
|
-
signal
|
|
461
|
+
signal?.addEventListener("abort", onAbort, { once: true });
|
|
477
462
|
});
|
|
478
463
|
}
|
|
@@ -15,8 +15,7 @@ function trimTrailingSlash(raw) {
|
|
|
15
15
|
return trimmed.endsWith("/") ? trimmed.slice(0, -1) : trimmed;
|
|
16
16
|
}
|
|
17
17
|
export function resolveCursorApiBaseUrl(options) {
|
|
18
|
-
|
|
19
|
-
return trimTrailingSlash((_b = (_a = options.baseUrl) !== null && _a !== void 0 ? _a : process.env.CURSOR_API_BASE_URL) !== null && _b !== void 0 ? _b : DEFAULT_CURSOR_EXTERNAL_API_URL);
|
|
18
|
+
return trimTrailingSlash(options.baseUrl ?? process.env.CURSOR_API_BASE_URL ?? DEFAULT_CURSOR_EXTERNAL_API_URL);
|
|
20
19
|
}
|
|
21
20
|
/**
|
|
22
21
|
* The pod credential is the whole authorization on every hosted wire: the
|
|
@@ -25,18 +24,15 @@ export function resolveCursorApiBaseUrl(options) {
|
|
|
25
24
|
* calling the control plane as nobody is worse than not calling.
|
|
26
25
|
*/
|
|
27
26
|
export function resolveCursorApiKey(options) {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
const configured = (_c = (_a = options.resolveApiKey) === null || _a === void 0 ? void 0 : _a.call(options)) !== null && _c !== void 0 ? _c : options.apiKey;
|
|
31
|
-
const key = (_b = (configured !== null && configured !== void 0 ? configured : process.env.CURSOR_API_KEY)) === null || _b === void 0 ? void 0 : _b.trim();
|
|
27
|
+
const configured = options.resolveApiKey?.() ?? options.apiKey;
|
|
28
|
+
const key = (configured ?? process.env.CURSOR_API_KEY)?.trim();
|
|
32
29
|
if (key === undefined || key === "") {
|
|
33
30
|
throw new Error("Cursor hosted transport requires CURSOR_API_KEY (deployment pod credential on Cursor hosting)");
|
|
34
31
|
}
|
|
35
32
|
return key;
|
|
36
33
|
}
|
|
37
34
|
export function resolveCursorApiFetch(options) {
|
|
38
|
-
|
|
39
|
-
const impl = (_a = options.fetch) !== null && _a !== void 0 ? _a : globalThis.fetch;
|
|
35
|
+
const impl = options.fetch ?? globalThis.fetch;
|
|
40
36
|
if (typeof impl !== "function") {
|
|
41
37
|
throw new Error("Cursor hosted transport requires fetch");
|
|
42
38
|
}
|