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
|
@@ -1,8 +1,23 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Returns true for hostnames that are unambiguously local or private without
|
|
3
|
+
* any DNS lookup. IPv4 / IPv6 literals get the private-range check; hostname
|
|
4
|
+
* strings get the local-domain pattern check.
|
|
5
|
+
*/
|
|
6
|
+
export declare const isLocalLiteralHostname: (hostname: string) => boolean;
|
|
7
|
+
/**
|
|
8
|
+
* Synchronous URL validator: enforces HTTP/HTTPS scheme and rejects literal
|
|
9
|
+
* hostnames that match local/loopback/link-local patterns. Used as the SSRF
|
|
10
|
+
* guard for `Brief.visualReferenceUrl` and static-preview QA.
|
|
11
|
+
*/
|
|
12
|
+
export declare const validateInspirationUrl: (rawUrl: string) => {
|
|
13
|
+
ok: true;
|
|
14
|
+
url: URL;
|
|
15
|
+
normalized: string;
|
|
16
|
+
} | {
|
|
17
|
+
ok: false;
|
|
18
|
+
reason: string;
|
|
19
|
+
};
|
|
2
20
|
export declare const normalizeUrl: (rawUrl: string) => string | null;
|
|
3
21
|
export declare const extractPromptUrls: (prompt: string) => string[];
|
|
4
|
-
export declare const resolveSourceUrls: (prompt: string,
|
|
5
|
-
export declare const normalizeSourceArtifacts: (sourceArtifacts: SourceArtifactInput[] | undefined) => SourceArtifactInput[];
|
|
6
|
-
export declare const normalizeSourceContextArtifact: (artifact: SourceContextArtifact) => SourceContextArtifact;
|
|
7
|
-
export declare const buildSourceContextMarkdown: (artifact: SourceContextArtifact) => string;
|
|
22
|
+
export declare const resolveSourceUrls: (prompt: string, extraUrls?: string[]) => string[];
|
|
8
23
|
//# sourceMappingURL=sourceContext.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sourceContext.d.ts","sourceRoot":"","sources":["../../../src/mcp/agent-variants/sourceContext.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sourceContext.d.ts","sourceRoot":"","sources":["../../../src/mcp/agent-variants/sourceContext.ts"],"names":[],"mappings":"AAkDA;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GAAI,UAAU,MAAM,KAAG,OAOzD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GACjC,QAAQ,MAAM,KAEZ;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,GAAG,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAC1C;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CA6B9B,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,QAAQ,MAAM,KAAG,MAAM,GAAG,IA4BtD,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,QAAQ,MAAM,KAAG,MAAM,EAYxD,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAC5B,QAAQ,MAAM,EACd,YAAW,MAAM,EAAO,KACvB,MAAM,EAYR,CAAC"}
|
|
@@ -1,34 +1,105 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
const errors_1 = require("./errors");
|
|
5
|
-
// NOTE: This creates an ES module cycle with inspirationDesignContext (which
|
|
6
|
-
// imports `extractPromptUrls` from here). The cycle is safe because
|
|
7
|
-
// `isLocalLiteralHostname` is only invoked from inside `normalizeUrl`'s
|
|
8
|
-
// function body, not at module-eval time. Without this guard,
|
|
9
|
-
// `resolveSourceUrls` would happily pass `http://169.254.169.254/...` or
|
|
10
|
-
// `http://localhost:.../` URLs from prompts / `sourceContext.sourceUrls`
|
|
11
|
-
// straight into the `source_plan` work item, where the agent's browser
|
|
12
|
-
// extraction step would dial them — bypassing the SSRF guard that already
|
|
13
|
-
// covers the server-side inspiration fetcher.
|
|
14
|
-
const inspirationDesignContext_1 = require("./inspirationDesignContext");
|
|
3
|
+
exports.resolveSourceUrls = exports.extractPromptUrls = exports.normalizeUrl = exports.validateInspirationUrl = exports.isLocalLiteralHostname = void 0;
|
|
15
4
|
const MAX_PROMPT_URLS = 6;
|
|
16
5
|
const MAX_SOURCE_URLS = 24;
|
|
17
|
-
const MAX_ARTIFACTS = 24;
|
|
18
|
-
const MAX_ARTIFACT_CONTENT_LENGTH = 8_000;
|
|
19
|
-
const MAX_FIELD_LENGTH = 400;
|
|
20
|
-
const MAX_TOTAL_MARKDOWN_LENGTH = 60_000;
|
|
21
6
|
const TRAILING_URL_PUNCTUATION = /[),.;:!?]+$/;
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
7
|
+
// --- SSRF guards ------------------------------------------------------------
|
|
8
|
+
// Synchronous literal-host checks for user-supplied URLs (inspiration
|
|
9
|
+
// references, `userContext` url sources, prompt-extracted links). They run
|
|
10
|
+
// before a URL reaches the `source_plan` work item / the agent's browser step,
|
|
11
|
+
// so prompt-injected `http://169.254.169.254/...` or `http://localhost/...`
|
|
12
|
+
// targets are rejected without IO. DNS-resolved checks are intentionally not
|
|
13
|
+
// done here so these stay synchronous.
|
|
14
|
+
const PRIVATE_IPV4_PATTERNS = [
|
|
15
|
+
/^10\./,
|
|
16
|
+
/^127\./,
|
|
17
|
+
/^192\.168\./,
|
|
18
|
+
/^169\.254\./,
|
|
19
|
+
/^172\.(1[6-9]|2\d|3[0-1])\./,
|
|
20
|
+
/^0\./,
|
|
21
|
+
// RFC6598 shared address space (CGNAT): 100.64.0.0/10 -> 100.64..100.127.
|
|
22
|
+
/^100\.(6[4-9]|[7-9]\d|1[01]\d|12[0-7])\./,
|
|
23
|
+
];
|
|
24
|
+
// IPv6 private/reserved ranges: ::1 loopback, fe80::/10 link-local,
|
|
25
|
+
// fc00::/7 unique-local (first byte fc OR fd). IPv4-mapped IPv6
|
|
26
|
+
// (`::ffff:x.x.x.x`) is handled separately so the embedded v4 gets the full
|
|
27
|
+
// v4 private-range check.
|
|
28
|
+
const PRIVATE_IPV6_PATTERNS = [/^::1$/i, /^fe80:/i, /^f[cd][0-9a-f]{2}:/i];
|
|
29
|
+
/**
|
|
30
|
+
* Detect an IPv4-mapped IPv6 address (`::ffff:x.x.x.x`) whose embedded IPv4
|
|
31
|
+
* portion falls in the v4 private/reserved ranges.
|
|
32
|
+
*/
|
|
33
|
+
const isIpv4MappedPrivateIpv6 = (address) => {
|
|
34
|
+
const match = /^::ffff:(\d+\.\d+\.\d+\.\d+)$/i.exec(address);
|
|
35
|
+
if (!match)
|
|
36
|
+
return false;
|
|
37
|
+
return PRIVATE_IPV4_PATTERNS.some((pattern) => pattern.test(match[1]));
|
|
31
38
|
};
|
|
39
|
+
const LOCAL_HOSTNAME_PATTERNS = [
|
|
40
|
+
/^localhost$/i,
|
|
41
|
+
/\.localhost$/i,
|
|
42
|
+
/^localhost\./i,
|
|
43
|
+
/\.local$/i,
|
|
44
|
+
/\.internal$/i,
|
|
45
|
+
/\.lan$/i,
|
|
46
|
+
/\.intranet$/i,
|
|
47
|
+
];
|
|
48
|
+
/**
|
|
49
|
+
* Returns true for hostnames that are unambiguously local or private without
|
|
50
|
+
* any DNS lookup. IPv4 / IPv6 literals get the private-range check; hostname
|
|
51
|
+
* strings get the local-domain pattern check.
|
|
52
|
+
*/
|
|
53
|
+
const isLocalLiteralHostname = (hostname) => {
|
|
54
|
+
const trimmed = hostname.replace(/^\[|\]$/g, '');
|
|
55
|
+
if (PRIVATE_IPV4_PATTERNS.some((pattern) => pattern.test(trimmed)))
|
|
56
|
+
return true;
|
|
57
|
+
if (PRIVATE_IPV6_PATTERNS.some((pattern) => pattern.test(trimmed)))
|
|
58
|
+
return true;
|
|
59
|
+
if (isIpv4MappedPrivateIpv6(trimmed))
|
|
60
|
+
return true;
|
|
61
|
+
if (LOCAL_HOSTNAME_PATTERNS.some((pattern) => pattern.test(trimmed)))
|
|
62
|
+
return true;
|
|
63
|
+
return false;
|
|
64
|
+
};
|
|
65
|
+
exports.isLocalLiteralHostname = isLocalLiteralHostname;
|
|
66
|
+
/**
|
|
67
|
+
* Synchronous URL validator: enforces HTTP/HTTPS scheme and rejects literal
|
|
68
|
+
* hostnames that match local/loopback/link-local patterns. Used as the SSRF
|
|
69
|
+
* guard for `Brief.visualReferenceUrl` and static-preview QA.
|
|
70
|
+
*/
|
|
71
|
+
const validateInspirationUrl = (rawUrl) => {
|
|
72
|
+
const trimmed = rawUrl.trim();
|
|
73
|
+
if (!trimmed) {
|
|
74
|
+
return { ok: false, reason: 'URL is empty.' };
|
|
75
|
+
}
|
|
76
|
+
let parsed;
|
|
77
|
+
try {
|
|
78
|
+
parsed = new URL(trimmed);
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
return { ok: false, reason: `URL is not valid: ${trimmed}` };
|
|
82
|
+
}
|
|
83
|
+
if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {
|
|
84
|
+
return {
|
|
85
|
+
ok: false,
|
|
86
|
+
reason: `Only HTTP and HTTPS inspiration links are supported (got '${parsed.protocol.replace(/:$/, '')}').`,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
const hostname = parsed.hostname.toLowerCase();
|
|
90
|
+
if (!hostname) {
|
|
91
|
+
return { ok: false, reason: 'URL is missing a hostname.' };
|
|
92
|
+
}
|
|
93
|
+
if ((0, exports.isLocalLiteralHostname)(hostname)) {
|
|
94
|
+
return {
|
|
95
|
+
ok: false,
|
|
96
|
+
reason: `URL hostname '${hostname}' resolves to a local or private-network target.`,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
parsed.hash = '';
|
|
100
|
+
return { ok: true, url: parsed, normalized: parsed.toString() };
|
|
101
|
+
};
|
|
102
|
+
exports.validateInspirationUrl = validateInspirationUrl;
|
|
32
103
|
const normalizeUrl = (rawUrl) => {
|
|
33
104
|
const trimmed = rawUrl.trim().replace(TRAILING_URL_PUNCTUATION, '');
|
|
34
105
|
if (!trimmed)
|
|
@@ -54,7 +125,7 @@ const normalizeUrl = (rawUrl) => {
|
|
|
54
125
|
// because `normalizeUrl` must stay sync; the literal check covers
|
|
55
126
|
// every cheap-to-stuff target without needing IO.
|
|
56
127
|
const hostname = parsed.hostname.toLowerCase();
|
|
57
|
-
if (!hostname || (0,
|
|
128
|
+
if (!hostname || (0, exports.isLocalLiteralHostname)(hostname)) {
|
|
58
129
|
return null;
|
|
59
130
|
}
|
|
60
131
|
parsed.hash = '';
|
|
@@ -77,8 +148,8 @@ const extractPromptUrls = (prompt) => {
|
|
|
77
148
|
return deduped;
|
|
78
149
|
};
|
|
79
150
|
exports.extractPromptUrls = extractPromptUrls;
|
|
80
|
-
const resolveSourceUrls = (prompt,
|
|
81
|
-
const merged = [...(0, exports.extractPromptUrls)(prompt), ...
|
|
151
|
+
const resolveSourceUrls = (prompt, extraUrls = []) => {
|
|
152
|
+
const merged = [...(0, exports.extractPromptUrls)(prompt), ...extraUrls];
|
|
82
153
|
const deduped = [];
|
|
83
154
|
const seen = new Set();
|
|
84
155
|
for (const candidate of merged) {
|
|
@@ -93,91 +164,4 @@ const resolveSourceUrls = (prompt, sourceContext) => {
|
|
|
93
164
|
return deduped;
|
|
94
165
|
};
|
|
95
166
|
exports.resolveSourceUrls = resolveSourceUrls;
|
|
96
|
-
const normalizeSourceArtifacts = (sourceArtifacts) => {
|
|
97
|
-
if (!sourceArtifacts || sourceArtifacts.length === 0)
|
|
98
|
-
return [];
|
|
99
|
-
return sourceArtifacts.slice(0, MAX_ARTIFACTS).map((artifact) => ({
|
|
100
|
-
kind: artifact.kind,
|
|
101
|
-
label: sanitizeText(artifact.label, 80),
|
|
102
|
-
content: sanitizeText(artifact.content, MAX_ARTIFACT_CONTENT_LENGTH),
|
|
103
|
-
}));
|
|
104
|
-
};
|
|
105
|
-
exports.normalizeSourceArtifacts = normalizeSourceArtifacts;
|
|
106
|
-
const normalizeSourceContextArtifact = (artifact) => {
|
|
107
|
-
const normalizeList = (items) => items.map((item) => sanitizeText(item, MAX_FIELD_LENGTH)).filter(Boolean);
|
|
108
|
-
const normalized = {
|
|
109
|
-
sourceFindings: normalizeList(artifact.sourceFindings),
|
|
110
|
-
sectionInventory: normalizeList(artifact.sectionInventory),
|
|
111
|
-
visualObservations: normalizeList(artifact.visualObservations),
|
|
112
|
-
sourceRoles: artifact.sourceRoles.map((entry) => ({
|
|
113
|
-
url: sanitizeText(entry.url, 2_048),
|
|
114
|
-
role: entry.role,
|
|
115
|
-
...(entry.rationale
|
|
116
|
-
? { rationale: sanitizeText(entry.rationale, MAX_FIELD_LENGTH) }
|
|
117
|
-
: {}),
|
|
118
|
-
})),
|
|
119
|
-
qualityBar: normalizeList(artifact.qualityBar),
|
|
120
|
-
...(artifact.screenshotReferences
|
|
121
|
-
? {
|
|
122
|
-
screenshotReferences: normalizeList(artifact.screenshotReferences).slice(0, 16),
|
|
123
|
-
}
|
|
124
|
-
: {}),
|
|
125
|
-
...(artifact.risks
|
|
126
|
-
? { risks: normalizeList(artifact.risks).slice(0, 24) }
|
|
127
|
-
: {}),
|
|
128
|
-
};
|
|
129
|
-
const estimatedSize = JSON.stringify(normalized).length;
|
|
130
|
-
if (estimatedSize > MAX_TOTAL_MARKDOWN_LENGTH) {
|
|
131
|
-
throw new errors_1.AgentVariantsError('SOURCE_CONTEXT_TOO_LARGE', `Source context exceeds size limit (${estimatedSize} > ${MAX_TOTAL_MARKDOWN_LENGTH})`);
|
|
132
|
-
}
|
|
133
|
-
return normalized;
|
|
134
|
-
};
|
|
135
|
-
exports.normalizeSourceContextArtifact = normalizeSourceContextArtifact;
|
|
136
|
-
const redactUrlForDisplay = (url) => {
|
|
137
|
-
try {
|
|
138
|
-
const parsed = new URL(url);
|
|
139
|
-
parsed.search = '';
|
|
140
|
-
parsed.hash = '';
|
|
141
|
-
return parsed.toString();
|
|
142
|
-
}
|
|
143
|
-
catch {
|
|
144
|
-
return url;
|
|
145
|
-
}
|
|
146
|
-
};
|
|
147
|
-
const buildSourceContextMarkdown = (artifact) => {
|
|
148
|
-
const lines = [
|
|
149
|
-
'# SOURCE_CONTEXT',
|
|
150
|
-
'',
|
|
151
|
-
'## Source Findings',
|
|
152
|
-
...artifact.sourceFindings.map((item) => `- ${item}`),
|
|
153
|
-
'',
|
|
154
|
-
'## Section Inventory',
|
|
155
|
-
...artifact.sectionInventory.map((item) => `- ${item}`),
|
|
156
|
-
'',
|
|
157
|
-
'## Visual Observations',
|
|
158
|
-
...artifact.visualObservations.map((item) => `- ${item}`),
|
|
159
|
-
'',
|
|
160
|
-
'## Source Roles',
|
|
161
|
-
...artifact.sourceRoles.map((entry) => entry.rationale
|
|
162
|
-
? `- ${entry.role}: ${redactUrlForDisplay(entry.url)} (${entry.rationale})`
|
|
163
|
-
: `- ${entry.role}: ${redactUrlForDisplay(entry.url)}`),
|
|
164
|
-
'',
|
|
165
|
-
'## Quality Bar',
|
|
166
|
-
...artifact.qualityBar.map((item) => `- ${item}`),
|
|
167
|
-
];
|
|
168
|
-
if (artifact.screenshotReferences && artifact.screenshotReferences.length > 0) {
|
|
169
|
-
lines.push('', '## Screenshot References');
|
|
170
|
-
lines.push(...artifact.screenshotReferences.map((item) => `- ${item}`));
|
|
171
|
-
}
|
|
172
|
-
if (artifact.risks && artifact.risks.length > 0) {
|
|
173
|
-
lines.push('', '## Risks');
|
|
174
|
-
lines.push(...artifact.risks.map((item) => `- ${item}`));
|
|
175
|
-
}
|
|
176
|
-
const markdown = lines.join('\n').trim();
|
|
177
|
-
if (markdown.length > MAX_TOTAL_MARKDOWN_LENGTH) {
|
|
178
|
-
throw new errors_1.AgentVariantsError('SOURCE_CONTEXT_TOO_LARGE', `SOURCE_CONTEXT.md exceeds size limit (${markdown.length} > ${MAX_TOTAL_MARKDOWN_LENGTH})`);
|
|
179
|
-
}
|
|
180
|
-
return `${markdown}\n`;
|
|
181
|
-
};
|
|
182
|
-
exports.buildSourceContextMarkdown = buildSourceContextMarkdown;
|
|
183
167
|
//# sourceMappingURL=sourceContext.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sourceContext.js","sourceRoot":"","sources":["../../../src/mcp/agent-variants/sourceContext.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"sourceContext.js","sourceRoot":"","sources":["../../../src/mcp/agent-variants/sourceContext.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@ import { slugifyPrompt } from './generatedDestination';
|
|
|
5
5
|
export { slugifyPrompt };
|
|
6
6
|
import type { AgentVariantsOrchestrator } from './WorktreeOrchestrator';
|
|
7
7
|
import type { IntegrationsClient } from '../../services/IntegrationsClient';
|
|
8
|
+
import { BrowserAgentClient } from '../../services/BrowserAgentClient';
|
|
8
9
|
/**
|
|
9
10
|
* Coerce `output` to a structured value when an agent (incorrectly) sends a
|
|
10
11
|
* stringified JSON. The MCP schema accepts `z.unknown()` so the call doesn't
|
|
@@ -51,6 +52,12 @@ export interface ToolDeps {
|
|
|
51
52
|
homedir?: () => string;
|
|
52
53
|
/** Optional authenticated integration client for source-context enrichment. */
|
|
53
54
|
integrationsClient?: Pick<IntegrationsClient, 'fetchPinterest'>;
|
|
55
|
+
/**
|
|
56
|
+
* Browser-agent client for `capture_design_evidence`. Calls the proxy to
|
|
57
|
+
* render reference URLs server-side (provider keys never reach the CLI).
|
|
58
|
+
* Defaults to a fresh `BrowserAgentClient`; injectable for tests.
|
|
59
|
+
*/
|
|
60
|
+
browserAgentClient?: Pick<BrowserAgentClient, 'captureDesignEvidence'>;
|
|
54
61
|
}
|
|
55
62
|
/**
|
|
56
63
|
* Telemetry surface used by the variants tools. All methods optional so unit
|
|
@@ -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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"}
|