rivet-design 0.10.7 → 0.10.9
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/index.d.ts +54 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +302 -129
- package/dist/index.js.map +1 -1
- package/dist/mcp/agent-variants/SessionStore.d.ts +23 -1
- package/dist/mcp/agent-variants/SessionStore.d.ts.map +1 -1
- package/dist/mcp/agent-variants/SessionStore.js +42 -0
- package/dist/mcp/agent-variants/SessionStore.js.map +1 -1
- package/dist/mcp/agent-variants/WorktreeOrchestrator.d.ts +99 -2
- package/dist/mcp/agent-variants/WorktreeOrchestrator.d.ts.map +1 -1
- package/dist/mcp/agent-variants/WorktreeOrchestrator.js +734 -74
- package/dist/mcp/agent-variants/WorktreeOrchestrator.js.map +1 -1
- package/dist/mcp/agent-variants/WorktreeOrchestrator.testHelpers.d.ts +8 -2
- package/dist/mcp/agent-variants/WorktreeOrchestrator.testHelpers.d.ts.map +1 -1
- package/dist/mcp/agent-variants/WorktreeOrchestrator.testHelpers.js +24 -5
- package/dist/mcp/agent-variants/WorktreeOrchestrator.testHelpers.js.map +1 -1
- package/dist/mcp/agent-variants/contracts.d.ts +1175 -233
- package/dist/mcp/agent-variants/contracts.d.ts.map +1 -1
- package/dist/mcp/agent-variants/contracts.js +12 -4
- package/dist/mcp/agent-variants/contracts.js.map +1 -1
- package/dist/mcp/agent-variants/designCritique.d.ts +163 -0
- package/dist/mcp/agent-variants/designCritique.d.ts.map +1 -0
- package/dist/mcp/agent-variants/designCritique.js +710 -0
- package/dist/mcp/agent-variants/designCritique.js.map +1 -0
- package/dist/mcp/agent-variants/diffQa.d.ts +7 -0
- package/dist/mcp/agent-variants/diffQa.d.ts.map +1 -0
- package/dist/mcp/agent-variants/diffQa.js +67 -0
- package/dist/mcp/agent-variants/diffQa.js.map +1 -0
- package/dist/mcp/agent-variants/index.d.ts +2 -2
- package/dist/mcp/agent-variants/index.d.ts.map +1 -1
- package/dist/mcp/agent-variants/index.js +2 -1
- package/dist/mcp/agent-variants/index.js.map +1 -1
- package/dist/mcp/agent-variants/pinterestSourceContext.d.ts.map +1 -1
- package/dist/mcp/agent-variants/pinterestSourceContext.js +11 -1
- package/dist/mcp/agent-variants/pinterestSourceContext.js.map +1 -1
- package/dist/mcp/agent-variants/previewQa.d.ts.map +1 -1
- package/dist/mcp/agent-variants/previewQa.js +7 -0
- package/dist/mcp/agent-variants/previewQa.js.map +1 -1
- package/dist/mcp/agent-variants/tools.d.ts.map +1 -1
- package/dist/mcp/agent-variants/tools.js +15 -5
- package/dist/mcp/agent-variants/tools.js.map +1 -1
- package/dist/mcp/auth/httpOAuthProvider.d.ts +103 -0
- package/dist/mcp/auth/httpOAuthProvider.d.ts.map +1 -0
- package/dist/mcp/auth/httpOAuthProvider.js +454 -0
- package/dist/mcp/auth/httpOAuthProvider.js.map +1 -0
- package/dist/mcp/auth/tools.d.ts +2 -0
- package/dist/mcp/auth/tools.d.ts.map +1 -1
- package/dist/mcp/auth/tools.js +12 -5
- package/dist/mcp/auth/tools.js.map +1 -1
- package/dist/mcp/httpServer.d.ts +36 -0
- package/dist/mcp/httpServer.d.ts.map +1 -0
- package/dist/mcp/httpServer.js +307 -0
- package/dist/mcp/httpServer.js.map +1 -0
- package/dist/mcp/server.d.ts +17 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +50 -29
- package/dist/mcp/server.js.map +1 -1
- package/dist/proxy-middleware/proxy-config.d.ts.map +1 -1
- package/dist/proxy-middleware/proxy-config.js +5 -2
- package/dist/proxy-middleware/proxy-config.js.map +1 -1
- package/dist/routes/agentVariants.d.ts +2 -1
- package/dist/routes/agentVariants.d.ts.map +1 -1
- package/dist/routes/agentVariants.js +268 -19
- package/dist/routes/agentVariants.js.map +1 -1
- package/dist/routes/design.d.ts.map +1 -1
- package/dist/routes/design.js +0 -122
- package/dist/routes/design.js.map +1 -1
- package/dist/routes/mcp.d.ts.map +1 -1
- package/dist/routes/mcp.js +2 -1
- package/dist/routes/mcp.js.map +1 -1
- package/dist/server.d.ts +15 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +24 -11
- package/dist/server.js.map +1 -1
- package/dist/services/AgentSessionService.d.ts +5 -1
- package/dist/services/AgentSessionService.d.ts.map +1 -1
- package/dist/services/AgentSessionService.js +11 -4
- package/dist/services/AgentSessionService.js.map +1 -1
- package/dist/services/AuthService.d.ts +1 -0
- package/dist/services/AuthService.d.ts.map +1 -1
- package/dist/services/AuthService.js +11 -1
- package/dist/services/AuthService.js.map +1 -1
- package/dist/services/ConfigManager.d.ts +5 -0
- package/dist/services/ConfigManager.d.ts.map +1 -1
- package/dist/services/ConfigManager.js +25 -3
- package/dist/services/ConfigManager.js.map +1 -1
- package/dist/services/DevServerRuntimeService.d.ts +119 -0
- package/dist/services/DevServerRuntimeService.d.ts.map +1 -0
- package/dist/services/DevServerRuntimeService.js +657 -0
- package/dist/services/DevServerRuntimeService.js.map +1 -0
- package/dist/services/GatewayClient.d.ts +25 -0
- package/dist/services/GatewayClient.d.ts.map +1 -1
- package/dist/services/GatewayClient.js +70 -11
- package/dist/services/GatewayClient.js.map +1 -1
- package/dist/services/InlineVariantGenerationService.d.ts +2 -3
- package/dist/services/InlineVariantGenerationService.d.ts.map +1 -1
- package/dist/services/InlineVariantGenerationService.js +7 -5
- package/dist/services/InlineVariantGenerationService.js.map +1 -1
- package/dist/services/IntegrationsClient.d.ts +20 -0
- package/dist/services/IntegrationsClient.d.ts.map +1 -1
- package/dist/services/IntegrationsClient.js +82 -24
- package/dist/services/IntegrationsClient.js.map +1 -1
- package/dist/services/RequestAuthContext.d.ts +7 -1
- package/dist/services/RequestAuthContext.d.ts.map +1 -1
- package/dist/services/RequestAuthContext.js +15 -2
- package/dist/services/RequestAuthContext.js.map +1 -1
- package/dist/services/SessionBridgeService.d.ts +1 -0
- package/dist/services/SessionBridgeService.d.ts.map +1 -1
- package/dist/services/SessionBridgeService.js +16 -1
- package/dist/services/SessionBridgeService.js.map +1 -1
- package/dist/services/TelemetryService.d.ts +2 -0
- package/dist/services/TelemetryService.d.ts.map +1 -1
- package/dist/services/TelemetryService.js +2 -0
- package/dist/services/TelemetryService.js.map +1 -1
- package/dist/services/VariantHistoryService.d.ts +8 -0
- package/dist/services/VariantHistoryService.d.ts.map +1 -1
- package/dist/services/VariantHistoryService.js +23 -0
- package/dist/services/VariantHistoryService.js.map +1 -1
- package/dist/services/VariantRunService.d.ts +56 -0
- package/dist/services/VariantRunService.d.ts.map +1 -0
- package/dist/services/VariantRunService.js +56 -0
- package/dist/services/VariantRunService.js.map +1 -0
- package/dist/services/VariantsRuntime.d.ts +22 -0
- package/dist/services/VariantsRuntime.d.ts.map +1 -0
- package/dist/services/VariantsRuntime.js +32 -0
- package/dist/services/VariantsRuntime.js.map +1 -0
- package/dist/services/VisualVariantAgentRunner.d.ts +20 -0
- package/dist/services/VisualVariantAgentRunner.d.ts.map +1 -0
- package/dist/services/VisualVariantAgentRunner.js +66 -0
- package/dist/services/VisualVariantAgentRunner.js.map +1 -0
- package/dist/services/WorktreeManager.d.ts +34 -0
- package/dist/services/WorktreeManager.d.ts.map +1 -1
- package/dist/services/WorktreeManager.js +172 -23
- package/dist/services/WorktreeManager.js.map +1 -1
- package/dist/services/createAgentVariantsOrchestrator.d.ts.map +1 -1
- package/dist/services/createAgentVariantsOrchestrator.js +9 -0
- package/dist/services/createAgentVariantsOrchestrator.js.map +1 -1
- package/dist/utils/devServerCommand.d.ts +11 -4
- package/dist/utils/devServerCommand.d.ts.map +1 -1
- package/dist/utils/devServerCommand.js +17 -8
- package/dist/utils/devServerCommand.js.map +1 -1
- package/dist/utils/devServerError.d.ts +34 -0
- package/dist/utils/devServerError.d.ts.map +1 -0
- package/dist/utils/devServerError.js +39 -0
- package/dist/utils/devServerError.js.map +1 -0
- package/dist/utils/elementRefToContext.d.ts +4 -0
- package/dist/utils/elementRefToContext.d.ts.map +1 -0
- package/dist/utils/elementRefToContext.js +63 -0
- package/dist/utils/elementRefToContext.js.map +1 -0
- package/dist/utils/skills/shared-variants-protocol.d.ts.map +1 -1
- package/dist/utils/skills/shared-variants-protocol.js +5 -2
- package/dist/utils/skills/shared-variants-protocol.js.map +1 -1
- package/dist/utils/variantSessionStart.d.ts +3 -0
- package/dist/utils/variantSessionStart.d.ts.map +1 -0
- package/dist/utils/variantSessionStart.js +7 -0
- package/dist/utils/variantSessionStart.js.map +1 -0
- package/package.json +3 -1
- package/src/ui/dist/assets/main-Cwwhwfjq.js +645 -0
- package/src/ui/dist/assets/main-Do6whVIm.css +1 -0
- package/src/ui/dist/index.html +2 -2
- package/dist/services/CommentVariationService.d.ts +0 -34
- package/dist/services/CommentVariationService.d.ts.map +0 -1
- package/dist/services/CommentVariationService.js +0 -136
- package/dist/services/CommentVariationService.js.map +0 -1
- package/dist/services/VariantCodeGeneratorService.d.ts +0 -39
- package/dist/services/VariantCodeGeneratorService.d.ts.map +0 -1
- package/dist/services/VariantCodeGeneratorService.js +0 -109
- package/dist/services/VariantCodeGeneratorService.js.map +0 -1
- package/src/ui/dist/assets/main-DUIrSkV3.css +0 -1
- package/src/ui/dist/assets/main-DYpxGvCu.js +0 -646
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../src/mcp/auth/tools.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../src/mcp/auth/tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { Server } from 'http';
|
|
2
|
+
import express from 'express';
|
|
3
|
+
import { RivetOAuthServerProvider } from './auth/httpOAuthProvider';
|
|
4
|
+
import { type RivetMcpHandle } from './server';
|
|
5
|
+
export declare const DEFAULT_MCP_HTTP_PORT = 5891;
|
|
6
|
+
export declare const MCP_HTTP_PATH = "/mcp";
|
|
7
|
+
export declare const OAUTH_CALLBACK_COMPLETE_PATH = "/oauth/callback/complete";
|
|
8
|
+
export type McpHttpAppOptions = {
|
|
9
|
+
/** Public base URL of this server (issuer), e.g. http://127.0.0.1:5891 */
|
|
10
|
+
baseUrl: URL;
|
|
11
|
+
provider: RivetOAuthServerProvider;
|
|
12
|
+
/** Builds the MCP server lazily on the first initialize request. */
|
|
13
|
+
createMcp: () => RivetMcpHandle;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Creates the Express app exposing the Rivet MCP server over streamable HTTP
|
|
17
|
+
* with native MCP OAuth support:
|
|
18
|
+
* - `/.well-known/oauth-protected-resource/mcp` + `/.well-known/oauth-authorization-server`
|
|
19
|
+
* - `/authorize`, `/token`, `/register` (dynamic client registration)
|
|
20
|
+
* - `/oauth/callback` browser landing page for the proxy Google flow
|
|
21
|
+
* - `/mcp` streamable HTTP endpoint guarded by bearer auth (401 +
|
|
22
|
+
* WWW-Authenticate with resource metadata when unauthenticated)
|
|
23
|
+
*/
|
|
24
|
+
export declare const createMcpHttpApp: (options: McpHttpAppOptions) => express.Express;
|
|
25
|
+
export type StartMCPServerHttpOptions = {
|
|
26
|
+
port?: number;
|
|
27
|
+
mcpEditor?: string;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Starts the Rivet MCP server over streamable HTTP on localhost so MCP
|
|
31
|
+
* clients that implement the MCP OAuth authorization spec (Cursor, Claude,
|
|
32
|
+
* Codex) can offer their native "Connect" sign-in flow. Completed logins
|
|
33
|
+
* persist credentials via ConfigManager, the same store the stdio mode uses.
|
|
34
|
+
*/
|
|
35
|
+
export declare const startMCPServerHttp: (options?: StartMCPServerHttpOptions) => Promise<Server>;
|
|
36
|
+
//# sourceMappingURL=httpServer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"httpServer.d.ts","sourceRoot":"","sources":["../../src/mcp/httpServer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,OAAwC,MAAM,SAAS,CAAC;AAQ/D,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAkB,KAAK,cAAc,EAAE,MAAM,UAAU,CAAC;AAW/D,eAAO,MAAM,qBAAqB,OAAO,CAAC;AAC1C,eAAO,MAAM,aAAa,SAAS,CAAC;AACpC,eAAO,MAAM,4BAA4B,6BAA6B,CAAC;AA+EvE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,0EAA0E;IAC1E,OAAO,EAAE,GAAG,CAAC;IACb,QAAQ,EAAE,wBAAwB,CAAC;IACnC,oEAAoE;IACpE,SAAS,EAAE,MAAM,cAAc,CAAC;CACjC,CAAC;AAuBF;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB,GAAI,SAAS,iBAAiB,KAAG,OAAO,CAAC,OAiLrE,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,GAC7B,UAAS,yBAA8B,KACtC,OAAO,CAAC,MAAM,CA6ChB,CAAC"}
|
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.startMCPServerHttp = exports.createMcpHttpApp = exports.OAUTH_CALLBACK_COMPLETE_PATH = exports.MCP_HTTP_PATH = exports.DEFAULT_MCP_HTTP_PORT = void 0;
|
|
7
|
+
const crypto_1 = require("crypto");
|
|
8
|
+
const express_1 = __importDefault(require("express"));
|
|
9
|
+
const streamableHttp_js_1 = require("@modelcontextprotocol/sdk/server/streamableHttp.js");
|
|
10
|
+
const router_js_1 = require("@modelcontextprotocol/sdk/server/auth/router.js");
|
|
11
|
+
const bearerAuth_js_1 = require("@modelcontextprotocol/sdk/server/auth/middleware/bearerAuth.js");
|
|
12
|
+
const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
|
|
13
|
+
const httpOAuthProvider_1 = require("./auth/httpOAuthProvider");
|
|
14
|
+
const server_1 = require("./server");
|
|
15
|
+
const ConfigManager_1 = require("../services/ConfigManager");
|
|
16
|
+
const RequestAuthContext_1 = require("../services/RequestAuthContext");
|
|
17
|
+
const logger_1 = require("../utils/logger");
|
|
18
|
+
const skillWriter_1 = require("../utils/skillWriter");
|
|
19
|
+
const log = (0, logger_1.createLogger)('mcp-http');
|
|
20
|
+
exports.DEFAULT_MCP_HTTP_PORT = 5891;
|
|
21
|
+
exports.MCP_HTTP_PATH = '/mcp';
|
|
22
|
+
exports.OAUTH_CALLBACK_COMPLETE_PATH = '/oauth/callback/complete';
|
|
23
|
+
const MCP_OAUTH_SCOPE = 'rivet';
|
|
24
|
+
const MCP_HTTP_HOST = '127.0.0.1';
|
|
25
|
+
/**
|
|
26
|
+
* Browser page served at `/` as the OAuth callback. The proxy only accepts
|
|
27
|
+
* bare localhost origins as `redirectOrigin` (no custom paths), so it
|
|
28
|
+
* redirects the browser to `/?session=` with the Supabase tokens in the URL
|
|
29
|
+
* hash; this page forwards them to the local server, which finishes the
|
|
30
|
+
* login and replies with the MCP client's redirect URL (carrying the
|
|
31
|
+
* authorization code) to navigate to.
|
|
32
|
+
*/
|
|
33
|
+
const getOAuthCallbackHtml = (completePath) => `<!doctype html>
|
|
34
|
+
<html>
|
|
35
|
+
<head>
|
|
36
|
+
<meta charset="utf-8" />
|
|
37
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
38
|
+
<title>Rivet authentication</title>
|
|
39
|
+
<style>
|
|
40
|
+
body {
|
|
41
|
+
margin: 0;
|
|
42
|
+
min-height: 100vh;
|
|
43
|
+
display: grid;
|
|
44
|
+
place-items: center;
|
|
45
|
+
font-family: system-ui, sans-serif;
|
|
46
|
+
background: #0b0b0f;
|
|
47
|
+
color: #fff;
|
|
48
|
+
}
|
|
49
|
+
main {
|
|
50
|
+
max-width: 420px;
|
|
51
|
+
padding: 32px;
|
|
52
|
+
text-align: center;
|
|
53
|
+
}
|
|
54
|
+
</style>
|
|
55
|
+
</head>
|
|
56
|
+
<body>
|
|
57
|
+
<main>
|
|
58
|
+
<h1>Finishing Rivet sign in...</h1>
|
|
59
|
+
<p>You will be sent back to your editor automatically.</p>
|
|
60
|
+
</main>
|
|
61
|
+
<script>
|
|
62
|
+
const params = new URLSearchParams(window.location.search);
|
|
63
|
+
const hash = new URLSearchParams(window.location.hash.slice(1));
|
|
64
|
+
if (!params.get('session') || !hash.get('access_token')) {
|
|
65
|
+
document.querySelector('h1').textContent = 'Rivet MCP server is running';
|
|
66
|
+
document.querySelector('p').textContent =
|
|
67
|
+
'Connect from your MCP client (e.g. Cursor) to sign in.';
|
|
68
|
+
throw new Error('Not an OAuth callback');
|
|
69
|
+
}
|
|
70
|
+
if (window.location.hash) {
|
|
71
|
+
window.history.replaceState(
|
|
72
|
+
null,
|
|
73
|
+
document.title,
|
|
74
|
+
window.location.pathname + window.location.search
|
|
75
|
+
);
|
|
76
|
+
}
|
|
77
|
+
fetch('${completePath}', {
|
|
78
|
+
method: 'POST',
|
|
79
|
+
headers: { 'Content-Type': 'application/json' },
|
|
80
|
+
body: JSON.stringify({
|
|
81
|
+
sessionId: params.get('session'),
|
|
82
|
+
accessToken: hash.get('access_token'),
|
|
83
|
+
refreshToken: hash.get('refresh_token')
|
|
84
|
+
})
|
|
85
|
+
}).then(async (response) => {
|
|
86
|
+
const result = await response.json().catch(() => null);
|
|
87
|
+
if (response.ok && result && result.redirectUrl) {
|
|
88
|
+
document.querySelector('h1').textContent = 'Rivet sign in complete';
|
|
89
|
+
window.location.replace(result.redirectUrl);
|
|
90
|
+
} else {
|
|
91
|
+
document.querySelector('h1').textContent = 'Rivet sign in failed';
|
|
92
|
+
}
|
|
93
|
+
}).catch(() => {
|
|
94
|
+
document.querySelector('h1').textContent = 'Rivet sign in failed';
|
|
95
|
+
});
|
|
96
|
+
</script>
|
|
97
|
+
</body>
|
|
98
|
+
</html>`;
|
|
99
|
+
const getAuthExtraString = (req, key) => {
|
|
100
|
+
const value = req.auth?.extra?.[key];
|
|
101
|
+
return typeof value === 'string' ? value : undefined;
|
|
102
|
+
};
|
|
103
|
+
/** Builds the request-scoped credentials used by services during MCP tools. */
|
|
104
|
+
const getRequestAuthContextValue = (req) => ({
|
|
105
|
+
token: req.auth?.token,
|
|
106
|
+
refreshToken: getAuthExtraString(req, 'refreshToken'),
|
|
107
|
+
email: getAuthExtraString(req, 'email'),
|
|
108
|
+
userId: getAuthExtraString(req, 'userId'),
|
|
109
|
+
});
|
|
110
|
+
/** Handles an MCP request with bearer credentials isolated to this request. */
|
|
111
|
+
const handleMcpRequestWithAuthContext = (req, callback) => {
|
|
112
|
+
return (0, RequestAuthContext_1.runWithRequestAuthContext)(getRequestAuthContextValue(req), callback);
|
|
113
|
+
};
|
|
114
|
+
/**
|
|
115
|
+
* Creates the Express app exposing the Rivet MCP server over streamable HTTP
|
|
116
|
+
* with native MCP OAuth support:
|
|
117
|
+
* - `/.well-known/oauth-protected-resource/mcp` + `/.well-known/oauth-authorization-server`
|
|
118
|
+
* - `/authorize`, `/token`, `/register` (dynamic client registration)
|
|
119
|
+
* - `/oauth/callback` browser landing page for the proxy Google flow
|
|
120
|
+
* - `/mcp` streamable HTTP endpoint guarded by bearer auth (401 +
|
|
121
|
+
* WWW-Authenticate with resource metadata when unauthenticated)
|
|
122
|
+
*/
|
|
123
|
+
const createMcpHttpApp = (options) => {
|
|
124
|
+
const { baseUrl, provider, createMcp } = options;
|
|
125
|
+
const mcpUrl = new URL(exports.MCP_HTTP_PATH, baseUrl);
|
|
126
|
+
const app = (0, express_1.default)();
|
|
127
|
+
app.use(express_1.default.json());
|
|
128
|
+
app.use((0, router_js_1.mcpAuthRouter)({
|
|
129
|
+
provider,
|
|
130
|
+
issuerUrl: baseUrl,
|
|
131
|
+
resourceServerUrl: mcpUrl,
|
|
132
|
+
resourceName: 'Rivet',
|
|
133
|
+
scopesSupported: [MCP_OAUTH_SCOPE],
|
|
134
|
+
}));
|
|
135
|
+
app.get('/', (_req, res) => {
|
|
136
|
+
res
|
|
137
|
+
.status(200)
|
|
138
|
+
.type('html')
|
|
139
|
+
.send(getOAuthCallbackHtml(exports.OAUTH_CALLBACK_COMPLETE_PATH));
|
|
140
|
+
});
|
|
141
|
+
app.post(exports.OAUTH_CALLBACK_COMPLETE_PATH, async (req, res) => {
|
|
142
|
+
try {
|
|
143
|
+
const { redirectUrl } = await provider.completeBrowserCallback(req.body ?? {});
|
|
144
|
+
res.json({ success: true, redirectUrl });
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
log.warn('OAuth callback completion failed:', error);
|
|
148
|
+
res.status(400).json({
|
|
149
|
+
success: false,
|
|
150
|
+
error: error instanceof Error ? error.message : 'Authentication failed',
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
const bearerAuth = (0, bearerAuth_js_1.requireBearerAuth)({
|
|
155
|
+
verifier: provider,
|
|
156
|
+
resourceMetadataUrl: (0, router_js_1.getOAuthProtectedResourceMetadataUrl)(mcpUrl),
|
|
157
|
+
});
|
|
158
|
+
// The Rivet MCP server holds long-lived session state (visual editor
|
|
159
|
+
// bridge, telemetry), so a single instance is shared across MCP sessions:
|
|
160
|
+
// a new initialize request closes the previous session's transport and
|
|
161
|
+
// reconnects the server to the new one.
|
|
162
|
+
let mcpHandle = null;
|
|
163
|
+
const transports = new Map();
|
|
164
|
+
let initializeRequestChain = Promise.resolve();
|
|
165
|
+
let activeSessionPostRequestCount = 0;
|
|
166
|
+
const activeSessionPostRequestIdleResolvers = new Set();
|
|
167
|
+
/** Waits until active MCP tool/resource POST requests have finished. */
|
|
168
|
+
const waitForActiveSessionPostRequests = () => {
|
|
169
|
+
if (activeSessionPostRequestCount === 0) {
|
|
170
|
+
return Promise.resolve();
|
|
171
|
+
}
|
|
172
|
+
return new Promise((resolve) => {
|
|
173
|
+
activeSessionPostRequestIdleResolvers.add(resolve);
|
|
174
|
+
});
|
|
175
|
+
};
|
|
176
|
+
/** Tracks active session POSTs so reconnects do not close in-flight work. */
|
|
177
|
+
const handleActiveSessionPostRequest = async (req, callback) => {
|
|
178
|
+
if (req.method !== 'POST') {
|
|
179
|
+
await callback();
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
activeSessionPostRequestCount += 1;
|
|
183
|
+
try {
|
|
184
|
+
await callback();
|
|
185
|
+
}
|
|
186
|
+
finally {
|
|
187
|
+
activeSessionPostRequestCount -= 1;
|
|
188
|
+
if (activeSessionPostRequestCount === 0) {
|
|
189
|
+
for (const resolve of activeSessionPostRequestIdleResolvers) {
|
|
190
|
+
resolve();
|
|
191
|
+
}
|
|
192
|
+
activeSessionPostRequestIdleResolvers.clear();
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
};
|
|
196
|
+
app.all(exports.MCP_HTTP_PATH, bearerAuth, async (req, res) => {
|
|
197
|
+
try {
|
|
198
|
+
const sessionId = req.headers['mcp-session-id'];
|
|
199
|
+
const existingTransport = sessionId
|
|
200
|
+
? transports.get(sessionId)
|
|
201
|
+
: undefined;
|
|
202
|
+
if (existingTransport) {
|
|
203
|
+
await handleActiveSessionPostRequest(req, () => handleMcpRequestWithAuthContext(req, () => existingTransport.handleRequest(req, res, req.body)));
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
if (req.method === 'POST' && (0, types_js_1.isInitializeRequest)(req.body)) {
|
|
207
|
+
const handleInitializeRequest = async () => {
|
|
208
|
+
await waitForActiveSessionPostRequests();
|
|
209
|
+
for (const transport of transports.values()) {
|
|
210
|
+
await transport.close();
|
|
211
|
+
}
|
|
212
|
+
transports.clear();
|
|
213
|
+
if (!mcpHandle) {
|
|
214
|
+
mcpHandle = createMcp();
|
|
215
|
+
}
|
|
216
|
+
else {
|
|
217
|
+
await mcpHandle.closeActiveSession();
|
|
218
|
+
}
|
|
219
|
+
const transport = new streamableHttp_js_1.StreamableHTTPServerTransport({
|
|
220
|
+
sessionIdGenerator: () => (0, crypto_1.randomUUID)(),
|
|
221
|
+
onsessioninitialized: (newSessionId) => {
|
|
222
|
+
transports.set(newSessionId, transport);
|
|
223
|
+
},
|
|
224
|
+
});
|
|
225
|
+
await mcpHandle.mcp.connect(transport);
|
|
226
|
+
// Protocol.connect installs its own onclose; chain ours after it so
|
|
227
|
+
// closed sessions drop out of the transport map.
|
|
228
|
+
const protocolOnClose = transport.onclose;
|
|
229
|
+
transport.onclose = () => {
|
|
230
|
+
const closedSessionId = transport.sessionId;
|
|
231
|
+
if (closedSessionId) {
|
|
232
|
+
transports.delete(closedSessionId);
|
|
233
|
+
}
|
|
234
|
+
protocolOnClose?.();
|
|
235
|
+
};
|
|
236
|
+
await handleMcpRequestWithAuthContext(req, () => transport.handleRequest(req, res, req.body));
|
|
237
|
+
};
|
|
238
|
+
const initializeRequest = initializeRequestChain.then(handleInitializeRequest, handleInitializeRequest);
|
|
239
|
+
initializeRequestChain = initializeRequest.catch(() => undefined);
|
|
240
|
+
await initializeRequest;
|
|
241
|
+
return;
|
|
242
|
+
}
|
|
243
|
+
res.status(400).json({
|
|
244
|
+
jsonrpc: '2.0',
|
|
245
|
+
error: {
|
|
246
|
+
code: -32000,
|
|
247
|
+
message: 'Bad Request: No valid session ID provided',
|
|
248
|
+
},
|
|
249
|
+
id: null,
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
catch (error) {
|
|
253
|
+
log.warn('MCP HTTP request failed:', error);
|
|
254
|
+
if (!res.headersSent) {
|
|
255
|
+
res.status(500).json({
|
|
256
|
+
jsonrpc: '2.0',
|
|
257
|
+
error: { code: -32603, message: 'Internal server error' },
|
|
258
|
+
id: null,
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
});
|
|
263
|
+
return app;
|
|
264
|
+
};
|
|
265
|
+
exports.createMcpHttpApp = createMcpHttpApp;
|
|
266
|
+
/**
|
|
267
|
+
* Starts the Rivet MCP server over streamable HTTP on localhost so MCP
|
|
268
|
+
* clients that implement the MCP OAuth authorization spec (Cursor, Claude,
|
|
269
|
+
* Codex) can offer their native "Connect" sign-in flow. Completed logins
|
|
270
|
+
* persist credentials via ConfigManager, the same store the stdio mode uses.
|
|
271
|
+
*/
|
|
272
|
+
const startMCPServerHttp = async (options = {}) => {
|
|
273
|
+
(0, logger_1.setLogLevel)(process.env.RIVET_LOG_LEVEL ?? 'INFO');
|
|
274
|
+
const port = options.port ?? exports.DEFAULT_MCP_HTTP_PORT;
|
|
275
|
+
const baseUrl = new URL(`http://${MCP_HTTP_HOST}:${port}`);
|
|
276
|
+
const configManager = (0, ConfigManager_1.getConfigManager)();
|
|
277
|
+
if (options.mcpEditor === 'claude' || options.mcpEditor === undefined) {
|
|
278
|
+
(0, skillWriter_1.writeSkillFileIfNeeded)();
|
|
279
|
+
}
|
|
280
|
+
const provider = new httpOAuthProvider_1.RivetOAuthServerProvider({
|
|
281
|
+
proxyUrl: configManager.getProxyUrl(),
|
|
282
|
+
// The proxy only accepts bare localhost origins; the callback page is
|
|
283
|
+
// served at `/`.
|
|
284
|
+
callbackUrl: baseUrl.origin,
|
|
285
|
+
mcpEditor: options.mcpEditor,
|
|
286
|
+
persistTokens: ({ token, refreshToken, user }) => {
|
|
287
|
+
configManager.setAuth(token, user?.email ?? configManager.getEmail() ?? '', refreshToken, user?.id);
|
|
288
|
+
},
|
|
289
|
+
isRefreshTokenCurrent: (refreshToken) => configManager.getRefreshToken() === refreshToken,
|
|
290
|
+
});
|
|
291
|
+
const app = (0, exports.createMcpHttpApp)({
|
|
292
|
+
baseUrl,
|
|
293
|
+
provider,
|
|
294
|
+
createMcp: () => (0, server_1.createRivetMcp)({
|
|
295
|
+
mcpEditor: options.mcpEditor,
|
|
296
|
+
revokeBearerToken: (token) => provider.revokeAccessToken(token),
|
|
297
|
+
}),
|
|
298
|
+
});
|
|
299
|
+
const server = await new Promise((resolve, reject) => {
|
|
300
|
+
const listening = app.listen(port, MCP_HTTP_HOST, () => resolve(listening));
|
|
301
|
+
listening.on('error', reject);
|
|
302
|
+
});
|
|
303
|
+
log.info(`Rivet MCP server (streamable HTTP) listening at ${baseUrl.href.replace(/\/$/, '')}${exports.MCP_HTTP_PATH}`);
|
|
304
|
+
return server;
|
|
305
|
+
};
|
|
306
|
+
exports.startMCPServerHttp = startMCPServerHttp;
|
|
307
|
+
//# sourceMappingURL=httpServer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"httpServer.js","sourceRoot":"","sources":["../../src/mcp/httpServer.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp/server.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
1
2
|
import { type ImageContent } from './changeBatchClassification';
|
|
2
3
|
import type { ChangeRequest, StaticPreviewChangeTarget } from '../types/change-request-types';
|
|
3
4
|
/**
|
|
@@ -33,6 +34,22 @@ export declare const buildMixedVariantBatchResponse: (rejectedRequest: ChangeReq
|
|
|
33
34
|
export declare const buildVariantRequestBatchResponse: (consumedRequest: ChangeRequest | null | undefined) => MCPChangeResponse;
|
|
34
35
|
export declare const collectStaticPreviewRefineTargetInstructions: (request: ChangeRequest) => StaticPreviewRefineTargetInstruction[];
|
|
35
36
|
export declare const buildStaticPreviewRefineResponse: (consumedRequest: ChangeRequest | null | undefined) => MCPChangeResponse;
|
|
37
|
+
export type RivetMcpHandle = {
|
|
38
|
+
mcp: McpServer;
|
|
39
|
+
closeActiveSession: () => Promise<void>;
|
|
40
|
+
shutdown: () => Promise<void>;
|
|
41
|
+
};
|
|
42
|
+
export type RivetMcpOptions = {
|
|
43
|
+
mcpEditor?: string;
|
|
44
|
+
revokeBearerToken?: (token: string) => void;
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* Builds the fully configured Rivet MCP server (tools, auth gating, session
|
|
48
|
+
* bridge, telemetry) without binding it to a transport. Shared by the stdio
|
|
49
|
+
* and streamable-HTTP entry points. Call at most once per process: it
|
|
50
|
+
* registers process-level signal handlers for resource cleanup.
|
|
51
|
+
*/
|
|
52
|
+
export declare const createRivetMcp: (options?: RivetMcpOptions) => RivetMcpHandle;
|
|
36
53
|
export declare const startMCPServer: (mcpEditor?: string) => Promise<void>;
|
|
37
54
|
export {};
|
|
38
55
|
//# sourceMappingURL=server.d.ts.map
|
package/dist/mcp/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA8CpE,OAAO,EAKL,KAAK,YAAY,EAClB,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EACV,aAAa,EAEb,yBAAyB,EAC1B,MAAM,+BAA+B,CAAC;AA0FvC;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,GAAI,QAAQ;IAChD,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,MAAM,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACtC,KAAG,CAAC,MAAM,IAAI,CAyBd,CAAC;AA+WF,KAAK,eAAe,GAAG;IACrB,OAAO,EAAE,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,EAAE,IAAI,CAAC;CAChB,CAAC;AAEF,KAAK,iBAAiB,GAAG;IACvB,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,YAAY,CAAC,CAAC;IAC9D,OAAO,CAAC,EAAE,IAAI,CAAC;CAChB,CAAC;AAEF,KAAK,oCAAoC,GAAG;IAC1C,MAAM,EAAE,yBAAyB,CAAC;IAClC,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAeF,eAAO,MAAM,8BAA8B,GACzC,iBAAiB,aAAa,GAAG,IAAI,GAAG,SAAS,KAChD,eAmBF,CAAC;AAEF,eAAO,MAAM,gCAAgC,GAC3C,iBAAiB,aAAa,GAAG,IAAI,GAAG,SAAS,KAChD,iBAqBF,CAAC;AAWF,eAAO,MAAM,4CAA4C,GACvD,SAAS,aAAa,KACrB,oCAAoC,EAqBtC,CAAC;AAEF,eAAO,MAAM,gCAAgC,GAC3C,iBAAiB,aAAa,GAAG,IAAI,GAAG,SAAS,KAChD,iBA0BF,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,GAAG,EAAE,SAAS,CAAC;IACf,kBAAkB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7C,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,cAAc,GACzB,UAAU,eAAe,KACxB,cA2vCF,CAAC;AAEF,eAAO,MAAM,cAAc,GAAU,YAAY,MAAM,KAAG,OAAO,CAAC,IAAI,CAgCrE,CAAC"}
|
package/dist/mcp/server.js
CHANGED
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.startMCPServer = exports.buildStaticPreviewRefineResponse = exports.collectStaticPreviewRefineTargetInstructions = exports.buildVariantRequestBatchResponse = exports.buildMixedVariantBatchResponse = exports.startParentProcessMonitor = void 0;
|
|
6
|
+
exports.startMCPServer = exports.createRivetMcp = exports.buildStaticPreviewRefineResponse = exports.collectStaticPreviewRefineTargetInstructions = exports.buildVariantRequestBatchResponse = exports.buildMixedVariantBatchResponse = exports.startParentProcessMonitor = void 0;
|
|
7
7
|
const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
|
|
8
8
|
const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
|
|
9
9
|
const v3_1 = require("zod/v3");
|
|
@@ -357,18 +357,18 @@ const APPLY_GUIDE = 'Read each file in sourceFiles, then apply every change in t
|
|
|
357
357
|
'chat: interpret the free-text instruction in the "instruction" field and apply appropriate code changes across any file in the project. ' +
|
|
358
358
|
'variant: a user-picked variant from the agent-variants flow. ' +
|
|
359
359
|
'Variant protocol reminder: source_research (if present) -> report_source_context -> brief approval -> generation -> user commit. ' +
|
|
360
|
-
|
|
360
|
+
"variant.payload.kind=diff-applied: the server has already `git apply`d the unified diff to the user's working tree (uncommitted). DO NOT re-apply — acknowledge the variant and let the user review. " +
|
|
361
361
|
'variant.payload.kind=diff (legacy): apply the unified diff in payload.diff against the project root via `git apply` (no manual edits). ' +
|
|
362
362
|
'variant.payload.kind=project-created: the project has already been materialized at destinationPath and git-committed by the server. Optionally run `npm install` in destinationPath and continue from there — no further file operations are required for the pick itself. ' +
|
|
363
363
|
'For elements with empty filePaths, search the codebase by className or xpath. ' +
|
|
364
364
|
'If a change has imageCount > 0, the corresponding reference images appear as image content items immediately following this text in the tool result — view them before making changes. ' +
|
|
365
|
-
|
|
365
|
+
"IMPORTANT — variantRequest branch: if a comment item carries `variantRequest: { count }`, do NOT edit any files. Instead, derive `target` from the comment's `element` using this priority: " +
|
|
366
366
|
'(a) prefer `{ type: "file", ref: filePaths[0] }` when `filePaths.length === 1`; otherwise ' +
|
|
367
367
|
'(b) `rivetId` → `{ type: "element", ref: \'[data-rivet-id="<rivetId>"]\' }`, then ' +
|
|
368
368
|
'(c) `id` (no whitespace) → `{ type: "element", ref: "#<id>" }`, then ' +
|
|
369
369
|
'(d) `xpath` → `{ type: "element", ref: "<xpath>" }`, then ' +
|
|
370
370
|
'(e) single-token `className` → `{ type: "element", ref: ".<token>" }`. ' +
|
|
371
|
-
'Then call `
|
|
371
|
+
'Then call `start_variants` with `{ mode: "existing", prompt: instruction, count: variantRequest.count, target }`. Do NOT use the older `propose_variants` chain for this path. `start_variants` returns leased work items; generate each variant in its worktree, call `report_variant_complete` for each leased item, then wait for the user to pick and call `commit_variant`. ' +
|
|
372
372
|
'CRITICAL WORKFLOW: 1. Call get_pending_changes with a message sharing your brief plan. 2. Edit the files. 3. Call get_pending_changes with a message summarizing what you changed and refresh_git: true so the Rivet UI updates. 4. STOP and let the user know their changes have been applied.';
|
|
373
373
|
/**
|
|
374
374
|
* Prefix added to the apply guide when a batch targets a specific variant. The
|
|
@@ -392,14 +392,13 @@ const requestHasResolvedReferences = (request) => request.changes.some((c) => c.
|
|
|
392
392
|
c.resolvedReferences.length > 0);
|
|
393
393
|
const VARIANT_REQUEST_GUIDE = 'This batch is a Rivet variant request — do NOT edit files directly. ' +
|
|
394
394
|
'The pending change is a single CommentChangeItem with `variantRequest.count`. ' +
|
|
395
|
-
|
|
395
|
+
"Derive the structured `start_variants.target` from the comment's `element` using this priority: " +
|
|
396
396
|
'(a) `{ type: "file", ref: filePaths[0] }` when `filePaths.length === 1`; otherwise ' +
|
|
397
|
-
'(b) `
|
|
398
|
-
'(c) `id`
|
|
399
|
-
'(d) `
|
|
400
|
-
'(e) single-token `className
|
|
401
|
-
'Then call `
|
|
402
|
-
'`report_variant_briefs` → `approve_variant_briefs` (only after explicit user confirmation; pass `confirmedByUser: true`) → `continue_variants` → `report_variant_complete`. ' +
|
|
397
|
+
'(b) `{ type: "selector", ref: `[data-rivet-id="${rivetId}"]` }` when `rivetId` is present, then ' +
|
|
398
|
+
'(c) `{ type: "selector", ref: `#${id}` }` when `id` has no whitespace, then ' +
|
|
399
|
+
'(d) `{ type: "selector", ref: xpath }`, then ' +
|
|
400
|
+
'(e) `{ type: "selector", ref: `.${token}` }` for a single-token `className`. ' +
|
|
401
|
+
'Then call `start_variants` with `{ mode: "existing", prompt: instruction, count: variantRequest.count, target }`. Do NOT use the older `propose_variants` chain for this path. `start_variants` returns leased work items; generate each variant in its worktree and call `report_variant_complete` for each leased item. ' +
|
|
403
402
|
'After the user picks a variant via `commit_variant`, STOP and tell the user their variant has been committed.';
|
|
404
403
|
const VARIANT_MIXED_BATCH_GUIDE = 'Mixed batch rejected: a `variantRequest` comment must be the only item in its batch. ' +
|
|
405
404
|
'Ask the user to send the variant request on its own (clear other pending changes first) and retry.';
|
|
@@ -512,21 +511,14 @@ const buildStaticPreviewRefineResponse = (consumedRequest) => {
|
|
|
512
511
|
};
|
|
513
512
|
};
|
|
514
513
|
exports.buildStaticPreviewRefineResponse = buildStaticPreviewRefineResponse;
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
// so the agent keeps refusing forever. Writing on boot guarantees the agent
|
|
524
|
-
// loads current guidance on its next turn. Idempotent + version-gated.
|
|
525
|
-
// (Cursor rules stay post-open: they're project-scoped and the project path
|
|
526
|
-
// isn't known until the editor opens.)
|
|
527
|
-
if (mcpEditor === 'claude' || mcpEditor === undefined) {
|
|
528
|
-
(0, skillWriter_1.writeSkillFileIfNeeded)();
|
|
529
|
-
}
|
|
514
|
+
/**
|
|
515
|
+
* Builds the fully configured Rivet MCP server (tools, auth gating, session
|
|
516
|
+
* bridge, telemetry) without binding it to a transport. Shared by the stdio
|
|
517
|
+
* and streamable-HTTP entry points. Call at most once per process: it
|
|
518
|
+
* registers process-level signal handlers for resource cleanup.
|
|
519
|
+
*/
|
|
520
|
+
const createRivetMcp = (options) => {
|
|
521
|
+
const { mcpEditor, revokeBearerToken } = options ?? {};
|
|
530
522
|
const sendButtonLabel = getSendButtonLabel(mcpEditor);
|
|
531
523
|
const bridge = new SessionBridgeService_1.SessionBridgeService();
|
|
532
524
|
const telemetry = new TelemetryService_1.TelemetryService({
|
|
@@ -925,7 +917,7 @@ const startMCPServer = async (mcpEditor) => {
|
|
|
925
917
|
],
|
|
926
918
|
};
|
|
927
919
|
});
|
|
928
|
-
guardedMcp.tool('open_visual_editor',
|
|
920
|
+
guardedMcp.tool('open_visual_editor', 'Start a Rivet visual editing session. Call detect_project first to get the framework. If the response has opened: false, follow the nextStep/nextAction instructions to recover. Once opened, follow the next_step instructions exactly.', openEditorArgs, async (args) => {
|
|
929
921
|
if (bridge.isActive()) {
|
|
930
922
|
return {
|
|
931
923
|
content: [
|
|
@@ -1308,7 +1300,9 @@ const startMCPServer = async (mcpEditor) => {
|
|
|
1308
1300
|
startupModeSelection,
|
|
1309
1301
|
requestedStartupMode,
|
|
1310
1302
|
isGitEnabled: isGitEnabledForSession,
|
|
1311
|
-
next_step: mcpEditor === 'cursor' ||
|
|
1303
|
+
next_step: mcpEditor === 'cursor' ||
|
|
1304
|
+
mcpEditor === 'codex' ||
|
|
1305
|
+
mcpEditor === 'claude-desktop'
|
|
1312
1306
|
? `Rivet is open. Tell the user: "Rivet is ready — make your visual changes and click '${sendButtonLabel}'." Then call watch_for_changes({ sessionId: "${sessionId}" }) to wait for their changes. After applying, STOP and ask the user if they want to keep watching or go back to normal prompting.`
|
|
1313
1307
|
: `Rivet is open. Tell the user: "Rivet is ready — make your visual changes and click '${sendButtonLabel}'."
|
|
1314
1308
|
|
|
@@ -1555,8 +1549,35 @@ If the Monitor tool is not available, call watch_for_changes({ sessionId: "${ses
|
|
|
1555
1549
|
integrationsClient,
|
|
1556
1550
|
});
|
|
1557
1551
|
(0, tools_2.registerIntegrationsTools)(guardedMcp, { integrationsClient });
|
|
1558
|
-
(0, tools_1.registerAuthTools)(mcp, {
|
|
1552
|
+
(0, tools_1.registerAuthTools)(mcp, {
|
|
1553
|
+
authService,
|
|
1554
|
+
telemetry,
|
|
1555
|
+
mcpEditor,
|
|
1556
|
+
revokeBearerToken,
|
|
1557
|
+
});
|
|
1559
1558
|
log.info('agent-variants + integrations + auth MCP tools registered');
|
|
1559
|
+
const closeActiveSession = async () => {
|
|
1560
|
+
await cleanupSessionResources({ trackSessionEnd: true });
|
|
1561
|
+
};
|
|
1562
|
+
return { mcp, closeActiveSession, shutdown };
|
|
1563
|
+
};
|
|
1564
|
+
exports.createRivetMcp = createRivetMcp;
|
|
1565
|
+
const startMCPServer = async (mcpEditor) => {
|
|
1566
|
+
// Default silent so MCP transport stays clean; opt in via env for debugging
|
|
1567
|
+
// (e.g. `RIVET_LOG_LEVEL=debug` in the MCP client's env block).
|
|
1568
|
+
(0, index_core_1.setLogLevel)(process.env.RIVET_LOG_LEVEL ?? 'SILENT');
|
|
1569
|
+
// Refresh the Claude skill at startup — NOT only after a successful
|
|
1570
|
+
// open_visual_editor (the other call sites below). Otherwise stale guidance
|
|
1571
|
+
// that refuses an action deadlocks: e.g. a v22 skill that won't open an empty
|
|
1572
|
+
// folder means open_visual_editor never runs, so the skill never rewrites,
|
|
1573
|
+
// so the agent keeps refusing forever. Writing on boot guarantees the agent
|
|
1574
|
+
// loads current guidance on its next turn. Idempotent + version-gated.
|
|
1575
|
+
// (Cursor rules stay post-open: they're project-scoped and the project path
|
|
1576
|
+
// isn't known until the editor opens.)
|
|
1577
|
+
if (mcpEditor === 'claude' || mcpEditor === undefined) {
|
|
1578
|
+
(0, skillWriter_1.writeSkillFileIfNeeded)();
|
|
1579
|
+
}
|
|
1580
|
+
const { mcp } = (0, exports.createRivetMcp)({ mcpEditor });
|
|
1560
1581
|
// Connect via stdio
|
|
1561
1582
|
const transport = new stdio_js_1.StdioServerTransport();
|
|
1562
1583
|
await mcp.connect(transport);
|