@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.
- package/dist/app-31chs2a1.js +17180 -0
- package/dist/app-31chs2a1.js.map +170 -0
- package/dist/chunk-pm1hna8x-473akrq0.js +16826 -0
- package/dist/chunk-pm1hna8x-473akrq0.js.map +11 -0
- package/dist/cli.js +4686 -1146
- package/dist/cli.js.map +51 -1
- package/dist/highlights-eq9cgrbb.scm +604 -0
- package/dist/highlights-ghv9g403.scm +205 -0
- package/dist/highlights-hk7bwhj4.scm +284 -0
- package/dist/highlights-r812a2qc.scm +150 -0
- package/dist/highlights-x6tmsnaa.scm +115 -0
- package/dist/index-5xngv42g.js +2546 -0
- package/dist/index-5xngv42g.js.map +26 -0
- package/dist/index-6aq4nc58.js +11429 -0
- package/dist/index-6aq4nc58.js.map +21 -0
- package/dist/index-ac2ebaf8.js +4 -0
- package/dist/index-ac2ebaf8.js.map +9 -0
- package/dist/index-g8dczzvv.js +33 -0
- package/dist/index-g8dczzvv.js.map +9 -0
- package/dist/index-gmz54dkc.js +28402 -0
- package/dist/index-gmz54dkc.js.map +11 -0
- package/dist/index-t06ktmx9.js +216 -0
- package/dist/index-t06ktmx9.js.map +11 -0
- package/dist/index.js +69 -87
- package/dist/index.js.map +10 -1
- package/dist/injections-73j83es3.scm +27 -0
- package/dist/package-0158fp3w.js +136 -0
- package/dist/package-0158fp3w.js.map +9 -0
- package/dist/plugin-system-bg1pzjj9.js +453 -0
- package/dist/plugin-system-bg1pzjj9.js.map +11 -0
- package/dist/tree-sitter-javascript-nd0q4pe9.wasm +0 -0
- package/dist/tree-sitter-markdown-411r6y9b.wasm +0 -0
- package/dist/tree-sitter-markdown_inline-j5349f42.wasm +0 -0
- package/dist/tree-sitter-typescript-zxjzwt75.wasm +0 -0
- package/dist/tree-sitter-zig-e78zbjpm.wasm +0 -0
- package/package.json +33 -44
- package/dist/app.d.ts +0 -15
- package/dist/app.d.ts.map +0 -1
- package/dist/app.js +0 -600
- package/dist/app.js.map +0 -1
- package/dist/cli.d.ts +0 -3
- package/dist/cli.d.ts.map +0 -1
- package/dist/db/schema.d.ts +0 -121
- package/dist/db/schema.d.ts.map +0 -1
- package/dist/db/schema.js +0 -473
- package/dist/db/schema.js.map +0 -1
- package/dist/index.d.ts +0 -2
- package/dist/index.d.ts.map +0 -1
- package/dist/middleware/ModuleAuth.d.ts +0 -61
- package/dist/middleware/ModuleAuth.d.ts.map +0 -1
- package/dist/middleware/ModuleAuth.js +0 -223
- package/dist/middleware/ModuleAuth.js.map +0 -1
- package/dist/middleware/auth.d.ts +0 -3
- package/dist/middleware/auth.d.ts.map +0 -1
- package/dist/middleware/auth.js +0 -11
- package/dist/middleware/auth.js.map +0 -1
- package/dist/migrations/remove-notes-prompts.d.ts +0 -13
- package/dist/migrations/remove-notes-prompts.d.ts.map +0 -1
- package/dist/migrations/remove-notes-prompts.js +0 -148
- package/dist/migrations/remove-notes-prompts.js.map +0 -1
- package/dist/routes/bookmarks.d.ts +0 -3
- package/dist/routes/bookmarks.d.ts.map +0 -1
- package/dist/routes/bookmarks.js +0 -195
- package/dist/routes/bookmarks.js.map +0 -1
- package/dist/routes/config.d.ts +0 -3
- package/dist/routes/config.d.ts.map +0 -1
- package/dist/routes/config.js +0 -106
- package/dist/routes/config.js.map +0 -1
- package/dist/routes/files.d.ts +0 -3
- package/dist/routes/files.d.ts.map +0 -1
- package/dist/routes/files.js +0 -313
- package/dist/routes/files.js.map +0 -1
- package/dist/routes/git.d.ts +0 -3
- package/dist/routes/git.d.ts.map +0 -1
- package/dist/routes/git.js +0 -427
- package/dist/routes/git.js.map +0 -1
- package/dist/routes/logs.d.ts +0 -9
- package/dist/routes/logs.d.ts.map +0 -1
- package/dist/routes/logs.js +0 -107
- package/dist/routes/logs.js.map +0 -1
- package/dist/routes/moduleRegistry.d.ts +0 -41
- package/dist/routes/moduleRegistry.d.ts.map +0 -1
- package/dist/routes/moduleRegistry.js +0 -356
- package/dist/routes/moduleRegistry.js.map +0 -1
- package/dist/routes/notifications.d.ts +0 -3
- package/dist/routes/notifications.d.ts.map +0 -1
- package/dist/routes/notifications.js +0 -255
- package/dist/routes/notifications.js.map +0 -1
- package/dist/routes/plugin-state.d.ts +0 -19
- package/dist/routes/plugin-state.d.ts.map +0 -1
- package/dist/routes/plugin-state.js +0 -139
- package/dist/routes/plugin-state.js.map +0 -1
- package/dist/routes/plugins.d.ts +0 -3
- package/dist/routes/plugins.d.ts.map +0 -1
- package/dist/routes/plugins.js +0 -118
- package/dist/routes/plugins.js.map +0 -1
- package/dist/routes/projects.d.ts +0 -3
- package/dist/routes/projects.d.ts.map +0 -1
- package/dist/routes/projects.js +0 -456
- package/dist/routes/projects.js.map +0 -1
- package/dist/routes/tasks.d.ts +0 -3
- package/dist/routes/tasks.d.ts.map +0 -1
- package/dist/routes/tasks.js +0 -187
- package/dist/routes/tasks.js.map +0 -1
- package/dist/routes/tmux.d.ts +0 -3
- package/dist/routes/tmux.d.ts.map +0 -1
- package/dist/routes/tmux.js +0 -1287
- package/dist/routes/tmux.js.map +0 -1
- package/dist/routes/tunnel.d.ts +0 -25
- package/dist/routes/tunnel.d.ts.map +0 -1
- package/dist/routes/tunnel.js +0 -498
- package/dist/routes/tunnel.js.map +0 -1
- package/dist/services/ModulePermissions.d.ts +0 -100
- package/dist/services/ModulePermissions.d.ts.map +0 -1
- package/dist/services/ModulePermissions.js +0 -322
- package/dist/services/ModulePermissions.js.map +0 -1
- package/dist/services/ModuleRegistryService.d.ts +0 -152
- package/dist/services/ModuleRegistryService.d.ts.map +0 -1
- package/dist/services/ModuleRegistryService.js +0 -547
- package/dist/services/ModuleRegistryService.js.map +0 -1
- package/dist/services/agent.service.d.ts +0 -19
- package/dist/services/agent.service.d.ts.map +0 -1
- package/dist/services/agent.service.js +0 -91
- package/dist/services/agent.service.js.map +0 -1
- package/dist/services/bootstrap.d.ts +0 -22
- package/dist/services/bootstrap.d.ts.map +0 -1
- package/dist/services/bootstrap.js +0 -283
- package/dist/services/bootstrap.js.map +0 -1
- package/dist/services/completion.d.ts +0 -46
- package/dist/services/completion.d.ts.map +0 -1
- package/dist/services/completion.js +0 -317
- package/dist/services/completion.js.map +0 -1
- package/dist/services/gateway-client.d.ts +0 -61
- package/dist/services/gateway-client.d.ts.map +0 -1
- package/dist/services/gateway-client.js +0 -147
- package/dist/services/gateway-client.js.map +0 -1
- package/dist/services/logger.d.ts +0 -61
- package/dist/services/logger.d.ts.map +0 -1
- package/dist/services/logger.js +0 -223
- package/dist/services/logger.js.map +0 -1
- package/dist/services/plugin-manager.d.ts +0 -105
- package/dist/services/plugin-manager.d.ts.map +0 -1
- package/dist/services/plugin-manager.js +0 -250
- package/dist/services/plugin-manager.js.map +0 -1
- package/dist/services/plugin-state-backend.d.ts +0 -22
- package/dist/services/plugin-state-backend.d.ts.map +0 -1
- package/dist/services/plugin-state-backend.js +0 -103
- package/dist/services/plugin-state-backend.js.map +0 -1
- package/dist/services/plugin-state-external.d.ts +0 -36
- package/dist/services/plugin-state-external.d.ts.map +0 -1
- package/dist/services/plugin-state-external.js +0 -144
- package/dist/services/plugin-state-external.js.map +0 -1
- package/dist/services/plugin-state-router.d.ts +0 -40
- package/dist/services/plugin-state-router.d.ts.map +0 -1
- package/dist/services/plugin-state-router.js +0 -82
- package/dist/services/plugin-state-router.js.map +0 -1
- package/dist/services/port-utils.d.ts +0 -11
- package/dist/services/port-utils.d.ts.map +0 -1
- package/dist/services/port-utils.js +0 -39
- package/dist/services/port-utils.js.map +0 -1
- package/dist/services/service-manager.d.ts +0 -50
- package/dist/services/service-manager.d.ts.map +0 -1
- package/dist/services/service-manager.js +0 -389
- package/dist/services/service-manager.js.map +0 -1
package/dist/routes/bookmarks.js
DELETED
|
@@ -1,195 +0,0 @@
|
|
|
1
|
-
import crypto from "node:crypto";
|
|
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: crypto.randomUUID(),
|
|
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", {
|
|
94
|
-
id,
|
|
95
|
-
projectId: bookmark.projectId,
|
|
96
|
-
});
|
|
97
|
-
return { success: true };
|
|
98
|
-
}
|
|
99
|
-
catch (error) {
|
|
100
|
-
return reply.code(500).send({
|
|
101
|
-
error: "Failed to delete bookmarked command",
|
|
102
|
-
details: error instanceof Error ? error.message : "Unknown error",
|
|
103
|
-
});
|
|
104
|
-
}
|
|
105
|
-
});
|
|
106
|
-
// Execute bookmarked command
|
|
107
|
-
fastify.post("/:id/execute", async (request, reply) => {
|
|
108
|
-
const { id } = request.params;
|
|
109
|
-
const { sessionId, cwd } = request.body;
|
|
110
|
-
try {
|
|
111
|
-
const bookmark = fastify.db.getBookmarkedCommand(id);
|
|
112
|
-
if (!bookmark) {
|
|
113
|
-
return reply.code(404).send({ error: "Bookmarked command not found" });
|
|
114
|
-
}
|
|
115
|
-
// If sessionId is provided, execute in tmux session
|
|
116
|
-
if (sessionId) {
|
|
117
|
-
const session = fastify.db.getTmuxSession(sessionId);
|
|
118
|
-
if (!session) {
|
|
119
|
-
return reply.code(404).send({ error: "Session not found" });
|
|
120
|
-
}
|
|
121
|
-
// Execute command in tmux session
|
|
122
|
-
const { spawn } = await import("child_process");
|
|
123
|
-
const tmuxProcess = spawn("tmux", [
|
|
124
|
-
"send-keys",
|
|
125
|
-
"-t",
|
|
126
|
-
session.sessionName,
|
|
127
|
-
bookmark.command,
|
|
128
|
-
"Enter",
|
|
129
|
-
]);
|
|
130
|
-
await new Promise((resolve, reject) => {
|
|
131
|
-
tmuxProcess.on("close", (code) => {
|
|
132
|
-
if (code === 0)
|
|
133
|
-
resolve(undefined);
|
|
134
|
-
else
|
|
135
|
-
reject(new Error(`Tmux exited with code ${code}`));
|
|
136
|
-
});
|
|
137
|
-
tmuxProcess.on("error", reject);
|
|
138
|
-
});
|
|
139
|
-
// Emit command executed event
|
|
140
|
-
fastify.io.emit("bookmark:executed", {
|
|
141
|
-
bookmarkId: id,
|
|
142
|
-
command: bookmark.command,
|
|
143
|
-
sessionId,
|
|
144
|
-
});
|
|
145
|
-
return {
|
|
146
|
-
success: true,
|
|
147
|
-
executedIn: "tmux",
|
|
148
|
-
sessionId,
|
|
149
|
-
};
|
|
150
|
-
}
|
|
151
|
-
else {
|
|
152
|
-
// Execute as a task
|
|
153
|
-
const task = fastify.db.createTask({
|
|
154
|
-
id: crypto.randomUUID(),
|
|
155
|
-
type: "command",
|
|
156
|
-
status: "pending",
|
|
157
|
-
payload: JSON.stringify({
|
|
158
|
-
command: bookmark.command,
|
|
159
|
-
cwd: cwd || process.cwd(),
|
|
160
|
-
}),
|
|
161
|
-
});
|
|
162
|
-
// Emit task created event
|
|
163
|
-
fastify.io.emit("task:created", task);
|
|
164
|
-
// Process task asynchronously (reuse task processing logic)
|
|
165
|
-
// This would need to be imported from tasks route
|
|
166
|
-
return {
|
|
167
|
-
success: true,
|
|
168
|
-
executedIn: "task",
|
|
169
|
-
taskId: task.id,
|
|
170
|
-
};
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
catch (error) {
|
|
174
|
-
return reply.code(500).send({
|
|
175
|
-
error: "Failed to execute bookmarked command",
|
|
176
|
-
details: error instanceof Error ? error.message : "Unknown error",
|
|
177
|
-
});
|
|
178
|
-
}
|
|
179
|
-
});
|
|
180
|
-
// Get bookmarks by category
|
|
181
|
-
fastify.get("/category/:category", async (request, _reply) => {
|
|
182
|
-
const { category } = request.params;
|
|
183
|
-
// Get all bookmarks and filter by category
|
|
184
|
-
const allBookmarks = [
|
|
185
|
-
...fastify.db.getBookmarkedCommandsByProject(null),
|
|
186
|
-
// Would need to implement getAllBookmarkedCommands to get all
|
|
187
|
-
];
|
|
188
|
-
const filteredBookmarks = allBookmarks.filter((b) => b.category === category);
|
|
189
|
-
return {
|
|
190
|
-
bookmarks: filteredBookmarks,
|
|
191
|
-
category,
|
|
192
|
-
};
|
|
193
|
-
});
|
|
194
|
-
};
|
|
195
|
-
//# sourceMappingURL=bookmarks.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bookmarks.js","sourceRoot":"","sources":["../../src/routes/bookmarks.ts"],"names":[],"mappings":"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"}
|
package/dist/routes/config.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/routes/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAM7C,eAAO,MAAM,YAAY,EAAE,kBAyH1B,CAAC"}
|
package/dist/routes/config.js
DELETED
|
@@ -1,106 +0,0 @@
|
|
|
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
|
-
return {
|
|
96
|
-
status: "online",
|
|
97
|
-
timestamp: new Date().toISOString(),
|
|
98
|
-
stats: {
|
|
99
|
-
activeSessions: tmuxSessions.filter((s) => s.status === "active")
|
|
100
|
-
.length,
|
|
101
|
-
totalSessions: tmuxSessions.length,
|
|
102
|
-
},
|
|
103
|
-
};
|
|
104
|
-
});
|
|
105
|
-
};
|
|
106
|
-
//# sourceMappingURL=config.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/routes/config.ts"],"names":[],"mappings":"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"}
|
package/dist/routes/files.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/routes/files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAoB7C,eAAO,MAAM,UAAU,EAAE,kBA+VxB,CAAC"}
|
package/dist/routes/files.js
DELETED
|
@@ -1,313 +0,0 @@
|
|
|
1
|
-
import { promises as fs } from "fs";
|
|
2
|
-
import path from "path";
|
|
3
|
-
export const fileRoutes = async (fastify) => {
|
|
4
|
-
// Read file
|
|
5
|
-
fastify.post("/read", async (request, reply) => {
|
|
6
|
-
const { path: filePath, projectId } = request.body;
|
|
7
|
-
try {
|
|
8
|
-
// Security check - prevent directory traversal
|
|
9
|
-
const normalizedPath = path.normalize(filePath);
|
|
10
|
-
if (normalizedPath.includes("..")) {
|
|
11
|
-
return reply
|
|
12
|
-
.code(403)
|
|
13
|
-
.send({ error: "Directory traversal not allowed" });
|
|
14
|
-
}
|
|
15
|
-
// Check for sensitive files
|
|
16
|
-
const sensitivePatterns = [
|
|
17
|
-
/\.env$/,
|
|
18
|
-
/\.pem$/,
|
|
19
|
-
/\.key$/,
|
|
20
|
-
/id_rsa/,
|
|
21
|
-
/\.ssh\//,
|
|
22
|
-
/\.git\/config$/,
|
|
23
|
-
/\.npmrc$/,
|
|
24
|
-
];
|
|
25
|
-
if (sensitivePatterns.some((pattern) => pattern.test(normalizedPath))) {
|
|
26
|
-
return reply
|
|
27
|
-
.code(403)
|
|
28
|
-
.send({ error: "Access to sensitive files not allowed" });
|
|
29
|
-
}
|
|
30
|
-
const content = await fs.readFile(normalizedPath, "utf-8");
|
|
31
|
-
// Emit file read event
|
|
32
|
-
fastify.io.emit("file:read", {
|
|
33
|
-
path: normalizedPath,
|
|
34
|
-
projectId,
|
|
35
|
-
size: content.length,
|
|
36
|
-
});
|
|
37
|
-
return {
|
|
38
|
-
content,
|
|
39
|
-
path: normalizedPath,
|
|
40
|
-
size: content.length,
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
catch (error) {
|
|
44
|
-
const nodeError = error;
|
|
45
|
-
if (nodeError.code === "ENOENT") {
|
|
46
|
-
return reply.code(404).send({ error: "File not found" });
|
|
47
|
-
}
|
|
48
|
-
if (nodeError.code === "EACCES") {
|
|
49
|
-
return reply.code(403).send({ error: "Permission denied" });
|
|
50
|
-
}
|
|
51
|
-
return reply.code(500).send({
|
|
52
|
-
error: "Failed to read file",
|
|
53
|
-
details: error instanceof Error ? error.message : "Unknown error",
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
});
|
|
57
|
-
// Write file
|
|
58
|
-
fastify.post("/write", async (request, reply) => {
|
|
59
|
-
const { path: filePath, content, projectId, } = request.body;
|
|
60
|
-
try {
|
|
61
|
-
// Security check - prevent directory traversal
|
|
62
|
-
const normalizedPath = path.normalize(filePath);
|
|
63
|
-
if (normalizedPath.includes("..")) {
|
|
64
|
-
return reply
|
|
65
|
-
.code(403)
|
|
66
|
-
.send({ error: "Directory traversal not allowed" });
|
|
67
|
-
}
|
|
68
|
-
// Create directory if it doesn't exist
|
|
69
|
-
const dir = path.dirname(normalizedPath);
|
|
70
|
-
await fs.mkdir(dir, { recursive: true });
|
|
71
|
-
// Write file
|
|
72
|
-
await fs.writeFile(normalizedPath, content, "utf-8");
|
|
73
|
-
// Get file stats
|
|
74
|
-
const stats = await fs.stat(normalizedPath);
|
|
75
|
-
// Emit file write event
|
|
76
|
-
fastify.io.emit("file:write", {
|
|
77
|
-
path: normalizedPath,
|
|
78
|
-
projectId,
|
|
79
|
-
size: stats.size,
|
|
80
|
-
});
|
|
81
|
-
return {
|
|
82
|
-
success: true,
|
|
83
|
-
path: normalizedPath,
|
|
84
|
-
size: stats.size,
|
|
85
|
-
};
|
|
86
|
-
}
|
|
87
|
-
catch (error) {
|
|
88
|
-
const nodeError = error;
|
|
89
|
-
if (nodeError.code === "EACCES") {
|
|
90
|
-
return reply.code(403).send({ error: "Permission denied" });
|
|
91
|
-
}
|
|
92
|
-
return reply.code(500).send({
|
|
93
|
-
error: "Failed to write file",
|
|
94
|
-
details: error instanceof Error ? error.message : "Unknown error",
|
|
95
|
-
});
|
|
96
|
-
}
|
|
97
|
-
});
|
|
98
|
-
// List directory
|
|
99
|
-
fastify.post("/list", async (request, reply) => {
|
|
100
|
-
const { path: dirPath } = request.body;
|
|
101
|
-
try {
|
|
102
|
-
// Security check - prevent directory traversal
|
|
103
|
-
const normalizedPath = path.normalize(dirPath);
|
|
104
|
-
if (normalizedPath.includes("..")) {
|
|
105
|
-
return reply
|
|
106
|
-
.code(403)
|
|
107
|
-
.send({ error: "Directory traversal not allowed" });
|
|
108
|
-
}
|
|
109
|
-
const entries = await fs.readdir(normalizedPath, {
|
|
110
|
-
withFileTypes: true,
|
|
111
|
-
});
|
|
112
|
-
const files = await Promise.all(entries.map(async (entry) => {
|
|
113
|
-
const fullPath = path.join(normalizedPath, entry.name);
|
|
114
|
-
let stats;
|
|
115
|
-
try {
|
|
116
|
-
stats = await fs.stat(fullPath);
|
|
117
|
-
}
|
|
118
|
-
catch {
|
|
119
|
-
// Handle broken symlinks
|
|
120
|
-
stats = null;
|
|
121
|
-
}
|
|
122
|
-
return {
|
|
123
|
-
name: entry.name,
|
|
124
|
-
path: fullPath,
|
|
125
|
-
type: entry.isDirectory()
|
|
126
|
-
? "directory"
|
|
127
|
-
: entry.isFile()
|
|
128
|
-
? "file"
|
|
129
|
-
: entry.isSymbolicLink()
|
|
130
|
-
? "symlink"
|
|
131
|
-
: "other",
|
|
132
|
-
size: stats?.size || 0,
|
|
133
|
-
modified: stats?.mtime || null,
|
|
134
|
-
permissions: stats?.mode || null,
|
|
135
|
-
};
|
|
136
|
-
}));
|
|
137
|
-
// Sort: directories first, then files
|
|
138
|
-
files.sort((a, b) => {
|
|
139
|
-
if (a.type === "directory" && b.type !== "directory")
|
|
140
|
-
return -1;
|
|
141
|
-
if (a.type !== "directory" && b.type === "directory")
|
|
142
|
-
return 1;
|
|
143
|
-
return a.name.localeCompare(b.name);
|
|
144
|
-
});
|
|
145
|
-
return {
|
|
146
|
-
path: normalizedPath,
|
|
147
|
-
files,
|
|
148
|
-
count: files.length,
|
|
149
|
-
};
|
|
150
|
-
}
|
|
151
|
-
catch (error) {
|
|
152
|
-
const nodeError = error;
|
|
153
|
-
if (nodeError.code === "ENOENT") {
|
|
154
|
-
return reply.code(404).send({ error: "Directory not found" });
|
|
155
|
-
}
|
|
156
|
-
if (nodeError.code === "ENOTDIR") {
|
|
157
|
-
return reply.code(400).send({ error: "Path is not a directory" });
|
|
158
|
-
}
|
|
159
|
-
if (nodeError.code === "EACCES") {
|
|
160
|
-
return reply.code(403).send({ error: "Permission denied" });
|
|
161
|
-
}
|
|
162
|
-
return reply.code(500).send({
|
|
163
|
-
error: "Failed to list directory",
|
|
164
|
-
details: error instanceof Error ? error.message : "Unknown error",
|
|
165
|
-
});
|
|
166
|
-
}
|
|
167
|
-
});
|
|
168
|
-
// Check if path exists
|
|
169
|
-
fastify.post("/exists", async (request, reply) => {
|
|
170
|
-
const { path: checkPath } = request.body;
|
|
171
|
-
try {
|
|
172
|
-
// Security check - prevent directory traversal
|
|
173
|
-
const normalizedPath = path.normalize(checkPath);
|
|
174
|
-
if (normalizedPath.includes("..")) {
|
|
175
|
-
return reply
|
|
176
|
-
.code(403)
|
|
177
|
-
.send({ error: "Directory traversal not allowed" });
|
|
178
|
-
}
|
|
179
|
-
await fs.access(normalizedPath);
|
|
180
|
-
const stats = await fs.stat(normalizedPath);
|
|
181
|
-
return {
|
|
182
|
-
exists: true,
|
|
183
|
-
path: normalizedPath,
|
|
184
|
-
type: stats.isDirectory()
|
|
185
|
-
? "directory"
|
|
186
|
-
: stats.isFile()
|
|
187
|
-
? "file"
|
|
188
|
-
: "other",
|
|
189
|
-
size: stats.size,
|
|
190
|
-
modified: stats.mtime,
|
|
191
|
-
};
|
|
192
|
-
}
|
|
193
|
-
catch (error) {
|
|
194
|
-
const nodeError = error;
|
|
195
|
-
if (nodeError.code === "ENOENT") {
|
|
196
|
-
return {
|
|
197
|
-
exists: false,
|
|
198
|
-
path: path.normalize(checkPath),
|
|
199
|
-
};
|
|
200
|
-
}
|
|
201
|
-
return reply.code(500).send({
|
|
202
|
-
error: "Failed to check path",
|
|
203
|
-
details: error instanceof Error ? error.message : "Unknown error",
|
|
204
|
-
});
|
|
205
|
-
}
|
|
206
|
-
});
|
|
207
|
-
// Delete file or directory
|
|
208
|
-
fastify.post("/delete", async (request, reply) => {
|
|
209
|
-
const { path: deletePath } = request.body;
|
|
210
|
-
try {
|
|
211
|
-
// Security check - prevent directory traversal
|
|
212
|
-
const normalizedPath = path.normalize(deletePath);
|
|
213
|
-
if (normalizedPath.includes("..")) {
|
|
214
|
-
return reply
|
|
215
|
-
.code(403)
|
|
216
|
-
.send({ error: "Directory traversal not allowed" });
|
|
217
|
-
}
|
|
218
|
-
// Additional security check for important paths
|
|
219
|
-
const protectedPaths = [
|
|
220
|
-
"/",
|
|
221
|
-
"/etc",
|
|
222
|
-
"/usr",
|
|
223
|
-
"/bin",
|
|
224
|
-
"/sbin",
|
|
225
|
-
"/var",
|
|
226
|
-
"/opt",
|
|
227
|
-
];
|
|
228
|
-
if (protectedPaths.includes(normalizedPath) ||
|
|
229
|
-
protectedPaths.some((p) => normalizedPath.startsWith(p + "/"))) {
|
|
230
|
-
return reply
|
|
231
|
-
.code(403)
|
|
232
|
-
.send({ error: "Cannot delete system directories" });
|
|
233
|
-
}
|
|
234
|
-
const stats = await fs.stat(normalizedPath);
|
|
235
|
-
if (stats.isDirectory()) {
|
|
236
|
-
await fs.rmdir(normalizedPath, { recursive: true });
|
|
237
|
-
}
|
|
238
|
-
else {
|
|
239
|
-
await fs.unlink(normalizedPath);
|
|
240
|
-
}
|
|
241
|
-
// Emit file delete event
|
|
242
|
-
fastify.io.emit("file:delete", {
|
|
243
|
-
path: normalizedPath,
|
|
244
|
-
type: stats.isDirectory() ? "directory" : "file",
|
|
245
|
-
});
|
|
246
|
-
return {
|
|
247
|
-
success: true,
|
|
248
|
-
path: normalizedPath,
|
|
249
|
-
};
|
|
250
|
-
}
|
|
251
|
-
catch (error) {
|
|
252
|
-
const nodeError = error;
|
|
253
|
-
if (nodeError.code === "ENOENT") {
|
|
254
|
-
return reply.code(404).send({ error: "Path not found" });
|
|
255
|
-
}
|
|
256
|
-
if (nodeError.code === "EACCES") {
|
|
257
|
-
return reply.code(403).send({ error: "Permission denied" });
|
|
258
|
-
}
|
|
259
|
-
return reply.code(500).send({
|
|
260
|
-
error: "Failed to delete path",
|
|
261
|
-
details: error instanceof Error ? error.message : "Unknown error",
|
|
262
|
-
});
|
|
263
|
-
}
|
|
264
|
-
});
|
|
265
|
-
// Read README file
|
|
266
|
-
fastify.post("/readme", async (request, reply) => {
|
|
267
|
-
const { path: projectPath } = request.body;
|
|
268
|
-
try {
|
|
269
|
-
// Security check - prevent directory traversal
|
|
270
|
-
const normalizedPath = path.normalize(projectPath);
|
|
271
|
-
if (normalizedPath.includes("..")) {
|
|
272
|
-
return reply
|
|
273
|
-
.code(403)
|
|
274
|
-
.send({ error: "Directory traversal not allowed" });
|
|
275
|
-
}
|
|
276
|
-
// README file variants to check
|
|
277
|
-
const readmeVariants = [
|
|
278
|
-
"README.md",
|
|
279
|
-
"readme.md",
|
|
280
|
-
"README.MD",
|
|
281
|
-
"README",
|
|
282
|
-
"readme",
|
|
283
|
-
"README.txt",
|
|
284
|
-
"readme.txt",
|
|
285
|
-
"README.rst",
|
|
286
|
-
"readme.rst",
|
|
287
|
-
];
|
|
288
|
-
for (const variant of readmeVariants) {
|
|
289
|
-
const readmePath = path.join(normalizedPath, variant);
|
|
290
|
-
try {
|
|
291
|
-
const content = await fs.readFile(readmePath, "utf-8");
|
|
292
|
-
return {
|
|
293
|
-
content,
|
|
294
|
-
path: readmePath,
|
|
295
|
-
variant,
|
|
296
|
-
size: content.length,
|
|
297
|
-
};
|
|
298
|
-
}
|
|
299
|
-
catch {
|
|
300
|
-
// Continue to next variant
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
return reply.code(404).send({ error: "No README file found" });
|
|
304
|
-
}
|
|
305
|
-
catch (error) {
|
|
306
|
-
return reply.code(500).send({
|
|
307
|
-
error: "Failed to read README",
|
|
308
|
-
details: error instanceof Error ? error.message : "Unknown error",
|
|
309
|
-
});
|
|
310
|
-
}
|
|
311
|
-
});
|
|
312
|
-
};
|
|
313
|
-
//# sourceMappingURL=files.js.map
|