rivet-design 0.10.8 → 0.11.0
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 +47 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +277 -123
- package/dist/index.js.map +1 -1
- package/dist/mcp/agent-variants/SessionStore.d.ts +28 -4
- package/dist/mcp/agent-variants/SessionStore.d.ts.map +1 -1
- package/dist/mcp/agent-variants/SessionStore.js +356 -123
- package/dist/mcp/agent-variants/SessionStore.js.map +1 -1
- package/dist/mcp/agent-variants/WorktreeOrchestrator.d.ts +84 -4
- package/dist/mcp/agent-variants/WorktreeOrchestrator.d.ts.map +1 -1
- package/dist/mcp/agent-variants/WorktreeOrchestrator.js +744 -145
- package/dist/mcp/agent-variants/WorktreeOrchestrator.js.map +1 -1
- package/dist/mcp/agent-variants/WorktreeOrchestrator.testHelpers.d.ts +8 -3
- package/dist/mcp/agent-variants/WorktreeOrchestrator.testHelpers.d.ts.map +1 -1
- package/dist/mcp/agent-variants/WorktreeOrchestrator.testHelpers.js +8 -3
- package/dist/mcp/agent-variants/WorktreeOrchestrator.testHelpers.js.map +1 -1
- package/dist/mcp/agent-variants/contracts.d.ts +7984 -1625
- package/dist/mcp/agent-variants/contracts.d.ts.map +1 -1
- package/dist/mcp/agent-variants/contracts.js +312 -154
- package/dist/mcp/agent-variants/contracts.js.map +1 -1
- package/dist/mcp/agent-variants/createZeroToOneTool.d.ts +2 -3
- package/dist/mcp/agent-variants/createZeroToOneTool.d.ts.map +1 -1
- package/dist/mcp/agent-variants/createZeroToOneTool.js +49 -39
- package/dist/mcp/agent-variants/createZeroToOneTool.js.map +1 -1
- package/dist/mcp/agent-variants/designCritique.d.ts +167 -0
- package/dist/mcp/agent-variants/designCritique.d.ts.map +1 -0
- package/dist/mcp/agent-variants/designCritique.js +717 -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 +3 -3
- 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 +4 -2
- package/dist/mcp/agent-variants/pinterestSourceContext.d.ts.map +1 -1
- package/dist/mcp/agent-variants/pinterestSourceContext.js +7 -6
- package/dist/mcp/agent-variants/pinterestSourceContext.js.map +1 -1
- package/dist/mcp/agent-variants/previewQa.d.ts +6 -4
- package/dist/mcp/agent-variants/previewQa.d.ts.map +1 -1
- package/dist/mcp/agent-variants/previewQa.js +140 -13
- package/dist/mcp/agent-variants/previewQa.js.map +1 -1
- package/dist/mcp/agent-variants/sourceContext.d.ts +20 -5
- package/dist/mcp/agent-variants/sourceContext.d.ts.map +1 -1
- package/dist/mcp/agent-variants/sourceContext.js +99 -115
- package/dist/mcp/agent-variants/sourceContext.js.map +1 -1
- package/dist/mcp/agent-variants/tools.d.ts +7 -0
- package/dist/mcp/agent-variants/tools.d.ts.map +1 -1
- package/dist/mcp/agent-variants/tools.js +216 -15
- package/dist/mcp/agent-variants/tools.js.map +1 -1
- package/dist/mcp/agent-variants/variantContext.d.ts +19 -0
- package/dist/mcp/agent-variants/variantContext.d.ts.map +1 -0
- package/dist/mcp/agent-variants/variantContext.js +355 -0
- package/dist/mcp/agent-variants/variantContext.js.map +1 -0
- 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 +41 -19
- 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.map +1 -1
- package/dist/routes/agentVariants.js +6 -4
- package/dist/routes/agentVariants.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 +9 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +13 -5
- package/dist/server.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/BrowserAgentClient.d.ts +54 -0
- package/dist/services/BrowserAgentClient.d.ts.map +1 -0
- package/dist/services/BrowserAgentClient.js +126 -0
- package/dist/services/BrowserAgentClient.js.map +1 -0
- 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 -0
- package/dist/services/InlineVariantGenerationService.d.ts.map +1 -1
- package/dist/services/InlineVariantGenerationService.js +70 -3
- package/dist/services/InlineVariantGenerationService.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/VariantRunService.d.ts +1 -0
- package/dist/services/VariantRunService.d.ts.map +1 -1
- package/dist/services/VariantRunService.js +1 -0
- package/dist/services/VariantRunService.js.map +1 -1
- package/dist/services/VariantsRuntime.d.ts.map +1 -1
- package/dist/services/VariantsRuntime.js +1 -0
- package/dist/services/VariantsRuntime.js.map +1 -1
- package/dist/services/WorktreeManager.d.ts +1 -8
- package/dist/services/WorktreeManager.d.ts.map +1 -1
- package/dist/services/WorktreeManager.js +1 -28
- package/dist/services/WorktreeManager.js.map +1 -1
- package/dist/services/createAgentVariantsOrchestrator.d.ts.map +1 -1
- package/dist/services/createAgentVariantsOrchestrator.js +7 -0
- package/dist/services/createAgentVariantsOrchestrator.js.map +1 -1
- package/dist/utils/skills/describe-motion-protocol.d.ts +2 -3
- package/dist/utils/skills/describe-motion-protocol.d.ts.map +1 -1
- package/dist/utils/skills/describe-motion-protocol.js +50 -35
- package/dist/utils/skills/describe-motion-protocol.js.map +1 -1
- package/dist/utils/skills/shared-variants-protocol.d.ts +1 -1
- package/dist/utils/skills/shared-variants-protocol.d.ts.map +1 -1
- package/dist/utils/skills/shared-variants-protocol.js +21 -15
- 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 +2 -1
- package/src/ui/dist/assets/{main-WqlDU4Ou.js → main-Cw6Pd8ye.js} +204 -204
- package/src/ui/dist/assets/main-DkCj7b2K.css +1 -0
- package/src/ui/dist/index.html +2 -2
- package/dist/mcp/agent-variants/designContextStore.d.ts +0 -160
- package/dist/mcp/agent-variants/designContextStore.d.ts.map +0 -1
- package/dist/mcp/agent-variants/designContextStore.js +0 -295
- package/dist/mcp/agent-variants/designContextStore.js.map +0 -1
- package/dist/mcp/agent-variants/inspirationDesignContext.d.ts +0 -440
- package/dist/mcp/agent-variants/inspirationDesignContext.d.ts.map +0 -1
- package/dist/mcp/agent-variants/inspirationDesignContext.js +0 -2467
- package/dist/mcp/agent-variants/inspirationDesignContext.js.map +0 -1
- package/src/ui/dist/assets/main-auZA25j4.css +0 -1
|
@@ -0,0 +1,355 @@
|
|
|
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.writeVariantContextBundle = exports.createVariantContextBundle = void 0;
|
|
7
|
+
const crypto_1 = __importDefault(require("crypto"));
|
|
8
|
+
const fs_1 = __importDefault(require("fs"));
|
|
9
|
+
const os_1 = __importDefault(require("os"));
|
|
10
|
+
const path_1 = __importDefault(require("path"));
|
|
11
|
+
const errors_1 = require("./errors");
|
|
12
|
+
const sourceContext_1 = require("./sourceContext");
|
|
13
|
+
const USER_CONTEXT_DIRECTORY = 'user';
|
|
14
|
+
const METADATA_DIRECTORY = 'metadata';
|
|
15
|
+
const CONTEXT_FILE = 'context.json';
|
|
16
|
+
const PROMPT_FILE = 'prompt.md';
|
|
17
|
+
const MAX_FILE_CONTEXT_BYTES = 50 * 1024 * 1024;
|
|
18
|
+
const UPLOAD_DATA_URL_PATTERN = /^data:([^;,]+);base64,(.*)$/s;
|
|
19
|
+
const BASE64_PAYLOAD_PATTERN = /^[A-Za-z0-9+/=\s]+$/;
|
|
20
|
+
const SUPPORTED_UPLOAD_IMAGE_EXTENSIONS = new Map([
|
|
21
|
+
['image/png', 'png'],
|
|
22
|
+
['image/jpeg', 'jpg'],
|
|
23
|
+
['image/webp', 'webp'],
|
|
24
|
+
['image/gif', 'gif'],
|
|
25
|
+
['image/avif', 'avif'],
|
|
26
|
+
]);
|
|
27
|
+
const ensureDir = (dir) => {
|
|
28
|
+
fs_1.default.mkdirSync(dir, { recursive: true });
|
|
29
|
+
};
|
|
30
|
+
const writeTextFile = (filePath, content) => {
|
|
31
|
+
ensureDir(path_1.default.dirname(filePath));
|
|
32
|
+
fs_1.default.writeFileSync(filePath, content, 'utf8');
|
|
33
|
+
};
|
|
34
|
+
const sha256File = (filePath) => {
|
|
35
|
+
const hash = crypto_1.default.createHash('sha256');
|
|
36
|
+
hash.update(fs_1.default.readFileSync(filePath));
|
|
37
|
+
return hash.digest('hex');
|
|
38
|
+
};
|
|
39
|
+
const safeNamePart = (value, fallback) => {
|
|
40
|
+
const base = (value ?? fallback)
|
|
41
|
+
.replace(/[^a-zA-Z0-9._-]+/g, '-')
|
|
42
|
+
.replace(/^-+|-+$/g, '')
|
|
43
|
+
.slice(0, 80);
|
|
44
|
+
return base || fallback;
|
|
45
|
+
};
|
|
46
|
+
const realpathIfPresent = (candidate) => {
|
|
47
|
+
try {
|
|
48
|
+
return fs_1.default.realpathSync(candidate);
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
const isPathWithinRoot = (absolutePath, root) => {
|
|
55
|
+
const relative = path_1.default.relative(root, absolutePath);
|
|
56
|
+
return (relative === '' ||
|
|
57
|
+
(relative.length > 0 &&
|
|
58
|
+
!relative.startsWith('..') &&
|
|
59
|
+
!path_1.default.isAbsolute(relative)));
|
|
60
|
+
};
|
|
61
|
+
const isBroadAllowedRoot = (root) => {
|
|
62
|
+
const resolvedRoot = path_1.default.resolve(root);
|
|
63
|
+
const filesystemRoot = path_1.default.parse(resolvedRoot).root;
|
|
64
|
+
const homeRoot = realpathIfPresent(os_1.default.homedir()) ?? path_1.default.resolve(os_1.default.homedir());
|
|
65
|
+
const tempRoot = realpathIfPresent(os_1.default.tmpdir()) ?? path_1.default.resolve(os_1.default.tmpdir());
|
|
66
|
+
return (resolvedRoot === filesystemRoot ||
|
|
67
|
+
resolvedRoot === homeRoot ||
|
|
68
|
+
resolvedRoot === tempRoot);
|
|
69
|
+
};
|
|
70
|
+
const resolveAllowedRoots = (roots) => roots
|
|
71
|
+
.map((root) => realpathIfPresent(root))
|
|
72
|
+
.filter((root) => {
|
|
73
|
+
if (!root)
|
|
74
|
+
return false;
|
|
75
|
+
return !isBroadAllowedRoot(root);
|
|
76
|
+
});
|
|
77
|
+
const readStoredUserContext = (contextBundlePath) => {
|
|
78
|
+
const manifestPath = path_1.default.join(contextBundlePath, CONTEXT_FILE);
|
|
79
|
+
try {
|
|
80
|
+
const manifest = JSON.parse(fs_1.default.readFileSync(manifestPath, 'utf8'));
|
|
81
|
+
if (!Array.isArray(manifest.storedUserContext))
|
|
82
|
+
return undefined;
|
|
83
|
+
return manifest.storedUserContext;
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
return undefined;
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
const assertAllowedPath = (sourcePath, allowedRoots) => {
|
|
90
|
+
const resolvedPath = realpathIfPresent(sourcePath);
|
|
91
|
+
if (!resolvedPath) {
|
|
92
|
+
throw new errors_1.AgentVariantsError('SOURCE_CONTEXT_INVALID', `User context path is not readable: ${sourcePath}`);
|
|
93
|
+
}
|
|
94
|
+
const isAllowed = allowedRoots.some((root) => isPathWithinRoot(resolvedPath, root));
|
|
95
|
+
if (!isAllowed) {
|
|
96
|
+
throw new errors_1.AgentVariantsError('SOURCE_CONTEXT_INVALID', `User context path escapes the allowed roots: ${sourcePath}`);
|
|
97
|
+
}
|
|
98
|
+
return resolvedPath;
|
|
99
|
+
};
|
|
100
|
+
const copyFileSource = (args) => {
|
|
101
|
+
const sourcePath = assertAllowedPath(args.input.path, args.allowedRoots);
|
|
102
|
+
const stat = fs_1.default.statSync(sourcePath);
|
|
103
|
+
if (!stat.isFile()) {
|
|
104
|
+
throw new errors_1.AgentVariantsError('SOURCE_CONTEXT_INVALID', `User context file path is not a regular file: ${args.input.path}`);
|
|
105
|
+
}
|
|
106
|
+
if (stat.size > MAX_FILE_CONTEXT_BYTES) {
|
|
107
|
+
throw new errors_1.AgentVariantsError('SOURCE_CONTEXT_TOO_LARGE', `User context file exceeds size limit (${stat.size} > ${MAX_FILE_CONTEXT_BYTES})`);
|
|
108
|
+
}
|
|
109
|
+
const originalFilename = path_1.default.basename(sourcePath);
|
|
110
|
+
const filename = `${args.id}-${safeNamePart(originalFilename, 'file')}`;
|
|
111
|
+
const destination = path_1.default.join(args.userDir, filename);
|
|
112
|
+
fs_1.default.copyFileSync(sourcePath, destination);
|
|
113
|
+
return {
|
|
114
|
+
source: {
|
|
115
|
+
id: args.id,
|
|
116
|
+
transport: 'file',
|
|
117
|
+
path: destination,
|
|
118
|
+
...(args.input.mimeType ? { mimeType: args.input.mimeType } : {}),
|
|
119
|
+
originalFilename,
|
|
120
|
+
...(args.input.label ? { label: args.input.label } : {}),
|
|
121
|
+
...(args.input.userIntent ? { userIntent: args.input.userIntent } : {}),
|
|
122
|
+
},
|
|
123
|
+
storage: {
|
|
124
|
+
sizeBytes: stat.size,
|
|
125
|
+
sha256: sha256File(destination),
|
|
126
|
+
originalFilename,
|
|
127
|
+
},
|
|
128
|
+
};
|
|
129
|
+
};
|
|
130
|
+
const decodeUploadDataUrl = (dataUrl) => {
|
|
131
|
+
const match = dataUrl.match(UPLOAD_DATA_URL_PATTERN);
|
|
132
|
+
if (!match) {
|
|
133
|
+
throw new errors_1.AgentVariantsError('SOURCE_CONTEXT_INVALID', 'Uploaded user context must be a base64 data URL.');
|
|
134
|
+
}
|
|
135
|
+
const mimeType = match[1].toLowerCase().trim();
|
|
136
|
+
const extension = SUPPORTED_UPLOAD_IMAGE_EXTENSIONS.get(mimeType);
|
|
137
|
+
if (!extension) {
|
|
138
|
+
throw new errors_1.AgentVariantsError('SOURCE_CONTEXT_INVALID', `Unsupported uploaded user context MIME type: ${mimeType}`);
|
|
139
|
+
}
|
|
140
|
+
const base64Data = match[2].replace(/\s+/g, '');
|
|
141
|
+
if (!base64Data || !BASE64_PAYLOAD_PATTERN.test(base64Data)) {
|
|
142
|
+
throw new errors_1.AgentVariantsError('SOURCE_CONTEXT_INVALID', 'Uploaded user context contains invalid base64 data.');
|
|
143
|
+
}
|
|
144
|
+
const buffer = Buffer.from(base64Data, 'base64');
|
|
145
|
+
if (buffer.length === 0) {
|
|
146
|
+
throw new errors_1.AgentVariantsError('SOURCE_CONTEXT_INVALID', 'Uploaded user context is empty.');
|
|
147
|
+
}
|
|
148
|
+
if (buffer.length > MAX_FILE_CONTEXT_BYTES) {
|
|
149
|
+
throw new errors_1.AgentVariantsError('SOURCE_CONTEXT_TOO_LARGE', `Uploaded user context exceeds size limit (${buffer.length} > ${MAX_FILE_CONTEXT_BYTES})`);
|
|
150
|
+
}
|
|
151
|
+
return { buffer, mimeType, extension };
|
|
152
|
+
};
|
|
153
|
+
const copyUploadSource = (args) => {
|
|
154
|
+
const upload = decodeUploadDataUrl(args.input.dataUrl);
|
|
155
|
+
const originalFilename = args.input.filename;
|
|
156
|
+
const nameSource = originalFilename
|
|
157
|
+
? path_1.default.parse(originalFilename).name
|
|
158
|
+
: args.input.label;
|
|
159
|
+
const filename = `${args.id}-${safeNamePart(nameSource, 'upload')}.${upload.extension}`;
|
|
160
|
+
const destination = path_1.default.join(args.userDir, filename);
|
|
161
|
+
ensureDir(path_1.default.dirname(destination));
|
|
162
|
+
fs_1.default.writeFileSync(destination, upload.buffer);
|
|
163
|
+
return {
|
|
164
|
+
source: {
|
|
165
|
+
id: args.id,
|
|
166
|
+
transport: 'file',
|
|
167
|
+
path: destination,
|
|
168
|
+
mimeType: upload.mimeType,
|
|
169
|
+
...(originalFilename ? { originalFilename } : {}),
|
|
170
|
+
...(args.input.label ? { label: args.input.label } : {}),
|
|
171
|
+
...(args.input.userIntent ? { userIntent: args.input.userIntent } : {}),
|
|
172
|
+
},
|
|
173
|
+
storage: {
|
|
174
|
+
sizeBytes: upload.buffer.length,
|
|
175
|
+
sha256: sha256File(destination),
|
|
176
|
+
...(originalFilename ? { originalFilename } : {}),
|
|
177
|
+
},
|
|
178
|
+
};
|
|
179
|
+
};
|
|
180
|
+
const createTextSource = (args) => {
|
|
181
|
+
const filename = `${args.id}-${safeNamePart(args.label, args.fallbackName)}.md`;
|
|
182
|
+
const textPath = path_1.default.join(args.userDir, filename);
|
|
183
|
+
writeTextFile(textPath, `${args.content.trim()}\n`);
|
|
184
|
+
return {
|
|
185
|
+
source: {
|
|
186
|
+
id: args.id,
|
|
187
|
+
transport: 'text',
|
|
188
|
+
path: textPath,
|
|
189
|
+
...(args.label ? { label: args.label } : {}),
|
|
190
|
+
...(args.userIntent ? { userIntent: args.userIntent } : {}),
|
|
191
|
+
},
|
|
192
|
+
storage: {
|
|
193
|
+
sizeBytes: Buffer.byteLength(args.content, 'utf8'),
|
|
194
|
+
sha256: sha256File(textPath),
|
|
195
|
+
},
|
|
196
|
+
};
|
|
197
|
+
};
|
|
198
|
+
/**
|
|
199
|
+
* Copies optional user-provided URL details onto the canonical source record.
|
|
200
|
+
*/
|
|
201
|
+
const applyUrlSourceDetails = (record, details) => {
|
|
202
|
+
if (record.source.transport !== 'url')
|
|
203
|
+
return;
|
|
204
|
+
if (details.label && !record.source.label) {
|
|
205
|
+
record.source.label = details.label;
|
|
206
|
+
}
|
|
207
|
+
if (details.userIntent && !record.source.userIntent) {
|
|
208
|
+
record.source.userIntent = details.userIntent;
|
|
209
|
+
}
|
|
210
|
+
};
|
|
211
|
+
/**
|
|
212
|
+
* Creates the read-only user context bundle for a variants session.
|
|
213
|
+
*/
|
|
214
|
+
const createVariantContextBundle = (args) => {
|
|
215
|
+
const contextBundlePath = path_1.default.join(args.workspaceRoot, '.rivet', 'variant-context', args.sessionId);
|
|
216
|
+
const userDir = path_1.default.join(contextBundlePath, USER_CONTEXT_DIRECTORY);
|
|
217
|
+
ensureDir(userDir);
|
|
218
|
+
ensureDir(path_1.default.join(contextBundlePath, METADATA_DIRECTORY));
|
|
219
|
+
const allowedRoots = resolveAllowedRoots([...(args.allowedRoots ?? [])]);
|
|
220
|
+
const storedUserContext = [];
|
|
221
|
+
const promptPath = path_1.default.join(userDir, PROMPT_FILE);
|
|
222
|
+
writeTextFile(promptPath, `${args.prompt.trim()}\n`);
|
|
223
|
+
storedUserContext.push({
|
|
224
|
+
source: {
|
|
225
|
+
id: 'uc_prompt_1',
|
|
226
|
+
transport: 'prompt',
|
|
227
|
+
path: promptPath,
|
|
228
|
+
},
|
|
229
|
+
storage: {
|
|
230
|
+
sizeBytes: Buffer.byteLength(args.prompt, 'utf8'),
|
|
231
|
+
sha256: sha256File(promptPath),
|
|
232
|
+
},
|
|
233
|
+
});
|
|
234
|
+
const urlRecordsByUrl = new Map();
|
|
235
|
+
const addUrlSource = (args) => {
|
|
236
|
+
const normalized = (0, sourceContext_1.normalizeUrl)(args.url);
|
|
237
|
+
if (!normalized) {
|
|
238
|
+
if (args.isRequired) {
|
|
239
|
+
throw new errors_1.AgentVariantsError('SOURCE_CONTEXT_INVALID', `Invalid user context URL: ${args.url}`);
|
|
240
|
+
}
|
|
241
|
+
return false;
|
|
242
|
+
}
|
|
243
|
+
const existingRecord = urlRecordsByUrl.get(normalized);
|
|
244
|
+
if (existingRecord) {
|
|
245
|
+
applyUrlSourceDetails(existingRecord, {
|
|
246
|
+
label: args.label,
|
|
247
|
+
userIntent: args.userIntent,
|
|
248
|
+
});
|
|
249
|
+
return true;
|
|
250
|
+
}
|
|
251
|
+
const record = {
|
|
252
|
+
source: {
|
|
253
|
+
id: args.id,
|
|
254
|
+
transport: 'url',
|
|
255
|
+
url: normalized,
|
|
256
|
+
...(args.label ? { label: args.label } : {}),
|
|
257
|
+
...(args.userIntent ? { userIntent: args.userIntent } : {}),
|
|
258
|
+
},
|
|
259
|
+
};
|
|
260
|
+
urlRecordsByUrl.set(normalized, record);
|
|
261
|
+
storedUserContext.push(record);
|
|
262
|
+
return true;
|
|
263
|
+
};
|
|
264
|
+
let urlIndex = 0;
|
|
265
|
+
for (const url of args.sourceUrls ?? []) {
|
|
266
|
+
const isUrlSourceAccepted = addUrlSource({
|
|
267
|
+
id: `uc_url_${urlIndex + 1}`,
|
|
268
|
+
url,
|
|
269
|
+
});
|
|
270
|
+
if (isUrlSourceAccepted) {
|
|
271
|
+
urlIndex += 1;
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
let extraIndex = 0;
|
|
275
|
+
for (const input of args.userContextInputs ?? []) {
|
|
276
|
+
extraIndex += 1;
|
|
277
|
+
if (input.transport === 'url') {
|
|
278
|
+
addUrlSource({
|
|
279
|
+
id: `uc_input_${extraIndex}`,
|
|
280
|
+
url: input.url,
|
|
281
|
+
label: input.label,
|
|
282
|
+
userIntent: input.userIntent,
|
|
283
|
+
isRequired: true,
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
else if (input.transport === 'text') {
|
|
287
|
+
storedUserContext.push(createTextSource({
|
|
288
|
+
id: `uc_input_${extraIndex}`,
|
|
289
|
+
userDir,
|
|
290
|
+
label: input.label,
|
|
291
|
+
userIntent: input.userIntent,
|
|
292
|
+
content: input.content,
|
|
293
|
+
fallbackName: `input-${extraIndex}`,
|
|
294
|
+
}));
|
|
295
|
+
}
|
|
296
|
+
else if (input.transport === 'file_path') {
|
|
297
|
+
storedUserContext.push(copyFileSource({
|
|
298
|
+
input,
|
|
299
|
+
id: `uc_input_${extraIndex}`,
|
|
300
|
+
userDir,
|
|
301
|
+
allowedRoots,
|
|
302
|
+
}));
|
|
303
|
+
}
|
|
304
|
+
else if (input.transport === 'upload') {
|
|
305
|
+
storedUserContext.push(copyUploadSource({
|
|
306
|
+
input,
|
|
307
|
+
id: `uc_input_${extraIndex}`,
|
|
308
|
+
userDir,
|
|
309
|
+
}));
|
|
310
|
+
}
|
|
311
|
+
else {
|
|
312
|
+
const sourcePath = assertAllowedPath(input.path, allowedRoots);
|
|
313
|
+
if (!fs_1.default.statSync(sourcePath).isDirectory()) {
|
|
314
|
+
throw new errors_1.AgentVariantsError('SOURCE_CONTEXT_INVALID', `User context directory path is not a directory: ${input.path}`);
|
|
315
|
+
}
|
|
316
|
+
storedUserContext.push({
|
|
317
|
+
source: {
|
|
318
|
+
id: `uc_input_${extraIndex}`,
|
|
319
|
+
transport: 'directory',
|
|
320
|
+
path: sourcePath,
|
|
321
|
+
...(input.label ? { label: input.label } : {}),
|
|
322
|
+
...(input.userIntent ? { userIntent: input.userIntent } : {}),
|
|
323
|
+
},
|
|
324
|
+
});
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
const bundle = {
|
|
328
|
+
version: 1,
|
|
329
|
+
sessionId: args.sessionId,
|
|
330
|
+
contextBundlePath,
|
|
331
|
+
userContext: storedUserContext.map((entry) => entry.source),
|
|
332
|
+
rivetActions: [],
|
|
333
|
+
rivetMetadata: [],
|
|
334
|
+
};
|
|
335
|
+
(0, exports.writeVariantContextBundle)(bundle, storedUserContext);
|
|
336
|
+
return bundle;
|
|
337
|
+
};
|
|
338
|
+
exports.createVariantContextBundle = createVariantContextBundle;
|
|
339
|
+
/**
|
|
340
|
+
* Persists the durable context bundle manifest after planning metadata changes.
|
|
341
|
+
*/
|
|
342
|
+
const writeVariantContextBundle = (bundle, storedUserContext) => {
|
|
343
|
+
ensureDir(bundle.contextBundlePath);
|
|
344
|
+
const manifest = {
|
|
345
|
+
...bundle,
|
|
346
|
+
storedUserContext: storedUserContext ??
|
|
347
|
+
readStoredUserContext(bundle.contextBundlePath) ??
|
|
348
|
+
bundle.userContext.map((source) => ({
|
|
349
|
+
source,
|
|
350
|
+
})),
|
|
351
|
+
};
|
|
352
|
+
fs_1.default.writeFileSync(path_1.default.join(bundle.contextBundlePath, CONTEXT_FILE), `${JSON.stringify(manifest, null, 2)}\n`, 'utf8');
|
|
353
|
+
};
|
|
354
|
+
exports.writeVariantContextBundle = writeVariantContextBundle;
|
|
355
|
+
//# sourceMappingURL=variantContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"variantContext.js","sourceRoot":"","sources":["../../../src/mcp/agent-variants/variantContext.ts"],"names":[],"mappings":";;;;;;AAAA,oDAA4B;AAC5B,4CAAoB;AACpB,4CAAoB;AACpB,gDAAwB;AAMxB,qCAA8C;AAC9C,mDAA+C;AAE/C,MAAM,sBAAsB,GAAG,MAAM,CAAC;AACtC,MAAM,kBAAkB,GAAG,UAAU,CAAC;AACtC,MAAM,YAAY,GAAG,cAAc,CAAC;AACpC,MAAM,WAAW,GAAG,WAAW,CAAC;AAChC,MAAM,sBAAsB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAChD,MAAM,uBAAuB,GAAG,8BAA8B,CAAC;AAC/D,MAAM,sBAAsB,GAAG,qBAAqB,CAAC;AACrD,MAAM,iCAAiC,GAAG,IAAI,GAAG,CAAC;IAChD,CAAC,WAAW,EAAE,KAAK,CAAC;IACpB,CAAC,YAAY,EAAE,KAAK,CAAC;IACrB,CAAC,YAAY,EAAE,MAAM,CAAC;IACtB,CAAC,WAAW,EAAE,KAAK,CAAC;IACpB,CAAC,YAAY,EAAE,MAAM,CAAC;CACvB,CAAC,CAAC;AAeH,MAAM,SAAS,GAAG,CAAC,GAAW,EAAQ,EAAE;IACtC,YAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACzC,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,QAAgB,EAAE,OAAe,EAAQ,EAAE;IAChE,SAAS,CAAC,cAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAClC,YAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAC9C,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,QAAgB,EAAU,EAAE;IAC9C,MAAM,IAAI,GAAG,gBAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACzC,IAAI,CAAC,MAAM,CAAC,YAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;IACvC,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,KAAyB,EAAE,QAAgB,EAAU,EAAE;IAC3E,MAAM,IAAI,GAAG,CAAC,KAAK,IAAI,QAAQ,CAAC;SAC7B,OAAO,CAAC,mBAAmB,EAAE,GAAG,CAAC;SACjC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAChB,OAAO,IAAI,IAAI,QAAQ,CAAC;AAC1B,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,SAAiB,EAAiB,EAAE;IAC7D,IAAI,CAAC;QACH,OAAO,YAAE,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,YAAoB,EAAE,IAAY,EAAW,EAAE;IACvE,MAAM,QAAQ,GAAG,cAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IACnD,OAAO,CACL,QAAQ,KAAK,EAAE;QACf,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;YAClB,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC;YAC1B,CAAC,cAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAC9B,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,IAAY,EAAW,EAAE;IACnD,MAAM,YAAY,GAAG,cAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,cAAc,GAAG,cAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC;IACrD,MAAM,QAAQ,GACZ,iBAAiB,CAAC,YAAE,CAAC,OAAO,EAAE,CAAC,IAAI,cAAI,CAAC,OAAO,CAAC,YAAE,CAAC,OAAO,EAAE,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAG,iBAAiB,CAAC,YAAE,CAAC,MAAM,EAAE,CAAC,IAAI,cAAI,CAAC,OAAO,CAAC,YAAE,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7E,OAAO,CACL,YAAY,KAAK,cAAc;QAC/B,YAAY,KAAK,QAAQ;QACzB,YAAY,KAAK,QAAQ,CAC1B,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,KAAe,EAAY,EAAE,CACxD,KAAK;KACF,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;KACtC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE;IAC/B,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IACxB,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;AACnC,CAAC,CAAC,CAAC;AAEP,MAAM,qBAAqB,GAAG,CAC5B,iBAAyB,EACoB,EAAE;IAC/C,MAAM,YAAY,GAAG,cAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAAC;IAChE,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAE,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAEhE,CAAC;QACF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YAAE,OAAO,SAAS,CAAC;QACjE,OAAO,QAAQ,CAAC,iBAAiB,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CACxB,UAAkB,EAClB,YAAsB,EACd,EAAE;IACV,MAAM,YAAY,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;IACnD,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,2BAAkB,CAC1B,wBAAwB,EACxB,sCAAsC,UAAU,EAAE,CACnD,CAAC;IACJ,CAAC;IACD,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAC3C,gBAAgB,CAAC,YAAY,EAAE,IAAI,CAAC,CACrC,CAAC;IACF,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,2BAAkB,CAC1B,wBAAwB,EACxB,gDAAgD,UAAU,EAAE,CAC7D,CAAC;IACJ,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,IAKvB,EAAiC,EAAE;IAClC,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;IACzE,MAAM,IAAI,GAAG,YAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IACrC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;QACnB,MAAM,IAAI,2BAAkB,CAC1B,wBAAwB,EACxB,iDAAiD,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CACnE,CAAC;IACJ,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,GAAG,sBAAsB,EAAE,CAAC;QACvC,MAAM,IAAI,2BAAkB,CAC1B,0BAA0B,EAC1B,yCAAyC,IAAI,CAAC,IAAI,MAAM,sBAAsB,GAAG,CAClF,CAAC;IACJ,CAAC;IAED,MAAM,gBAAgB,GAAG,cAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IACnD,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,YAAY,CAAC,gBAAgB,EAAE,MAAM,CAAC,EAAE,CAAC;IACxE,MAAM,WAAW,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACtD,YAAE,CAAC,YAAY,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IAEzC,OAAO;QACL,MAAM,EAAE;YACN,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,SAAS,EAAE,MAAM;YACjB,IAAI,EAAE,WAAW;YACjB,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjE,gBAAgB;YAChB,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACxD,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACxE;QACD,OAAO,EAAE;YACP,SAAS,EAAE,IAAI,CAAC,IAAI;YACpB,MAAM,EAAE,UAAU,CAAC,WAAW,CAAC;YAC/B,gBAAgB;SACjB;KACF,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,OAAe,EAI1C,EAAE;IACF,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;IACrD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,2BAAkB,CAC1B,wBAAwB,EACxB,kDAAkD,CACnD,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;IAC/C,MAAM,SAAS,GAAG,iCAAiC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAClE,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,2BAAkB,CAC1B,wBAAwB,EACxB,gDAAgD,QAAQ,EAAE,CAC3D,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAChD,IAAI,CAAC,UAAU,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5D,MAAM,IAAI,2BAAkB,CAC1B,wBAAwB,EACxB,qDAAqD,CACtD,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IACjD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,2BAAkB,CAC1B,wBAAwB,EACxB,iCAAiC,CAClC,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,GAAG,sBAAsB,EAAE,CAAC;QAC3C,MAAM,IAAI,2BAAkB,CAC1B,0BAA0B,EAC1B,6CAA6C,MAAM,CAAC,MAAM,MAAM,sBAAsB,GAAG,CAC1F,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;AACzC,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,IAIzB,EAAiC,EAAE;IAClC,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACvD,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;IAC7C,MAAM,UAAU,GAAG,gBAAgB;QACjC,CAAC,CAAC,cAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,IAAI;QACnC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;IACrB,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,YAAY,CAAC,UAAU,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;IACxF,MAAM,WAAW,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACtD,SAAS,CAAC,cAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;IACrC,YAAE,CAAC,aAAa,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAE7C,OAAO;QACL,MAAM,EAAE;YACN,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,SAAS,EAAE,MAAM;YACjB,IAAI,EAAE,WAAW;YACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjD,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACxD,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACxE;QACD,OAAO,EAAE;YACP,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM;YAC/B,MAAM,EAAE,UAAU,CAAC,WAAW,CAAC;YAC/B,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAClD;KACF,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,IAOzB,EAAiC,EAAE;IAClC,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;IAChF,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACnD,aAAa,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACpD,OAAO;QACL,MAAM,EAAE;YACN,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,SAAS,EAAE,MAAM;YACjB,IAAI,EAAE,QAAQ;YACd,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5C,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC5D;QACD,OAAO,EAAE;YACP,SAAS,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC;YAClD,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC;SAC7B;KACF,CAAC;AACJ,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,qBAAqB,GAAG,CAC5B,MAAqC,EACrC,OAAgD,EAC1C,EAAE;IACR,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,KAAK,KAAK;QAAE,OAAO;IAC9C,IAAI,OAAO,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAC1C,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IACtC,CAAC;IACD,IAAI,OAAO,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACpD,MAAM,CAAC,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAChD,CAAC;AACH,CAAC,CAAC;AAEF;;GAEG;AACI,MAAM,0BAA0B,GAAG,CACxC,IAAoC,EACd,EAAE;IACxB,MAAM,iBAAiB,GAAG,cAAI,CAAC,IAAI,CACjC,IAAI,CAAC,aAAa,EAClB,QAAQ,EACR,iBAAiB,EACjB,IAAI,CAAC,SAAS,CACf,CAAC;IACF,MAAM,OAAO,GAAG,cAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,sBAAsB,CAAC,CAAC;IACrE,SAAS,CAAC,OAAO,CAAC,CAAC;IACnB,SAAS,CAAC,cAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAE5D,MAAM,YAAY,GAAG,mBAAmB,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACzE,MAAM,iBAAiB,GAAoC,EAAE,CAAC;IAC9D,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACnD,aAAa,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACrD,iBAAiB,CAAC,IAAI,CAAC;QACrB,MAAM,EAAE;YACN,EAAE,EAAE,aAAa;YACjB,SAAS,EAAE,QAAQ;YACnB,IAAI,EAAE,UAAU;SACjB;QACD,OAAO,EAAE;YACP,SAAS,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;YACjD,MAAM,EAAE,UAAU,CAAC,UAAU,CAAC;SAC/B;KACF,CAAC,CAAC;IAEH,MAAM,eAAe,GAAG,IAAI,GAAG,EAAyC,CAAC;IACzE,MAAM,YAAY,GAAG,CAAC,IAMrB,EAAW,EAAE;QACZ,MAAM,UAAU,GAAG,IAAA,4BAAY,EAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1C,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACpB,MAAM,IAAI,2BAAkB,CAC1B,wBAAwB,EACxB,6BAA6B,IAAI,CAAC,GAAG,EAAE,CACxC,CAAC;YACJ,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,cAAc,GAAG,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACvD,IAAI,cAAc,EAAE,CAAC;YACnB,qBAAqB,CAAC,cAAc,EAAE;gBACpC,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,UAAU,EAAE,IAAI,CAAC,UAAU;aAC5B,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,MAAM,GAAkC;YAC5C,MAAM,EAAE;gBACN,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,SAAS,EAAE,KAAK;gBAChB,GAAG,EAAE,UAAU;gBACf,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC5C,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC5D;SACF,CAAC;QACF,eAAe,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACxC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,UAAU,IAAI,EAAE,EAAE,CAAC;QACxC,MAAM,mBAAmB,GAAG,YAAY,CAAC;YACvC,EAAE,EAAE,UAAU,QAAQ,GAAG,CAAC,EAAE;YAC5B,GAAG;SACJ,CAAC,CAAC;QACH,IAAI,mBAAmB,EAAE,CAAC;YACxB,QAAQ,IAAI,CAAC,CAAC;QAChB,CAAC;IACH,CAAC;IAED,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,iBAAiB,IAAI,EAAE,EAAE,CAAC;QACjD,UAAU,IAAI,CAAC,CAAC;QAChB,IAAI,KAAK,CAAC,SAAS,KAAK,KAAK,EAAE,CAAC;YAC9B,YAAY,CAAC;gBACX,EAAE,EAAE,YAAY,UAAU,EAAE;gBAC5B,GAAG,EAAE,KAAK,CAAC,GAAG;gBACd,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,UAAU,EAAE,IAAI;aACjB,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,KAAK,CAAC,SAAS,KAAK,MAAM,EAAE,CAAC;YACtC,iBAAiB,CAAC,IAAI,CACpB,gBAAgB,CAAC;gBACf,EAAE,EAAE,YAAY,UAAU,EAAE;gBAC5B,OAAO;gBACP,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,YAAY,EAAE,SAAS,UAAU,EAAE;aACpC,CAAC,CACH,CAAC;QACJ,CAAC;aAAM,IAAI,KAAK,CAAC,SAAS,KAAK,WAAW,EAAE,CAAC;YAC3C,iBAAiB,CAAC,IAAI,CACpB,cAAc,CAAC;gBACb,KAAK;gBACL,EAAE,EAAE,YAAY,UAAU,EAAE;gBAC5B,OAAO;gBACP,YAAY;aACb,CAAC,CACH,CAAC;QACJ,CAAC;aAAM,IAAI,KAAK,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YACxC,iBAAiB,CAAC,IAAI,CACpB,gBAAgB,CAAC;gBACf,KAAK;gBACL,EAAE,EAAE,YAAY,UAAU,EAAE;gBAC5B,OAAO;aACR,CAAC,CACH,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,UAAU,GAAG,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;YAC/D,IAAI,CAAC,YAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;gBAC3C,MAAM,IAAI,2BAAkB,CAC1B,wBAAwB,EACxB,mDAAmD,KAAK,CAAC,IAAI,EAAE,CAChE,CAAC;YACJ,CAAC;YACD,iBAAiB,CAAC,IAAI,CAAC;gBACrB,MAAM,EAAE;oBACN,EAAE,EAAE,YAAY,UAAU,EAAE;oBAC5B,SAAS,EAAE,WAAW;oBACtB,IAAI,EAAE,UAAU;oBAChB,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC9C,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC9D;aACF,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAyB;QACnC,OAAO,EAAE,CAAC;QACV,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,iBAAiB;QACjB,WAAW,EAAE,iBAAiB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC;QAC3D,YAAY,EAAE,EAAE;QAChB,aAAa,EAAE,EAAE;KAClB,CAAC;IACF,IAAA,iCAAyB,EAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IACrD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAvJW,QAAA,0BAA0B,8BAuJrC;AAEF;;GAEG;AACI,MAAM,yBAAyB,GAAG,CACvC,MAA4B,EAC5B,iBAAmD,EAC7C,EAAE;IACR,SAAS,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;IACpC,MAAM,QAAQ,GAA2B;QACvC,GAAG,MAAM;QACT,iBAAiB,EACf,iBAAiB;YACjB,qBAAqB,CAAC,MAAM,CAAC,iBAAiB,CAAC;YAC/C,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBAClC,MAAM;aACP,CAAC,CAAC;KACN,CAAC;IACF,YAAE,CAAC,aAAa,CACd,cAAI,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,YAAY,CAAC,EACjD,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EACxC,MAAM,CACP,CAAC;AACJ,CAAC,CAAC;AAnBW,QAAA,yBAAyB,6BAmBpC"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import type { Response } from 'express';
|
|
2
|
+
import type { OAuthServerProvider, AuthorizationParams } from '@modelcontextprotocol/sdk/server/auth/provider.js';
|
|
3
|
+
import type { OAuthRegisteredClientsStore } from '@modelcontextprotocol/sdk/server/auth/clients.js';
|
|
4
|
+
import type { OAuthClientInformationFull, OAuthTokens } from '@modelcontextprotocol/sdk/shared/auth.js';
|
|
5
|
+
import type { AuthInfo } from '@modelcontextprotocol/sdk/server/auth/types.js';
|
|
6
|
+
/** Rivet credentials issued by the proxy after a completed browser login. */
|
|
7
|
+
export type PersistedRivetTokens = {
|
|
8
|
+
token: string;
|
|
9
|
+
refreshToken?: string;
|
|
10
|
+
user?: {
|
|
11
|
+
id: string;
|
|
12
|
+
email: string;
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
export type RivetOAuthProviderOptions = {
|
|
16
|
+
/** Base URL of the Rivet proxy (auth backend), e.g. https://rivet-proxy.onrender.com */
|
|
17
|
+
proxyUrl: string;
|
|
18
|
+
/**
|
|
19
|
+
* Public URL of the local OAuth browser callback page. Must be a bare
|
|
20
|
+
* localhost origin (no path) — the proxy rejects custom redirect paths.
|
|
21
|
+
*/
|
|
22
|
+
callbackUrl: string;
|
|
23
|
+
/** The MCP client (`--editor`), recorded with the login for analytics. */
|
|
24
|
+
mcpEditor?: string;
|
|
25
|
+
/** Persists tokens locally after login (e.g. ConfigManager.setAuth). */
|
|
26
|
+
persistTokens?: (tokens: PersistedRivetTokens) => void;
|
|
27
|
+
/** Confirms a refresh token is still accepted by durable local auth state. */
|
|
28
|
+
isRefreshTokenCurrent?: (refreshToken: string) => boolean;
|
|
29
|
+
fetchImpl?: typeof fetch;
|
|
30
|
+
/** Test override for the proxy token polling interval. */
|
|
31
|
+
pollIntervalMs?: number;
|
|
32
|
+
};
|
|
33
|
+
/** In-memory dynamic client registration store (clients are ephemeral). */
|
|
34
|
+
declare class InMemoryClientsStore implements OAuthRegisteredClientsStore {
|
|
35
|
+
private clients;
|
|
36
|
+
getClient(clientId: string): OAuthClientInformationFull | undefined;
|
|
37
|
+
registerClient(client: Omit<OAuthClientInformationFull, 'client_id' | 'client_id_issued_at'> & Partial<Pick<OAuthClientInformationFull, 'client_id' | 'client_id_issued_at'>>): OAuthClientInformationFull;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* OAuth authorization server provider that bridges the MCP OAuth spec
|
|
41
|
+
* (authorization code + PKCE, dynamic client registration) onto the existing
|
|
42
|
+
* Rivet proxy Google login flow:
|
|
43
|
+
*
|
|
44
|
+
* 1. `authorize` starts a proxy Google login with this server's local
|
|
45
|
+
* callback page as the redirect origin and sends the browser to Google.
|
|
46
|
+
* 2. The browser returns to the local callback page, which forwards the
|
|
47
|
+
* Supabase hash tokens to `completeBrowserCallback`. That completes the
|
|
48
|
+
* proxy login, obtains the Rivet access token, and mints a single-use
|
|
49
|
+
* authorization code bound to the client's PKCE challenge.
|
|
50
|
+
* 3. `exchangeAuthorizationCode` returns the Rivet access token as the OAuth
|
|
51
|
+
* access token; `verifyAccessToken` validates bearer tokens against the
|
|
52
|
+
* proxy profile endpoint.
|
|
53
|
+
*/
|
|
54
|
+
export declare class RivetOAuthServerProvider implements OAuthServerProvider {
|
|
55
|
+
readonly clientsStore: InMemoryClientsStore;
|
|
56
|
+
private readonly proxyUrl;
|
|
57
|
+
private readonly callbackUrl;
|
|
58
|
+
private readonly mcpEditor?;
|
|
59
|
+
private readonly persistTokens?;
|
|
60
|
+
private readonly isRefreshTokenCurrent?;
|
|
61
|
+
private readonly fetchFn;
|
|
62
|
+
private readonly pollIntervalMs;
|
|
63
|
+
private readonly pendingAuthorizations;
|
|
64
|
+
private readonly authorizationCodes;
|
|
65
|
+
private readonly issuedBearerTokens;
|
|
66
|
+
private readonly verifiedTokens;
|
|
67
|
+
private readonly revokedAccessTokens;
|
|
68
|
+
private readonly revokedRefreshTokens;
|
|
69
|
+
private readonly activeRefreshTokens;
|
|
70
|
+
constructor(options: RivetOAuthProviderOptions);
|
|
71
|
+
authorize(client: OAuthClientInformationFull, params: AuthorizationParams, res: Response): Promise<void>;
|
|
72
|
+
/**
|
|
73
|
+
* Completes a browser login forwarded by the local OAuth callback page:
|
|
74
|
+
* finishes the proxy login session, obtains Rivet credentials, mints a
|
|
75
|
+
* single-use authorization code, and returns the MCP client redirect URL.
|
|
76
|
+
*/
|
|
77
|
+
completeBrowserCallback(input: {
|
|
78
|
+
sessionId?: string;
|
|
79
|
+
accessToken?: string;
|
|
80
|
+
refreshToken?: string;
|
|
81
|
+
}): Promise<{
|
|
82
|
+
redirectUrl: string;
|
|
83
|
+
}>;
|
|
84
|
+
challengeForAuthorizationCode(client: OAuthClientInformationFull, authorizationCode: string): Promise<string>;
|
|
85
|
+
exchangeAuthorizationCode(client: OAuthClientInformationFull, authorizationCode: string, _codeVerifier?: string, redirectUri?: string): Promise<OAuthTokens>;
|
|
86
|
+
exchangeRefreshToken(_client: OAuthClientInformationFull, refreshToken: string): Promise<OAuthTokens>;
|
|
87
|
+
verifyAccessToken(token: string): Promise<AuthInfo>;
|
|
88
|
+
/**
|
|
89
|
+
* Invalidates a bearer token issued by this OAuth provider and its paired
|
|
90
|
+
* refresh token, if the provider knows one.
|
|
91
|
+
*/
|
|
92
|
+
revokeAccessToken(token: string): void;
|
|
93
|
+
private rememberIssuedBearerToken;
|
|
94
|
+
private getValidCodeEntry;
|
|
95
|
+
private toOAuthTokens;
|
|
96
|
+
private pollForRivetTokens;
|
|
97
|
+
private prunePendingAuthorizations;
|
|
98
|
+
private pruneAuthorizationCodes;
|
|
99
|
+
private pruneVerifiedTokens;
|
|
100
|
+
private pruneIssuedBearerTokens;
|
|
101
|
+
}
|
|
102
|
+
export {};
|
|
103
|
+
//# sourceMappingURL=httpOAuthProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"httpOAuthProvider.d.ts","sourceRoot":"","sources":["../../../src/mcp/auth/httpOAuthProvider.ts"],"names":[],"mappings":"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"}
|