@cursor/bdk 0.2.9 → 0.2.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/artifacts.js +3 -5
- package/dist/bin/agent-serve.js +803 -812
- package/dist/channels/bitbucket/api.js +305 -321
- package/dist/channels/bitbucket/binding.js +97 -61
- package/dist/channels/bitbucket/bitbucket-channel.d.ts +15 -1
- package/dist/channels/bitbucket/bitbucket-channel.d.ts.map +1 -1
- package/dist/channels/bitbucket/bitbucket-channel.js +95 -42
- package/dist/channels/bitbucket/bitbucket-webhook.d.ts +11 -0
- package/dist/channels/bitbucket/bitbucket-webhook.d.ts.map +1 -1
- package/dist/channels/bitbucket/bitbucket-webhook.js +214 -204
- package/dist/channels/bitbucket/checks.js +9 -21
- package/dist/channels/bitbucket/cursor-account.js +1 -1
- package/dist/channels/bitbucket/defaults.js +14 -4
- package/dist/channels/bitbucket/events.js +1 -2
- package/dist/channels/bitbucket/index.d.ts +6 -2
- package/dist/channels/bitbucket/index.d.ts.map +1 -1
- package/dist/channels/bitbucket/index.js +6 -2
- package/dist/channels/bitbucket/replay.js +80 -56
- package/dist/channels/bitbucket/state.js +16 -7
- package/dist/channels/bitbucket/types.d.ts +11 -2
- package/dist/channels/bitbucket/types.d.ts.map +1 -1
- package/dist/channels/checks.js +18 -28
- package/dist/channels/deployments/deployments-channel.js +26 -34
- package/dist/channels/github/api.js +216 -210
- package/dist/channels/github/auth.d.ts +5 -1
- package/dist/channels/github/auth.d.ts.map +1 -1
- package/dist/channels/github/auth.js +157 -174
- package/dist/channels/github/binding.js +48 -39
- package/dist/channels/github/checks.js +9 -14
- package/dist/channels/github/cursor-account.js +6 -11
- package/dist/channels/github/defaults.js +105 -130
- package/dist/channels/github/forward.js +13 -17
- package/dist/channels/github/github-channel.d.ts +43 -2
- package/dist/channels/github/github-channel.d.ts.map +1 -1
- package/dist/channels/github/github-channel.js +1228 -958
- package/dist/channels/github/progress.js +145 -146
- package/dist/channels/github/replay.js +30 -39
- package/dist/channels/github/state.js +40 -16
- package/dist/channels/github/types.d.ts +30 -6
- package/dist/channels/github/types.d.ts.map +1 -1
- package/dist/channels/gitlab/api.js +100 -114
- package/dist/channels/gitlab/binding.js +52 -33
- package/dist/channels/gitlab/checks.js +28 -29
- package/dist/channels/gitlab/cursor-account.js +1 -1
- package/dist/channels/gitlab/defaults.js +9 -3
- package/dist/channels/gitlab/gitlab-channel.d.ts +16 -1
- package/dist/channels/gitlab/gitlab-channel.d.ts.map +1 -1
- package/dist/channels/gitlab/gitlab-channel.js +95 -42
- package/dist/channels/gitlab/gitlab-webhook.d.ts +10 -1
- package/dist/channels/gitlab/gitlab-webhook.d.ts.map +1 -1
- package/dist/channels/gitlab/gitlab-webhook.js +282 -249
- package/dist/channels/gitlab/index.d.ts +6 -2
- package/dist/channels/gitlab/index.d.ts.map +1 -1
- package/dist/channels/gitlab/index.js +6 -2
- package/dist/channels/gitlab/replay.js +50 -27
- package/dist/channels/gitlab/state.js +14 -6
- package/dist/channels/gitlab/types.d.ts +13 -2
- package/dist/channels/gitlab/types.d.ts.map +1 -1
- package/dist/channels/origin/api.js +100 -116
- package/dist/channels/origin/binding.js +15 -16
- package/dist/channels/origin/checks.js +30 -28
- package/dist/channels/origin/defaults.js +50 -65
- package/dist/channels/origin/origin-channel.js +266 -272
- package/dist/channels/origin/origin-webhook.js +70 -88
- package/dist/channels/origin/reactions.js +9 -21
- package/dist/channels/origin/state.js +13 -5
- package/dist/channels/slack/agentic-delivery.js +426 -478
- package/dist/channels/slack/agentic-posted.js +9 -10
- package/dist/channels/slack/agentic-signals.js +2 -3
- package/dist/channels/slack/api.js +417 -427
- package/dist/channels/slack/approvals.js +1 -1
- package/dist/channels/slack/assistant.js +37 -47
- package/dist/channels/slack/attachments.js +188 -206
- package/dist/channels/slack/auth.js +8 -6
- package/dist/channels/slack/bot-mentions.js +31 -45
- package/dist/channels/slack/channel-watch.js +42 -48
- package/dist/channels/slack/cli-project.js +112 -137
- package/dist/channels/slack/code-fences.js +3 -5
- package/dist/channels/slack/constants.js +2 -2
- package/dist/channels/slack/credentials.js +23 -38
- package/dist/channels/slack/defaults.js +292 -331
- package/dist/channels/slack/dispatch.d.ts.map +1 -1
- package/dist/channels/slack/dispatch.js +533 -460
- package/dist/channels/slack/doctor.js +200 -214
- package/dist/channels/slack/eval-directive.js +79 -96
- package/dist/channels/slack/event-id-dedupe.js +1 -1
- package/dist/channels/slack/external-policy.js +26 -39
- package/dist/channels/slack/footer.js +28 -41
- package/dist/channels/slack/inbound.d.ts +1 -0
- package/dist/channels/slack/inbound.d.ts.map +1 -1
- package/dist/channels/slack/inbound.js +50 -31
- package/dist/channels/slack/init.d.ts +1 -5
- package/dist/channels/slack/init.d.ts.map +1 -1
- package/dist/channels/slack/init.js +42 -59
- package/dist/channels/slack/interactive.d.ts +9 -3
- package/dist/channels/slack/interactive.d.ts.map +1 -1
- package/dist/channels/slack/interactive.js +160 -162
- package/dist/channels/slack/links.js +1 -2
- package/dist/channels/slack/live-delivery.js +172 -190
- package/dist/channels/slack/manifest.d.ts.map +1 -1
- package/dist/channels/slack/manifest.js +44 -23
- package/dist/channels/slack/message-body.js +2 -2
- package/dist/channels/slack/nudge-carrier.js +30 -42
- package/dist/channels/slack/nudge-store.js +164 -191
- package/dist/channels/slack/paint-start.js +66 -81
- package/dist/channels/slack/placeholder.js +123 -152
- package/dist/channels/slack/pr-ref.js +1 -1
- package/dist/channels/slack/progress-delivery.js +65 -78
- package/dist/channels/slack/reasoning-card.js +36 -49
- package/dist/channels/slack/recording-sink.js +12 -24
- package/dist/channels/slack/reply-options.js +7 -12
- package/dist/channels/slack/self-identity.js +27 -35
- package/dist/channels/slack/sender-name.d.ts +12 -3
- package/dist/channels/slack/sender-name.d.ts.map +1 -1
- package/dist/channels/slack/sender-name.js +57 -61
- package/dist/channels/slack/setup.js +2 -4
- package/dist/channels/slack/slack-channel.d.ts +6 -4
- package/dist/channels/slack/slack-channel.d.ts.map +1 -1
- package/dist/channels/slack/slack-channel.js +441 -308
- package/dist/channels/slack/socket-mode.js +38 -52
- package/dist/channels/slack/thread-context.js +143 -160
- package/dist/channels/slack/tool-approval-events.js +149 -166
- package/dist/channels/slack/tool-cards.js +6 -11
- package/dist/channels/slack/tool-chip.js +1 -2
- package/dist/channels/slack/types.d.ts +15 -17
- package/dist/channels/slack/types.d.ts.map +1 -1
- package/dist/channels/slack/upload.js +84 -97
- package/dist/channels/slack/user-info.js +27 -41
- package/dist/channels.js +9 -20
- package/dist/dashboard-session-url.js +3 -4
- package/dist/docs/404.html +2 -2
- package/dist/docs/assets/{app.BNhEdGa8.js → app.DXI7bwox.js} +4 -4
- package/dist/docs/assets/{building-with-agents.md.BPjPFxFg.js → building-with-agents.md.Df87rAe1.js} +1 -1
- package/dist/docs/assets/chunks/@localSearchIndexroot.CtLtpWcx.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.DIdUV1Ph.js → VPLocalSearchBox.BrbO5mEe.js} +1 -1
- package/dist/docs/assets/chunks/{arc.lELI4_SR.js → arc.BOG1yms8.js} +1 -1
- package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.iCMdvuoM.js → architectureDiagram-Q4EWVU46.C0hsMZnZ.js} +1 -1
- package/dist/docs/assets/chunks/{baseUniq.C1-nDJBf.js → baseUniq.H044KjKs.js} +1 -1
- package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.ClemzBox.js → blockDiagram-DXYQGD6D.BsRW6GoB.js} +1 -1
- package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.BqTak6cR.js → c4Diagram-AHTNJAMY.B9HV5PFR.js} +1 -1
- package/dist/docs/assets/chunks/channel.CBwrU9rP.js +1 -0
- package/dist/docs/assets/chunks/{chunk-4BX2VUAB.CUS3qs_R.js → chunk-4BX2VUAB.CPoT_ajl.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-4TB4RGXK.dz5fdHcl.js → chunk-4TB4RGXK.DZBwWuCL.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-55IACEB6.D6BEBmve.js → chunk-55IACEB6.CZ3yTiyq.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-EDXVE4YY.B5uK4ID9.js → chunk-EDXVE4YY.6DfvHSd8.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-FMBD7UC4.PgOJgNQs.js → chunk-FMBD7UC4.CpBj8HfK.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-OYMX7WX6.CvkTrCii.js → chunk-OYMX7WX6.BdKo8YqS.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-QZHKN3VN.BnSfKYsB.js → chunk-QZHKN3VN.BnXNyxJx.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-YZCP3GAM.MZH6v5UC.js → chunk-YZCP3GAM.Cg1OcF8G.js} +1 -1
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.CbC_mrvB.js +1 -0
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.CbC_mrvB.js +1 -0
- package/dist/docs/assets/chunks/clone.BTvFyY1a.js +1 -0
- package/dist/docs/assets/chunks/{cose-bilkent-S5V4N54A.BBbw_YZi.js → cose-bilkent-S5V4N54A.1SP8al9c.js} +1 -1
- package/dist/docs/assets/chunks/{dagre-KV5264BT.CNJB2l7E.js → dagre-KV5264BT.DS1L6hJt.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-5BDNPKRD.BQzlnFfq.js → diagram-5BDNPKRD.ChsausbG.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.DkgqqZMz.js → diagram-G4DWMVQ6.3XsptNWj.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-MMDJMWI5.DIT8L7H_.js → diagram-MMDJMWI5.DPA9Dk_P.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-TYMM5635.3xLPZWGJ.js → diagram-TYMM5635.BVswXWrB.js} +1 -1
- package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.5_IHz8jF.js → erDiagram-SMLLAGMA.BSak5OSP.js} +1 -1
- package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.BGUCXz8A.js → flowDiagram-DWJPFMVM.CQgN4TTz.js} +1 -1
- package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.DbfFavS1.js → ganttDiagram-T4ZO3ILL.GrT0kA4a.js} +1 -1
- package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.D2yKdeNW.js → gitGraphDiagram-UUTBAWPF.CdS7Ucll.js} +1 -1
- package/dist/docs/assets/chunks/{graph.CSCxwHba.js → graph.BVqKRmRo.js} +1 -1
- package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.FDeb6xHY.js → infoDiagram-42DDH7IO.C3C9FRto.js} +1 -1
- package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.DbeYs9VL.js → ishikawaDiagram-UXIWVN3A.2FuAh_Zj.js} +1 -1
- package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.CWjKINpx.js → journeyDiagram-VCZTEJTY.CaHMfK4b.js} +1 -1
- package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.B4FrAlwz.js → kanban-definition-6JOO6SKY.CjhIUwcA.js} +1 -1
- package/dist/docs/assets/chunks/{layout.DFGxQ9ab.js → layout.CGU3gfSf.js} +1 -1
- package/dist/docs/assets/chunks/{linear.BmjZ-G59.js → linear.DaihpW_n.js} +1 -1
- package/dist/docs/assets/chunks/{min.DZSxulMW.js → min.BS-j8kHQ.js} +1 -1
- package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.CHLi3-aN.js → mindmap-definition-QFDTVHPH.BVJ1Bbnk.js} +1 -1
- package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.DteG-CkU.js → pieDiagram-DEJITSTG.Cz1WIv9r.js} +1 -1
- package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.D458ipN3.js → quadrantDiagram-34T5L4WZ.DKLFxcjy.js} +1 -1
- package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.DcFgUxst.js → requirementDiagram-MS252O5E.BHegiK7x.js} +1 -1
- package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.BwQAMmSA.js → sankeyDiagram-XADWPNL6.DYkY6yPc.js} +1 -1
- package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.B_Xdsrh9.js → sequenceDiagram-FGHM5R23.DYQ1QUrI.js} +1 -1
- package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.CdfDW6-C.js → stateDiagram-FHFEXIEX.Iru8BsFo.js} +1 -1
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.BYXl4LW6.js +1 -0
- package/dist/docs/assets/chunks/{theme.sfdL3srp.js → theme.DaplWQhQ.js} +2 -2
- package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.56-4hXaC.js → timeline-definition-GMOUNBTQ.BwFA8hiX.js} +1 -1
- package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.CvZSQBO7.js → vennDiagram-DHZGUBPP.CZ60W1C_.js} +1 -1
- package/dist/docs/assets/chunks/{wardley-RL74JXVD.C9qc8k39.js → wardley-RL74JXVD.iXazD3Z7.js} +1 -1
- package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.D9s0nihi.js → wardleyDiagram-NUSXRM2D.B69D2r8-.js} +1 -1
- package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.BVJSpYrC.js → xychartDiagram-5P7HB3ND.CLPZEIU9.js} +1 -1
- package/dist/docs/assets/{deployment.md.BdqTiGdc.js → deployment.md.BYuEcDBv.js} +2 -2
- package/dist/docs/assets/{guides_bitbucket.md.BB6fqD-M.js → guides_bitbucket.md.CKUayYtD.js} +3 -3
- package/dist/docs/assets/{guides_bitbucket.md.BB6fqD-M.lean.js → guides_bitbucket.md.CKUayYtD.lean.js} +1 -1
- package/dist/docs/assets/{guides_github.md.Cr1Xlf-m.js → guides_github.md.TuNiZAOQ.js} +4 -4
- package/dist/docs/assets/{guides_github.md.Cr1Xlf-m.lean.js → guides_github.md.TuNiZAOQ.lean.js} +1 -1
- package/dist/docs/assets/{guides_gitlab.md.CMpmFi4M.js → guides_gitlab.md.CtNI4fSH.js} +4 -4
- package/dist/docs/assets/{guides_gitlab.md.CMpmFi4M.lean.js → guides_gitlab.md.CtNI4fSH.lean.js} +1 -1
- package/dist/docs/assets/guides_migrate.md.sCAvvlC6.js +7 -0
- package/dist/docs/assets/guides_migrate.md.sCAvvlC6.lean.js +1 -0
- package/dist/docs/assets/{reference_cli.md.GwugN3n-.js → reference_cli.md.dYCAL2lB.js} +4 -3
- package/dist/docs/assets/reference_cli.md.dYCAL2lB.lean.js +1 -0
- package/dist/docs/assets/{reference_skills.md.ClkMoQsV.js → reference_skills.md.C0guGcH0.js} +3 -3
- package/dist/docs/assets/troubleshooting.md.x-GBa7wN.js +1 -0
- package/dist/docs/assets/{troubleshooting.md.Bscj6ODe.lean.js → troubleshooting.md.x-GBa7wN.lean.js} +1 -1
- package/dist/docs/building-with-agents.html +37 -37
- package/dist/docs/building-with-agents.md +2 -0
- package/dist/docs/deployment.html +38 -38
- package/dist/docs/deployment.md +7 -0
- package/dist/docs/evals.html +36 -36
- package/dist/docs/guides/agent-to-agent.html +35 -35
- package/dist/docs/guides/bitbucket.html +38 -38
- package/dist/docs/guides/bitbucket.md +9 -1
- package/dist/docs/guides/cloud-agents.html +35 -35
- package/dist/docs/guides/convert-automation.html +35 -35
- package/dist/docs/guides/github.html +39 -39
- package/dist/docs/guides/github.md +20 -4
- package/dist/docs/guides/gitlab.html +38 -38
- package/dist/docs/guides/gitlab.md +9 -1
- package/dist/docs/guides/grokbot-agents.html +35 -35
- package/dist/docs/guides/hooks.html +35 -35
- package/dist/docs/guides/improve.html +35 -35
- package/dist/docs/guides/jev.html +35 -35
- package/dist/docs/guides/mcp-oauth.html +35 -35
- package/dist/docs/guides/migrate.html +66 -0
- package/dist/docs/guides/migrate.md +122 -0
- package/dist/docs/guides/opentelemetry.html +35 -35
- package/dist/docs/guides/slack.html +35 -35
- package/dist/docs/guides/webhooks.html +35 -35
- package/dist/docs/hashmap.json +1 -1
- package/dist/docs/hillclimbing.html +35 -35
- package/dist/docs/index.html +35 -35
- package/dist/docs/llms-full.txt +214 -6
- package/dist/docs/llms.txt +1 -0
- package/dist/docs/quickstart.html +35 -35
- package/dist/docs/reference/agent-config.html +35 -35
- package/dist/docs/reference/artifacts.html +35 -35
- package/dist/docs/reference/channels.html +35 -35
- package/dist/docs/reference/cli.html +39 -38
- package/dist/docs/reference/cli.md +39 -0
- package/dist/docs/reference/connections.html +35 -35
- package/dist/docs/reference/evals.html +35 -35
- package/dist/docs/reference/extensions.html +35 -35
- package/dist/docs/reference/hooks.html +35 -35
- package/dist/docs/reference/http-api.html +35 -35
- package/dist/docs/reference/instructions.html +35 -35
- package/dist/docs/reference/playground.html +35 -35
- package/dist/docs/reference/project-layout.html +35 -35
- package/dist/docs/reference/prompt.html +35 -35
- package/dist/docs/reference/schedules.html +35 -35
- package/dist/docs/reference/sessions.html +35 -35
- package/dist/docs/reference/skills.html +38 -38
- package/dist/docs/reference/subagents.html +35 -35
- package/dist/docs/reference/tools.html +35 -35
- package/dist/docs/templates/agentic-owners.html +35 -35
- package/dist/docs/templates/grokbot-agents.html +35 -35
- package/dist/docs/templates/security-reviewer.html +35 -35
- package/dist/docs/templates/thermo-quality-review.html +35 -35
- package/dist/docs/templates/thermo-review.html +35 -35
- package/dist/docs/templates/triage.html +35 -35
- package/dist/docs/troubleshooting.html +36 -36
- package/dist/docs/troubleshooting.md +1 -0
- package/dist/evals/assertions.js +20 -34
- package/dist/evals/expect.js +3 -6
- package/dist/evals/judge.js +5 -8
- package/dist/evals/loaders.js +45 -62
- package/dist/evals/matchers.js +2 -3
- package/dist/evals/reporters.js +43 -67
- package/dist/evals/results.js +1 -1
- package/dist/evals/run-facts.js +5 -6
- package/dist/evals.js +27 -15
- package/dist/extensions/cursor-cloud-agents/extension.js +4 -1
- package/dist/extensions/cursor-cloud-agents/lib/backend.js +100 -126
- package/dist/extensions/cursor-cloud-agents/lib/fleet.js +22 -38
- package/dist/extensions/cursor-cloud-agents/lib/repos.js +8 -10
- package/dist/extensions/cursor-cloud-agents/lib/transcript.js +2 -3
- package/dist/extensions/cursor-cloud-agents/lib/watch.js +52 -66
- package/dist/extensions/cursor-cloud-agents/reminders/cloud-agent-stop-watch.js +29 -40
- package/dist/extensions/cursor-cloud-agents/tools/cancel.js +6 -17
- package/dist/extensions/cursor-cloud-agents/tools/dump.js +25 -36
- package/dist/extensions/cursor-cloud-agents/tools/get.js +3 -14
- package/dist/extensions/cursor-cloud-agents/tools/launch.js +13 -21
- package/dist/extensions/cursor-cloud-agents/tools/list.js +8 -19
- package/dist/extensions/cursor-cloud-agents/tools/reply.js +5 -16
- package/dist/extensions/cursor-grokbot-agents/extension.js +4 -1
- package/dist/extensions/cursor-grokbot-agents/lib/agents.js +3 -3
- package/dist/extensions/cursor-grokbot-agents/lib/backend.js +53 -73
- package/dist/extensions/cursor-grokbot-agents/lib/contacts.js +10 -23
- package/dist/extensions/cursor-grokbot-agents/lib/conversation.js +112 -132
- package/dist/extensions/cursor-grokbot-agents/lib/lock.js +1 -2
- package/dist/extensions/cursor-grokbot-agents/tools/ask.js +5 -16
- package/dist/extensions/cursor-grokbot-agents/tools/check.js +4 -15
- package/dist/extensions/cursor-grokbot-agents/tools/interrupt.js +2 -13
- package/dist/extensions/cursor-grokbot-agents/tools/list.js +11 -23
- package/dist/extensions/jev/extension.js +3 -3
- package/dist/extensions/jev/lib/evaluate.js +43 -60
- package/dist/extensions/jev/tools/evaluate.js +6 -17
- package/dist/extensions/slack-communication/tools/post-file.js +1 -1
- package/dist/extensions.js +3 -5
- package/dist/files-backends/cursor-hosted.js +504 -523
- package/dist/files-backends/local-fs.js +72 -134
- package/dist/files.js +3 -3
- package/dist/filesystem.js +562 -861
- package/dist/index.js +16 -35
- package/dist/internal/advertise-tools.js +74 -86
- package/dist/internal/artifacts-store.js +298 -361
- package/dist/internal/as-of.js +2 -4
- package/dist/internal/authored-alias-hooks.js +6 -4
- package/dist/internal/authored-loaders.js +37 -52
- package/dist/internal/bounded-int.js +1 -2
- package/dist/internal/bounded.js +13 -24
- package/dist/internal/brand.js +1 -1
- package/dist/internal/browser-origin-guard.js +4 -4
- package/dist/internal/builtin-tools/artifacts.js +15 -27
- package/dist/internal/builtin-tools/index.js +2 -3
- package/dist/internal/builtin-tools/reminders.js +33 -52
- package/dist/internal/channel-architecture.d.ts +21 -0
- package/dist/internal/channel-architecture.d.ts.map +1 -0
- package/dist/internal/channel-architecture.js +41 -0
- package/dist/internal/channel-dispatch.js +3 -4
- package/dist/internal/channel-route-dispatch.js +40 -51
- package/dist/internal/channel-state.js +1 -1
- package/dist/internal/chat-client.js +319 -340
- package/dist/internal/cli-ax.js +1262 -1294
- package/dist/internal/cli-bitbucket.js +244 -272
- package/dist/internal/cli-convert-automation.js +137 -151
- package/dist/internal/cli-cursor.js +126 -147
- package/dist/internal/cli-deploy.d.ts.map +1 -1
- package/dist/internal/cli-deploy.js +1457 -1507
- package/dist/internal/cli-docs.js +130 -147
- package/dist/internal/cli-github.js +437 -476
- package/dist/internal/cli-gitlab.js +259 -288
- package/dist/internal/cli-images.js +266 -334
- package/dist/internal/cli-manifest.js +25 -37
- package/dist/internal/cli-mcp-oauth.js +228 -247
- package/dist/internal/cli-mcp.js +358 -383
- package/dist/internal/cli-migrate.js +73 -90
- package/dist/internal/cli-skills.js +35 -47
- package/dist/internal/cli-slack-manual.d.ts +0 -1
- package/dist/internal/cli-slack-manual.d.ts.map +1 -1
- package/dist/internal/cli-slack-manual.js +175 -204
- package/dist/internal/cli-slack.d.ts +1 -1
- package/dist/internal/cli-slack.d.ts.map +1 -1
- package/dist/internal/cli-slack.js +416 -456
- package/dist/internal/cloud-merge.js +7 -3
- package/dist/internal/cloud-turn-cost.js +8 -1
- package/dist/internal/connection-env.js +5 -6
- package/dist/internal/continuation-channel.js +10 -7
- package/dist/internal/continuation-identity.js +85 -67
- package/dist/internal/conversation-mirror.js +112 -131
- package/dist/internal/convert-automation/convert-workflow.js +21 -31
- package/dist/internal/cron.js +3 -3
- package/dist/internal/cursor/account-mcp.js +147 -146
- package/dist/internal/cursor/backend-client.js +290 -320
- package/dist/internal/cursor/bound-secret-file.js +3 -3
- package/dist/internal/cursor/credentials.js +127 -142
- package/dist/internal/cursor/cursor-api-transport.js +4 -8
- package/dist/internal/cursor/github-credentials.js +91 -108
- package/dist/internal/cursor/hosted-bound-secrets.js +3 -4
- package/dist/internal/cursor/hosted-deployment-secrets.js +1 -1
- package/dist/internal/cursor/hosted-store-secrets.js +5 -9
- package/dist/internal/cursor/session-token.js +36 -48
- package/dist/internal/cursor/store-api-client.js +77 -92
- package/dist/internal/cursor-account-mcp-auth.js +132 -149
- package/dist/internal/cursor-agent-template.js +1 -1
- package/dist/internal/cursor-deployment-relay.js +33 -54
- package/dist/internal/cursor-event-relay.js +65 -59
- package/dist/internal/cursor-relay-core.js +258 -286
- package/dist/internal/deferred-channel-session.js +3 -12
- package/dist/internal/deploy-client.js +410 -475
- package/dist/internal/deploy-manifest.d.ts +17 -0
- package/dist/internal/deploy-manifest.d.ts.map +1 -1
- package/dist/internal/deploy-manifest.js +71 -21
- package/dist/internal/deploy-source.js +31 -43
- package/dist/internal/discovery/agent-config.js +45 -59
- package/dist/internal/discovery/agent.js +276 -280
- package/dist/internal/discovery/channels.js +67 -80
- package/dist/internal/discovery/connections.js +286 -296
- package/dist/internal/discovery/context.js +2 -13
- package/dist/internal/discovery/cursor-plugin.js +223 -259
- package/dist/internal/discovery/extension-overlay.js +104 -131
- package/dist/internal/discovery/extensions.js +276 -281
- package/dist/internal/discovery/fs.js +56 -79
- package/dist/internal/discovery/hooks.js +39 -50
- package/dist/internal/discovery/info.js +17 -19
- package/dist/internal/discovery/instructions.js +58 -71
- package/dist/internal/discovery/modules.js +45 -58
- package/dist/internal/discovery/project.d.ts.map +1 -1
- package/dist/internal/discovery/project.js +192 -215
- package/dist/internal/discovery/reminders.js +41 -52
- package/dist/internal/discovery/runtime.js +1 -1
- package/dist/internal/discovery/schedules.js +71 -82
- package/dist/internal/discovery/seed-files.js +21 -32
- package/dist/internal/discovery/services.js +74 -96
- package/dist/internal/discovery/skills.js +77 -94
- package/dist/internal/discovery/subagent.js +79 -95
- package/dist/internal/discovery/tools.js +12 -23
- package/dist/internal/distribution.js +2 -2
- package/dist/internal/docs-site.js +30 -45
- package/dist/internal/duration.js +1 -1
- package/dist/internal/env-file.js +48 -64
- package/dist/internal/eval-judge-model.js +17 -28
- package/dist/internal/eval-run-store.js +265 -254
- package/dist/internal/eval-runner.d.ts +8 -0
- package/dist/internal/eval-runner.d.ts.map +1 -1
- package/dist/internal/eval-runner.js +406 -408
- package/dist/internal/eval-transport.d.ts +24 -0
- package/dist/internal/eval-transport.d.ts.map +1 -0
- package/dist/internal/eval-transport.js +22 -0
- package/dist/internal/evals-client.js +242 -246
- package/dist/internal/event-log.js +72 -120
- package/dist/internal/event-mapper.js +30 -31
- package/dist/internal/factory-resource-channel.js +16 -30
- package/dist/internal/filesystem/errors.js +6 -6
- package/dist/internal/filesystem/format.js +10 -13
- package/dist/internal/filesystem/merge.js +52 -94
- package/dist/internal/filesystem/nearest.js +15 -27
- package/dist/internal/filesystem/scratch.js +65 -85
- package/dist/internal/filesystem/tools.js +221 -241
- package/dist/internal/filesystem/walk.js +76 -143
- package/dist/internal/framework-file-storage.js +118 -139
- package/dist/internal/framework-storage-selection.js +21 -13
- package/dist/internal/frontmatter.js +4 -6
- package/dist/internal/github-fanout.js +50 -64
- package/dist/internal/guest-network.js +96 -109
- package/dist/internal/handleAgentServeTrigger.js +121 -126
- package/dist/internal/host-files.js +73 -88
- package/dist/internal/host-kv.js +21 -36
- package/dist/internal/host-otel.js +22 -19
- package/dist/internal/host-platforms.js +49 -63
- package/dist/internal/hosted-catch-protocol.d.ts +1 -0
- package/dist/internal/hosted-catch-protocol.d.ts.map +1 -1
- package/dist/internal/hosted-catch-protocol.js +1 -0
- package/dist/internal/hosted-catch.d.ts +5 -3
- package/dist/internal/hosted-catch.d.ts.map +1 -1
- package/dist/internal/hosted-catch.js +84 -93
- package/dist/internal/hosted-delivery-protocol.js +32 -8
- package/dist/internal/hosted-delivery.d.ts +13 -1
- package/dist/internal/hosted-delivery.d.ts.map +1 -1
- package/dist/internal/hosted-delivery.js +614 -584
- package/dist/internal/hosted-eval-cases.d.ts +21 -0
- package/dist/internal/hosted-eval-cases.d.ts.map +1 -0
- package/dist/internal/hosted-eval-cases.js +162 -0
- package/dist/internal/hosted-execution-diag.js +38 -30
- package/dist/internal/hosted-execution-flush.js +75 -66
- package/dist/internal/hosted-execution-latency.js +16 -8
- package/dist/internal/hosted-managed-automation.js +2 -2
- package/dist/internal/hosting.js +2 -3
- package/dist/internal/http-channel-define.js +4 -1
- package/dist/internal/http-channel.js +101 -112
- package/dist/internal/http-control-plane-session.d.ts +18 -1
- package/dist/internal/http-control-plane-session.d.ts.map +1 -1
- package/dist/internal/http-control-plane-session.js +66 -32
- package/dist/internal/incoming-headers-to-fetch.js +1 -2
- package/dist/internal/init-interview.js +73 -93
- package/dist/internal/init-project.js +182 -214
- package/dist/internal/init-scaffold.js +10 -21
- package/dist/internal/inline-stdio-mcp.js +80 -86
- package/dist/internal/install-cursor-skills.js +231 -273
- package/dist/internal/legacy-command-guard.js +18 -31
- package/dist/internal/listen-port.js +34 -45
- package/dist/internal/local-control-plane.js +293 -307
- package/dist/internal/local-env.js +1 -1
- package/dist/internal/local-ingress.js +15 -9
- package/dist/internal/log-ring.js +1 -2
- package/dist/internal/logs-client.js +207 -227
- package/dist/internal/map-pool.js +24 -38
- package/dist/internal/mcp-endpoint.js +204 -180
- package/dist/internal/mcp-host.js +165 -168
- package/dist/internal/mcp-oauth-on-demand.js +170 -207
- package/dist/internal/mcp-oauth-persist.js +15 -29
- package/dist/internal/mcp-oauth.js +209 -266
- package/dist/internal/named-webhook-secret.d.ts +39 -0
- package/dist/internal/named-webhook-secret.d.ts.map +1 -0
- package/dist/internal/named-webhook-secret.js +47 -0
- package/dist/internal/open-browser.js +2 -3
- package/dist/internal/otel/collector.js +104 -68
- package/dist/internal/otel/config.js +24 -37
- package/dist/internal/otel/http.js +5 -7
- package/dist/internal/otel/mcp.js +3 -12
- package/dist/internal/otel/runtime.js +69 -83
- package/dist/internal/package-inline-stdio.js +57 -65
- package/dist/internal/peer-connections.js +9 -5
- package/dist/internal/platform-schedule-sync.js +39 -54
- package/dist/internal/platform-timers.js +176 -210
- package/dist/internal/playground/static.js +1 -2
- package/dist/internal/playground/toolchain.js +37 -53
- package/dist/internal/playground-proxy.js +230 -270
- package/dist/internal/process-memory-telemetry.js +33 -51
- package/dist/internal/prompt-context.js +3 -6
- package/dist/internal/reminder-control-plane-protocol.js +46 -13
- package/dist/internal/reminder-runner.js +770 -785
- package/dist/internal/reminder-schedule.js +1 -1
- package/dist/internal/reminder-store.js +57 -78
- package/dist/internal/request-error-status.js +1 -3
- package/dist/internal/request-headers.js +2 -2
- package/dist/internal/resolve-prod-target.js +119 -135
- package/dist/internal/resolved-connections.js +16 -6
- package/dist/internal/run-client.js +221 -229
- package/dist/internal/runtime-dispatch-runner.js +18 -43
- package/dist/internal/schedule-runner.js +49 -58
- package/dist/internal/scm/pr-url.js +7 -6
- package/dist/internal/sdk-runner.js +388 -363
- package/dist/internal/serve-restart.js +26 -39
- package/dist/internal/server.d.ts.map +1 -1
- package/dist/internal/server.js +1283 -1244
- package/dist/internal/session-cost.js +7 -9
- package/dist/internal/session-engine.d.ts +3 -1
- package/dist/internal/session-engine.d.ts.map +1 -1
- package/dist/internal/session-engine.js +2801 -2777
- package/dist/internal/session-links.js +12 -16
- package/dist/internal/session-run-log.js +134 -82
- package/dist/internal/session-store.js +133 -164
- package/dist/internal/sessions-client.js +97 -118
- package/dist/internal/skill-catalog.js +18 -23
- package/dist/internal/skills-sync.js +16 -30
- package/dist/internal/slack-provision-client.js +90 -116
- package/dist/internal/start-log-store.js +48 -67
- package/dist/internal/steering.js +1 -2
- package/dist/internal/storage-coordinator.js +160 -196
- package/dist/internal/store-mirror.js +16 -30
- package/dist/internal/stream-progress.js +6 -8
- package/dist/internal/terminal-style.js +3 -4
- package/dist/internal/testing/scm-continuation-fixtures.js +6 -2
- package/dist/internal/testing/slack-continuation-fixtures.d.ts +26 -0
- package/dist/internal/testing/slack-continuation-fixtures.d.ts.map +1 -0
- package/dist/internal/testing/slack-continuation-fixtures.js +136 -0
- package/dist/internal/tool-catalog.js +11 -5
- package/dist/internal/tool-result.js +1 -1
- package/dist/internal/trajectory.js +19 -22
- package/dist/internal/turn-cost.js +52 -62
- package/dist/internal/turn-governor.js +5 -8
- package/dist/internal/turn-lease-store.js +85 -105
- package/dist/internal/turn-outbox.js +28 -43
- package/dist/internal/update-check.js +231 -259
- package/dist/internal/v2-hosting.js +1 -2
- package/dist/internal/workspace-sync.js +25 -41
- package/dist/internal/workspace.js +111 -139
- package/dist/kv/memory-kv.js +27 -51
- package/dist/memory.js +106 -148
- package/dist/otel.js +5 -8
- package/dist/playground/assets/index-DXm_VXAQ.css +1 -0
- package/dist/playground/assets/{index-Co4CUVTQ.js → index-JekUQERK.js} +45 -45
- package/dist/playground/index.html +2 -2
- package/dist/prompt.js +2 -4
- package/dist/storage-backends/cursor-hosted-v2.js +53 -83
- package/dist/storage-backends/cursor-hosted.js +105 -145
- package/dist/storage-backends/file-kv.js +100 -128
- package/dist/storage-protocol.js +3 -5
- package/dist/storage.js +17 -26
- package/dist/types.d.ts +68 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +20 -18
- package/docs/building-with-agents.md +2 -0
- package/docs/deployment.md +7 -0
- package/docs/guides/bitbucket.md +9 -1
- package/docs/guides/github.md +20 -4
- package/docs/guides/gitlab.md +9 -1
- package/docs/guides/migrate.md +127 -0
- package/docs/reference/cli.md +39 -0
- package/docs/troubleshooting.md +1 -0
- package/package.json +1 -1
- package/skills/debug/SKILL.md +1 -0
- package/skills/github/SKILL.md +23 -0
- package/skills/migrate-v2/SKILL.md +51 -10
- package/dist/docs/assets/chunks/@localSearchIndexroot.BJ8UZggu.js +0 -1
- package/dist/docs/assets/chunks/channel.BTJ5J9FI.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.D4BZ3cVV.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.D4BZ3cVV.js +0 -1
- package/dist/docs/assets/chunks/clone.62tX-O-1.js +0 -1
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.DkTs1aEU.js +0 -1
- package/dist/docs/assets/reference_cli.md.GwugN3n-.lean.js +0 -1
- package/dist/docs/assets/troubleshooting.md.Bscj6ODe.js +0 -1
- package/dist/playground/assets/index-C1g_PTTZ.css +0 -1
- /package/dist/docs/assets/{building-with-agents.md.BPjPFxFg.lean.js → building-with-agents.md.Df87rAe1.lean.js} +0 -0
- /package/dist/docs/assets/{deployment.md.BdqTiGdc.lean.js → deployment.md.BYuEcDBv.lean.js} +0 -0
- /package/dist/docs/assets/{reference_skills.md.ClkMoQsV.lean.js → reference_skills.md.C0guGcH0.lean.js} +0 -0
|
@@ -20,15 +20,6 @@
|
|
|
20
20
|
* `agent-serve` allowlist grants team-namespace read/write, so there is no
|
|
21
21
|
* app-installation token exchange for managed deployments.
|
|
22
22
|
*/
|
|
23
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
24
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
25
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
26
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
27
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
28
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
29
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
30
|
-
});
|
|
31
|
-
};
|
|
32
23
|
import { Buffer } from "node:buffer";
|
|
33
24
|
import { createPrivateKey, sign } from "node:crypto";
|
|
34
25
|
import { cursorBackendUrl, resolveApiKeySync } from "../../internal/cursor/credentials.js";
|
|
@@ -52,7 +43,7 @@ const ORIGIN_APP_TOKEN_AUDIENCE = "origin-apps";
|
|
|
52
43
|
const APP_JWT_TTL_SECONDS = 5 * 60;
|
|
53
44
|
/** Re-mint the `oit_` token after this long; tokens outlive it comfortably. */
|
|
54
45
|
const TOKEN_REUSE_MS = 4 * 60 * 1000;
|
|
55
|
-
const TOKEN_EXCHANGE_TIMEOUT_MS =
|
|
46
|
+
const TOKEN_EXCHANGE_TIMEOUT_MS = 30_000;
|
|
56
47
|
/** Normalized Origin REST failure — the `GitHubApiError` analogue. */
|
|
57
48
|
export class OriginApiError extends Error {
|
|
58
49
|
constructor(input) {
|
|
@@ -66,18 +57,17 @@ export class OriginApiError extends Error {
|
|
|
66
57
|
}
|
|
67
58
|
/** Vault/env round-trip: literal `\n` sequences appear in practice. */
|
|
68
59
|
function normalizePrivateKeyPem(raw) {
|
|
69
|
-
const pem = raw
|
|
60
|
+
const pem = raw?.trim().replace(/\\n/g, "\n");
|
|
70
61
|
return pem === undefined || pem === "" ? undefined : pem;
|
|
71
62
|
}
|
|
72
63
|
function envValue(value) {
|
|
73
|
-
const trimmed = value
|
|
64
|
+
const trimmed = value?.trim();
|
|
74
65
|
return trimmed === undefined || trimmed === "" ? undefined : trimmed;
|
|
75
66
|
}
|
|
76
67
|
/** Each Origin app credential field found in the environment, when set. */
|
|
77
68
|
export function resolveOriginAppCredentialParts(env = process.env) {
|
|
78
|
-
var _a;
|
|
79
69
|
return {
|
|
80
|
-
appId:
|
|
70
|
+
appId: envValue(env.ORIGIN_APP_ID) ?? envValue(env.AGENT_SERVE_ORIGIN_APP_ID),
|
|
81
71
|
installationId: envValue(env.ORIGIN_APP_INSTALLATION_ID),
|
|
82
72
|
privateKey: normalizePrivateKeyPem(env.ORIGIN_APP_PRIVATE_KEY),
|
|
83
73
|
};
|
|
@@ -96,15 +86,13 @@ export function resolveOriginAppCredentials(env = process.env) {
|
|
|
96
86
|
}
|
|
97
87
|
/** Public Origin REST base. Trailing slashes are stripped for path joins. */
|
|
98
88
|
export function originPublicApiBaseUrl(env = process.env) {
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
return fromEnv !== null && fromEnv !== void 0 ? fromEnv : DEFAULT_ORIGIN_PUBLIC_API_BASE_URL;
|
|
89
|
+
const fromEnv = envValue(env.ORIGIN_API_BASE_URL)?.replace(/\/+$/, "");
|
|
90
|
+
return fromEnv ?? DEFAULT_ORIGIN_PUBLIC_API_BASE_URL;
|
|
102
91
|
}
|
|
103
92
|
/** Origin ConnectRPC base. Trailing slashes are stripped for path joins. */
|
|
104
93
|
export function originRpcBaseUrl(env = process.env) {
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
return fromEnv !== null && fromEnv !== void 0 ? fromEnv : DEFAULT_ORIGIN_RPC_BASE_URL;
|
|
94
|
+
const fromEnv = envValue(env.ORIGIN_RPC_BASE_URL)?.replace(/\/+$/, "");
|
|
95
|
+
return fromEnv ?? DEFAULT_ORIGIN_RPC_BASE_URL;
|
|
108
96
|
}
|
|
109
97
|
function base64UrlJson(value) {
|
|
110
98
|
return Buffer.from(JSON.stringify(value)).toString("base64url");
|
|
@@ -127,30 +115,28 @@ function mintOriginAppJwt(credentials, nowMs) {
|
|
|
127
115
|
const signature = sign(null, Buffer.from(signingInput), key).toString("base64url");
|
|
128
116
|
return `${signingInput}.${signature}`;
|
|
129
117
|
}
|
|
130
|
-
function mintOriginInstallationToken(input) {
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
118
|
+
async function mintOriginInstallationToken(input) {
|
|
119
|
+
const jwt = mintOriginAppJwt(input.credentials, input.nowMs);
|
|
120
|
+
const path = `/v1/origin/app/installations/${encodeURIComponent(input.credentials.installationId)}/access_tokens`;
|
|
121
|
+
const response = await input.fetchImpl(`${input.apiBaseUrl}${path}`, {
|
|
122
|
+
method: "POST",
|
|
123
|
+
headers: { authorization: `Bearer ${jwt}` },
|
|
124
|
+
signal: AbortSignal.timeout(TOKEN_EXCHANGE_TIMEOUT_MS),
|
|
125
|
+
});
|
|
126
|
+
const body = await response.json().catch(() => undefined);
|
|
127
|
+
const token = typeof body === "object" && body !== null && !Array.isArray(body)
|
|
128
|
+
? body.token
|
|
129
|
+
: undefined;
|
|
130
|
+
if (!response.ok || typeof token !== "string" || token === "") {
|
|
131
|
+
// Never echo the body: on success it contains the installation token.
|
|
132
|
+
throw new OriginApiError({
|
|
133
|
+
body: undefined,
|
|
135
134
|
method: "POST",
|
|
136
|
-
|
|
137
|
-
|
|
135
|
+
path,
|
|
136
|
+
status: response.status,
|
|
138
137
|
});
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
? body.token
|
|
142
|
-
: undefined;
|
|
143
|
-
if (!response.ok || typeof token !== "string" || token === "") {
|
|
144
|
-
// Never echo the body: on success it contains the installation token.
|
|
145
|
-
throw new OriginApiError({
|
|
146
|
-
body: undefined,
|
|
147
|
-
method: "POST",
|
|
148
|
-
path,
|
|
149
|
-
status: response.status,
|
|
150
|
-
});
|
|
151
|
-
}
|
|
152
|
-
return token;
|
|
153
|
-
});
|
|
138
|
+
}
|
|
139
|
+
return token;
|
|
154
140
|
}
|
|
155
141
|
/**
|
|
156
142
|
* Exchange endpoint for Cursor-account session tokens. Override with
|
|
@@ -193,17 +179,16 @@ export function _clearCursorSessionTokenCacheForTesting() {
|
|
|
193
179
|
cursorSessionTokenInFlight.clear();
|
|
194
180
|
}
|
|
195
181
|
export function cursorSessionTokenProvider(input) {
|
|
196
|
-
|
|
197
|
-
const
|
|
198
|
-
const
|
|
199
|
-
const now = (_c = input === null || input === void 0 ? void 0 : input.now) !== null && _c !== void 0 ? _c : Date.now;
|
|
182
|
+
const getApiKey = input?.getApiKey ?? (() => resolveApiKeySync()?.apiKey);
|
|
183
|
+
const fetchImpl = input?.fetch ?? fetch;
|
|
184
|
+
const now = input?.now ?? Date.now;
|
|
200
185
|
const cacheKey = (url, apiKey) => `${url}\u0000${apiKey}`;
|
|
201
|
-
const resolveUrl = () =>
|
|
202
|
-
const mint = (url, apiKey) =>
|
|
186
|
+
const resolveUrl = () => input?.exchangeUrl ?? resolveCursorSessionExchangeUrl();
|
|
187
|
+
const mint = async (url, apiKey) => {
|
|
203
188
|
const nowMs = now();
|
|
204
189
|
let session;
|
|
205
190
|
try {
|
|
206
|
-
session =
|
|
191
|
+
session = await exchangeCursorApiKeyForSession({
|
|
207
192
|
exchangeUrl: url,
|
|
208
193
|
apiKey,
|
|
209
194
|
fetchImpl,
|
|
@@ -213,14 +198,14 @@ export function cursorSessionTokenProvider(input) {
|
|
|
213
198
|
catch (error) {
|
|
214
199
|
throw new Error(`originClient: ${error instanceof Error ? error.message : String(error)} Check CURSOR_API_KEY / CURSOR_API_KEY_FILE, or pass an explicit token.`);
|
|
215
200
|
}
|
|
216
|
-
const renewAtMs = Math.max(nowMs +
|
|
201
|
+
const renewAtMs = Math.max(nowMs + 1_000, session.expiresAtMs - SESSION_TOKEN_EXPIRY_LEEWAY_MS);
|
|
217
202
|
cursorSessionTokenCache.set(cacheKey(url, apiKey), {
|
|
218
203
|
token: session.token,
|
|
219
204
|
renewAtMs,
|
|
220
205
|
});
|
|
221
206
|
return session.token;
|
|
222
|
-
}
|
|
223
|
-
const provider = () =>
|
|
207
|
+
};
|
|
208
|
+
const provider = async () => {
|
|
224
209
|
const apiKey = getApiKey();
|
|
225
210
|
if (apiKey === undefined || apiKey === "") {
|
|
226
211
|
throw new Error("originClient: no Cursor credential available for the session exchange (set CURSOR_API_KEY or CURSOR_API_KEY_FILE).");
|
|
@@ -234,24 +219,23 @@ export function cursorSessionTokenProvider(input) {
|
|
|
234
219
|
// Dedupe concurrent first calls: one exchange per (endpoint, key).
|
|
235
220
|
const inFlight = cursorSessionTokenInFlight.get(key);
|
|
236
221
|
if (inFlight !== undefined) {
|
|
237
|
-
return
|
|
222
|
+
return await inFlight;
|
|
238
223
|
}
|
|
239
224
|
const pending = mint(url, apiKey).finally(() => {
|
|
240
225
|
cursorSessionTokenInFlight.delete(key);
|
|
241
226
|
});
|
|
242
227
|
cursorSessionTokenInFlight.set(key, pending);
|
|
243
|
-
return
|
|
244
|
-
}
|
|
228
|
+
return await pending;
|
|
229
|
+
};
|
|
245
230
|
// Origin answered 401 for this bearer: drop it (unless a newer session
|
|
246
231
|
// already replaced it) so the next call re-exchanges immediately.
|
|
247
232
|
const invalidate = (token) => {
|
|
248
|
-
var _a;
|
|
249
233
|
const apiKey = getApiKey();
|
|
250
234
|
if (apiKey === undefined || apiKey === "") {
|
|
251
235
|
return;
|
|
252
236
|
}
|
|
253
237
|
const key = cacheKey(resolveUrl(), apiKey);
|
|
254
|
-
if (
|
|
238
|
+
if (cursorSessionTokenCache.get(key)?.token === token) {
|
|
255
239
|
cursorSessionTokenCache.delete(key);
|
|
256
240
|
}
|
|
257
241
|
};
|
|
@@ -263,17 +247,16 @@ export function cursorSessionTokenProvider(input) {
|
|
|
263
247
|
* re-mints.
|
|
264
248
|
*/
|
|
265
249
|
export function originAppTokenProvider(input) {
|
|
266
|
-
|
|
267
|
-
const
|
|
268
|
-
const
|
|
269
|
-
const now = (_c = input.now) !== null && _c !== void 0 ? _c : Date.now;
|
|
250
|
+
const apiBaseUrl = input.apiBaseUrl ?? originPublicApiBaseUrl();
|
|
251
|
+
const fetchImpl = input.fetch ?? fetch;
|
|
252
|
+
const now = input.now ?? Date.now;
|
|
270
253
|
let cached;
|
|
271
|
-
return () =>
|
|
254
|
+
return async () => {
|
|
272
255
|
const nowMs = now();
|
|
273
256
|
if (cached !== undefined && nowMs - cached.mintedAtMs < TOKEN_REUSE_MS) {
|
|
274
257
|
return cached.token;
|
|
275
258
|
}
|
|
276
|
-
const token =
|
|
259
|
+
const token = await mintOriginInstallationToken({
|
|
277
260
|
credentials: input.credentials,
|
|
278
261
|
apiBaseUrl,
|
|
279
262
|
fetchImpl,
|
|
@@ -281,7 +264,7 @@ export function originAppTokenProvider(input) {
|
|
|
281
264
|
});
|
|
282
265
|
cached = { token, mintedAtMs: nowMs };
|
|
283
266
|
return token;
|
|
284
|
-
}
|
|
267
|
+
};
|
|
285
268
|
}
|
|
286
269
|
/**
|
|
287
270
|
* Build an authenticated Origin REST client. Auth resolution: explicit
|
|
@@ -292,29 +275,27 @@ export function originAppTokenProvider(input) {
|
|
|
292
275
|
* request with a clear message.
|
|
293
276
|
*/
|
|
294
277
|
export function createOriginClient(options = {}) {
|
|
295
|
-
|
|
296
|
-
const
|
|
297
|
-
const fetchImpl = (_b = options.fetch) !== null && _b !== void 0 ? _b : fetch;
|
|
278
|
+
const apiBaseUrl = (options.apiBaseUrl ?? originPublicApiBaseUrl()).replace(/\/+$/, "");
|
|
279
|
+
const fetchImpl = options.fetch ?? fetch;
|
|
298
280
|
let tokenProvider;
|
|
299
281
|
// Set when the session-exchange fallback is engaged: a 401 from Origin
|
|
300
282
|
// invalidates the cached session and retries once with a fresh one, the
|
|
301
283
|
// `CursorBackendClient` re-exchange behavior.
|
|
302
284
|
let sessionProvider;
|
|
303
|
-
const getToken = () =>
|
|
304
|
-
var _a, _b, _c, _d;
|
|
285
|
+
const getToken = async () => {
|
|
305
286
|
if (typeof options.token === "string") {
|
|
306
287
|
return options.token;
|
|
307
288
|
}
|
|
308
289
|
if (typeof options.token === "function") {
|
|
309
|
-
return
|
|
290
|
+
return await options.token();
|
|
310
291
|
}
|
|
311
292
|
if (tokenProvider === undefined) {
|
|
312
293
|
const credentials = options.credentials === false
|
|
313
294
|
? undefined
|
|
314
|
-
: (
|
|
315
|
-
const exchange =
|
|
295
|
+
: (options.credentials ?? resolveOriginAppCredentials());
|
|
296
|
+
const exchange = options.cursorAccountExchange ?? true;
|
|
316
297
|
const exchangeOptions = exchange === false ? undefined : exchange === true ? {} : exchange;
|
|
317
|
-
const getExchangeApiKey =
|
|
298
|
+
const getExchangeApiKey = exchangeOptions?.getApiKey ?? (() => resolveApiKeySync()?.apiKey);
|
|
318
299
|
if (credentials !== undefined) {
|
|
319
300
|
tokenProvider = originAppTokenProvider({
|
|
320
301
|
credentials,
|
|
@@ -322,58 +303,61 @@ export function createOriginClient(options = {}) {
|
|
|
322
303
|
fetch: fetchImpl,
|
|
323
304
|
});
|
|
324
305
|
}
|
|
325
|
-
else if (exchangeOptions !== undefined && (
|
|
326
|
-
sessionProvider = cursorSessionTokenProvider(
|
|
327
|
-
|
|
328
|
-
:
|
|
306
|
+
else if (exchangeOptions !== undefined && (getExchangeApiKey() ?? "") !== "") {
|
|
307
|
+
sessionProvider = cursorSessionTokenProvider({
|
|
308
|
+
fetch: fetchImpl,
|
|
309
|
+
getApiKey: getExchangeApiKey,
|
|
310
|
+
...(exchangeOptions.exchangeUrl === undefined
|
|
311
|
+
? {}
|
|
312
|
+
: { exchangeUrl: exchangeOptions.exchangeUrl }),
|
|
313
|
+
});
|
|
329
314
|
tokenProvider = sessionProvider;
|
|
330
315
|
}
|
|
331
316
|
else {
|
|
332
317
|
throw new Error("originClient: no Origin credential available (pass token / credentials, set ORIGIN_APP_ID + ORIGIN_APP_INSTALLATION_ID + ORIGIN_APP_PRIVATE_KEY, or sign in with a Cursor credential for the session exchange).");
|
|
333
318
|
}
|
|
334
319
|
}
|
|
335
|
-
return
|
|
336
|
-
}
|
|
337
|
-
const send = (input, path, token) =>
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
}
|
|
320
|
+
return await tokenProvider();
|
|
321
|
+
};
|
|
322
|
+
const send = async (input, path, token) => await fetchImpl(`${apiBaseUrl}${path}`, {
|
|
323
|
+
method: input.method,
|
|
324
|
+
headers: {
|
|
325
|
+
authorization: `Bearer ${token}`,
|
|
326
|
+
...(input.body === undefined ? {} : { "content-type": "application/json" }),
|
|
327
|
+
},
|
|
328
|
+
body: input.body === undefined ? undefined : JSON.stringify(input.body),
|
|
343
329
|
});
|
|
344
330
|
return {
|
|
345
331
|
apiBaseUrl,
|
|
346
|
-
request(input) {
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
return parsed;
|
|
376
|
-
});
|
|
332
|
+
async request(input) {
|
|
333
|
+
const path = input.path.startsWith("/") ? input.path : `/${input.path}`;
|
|
334
|
+
const token = await getToken();
|
|
335
|
+
let response = await send(input, path, token);
|
|
336
|
+
if (response.status === 401 && sessionProvider !== undefined) {
|
|
337
|
+
// The session aged out server-side. Drop it — unless a concurrent
|
|
338
|
+
// retry already minted a newer one — and retry once.
|
|
339
|
+
await response.text().catch(() => undefined);
|
|
340
|
+
sessionProvider.invalidate(token);
|
|
341
|
+
const retryToken = await getToken();
|
|
342
|
+
response = await send(input, path, retryToken);
|
|
343
|
+
}
|
|
344
|
+
const text = await response.text();
|
|
345
|
+
let parsed;
|
|
346
|
+
try {
|
|
347
|
+
parsed = text === "" ? undefined : JSON.parse(text);
|
|
348
|
+
}
|
|
349
|
+
catch {
|
|
350
|
+
parsed = text;
|
|
351
|
+
}
|
|
352
|
+
if (!response.ok) {
|
|
353
|
+
throw new OriginApiError({
|
|
354
|
+
body: parsed,
|
|
355
|
+
method: input.method,
|
|
356
|
+
path,
|
|
357
|
+
status: response.status,
|
|
358
|
+
});
|
|
359
|
+
}
|
|
360
|
+
return parsed;
|
|
377
361
|
},
|
|
378
362
|
};
|
|
379
363
|
}
|
|
@@ -12,20 +12,16 @@ import { createOriginClient, originRpcBaseUrl, resolveOriginAppCredentialParts,
|
|
|
12
12
|
import { createOriginCheck } from "./checks.js";
|
|
13
13
|
import { setOriginCommentReaction } from "./reactions.js";
|
|
14
14
|
export function buildOriginBinding(input) {
|
|
15
|
-
var _a;
|
|
16
|
-
var _b;
|
|
17
15
|
const buildClient = (apiBaseUrl) => {
|
|
18
|
-
var _a, _b, _c, _d;
|
|
19
|
-
var _e, _f, _g, _h;
|
|
20
16
|
const fromEnv = input.cursorAccount ? {} : resolveOriginAppCredentialParts();
|
|
21
|
-
const appId =
|
|
22
|
-
const installationId =
|
|
23
|
-
const privateKey =
|
|
17
|
+
const appId = input.app?.appId ?? fromEnv.appId;
|
|
18
|
+
const installationId = input.app?.installationId ?? input.installationId ?? fromEnv.installationId;
|
|
19
|
+
const privateKey = input.app?.privateKey ?? fromEnv.privateKey;
|
|
24
20
|
const credentials = appId !== undefined && installationId !== undefined && privateKey !== undefined
|
|
25
21
|
? { appId, installationId, privateKey }
|
|
26
22
|
: undefined;
|
|
27
23
|
return createOriginClient({
|
|
28
|
-
token: input.cursorAccount ? undefined :
|
|
24
|
+
token: input.cursorAccount ? undefined : input.app?.token,
|
|
29
25
|
credentials: input.cursorAccount ? false : credentials,
|
|
30
26
|
apiBaseUrl,
|
|
31
27
|
fetch: input.fetch,
|
|
@@ -36,22 +32,25 @@ export function buildOriginBinding(input) {
|
|
|
36
32
|
// neither needs no credential.
|
|
37
33
|
let restClient;
|
|
38
34
|
const getRestClient = () => {
|
|
39
|
-
|
|
40
|
-
restClient !== null && restClient !== void 0 ? restClient : (restClient = buildClient((_a = input.app) === null || _a === void 0 ? void 0 : _a.apiBaseUrl));
|
|
35
|
+
restClient ??= buildClient(input.app?.apiBaseUrl);
|
|
41
36
|
return restClient;
|
|
42
37
|
};
|
|
43
38
|
let rpcClient;
|
|
44
39
|
const getRpcClient = () => {
|
|
45
|
-
|
|
46
|
-
var _b;
|
|
47
|
-
rpcClient !== null && rpcClient !== void 0 ? rpcClient : (rpcClient = buildClient((_b = (_a = input.app) === null || _a === void 0 ? void 0 : _a.rpcBaseUrl) !== null && _b !== void 0 ? _b : originRpcBaseUrl()));
|
|
40
|
+
rpcClient ??= buildClient(input.app?.rpcBaseUrl ?? originRpcBaseUrl());
|
|
48
41
|
return rpcClient;
|
|
49
42
|
};
|
|
50
43
|
return {
|
|
51
|
-
installationId:
|
|
44
|
+
installationId: input.app?.installationId ?? input.installationId,
|
|
52
45
|
repository: input.repository,
|
|
53
46
|
request: request => getRestClient().request(request),
|
|
54
|
-
createCheck: check =>
|
|
55
|
-
|
|
47
|
+
createCheck: check => createOriginCheck({
|
|
48
|
+
...check,
|
|
49
|
+
executionId: check.executionId ?? input.executionId,
|
|
50
|
+
origin: getRestClient(),
|
|
51
|
+
owner: input.repository.owner,
|
|
52
|
+
repo: input.repository.name,
|
|
53
|
+
}),
|
|
54
|
+
reactToComment: reaction => setOriginCommentReaction({ ...reaction, origin: getRpcClient() }),
|
|
56
55
|
};
|
|
57
56
|
}
|
|
@@ -16,15 +16,6 @@
|
|
|
16
16
|
* `request()` (`ctx.origin`, `createOriginClient()`), and is also reachable
|
|
17
17
|
* as `ctx.origin.createCheck(...)`. API failures throw `OriginApiError`.
|
|
18
18
|
*/
|
|
19
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
20
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
21
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
22
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
23
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
24
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
25
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
26
|
-
});
|
|
27
|
-
};
|
|
28
19
|
import { randomUUID } from "node:crypto";
|
|
29
20
|
import { openCiCheck, resumeCiCheck, } from "../checks.js";
|
|
30
21
|
/**
|
|
@@ -33,7 +24,7 @@ import { openCiCheck, resumeCiCheck, } from "../checks.js";
|
|
|
33
24
|
* risking a lost check write.
|
|
34
25
|
*/
|
|
35
26
|
const OUTPUT_TITLE_MAX_CHARS = 255;
|
|
36
|
-
const OUTPUT_BODY_MAX_BYTES =
|
|
27
|
+
const OUTPUT_BODY_MAX_BYTES = 65_000;
|
|
37
28
|
/** Truncate to at most `maxBytes` UTF-8 bytes without severing a character. */
|
|
38
29
|
function capUtf8Bytes(text, maxBytes) {
|
|
39
30
|
const encoded = new TextEncoder().encode(text);
|
|
@@ -48,9 +39,13 @@ function cappedOutput(output) {
|
|
|
48
39
|
if (output === undefined) {
|
|
49
40
|
return undefined;
|
|
50
41
|
}
|
|
51
|
-
return
|
|
52
|
-
|
|
53
|
-
:
|
|
42
|
+
return {
|
|
43
|
+
title: output.title.slice(0, OUTPUT_TITLE_MAX_CHARS),
|
|
44
|
+
summary: capUtf8Bytes(output.summary, OUTPUT_BODY_MAX_BYTES),
|
|
45
|
+
...(output.text === undefined
|
|
46
|
+
? {}
|
|
47
|
+
: { text: capUtf8Bytes(output.text, OUTPUT_BODY_MAX_BYTES) }),
|
|
48
|
+
};
|
|
54
49
|
}
|
|
55
50
|
/** Derive a stable check key from a display name, e.g. `cursor-security-review`. */
|
|
56
51
|
export function originCheckKeyFromName(name) {
|
|
@@ -66,24 +61,26 @@ export function originCheckKeyFromName(name) {
|
|
|
66
61
|
* status so an output-only update cannot regress a running check to queued.
|
|
67
62
|
*/
|
|
68
63
|
function originCheckWriter(input) {
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
const
|
|
72
|
-
|
|
73
|
-
const externalId = (_d = input.externalId) !== null && _d !== void 0 ? _d : `agent-serve:${suiteKey}:${key}:${input.sha}:${(_e = input.executionId) !== null && _e !== void 0 ? _e : randomUUID()}`;
|
|
64
|
+
const key = input.key ?? originCheckKeyFromName(input.name);
|
|
65
|
+
const suiteKey = input.suite?.key ?? key;
|
|
66
|
+
const externalId = input.externalId ??
|
|
67
|
+
`agent-serve:${suiteKey}:${key}:${input.sha}:${input.executionId ?? randomUUID()}`;
|
|
74
68
|
const path = `/v1/origin/repos/${encodeURIComponent(input.owner)}/${encodeURIComponent(input.repo)}/check-runs`;
|
|
75
|
-
let lastStatus =
|
|
76
|
-
return (write) =>
|
|
77
|
-
|
|
78
|
-
var _d, _e;
|
|
79
|
-
const status = (_d = write.status) !== null && _d !== void 0 ? _d : (write.conclusion === undefined ? lastStatus : "completed");
|
|
69
|
+
let lastStatus = input.status ?? "in_progress";
|
|
70
|
+
return async (write) => {
|
|
71
|
+
const status = write.status ?? (write.conclusion === undefined ? lastStatus : "completed");
|
|
80
72
|
lastStatus = status;
|
|
81
|
-
const response =
|
|
73
|
+
const response = await input.origin.request({
|
|
82
74
|
method: "POST",
|
|
83
75
|
path,
|
|
84
76
|
body: {
|
|
85
77
|
headSha: input.sha,
|
|
86
|
-
checkSuite:
|
|
78
|
+
checkSuite: {
|
|
79
|
+
key: suiteKey,
|
|
80
|
+
name: input.suite?.name ?? input.name,
|
|
81
|
+
externalId: `agent-serve:${suiteKey}`,
|
|
82
|
+
...(input.suite?.detailsUrl === undefined ? {} : { detailsUrl: input.suite.detailsUrl }),
|
|
83
|
+
},
|
|
87
84
|
checkRun: {
|
|
88
85
|
key,
|
|
89
86
|
name: input.name,
|
|
@@ -100,9 +97,9 @@ function originCheckWriter(input) {
|
|
|
100
97
|
},
|
|
101
98
|
},
|
|
102
99
|
});
|
|
103
|
-
const id =
|
|
100
|
+
const id = response?.checkRun?.id;
|
|
104
101
|
return typeof id === "string" ? { id } : undefined;
|
|
105
|
-
}
|
|
102
|
+
};
|
|
106
103
|
}
|
|
107
104
|
/**
|
|
108
105
|
* Create a CI check run on a commit and return a handle for later updates.
|
|
@@ -140,6 +137,11 @@ export function resumeOriginCheck(input) {
|
|
|
140
137
|
*/
|
|
141
138
|
export function bindOriginChecks(input) {
|
|
142
139
|
return {
|
|
143
|
-
createCheck: check => createOriginCheck(
|
|
140
|
+
createCheck: check => createOriginCheck({
|
|
141
|
+
...check,
|
|
142
|
+
origin: input.origin,
|
|
143
|
+
owner: input.owner,
|
|
144
|
+
repo: input.repo,
|
|
145
|
+
}),
|
|
144
146
|
};
|
|
145
147
|
}
|