@cursor/bdk 0.2.3 → 0.2.4
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/bin/agent-serve.js +9 -1
- package/dist/channels/slack/attachments.d.ts +2 -1
- package/dist/channels/slack/attachments.d.ts.map +1 -1
- package/dist/channels/slack/attachments.js +19 -9
- package/dist/channels/slack/dispatch.d.ts.map +1 -1
- package/dist/channels/slack/dispatch.js +26 -24
- package/dist/channels/slack/thread-context.d.ts +21 -11
- package/dist/channels/slack/thread-context.d.ts.map +1 -1
- package/dist/channels/slack/thread-context.js +75 -27
- package/dist/docs/404.html +2 -2
- package/dist/docs/assets/{app.BOIHhrKi.js → app.4kQ8Db_q.js} +4 -4
- package/dist/docs/assets/chunks/@localSearchIndexroot.CvuAJ0My.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.D49zVZqM.js → VPLocalSearchBox.DY1RwB8Q.js} +1 -1
- package/dist/docs/assets/chunks/{arc.hmjb-sc4.js → arc.CxE_fSPK.js} +1 -1
- package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.CxEI1KqM.js → architectureDiagram-Q4EWVU46.CPX426ui.js} +1 -1
- package/dist/docs/assets/chunks/{baseUniq.DHHvBWoV.js → baseUniq.CB52JrKG.js} +1 -1
- package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.DnXW-3bu.js → blockDiagram-DXYQGD6D.J0cNaQCL.js} +1 -1
- package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.e-47O2jM.js → c4Diagram-AHTNJAMY.DJn3vEGT.js} +1 -1
- package/dist/docs/assets/chunks/channel.BoNycAoN.js +1 -0
- package/dist/docs/assets/chunks/{chunk-4BX2VUAB.3ry4pYXB.js → chunk-4BX2VUAB.Dao618F6.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-4TB4RGXK.DGIZFRx6.js → chunk-4TB4RGXK.QW8Rhjai.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-55IACEB6.DKBnqg9U.js → chunk-55IACEB6.DfRLLKF_.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-EDXVE4YY.BIU8Ue5k.js → chunk-EDXVE4YY.CIV2ApKQ.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-FMBD7UC4.DP-TFhjI.js → chunk-FMBD7UC4.BEheSuxp.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-OYMX7WX6.Ux0OYj5v.js → chunk-OYMX7WX6.CUN88ENB.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-QZHKN3VN.BzHMwYox.js → chunk-QZHKN3VN.CgqCs8b_.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-YZCP3GAM.D4OGAsSP.js → chunk-YZCP3GAM.iCH0nnTJ.js} +1 -1
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.C4x07Gkj.js +1 -0
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.C4x07Gkj.js +1 -0
- package/dist/docs/assets/chunks/clone.Db22cH_-.js +1 -0
- package/dist/docs/assets/chunks/{cose-bilkent-S5V4N54A.Jq_7BUNx.js → cose-bilkent-S5V4N54A.BLcUxhWE.js} +1 -1
- package/dist/docs/assets/chunks/{dagre-KV5264BT.Di-skR2x.js → dagre-KV5264BT.Ep7LofOm.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-5BDNPKRD.DeREHIdH.js → diagram-5BDNPKRD.Bzf4GSQ4.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.C7Kcqxro.js → diagram-G4DWMVQ6.DD6Jh-eM.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-MMDJMWI5.BK3eohyo.js → diagram-MMDJMWI5.oOIl8bWd.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-TYMM5635.C6TyymXT.js → diagram-TYMM5635.DHs85Ade.js} +1 -1
- package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.DYGG-gGx.js → erDiagram-SMLLAGMA.BIb5ghCk.js} +1 -1
- package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.C9nBcSV4.js → flowDiagram-DWJPFMVM.DV4paY9k.js} +1 -1
- package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.wAg_ymsp.js → ganttDiagram-T4ZO3ILL.AyEKA6_v.js} +1 -1
- package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.B87j9Oeg.js → gitGraphDiagram-UUTBAWPF.BltiCDFo.js} +1 -1
- package/dist/docs/assets/chunks/{graph.CuFMj31w.js → graph.DzuEYGdC.js} +1 -1
- package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.P_mLGumP.js → infoDiagram-42DDH7IO.BV2l981J.js} +1 -1
- package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.DyuL_MsT.js → ishikawaDiagram-UXIWVN3A.BA4Izf-m.js} +1 -1
- package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.CtP09IoJ.js → journeyDiagram-VCZTEJTY.DjaFbFS3.js} +1 -1
- package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.BoeSYPZo.js → kanban-definition-6JOO6SKY.CfTFieDs.js} +1 -1
- package/dist/docs/assets/chunks/{layout.B0lMMtNo.js → layout.DzfWqTBV.js} +1 -1
- package/dist/docs/assets/chunks/{linear.HxRBiAFX.js → linear.BO6mpulV.js} +1 -1
- package/dist/docs/assets/chunks/{min.BGlFFHwS.js → min.BGgTadgT.js} +1 -1
- package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.JyLBD9M8.js → mindmap-definition-QFDTVHPH.DPuIXVWY.js} +1 -1
- package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.DnSmNZF8.js → pieDiagram-DEJITSTG.BOnl3bBg.js} +1 -1
- package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.CUCnbfCa.js → quadrantDiagram-34T5L4WZ.DNB6Ckdc.js} +1 -1
- package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.py0IVUn5.js → requirementDiagram-MS252O5E.D5-Qo7vb.js} +1 -1
- package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.Bkc-HWYp.js → sankeyDiagram-XADWPNL6.8t65cesf.js} +1 -1
- package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.Dqn8Mlv2.js → sequenceDiagram-FGHM5R23.CaG07BdS.js} +1 -1
- package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.JikkoQUU.js → stateDiagram-FHFEXIEX.TKOweTB6.js} +1 -1
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.CuqmyQc4.js +1 -0
- package/dist/docs/assets/chunks/{theme.b6HQ6zG_.js → theme.Dx-JhpTB.js} +2 -2
- package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.BvpSXiBj.js → timeline-definition-GMOUNBTQ.fE53zQ2s.js} +1 -1
- package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.CU7MVnZx.js → vennDiagram-DHZGUBPP.DJsZZaJg.js} +1 -1
- package/dist/docs/assets/chunks/{wardley-RL74JXVD.BKwC4ctG.js → wardley-RL74JXVD.844kyrjl.js} +1 -1
- package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.BfaF6Uhe.js → wardleyDiagram-NUSXRM2D.CMZ-Ru_t.js} +1 -1
- package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.Bg5dcpj4.js → xychartDiagram-5P7HB3ND.XXrhBc7a.js} +1 -1
- package/dist/docs/assets/{deployment.md.BJ8i7Q6p.js → deployment.md.UhnJIMr-.js} +2 -2
- package/dist/docs/assets/{deployment.md.BJ8i7Q6p.lean.js → deployment.md.UhnJIMr-.lean.js} +1 -1
- package/dist/docs/assets/{guides_jev.md.BNDm14Gy.js → guides_jev.md.CRcgmjDb.js} +2 -2
- package/dist/docs/assets/{guides_jev.md.BNDm14Gy.lean.js → guides_jev.md.CRcgmjDb.lean.js} +1 -1
- package/dist/docs/assets/{reference_agent-config.md.DzGI777n.js → reference_agent-config.md.Cj5uBKp4.js} +1 -1
- package/dist/docs/assets/{reference_extensions.md.CPPrkWlJ.js → reference_extensions.md.pa2tN-e4.js} +4 -3
- package/dist/docs/assets/{reference_extensions.md.CPPrkWlJ.lean.js → reference_extensions.md.pa2tN-e4.lean.js} +1 -1
- package/dist/docs/building-with-agents.html +35 -35
- package/dist/docs/deployment.html +37 -37
- package/dist/docs/deployment.md +4 -1
- package/dist/docs/evals.html +35 -35
- package/dist/docs/guides/agent-to-agent.html +35 -35
- package/dist/docs/guides/bitbucket.html +35 -35
- package/dist/docs/guides/cloud-agents.html +35 -35
- package/dist/docs/guides/convert-automation.html +35 -35
- package/dist/docs/guides/github.html +35 -35
- package/dist/docs/guides/gitlab.html +35 -35
- 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 +37 -37
- package/dist/docs/guides/jev.md +7 -0
- package/dist/docs/guides/mcp-oauth.html +35 -35
- 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 +25 -2
- package/dist/docs/quickstart.html +35 -35
- package/dist/docs/reference/agent-config.html +37 -37
- package/dist/docs/reference/agent-config.md +1 -1
- package/dist/docs/reference/artifacts.html +35 -35
- package/dist/docs/reference/channels.html +35 -35
- package/dist/docs/reference/cli.html +35 -35
- package/dist/docs/reference/connections.html +35 -35
- package/dist/docs/reference/evals.html +35 -35
- package/dist/docs/reference/extensions.html +39 -38
- package/dist/docs/reference/extensions.md +13 -0
- 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/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 +35 -35
- package/dist/extensions/jev/extension.d.ts +3 -0
- package/dist/extensions/jev/extension.d.ts.map +1 -1
- package/dist/extensions/jev/extension.js +10 -1
- package/dist/extensions/jev/lib/evaluate.d.ts +4 -0
- package/dist/extensions/jev/lib/evaluate.d.ts.map +1 -1
- package/dist/extensions/jev/lib/evaluate.js +6 -2
- package/dist/extensions.d.ts +4 -2
- package/dist/extensions.d.ts.map +1 -1
- package/dist/extensions.js +5 -2
- package/dist/internal/cli-deploy.d.ts.map +1 -1
- package/dist/internal/cli-deploy.js +19 -5
- package/dist/internal/discovery/agent-config.d.ts +6 -5
- package/dist/internal/discovery/agent-config.d.ts.map +1 -1
- package/dist/internal/discovery/agent-config.js +29 -28
- package/dist/internal/discovery/agent.js +1 -1
- package/dist/internal/discovery/extensions.d.ts.map +1 -1
- package/dist/internal/discovery/extensions.js +12 -0
- package/dist/internal/hosting.d.ts +8 -0
- package/dist/internal/hosting.d.ts.map +1 -1
- package/dist/internal/hosting.js +24 -0
- package/dist/types.d.ts +18 -2
- package/dist/types.d.ts.map +1 -1
- package/docs/deployment.md +4 -1
- package/docs/guides/jev.md +7 -0
- package/docs/reference/agent-config.md +1 -1
- package/docs/reference/extensions.md +13 -0
- package/package.json +1 -9
- package/dist/docs/assets/chunks/@localSearchIndexroot.D5L-b34G.js +0 -1
- package/dist/docs/assets/chunks/channel.BbOGaJQP.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.Db58HCb1.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.Db58HCb1.js +0 -1
- package/dist/docs/assets/chunks/clone.Co4MBflG.js +0 -1
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.CMsKhrW0.js +0 -1
- package/src/artifacts.ts +0 -68
- package/src/bin/agent-serve.ts +0 -1854
- package/src/channels/bitbucket/api.ts +0 -891
- package/src/channels/bitbucket/binding.ts +0 -417
- package/src/channels/bitbucket/bitbucket-channel.ts +0 -162
- package/src/channels/bitbucket/bitbucket-webhook.ts +0 -519
- package/src/channels/bitbucket/checks.ts +0 -146
- package/src/channels/bitbucket/cursor-account.ts +0 -106
- package/src/channels/bitbucket/defaults.ts +0 -100
- package/src/channels/bitbucket/events.ts +0 -74
- package/src/channels/bitbucket/index.ts +0 -51
- package/src/channels/bitbucket/replay.ts +0 -421
- package/src/channels/bitbucket/state.ts +0 -59
- package/src/channels/bitbucket/types.ts +0 -261
- package/src/channels/change-monitors/change-monitors-channel.ts +0 -63
- package/src/channels/change-monitors/index.ts +0 -8
- package/src/channels/change-monitors/types.ts +0 -42
- package/src/channels/checks.ts +0 -185
- package/src/channels/deployments/deployments-channel.ts +0 -224
- package/src/channels/deployments/index.ts +0 -25
- package/src/channels/deployments/types.ts +0 -92
- package/src/channels/github/api.ts +0 -526
- package/src/channels/github/auth.ts +0 -293
- package/src/channels/github/binding.ts +0 -233
- package/src/channels/github/checks.ts +0 -145
- package/src/channels/github/cursor-account.ts +0 -303
- package/src/channels/github/defaults.ts +0 -168
- package/src/channels/github/events.ts +0 -67
- package/src/channels/github/forward.ts +0 -359
- package/src/channels/github/github-channel.ts +0 -2334
- package/src/channels/github/index.ts +0 -54
- package/src/channels/github/progress.ts +0 -365
- package/src/channels/github/replay.ts +0 -372
- package/src/channels/github/state.ts +0 -124
- package/src/channels/github/types.ts +0 -590
- package/src/channels/gitlab/api.ts +0 -329
- package/src/channels/gitlab/binding.ts +0 -231
- package/src/channels/gitlab/checks.ts +0 -228
- package/src/channels/gitlab/cursor-account.ts +0 -105
- package/src/channels/gitlab/defaults.ts +0 -80
- package/src/channels/gitlab/events.ts +0 -37
- package/src/channels/gitlab/gitlab-channel.ts +0 -160
- package/src/channels/gitlab/gitlab-webhook.ts +0 -509
- package/src/channels/gitlab/index.ts +0 -44
- package/src/channels/gitlab/replay.ts +0 -328
- package/src/channels/gitlab/state.ts +0 -55
- package/src/channels/gitlab/types.ts +0 -247
- package/src/channels/issues/index.ts +0 -9
- package/src/channels/issues/issues-channel.ts +0 -45
- package/src/channels/issues/types.ts +0 -38
- package/src/channels/origin/api.ts +0 -507
- package/src/channels/origin/binding.ts +0 -114
- package/src/channels/origin/checks.ts +0 -250
- package/src/channels/origin/cursor-account.ts +0 -58
- package/src/channels/origin/defaults.ts +0 -140
- package/src/channels/origin/events.ts +0 -35
- package/src/channels/origin/index.ts +0 -35
- package/src/channels/origin/origin-channel.ts +0 -815
- package/src/channels/origin/origin-webhook.ts +0 -296
- package/src/channels/origin/reactions.ts +0 -72
- package/src/channels/origin/state.ts +0 -54
- package/src/channels/origin/types.ts +0 -295
- package/src/channels/slack/agentic-delivery.ts +0 -634
- package/src/channels/slack/agentic-posted.ts +0 -135
- package/src/channels/slack/agentic-signals.ts +0 -231
- package/src/channels/slack/api.ts +0 -761
- package/src/channels/slack/approvals.ts +0 -279
- package/src/channels/slack/assistant.ts +0 -76
- package/src/channels/slack/attachments.ts +0 -596
- package/src/channels/slack/auth.ts +0 -127
- package/src/channels/slack/blocks.ts +0 -131
- package/src/channels/slack/bot-mentions.ts +0 -318
- package/src/channels/slack/channel-watch.ts +0 -314
- package/src/channels/slack/cli-project.ts +0 -249
- package/src/channels/slack/code-fences.ts +0 -171
- package/src/channels/slack/constants.ts +0 -38
- package/src/channels/slack/credentials.ts +0 -88
- package/src/channels/slack/defaults.ts +0 -714
- package/src/channels/slack/dispatch.ts +0 -1060
- package/src/channels/slack/doctor.ts +0 -338
- package/src/channels/slack/eval-directive.ts +0 -306
- package/src/channels/slack/event-id-dedupe.ts +0 -30
- package/src/channels/slack/external-policy.ts +0 -75
- package/src/channels/slack/footer.ts +0 -106
- package/src/channels/slack/inbound.ts +0 -416
- package/src/channels/slack/index.ts +0 -53
- package/src/channels/slack/init.ts +0 -169
- package/src/channels/slack/interactive.ts +0 -406
- package/src/channels/slack/links.ts +0 -23
- package/src/channels/slack/live-delivery.ts +0 -489
- package/src/channels/slack/log.ts +0 -70
- package/src/channels/slack/manifest.ts +0 -240
- package/src/channels/slack/message-body.ts +0 -82
- package/src/channels/slack/nudge-carrier.ts +0 -224
- package/src/channels/slack/nudge-store.ts +0 -334
- package/src/channels/slack/paint-start.ts +0 -93
- package/src/channels/slack/placeholder.ts +0 -358
- package/src/channels/slack/pr-ref.ts +0 -74
- package/src/channels/slack/progress-delivery.ts +0 -138
- package/src/channels/slack/reasoning-card.ts +0 -125
- package/src/channels/slack/reasoning-chip.ts +0 -41
- package/src/channels/slack/recording-sink.ts +0 -167
- package/src/channels/slack/redact.ts +0 -6
- package/src/channels/slack/reply-options.ts +0 -279
- package/src/channels/slack/setup.ts +0 -125
- package/src/channels/slack/slack-channel.ts +0 -744
- package/src/channels/slack/socket-mode.ts +0 -140
- package/src/channels/slack/stop.ts +0 -25
- package/src/channels/slack/stream.ts +0 -66
- package/src/channels/slack/thread-context.ts +0 -485
- package/src/channels/slack/tool-approval-events.ts +0 -233
- package/src/channels/slack/tool-cards.ts +0 -198
- package/src/channels/slack/tool-chip.ts +0 -34
- package/src/channels/slack/types.ts +0 -787
- package/src/channels/slack/upload.ts +0 -137
- package/src/channels.ts +0 -543
- package/src/connections.ts +0 -153
- package/src/dashboard-session-url.ts +0 -30
- package/src/evals/assertions.ts +0 -688
- package/src/evals/expect.ts +0 -250
- package/src/evals/judge.ts +0 -329
- package/src/evals/loaders.ts +0 -111
- package/src/evals/matchers.ts +0 -223
- package/src/evals/reporters.ts +0 -257
- package/src/evals/results.ts +0 -130
- package/src/evals/run-facts.ts +0 -306
- package/src/evals.ts +0 -709
- package/src/extensions/cursor-cloud-agents/extension.ts +0 -131
- package/src/extensions/cursor-cloud-agents/lib/backend.ts +0 -386
- package/src/extensions/cursor-cloud-agents/lib/channels.ts +0 -11
- package/src/extensions/cursor-cloud-agents/lib/fleet.ts +0 -98
- package/src/extensions/cursor-cloud-agents/lib/inputs.ts +0 -5
- package/src/extensions/cursor-cloud-agents/lib/repos.ts +0 -80
- package/src/extensions/cursor-cloud-agents/lib/transcript.ts +0 -19
- package/src/extensions/cursor-cloud-agents/skills/handoff.md +0 -37
- package/src/extensions/cursor-cloud-agents/tools/cancel.ts +0 -21
- package/src/extensions/cursor-cloud-agents/tools/dump.ts +0 -47
- package/src/extensions/cursor-cloud-agents/tools/get.ts +0 -18
- package/src/extensions/cursor-cloud-agents/tools/launch.ts +0 -62
- package/src/extensions/cursor-cloud-agents/tools/list.ts +0 -31
- package/src/extensions/cursor-cloud-agents/tools/reply.ts +0 -36
- package/src/extensions/cursor-grokbot-agents/extension.ts +0 -132
- package/src/extensions/cursor-grokbot-agents/lib/agents.ts +0 -42
- package/src/extensions/cursor-grokbot-agents/lib/backend.ts +0 -208
- package/src/extensions/cursor-grokbot-agents/lib/contacts.ts +0 -74
- package/src/extensions/cursor-grokbot-agents/lib/conversation.ts +0 -260
- package/src/extensions/cursor-grokbot-agents/lib/inputs.ts +0 -21
- package/src/extensions/cursor-grokbot-agents/lib/lock.ts +0 -26
- package/src/extensions/cursor-grokbot-agents/skills/consult.md +0 -40
- package/src/extensions/cursor-grokbot-agents/tools/ask.ts +0 -32
- package/src/extensions/cursor-grokbot-agents/tools/check.ts +0 -25
- package/src/extensions/cursor-grokbot-agents/tools/interrupt.ts +0 -17
- package/src/extensions/cursor-grokbot-agents/tools/list.ts +0 -26
- package/src/extensions/improve/extension.ts +0 -69
- package/src/extensions/improve/skills/yourself.ts +0 -50
- package/src/extensions/jev/extension.ts +0 -95
- package/src/extensions/jev/lib/evaluate.ts +0 -266
- package/src/extensions/jev/skills/gated-write.md +0 -25
- package/src/extensions/jev/skills/questions.md +0 -33
- package/src/extensions/jev/tools/evaluate.ts +0 -82
- package/src/extensions/slack-communication/evals/harness.ts +0 -705
- package/src/extensions/slack-communication/evals/slack-communication.eval.ts +0 -830
- package/src/extensions/slack-communication/evals/slack-placeholder.eval.ts +0 -172
- package/src/extensions/slack-communication/extension.ts +0 -44
- package/src/extensions/slack-communication/skills/slack-voice.ts +0 -56
- package/src/extensions/slack-communication/tools/delete-message.ts +0 -33
- package/src/extensions/slack-communication/tools/edit-message.ts +0 -42
- package/src/extensions/slack-communication/tools/post-card.ts +0 -28
- package/src/extensions/slack-communication/tools/post-file.ts +0 -82
- package/src/extensions/slack-communication/tools/post-update.ts +0 -40
- package/src/extensions/slack-communication/tools/react.ts +0 -30
- package/src/extensions/slack-communication/tools/set-status.ts +0 -21
- package/src/extensions.ts +0 -179
- package/src/files-backends/agent-store-presigned-url.ts +0 -11
- package/src/files-backends/cursor-hosted.ts +0 -1212
- package/src/files-backends/local-fs.ts +0 -163
- package/src/files.ts +0 -293
- package/src/filesystem.ts +0 -2005
- package/src/hooks.ts +0 -30
- package/src/index.ts +0 -259
- package/src/internal/advertise-tools.ts +0 -370
- package/src/internal/approval-gate.ts +0 -103
- package/src/internal/artifacts-store.ts +0 -836
- package/src/internal/as-of.ts +0 -257
- package/src/internal/auth.ts +0 -46
- package/src/internal/authored-alias-hooks.ts +0 -138
- package/src/internal/authored-loaders.ts +0 -188
- package/src/internal/bounded-int.ts +0 -24
- package/src/internal/bounded.ts +0 -25
- package/src/internal/brand.ts +0 -28
- package/src/internal/browser-origin-guard.ts +0 -67
- package/src/internal/builtin-tools/artifacts.ts +0 -62
- package/src/internal/builtin-tools/index.ts +0 -53
- package/src/internal/builtin-tools/reminders.ts +0 -145
- package/src/internal/channel-dispatch.ts +0 -129
- package/src/internal/channel-route-dispatch.ts +0 -58
- package/src/internal/channel-state.ts +0 -83
- package/src/internal/chat-client.ts +0 -594
- package/src/internal/cli-ax.ts +0 -2318
- package/src/internal/cli-bitbucket.ts +0 -438
- package/src/internal/cli-convert-automation.ts +0 -335
- package/src/internal/cli-cursor.ts +0 -282
- package/src/internal/cli-deploy.ts +0 -2519
- package/src/internal/cli-docs.ts +0 -192
- package/src/internal/cli-github.ts +0 -806
- package/src/internal/cli-gitlab.ts +0 -452
- package/src/internal/cli-images.ts +0 -672
- package/src/internal/cli-manifest.ts +0 -56
- package/src/internal/cli-mcp-oauth.ts +0 -396
- package/src/internal/cli-mcp.ts +0 -808
- package/src/internal/cli-skills.ts +0 -98
- package/src/internal/cli-slack-manual.ts +0 -418
- package/src/internal/cli-slack.ts +0 -874
- package/src/internal/cloud-merge.ts +0 -51
- package/src/internal/cloud-turn-cost.ts +0 -159
- package/src/internal/connection-env.ts +0 -106
- package/src/internal/continuation-channel.ts +0 -233
- package/src/internal/continuation-identity.ts +0 -935
- package/src/internal/conversation-mirror.ts +0 -423
- package/src/internal/convert-automation/convert-workflow.ts +0 -1377
- package/src/internal/convert-automation/slug.ts +0 -29
- package/src/internal/convert-automation/types.ts +0 -212
- package/src/internal/cron.ts +0 -76
- package/src/internal/cursor/account-mcp.ts +0 -692
- package/src/internal/cursor/backend-client.ts +0 -984
- package/src/internal/cursor/bound-secret-file.ts +0 -101
- package/src/internal/cursor/credentials.ts +0 -560
- package/src/internal/cursor/cursor-api-transport.ts +0 -65
- package/src/internal/cursor/github-credentials.ts +0 -228
- package/src/internal/cursor/hosted-bound-secrets.ts +0 -71
- package/src/internal/cursor/hosted-deployment-secrets.ts +0 -100
- package/src/internal/cursor/hosted-store-secrets.ts +0 -152
- package/src/internal/cursor/session-token.ts +0 -111
- package/src/internal/cursor/store-api-client.ts +0 -323
- package/src/internal/cursor-account-mcp-auth.ts +0 -303
- package/src/internal/cursor-agent-template.ts +0 -50
- package/src/internal/cursor-deployment-relay.ts +0 -315
- package/src/internal/cursor-event-relay.ts +0 -675
- package/src/internal/cursor-relay-core.ts +0 -563
- package/src/internal/deferred-channel-session.ts +0 -61
- package/src/internal/deploy-client.ts +0 -1574
- package/src/internal/deploy-manifest.ts +0 -361
- package/src/internal/deploy-source.ts +0 -144
- package/src/internal/describe-error.ts +0 -32
- package/src/internal/dev-mode.ts +0 -20
- package/src/internal/discovery/agent-config.ts +0 -288
- package/src/internal/discovery/agent.ts +0 -381
- package/src/internal/discovery/channels.ts +0 -100
- package/src/internal/discovery/connections.ts +0 -516
- package/src/internal/discovery/context.ts +0 -38
- package/src/internal/discovery/cursor-plugin.ts +0 -628
- package/src/internal/discovery/extension-overlay.ts +0 -247
- package/src/internal/discovery/extensions.ts +0 -490
- package/src/internal/discovery/fs.ts +0 -103
- package/src/internal/discovery/hooks.ts +0 -63
- package/src/internal/discovery/info.ts +0 -174
- package/src/internal/discovery/instructions.ts +0 -98
- package/src/internal/discovery/modules.ts +0 -107
- package/src/internal/discovery/names.ts +0 -45
- package/src/internal/discovery/project.ts +0 -319
- package/src/internal/discovery/reminders.ts +0 -65
- package/src/internal/discovery/runtime.ts +0 -158
- package/src/internal/discovery/schedules.ts +0 -120
- package/src/internal/discovery/seed-files.ts +0 -34
- package/src/internal/discovery/services.ts +0 -151
- package/src/internal/discovery/skills.ts +0 -174
- package/src/internal/discovery/subagent.ts +0 -138
- package/src/internal/discovery/tools.ts +0 -170
- package/src/internal/discovery.ts +0 -27
- package/src/internal/distribution.ts +0 -126
- package/src/internal/docs-site.ts +0 -248
- package/src/internal/duration.ts +0 -37
- package/src/internal/env-file.ts +0 -83
- package/src/internal/eval-judge-model.ts +0 -142
- package/src/internal/eval-run-store.ts +0 -585
- package/src/internal/eval-runner.ts +0 -823
- package/src/internal/evals-client.ts +0 -475
- package/src/internal/event-log.ts +0 -342
- package/src/internal/event-mapper.ts +0 -811
- package/src/internal/expected-delivery-failure.ts +0 -34
- package/src/internal/factory-resource-channel.ts +0 -103
- package/src/internal/filesystem/errors.ts +0 -207
- package/src/internal/filesystem/format.ts +0 -253
- package/src/internal/filesystem/merge.ts +0 -192
- package/src/internal/filesystem/nearest.ts +0 -112
- package/src/internal/filesystem/scratch.ts +0 -239
- package/src/internal/filesystem/sdk-schemas.ts +0 -204
- package/src/internal/filesystem/tools.ts +0 -804
- package/src/internal/filesystem/walk.ts +0 -366
- package/src/internal/fixtures/units-server.ts +0 -52
- package/src/internal/framework-file-storage.ts +0 -357
- package/src/internal/framework-storage-selection.ts +0 -156
- package/src/internal/frontmatter.ts +0 -108
- package/src/internal/github-fanout.ts +0 -144
- package/src/internal/guest-network.ts +0 -391
- package/src/internal/handleAgentServeTrigger.ts +0 -286
- package/src/internal/host-files.ts +0 -341
- package/src/internal/host-kv.ts +0 -81
- package/src/internal/host-otel.ts +0 -231
- package/src/internal/host-platforms.ts +0 -170
- package/src/internal/hosted-admission-adapter.ts +0 -47
- package/src/internal/hosted-admission-context.ts +0 -37
- package/src/internal/hosted-catch-protocol.ts +0 -112
- package/src/internal/hosted-catch.ts +0 -179
- package/src/internal/hosted-delivery-protocol.ts +0 -824
- package/src/internal/hosted-delivery.ts +0 -1410
- package/src/internal/hosted-execution-diag.ts +0 -291
- package/src/internal/hosted-execution-flush.ts +0 -136
- package/src/internal/hosted-execution-latency.ts +0 -301
- package/src/internal/hosted-managed-automation.ts +0 -116
- package/src/internal/hosting.ts +0 -114
- package/src/internal/http-channel-define.ts +0 -25
- package/src/internal/http-channel.ts +0 -669
- package/src/internal/http-control-plane-session.ts +0 -110
- package/src/internal/ids.ts +0 -39
- package/src/internal/incoming-headers-to-fetch.ts +0 -45
- package/src/internal/init-interview.ts +0 -360
- package/src/internal/init-project.ts +0 -711
- package/src/internal/init-scaffold.ts +0 -182
- package/src/internal/inline-stdio-define-stub.ts +0 -4
- package/src/internal/inline-stdio-mcp.ts +0 -230
- package/src/internal/install-cursor-skills.ts +0 -604
- package/src/internal/is-record.ts +0 -3
- package/src/internal/json-schema.ts +0 -95
- package/src/internal/legacy-command-guard.ts +0 -66
- package/src/internal/listen-port.ts +0 -85
- package/src/internal/local-control-plane.ts +0 -442
- package/src/internal/local-env.ts +0 -59
- package/src/internal/local-ingress.ts +0 -90
- package/src/internal/log-ring.ts +0 -59
- package/src/internal/logs-client.ts +0 -477
- package/src/internal/map-pool.ts +0 -39
- package/src/internal/mcp-endpoint.ts +0 -747
- package/src/internal/mcp-host.ts +0 -509
- package/src/internal/mcp-oauth-on-demand.ts +0 -337
- package/src/internal/mcp-oauth-persist.ts +0 -118
- package/src/internal/mcp-oauth.ts +0 -549
- package/src/internal/net.ts +0 -29
- package/src/internal/open-browser.ts +0 -41
- package/src/internal/otel/attrs.ts +0 -16
- package/src/internal/otel/collector.ts +0 -937
- package/src/internal/otel/config.ts +0 -287
- package/src/internal/otel/http.ts +0 -122
- package/src/internal/otel/mcp.ts +0 -56
- package/src/internal/otel/propagation.ts +0 -17
- package/src/internal/otel/runtime.ts +0 -441
- package/src/internal/package-inline-stdio.ts +0 -114
- package/src/internal/peer-connections.ts +0 -96
- package/src/internal/platform-schedule-sync.ts +0 -75
- package/src/internal/platform-timers.ts +0 -365
- package/src/internal/playground/static.ts +0 -278
- package/src/internal/playground/toolchain.ts +0 -270
- package/src/internal/playground-proxy.ts +0 -564
- package/src/internal/process-memory-telemetry.ts +0 -334
- package/src/internal/project-layout.ts +0 -31
- package/src/internal/prompt-context.ts +0 -116
- package/src/internal/reminder-control-plane-protocol.ts +0 -482
- package/src/internal/reminder-runner.ts +0 -1559
- package/src/internal/reminder-schedule.ts +0 -104
- package/src/internal/reminder-store.ts +0 -176
- package/src/internal/request-error-status.ts +0 -95
- package/src/internal/request-headers.ts +0 -21
- package/src/internal/resolve-prod-target.ts +0 -334
- package/src/internal/resolved-connections.ts +0 -190
- package/src/internal/router.ts +0 -143
- package/src/internal/run-client.ts +0 -354
- package/src/internal/runtime-dispatch-runner.ts +0 -50
- package/src/internal/sanitize-mcp-tool-name.ts +0 -31
- package/src/internal/schedule-runner.ts +0 -154
- package/src/internal/scm/pr-url.ts +0 -245
- package/src/internal/sdk-runner.ts +0 -959
- package/src/internal/serve-restart.ts +0 -113
- package/src/internal/server.ts +0 -3147
- package/src/internal/session-cost.ts +0 -208
- package/src/internal/session-engine.ts +0 -5622
- package/src/internal/session-links.ts +0 -84
- package/src/internal/session-run-log.ts +0 -535
- package/src/internal/session-store.ts +0 -307
- package/src/internal/session-urls.ts +0 -32
- package/src/internal/sessions-client.ts +0 -239
- package/src/internal/skill-catalog.ts +0 -66
- package/src/internal/skills-sync.ts +0 -55
- package/src/internal/slack-provision-client.ts +0 -544
- package/src/internal/slack-thread-key.ts +0 -11
- package/src/internal/sleep.ts +0 -3
- package/src/internal/start-log-store.ts +0 -164
- package/src/internal/steering.ts +0 -17
- package/src/internal/storage-coordinator.ts +0 -800
- package/src/internal/storage-roles.ts +0 -86
- package/src/internal/storage.ts +0 -1
- package/src/internal/store-api-protocol.ts +0 -205
- package/src/internal/store-mirror.ts +0 -73
- package/src/internal/stream-progress.ts +0 -294
- package/src/internal/terminal-style.ts +0 -133
- package/src/internal/testing/factory-resource-fixtures.ts +0 -84
- package/src/internal/testing/scm-continuation-fixtures.ts +0 -285
- package/src/internal/tool-catalog.ts +0 -104
- package/src/internal/tool-policy.ts +0 -222
- package/src/internal/tool-result.ts +0 -50
- package/src/internal/trajectory.ts +0 -418
- package/src/internal/turn-cost.ts +0 -136
- package/src/internal/turn-governor.ts +0 -145
- package/src/internal/turn-lease-store.ts +0 -144
- package/src/internal/turn-outbox.ts +0 -77
- package/src/internal/update-check.ts +0 -517
- package/src/internal/v2-hosting.ts +0 -52
- package/src/internal/workspace-sync.ts +0 -114
- package/src/internal/workspace.ts +0 -505
- package/src/kv/memory-kv.ts +0 -94
- package/src/kv.ts +0 -18
- package/src/memory.ts +0 -487
- package/src/otel-public.ts +0 -24
- package/src/otel.ts +0 -320
- package/src/prompt.ts +0 -80
- package/src/reminders.ts +0 -65
- package/src/schedules.ts +0 -31
- package/src/skills.ts +0 -27
- package/src/storage-backends/cursor-hosted-v2.ts +0 -204
- package/src/storage-backends/cursor-hosted.ts +0 -388
- package/src/storage-backends/file-kv.ts +0 -276
- package/src/storage-protocol.ts +0 -261
- package/src/storage.ts +0 -408
- package/src/tools.ts +0 -166
- package/src/types.ts +0 -3776
- /package/dist/docs/assets/{reference_agent-config.md.DzGI777n.lean.js → reference_agent-config.md.Cj5uBKp4.lean.js} +0 -0
|
@@ -1,329 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* GitLab REST v4 client for the GitLab channel — the `createGitHubOctokit`
|
|
3
|
-
* / `createOriginClient` analogue.
|
|
4
|
-
*
|
|
5
|
-
* Two transports:
|
|
6
|
-
*
|
|
7
|
-
* - **Direct**: `PRIVATE-TOKEN` against `https://<host>/api/v4` with a
|
|
8
|
-
* project / group / personal access token from options or `GITLAB_TOKEN`.
|
|
9
|
-
* The host defaults to `GITLAB_API_BASE_URL`, else gitlab.com. `ctx.gitlab`
|
|
10
|
-
* never derives it from the webhook payload; only the replay CLI passes a
|
|
11
|
-
* user-supplied `projectWebUrl`.
|
|
12
|
-
* - **Proxy** (`--cursor-scm-proxy` with `cursorAccount`): the backend
|
|
13
|
-
* forwarder at `/v0/gitlab-proxy`. Calls carry the Cursor API key as the
|
|
14
|
-
* bearer plus `x-cursor-gitlab-projects` naming the project the call is
|
|
15
|
-
* scoped to; the backend swaps in the tenant's GitLab credential.
|
|
16
|
-
*
|
|
17
|
-
* Deliberately fetch-based rather than `@gitbeaker/rest`: the pack needs a
|
|
18
|
-
* handful of endpoints and one header hook, not a full SDK dependency.
|
|
19
|
-
*/
|
|
20
|
-
|
|
21
|
-
export const DEFAULT_GITLAB_API_BASE_URL = "https://gitlab.com/api/v4";
|
|
22
|
-
|
|
23
|
-
/** Header the SCM proxy reads to scope a GitLab call to one project. */
|
|
24
|
-
export const CURSOR_GITLAB_PROJECTS_HEADER = "x-cursor-gitlab-projects";
|
|
25
|
-
|
|
26
|
-
export type GitLabApiMethod = "DELETE" | "GET" | "PATCH" | "POST" | "PUT";
|
|
27
|
-
|
|
28
|
-
/** Normalized GitLab REST failure — the `GitHubApiError` analogue. */
|
|
29
|
-
export class GitLabApiError extends Error {
|
|
30
|
-
readonly body: unknown;
|
|
31
|
-
readonly method: string;
|
|
32
|
-
readonly path: string;
|
|
33
|
-
readonly status: number;
|
|
34
|
-
|
|
35
|
-
constructor(input: { body: unknown; method: string; path: string; status: number }) {
|
|
36
|
-
super(`GitLab ${input.method} ${input.path} failed with HTTP ${input.status}.`);
|
|
37
|
-
this.name = "GitLabApiError";
|
|
38
|
-
this.body = input.body;
|
|
39
|
-
this.method = input.method;
|
|
40
|
-
this.path = input.path;
|
|
41
|
-
this.status = input.status;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
export type GitLabTokenProvider = () => Promise<string> | string;
|
|
46
|
-
|
|
47
|
-
/** Backend SCM-proxy transport bound by the serve host in proxy mode. */
|
|
48
|
-
export interface GitLabProxyTransport {
|
|
49
|
-
/** `/v0/gitlab-proxy` base, see `resolveCursorGitLabProxyUrl`. */
|
|
50
|
-
apiBaseUrl: string;
|
|
51
|
-
/** Cursor API key sent as the bearer; the proxy swaps in the GitLab token. */
|
|
52
|
-
getApiKey: () => Promise<string>;
|
|
53
|
-
/** Static headers added to every call (project scope when declared). */
|
|
54
|
-
headers?: Readonly<Record<string, string>>;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
export interface GitLabClientOptions {
|
|
58
|
-
/** REST base, e.g. `https://gitlab.example.com/api/v4`. */
|
|
59
|
-
apiBaseUrl?: string;
|
|
60
|
-
/** Access token or provider for direct calls. Falls back to `GITLAB_TOKEN`. */
|
|
61
|
-
token?: string | GitLabTokenProvider;
|
|
62
|
-
/** Route through the Cursor SCM proxy instead of calling GitLab directly. */
|
|
63
|
-
proxy?: GitLabProxyTransport;
|
|
64
|
-
/**
|
|
65
|
-
* Project (`group/project`) every call is scoped to. Proxy mode sends it
|
|
66
|
-
* as `x-cursor-gitlab-projects` when no static header names one.
|
|
67
|
-
*/
|
|
68
|
-
project?: string;
|
|
69
|
-
/** Injectable fetch for tests. */
|
|
70
|
-
fetch?: typeof fetch;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
export interface GitLabRequestInput {
|
|
74
|
-
method: GitLabApiMethod;
|
|
75
|
-
/** Path under the API base, e.g. `/projects/42/statuses/<sha>`. */
|
|
76
|
-
path: string;
|
|
77
|
-
query?: Record<string, string | number | boolean | undefined>;
|
|
78
|
-
body?: unknown;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
/** Minimal authenticated GitLab REST client. */
|
|
82
|
-
export interface GitLabClient {
|
|
83
|
-
readonly apiBaseUrl: string;
|
|
84
|
-
/** Call a GitLab v4 path. Throws {@link GitLabApiError} on non-2xx. */
|
|
85
|
-
request<T = unknown>(input: GitLabRequestInput): Promise<T>;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
export interface GitLabApiMergeRequest {
|
|
89
|
-
iid: number;
|
|
90
|
-
title?: string;
|
|
91
|
-
description?: string;
|
|
92
|
-
state?: string;
|
|
93
|
-
draft?: boolean;
|
|
94
|
-
webUrl?: string;
|
|
95
|
-
headSha?: string;
|
|
96
|
-
sourceBranch?: string;
|
|
97
|
-
targetBranch?: string;
|
|
98
|
-
authorUsername?: string;
|
|
99
|
-
baseSha?: string;
|
|
100
|
-
changedFilesCount?: number;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
export interface GitLabApiMergeRequestDiff {
|
|
104
|
-
oldPath: string;
|
|
105
|
-
newPath: string;
|
|
106
|
-
patch?: string;
|
|
107
|
-
status: "added" | "modified" | "removed" | "renamed";
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
/** Project-bound merge-request reads shared by GitLab agents. */
|
|
111
|
-
export interface GitLabApi {
|
|
112
|
-
getMergeRequest(iid: number): Promise<GitLabApiMergeRequest>;
|
|
113
|
-
getMergeBaseSha(base: string, headSha: string): Promise<string | undefined>;
|
|
114
|
-
listMergeRequestDiffs(iid: number): Promise<GitLabApiMergeRequestDiff[]>;
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
function envValue(value: string | undefined): string | undefined {
|
|
118
|
-
const trimmed = value?.trim();
|
|
119
|
-
return trimmed === undefined || trimmed === "" ? undefined : trimmed;
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
/** `GITLAB_TOKEN` when set. */
|
|
123
|
-
export function envGitLabToken(env: NodeJS.ProcessEnv = process.env): string | undefined {
|
|
124
|
-
return envValue(env.GITLAB_TOKEN);
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
/**
|
|
128
|
-
* REST base for direct calls: `GITLAB_API_BASE_URL`, else `/api/v4` on the
|
|
129
|
-
* given project web URL's origin (self-managed hosts), else gitlab.com.
|
|
130
|
-
*/
|
|
131
|
-
export function gitlabApiBaseUrl(input?: {
|
|
132
|
-
projectWebUrl?: string;
|
|
133
|
-
env?: NodeJS.ProcessEnv;
|
|
134
|
-
}): string {
|
|
135
|
-
const fromEnv = envValue((input?.env ?? process.env).GITLAB_API_BASE_URL);
|
|
136
|
-
if (fromEnv !== undefined) {
|
|
137
|
-
return fromEnv.replace(/\/+$/, "");
|
|
138
|
-
}
|
|
139
|
-
if (input?.projectWebUrl !== undefined) {
|
|
140
|
-
try {
|
|
141
|
-
return `${new URL(input.projectWebUrl).origin}/api/v4`;
|
|
142
|
-
} catch {
|
|
143
|
-
// fall through to the default host
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
return DEFAULT_GITLAB_API_BASE_URL;
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
/**
|
|
150
|
-
* GitLab's `:id` path segment accepts a numeric id or a URL-encoded
|
|
151
|
-
* `group/project` path.
|
|
152
|
-
*/
|
|
153
|
-
export function gitlabProjectPathSegment(project: number | string): string {
|
|
154
|
-
return typeof project === "number"
|
|
155
|
-
? String(project)
|
|
156
|
-
: encodeURIComponent(project.replace(/^\/+|\/+$/g, ""));
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
function asRecord(value: unknown): Record<string, unknown> | undefined {
|
|
160
|
-
return typeof value === "object" && value !== null && !Array.isArray(value)
|
|
161
|
-
? (value as Record<string, unknown>)
|
|
162
|
-
: undefined;
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
function nonEmptyString(value: unknown): string | undefined {
|
|
166
|
-
return typeof value === "string" && value !== "" ? value : undefined;
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
const GITLAB_DIFFS_PER_PAGE = 100;
|
|
170
|
-
|
|
171
|
-
export function createGitLabApi(
|
|
172
|
-
client: Pick<GitLabClient, "request">,
|
|
173
|
-
project: number | string,
|
|
174
|
-
): GitLabApi {
|
|
175
|
-
const projectPath = `/projects/${gitlabProjectPathSegment(project)}`;
|
|
176
|
-
return {
|
|
177
|
-
async getMergeRequest(iid) {
|
|
178
|
-
const raw = await client.request<Record<string, unknown>>({
|
|
179
|
-
method: "GET",
|
|
180
|
-
path: `${projectPath}/merge_requests/${iid}`,
|
|
181
|
-
});
|
|
182
|
-
const diffRefs = asRecord(raw.diff_refs);
|
|
183
|
-
const changesCount = nonEmptyString(raw.changes_count);
|
|
184
|
-
return {
|
|
185
|
-
iid: (raw.iid as number | null | undefined) ?? iid,
|
|
186
|
-
title: raw.title as string | undefined,
|
|
187
|
-
description: raw.description === null ? undefined : (raw.description as string | undefined),
|
|
188
|
-
state: raw.state as string | undefined,
|
|
189
|
-
draft:
|
|
190
|
-
typeof raw.draft === "boolean"
|
|
191
|
-
? raw.draft
|
|
192
|
-
: typeof raw.work_in_progress === "boolean"
|
|
193
|
-
? raw.work_in_progress
|
|
194
|
-
: undefined,
|
|
195
|
-
webUrl: raw.web_url as string | undefined,
|
|
196
|
-
headSha:
|
|
197
|
-
(raw.sha as string | null | undefined) ?? (diffRefs?.head_sha as string | undefined),
|
|
198
|
-
sourceBranch: raw.source_branch as string | undefined,
|
|
199
|
-
targetBranch: raw.target_branch as string | undefined,
|
|
200
|
-
authorUsername: asRecord(raw.author)?.username as string | undefined,
|
|
201
|
-
baseSha: nonEmptyString(diffRefs?.base_sha),
|
|
202
|
-
changedFilesCount:
|
|
203
|
-
changesCount !== undefined && /^\d+$/.test(changesCount)
|
|
204
|
-
? Number(changesCount)
|
|
205
|
-
: undefined,
|
|
206
|
-
};
|
|
207
|
-
},
|
|
208
|
-
async getMergeBaseSha(base, headSha) {
|
|
209
|
-
const data = await client.request<{ id?: string }>({
|
|
210
|
-
method: "GET",
|
|
211
|
-
path: `${projectPath}/repository/merge_base?refs[]=${encodeURIComponent(base)}&refs[]=${encodeURIComponent(headSha)}`,
|
|
212
|
-
});
|
|
213
|
-
return nonEmptyString(data.id);
|
|
214
|
-
},
|
|
215
|
-
async listMergeRequestDiffs(iid) {
|
|
216
|
-
const files: GitLabApiMergeRequestDiff[] = [];
|
|
217
|
-
for (let page = 1; ; page += 1) {
|
|
218
|
-
const diffs = await client.request<Record<string, unknown>[]>({
|
|
219
|
-
method: "GET",
|
|
220
|
-
path: `${projectPath}/merge_requests/${iid}/diffs`,
|
|
221
|
-
query: { page, per_page: GITLAB_DIFFS_PER_PAGE },
|
|
222
|
-
});
|
|
223
|
-
for (const diff of diffs) {
|
|
224
|
-
const status =
|
|
225
|
-
diff.new_file === true
|
|
226
|
-
? "added"
|
|
227
|
-
: diff.deleted_file === true
|
|
228
|
-
? "removed"
|
|
229
|
-
: diff.renamed_file === true
|
|
230
|
-
? "renamed"
|
|
231
|
-
: "modified";
|
|
232
|
-
const rawPatch = typeof diff.diff === "string" ? diff.diff : undefined;
|
|
233
|
-
files.push({
|
|
234
|
-
oldPath: diff.old_path as string,
|
|
235
|
-
newPath: diff.new_path as string,
|
|
236
|
-
status,
|
|
237
|
-
patch: rawPatch?.replace(/\n$/, ""),
|
|
238
|
-
});
|
|
239
|
-
}
|
|
240
|
-
if (diffs.length < GITLAB_DIFFS_PER_PAGE) {
|
|
241
|
-
return files;
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
},
|
|
245
|
-
};
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
function buildQuery(query: GitLabRequestInput["query"]): string {
|
|
249
|
-
if (query === undefined) {
|
|
250
|
-
return "";
|
|
251
|
-
}
|
|
252
|
-
const params = new URLSearchParams();
|
|
253
|
-
for (const [key, value] of Object.entries(query)) {
|
|
254
|
-
if (value !== undefined) {
|
|
255
|
-
params.set(key, String(value));
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
const encoded = params.toString();
|
|
259
|
-
return encoded === "" ? "" : `?${encoded}`;
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
export function createGitLabClient(options: GitLabClientOptions = {}): GitLabClient {
|
|
263
|
-
const fetchImpl = options.fetch ?? fetch;
|
|
264
|
-
const apiBaseUrl = (
|
|
265
|
-
options.proxy?.apiBaseUrl ??
|
|
266
|
-
options.apiBaseUrl ??
|
|
267
|
-
gitlabApiBaseUrl()
|
|
268
|
-
).replace(/\/+$/, "");
|
|
269
|
-
const project = options.project?.trim().replace(/^\/+|\/+$/g, "");
|
|
270
|
-
|
|
271
|
-
const authHeaders = async (): Promise<Record<string, string>> => {
|
|
272
|
-
if (options.proxy !== undefined) {
|
|
273
|
-
const headers: Record<string, string> = {
|
|
274
|
-
authorization: `Bearer ${await options.proxy.getApiKey()}`,
|
|
275
|
-
...options.proxy.headers,
|
|
276
|
-
};
|
|
277
|
-
if (
|
|
278
|
-
(headers[CURSOR_GITLAB_PROJECTS_HEADER] ?? "").trim() === "" &&
|
|
279
|
-
project !== undefined &&
|
|
280
|
-
project !== ""
|
|
281
|
-
) {
|
|
282
|
-
headers[CURSOR_GITLAB_PROJECTS_HEADER] = project.toLowerCase();
|
|
283
|
-
}
|
|
284
|
-
return headers;
|
|
285
|
-
}
|
|
286
|
-
const token =
|
|
287
|
-
typeof options.token === "function"
|
|
288
|
-
? await options.token()
|
|
289
|
-
: (options.token ?? envGitLabToken());
|
|
290
|
-
if (token === undefined || token === "") {
|
|
291
|
-
throw new Error(
|
|
292
|
-
"gitlabChannel: no GitLab credential available (pass token, set GITLAB_TOKEN, or serve with --cursor-scm-proxy and cursorAccount).",
|
|
293
|
-
);
|
|
294
|
-
}
|
|
295
|
-
return { "private-token": token };
|
|
296
|
-
};
|
|
297
|
-
|
|
298
|
-
return {
|
|
299
|
-
apiBaseUrl,
|
|
300
|
-
async request<T = unknown>(input: GitLabRequestInput): Promise<T> {
|
|
301
|
-
const path = input.path.startsWith("/") ? input.path : `/${input.path}`;
|
|
302
|
-
const response = await fetchImpl(`${apiBaseUrl}${path}${buildQuery(input.query)}`, {
|
|
303
|
-
method: input.method,
|
|
304
|
-
headers: {
|
|
305
|
-
...(await authHeaders()),
|
|
306
|
-
accept: "application/json",
|
|
307
|
-
...(input.body === undefined ? {} : { "content-type": "application/json" }),
|
|
308
|
-
},
|
|
309
|
-
body: input.body === undefined ? undefined : JSON.stringify(input.body),
|
|
310
|
-
});
|
|
311
|
-
const text = await response.text();
|
|
312
|
-
let parsed: unknown;
|
|
313
|
-
try {
|
|
314
|
-
parsed = text === "" ? undefined : JSON.parse(text);
|
|
315
|
-
} catch {
|
|
316
|
-
parsed = text;
|
|
317
|
-
}
|
|
318
|
-
if (!response.ok) {
|
|
319
|
-
throw new GitLabApiError({
|
|
320
|
-
body: parsed,
|
|
321
|
-
method: input.method,
|
|
322
|
-
path,
|
|
323
|
-
status: response.status,
|
|
324
|
-
});
|
|
325
|
-
}
|
|
326
|
-
return parsed as T;
|
|
327
|
-
},
|
|
328
|
-
};
|
|
329
|
-
}
|
|
@@ -1,231 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Project / merge-request binding parsed from a GitLab webhook payload.
|
|
3
|
-
*
|
|
4
|
-
* Every GitLab hook payload carries `project` (`id`, `path_with_namespace`,
|
|
5
|
-
* `web_url`); the merge request lives under `object_attributes` for
|
|
6
|
-
* `merge_request` events and under `merge_request` for `note` / `pipeline`.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import {
|
|
10
|
-
createGitLabClient,
|
|
11
|
-
type GitLabClient,
|
|
12
|
-
type GitLabProxyTransport,
|
|
13
|
-
type GitLabRequestInput,
|
|
14
|
-
type GitLabTokenProvider,
|
|
15
|
-
gitlabApiBaseUrl,
|
|
16
|
-
} from "./api.js";
|
|
17
|
-
import {
|
|
18
|
-
createGitLabCheck,
|
|
19
|
-
type GitLabCheck,
|
|
20
|
-
type GitLabCheckCreateInput,
|
|
21
|
-
type GitLabCommitStatus,
|
|
22
|
-
type GitLabCommitStatusInput,
|
|
23
|
-
setGitLabCommitStatus,
|
|
24
|
-
} from "./checks.js";
|
|
25
|
-
import type {
|
|
26
|
-
GitLabMergeRequestEvent,
|
|
27
|
-
GitLabNoteableType,
|
|
28
|
-
GitLabProjectRef,
|
|
29
|
-
GitLabUser,
|
|
30
|
-
} from "./types.js";
|
|
31
|
-
|
|
32
|
-
/** GitLab operations exposed to hooks (`ctx.gitlab`), bound to the project. */
|
|
33
|
-
export interface GitLabHandle {
|
|
34
|
-
project: GitLabProjectRef;
|
|
35
|
-
/** Call a GitLab v4 path. Throws `GitLabApiError` on API failure. */
|
|
36
|
-
request<T = unknown>(input: GitLabRequestInput): Promise<T>;
|
|
37
|
-
/** Post a commit status on the bound project. */
|
|
38
|
-
setCommitStatus(input: Omit<GitLabCommitStatusInput, "project">): Promise<GitLabCommitStatus>;
|
|
39
|
-
/** Open a commit status through the shared check lifecycle. */
|
|
40
|
-
createCheck(input: Omit<GitLabCheckCreateInput, "gitlab" | "project">): Promise<GitLabCheck>;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* Build `ctx.gitlab` for one delivery. Lazy: no credential is resolved until
|
|
45
|
-
* the first call, so channels without outbound GitLab access still dispatch.
|
|
46
|
-
* Proxy mode (`cursorAccount` + `--cursor-scm-proxy`) wins when the host
|
|
47
|
-
* bound a transport; otherwise direct access with `token` / `GITLAB_TOKEN`.
|
|
48
|
-
*
|
|
49
|
-
* Nothing credentialed is derived from the payload: the API base comes from
|
|
50
|
-
* `apiBaseUrl` / `GITLAB_API_BASE_URL` (else gitlab.com), never from the
|
|
51
|
-
* delivery's `project.web_url`, so a forged hook cannot redirect the token to
|
|
52
|
-
* another host. Writes address the project by `path_with_namespace` — the
|
|
53
|
-
* same field the `projects` allowlist admits on — rather than by the
|
|
54
|
-
* independently forgeable numeric `project.id`.
|
|
55
|
-
*/
|
|
56
|
-
export function buildGitLabBinding(input: {
|
|
57
|
-
project: GitLabProjectRef;
|
|
58
|
-
proxy?: GitLabProxyTransport;
|
|
59
|
-
token?: string | GitLabTokenProvider;
|
|
60
|
-
apiBaseUrl?: string;
|
|
61
|
-
fetch?: typeof fetch;
|
|
62
|
-
}): GitLabHandle {
|
|
63
|
-
let client: GitLabClient | undefined;
|
|
64
|
-
const getClient = (): GitLabClient => {
|
|
65
|
-
client ??= createGitLabClient({
|
|
66
|
-
proxy: input.proxy,
|
|
67
|
-
token: input.token,
|
|
68
|
-
apiBaseUrl: input.apiBaseUrl ?? gitlabApiBaseUrl(),
|
|
69
|
-
project: input.project.pathWithNamespace,
|
|
70
|
-
fetch: input.fetch,
|
|
71
|
-
});
|
|
72
|
-
return client;
|
|
73
|
-
};
|
|
74
|
-
return {
|
|
75
|
-
project: input.project,
|
|
76
|
-
request: request => getClient().request(request),
|
|
77
|
-
setCommitStatus: status =>
|
|
78
|
-
setGitLabCommitStatus(getClient(), {
|
|
79
|
-
...status,
|
|
80
|
-
project: input.project.pathWithNamespace,
|
|
81
|
-
}),
|
|
82
|
-
createCheck: check =>
|
|
83
|
-
createGitLabCheck({
|
|
84
|
-
...check,
|
|
85
|
-
gitlab: getClient(),
|
|
86
|
-
project: input.project.pathWithNamespace,
|
|
87
|
-
}),
|
|
88
|
-
};
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
export function asRecord(value: unknown): Record<string, unknown> | undefined {
|
|
92
|
-
return typeof value === "object" && value !== null && !Array.isArray(value)
|
|
93
|
-
? (value as Record<string, unknown>)
|
|
94
|
-
: undefined;
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
export function asNonEmptyString(value: unknown): string | undefined {
|
|
98
|
-
return typeof value === "string" && value.trim() !== "" ? value.trim() : undefined;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
export function asPositiveInt(value: unknown): number | undefined {
|
|
102
|
-
if (typeof value === "number" && Number.isInteger(value) && value > 0) {
|
|
103
|
-
return value;
|
|
104
|
-
}
|
|
105
|
-
if (typeof value === "string" && /^[1-9]\d*$/.test(value)) {
|
|
106
|
-
return Number(value);
|
|
107
|
-
}
|
|
108
|
-
return undefined;
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
export function asBoolean(value: unknown): boolean | undefined {
|
|
112
|
-
return typeof value === "boolean" ? value : undefined;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
export function gitlabProjectFromPayload(
|
|
116
|
-
payload: Record<string, unknown>,
|
|
117
|
-
): GitLabProjectRef | undefined {
|
|
118
|
-
const project = asRecord(payload.project);
|
|
119
|
-
const id = asPositiveInt(project?.id) ?? asPositiveInt(payload.project_id);
|
|
120
|
-
const pathWithNamespace = asNonEmptyString(project?.path_with_namespace);
|
|
121
|
-
if (id === undefined || pathWithNamespace === undefined) {
|
|
122
|
-
return undefined;
|
|
123
|
-
}
|
|
124
|
-
const webUrl = asNonEmptyString(project?.web_url) ?? `https://gitlab.com/${pathWithNamespace}`;
|
|
125
|
-
const defaultBranch = asNonEmptyString(project?.default_branch);
|
|
126
|
-
return {
|
|
127
|
-
id,
|
|
128
|
-
pathWithNamespace,
|
|
129
|
-
webUrl,
|
|
130
|
-
...(defaultBranch === undefined ? {} : { defaultBranch }),
|
|
131
|
-
};
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
export function gitlabUser(value: unknown): GitLabUser | undefined {
|
|
135
|
-
const record = asRecord(value);
|
|
136
|
-
const id = asPositiveInt(record?.id);
|
|
137
|
-
const username = asNonEmptyString(record?.username);
|
|
138
|
-
if (id === undefined || username === undefined) {
|
|
139
|
-
return undefined;
|
|
140
|
-
}
|
|
141
|
-
const name = asNonEmptyString(record?.name);
|
|
142
|
-
return name === undefined ? { id, username } : { id, username, name };
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
/**
|
|
146
|
-
* The actor of a delivery. Most hooks nest it under `user`; `push` and
|
|
147
|
-
* `tag_push` flatten it to top-level `user_id` / `user_username` /
|
|
148
|
-
* `user_name` instead.
|
|
149
|
-
*/
|
|
150
|
-
export function gitlabSender(payload: Record<string, unknown>): GitLabUser | undefined {
|
|
151
|
-
return (
|
|
152
|
-
gitlabUser(payload.user) ??
|
|
153
|
-
gitlabUser({
|
|
154
|
-
id: payload.user_id,
|
|
155
|
-
username: payload.user_username,
|
|
156
|
-
name: payload.user_name,
|
|
157
|
-
})
|
|
158
|
-
);
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
export function gitlabMergeRequestUrl(
|
|
162
|
-
project: GitLabProjectRef,
|
|
163
|
-
iid: number,
|
|
164
|
-
explicit?: string,
|
|
165
|
-
): string {
|
|
166
|
-
return explicit ?? `${project.webUrl}/-/merge_requests/${iid}`;
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
/**
|
|
170
|
-
* Whether an `update` payload marks a draft merge request ready. GitLab uses
|
|
171
|
-
* either `changes.draft` or the legacy `changes.work_in_progress` shape.
|
|
172
|
-
*/
|
|
173
|
-
export function gitlabDraftMarkedReady(payload: Record<string, unknown>): boolean {
|
|
174
|
-
const changes = asRecord(payload.changes);
|
|
175
|
-
const draft = asRecord(changes?.draft ?? changes?.work_in_progress);
|
|
176
|
-
return draft?.current === false && draft.previous !== false;
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
/** Normalize a merge-request record (`object_attributes` or `merge_request`). */
|
|
180
|
-
export function gitlabMergeRequestFromRecord(
|
|
181
|
-
project: GitLabProjectRef,
|
|
182
|
-
record: Record<string, unknown> | undefined,
|
|
183
|
-
): GitLabMergeRequestEvent | undefined {
|
|
184
|
-
const iid = asPositiveInt(record?.iid);
|
|
185
|
-
if (record === undefined || iid === undefined) {
|
|
186
|
-
return undefined;
|
|
187
|
-
}
|
|
188
|
-
const labels = Array.isArray(record.labels)
|
|
189
|
-
? record.labels
|
|
190
|
-
.map(label => asNonEmptyString(asRecord(label)?.title))
|
|
191
|
-
.filter((title): title is string => title !== undefined)
|
|
192
|
-
: undefined;
|
|
193
|
-
const description =
|
|
194
|
-
record.description === null
|
|
195
|
-
? null
|
|
196
|
-
: typeof record.description === "string"
|
|
197
|
-
? record.description
|
|
198
|
-
: undefined;
|
|
199
|
-
return {
|
|
200
|
-
action: asNonEmptyString(record.action),
|
|
201
|
-
iid,
|
|
202
|
-
id: asPositiveInt(record.id),
|
|
203
|
-
url: gitlabMergeRequestUrl(project, iid, asNonEmptyString(record.url)),
|
|
204
|
-
title: asNonEmptyString(record.title),
|
|
205
|
-
description,
|
|
206
|
-
state: asNonEmptyString(record.state),
|
|
207
|
-
draft: asBoolean(record.draft) ?? asBoolean(record.work_in_progress),
|
|
208
|
-
sourceBranch: asNonEmptyString(record.source_branch),
|
|
209
|
-
targetBranch: asNonEmptyString(record.target_branch),
|
|
210
|
-
headSha: asNonEmptyString(asRecord(record.last_commit)?.id),
|
|
211
|
-
oldrev: asNonEmptyString(record.oldrev),
|
|
212
|
-
authorId: asPositiveInt(record.author_id),
|
|
213
|
-
...(labels === undefined ? {} : { labels }),
|
|
214
|
-
};
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
const NOTEABLE_TYPES: Readonly<Record<string, GitLabNoteableType>> = {
|
|
218
|
-
MergeRequest: "merge_request",
|
|
219
|
-
Issue: "issue",
|
|
220
|
-
Commit: "commit",
|
|
221
|
-
Snippet: "snippet",
|
|
222
|
-
};
|
|
223
|
-
|
|
224
|
-
/** `noteable_type: "MergeRequest"` → `merge_request`; unknown values pass through. */
|
|
225
|
-
export function normalizeGitLabNoteableType(value: unknown): string | undefined {
|
|
226
|
-
const raw = asNonEmptyString(value);
|
|
227
|
-
if (raw === undefined) {
|
|
228
|
-
return undefined;
|
|
229
|
-
}
|
|
230
|
-
return NOTEABLE_TYPES[raw] ?? raw.toLowerCase();
|
|
231
|
-
}
|