rivet-design 0.8.3 → 0.8.5
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/config/evaluateFlags.d.ts.map +1 -1
- package/dist/config/evaluateFlags.js +8 -2
- package/dist/config/evaluateFlags.js.map +1 -1
- package/dist/config/flags.d.ts +6 -0
- package/dist/config/flags.d.ts.map +1 -1
- package/dist/config/flags.js +2 -0
- package/dist/config/flags.js.map +1 -1
- package/dist/prompts/commentVariationPromptSnapshot.d.ts +1 -1
- package/dist/prompts/commentVariationPromptSnapshot.d.ts.map +1 -1
- package/dist/prompts/commentVariationPromptSnapshot.js +4 -4
- package/dist/prompts/commentVariationPromptSnapshot.js.map +1 -1
- package/dist/prompts/commentVariationPrompts.d.ts +8 -2
- package/dist/prompts/commentVariationPrompts.d.ts.map +1 -1
- package/dist/prompts/commentVariationPrompts.js +13 -10
- package/dist/prompts/commentVariationPrompts.js.map +1 -1
- package/dist/routes/design.d.ts.map +1 -1
- package/dist/routes/design.js +5 -0
- package/dist/routes/design.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +6 -1
- package/dist/server.js.map +1 -1
- package/dist/services/CommentVariationService.d.ts +19 -29
- package/dist/services/CommentVariationService.d.ts.map +1 -1
- package/dist/services/CommentVariationService.js +100 -69
- package/dist/services/CommentVariationService.js.map +1 -1
- package/dist/services/DesktopVersionPolicyService.d.ts +21 -0
- package/dist/services/DesktopVersionPolicyService.d.ts.map +1 -0
- package/dist/services/DesktopVersionPolicyService.js +151 -0
- package/dist/services/DesktopVersionPolicyService.js.map +1 -0
- package/dist/services/GatewayClient.d.ts +23 -1
- package/dist/services/GatewayClient.d.ts.map +1 -1
- package/dist/services/GatewayClient.js +52 -22
- package/dist/services/GatewayClient.js.map +1 -1
- package/dist/services/VariantCodeGeneratorService.d.ts +8 -1
- package/dist/services/VariantCodeGeneratorService.d.ts.map +1 -1
- package/dist/services/VariantCodeGeneratorService.js +50 -6
- package/dist/services/VariantCodeGeneratorService.js.map +1 -1
- package/dist/services/agent/AgentCore.d.ts +21 -0
- package/dist/services/agent/AgentCore.d.ts.map +1 -1
- package/dist/services/agent/AgentCore.js +36 -2
- package/dist/services/agent/AgentCore.js.map +1 -1
- package/package.json +2 -2
- package/src/ui/dist/assets/{main-CdPVp07K.js → main-DkRukRjr.js} +78 -81
- package/src/ui/dist/assets/main-wC0IkT-I.css +1 -0
- package/src/ui/dist/index.html +2 -2
- package/src/ui/dist/assets/main-BprqUxW5.css +0 -1
|
@@ -1,70 +1,97 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.generateCommentStyleVariants = exports.
|
|
4
|
-
const
|
|
6
|
+
exports.generateCommentStyleVariants = exports.readFileExcerpts = void 0;
|
|
7
|
+
const path_1 = __importDefault(require("path"));
|
|
8
|
+
const fs_1 = require("fs");
|
|
9
|
+
const v3_1 = require("zod/v3");
|
|
5
10
|
const logger_1 = require("../utils/logger");
|
|
6
11
|
const commentVariationPrompts_1 = require("../prompts/commentVariationPrompts");
|
|
7
|
-
const
|
|
12
|
+
const GatewayClient_1 = require("./GatewayClient");
|
|
8
13
|
const log = (0, logger_1.createLogger)('CommentVariationService');
|
|
9
14
|
const MIN_VARIANT_COUNT = 2;
|
|
10
15
|
const MAX_VARIANT_COUNT = 5;
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
16
|
+
/**
|
|
17
|
+
* Sonnet 4.6 is fast enough for direction-text generation while still
|
|
18
|
+
* producing coherent multi-direction designs. Phase 2 (code generation) keeps
|
|
19
|
+
* using Opus through the agent loop where structural reasoning matters more.
|
|
20
|
+
*/
|
|
21
|
+
const DEFAULT_VARIATION_MODEL = 'claude-sonnet-4-6';
|
|
14
22
|
const DEFAULT_AGENT_CWD = process.cwd();
|
|
15
|
-
const
|
|
23
|
+
const MAX_TOKENS = 4000;
|
|
24
|
+
const TEMPERATURE = 0.7;
|
|
25
|
+
const MAX_FILES_FOR_CONTEXT = 3;
|
|
26
|
+
const MAX_BYTES_PER_FILE = 6000;
|
|
27
|
+
const VARIATION_SYSTEM_PROMPT = `You are a senior design systems engineer producing structured style-variation output for one selected comment target with nearby UI context.
|
|
16
28
|
|
|
17
|
-
Use provided element, sibling, and file context to propose coherent visual directions. Nearby sibling/container adjustments are allowed when necessary for a coherent result.
|
|
29
|
+
Use the provided element, sibling, and file context to propose coherent visual directions. Nearby sibling/container adjustments are allowed when necessary for a coherent result.
|
|
18
30
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
{"variants":[{"label":"short name","summary":"one sentence","changeSpec":"implementation instruction"}]}`;
|
|
25
|
-
const styleVariantSchema = zod_1.z.object({
|
|
26
|
-
label: zod_1.z.string(),
|
|
27
|
-
summary: zod_1.z.string(),
|
|
28
|
-
changeSpec: zod_1.z.string().optional(),
|
|
31
|
+
Submit your final output by calling the submit_variants tool exactly once.`;
|
|
32
|
+
const variantSchema = v3_1.z.object({
|
|
33
|
+
label: v3_1.z.string(),
|
|
34
|
+
summary: v3_1.z.string(),
|
|
35
|
+
changeSpec: v3_1.z.string(),
|
|
29
36
|
});
|
|
30
|
-
const responseSchema =
|
|
31
|
-
variants:
|
|
37
|
+
const responseSchema = v3_1.z.object({
|
|
38
|
+
variants: v3_1.z.array(variantSchema),
|
|
32
39
|
});
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
40
|
+
const SUBMIT_VARIANTS_TOOL = {
|
|
41
|
+
name: 'submit_variants',
|
|
42
|
+
strict: true,
|
|
43
|
+
description: 'Submit the final list of style variants for the commented element. Call this exactly once with all variants.',
|
|
44
|
+
input_schema: {
|
|
45
|
+
type: 'object',
|
|
46
|
+
properties: {
|
|
47
|
+
variants: {
|
|
48
|
+
type: 'array',
|
|
49
|
+
items: {
|
|
50
|
+
type: 'object',
|
|
51
|
+
properties: {
|
|
52
|
+
label: { type: 'string' },
|
|
53
|
+
summary: { type: 'string' },
|
|
54
|
+
changeSpec: { type: 'string' },
|
|
55
|
+
},
|
|
56
|
+
required: ['label', 'summary', 'changeSpec'],
|
|
57
|
+
additionalProperties: false,
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
required: ['variants'],
|
|
62
|
+
additionalProperties: false,
|
|
63
|
+
},
|
|
48
64
|
};
|
|
49
|
-
|
|
50
|
-
const
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
65
|
+
const readFileExcerpts = async (projectPath, element) => {
|
|
66
|
+
const filePaths = element.filePaths?.map((f) => f.filePath).slice(0, MAX_FILES_FOR_CONTEXT) ??
|
|
67
|
+
[];
|
|
68
|
+
const excerpts = [];
|
|
69
|
+
for (const relPath of filePaths) {
|
|
70
|
+
const absPath = path_1.default.isAbsolute(relPath)
|
|
71
|
+
? relPath
|
|
72
|
+
: path_1.default.join(projectPath, relPath);
|
|
73
|
+
try {
|
|
74
|
+
const stat = await fs_1.promises.stat(absPath);
|
|
75
|
+
if (!stat.isFile())
|
|
76
|
+
continue;
|
|
77
|
+
const buf = await fs_1.promises.readFile(absPath, 'utf8');
|
|
78
|
+
const content = buf.length > MAX_BYTES_PER_FILE
|
|
79
|
+
? buf.slice(0, MAX_BYTES_PER_FILE) + '\n... (truncated)'
|
|
80
|
+
: buf;
|
|
81
|
+
excerpts.push({ path: relPath, content });
|
|
82
|
+
}
|
|
83
|
+
catch (e) {
|
|
84
|
+
log.debug(`Skipping file excerpt for ${relPath}:`, e);
|
|
59
85
|
}
|
|
60
86
|
}
|
|
61
|
-
|
|
62
|
-
return tailBlocks[tailBlocks.length - 1];
|
|
63
|
-
}
|
|
64
|
-
throw new Error('Invalid variation response from model');
|
|
87
|
+
return excerpts;
|
|
65
88
|
};
|
|
89
|
+
exports.readFileExcerpts = readFileExcerpts;
|
|
66
90
|
/**
|
|
67
|
-
*
|
|
91
|
+
* Generates style-variant directions for a commented element by calling the
|
|
92
|
+
* gateway directly with a forced tool-use schema. Skips the agent loop because
|
|
93
|
+
* direction text doesn't require codebase exploration — the relevant file
|
|
94
|
+
* contents are pre-loaded into the prompt.
|
|
68
95
|
*/
|
|
69
96
|
const generateCommentStyleVariants = async ({ instruction, element, variantCount, projectPath, model, }) => {
|
|
70
97
|
if (variantCount < MIN_VARIANT_COUNT ||
|
|
@@ -72,31 +99,35 @@ const generateCommentStyleVariants = async ({ instruction, element, variantCount
|
|
|
72
99
|
!Number.isInteger(variantCount)) {
|
|
73
100
|
throw new Error('variantCount must be an integer between 2 and 5');
|
|
74
101
|
}
|
|
75
|
-
const
|
|
76
|
-
const
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
permissionMode: 'default',
|
|
83
|
-
cwd: projectPath || DEFAULT_AGENT_CWD,
|
|
102
|
+
const cwd = projectPath || DEFAULT_AGENT_CWD;
|
|
103
|
+
const fileExcerpts = await (0, exports.readFileExcerpts)(cwd, element);
|
|
104
|
+
const prompt = (0, commentVariationPrompts_1.buildCommentVariationPrompt)(instruction, element, variantCount, fileExcerpts);
|
|
105
|
+
log.info(`Comment variation request — model=${model ?? DEFAULT_VARIATION_MODEL} files=${fileExcerpts.length} count=${variantCount}`);
|
|
106
|
+
const gateway = new GatewayClient_1.GatewayClient();
|
|
107
|
+
const startedAt = Date.now();
|
|
108
|
+
const toolInput = await gateway.sendToolUse({
|
|
84
109
|
model: model ?? DEFAULT_VARIATION_MODEL,
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
110
|
+
maxTokens: MAX_TOKENS,
|
|
111
|
+
temperature: TEMPERATURE,
|
|
112
|
+
system: VARIATION_SYSTEM_PROMPT,
|
|
113
|
+
prompt,
|
|
114
|
+
tool: SUBMIT_VARIANTS_TOOL,
|
|
115
|
+
cacheSystemPrompt: true,
|
|
91
116
|
});
|
|
92
|
-
|
|
93
|
-
const
|
|
94
|
-
const parsed = responseSchema.safeParse(parsedJson);
|
|
117
|
+
log.info(`Comment variation completed in ${Date.now() - startedAt}ms`);
|
|
118
|
+
const parsed = responseSchema.safeParse(toolInput);
|
|
95
119
|
if (!parsed.success) {
|
|
96
|
-
log.warn('Variation
|
|
120
|
+
log.warn('Variation tool input failed schema validation', {
|
|
121
|
+
validationError: parsed.error.flatten(),
|
|
122
|
+
received: toolInput,
|
|
123
|
+
});
|
|
97
124
|
throw new Error('Invalid variation response from model');
|
|
98
125
|
}
|
|
99
126
|
if (parsed.data.variants.length !== variantCount) {
|
|
127
|
+
log.warn('Variation count mismatch', {
|
|
128
|
+
expected: variantCount,
|
|
129
|
+
received: parsed.data.variants.length,
|
|
130
|
+
});
|
|
100
131
|
throw new Error('Invalid variation response from model');
|
|
101
132
|
}
|
|
102
133
|
return parsed.data.variants;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommentVariationService.js","sourceRoot":"","sources":["../../src/services/CommentVariationService.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"CommentVariationService.js","sourceRoot":"","sources":["../../src/services/CommentVariationService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export type DesktopVersionPolicy = {
|
|
2
|
+
minimumVersion: string;
|
|
3
|
+
latestVersion: string;
|
|
4
|
+
downloadUrl?: string;
|
|
5
|
+
sourceTimestamp: string;
|
|
6
|
+
};
|
|
7
|
+
declare class DesktopVersionPolicyService {
|
|
8
|
+
private cache;
|
|
9
|
+
private inFlightFetch;
|
|
10
|
+
private readonly policyUrl;
|
|
11
|
+
private readonly cacheTtlMs;
|
|
12
|
+
private readonly fetchTimeoutMs;
|
|
13
|
+
constructor();
|
|
14
|
+
private shouldUseFreshCache;
|
|
15
|
+
getPolicy(): Promise<DesktopVersionPolicy | null>;
|
|
16
|
+
private fetchAndCachePolicy;
|
|
17
|
+
}
|
|
18
|
+
export declare const getDesktopVersionPolicyService: () => DesktopVersionPolicyService;
|
|
19
|
+
export declare const resetDesktopVersionPolicyServiceForTests: () => void;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=DesktopVersionPolicyService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DesktopVersionPolicyService.d.ts","sourceRoot":"","sources":["../../src/services/DesktopVersionPolicyService.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,oBAAoB,GAAG;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;CACzB,CAAC;AAuEF,cAAM,2BAA2B;IAC/B,OAAO,CAAC,KAAK,CAGX;IAEF,OAAO,CAAC,aAAa,CAAqD;IAE1E,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IAEnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IAEpC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;;IAsBxC,OAAO,CAAC,mBAAmB;IAOrB,SAAS,IAAI,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC;YAoBzC,mBAAmB;CAmClC;AAID,eAAO,MAAM,8BAA8B,QAAO,2BAKjD,CAAC;AAEF,eAAO,MAAM,wCAAwC,QAAO,IAE3D,CAAC"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resetDesktopVersionPolicyServiceForTests = exports.getDesktopVersionPolicyService = void 0;
|
|
4
|
+
const logger_1 = require("../utils/logger");
|
|
5
|
+
const log = (0, logger_1.createLogger)('DesktopVersionPolicyService');
|
|
6
|
+
const DEFAULT_POLICY_URL = 'https://releases.rivet.design/desktop-version-policy.json';
|
|
7
|
+
const DEFAULT_CACHE_TTL_MS = 5 * 60 * 1000;
|
|
8
|
+
const DEFAULT_POLICY_FETCH_TIMEOUT_MS = 5000;
|
|
9
|
+
const normalizeSemverCore = (version) => {
|
|
10
|
+
const [core] = version.trim().split('-');
|
|
11
|
+
const parts = core.split('.');
|
|
12
|
+
if (parts.length !== 3) {
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
const [major, minor, patch] = parts.map((part) => Number.parseInt(part, 10));
|
|
16
|
+
if (!Number.isInteger(major) ||
|
|
17
|
+
!Number.isInteger(minor) ||
|
|
18
|
+
!Number.isInteger(patch)) {
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
return `${major}.${minor}.${patch}`;
|
|
22
|
+
};
|
|
23
|
+
const computeMinorFloor = (version) => {
|
|
24
|
+
const normalized = normalizeSemverCore(version);
|
|
25
|
+
if (!normalized) {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
const [major, minor] = normalized.split('.');
|
|
29
|
+
return `${major}.${minor}.0`;
|
|
30
|
+
};
|
|
31
|
+
const parseDesktopVersionPolicy = (payload) => {
|
|
32
|
+
if (!payload || typeof payload !== 'object') {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
const record = payload;
|
|
36
|
+
if (typeof record.latestVersion !== 'string') {
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
const normalizedLatest = normalizeSemverCore(record.latestVersion);
|
|
40
|
+
if (!normalizedLatest) {
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
const normalizedMinimumFromPayload = typeof record.minimumVersion === 'string'
|
|
44
|
+
? normalizeSemverCore(record.minimumVersion)
|
|
45
|
+
: null;
|
|
46
|
+
const minimumVersion = normalizedMinimumFromPayload ?? computeMinorFloor(normalizedLatest);
|
|
47
|
+
if (!minimumVersion) {
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
const sourceTimestamp = typeof record.publishedAt === 'string' && record.publishedAt.length > 0
|
|
51
|
+
? record.publishedAt
|
|
52
|
+
: new Date().toISOString();
|
|
53
|
+
return {
|
|
54
|
+
minimumVersion,
|
|
55
|
+
latestVersion: normalizedLatest,
|
|
56
|
+
downloadUrl: typeof record.downloadUrl === 'string' ? record.downloadUrl : undefined,
|
|
57
|
+
sourceTimestamp,
|
|
58
|
+
};
|
|
59
|
+
};
|
|
60
|
+
class DesktopVersionPolicyService {
|
|
61
|
+
cache = {
|
|
62
|
+
value: null,
|
|
63
|
+
fetchedAtMs: 0,
|
|
64
|
+
};
|
|
65
|
+
inFlightFetch = null;
|
|
66
|
+
policyUrl;
|
|
67
|
+
cacheTtlMs;
|
|
68
|
+
fetchTimeoutMs;
|
|
69
|
+
constructor() {
|
|
70
|
+
this.policyUrl = process.env.RIVET_DESKTOP_POLICY_URL ?? DEFAULT_POLICY_URL;
|
|
71
|
+
const ttlFromEnv = Number.parseInt(process.env.RIVET_DESKTOP_POLICY_CACHE_TTL_MS ?? '', 10);
|
|
72
|
+
this.cacheTtlMs =
|
|
73
|
+
Number.isInteger(ttlFromEnv) && ttlFromEnv > 0
|
|
74
|
+
? ttlFromEnv
|
|
75
|
+
: DEFAULT_CACHE_TTL_MS;
|
|
76
|
+
const timeoutFromEnv = Number.parseInt(process.env.RIVET_DESKTOP_POLICY_FETCH_TIMEOUT_MS ?? '', 10);
|
|
77
|
+
this.fetchTimeoutMs =
|
|
78
|
+
Number.isInteger(timeoutFromEnv) && timeoutFromEnv > 0
|
|
79
|
+
? timeoutFromEnv
|
|
80
|
+
: DEFAULT_POLICY_FETCH_TIMEOUT_MS;
|
|
81
|
+
}
|
|
82
|
+
shouldUseFreshCache(nowMs) {
|
|
83
|
+
if (this.cache.fetchedAtMs <= 0) {
|
|
84
|
+
return false;
|
|
85
|
+
}
|
|
86
|
+
return nowMs - this.cache.fetchedAtMs < this.cacheTtlMs;
|
|
87
|
+
}
|
|
88
|
+
async getPolicy() {
|
|
89
|
+
const nowMs = Date.now();
|
|
90
|
+
if (this.shouldUseFreshCache(nowMs)) {
|
|
91
|
+
return this.cache.value;
|
|
92
|
+
}
|
|
93
|
+
if (!this.inFlightFetch) {
|
|
94
|
+
this.inFlightFetch = this.fetchAndCachePolicy().finally(() => {
|
|
95
|
+
this.inFlightFetch = null;
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
const fetched = await this.inFlightFetch;
|
|
99
|
+
if (fetched) {
|
|
100
|
+
return fetched;
|
|
101
|
+
}
|
|
102
|
+
// Fail open: stale cached value is still returned if network fetch fails.
|
|
103
|
+
return this.cache.value;
|
|
104
|
+
}
|
|
105
|
+
async fetchAndCachePolicy() {
|
|
106
|
+
try {
|
|
107
|
+
const abortController = new AbortController();
|
|
108
|
+
const timeoutId = setTimeout(() => abortController.abort(), this.fetchTimeoutMs);
|
|
109
|
+
const response = await fetch(this.policyUrl, {
|
|
110
|
+
signal: abortController.signal,
|
|
111
|
+
}).finally(() => {
|
|
112
|
+
clearTimeout(timeoutId);
|
|
113
|
+
});
|
|
114
|
+
if (!response.ok) {
|
|
115
|
+
throw new Error(`Policy request failed with status ${response.status}`);
|
|
116
|
+
}
|
|
117
|
+
const parsed = parseDesktopVersionPolicy(await response.json());
|
|
118
|
+
if (!parsed) {
|
|
119
|
+
throw new Error('Policy payload shape is invalid');
|
|
120
|
+
}
|
|
121
|
+
this.cache = {
|
|
122
|
+
value: parsed,
|
|
123
|
+
fetchedAtMs: Date.now(),
|
|
124
|
+
};
|
|
125
|
+
return parsed;
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
log.warn('Failed to fetch desktop version policy:', error);
|
|
129
|
+
// Negative cache failures so repeated /api/config calls don't trigger
|
|
130
|
+
// a fresh network timeout every time while the policy endpoint is down.
|
|
131
|
+
this.cache = {
|
|
132
|
+
value: this.cache.value,
|
|
133
|
+
fetchedAtMs: Date.now(),
|
|
134
|
+
};
|
|
135
|
+
return null;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
let instance = null;
|
|
140
|
+
const getDesktopVersionPolicyService = () => {
|
|
141
|
+
if (!instance) {
|
|
142
|
+
instance = new DesktopVersionPolicyService();
|
|
143
|
+
}
|
|
144
|
+
return instance;
|
|
145
|
+
};
|
|
146
|
+
exports.getDesktopVersionPolicyService = getDesktopVersionPolicyService;
|
|
147
|
+
const resetDesktopVersionPolicyServiceForTests = () => {
|
|
148
|
+
instance = null;
|
|
149
|
+
};
|
|
150
|
+
exports.resetDesktopVersionPolicyServiceForTests = resetDesktopVersionPolicyServiceForTests;
|
|
151
|
+
//# sourceMappingURL=DesktopVersionPolicyService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DesktopVersionPolicyService.js","sourceRoot":"","sources":["../../src/services/DesktopVersionPolicyService.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,21 @@ type GatewayRequestOptions = {
|
|
|
4
4
|
temperature: number;
|
|
5
5
|
prompt: string;
|
|
6
6
|
};
|
|
7
|
+
type GatewayToolUseOptions = {
|
|
8
|
+
model: string;
|
|
9
|
+
maxTokens: number;
|
|
10
|
+
temperature: number;
|
|
11
|
+
system: string;
|
|
12
|
+
prompt: string;
|
|
13
|
+
tool: {
|
|
14
|
+
name: string;
|
|
15
|
+
description: string;
|
|
16
|
+
input_schema: Record<string, unknown>;
|
|
17
|
+
strict?: boolean;
|
|
18
|
+
};
|
|
19
|
+
/** Wrap the system prompt in a cache_control block for prompt caching. */
|
|
20
|
+
cacheSystemPrompt?: boolean;
|
|
21
|
+
};
|
|
7
22
|
export declare const asReasonText: (value: unknown) => string;
|
|
8
23
|
/**
|
|
9
24
|
* Sends authenticated requests to the Rivet LLM gateway.
|
|
@@ -16,7 +31,14 @@ export declare class GatewayClient {
|
|
|
16
31
|
constructor(gatewayUrl?: string, proxyUrl?: string);
|
|
17
32
|
/** Send a message to the gateway and return the raw text response. */
|
|
18
33
|
sendMessage(options: GatewayRequestOptions): Promise<string>;
|
|
19
|
-
|
|
34
|
+
/**
|
|
35
|
+
* Send a request that forces the model to invoke a single tool, and return
|
|
36
|
+
* the parsed `input` of that tool call. Throws if the model didn't call the
|
|
37
|
+
* tool (which the API guarantees won't happen with `tool_choice: { type:
|
|
38
|
+
* 'tool' }`, but we check anyway).
|
|
39
|
+
*/
|
|
40
|
+
sendToolUse<TInput>(options: GatewayToolUseOptions): Promise<TInput>;
|
|
41
|
+
private postMessages;
|
|
20
42
|
/** Refresh the access token using the stored refresh token. */
|
|
21
43
|
private refreshAccessToken;
|
|
22
44
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GatewayClient.d.ts","sourceRoot":"","sources":["../../src/services/GatewayClient.ts"],"names":[],"mappings":"AAMA,KAAK,qBAAqB,GAAG;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,OAAO,OAAO,KAAG,MAsB7C,CAAC;AAEF;;;GAGG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,aAAa,CAAsB;IAC3C,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAS;gBAEb,UAAU,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM;IAKlD,sEAAsE;IAChE,WAAW,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"GatewayClient.d.ts","sourceRoot":"","sources":["../../src/services/GatewayClient.ts"],"names":[],"mappings":"AAMA,KAAK,qBAAqB,GAAG;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,KAAK,qBAAqB,GAAG;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACtC,MAAM,CAAC,EAAE,OAAO,CAAC;KAClB,CAAC;IACF,0EAA0E;IAC1E,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,OAAO,OAAO,KAAG,MAsB7C,CAAC;AAEF;;;GAGG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,aAAa,CAAsB;IAC3C,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAS;gBAEb,UAAU,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM;IAKlD,sEAAsE;IAChE,WAAW,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC;IAkBlE;;;;;OAKG;IACG,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC;YA0B5D,YAAY;IAmE1B,+DAA+D;YACjD,kBAAkB;CAoCjC"}
|
|
@@ -44,38 +44,73 @@ class GatewayClient {
|
|
|
44
44
|
}
|
|
45
45
|
/** Send a message to the gateway and return the raw text response. */
|
|
46
46
|
async sendMessage(options) {
|
|
47
|
-
|
|
47
|
+
const result = await this.postMessages({
|
|
48
|
+
model: options.model,
|
|
49
|
+
max_tokens: options.maxTokens,
|
|
50
|
+
temperature: options.temperature,
|
|
51
|
+
messages: [{ role: 'user', content: options.prompt }],
|
|
52
|
+
}, 0);
|
|
53
|
+
const content = result.content?.[0]?.text;
|
|
54
|
+
if (!content) {
|
|
55
|
+
throw new Error('No response content from LLM');
|
|
56
|
+
}
|
|
57
|
+
return content;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Send a request that forces the model to invoke a single tool, and return
|
|
61
|
+
* the parsed `input` of that tool call. Throws if the model didn't call the
|
|
62
|
+
* tool (which the API guarantees won't happen with `tool_choice: { type:
|
|
63
|
+
* 'tool' }`, but we check anyway).
|
|
64
|
+
*/
|
|
65
|
+
async sendToolUse(options) {
|
|
66
|
+
const systemContent = options.cacheSystemPrompt
|
|
67
|
+
? [{ type: 'text', text: options.system, cache_control: { type: 'ephemeral' } }]
|
|
68
|
+
: options.system;
|
|
69
|
+
const result = await this.postMessages({
|
|
70
|
+
model: options.model,
|
|
71
|
+
max_tokens: options.maxTokens,
|
|
72
|
+
temperature: options.temperature,
|
|
73
|
+
system: systemContent,
|
|
74
|
+
messages: [{ role: 'user', content: options.prompt }],
|
|
75
|
+
tools: [options.tool],
|
|
76
|
+
tool_choice: { type: 'tool', name: options.tool.name },
|
|
77
|
+
}, 0, { enableCaching: options.cacheSystemPrompt });
|
|
78
|
+
const toolUse = result.content
|
|
79
|
+
?.find((b) => b.type === 'tool_use');
|
|
80
|
+
if (!toolUse || toolUse.input === undefined) {
|
|
81
|
+
throw new Error('Model did not return a tool_use block');
|
|
82
|
+
}
|
|
83
|
+
return toolUse.input;
|
|
48
84
|
}
|
|
49
|
-
async
|
|
85
|
+
async postMessages(body, retryCount, options) {
|
|
50
86
|
const authToken = this.configManager.getAuthToken();
|
|
51
87
|
if (!authToken) {
|
|
52
88
|
throw new Error('Not authenticated. Please run `rivet login` to authenticate.');
|
|
53
89
|
}
|
|
90
|
+
const headers = {
|
|
91
|
+
Authorization: `Bearer ${authToken}`,
|
|
92
|
+
'Content-Type': 'application/json',
|
|
93
|
+
'anthropic-version': '2023-06-01',
|
|
94
|
+
};
|
|
95
|
+
if (options?.enableCaching) {
|
|
96
|
+
headers['anthropic-beta'] = 'prompt-caching-2024-07-31';
|
|
97
|
+
}
|
|
54
98
|
const response = await fetch(`${this.gatewayUrl}/v1/messages`, {
|
|
55
99
|
method: 'POST',
|
|
56
|
-
headers
|
|
57
|
-
|
|
58
|
-
'Content-Type': 'application/json',
|
|
59
|
-
'anthropic-version': '2023-06-01',
|
|
60
|
-
},
|
|
61
|
-
body: JSON.stringify({
|
|
62
|
-
model: options.model,
|
|
63
|
-
max_tokens: options.maxTokens,
|
|
64
|
-
temperature: options.temperature,
|
|
65
|
-
messages: [{ role: 'user', content: options.prompt }],
|
|
66
|
-
}),
|
|
100
|
+
headers,
|
|
101
|
+
body: JSON.stringify({ ...body, service_tier: 'auto' }),
|
|
67
102
|
});
|
|
68
103
|
// Handle 401 — could be token expiry or a spend limit rejection from the gateway
|
|
69
104
|
if (response.status === 401 && retryCount === 0) {
|
|
70
|
-
const
|
|
71
|
-
const reason = (0, exports.asReasonText)(
|
|
105
|
+
const errBody = await response.json().catch(() => ({}));
|
|
106
|
+
const reason = (0, exports.asReasonText)(errBody.message ?? errBody.error ?? errBody);
|
|
72
107
|
if (reason.includes('SPEND_LIMIT_EXCEEDED:')) {
|
|
73
108
|
throw new Error(reason);
|
|
74
109
|
}
|
|
75
110
|
log.warn('Token expired, attempting to refresh...');
|
|
76
111
|
const isRefreshed = await this.refreshAccessToken();
|
|
77
112
|
if (isRefreshed) {
|
|
78
|
-
return this.
|
|
113
|
+
return this.postMessages(body, retryCount + 1, options);
|
|
79
114
|
}
|
|
80
115
|
throw new Error('Authentication expired. Please run `rivet logout` and `rivet login` to re-authenticate.');
|
|
81
116
|
}
|
|
@@ -93,12 +128,7 @@ class GatewayClient {
|
|
|
93
128
|
.catch(() => 'Unable to read error');
|
|
94
129
|
throw new Error(`Gateway request failed (${response.status}): ${errorText}`);
|
|
95
130
|
}
|
|
96
|
-
|
|
97
|
-
const content = result.content?.[0]?.text;
|
|
98
|
-
if (!content) {
|
|
99
|
-
throw new Error('No response content from LLM');
|
|
100
|
-
}
|
|
101
|
-
return content;
|
|
131
|
+
return response.json();
|
|
102
132
|
}
|
|
103
133
|
/** Refresh the access token using the stored refresh token. */
|
|
104
134
|
async refreshAccessToken() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GatewayClient.js","sourceRoot":"","sources":["../../src/services/GatewayClient.ts"],"names":[],"mappings":";;;AAAA,4CAA+C;AAC/C,mDAAmD;AACnD,2CAAyD;AAEzD,MAAM,GAAG,GAAG,IAAA,qBAAY,EAAC,eAAe,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"GatewayClient.js","sourceRoot":"","sources":["../../src/services/GatewayClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,9 +24,16 @@ type GenerateParams = {
|
|
|
24
24
|
instruction: string;
|
|
25
25
|
element: ElementContext;
|
|
26
26
|
variants: VariantInput[];
|
|
27
|
+
/**
|
|
28
|
+
* Diff currently applied to the main project tree (e.g. a finalized variant
|
|
29
|
+
* from another comment). Reversed before worktrees are created so each
|
|
30
|
+
* variant's diff is captured against the user's clean state, then re-applied
|
|
31
|
+
* after generation completes so the iframe doesn't visibly lose state.
|
|
32
|
+
*/
|
|
33
|
+
currentAppliedDiff?: string;
|
|
27
34
|
onEvent: (event: VariantCodeEvent) => void;
|
|
28
35
|
abortController?: AbortController;
|
|
29
36
|
};
|
|
30
|
-
export declare const generateVariantCode: ({ sessionId, projectPath, instruction, element, variants, onEvent, abortController, }: GenerateParams) => Promise<void>;
|
|
37
|
+
export declare const generateVariantCode: ({ sessionId, projectPath, instruction, element, variants, currentAppliedDiff, onEvent, abortController, }: GenerateParams) => Promise<void>;
|
|
31
38
|
export {};
|
|
32
39
|
//# sourceMappingURL=VariantCodeGeneratorService.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VariantCodeGeneratorService.d.ts","sourceRoot":"","sources":["../../src/services/VariantCodeGeneratorService.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"VariantCodeGeneratorService.d.ts","sourceRoot":"","sources":["../../src/services/VariantCodeGeneratorService.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAM5D,MAAM,MAAM,gBAAgB,GACxB;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACjE;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC9D;IAAE,IAAI,EAAE,kBAAkB,CAAA;CAAE,CAAC;AAEjC,KAAK,YAAY,GAAG;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,KAAK,cAAc,GAAG;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,cAAc,CAAC;IACxB,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,OAAO,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC3C,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC,CAAC;AAsCF,eAAO,MAAM,mBAAmB,GAAU,2GASvC,cAAc,KAAG,OAAO,CAAC,IAAI,CAiF/B,CAAC"}
|