@burdenoff/vibe-agent 1.3.2 → 2.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 (164) hide show
  1. package/dist/app-31chs2a1.js +17180 -0
  2. package/dist/app-31chs2a1.js.map +170 -0
  3. package/dist/chunk-pm1hna8x-473akrq0.js +16826 -0
  4. package/dist/chunk-pm1hna8x-473akrq0.js.map +11 -0
  5. package/dist/cli.js +4686 -1146
  6. package/dist/cli.js.map +51 -1
  7. package/dist/highlights-eq9cgrbb.scm +604 -0
  8. package/dist/highlights-ghv9g403.scm +205 -0
  9. package/dist/highlights-hk7bwhj4.scm +284 -0
  10. package/dist/highlights-r812a2qc.scm +150 -0
  11. package/dist/highlights-x6tmsnaa.scm +115 -0
  12. package/dist/index-5xngv42g.js +2546 -0
  13. package/dist/index-5xngv42g.js.map +26 -0
  14. package/dist/index-6aq4nc58.js +11429 -0
  15. package/dist/index-6aq4nc58.js.map +21 -0
  16. package/dist/index-ac2ebaf8.js +4 -0
  17. package/dist/index-ac2ebaf8.js.map +9 -0
  18. package/dist/index-g8dczzvv.js +33 -0
  19. package/dist/index-g8dczzvv.js.map +9 -0
  20. package/dist/index-gmz54dkc.js +28402 -0
  21. package/dist/index-gmz54dkc.js.map +11 -0
  22. package/dist/index-t06ktmx9.js +216 -0
  23. package/dist/index-t06ktmx9.js.map +11 -0
  24. package/dist/index.js +69 -87
  25. package/dist/index.js.map +10 -1
  26. package/dist/injections-73j83es3.scm +27 -0
  27. package/dist/package-0158fp3w.js +136 -0
  28. package/dist/package-0158fp3w.js.map +9 -0
  29. package/dist/plugin-system-bg1pzjj9.js +453 -0
  30. package/dist/plugin-system-bg1pzjj9.js.map +11 -0
  31. package/dist/tree-sitter-javascript-nd0q4pe9.wasm +0 -0
  32. package/dist/tree-sitter-markdown-411r6y9b.wasm +0 -0
  33. package/dist/tree-sitter-markdown_inline-j5349f42.wasm +0 -0
  34. package/dist/tree-sitter-typescript-zxjzwt75.wasm +0 -0
  35. package/dist/tree-sitter-zig-e78zbjpm.wasm +0 -0
  36. package/package.json +33 -44
  37. package/dist/app.d.ts +0 -15
  38. package/dist/app.d.ts.map +0 -1
  39. package/dist/app.js +0 -600
  40. package/dist/app.js.map +0 -1
  41. package/dist/cli.d.ts +0 -3
  42. package/dist/cli.d.ts.map +0 -1
  43. package/dist/db/schema.d.ts +0 -121
  44. package/dist/db/schema.d.ts.map +0 -1
  45. package/dist/db/schema.js +0 -473
  46. package/dist/db/schema.js.map +0 -1
  47. package/dist/index.d.ts +0 -2
  48. package/dist/index.d.ts.map +0 -1
  49. package/dist/middleware/ModuleAuth.d.ts +0 -61
  50. package/dist/middleware/ModuleAuth.d.ts.map +0 -1
  51. package/dist/middleware/ModuleAuth.js +0 -223
  52. package/dist/middleware/ModuleAuth.js.map +0 -1
  53. package/dist/middleware/auth.d.ts +0 -3
  54. package/dist/middleware/auth.d.ts.map +0 -1
  55. package/dist/middleware/auth.js +0 -11
  56. package/dist/middleware/auth.js.map +0 -1
  57. package/dist/migrations/remove-notes-prompts.d.ts +0 -13
  58. package/dist/migrations/remove-notes-prompts.d.ts.map +0 -1
  59. package/dist/migrations/remove-notes-prompts.js +0 -148
  60. package/dist/migrations/remove-notes-prompts.js.map +0 -1
  61. package/dist/routes/bookmarks.d.ts +0 -3
  62. package/dist/routes/bookmarks.d.ts.map +0 -1
  63. package/dist/routes/bookmarks.js +0 -195
  64. package/dist/routes/bookmarks.js.map +0 -1
  65. package/dist/routes/config.d.ts +0 -3
  66. package/dist/routes/config.d.ts.map +0 -1
  67. package/dist/routes/config.js +0 -106
  68. package/dist/routes/config.js.map +0 -1
  69. package/dist/routes/files.d.ts +0 -3
  70. package/dist/routes/files.d.ts.map +0 -1
  71. package/dist/routes/files.js +0 -313
  72. package/dist/routes/files.js.map +0 -1
  73. package/dist/routes/git.d.ts +0 -3
  74. package/dist/routes/git.d.ts.map +0 -1
  75. package/dist/routes/git.js +0 -427
  76. package/dist/routes/git.js.map +0 -1
  77. package/dist/routes/logs.d.ts +0 -9
  78. package/dist/routes/logs.d.ts.map +0 -1
  79. package/dist/routes/logs.js +0 -107
  80. package/dist/routes/logs.js.map +0 -1
  81. package/dist/routes/moduleRegistry.d.ts +0 -41
  82. package/dist/routes/moduleRegistry.d.ts.map +0 -1
  83. package/dist/routes/moduleRegistry.js +0 -356
  84. package/dist/routes/moduleRegistry.js.map +0 -1
  85. package/dist/routes/notifications.d.ts +0 -3
  86. package/dist/routes/notifications.d.ts.map +0 -1
  87. package/dist/routes/notifications.js +0 -255
  88. package/dist/routes/notifications.js.map +0 -1
  89. package/dist/routes/plugin-state.d.ts +0 -19
  90. package/dist/routes/plugin-state.d.ts.map +0 -1
  91. package/dist/routes/plugin-state.js +0 -139
  92. package/dist/routes/plugin-state.js.map +0 -1
  93. package/dist/routes/plugins.d.ts +0 -3
  94. package/dist/routes/plugins.d.ts.map +0 -1
  95. package/dist/routes/plugins.js +0 -118
  96. package/dist/routes/plugins.js.map +0 -1
  97. package/dist/routes/projects.d.ts +0 -3
  98. package/dist/routes/projects.d.ts.map +0 -1
  99. package/dist/routes/projects.js +0 -456
  100. package/dist/routes/projects.js.map +0 -1
  101. package/dist/routes/tasks.d.ts +0 -3
  102. package/dist/routes/tasks.d.ts.map +0 -1
  103. package/dist/routes/tasks.js +0 -187
  104. package/dist/routes/tasks.js.map +0 -1
  105. package/dist/routes/tmux.d.ts +0 -3
  106. package/dist/routes/tmux.d.ts.map +0 -1
  107. package/dist/routes/tmux.js +0 -1287
  108. package/dist/routes/tmux.js.map +0 -1
  109. package/dist/routes/tunnel.d.ts +0 -25
  110. package/dist/routes/tunnel.d.ts.map +0 -1
  111. package/dist/routes/tunnel.js +0 -498
  112. package/dist/routes/tunnel.js.map +0 -1
  113. package/dist/services/ModulePermissions.d.ts +0 -100
  114. package/dist/services/ModulePermissions.d.ts.map +0 -1
  115. package/dist/services/ModulePermissions.js +0 -322
  116. package/dist/services/ModulePermissions.js.map +0 -1
  117. package/dist/services/ModuleRegistryService.d.ts +0 -152
  118. package/dist/services/ModuleRegistryService.d.ts.map +0 -1
  119. package/dist/services/ModuleRegistryService.js +0 -547
  120. package/dist/services/ModuleRegistryService.js.map +0 -1
  121. package/dist/services/agent.service.d.ts +0 -19
  122. package/dist/services/agent.service.d.ts.map +0 -1
  123. package/dist/services/agent.service.js +0 -91
  124. package/dist/services/agent.service.js.map +0 -1
  125. package/dist/services/bootstrap.d.ts +0 -22
  126. package/dist/services/bootstrap.d.ts.map +0 -1
  127. package/dist/services/bootstrap.js +0 -283
  128. package/dist/services/bootstrap.js.map +0 -1
  129. package/dist/services/completion.d.ts +0 -46
  130. package/dist/services/completion.d.ts.map +0 -1
  131. package/dist/services/completion.js +0 -317
  132. package/dist/services/completion.js.map +0 -1
  133. package/dist/services/gateway-client.d.ts +0 -61
  134. package/dist/services/gateway-client.d.ts.map +0 -1
  135. package/dist/services/gateway-client.js +0 -147
  136. package/dist/services/gateway-client.js.map +0 -1
  137. package/dist/services/logger.d.ts +0 -61
  138. package/dist/services/logger.d.ts.map +0 -1
  139. package/dist/services/logger.js +0 -223
  140. package/dist/services/logger.js.map +0 -1
  141. package/dist/services/plugin-manager.d.ts +0 -105
  142. package/dist/services/plugin-manager.d.ts.map +0 -1
  143. package/dist/services/plugin-manager.js +0 -250
  144. package/dist/services/plugin-manager.js.map +0 -1
  145. package/dist/services/plugin-state-backend.d.ts +0 -22
  146. package/dist/services/plugin-state-backend.d.ts.map +0 -1
  147. package/dist/services/plugin-state-backend.js +0 -103
  148. package/dist/services/plugin-state-backend.js.map +0 -1
  149. package/dist/services/plugin-state-external.d.ts +0 -36
  150. package/dist/services/plugin-state-external.d.ts.map +0 -1
  151. package/dist/services/plugin-state-external.js +0 -144
  152. package/dist/services/plugin-state-external.js.map +0 -1
  153. package/dist/services/plugin-state-router.d.ts +0 -40
  154. package/dist/services/plugin-state-router.d.ts.map +0 -1
  155. package/dist/services/plugin-state-router.js +0 -82
  156. package/dist/services/plugin-state-router.js.map +0 -1
  157. package/dist/services/port-utils.d.ts +0 -11
  158. package/dist/services/port-utils.d.ts.map +0 -1
  159. package/dist/services/port-utils.js +0 -39
  160. package/dist/services/port-utils.js.map +0 -1
  161. package/dist/services/service-manager.d.ts +0 -50
  162. package/dist/services/service-manager.d.ts.map +0 -1
  163. package/dist/services/service-manager.js +0 -389
  164. package/dist/services/service-manager.js.map +0 -1
