@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
|
@@ -1,12 +1,3 @@
|
|
|
1
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
-
});
|
|
9
|
-
};
|
|
10
1
|
import { z } from "zod";
|
|
11
2
|
import { allowAll, defineChannel, localDevStrict, loopbackOnly, POST } from "../../channels.js";
|
|
12
3
|
import { acknowledgeTask, isTaskDispatch, skipped, turnStarted, withPropagatingBackgroundErrors, } from "../../internal/channel-dispatch.js";
|
|
@@ -60,7 +51,7 @@ function originActor(value) {
|
|
|
60
51
|
["service_account", asRecord(record.serviceAccount)],
|
|
61
52
|
];
|
|
62
53
|
for (const [kind, actor] of nestedActors) {
|
|
63
|
-
const id = asNonEmptyString(actor
|
|
54
|
+
const id = asNonEmptyString(actor?.id);
|
|
64
55
|
if (id !== undefined) {
|
|
65
56
|
return { id, kind };
|
|
66
57
|
}
|
|
@@ -72,16 +63,14 @@ function originActor(value) {
|
|
|
72
63
|
return kind === undefined ? { id } : { id, kind };
|
|
73
64
|
}
|
|
74
65
|
function originHeaders(request) {
|
|
75
|
-
var _a, _b, _c;
|
|
76
66
|
return {
|
|
77
|
-
"webhook-id":
|
|
78
|
-
"webhook-timestamp":
|
|
79
|
-
"webhook-signature":
|
|
67
|
+
"webhook-id": request.headers.get("webhook-id") ?? undefined,
|
|
68
|
+
"webhook-timestamp": request.headers.get("webhook-timestamp") ?? undefined,
|
|
69
|
+
"webhook-signature": request.headers.get("webhook-signature") ?? undefined,
|
|
80
70
|
};
|
|
81
71
|
}
|
|
82
72
|
function skipOriginVerify() {
|
|
83
|
-
|
|
84
|
-
return ((_a = process.env.AGENT_SERVE_ORIGIN_SKIP_VERIFY) === null || _a === void 0 ? void 0 : _a.trim()) === "1";
|
|
73
|
+
return process.env.AGENT_SERVE_ORIGIN_SKIP_VERIFY?.trim() === "1";
|
|
85
74
|
}
|
|
86
75
|
/**
|
|
87
76
|
* Direct Origin HTTP deliveries verify v1ed. `--dev` and
|
|
@@ -99,8 +88,7 @@ function asIdList(value) {
|
|
|
99
88
|
}
|
|
100
89
|
/** `AGENT_SERVE_ORIGIN_APP_ID` fallback for {@link OriginChannelOptions.appId}. */
|
|
101
90
|
export function envOriginAppId() {
|
|
102
|
-
|
|
103
|
-
const value = (_a = process.env.AGENT_SERVE_ORIGIN_APP_ID) === null || _a === void 0 ? void 0 : _a.trim();
|
|
91
|
+
const value = process.env.AGENT_SERVE_ORIGIN_APP_ID?.trim();
|
|
104
92
|
return value === undefined || value === "" ? undefined : value;
|
|
105
93
|
}
|
|
106
94
|
function configuredOriginAppIds(options) {
|
|
@@ -134,12 +122,11 @@ function configuredOriginRepoAllowlist(options) {
|
|
|
134
122
|
* webhook-secret analogue). Cursor-internal documents the same gap.
|
|
135
123
|
*/
|
|
136
124
|
function originHttpBindingError(options, envelope) {
|
|
137
|
-
var _a, _b;
|
|
138
125
|
const allowedApps = configuredOriginAppIds(options);
|
|
139
126
|
if (allowedApps.length === 0) {
|
|
140
127
|
return "unbound_origin_app";
|
|
141
128
|
}
|
|
142
|
-
const deliveredAppId =
|
|
129
|
+
const deliveredAppId = envelope.appId?.trim();
|
|
143
130
|
if (deliveredAppId === undefined || deliveredAppId === "") {
|
|
144
131
|
return "invalid_app";
|
|
145
132
|
}
|
|
@@ -150,7 +137,7 @@ function originHttpBindingError(options, envelope) {
|
|
|
150
137
|
if (allowedInstalls.length === 0) {
|
|
151
138
|
return undefined;
|
|
152
139
|
}
|
|
153
|
-
const deliveredInstallationId =
|
|
140
|
+
const deliveredInstallationId = envelope.installationId?.trim();
|
|
154
141
|
if (deliveredInstallationId === undefined ||
|
|
155
142
|
deliveredInstallationId === "" ||
|
|
156
143
|
!allowedInstalls.includes(deliveredInstallationId)) {
|
|
@@ -160,7 +147,7 @@ function originHttpBindingError(options, envelope) {
|
|
|
160
147
|
}
|
|
161
148
|
function resolveApiBaseUrl(options) {
|
|
162
149
|
const authored = typeof options.apiBaseUrl === "function" ? options.apiBaseUrl() : options.apiBaseUrl;
|
|
163
|
-
const trimmed = authored
|
|
150
|
+
const trimmed = authored?.trim();
|
|
164
151
|
return trimmed === undefined || trimmed === "" ? DEFAULT_ORIGIN_API_BASE_URL : trimmed;
|
|
165
152
|
}
|
|
166
153
|
const originEnvelopeSchema = z.object({
|
|
@@ -185,38 +172,38 @@ export function parseOriginWebhookEnvelope(payload) {
|
|
|
185
172
|
return parsed.success ? parsed.data : null;
|
|
186
173
|
}
|
|
187
174
|
function originRepoFromPayload(payload) {
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
const
|
|
191
|
-
const owner = asNonEmptyString((_b = asRecord(repository === null || repository === void 0 ? void 0 : repository.owner)) === null || _b === void 0 ? void 0 : _b.slug);
|
|
192
|
-
const name = asNonEmptyString(repository === null || repository === void 0 ? void 0 : repository.name);
|
|
175
|
+
const repository = asRecord(payload.repository) ?? asRecord(asRecord(payload.pullRequest)?.repository);
|
|
176
|
+
const owner = asNonEmptyString(asRecord(repository?.owner)?.slug);
|
|
177
|
+
const name = asNonEmptyString(repository?.name);
|
|
193
178
|
if (owner === undefined || name === undefined)
|
|
194
179
|
return undefined;
|
|
195
180
|
return { owner, name, fullName: `${owner}/${name}` };
|
|
196
181
|
}
|
|
197
182
|
function originPrUrl(repository, number, explicit) {
|
|
198
|
-
return (explicit
|
|
183
|
+
return (explicit ?? `https://cursor.com/codebase/${repository.owner}/${repository.name}/pull/${number}`);
|
|
199
184
|
}
|
|
200
185
|
function originSender(envelope, payload) {
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
186
|
+
return (envelope.sender ??
|
|
187
|
+
originActor(payload.actor) ??
|
|
188
|
+
originActor(payload.pusher) ??
|
|
189
|
+
originActor(asRecord(payload.review)?.author) ??
|
|
190
|
+
originActor(asRecord(payload.comment)?.author) ??
|
|
191
|
+
originActor(asRecord(payload.pullRequest)?.author));
|
|
204
192
|
}
|
|
205
193
|
export function parseOriginPullRequestEvent(input) {
|
|
206
|
-
|
|
207
|
-
const payload = (_a = asRecord(input.envelope.event.payload)) !== null && _a !== void 0 ? _a : {};
|
|
194
|
+
const payload = asRecord(input.envelope.event.payload) ?? {};
|
|
208
195
|
const repository = originRepoFromPayload(payload);
|
|
209
196
|
const pullRequest = asRecord(payload.pullRequest);
|
|
210
|
-
const number = asPositiveInt(pullRequest
|
|
197
|
+
const number = asPositiveInt(pullRequest?.number);
|
|
211
198
|
if (repository === undefined || number === undefined) {
|
|
212
199
|
return null;
|
|
213
200
|
}
|
|
214
201
|
const eventType = input.envelope.event.type;
|
|
215
|
-
const url = originPrUrl(repository, number, asNonEmptyString(pullRequest
|
|
216
|
-
const head = asRecord(pullRequest
|
|
217
|
-
const base = asRecord(pullRequest
|
|
218
|
-
const version = asRecord(pullRequest
|
|
219
|
-
const author = originActor(pullRequest
|
|
202
|
+
const url = originPrUrl(repository, number, asNonEmptyString(pullRequest?.url));
|
|
203
|
+
const head = asRecord(pullRequest?.head);
|
|
204
|
+
const base = asRecord(pullRequest?.base);
|
|
205
|
+
const version = asRecord(pullRequest?.version);
|
|
206
|
+
const author = originActor(pullRequest?.author);
|
|
220
207
|
return {
|
|
221
208
|
payload,
|
|
222
209
|
ctx: {
|
|
@@ -235,17 +222,18 @@ export function parseOriginPullRequestEvent(input) {
|
|
|
235
222
|
type: eventType,
|
|
236
223
|
number,
|
|
237
224
|
url,
|
|
238
|
-
title: asNonEmptyString(pullRequest
|
|
239
|
-
body:
|
|
225
|
+
title: asNonEmptyString(pullRequest?.title),
|
|
226
|
+
body: pullRequest?.body === null
|
|
240
227
|
? null
|
|
241
|
-
: (
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
228
|
+
: (asNonEmptyString(pullRequest?.body) ??
|
|
229
|
+
(typeof pullRequest?.body === "string" ? pullRequest.body : undefined)),
|
|
230
|
+
draft: asBoolean(pullRequest?.draft),
|
|
231
|
+
merged: eventType === "pull_request.merged" || asBoolean(pullRequest?.merged),
|
|
232
|
+
authorId: author?.id,
|
|
233
|
+
headRef: asNonEmptyString(head?.ref),
|
|
234
|
+
headSha: asNonEmptyString(head?.sha) ?? asNonEmptyString(version?.headSha),
|
|
235
|
+
baseRef: asNonEmptyString(base?.ref),
|
|
236
|
+
baseSha: asNonEmptyString(base?.sha) ?? asNonEmptyString(version?.baseSha),
|
|
249
237
|
},
|
|
250
238
|
};
|
|
251
239
|
}
|
|
@@ -256,14 +244,20 @@ export function parseOriginPullRequestEvent(input) {
|
|
|
256
244
|
* as {@link defaultGitHubAuth}).
|
|
257
245
|
*/
|
|
258
246
|
export function defaultOriginAuth(ctx) {
|
|
259
|
-
|
|
260
|
-
const
|
|
261
|
-
const senderKind = (_b = ctx.sender) === null || _b === void 0 ? void 0 : _b.kind;
|
|
247
|
+
const senderId = ctx.sender?.id;
|
|
248
|
+
const senderKind = ctx.sender?.kind;
|
|
262
249
|
return {
|
|
263
250
|
authenticator: "origin-webhook",
|
|
264
|
-
principalId: senderId
|
|
251
|
+
principalId: senderId ?? "origin",
|
|
265
252
|
principalType: senderKind === "app" || senderKind === "service_account" ? "service" : "user",
|
|
266
|
-
attributes:
|
|
253
|
+
attributes: {
|
|
254
|
+
conversation_kind: "pull_request",
|
|
255
|
+
repository: ctx.repository.fullName,
|
|
256
|
+
...(ctx.deliveryId === undefined ? {} : { delivery_id: ctx.deliveryId }),
|
|
257
|
+
...(senderId === undefined ? {} : { subject: senderId }),
|
|
258
|
+
...(senderKind === undefined ? {} : { user_type: senderKind }),
|
|
259
|
+
issuer: `origin:${ctx.repository.owner}`,
|
|
260
|
+
},
|
|
267
261
|
};
|
|
268
262
|
}
|
|
269
263
|
export function originContinuationKey(ctx) {
|
|
@@ -303,75 +297,79 @@ export function defaultOriginPullRequestDispatch(ctx, pullRequest) {
|
|
|
303
297
|
return { auth: defaultOriginAuth(ctx) };
|
|
304
298
|
}
|
|
305
299
|
function enrichEventContext(input) {
|
|
306
|
-
return
|
|
300
|
+
return {
|
|
301
|
+
...input.ctx,
|
|
302
|
+
host: input.args.host,
|
|
303
|
+
artifacts: input.args.artifacts,
|
|
304
|
+
send: input.args.send,
|
|
305
|
+
origin: buildOriginBinding({
|
|
307
306
|
repository: input.ctx.repository,
|
|
308
307
|
installationId: input.ctx.installationId,
|
|
309
308
|
executionId: input.ctx.deliveryId,
|
|
310
309
|
cursorAccount: input.options.cursorAccount !== undefined && input.options.cursorAccount !== false,
|
|
311
310
|
app: input.options.app,
|
|
312
|
-
})
|
|
313
|
-
}
|
|
314
|
-
function startTurn(input) {
|
|
315
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
316
|
-
var _a, _b;
|
|
317
|
-
const source = continuationSource(input.options.continuation, "origin");
|
|
318
|
-
const cloud = (_a = input.dispatch.cloud) !== null && _a !== void 0 ? _a : input.cloud;
|
|
319
|
-
const state = Object.assign(Object.assign({}, input.dispatch.state), input.state);
|
|
320
|
-
const session = yield input.args.send(input.message, Object.assign(Object.assign({ auth: input.dispatch.auth }, (source === "engine" ? { continuationToken: originContinuationKey(input.ctx) } : {})), { title: (_b = input.dispatch.title) !== null && _b !== void 0 ? _b : defaultOriginTitle(input.ctx), cloud, state: state,
|
|
321
|
-
// Resume must refresh the triggering comment / delivery identifiers so
|
|
322
|
-
// reply delivery targets the latest wake, not the session's first.
|
|
323
|
-
refreshState: state }));
|
|
324
|
-
return turnStarted(session);
|
|
325
|
-
});
|
|
311
|
+
}),
|
|
312
|
+
};
|
|
326
313
|
}
|
|
327
|
-
function
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
],
|
|
341
|
-
};
|
|
342
|
-
}
|
|
343
|
-
if (typeof cloud === "function") {
|
|
344
|
-
return yield cloud(ctx, pullRequest);
|
|
345
|
-
}
|
|
346
|
-
return cloud;
|
|
314
|
+
async function startTurn(input) {
|
|
315
|
+
const source = continuationSource(input.options.continuation, "origin");
|
|
316
|
+
const cloud = input.dispatch.cloud ?? input.cloud;
|
|
317
|
+
const state = { ...input.dispatch.state, ...input.state };
|
|
318
|
+
const session = await input.args.send(input.message, {
|
|
319
|
+
auth: input.dispatch.auth,
|
|
320
|
+
...(source === "engine" ? { continuationToken: originContinuationKey(input.ctx) } : {}),
|
|
321
|
+
title: input.dispatch.title ?? defaultOriginTitle(input.ctx),
|
|
322
|
+
cloud,
|
|
323
|
+
state: state,
|
|
324
|
+
// Resume must refresh the triggering comment / delivery identifiers so
|
|
325
|
+
// reply delivery targets the latest wake, not the session's first.
|
|
326
|
+
refreshState: state,
|
|
347
327
|
});
|
|
328
|
+
return turnStarted(session);
|
|
348
329
|
}
|
|
349
|
-
function
|
|
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
|
-
|
|
330
|
+
async function resolveCloudOptions(cloud, ctx, pullRequest) {
|
|
331
|
+
if (cloud === undefined || cloud === false) {
|
|
332
|
+
return undefined;
|
|
333
|
+
}
|
|
334
|
+
if (cloud === true) {
|
|
335
|
+
return {
|
|
336
|
+
repos: [
|
|
337
|
+
{
|
|
338
|
+
url: `https://cursor.com/codebase/${ctx.repository.fullName}`,
|
|
339
|
+
prUrl: pullRequest.url,
|
|
340
|
+
startingRef: pullRequest.headSha,
|
|
341
|
+
},
|
|
342
|
+
],
|
|
343
|
+
};
|
|
344
|
+
}
|
|
345
|
+
if (typeof cloud === "function") {
|
|
346
|
+
return await cloud(ctx, pullRequest);
|
|
347
|
+
}
|
|
348
|
+
return cloud;
|
|
349
|
+
}
|
|
350
|
+
async function applyDispatch(input) {
|
|
351
|
+
if (input.dispatch === null) {
|
|
352
|
+
return skipped("not_dispatched", input.extra);
|
|
353
|
+
}
|
|
354
|
+
if (isTaskDispatch(input.dispatch)) {
|
|
355
|
+
return acknowledgeTask(input.args, ORIGIN_CHANNEL_KIND, input.dispatch, input.extra);
|
|
356
|
+
}
|
|
357
|
+
const message = [input.dispatch.message ?? input.message, ...(input.dispatch.context ?? [])].join("\n");
|
|
358
|
+
return startTurn({
|
|
359
|
+
options: input.options,
|
|
360
|
+
args: input.args,
|
|
361
|
+
ctx: input.ctx,
|
|
362
|
+
message,
|
|
363
|
+
dispatch: input.dispatch,
|
|
364
|
+
cloud: input.cloud,
|
|
365
|
+
state: originChannelStateForEvent({
|
|
366
|
+
repository: input.ctx.repository,
|
|
367
|
+
pullRequestNumber: input.ctx.pullRequestNumber,
|
|
368
|
+
installationId: input.ctx.installationId,
|
|
369
|
+
deliveryId: input.ctx.deliveryId,
|
|
370
|
+
eventType: input.ctx.eventType,
|
|
371
|
+
triggeringCommentId: input.triggeringCommentId,
|
|
372
|
+
}),
|
|
375
373
|
});
|
|
376
374
|
}
|
|
377
375
|
/**
|
|
@@ -380,156 +378,151 @@ function applyDispatch(input) {
|
|
|
380
378
|
* id; trigger fan-out and hosted admission arrive verified. The v2 mailbox
|
|
381
379
|
* is stamped upstream (local CP or hosted ingress), never here.
|
|
382
380
|
*/
|
|
383
|
-
export function dispatchOriginWebhook(input) {
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
381
|
+
export async function dispatchOriginWebhook(input) {
|
|
382
|
+
const eventType = input.envelope.event.type;
|
|
383
|
+
const parsed = parseOriginPullRequestEvent({ envelope: input.envelope });
|
|
384
|
+
if (parsed === null) {
|
|
385
|
+
return Response.json({ ok: false, error: "invalid_origin_payload" }, { status: 400 });
|
|
386
|
+
}
|
|
387
|
+
const args = input.args;
|
|
388
|
+
const ctx = enrichEventContext({
|
|
389
|
+
ctx: parsed.ctx,
|
|
390
|
+
args,
|
|
391
|
+
options: input.options,
|
|
392
|
+
});
|
|
393
|
+
const { pullRequest, payload } = parsed;
|
|
394
|
+
const repoAllowlist = configuredOriginRepoAllowlist(input.options);
|
|
395
|
+
if (repoAllowlist !== undefined && !repoAllowlist.has(ctx.repository.fullName.toLowerCase())) {
|
|
396
|
+
return skipped("repo_not_allowed", { repo: ctx.repository.fullName });
|
|
397
|
+
}
|
|
398
|
+
if (eventType.startsWith("pull_request.comment.")) {
|
|
399
|
+
if (input.options.onComment === undefined) {
|
|
400
|
+
return skipped("no_handler", { event: eventType });
|
|
390
401
|
}
|
|
391
|
-
const
|
|
392
|
-
const
|
|
393
|
-
|
|
394
|
-
|
|
402
|
+
const commentRecord = asRecord(payload.comment);
|
|
403
|
+
const commentId = asNonEmptyString(commentRecord?.id);
|
|
404
|
+
const commentBody = typeof commentRecord?.body === "string" ? commentRecord.body : undefined;
|
|
405
|
+
if (commentId === undefined || commentBody === undefined) {
|
|
406
|
+
return Response.json({ ok: false, error: "invalid_origin_comment_payload" }, { status: 400 });
|
|
407
|
+
}
|
|
408
|
+
const comment = {
|
|
409
|
+
id: commentId,
|
|
410
|
+
body: commentBody,
|
|
411
|
+
author: originActor(commentRecord?.author),
|
|
412
|
+
};
|
|
413
|
+
const dispatch = await input.options.onComment(ctx, comment);
|
|
414
|
+
return applyDispatch({
|
|
395
415
|
options: input.options,
|
|
416
|
+
args,
|
|
417
|
+
ctx,
|
|
418
|
+
dispatch,
|
|
419
|
+
extra: { event: eventType },
|
|
420
|
+
message: commentBody.trim() === ""
|
|
421
|
+
? `Origin comment on ${ctx.repository.fullName}#${ctx.pullRequestNumber}`
|
|
422
|
+
: commentBody.trim(),
|
|
423
|
+
triggeringCommentId: commentId,
|
|
396
424
|
});
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
if (
|
|
400
|
-
return skipped("
|
|
401
|
-
}
|
|
402
|
-
if (eventType.startsWith("pull_request.comment.")) {
|
|
403
|
-
if (input.options.onComment === undefined) {
|
|
404
|
-
return skipped("no_handler", { event: eventType });
|
|
405
|
-
}
|
|
406
|
-
const commentRecord = asRecord(payload.comment);
|
|
407
|
-
const commentId = asNonEmptyString(commentRecord === null || commentRecord === void 0 ? void 0 : commentRecord.id);
|
|
408
|
-
const commentBody = typeof (commentRecord === null || commentRecord === void 0 ? void 0 : commentRecord.body) === "string" ? commentRecord.body : undefined;
|
|
409
|
-
if (commentId === undefined || commentBody === undefined) {
|
|
410
|
-
return Response.json({ ok: false, error: "invalid_origin_comment_payload" }, { status: 400 });
|
|
411
|
-
}
|
|
412
|
-
const comment = {
|
|
413
|
-
id: commentId,
|
|
414
|
-
body: commentBody,
|
|
415
|
-
author: originActor(commentRecord === null || commentRecord === void 0 ? void 0 : commentRecord.author),
|
|
416
|
-
};
|
|
417
|
-
const dispatch = yield input.options.onComment(ctx, comment);
|
|
418
|
-
return applyDispatch({
|
|
419
|
-
options: input.options,
|
|
420
|
-
args,
|
|
421
|
-
ctx,
|
|
422
|
-
dispatch,
|
|
423
|
-
extra: { event: eventType },
|
|
424
|
-
message: commentBody.trim() === ""
|
|
425
|
-
? `Origin comment on ${ctx.repository.fullName}#${ctx.pullRequestNumber}`
|
|
426
|
-
: commentBody.trim(),
|
|
427
|
-
triggeringCommentId: commentId,
|
|
428
|
-
});
|
|
429
|
-
}
|
|
430
|
-
if (eventType.startsWith("pull_request.review.")) {
|
|
431
|
-
if (input.options.onReview === undefined) {
|
|
432
|
-
return skipped("no_handler", { event: eventType });
|
|
433
|
-
}
|
|
434
|
-
const reviewRecord = (_a = asRecord(payload.review)) !== null && _a !== void 0 ? _a : {};
|
|
435
|
-
const review = {
|
|
436
|
-
id: asNonEmptyString(reviewRecord.id),
|
|
437
|
-
verdict: asNonEmptyString(reviewRecord.verdict),
|
|
438
|
-
author: originActor(reviewRecord.author),
|
|
439
|
-
};
|
|
440
|
-
const dispatch = yield input.options.onReview(ctx, review);
|
|
441
|
-
return applyDispatch({
|
|
442
|
-
options: input.options,
|
|
443
|
-
args,
|
|
444
|
-
ctx,
|
|
445
|
-
dispatch,
|
|
446
|
-
extra: { event: eventType },
|
|
447
|
-
message: `Origin review on ${ctx.repository.fullName}#${ctx.pullRequestNumber}`,
|
|
448
|
-
});
|
|
449
|
-
}
|
|
450
|
-
if (eventType.startsWith("pull_request.")) {
|
|
451
|
-
const dispatch = input.options.onPullRequest === undefined
|
|
452
|
-
? defaultOriginPullRequestDispatch(ctx, pullRequest)
|
|
453
|
-
: yield input.options.onPullRequest(ctx, pullRequest);
|
|
454
|
-
const cloud = yield resolveCloudOptions(input.options.cloud, ctx, pullRequest);
|
|
455
|
-
return applyDispatch({
|
|
456
|
-
options: input.options,
|
|
457
|
-
args,
|
|
458
|
-
ctx,
|
|
459
|
-
dispatch,
|
|
460
|
-
extra: { event: eventType },
|
|
461
|
-
message: defaultOriginPullRequestMessage(ctx, pullRequest),
|
|
462
|
-
cloud,
|
|
463
|
-
});
|
|
464
|
-
}
|
|
465
|
-
if (input.options.onEvent !== undefined) {
|
|
466
|
-
const dispatch = yield input.options.onEvent(ctx, {
|
|
467
|
-
eventType,
|
|
468
|
-
payload,
|
|
469
|
-
});
|
|
470
|
-
return applyDispatch({
|
|
471
|
-
options: input.options,
|
|
472
|
-
args,
|
|
473
|
-
ctx,
|
|
474
|
-
dispatch,
|
|
475
|
-
extra: { event: eventType },
|
|
476
|
-
message: `Origin ${eventType} event`,
|
|
477
|
-
});
|
|
425
|
+
}
|
|
426
|
+
if (eventType.startsWith("pull_request.review.")) {
|
|
427
|
+
if (input.options.onReview === undefined) {
|
|
428
|
+
return skipped("no_handler", { event: eventType });
|
|
478
429
|
}
|
|
479
|
-
|
|
480
|
-
|
|
430
|
+
const reviewRecord = asRecord(payload.review) ?? {};
|
|
431
|
+
const review = {
|
|
432
|
+
id: asNonEmptyString(reviewRecord.id),
|
|
433
|
+
verdict: asNonEmptyString(reviewRecord.verdict),
|
|
434
|
+
author: originActor(reviewRecord.author),
|
|
435
|
+
};
|
|
436
|
+
const dispatch = await input.options.onReview(ctx, review);
|
|
437
|
+
return applyDispatch({
|
|
438
|
+
options: input.options,
|
|
439
|
+
args,
|
|
440
|
+
ctx,
|
|
441
|
+
dispatch,
|
|
442
|
+
extra: { event: eventType },
|
|
443
|
+
message: `Origin review on ${ctx.repository.fullName}#${ctx.pullRequestNumber}`,
|
|
444
|
+
});
|
|
445
|
+
}
|
|
446
|
+
if (eventType.startsWith("pull_request.")) {
|
|
447
|
+
const dispatch = input.options.onPullRequest === undefined
|
|
448
|
+
? defaultOriginPullRequestDispatch(ctx, pullRequest)
|
|
449
|
+
: await input.options.onPullRequest(ctx, pullRequest);
|
|
450
|
+
const cloud = await resolveCloudOptions(input.options.cloud, ctx, pullRequest);
|
|
451
|
+
return applyDispatch({
|
|
452
|
+
options: input.options,
|
|
453
|
+
args,
|
|
454
|
+
ctx,
|
|
455
|
+
dispatch,
|
|
456
|
+
extra: { event: eventType },
|
|
457
|
+
message: defaultOriginPullRequestMessage(ctx, pullRequest),
|
|
458
|
+
cloud,
|
|
459
|
+
});
|
|
460
|
+
}
|
|
461
|
+
if (input.options.onEvent !== undefined) {
|
|
462
|
+
const dispatch = await input.options.onEvent(ctx, {
|
|
463
|
+
eventType,
|
|
464
|
+
payload,
|
|
465
|
+
});
|
|
466
|
+
return applyDispatch({
|
|
467
|
+
options: input.options,
|
|
468
|
+
args,
|
|
469
|
+
ctx,
|
|
470
|
+
dispatch,
|
|
471
|
+
extra: { event: eventType },
|
|
472
|
+
message: `Origin ${eventType} event`,
|
|
473
|
+
});
|
|
474
|
+
}
|
|
475
|
+
return skipped("unsupported_event", { event: eventType });
|
|
481
476
|
}
|
|
482
477
|
/**
|
|
483
478
|
* HTTP entry for a single agent's Origin channel: optional v1ed verify, then
|
|
484
479
|
* app-id bind, then {@link dispatchOriginWebhook}.
|
|
485
480
|
*/
|
|
486
|
-
export function handleOriginWebhookRequest(input) {
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
if (requireHttpBinding) {
|
|
491
|
-
try {
|
|
492
|
-
yield verifyOriginWebhook(bodyText, originHeaders(input.request), {
|
|
493
|
-
apiBaseUrl: resolveApiBaseUrl(input.options),
|
|
494
|
-
});
|
|
495
|
-
}
|
|
496
|
-
catch (error) {
|
|
497
|
-
// A JWKS outage means the delivery was never checked: answer 503 so
|
|
498
|
-
// Origin's delivery worker retries. Only a real signature mismatch
|
|
499
|
-
// is the terminal 401.
|
|
500
|
-
if (error instanceof OriginJwksUnavailableError) {
|
|
501
|
-
return Response.json({ ok: false, error: "signature_verification_unavailable" }, { status: 503 });
|
|
502
|
-
}
|
|
503
|
-
return Response.json({ ok: false, error: "invalid_signature" }, { status: 401 });
|
|
504
|
-
}
|
|
505
|
-
}
|
|
506
|
-
let payload;
|
|
481
|
+
export async function handleOriginWebhookRequest(input) {
|
|
482
|
+
const bodyText = await input.request.text();
|
|
483
|
+
const requireHttpBinding = input.skipSignatureVerification !== true && shouldSkipOriginVerify() !== true;
|
|
484
|
+
if (requireHttpBinding) {
|
|
507
485
|
try {
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
return Response.json({ ok: false, error: "invalid_json" }, { status: 400 });
|
|
512
|
-
}
|
|
513
|
-
const envelope = parseOriginWebhookEnvelope(payload);
|
|
514
|
-
if (envelope === null) {
|
|
515
|
-
return Response.json({ ok: false, error: "invalid_origin_payload" }, { status: 400 });
|
|
486
|
+
await verifyOriginWebhook(bodyText, originHeaders(input.request), {
|
|
487
|
+
apiBaseUrl: resolveApiBaseUrl(input.options),
|
|
488
|
+
});
|
|
516
489
|
}
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
490
|
+
catch (error) {
|
|
491
|
+
// A JWKS outage means the delivery was never checked: answer 503 so
|
|
492
|
+
// Origin's delivery worker retries. Only a real signature mismatch
|
|
493
|
+
// is the terminal 401.
|
|
494
|
+
if (error instanceof OriginJwksUnavailableError) {
|
|
495
|
+
return Response.json({ ok: false, error: "signature_verification_unavailable" }, { status: 503 });
|
|
521
496
|
}
|
|
497
|
+
return Response.json({ ok: false, error: "invalid_signature" }, { status: 401 });
|
|
522
498
|
}
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
499
|
+
}
|
|
500
|
+
let payload;
|
|
501
|
+
try {
|
|
502
|
+
payload = JSON.parse(bodyText);
|
|
503
|
+
}
|
|
504
|
+
catch {
|
|
505
|
+
return Response.json({ ok: false, error: "invalid_json" }, { status: 400 });
|
|
506
|
+
}
|
|
507
|
+
const envelope = parseOriginWebhookEnvelope(payload);
|
|
508
|
+
if (envelope === null) {
|
|
509
|
+
return Response.json({ ok: false, error: "invalid_origin_payload" }, { status: 400 });
|
|
510
|
+
}
|
|
511
|
+
if (requireHttpBinding) {
|
|
512
|
+
const bindingError = originHttpBindingError(input.options, envelope);
|
|
513
|
+
if (bindingError !== undefined) {
|
|
514
|
+
return Response.json({ ok: false, error: bindingError }, { status: 401 });
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
return dispatchOriginWebhook({
|
|
518
|
+
options: input.options,
|
|
519
|
+
envelope,
|
|
520
|
+
args: bindLocalIngressSend(input.args, {
|
|
521
|
+
identity: input.options.continuation,
|
|
522
|
+
kind: "origin",
|
|
523
|
+
eventType: envelope.event.type,
|
|
524
|
+
payload: originIngressExtractPayload(envelope),
|
|
525
|
+
}),
|
|
533
526
|
});
|
|
534
527
|
}
|
|
535
528
|
const originChannelOptionsByDefinition = new WeakMap();
|
|
@@ -537,7 +530,6 @@ export function getOriginChannelOptions(definition) {
|
|
|
537
530
|
return originChannelOptionsByDefinition.get(definition);
|
|
538
531
|
}
|
|
539
532
|
export function originChannel(options = {}) {
|
|
540
|
-
var _a, _b;
|
|
541
533
|
const usesCursorAccount = options.cursorAccount === true || typeof options.cursorAccount === "object";
|
|
542
534
|
const cursorScope = typeof options.cursorAccount === "object"
|
|
543
535
|
? parseCursorOriginRepoScope(options.cursorAccount.repos)
|
|
@@ -545,27 +537,32 @@ export function originChannel(options = {}) {
|
|
|
545
537
|
if (options.repos !== undefined) {
|
|
546
538
|
parseCursorOriginRepoScope(options.repos);
|
|
547
539
|
}
|
|
548
|
-
const routePath =
|
|
540
|
+
const routePath = options.path ?? "/";
|
|
549
541
|
// v1ed + configured app id is the request auth (allowAll), matching GitHub
|
|
550
542
|
// HMAC + webhookSecret. Without an app id, prod stays loopback-strict so a
|
|
551
543
|
// reachable URL cannot be driven by any Origin-signed delivery. `--dev`
|
|
552
544
|
// / skip-verify admits loopback only.
|
|
553
|
-
const auth =
|
|
545
|
+
const auth = options.auth ?? [
|
|
554
546
|
(request, info) => (shouldSkipOriginVerify()
|
|
555
547
|
? loopbackOnly()
|
|
556
548
|
: configuredOriginAppIds(options).length > 0
|
|
557
549
|
? allowAll()
|
|
558
550
|
: localDevStrict())(request, info),
|
|
559
551
|
];
|
|
560
|
-
const channelOptions =
|
|
552
|
+
const channelOptions = {
|
|
553
|
+
...options,
|
|
554
|
+
};
|
|
561
555
|
if (channelOptions.continuation !== undefined) {
|
|
562
556
|
channelOptions.continuation = normalizeIdentity(channelOptions.continuation, "origin");
|
|
563
557
|
}
|
|
564
|
-
const events =
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
558
|
+
const events = {
|
|
559
|
+
...buildDefaultOriginEvents({
|
|
560
|
+
cursorAccount: channelOptions.cursorAccount,
|
|
561
|
+
app: channelOptions.app,
|
|
562
|
+
deliverReplies: channelOptions.deliverReplies,
|
|
563
|
+
}),
|
|
564
|
+
...options.events,
|
|
565
|
+
};
|
|
569
566
|
const definition = defineChannel({
|
|
570
567
|
auth,
|
|
571
568
|
state: emptyOriginChannelState(),
|
|
@@ -580,12 +577,10 @@ export function originChannel(options = {}) {
|
|
|
580
577
|
POST(routePath, {
|
|
581
578
|
bodySchema: z.unknown(),
|
|
582
579
|
description: "Origin webhook ingress",
|
|
583
|
-
handler: (request, args) =>
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
args,
|
|
588
|
-
});
|
|
580
|
+
handler: async (request, args) => handleOriginWebhookRequest({
|
|
581
|
+
options: channelOptions,
|
|
582
|
+
request,
|
|
583
|
+
args,
|
|
589
584
|
}),
|
|
590
585
|
}),
|
|
591
586
|
],
|
|
@@ -594,7 +589,7 @@ export function originChannel(options = {}) {
|
|
|
594
589
|
attachHostedAdmissionAdapter(definition, {
|
|
595
590
|
kind: ORIGIN_CHANNEL_KIND,
|
|
596
591
|
prepareArgs: withPropagatingBackgroundErrors,
|
|
597
|
-
dispatch:
|
|
592
|
+
dispatch: async ({ payload, args }) => {
|
|
598
593
|
const envelope = parseOriginWebhookEnvelope(payload);
|
|
599
594
|
if (envelope === null) {
|
|
600
595
|
return Response.json({ ok: false, error: "invalid_origin_payload" }, { status: 400 });
|
|
@@ -604,7 +599,7 @@ export function originChannel(options = {}) {
|
|
|
604
599
|
envelope,
|
|
605
600
|
args,
|
|
606
601
|
});
|
|
607
|
-
}
|
|
602
|
+
},
|
|
608
603
|
});
|
|
609
604
|
if (usesCursorAccount) {
|
|
610
605
|
registerOriginCursorAccountRuntime(definition, {
|
|
@@ -615,18 +610,17 @@ export function originChannel(options = {}) {
|
|
|
615
610
|
return definition;
|
|
616
611
|
}
|
|
617
612
|
export function findOriginChannelTargets(mounts) {
|
|
618
|
-
var _a;
|
|
619
613
|
const targets = [];
|
|
620
614
|
for (const { slug, project } of mounts) {
|
|
621
615
|
for (const channel of project.channels) {
|
|
622
616
|
const meta = channel.definition.meta;
|
|
623
|
-
if (
|
|
617
|
+
if (meta?.kind !== ORIGIN_CHANNEL_KIND) {
|
|
624
618
|
continue;
|
|
625
619
|
}
|
|
626
620
|
targets.push({
|
|
627
621
|
slug,
|
|
628
622
|
channelId: channel.id,
|
|
629
|
-
events: [...(
|
|
623
|
+
events: [...(meta.originWebhookEvents ?? [])],
|
|
630
624
|
});
|
|
631
625
|
}
|
|
632
626
|
}
|