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.
Files changed (80) hide show
  1. package/LICENSE.md +674 -0
  2. package/README.md +112 -0
  3. package/bin/rivet.js +27 -0
  4. package/dist/index-core.d.ts +15 -0
  5. package/dist/index-core.d.ts.map +1 -0
  6. package/dist/index-core.js +38 -0
  7. package/dist/index-core.js.map +1 -0
  8. package/dist/index.d.ts +12 -0
  9. package/dist/index.d.ts.map +1 -0
  10. package/dist/index.js +217 -0
  11. package/dist/index.js.map +1 -0
  12. package/dist/routes/components.d.ts +2 -0
  13. package/dist/routes/components.d.ts.map +1 -0
  14. package/dist/routes/components.js +58 -0
  15. package/dist/routes/components.js.map +1 -0
  16. package/dist/routes/git.d.ts +3 -0
  17. package/dist/routes/git.d.ts.map +1 -0
  18. package/dist/routes/git.js +52 -0
  19. package/dist/routes/git.js.map +1 -0
  20. package/dist/routes/modifications.d.ts +3 -0
  21. package/dist/routes/modifications.d.ts.map +1 -0
  22. package/dist/routes/modifications.js +241 -0
  23. package/dist/routes/modifications.js.map +1 -0
  24. package/dist/routes/selection.d.ts +2 -0
  25. package/dist/routes/selection.d.ts.map +1 -0
  26. package/dist/routes/selection.js +38 -0
  27. package/dist/routes/selection.js.map +1 -0
  28. package/dist/scripts/selection-script.js +724 -0
  29. package/dist/server.d.ts +9 -0
  30. package/dist/server.d.ts.map +1 -0
  31. package/dist/server.js +93 -0
  32. package/dist/server.js.map +1 -0
  33. package/dist/services/ComponentSearchService.d.ts +12 -0
  34. package/dist/services/ComponentSearchService.d.ts.map +1 -0
  35. package/dist/services/ComponentSearchService.js +61 -0
  36. package/dist/services/ComponentSearchService.js.map +1 -0
  37. package/dist/services/FileModificationService.d.ts +29 -0
  38. package/dist/services/FileModificationService.d.ts.map +1 -0
  39. package/dist/services/FileModificationService.js +82 -0
  40. package/dist/services/FileModificationService.js.map +1 -0
  41. package/dist/services/LLMService.d.ts +60 -0
  42. package/dist/services/LLMService.d.ts.map +1 -0
  43. package/dist/services/LLMService.js +201 -0
  44. package/dist/services/LLMService.js.map +1 -0
  45. package/dist/services/LocalGitService.d.ts +33 -0
  46. package/dist/services/LocalGitService.d.ts.map +1 -0
  47. package/dist/services/LocalGitService.js +252 -0
  48. package/dist/services/LocalGitService.js.map +1 -0
  49. package/dist/services/ProjectDetectionService.d.ts +26 -0
  50. package/dist/services/ProjectDetectionService.d.ts.map +1 -0
  51. package/dist/services/ProjectDetectionService.js +147 -0
  52. package/dist/services/ProjectDetectionService.js.map +1 -0
  53. package/dist/services/ScriptInjectionService.d.ts +8 -0
  54. package/dist/services/ScriptInjectionService.d.ts.map +1 -0
  55. package/dist/services/ScriptInjectionService.js +178 -0
  56. package/dist/services/ScriptInjectionService.js.map +1 -0
  57. package/dist/services/SessionService.d.ts +26 -0
  58. package/dist/services/SessionService.d.ts.map +1 -0
  59. package/dist/services/SessionService.js +141 -0
  60. package/dist/services/SessionService.js.map +1 -0
  61. package/dist/types/change-types.d.ts +93 -0
  62. package/dist/types/change-types.d.ts.map +1 -0
  63. package/dist/types/change-types.js +4 -0
  64. package/dist/types/change-types.js.map +1 -0
  65. package/dist/types/proxy-types.d.ts +34 -0
  66. package/dist/types/proxy-types.d.ts.map +1 -0
  67. package/dist/types/proxy-types.js +3 -0
  68. package/dist/types/proxy-types.js.map +1 -0
  69. package/dist/types/types.d.ts +15 -0
  70. package/dist/types/types.d.ts.map +1 -0
  71. package/dist/types/types.js +3 -0
  72. package/dist/types/types.js.map +1 -0
  73. package/dist/utils/logger.d.ts +20 -0
  74. package/dist/utils/logger.d.ts.map +1 -0
  75. package/dist/utils/logger.js +51 -0
  76. package/dist/utils/logger.js.map +1 -0
  77. package/package.json +86 -0
  78. package/src/ui/dist/assets/main-DuNgkeFM.js +105 -0
  79. package/src/ui/dist/assets/main-DzZ9GWvo.css +1 -0
  80. 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,2 @@
1
+ export declare const createSelectionRouter: (userDevServerPort: number) => import("express-serve-static-core").Router;
2
+ //# sourceMappingURL=selection.d.ts.map
@@ -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"}