@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
|
@@ -5,15 +5,6 @@
|
|
|
5
5
|
* errors, and bounded retries. Availability requires both a compatible
|
|
6
6
|
* transport and a managed store, resolved lazily for each call.
|
|
7
7
|
*/
|
|
8
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
9
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
10
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
11
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
12
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
13
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
14
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
15
|
-
});
|
|
16
|
-
};
|
|
17
8
|
import { MEMORY_APPEND_MAX_RECORD_BYTES, memoryAppendResponseSchema, memoryReadResponseSchema, STORE_API_MEMORY_APPEND_CALL, STORE_API_MEMORY_READ_CALL, STORE_API_PATH, STORE_API_PROTOCOL_VERSION, serializedRecordBytes, } from "../store-api-protocol.js";
|
|
18
9
|
import { resolveCursorApiBaseUrl, resolveCursorApiFetch, resolveCursorApiKey, } from "./cursor-api-transport.js";
|
|
19
10
|
import { resolveDeploymentStoreSourceIdSync, resolveStoreProtocolSync, storeProtocolEnablesStoreApi, } from "./hosted-store-secrets.js";
|
|
@@ -32,35 +23,34 @@ export class StoreApiCallError extends Error {
|
|
|
32
23
|
* A 429 whose Retry-After exceeds the cap gives up immediately.
|
|
33
24
|
*/
|
|
34
25
|
const STORE_API_MAX_ATTEMPTS = 3;
|
|
35
|
-
const STORE_API_MAX_BACKOFF_MS =
|
|
26
|
+
const STORE_API_MAX_BACKOFF_MS = 2_000;
|
|
36
27
|
/**
|
|
37
28
|
* Hard deadline per request. Hydration runs at the head of the session
|
|
38
29
|
* dispatch chain, so a stalled connection must not delay every queued
|
|
39
30
|
* handler.
|
|
40
31
|
*/
|
|
41
|
-
const STORE_API_FETCH_TIMEOUT_MS =
|
|
32
|
+
const STORE_API_FETCH_TIMEOUT_MS = 15_000;
|
|
42
33
|
function backoffMs(attempt, random) {
|
|
43
|
-
return Math.min(200 *
|
|
34
|
+
return Math.min(200 * 2 ** attempt * (0.5 + random()), STORE_API_MAX_BACKOFF_MS);
|
|
44
35
|
}
|
|
45
36
|
/** True when managed store operations are available. */
|
|
46
37
|
export function isStoreApiLaneEnabled(options = {}) {
|
|
47
|
-
|
|
48
|
-
var _d, _e, _f;
|
|
49
|
-
const protocol = (_d = (_a = options.resolveStoreProtocol) === null || _a === void 0 ? void 0 : _a.call(options)) !== null && _d !== void 0 ? _d : resolveStoreProtocolSync();
|
|
38
|
+
const protocol = options.resolveStoreProtocol?.() ?? resolveStoreProtocolSync();
|
|
50
39
|
if (!storeProtocolEnablesStoreApi(protocol)) {
|
|
51
40
|
return false;
|
|
52
41
|
}
|
|
53
|
-
const sourceId = (
|
|
42
|
+
const sourceId = (options.resolveStoreSourceId?.() ??
|
|
43
|
+
options.storeSourceId ??
|
|
44
|
+
resolveDeploymentStoreSourceIdSync())?.trim();
|
|
54
45
|
return sourceId !== undefined && sourceId !== "";
|
|
55
46
|
}
|
|
56
47
|
export function createStoreApiClient(options = {}) {
|
|
57
|
-
|
|
58
|
-
const
|
|
59
|
-
const random = (_b = options.random) !== null && _b !== void 0 ? _b : Math.random;
|
|
48
|
+
const sleep = options.sleep ?? ((ms) => new Promise(resolve => setTimeout(resolve, ms)));
|
|
49
|
+
const random = options.random ?? Math.random;
|
|
60
50
|
/** One POST of a versioned envelope; returns the parsed 2xx body. */
|
|
61
|
-
const postOnce = (call, envelope) =>
|
|
51
|
+
const postOnce = async (call, envelope) => {
|
|
62
52
|
const fetchImpl = resolveCursorApiFetch(options);
|
|
63
|
-
return
|
|
53
|
+
return await fetchImpl(`${resolveCursorApiBaseUrl(options)}${STORE_API_PATH}/${call}`, {
|
|
64
54
|
method: "POST",
|
|
65
55
|
headers: {
|
|
66
56
|
Authorization: `Bearer ${resolveCursorApiKey(options)}`,
|
|
@@ -69,39 +59,38 @@ export function createStoreApiClient(options = {}) {
|
|
|
69
59
|
body: JSON.stringify(envelope),
|
|
70
60
|
signal: AbortSignal.timeout(STORE_API_FETCH_TIMEOUT_MS),
|
|
71
61
|
});
|
|
72
|
-
}
|
|
62
|
+
};
|
|
73
63
|
/** The response's `Retry-After` in ms, when present and numeric. */
|
|
74
64
|
const retryAfterDelayMs = (response) => {
|
|
75
|
-
|
|
76
|
-
const header = (_a = response.headers.get("retry-after")) === null || _a === void 0 ? void 0 : _a.trim();
|
|
65
|
+
const header = response.headers.get("retry-after")?.trim();
|
|
77
66
|
const seconds = header === undefined || header === "" ? Number.NaN : Number(header);
|
|
78
|
-
return Number.isFinite(seconds) ? seconds *
|
|
67
|
+
return Number.isFinite(seconds) ? seconds * 1_000 : undefined;
|
|
79
68
|
};
|
|
80
|
-
const describeErrorBody = (response) =>
|
|
69
|
+
const describeErrorBody = async (response) => {
|
|
81
70
|
try {
|
|
82
|
-
const parsed = (
|
|
83
|
-
if (typeof
|
|
71
|
+
const parsed = (await response.json());
|
|
72
|
+
if (typeof parsed?.error === "string") {
|
|
84
73
|
return parsed.error;
|
|
85
74
|
}
|
|
86
75
|
}
|
|
87
|
-
catch
|
|
76
|
+
catch {
|
|
88
77
|
// Non-JSON error body; the status is the message.
|
|
89
78
|
}
|
|
90
79
|
return `HTTP ${response.status}`;
|
|
91
|
-
}
|
|
92
|
-
const callApi = (call, envelope) =>
|
|
80
|
+
};
|
|
81
|
+
const callApi = async (call, envelope) => {
|
|
93
82
|
let lastFailure;
|
|
94
83
|
// A shed's Retry-After (when within the cap) overrides the next jittered
|
|
95
84
|
// backoff; cleared before every attempt.
|
|
96
85
|
let nextDelayMs;
|
|
97
86
|
for (let attempt = 0; attempt < STORE_API_MAX_ATTEMPTS; attempt += 1) {
|
|
98
87
|
if (attempt > 0) {
|
|
99
|
-
|
|
88
|
+
await sleep(nextDelayMs ?? backoffMs(attempt, random));
|
|
100
89
|
}
|
|
101
90
|
nextDelayMs = undefined;
|
|
102
91
|
let response;
|
|
103
92
|
try {
|
|
104
|
-
response =
|
|
93
|
+
response = await postOnce(call, envelope);
|
|
105
94
|
}
|
|
106
95
|
catch (error) {
|
|
107
96
|
lastFailure = new StoreApiCallError("unavailable", `store api ${call} transport failure: ${error instanceof Error ? error.message : String(error)}`);
|
|
@@ -109,15 +98,15 @@ export function createStoreApiClient(options = {}) {
|
|
|
109
98
|
}
|
|
110
99
|
if (response.ok) {
|
|
111
100
|
try {
|
|
112
|
-
return (
|
|
101
|
+
return (await response.json());
|
|
113
102
|
}
|
|
114
|
-
catch
|
|
103
|
+
catch {
|
|
115
104
|
throw new StoreApiCallError("bad_response", `store api ${call} answered non-JSON (${response.status})`, response.status);
|
|
116
105
|
}
|
|
117
106
|
}
|
|
118
107
|
if (response.status === 429) {
|
|
119
108
|
const retryDelayMs = retryAfterDelayMs(response);
|
|
120
|
-
const shed = new StoreApiCallError("shed", `store api ${call} shed: ${
|
|
109
|
+
const shed = new StoreApiCallError("shed", `store api ${call} shed: ${await describeErrorBody(response)}`, response.status);
|
|
121
110
|
if (retryDelayMs !== undefined && retryDelayMs > STORE_API_MAX_BACKOFF_MS) {
|
|
122
111
|
// A long Retry-After is an explicit instruction to stop retrying.
|
|
123
112
|
throw shed;
|
|
@@ -135,70 +124,66 @@ export function createStoreApiClient(options = {}) {
|
|
|
135
124
|
if (retryDelayMs !== undefined) {
|
|
136
125
|
nextDelayMs = Math.min(retryDelayMs, STORE_API_MAX_BACKOFF_MS);
|
|
137
126
|
}
|
|
138
|
-
lastFailure = new StoreApiCallError("unavailable", `store api ${call} failed: ${
|
|
127
|
+
lastFailure = new StoreApiCallError("unavailable", `store api ${call} failed: ${await describeErrorBody(response)}`, response.status);
|
|
139
128
|
continue;
|
|
140
129
|
}
|
|
141
130
|
// Any other 4xx is deterministic; retrying re-sends the same refusal.
|
|
142
|
-
throw new StoreApiCallError("rejected", `store api ${call} rejected: ${
|
|
131
|
+
throw new StoreApiCallError("rejected", `store api ${call} rejected: ${await describeErrorBody(response)}`, response.status);
|
|
143
132
|
}
|
|
144
|
-
throw lastFailure
|
|
145
|
-
}
|
|
133
|
+
throw lastFailure ?? new StoreApiCallError("unavailable", "no attempt ran");
|
|
134
|
+
};
|
|
146
135
|
return {
|
|
147
|
-
memoryAppend(payload) {
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
payload,
|
|
159
|
-
});
|
|
160
|
-
if (!memoryAppendResponseSchema.safeParse(body).success) {
|
|
161
|
-
throw new StoreApiCallError("bad_response", "unexpected memory.append response shape");
|
|
162
|
-
}
|
|
136
|
+
async memoryAppend(payload) {
|
|
137
|
+
const recordBytes = serializedRecordBytes(payload.record);
|
|
138
|
+
if (recordBytes > MEMORY_APPEND_MAX_RECORD_BYTES) {
|
|
139
|
+
// The server-side controller enforces the same cap; checking here
|
|
140
|
+
// spares a doomed request and fails with the same typed shape.
|
|
141
|
+
throw new StoreApiCallError("rejected", `memory.append record is ${recordBytes} serialized bytes; the cap is ${MEMORY_APPEND_MAX_RECORD_BYTES}`);
|
|
142
|
+
}
|
|
143
|
+
const body = await callApi(STORE_API_MEMORY_APPEND_CALL, {
|
|
144
|
+
v: STORE_API_PROTOCOL_VERSION,
|
|
145
|
+
call: STORE_API_MEMORY_APPEND_CALL,
|
|
146
|
+
payload,
|
|
163
147
|
});
|
|
148
|
+
if (!memoryAppendResponseSchema.safeParse(body).success) {
|
|
149
|
+
throw new StoreApiCallError("bad_response", "unexpected memory.append response shape");
|
|
150
|
+
}
|
|
164
151
|
},
|
|
165
|
-
memoryReadContent(payload) {
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
payload,
|
|
171
|
-
});
|
|
172
|
-
const parsed = memoryReadResponseSchema.safeParse(body);
|
|
173
|
-
if (!parsed.success) {
|
|
174
|
-
throw new StoreApiCallError("bad_response", "unexpected memory.read response shape");
|
|
175
|
-
}
|
|
176
|
-
if (parsed.data.journal === null) {
|
|
177
|
-
return undefined;
|
|
178
|
-
}
|
|
179
|
-
// Fetch bulk bytes from the authorized URL. This read is not retried;
|
|
180
|
-
// the whole operation runs again at the next session start.
|
|
181
|
-
const fetchImpl = resolveCursorApiFetch(options);
|
|
182
|
-
let response;
|
|
183
|
-
try {
|
|
184
|
-
response = yield fetchImpl(parsed.data.journal.url, {
|
|
185
|
-
method: "GET",
|
|
186
|
-
redirect: "manual",
|
|
187
|
-
signal: AbortSignal.timeout(STORE_API_FETCH_TIMEOUT_MS),
|
|
188
|
-
});
|
|
189
|
-
}
|
|
190
|
-
catch (error) {
|
|
191
|
-
throw new StoreApiCallError("unavailable", `memory.read journal fetch transport failure: ${error instanceof Error ? error.message : String(error)}`);
|
|
192
|
-
}
|
|
193
|
-
if (response.status === 404) {
|
|
194
|
-
// The snapshot raced a rotation or delete; absent is absent.
|
|
195
|
-
return undefined;
|
|
196
|
-
}
|
|
197
|
-
if (!response.ok) {
|
|
198
|
-
throw new StoreApiCallError("unavailable", `memory.read journal fetch failed (HTTP ${response.status})`, response.status);
|
|
199
|
-
}
|
|
200
|
-
return new Uint8Array(yield response.arrayBuffer());
|
|
152
|
+
async memoryReadContent(payload) {
|
|
153
|
+
const body = await callApi(STORE_API_MEMORY_READ_CALL, {
|
|
154
|
+
v: STORE_API_PROTOCOL_VERSION,
|
|
155
|
+
call: STORE_API_MEMORY_READ_CALL,
|
|
156
|
+
payload,
|
|
201
157
|
});
|
|
158
|
+
const parsed = memoryReadResponseSchema.safeParse(body);
|
|
159
|
+
if (!parsed.success) {
|
|
160
|
+
throw new StoreApiCallError("bad_response", "unexpected memory.read response shape");
|
|
161
|
+
}
|
|
162
|
+
if (parsed.data.journal === null) {
|
|
163
|
+
return undefined;
|
|
164
|
+
}
|
|
165
|
+
// Fetch bulk bytes from the authorized URL. This read is not retried;
|
|
166
|
+
// the whole operation runs again at the next session start.
|
|
167
|
+
const fetchImpl = resolveCursorApiFetch(options);
|
|
168
|
+
let response;
|
|
169
|
+
try {
|
|
170
|
+
response = await fetchImpl(parsed.data.journal.url, {
|
|
171
|
+
method: "GET",
|
|
172
|
+
redirect: "manual",
|
|
173
|
+
signal: AbortSignal.timeout(STORE_API_FETCH_TIMEOUT_MS),
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
catch (error) {
|
|
177
|
+
throw new StoreApiCallError("unavailable", `memory.read journal fetch transport failure: ${error instanceof Error ? error.message : String(error)}`);
|
|
178
|
+
}
|
|
179
|
+
if (response.status === 404) {
|
|
180
|
+
// The snapshot raced a rotation or delete; absent is absent.
|
|
181
|
+
return undefined;
|
|
182
|
+
}
|
|
183
|
+
if (!response.ok) {
|
|
184
|
+
throw new StoreApiCallError("unavailable", `memory.read journal fetch failed (HTTP ${response.status})`, response.status);
|
|
185
|
+
}
|
|
186
|
+
return new Uint8Array(await response.arrayBuffer());
|
|
202
187
|
},
|
|
203
188
|
};
|
|
204
189
|
}
|
|
@@ -12,19 +12,10 @@
|
|
|
12
12
|
* account. Used by `agent-sdk mcp oauth <connection>` and the post-deploy
|
|
13
13
|
* hook in `cli-deploy.ts`.
|
|
14
14
|
*/
|
|
15
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
16
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
17
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
18
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
19
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
20
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
21
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
22
|
-
});
|
|
23
|
-
};
|
|
24
15
|
import { LOG_PREFIX } from "./distribution.js";
|
|
25
16
|
import { openBrowser } from "./mcp-oauth.js";
|
|
26
17
|
import { sleep as defaultSleep } from "./sleep.js";
|
|
27
|
-
const DEFAULT_POLL_INTERVAL_MS =
|
|
18
|
+
const DEFAULT_POLL_INTERVAL_MS = 3_000;
|
|
28
19
|
const DEFAULT_POLL_TIMEOUT_MS = 5 * 60 * 1000;
|
|
29
20
|
/** Same default the dashboard uses; MCP_OAUTH_REDIRECT_URI overrides for dev. */
|
|
30
21
|
export function mcpOauthRedirectUri() {
|
|
@@ -39,83 +30,80 @@ export function mcpOauthRedirectUri() {
|
|
|
39
30
|
* Already-authorized connectors are skipped; the rest get a browser OAuth
|
|
40
31
|
* each (sequentially), polled until the backend stores the token.
|
|
41
32
|
*/
|
|
42
|
-
export function authorizeCursorAccountConnectors(args) {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
33
|
+
export async function authorizeCursorAccountConnectors(args) {
|
|
34
|
+
const { backendClient, teamId, serviceAccountId, connectionName, out, err } = args;
|
|
35
|
+
const open = args.openBrowserImpl ?? openBrowser;
|
|
36
|
+
const sleep = args.sleep ?? defaultSleep;
|
|
37
|
+
const pollIntervalMs = args.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS;
|
|
38
|
+
const pollTimeoutMs = args.pollTimeoutMs ?? DEFAULT_POLL_TIMEOUT_MS;
|
|
39
|
+
const redirectUri = mcpOauthRedirectUri();
|
|
40
|
+
// Team-scoped connectors only: the hosted bridge resolves the SA's team
|
|
41
|
+
// servers, so personal connectors can never apply to a deployment.
|
|
42
|
+
const available = (await backendClient.getAvailableMcpServers({ teamId })).filter(server => server.isTeamServer);
|
|
43
|
+
const selected = selectConnectors(available, args.servers);
|
|
44
|
+
for (const missing of selected.unmatched) {
|
|
45
|
+
err(`${LOG_PREFIX} Connection "${connectionName}" lists connector ${JSON.stringify(missing)}, but the team has no such connector (dashboard → MCP).\n`);
|
|
46
|
+
}
|
|
47
|
+
if (selected.servers.length === 0) {
|
|
48
|
+
err(`${LOG_PREFIX} No matching team connectors for connection "${connectionName}".\n`);
|
|
49
|
+
return { authorized: [], pending: [], errored: [] };
|
|
50
|
+
}
|
|
51
|
+
const nameById = new Map(selected.servers.map(server => [server.id, server.name]));
|
|
52
|
+
const statuses = await backendClient.checkHttpMcpStatus({
|
|
53
|
+
serverIds: selected.servers.map(server => server.id),
|
|
54
|
+
oauthRedirectUri: redirectUri,
|
|
55
|
+
serviceAccountId,
|
|
56
|
+
});
|
|
57
|
+
const result = {
|
|
58
|
+
authorized: [],
|
|
59
|
+
pending: [],
|
|
60
|
+
errored: [],
|
|
61
|
+
};
|
|
62
|
+
for (const status of statuses) {
|
|
63
|
+
const name = nameById.get(status.id) ?? `#${status.id}`;
|
|
64
|
+
if (!status.requiresAuth) {
|
|
65
|
+
if (status.error !== undefined && status.error !== "") {
|
|
66
|
+
err(`${LOG_PREFIX} ${name}: ${status.error}\n`);
|
|
67
|
+
result.errored.push({ name, error: status.error });
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
out(`${LOG_PREFIX} ${name}: already authorized ✓\n`);
|
|
71
|
+
result.authorized.push(name);
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
if (status.authUrl === undefined || status.authUrl === "") {
|
|
75
|
+
const error = status.error ?? "no authorization URL was minted";
|
|
76
|
+
err(`${LOG_PREFIX} ${name}: ${error}\n`);
|
|
77
|
+
result.errored.push({ name, error });
|
|
78
|
+
continue;
|
|
57
79
|
}
|
|
58
|
-
if (
|
|
59
|
-
|
|
60
|
-
|
|
80
|
+
if (!args.interactive) {
|
|
81
|
+
result.pending.push(name);
|
|
82
|
+
continue;
|
|
61
83
|
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
84
|
+
out(`${LOG_PREFIX} ${name}: authorization needed. You'll authorize ${name} as yourself; ` +
|
|
85
|
+
`anyone who can talk to this agent can act with that access.\n` +
|
|
86
|
+
`${LOG_PREFIX} Opening (or open manually):\n ${status.authUrl}\n`);
|
|
87
|
+
open(status.authUrl);
|
|
88
|
+
const authorized = await pollUntilAuthorized({
|
|
89
|
+
backendClient,
|
|
90
|
+
serverId: status.id,
|
|
66
91
|
serviceAccountId,
|
|
92
|
+
redirectUri,
|
|
93
|
+
sleep,
|
|
94
|
+
pollIntervalMs,
|
|
95
|
+
pollTimeoutMs,
|
|
67
96
|
});
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
errored: [],
|
|
72
|
-
};
|
|
73
|
-
for (const status of statuses) {
|
|
74
|
-
const name = (_e = nameById.get(status.id)) !== null && _e !== void 0 ? _e : `#${status.id}`;
|
|
75
|
-
if (!status.requiresAuth) {
|
|
76
|
-
if (status.error !== undefined && status.error !== "") {
|
|
77
|
-
err(`${LOG_PREFIX} ${name}: ${status.error}\n`);
|
|
78
|
-
result.errored.push({ name, error: status.error });
|
|
79
|
-
continue;
|
|
80
|
-
}
|
|
81
|
-
out(`${LOG_PREFIX} ${name}: already authorized ✓\n`);
|
|
82
|
-
result.authorized.push(name);
|
|
83
|
-
continue;
|
|
84
|
-
}
|
|
85
|
-
if (status.authUrl === undefined || status.authUrl === "") {
|
|
86
|
-
const error = (_f = status.error) !== null && _f !== void 0 ? _f : "no authorization URL was minted";
|
|
87
|
-
err(`${LOG_PREFIX} ${name}: ${error}\n`);
|
|
88
|
-
result.errored.push({ name, error });
|
|
89
|
-
continue;
|
|
90
|
-
}
|
|
91
|
-
if (!args.interactive) {
|
|
92
|
-
result.pending.push(name);
|
|
93
|
-
continue;
|
|
94
|
-
}
|
|
95
|
-
out(`${LOG_PREFIX} ${name}: authorization needed. You'll authorize ${name} as yourself; ` +
|
|
96
|
-
`anyone who can talk to this agent can act with that access.\n` +
|
|
97
|
-
`${LOG_PREFIX} Opening (or open manually):\n ${status.authUrl}\n`);
|
|
98
|
-
open(status.authUrl);
|
|
99
|
-
const authorized = yield pollUntilAuthorized({
|
|
100
|
-
backendClient,
|
|
101
|
-
serverId: status.id,
|
|
102
|
-
serviceAccountId,
|
|
103
|
-
redirectUri,
|
|
104
|
-
sleep,
|
|
105
|
-
pollIntervalMs,
|
|
106
|
-
pollTimeoutMs,
|
|
107
|
-
});
|
|
108
|
-
if (authorized) {
|
|
109
|
-
out(`${LOG_PREFIX} ${name}: authorized ✓\n`);
|
|
110
|
-
result.authorized.push(name);
|
|
111
|
-
}
|
|
112
|
-
else {
|
|
113
|
-
err(`${LOG_PREFIX} ${name}: still waiting on authorization; giving up for now.\n`);
|
|
114
|
-
result.pending.push(name);
|
|
115
|
-
}
|
|
97
|
+
if (authorized) {
|
|
98
|
+
out(`${LOG_PREFIX} ${name}: authorized ✓\n`);
|
|
99
|
+
result.authorized.push(name);
|
|
116
100
|
}
|
|
117
|
-
|
|
118
|
-
|
|
101
|
+
else {
|
|
102
|
+
err(`${LOG_PREFIX} ${name}: still waiting on authorization; giving up for now.\n`);
|
|
103
|
+
result.pending.push(name);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return result;
|
|
119
107
|
}
|
|
120
108
|
function selectConnectors(available, filter) {
|
|
121
109
|
if (filter === undefined || filter.length === 0) {
|
|
@@ -126,7 +114,7 @@ function selectConnectors(available, filter) {
|
|
|
126
114
|
const unmatched = [];
|
|
127
115
|
for (const name of filter) {
|
|
128
116
|
const wanted = name.trim().toLowerCase();
|
|
129
|
-
const matches = available.filter(server =>
|
|
117
|
+
const matches = available.filter(server => server.name.toLowerCase() === wanted || server.serverIdentifier?.toLowerCase() === wanted);
|
|
130
118
|
if (matches.length === 0) {
|
|
131
119
|
unmatched.push(name);
|
|
132
120
|
continue;
|
|
@@ -145,7 +133,7 @@ function uniqueConnectorMatch(available, identifier) {
|
|
|
145
133
|
if (wanted === "") {
|
|
146
134
|
return undefined;
|
|
147
135
|
}
|
|
148
|
-
const byIdentifier = available.filter(server =>
|
|
136
|
+
const byIdentifier = available.filter(server => server.serverIdentifier?.toLowerCase() === wanted);
|
|
149
137
|
if (byIdentifier.length === 1) {
|
|
150
138
|
return byIdentifier[0];
|
|
151
139
|
}
|
|
@@ -164,78 +152,73 @@ function uniqueConnectorMatch(available, identifier) {
|
|
|
164
152
|
* (local `serve` preflight). Failures return an empty map so the caller
|
|
165
153
|
* can fall back to the dashboard URL.
|
|
166
154
|
*/
|
|
167
|
-
export function probeConnectorAuthUrls(args) {
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
155
|
+
export async function probeConnectorAuthUrls(args) {
|
|
156
|
+
const urls = new Map();
|
|
157
|
+
if (args.identifiers.length === 0) {
|
|
158
|
+
return urls;
|
|
159
|
+
}
|
|
160
|
+
try {
|
|
161
|
+
const available = await args.client.getAvailableMcpServers();
|
|
162
|
+
const matched = [];
|
|
163
|
+
const seen = new Set();
|
|
164
|
+
for (const identifier of args.identifiers) {
|
|
165
|
+
const match = uniqueConnectorMatch(available, identifier);
|
|
166
|
+
if (match === undefined || seen.has(match.id)) {
|
|
167
|
+
continue;
|
|
168
|
+
}
|
|
169
|
+
seen.add(match.id);
|
|
170
|
+
matched.push(match);
|
|
171
|
+
}
|
|
172
|
+
if (matched.length === 0) {
|
|
172
173
|
return urls;
|
|
173
174
|
}
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
matched.push(match);
|
|
175
|
+
const statuses = await args.client.checkHttpMcpStatus({
|
|
176
|
+
serverIds: matched.map(server => server.id),
|
|
177
|
+
oauthRedirectUri: mcpOauthRedirectUri(),
|
|
178
|
+
serviceAccountId: args.serviceAccountId,
|
|
179
|
+
});
|
|
180
|
+
const statusById = new Map(statuses.map(status => [status.id, status]));
|
|
181
|
+
for (const identifier of args.identifiers) {
|
|
182
|
+
const match = uniqueConnectorMatch(available, identifier);
|
|
183
|
+
if (match === undefined) {
|
|
184
|
+
continue;
|
|
185
185
|
}
|
|
186
|
-
|
|
187
|
-
|
|
186
|
+
const authUrl = statusById.get(match.id)?.authUrl?.trim();
|
|
187
|
+
if (authUrl !== undefined && authUrl !== "") {
|
|
188
|
+
urls.set(identifier, authUrl);
|
|
188
189
|
}
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
190
|
+
}
|
|
191
|
+
return urls;
|
|
192
|
+
}
|
|
193
|
+
catch {
|
|
194
|
+
return urls;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
async function pollUntilAuthorized(args) {
|
|
198
|
+
const deadline = Date.now() + args.pollTimeoutMs;
|
|
199
|
+
// Each unauthorized probe is a full backend connect to the provider, so
|
|
200
|
+
// back off while the human works through the OAuth pages.
|
|
201
|
+
let intervalMs = args.pollIntervalMs;
|
|
202
|
+
const maxIntervalMs = Math.max(args.pollIntervalMs, 15_000);
|
|
203
|
+
while (Date.now() < deadline) {
|
|
204
|
+
await args.sleep(intervalMs);
|
|
205
|
+
intervalMs = Math.min(intervalMs * 1.5, maxIntervalMs);
|
|
206
|
+
let statuses;
|
|
207
|
+
try {
|
|
208
|
+
statuses = await args.backendClient.checkHttpMcpStatus({
|
|
209
|
+
serverIds: [args.serverId],
|
|
210
|
+
oauthRedirectUri: args.redirectUri,
|
|
192
211
|
serviceAccountId: args.serviceAccountId,
|
|
193
212
|
});
|
|
194
|
-
const statusById = new Map(statuses.map(status => [status.id, status]));
|
|
195
|
-
for (const identifier of args.identifiers) {
|
|
196
|
-
const match = uniqueConnectorMatch(available, identifier);
|
|
197
|
-
if (match === undefined) {
|
|
198
|
-
continue;
|
|
199
|
-
}
|
|
200
|
-
const authUrl = (_b = (_a = statusById.get(match.id)) === null || _a === void 0 ? void 0 : _a.authUrl) === null || _b === void 0 ? void 0 : _b.trim();
|
|
201
|
-
if (authUrl !== undefined && authUrl !== "") {
|
|
202
|
-
urls.set(identifier, authUrl);
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
return urls;
|
|
206
213
|
}
|
|
207
|
-
catch
|
|
208
|
-
|
|
214
|
+
catch {
|
|
215
|
+
// Transient probe errors; keep polling until the deadline.
|
|
216
|
+
continue;
|
|
209
217
|
}
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
214
|
-
const deadline = Date.now() + args.pollTimeoutMs;
|
|
215
|
-
// Each unauthorized probe is a full backend connect to the provider, so
|
|
216
|
-
// back off while the human works through the OAuth pages.
|
|
217
|
-
let intervalMs = args.pollIntervalMs;
|
|
218
|
-
const maxIntervalMs = Math.max(args.pollIntervalMs, 15000);
|
|
219
|
-
while (Date.now() < deadline) {
|
|
220
|
-
yield args.sleep(intervalMs);
|
|
221
|
-
intervalMs = Math.min(intervalMs * 1.5, maxIntervalMs);
|
|
222
|
-
let statuses;
|
|
223
|
-
try {
|
|
224
|
-
statuses = yield args.backendClient.checkHttpMcpStatus({
|
|
225
|
-
serverIds: [args.serverId],
|
|
226
|
-
oauthRedirectUri: args.redirectUri,
|
|
227
|
-
serviceAccountId: args.serviceAccountId,
|
|
228
|
-
});
|
|
229
|
-
}
|
|
230
|
-
catch (_a) {
|
|
231
|
-
// Transient probe errors; keep polling until the deadline.
|
|
232
|
-
continue;
|
|
233
|
-
}
|
|
234
|
-
const status = statuses.find(entry => entry.id === args.serverId);
|
|
235
|
-
if (status !== undefined && !status.requiresAuth) {
|
|
236
|
-
return true;
|
|
237
|
-
}
|
|
218
|
+
const status = statuses.find(entry => entry.id === args.serverId);
|
|
219
|
+
if (status !== undefined && !status.requiresAuth) {
|
|
220
|
+
return true;
|
|
238
221
|
}
|
|
239
|
-
|
|
240
|
-
|
|
222
|
+
}
|
|
223
|
+
return false;
|
|
241
224
|
}
|