@burdenoff/vibe-agent 1.0.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 (100) hide show
  1. package/.env.example +8 -0
  2. package/LICENSE +22 -0
  3. package/README.md +290 -0
  4. package/dist/app.d.ts +15 -0
  5. package/dist/app.d.ts.map +1 -0
  6. package/dist/app.js +445 -0
  7. package/dist/app.js.map +1 -0
  8. package/dist/cli.d.ts +3 -0
  9. package/dist/cli.d.ts.map +1 -0
  10. package/dist/cli.js +1043 -0
  11. package/dist/cli.js.map +1 -0
  12. package/dist/db/schema.d.ts +145 -0
  13. package/dist/db/schema.d.ts.map +1 -0
  14. package/dist/db/schema.js +536 -0
  15. package/dist/db/schema.js.map +1 -0
  16. package/dist/index.d.ts +2 -0
  17. package/dist/index.d.ts.map +1 -0
  18. package/dist/index.js +61 -0
  19. package/dist/index.js.map +1 -0
  20. package/dist/middleware/ModuleAuth.d.ts +61 -0
  21. package/dist/middleware/ModuleAuth.d.ts.map +1 -0
  22. package/dist/middleware/ModuleAuth.js +220 -0
  23. package/dist/middleware/ModuleAuth.js.map +1 -0
  24. package/dist/middleware/auth.d.ts +3 -0
  25. package/dist/middleware/auth.d.ts.map +1 -0
  26. package/dist/middleware/auth.js +11 -0
  27. package/dist/middleware/auth.js.map +1 -0
  28. package/dist/migrations/remove-notes-prompts.d.ts +13 -0
  29. package/dist/migrations/remove-notes-prompts.d.ts.map +1 -0
  30. package/dist/migrations/remove-notes-prompts.js +148 -0
  31. package/dist/migrations/remove-notes-prompts.js.map +1 -0
  32. package/dist/routes/bookmarks.d.ts +3 -0
  33. package/dist/routes/bookmarks.d.ts.map +1 -0
  34. package/dist/routes/bookmarks.js +186 -0
  35. package/dist/routes/bookmarks.js.map +1 -0
  36. package/dist/routes/config.d.ts +3 -0
  37. package/dist/routes/config.d.ts.map +1 -0
  38. package/dist/routes/config.js +108 -0
  39. package/dist/routes/config.js.map +1 -0
  40. package/dist/routes/files.d.ts +3 -0
  41. package/dist/routes/files.d.ts.map +1 -0
  42. package/dist/routes/files.js +471 -0
  43. package/dist/routes/files.js.map +1 -0
  44. package/dist/routes/git.d.ts +3 -0
  45. package/dist/routes/git.d.ts.map +1 -0
  46. package/dist/routes/git.js +498 -0
  47. package/dist/routes/git.js.map +1 -0
  48. package/dist/routes/moduleRegistry.d.ts +41 -0
  49. package/dist/routes/moduleRegistry.d.ts.map +1 -0
  50. package/dist/routes/moduleRegistry.js +356 -0
  51. package/dist/routes/moduleRegistry.js.map +1 -0
  52. package/dist/routes/notifications.d.ts +3 -0
  53. package/dist/routes/notifications.d.ts.map +1 -0
  54. package/dist/routes/notifications.js +250 -0
  55. package/dist/routes/notifications.js.map +1 -0
  56. package/dist/routes/port-forward.d.ts +3 -0
  57. package/dist/routes/port-forward.d.ts.map +1 -0
  58. package/dist/routes/port-forward.js +205 -0
  59. package/dist/routes/port-forward.js.map +1 -0
  60. package/dist/routes/projects.d.ts +3 -0
  61. package/dist/routes/projects.d.ts.map +1 -0
  62. package/dist/routes/projects.js +442 -0
  63. package/dist/routes/projects.js.map +1 -0
  64. package/dist/routes/ssh.d.ts +3 -0
  65. package/dist/routes/ssh.d.ts.map +1 -0
  66. package/dist/routes/ssh.js +192 -0
  67. package/dist/routes/ssh.js.map +1 -0
  68. package/dist/routes/tasks.d.ts +3 -0
  69. package/dist/routes/tasks.d.ts.map +1 -0
  70. package/dist/routes/tasks.js +183 -0
  71. package/dist/routes/tasks.js.map +1 -0
  72. package/dist/routes/tmux.d.ts +3 -0
  73. package/dist/routes/tmux.d.ts.map +1 -0
  74. package/dist/routes/tmux.js +1191 -0
  75. package/dist/routes/tmux.js.map +1 -0
  76. package/dist/routes/tunnel.d.ts +25 -0
  77. package/dist/routes/tunnel.d.ts.map +1 -0
  78. package/dist/routes/tunnel.js +449 -0
  79. package/dist/routes/tunnel.js.map +1 -0
  80. package/dist/services/ModulePermissions.d.ts +100 -0
  81. package/dist/services/ModulePermissions.d.ts.map +1 -0
  82. package/dist/services/ModulePermissions.js +312 -0
  83. package/dist/services/ModulePermissions.js.map +1 -0
  84. package/dist/services/ModuleRegistryService.d.ts +152 -0
  85. package/dist/services/ModuleRegistryService.d.ts.map +1 -0
  86. package/dist/services/ModuleRegistryService.js +522 -0
  87. package/dist/services/ModuleRegistryService.js.map +1 -0
  88. package/dist/services/agent.service.d.ts +19 -0
  89. package/dist/services/agent.service.d.ts.map +1 -0
  90. package/dist/services/agent.service.js +88 -0
  91. package/dist/services/agent.service.js.map +1 -0
  92. package/dist/services/bootstrap.d.ts +22 -0
  93. package/dist/services/bootstrap.d.ts.map +1 -0
  94. package/dist/services/bootstrap.js +206 -0
  95. package/dist/services/bootstrap.js.map +1 -0
  96. package/dist/services/service-manager.d.ts +50 -0
  97. package/dist/services/service-manager.d.ts.map +1 -0
  98. package/dist/services/service-manager.js +382 -0
  99. package/dist/services/service-manager.js.map +1 -0
  100. package/package.json +107 -0
