@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
package/src/internal/mcp-host.ts
DELETED
|
@@ -1,509 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Host-side MCP clients for authored `agent/mcp-connections/*` and
|
|
3
|
-
* `agent/host-connections/*`.
|
|
4
|
-
*
|
|
5
|
-
* Model-visible connections (`mcp-connections/`) are available in three
|
|
6
|
-
* places: SDK `mcpServers`, in-process server tools through
|
|
7
|
-
* {@link HostMcpRegistry} on {@link ToolContext.host}.mcp, and channel /
|
|
8
|
-
* webhook handlers through {@link HostMcpRegistry} on
|
|
9
|
-
* {@link ChannelHandlerArgs.host}.mcp. Host connections skip the model
|
|
10
|
-
* and stay on `host.mcp` plus `mcp oauth`.
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
import { UnauthorizedError } from "@modelcontextprotocol/sdk/client/auth.js";
|
|
14
|
-
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
|
|
15
|
-
import { SSEClientTransport } from "@modelcontextprotocol/sdk/client/sse.js";
|
|
16
|
-
import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";
|
|
17
|
-
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
|
|
18
|
-
import {
|
|
19
|
-
connectionAllowsTool,
|
|
20
|
-
type DiscoveredConnection,
|
|
21
|
-
type HostMcpCallResult,
|
|
22
|
-
type HostMcpRegistry,
|
|
23
|
-
type HostMcpToolInfo,
|
|
24
|
-
type JsonObject,
|
|
25
|
-
type McpToolAnnotations,
|
|
26
|
-
} from "../types.js";
|
|
27
|
-
import {
|
|
28
|
-
connectionCredentialsFingerprint,
|
|
29
|
-
resolveConnectionEnvTemplates,
|
|
30
|
-
} from "./connection-env.js";
|
|
31
|
-
import { CLI_COMMAND_NAME as CLI } from "./distribution.js";
|
|
32
|
-
import { createHostMcpOAuthProvider } from "./mcp-oauth.js";
|
|
33
|
-
import { instrumentedMcpFetch, mcpTraceMeta, runMcpClientSpan } from "./otel/mcp.js";
|
|
34
|
-
|
|
35
|
-
export class McpNeedsAuthError extends Error {
|
|
36
|
-
readonly connection: string;
|
|
37
|
-
|
|
38
|
-
constructor(connection: string, cause?: unknown) {
|
|
39
|
-
super(
|
|
40
|
-
`MCP connection "${connection}" needs authorization. Run \`${CLI} mcp oauth ${connection}\`.`,
|
|
41
|
-
);
|
|
42
|
-
this.name = "McpNeedsAuthError";
|
|
43
|
-
this.connection = connection;
|
|
44
|
-
if (cause !== undefined) {
|
|
45
|
-
this.cause = cause;
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
export function isMcpNeedsAuthError(error: unknown): error is McpNeedsAuthError {
|
|
51
|
-
return error instanceof McpNeedsAuthError;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
export function hostMcpCallNeedsAuth(result: HostMcpCallResult): boolean {
|
|
55
|
-
if (result.isError !== true) {
|
|
56
|
-
return false;
|
|
57
|
-
}
|
|
58
|
-
const text = result.content.map(part => (part.type === "text" ? part.text : "")).join("\n");
|
|
59
|
-
return text.includes("needsAuth") || text.includes("needs authorization");
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
function throwIfCallNeedsAuth(connection: string, result: HostMcpCallResult): HostMcpCallResult {
|
|
63
|
-
if (hostMcpCallNeedsAuth(result)) {
|
|
64
|
-
throw new McpNeedsAuthError(connection);
|
|
65
|
-
}
|
|
66
|
-
return result;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
interface OpenedConnection {
|
|
70
|
-
client: Client;
|
|
71
|
-
close: () => Promise<void>;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
interface CachedClient {
|
|
75
|
-
/** Fingerprint of the credentials this client opened with. */
|
|
76
|
-
credentials: string;
|
|
77
|
-
opened: Promise<OpenedConnection>;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
/**
|
|
81
|
-
* A non-caching view of one connection: every operation opens a fresh
|
|
82
|
-
* client and closes it afterwards. See {@link McpHost.oneOff}.
|
|
83
|
-
*/
|
|
84
|
-
export interface HostMcpOneOff {
|
|
85
|
-
listTools(): Promise<HostMcpToolInfo[]>;
|
|
86
|
-
callTool(toolName: string, args?: Record<string, unknown>): Promise<HostMcpCallResult>;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
export class McpHost implements HostMcpRegistry {
|
|
90
|
-
private readonly byName = new Map<string, DiscoveredConnection>();
|
|
91
|
-
private readonly clients = new Map<string, CachedClient>();
|
|
92
|
-
private oauthRedirectUrl: string | undefined;
|
|
93
|
-
|
|
94
|
-
constructor(connections: DiscoveredConnection[]) {
|
|
95
|
-
for (const connection of connections) {
|
|
96
|
-
this.byName.set(connection.name, connection);
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
/** Public serve callback for host OAuth (not the CLI loopback port on pods). */
|
|
101
|
-
setOAuthRedirectUrl(url: string): void {
|
|
102
|
-
this.oauthRedirectUrl = url;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
/**
|
|
106
|
-
* Register a connection after construction (serve-time resolved peers).
|
|
107
|
-
* Clients open lazily on first use, so adding before first call is safe.
|
|
108
|
-
*/
|
|
109
|
-
addConnection(connection: DiscoveredConnection): void {
|
|
110
|
-
this.byName.set(connection.name, connection);
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
names(): string[] {
|
|
114
|
-
return [...this.byName.keys()].sort();
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
async listTools(connectionName: string): Promise<HostMcpToolInfo[]> {
|
|
118
|
-
const connection = this.requireConnection(connectionName);
|
|
119
|
-
return runMcpClientSpan({ method: "tools/list", connection: connectionName }, () =>
|
|
120
|
-
this.withClient(connectionName, async client => {
|
|
121
|
-
const listed = await client.listTools(mcpListParams());
|
|
122
|
-
return listed.tools
|
|
123
|
-
.map(toToolInfo)
|
|
124
|
-
.filter(tool => connectionAllowsTool(connection, tool.name));
|
|
125
|
-
}),
|
|
126
|
-
);
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
/**
|
|
130
|
-
* A one-off view of a connection that is not (or not exactly) in the
|
|
131
|
-
* registry — e.g. a registered connection with per-session auth headers
|
|
132
|
-
* substituted in. Every operation opens a fresh client and closes it
|
|
133
|
-
* afterwards: the registry's cached per-name client would leak one
|
|
134
|
-
* session's identity into another, and stateless streamable-HTTP
|
|
135
|
-
* servers answer a fresh initialize cheaply. Results ride the same
|
|
136
|
-
* mapping as registry calls.
|
|
137
|
-
*/
|
|
138
|
-
oneOff(connection: DiscoveredConnection): HostMcpOneOff {
|
|
139
|
-
const redirectUrl = this.oauthRedirectUrl;
|
|
140
|
-
const withFreshClient = async <T>(run: (client: Client) => Promise<T>): Promise<T> => {
|
|
141
|
-
const opened = await openConnection(connection, redirectUrl);
|
|
142
|
-
try {
|
|
143
|
-
return await run(opened.client);
|
|
144
|
-
} finally {
|
|
145
|
-
await opened.close();
|
|
146
|
-
}
|
|
147
|
-
};
|
|
148
|
-
return {
|
|
149
|
-
listTools: () =>
|
|
150
|
-
runMcpClientSpan({ method: "tools/list", connection: connection.name }, () =>
|
|
151
|
-
withFreshClient(async client => {
|
|
152
|
-
const listed = await client.listTools(mcpListParams());
|
|
153
|
-
return listed.tools
|
|
154
|
-
.map(toToolInfo)
|
|
155
|
-
.filter(tool => connectionAllowsTool(connection, tool.name));
|
|
156
|
-
}),
|
|
157
|
-
),
|
|
158
|
-
callTool: (toolName, args = {}) => {
|
|
159
|
-
assertConnectionAllowsTool(connection, toolName);
|
|
160
|
-
return runMcpClientSpan(
|
|
161
|
-
{
|
|
162
|
-
method: "tools/call",
|
|
163
|
-
connection: connection.name,
|
|
164
|
-
toolName,
|
|
165
|
-
},
|
|
166
|
-
() =>
|
|
167
|
-
withFreshClient(async client => {
|
|
168
|
-
const result = await client.callTool({
|
|
169
|
-
name: toolName,
|
|
170
|
-
arguments: args,
|
|
171
|
-
...mcpCallMeta(),
|
|
172
|
-
});
|
|
173
|
-
return throwIfCallNeedsAuth(connection.name, normalizeCallResult(result));
|
|
174
|
-
}),
|
|
175
|
-
);
|
|
176
|
-
},
|
|
177
|
-
};
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
async callTool(
|
|
181
|
-
connectionName: string,
|
|
182
|
-
toolName: string,
|
|
183
|
-
args: Record<string, unknown> = {},
|
|
184
|
-
): Promise<HostMcpCallResult> {
|
|
185
|
-
const connection = this.requireConnection(connectionName);
|
|
186
|
-
assertConnectionAllowsTool(connection, toolName);
|
|
187
|
-
return runMcpClientSpan({ method: "tools/call", connection: connectionName, toolName }, () =>
|
|
188
|
-
this.withClient(connectionName, async client => {
|
|
189
|
-
const result = await client.callTool({
|
|
190
|
-
name: toolName,
|
|
191
|
-
arguments: args,
|
|
192
|
-
...mcpCallMeta(),
|
|
193
|
-
});
|
|
194
|
-
return throwIfCallNeedsAuth(connectionName, normalizeCallResult(result));
|
|
195
|
-
}),
|
|
196
|
-
);
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
async dropClient(name: string): Promise<void> {
|
|
200
|
-
const cached = this.clients.get(name);
|
|
201
|
-
this.clients.delete(name);
|
|
202
|
-
if (cached === undefined) {
|
|
203
|
-
return;
|
|
204
|
-
}
|
|
205
|
-
try {
|
|
206
|
-
await (await cached.opened).close();
|
|
207
|
-
} catch {
|
|
208
|
-
// Best-effort teardown.
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
async close(): Promise<void> {
|
|
213
|
-
const opened = await Promise.allSettled([...this.clients.values()].map(entry => entry.opened));
|
|
214
|
-
this.clients.clear();
|
|
215
|
-
await Promise.allSettled(
|
|
216
|
-
opened.map(async settled => {
|
|
217
|
-
if (settled.status === "fulfilled") {
|
|
218
|
-
await settled.value.close();
|
|
219
|
-
}
|
|
220
|
-
}),
|
|
221
|
-
);
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
/**
|
|
225
|
-
* Run against a cached host MCP client, reconnecting once when the remote
|
|
226
|
-
* Streamable HTTP session is gone (`session_terminated` / HTTP 404).
|
|
227
|
-
*
|
|
228
|
-
* Anytool (and the MCP spec) return 404 for unknown/terminated
|
|
229
|
-
* `Mcp-Session-Id`s so clients can re-initialize. The SDK transport keeps
|
|
230
|
-
* the dead session id, so without this invalidation every later host.mcp
|
|
231
|
-
* call fails until the serve process restarts.
|
|
232
|
-
*/
|
|
233
|
-
private async withClient<T>(name: string, run: (client: Client) => Promise<T>): Promise<T> {
|
|
234
|
-
const opened = await this.getClient(name);
|
|
235
|
-
try {
|
|
236
|
-
return await run(opened.client);
|
|
237
|
-
} catch (error) {
|
|
238
|
-
if (!isStaleMcpSessionError(error)) {
|
|
239
|
-
throw error;
|
|
240
|
-
}
|
|
241
|
-
await this.invalidateClient(name, opened);
|
|
242
|
-
const reopened = await this.getClient(name);
|
|
243
|
-
return await run(reopened.client);
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
/**
|
|
248
|
-
* Cached per connection, but only for as long as the credentials it opened
|
|
249
|
-
* with still apply: a hosted deployment binds its secrets per request, so a
|
|
250
|
-
* rotated (or first-ever) value would otherwise never reach a client opened
|
|
251
|
-
* on an earlier turn.
|
|
252
|
-
*/
|
|
253
|
-
private getClient(name: string): Promise<OpenedConnection> {
|
|
254
|
-
const credentials = connectionCredentialsFingerprint(this.requireConnection(name).transport);
|
|
255
|
-
const cached = this.clients.get(name);
|
|
256
|
-
if (cached !== undefined) {
|
|
257
|
-
if (cached.credentials === credentials) {
|
|
258
|
-
return cached.opened;
|
|
259
|
-
}
|
|
260
|
-
void this.dropClient(name);
|
|
261
|
-
}
|
|
262
|
-
// Only evict this entry: a connect that fails after its credentials were
|
|
263
|
-
// replaced would otherwise orphan the client that replaced it.
|
|
264
|
-
const entry: CachedClient = {
|
|
265
|
-
credentials,
|
|
266
|
-
opened: this.connect(name).catch(error => {
|
|
267
|
-
if (this.clients.get(name) === entry) {
|
|
268
|
-
this.clients.delete(name);
|
|
269
|
-
}
|
|
270
|
-
throw error;
|
|
271
|
-
}),
|
|
272
|
-
};
|
|
273
|
-
this.clients.set(name, entry);
|
|
274
|
-
return entry.opened;
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
private async invalidateClient(name: string, opened: OpenedConnection): Promise<void> {
|
|
278
|
-
const cached = this.clients.get(name);
|
|
279
|
-
if (cached !== undefined) {
|
|
280
|
-
try {
|
|
281
|
-
if ((await cached.opened) === opened) {
|
|
282
|
-
this.clients.delete(name);
|
|
283
|
-
}
|
|
284
|
-
} catch {
|
|
285
|
-
this.clients.delete(name);
|
|
286
|
-
}
|
|
287
|
-
}
|
|
288
|
-
await opened.close();
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
private requireConnection(name: string): DiscoveredConnection {
|
|
292
|
-
const connection = this.byName.get(name);
|
|
293
|
-
if (connection === undefined) {
|
|
294
|
-
const known = this.names().join(", ") || "(none)";
|
|
295
|
-
throw new Error(`Unknown MCP connection "${name}". Authored MCP connections: ${known}.`);
|
|
296
|
-
}
|
|
297
|
-
return connection;
|
|
298
|
-
}
|
|
299
|
-
|
|
300
|
-
private async connect(name: string): Promise<OpenedConnection> {
|
|
301
|
-
return openConnection(this.requireConnection(name), this.oauthRedirectUrl);
|
|
302
|
-
}
|
|
303
|
-
}
|
|
304
|
-
|
|
305
|
-
function assertConnectionAllowsTool(connection: DiscoveredConnection, toolName: string): void {
|
|
306
|
-
if (connectionAllowsTool(connection, toolName)) {
|
|
307
|
-
return;
|
|
308
|
-
}
|
|
309
|
-
throw new Error(`MCP connection "${connection.name}" does not allow tool "${toolName}".`);
|
|
310
|
-
}
|
|
311
|
-
|
|
312
|
-
/** Exported for unit tests. */
|
|
313
|
-
export function isStaleMcpSessionError(error: unknown): boolean {
|
|
314
|
-
if (!(error instanceof Error)) {
|
|
315
|
-
return false;
|
|
316
|
-
}
|
|
317
|
-
if (error.message.includes("session_terminated")) {
|
|
318
|
-
return true;
|
|
319
|
-
}
|
|
320
|
-
// StreamableHTTPError from the MCP SDK carries the HTTP status as `.code`.
|
|
321
|
-
const code = (error as { code?: unknown }).code;
|
|
322
|
-
return code === 404;
|
|
323
|
-
}
|
|
324
|
-
|
|
325
|
-
/** Longest server-supplied annotation title carried off a listing. */
|
|
326
|
-
const MAX_TOOL_ANNOTATION_TITLE_LENGTH = 256;
|
|
327
|
-
|
|
328
|
-
/**
|
|
329
|
-
* Bound a server's `Tool.annotations` to the MCP-spec fields: the four
|
|
330
|
-
* boolean hints plus a length-capped `title`. A server cannot stuff
|
|
331
|
-
* arbitrary payloads into every listing, and malformed values (a non-boolean
|
|
332
|
-
* hint, a non-object) behave like absent ones so consumers fail closed.
|
|
333
|
-
*
|
|
334
|
-
* Mirrors `@anysphere/mcp-core/mcp-tool-annotations` (`toolAnnotationsJsonField`),
|
|
335
|
-
* which this package cannot import: it publishes to npm and cannot take a
|
|
336
|
-
* workspace-only runtime dependency. Keep the two in sync.
|
|
337
|
-
*
|
|
338
|
-
* Exported for unit tests.
|
|
339
|
-
*/
|
|
340
|
-
export function boundedToolAnnotations(annotations: unknown): McpToolAnnotations | undefined {
|
|
341
|
-
if (typeof annotations !== "object" || annotations === null || Array.isArray(annotations)) {
|
|
342
|
-
return undefined;
|
|
343
|
-
}
|
|
344
|
-
const record = annotations as Record<string, unknown>;
|
|
345
|
-
const bounded: McpToolAnnotations = {};
|
|
346
|
-
if (typeof record.title === "string" && record.title.length > 0) {
|
|
347
|
-
bounded.title = record.title.slice(0, MAX_TOOL_ANNOTATION_TITLE_LENGTH);
|
|
348
|
-
}
|
|
349
|
-
for (const key of [
|
|
350
|
-
"readOnlyHint",
|
|
351
|
-
"destructiveHint",
|
|
352
|
-
"idempotentHint",
|
|
353
|
-
"openWorldHint",
|
|
354
|
-
] as const) {
|
|
355
|
-
const value = record[key];
|
|
356
|
-
if (typeof value === "boolean") {
|
|
357
|
-
bounded[key] = value;
|
|
358
|
-
}
|
|
359
|
-
}
|
|
360
|
-
return Object.keys(bounded).length === 0 ? undefined : bounded;
|
|
361
|
-
}
|
|
362
|
-
|
|
363
|
-
function toToolInfo(tool: {
|
|
364
|
-
name: string;
|
|
365
|
-
description?: string;
|
|
366
|
-
inputSchema?: unknown;
|
|
367
|
-
outputSchema?: unknown;
|
|
368
|
-
annotations?: unknown;
|
|
369
|
-
}): HostMcpToolInfo {
|
|
370
|
-
const annotations = boundedToolAnnotations(tool.annotations);
|
|
371
|
-
return {
|
|
372
|
-
name: tool.name,
|
|
373
|
-
...(tool.description === undefined ? {} : { description: tool.description }),
|
|
374
|
-
...(tool.inputSchema === undefined ? {} : { inputSchema: tool.inputSchema as JsonObject }),
|
|
375
|
-
...(tool.outputSchema === undefined ? {} : { outputSchema: tool.outputSchema as JsonObject }),
|
|
376
|
-
...(annotations === undefined ? {} : { annotations }),
|
|
377
|
-
};
|
|
378
|
-
}
|
|
379
|
-
|
|
380
|
-
async function openConnection(
|
|
381
|
-
connection: DiscoveredConnection,
|
|
382
|
-
oauthRedirectUrl?: string,
|
|
383
|
-
): Promise<OpenedConnection> {
|
|
384
|
-
const client = new Client({
|
|
385
|
-
name: "agent-serve",
|
|
386
|
-
version: "0.1.0",
|
|
387
|
-
});
|
|
388
|
-
const transport = await createTransport(connection, oauthRedirectUrl);
|
|
389
|
-
try {
|
|
390
|
-
await client.connect(transport);
|
|
391
|
-
} catch (error) {
|
|
392
|
-
if (error instanceof UnauthorizedError && isOauthHttpTransport(connection.transport)) {
|
|
393
|
-
throw new McpNeedsAuthError(connection.name, error);
|
|
394
|
-
}
|
|
395
|
-
throw error;
|
|
396
|
-
}
|
|
397
|
-
|
|
398
|
-
return {
|
|
399
|
-
client,
|
|
400
|
-
close: async () => {
|
|
401
|
-
try {
|
|
402
|
-
await client.close();
|
|
403
|
-
} catch {
|
|
404
|
-
// Best-effort teardown.
|
|
405
|
-
}
|
|
406
|
-
try {
|
|
407
|
-
await transport.close?.();
|
|
408
|
-
} catch {
|
|
409
|
-
// Best-effort teardown.
|
|
410
|
-
}
|
|
411
|
-
},
|
|
412
|
-
};
|
|
413
|
-
}
|
|
414
|
-
|
|
415
|
-
async function createTransport(connection: DiscoveredConnection, oauthRedirectUrl?: string) {
|
|
416
|
-
const transport = resolveConnectionEnvTemplates(connection.transport);
|
|
417
|
-
if ("agent" in transport) {
|
|
418
|
-
// Peers are resolved to concrete URLs by the serve host before any call
|
|
419
|
-
// (SessionEngine.setResolvedConnections); reaching here means the
|
|
420
|
-
// connection is being used outside a running server.
|
|
421
|
-
throw new Error(
|
|
422
|
-
`MCP connection "${connection.name}" targets peer agent "${transport.agent}" and has not been resolved; peer MCP connections are only callable on a running serve host.`,
|
|
423
|
-
);
|
|
424
|
-
}
|
|
425
|
-
if ("cursorAccount" in transport) {
|
|
426
|
-
// Same contract as peers: the serve host resolves the account bridge URL
|
|
427
|
-
// before any call (SessionEngine.setResolvedConnections).
|
|
428
|
-
throw new Error(
|
|
429
|
-
`MCP connection "${connection.name}" exposes the Cursor account's connectors and has not been resolved; Cursor account MCP connections are only callable on a running serve host.`,
|
|
430
|
-
);
|
|
431
|
-
}
|
|
432
|
-
if ("command" in transport) {
|
|
433
|
-
return new StdioClientTransport({
|
|
434
|
-
command: transport.command,
|
|
435
|
-
...(transport.args === undefined ? {} : { args: transport.args }),
|
|
436
|
-
env: {
|
|
437
|
-
...Object.fromEntries(
|
|
438
|
-
Object.entries(process.env).filter(
|
|
439
|
-
(entry): entry is [string, string] => entry[1] !== undefined,
|
|
440
|
-
),
|
|
441
|
-
),
|
|
442
|
-
...(transport.env ?? {}),
|
|
443
|
-
},
|
|
444
|
-
...(transport.cwd === undefined ? {} : { cwd: transport.cwd }),
|
|
445
|
-
});
|
|
446
|
-
}
|
|
447
|
-
|
|
448
|
-
const url = new URL(transport.url);
|
|
449
|
-
const requestInit = transport.headers === undefined ? undefined : { headers: transport.headers };
|
|
450
|
-
const authProvider =
|
|
451
|
-
transport.oauth === true
|
|
452
|
-
? await createHostMcpOAuthProvider({
|
|
453
|
-
identifier: connection.name,
|
|
454
|
-
resourceUrl: transport.url,
|
|
455
|
-
redirectUrl: oauthRedirectUrl,
|
|
456
|
-
})
|
|
457
|
-
: undefined;
|
|
458
|
-
|
|
459
|
-
const fetchImpl = instrumentedMcpFetch();
|
|
460
|
-
const fetchLike = (url: string | URL, init?: RequestInit) => fetchImpl(url, init);
|
|
461
|
-
if (transport.type === "sse") {
|
|
462
|
-
return new SSEClientTransport(url, {
|
|
463
|
-
requestInit,
|
|
464
|
-
authProvider,
|
|
465
|
-
fetch: fetchLike,
|
|
466
|
-
});
|
|
467
|
-
}
|
|
468
|
-
return new StreamableHTTPClientTransport(url, {
|
|
469
|
-
requestInit,
|
|
470
|
-
authProvider,
|
|
471
|
-
fetch: fetchLike,
|
|
472
|
-
});
|
|
473
|
-
}
|
|
474
|
-
|
|
475
|
-
function mcpListParams(): { _meta: { traceparent: string } } | undefined {
|
|
476
|
-
const meta = mcpTraceMeta();
|
|
477
|
-
return meta === undefined ? undefined : { _meta: meta };
|
|
478
|
-
}
|
|
479
|
-
|
|
480
|
-
function mcpCallMeta(): { _meta: { traceparent: string } } | Record<string, never> {
|
|
481
|
-
const meta = mcpTraceMeta();
|
|
482
|
-
return meta === undefined ? {} : { _meta: meta };
|
|
483
|
-
}
|
|
484
|
-
|
|
485
|
-
function isOauthHttpTransport(transport: DiscoveredConnection["transport"]): boolean {
|
|
486
|
-
return "url" in transport && transport.oauth === true;
|
|
487
|
-
}
|
|
488
|
-
|
|
489
|
-
function normalizeCallResult(result: unknown): HostMcpCallResult {
|
|
490
|
-
if (typeof result !== "object" || result === null) {
|
|
491
|
-
return {
|
|
492
|
-
content: [{ type: "text", text: String(result) }],
|
|
493
|
-
};
|
|
494
|
-
}
|
|
495
|
-
const record = result as {
|
|
496
|
-
content?: HostMcpCallResult["content"];
|
|
497
|
-
isError?: boolean;
|
|
498
|
-
structuredContent?: JsonObject;
|
|
499
|
-
};
|
|
500
|
-
return {
|
|
501
|
-
content: Array.isArray(record.content)
|
|
502
|
-
? record.content
|
|
503
|
-
: [{ type: "text", text: JSON.stringify(result) }],
|
|
504
|
-
...(record.isError === undefined ? {} : { isError: record.isError }),
|
|
505
|
-
...(record.structuredContent === undefined
|
|
506
|
-
? {}
|
|
507
|
-
: { structuredContent: record.structuredContent }),
|
|
508
|
-
};
|
|
509
|
-
}
|