@@ -1,456 +0,0 @@
1
- import { promises as fs } from "fs";
2
- import path from "path";
3
- // Security function to check if a path is allowed for scanning
4
- function isAllowedPath(scanPath) {
5
- const normalizedPath = path.resolve(scanPath);
6
- // List of forbidden paths (system directories)
7
- const forbiddenPaths = [
8
- "/System",
9
- "/usr",
10
- "/bin",
11
- "/sbin",
12
- "/etc",
13
- "/var/root",
14
- "/private/var/root",
15
- "/Library/Application Support",
16
- "/private/var/db",
17
- "/private/var/install",
18
- "/private/var/tmp",
19
- "/tmp",
20
- "/Windows",
21
- "/Program Files",
22
- "/Program Files (x86)",
23
- "C:\\Windows",
24
- "C:\\Program Files",
25
- "C:\\Program Files (x86)",
26
- ];
27
- // Check if the path starts with any forbidden directory
28
- for (const forbiddenPath of forbiddenPaths) {
29
- if (normalizedPath.startsWith(forbiddenPath)) {
30
- return false;
31
- }
32
- }
33
- // Only allow paths under common user directories
34
- const allowedPrefixes = [
35
- "/Users",
36
- "/home",
37
- "/opt",
38
- process.env.HOME || "",
39
- "C:\\Users",
40
- "D:\\",
41
- "E:\\",
42
- ].filter(Boolean);
43
- return allowedPrefixes.some((prefix) => normalizedPath.startsWith(prefix));
44
- }
45
- // Function to parse .gitignore patterns
46
- function parseGitignore(gitignoreContent) {
47
- return gitignoreContent
48
- .split("\n")
49
- .map((line) => line.trim())
50
- .filter((line) => line && !line.startsWith("#"))
51
- .map((line) => {
52
- // Remove leading slash
53
- if (line.startsWith("/")) {
54
- line = line.slice(1);
55
- }
56
- return line;
57
- });
58
- }
59
- // Function to check if a path should be ignored based on .gitignore patterns
60
- function shouldIgnoreByGitignore(relativePath, patterns, _basePath) {
61
- for (const pattern of patterns) {
62
- // Simple pattern matching - could be enhanced with proper glob matching
63
- if (pattern.endsWith("/")) {
64
- // Directory pattern
65
- const dirPattern = pattern.slice(0, -1);
66
- if (relativePath === dirPattern ||
67
- relativePath.startsWith(dirPattern + "/")) {
68
- return true;
69
- }
70
- }
71
- else if (pattern.includes("*")) {
72
- // Wildcard pattern - basic implementation
73
- const regexPattern = pattern.replace(/\./g, "\\.").replace(/\*/g, ".*");
74
- const regex = new RegExp(`^${regexPattern}$`);
75
- if (regex.test(relativePath)) {
76
- return true;
77
- }
78
- }
79
- else {
80
- // Exact match or starts with pattern
81
- if (relativePath === pattern || relativePath.startsWith(pattern + "/")) {
82
- return true;
83
- }
84
- }
85
- }
86
- return false;
87
- }
88
- // Function to collect .gitignore patterns from all parent directories
89
- async function collectGitignorePatterns(startPath, targetPath) {
90
- const patterns = new Map();
91
- let currentPath = targetPath;
92
- while (currentPath.startsWith(startPath)) {
93
- try {
94
- const gitignorePath = path.join(currentPath, ".gitignore");
95
- const gitignoreContent = await fs.readFile(gitignorePath, "utf-8");
96
- const pathPatterns = parseGitignore(gitignoreContent);
97
- if (pathPatterns.length > 0) {
98
- patterns.set(currentPath, pathPatterns);
99
- }
100
- }
101
- catch (error) {
102
- // .gitignore doesn't exist in this directory, continue
103
- }
104
- const parentPath = path.dirname(currentPath);
105
- if (parentPath === currentPath)
106
- break; // Reached root
107
- currentPath = parentPath;
108
- }
109
- return patterns;
110
- }
111
- export const projectRoutes = async (fastify) => {
112
- // Scan local projects
113
- fastify.post("/scan", async (request, reply) => {
114
- const { recursive = false, scanPath, respectGitignore = true, } = request.body;
115
- try {
116
- console.log("Scanning projects...", {
117
- recursive,
118
- scanPath,
119
- respectGitignore,
120
- });
121
- // Require scanPath to be provided - no default scanning
122
- if (!scanPath) {
123
- return reply.code(400).send({
124
- error: "scanPath is required",
125
- success: false,
126
- });
127
- }
128
- // Security check - prevent directory traversal
129
- const normalizedPath = path.normalize(scanPath);
130
- if (normalizedPath.includes("..")) {
131
- return reply.code(403).send({
132
- error: "Directory traversal not allowed",
133
- success: false,
134
- });
135
- }
136
- // Additional security checks
137
- if (!isAllowedPath(normalizedPath)) {
138
- return reply.code(403).send({
139
- error: "Access to this path is not allowed",
140
- success: false,
141
- });
142
- }
143
- const projects = await scanForProjects(normalizedPath, recursive, respectGitignore);
144
- // Emit project scan event
145
- fastify.io.emit("projects:scanned", {
146
- path: normalizedPath,
147
- count: projects.length,
148
- recursive,
149
- });
150
- return {
151
- projects,
152
- success: true,
153
- count: projects.length,
154
- };
155
- }
156
- catch (error) {
157
- console.error("Error scanning projects:", error);
158
- return reply.code(500).send({
159
- error: "Failed to scan projects",
160
- details: error instanceof Error ? error.message : "Unknown error",
161
- success: false,
162
- });
163
- }
164
- });
165
- // Scan remote projects
166
- fastify.post("/scan-remote", async (request, reply) => {
167
- const { recursive = false, scanPath, respectGitignore = true, } = request.body;
168
- try {
169
- console.log("Scanning remote projects...", {
170
- recursive,
171
- scanPath,
172
- respectGitignore,
173
- });
174
- // Require scanPath to be provided - no default scanning
175
- if (!scanPath) {
176
- return reply.code(400).send({
177
- error: "scanPath is required for remote scanning",
178
- success: false,
179
- });
180
- }
181
- // Security check - prevent directory traversal
182
- const normalizedPath = path.normalize(scanPath);
183
- if (normalizedPath.includes("..")) {
184
- return reply.code(403).send({
185
- error: "Directory traversal not allowed",
186
- success: false,
187
- });
188
- }
189
- // Additional security checks
190
- if (!isAllowedPath(normalizedPath)) {
191
- return reply.code(403).send({
192
- error: "Access to this path is not allowed",
193
- success: false,
194
- });
195
- }
196
- // For now, return empty array as this requires SSH setup
197
- // TODO: Implement remote scanning via SSH
198
- const projects = [];
199
- // Emit remote project scan event
200
- fastify.io.emit("projects:remote-scanned", {
201
- path: normalizedPath,
202
- count: projects.length,
203
- recursive,
204
- });
205
- return {
206
- projects,
207
- success: true,
208
- count: projects.length,
209
- message: "Remote scanning not yet implemented",
210
- };
211
- }
212
- catch (error) {
213
- console.error("Error scanning remote projects:", error);
214
- return reply.code(500).send({
215
- error: "Failed to scan remote projects",
216
- details: error instanceof Error ? error.message : "Unknown error",
217
- success: false,
218
- });
219
- }
220
- });
221
- // Get all projects (mock for now)
222
- fastify.get("/", async (request, reply) => {
223
- const { includeNested } = request.query;
224
- try {
225
- // For now, return empty array as this would come from database
226
- const projects = [];
227
- return projects;
228
- }
229
- catch (error) {
230
- console.error("Error getting projects:", error);
231
- return reply.code(500).send({
232
- error: "Failed to get projects",
233
- details: error instanceof Error ? error.message : "Unknown error",
234
- });
235
- }
236
- });
237
- // Create project (mock for now)
238
- fastify.post("/", async (request, reply) => {
239
- const projectData = request.body;
240
- try {
241
- // For now, just return success
242
- const id = `project-${Date.now()}`;
243
- return {
244
- id,
245
- success: true,
246
- };
247
- }
248
- catch (error) {
249
- console.error("Error creating project:", error);
250
- return reply.code(500).send({
251
- error: "Failed to create project",
252
- details: error instanceof Error ? error.message : "Unknown error",
253
- });
254
- }
255
- });
256
- // Update project (mock for now)
257
- fastify.put("/:id", async (request, reply) => {
258
- const { id } = request.params;
259
- const updates = request.body;
260
- try {
261
- // For now, just return success
262
- return {
263
- success: true,
264
- changes: 1,
265
- };
266
- }
267
- catch (error) {
268
- console.error("Error updating project:", error);
269
- return reply.code(500).send({
270
- error: "Failed to update project",
271
- details: error instanceof Error ? error.message : "Unknown error",
272
- });
273
- }
274
- });
275
- };
276
- // Helper function to scan for projects
277
- async function scanForProjects(basePath, recursive, respectGitignore = true) {
278
- const projects = [];
279
- // Collect .gitignore patterns if respectGitignore is enabled
280
- let gitignorePatterns = new Map();
281
- if (respectGitignore) {
282
- gitignorePatterns = await collectGitignorePatterns(basePath, basePath);
283
- }
284
- try {
285
- const entries = await fs.readdir(basePath, { withFileTypes: true });
286
- for (const entry of entries) {
287
- if (!entry.isDirectory())
288
- continue;
289
- const fullPath = path.join(basePath, entry.name);
290
- // Skip hidden directories and node_modules
291
- if (entry.name.startsWith(".") || entry.name === "node_modules") {
292
- continue;
293
- }
294
- // Check if directory should be ignored by .gitignore
295
- if (respectGitignore && gitignorePatterns.size > 0) {
296
- let shouldIgnore = false;
297
- // Check against all collected .gitignore patterns
298
- for (const [patternBasePath, patterns] of Array.from(gitignorePatterns)) {
299
- if (fullPath.startsWith(patternBasePath)) {
300
- const relativePath = path.relative(patternBasePath, fullPath);
301
- if (shouldIgnoreByGitignore(relativePath, patterns, patternBasePath)) {
302
- shouldIgnore = true;
303
- break;
304
- }
305
- }
306
- }
307
- if (shouldIgnore) {
308
- console.log(`Skipping directory ${entry.name} due to .gitignore`);
309
- continue;
310
- }
311
- }
312
- // Check if this directory is a project
313
- const project = await detectProject(fullPath, entry.name);
314
- if (project) {
315
- projects.push(project);
316
- }
317
- // If recursive, scan subdirectories
318
- if (recursive) {
319
- try {
320
- const subProjects = await scanForProjects(fullPath, true, respectGitignore);
321
- projects.push(...subProjects);
322
- }
323
- catch (error) {
324
- // Ignore errors in subdirectories
325
- console.warn(`Failed to scan subdirectory ${fullPath}:`, error);
326
- }
327
- }
328
- }
329
- }
330
- catch (error) {
331
- console.error(`Failed to scan directory ${basePath}:`, error);
332
- }
333
- return projects;
334
- }
335
- // Helper function to detect if a directory is a project
336
- async function detectProject(dirPath, dirName) {
337
- try {
338
- const files = await fs.readdir(dirPath);
339
- // Check for common project indicators
340
- let hasPackageJson = files.includes("package.json");
341
- const hasPyproject = files.includes("pyproject.toml");
342
- const hasRequirements = files.includes("requirements.txt");
343
- const hasCargoToml = files.includes("Cargo.toml");
344
- const hasGitDir = files.includes(".git");
345
- const hasDockerfile = files.includes("Dockerfile");
346
- const hasMakefile = files.includes("Makefile");
347
- // If it doesn't look like a project, skip it
348
- if (!hasPackageJson &&
349
- !hasPyproject &&
350
- !hasRequirements &&
351
- !hasCargoToml &&
352
- !hasGitDir) {
353
- return null;
354
- }
355
- let projectType = "unknown";
356
- let vitePort;
357
- // Determine project type
358
- if (hasPackageJson) {
359
- try {
360
- const packageJsonPath = path.join(dirPath, "package.json");
361
- const packageJsonContent = await fs.readFile(packageJsonPath, "utf-8");
362
- // Check if the file is empty or invalid
363
- if (!packageJsonContent.trim()) {
364
- console.warn(`Empty package.json file found at ${packageJsonPath}`);
365
- hasPackageJson = false;
366
- }
367
- else {
368
- const packageJson = JSON.parse(packageJsonContent);
369
- if (packageJson.dependencies?.vite ||
370
- packageJson.devDependencies?.vite) {
371
- projectType = "vite";
372
- // Try to detect port from vite config or scripts
373
- vitePort = extractVitePort(packageJson);
374
- }
375
- else if (packageJson.dependencies?.react ||
376
- packageJson.devDependencies?.react) {
377
- projectType = "react";
378
- }
379
- else if (packageJson.dependencies?.next ||
380
- packageJson.devDependencies?.next) {
381
- projectType = "nextjs";
382
- }
383
- else if (packageJson.dependencies?.express) {
384
- projectType = "express";
385
- }
386
- else if (packageJson.dependencies?.fastify) {
387
- projectType = "fastify";
388
- }
389
- else {
390
- projectType = "nodejs";
391
- }
392
- }
393
- }
394
- catch (error) {
395
- console.warn(`Failed to parse package.json in ${dirPath}:`, error);
396
- projectType = "nodejs";
397
- }
398
- }
399
- else if (hasPyproject || hasRequirements) {
400
- projectType = "python";
401
- }
402
- else if (hasCargoToml) {
403
- projectType = "rust";
404
- }
405
- // Get directory stats
406
- const stats = await fs.stat(dirPath);
407
- // Create project object
408
- const project = {
409
- id: `local-${Buffer.from(dirPath).toString("base64").slice(0, 8)}-${Date.now()}`,
410
- name: dirName,
411
- path: dirPath,
412
- type: projectType,
413
- lastUpdated: stats.mtime.getTime(),
414
- lastFileChange: stats.mtime.getTime(),
415
- status: "INACTIVE",
416
- isRemote: false,
417
- tags: [projectType],
418
- };
419
- if (vitePort) {
420
- project.vitePort = vitePort;
421
- }
422
- // Check if it's a git repository
423
- if (hasGitDir) {
424
- try {
425
- const gitConfigPath = path.join(dirPath, ".git", "config");
426
- const gitConfig = await fs.readFile(gitConfigPath, "utf-8");
427
- const remoteMatch = gitConfig.match(/url = (.+)/);
428
- if (remoteMatch) {
429
- project.repository = remoteMatch[1].trim();
430
- }
431
- }
432
- catch (error) {
433
- // Ignore git config errors
434
- }
435
- }
436
- return project;
437
- }
438
- catch (error) {
439
- console.error(`Failed to detect project in ${dirPath}:`, error);
440
- return null;
441
- }
442
- }
443
- // Helper function to extract Vite port from package.json
444
- function extractVitePort(packageJson) {
445
- // Check dev script for port
446
- const devScript = packageJson.scripts?.dev;
447
- if (devScript && typeof devScript === "string") {
448
- const portMatch = devScript.match(/--port[=\s]+(\d+)/);
449
- if (portMatch) {
450
- return parseInt(portMatch[1], 10);
451
- }
452
- }
453
- // Default Vite port
454
- return undefined;
455
- }
456
- //# sourceMappingURL=projects.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/routes/projects.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import { FastifyPluginAsync } from "fastify";
2
- export declare const taskRoutes: FastifyPluginAsync;
3
- //# sourceMappingURL=tasks.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../src/routes/tasks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAsB7C,eAAO,MAAM,UAAU,EAAE,kBAuFxB,CAAC"}
@@ -1,187 +0,0 @@
1
- import crypto from "node:crypto";
2
- import { exec } from "child_process";
3
- import { promisify } from "util";
4
- const execAsync = promisify(exec);
5
- export const taskRoutes = async (fastify) => {
6
- // Get all tasks
7
- fastify.get("/", async (request, _reply) => {
8
- const { status } = request.query;
9
- if (status === "pending") {
10
- const tasks = fastify.db.getPendingTasks();
11
- return { tasks };
12
- }
13
- // For now, return pending tasks by default
14
- // In a real implementation, you'd want to add methods to get all tasks with pagination
15
- const tasks = fastify.db.getPendingTasks();
16
- return { tasks };
17
- });
18
- // Get task by ID
19
- fastify.get("/:id", async (request, reply) => {
20
- const { id } = request.params;
21
- const task = fastify.db.getTask(id);
22
- if (!task) {
23
- return reply.code(404).send({ error: "Task not found" });
24
- }
25
- return { task };
26
- });
27
- // Create new task
28
- fastify.post("/", async (request, reply) => {
29
- const { type, payload } = request.body;
30
- try {
31
- const task = fastify.db.createTask({
32
- id: crypto.randomUUID(),
33
- type,
34
- status: "pending",
35
- payload: JSON.stringify(payload),
36
- });
37
- // Emit task created event
38
- fastify.io.emit("task:created", task);
39
- // Process task asynchronously
40
- processTask(fastify, task);
41
- return { task };
42
- }
43
- catch (error) {
44
- return reply.code(500).send({
45
- error: "Failed to create task",
46
- details: error instanceof Error ? error.message : "Unknown error",
47
- });
48
- }
49
- });
50
- // Cancel task
51
- fastify.post("/:id/cancel", async (request, reply) => {
52
- const { id } = request.params;
53
- try {
54
- const task = fastify.db.getTask(id);
55
- if (!task) {
56
- return reply.code(404).send({ error: "Task not found" });
57
- }
58
- if (task.status !== "pending") {
59
- return reply
60
- .code(400)
61
- .send({ error: "Only pending tasks can be cancelled" });
62
- }
63
- fastify.db.updateTask(id, {
64
- status: "failed",
65
- error: "Task cancelled by user",
66
- });
67
- // Emit task cancelled event
68
- fastify.io.emit("task:cancelled", { id });
69
- return { success: true };
70
- }
71
- catch (error) {
72
- return reply.code(500).send({
73
- error: "Failed to cancel task",
74
- details: error instanceof Error ? error.message : "Unknown error",
75
- });
76
- }
77
- });
78
- };
79
- // Process task asynchronously
80
- async function processTask(fastify, task) {
81
- try {
82
- // Update task status to running
83
- fastify.db.updateTask(task.id, { status: "running" });
84
- fastify.io.emit("task:started", { id: task.id });
85
- const payload = JSON.parse(task.payload);
86
- let result;
87
- switch (task.type) {
88
- case "command":
89
- result = await executeCommand(payload);
90
- break;
91
- case "script":
92
- result = await executeScript(payload);
93
- break;
94
- case "file_operation":
95
- result = await executeFileOperation(payload);
96
- break;
97
- default:
98
- throw new Error(`Unknown task type: ${task.type}`);
99
- }
100
- // Update task with result
101
- fastify.db.updateTask(task.id, {
102
- status: "completed",
103
- result: JSON.stringify(result),
104
- });
105
- // Emit task completed event
106
- fastify.io.emit("task:completed", {
107
- id: task.id,
108
- result,
109
- });
110
- }
111
- catch (error) {
112
- // Update task with error
113
- fastify.db.updateTask(task.id, {
114
- status: "failed",
115
- error: error instanceof Error ? error.message : "Unknown error",
116
- });
117
- // Emit task failed event
118
- fastify.io.emit("task:failed", {
119
- id: task.id,
120
- error: error instanceof Error ? error.message : "Unknown error",
121
- });
122
- }
123
- }
124
- // Execute command
125
- async function executeCommand(payload) {
126
- const { command, cwd, env } = payload;
127
- const { stdout, stderr } = await execAsync(command, {
128
- cwd,
129
- env: { ...process.env, ...env },
130
- });
131
- return { stdout, stderr };
132
- }
133
- // Execute script
134
- async function executeScript(payload) {
135
- const { script, interpreter = "bash", cwd } = payload;
136
- // Write script to temporary file
137
- const fs = await import("fs/promises");
138
- const path = await import("path");
139
- const os = await import("os");
140
- const tmpDir = os.tmpdir();
141
- const scriptFile = path.join(tmpDir, `vibecontrols-script-${Date.now()}.sh`);
142
- await fs.writeFile(scriptFile, script, { mode: 0o755 });
143
- try {
144
- const { stdout, stderr } = await execAsync(`${interpreter} ${scriptFile}`, {
145
- cwd,
146
- });
147
- return { stdout, stderr };
148
- }
149
- finally {
150
- // Clean up
151
- await fs.unlink(scriptFile).catch(() => { });
152
- }
153
- }
154
- // Execute file operation
155
- async function executeFileOperation(payload) {
156
- const fs = await import("fs/promises");
157
- const { operation, path, content } = payload;
158
- switch (operation) {
159
- case "read": {
160
- const data = await fs.readFile(path, "utf-8");
161
- return { content: data };
162
- }
163
- case "write":
164
- if (!content)
165
- throw new Error("Content is required for write operation");
166
- await fs.writeFile(path, content);
167
- return { success: true };
168
- case "delete":
169
- await fs.unlink(path);
170
- return { success: true };
171
- case "exists":
172
- try {
173
- await fs.access(path);
174
- return { exists: true };
175
- }
176
- catch {
177
- return { exists: false };
178
- }
179
- case "list": {
180
- const files = await fs.readdir(path);
181
- return { files };
182
- }
183
- default:
184
- throw new Error(`Unknown file operation: ${operation}`);
185
- }
186
- }
187
- //# sourceMappingURL=tasks.js.map