@cursor/bdk 0.2.9 → 0.2.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/artifacts.js +3 -5
- package/dist/bin/agent-serve.js +803 -812
- package/dist/channels/bitbucket/api.js +305 -321
- package/dist/channels/bitbucket/binding.js +97 -61
- package/dist/channels/bitbucket/bitbucket-channel.d.ts +15 -1
- package/dist/channels/bitbucket/bitbucket-channel.d.ts.map +1 -1
- package/dist/channels/bitbucket/bitbucket-channel.js +95 -42
- package/dist/channels/bitbucket/bitbucket-webhook.d.ts +11 -0
- package/dist/channels/bitbucket/bitbucket-webhook.d.ts.map +1 -1
- package/dist/channels/bitbucket/bitbucket-webhook.js +214 -204
- package/dist/channels/bitbucket/checks.js +9 -21
- package/dist/channels/bitbucket/cursor-account.js +1 -1
- package/dist/channels/bitbucket/defaults.js +14 -4
- package/dist/channels/bitbucket/events.js +1 -2
- package/dist/channels/bitbucket/index.d.ts +6 -2
- package/dist/channels/bitbucket/index.d.ts.map +1 -1
- package/dist/channels/bitbucket/index.js +6 -2
- package/dist/channels/bitbucket/replay.js +80 -56
- package/dist/channels/bitbucket/state.js +16 -7
- package/dist/channels/bitbucket/types.d.ts +11 -2
- package/dist/channels/bitbucket/types.d.ts.map +1 -1
- package/dist/channels/checks.js +18 -28
- package/dist/channels/deployments/deployments-channel.js +26 -34
- package/dist/channels/github/api.js +216 -210
- package/dist/channels/github/auth.d.ts +5 -1
- package/dist/channels/github/auth.d.ts.map +1 -1
- package/dist/channels/github/auth.js +157 -174
- package/dist/channels/github/binding.js +48 -39
- package/dist/channels/github/checks.js +9 -14
- package/dist/channels/github/cursor-account.js +6 -11
- package/dist/channels/github/defaults.js +105 -130
- package/dist/channels/github/forward.js +13 -17
- package/dist/channels/github/github-channel.d.ts +43 -2
- package/dist/channels/github/github-channel.d.ts.map +1 -1
- package/dist/channels/github/github-channel.js +1228 -958
- package/dist/channels/github/progress.js +145 -146
- package/dist/channels/github/replay.js +30 -39
- package/dist/channels/github/state.js +40 -16
- package/dist/channels/github/types.d.ts +30 -6
- package/dist/channels/github/types.d.ts.map +1 -1
- package/dist/channels/gitlab/api.js +100 -114
- package/dist/channels/gitlab/binding.js +52 -33
- package/dist/channels/gitlab/checks.js +28 -29
- package/dist/channels/gitlab/cursor-account.js +1 -1
- package/dist/channels/gitlab/defaults.js +9 -3
- package/dist/channels/gitlab/gitlab-channel.d.ts +16 -1
- package/dist/channels/gitlab/gitlab-channel.d.ts.map +1 -1
- package/dist/channels/gitlab/gitlab-channel.js +95 -42
- package/dist/channels/gitlab/gitlab-webhook.d.ts +10 -1
- package/dist/channels/gitlab/gitlab-webhook.d.ts.map +1 -1
- package/dist/channels/gitlab/gitlab-webhook.js +282 -249
- package/dist/channels/gitlab/index.d.ts +6 -2
- package/dist/channels/gitlab/index.d.ts.map +1 -1
- package/dist/channels/gitlab/index.js +6 -2
- package/dist/channels/gitlab/replay.js +50 -27
- package/dist/channels/gitlab/state.js +14 -6
- package/dist/channels/gitlab/types.d.ts +13 -2
- package/dist/channels/gitlab/types.d.ts.map +1 -1
- package/dist/channels/origin/api.js +100 -116
- package/dist/channels/origin/binding.js +15 -16
- package/dist/channels/origin/checks.js +30 -28
- package/dist/channels/origin/defaults.js +50 -65
- package/dist/channels/origin/origin-channel.js +266 -272
- package/dist/channels/origin/origin-webhook.js +70 -88
- package/dist/channels/origin/reactions.js +9 -21
- package/dist/channels/origin/state.js +13 -5
- package/dist/channels/slack/agentic-delivery.js +426 -478
- package/dist/channels/slack/agentic-posted.js +9 -10
- package/dist/channels/slack/agentic-signals.js +2 -3
- package/dist/channels/slack/api.js +417 -427
- package/dist/channels/slack/approvals.js +1 -1
- package/dist/channels/slack/assistant.js +37 -47
- package/dist/channels/slack/attachments.js +188 -206
- package/dist/channels/slack/auth.js +8 -6
- package/dist/channels/slack/bot-mentions.js +31 -45
- package/dist/channels/slack/channel-watch.js +42 -48
- package/dist/channels/slack/cli-project.js +112 -137
- package/dist/channels/slack/code-fences.js +3 -5
- package/dist/channels/slack/constants.js +2 -2
- package/dist/channels/slack/credentials.js +23 -38
- package/dist/channels/slack/defaults.js +292 -331
- package/dist/channels/slack/dispatch.d.ts.map +1 -1
- package/dist/channels/slack/dispatch.js +533 -460
- package/dist/channels/slack/doctor.js +200 -214
- package/dist/channels/slack/eval-directive.js +79 -96
- package/dist/channels/slack/event-id-dedupe.js +1 -1
- package/dist/channels/slack/external-policy.js +26 -39
- package/dist/channels/slack/footer.js +28 -41
- package/dist/channels/slack/inbound.d.ts +1 -0
- package/dist/channels/slack/inbound.d.ts.map +1 -1
- package/dist/channels/slack/inbound.js +50 -31
- package/dist/channels/slack/init.d.ts +1 -5
- package/dist/channels/slack/init.d.ts.map +1 -1
- package/dist/channels/slack/init.js +42 -59
- package/dist/channels/slack/interactive.d.ts +9 -3
- package/dist/channels/slack/interactive.d.ts.map +1 -1
- package/dist/channels/slack/interactive.js +160 -162
- package/dist/channels/slack/links.js +1 -2
- package/dist/channels/slack/live-delivery.js +172 -190
- package/dist/channels/slack/manifest.d.ts.map +1 -1
- package/dist/channels/slack/manifest.js +44 -23
- package/dist/channels/slack/message-body.js +2 -2
- package/dist/channels/slack/nudge-carrier.js +30 -42
- package/dist/channels/slack/nudge-store.js +164 -191
- package/dist/channels/slack/paint-start.js +66 -81
- package/dist/channels/slack/placeholder.js +123 -152
- package/dist/channels/slack/pr-ref.js +1 -1
- package/dist/channels/slack/progress-delivery.js +65 -78
- package/dist/channels/slack/reasoning-card.js +36 -49
- package/dist/channels/slack/recording-sink.js +12 -24
- package/dist/channels/slack/reply-options.js +7 -12
- package/dist/channels/slack/self-identity.js +27 -35
- package/dist/channels/slack/sender-name.d.ts +12 -3
- package/dist/channels/slack/sender-name.d.ts.map +1 -1
- package/dist/channels/slack/sender-name.js +57 -61
- package/dist/channels/slack/setup.js +2 -4
- package/dist/channels/slack/slack-channel.d.ts +6 -4
- package/dist/channels/slack/slack-channel.d.ts.map +1 -1
- package/dist/channels/slack/slack-channel.js +441 -308
- package/dist/channels/slack/socket-mode.js +38 -52
- package/dist/channels/slack/thread-context.js +143 -160
- package/dist/channels/slack/tool-approval-events.js +149 -166
- package/dist/channels/slack/tool-cards.js +6 -11
- package/dist/channels/slack/tool-chip.js +1 -2
- package/dist/channels/slack/types.d.ts +15 -17
- package/dist/channels/slack/types.d.ts.map +1 -1
- package/dist/channels/slack/upload.js +84 -97
- package/dist/channels/slack/user-info.js +27 -41
- package/dist/channels.js +9 -20
- package/dist/dashboard-session-url.js +3 -4
- package/dist/docs/404.html +2 -2
- package/dist/docs/assets/{app.BNhEdGa8.js → app.DXI7bwox.js} +4 -4
- package/dist/docs/assets/{building-with-agents.md.BPjPFxFg.js → building-with-agents.md.Df87rAe1.js} +1 -1
- package/dist/docs/assets/chunks/@localSearchIndexroot.CtLtpWcx.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.DIdUV1Ph.js → VPLocalSearchBox.BrbO5mEe.js} +1 -1
- package/dist/docs/assets/chunks/{arc.lELI4_SR.js → arc.BOG1yms8.js} +1 -1
- package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.iCMdvuoM.js → architectureDiagram-Q4EWVU46.C0hsMZnZ.js} +1 -1
- package/dist/docs/assets/chunks/{baseUniq.C1-nDJBf.js → baseUniq.H044KjKs.js} +1 -1
- package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.ClemzBox.js → blockDiagram-DXYQGD6D.BsRW6GoB.js} +1 -1
- package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.BqTak6cR.js → c4Diagram-AHTNJAMY.B9HV5PFR.js} +1 -1
- package/dist/docs/assets/chunks/channel.CBwrU9rP.js +1 -0
- package/dist/docs/assets/chunks/{chunk-4BX2VUAB.CUS3qs_R.js → chunk-4BX2VUAB.CPoT_ajl.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-4TB4RGXK.dz5fdHcl.js → chunk-4TB4RGXK.DZBwWuCL.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-55IACEB6.D6BEBmve.js → chunk-55IACEB6.CZ3yTiyq.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-EDXVE4YY.B5uK4ID9.js → chunk-EDXVE4YY.6DfvHSd8.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-FMBD7UC4.PgOJgNQs.js → chunk-FMBD7UC4.CpBj8HfK.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-OYMX7WX6.CvkTrCii.js → chunk-OYMX7WX6.BdKo8YqS.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-QZHKN3VN.BnSfKYsB.js → chunk-QZHKN3VN.BnXNyxJx.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-YZCP3GAM.MZH6v5UC.js → chunk-YZCP3GAM.Cg1OcF8G.js} +1 -1
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.CbC_mrvB.js +1 -0
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.CbC_mrvB.js +1 -0
- package/dist/docs/assets/chunks/clone.BTvFyY1a.js +1 -0
- package/dist/docs/assets/chunks/{cose-bilkent-S5V4N54A.BBbw_YZi.js → cose-bilkent-S5V4N54A.1SP8al9c.js} +1 -1
- package/dist/docs/assets/chunks/{dagre-KV5264BT.CNJB2l7E.js → dagre-KV5264BT.DS1L6hJt.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-5BDNPKRD.BQzlnFfq.js → diagram-5BDNPKRD.ChsausbG.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.DkgqqZMz.js → diagram-G4DWMVQ6.3XsptNWj.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-MMDJMWI5.DIT8L7H_.js → diagram-MMDJMWI5.DPA9Dk_P.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-TYMM5635.3xLPZWGJ.js → diagram-TYMM5635.BVswXWrB.js} +1 -1
- package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.5_IHz8jF.js → erDiagram-SMLLAGMA.BSak5OSP.js} +1 -1
- package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.BGUCXz8A.js → flowDiagram-DWJPFMVM.CQgN4TTz.js} +1 -1
- package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.DbfFavS1.js → ganttDiagram-T4ZO3ILL.GrT0kA4a.js} +1 -1
- package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.D2yKdeNW.js → gitGraphDiagram-UUTBAWPF.CdS7Ucll.js} +1 -1
- package/dist/docs/assets/chunks/{graph.CSCxwHba.js → graph.BVqKRmRo.js} +1 -1
- package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.FDeb6xHY.js → infoDiagram-42DDH7IO.C3C9FRto.js} +1 -1
- package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.DbeYs9VL.js → ishikawaDiagram-UXIWVN3A.2FuAh_Zj.js} +1 -1
- package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.CWjKINpx.js → journeyDiagram-VCZTEJTY.CaHMfK4b.js} +1 -1
- package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.B4FrAlwz.js → kanban-definition-6JOO6SKY.CjhIUwcA.js} +1 -1
- package/dist/docs/assets/chunks/{layout.DFGxQ9ab.js → layout.CGU3gfSf.js} +1 -1
- package/dist/docs/assets/chunks/{linear.BmjZ-G59.js → linear.DaihpW_n.js} +1 -1
- package/dist/docs/assets/chunks/{min.DZSxulMW.js → min.BS-j8kHQ.js} +1 -1
- package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.CHLi3-aN.js → mindmap-definition-QFDTVHPH.BVJ1Bbnk.js} +1 -1
- package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.DteG-CkU.js → pieDiagram-DEJITSTG.Cz1WIv9r.js} +1 -1
- package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.D458ipN3.js → quadrantDiagram-34T5L4WZ.DKLFxcjy.js} +1 -1
- package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.DcFgUxst.js → requirementDiagram-MS252O5E.BHegiK7x.js} +1 -1
- package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.BwQAMmSA.js → sankeyDiagram-XADWPNL6.DYkY6yPc.js} +1 -1
- package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.B_Xdsrh9.js → sequenceDiagram-FGHM5R23.DYQ1QUrI.js} +1 -1
- package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.CdfDW6-C.js → stateDiagram-FHFEXIEX.Iru8BsFo.js} +1 -1
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.BYXl4LW6.js +1 -0
- package/dist/docs/assets/chunks/{theme.sfdL3srp.js → theme.DaplWQhQ.js} +2 -2
- package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.56-4hXaC.js → timeline-definition-GMOUNBTQ.BwFA8hiX.js} +1 -1
- package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.CvZSQBO7.js → vennDiagram-DHZGUBPP.CZ60W1C_.js} +1 -1
- package/dist/docs/assets/chunks/{wardley-RL74JXVD.C9qc8k39.js → wardley-RL74JXVD.iXazD3Z7.js} +1 -1
- package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.D9s0nihi.js → wardleyDiagram-NUSXRM2D.B69D2r8-.js} +1 -1
- package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.BVJSpYrC.js → xychartDiagram-5P7HB3ND.CLPZEIU9.js} +1 -1
- package/dist/docs/assets/{deployment.md.BdqTiGdc.js → deployment.md.BYuEcDBv.js} +2 -2
- package/dist/docs/assets/{guides_bitbucket.md.BB6fqD-M.js → guides_bitbucket.md.CKUayYtD.js} +3 -3
- package/dist/docs/assets/{guides_bitbucket.md.BB6fqD-M.lean.js → guides_bitbucket.md.CKUayYtD.lean.js} +1 -1
- package/dist/docs/assets/{guides_github.md.Cr1Xlf-m.js → guides_github.md.TuNiZAOQ.js} +4 -4
- package/dist/docs/assets/{guides_github.md.Cr1Xlf-m.lean.js → guides_github.md.TuNiZAOQ.lean.js} +1 -1
- package/dist/docs/assets/{guides_gitlab.md.CMpmFi4M.js → guides_gitlab.md.CtNI4fSH.js} +4 -4
- package/dist/docs/assets/{guides_gitlab.md.CMpmFi4M.lean.js → guides_gitlab.md.CtNI4fSH.lean.js} +1 -1
- package/dist/docs/assets/guides_migrate.md.sCAvvlC6.js +7 -0
- package/dist/docs/assets/guides_migrate.md.sCAvvlC6.lean.js +1 -0
- package/dist/docs/assets/{reference_cli.md.GwugN3n-.js → reference_cli.md.dYCAL2lB.js} +4 -3
- package/dist/docs/assets/reference_cli.md.dYCAL2lB.lean.js +1 -0
- package/dist/docs/assets/troubleshooting.md.x-GBa7wN.js +1 -0
- package/dist/docs/assets/{troubleshooting.md.Bscj6ODe.lean.js → troubleshooting.md.x-GBa7wN.lean.js} +1 -1
- package/dist/docs/building-with-agents.html +37 -37
- package/dist/docs/building-with-agents.md +2 -0
- package/dist/docs/deployment.html +38 -38
- package/dist/docs/deployment.md +7 -0
- package/dist/docs/evals.html +36 -36
- package/dist/docs/guides/agent-to-agent.html +35 -35
- package/dist/docs/guides/bitbucket.html +38 -38
- package/dist/docs/guides/bitbucket.md +9 -1
- package/dist/docs/guides/cloud-agents.html +35 -35
- package/dist/docs/guides/convert-automation.html +35 -35
- package/dist/docs/guides/github.html +39 -39
- package/dist/docs/guides/github.md +20 -4
- package/dist/docs/guides/gitlab.html +38 -38
- package/dist/docs/guides/gitlab.md +9 -1
- package/dist/docs/guides/grokbot-agents.html +35 -35
- package/dist/docs/guides/hooks.html +35 -35
- package/dist/docs/guides/improve.html +35 -35
- package/dist/docs/guides/jev.html +35 -35
- package/dist/docs/guides/mcp-oauth.html +35 -35
- package/dist/docs/guides/migrate.html +66 -0
- package/dist/docs/guides/migrate.md +122 -0
- package/dist/docs/guides/opentelemetry.html +35 -35
- package/dist/docs/guides/slack.html +35 -35
- package/dist/docs/guides/webhooks.html +35 -35
- package/dist/docs/hashmap.json +1 -1
- package/dist/docs/hillclimbing.html +35 -35
- package/dist/docs/index.html +35 -35
- package/dist/docs/llms-full.txt +214 -6
- package/dist/docs/llms.txt +1 -0
- package/dist/docs/quickstart.html +35 -35
- package/dist/docs/reference/agent-config.html +35 -35
- package/dist/docs/reference/artifacts.html +35 -35
- package/dist/docs/reference/channels.html +35 -35
- package/dist/docs/reference/cli.html +39 -38
- package/dist/docs/reference/cli.md +39 -0
- package/dist/docs/reference/connections.html +35 -35
- package/dist/docs/reference/evals.html +35 -35
- package/dist/docs/reference/extensions.html +35 -35
- package/dist/docs/reference/hooks.html +35 -35
- package/dist/docs/reference/http-api.html +35 -35
- package/dist/docs/reference/instructions.html +35 -35
- package/dist/docs/reference/playground.html +35 -35
- package/dist/docs/reference/project-layout.html +35 -35
- package/dist/docs/reference/prompt.html +35 -35
- package/dist/docs/reference/schedules.html +35 -35
- package/dist/docs/reference/sessions.html +35 -35
- package/dist/docs/reference/skills.html +35 -35
- package/dist/docs/reference/subagents.html +35 -35
- package/dist/docs/reference/tools.html +35 -35
- package/dist/docs/templates/agentic-owners.html +35 -35
- package/dist/docs/templates/grokbot-agents.html +35 -35
- package/dist/docs/templates/security-reviewer.html +35 -35
- package/dist/docs/templates/thermo-quality-review.html +35 -35
- package/dist/docs/templates/thermo-review.html +35 -35
- package/dist/docs/templates/triage.html +35 -35
- package/dist/docs/troubleshooting.html +36 -36
- package/dist/docs/troubleshooting.md +1 -0
- package/dist/evals/assertions.js +20 -34
- package/dist/evals/expect.js +3 -6
- package/dist/evals/judge.js +5 -8
- package/dist/evals/loaders.js +45 -62
- package/dist/evals/matchers.js +2 -3
- package/dist/evals/reporters.js +43 -67
- package/dist/evals/results.js +1 -1
- package/dist/evals/run-facts.js +5 -6
- package/dist/evals.js +27 -15
- package/dist/extensions/cursor-cloud-agents/extension.js +4 -1
- package/dist/extensions/cursor-cloud-agents/lib/backend.js +100 -126
- package/dist/extensions/cursor-cloud-agents/lib/fleet.js +22 -38
- package/dist/extensions/cursor-cloud-agents/lib/repos.js +8 -10
- package/dist/extensions/cursor-cloud-agents/lib/transcript.js +2 -3
- package/dist/extensions/cursor-cloud-agents/lib/watch.js +52 -66
- package/dist/extensions/cursor-cloud-agents/reminders/cloud-agent-stop-watch.js +29 -40
- package/dist/extensions/cursor-cloud-agents/tools/cancel.js +6 -17
- package/dist/extensions/cursor-cloud-agents/tools/dump.js +25 -36
- package/dist/extensions/cursor-cloud-agents/tools/get.js +3 -14
- package/dist/extensions/cursor-cloud-agents/tools/launch.js +13 -21
- package/dist/extensions/cursor-cloud-agents/tools/list.js +8 -19
- package/dist/extensions/cursor-cloud-agents/tools/reply.js +5 -16
- package/dist/extensions/cursor-grokbot-agents/extension.js +4 -1
- package/dist/extensions/cursor-grokbot-agents/lib/agents.js +3 -3
- package/dist/extensions/cursor-grokbot-agents/lib/backend.js +53 -73
- package/dist/extensions/cursor-grokbot-agents/lib/contacts.js +10 -23
- package/dist/extensions/cursor-grokbot-agents/lib/conversation.js +112 -132
- package/dist/extensions/cursor-grokbot-agents/lib/lock.js +1 -2
- package/dist/extensions/cursor-grokbot-agents/tools/ask.js +5 -16
- package/dist/extensions/cursor-grokbot-agents/tools/check.js +4 -15
- package/dist/extensions/cursor-grokbot-agents/tools/interrupt.js +2 -13
- package/dist/extensions/cursor-grokbot-agents/tools/list.js +11 -23
- package/dist/extensions/jev/extension.js +3 -3
- package/dist/extensions/jev/lib/evaluate.js +43 -60
- package/dist/extensions/jev/tools/evaluate.js +6 -17
- package/dist/extensions/slack-communication/tools/post-file.js +1 -1
- package/dist/extensions.js +3 -5
- package/dist/files-backends/cursor-hosted.js +504 -523
- package/dist/files-backends/local-fs.js +72 -134
- package/dist/files.js +3 -3
- package/dist/filesystem.js +562 -861
- package/dist/index.js +16 -35
- package/dist/internal/advertise-tools.js +74 -86
- package/dist/internal/artifacts-store.js +298 -361
- package/dist/internal/as-of.js +2 -4
- package/dist/internal/authored-alias-hooks.js +6 -4
- package/dist/internal/authored-loaders.js +37 -52
- package/dist/internal/bounded-int.js +1 -2
- package/dist/internal/bounded.js +13 -24
- package/dist/internal/brand.js +1 -1
- package/dist/internal/browser-origin-guard.js +4 -4
- package/dist/internal/builtin-tools/artifacts.js +15 -27
- package/dist/internal/builtin-tools/index.js +2 -3
- package/dist/internal/builtin-tools/reminders.js +33 -52
- package/dist/internal/channel-architecture.d.ts +21 -0
- package/dist/internal/channel-architecture.d.ts.map +1 -0
- package/dist/internal/channel-architecture.js +41 -0
- package/dist/internal/channel-dispatch.js +3 -4
- package/dist/internal/channel-route-dispatch.js +40 -51
- package/dist/internal/channel-state.js +1 -1
- package/dist/internal/chat-client.js +319 -340
- package/dist/internal/cli-ax.js +1262 -1294
- package/dist/internal/cli-bitbucket.js +244 -272
- package/dist/internal/cli-convert-automation.js +137 -151
- package/dist/internal/cli-cursor.js +126 -147
- package/dist/internal/cli-deploy.d.ts.map +1 -1
- package/dist/internal/cli-deploy.js +1457 -1507
- package/dist/internal/cli-docs.js +130 -147
- package/dist/internal/cli-github.js +437 -476
- package/dist/internal/cli-gitlab.js +259 -288
- package/dist/internal/cli-images.js +266 -334
- package/dist/internal/cli-manifest.js +25 -37
- package/dist/internal/cli-mcp-oauth.js +228 -247
- package/dist/internal/cli-mcp.js +358 -383
- package/dist/internal/cli-migrate.js +73 -90
- package/dist/internal/cli-skills.js +35 -47
- package/dist/internal/cli-slack-manual.d.ts +0 -1
- package/dist/internal/cli-slack-manual.d.ts.map +1 -1
- package/dist/internal/cli-slack-manual.js +175 -204
- package/dist/internal/cli-slack.d.ts +1 -1
- package/dist/internal/cli-slack.d.ts.map +1 -1
- package/dist/internal/cli-slack.js +416 -456
- package/dist/internal/cloud-merge.js +7 -3
- package/dist/internal/cloud-turn-cost.js +8 -1
- package/dist/internal/connection-env.js +5 -6
- package/dist/internal/continuation-channel.js +10 -7
- package/dist/internal/continuation-identity.js +85 -67
- package/dist/internal/conversation-mirror.js +112 -131
- package/dist/internal/convert-automation/convert-workflow.js +21 -31
- package/dist/internal/cron.js +3 -3
- package/dist/internal/cursor/account-mcp.js +147 -146
- package/dist/internal/cursor/backend-client.js +290 -320
- package/dist/internal/cursor/bound-secret-file.js +3 -3
- package/dist/internal/cursor/credentials.js +127 -142
- package/dist/internal/cursor/cursor-api-transport.js +4 -8
- package/dist/internal/cursor/github-credentials.js +91 -108
- package/dist/internal/cursor/hosted-bound-secrets.js +3 -4
- package/dist/internal/cursor/hosted-deployment-secrets.js +1 -1
- package/dist/internal/cursor/hosted-store-secrets.js +5 -9
- package/dist/internal/cursor/session-token.js +36 -48
- package/dist/internal/cursor/store-api-client.js +77 -92
- package/dist/internal/cursor-account-mcp-auth.js +132 -149
- package/dist/internal/cursor-agent-template.js +1 -1
- package/dist/internal/cursor-deployment-relay.js +33 -54
- package/dist/internal/cursor-event-relay.js +65 -59
- package/dist/internal/cursor-relay-core.js +258 -286
- package/dist/internal/deferred-channel-session.js +3 -12
- package/dist/internal/deploy-client.d.ts.map +1 -1
- package/dist/internal/deploy-client.js +413 -475
- package/dist/internal/deploy-manifest.d.ts +17 -0
- package/dist/internal/deploy-manifest.d.ts.map +1 -1
- package/dist/internal/deploy-manifest.js +71 -21
- package/dist/internal/deploy-source.js +31 -43
- package/dist/internal/discovery/agent-config.js +45 -59
- package/dist/internal/discovery/agent.js +276 -280
- package/dist/internal/discovery/channels.js +67 -80
- package/dist/internal/discovery/connections.js +286 -296
- package/dist/internal/discovery/context.js +2 -13
- package/dist/internal/discovery/cursor-plugin.js +223 -259
- package/dist/internal/discovery/extension-overlay.js +104 -131
- package/dist/internal/discovery/extensions.js +276 -281
- package/dist/internal/discovery/fs.js +56 -79
- package/dist/internal/discovery/hooks.js +39 -50
- package/dist/internal/discovery/info.js +17 -19
- package/dist/internal/discovery/instructions.js +58 -71
- package/dist/internal/discovery/modules.js +45 -58
- package/dist/internal/discovery/project.d.ts.map +1 -1
- package/dist/internal/discovery/project.js +192 -215
- package/dist/internal/discovery/reminders.js +41 -52
- package/dist/internal/discovery/runtime.js +1 -1
- package/dist/internal/discovery/schedules.js +71 -82
- package/dist/internal/discovery/seed-files.js +21 -32
- package/dist/internal/discovery/services.js +74 -96
- package/dist/internal/discovery/skills.js +77 -94
- package/dist/internal/discovery/subagent.js +79 -95
- package/dist/internal/discovery/tools.js +12 -23
- package/dist/internal/distribution.js +2 -2
- package/dist/internal/docs-site.js +30 -45
- package/dist/internal/duration.js +1 -1
- package/dist/internal/env-file.js +48 -64
- package/dist/internal/eval-judge-model.js +17 -28
- package/dist/internal/eval-run-store.js +265 -254
- package/dist/internal/eval-runner.d.ts +8 -0
- package/dist/internal/eval-runner.d.ts.map +1 -1
- package/dist/internal/eval-runner.js +406 -408
- package/dist/internal/eval-transport.d.ts +24 -0
- package/dist/internal/eval-transport.d.ts.map +1 -0
- package/dist/internal/eval-transport.js +22 -0
- package/dist/internal/evals-client.js +242 -246
- package/dist/internal/event-log.js +72 -120
- package/dist/internal/event-mapper.js +30 -31
- package/dist/internal/factory-resource-channel.js +16 -30
- package/dist/internal/filesystem/errors.js +6 -6
- package/dist/internal/filesystem/format.js +10 -13
- package/dist/internal/filesystem/merge.js +52 -94
- package/dist/internal/filesystem/nearest.js +15 -27
- package/dist/internal/filesystem/scratch.js +65 -85
- package/dist/internal/filesystem/tools.js +221 -241
- package/dist/internal/filesystem/walk.js +76 -143
- package/dist/internal/framework-file-storage.js +118 -139
- package/dist/internal/framework-storage-selection.js +21 -13
- package/dist/internal/frontmatter.js +4 -6
- package/dist/internal/github-fanout.js +50 -64
- package/dist/internal/guest-network.js +96 -109
- package/dist/internal/handleAgentServeTrigger.js +121 -126
- package/dist/internal/host-files.js +73 -88
- package/dist/internal/host-kv.js +21 -36
- package/dist/internal/host-otel.js +22 -19
- package/dist/internal/host-platforms.js +49 -63
- package/dist/internal/hosted-catch-protocol.d.ts +1 -0
- package/dist/internal/hosted-catch-protocol.d.ts.map +1 -1
- package/dist/internal/hosted-catch-protocol.js +1 -0
- package/dist/internal/hosted-catch.d.ts +5 -3
- package/dist/internal/hosted-catch.d.ts.map +1 -1
- package/dist/internal/hosted-catch.js +84 -93
- package/dist/internal/hosted-delivery-protocol.js +32 -8
- package/dist/internal/hosted-delivery.d.ts +13 -1
- package/dist/internal/hosted-delivery.d.ts.map +1 -1
- package/dist/internal/hosted-delivery.js +614 -584
- package/dist/internal/hosted-eval-cases.d.ts +21 -0
- package/dist/internal/hosted-eval-cases.d.ts.map +1 -0
- package/dist/internal/hosted-eval-cases.js +162 -0
- package/dist/internal/hosted-execution-diag.js +38 -30
- package/dist/internal/hosted-execution-flush.js +75 -66
- package/dist/internal/hosted-execution-latency.js +16 -8
- package/dist/internal/hosted-managed-automation.js +2 -2
- package/dist/internal/hosting.js +2 -3
- package/dist/internal/http-channel-define.js +4 -1
- package/dist/internal/http-channel.js +101 -112
- package/dist/internal/http-control-plane-session.d.ts +18 -1
- package/dist/internal/http-control-plane-session.d.ts.map +1 -1
- package/dist/internal/http-control-plane-session.js +66 -32
- package/dist/internal/incoming-headers-to-fetch.js +1 -2
- package/dist/internal/init-interview.js +73 -93
- package/dist/internal/init-project.js +182 -214
- package/dist/internal/init-scaffold.js +10 -21
- package/dist/internal/inline-stdio-mcp.js +80 -86
- package/dist/internal/install-cursor-skills.js +231 -273
- package/dist/internal/legacy-command-guard.js +18 -31
- package/dist/internal/listen-port.js +34 -45
- package/dist/internal/local-control-plane.js +293 -307
- package/dist/internal/local-env.js +1 -1
- package/dist/internal/local-ingress.js +15 -9
- package/dist/internal/log-ring.js +1 -2
- package/dist/internal/logs-client.js +207 -227
- package/dist/internal/map-pool.js +24 -38
- package/dist/internal/mcp-endpoint.js +204 -180
- package/dist/internal/mcp-host.js +165 -168
- package/dist/internal/mcp-oauth-on-demand.js +170 -207
- package/dist/internal/mcp-oauth-persist.js +15 -29
- package/dist/internal/mcp-oauth.js +209 -266
- package/dist/internal/named-webhook-secret.d.ts +39 -0
- package/dist/internal/named-webhook-secret.d.ts.map +1 -0
- package/dist/internal/named-webhook-secret.js +47 -0
- package/dist/internal/open-browser.js +2 -3
- package/dist/internal/otel/collector.js +104 -68
- package/dist/internal/otel/config.js +24 -37
- package/dist/internal/otel/http.js +5 -7
- package/dist/internal/otel/mcp.js +3 -12
- package/dist/internal/otel/runtime.js +69 -83
- package/dist/internal/package-inline-stdio.js +57 -65
- package/dist/internal/peer-connections.js +9 -5
- package/dist/internal/platform-schedule-sync.js +39 -54
- package/dist/internal/platform-timers.js +176 -210
- package/dist/internal/playground/static.js +1 -2
- package/dist/internal/playground/toolchain.js +37 -53
- package/dist/internal/playground-proxy.js +230 -270
- package/dist/internal/process-memory-telemetry.js +33 -51
- package/dist/internal/prompt-context.js +3 -6
- package/dist/internal/reminder-control-plane-protocol.js +46 -13
- package/dist/internal/reminder-runner.js +770 -785
- package/dist/internal/reminder-schedule.js +1 -1
- package/dist/internal/reminder-store.js +57 -78
- package/dist/internal/request-error-status.js +1 -3
- package/dist/internal/request-headers.js +2 -2
- package/dist/internal/resolve-prod-target.js +119 -135
- package/dist/internal/resolved-connections.js +16 -6
- package/dist/internal/run-client.js +221 -229
- package/dist/internal/runtime-dispatch-runner.js +18 -43
- package/dist/internal/schedule-runner.js +49 -58
- package/dist/internal/scm/pr-url.js +7 -6
- package/dist/internal/sdk-runner.js +388 -363
- package/dist/internal/serve-restart.js +26 -39
- package/dist/internal/server.d.ts.map +1 -1
- package/dist/internal/server.js +1283 -1244
- package/dist/internal/session-cost.js +7 -9
- package/dist/internal/session-engine.d.ts +3 -1
- package/dist/internal/session-engine.d.ts.map +1 -1
- package/dist/internal/session-engine.js +2801 -2777
- package/dist/internal/session-links.js +12 -16
- package/dist/internal/session-run-log.js +134 -82
- package/dist/internal/session-store.js +133 -164
- package/dist/internal/sessions-client.js +97 -118
- package/dist/internal/skill-catalog.js +18 -23
- package/dist/internal/skills-sync.js +16 -30
- package/dist/internal/slack-provision-client.js +90 -116
- package/dist/internal/start-log-store.js +48 -67
- package/dist/internal/steering.js +1 -2
- package/dist/internal/storage-coordinator.js +160 -196
- package/dist/internal/store-mirror.js +16 -30
- package/dist/internal/stream-progress.js +6 -8
- package/dist/internal/terminal-style.js +3 -4
- package/dist/internal/testing/scm-continuation-fixtures.js +6 -2
- package/dist/internal/testing/slack-continuation-fixtures.d.ts +26 -0
- package/dist/internal/testing/slack-continuation-fixtures.d.ts.map +1 -0
- package/dist/internal/testing/slack-continuation-fixtures.js +136 -0
- package/dist/internal/tool-catalog.js +11 -5
- package/dist/internal/tool-result.js +1 -1
- package/dist/internal/trajectory.js +19 -22
- package/dist/internal/turn-cost.js +52 -62
- package/dist/internal/turn-governor.js +5 -8
- package/dist/internal/turn-lease-store.js +85 -105
- package/dist/internal/turn-outbox.js +28 -43
- package/dist/internal/update-check.js +231 -259
- package/dist/internal/v2-hosting.js +1 -2
- package/dist/internal/workspace-sync.js +25 -41
- package/dist/internal/workspace.js +111 -139
- package/dist/kv/memory-kv.js +27 -51
- package/dist/memory.js +106 -148
- package/dist/otel.js +5 -8
- package/dist/playground/assets/{index-Co4CUVTQ.js → index-Be0-1hw2.js} +45 -45
- package/dist/playground/assets/index-Clz6uHj9.css +1 -0
- package/dist/playground/index.html +2 -2
- package/dist/prompt.js +2 -4
- package/dist/storage-backends/cursor-hosted-v2.js +53 -83
- package/dist/storage-backends/cursor-hosted.js +105 -145
- package/dist/storage-backends/file-kv.js +100 -128
- package/dist/storage-protocol.js +3 -5
- package/dist/storage.js +17 -26
- package/dist/types.d.ts +68 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +20 -18
- package/docs/building-with-agents.md +2 -0
- package/docs/deployment.md +7 -0
- package/docs/guides/bitbucket.md +9 -1
- package/docs/guides/github.md +20 -4
- package/docs/guides/gitlab.md +9 -1
- package/docs/guides/migrate.md +127 -0
- package/docs/reference/cli.md +39 -0
- package/docs/troubleshooting.md +1 -0
- package/package.json +1 -1
- package/skills/debug/SKILL.md +1 -0
- package/skills/github/SKILL.md +23 -0
- package/skills/migrate-v2/SKILL.md +51 -10
- package/dist/docs/assets/chunks/@localSearchIndexroot.BJ8UZggu.js +0 -1
- package/dist/docs/assets/chunks/channel.BTJ5J9FI.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.D4BZ3cVV.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.D4BZ3cVV.js +0 -1
- package/dist/docs/assets/chunks/clone.62tX-O-1.js +0 -1
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.DkTs1aEU.js +0 -1
- package/dist/docs/assets/reference_cli.md.GwugN3n-.lean.js +0 -1
- package/dist/docs/assets/troubleshooting.md.Bscj6ODe.js +0 -1
- package/dist/playground/assets/index-C1g_PTTZ.css +0 -1
- /package/dist/docs/assets/{building-with-agents.md.BPjPFxFg.lean.js → building-with-agents.md.Df87rAe1.lean.js} +0 -0
- /package/dist/docs/assets/{deployment.md.BdqTiGdc.lean.js → deployment.md.BYuEcDBv.lean.js} +0 -0
|
@@ -2,15 +2,6 @@
|
|
|
2
2
|
* Host-side MCP OAuth for `defineConnection({ url, oauth: true })`.
|
|
3
3
|
* Local: mcp-auth.json. Prod secrets: `mcp oauth <name> --store`.
|
|
4
4
|
*/
|
|
5
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
6
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
7
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
8
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
9
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
10
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
11
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
12
|
-
});
|
|
13
|
-
};
|
|
14
5
|
import { execFile } from "node:child_process";
|
|
15
6
|
import { randomUUID } from "node:crypto";
|
|
16
7
|
import { chmod, mkdir, readFile, writeFile } from "node:fs/promises";
|
|
@@ -38,13 +29,12 @@ export function mcpOauthSecretNames(connection) {
|
|
|
38
29
|
};
|
|
39
30
|
}
|
|
40
31
|
export function tokensFromEnv(connection, env = process.env) {
|
|
41
|
-
var _a, _b;
|
|
42
32
|
const names = mcpOauthSecretNames(connection);
|
|
43
|
-
const access =
|
|
33
|
+
const access = env[names.accessToken]?.trim();
|
|
44
34
|
if (access === undefined || access === "") {
|
|
45
35
|
return undefined;
|
|
46
36
|
}
|
|
47
|
-
const refresh =
|
|
37
|
+
const refresh = env[names.refreshToken]?.trim();
|
|
48
38
|
return {
|
|
49
39
|
access_token: access,
|
|
50
40
|
refresh_token: refresh === undefined || refresh === "" ? undefined : refresh,
|
|
@@ -52,8 +42,7 @@ export function tokensFromEnv(connection, env = process.env) {
|
|
|
52
42
|
};
|
|
53
43
|
}
|
|
54
44
|
export function clientIdFromEnv(connection, env = process.env) {
|
|
55
|
-
|
|
56
|
-
const clientId = (_a = env[mcpOauthSecretNames(connection).clientId]) === null || _a === void 0 ? void 0 : _a.trim();
|
|
45
|
+
const clientId = env[mcpOauthSecretNames(connection).clientId]?.trim();
|
|
57
46
|
if (clientId === undefined || clientId === "") {
|
|
58
47
|
return undefined;
|
|
59
48
|
}
|
|
@@ -87,127 +76,101 @@ export class FileMcpOAuthStore {
|
|
|
87
76
|
constructor(path = defaultMcpAuthPath()) {
|
|
88
77
|
this.path = path;
|
|
89
78
|
}
|
|
90
|
-
loadTokens(id, resourceUrl) {
|
|
91
|
-
return
|
|
92
|
-
var _a;
|
|
93
|
-
return (_a = (yield this.entryFor(id, resourceUrl))) === null || _a === void 0 ? void 0 : _a.tokens;
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
loadClientInformation(id, resourceUrl) {
|
|
97
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
98
|
-
var _a;
|
|
99
|
-
return (_a = (yield this.entryFor(id, resourceUrl))) === null || _a === void 0 ? void 0 : _a.clientInfo;
|
|
100
|
-
});
|
|
101
|
-
}
|
|
102
|
-
saveTokens(id, resourceUrl, tokens) {
|
|
103
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
104
|
-
yield this.update(id, resourceUrl, entry => {
|
|
105
|
-
entry.tokens = tokens;
|
|
106
|
-
});
|
|
107
|
-
});
|
|
108
|
-
}
|
|
109
|
-
saveClientInformation(id, resourceUrl, clientInfo) {
|
|
110
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
111
|
-
yield this.update(id, resourceUrl, entry => {
|
|
112
|
-
entry.clientInfo = clientInfo;
|
|
113
|
-
});
|
|
114
|
-
});
|
|
79
|
+
async loadTokens(id, resourceUrl) {
|
|
80
|
+
return (await this.entryFor(id, resourceUrl))?.tokens;
|
|
115
81
|
}
|
|
116
|
-
|
|
117
|
-
return
|
|
118
|
-
yield this.withLock(() => __awaiter(this, void 0, void 0, function* () {
|
|
119
|
-
const data = yield this.read();
|
|
120
|
-
delete data[id];
|
|
121
|
-
yield this.write(data);
|
|
122
|
-
}));
|
|
123
|
-
});
|
|
82
|
+
async loadClientInformation(id, resourceUrl) {
|
|
83
|
+
return (await this.entryFor(id, resourceUrl))?.clientInfo;
|
|
124
84
|
}
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
if (entry === undefined) {
|
|
129
|
-
return undefined;
|
|
130
|
-
}
|
|
131
|
-
const bound = entry.resourceUrl;
|
|
132
|
-
if (bound === undefined || bound !== normalizeMcpResourceUrl(resourceUrl)) {
|
|
133
|
-
return undefined;
|
|
134
|
-
}
|
|
135
|
-
return entry;
|
|
85
|
+
async saveTokens(id, resourceUrl, tokens) {
|
|
86
|
+
await this.update(id, resourceUrl, entry => {
|
|
87
|
+
entry.tokens = tokens;
|
|
136
88
|
});
|
|
137
89
|
}
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
yield this.withLock(() => __awaiter(this, void 0, void 0, function* () {
|
|
142
|
-
const data = yield this.read();
|
|
143
|
-
const existing = data[id];
|
|
144
|
-
const entry = (existing === null || existing === void 0 ? void 0 : existing.resourceUrl) === normalized ? Object.assign({}, existing) : {};
|
|
145
|
-
entry.resourceUrl = normalized;
|
|
146
|
-
mutate(entry);
|
|
147
|
-
data[id] = entry;
|
|
148
|
-
yield this.write(data);
|
|
149
|
-
}));
|
|
90
|
+
async saveClientInformation(id, resourceUrl, clientInfo) {
|
|
91
|
+
await this.update(id, resourceUrl, entry => {
|
|
92
|
+
entry.clientInfo = clientInfo;
|
|
150
93
|
});
|
|
151
94
|
}
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
}
|
|
158
|
-
(_a = this.loading) !== null && _a !== void 0 ? _a : (this.loading = this.readDisk().then(data => {
|
|
159
|
-
this.cache = data;
|
|
160
|
-
return data;
|
|
161
|
-
}));
|
|
162
|
-
return this.loading;
|
|
95
|
+
async deleteCredentials(id) {
|
|
96
|
+
await this.withLock(async () => {
|
|
97
|
+
const data = await this.read();
|
|
98
|
+
delete data[id];
|
|
99
|
+
await this.write(data);
|
|
163
100
|
});
|
|
164
101
|
}
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
102
|
+
async entryFor(id, resourceUrl) {
|
|
103
|
+
const entry = (await this.read())[id];
|
|
104
|
+
if (entry === undefined) {
|
|
105
|
+
return undefined;
|
|
106
|
+
}
|
|
107
|
+
const bound = entry.resourceUrl;
|
|
108
|
+
if (bound === undefined || bound !== normalizeMcpResourceUrl(resourceUrl)) {
|
|
109
|
+
return undefined;
|
|
110
|
+
}
|
|
111
|
+
return entry;
|
|
112
|
+
}
|
|
113
|
+
async update(id, resourceUrl, mutate) {
|
|
114
|
+
const normalized = normalizeMcpResourceUrl(resourceUrl);
|
|
115
|
+
await this.withLock(async () => {
|
|
116
|
+
const data = await this.read();
|
|
117
|
+
const existing = data[id];
|
|
118
|
+
const entry = existing?.resourceUrl === normalized ? { ...existing } : {};
|
|
119
|
+
entry.resourceUrl = normalized;
|
|
120
|
+
mutate(entry);
|
|
121
|
+
data[id] = entry;
|
|
122
|
+
await this.write(data);
|
|
183
123
|
});
|
|
184
124
|
}
|
|
185
|
-
|
|
186
|
-
|
|
125
|
+
async read() {
|
|
126
|
+
if (this.cache !== undefined) {
|
|
127
|
+
return this.cache;
|
|
128
|
+
}
|
|
129
|
+
this.loading ??= this.readDisk().then(data => {
|
|
187
130
|
this.cache = data;
|
|
188
|
-
|
|
189
|
-
yield writeFile(this.path, `${JSON.stringify(data, null, 2)}\n`, {
|
|
190
|
-
mode: 0o600,
|
|
191
|
-
});
|
|
192
|
-
yield chmod(this.path, 0o600);
|
|
131
|
+
return data;
|
|
193
132
|
});
|
|
133
|
+
return this.loading;
|
|
194
134
|
}
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
locks.set(this.path, new Promise(resolve => {
|
|
201
|
-
release = resolve;
|
|
202
|
-
}));
|
|
203
|
-
try {
|
|
204
|
-
yield prev;
|
|
205
|
-
return yield fn();
|
|
135
|
+
async readDisk() {
|
|
136
|
+
try {
|
|
137
|
+
const parsed = JSON.parse(await readFile(this.path, "utf8"));
|
|
138
|
+
if (typeof parsed !== "object" || parsed === null) {
|
|
139
|
+
return {};
|
|
206
140
|
}
|
|
207
|
-
|
|
208
|
-
|
|
141
|
+
return parsed;
|
|
142
|
+
}
|
|
143
|
+
catch (error) {
|
|
144
|
+
if (typeof error === "object" &&
|
|
145
|
+
error !== null &&
|
|
146
|
+
"code" in error &&
|
|
147
|
+
error.code === "ENOENT") {
|
|
148
|
+
return {};
|
|
209
149
|
}
|
|
150
|
+
throw error;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
async write(data) {
|
|
154
|
+
this.cache = data;
|
|
155
|
+
await mkdir(dirname(this.path), { recursive: true, mode: 0o700 });
|
|
156
|
+
await writeFile(this.path, `${JSON.stringify(data, null, 2)}\n`, {
|
|
157
|
+
mode: 0o600,
|
|
210
158
|
});
|
|
159
|
+
await chmod(this.path, 0o600);
|
|
160
|
+
}
|
|
161
|
+
async withLock(fn) {
|
|
162
|
+
const prev = locks.get(this.path) ?? Promise.resolve();
|
|
163
|
+
let release;
|
|
164
|
+
locks.set(this.path, new Promise(resolve => {
|
|
165
|
+
release = resolve;
|
|
166
|
+
}));
|
|
167
|
+
try {
|
|
168
|
+
await prev;
|
|
169
|
+
return await fn();
|
|
170
|
+
}
|
|
171
|
+
finally {
|
|
172
|
+
release();
|
|
173
|
+
}
|
|
211
174
|
}
|
|
212
175
|
}
|
|
213
176
|
/**
|
|
@@ -218,43 +181,40 @@ export class FileMcpOAuthStore {
|
|
|
218
181
|
* path shape on any origin so local translators work, and fails to the
|
|
219
182
|
* default behavior (indicator kept) when the PRM is unreachable.
|
|
220
183
|
*/
|
|
221
|
-
export function fetchOmitResourceIndicatorFromPrm(
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
if (!response.ok) {
|
|
237
|
-
return false;
|
|
238
|
-
}
|
|
239
|
-
const document = (yield response.json());
|
|
240
|
-
return document.cursor_omit_resource_indicator === true;
|
|
241
|
-
}
|
|
242
|
-
catch (_b) {
|
|
184
|
+
export async function fetchOmitResourceIndicatorFromPrm(resourceUrl, fetchImpl = fetch) {
|
|
185
|
+
let url;
|
|
186
|
+
try {
|
|
187
|
+
url = new URL(resourceUrl);
|
|
188
|
+
}
|
|
189
|
+
catch {
|
|
190
|
+
return false;
|
|
191
|
+
}
|
|
192
|
+
if (!/^\/rest-mcp\/[^/]+\/mcp\/?$/.test(url.pathname)) {
|
|
193
|
+
return false;
|
|
194
|
+
}
|
|
195
|
+
const prmUrl = `${url.origin}/.well-known/oauth-protected-resource${url.pathname.replace(/\/+$/, "")}`;
|
|
196
|
+
try {
|
|
197
|
+
const response = await fetchImpl(prmUrl);
|
|
198
|
+
if (!response.ok) {
|
|
243
199
|
return false;
|
|
244
200
|
}
|
|
245
|
-
|
|
201
|
+
const document = (await response.json());
|
|
202
|
+
return document.cursor_omit_resource_indicator === true;
|
|
203
|
+
}
|
|
204
|
+
catch {
|
|
205
|
+
return false;
|
|
206
|
+
}
|
|
246
207
|
}
|
|
247
208
|
export class HostMcpOAuthProvider {
|
|
248
209
|
constructor(args) {
|
|
249
|
-
var _a;
|
|
250
210
|
this.args = args;
|
|
251
211
|
this.tokensValue = args.tokens;
|
|
252
212
|
this.clientInfo = args.clientInformation;
|
|
253
213
|
if (args.omitResourceIndicator === true) {
|
|
254
|
-
this.validateResourceURL = () =>
|
|
214
|
+
this.validateResourceURL = async () => undefined;
|
|
255
215
|
}
|
|
256
216
|
this.meta = {
|
|
257
|
-
redirect_uris: [
|
|
217
|
+
redirect_uris: [args.redirectUrl ?? MCP_OAUTH_CALLBACK_URL],
|
|
258
218
|
token_endpoint_auth_method: "none",
|
|
259
219
|
grant_types: ["authorization_code", "refresh_token"],
|
|
260
220
|
response_types: ["code"],
|
|
@@ -262,8 +222,7 @@ export class HostMcpOAuthProvider {
|
|
|
262
222
|
};
|
|
263
223
|
}
|
|
264
224
|
get redirectUrl() {
|
|
265
|
-
|
|
266
|
-
return (_a = this.args.redirectUrl) !== null && _a !== void 0 ? _a : MCP_OAUTH_CALLBACK_URL;
|
|
225
|
+
return this.args.redirectUrl ?? MCP_OAUTH_CALLBACK_URL;
|
|
267
226
|
}
|
|
268
227
|
get clientMetadata() {
|
|
269
228
|
return this.meta;
|
|
@@ -277,30 +236,23 @@ export class HostMcpOAuthProvider {
|
|
|
277
236
|
clientInformation() {
|
|
278
237
|
return this.clientInfo;
|
|
279
238
|
}
|
|
280
|
-
saveClientInformation(info) {
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
yield this.args.store.saveClientInformation(this.args.identifier, this.args.resourceUrl, info);
|
|
284
|
-
});
|
|
239
|
+
async saveClientInformation(info) {
|
|
240
|
+
this.clientInfo = info;
|
|
241
|
+
await this.args.store.saveClientInformation(this.args.identifier, this.args.resourceUrl, info);
|
|
285
242
|
}
|
|
286
243
|
tokens() {
|
|
287
244
|
return this.tokensValue;
|
|
288
245
|
}
|
|
289
|
-
saveTokens(tokens) {
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
yield this.args.store.saveTokens(this.args.identifier, this.args.resourceUrl, tokens);
|
|
293
|
-
});
|
|
246
|
+
async saveTokens(tokens) {
|
|
247
|
+
this.tokensValue = tokens;
|
|
248
|
+
await this.args.store.saveTokens(this.args.identifier, this.args.resourceUrl, tokens);
|
|
294
249
|
}
|
|
295
250
|
redirectToAuthorization(url) {
|
|
296
|
-
var _a, _b;
|
|
297
251
|
this.redirect = url;
|
|
298
|
-
|
|
252
|
+
this.args.onRedirect?.(url);
|
|
299
253
|
}
|
|
300
|
-
saveCodeVerifier(codeVerifier) {
|
|
301
|
-
|
|
302
|
-
this.verifier = codeVerifier;
|
|
303
|
-
});
|
|
254
|
+
async saveCodeVerifier(codeVerifier) {
|
|
255
|
+
this.verifier = codeVerifier;
|
|
304
256
|
}
|
|
305
257
|
codeVerifier() {
|
|
306
258
|
if (this.verifier === undefined) {
|
|
@@ -308,22 +260,20 @@ export class HostMcpOAuthProvider {
|
|
|
308
260
|
}
|
|
309
261
|
return this.verifier;
|
|
310
262
|
}
|
|
311
|
-
invalidateCredentials(scope) {
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
}
|
|
326
|
-
});
|
|
263
|
+
async invalidateCredentials(scope) {
|
|
264
|
+
if (scope === "tokens" || scope === "all") {
|
|
265
|
+
this.tokensValue = undefined;
|
|
266
|
+
}
|
|
267
|
+
if (scope === "client" || scope === "all") {
|
|
268
|
+
this.clientInfo = undefined;
|
|
269
|
+
}
|
|
270
|
+
if (scope === "verifier" || scope === "all") {
|
|
271
|
+
this.verifier = undefined;
|
|
272
|
+
this.redirect = undefined;
|
|
273
|
+
}
|
|
274
|
+
if (scope === "all") {
|
|
275
|
+
await this.args.store.deleteCredentials(this.args.identifier);
|
|
276
|
+
}
|
|
327
277
|
}
|
|
328
278
|
}
|
|
329
279
|
function clientForRedirect(info, redirectUrl) {
|
|
@@ -332,26 +282,23 @@ function clientForRedirect(info, redirectUrl) {
|
|
|
332
282
|
}
|
|
333
283
|
return info;
|
|
334
284
|
}
|
|
335
|
-
export function createHostMcpOAuthProvider(args) {
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
onRedirect: args.onRedirect,
|
|
353
|
-
omitResourceIndicator,
|
|
354
|
-
});
|
|
285
|
+
export async function createHostMcpOAuthProvider(args) {
|
|
286
|
+
const store = args.store ?? new FileMcpOAuthStore();
|
|
287
|
+
const redirectUrl = args.redirectUrl ?? MCP_OAUTH_CALLBACK_URL;
|
|
288
|
+
const [fileTokens, fileClient, omitResourceIndicator] = await Promise.all([
|
|
289
|
+
store.loadTokens(args.identifier, args.resourceUrl),
|
|
290
|
+
store.loadClientInformation(args.identifier, args.resourceUrl),
|
|
291
|
+
fetchOmitResourceIndicatorFromPrm(args.resourceUrl),
|
|
292
|
+
]);
|
|
293
|
+
return new HostMcpOAuthProvider({
|
|
294
|
+
identifier: args.identifier,
|
|
295
|
+
resourceUrl: args.resourceUrl,
|
|
296
|
+
store,
|
|
297
|
+
redirectUrl,
|
|
298
|
+
tokens: fileTokens ?? tokensFromEnv(args.identifier),
|
|
299
|
+
clientInformation: clientForRedirect(fileClient ?? clientIdFromEnv(args.identifier), redirectUrl),
|
|
300
|
+
onRedirect: args.onRedirect,
|
|
301
|
+
omitResourceIndicator,
|
|
355
302
|
});
|
|
356
303
|
}
|
|
357
304
|
/**
|
|
@@ -360,75 +307,71 @@ export function createHostMcpOAuthProvider(args) {
|
|
|
360
307
|
* public npm with no private workspace dependencies, and its OAuth state is a
|
|
361
308
|
* bare UUID rather than the payload that module's validator expects.
|
|
362
309
|
*/
|
|
363
|
-
export function waitForMcpOAuthCallback(args) {
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
// fatal would let any page cancel a login, and free the port for someone
|
|
405
|
-
// else to bind before the real callback arrives.
|
|
406
|
-
if (state !== (expectedState !== null && expectedState !== void 0 ? expectedState : undefined)) {
|
|
407
|
-
res
|
|
408
|
-
.writeHead(404, { "content-type": "text/html; charset=utf-8" })
|
|
409
|
-
.end("<!doctype html><html><body><h1>Not found</h1></body></html>");
|
|
410
|
-
return;
|
|
411
|
-
}
|
|
412
|
-
if (code) {
|
|
413
|
-
res
|
|
414
|
-
.writeHead(200, { "content-type": "text/html; charset=utf-8" })
|
|
415
|
-
.end("<!doctype html><html><body><h1>Authorized</h1><p>Return to Agent SDK.</p></body></html>");
|
|
416
|
-
finish({ code, state });
|
|
417
|
-
return;
|
|
418
|
-
}
|
|
310
|
+
export async function waitForMcpOAuthCallback(args) {
|
|
311
|
+
const port = args.port ?? MCP_OAUTH_CALLBACK_PORT;
|
|
312
|
+
const path = args.path ?? MCP_OAUTH_CALLBACK_PATH;
|
|
313
|
+
const timeoutMs = args.timeoutMs ?? 5 * 60 * 1000;
|
|
314
|
+
const expectedState = new URL(args.authorizationUrl).searchParams.get("state");
|
|
315
|
+
return new Promise((resolve, reject) => {
|
|
316
|
+
let done = false;
|
|
317
|
+
const finish = (result, error) => {
|
|
318
|
+
if (done) {
|
|
319
|
+
return;
|
|
320
|
+
}
|
|
321
|
+
done = true;
|
|
322
|
+
clearTimeout(timer);
|
|
323
|
+
server.close();
|
|
324
|
+
if (error !== undefined) {
|
|
325
|
+
reject(error);
|
|
326
|
+
return;
|
|
327
|
+
}
|
|
328
|
+
if (result !== undefined) {
|
|
329
|
+
resolve(result);
|
|
330
|
+
}
|
|
331
|
+
};
|
|
332
|
+
const server = createServer((req, res) => {
|
|
333
|
+
if (req.url === "/favicon.ico") {
|
|
334
|
+
res.writeHead(404).end();
|
|
335
|
+
return;
|
|
336
|
+
}
|
|
337
|
+
const url = new URL(req.url ?? "", `http://localhost:${port}`);
|
|
338
|
+
if (url.pathname !== path) {
|
|
339
|
+
res.writeHead(404).end("Not found");
|
|
340
|
+
return;
|
|
341
|
+
}
|
|
342
|
+
const code = url.searchParams.get("code");
|
|
343
|
+
const oauthError = url.searchParams.get("error");
|
|
344
|
+
const state = url.searchParams.get("state") ?? undefined;
|
|
345
|
+
// Without this, any page that can reach the loopback port during a login
|
|
346
|
+
// can inject its own authorization code into the exchange. Ignore what is
|
|
347
|
+
// not ours rather than failing the login: treating a stray request as
|
|
348
|
+
// fatal would let any page cancel a login, and free the port for someone
|
|
349
|
+
// else to bind before the real callback arrives.
|
|
350
|
+
if (state !== (expectedState ?? undefined)) {
|
|
419
351
|
res
|
|
420
|
-
.writeHead(
|
|
421
|
-
.end(
|
|
422
|
-
|
|
423
|
-
}
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
finish(
|
|
429
|
-
|
|
430
|
-
|
|
352
|
+
.writeHead(404, { "content-type": "text/html; charset=utf-8" })
|
|
353
|
+
.end("<!doctype html><html><body><h1>Not found</h1></body></html>");
|
|
354
|
+
return;
|
|
355
|
+
}
|
|
356
|
+
if (code) {
|
|
357
|
+
res
|
|
358
|
+
.writeHead(200, { "content-type": "text/html; charset=utf-8" })
|
|
359
|
+
.end("<!doctype html><html><body><h1>Authorized</h1><p>Return to Agent SDK.</p></body></html>");
|
|
360
|
+
finish({ code, state });
|
|
361
|
+
return;
|
|
362
|
+
}
|
|
363
|
+
res
|
|
364
|
+
.writeHead(400, { "content-type": "text/html; charset=utf-8" })
|
|
365
|
+
.end(`<!doctype html><html><body><h1>Authorization failed</h1><p>${oauthError ?? "missing code"}</p></body></html>`);
|
|
366
|
+
finish(undefined, new Error(`OAuth authorization failed: ${oauthError ?? "missing code"}`));
|
|
367
|
+
});
|
|
368
|
+
const timer = setTimeout(() => {
|
|
369
|
+
finish(undefined, new Error(`Timed out waiting for OAuth callback on http://localhost:${port}${path}`));
|
|
370
|
+
}, timeoutMs);
|
|
371
|
+
server.on("error", error => {
|
|
372
|
+
finish(undefined, new Error(`OAuth callback port ${port} failed: ${error instanceof Error ? error.message : String(error)}`));
|
|
431
373
|
});
|
|
374
|
+
server.listen(port, "127.0.0.1");
|
|
432
375
|
});
|
|
433
376
|
}
|
|
434
377
|
export function openBrowser(url) {
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { type SecretRef } from "../types.js";
|
|
2
|
+
/**
|
|
3
|
+
* The shapes an SCM channel accepts for its webhook secret. Only the
|
|
4
|
+
* {@link SecretRef} form names the secret, which is what lets `deploy` write
|
|
5
|
+
* it into the manifest and the control plane verify the sender at ingestion.
|
|
6
|
+
*/
|
|
7
|
+
export type WebhookSecretValue = string | SecretRef | (() => string | undefined);
|
|
8
|
+
/**
|
|
9
|
+
* The omitted-`webhookSecret` fallback: a {@link SecretRef} naming `envName`,
|
|
10
|
+
* present only while that env var is non-empty at channel construction.
|
|
11
|
+
* Named rather than read so the fallback keeps the same route policy (and
|
|
12
|
+
* the same control-plane catch declaration) as an authored
|
|
13
|
+
* `{ secretName: envName }`.
|
|
14
|
+
*/
|
|
15
|
+
export declare function envSecretRef(envName: string): SecretRef | undefined;
|
|
16
|
+
/**
|
|
17
|
+
* The secret's value for the handler's own check. A named secret resolves
|
|
18
|
+
* from the environment: locally the shell's, hosted the bound deployment
|
|
19
|
+
* secrets. Empty and whitespace-only values count as unset.
|
|
20
|
+
*/
|
|
21
|
+
export declare function resolveWebhookSecretValue(value: WebhookSecretValue | undefined): string | undefined;
|
|
22
|
+
/**
|
|
23
|
+
* Why an SCM channel cannot deploy onto architecture v2 as authored, or
|
|
24
|
+
* `undefined` when it can. v2 terminates the provider's webhook check on
|
|
25
|
+
* the control plane, which can only do that for a secret it can name: a
|
|
26
|
+
* literal or getter value never reaches the manifest, so the check would
|
|
27
|
+
* run inside the guest only — after compute was spent and after the SCM
|
|
28
|
+
* already got its 202. Omitting the field (the env fallback) is allowed.
|
|
29
|
+
*/
|
|
30
|
+
export declare function namedWebhookSecretArchitectureError(args: {
|
|
31
|
+
/** Author-facing option path, e.g. `githubChannel credentials.webhookSecret`. */
|
|
32
|
+
option: string;
|
|
33
|
+
webhookSecret: unknown;
|
|
34
|
+
/** Env var / deployment secret name the fallback and the fix use. */
|
|
35
|
+
envName: string;
|
|
36
|
+
/** What the control plane checks, e.g. `X-Hub-Signature-256`. */
|
|
37
|
+
verifies: string;
|
|
38
|
+
}): string | undefined;
|
|
39
|
+
//# sourceMappingURL=named-webhook-secret.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"named-webhook-secret.d.ts","sourceRoot":"","sources":["../../src/internal/named-webhook-secret.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAE1D;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,SAAS,GAAG,CAAC,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC;AAEjF;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAGnE;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,kBAAkB,GAAG,SAAS,GACpC,MAAM,GAAG,SAAS,CAYpB;AAED;;;;;;;GAOG;AACH,wBAAgB,mCAAmC,CAAC,IAAI,EAAE;IACxD,iFAAiF;IACjF,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,OAAO,CAAC;IACvB,qEAAqE;IACrE,OAAO,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,QAAQ,EAAE,MAAM,CAAC;CAClB,GAAG,MAAM,GAAG,SAAS,CAWrB"}
|