@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,296 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Origin webhook verification (Standard Webhooks `v1ed`).
|
|
3
|
-
*
|
|
4
|
-
* Direct Origin HTTP deliveries must verify the Ed25519 signature
|
|
5
|
-
* (`webhook-id`, `webhook-timestamp`, `webhook-signature`) against Origin's
|
|
6
|
-
* JWKS. Cursor-events relay deliveries skip this — the platform already
|
|
7
|
-
* verified the webhook before enqueueing.
|
|
8
|
-
*
|
|
9
|
-
* The signed content matches the Standard Webhooks `v1` scheme
|
|
10
|
-
* (`${webhook-id}.${webhook-timestamp}.${body}`) but is hashed to a lowercase
|
|
11
|
-
* hex SHA-256 before signing. Lifted from
|
|
12
|
-
* `factory/agentic-owners/agent/lib/origin-webhook.ts` /
|
|
13
|
-
* `backend/server/src/origin/webhooks/asymmetricWebhookSignature.ts`.
|
|
14
|
-
*/
|
|
15
|
-
import {
|
|
16
|
-
createHash,
|
|
17
|
-
createPublicKey,
|
|
18
|
-
type JsonWebKeyInput,
|
|
19
|
-
type KeyObject,
|
|
20
|
-
verify as verifyEd25519,
|
|
21
|
-
} from "node:crypto";
|
|
22
|
-
|
|
23
|
-
export const V1ED_SIGNATURE_VERSION = "v1ed";
|
|
24
|
-
export const DEFAULT_ORIGIN_API_BASE_URL = "https://origin.cursor.com";
|
|
25
|
-
|
|
26
|
-
/** ±5 minutes, the Standard Webhooks replay-window convention. */
|
|
27
|
-
const V1ED_TIMESTAMP_TOLERANCE_SECONDS = 5 * 60;
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* The sender emits exactly one v1ed entry; key rotation is handled by trying
|
|
31
|
-
* multiple public keys, never multiple signatures.
|
|
32
|
-
*/
|
|
33
|
-
const MAX_V1ED_CANDIDATE_SIGNATURES = 1;
|
|
34
|
-
|
|
35
|
-
export type OriginJwk = Record<string, unknown>;
|
|
36
|
-
|
|
37
|
-
export type OriginWebhookHeaders = {
|
|
38
|
-
"webhook-id"?: string;
|
|
39
|
-
"webhook-timestamp"?: string;
|
|
40
|
-
"webhook-signature"?: string;
|
|
41
|
-
};
|
|
42
|
-
|
|
43
|
-
export function buildV1edSignedContentDigest(args: {
|
|
44
|
-
webhookId: string;
|
|
45
|
-
timestampSeconds: number;
|
|
46
|
-
body: string | Buffer;
|
|
47
|
-
}): string {
|
|
48
|
-
const prefix = Buffer.from(`${args.webhookId}.${args.timestampSeconds}.`, "utf8");
|
|
49
|
-
const body = typeof args.body === "string" ? Buffer.from(args.body, "utf8") : args.body;
|
|
50
|
-
return createHash("sha256")
|
|
51
|
-
.update(Buffer.concat([prefix, body]))
|
|
52
|
-
.digest("hex");
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
* Verify a delivery's Standard Webhooks headers against the Origin signing
|
|
57
|
-
* JWKS. Owns the whole check: header presence, timestamp parsing, the replay
|
|
58
|
-
* window, and Ed25519 verification against any provided key.
|
|
59
|
-
*/
|
|
60
|
-
export function verifyV1edWebhookPayload(args: {
|
|
61
|
-
publicJwks: readonly OriginJwk[];
|
|
62
|
-
body: string | Buffer;
|
|
63
|
-
headers: OriginWebhookHeaders;
|
|
64
|
-
nowMs?: number;
|
|
65
|
-
}): boolean {
|
|
66
|
-
const webhookId = args.headers["webhook-id"];
|
|
67
|
-
const webhookTimestamp = args.headers["webhook-timestamp"];
|
|
68
|
-
const signatureHeader = args.headers["webhook-signature"];
|
|
69
|
-
if (webhookId === undefined || webhookTimestamp === undefined || signatureHeader === undefined) {
|
|
70
|
-
return false;
|
|
71
|
-
}
|
|
72
|
-
const timestampSeconds = Number.parseInt(webhookTimestamp, 10);
|
|
73
|
-
if (Number.isNaN(timestampSeconds)) {
|
|
74
|
-
return false;
|
|
75
|
-
}
|
|
76
|
-
const nowSeconds = Math.floor((args.nowMs ?? Date.now()) / 1000);
|
|
77
|
-
if (Math.abs(nowSeconds - timestampSeconds) > V1ED_TIMESTAMP_TOLERANCE_SECONDS) {
|
|
78
|
-
return false;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
const digestBytes = Buffer.from(
|
|
82
|
-
buildV1edSignedContentDigest({
|
|
83
|
-
webhookId,
|
|
84
|
-
timestampSeconds,
|
|
85
|
-
body: args.body,
|
|
86
|
-
}),
|
|
87
|
-
"utf8",
|
|
88
|
-
);
|
|
89
|
-
const candidateSignatures = signatureHeader
|
|
90
|
-
.split(/\s+/)
|
|
91
|
-
.filter(entry => entry.startsWith(`${V1ED_SIGNATURE_VERSION},`))
|
|
92
|
-
.map(entry => entry.slice(V1ED_SIGNATURE_VERSION.length + 1))
|
|
93
|
-
.slice(0, MAX_V1ED_CANDIDATE_SIGNATURES);
|
|
94
|
-
if (candidateSignatures.length === 0) {
|
|
95
|
-
return false;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
for (const jwk of args.publicJwks) {
|
|
99
|
-
let publicKey: KeyObject;
|
|
100
|
-
try {
|
|
101
|
-
publicKey = createPublicKey({
|
|
102
|
-
key: jwk,
|
|
103
|
-
format: "jwk",
|
|
104
|
-
} as JsonWebKeyInput);
|
|
105
|
-
} catch {
|
|
106
|
-
continue;
|
|
107
|
-
}
|
|
108
|
-
for (const candidate of candidateSignatures) {
|
|
109
|
-
const signature = Buffer.from(candidate, "base64");
|
|
110
|
-
try {
|
|
111
|
-
if (verifyEd25519(null, digestBytes, publicKey, signature)) {
|
|
112
|
-
return true;
|
|
113
|
-
}
|
|
114
|
-
} catch {
|
|
115
|
-
// Malformed signature bytes or a non-Ed25519 key: try the next pair.
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
return false;
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
function cacheControlDeltaMs(
|
|
123
|
-
cacheControl: string | null | undefined,
|
|
124
|
-
directive: "max-age" | "stale-if-error",
|
|
125
|
-
): number | undefined {
|
|
126
|
-
if (cacheControl == null || cacheControl === "") {
|
|
127
|
-
return undefined;
|
|
128
|
-
}
|
|
129
|
-
const match = new RegExp(`(?:^|,)\\s*${directive}\\s*=\\s*(\\d+)`, "i").exec(cacheControl);
|
|
130
|
-
if (match === null) {
|
|
131
|
-
return undefined;
|
|
132
|
-
}
|
|
133
|
-
return Number(match[1]) * 1000;
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
/**
|
|
137
|
-
* RFC 9111 `max-age` (seconds → ms) from a Cache-Control header.
|
|
138
|
-
* Does not read `s-maxage`. Missing or unparsable → `undefined`.
|
|
139
|
-
*/
|
|
140
|
-
export function cacheControlMaxAgeMs(cacheControl: string | null | undefined): number | undefined {
|
|
141
|
-
return cacheControlDeltaMs(cacheControl, "max-age");
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
/**
|
|
145
|
-
* RFC 5861 `stale-if-error` (seconds → ms). Missing → `undefined` (no
|
|
146
|
-
* fail-open after `max-age`).
|
|
147
|
-
*/
|
|
148
|
-
export function cacheControlStaleIfErrorMs(
|
|
149
|
-
cacheControl: string | null | undefined,
|
|
150
|
-
): number | undefined {
|
|
151
|
-
return cacheControlDeltaMs(cacheControl, "stale-if-error");
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
let jwksCache:
|
|
155
|
-
| {
|
|
156
|
-
apiBaseUrl: string;
|
|
157
|
-
keys: OriginJwk[];
|
|
158
|
-
freshUntilMs: number;
|
|
159
|
-
staleUntilMs: number;
|
|
160
|
-
}
|
|
161
|
-
| undefined;
|
|
162
|
-
|
|
163
|
-
export type FetchOriginJwksOptions = {
|
|
164
|
-
/** Skip the in-memory hit and call `/v1/origin/keys` (used after a verify miss). */
|
|
165
|
-
force?: boolean;
|
|
166
|
-
};
|
|
167
|
-
|
|
168
|
-
/**
|
|
169
|
-
* Return the in-memory Origin signing JWKS.
|
|
170
|
-
*
|
|
171
|
-
* Freshness is the JWKS response `Cache-Control: max-age`. After that, or
|
|
172
|
-
* when `force` is set, refetch. A failed refetch returns the last keys only
|
|
173
|
-
* while `stale-if-error` still applies; otherwise it throws (including a
|
|
174
|
-
* cold-cache miss).
|
|
175
|
-
*/
|
|
176
|
-
export async function fetchOriginJwks(
|
|
177
|
-
apiBaseUrl: string,
|
|
178
|
-
fetchImpl: typeof fetch = fetch,
|
|
179
|
-
options?: FetchOriginJwksOptions,
|
|
180
|
-
): Promise<readonly OriginJwk[]> {
|
|
181
|
-
const now = Date.now();
|
|
182
|
-
if (
|
|
183
|
-
options?.force !== true &&
|
|
184
|
-
jwksCache !== undefined &&
|
|
185
|
-
jwksCache.apiBaseUrl === apiBaseUrl &&
|
|
186
|
-
now < jwksCache.freshUntilMs
|
|
187
|
-
) {
|
|
188
|
-
return jwksCache.keys;
|
|
189
|
-
}
|
|
190
|
-
try {
|
|
191
|
-
const response = await fetchImpl(`${apiBaseUrl.replace(/\/+$/, "")}/v1/origin/keys`);
|
|
192
|
-
if (!response.ok) {
|
|
193
|
-
throw new Error(`Origin JWKS fetch failed: status=${response.status}`);
|
|
194
|
-
}
|
|
195
|
-
const body: unknown = await response.json().catch(() => undefined);
|
|
196
|
-
const keys =
|
|
197
|
-
typeof body === "object" &&
|
|
198
|
-
body !== null &&
|
|
199
|
-
Array.isArray((body as Record<string, unknown>).keys)
|
|
200
|
-
? ((body as Record<string, unknown>).keys as OriginJwk[])
|
|
201
|
-
: [];
|
|
202
|
-
if (keys.length === 0) {
|
|
203
|
-
throw new Error("Origin JWKS fetch returned no keys");
|
|
204
|
-
}
|
|
205
|
-
const cacheControl = response.headers.get("cache-control");
|
|
206
|
-
const maxAgeMs = cacheControlMaxAgeMs(cacheControl) ?? 0;
|
|
207
|
-
const staleIfErrorMs = cacheControlStaleIfErrorMs(cacheControl) ?? 0;
|
|
208
|
-
jwksCache = {
|
|
209
|
-
apiBaseUrl,
|
|
210
|
-
keys,
|
|
211
|
-
freshUntilMs: now + maxAgeMs,
|
|
212
|
-
staleUntilMs: now + maxAgeMs + staleIfErrorMs,
|
|
213
|
-
};
|
|
214
|
-
return keys;
|
|
215
|
-
} catch (error) {
|
|
216
|
-
if (
|
|
217
|
-
jwksCache !== undefined &&
|
|
218
|
-
jwksCache.apiBaseUrl === apiBaseUrl &&
|
|
219
|
-
now < jwksCache.staleUntilMs
|
|
220
|
-
) {
|
|
221
|
-
return jwksCache.keys;
|
|
222
|
-
}
|
|
223
|
-
throw error;
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
export interface VerifyOriginWebhookOptions {
|
|
228
|
-
apiBaseUrl?: string;
|
|
229
|
-
fetchImpl?: typeof fetch;
|
|
230
|
-
nowMs?: number;
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
/**
|
|
234
|
-
* The signing JWKS could not be fetched (and no cached copy applies), so
|
|
235
|
-
* the delivery was never actually checked. Callers must answer retryably
|
|
236
|
-
* (5xx) — a 401 would make Origin's delivery worker drop the wake as
|
|
237
|
-
* terminal on what is only a transient outage.
|
|
238
|
-
*/
|
|
239
|
-
export class OriginJwksUnavailableError extends Error {}
|
|
240
|
-
|
|
241
|
-
async function fetchJwksOrUnavailable(
|
|
242
|
-
apiBaseUrl: string,
|
|
243
|
-
fetchImpl: typeof fetch,
|
|
244
|
-
options?: FetchOriginJwksOptions,
|
|
245
|
-
): Promise<readonly OriginJwk[]> {
|
|
246
|
-
try {
|
|
247
|
-
return await fetchOriginJwks(apiBaseUrl, fetchImpl, options);
|
|
248
|
-
} catch (error) {
|
|
249
|
-
throw new OriginJwksUnavailableError(
|
|
250
|
-
`Origin JWKS unavailable: ${error instanceof Error ? error.message : String(error)}`,
|
|
251
|
-
);
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
/**
|
|
256
|
-
* Verify a Standard-Webhooks v1ed Origin payload. Throws
|
|
257
|
-
* {@link OriginJwksUnavailableError} when the keys cannot be fetched, and a
|
|
258
|
-
* plain error when the signature does not verify against them.
|
|
259
|
-
*/
|
|
260
|
-
export async function verifyOriginWebhook(
|
|
261
|
-
body: string | Buffer,
|
|
262
|
-
headers: OriginWebhookHeaders,
|
|
263
|
-
options?: VerifyOriginWebhookOptions,
|
|
264
|
-
): Promise<void> {
|
|
265
|
-
const apiBaseUrl = options?.apiBaseUrl ?? DEFAULT_ORIGIN_API_BASE_URL;
|
|
266
|
-
const fetchImpl = options?.fetchImpl ?? fetch;
|
|
267
|
-
const keys = await fetchJwksOrUnavailable(apiBaseUrl, fetchImpl);
|
|
268
|
-
if (
|
|
269
|
-
verifyV1edWebhookPayload({
|
|
270
|
-
publicJwks: keys,
|
|
271
|
-
body,
|
|
272
|
-
headers,
|
|
273
|
-
nowMs: options?.nowMs,
|
|
274
|
-
})
|
|
275
|
-
) {
|
|
276
|
-
return;
|
|
277
|
-
}
|
|
278
|
-
const refreshed = await fetchJwksOrUnavailable(apiBaseUrl, fetchImpl, {
|
|
279
|
-
force: true,
|
|
280
|
-
});
|
|
281
|
-
if (
|
|
282
|
-
!verifyV1edWebhookPayload({
|
|
283
|
-
publicJwks: refreshed,
|
|
284
|
-
body,
|
|
285
|
-
headers,
|
|
286
|
-
nowMs: options?.nowMs,
|
|
287
|
-
})
|
|
288
|
-
) {
|
|
289
|
-
throw new Error("Origin webhook signature verification failed");
|
|
290
|
-
}
|
|
291
|
-
}
|
|
292
|
-
|
|
293
|
-
/** Test helper: drop the in-process JWKS cache. */
|
|
294
|
-
export function resetOriginWebhookKeysCache(): void {
|
|
295
|
-
jwksCache = undefined;
|
|
296
|
-
}
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Origin PR comment reactions — the Origin analogue of the GitHub channel's
|
|
3
|
-
* `thread.react("eyes")`.
|
|
4
|
-
*
|
|
5
|
-
* Unlike checks and comments, reactions have no `/v1/origin/...` REST
|
|
6
|
-
* binding. The only write is Connect unary JSON against Origin's first-party
|
|
7
|
-
* service (`origin.v1.OriginService/SetCommentReaction`), which lives on a
|
|
8
|
-
* different host than the public REST API — {@link originRpcBaseUrl}, not
|
|
9
|
-
* {@link originPublicApiBaseUrl}. `ctx.origin.reactToComment` already points
|
|
10
|
-
* at the right one; a hand-built client must too.
|
|
11
|
-
*
|
|
12
|
-
* Writing needs `repository:pull_requests:reviews:write`: an `oit_…`
|
|
13
|
-
* installation token for app channels, or a deployment service-account
|
|
14
|
-
* session (hosted v2 forks). Origin rejects reactions on comments that
|
|
15
|
-
* belong to an unsubmitted review. API failures throw `OriginApiError`.
|
|
16
|
-
*/
|
|
17
|
-
|
|
18
|
-
import type { OriginApiMethod } from "./api.js";
|
|
19
|
-
|
|
20
|
-
/** Any client that can call Origin's ConnectRPC host. */
|
|
21
|
-
export interface OriginReactionClient {
|
|
22
|
-
request<T = unknown>(input: {
|
|
23
|
-
method: OriginApiMethod;
|
|
24
|
-
path: string;
|
|
25
|
-
body?: unknown;
|
|
26
|
-
}): Promise<T>;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
/** Connect unary route backing {@link setOriginCommentReaction}. */
|
|
30
|
-
export const SET_ORIGIN_COMMENT_REACTION_PATH = "/origin.v1.OriginService/SetCommentReaction";
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* The eight reactions Origin accepts. Anything else is rejected with
|
|
34
|
-
* `invalid_argument`, so channels get a compile error instead of a 400.
|
|
35
|
-
*/
|
|
36
|
-
export const ORIGIN_COMMENT_REACTIONS = ["👍", "👎", "😄", "🎉", "😕", "❤️", "🚀", "👀"] as const;
|
|
37
|
-
|
|
38
|
-
export type OriginCommentReaction = (typeof ORIGIN_COMMENT_REACTIONS)[number];
|
|
39
|
-
|
|
40
|
-
export interface OriginCommentReactionInput {
|
|
41
|
-
/** Origin comment TypeID (`cmt_…`), i.e. `comment.id` on a comment hook. */
|
|
42
|
-
commentId: string;
|
|
43
|
-
emoji: OriginCommentReaction;
|
|
44
|
-
/** `false` removes the reaction. Removing one that is absent is a no-op. */
|
|
45
|
-
active?: boolean;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* Add (or, with `active: false`, remove) one reaction on an Origin PR
|
|
50
|
-
* comment as the client's own principal.
|
|
51
|
-
*
|
|
52
|
-
* ```ts
|
|
53
|
-
* await setOriginCommentReaction({
|
|
54
|
-
* origin: createOriginClient({ apiBaseUrl: originRpcBaseUrl() }),
|
|
55
|
-
* commentId: comment.id,
|
|
56
|
-
* emoji: "👀",
|
|
57
|
-
* });
|
|
58
|
-
* ```
|
|
59
|
-
*/
|
|
60
|
-
export async function setOriginCommentReaction(
|
|
61
|
-
input: OriginCommentReactionInput & { origin: OriginReactionClient },
|
|
62
|
-
): Promise<void> {
|
|
63
|
-
await input.origin.request({
|
|
64
|
-
method: "POST",
|
|
65
|
-
path: SET_ORIGIN_COMMENT_REACTION_PATH,
|
|
66
|
-
body: {
|
|
67
|
-
commentId: input.commentId,
|
|
68
|
-
emoji: input.emoji,
|
|
69
|
-
active: input.active ?? true,
|
|
70
|
-
},
|
|
71
|
-
});
|
|
72
|
-
}
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Durable per-session Origin channel state.
|
|
3
|
-
*
|
|
4
|
-
* Persisted with the turn (same mechanism as `GitHubChannelState`) so
|
|
5
|
-
* channel stream-event handlers — reply delivery in ./defaults.ts — can
|
|
6
|
-
* rebuild a repo-bound Origin handle without re-parsing the webhook.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
export interface OriginChannelState {
|
|
10
|
-
owner: string;
|
|
11
|
-
repo: string;
|
|
12
|
-
pullRequestNumber: number | null;
|
|
13
|
-
/** Origin app installation id from the delivery envelope, when present. */
|
|
14
|
-
installationId: string | null;
|
|
15
|
-
/** Comment id that woke the turn (comment events only). */
|
|
16
|
-
triggeringCommentId: string | null;
|
|
17
|
-
deliveryId: string | null;
|
|
18
|
-
eventType: string | null;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export function emptyOriginChannelState(
|
|
22
|
-
overrides: Partial<OriginChannelState> = {},
|
|
23
|
-
): OriginChannelState {
|
|
24
|
-
return {
|
|
25
|
-
owner: "",
|
|
26
|
-
repo: "",
|
|
27
|
-
pullRequestNumber: null,
|
|
28
|
-
installationId: null,
|
|
29
|
-
triggeringCommentId: null,
|
|
30
|
-
deliveryId: null,
|
|
31
|
-
eventType: null,
|
|
32
|
-
...overrides,
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
/** Build the per-turn channel state from a dispatched event's context. */
|
|
37
|
-
export function originChannelStateForEvent(input: {
|
|
38
|
-
repository: { owner: string; name: string };
|
|
39
|
-
pullRequestNumber: number;
|
|
40
|
-
installationId?: string;
|
|
41
|
-
deliveryId?: string;
|
|
42
|
-
eventType: string;
|
|
43
|
-
triggeringCommentId?: string;
|
|
44
|
-
}): OriginChannelState {
|
|
45
|
-
return emptyOriginChannelState({
|
|
46
|
-
owner: input.repository.owner,
|
|
47
|
-
repo: input.repository.name,
|
|
48
|
-
pullRequestNumber: input.pullRequestNumber,
|
|
49
|
-
installationId: input.installationId ?? null,
|
|
50
|
-
triggeringCommentId: input.triggeringCommentId ?? null,
|
|
51
|
-
deliveryId: input.deliveryId ?? null,
|
|
52
|
-
eventType: input.eventType,
|
|
53
|
-
});
|
|
54
|
-
}
|