rivet-design 0.10.6 → 0.10.7
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/mcp/agent-variants/SessionStore.d.ts +11 -0
- package/dist/mcp/agent-variants/SessionStore.d.ts.map +1 -1
- package/dist/mcp/agent-variants/SessionStore.js +44 -14
- package/dist/mcp/agent-variants/SessionStore.js.map +1 -1
- package/dist/mcp/agent-variants/WorktreeOrchestrator.d.ts +44 -3
- package/dist/mcp/agent-variants/WorktreeOrchestrator.d.ts.map +1 -1
- package/dist/mcp/agent-variants/WorktreeOrchestrator.js +297 -63
- package/dist/mcp/agent-variants/WorktreeOrchestrator.js.map +1 -1
- package/dist/mcp/agent-variants/WorktreeOrchestrator.testHelpers.d.ts +4 -0
- package/dist/mcp/agent-variants/WorktreeOrchestrator.testHelpers.d.ts.map +1 -1
- package/dist/mcp/agent-variants/WorktreeOrchestrator.testHelpers.js +1 -1
- package/dist/mcp/agent-variants/WorktreeOrchestrator.testHelpers.js.map +1 -1
- package/dist/mcp/agent-variants/contracts.d.ts +28 -0
- package/dist/mcp/agent-variants/contracts.d.ts.map +1 -1
- package/dist/mcp/agent-variants/contracts.js.map +1 -1
- package/dist/mcp/agent-variants/createZeroToOneTool.d.ts +47 -265
- package/dist/mcp/agent-variants/createZeroToOneTool.d.ts.map +1 -1
- package/dist/mcp/agent-variants/createZeroToOneTool.js +147 -207
- package/dist/mcp/agent-variants/createZeroToOneTool.js.map +1 -1
- package/dist/mcp/agent-variants/generatedDestination.d.ts +75 -0
- package/dist/mcp/agent-variants/generatedDestination.d.ts.map +1 -0
- package/dist/mcp/agent-variants/generatedDestination.js +104 -0
- package/dist/mcp/agent-variants/generatedDestination.js.map +1 -0
- package/dist/mcp/agent-variants/index.d.ts +0 -1
- package/dist/mcp/agent-variants/index.d.ts.map +1 -1
- package/dist/mcp/agent-variants/index.js +1 -3
- package/dist/mcp/agent-variants/index.js.map +1 -1
- package/dist/mcp/agent-variants/pinterestSourceContext.d.ts +18 -0
- package/dist/mcp/agent-variants/pinterestSourceContext.d.ts.map +1 -0
- package/dist/mcp/agent-variants/pinterestSourceContext.js +134 -0
- package/dist/mcp/agent-variants/pinterestSourceContext.js.map +1 -0
- package/dist/mcp/agent-variants/runPlan.d.ts +107 -0
- package/dist/mcp/agent-variants/runPlan.d.ts.map +1 -0
- package/dist/mcp/agent-variants/runPlan.js +97 -0
- package/dist/mcp/agent-variants/runPlan.js.map +1 -0
- package/dist/mcp/agent-variants/tools.d.ts +48 -3
- package/dist/mcp/agent-variants/tools.d.ts.map +1 -1
- package/dist/mcp/agent-variants/tools.js +54 -47
- package/dist/mcp/agent-variants/tools.js.map +1 -1
- package/dist/mcp/integrations/tools.d.ts +14 -0
- package/dist/mcp/integrations/tools.d.ts.map +1 -0
- package/dist/mcp/integrations/tools.js +38 -0
- package/dist/mcp/integrations/tools.js.map +1 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +18 -13
- package/dist/mcp/server.js.map +1 -1
- package/dist/routes/agentVariants.d.ts.map +1 -1
- package/dist/routes/agentVariants.js +5 -0
- package/dist/routes/agentVariants.js.map +1 -1
- package/dist/services/IntegrationsClient.d.ts +58 -0
- package/dist/services/IntegrationsClient.d.ts.map +1 -0
- package/dist/services/IntegrationsClient.js +81 -0
- package/dist/services/IntegrationsClient.js.map +1 -0
- package/dist/services/staticStarter.d.ts +1 -1
- package/dist/services/staticStarter.d.ts.map +1 -1
- package/dist/services/staticStarter.js +76 -19
- package/dist/services/staticStarter.js.map +1 -1
- package/dist/utils/skills/describe-motion-protocol.d.ts +1 -1
- package/dist/utils/skills/describe-motion-protocol.d.ts.map +1 -1
- package/dist/utils/skills/describe-motion-protocol.js +11 -11
- package/dist/utils/skills/shared-variants-protocol.d.ts.map +1 -1
- package/dist/utils/skills/shared-variants-protocol.js +6 -4
- package/dist/utils/skills/shared-variants-protocol.js.map +1 -1
- package/package.json +1 -1
- package/src/ui/dist/assets/main-DUIrSkV3.css +1 -0
- package/src/ui/dist/assets/main-DYpxGvCu.js +646 -0
- package/src/ui/dist/index.html +2 -2
- package/src/ui/dist/assets/main-B54sNpwl.css +0 -1
- package/src/ui/dist/assets/main-B9BHMA4s.js +0 -646
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generatedDestination.js","sourceRoot":"","sources":["../../../src/mcp/agent-variants/generatedDestination.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,6 @@ export type { AdapterTelemetry, BridgeChangeIntent, BridgeQueue, } from './pendi
|
|
|
5
5
|
export { AgentVariantsOrchestrator } from './WorktreeOrchestrator';
|
|
6
6
|
export type { OrchestratorDeps, ProjectEnvironment, WorktreeManagerLike, } from './WorktreeOrchestrator';
|
|
7
7
|
export { registerAgentVariantsTools, slugifyPrompt } from './tools';
|
|
8
|
-
export { registerCreateZeroToOneTool } from './createZeroToOneTool';
|
|
9
8
|
export type { ToolDeps } from './tools';
|
|
10
9
|
export { AgentVariantsError, ERROR_CODES, type ErrorCode } from './errors';
|
|
11
10
|
export { VARIANT_COUNT_MIN, VARIANT_COUNT_MAX } from './contracts';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/mcp/agent-variants/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,YAAY,EACV,sBAAsB,EACtB,aAAa,EACb,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,YAAY,EACV,gBAAgB,EAChB,kBAAkB,EAClB,WAAW,GACZ,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACnE,YAAY,EACV,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,0BAA0B,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACpE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/mcp/agent-variants/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,YAAY,EACV,sBAAsB,EACtB,aAAa,EACb,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,YAAY,EACV,gBAAgB,EAChB,kBAAkB,EAClB,WAAW,GACZ,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACnE,YAAY,EACV,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,0BAA0B,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACpE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,KAAK,SAAS,EAAE,MAAM,UAAU,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACnE,YAAY,EACV,KAAK,EACL,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,sBAAsB,EACtB,8BAA8B,EAC9B,+BAA+B,EAC/B,WAAW,EACX,wBAAwB,EACxB,cAAc,EACd,oBAAoB,EACpB,qBAAqB,EACrB,wBAAwB,EACxB,yBAAyB,EACzB,qBAAqB,EACrB,sBAAsB,EACtB,0BAA0B,EAC1B,2BAA2B,EAC3B,qBAAqB,EACrB,kBAAkB,EAClB,kBAAkB,EAClB,4BAA4B,EAC5B,KAAK,EACL,MAAM,EACN,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,EACtB,QAAQ,EACR,YAAY,EACZ,cAAc,GACf,MAAM,aAAa,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.VARIANT_COUNT_MAX = exports.VARIANT_COUNT_MIN = exports.ERROR_CODES = exports.AgentVariantsError = exports.
|
|
3
|
+
exports.VARIANT_COUNT_MAX = exports.VARIANT_COUNT_MIN = exports.ERROR_CODES = exports.AgentVariantsError = exports.slugifyPrompt = exports.registerAgentVariantsTools = exports.AgentVariantsOrchestrator = exports.PendingChangesAdapter = exports.SessionStore = void 0;
|
|
4
4
|
var SessionStore_1 = require("./SessionStore");
|
|
5
5
|
Object.defineProperty(exports, "SessionStore", { enumerable: true, get: function () { return SessionStore_1.SessionStore; } });
|
|
6
6
|
var pendingChangesAdapter_1 = require("./pendingChangesAdapter");
|
|
@@ -10,8 +10,6 @@ Object.defineProperty(exports, "AgentVariantsOrchestrator", { enumerable: true,
|
|
|
10
10
|
var tools_1 = require("./tools");
|
|
11
11
|
Object.defineProperty(exports, "registerAgentVariantsTools", { enumerable: true, get: function () { return tools_1.registerAgentVariantsTools; } });
|
|
12
12
|
Object.defineProperty(exports, "slugifyPrompt", { enumerable: true, get: function () { return tools_1.slugifyPrompt; } });
|
|
13
|
-
var createZeroToOneTool_1 = require("./createZeroToOneTool");
|
|
14
|
-
Object.defineProperty(exports, "registerCreateZeroToOneTool", { enumerable: true, get: function () { return createZeroToOneTool_1.registerCreateZeroToOneTool; } });
|
|
15
13
|
var errors_1 = require("./errors");
|
|
16
14
|
Object.defineProperty(exports, "AgentVariantsError", { enumerable: true, get: function () { return errors_1.AgentVariantsError; } });
|
|
17
15
|
Object.defineProperty(exports, "ERROR_CODES", { enumerable: true, get: function () { return errors_1.ERROR_CODES; } });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/mcp/agent-variants/index.ts"],"names":[],"mappings":";;;AAAA,+CAA8C;AAArC,4GAAA,YAAY,OAAA;AAUrB,iEAAgE;AAAvD,8HAAA,qBAAqB,OAAA;AAM9B,+DAAmE;AAA1D,iIAAA,yBAAyB,OAAA;AAMlC,iCAAoE;AAA3D,mHAAA,0BAA0B,OAAA;AAAE,sGAAA,aAAa,OAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/mcp/agent-variants/index.ts"],"names":[],"mappings":";;;AAAA,+CAA8C;AAArC,4GAAA,YAAY,OAAA;AAUrB,iEAAgE;AAAvD,8HAAA,qBAAqB,OAAA;AAM9B,+DAAmE;AAA1D,iIAAA,yBAAyB,OAAA;AAMlC,iCAAoE;AAA3D,mHAAA,0BAA0B,OAAA;AAAE,sGAAA,aAAa,OAAA;AAElD,mCAA2E;AAAlE,4GAAA,kBAAkB,OAAA;AAAE,qGAAA,WAAW,OAAA;AACxC,yCAAmE;AAA1D,8GAAA,iBAAiB,OAAA;AAAE,8GAAA,iBAAiB,OAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { IntegrationsClient } from '../../services/IntegrationsClient';
|
|
2
|
+
import type { SourceArtifactInput } from './contracts';
|
|
3
|
+
type PinterestSourceContextInput = {
|
|
4
|
+
sourceUrls: string[];
|
|
5
|
+
integrationsClient?: Pick<IntegrationsClient, 'fetchPinterest'>;
|
|
6
|
+
};
|
|
7
|
+
export type PinterestSourceContextEnrichment = {
|
|
8
|
+
sourceArtifacts: SourceArtifactInput[];
|
|
9
|
+
warnings: string[];
|
|
10
|
+
};
|
|
11
|
+
export declare const selectPrimaryPinterestImage: (imageUrls: readonly string[]) => string | null;
|
|
12
|
+
/**
|
|
13
|
+
* Enriches Pinterest source URLs through the existing proxy-backed integration
|
|
14
|
+
* client, preserving local auth/token handling outside MCP.
|
|
15
|
+
*/
|
|
16
|
+
export declare const enrichPinterestSourceContext: (input: PinterestSourceContextInput) => Promise<PinterestSourceContextEnrichment>;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=pinterestSourceContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pinterestSourceContext.d.ts","sourceRoot":"","sources":["../../../src/mcp/agent-variants/pinterestSourceContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAGnB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAOvD,KAAK,2BAA2B,GAAG;IACjC,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,kBAAkB,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,CAAC;CACjE,CAAC;AAQF,MAAM,MAAM,gCAAgC,GAAG;IAC7C,eAAe,EAAE,mBAAmB,EAAE,CAAC;IACvC,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC;AA6BF,eAAO,MAAM,2BAA2B,GACtC,WAAW,SAAS,MAAM,EAAE,KAC3B,MAAM,GAAG,IAoBX,CAAC;AAqEF;;;GAGG;AACH,eAAO,MAAM,4BAA4B,GACvC,OAAO,2BAA2B,KACjC,OAAO,CAAC,gCAAgC,CA6C1C,CAAC"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.enrichPinterestSourceContext = exports.selectPrimaryPinterestImage = void 0;
|
|
4
|
+
const MAX_PINTEREST_SOURCE_URLS = 1;
|
|
5
|
+
const MAX_PINTEREST_PINS = 3;
|
|
6
|
+
const MAX_PINTEREST_ARTIFACT_CONTENT_LENGTH = 7_500;
|
|
7
|
+
const PINTEREST_HOST_SUFFIX = 'pinterest.com';
|
|
8
|
+
const isPinterestUrl = (rawUrl) => {
|
|
9
|
+
try {
|
|
10
|
+
const parsed = new URL(rawUrl);
|
|
11
|
+
const hostname = parsed.hostname.replace(/^www\./, '').toLowerCase();
|
|
12
|
+
return (hostname === PINTEREST_HOST_SUFFIX ||
|
|
13
|
+
hostname.endsWith(`.${PINTEREST_HOST_SUFFIX}`));
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
const inferImageScore = (url) => {
|
|
20
|
+
const sizePair = url.match(/(?:^|[^\d])(\d{2,5})x(\d{2,5})(?:[^\d]|$)/);
|
|
21
|
+
if (sizePair) {
|
|
22
|
+
return Number(sizePair[1]) * Number(sizePair[2]);
|
|
23
|
+
}
|
|
24
|
+
const pinterestWidth = url.match(/\/(\d{2,5})x\//);
|
|
25
|
+
if (pinterestWidth) {
|
|
26
|
+
return Number(pinterestWidth[1]);
|
|
27
|
+
}
|
|
28
|
+
return null;
|
|
29
|
+
};
|
|
30
|
+
const selectPrimaryPinterestImage = (imageUrls) => {
|
|
31
|
+
const candidates = imageUrls
|
|
32
|
+
.map((url, index) => ({ url, score: inferImageScore(url), index }))
|
|
33
|
+
.filter((candidate) => candidate.url.length > 0);
|
|
34
|
+
if (candidates.length === 0) {
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
const scoredCandidates = candidates.filter((candidate) => candidate.score !== null);
|
|
38
|
+
if (scoredCandidates.length > 0) {
|
|
39
|
+
return scoredCandidates.reduce((largest, candidate) => candidate.score > largest.score ? candidate : largest).url;
|
|
40
|
+
}
|
|
41
|
+
return candidates[candidates.length - 1].url;
|
|
42
|
+
};
|
|
43
|
+
exports.selectPrimaryPinterestImage = selectPrimaryPinterestImage;
|
|
44
|
+
const compactLine = (label, value) => (value ? `${label}: ${value}` : null);
|
|
45
|
+
const buildPinLines = (pin, index) => {
|
|
46
|
+
const primaryImageUrl = (0, exports.selectPrimaryPinterestImage)(pin.image_urls);
|
|
47
|
+
return [
|
|
48
|
+
`Pin ${index + 1}`,
|
|
49
|
+
compactLine('id', pin.id),
|
|
50
|
+
compactLine('title', pin.title),
|
|
51
|
+
compactLine('description', pin.description),
|
|
52
|
+
compactLine('alt_text', pin.alt_text),
|
|
53
|
+
compactLine('dominant_color', pin.dominant_color),
|
|
54
|
+
compactLine('link', pin.link),
|
|
55
|
+
compactLine('primary_image_url', primaryImageUrl),
|
|
56
|
+
pin.image_urls.length > 0
|
|
57
|
+
? `image_urls: ${pin.image_urls.join(', ')}`
|
|
58
|
+
: null,
|
|
59
|
+
].filter((line) => Boolean(line));
|
|
60
|
+
};
|
|
61
|
+
const buildBoardLines = (board) => {
|
|
62
|
+
if (!board) {
|
|
63
|
+
return [];
|
|
64
|
+
}
|
|
65
|
+
return [
|
|
66
|
+
compactLine('board_title', board.name),
|
|
67
|
+
compactLine('board_description', board.description),
|
|
68
|
+
compactLine('board_privacy', board.privacy),
|
|
69
|
+
].filter((line) => Boolean(line));
|
|
70
|
+
};
|
|
71
|
+
const buildPinterestArtifact = (input) => {
|
|
72
|
+
const pins = input.pins.slice(0, MAX_PINTEREST_PINS);
|
|
73
|
+
if (pins.length === 0) {
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
const label = input.board?.name
|
|
77
|
+
? `Pinterest: ${input.board.name}`
|
|
78
|
+
: 'Pinterest visual reference';
|
|
79
|
+
const content = [
|
|
80
|
+
`source_url: ${input.sourceUrl}`,
|
|
81
|
+
...buildBoardLines(input.board),
|
|
82
|
+
...pins.flatMap((pin, index) => ['', ...buildPinLines(pin, index)]),
|
|
83
|
+
]
|
|
84
|
+
.join('\n')
|
|
85
|
+
.trim()
|
|
86
|
+
.slice(0, MAX_PINTEREST_ARTIFACT_CONTENT_LENGTH);
|
|
87
|
+
if (!content) {
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
return {
|
|
91
|
+
kind: 'visualBrief',
|
|
92
|
+
label,
|
|
93
|
+
content,
|
|
94
|
+
};
|
|
95
|
+
};
|
|
96
|
+
/**
|
|
97
|
+
* Enriches Pinterest source URLs through the existing proxy-backed integration
|
|
98
|
+
* client, preserving local auth/token handling outside MCP.
|
|
99
|
+
*/
|
|
100
|
+
const enrichPinterestSourceContext = async (input) => {
|
|
101
|
+
const allPinterestUrls = input.sourceUrls.filter(isPinterestUrl);
|
|
102
|
+
const pinterestUrls = allPinterestUrls.slice(0, MAX_PINTEREST_SOURCE_URLS);
|
|
103
|
+
if (!input.integrationsClient || pinterestUrls.length === 0) {
|
|
104
|
+
return { sourceArtifacts: [], warnings: [] };
|
|
105
|
+
}
|
|
106
|
+
const sourceArtifacts = [];
|
|
107
|
+
const warnings = [];
|
|
108
|
+
const skippedPinterestUrlCount = allPinterestUrls.length - pinterestUrls.length;
|
|
109
|
+
if (skippedPinterestUrlCount > 0) {
|
|
110
|
+
warnings.push(`Only the first Pinterest source URL is enriched; ${skippedPinterestUrlCount} additional Pinterest URL(s) remain as plain source links.`);
|
|
111
|
+
}
|
|
112
|
+
for (const sourceUrl of pinterestUrls) {
|
|
113
|
+
const result = await input.integrationsClient.fetchPinterest(sourceUrl);
|
|
114
|
+
if (result.status === 'not_connected') {
|
|
115
|
+
warnings.push('Pinterest is not connected; using the Pinterest URL without authenticated board context.');
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
118
|
+
if (result.status === 'error') {
|
|
119
|
+
warnings.push(`Pinterest fetch failed; using the Pinterest URL without authenticated board context. ${result.message}`);
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
const artifact = buildPinterestArtifact({
|
|
123
|
+
sourceUrl,
|
|
124
|
+
board: result.type === 'board' ? result.board : undefined,
|
|
125
|
+
pins: result.pins,
|
|
126
|
+
});
|
|
127
|
+
if (artifact) {
|
|
128
|
+
sourceArtifacts.push(artifact);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return { sourceArtifacts, warnings };
|
|
132
|
+
};
|
|
133
|
+
exports.enrichPinterestSourceContext = enrichPinterestSourceContext;
|
|
134
|
+
//# sourceMappingURL=pinterestSourceContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pinterestSourceContext.js","sourceRoot":"","sources":["../../../src/mcp/agent-variants/pinterestSourceContext.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VariantRunPlan — the single, canonical resolution of "what kind of run is
|
|
3
|
+
* this" for an agent-variants session.
|
|
4
|
+
*
|
|
5
|
+
* Historically the lifecycle policy (work-item topology, how variants are
|
|
6
|
+
* provisioned, how they're committed, how they preview) was re-derived
|
|
7
|
+
* independently at every stage from `projectContext.kind`,
|
|
8
|
+
* `executionPlan.mode`, and framework detection — `SessionStore.approve`,
|
|
9
|
+
* `WorktreeOrchestrator` provisioning, the commit path, and the preview
|
|
10
|
+
* wiring each made the same `kind === 'fresh'` / `mode === 'vite_app'`
|
|
11
|
+
* decisions in their own way. That spread the same handful of facts across
|
|
12
|
+
* dozens of call sites and let them drift.
|
|
13
|
+
*
|
|
14
|
+
* This module collapses those facts into a *closed* discriminated union. There
|
|
15
|
+
* are exactly three legal run shapes:
|
|
16
|
+
*
|
|
17
|
+
* 1. existing project — clone+diff against the user's tree
|
|
18
|
+
* 2. generated project, static — inline HTML/CSS/JS, no runtime
|
|
19
|
+
* 3. generated project, app (vite) — scaffolded Vite app with a dev server
|
|
20
|
+
*
|
|
21
|
+
* Every other lifecycle policy (topology / provision / commit) is a pure
|
|
22
|
+
* function of which of those three a session is — see `runPlanPolicy`. Callers
|
|
23
|
+
* resolve the plan once (at `approve` time, the first point where every input
|
|
24
|
+
* is known) and read policy off it, rather than re-deriving from raw context.
|
|
25
|
+
*
|
|
26
|
+
* Preview is deliberately *not* a fixed field of the plan. For generated
|
|
27
|
+
* projects it's determined (static → static_artifact, app → dev_server), but
|
|
28
|
+
* for existing projects it's only known at success time — a `framework:'static'`
|
|
29
|
+
* existing project previews as a materialized static artifact, anything else
|
|
30
|
+
* proxies a dev server. That one genuinely-late decision is exposed via
|
|
31
|
+
* `existingPreviewKind` rather than baked into the plan at resolve time.
|
|
32
|
+
*/
|
|
33
|
+
import type { ProjectContext } from './contracts';
|
|
34
|
+
/**
|
|
35
|
+
* The closed set of legal run shapes. Modelled as a discriminated union so the
|
|
36
|
+
* compiler rejects impossible combinations (e.g. an existing project with a
|
|
37
|
+
* `runtime`, or a generated project with no runtime) at construction time —
|
|
38
|
+
* there is no way to hand-assemble an illegal plan.
|
|
39
|
+
*/
|
|
40
|
+
export type VariantRunPlan = {
|
|
41
|
+
source: 'existing';
|
|
42
|
+
} | {
|
|
43
|
+
source: 'generated';
|
|
44
|
+
runtime: 'static';
|
|
45
|
+
} | {
|
|
46
|
+
source: 'generated';
|
|
47
|
+
runtime: 'app';
|
|
48
|
+
};
|
|
49
|
+
/** How the work items for a run are shaped at approve time. */
|
|
50
|
+
export type RunTopology =
|
|
51
|
+
/** One `code_gen` item per variant, edited inside a git worktree. Used by
|
|
52
|
+
* existing projects and (with a `scaffold_base` dependency) generated apps. */
|
|
53
|
+
'code_gen'
|
|
54
|
+
/** One `static_preview` item per variant — inline HTML is the deliverable,
|
|
55
|
+
* no worktree, no scaffold. Generated-static only. */
|
|
56
|
+
| 'static_preview';
|
|
57
|
+
/** How each variant's working copy is provisioned. */
|
|
58
|
+
export type RunProvision =
|
|
59
|
+
/** A git worktree cloned from the user's repo (existing projects). */
|
|
60
|
+
'git_worktree'
|
|
61
|
+
/** A scaffolded template worktree under `.rivet-variants` (generated apps). */
|
|
62
|
+
| 'template_worktree'
|
|
63
|
+
/** Nothing — the deliverable is inline HTML (generated-static). */
|
|
64
|
+
| 'none';
|
|
65
|
+
/** How the picked variant is landed when the user commits. */
|
|
66
|
+
export type RunCommit =
|
|
67
|
+
/** Apply the captured diff to the user's working tree (existing projects). */
|
|
68
|
+
'apply_diff'
|
|
69
|
+
/** Write the static site (HTML + assets) to the destination
|
|
70
|
+
* (generated-static). */
|
|
71
|
+
| 'write_static_site'
|
|
72
|
+
/** Materialize / rename the whole scaffolded app to the destination
|
|
73
|
+
* (generated apps). */
|
|
74
|
+
| 'materialize_project';
|
|
75
|
+
/** Preview surface for a generated variant. Existing projects defer this to
|
|
76
|
+
* success time — see {@link existingPreviewKind}. */
|
|
77
|
+
export type RunPreview = 'static_artifact' | 'dev_server';
|
|
78
|
+
export interface RunPlanPolicy {
|
|
79
|
+
topology: RunTopology;
|
|
80
|
+
provision: RunProvision;
|
|
81
|
+
commit: RunCommit;
|
|
82
|
+
/** True when the run needs a `scaffold_base` work item gating its
|
|
83
|
+
* `code_gen` items (generated Vite apps). */
|
|
84
|
+
needsScaffoldBase: boolean;
|
|
85
|
+
/** Fixed preview surface when the source determines it; `undefined` for
|
|
86
|
+
* existing projects, where it's resolved at success time. */
|
|
87
|
+
preview?: RunPreview;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Resolve the run plan from a project context. This is the single decision
|
|
91
|
+
* point: `source` comes from `projectContext.kind`; for generated projects the
|
|
92
|
+
* `runtime` comes from the agent's reported `executionPlan.mode`, defaulting to
|
|
93
|
+
* `static` for source-less zero-to-one runs (which never report a plan).
|
|
94
|
+
*/
|
|
95
|
+
export declare function resolveRunPlan(projectContext: ProjectContext): VariantRunPlan;
|
|
96
|
+
/** Derive the lifecycle policy for a resolved plan. Total over the closed set. */
|
|
97
|
+
export declare function runPlanPolicy(plan: VariantRunPlan): RunPlanPolicy;
|
|
98
|
+
/** Convenience: resolve and derive policy in one step. */
|
|
99
|
+
export declare function resolveRunPlanPolicy(projectContext: ProjectContext): RunPlanPolicy;
|
|
100
|
+
/**
|
|
101
|
+
* Preview surface for an existing-project variant, resolved at success time
|
|
102
|
+
* from whether the variant materialized static files (framework `static`, no
|
|
103
|
+
* dev command) or runs a dev server. Generated projects don't use this — their
|
|
104
|
+
* preview is fixed by {@link runPlanPolicy}.
|
|
105
|
+
*/
|
|
106
|
+
export declare function existingPreviewKind(hasStaticFiles: boolean): RunPreview;
|
|
107
|
+
//# sourceMappingURL=runPlan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runPlan.d.ts","sourceRoot":"","sources":["../../../src/mcp/agent-variants/runPlan.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GACtB;IAAE,MAAM,EAAE,UAAU,CAAA;CAAE,GACtB;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,QAAQ,CAAA;CAAE,GAC1C;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,KAAK,CAAA;CAAE,CAAC;AAE5C,+DAA+D;AAC/D,MAAM,MAAM,WAAW;AACrB;gFACgF;AAC9E,UAAU;AACZ;uDACuD;GACrD,gBAAgB,CAAC;AAErB,sDAAsD;AACtD,MAAM,MAAM,YAAY;AACtB,sEAAsE;AACpE,cAAc;AAChB,+EAA+E;GAC7E,mBAAmB;AACrB,mEAAmE;GACjE,MAAM,CAAC;AAEX,8DAA8D;AAC9D,MAAM,MAAM,SAAS;AACnB,8EAA8E;AAC5E,YAAY;AACd;0BAC0B;GACxB,mBAAmB;AACrB;wBACwB;GACtB,qBAAqB,CAAC;AAE1B;sDACsD;AACtD,MAAM,MAAM,UAAU,GAAG,iBAAiB,GAAG,YAAY,CAAC;AAE1D,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,WAAW,CAAC;IACtB,SAAS,EAAE,YAAY,CAAC;IACxB,MAAM,EAAE,SAAS,CAAC;IAClB;kDAC8C;IAC9C,iBAAiB,EAAE,OAAO,CAAC;IAC3B;kEAC8D;IAC9D,OAAO,CAAC,EAAE,UAAU,CAAC;CACtB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,cAAc,EAAE,cAAc,GAAG,cAAc,CAU7E;AAED,kFAAkF;AAClF,wBAAgB,aAAa,CAAC,IAAI,EAAE,cAAc,GAAG,aAAa,CA2BjE;AAED,0DAA0D;AAC1D,wBAAgB,oBAAoB,CAClC,cAAc,EAAE,cAAc,GAC7B,aAAa,CAEf;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,cAAc,EAAE,OAAO,GAAG,UAAU,CAEvE"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* VariantRunPlan — the single, canonical resolution of "what kind of run is
|
|
4
|
+
* this" for an agent-variants session.
|
|
5
|
+
*
|
|
6
|
+
* Historically the lifecycle policy (work-item topology, how variants are
|
|
7
|
+
* provisioned, how they're committed, how they preview) was re-derived
|
|
8
|
+
* independently at every stage from `projectContext.kind`,
|
|
9
|
+
* `executionPlan.mode`, and framework detection — `SessionStore.approve`,
|
|
10
|
+
* `WorktreeOrchestrator` provisioning, the commit path, and the preview
|
|
11
|
+
* wiring each made the same `kind === 'fresh'` / `mode === 'vite_app'`
|
|
12
|
+
* decisions in their own way. That spread the same handful of facts across
|
|
13
|
+
* dozens of call sites and let them drift.
|
|
14
|
+
*
|
|
15
|
+
* This module collapses those facts into a *closed* discriminated union. There
|
|
16
|
+
* are exactly three legal run shapes:
|
|
17
|
+
*
|
|
18
|
+
* 1. existing project — clone+diff against the user's tree
|
|
19
|
+
* 2. generated project, static — inline HTML/CSS/JS, no runtime
|
|
20
|
+
* 3. generated project, app (vite) — scaffolded Vite app with a dev server
|
|
21
|
+
*
|
|
22
|
+
* Every other lifecycle policy (topology / provision / commit) is a pure
|
|
23
|
+
* function of which of those three a session is — see `runPlanPolicy`. Callers
|
|
24
|
+
* resolve the plan once (at `approve` time, the first point where every input
|
|
25
|
+
* is known) and read policy off it, rather than re-deriving from raw context.
|
|
26
|
+
*
|
|
27
|
+
* Preview is deliberately *not* a fixed field of the plan. For generated
|
|
28
|
+
* projects it's determined (static → static_artifact, app → dev_server), but
|
|
29
|
+
* for existing projects it's only known at success time — a `framework:'static'`
|
|
30
|
+
* existing project previews as a materialized static artifact, anything else
|
|
31
|
+
* proxies a dev server. That one genuinely-late decision is exposed via
|
|
32
|
+
* `existingPreviewKind` rather than baked into the plan at resolve time.
|
|
33
|
+
*/
|
|
34
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
35
|
+
exports.resolveRunPlan = resolveRunPlan;
|
|
36
|
+
exports.runPlanPolicy = runPlanPolicy;
|
|
37
|
+
exports.resolveRunPlanPolicy = resolveRunPlanPolicy;
|
|
38
|
+
exports.existingPreviewKind = existingPreviewKind;
|
|
39
|
+
/**
|
|
40
|
+
* Resolve the run plan from a project context. This is the single decision
|
|
41
|
+
* point: `source` comes from `projectContext.kind`; for generated projects the
|
|
42
|
+
* `runtime` comes from the agent's reported `executionPlan.mode`, defaulting to
|
|
43
|
+
* `static` for source-less zero-to-one runs (which never report a plan).
|
|
44
|
+
*/
|
|
45
|
+
function resolveRunPlan(projectContext) {
|
|
46
|
+
if (projectContext.kind === 'existing') {
|
|
47
|
+
return { source: 'existing' };
|
|
48
|
+
}
|
|
49
|
+
// Generated (fresh) project. `executionPlan` is present only for
|
|
50
|
+
// source-grounded runs (reported via `report_source_plan`); source-less
|
|
51
|
+
// zero-to-one runs default to a static preview.
|
|
52
|
+
const runtime = projectContext.executionPlan?.mode === 'vite_app' ? 'app' : 'static';
|
|
53
|
+
return { source: 'generated', runtime };
|
|
54
|
+
}
|
|
55
|
+
/** Derive the lifecycle policy for a resolved plan. Total over the closed set. */
|
|
56
|
+
function runPlanPolicy(plan) {
|
|
57
|
+
if (plan.source === 'existing') {
|
|
58
|
+
return {
|
|
59
|
+
topology: 'code_gen',
|
|
60
|
+
provision: 'git_worktree',
|
|
61
|
+
commit: 'apply_diff',
|
|
62
|
+
needsScaffoldBase: false,
|
|
63
|
+
// preview deferred to success time (static vs dev_server by framework).
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
if (plan.runtime === 'static') {
|
|
67
|
+
return {
|
|
68
|
+
topology: 'static_preview',
|
|
69
|
+
provision: 'none',
|
|
70
|
+
commit: 'write_static_site',
|
|
71
|
+
needsScaffoldBase: false,
|
|
72
|
+
preview: 'static_artifact',
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
// generated app (vite)
|
|
76
|
+
return {
|
|
77
|
+
topology: 'code_gen',
|
|
78
|
+
provision: 'template_worktree',
|
|
79
|
+
commit: 'materialize_project',
|
|
80
|
+
needsScaffoldBase: true,
|
|
81
|
+
preview: 'dev_server',
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
/** Convenience: resolve and derive policy in one step. */
|
|
85
|
+
function resolveRunPlanPolicy(projectContext) {
|
|
86
|
+
return runPlanPolicy(resolveRunPlan(projectContext));
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Preview surface for an existing-project variant, resolved at success time
|
|
90
|
+
* from whether the variant materialized static files (framework `static`, no
|
|
91
|
+
* dev command) or runs a dev server. Generated projects don't use this — their
|
|
92
|
+
* preview is fixed by {@link runPlanPolicy}.
|
|
93
|
+
*/
|
|
94
|
+
function existingPreviewKind(hasStaticFiles) {
|
|
95
|
+
return hasStaticFiles ? 'static_artifact' : 'dev_server';
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=runPlan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runPlan.js","sourceRoot":"","sources":["../../../src/mcp/agent-variants/runPlan.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;;AAkEH,wCAUC;AAGD,sCA2BC;AAGD,oDAIC;AAQD,kDAEC;AA/DD;;;;;GAKG;AACH,SAAgB,cAAc,CAAC,cAA8B;IAC3D,IAAI,cAAc,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QACvC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;IAChC,CAAC;IACD,iEAAiE;IACjE,wEAAwE;IACxE,gDAAgD;IAChD,MAAM,OAAO,GACX,cAAc,CAAC,aAAa,EAAE,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;IACvE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;AAC1C,CAAC;AAED,kFAAkF;AAClF,SAAgB,aAAa,CAAC,IAAoB;IAChD,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QAC/B,OAAO;YACL,QAAQ,EAAE,UAAU;YACpB,SAAS,EAAE,cAAc;YACzB,MAAM,EAAE,YAAY;YACpB,iBAAiB,EAAE,KAAK;YACxB,wEAAwE;SACzE,CAAC;IACJ,CAAC;IACD,IAAI,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO;YACL,QAAQ,EAAE,gBAAgB;YAC1B,SAAS,EAAE,MAAM;YACjB,MAAM,EAAE,mBAAmB;YAC3B,iBAAiB,EAAE,KAAK;YACxB,OAAO,EAAE,iBAAiB;SAC3B,CAAC;IACJ,CAAC;IACD,uBAAuB;IACvB,OAAO;QACL,QAAQ,EAAE,UAAU;QACpB,SAAS,EAAE,mBAAmB;QAC9B,MAAM,EAAE,qBAAqB;QAC7B,iBAAiB,EAAE,IAAI;QACvB,OAAO,EAAE,YAAY;KACtB,CAAC;AACJ,CAAC;AAED,0DAA0D;AAC1D,SAAgB,oBAAoB,CAClC,cAA8B;IAE9B,OAAO,aAAa,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC,CAAC;AACvD,CAAC;AAED;;;;;GAKG;AACH,SAAgB,mBAAmB,CAAC,cAAuB;IACzD,OAAO,cAAc,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,YAAY,CAAC;AAC3D,CAAC"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
2
|
import { type VariantQaResult, type VisualEditorAttachment } from './contracts';
|
|
3
3
|
import { VariantHistoryService } from '../../services/VariantHistoryService';
|
|
4
|
-
import { slugifyPrompt } from './
|
|
4
|
+
import { slugifyPrompt } from './generatedDestination';
|
|
5
5
|
export { slugifyPrompt };
|
|
6
6
|
import type { AgentVariantsOrchestrator } from './WorktreeOrchestrator';
|
|
7
|
+
import type { IntegrationsClient } from '../../services/IntegrationsClient';
|
|
7
8
|
/**
|
|
8
9
|
* Coerce `output` to a structured value when an agent (incorrectly) sends a
|
|
9
10
|
* stringified JSON. The MCP schema accepts `z.unknown()` so the call doesn't
|
|
@@ -18,7 +19,7 @@ export interface ToolDeps {
|
|
|
18
19
|
/**
|
|
19
20
|
* Zero-to-one only: ensure the Rivet visual editor is up on the future
|
|
20
21
|
* destination path so the iframe is ready when variants render. Wired
|
|
21
|
-
* from server.ts
|
|
22
|
+
* from server.ts. When
|
|
22
23
|
* absent (e.g. unit tests), start_variants(mode='zero_to_one') skips
|
|
23
24
|
* the auto-open and the caller can open the editor themselves.
|
|
24
25
|
*/
|
|
@@ -40,11 +41,55 @@ export interface ToolDeps {
|
|
|
40
41
|
* `start_variants(mode='zero_to_one')` so new projects default to the
|
|
41
42
|
* workspace the user is already working in. Wired from server.ts. */
|
|
42
43
|
getProjectPath?: () => string | null;
|
|
43
|
-
telemetry?:
|
|
44
|
+
telemetry?: VariantsToolTelemetry;
|
|
44
45
|
/** Read-only access to the on-disk variant history under
|
|
45
46
|
* `<projectPath>/.rivet/variants/`. Defaults to a fresh
|
|
46
47
|
* `VariantHistoryService` since the service is stateless. */
|
|
47
48
|
variantHistory?: VariantHistoryService;
|
|
49
|
+
/** Test seam — defaults to os.homedir. Used to authorize asset-source
|
|
50
|
+
* roots for source-grounded zero-to-one sessions. */
|
|
51
|
+
homedir?: () => string;
|
|
52
|
+
/** Optional authenticated integration client for source-context enrichment. */
|
|
53
|
+
integrationsClient?: Pick<IntegrationsClient, 'fetchPinterest'>;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Telemetry surface used by the variants tools. All methods optional so unit
|
|
57
|
+
* tests can omit them; the real telemetry service structurally satisfies this.
|
|
58
|
+
*/
|
|
59
|
+
export interface VariantsToolTelemetry {
|
|
60
|
+
track(event: string, properties: Record<string, unknown>): void;
|
|
61
|
+
trackAgentVariantsSourceContextQuality?: (data: {
|
|
62
|
+
sessionId: string;
|
|
63
|
+
sourceUrlCount: number;
|
|
64
|
+
artifactCount: number;
|
|
65
|
+
hasScreenshotReferences: boolean;
|
|
66
|
+
preserveBrand: boolean;
|
|
67
|
+
}) => void;
|
|
68
|
+
/**
|
|
69
|
+
* Outcome metadata only — counts of links, successes, low-signal pages,
|
|
70
|
+
* fetch failures, blocked targets, the merge strategy, and cache outcome
|
|
71
|
+
* counts. Full URLs, fetched HTML, file paths, and extracted text MUST NOT
|
|
72
|
+
* be forwarded.
|
|
73
|
+
*/
|
|
74
|
+
trackAgentVariantsInspirationExtraction?: (data: {
|
|
75
|
+
sessionId: string;
|
|
76
|
+
inspirationLinkCount: number;
|
|
77
|
+
referenceLinkCount: number;
|
|
78
|
+
successfulExtractions: number;
|
|
79
|
+
lowSignalCount: number;
|
|
80
|
+
fetchFailureCount: number;
|
|
81
|
+
blockedTargetCount: number;
|
|
82
|
+
mergeStrategy: 'merge' | 'separate' | 'none';
|
|
83
|
+
cacheHitCount: number;
|
|
84
|
+
cacheMissCount: number;
|
|
85
|
+
cacheStaleCount: number;
|
|
86
|
+
cacheVersionMismatchCount: number;
|
|
87
|
+
cacheLowConfidenceCount: number;
|
|
88
|
+
cacheRegenerationCount: number;
|
|
89
|
+
cacheForcedRefresh: boolean;
|
|
90
|
+
cacheReuseAgeBucket?: 'lt_1h' | '1h_24h' | '1d_7d' | '7d_30d' | 'gt_30d';
|
|
91
|
+
cacheReuseConfidenceBucket?: 'low' | 'medium' | 'high';
|
|
92
|
+
}) => void;
|
|
48
93
|
}
|
|
49
94
|
export declare function registerAgentVariantsTools(mcp: McpServer, deps: ToolDeps): void;
|
|
50
95
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/mcp/agent-variants/tools.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/mcp/agent-variants/tools.ts"],"names":[],"mappings":"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"}
|