@cursor/july 0.1.96 → 0.1.97
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/README.md +3 -2
- package/dist/bin/agent-serve.js +14 -3
- package/dist/channels/origin/api.d.ts +15 -4
- package/dist/channels/origin/api.d.ts.map +1 -1
- package/dist/channels/origin/api.js +19 -3
- package/dist/channels/origin/binding.d.ts +11 -0
- package/dist/channels/origin/binding.d.ts.map +1 -1
- package/dist/channels/origin/binding.js +41 -25
- package/dist/channels/origin/index.d.ts +1 -0
- package/dist/channels/origin/index.d.ts.map +1 -1
- package/dist/channels/origin/index.js +1 -0
- package/dist/channels/origin/origin-channel.d.ts.map +1 -1
- package/dist/channels/origin/origin-channel.js +3 -0
- package/dist/channels/origin/reactions.d.ts +56 -0
- package/dist/channels/origin/reactions.d.ts.map +1 -0
- package/dist/channels/origin/reactions.js +67 -0
- package/dist/channels/origin/types.d.ts +11 -0
- package/dist/channels/origin/types.d.ts.map +1 -1
- package/dist/channels/slack/approvals.d.ts +16 -0
- package/dist/channels/slack/approvals.d.ts.map +1 -1
- package/dist/channels/slack/approvals.js +86 -0
- package/dist/channels/slack/cli-project.d.ts +19 -0
- package/dist/channels/slack/cli-project.d.ts.map +1 -0
- package/dist/channels/slack/cli-project.js +234 -0
- package/dist/channels/slack/defaults.d.ts.map +1 -1
- package/dist/channels/slack/defaults.js +97 -39
- package/dist/channels/slack/init.d.ts +3 -2
- package/dist/channels/slack/init.d.ts.map +1 -1
- package/dist/channels/slack/init.js +5 -5
- package/dist/channels/slack/interactive.d.ts +2 -1
- package/dist/channels/slack/interactive.d.ts.map +1 -1
- package/dist/channels/slack/interactive.js +15 -4
- package/dist/channels/slack/manifest.d.ts +1 -1
- package/dist/channels/slack/manifest.js +1 -1
- package/dist/channels/slack/setup.d.ts +1 -1
- package/dist/channels/slack/setup.d.ts.map +1 -1
- package/dist/channels/slack/setup.js +10 -6
- package/dist/channels/slack/slack-channel.d.ts.map +1 -1
- package/dist/channels/slack/slack-channel.js +1 -0
- package/dist/channels/slack/tool-approval-events.d.ts.map +1 -1
- package/dist/channels/slack/tool-approval-events.js +91 -1
- package/dist/docs/404.html +2 -2
- package/dist/docs/ab.html +4 -4
- package/dist/docs/assets/{app.jXleCmOc.js → app.B3rWNYE1.js} +1 -1
- package/dist/docs/assets/chunks/@localSearchIndexroot.BU9nHdnQ.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.8LhyglIT.js → VPLocalSearchBox.C1lhqJJR.js} +1 -1
- package/dist/docs/assets/chunks/{theme.9ged-pr2.js → theme.B40_SXuv.js} +2 -2
- package/dist/docs/assets/{deployment.md.D9msOFOW.js → deployment.md.MFPKqsqI.js} +2 -2
- package/dist/docs/assets/{guides_mcp-oauth.md.DPYmBCbV.js → guides_mcp-oauth.md.CN-6YmTJ.js} +4 -4
- package/dist/docs/assets/{guides_mcp-oauth.md.DPYmBCbV.lean.js → guides_mcp-oauth.md.CN-6YmTJ.lean.js} +1 -1
- package/dist/docs/assets/guides_slack.md.VDXQV3ja.js +22 -0
- package/dist/docs/assets/guides_slack.md.VDXQV3ja.lean.js +1 -0
- package/dist/docs/assets/index.md.CVeRUOeZ.js +5 -0
- package/dist/docs/assets/{reference_agent-config.md.Cp_x38Nl.js → reference_agent-config.md.BHeYMgme.js} +1 -1
- package/dist/docs/assets/{reference_cli.md.CCnG-nJx.js → reference_cli.md.RyZf5OTE.js} +9 -6
- package/dist/docs/assets/{reference_cli.md.CCnG-nJx.lean.js → reference_cli.md.RyZf5OTE.lean.js} +1 -1
- package/dist/docs/assets/{reference_connections.md.BH8Oc0D0.js → reference_connections.md.DxldvyIB.js} +4 -3
- package/dist/docs/assets/{reference_http-api.md.D89k1mdm.js → reference_http-api.md.5zOAbV86.js} +1 -1
- package/dist/docs/assets/reference_sessions.md.NxFP_CAC.js +1 -0
- package/dist/docs/assets/{reference_tools.md.BHeXn2id.js → reference_tools.md.B84gw9Ii.js} +1 -1
- package/dist/docs/assets/templates_agents-md.md.CXSMZljE.js +2 -0
- package/dist/docs/assets/templates_agents-md.md.CXSMZljE.lean.js +1 -0
- package/dist/docs/assets/troubleshooting.md.DCiPBhYs.js +1 -0
- package/dist/docs/building-with-agents.html +4 -4
- package/dist/docs/concepts.html +4 -4
- package/dist/docs/deployment.html +7 -7
- package/dist/docs/deployment.md +5 -4
- package/dist/docs/evals.html +4 -4
- package/dist/docs/guides/agent-to-agent.html +4 -4
- package/dist/docs/guides/cloud-runtime.html +4 -4
- package/dist/docs/guides/convert-automation.html +4 -4
- package/dist/docs/guides/github.html +4 -4
- package/dist/docs/guides/human-in-the-loop.html +4 -4
- package/dist/docs/guides/mcp-oauth.html +8 -8
- package/dist/docs/guides/mcp-oauth.md +26 -8
- package/dist/docs/guides/opentelemetry.html +4 -4
- package/dist/docs/guides/slack.html +17 -33
- package/dist/docs/guides/slack.md +92 -201
- package/dist/docs/guides/webhooks.html +4 -4
- package/dist/docs/hashmap.json +1 -1
- package/dist/docs/hillclimbing.html +4 -4
- package/dist/docs/index.html +6 -6
- package/dist/docs/index.md +5 -3
- package/dist/docs/llms-full.txt +299 -653
- package/dist/docs/llms.txt +2 -2
- package/dist/docs/quickstart.html +4 -4
- package/dist/docs/reference/agent-config.html +6 -6
- package/dist/docs/reference/agent-config.md +2 -2
- package/dist/docs/reference/artifacts.html +4 -4
- package/dist/docs/reference/channels.html +4 -4
- package/dist/docs/reference/cli.html +13 -10
- package/dist/docs/reference/cli.md +38 -16
- package/dist/docs/reference/connections.html +9 -8
- package/dist/docs/reference/connections.md +6 -3
- package/dist/docs/reference/hooks.html +4 -4
- package/dist/docs/reference/http-api.html +6 -6
- package/dist/docs/reference/http-api.md +2 -1
- package/dist/docs/reference/instructions.html +4 -4
- package/dist/docs/reference/playground.html +4 -4
- package/dist/docs/reference/project-layout.html +4 -4
- package/dist/docs/reference/prompt.html +4 -4
- package/dist/docs/reference/schedules.html +4 -4
- package/dist/docs/reference/sessions.html +5 -5
- package/dist/docs/reference/sessions.md +4 -2
- package/dist/docs/reference/skills.html +4 -4
- package/dist/docs/reference/subagents.html +4 -4
- package/dist/docs/reference/tools.html +6 -6
- package/dist/docs/reference/tools.md +9 -2
- package/dist/docs/scaffolding-agents.html +4 -4
- package/dist/docs/storage.html +4 -4
- package/dist/docs/templates/agentic-owners.html +4 -4
- package/dist/docs/templates/agents-md.html +28 -0
- package/dist/docs/templates/agents-md.md +105 -0
- package/dist/docs/templates/code-wiki.html +5 -5
- package/dist/docs/templates/demo.html +4 -4
- package/dist/docs/templates/pr-autofixer.html +4 -4
- package/dist/docs/templates/security-help.html +4 -4
- package/dist/docs/templates/security-reviewer.html +5 -5
- package/dist/docs/templates/triage.html +4 -4
- package/dist/docs/troubleshooting.html +5 -5
- package/dist/docs/troubleshooting.md +2 -2
- package/dist/evals/run-facts.d.ts.map +1 -1
- package/dist/evals/run-facts.js +27 -0
- package/dist/internal/advertise-tools.d.ts.map +1 -1
- package/dist/internal/advertise-tools.js +15 -9
- package/dist/internal/approval-gate.d.ts +12 -13
- package/dist/internal/approval-gate.d.ts.map +1 -1
- package/dist/internal/approval-gate.js +16 -21
- package/dist/internal/chat-client.js +10 -0
- package/dist/internal/cli-deploy.d.ts +5 -0
- package/dist/internal/cli-deploy.d.ts.map +1 -1
- package/dist/internal/cli-deploy.js +50 -17
- package/dist/internal/cli-mcp-oauth.js +8 -18
- package/dist/internal/cli-slack-manual.d.ts +24 -2
- package/dist/internal/cli-slack-manual.d.ts.map +1 -1
- package/dist/internal/cli-slack-manual.js +251 -20
- package/dist/internal/cli-slack.d.ts +9 -2
- package/dist/internal/cli-slack.d.ts.map +1 -1
- package/dist/internal/cli-slack.js +29 -82
- package/dist/internal/cursor/account-mcp.d.ts +1 -0
- package/dist/internal/cursor/account-mcp.d.ts.map +1 -1
- package/dist/internal/cursor/account-mcp.js +17 -0
- package/dist/internal/cursor-agent-template.d.ts +1 -1
- package/dist/internal/cursor-agent-template.d.ts.map +1 -1
- package/dist/internal/cursor-agent-template.js +1 -0
- package/dist/internal/deploy-client.d.ts +17 -0
- package/dist/internal/deploy-client.d.ts.map +1 -1
- package/dist/internal/deploy-client.js +31 -10
- package/dist/internal/env-file.d.ts +19 -0
- package/dist/internal/env-file.d.ts.map +1 -0
- package/dist/internal/env-file.js +90 -0
- package/dist/internal/framework-file-storage.d.ts +1 -1
- package/dist/internal/framework-file-storage.d.ts.map +1 -1
- package/dist/internal/framework-file-storage.js +6 -0
- package/dist/internal/hosted-delivery-protocol.d.ts +7 -0
- package/dist/internal/hosted-delivery-protocol.d.ts.map +1 -1
- package/dist/internal/hosted-delivery-protocol.js +7 -0
- package/dist/internal/hosted-delivery.d.ts +6 -0
- package/dist/internal/hosted-delivery.d.ts.map +1 -1
- package/dist/internal/hosted-delivery.js +63 -22
- package/dist/internal/hosted-execution-diag.d.ts +48 -0
- package/dist/internal/hosted-execution-diag.d.ts.map +1 -0
- package/dist/internal/hosted-execution-diag.js +150 -0
- package/dist/internal/http-channel.d.ts.map +1 -1
- package/dist/internal/http-channel.js +81 -1
- package/dist/internal/init-project.d.ts.map +1 -1
- package/dist/internal/init-project.js +2 -0
- package/dist/internal/logs-client.d.ts +5 -0
- package/dist/internal/logs-client.d.ts.map +1 -1
- package/dist/internal/logs-client.js +5 -0
- package/dist/internal/mcp-endpoint.js +2 -3
- package/dist/internal/mcp-host.d.ts +10 -0
- package/dist/internal/mcp-host.d.ts.map +1 -1
- package/dist/internal/mcp-host.js +57 -8
- package/dist/internal/mcp-oauth-on-demand.d.ts +68 -0
- package/dist/internal/mcp-oauth-on-demand.d.ts.map +1 -0
- package/dist/internal/mcp-oauth-on-demand.js +287 -0
- package/dist/internal/mcp-oauth-persist.d.ts +42 -0
- package/dist/internal/mcp-oauth-persist.d.ts.map +1 -0
- package/dist/internal/mcp-oauth-persist.js +92 -0
- package/dist/internal/mcp-oauth.d.ts +1 -0
- package/dist/internal/mcp-oauth.d.ts.map +1 -1
- package/dist/internal/mcp-oauth.js +10 -2
- package/dist/internal/otel/collector.d.ts.map +1 -1
- package/dist/internal/otel/collector.js +22 -9
- package/dist/internal/server.d.ts +3 -0
- package/dist/internal/server.d.ts.map +1 -1
- package/dist/internal/server.js +49 -22
- package/dist/internal/session-engine.d.ts +88 -3
- package/dist/internal/session-engine.d.ts.map +1 -1
- package/dist/internal/session-engine.js +515 -43
- package/dist/internal/sessions-client.d.ts +9 -7
- package/dist/internal/sessions-client.d.ts.map +1 -1
- package/dist/internal/sessions-client.js +3 -1
- package/dist/internal/storage-coordinator.d.ts +7 -0
- package/dist/internal/storage-coordinator.d.ts.map +1 -1
- package/dist/internal/storage-coordinator.js +28 -5
- package/dist/internal/storage-roles.d.ts +5 -0
- package/dist/internal/storage-roles.d.ts.map +1 -1
- package/dist/internal/stream-progress.d.ts.map +1 -1
- package/dist/internal/stream-progress.js +10 -0
- package/dist/internal/tool-policy.d.ts +9 -1
- package/dist/internal/tool-policy.d.ts.map +1 -1
- package/dist/internal/tool-policy.js +13 -0
- package/dist/internal/trajectory.d.ts.map +1 -1
- package/dist/internal/trajectory.js +10 -0
- package/dist/internal/turn-outbox.d.ts +24 -0
- package/dist/internal/turn-outbox.d.ts.map +1 -0
- package/dist/internal/turn-outbox.js +80 -0
- package/dist/playground/assets/{index-Cx9CclK_.js → index-DrkI6y5O.js} +45 -45
- package/dist/playground/assets/index-DzNGwm7q.css +1 -0
- package/dist/playground/index.html +2 -2
- package/dist/storage-backends/cursor-hosted.d.ts +1 -1
- package/dist/storage-backends/cursor-hosted.d.ts.map +1 -1
- package/dist/storage-backends/cursor-hosted.js +12 -0
- package/dist/storage.d.ts +8 -0
- package/dist/storage.d.ts.map +1 -1
- package/dist/types.d.ts +63 -7
- package/dist/types.d.ts.map +1 -1
- package/docs/README.md +5 -3
- package/docs/deployment.md +5 -4
- package/docs/guides/mcp-oauth.md +26 -8
- package/docs/guides/slack.md +93 -202
- package/docs/reference/agent-config.md +2 -2
- package/docs/reference/cli.md +38 -16
- package/docs/reference/connections.md +6 -3
- package/docs/reference/http-api.md +2 -1
- package/docs/reference/sessions.md +4 -2
- package/docs/reference/tools.md +9 -2
- package/docs/templates/agents-md.md +110 -0
- package/docs/troubleshooting.md +2 -2
- package/package.json +1 -1
- package/skills/create-agent/SKILL.md +2 -1
- package/skills/mcp-auth/SKILL.md +6 -3
- package/skills/setup-slack/SKILL.md +23 -13
- package/src/bin/agent-serve.ts +13 -1
- package/src/channels/origin/api.ts +24 -5
- package/src/channels/origin/binding.ts +55 -26
- package/src/channels/origin/index.ts +1 -0
- package/src/channels/origin/origin-channel.ts +4 -0
- package/src/channels/origin/reactions.ts +82 -0
- package/src/channels/origin/types.ts +11 -0
- package/src/channels/slack/approvals.ts +105 -0
- package/src/channels/slack/cli-project.ts +267 -0
- package/src/channels/slack/defaults.ts +109 -46
- package/src/channels/slack/init.ts +10 -5
- package/src/channels/slack/interactive.ts +35 -9
- package/src/channels/slack/manifest.ts +1 -1
- package/src/channels/slack/setup.ts +10 -6
- package/src/channels/slack/slack-channel.ts +1 -0
- package/src/channels/slack/tool-approval-events.ts +93 -0
- package/src/evals/run-facts.ts +32 -0
- package/src/internal/advertise-tools.ts +31 -10
- package/src/internal/approval-gate.ts +20 -29
- package/src/internal/chat-client.ts +19 -0
- package/src/internal/cli-deploy.ts +79 -9
- package/src/internal/cli-mcp-oauth.ts +7 -21
- package/src/internal/cli-slack-manual.ts +350 -18
- package/src/internal/cli-slack.ts +40 -84
- package/src/internal/cursor/account-mcp.ts +21 -0
- package/src/internal/cursor-agent-template.ts +1 -0
- package/src/internal/deploy-client.ts +43 -0
- package/src/internal/env-file.ts +84 -0
- package/src/internal/framework-file-storage.ts +7 -1
- package/src/internal/hosted-delivery-protocol.ts +7 -0
- package/src/internal/hosted-delivery.ts +100 -27
- package/src/internal/hosted-execution-diag.ts +207 -0
- package/src/internal/http-channel.ts +99 -0
- package/src/internal/init-project.ts +2 -0
- package/src/internal/logs-client.ts +5 -0
- package/src/internal/mcp-endpoint.ts +13 -4
- package/src/internal/mcp-host.ts +77 -11
- package/src/internal/mcp-oauth-on-demand.ts +352 -0
- package/src/internal/mcp-oauth-persist.ts +127 -0
- package/src/internal/mcp-oauth.ts +17 -1
- package/src/internal/otel/collector.ts +30 -0
- package/src/internal/server.ts +59 -9
- package/src/internal/session-engine.ts +659 -56
- package/src/internal/sessions-client.ts +17 -8
- package/src/internal/storage-coordinator.ts +38 -8
- package/src/internal/storage-roles.ts +7 -0
- package/src/internal/stream-progress.ts +19 -0
- package/src/internal/tool-policy.ts +18 -0
- package/src/internal/trajectory.ts +10 -0
- package/src/internal/turn-outbox.ts +85 -0
- package/src/storage-backends/cursor-hosted.ts +13 -1
- package/src/storage.ts +12 -0
- package/src/types.ts +68 -8
- package/templates/agents-md/README.md +39 -0
- package/templates/agents-md/agent/agent.ts +8 -0
- package/templates/agents-md/agent/channels/github.ts +10 -0
- package/templates/agents-md/agent/channels/queue.ts +28 -0
- package/templates/agents-md/agent/channels/slack.ts +9 -0
- package/templates/agents-md/agent/instructions.md +39 -0
- package/templates/agents-md/agent/lib/collect.ts +439 -0
- package/templates/agents-md/agent/lib/config.ts +8 -0
- package/templates/agents-md/agent/lib/paths.ts +51 -0
- package/templates/agents-md/agent/schedules/weekly.ts +17 -0
- package/templates/agents-md/agent/tools/apply_agents.ts +226 -0
- package/templates/agents-md/evals/agents.eval.ts +135 -0
- package/templates/agents-md/evals/evals.config.ts +5 -0
- package/templates/agents-md/init.json +38 -0
- package/templates/agents-md/package.json +18 -0
- package/templates/agents-md/tsconfig.json +12 -0
- package/dist/docs/assets/chunks/@localSearchIndexroot.DFoGuETX.js +0 -1
- package/dist/docs/assets/guides_slack.md.C32HsdKk.js +0 -38
- package/dist/docs/assets/guides_slack.md.C32HsdKk.lean.js +0 -1
- package/dist/docs/assets/index.md.CI93Ltlb.js +0 -5
- package/dist/docs/assets/reference_sessions.md.D0mIh4KK.js +0 -1
- package/dist/docs/assets/troubleshooting.md.Ctv3T8C2.js +0 -1
- package/dist/docs/design/agsh.md +0 -406
- package/dist/playground/assets/index-B1DDvBeC.css +0 -1
- package/docs/design/agsh.md +0 -406
- /package/dist/docs/assets/{deployment.md.D9msOFOW.lean.js → deployment.md.MFPKqsqI.lean.js} +0 -0
- /package/dist/docs/assets/{index.md.CI93Ltlb.lean.js → index.md.CVeRUOeZ.lean.js} +0 -0
- /package/dist/docs/assets/{reference_agent-config.md.Cp_x38Nl.lean.js → reference_agent-config.md.BHeYMgme.lean.js} +0 -0
- /package/dist/docs/assets/{reference_connections.md.BH8Oc0D0.lean.js → reference_connections.md.DxldvyIB.lean.js} +0 -0
- /package/dist/docs/assets/{reference_http-api.md.D89k1mdm.lean.js → reference_http-api.md.5zOAbV86.lean.js} +0 -0
- /package/dist/docs/assets/{reference_sessions.md.D0mIh4KK.lean.js → reference_sessions.md.NxFP_CAC.lean.js} +0 -0
- /package/dist/docs/assets/{reference_tools.md.BHeXn2id.lean.js → reference_tools.md.B84gw9Ii.lean.js} +0 -0
- /package/dist/docs/assets/{troubleshooting.md.Ctv3T8C2.lean.js → troubleshooting.md.DCiPBhYs.lean.js} +0 -0
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mid-run host MCP OAuth: mint an authUrl, finish on the public serve
|
|
3
|
+
* callback (file tokens). Deployment secrets persist from the
|
|
4
|
+
* authenticated park, not from that callback.
|
|
5
|
+
*
|
|
6
|
+
* CLI `mcp oauth` still uses the loopback callback. This path is recovery
|
|
7
|
+
* and first-use without a separate `--store` step.
|
|
8
|
+
*/
|
|
9
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
10
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
11
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
12
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
13
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
14
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
15
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
16
|
+
});
|
|
17
|
+
};
|
|
18
|
+
import { UnauthorizedError } from "@modelcontextprotocol/sdk/client/auth.js";
|
|
19
|
+
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
|
|
20
|
+
import { SSEClientTransport } from "@modelcontextprotocol/sdk/client/sse.js";
|
|
21
|
+
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
|
|
22
|
+
import { describeError } from "./describe-error.js";
|
|
23
|
+
import { LOG_PREFIX } from "./distribution.js";
|
|
24
|
+
import { createHostMcpOAuthProvider, FileMcpOAuthStore, MCP_OAUTH_CALLBACK_URL, } from "./mcp-oauth.js";
|
|
25
|
+
import { resolveHostedMcpOauthSecretsTarget, upsertHostMcpOauthSecrets, } from "./mcp-oauth-persist.js";
|
|
26
|
+
export function mcpOauthServeCallbackPath(basePath = "") {
|
|
27
|
+
return `${basePath}/v1/mcp-oauth/callback`;
|
|
28
|
+
}
|
|
29
|
+
export function mcpOauthServeCallbackUrl(origin, basePath = "") {
|
|
30
|
+
return `${origin.replace(/\/$/, "")}${mcpOauthServeCallbackPath(basePath)}`;
|
|
31
|
+
}
|
|
32
|
+
export function beginHostMcpOauth(args) {
|
|
33
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
34
|
+
var _a;
|
|
35
|
+
let authorizationUrl;
|
|
36
|
+
const provider = yield createHostMcpOAuthProvider({
|
|
37
|
+
identifier: args.connection,
|
|
38
|
+
resourceUrl: args.url,
|
|
39
|
+
store: args.store,
|
|
40
|
+
redirectUrl: args.redirectUrl,
|
|
41
|
+
onRedirect: (url) => {
|
|
42
|
+
authorizationUrl = url;
|
|
43
|
+
},
|
|
44
|
+
});
|
|
45
|
+
const client = new Client({ name: "agent-sdk-mcp-oauth", version: "0.1.0" });
|
|
46
|
+
const url = new URL(args.url);
|
|
47
|
+
const requestInit = args.headers === undefined ? undefined : { headers: args.headers };
|
|
48
|
+
const makeTransport = () => {
|
|
49
|
+
if (args.type === "sse") {
|
|
50
|
+
return new SSEClientTransport(url, {
|
|
51
|
+
authProvider: provider,
|
|
52
|
+
requestInit,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
return new StreamableHTTPClientTransport(url, {
|
|
56
|
+
authProvider: provider,
|
|
57
|
+
requestInit,
|
|
58
|
+
});
|
|
59
|
+
};
|
|
60
|
+
const transport = makeTransport();
|
|
61
|
+
try {
|
|
62
|
+
yield client.connect(transport);
|
|
63
|
+
yield client.close().catch(() => undefined);
|
|
64
|
+
return { status: "authorized" };
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
if (!(error instanceof UnauthorizedError)) {
|
|
68
|
+
throw error;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
const redirect = authorizationUrl !== null && authorizationUrl !== void 0 ? authorizationUrl : provider.lastRedirectUrl;
|
|
72
|
+
if (redirect === undefined) {
|
|
73
|
+
throw new Error(`Auth required for "${args.connection}" but no authorization URL was provided.`);
|
|
74
|
+
}
|
|
75
|
+
const state = (_a = redirect.searchParams.get("state")) !== null && _a !== void 0 ? _a : "";
|
|
76
|
+
if (state === "") {
|
|
77
|
+
throw new Error(`Auth required for "${args.connection}" but the authorization URL had no state.`);
|
|
78
|
+
}
|
|
79
|
+
return {
|
|
80
|
+
status: "needs_auth",
|
|
81
|
+
authUrl: redirect.toString(),
|
|
82
|
+
state,
|
|
83
|
+
finish: (code) => __awaiter(this, void 0, void 0, function* () {
|
|
84
|
+
var _a;
|
|
85
|
+
yield transport.finishAuth(code);
|
|
86
|
+
yield (_a = transport.close) === null || _a === void 0 ? void 0 : _a.call(transport).catch(() => undefined);
|
|
87
|
+
}),
|
|
88
|
+
abort: () => __awaiter(this, void 0, void 0, function* () {
|
|
89
|
+
var _a;
|
|
90
|
+
yield (_a = transport.close) === null || _a === void 0 ? void 0 : _a.call(transport).catch(() => undefined);
|
|
91
|
+
}),
|
|
92
|
+
};
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
export class McpOauthOnDemandHub {
|
|
96
|
+
constructor() {
|
|
97
|
+
this.attempts = new Map();
|
|
98
|
+
this.completed = new Map();
|
|
99
|
+
this.finishing = new Map();
|
|
100
|
+
this.aborted = new Set();
|
|
101
|
+
}
|
|
102
|
+
mint(args) {
|
|
103
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
104
|
+
var _a;
|
|
105
|
+
const redirectUrl = (_a = this.callbackUrl) !== null && _a !== void 0 ? _a : MCP_OAUTH_CALLBACK_URL;
|
|
106
|
+
const store = this.fileStore();
|
|
107
|
+
const started = yield beginHostMcpOauth({
|
|
108
|
+
connection: args.connection,
|
|
109
|
+
url: args.url,
|
|
110
|
+
type: args.type,
|
|
111
|
+
headers: args.headers,
|
|
112
|
+
redirectUrl,
|
|
113
|
+
store,
|
|
114
|
+
});
|
|
115
|
+
if (started.status === "authorized") {
|
|
116
|
+
return { authorized: true };
|
|
117
|
+
}
|
|
118
|
+
this.attempts.set(started.state, {
|
|
119
|
+
connection: args.connection,
|
|
120
|
+
resourceUrl: args.url,
|
|
121
|
+
finish: started.finish,
|
|
122
|
+
abort: started.abort,
|
|
123
|
+
sessionId: args.sessionId,
|
|
124
|
+
});
|
|
125
|
+
return { authUrl: started.authUrl, state: started.state };
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
abortCall(sessionId, callId) {
|
|
129
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
130
|
+
yield this.dropWhere((attempt) => attempt.sessionId === sessionId && attempt.callId === callId, true);
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
abortSession(sessionId) {
|
|
134
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
135
|
+
yield this.dropWhere((attempt) => attempt.sessionId === sessionId, false);
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
close() {
|
|
139
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
140
|
+
yield this.dropWhere(() => true, true);
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
dropWhere(match, includeCompleted) {
|
|
144
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
145
|
+
const jobs = [];
|
|
146
|
+
for (const [state, attempt] of this.attempts) {
|
|
147
|
+
if (!match(attempt)) {
|
|
148
|
+
continue;
|
|
149
|
+
}
|
|
150
|
+
this.aborted.add(state);
|
|
151
|
+
this.attempts.delete(state);
|
|
152
|
+
jobs.push(attempt.abort().catch(() => undefined));
|
|
153
|
+
}
|
|
154
|
+
if (includeCompleted) {
|
|
155
|
+
for (const [state, attempt] of this.completed) {
|
|
156
|
+
if (!match(attempt)) {
|
|
157
|
+
continue;
|
|
158
|
+
}
|
|
159
|
+
this.aborted.add(state);
|
|
160
|
+
this.completed.delete(state);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
yield Promise.all(jobs);
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
bind(state, sessionId, callId) {
|
|
167
|
+
const live = this.attempts.get(state);
|
|
168
|
+
if (live !== undefined) {
|
|
169
|
+
live.sessionId = sessionId;
|
|
170
|
+
live.callId = callId;
|
|
171
|
+
return "pending";
|
|
172
|
+
}
|
|
173
|
+
const done = this.completed.get(state);
|
|
174
|
+
if (done !== undefined) {
|
|
175
|
+
done.sessionId = sessionId;
|
|
176
|
+
done.callId = callId;
|
|
177
|
+
return "already_done";
|
|
178
|
+
}
|
|
179
|
+
return "unknown";
|
|
180
|
+
}
|
|
181
|
+
complete(state, code) {
|
|
182
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
183
|
+
if (this.aborted.has(state)) {
|
|
184
|
+
throw new Error("Unknown OAuth state.");
|
|
185
|
+
}
|
|
186
|
+
const pending = this.finishing.get(state);
|
|
187
|
+
if (pending !== undefined) {
|
|
188
|
+
return yield pending;
|
|
189
|
+
}
|
|
190
|
+
const attempt = this.attempts.get(state);
|
|
191
|
+
if (attempt === undefined) {
|
|
192
|
+
throw new Error("Unknown OAuth state.");
|
|
193
|
+
}
|
|
194
|
+
const run = this.finishAttempt(state, attempt, code);
|
|
195
|
+
this.finishing.set(state, run);
|
|
196
|
+
return yield run;
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
finishAttempt(state, attempt, code) {
|
|
200
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
201
|
+
try {
|
|
202
|
+
yield attempt.finish(code);
|
|
203
|
+
this.attempts.delete(state);
|
|
204
|
+
if (!this.aborted.has(state)) {
|
|
205
|
+
this.completed.set(state, attempt);
|
|
206
|
+
}
|
|
207
|
+
return {
|
|
208
|
+
connection: attempt.connection,
|
|
209
|
+
sessionId: attempt.sessionId,
|
|
210
|
+
callId: attempt.callId,
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
finally {
|
|
214
|
+
this.finishing.delete(state);
|
|
215
|
+
}
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
fileStore() {
|
|
219
|
+
var _a;
|
|
220
|
+
(_a = this.store) !== null && _a !== void 0 ? _a : (this.store = new FileMcpOAuthStore());
|
|
221
|
+
return this.store;
|
|
222
|
+
}
|
|
223
|
+
persistFor(connection, resourceUrl) {
|
|
224
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
225
|
+
var _a, _b;
|
|
226
|
+
var _c, _d;
|
|
227
|
+
const target = (_c = this.secrets) !== null && _c !== void 0 ? _c : resolveHostedMcpOauthSecretsTarget((_d = this.secretsBind) !== null && _d !== void 0 ? _d : {});
|
|
228
|
+
if (target === undefined) {
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
const store = this.fileStore();
|
|
232
|
+
const tokens = yield store.loadTokens(connection, resourceUrl);
|
|
233
|
+
if (tokens === undefined || tokens.access_token.trim() === "") {
|
|
234
|
+
return;
|
|
235
|
+
}
|
|
236
|
+
const client = yield store.loadClientInformation(connection, resourceUrl);
|
|
237
|
+
try {
|
|
238
|
+
const names = yield upsertHostMcpOauthSecrets({
|
|
239
|
+
connection,
|
|
240
|
+
tokens,
|
|
241
|
+
clientId: client === null || client === void 0 ? void 0 : client.client_id,
|
|
242
|
+
target,
|
|
243
|
+
});
|
|
244
|
+
(_a = this.logger) === null || _a === void 0 ? void 0 : _a.call(this, `${LOG_PREFIX} MCP OAuth tokens stored on the deployment (${names.join(", ")}).`);
|
|
245
|
+
}
|
|
246
|
+
catch (error) {
|
|
247
|
+
(_b = this.logger) === null || _b === void 0 ? void 0 : _b.call(this, `${LOG_PREFIX} MCP OAuth persist failed for "${connection}": ${describeError(error)}`);
|
|
248
|
+
}
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
handleCallback(request) {
|
|
252
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
253
|
+
var _a;
|
|
254
|
+
const url = new URL(request.url);
|
|
255
|
+
const code = url.searchParams.get("code");
|
|
256
|
+
const state = (_a = url.searchParams.get("state")) !== null && _a !== void 0 ? _a : "";
|
|
257
|
+
if (this.aborted.has(state)) {
|
|
258
|
+
return oauthHtml(404, "<h1>Not found</h1>");
|
|
259
|
+
}
|
|
260
|
+
if (this.completed.has(state)) {
|
|
261
|
+
return oauthHtml(200, "<h1>Authorized</h1><p>Return to the agent.</p>");
|
|
262
|
+
}
|
|
263
|
+
if (!this.attempts.has(state)) {
|
|
264
|
+
return oauthHtml(404, "<h1>Not found</h1>");
|
|
265
|
+
}
|
|
266
|
+
if (code !== null && code !== "") {
|
|
267
|
+
try {
|
|
268
|
+
yield this.complete(state, code);
|
|
269
|
+
}
|
|
270
|
+
catch (_b) {
|
|
271
|
+
return oauthHtml(400, "<h1>Authorization failed</h1>");
|
|
272
|
+
}
|
|
273
|
+
if (this.aborted.has(state)) {
|
|
274
|
+
return oauthHtml(404, "<h1>Not found</h1>");
|
|
275
|
+
}
|
|
276
|
+
return oauthHtml(200, "<h1>Authorized</h1><p>Return to the agent.</p>");
|
|
277
|
+
}
|
|
278
|
+
return oauthHtml(400, "<h1>Authorization failed</h1>");
|
|
279
|
+
});
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
function oauthHtml(status, body) {
|
|
283
|
+
return new Response(`<!doctype html><html><body>${body}</body></html>`, {
|
|
284
|
+
status,
|
|
285
|
+
headers: { "content-type": "text/html; charset=utf-8" },
|
|
286
|
+
});
|
|
287
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deployment-secret upsert for host MCP OAuth (`mcp oauth --store` and
|
|
3
|
+
* hosted Connect). File writes stay on FileMcpOAuthStore / the OAuth
|
|
4
|
+
* provider. Resolve the `--store` client at persist time so v2 freeze
|
|
5
|
+
* bind can drop the key after listen.
|
|
6
|
+
*/
|
|
7
|
+
import type { OAuthTokens } from "@modelcontextprotocol/sdk/shared/auth.js";
|
|
8
|
+
export type McpOauthSecretsClient = {
|
|
9
|
+
setSecrets(args: {
|
|
10
|
+
teamId: number;
|
|
11
|
+
slug: string;
|
|
12
|
+
secrets: Array<{
|
|
13
|
+
name: string;
|
|
14
|
+
value: string;
|
|
15
|
+
}>;
|
|
16
|
+
}): Promise<string[]>;
|
|
17
|
+
};
|
|
18
|
+
export type McpOauthSecretsTarget = {
|
|
19
|
+
client: McpOauthSecretsClient;
|
|
20
|
+
teamId: number;
|
|
21
|
+
slug: string;
|
|
22
|
+
};
|
|
23
|
+
export declare function upsertHostMcpOauthSecrets(args: {
|
|
24
|
+
connection: string;
|
|
25
|
+
tokens: OAuthTokens;
|
|
26
|
+
clientId?: string;
|
|
27
|
+
target: McpOauthSecretsTarget;
|
|
28
|
+
}): Promise<string[]>;
|
|
29
|
+
export type ResolveHostedMcpOauthSecretsArgs = {
|
|
30
|
+
slug?: string;
|
|
31
|
+
team?: string;
|
|
32
|
+
apiKey?: string;
|
|
33
|
+
cloudToolsUrl?: string;
|
|
34
|
+
env?: NodeJS.ProcessEnv;
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Bind the CLI `--store` client when this process is a hosted engine
|
|
38
|
+
* (`AGENT_SERVE_DEPLOYMENT_ID`) and a live API key is present.
|
|
39
|
+
* Self-hosted / no deployment / unsigned: undefined.
|
|
40
|
+
*/
|
|
41
|
+
export declare function resolveHostedMcpOauthSecretsTarget(args?: ResolveHostedMcpOauthSecretsArgs): McpOauthSecretsTarget | undefined;
|
|
42
|
+
//# sourceMappingURL=mcp-oauth-persist.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-oauth-persist.d.ts","sourceRoot":"","sources":["../../src/internal/mcp-oauth-persist.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0CAA0C,CAAC;AAY5E,MAAM,MAAM,qBAAqB,GAAG;IAClC,UAAU,CAAC,IAAI,EAAE;QACf,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACjD,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,MAAM,EAAE,qBAAqB,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAsBF,wBAAsB,yBAAyB,CAAC,IAAI,EAAE;IACpD,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,WAAW,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,qBAAqB,CAAC;CAC/B,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAUpB;AAED,MAAM,MAAM,gCAAgC,GAAG;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,kCAAkC,CAChD,IAAI,GAAE,gCAAqC,GAC1C,qBAAqB,GAAG,SAAS,CA8BnC"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deployment-secret upsert for host MCP OAuth (`mcp oauth --store` and
|
|
3
|
+
* hosted Connect). File writes stay on FileMcpOAuthStore / the OAuth
|
|
4
|
+
* provider. Resolve the `--store` client at persist time so v2 freeze
|
|
5
|
+
* bind can drop the key after listen.
|
|
6
|
+
*/
|
|
7
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
8
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
9
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
10
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
11
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
12
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
13
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
14
|
+
});
|
|
15
|
+
};
|
|
16
|
+
import { AGENT_SERVE_DEPLOYMENT_ID_ENV_VAR } from "../storage-backends/cursor-hosted.js";
|
|
17
|
+
import { cursorExternalApiUrl, resolveApiKeySync, } from "./cursor/credentials.js";
|
|
18
|
+
import { AgentServeDeployClient, parseAgentServeMcpGatewayUrl, } from "./deploy-client.js";
|
|
19
|
+
import { mcpOauthSecretNames } from "./mcp-oauth.js";
|
|
20
|
+
function mcpOauthSecretsPayload(args) {
|
|
21
|
+
var _a, _b;
|
|
22
|
+
const names = mcpOauthSecretNames(args.connection);
|
|
23
|
+
const secrets = [
|
|
24
|
+
{ name: names.accessToken, value: args.tokens.access_token },
|
|
25
|
+
];
|
|
26
|
+
const refresh = (_a = args.tokens.refresh_token) === null || _a === void 0 ? void 0 : _a.trim();
|
|
27
|
+
if (refresh !== undefined && refresh !== "") {
|
|
28
|
+
secrets.push({ name: names.refreshToken, value: refresh });
|
|
29
|
+
}
|
|
30
|
+
const clientId = (_b = args.clientId) === null || _b === void 0 ? void 0 : _b.trim();
|
|
31
|
+
if (clientId !== undefined && clientId !== "") {
|
|
32
|
+
secrets.push({ name: names.clientId, value: clientId });
|
|
33
|
+
}
|
|
34
|
+
return secrets;
|
|
35
|
+
}
|
|
36
|
+
export function upsertHostMcpOauthSecrets(args) {
|
|
37
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
38
|
+
const payload = mcpOauthSecretsPayload(args);
|
|
39
|
+
if (payload.length === 0) {
|
|
40
|
+
return [];
|
|
41
|
+
}
|
|
42
|
+
return yield args.target.client.setSecrets({
|
|
43
|
+
teamId: args.target.teamId,
|
|
44
|
+
slug: args.target.slug,
|
|
45
|
+
secrets: payload,
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Bind the CLI `--store` client when this process is a hosted engine
|
|
51
|
+
* (`AGENT_SERVE_DEPLOYMENT_ID`) and a live API key is present.
|
|
52
|
+
* Self-hosted / no deployment / unsigned: undefined.
|
|
53
|
+
*/
|
|
54
|
+
export function resolveHostedMcpOauthSecretsTarget(args = {}) {
|
|
55
|
+
var _a;
|
|
56
|
+
var _b, _c;
|
|
57
|
+
const env = (_b = args.env) !== null && _b !== void 0 ? _b : process.env;
|
|
58
|
+
const deploymentId = (_a = env[AGENT_SERVE_DEPLOYMENT_ID_ENV_VAR]) === null || _a === void 0 ? void 0 : _a.trim();
|
|
59
|
+
if (deploymentId === undefined || deploymentId === "") {
|
|
60
|
+
return undefined;
|
|
61
|
+
}
|
|
62
|
+
const resolved = resolveApiKeySync(args.apiKey === undefined ? undefined : { apiKey: args.apiKey });
|
|
63
|
+
if (resolved === undefined) {
|
|
64
|
+
return undefined;
|
|
65
|
+
}
|
|
66
|
+
const fromUrl = args.cloudToolsUrl === undefined
|
|
67
|
+
? undefined
|
|
68
|
+
: parseAgentServeMcpGatewayUrl(args.cloudToolsUrl);
|
|
69
|
+
const slug = args.slug !== undefined && args.slug !== "" ? args.slug : fromUrl === null || fromUrl === void 0 ? void 0 : fromUrl.slug;
|
|
70
|
+
const teamId = (_c = parseTeamId(args.team)) !== null && _c !== void 0 ? _c : fromUrl === null || fromUrl === void 0 ? void 0 : fromUrl.teamId;
|
|
71
|
+
if (slug === undefined || teamId === undefined) {
|
|
72
|
+
return undefined;
|
|
73
|
+
}
|
|
74
|
+
return {
|
|
75
|
+
client: new AgentServeDeployClient({
|
|
76
|
+
backendUrl: cursorExternalApiUrl(),
|
|
77
|
+
apiKey: resolved.apiKey,
|
|
78
|
+
}),
|
|
79
|
+
teamId,
|
|
80
|
+
slug,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
function parseTeamId(team) {
|
|
84
|
+
if (team === undefined || team === "") {
|
|
85
|
+
return undefined;
|
|
86
|
+
}
|
|
87
|
+
const teamId = Number.parseInt(team, 10);
|
|
88
|
+
if (!Number.isInteger(teamId) || teamId <= 0) {
|
|
89
|
+
return undefined;
|
|
90
|
+
}
|
|
91
|
+
return teamId;
|
|
92
|
+
}
|
|
@@ -95,6 +95,7 @@ export declare function createHostMcpOAuthProvider(args: {
|
|
|
95
95
|
resourceUrl: string;
|
|
96
96
|
store?: FileMcpOAuthStore;
|
|
97
97
|
onRedirect?: (url: URL) => void;
|
|
98
|
+
redirectUrl?: string;
|
|
98
99
|
}): Promise<HostMcpOAuthProvider>;
|
|
99
100
|
export type OAuthCallbackResult = {
|
|
100
101
|
code: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-oauth.d.ts","sourceRoot":"","sources":["../../src/internal/mcp-oauth.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AACpF,OAAO,KAAK,EACV,0BAA0B,EAC1B,mBAAmB,EACnB,WAAW,EACZ,MAAM,0CAA0C,CAAC;AAGlD,eAAO,MAAM,uBAAuB,OAAO,CAAC;AAC5C,eAAO,MAAM,uBAAuB,cAAc,CAAC;AACnD,eAAO,MAAM,sBAAsB,EAAE,MAAgF,CAAC;AAEtH,uCAAuC;AACvC,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAO5D;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,mBAAmB,CAO3E;AAED,wBAAgB,aAAa,CAC3B,UAAU,EAAE,MAAM,EAClB,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,WAAW,GAAG,SAAS,CAazB;AAED,wBAAgB,eAAe,CAC7B,UAAU,EAAE,MAAM,EAClB,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,0BAA0B,GAAG,SAAS,CASxC;AAaD,oEAAoE;AACpE,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,4EAA4E;AAC5E,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAgB3D;AAED,qBAAa,iBAAiB;IAIhB,QAAQ,CAAC,IAAI,EAAE,MAAM;IAHjC,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,OAAO,CAAgC;IAE/C,YAAqB,IAAI,GAAE,MAA6B,EAAI;IAEtD,UAAU,CACd,EAAE,EAAE,MAAM,EACV,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAElC;IAEK,qBAAqB,CACzB,EAAE,EAAE,MAAM,EACV,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,0BAA0B,GAAG,SAAS,CAAC,CAEjD;IAEK,UAAU,CACd,EAAE,EAAE,MAAM,EACV,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,IAAI,CAAC,CAIf;IAEK,qBAAqB,CACzB,EAAE,EAAE,MAAM,EACV,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,0BAA0B,GACrC,OAAO,CAAC,IAAI,CAAC,CAIf;IAEK,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMjD;YAEa,QAAQ;YAeR,MAAM;YAkBN,IAAI;YAWJ,QAAQ;YAoBR,KAAK;YASL,QAAQ;CAgBvB;AAED,KAAK,YAAY,GAAG;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,iBAAiB,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC;IAChC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,iBAAiB,CAAC,EAAE,0BAA0B,CAAC;IAC/C;;;;;;OAMG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAsB,iCAAiC,CACrD,WAAW,EAAE,MAAM,EACnB,SAAS,GAAE,OAAO,KAAa,GAC9B,OAAO,CAAC,OAAO,CAAC,CAuBlB;AAED,qBAAa,oBAAqB,YAAW,mBAAmB;IAC9D,OAAO,CAAC,WAAW,CAA0B;IAC7C,OAAO,CAAC,UAAU,CAAyC;IAC3D,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAsB;IAC3C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAe;IACpC;;;OAGG;IACH,QAAQ,CAAC,mBAAmB,EAAE,CAAC,MAAM,OAAO,CAAC,GAAG,GAAG,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC;IAE3E,YAAY,IAAI,EAAE,YAAY,EAc7B;IAED,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,IAAI,cAAc,IAAI,mBAAmB,CAExC;IAED,IAAI,eAAe,IAAI,GAAG,GAAG,SAAS,CAErC;IAED,KAAK,IAAI,MAAM,CAEd;IAED,iBAAiB,IAAI,0BAA0B,GAAG,SAAS,CAE1D;IAEK,qBAAqB,CAAC,IAAI,EAAE,0BAA0B,GAAG,OAAO,CAAC,IAAI,CAAC,CAO3E;IAED,MAAM,IAAI,WAAW,GAAG,SAAS,CAEhC;IAEK,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAOnD;IAED,uBAAuB,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAGtC;IAEK,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE1D;IAED,YAAY,IAAI,MAAM,CAKrB;IAEK,qBAAqB,CACzB,KAAK,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAC9C,OAAO,CAAC,IAAI,CAAC,CAcf;CACF;
|
|
1
|
+
{"version":3,"file":"mcp-oauth.d.ts","sourceRoot":"","sources":["../../src/internal/mcp-oauth.ts"],"names":[],"mappings":"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"}
|
|
@@ -326,10 +326,17 @@ export class HostMcpOAuthProvider {
|
|
|
326
326
|
});
|
|
327
327
|
}
|
|
328
328
|
}
|
|
329
|
+
function clientForRedirect(info, redirectUrl) {
|
|
330
|
+
if (info === undefined || !info.redirect_uris.includes(redirectUrl)) {
|
|
331
|
+
return undefined;
|
|
332
|
+
}
|
|
333
|
+
return info;
|
|
334
|
+
}
|
|
329
335
|
export function createHostMcpOAuthProvider(args) {
|
|
330
336
|
return __awaiter(this, void 0, void 0, function* () {
|
|
331
|
-
var _a;
|
|
337
|
+
var _a, _b;
|
|
332
338
|
const store = (_a = args.store) !== null && _a !== void 0 ? _a : new FileMcpOAuthStore();
|
|
339
|
+
const redirectUrl = (_b = args.redirectUrl) !== null && _b !== void 0 ? _b : MCP_OAUTH_CALLBACK_URL;
|
|
333
340
|
const [fileTokens, fileClient, omitResourceIndicator] = yield Promise.all([
|
|
334
341
|
store.loadTokens(args.identifier, args.resourceUrl),
|
|
335
342
|
store.loadClientInformation(args.identifier, args.resourceUrl),
|
|
@@ -339,8 +346,9 @@ export function createHostMcpOAuthProvider(args) {
|
|
|
339
346
|
identifier: args.identifier,
|
|
340
347
|
resourceUrl: args.resourceUrl,
|
|
341
348
|
store,
|
|
349
|
+
redirectUrl,
|
|
342
350
|
tokens: fileTokens !== null && fileTokens !== void 0 ? fileTokens : tokensFromEnv(args.identifier),
|
|
343
|
-
clientInformation: fileClient !== null && fileClient !== void 0 ? fileClient : clientIdFromEnv(args.identifier),
|
|
351
|
+
clientInformation: clientForRedirect(fileClient !== null && fileClient !== void 0 ? fileClient : clientIdFromEnv(args.identifier), redirectUrl),
|
|
344
352
|
onRedirect: args.onRedirect,
|
|
345
353
|
omitResourceIndicator,
|
|
346
354
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collector.d.ts","sourceRoot":"","sources":["../../../src/internal/otel/collector.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAaH,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,KAAK,SAAS,EAAS,MAAM,YAAY,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAIhD,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;IACzD,KAAK,IAAI,IAAI,CAAC;IACd,yEAAyE;IACzE,oBAAoB,CAClB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GACpC,IAAI,CAAC;IACR,mEAAmE;IACnE,oBAAoB,CAClB,SAAS,EAAE,MAAM,GAChB,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,SAAS,CAAC;CAC1C;AAgBD,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAC1B,aAAa,
|
|
1
|
+
{"version":3,"file":"collector.d.ts","sourceRoot":"","sources":["../../../src/internal/otel/collector.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAaH,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,KAAK,SAAS,EAAS,MAAM,YAAY,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAIhD,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;IACzD,KAAK,IAAI,IAAI,CAAC;IACd,yEAAyE;IACzE,oBAAoB,CAClB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GACpC,IAAI,CAAC;IACR,mEAAmE;IACnE,oBAAoB,CAClB,SAAS,EAAE,MAAM,GAChB,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,SAAS,CAAC;CAC1C;AAgBD,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAC1B,aAAa,CA8xBf"}
|
|
@@ -45,8 +45,8 @@ export function createOtelCollector(runtime, agentName, log) {
|
|
|
45
45
|
},
|
|
46
46
|
};
|
|
47
47
|
function handle(event, session) {
|
|
48
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
|
|
49
|
-
var
|
|
48
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s;
|
|
49
|
+
var _t, _u;
|
|
50
50
|
const at = Date.parse(event.at);
|
|
51
51
|
const startTime = Number.isFinite(at) ? at : undefined;
|
|
52
52
|
switch (event.type) {
|
|
@@ -144,7 +144,7 @@ export function createOtelCollector(runtime, agentName, log) {
|
|
|
144
144
|
return;
|
|
145
145
|
}
|
|
146
146
|
for (const call of event.data.calls) {
|
|
147
|
-
const parentCtx = parentCtxFor(turn, (
|
|
147
|
+
const parentCtx = parentCtxFor(turn, (_t = event.data.parentCallId) !== null && _t !== void 0 ? _t : call.parentCallId);
|
|
148
148
|
const span = runtime.tracer.startSpan("agent_sdk.tool", {
|
|
149
149
|
kind: SpanKind.INTERNAL,
|
|
150
150
|
startTime,
|
|
@@ -177,6 +177,19 @@ export function createOtelCollector(runtime, agentName, log) {
|
|
|
177
177
|
}), startTime);
|
|
178
178
|
return;
|
|
179
179
|
}
|
|
180
|
+
case "action.auth_requested": {
|
|
181
|
+
(_k = (_j = ensureTurn(event, session, startTime)) === null || _j === void 0 ? void 0 : _j.tools.get(event.data.callId)) === null || _k === void 0 ? void 0 : _k.addEvent("auth_requested", undefined, startTime);
|
|
182
|
+
emitLog("action.auth_requested", SeverityNumber.INFO, attrs(Object.assign(Object.assign({}, baseLog(event, session)), { "cursor.tool.name": event.data.toolName, "agent_sdk.call_id": event.data.callId, "agent_sdk.mcp_connection": event.data.connection })));
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
case "action.auth_resolved": {
|
|
186
|
+
(_m = (_l = ensureTurn(event, session, startTime)) === null || _l === void 0 ? void 0 : _l.tools.get(event.data.callId)) === null || _m === void 0 ? void 0 : _m.addEvent("auth_resolved", attrs({
|
|
187
|
+
"agent_sdk.decision": event.data.decision,
|
|
188
|
+
"agent_sdk.decision_by": event.data.by,
|
|
189
|
+
"agent_sdk.mcp_connection": event.data.connection,
|
|
190
|
+
}), startTime);
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
180
193
|
case "action.result": {
|
|
181
194
|
const turn = ensureTurn(event, session, startTime);
|
|
182
195
|
const span = turn === null || turn === void 0 ? void 0 : turn.tools.get(event.data.callId);
|
|
@@ -211,7 +224,7 @@ export function createOtelCollector(runtime, agentName, log) {
|
|
|
211
224
|
event.turnId !== undefined) {
|
|
212
225
|
turn.span.setStatus({ code: SpanStatusCode.OK });
|
|
213
226
|
turn.span.end(startTime);
|
|
214
|
-
(
|
|
227
|
+
(_o = sessions.get(event.sessionId)) === null || _o === void 0 ? void 0 : _o.turns.delete(event.turnId);
|
|
215
228
|
}
|
|
216
229
|
return;
|
|
217
230
|
}
|
|
@@ -238,7 +251,7 @@ export function createOtelCollector(runtime, agentName, log) {
|
|
|
238
251
|
turn.subagents.set(event.data.callId, span);
|
|
239
252
|
metrics === null || metrics === void 0 ? void 0 : metrics.subagents.add(1, join(event.sessionId, {
|
|
240
253
|
"agent_sdk.agent": agentName,
|
|
241
|
-
"agent_sdk.subagent_name": (
|
|
254
|
+
"agent_sdk.subagent_name": (_u = event.data.name) !== null && _u !== void 0 ? _u : "unknown",
|
|
242
255
|
}));
|
|
243
256
|
return;
|
|
244
257
|
}
|
|
@@ -252,7 +265,7 @@ export function createOtelCollector(runtime, agentName, log) {
|
|
|
252
265
|
return;
|
|
253
266
|
}
|
|
254
267
|
case "artifact.tagged": {
|
|
255
|
-
(
|
|
268
|
+
(_p = ensureSession(event, session, startTime)) === null || _p === void 0 ? void 0 : _p.span.addEvent("artifact.tagged", attrs({
|
|
256
269
|
"agent_sdk.artifact_id": event.data.id,
|
|
257
270
|
"agent_sdk.artifact_kind": event.data.kind,
|
|
258
271
|
"agent_sdk.artifact_key": event.data.key,
|
|
@@ -291,7 +304,7 @@ export function createOtelCollector(runtime, agentName, log) {
|
|
|
291
304
|
}
|
|
292
305
|
turn.span.setStatus({ code: SpanStatusCode.OK });
|
|
293
306
|
turn.span.end(startTime);
|
|
294
|
-
(
|
|
307
|
+
(_q = sessions.get(event.sessionId)) === null || _q === void 0 ? void 0 : _q.turns.delete(event.turnId);
|
|
295
308
|
metrics === null || metrics === void 0 ? void 0 : metrics.turns.add(1, join(event.sessionId, {
|
|
296
309
|
"agent_sdk.agent": agentName,
|
|
297
310
|
"agent_sdk.turn_status": "completed",
|
|
@@ -315,7 +328,7 @@ export function createOtelCollector(runtime, agentName, log) {
|
|
|
315
328
|
turn.span.recordException(new Error(failureText));
|
|
316
329
|
}
|
|
317
330
|
turn.span.end(startTime);
|
|
318
|
-
(
|
|
331
|
+
(_r = sessions.get(event.sessionId)) === null || _r === void 0 ? void 0 : _r.turns.delete(event.turnId);
|
|
319
332
|
metrics === null || metrics === void 0 ? void 0 : metrics.turns.add(1, join(event.sessionId, {
|
|
320
333
|
"agent_sdk.agent": agentName,
|
|
321
334
|
"agent_sdk.turn_status": "failed",
|
|
@@ -324,7 +337,7 @@ export function createOtelCollector(runtime, agentName, log) {
|
|
|
324
337
|
return;
|
|
325
338
|
}
|
|
326
339
|
case "session.waiting": {
|
|
327
|
-
(
|
|
340
|
+
(_s = ensureSession(event, session, startTime)) === null || _s === void 0 ? void 0 : _s.span.addEvent("session.waiting", undefined, startTime);
|
|
328
341
|
return;
|
|
329
342
|
}
|
|
330
343
|
case "session.completed": {
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* server-level health / info / dev-dispatch routes.
|
|
6
6
|
*/
|
|
7
7
|
import type { AgentProject, AgentServeHandle, ServeOptions } from "../types.js";
|
|
8
|
+
import type { McpOauthSecretsTarget } from "./mcp-oauth-persist.js";
|
|
8
9
|
import { type AgentRunner } from "./sdk-runner.js";
|
|
9
10
|
/** One agent to serve: its slug (empty for single-agent mode) and project. */
|
|
10
11
|
export interface AgentMount {
|
|
@@ -15,6 +16,8 @@ export interface AgentMount {
|
|
|
15
16
|
export interface StartServerInternalOptions {
|
|
16
17
|
/** Test seam: replace the Cursor SDK runner (integration tests). */
|
|
17
18
|
runner?: AgentRunner;
|
|
19
|
+
/** Test seam: bind the `--store` secrets client for on-demand MCP OAuth. */
|
|
20
|
+
mcpOauthSecrets?: McpOauthSecretsTarget;
|
|
18
21
|
}
|
|
19
22
|
/**
|
|
20
23
|
* Start an HTTP server hosting one or more agents. A single agent with an
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/internal/server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAoCH,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAOhB,YAAY,EACb,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/internal/server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAoCH,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAOhB,YAAY,EACb,MAAM,aAAa,CAAC;AAqFrB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAyCpE,OAAO,EAAE,KAAK,WAAW,EAAmB,MAAM,iBAAiB,CAAC;AA2BpE,8EAA8E;AAC9E,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,YAAY,CAAC;CACvB;AAmCD,6EAA6E;AAC7E,MAAM,WAAW,0BAA0B;IACzC,oEAAoE;IACpE,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,4EAA4E;IAC5E,eAAe,CAAC,EAAE,qBAAqB,CAAC;CACzC;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,UAAU,EAAE,EACpB,OAAO,GAAE,YAAY,GAAG,0BAA+B,GACtD,OAAO,CAAC,gBAAgB,CAAC,CAw9B3B"}
|