@@ -0,0 +1,522 @@
1
+ import { EventEmitter } from 'events';
2
+ import { spawn } from 'child_process';
3
+ import { promises as fs } from 'fs';
4
+ import path from 'path';
5
+ import { fileURLToPath } from 'url';
6
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
7
+ export class ModuleRegistryService extends EventEmitter {
8
+ activeModules = new Map();
9
+ availableModules = new Map();
10
+ installHistory = new Map();
11
+ healthChecks = new Map();
12
+ moduleProcesses = new Map();
13
+ recentActivity = [];
14
+ constructor() {
15
+ super();
16
+ this.startCleanupInterval();
17
+ }
18
+ // Module registration methods
19
+ async registerModule(moduleData) {
20
+ try {
21
+ // Validate module manifest
22
+ if (!this.validateModule(moduleData)) {
23
+ return { success: false, message: 'Invalid module manifest' };
24
+ }
25
+ // Check for port conflicts
26
+ const portConflict = this.checkPortConflicts(moduleData);
27
+ if (portConflict) {
28
+ return { success: false, message: `Port conflict: ${portConflict}` };
29
+ }
30
+ // Create registered module
31
+ const registeredModule = {
32
+ ...moduleData,
33
+ registeredAt: new Date(),
34
+ lastHeartbeat: new Date(),
35
+ status: 'running'
36
+ };
37
+ // Store module
38
+ this.activeModules.set(registeredModule.name, registeredModule);
39
+ // Start health monitoring
40
+ this.startHealthMonitoring(registeredModule.name);
41
+ // Log activity
42
+ this.logActivity('register', registeredModule.name);
43
+ // Emit event
44
+ this.emit('module:registered', registeredModule);
45
+ console.log(`Module ${registeredModule.name} registered successfully`);
46
+ return { success: true, message: 'Module registered successfully' };
47
+ }
48
+ catch (error) {
49
+ console.error('Module registration failed:', error);
50
+ return { success: false, message: error instanceof Error ? error.message : 'Unknown error' };
51
+ }
52
+ }
53
+ async unregisterModule(moduleId) {
54
+ const module = this.activeModules.get(moduleId);
55
+ if (!module) {
56
+ return { success: false, message: 'Module not found' };
57
+ }
58
+ try {
59
+ // Stop health monitoring
60
+ this.stopHealthMonitoring(moduleId);
61
+ // Stop module processes if running
62
+ await this.stopModuleProcesses(moduleId);
63
+ // Remove from active modules
64
+ this.activeModules.delete(moduleId);
65
+ // Log activity
66
+ this.logActivity('unregister', moduleId);
67
+ // Emit event
68
+ this.emit('module:unregistered', module);
69
+ console.log(`Module ${moduleId} unregistered successfully`);
70
+ return { success: true, message: 'Module unregistered successfully' };
71
+ }
72
+ catch (error) {
73
+ console.error('Module unregistration failed:', error);
74
+ return { success: false, message: error instanceof Error ? error.message : 'Unknown error' };
75
+ }
76
+ }
77
+ // Module lifecycle methods
78
+ async activateModule(moduleId) {
79
+ const module = this.activeModules.get(moduleId);
80
+ if (!module) {
81
+ return { success: false, message: 'Module not found' };
82
+ }
83
+ if (module.status === 'running') {
84
+ return { success: false, message: 'Module is already active' };
85
+ }
86
+ try {
87
+ // Update status
88
+ module.status = 'starting';
89
+ this.activeModules.set(moduleId, module);
90
+ // Start module processes
91
+ await this.startModuleProcesses(module);
92
+ // Update status
93
+ module.status = 'running';
94
+ this.activeModules.set(moduleId, module);
95
+ // Start health monitoring
96
+ this.startHealthMonitoring(moduleId);
97
+ // Log activity
98
+ this.logActivity('activate', moduleId);
99
+ // Emit event
100
+ this.emit('module:activated', module);
101
+ return { success: true, message: 'Module activated successfully' };
102
+ }
103
+ catch (error) {
104
+ module.status = 'error';
105
+ this.activeModules.set(moduleId, module);
106
+ console.error('Module activation failed:', error);
107
+ return { success: false, message: error instanceof Error ? error.message : 'Unknown error' };
108
+ }
109
+ }
110
+ async deactivateModule(moduleId) {
111
+ const module = this.activeModules.get(moduleId);
112
+ if (!module) {
113
+ return { success: false, message: 'Module not found' };
114
+ }
115
+ if (module.status === 'stopped') {
116
+ return { success: false, message: 'Module is already inactive' };
117
+ }
118
+ try {
119
+ // Update status
120
+ module.status = 'stopping';
121
+ this.activeModules.set(moduleId, module);
122
+ // Stop health monitoring
123
+ this.stopHealthMonitoring(moduleId);
124
+ // Stop module processes
125
+ await this.stopModuleProcesses(moduleId);
126
+ // Update status
127
+ module.status = 'stopped';
128
+ this.activeModules.set(moduleId, module);
129
+ // Log activity
130
+ this.logActivity('deactivate', moduleId);
131
+ // Emit event
132
+ this.emit('module:deactivated', module);
133
+ return { success: true, message: 'Module deactivated successfully' };
134
+ }
135
+ catch (error) {
136
+ module.status = 'error';
137
+ this.activeModules.set(moduleId, module);
138
+ console.error('Module deactivation failed:', error);
139
+ return { success: false, message: error instanceof Error ? error.message : 'Unknown error' };
140
+ }
141
+ }
142
+ // Module installation methods
143
+ async installModule(moduleId, source, version) {
144
+ const installationId = this.generateInstallationId();
145
+ const installation = {
146
+ id: installationId,
147
+ moduleId,
148
+ version: version || 'latest',
149
+ source,
150
+ installedAt: new Date(),
151
+ status: 'pending',
152
+ progress: 0,
153
+ logs: []
154
+ };
155
+ this.installHistory.set(installationId, installation);
156
+ try {
157
+ // Update status
158
+ installation.status = 'downloading';
159
+ installation.progress = 10;
160
+ this.installHistory.set(installationId, installation);
161
+ // Download and install module based on source type
162
+ switch (source.type) {
163
+ case 'remote':
164
+ await this.installFromRemote(installation);
165
+ break;
166
+ case 'marketplace':
167
+ await this.installFromMarketplace(installation);
168
+ break;
169
+ case 'container':
170
+ await this.installFromContainer(installation);
171
+ break;
172
+ default:
173
+ throw new Error(`Unsupported source type: ${source.type}`);
174
+ }
175
+ installation.status = 'installed';
176
+ installation.progress = 100;
177
+ this.installHistory.set(installationId, installation);
178
+ // Log activity
179
+ this.logActivity('install', moduleId);
180
+ // Emit event
181
+ this.emit('module:installed', installation);
182
+ console.log(`Module ${moduleId} installed successfully`);
183
+ }
184
+ catch (error) {
185
+ installation.status = 'failed';
186
+ installation.error = error instanceof Error ? error.message : 'Unknown error';
187
+ installation.logs?.push(`Error: ${error instanceof Error ? error.message : 'Unknown error'}`);
188
+ this.installHistory.set(installationId, installation);
189
+ console.error(`Module installation failed:`, error);
190
+ }
191
+ return installation;
192
+ }
193
+ // Query methods
194
+ async listModules() {
195
+ return Array.from(this.activeModules.values());
196
+ }
197
+ async getModule(moduleId) {
198
+ return this.activeModules.get(moduleId) || null;
199
+ }
200
+ async searchModules(query, category, tags, status = 'all', limit = 50, offset = 0) {
201
+ let modules = Array.from(this.activeModules.values());
202
+ // Filter by status
203
+ if (status !== 'all') {
204
+ modules = modules.filter(module => {
205
+ if (status === 'active')
206
+ return module.status === 'running';
207
+ if (status === 'inactive')
208
+ return module.status !== 'running';
209
+ return true;
210
+ });
211
+ }
212
+ // Filter by search query
213
+ if (query) {
214
+ const searchTerm = query.toLowerCase();
215
+ modules = modules.filter(module => module.name.toLowerCase().includes(searchTerm) ||
216
+ module.displayName.toLowerCase().includes(searchTerm) ||
217
+ module.description.toLowerCase().includes(searchTerm));
218
+ }
219
+ // Filter by category
220
+ if (category) {
221
+ modules = modules.filter(module => module.category === category);
222
+ }
223
+ // Filter by tags
224
+ if (tags && tags.length > 0) {
225
+ modules = modules.filter(module => tags.some(tag => module.tags.includes(tag)));
226
+ }
227
+ // Apply pagination
228
+ return modules.slice(offset, offset + limit);
229
+ }
230
+ async getStats() {
231
+ const modules = Array.from(this.activeModules.values());
232
+ const categoryCounts = {};
233
+ modules.forEach(module => {
234
+ categoryCounts[module.category] = (categoryCounts[module.category] || 0) + 1;
235
+ });
236
+ return {
237
+ totalModules: modules.length,
238
+ activeModules: modules.filter(m => m.status === 'running').length,
239
+ stoppedModules: modules.filter(m => m.status === 'stopped').length,
240
+ errorModules: modules.filter(m => m.status === 'error').length,
241
+ totalInstallations: this.installHistory.size,
242
+ categoryCounts,
243
+ recentActivity: this.recentActivity.slice(-10)
244
+ };
245
+ }
246
+ // Health and monitoring methods
247
+ async updateHeartbeat(moduleId, heartbeatData) {
248
+ const module = this.activeModules.get(moduleId);
249
+ if (!module) {
250
+ return { success: false, message: 'Module not found' };
251
+ }
252
+ try {
253
+ module.lastHeartbeat = new Date();
254
+ module.metrics = heartbeatData.metrics;
255
+ if (heartbeatData.status === 'healthy') {
256
+ module.status = 'running';
257
+ }
258
+ else if (heartbeatData.status === 'unhealthy') {
259
+ module.status = 'error';
260
+ }
261
+ this.activeModules.set(moduleId, module);
262
+ return { success: true, message: 'Heartbeat updated' };
263
+ }
264
+ catch (error) {
265
+ console.error('Failed to update heartbeat:', error);
266
+ return { success: false, message: error instanceof Error ? error.message : 'Unknown error' };
267
+ }
268
+ }
269
+ async checkModuleHealth(moduleId) {
270
+ const module = this.activeModules.get(moduleId);
271
+ if (!module) {
272
+ return null;
273
+ }
274
+ try {
275
+ const response = await fetch(`http://localhost:${module.api.backend.port}/health`, {
276
+ signal: AbortSignal.timeout(5000)
277
+ });
278
+ const health = {
279
+ healthy: response.ok,
280
+ status: response.status,
281
+ timestamp: new Date(),
282
+ latency: performance.now(),
283
+ details: response.ok ? await response.json() : null,
284
+ checks: {
285
+ http: response.ok,
286
+ status: response.status
287
+ }
288
+ };
289
+ module.health = health;
290
+ this.activeModules.set(moduleId, module);
291
+ return health;
292
+ }
293
+ catch (error) {
294
+ const health = {
295
+ healthy: false,
296
+ error: error instanceof Error ? error.message : 'Unknown error',
297
+ timestamp: new Date(),
298
+ checks: {
299
+ http: false,
300
+ error: error instanceof Error ? error.message : 'Unknown error'
301
+ }
302
+ };
303
+ module.health = health;
304
+ this.activeModules.set(moduleId, module);
305
+ return health;
306
+ }
307
+ }
308
+ // Utility methods
309
+ validateModule(module) {
310
+ const requiredFields = ['name', 'version', 'api'];
311
+ return requiredFields.every(field => module[field] !== undefined);
312
+ }
313
+ checkPortConflicts(module) {
314
+ for (const [_, existingModule] of this.activeModules) {
315
+ if (existingModule.name === module.name)
316
+ continue;
317
+ if (existingModule.api.backend.port === module.api.backend.port) {
318
+ return `Backend port ${module.api.backend.port} already in use by ${existingModule.name}`;
319
+ }
320
+ if (existingModule.api.frontend.port === module.api.frontend.port) {
321
+ return `Frontend port ${module.api.frontend.port} already in use by ${existingModule.name}`;
322
+ }
323
+ }
324
+ return null;
325
+ }
326
+ startHealthMonitoring(moduleId) {
327
+ const interval = setInterval(async () => {
328
+ await this.checkModuleHealth(moduleId);
329
+ }, 60000); // Check every minute
330
+ this.healthChecks.set(moduleId, interval);
331
+ }
332
+ stopHealthMonitoring(moduleId) {
333
+ const interval = this.healthChecks.get(moduleId);
334
+ if (interval) {
335
+ clearInterval(interval);
336
+ this.healthChecks.delete(moduleId);
337
+ }
338
+ }
339
+ async startModuleProcesses(module) {
340
+ const modulePath = path.join(process.cwd(), 'installed_modules', module.name);
341
+ try {
342
+ // Start backend process
343
+ const backendProcess = spawn('npm', ['run', 'start'], {
344
+ cwd: path.join(modulePath, 'src', 'backend'),
345
+ stdio: 'pipe',
346
+ env: { ...process.env, NODE_ENV: 'production' }
347
+ });
348
+ // Start frontend process
349
+ const frontendProcess = spawn('npm', ['run', 'start'], {
350
+ cwd: path.join(modulePath, 'src', 'frontend'),
351
+ stdio: 'pipe',
352
+ env: { ...process.env, NODE_ENV: 'production' }
353
+ });
354
+ this.moduleProcesses.set(module.name, {
355
+ backend: backendProcess,
356
+ frontend: frontendProcess
357
+ });
358
+ // Handle process events
359
+ backendProcess.on('error', (error) => {
360
+ console.error(`Backend process error for ${module.name}:`, error);
361
+ });
362
+ frontendProcess.on('error', (error) => {
363
+ console.error(`Frontend process error for ${module.name}:`, error);
364
+ });
365
+ }
366
+ catch (error) {
367
+ console.error(`Failed to start processes for ${module.name}:`, error);
368
+ throw error;
369
+ }
370
+ }
371
+ async stopModuleProcesses(moduleId) {
372
+ const processes = this.moduleProcesses.get(moduleId);
373
+ if (!processes)
374
+ return;
375
+ try {
376
+ if (processes.backend) {
377
+ processes.backend.kill('SIGTERM');
378
+ }
379
+ if (processes.frontend) {
380
+ processes.frontend.kill('SIGTERM');
381
+ }
382
+ this.moduleProcesses.delete(moduleId);
383
+ }
384
+ catch (error) {
385
+ console.error(`Failed to stop processes for ${moduleId}:`, error);
386
+ }
387
+ }
388
+ async installFromRemote(installation) {
389
+ // Implementation for remote Git repository installation
390
+ const { exec } = await import('child_process');
391
+ const util = await import('util');
392
+ const execAsync = util.promisify(exec);
393
+ const targetDir = path.join(process.cwd(), 'installed_modules', installation.moduleId);
394
+ try {
395
+ // Update progress
396
+ installation.progress = 20;
397
+ installation.logs?.push('Cloning repository...');
398
+ // Clone repository
399
+ await execAsync(`git clone ${installation.source.url} ${targetDir}`);
400
+ // Update progress
401
+ installation.progress = 40;
402
+ installation.logs?.push('Repository cloned');
403
+ // Checkout specific version if provided
404
+ if (installation.version && installation.version !== 'latest') {
405
+ await execAsync(`cd ${targetDir} && git checkout ${installation.version}`);
406
+ installation.logs?.push(`Checked out version ${installation.version}`);
407
+ }
408
+ // Update progress
409
+ installation.progress = 60;
410
+ installation.logs?.push('Installing dependencies...');
411
+ // Install dependencies
412
+ await execAsync(`cd ${targetDir} && npm run install:all`);
413
+ // Update progress
414
+ installation.progress = 80;
415
+ installation.logs?.push('Building module...');
416
+ // Build module
417
+ await execAsync(`cd ${targetDir} && npm run build`);
418
+ // Update progress
419
+ installation.progress = 90;
420
+ installation.logs?.push('Loading module manifest...');
421
+ // Load module manifest
422
+ const manifestPath = path.join(targetDir, 'module.json');
423
+ const manifestContent = await fs.readFile(manifestPath, 'utf-8');
424
+ const manifest = JSON.parse(manifestContent);
425
+ // Add to available modules
426
+ this.availableModules.set(installation.moduleId, manifest);
427
+ installation.logs?.push('Module installed successfully');
428
+ }
429
+ catch (error) {
430
+ installation.logs?.push(`Error: ${error instanceof Error ? error.message : 'Unknown error'}`);
431
+ throw error;
432
+ }
433
+ }
434
+ async installFromMarketplace(installation) {
435
+ // Implementation for marketplace installation
436
+ throw new Error('Marketplace installation not yet implemented');
437
+ }
438
+ async installFromContainer(installation) {
439
+ // Implementation for container-based installation
440
+ throw new Error('Container installation not yet implemented');
441
+ }
442
+ generateInstallationId() {
443
+ return `install_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
444
+ }
445
+ logActivity(type, moduleId) {
446
+ this.recentActivity.push({
447
+ type,
448
+ moduleId,
449
+ timestamp: new Date()
450
+ });
451
+ // Keep only last 100 activities
452
+ if (this.recentActivity.length > 100) {
453
+ this.recentActivity = this.recentActivity.slice(-100);
454
+ }
455
+ }
456
+ startCleanupInterval() {
457
+ // Clean up old installation history every hour
458
+ setInterval(() => {
459
+ const oneWeekAgo = new Date(Date.now() - 7 * 24 * 60 * 60 * 1000);
460
+ for (const [id, installation] of this.installHistory) {
461
+ if (installation.installedAt < oneWeekAgo) {
462
+ this.installHistory.delete(id);
463
+ }
464
+ }
465
+ }, 60 * 60 * 1000); // Every hour
466
+ }
467
+ // Additional utility methods
468
+ async getInstallationHistory() {
469
+ return Array.from(this.installHistory.values());
470
+ }
471
+ async getInstallation(installationId) {
472
+ return this.installHistory.get(installationId) || null;
473
+ }
474
+ async getModuleLogs(moduleId, options = {}) {
475
+ // Implementation for getting module logs
476
+ // This would typically read from log files or log aggregation system
477
+ return [];
478
+ }
479
+ async bulkOperation(operation, moduleIds) {
480
+ const results = [];
481
+ for (const moduleId of moduleIds) {
482
+ try {
483
+ let result;
484
+ switch (operation) {
485
+ case 'activate':
486
+ result = await this.activateModule(moduleId);
487
+ break;
488
+ case 'deactivate':
489
+ result = await this.deactivateModule(moduleId);
490
+ break;
491
+ case 'restart':
492
+ await this.deactivateModule(moduleId);
493
+ result = await this.activateModule(moduleId);
494
+ break;
495
+ case 'uninstall':
496
+ result = await this.unregisterModule(moduleId);
497
+ break;
498
+ }
499
+ results.push({ moduleId, success: result.success, message: result.message });
500
+ }
501
+ catch (error) {
502
+ results.push({ moduleId, success: false, message: error instanceof Error ? error.message : 'Unknown error' });
503
+ }
504
+ }
505
+ return results;
506
+ }
507
+ subscribeToEvents(callback) {
508
+ this.on('module:registered', callback);
509
+ this.on('module:unregistered', callback);
510
+ this.on('module:activated', callback);
511
+ this.on('module:deactivated', callback);
512
+ this.on('module:installed', callback);
513
+ return () => {
514
+ this.off('module:registered', callback);
515
+ this.off('module:unregistered', callback);
516
+ this.off('module:activated', callback);
517
+ this.off('module:deactivated', callback);
518
+ this.off('module:installed', callback);
519
+ };
520
+ }
521
+ }
522
+ //# sourceMappingURL=ModuleRegistryService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModuleRegistryService.js","sourceRoot":"","sources":["../../src/services/ModuleRegistryService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ export interface AgentConfig {
2
+ port: number;
3
+ name: string;
4
+ daemon: boolean;
5
+ dbPath: string;
6
+ }
7
+ export declare class AgentService {
8
+ private app;
9
+ private config;
10
+ start(config: AgentConfig): Promise<void>;
11
+ stop(): Promise<void>;
12
+ startDaemon(config: AgentConfig): Promise<void>;
13
+ private saveProcessInfo;
14
+ getStatus(): {
15
+ running: boolean;
16
+ config: AgentConfig | null;
17
+ };
18
+ }
19
+ //# sourceMappingURL=agent.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.service.d.ts","sourceRoot":"","sources":["../../src/services/agent.service.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,GAAG,CAAgC;IAC3C,OAAO,CAAC,MAAM,CAA4B;IAEpC,KAAK,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IA8BzC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAerB,WAAW,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;YA8BvC,eAAe;IAc7B,SAAS,IAAI;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAAA;KAAE;CAM9D"}
@@ -0,0 +1,88 @@
1
+ import { startServer } from '../app.js';
2
+ import { spawn } from 'child_process';
3
+ import ora from 'ora';
4
+ export class AgentService {
5
+ app = null;
6
+ config = null;
7
+ async start(config) {
8
+ this.config = config;
9
+ const spinner = ora('Starting VibeControls Agent...').start();
10
+ try {
11
+ // Set environment variables
12
+ process.env.PORT = config.port.toString();
13
+ process.env.DB_PATH = config.dbPath;
14
+ // Start the server
15
+ this.app = await startServer();
16
+ await this.app.listen({
17
+ port: config.port,
18
+ host: '0.0.0.0'
19
+ });
20
+ spinner.succeed(`🚀 VibeControls Agent '${config.name}' is running on http://localhost:${config.port}`);
21
+ // Handle graceful shutdown
22
+ process.on('SIGTERM', () => this.stop());
23
+ process.on('SIGINT', () => this.stop());
24
+ }
25
+ catch (error) {
26
+ spinner.fail('Failed to start agent');
27
+ throw error;
28
+ }
29
+ }
30
+ async stop() {
31
+ if (this.app) {
32
+ const spinner = ora('Stopping VibeControls Agent...').start();
33
+ try {
34
+ await this.app.close();
35
+ spinner.succeed('✅ VibeControls Agent stopped');
36
+ process.exit(0);
37
+ }
38
+ catch (error) {
39
+ spinner.fail('Failed to stop agent gracefully');
40
+ process.exit(1);
41
+ }
42
+ }
43
+ }
44
+ async startDaemon(config) {
45
+ const spinner = ora('Starting VibeControls Agent as daemon...').start();
46
+ try {
47
+ // Spawn the process as a daemon
48
+ const child = spawn(process.execPath, [
49
+ process.argv[1], // CLI script path
50
+ 'start',
51
+ '--port', config.port.toString(),
52
+ '--name', config.name,
53
+ '--db-path', config.dbPath
54
+ ], {
55
+ detached: true,
56
+ stdio: 'ignore'
57
+ });
58
+ // Unreference the child process so parent can exit
59
+ child.unref();
60
+ spinner.succeed(`🚀 VibeControls Agent '${config.name}' started as daemon (PID: ${child.pid})`);
61
+ // Save process info for management
62
+ await this.saveProcessInfo(config.name, child.pid, config);
63
+ }
64
+ catch (error) {
65
+ spinner.fail('Failed to start daemon');
66
+ throw error;
67
+ }
68
+ }
69
+ async saveProcessInfo(name, pid, config) {
70
+ // This would typically save to a process registry file or database
71
+ // For now, we'll implement a simple file-based approach
72
+ const processInfo = {
73
+ name,
74
+ pid,
75
+ config,
76
+ startTime: new Date().toISOString()
77
+ };
78
+ // Save to a registry file (implementation would depend on requirements)
79
+ console.log('Process info saved:', processInfo);
80
+ }
81
+ getStatus() {
82
+ return {
83
+ running: this.app !== null,
84
+ config: this.config
85
+ };
86
+ }
87
+ }
88
+ //# sourceMappingURL=agent.service.js.map