@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,186 @@
1
+ import { v4 as uuidv4 } from 'uuid';
2
+ export const bookmarkRoutes = async (fastify) => {
3
+ // Get all bookmarks
4
+ fastify.get('/', async (request, _reply) => {
5
+ const { projectId } = request.query;
6
+ const bookmarks = projectId !== undefined
7
+ ? fastify.db.getBookmarkedCommandsByProject(projectId)
8
+ : fastify.db.getBookmarkedCommandsByProject(null);
9
+ return { bookmarks };
10
+ });
11
+ // Get bookmarks by project
12
+ fastify.get('/project/:projectId', async (request, _reply) => {
13
+ const { projectId } = request.params;
14
+ const bookmarks = fastify.db.getBookmarkedCommandsByProject(projectId);
15
+ return { bookmarks };
16
+ });
17
+ // Get global bookmarks (no project)
18
+ fastify.get('/global', async (_request, _reply) => {
19
+ const bookmarks = fastify.db.getBookmarkedCommandsByProject(null);
20
+ return { bookmarks };
21
+ });
22
+ // Get bookmark by ID
23
+ fastify.get('/:id', async (request, reply) => {
24
+ const { id } = request.params;
25
+ const bookmark = fastify.db.getBookmarkedCommand(id);
26
+ if (!bookmark) {
27
+ return reply.code(404).send({ error: 'Bookmarked command not found' });
28
+ }
29
+ return { bookmark };
30
+ });
31
+ // Create new bookmark
32
+ fastify.post('/', async (request, reply) => {
33
+ const { projectId, command, description, category } = request.body;
34
+ try {
35
+ const bookmark = fastify.db.createBookmarkedCommand({
36
+ id: uuidv4(),
37
+ projectId,
38
+ command,
39
+ description,
40
+ category
41
+ });
42
+ // Emit bookmark created event
43
+ fastify.io.emit('bookmark:created', bookmark);
44
+ return { bookmark };
45
+ }
46
+ catch (error) {
47
+ return reply.code(500).send({
48
+ error: 'Failed to create bookmarked command',
49
+ details: error instanceof Error ? error.message : 'Unknown error'
50
+ });
51
+ }
52
+ });
53
+ // Update bookmark
54
+ fastify.put('/:id', async (request, reply) => {
55
+ const { id } = request.params;
56
+ const { command, description, category } = request.body;
57
+ try {
58
+ const bookmark = fastify.db.getBookmarkedCommand(id);
59
+ if (!bookmark) {
60
+ return reply.code(404).send({ error: 'Bookmarked command not found' });
61
+ }
62
+ const updates = {};
63
+ if (command !== undefined)
64
+ updates.command = command;
65
+ if (description !== undefined)
66
+ updates.description = description;
67
+ if (category !== undefined)
68
+ updates.category = category;
69
+ fastify.db.updateBookmarkedCommand(id, updates);
70
+ // Get updated bookmark
71
+ const updatedBookmark = fastify.db.getBookmarkedCommand(id);
72
+ // Emit bookmark updated event
73
+ fastify.io.emit('bookmark:updated', updatedBookmark);
74
+ return { bookmark: updatedBookmark };
75
+ }
76
+ catch (error) {
77
+ return reply.code(500).send({
78
+ error: 'Failed to update bookmarked command',
79
+ details: error instanceof Error ? error.message : 'Unknown error'
80
+ });
81
+ }
82
+ });
83
+ // Delete bookmark
84
+ fastify.delete('/:id', async (request, reply) => {
85
+ const { id } = request.params;
86
+ try {
87
+ const bookmark = fastify.db.getBookmarkedCommand(id);
88
+ if (!bookmark) {
89
+ return reply.code(404).send({ error: 'Bookmarked command not found' });
90
+ }
91
+ fastify.db.deleteBookmarkedCommand(id);
92
+ // Emit bookmark deleted event
93
+ fastify.io.emit('bookmark:deleted', { id, projectId: bookmark.projectId });
94
+ return { success: true };
95
+ }
96
+ catch (error) {
97
+ return reply.code(500).send({
98
+ error: 'Failed to delete bookmarked command',
99
+ details: error instanceof Error ? error.message : 'Unknown error'
100
+ });
101
+ }
102
+ });
103
+ // Execute bookmarked command
104
+ fastify.post('/:id/execute', async (request, reply) => {
105
+ const { id } = request.params;
106
+ const { sessionId, cwd } = request.body;
107
+ try {
108
+ const bookmark = fastify.db.getBookmarkedCommand(id);
109
+ if (!bookmark) {
110
+ return reply.code(404).send({ error: 'Bookmarked command not found' });
111
+ }
112
+ // If sessionId is provided, execute in tmux session
113
+ if (sessionId) {
114
+ const session = fastify.db.getTmuxSession(sessionId);
115
+ if (!session) {
116
+ return reply.code(404).send({ error: 'Session not found' });
117
+ }
118
+ // Execute command in tmux session
119
+ const { spawn } = await import('child_process');
120
+ const tmuxProcess = spawn('tmux', ['send-keys', '-t', session.sessionName, bookmark.command, 'Enter']);
121
+ await new Promise((resolve, reject) => {
122
+ tmuxProcess.on('close', (code) => {
123
+ if (code === 0)
124
+ resolve(undefined);
125
+ else
126
+ reject(new Error(`Tmux exited with code ${code}`));
127
+ });
128
+ tmuxProcess.on('error', reject);
129
+ });
130
+ // Emit command executed event
131
+ fastify.io.emit('bookmark:executed', {
132
+ bookmarkId: id,
133
+ command: bookmark.command,
134
+ sessionId
135
+ });
136
+ return {
137
+ success: true,
138
+ executedIn: 'tmux',
139
+ sessionId
140
+ };
141
+ }
142
+ else {
143
+ // Execute as a task
144
+ const task = fastify.db.createTask({
145
+ id: uuidv4(),
146
+ type: 'command',
147
+ status: 'pending',
148
+ payload: JSON.stringify({
149
+ command: bookmark.command,
150
+ cwd: cwd || process.cwd()
151
+ })
152
+ });
153
+ // Emit task created event
154
+ fastify.io.emit('task:created', task);
155
+ // Process task asynchronously (reuse task processing logic)
156
+ // This would need to be imported from tasks route
157
+ return {
158
+ success: true,
159
+ executedIn: 'task',
160
+ taskId: task.id
161
+ };
162
+ }
163
+ }
164
+ catch (error) {
165
+ return reply.code(500).send({
166
+ error: 'Failed to execute bookmarked command',
167
+ details: error instanceof Error ? error.message : 'Unknown error'
168
+ });
169
+ }
170
+ });
171
+ // Get bookmarks by category
172
+ fastify.get('/category/:category', async (request, _reply) => {
173
+ const { category } = request.params;
174
+ // Get all bookmarks and filter by category
175
+ const allBookmarks = [
176
+ ...fastify.db.getBookmarkedCommandsByProject(null),
177
+ // Would need to implement getAllBookmarkedCommands to get all
178
+ ];
179
+ const filteredBookmarks = allBookmarks.filter(b => b.category === category);
180
+ return {
181
+ bookmarks: filteredBookmarks,
182
+ category
183
+ };
184
+ });
185
+ };
186
+ //# sourceMappingURL=bookmarks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bookmarks.js","sourceRoot":"","sources":["../../src/routes/bookmarks.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AAqBpC,MAAM,CAAC,MAAM,cAAc,GAAuB,KAAK,EAAE,OAAO,EAAE,EAAE;IAClE,oBAAoB;IACpB,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;QACzC,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,KAA+B,CAAC;QAE9D,MAAM,SAAS,GAAG,SAAS,KAAK,SAAS;YACvC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,8BAA8B,CAAC,SAAS,CAAC;YACtD,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,8BAA8B,CAAC,IAAI,CAAC,CAAC;QAEpD,OAAO,EAAE,SAAS,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,2BAA2B;IAC3B,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;QAC3D,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,MAA+B,CAAC;QAC9D,MAAM,SAAS,GAAG,OAAO,CAAC,EAAE,CAAC,8BAA8B,CAAC,SAAS,CAAC,CAAC;QAEvE,OAAO,EAAE,SAAS,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,oCAAoC;IACpC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE;QAChD,MAAM,SAAS,GAAG,OAAO,CAAC,EAAE,CAAC,8BAA8B,CAAC,IAAI,CAAC,CAAC;QAElE,OAAO,EAAE,SAAS,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,qBAAqB;IACrB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QAC3C,MAAM,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,MAAwB,CAAC;QAChD,MAAM,QAAQ,GAAG,OAAO,CAAC,EAAE,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC;QAErD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,8BAA8B,EAAE,CAAC,CAAC;QACzE,CAAC;QAED,OAAO,EAAE,QAAQ,EAAE,CAAC;IACtB,CAAC,CAAC,CAAC;IAEH,sBAAsB;IACtB,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QACzC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,IAA0B,CAAC;QAEzF,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,OAAO,CAAC,EAAE,CAAC,uBAAuB,CAAC;gBAClD,EAAE,EAAE,MAAM,EAAE;gBACZ,SAAS;gBACT,OAAO;gBACP,WAAW;gBACX,QAAQ;aACT,CAAC,CAAC;YAEH,8BAA8B;YAC9B,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;YAE9C,OAAO,EAAE,QAAQ,EAAE,CAAC;QACtB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBAC1B,KAAK,EAAE,qCAAqC;gBAC5C,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;aAClE,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,kBAAkB;IAClB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QAC3C,MAAM,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,MAAwB,CAAC;QAChD,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,IAA0B,CAAC;QAE9E,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,OAAO,CAAC,EAAE,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC;YACrD,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,8BAA8B,EAAE,CAAC,CAAC;YACzE,CAAC;YAED,MAAM,OAAO,GAA+B,EAAE,CAAC;YAC/C,IAAI,OAAO,KAAK,SAAS;gBAAE,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;YACrD,IAAI,WAAW,KAAK,SAAS;gBAAE,OAAO,CAAC,WAAW,GAAG,WAAW,CAAC;YACjE,IAAI,QAAQ,KAAK,SAAS;gBAAE,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC;YAExD,OAAO,CAAC,EAAE,CAAC,uBAAuB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;YAEhD,uBAAuB;YACvB,MAAM,eAAe,GAAG,OAAO,CAAC,EAAE,CAAC,oBAAoB,CAAC,EAAE,CAAE,CAAC;YAE7D,8BAA8B;YAC9B,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE,eAAe,CAAC,CAAC;YAErD,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC;QACvC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBAC1B,KAAK,EAAE,qCAAqC;gBAC5C,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;aAClE,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,kBAAkB;IAClB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QAC9C,MAAM,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,MAAwB,CAAC;QAEhD,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,OAAO,CAAC,EAAE,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC;YACrD,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,8BAA8B,EAAE,CAAC,CAAC;YACzE,CAAC;YAED,OAAO,CAAC,EAAE,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC;YAEvC,8BAA8B;YAC9B,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC;YAE3E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC3B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBAC1B,KAAK,EAAE,qCAAqC;gBAC5C,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;aAClE,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,6BAA6B;IAC7B,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QACpD,MAAM,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,MAAwB,CAAC;QAChD,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAA2B,CAAC;QAE/D,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,OAAO,CAAC,EAAE,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC;YACrD,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,8BAA8B,EAAE,CAAC,CAAC;YACzE,CAAC;YAED,oDAAoD;YACpD,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,OAAO,GAAG,OAAO,CAAC,EAAE,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;gBACrD,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,CAAC;gBAC9D,CAAC;gBAED,kCAAkC;gBAClC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;gBAChD,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,IAAI,EAAE,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;gBAEvG,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;oBACpC,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;wBAC/B,IAAI,IAAI,KAAK,CAAC;4BAAE,OAAO,CAAC,SAAS,CAAC,CAAC;;4BAC9B,MAAM,CAAC,IAAI,KAAK,CAAC,yBAAyB,IAAI,EAAE,CAAC,CAAC,CAAC;oBAC1D,CAAC,CAAC,CAAC;oBACH,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;gBAClC,CAAC,CAAC,CAAC;gBAEH,8BAA8B;gBAC9B,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,mBAAmB,EAAE;oBACnC,UAAU,EAAE,EAAE;oBACd,OAAO,EAAE,QAAQ,CAAC,OAAO;oBACzB,SAAS;iBACV,CAAC,CAAC;gBAEH,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,UAAU,EAAE,MAAM;oBAClB,SAAS;iBACV,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,oBAAoB;gBACpB,MAAM,IAAI,GAAG,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC;oBACjC,EAAE,EAAE,MAAM,EAAE;oBACZ,IAAI,EAAE,SAAS;oBACf,MAAM,EAAE,SAAS;oBACjB,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC;wBACtB,OAAO,EAAE,QAAQ,CAAC,OAAO;wBACzB,GAAG,EAAE,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE;qBAC1B,CAAC;iBACH,CAAC,CAAC;gBAEH,0BAA0B;gBAC1B,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;gBAEtC,4DAA4D;gBAC5D,kDAAkD;gBAElD,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,UAAU,EAAE,MAAM;oBAClB,MAAM,EAAE,IAAI,CAAC,EAAE;iBAChB,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBAC1B,KAAK,EAAE,sCAAsC;gBAC7C,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;aAClE,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,4BAA4B;IAC5B,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;QAC3D,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,MAA8B,CAAC;QAE5D,2CAA2C;QAC3C,MAAM,YAAY,GAAG;YACnB,GAAG,OAAO,CAAC,EAAE,CAAC,8BAA8B,CAAC,IAAI,CAAC;YAClD,8DAA8D;SAC/D,CAAC;QAEF,MAAM,iBAAiB,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;QAE5E,OAAO;YACL,SAAS,EAAE,iBAAiB;YAC5B,QAAQ;SACT,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { FastifyPluginAsync } from 'fastify';
2
+ export declare const configRoutes: FastifyPluginAsync;
3
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/routes/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAO7C,eAAO,MAAM,YAAY,EAAE,kBA2H1B,CAAC"}
@@ -0,0 +1,108 @@
1
+ export const configRoutes = async (fastify) => {
2
+ // Get all configuration
3
+ fastify.get('/', async (_request, _reply) => {
4
+ const config = fastify.db.getAllConfig();
5
+ return { config };
6
+ });
7
+ // Get specific config value
8
+ fastify.get('/:key', async (request, reply) => {
9
+ const { key } = request.params;
10
+ const value = fastify.db.getConfig(key);
11
+ if (value === undefined) {
12
+ return reply.code(404).send({ error: 'Configuration key not found' });
13
+ }
14
+ return { key, value };
15
+ });
16
+ // Set config value
17
+ fastify.put('/:key', async (request, reply) => {
18
+ const { key } = request.params;
19
+ const { value } = request.body;
20
+ try {
21
+ fastify.db.setConfig(key, value);
22
+ // Emit config changed event
23
+ fastify.io.emit('config:changed', { key, value });
24
+ return { success: true };
25
+ }
26
+ catch (error) {
27
+ return reply.code(500).send({
28
+ error: 'Failed to set configuration',
29
+ details: error instanceof Error ? error.message : 'Unknown error'
30
+ });
31
+ }
32
+ });
33
+ // Delete config value
34
+ fastify.delete('/:key', async (request, reply) => {
35
+ const { key } = request.params;
36
+ try {
37
+ // Check if config exists
38
+ const currentValue = fastify.db.getConfig(key);
39
+ if (currentValue === undefined) {
40
+ return reply.code(404).send({ error: 'Configuration key not found' });
41
+ }
42
+ // Delete the config by setting it to undefined
43
+ // Note: SQLite doesn't have a direct delete operation in our current schema
44
+ // We'll use a special marker to indicate deletion
45
+ fastify.db.setConfig(key, '__DELETED__');
46
+ // Emit config deleted event
47
+ fastify.io.emit('config:deleted', { key });
48
+ return { success: true };
49
+ }
50
+ catch (error) {
51
+ return reply.code(500).send({
52
+ error: 'Failed to delete configuration',
53
+ details: error instanceof Error ? error.message : 'Unknown error'
54
+ });
55
+ }
56
+ });
57
+ // Bulk set configuration
58
+ fastify.post('/bulk', async (request, reply) => {
59
+ const { configs } = request.body;
60
+ try {
61
+ for (const [key, value] of Object.entries(configs)) {
62
+ fastify.db.setConfig(key, value);
63
+ }
64
+ // Emit config changed event
65
+ fastify.io.emit('config:bulk-changed', { configs });
66
+ return { success: true };
67
+ }
68
+ catch (error) {
69
+ return reply.code(500).send({
70
+ error: 'Failed to set configuration',
71
+ details: error instanceof Error ? error.message : 'Unknown error'
72
+ });
73
+ }
74
+ });
75
+ // Get system info
76
+ fastify.get('/system/info', async (_request, _reply) => {
77
+ const os = await import('os');
78
+ return {
79
+ hostname: os.hostname(),
80
+ platform: os.platform(),
81
+ arch: os.arch(),
82
+ release: os.release(),
83
+ cpus: os.cpus().length,
84
+ totalMemory: os.totalmem(),
85
+ freeMemory: os.freemem(),
86
+ uptime: os.uptime(),
87
+ nodeVersion: process.version,
88
+ agentVersion: '1.0.0',
89
+ environment: process.env.NODE_ENV || 'development'
90
+ };
91
+ });
92
+ // Get agent status
93
+ fastify.get('/status', async (_request, _reply) => {
94
+ const tmuxSessions = fastify.db.getAllTmuxSessions();
95
+ const portForwards = fastify.db.getAllPortForwards();
96
+ return {
97
+ status: 'online',
98
+ timestamp: new Date().toISOString(),
99
+ stats: {
100
+ activeSessions: tmuxSessions.filter(s => s.status === 'active').length,
101
+ totalSessions: tmuxSessions.length,
102
+ activePortForwards: portForwards.filter(pf => pf.status === 'active').length,
103
+ totalPortForwards: portForwards.length
104
+ }
105
+ };
106
+ });
107
+ };
108
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/routes/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { FastifyPluginAsync } from 'fastify';
2
+ export declare const fileRoutes: FastifyPluginAsync;
3
+ //# sourceMappingURL=files.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/routes/files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAiC,MAAM,SAAS,CAAC;AAsB5E,eAAO,MAAM,UAAU,EAAE,kBAsUxB,CAAC"}