rivet-design 0.1.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/LICENSE.md +674 -0
- package/README.md +112 -0
- package/bin/rivet.js +27 -0
- package/dist/index-core.d.ts +15 -0
- package/dist/index-core.d.ts.map +1 -0
- package/dist/index-core.js +38 -0
- package/dist/index-core.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +217 -0
- package/dist/index.js.map +1 -0
- package/dist/routes/components.d.ts +2 -0
- package/dist/routes/components.d.ts.map +1 -0
- package/dist/routes/components.js +58 -0
- package/dist/routes/components.js.map +1 -0
- package/dist/routes/git.d.ts +3 -0
- package/dist/routes/git.d.ts.map +1 -0
- package/dist/routes/git.js +52 -0
- package/dist/routes/git.js.map +1 -0
- package/dist/routes/modifications.d.ts +3 -0
- package/dist/routes/modifications.d.ts.map +1 -0
- package/dist/routes/modifications.js +241 -0
- package/dist/routes/modifications.js.map +1 -0
- package/dist/routes/selection.d.ts +2 -0
- package/dist/routes/selection.d.ts.map +1 -0
- package/dist/routes/selection.js +38 -0
- package/dist/routes/selection.js.map +1 -0
- package/dist/scripts/selection-script.js +724 -0
- package/dist/server.d.ts +9 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +93 -0
- package/dist/server.js.map +1 -0
- package/dist/services/ComponentSearchService.d.ts +12 -0
- package/dist/services/ComponentSearchService.d.ts.map +1 -0
- package/dist/services/ComponentSearchService.js +61 -0
- package/dist/services/ComponentSearchService.js.map +1 -0
- package/dist/services/FileModificationService.d.ts +29 -0
- package/dist/services/FileModificationService.d.ts.map +1 -0
- package/dist/services/FileModificationService.js +82 -0
- package/dist/services/FileModificationService.js.map +1 -0
- package/dist/services/LLMService.d.ts +60 -0
- package/dist/services/LLMService.d.ts.map +1 -0
- package/dist/services/LLMService.js +201 -0
- package/dist/services/LLMService.js.map +1 -0
- package/dist/services/LocalGitService.d.ts +33 -0
- package/dist/services/LocalGitService.d.ts.map +1 -0
- package/dist/services/LocalGitService.js +252 -0
- package/dist/services/LocalGitService.js.map +1 -0
- package/dist/services/ProjectDetectionService.d.ts +26 -0
- package/dist/services/ProjectDetectionService.d.ts.map +1 -0
- package/dist/services/ProjectDetectionService.js +147 -0
- package/dist/services/ProjectDetectionService.js.map +1 -0
- package/dist/services/ScriptInjectionService.d.ts +8 -0
- package/dist/services/ScriptInjectionService.d.ts.map +1 -0
- package/dist/services/ScriptInjectionService.js +178 -0
- package/dist/services/ScriptInjectionService.js.map +1 -0
- package/dist/services/SessionService.d.ts +26 -0
- package/dist/services/SessionService.d.ts.map +1 -0
- package/dist/services/SessionService.js +141 -0
- package/dist/services/SessionService.js.map +1 -0
- package/dist/types/change-types.d.ts +93 -0
- package/dist/types/change-types.d.ts.map +1 -0
- package/dist/types/change-types.js +4 -0
- package/dist/types/change-types.js.map +1 -0
- package/dist/types/proxy-types.d.ts +34 -0
- package/dist/types/proxy-types.d.ts.map +1 -0
- package/dist/types/proxy-types.js +3 -0
- package/dist/types/proxy-types.js.map +1 -0
- package/dist/types/types.d.ts +15 -0
- package/dist/types/types.d.ts.map +1 -0
- package/dist/types/types.js +3 -0
- package/dist/types/types.js.map +1 -0
- package/dist/utils/logger.d.ts +20 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +51 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +86 -0
- package/src/ui/dist/assets/main-DuNgkeFM.js +105 -0
- package/src/ui/dist/assets/main-DzZ9GWvo.css +1 -0
- package/src/ui/dist/index.html +14 -0
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ABOUTME: Code modification API routes
|
|
3
|
+
// ABOUTME: Handles LLM-powered code changes and file writing operations
|
|
4
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
5
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
6
|
+
};
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.createModificationRouter = void 0;
|
|
9
|
+
const express_1 = require("express");
|
|
10
|
+
const path_1 = __importDefault(require("path"));
|
|
11
|
+
const fs_1 = __importDefault(require("fs"));
|
|
12
|
+
const promises_1 = require("fs/promises");
|
|
13
|
+
const crypto_1 = require("crypto");
|
|
14
|
+
const index_core_1 = require("../index-core");
|
|
15
|
+
const log = (0, index_core_1.createLogger)('ModificationRoutes');
|
|
16
|
+
// Utility for generating simple diffs
|
|
17
|
+
const generateSimpleDiff = (original, modified) => {
|
|
18
|
+
if (original === modified)
|
|
19
|
+
return 'No changes';
|
|
20
|
+
const originalLines = original.split('\n');
|
|
21
|
+
const modifiedLines = modified.split('\n');
|
|
22
|
+
// Simple line-by-line diff (could be enhanced with proper diff library later)
|
|
23
|
+
const maxLines = Math.max(originalLines.length, modifiedLines.length);
|
|
24
|
+
const diffLines = [];
|
|
25
|
+
for (let i = 0; i < maxLines; i++) {
|
|
26
|
+
const origLine = originalLines[i] || '';
|
|
27
|
+
const modLine = modifiedLines[i] || '';
|
|
28
|
+
if (origLine !== modLine) {
|
|
29
|
+
if (origLine)
|
|
30
|
+
diffLines.push(`- ${origLine}`);
|
|
31
|
+
if (modLine)
|
|
32
|
+
diffLines.push(`+ ${modLine}`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return diffLines.length > 0 ? diffLines.join('\n') : 'Content modified';
|
|
36
|
+
};
|
|
37
|
+
// Utility for reading component files with comprehensive error handling
|
|
38
|
+
const readComponentFile = async (filePath) => {
|
|
39
|
+
try {
|
|
40
|
+
const absolutePath = path_1.default.resolve(process.cwd(), filePath);
|
|
41
|
+
const code = fs_1.default.readFileSync(absolutePath, 'utf8');
|
|
42
|
+
log.info(`Read component code from: ${filePath}`);
|
|
43
|
+
return { success: true, code };
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
return {
|
|
47
|
+
success: false,
|
|
48
|
+
error: 'Failed to read component file',
|
|
49
|
+
details: `Could not read file: ${filePath}. ${error instanceof Error ? error.message : 'Unknown error'}`
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
// Utility for processing multi-file modifications with LLM
|
|
54
|
+
const processMultiFileModifications = async (instruction, elements, temperature = 0.7) => {
|
|
55
|
+
try {
|
|
56
|
+
// Group elements by file (filter out elements without filePath)
|
|
57
|
+
const elementsByFile = new Map();
|
|
58
|
+
for (const element of elements) {
|
|
59
|
+
const filePath = element.filePath;
|
|
60
|
+
if (!filePath)
|
|
61
|
+
continue;
|
|
62
|
+
if (!elementsByFile.has(filePath)) {
|
|
63
|
+
elementsByFile.set(filePath, []);
|
|
64
|
+
}
|
|
65
|
+
elementsByFile.get(filePath).push(element);
|
|
66
|
+
}
|
|
67
|
+
const llmService = new index_core_1.LLMService();
|
|
68
|
+
const modifications = [];
|
|
69
|
+
// Process each file independently
|
|
70
|
+
for (const [filePath, fileElements] of elementsByFile) {
|
|
71
|
+
log.info(`Processing file: ${filePath} with ${fileElements.length} elements`);
|
|
72
|
+
const readResult = await readComponentFile(filePath);
|
|
73
|
+
if (!readResult.success) {
|
|
74
|
+
return {
|
|
75
|
+
success: false,
|
|
76
|
+
error: `Failed to read ${filePath}`,
|
|
77
|
+
details: readResult.details
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
// Apply LLM modifications for this file's elements
|
|
81
|
+
const context = fileElements.map(element => ({
|
|
82
|
+
element,
|
|
83
|
+
componentCode: readResult.code,
|
|
84
|
+
fileName: filePath
|
|
85
|
+
}));
|
|
86
|
+
const llmRequest = {
|
|
87
|
+
instruction: `${instruction}\n\nFocus on modifying these specific elements in this file.`,
|
|
88
|
+
context,
|
|
89
|
+
temperature
|
|
90
|
+
};
|
|
91
|
+
const result = await llmService.modifyMultipleElements(llmRequest);
|
|
92
|
+
// Only include if actual changes were made
|
|
93
|
+
if (readResult.code !== result.modifiedCode) {
|
|
94
|
+
modifications.push({
|
|
95
|
+
filePath,
|
|
96
|
+
originalCode: readResult.code,
|
|
97
|
+
modifiedCode: result.modifiedCode,
|
|
98
|
+
changes: result.changes,
|
|
99
|
+
elements: fileElements
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
log.info(`No changes needed for ${filePath}`);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return { success: true, modifications };
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
return {
|
|
110
|
+
success: false,
|
|
111
|
+
error: 'Multi-file modification failed',
|
|
112
|
+
details: error instanceof Error ? error.message : 'Unknown error'
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
// Utility for writing multiple modified files
|
|
117
|
+
const writeModifiedFiles = async (modifications) => {
|
|
118
|
+
await Promise.all(modifications.map(async ({ filePath, modifiedCode }) => {
|
|
119
|
+
const absolutePath = path_1.default.resolve(process.cwd(), filePath);
|
|
120
|
+
await (0, promises_1.writeFile)(absolutePath, modifiedCode, 'utf-8');
|
|
121
|
+
log.info(`Wrote modified code to: ${filePath}`);
|
|
122
|
+
}));
|
|
123
|
+
};
|
|
124
|
+
// Utility for committing multi-file changes with proper change record creation
|
|
125
|
+
const commitMultiFileChanges = async (sessionService, instruction, modifications) => {
|
|
126
|
+
if (!sessionService) {
|
|
127
|
+
log.debug('Git tracking disabled, skipping commit');
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
try {
|
|
131
|
+
// Flatten all elements from all modifications into a single array
|
|
132
|
+
const allElements = modifications.flatMap(mod => mod.elements.map(element => ({
|
|
133
|
+
xpath: element.xpath || '',
|
|
134
|
+
tagName: element.tagName,
|
|
135
|
+
className: element.className || '',
|
|
136
|
+
id: element.id || '',
|
|
137
|
+
textContent: element.textContent || '',
|
|
138
|
+
innerHTML: element.innerHTML || '',
|
|
139
|
+
attributes: element.attributes || {},
|
|
140
|
+
computedStyles: element.computedStyles || {},
|
|
141
|
+
boundingRect: element.boundingRect || {
|
|
142
|
+
x: 0, y: 0, width: 0, height: 0,
|
|
143
|
+
top: 0, left: 0, right: 0, bottom: 0
|
|
144
|
+
},
|
|
145
|
+
filePath: mod.filePath
|
|
146
|
+
})));
|
|
147
|
+
const changeRecord = {
|
|
148
|
+
id: (0, crypto_1.randomUUID)(),
|
|
149
|
+
timestamp: new Date(),
|
|
150
|
+
type: modifications.length > 1 ? 'multi-element' : 'llm',
|
|
151
|
+
description: instruction.substring(0, 100),
|
|
152
|
+
elements: allElements,
|
|
153
|
+
files: modifications.map(mod => ({
|
|
154
|
+
filePath: mod.filePath,
|
|
155
|
+
originalContent: mod.originalCode,
|
|
156
|
+
modifiedContent: mod.modifiedCode,
|
|
157
|
+
diff: generateSimpleDiff(mod.originalCode, mod.modifiedCode)
|
|
158
|
+
}))
|
|
159
|
+
};
|
|
160
|
+
await sessionService.commitModification(changeRecord);
|
|
161
|
+
log.info(`Multi-element modification committed to git (${allElements.length} elements, ${modifications.length} files)`);
|
|
162
|
+
}
|
|
163
|
+
catch (error) {
|
|
164
|
+
log.warn('Failed to commit multi-file modification:', error);
|
|
165
|
+
}
|
|
166
|
+
};
|
|
167
|
+
const createModificationRouter = (sessionService) => {
|
|
168
|
+
const router = (0, express_1.Router)();
|
|
169
|
+
// Code modification endpoint using LLM (handles both single and multiple elements)
|
|
170
|
+
router.post('/modify-code', async (req, res) => {
|
|
171
|
+
try {
|
|
172
|
+
const request = req.body;
|
|
173
|
+
const { instruction, elements, temperature = 0.7 } = request;
|
|
174
|
+
log.info('Code modification requested:', {
|
|
175
|
+
elementCount: elements?.length || 0,
|
|
176
|
+
instructionLength: instruction?.length || 0,
|
|
177
|
+
uniqueFiles: elements ? new Set(elements.map(el => el.filePath)).size : 0
|
|
178
|
+
});
|
|
179
|
+
// Validate request
|
|
180
|
+
if (!elements || !Array.isArray(elements) || elements.length === 0) {
|
|
181
|
+
return res.status(400).json({
|
|
182
|
+
error: 'Elements array is required',
|
|
183
|
+
details: 'request.elements must be a non-empty array of selected elements'
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
if (!instruction?.trim()) {
|
|
187
|
+
return res.status(400).json({
|
|
188
|
+
error: 'Instruction is required',
|
|
189
|
+
details: 'request.instruction must be a non-empty string'
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
// Validate all elements have filePath
|
|
193
|
+
const elementsWithoutPath = elements.filter(el => !el.filePath);
|
|
194
|
+
if (elementsWithoutPath.length > 0) {
|
|
195
|
+
return res.status(400).json({
|
|
196
|
+
error: 'All elements must have filePath',
|
|
197
|
+
details: 'Ensure component search was successful for all selected elements'
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
// Process modifications (single or multiple elements)
|
|
201
|
+
const processResult = await processMultiFileModifications(instruction, elements, temperature);
|
|
202
|
+
if (!processResult.success) {
|
|
203
|
+
return res.status(500).json({
|
|
204
|
+
error: processResult.error,
|
|
205
|
+
details: processResult.details
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
if (processResult.modifications.length === 0) {
|
|
209
|
+
return res.status(400).json({
|
|
210
|
+
error: 'No changes were made',
|
|
211
|
+
details: 'The LLM returned the same code without modifications for all files'
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
// Write all modified files
|
|
215
|
+
await writeModifiedFiles(processResult.modifications);
|
|
216
|
+
// Commit all changes
|
|
217
|
+
await commitMultiFileChanges(sessionService, instruction, processResult.modifications);
|
|
218
|
+
const response = {
|
|
219
|
+
changes: processResult.modifications.length === 1
|
|
220
|
+
? processResult.modifications[0].changes
|
|
221
|
+
: `Modified ${processResult.modifications.length} files with ${elements.length} elements`,
|
|
222
|
+
filesModified: processResult.modifications.map(mod => ({
|
|
223
|
+
filePath: mod.filePath,
|
|
224
|
+
changes: mod.changes
|
|
225
|
+
})),
|
|
226
|
+
totalElements: elements.length
|
|
227
|
+
};
|
|
228
|
+
res.json(response);
|
|
229
|
+
}
|
|
230
|
+
catch (error) {
|
|
231
|
+
log.error('Code modification failed:', error);
|
|
232
|
+
res.status(500).json({
|
|
233
|
+
error: 'Code modification failed',
|
|
234
|
+
details: error instanceof Error ? error.message : 'Unknown error'
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
});
|
|
238
|
+
return router;
|
|
239
|
+
};
|
|
240
|
+
exports.createModificationRouter = createModificationRouter;
|
|
241
|
+
//# sourceMappingURL=modifications.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modifications.js","sourceRoot":"","sources":["../../src/routes/modifications.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selection.d.ts","sourceRoot":"","sources":["../../src/routes/selection.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,qBAAqB,GAAI,mBAAmB,MAAM,+CAwB9D,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ABOUTME: Selection script and configuration API routes
|
|
3
|
+
// ABOUTME: Handles serving the element selection script and runtime configuration
|
|
4
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
5
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
6
|
+
};
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.createSelectionRouter = void 0;
|
|
9
|
+
const express_1 = require("express");
|
|
10
|
+
const fs_1 = __importDefault(require("fs"));
|
|
11
|
+
const path_1 = __importDefault(require("path"));
|
|
12
|
+
const logger_1 = require("../utils/logger");
|
|
13
|
+
const log = (0, logger_1.createLogger)('SelectionRoutes');
|
|
14
|
+
const createSelectionRouter = (userDevServerPort) => {
|
|
15
|
+
const router = (0, express_1.Router)();
|
|
16
|
+
// Configuration endpoint
|
|
17
|
+
router.get('/config', (req, res) => {
|
|
18
|
+
res.json({
|
|
19
|
+
userPort: userDevServerPort
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
// Serve selection script
|
|
23
|
+
router.get('/selection-script', (req, res) => {
|
|
24
|
+
try {
|
|
25
|
+
const scriptPath = path_1.default.join(__dirname, '../scripts/selection-script.js');
|
|
26
|
+
const scriptContent = fs_1.default.readFileSync(scriptPath, 'utf8');
|
|
27
|
+
res.setHeader('Content-Type', 'application/javascript');
|
|
28
|
+
res.send(scriptContent);
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
log.error('Failed to serve selection script:', error);
|
|
32
|
+
res.status(500).send('// Selection script not found');
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
return router;
|
|
36
|
+
};
|
|
37
|
+
exports.createSelectionRouter = createSelectionRouter;
|
|
38
|
+
//# sourceMappingURL=selection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selection.js","sourceRoot":"","sources":["../../src/routes/selection.ts"],"names":[],"mappings":";AAAA,yDAAyD;AACzD,kFAAkF;;;;;;AAElF,qCAAiC;AACjC,4CAAoB;AACpB,gDAAwB;AACxB,4CAA+C;AAE/C,MAAM,GAAG,GAAG,IAAA,qBAAY,EAAC,iBAAiB,CAAC,CAAC;AAErC,MAAM,qBAAqB,GAAG,CAAC,iBAAyB,EAAE,EAAE;IACjE,MAAM,MAAM,GAAG,IAAA,gBAAM,GAAE,CAAC;IAExB,yBAAyB;IACzB,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACjC,GAAG,CAAC,IAAI,CAAC;YACP,QAAQ,EAAE,iBAAiB;SAC5B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,yBAAyB;IACzB,MAAM,CAAC,GAAG,CAAC,mBAAmB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC3C,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,gCAAgC,CAAC,CAAC;YAC1E,MAAM,aAAa,GAAG,YAAE,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YAC1D,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,wBAAwB,CAAC,CAAC;YACxD,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC1B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,GAAG,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;YACtD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QACxD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAxBW,QAAA,qBAAqB,yBAwBhC"}
|