@burdenoff/vibe-agent 2.2.0 → 2.3.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-6mmbmske.js → app-sm6n9xst.js} +13 -14
- package/dist/{app-6mmbmske.js.map → app-sm6n9xst.js.map} +3 -3
- package/dist/cli.js +28 -27
- package/dist/cli.js.map +5 -5
- package/dist/{index-41m1exz7.js → index-3rjnbp97.js} +3 -4
- package/dist/index-3rjnbp97.js.map +13 -0
- package/dist/{index-q4ytrfx7.js → index-6vry08rz.js} +4 -5
- package/dist/index-6vry08rz.js.map +13 -0
- package/dist/{index-9tgyd3ep.js → index-b1eq3qvs.js} +9 -7
- package/dist/{index-9tgyd3ep.js.map → index-b1eq3qvs.js.map} +3 -3
- package/dist/{index-wdtxbebz.js → index-fm6gqenc.js} +3 -4
- package/dist/index-fm6gqenc.js.map +13 -0
- package/dist/{index-3v78e2cn.js → index-s7ff1fj1.js} +88 -46
- package/dist/index-s7ff1fj1.js.map +11 -0
- package/dist/{index-xn4tarcd.js → index-t4qgjy5w.js} +4 -4
- package/dist/{index-qthbtg9n.js → index-wmvkjcjj.js} +4 -5
- package/dist/index-wmvkjcjj.js.map +13 -0
- package/dist/index.js +2 -2
- package/dist/{package-ywexp6sg.js → package-04nkt49b.js} +5 -3
- package/dist/{package-ywexp6sg.js.map → package-04nkt49b.js.map} +1 -1
- package/dist/{plugin-system-v7a7xnhk.js → plugin-system-7r9mb1tb.js} +17 -13
- package/dist/plugin-system-7r9mb1tb.js.map +10 -0
- package/package.json +3 -1
- package/dist/index-3v78e2cn.js.map +0 -11
- package/dist/index-41m1exz7.js.map +0 -13
- package/dist/index-q4ytrfx7.js.map +0 -13
- package/dist/index-qthbtg9n.js.map +0 -13
- package/dist/index-wdtxbebz.js.map +0 -13
- package/dist/plugin-system-v7a7xnhk.js.map +0 -10
- /package/dist/{index-xn4tarcd.js.map → index-t4qgjy5w.js.map} +0 -0
|
@@ -17,7 +17,7 @@ import {
|
|
|
17
17
|
} from "./index-g8dczzvv.js";
|
|
18
18
|
import {
|
|
19
19
|
PluginManager
|
|
20
|
-
} from "./plugin-system-
|
|
20
|
+
} from "./plugin-system-7r9mb1tb.js";
|
|
21
21
|
|
|
22
22
|
// node_modules/@elysiajs/cors/dist/index.mjs
|
|
23
23
|
var isBun = typeof new Headers()?.toJSON === "function";
|
|
@@ -710,7 +710,6 @@ function createUIServer(pluginManager) {
|
|
|
710
710
|
}
|
|
711
711
|
|
|
712
712
|
// src/middleware/auth.ts
|
|
713
|
-
import crypto from "crypto";
|
|
714
713
|
import { join as join3 } from "path";
|
|
715
714
|
import { homedir } from "os";
|
|
716
715
|
import { existsSync as existsSync2, readFileSync } from "fs";
|
|
@@ -730,20 +729,20 @@ function isExempt(path, dynamicPaths) {
|
|
|
730
729
|
return dynamicPaths.some((prefix) => path.startsWith(prefix));
|
|
731
730
|
}
|
|
732
731
|
function generateApiKey() {
|
|
733
|
-
const bytes =
|
|
734
|
-
|
|
732
|
+
const bytes = new Uint8Array(32);
|
|
733
|
+
crypto.getRandomValues(bytes);
|
|
734
|
+
return `vcak_${Buffer.from(bytes).toString("base64url")}`;
|
|
735
735
|
}
|
|
736
736
|
function loadStaticApiKey() {
|
|
737
737
|
const configFile = join3(homedir(), ".vibecontrols", "config.json");
|
|
738
|
-
if (existsSync2(configFile))
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
738
|
+
if (!existsSync2(configFile))
|
|
739
|
+
return;
|
|
740
|
+
try {
|
|
741
|
+
const config = JSON.parse(readFileSync(configFile, "utf8"));
|
|
742
|
+
return config["static-api-key"] || undefined;
|
|
743
|
+
} catch {
|
|
744
|
+
return;
|
|
745
745
|
}
|
|
746
|
-
return;
|
|
747
746
|
}
|
|
748
747
|
function createAuthPlugin(getPluginPublicPaths) {
|
|
749
748
|
const envKey = process.env.AGENT_API_KEY;
|
|
@@ -1162,5 +1161,5 @@ async function getPackageVersion() {
|
|
|
1162
1161
|
|
|
1163
1162
|
export { createApp };
|
|
1164
1163
|
|
|
1165
|
-
//# debugId=
|
|
1166
|
-
//# sourceMappingURL=app-
|
|
1164
|
+
//# debugId=47D5567939C3896F64756E2164756E21
|
|
1165
|
+
//# sourceMappingURL=app-sm6n9xst.js.map
|
|
@@ -6,14 +6,14 @@
|
|
|
6
6
|
"/**\n * Agent Database (bun:sqlite)\n *\n * Core database for the VibeControls agent. Uses bun:sqlite (native Bun SQLite).\n * Stores only core agent state — plugin-specific tables have been moved\n * to their respective plugins via the StorageProvider KV interface.\n *\n * Core tables:\n * - tasks — Background task tracking\n * - agent_config — Key-value configuration store\n * - git_repositories — Tracked git repos\n * - bookmarked_commands — Saved commands\n * - notifications — Notification history\n * - plugin_state — Plugin KV store (default StorageProvider backend)\n */\n\nimport { Database } from \"bun:sqlite\";\nimport { join } from \"node:path\";\nimport os from \"node:os\";\nimport { existsSync, mkdirSync } from \"node:fs\";\n\nimport type {\n Task,\n AgentConfig,\n GitRepository,\n BookmarkedCommand,\n Notification,\n StorageEntry,\n} from \"../core/types.js\";\n\n// ── Default DB Path ─────────────────────────────────────────────────────\n\nconst VIBECONTROLS_DIR = join(os.homedir(), \".vibecontrols\");\nconst DEFAULT_DB_PATH = join(VIBECONTROLS_DIR, \"agent.db\");\n\n// ── AgentDatabase Class ─────────────────────────────────────────────────\n\nexport class AgentDatabase {\n private db: Database;\n\n constructor(dbPath: string = DEFAULT_DB_PATH) {\n // Ensure directory exists\n const dir = join(dbPath, \"..\");\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n\n this.db = new Database(dbPath);\n this.db.exec(\"PRAGMA journal_mode = WAL\");\n this.db.exec(\"PRAGMA busy_timeout = 5000\");\n this.db.exec(\"PRAGMA synchronous = NORMAL\");\n this.db.exec(\"PRAGMA foreign_keys = ON\");\n this.initializeSchema();\n }\n\n // ── Schema ──────────────────────────────────────────────────────────\n\n private initializeSchema(): void {\n this.db.exec(`\n CREATE TABLE IF NOT EXISTS tasks (\n id TEXT PRIMARY KEY,\n type TEXT CHECK(type IN ('command', 'script', 'file_operation')) NOT NULL,\n status TEXT CHECK(status IN ('pending', 'running', 'completed', 'failed')) DEFAULT 'pending',\n payload TEXT NOT NULL,\n result TEXT,\n error TEXT,\n createdAt TEXT DEFAULT (datetime('now')),\n updatedAt TEXT DEFAULT (datetime('now'))\n );\n\n CREATE TABLE IF NOT EXISTS agent_config (\n id TEXT PRIMARY KEY,\n key TEXT UNIQUE NOT NULL,\n value TEXT NOT NULL,\n updatedAt TEXT DEFAULT (datetime('now'))\n );\n\n CREATE TABLE IF NOT EXISTS git_repositories (\n id TEXT PRIMARY KEY,\n path TEXT UNIQUE NOT NULL,\n name TEXT NOT NULL,\n parentPath TEXT,\n isSubmodule INTEGER DEFAULT 0,\n projectType TEXT,\n vitePort INTEGER,\n lastScanned TEXT DEFAULT (datetime('now')),\n createdAt TEXT DEFAULT (datetime('now'))\n );\n\n CREATE TABLE IF NOT EXISTS bookmarked_commands (\n id TEXT PRIMARY KEY,\n projectId TEXT,\n command TEXT NOT NULL,\n description TEXT,\n category TEXT,\n createdAt TEXT DEFAULT (datetime('now'))\n );\n\n CREATE TABLE IF NOT EXISTS notifications (\n id TEXT PRIMARY KEY,\n sessionName TEXT,\n projectId TEXT,\n type TEXT CHECK(type IN ('info', 'success', 'warning', 'error')) DEFAULT 'info',\n title TEXT NOT NULL,\n message TEXT NOT NULL,\n status TEXT CHECK(status IN ('unread', 'read')) DEFAULT 'unread',\n createdAt TEXT DEFAULT (datetime('now'))\n );\n\n CREATE TABLE IF NOT EXISTS plugin_state (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n pluginName TEXT NOT NULL,\n key TEXT NOT NULL,\n value TEXT NOT NULL,\n updatedAt TEXT DEFAULT (datetime('now')),\n UNIQUE(pluginName, key)\n );\n\n -- Indexes\n CREATE INDEX IF NOT EXISTS idx_tasks_status ON tasks(status);\n CREATE INDEX IF NOT EXISTS idx_tasks_type ON tasks(type);\n CREATE INDEX IF NOT EXISTS idx_git_repositories_path ON git_repositories(path);\n CREATE INDEX IF NOT EXISTS idx_git_repositories_parentPath ON git_repositories(parentPath);\n CREATE INDEX IF NOT EXISTS idx_bookmarked_commands_projectId ON bookmarked_commands(projectId);\n CREATE INDEX IF NOT EXISTS idx_notifications_status ON notifications(status);\n CREATE INDEX IF NOT EXISTS idx_notifications_projectId ON notifications(projectId);\n CREATE INDEX IF NOT EXISTS idx_plugin_state_plugin ON plugin_state(pluginName);\n `);\n }\n\n // ── Task Methods ────────────────────────────────────────────────────\n\n createTask(task: Omit<Task, \"createdAt\" | \"updatedAt\">): Task {\n const stmt = this.db.prepare(`\n INSERT INTO tasks (id, type, status, payload, result, error)\n VALUES ($id, $type, $status, $payload, $result, $error)\n `);\n stmt.run({\n $id: task.id,\n $type: task.type,\n $status: task.status,\n $payload: task.payload,\n $result: task.result ?? null,\n $error: task.error ?? null,\n });\n return this.getTask(task.id)!;\n }\n\n getTask(id: string): Task | undefined {\n return this.db.prepare(\"SELECT * FROM tasks WHERE id = ?\").get(id) as\n | Task\n | undefined;\n }\n\n getAllTasks(): Task[] {\n return this.db\n .prepare(\"SELECT * FROM tasks ORDER BY createdAt DESC\")\n .all() as Task[];\n }\n\n getPendingTasks(): Task[] {\n return this.db\n .prepare(\n \"SELECT * FROM tasks WHERE status = 'pending' ORDER BY createdAt\",\n )\n .all() as Task[];\n }\n\n updateTask(id: string, updates: Partial<Task>): void {\n const fields = Object.keys(updates)\n .filter((k) => k !== \"id\" && k !== \"createdAt\")\n .map((k) => `${k} = $${k}`)\n .join(\", \");\n if (!fields) return;\n\n const stmt = this.db.prepare(\n `UPDATE tasks SET ${fields}, updatedAt = datetime('now') WHERE id = $id`,\n );\n const params: Record<string, unknown> = { $id: id };\n for (const [k, v] of Object.entries(updates)) {\n params[`$${k}`] = v ?? null;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n stmt.run(params as any);\n }\n\n cancelTask(id: string): boolean {\n const result = this.db\n .prepare(\n \"UPDATE tasks SET status = 'failed', error = 'Cancelled', updatedAt = datetime('now') WHERE id = ? AND status IN ('pending', 'running')\",\n )\n .run(id);\n return result.changes > 0;\n }\n\n // ── Config Methods ──────────────────────────────────────────────────\n\n getConfig(key: string): string | undefined {\n const row = this.db\n .prepare(\"SELECT value FROM agent_config WHERE key = ?\")\n .get(key) as { value: string } | null;\n if (row?.value === \"__DELETED__\") return undefined;\n return row?.value;\n }\n\n setConfig(key: string, value: string): void {\n this.db\n .prepare(\n `\n INSERT INTO agent_config (id, key, value)\n VALUES ($id, $key, $value)\n ON CONFLICT(key) DO UPDATE SET value = $value, updatedAt = datetime('now')\n `,\n )\n .run({ $id: key, $key: key, $value: value });\n }\n\n deleteConfig(key: string): boolean {\n const result = this.db\n .prepare(\"DELETE FROM agent_config WHERE key = ?\")\n .run(key);\n return result.changes > 0;\n }\n\n getAllConfig(): Record<string, string> {\n const rows = this.db\n .prepare(\"SELECT key, value FROM agent_config\")\n .all() as Array<{ key: string; value: string }>;\n return rows.reduce(\n (acc, row) => {\n if (row.value !== \"__DELETED__\") {\n acc[row.key] = row.value;\n }\n return acc;\n },\n {} as Record<string, string>,\n );\n }\n\n bulkSetConfig(entries: Record<string, string>): void {\n const stmt = this.db.prepare(`\n INSERT INTO agent_config (id, key, value)\n VALUES ($id, $key, $value)\n ON CONFLICT(key) DO UPDATE SET value = $value, updatedAt = datetime('now')\n `);\n const transaction = this.db.transaction(\n (entries: Array<[string, string]>) => {\n for (const [key, value] of entries) {\n stmt.run({ $id: key, $key: key, $value: value });\n }\n },\n );\n transaction(Object.entries(entries));\n }\n\n getConfigStatus(): { totalKeys: number; lastUpdated: string | null } {\n const count = this.db\n .prepare(\"SELECT COUNT(*) as count FROM agent_config\")\n .get() as { count: number };\n const latest = this.db\n .prepare(\"SELECT MAX(updatedAt) as latest FROM agent_config\")\n .get() as { latest: string | null };\n return { totalKeys: count.count, lastUpdated: latest.latest };\n }\n\n // ── Git Repository Methods ──────────────────────────────────────────\n\n createGitRepository(\n repo: Omit<GitRepository, \"createdAt\" | \"lastScanned\">,\n ): GitRepository {\n this.db\n .prepare(\n `\n INSERT INTO git_repositories (id, path, name, parentPath, isSubmodule, projectType, vitePort)\n VALUES ($id, $path, $name, $parentPath, $isSubmodule, $projectType, $vitePort)\n `,\n )\n .run({\n $id: repo.id,\n $path: repo.path,\n $name: repo.name,\n $parentPath: repo.parentPath ?? null,\n $isSubmodule: repo.isSubmodule ? 1 : 0,\n $projectType: repo.projectType ?? null,\n $vitePort: repo.vitePort ?? null,\n });\n return this.getGitRepository(repo.id)!;\n }\n\n getGitRepository(id: string): GitRepository | undefined {\n const row = this.db\n .prepare(\"SELECT * FROM git_repositories WHERE id = ?\")\n .get(id) as GitRepository | null;\n if (row) row.isSubmodule = Boolean(row.isSubmodule);\n return row ?? undefined;\n }\n\n getGitRepositoryByPath(path: string): GitRepository | undefined {\n const row = this.db\n .prepare(\"SELECT * FROM git_repositories WHERE path = ?\")\n .get(path) as GitRepository | null;\n if (row) row.isSubmodule = Boolean(row.isSubmodule);\n return row ?? undefined;\n }\n\n getAllGitRepositories(): GitRepository[] {\n const rows = this.db\n .prepare(\"SELECT * FROM git_repositories ORDER BY path\")\n .all() as GitRepository[];\n return rows.map((r) => ({ ...r, isSubmodule: Boolean(r.isSubmodule) }));\n }\n\n updateGitRepository(id: string, updates: Partial<GitRepository>): void {\n const fields = Object.keys(updates)\n .filter((k) => k !== \"id\" && k !== \"createdAt\")\n .map((k) => `${k} = $${k}`)\n .join(\", \");\n if (!fields) return;\n\n const params: Record<string, unknown> = { $id: id };\n for (const [k, v] of Object.entries(updates)) {\n if (k === \"isSubmodule\") params[`$${k}`] = v ? 1 : 0;\n else params[`$${k}`] = v ?? null;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.db\n .prepare(\n `UPDATE git_repositories SET ${fields}, lastScanned = datetime('now') WHERE id = $id`,\n )\n .run(params as any);\n }\n\n deleteGitRepository(id: string): boolean {\n const result = this.db\n .prepare(\"DELETE FROM git_repositories WHERE id = ?\")\n .run(id);\n return result.changes > 0;\n }\n\n fixGitHierarchy(): { fixed: number } {\n // Re-link parent paths based on actual file paths\n const repos = this.getAllGitRepositories();\n let fixed = 0;\n for (const repo of repos) {\n if (repo.isSubmodule) continue;\n // Find parent by checking if any other repo's path is a prefix\n const parent = repos.find(\n (r) =>\n r.id !== repo.id &&\n repo.path.startsWith(r.path + \"/\") &&\n !r.isSubmodule,\n );\n if (parent && repo.parentPath !== parent.path) {\n this.updateGitRepository(repo.id, { parentPath: parent.path });\n fixed++;\n }\n }\n return { fixed };\n }\n\n // ── Bookmarked Command Methods ──────────────────────────────────────\n\n createBookmarkedCommand(\n cmd: Omit<BookmarkedCommand, \"createdAt\">,\n ): BookmarkedCommand {\n this.db\n .prepare(\n `\n INSERT INTO bookmarked_commands (id, projectId, command, description, category)\n VALUES ($id, $projectId, $command, $description, $category)\n `,\n )\n .run({\n $id: cmd.id,\n $projectId: cmd.projectId ?? null,\n $command: cmd.command,\n $description: cmd.description ?? null,\n $category: cmd.category ?? null,\n });\n return this.getBookmarkedCommand(cmd.id)!;\n }\n\n getBookmarkedCommand(id: string): BookmarkedCommand | undefined {\n return this.db\n .prepare(\"SELECT * FROM bookmarked_commands WHERE id = ?\")\n .get(id) as BookmarkedCommand | undefined;\n }\n\n getAllBookmarkedCommands(): BookmarkedCommand[] {\n return this.db\n .prepare(\"SELECT * FROM bookmarked_commands ORDER BY createdAt DESC\")\n .all() as BookmarkedCommand[];\n }\n\n getBookmarkedCommandsByProject(\n projectId: string | null,\n ): BookmarkedCommand[] {\n if (projectId === null) {\n return this.db\n .prepare(\n \"SELECT * FROM bookmarked_commands WHERE projectId IS NULL ORDER BY createdAt DESC\",\n )\n .all() as BookmarkedCommand[];\n }\n return this.db\n .prepare(\n \"SELECT * FROM bookmarked_commands WHERE projectId = ? ORDER BY createdAt DESC\",\n )\n .all(projectId) as BookmarkedCommand[];\n }\n\n getBookmarkedCommandsByCategory(category: string): BookmarkedCommand[] {\n return this.db\n .prepare(\n \"SELECT * FROM bookmarked_commands WHERE category = ? ORDER BY createdAt DESC\",\n )\n .all(category) as BookmarkedCommand[];\n }\n\n updateBookmarkedCommand(\n id: string,\n updates: Partial<BookmarkedCommand>,\n ): void {\n const fields = Object.keys(updates)\n .filter((k) => k !== \"id\" && k !== \"createdAt\")\n .map((k) => `${k} = $${k}`)\n .join(\", \");\n if (!fields) return;\n\n const params: Record<string, unknown> = { $id: id };\n for (const [k, v] of Object.entries(updates)) {\n params[`$${k}`] = v ?? null;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.db\n .prepare(`UPDATE bookmarked_commands SET ${fields} WHERE id = $id`)\n .run(params as any);\n }\n\n deleteBookmarkedCommand(id: string): boolean {\n const result = this.db\n .prepare(\"DELETE FROM bookmarked_commands WHERE id = ?\")\n .run(id);\n return result.changes > 0;\n }\n\n executeBookmarkedCommand(id: string): BookmarkedCommand | undefined {\n return this.getBookmarkedCommand(id);\n }\n\n // ── Notification Methods ────────────────────────────────────────────\n\n createNotification(\n notification: Omit<Notification, \"createdAt\">,\n ): Notification {\n this.db\n .prepare(\n `\n INSERT INTO notifications (id, sessionName, projectId, type, title, message, status)\n VALUES ($id, $sessionName, $projectId, $type, $title, $message, $status)\n `,\n )\n .run({\n $id: notification.id,\n $sessionName: notification.sessionName ?? null,\n $projectId: notification.projectId ?? null,\n $type: notification.type,\n $title: notification.title,\n $message: notification.message,\n $status: notification.status,\n });\n return this.getNotification(notification.id)!;\n }\n\n getNotification(id: string): Notification | undefined {\n return this.db\n .prepare(\"SELECT * FROM notifications WHERE id = ?\")\n .get(id) as Notification | undefined;\n }\n\n getAllNotifications(): Notification[] {\n return this.db\n .prepare(\"SELECT * FROM notifications ORDER BY createdAt DESC\")\n .all() as Notification[];\n }\n\n getNotificationsByProject(projectId: string | null): Notification[] {\n if (projectId === null) {\n return this.db\n .prepare(\n \"SELECT * FROM notifications WHERE projectId IS NULL ORDER BY createdAt DESC\",\n )\n .all() as Notification[];\n }\n return this.db\n .prepare(\n \"SELECT * FROM notifications WHERE projectId = ? ORDER BY createdAt DESC\",\n )\n .all(projectId) as Notification[];\n }\n\n getGlobalNotifications(): Notification[] {\n return this.db\n .prepare(\n \"SELECT * FROM notifications WHERE projectId IS NULL ORDER BY createdAt DESC\",\n )\n .all() as Notification[];\n }\n\n getUnreadNotifications(): Notification[] {\n return this.db\n .prepare(\n \"SELECT * FROM notifications WHERE status = 'unread' ORDER BY createdAt DESC\",\n )\n .all() as Notification[];\n }\n\n updateNotificationStatus(id: string, status: \"unread\" | \"read\"): void {\n this.db\n .prepare(\"UPDATE notifications SET status = ? WHERE id = ?\")\n .run(status, id);\n }\n\n markAllNotificationsRead(): number {\n const result = this.db\n .prepare(\n \"UPDATE notifications SET status = 'read' WHERE status = 'unread'\",\n )\n .run();\n return result.changes;\n }\n\n deleteNotification(id: string): boolean {\n const result = this.db\n .prepare(\"DELETE FROM notifications WHERE id = ?\")\n .run(id);\n return result.changes > 0;\n }\n\n clearOldNotifications(olderThanDays: number = 30): number {\n const result = this.db\n .prepare(\n \"DELETE FROM notifications WHERE createdAt < datetime('now', '-' || ? || ' days')\",\n )\n .run(olderThanDays);\n return result.changes;\n }\n\n // ── Plugin State Methods ────────────────────────────────────────────\n\n getPluginState(pluginName: string, key: string): string | undefined {\n const row = this.db\n .prepare(\n \"SELECT value FROM plugin_state WHERE pluginName = ? AND key = ?\",\n )\n .get(pluginName, key) as { value: string } | null;\n return row?.value;\n }\n\n setPluginState(pluginName: string, key: string, value: string): void {\n this.db\n .prepare(\n `\n INSERT INTO plugin_state (pluginName, key, value)\n VALUES ($pluginName, $key, $value)\n ON CONFLICT(pluginName, key) DO UPDATE SET value = $value, updatedAt = datetime('now')\n `,\n )\n .run({ $pluginName: pluginName, $key: key, $value: value });\n }\n\n deletePluginState(pluginName: string, key: string): boolean {\n const result = this.db\n .prepare(\"DELETE FROM plugin_state WHERE pluginName = ? AND key = ?\")\n .run(pluginName, key);\n return result.changes > 0;\n }\n\n getAllPluginState(pluginName: string): StorageEntry[] {\n return this.db\n .prepare(\n \"SELECT key, value, updatedAt FROM plugin_state WHERE pluginName = ? ORDER BY key\",\n )\n .all(pluginName) as StorageEntry[];\n }\n\n deleteAllPluginState(pluginName: string): number {\n const result = this.db\n .prepare(\"DELETE FROM plugin_state WHERE pluginName = ?\")\n .run(pluginName);\n return result.changes;\n }\n\n // ── Lifecycle ───────────────────────────────────────────────────────\n\n close(): void {\n this.db.close();\n }\n}\n",
|
|
7
7
|
"/**\n * Plugin Router\n *\n * Dynamically mounts REST routes contributed by all loaded plugins.\n * Each plugin's createRoutes() factory is called and mounted at the plugin's apiPrefix.\n * Also collects publicPaths from all plugins for auth exemption.\n */\n\nimport { Elysia } from \"elysia\";\nimport type { PluginManager } from \"./plugin-system.js\";\nimport type { PluginRouteDeps } from \"./types.js\";\n\nexport interface PluginRouterResult {\n /** The composed Elysia instance with all plugin routes mounted */\n routes: Elysia;\n /** All public (auth-exempt) paths collected from plugins, fully qualified */\n getPublicPaths(): string[];\n}\n\nexport function createPluginRouter(\n pluginManager: PluginManager,\n deps: PluginRouteDeps,\n): PluginRouterResult {\n const router = new Elysia();\n const publicPaths: string[] = [];\n\n for (const plugin of pluginManager.getAllPlugins()) {\n if (!plugin.createRoutes) continue;\n\n // Determine prefix: use apiPrefix if set, otherwise /api/<name>\n const prefix = plugin.apiPrefix || `/api/${plugin.name}`;\n\n try {\n const pluginRoutes = plugin.createRoutes(deps);\n\n // Mount under prefix with chain context injection\n router.use(\n new Elysia({ prefix })\n .derive(() => ({\n pluginContext: {\n chain: [plugin.name],\n parentPlugin: undefined,\n activePlugin: plugin.name,\n },\n }))\n .use(pluginRoutes),\n );\n\n // Collect public paths\n if (plugin.publicPaths) {\n for (const p of plugin.publicPaths) {\n publicPaths.push(`${prefix}${p}`);\n }\n }\n } catch (err) {\n console.error(\n `[plugin-router] Failed to mount routes for plugin '${plugin.name}':`,\n err,\n );\n }\n }\n\n return {\n routes: router,\n getPublicPaths: () => [...publicPaths],\n };\n}\n",
|
|
8
8
|
"/**\n * UI Server\n *\n * Serves plugin frontends statically or proxies to dev servers.\n * Routes:\n * GET /ui - Index page listing all plugins with UIs\n * GET /ui/:plugin - Plugin frontend\n * GET /ui/:plugin/* - Plugin frontend assets\n * GET /ui/:parent/:child - Nested plugin frontend\n * GET /ui/:parent/:child/* - Nested plugin frontend assets\n *\n * Auth: /ui/* is auth-exempt. Plugin UIs receive auth via:\n * - postMessage (iframe mode): MFE sends { type: 'vibe-auth', apiKey } after load\n * - URL query param (new tab mode): ?apiKey=xxx\n */\n\nimport { Elysia } from \"elysia\";\nimport { join, extname } from \"node:path\";\nimport type { PluginManager } from \"./plugin-system.js\";\n\n// MIME type map for static serving\nconst MIME_TYPES: Record<string, string> = {\n \".html\": \"text/html\",\n \".js\": \"application/javascript\",\n \".mjs\": \"application/javascript\",\n \".css\": \"text/css\",\n \".json\": \"application/json\",\n \".png\": \"image/png\",\n \".jpg\": \"image/jpeg\",\n \".jpeg\": \"image/jpeg\",\n \".gif\": \"image/gif\",\n \".svg\": \"image/svg+xml\",\n \".ico\": \"image/x-icon\",\n \".woff\": \"font/woff\",\n \".woff2\": \"font/woff2\",\n \".ttf\": \"font/ttf\",\n \".map\": \"application/json\",\n \".wasm\": \"application/wasm\",\n};\n\nfunction getMimeType(filePath: string): string {\n return (\n MIME_TYPES[extname(filePath).toLowerCase()] || \"application/octet-stream\"\n );\n}\n\n// Auth bridge script injected into index.html responses\nconst AUTH_BRIDGE_SCRIPT = `<script>\nwindow.__VIBE_AUTH__={apiKey:null};\n(function(){\n var p=new URLSearchParams(window.location.search);\n if(p.get('apiKey'))window.__VIBE_AUTH__.apiKey=p.get('apiKey');\n window.addEventListener('message',function(e){\n if(e.data&&e.data.type==='vibe-auth'&&e.data.apiKey){\n window.__VIBE_AUTH__.apiKey=e.data.apiKey;\n window.dispatchEvent(new CustomEvent('vibe-auth-ready'));\n }\n });\n})();\n</script>`;\n\nfunction injectAuthBridge(html: string): string {\n // Inject before </head> if possible, otherwise before </body>, otherwise at end\n if (html.includes(\"</head>\")) {\n return html.replace(\"</head>\", AUTH_BRIDGE_SCRIPT + \"</head>\");\n }\n if (html.includes(\"</body>\")) {\n return html.replace(\"</body>\", AUTH_BRIDGE_SCRIPT + \"</body>\");\n }\n return html + AUTH_BRIDGE_SCRIPT;\n}\n\nfunction renderUIIndex(\n plugins: Array<{ name: string; title: string; tags?: string[] }>,\n): string {\n const items = plugins\n .map((p) => {\n const tags = (p.tags || [])\n .map((t) => `<span class=\"tag\">${t}</span>`)\n .join(\" \");\n return `<li><a href=\"/ui/${p.name}\">${p.title || p.name}</a> ${tags}</li>`;\n })\n .join(\"\\n\");\n\n return `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"UTF-8\"><meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">\n <title>VibeControls - Plugin UIs</title>\n <style>\n body{font-family:system-ui,-apple-system,sans-serif;max-width:800px;margin:2rem auto;padding:0 1rem;background:#0a0a0a;color:#e0e0e0}\n h1{color:#fff}a{color:#60a5fa;text-decoration:none}a:hover{text-decoration:underline}\n ul{list-style:none;padding:0}li{padding:0.75rem 1rem;border:1px solid #333;border-radius:8px;margin-bottom:0.5rem;display:flex;align-items:center;gap:0.5rem}\n .tag{font-size:0.75rem;padding:2px 8px;border-radius:4px;background:#1e3a5f;color:#93c5fd}\n .empty{color:#888;font-style:italic}\n </style>\n</head>\n<body>\n <h1>VibeControls Plugin UIs</h1>\n ${plugins.length > 0 ? `<ul>${items}</ul>` : '<p class=\"empty\">No plugins with UIs installed.</p>'}\n</body>\n</html>`;\n}\n\nexport function createUIServer(pluginManager: PluginManager) {\n return (\n new Elysia({ prefix: \"/ui\" })\n // Index page\n .get(\"/\", () => {\n const plugins = pluginManager\n .getAllPlugins()\n .filter((p) => p.ui)\n .map((p) => ({\n name: p.name,\n title: p.ui?.title ?? p.name,\n tags: p.tags,\n }));\n\n return new Response(renderUIIndex(plugins), {\n headers: { \"Content-Type\": \"text/html; charset=utf-8\" },\n });\n })\n\n // Catch-all for plugin UIs\n .get(\"/*\", async ({ params, set }) => {\n const wildcard = (params as Record<string, string>)[\"*\"] || \"\";\n const parts = wildcard.split(\"/\").filter(Boolean);\n\n if (parts.length === 0) {\n set.status = 404;\n return { error: \"Plugin not specified\" };\n }\n\n // Try to resolve plugin: first part is the plugin key\n const pluginKey = parts[0];\n let plugin = pluginManager.getPluginByKey(pluginKey);\n let subPath = parts.slice(1).join(\"/\");\n\n // Check for nested plugin: /ui/parent/child/...\n if (plugin && parts.length >= 2) {\n const childPlugin = pluginManager.getPluginByKey(parts[1]);\n if (childPlugin?.ui) {\n plugin = childPlugin;\n subPath = parts.slice(2).join(\"/\");\n }\n }\n\n if (!plugin?.ui) {\n set.status = 404;\n return { error: `No UI available for plugin '${pluginKey}'` };\n }\n\n // Dev proxy mode takes priority\n if (plugin.ui.devUrl) {\n try {\n const targetUrl = new URL(\n subPath || \"/\",\n plugin.ui.devUrl,\n ).toString();\n const resp = await fetch(targetUrl);\n const body = await resp.arrayBuffer();\n const headers = new Headers();\n resp.headers.forEach((v, k) => headers.set(k, v));\n return new Response(body, { status: resp.status, headers });\n } catch {\n set.status = 502;\n return {\n error: `Failed to proxy to dev server at ${plugin.ui.devUrl}`,\n };\n }\n }\n\n // Static serving mode\n if (plugin.ui.staticDir) {\n const baseDir = plugin.ui.staticDir;\n const requestedPath = subPath || \"index.html\";\n const filePath = join(baseDir, requestedPath);\n\n // Security: prevent path traversal\n if (!filePath.startsWith(baseDir)) {\n set.status = 403;\n return { error: \"Access denied\" };\n }\n\n const file = Bun.file(filePath);\n if (await file.exists()) {\n const contentType = getMimeType(filePath);\n\n // Inject auth bridge into HTML files\n if (contentType === \"text/html\") {\n const html = await file.text();\n return new Response(injectAuthBridge(html), {\n headers: { \"Content-Type\": \"text/html; charset=utf-8\" },\n });\n }\n\n return new Response(file, {\n headers: { \"Content-Type\": contentType },\n });\n }\n\n // SPA fallback: serve index.html for non-file paths\n const indexFile = Bun.file(join(baseDir, \"index.html\"));\n if (await indexFile.exists()) {\n const html = await indexFile.text();\n return new Response(injectAuthBridge(html), {\n headers: { \"Content-Type\": \"text/html; charset=utf-8\" },\n });\n }\n\n set.status = 404;\n return { error: \"File not found\" };\n }\n\n set.status = 404;\n return { error: \"No UI configuration (neither staticDir nor devUrl)\" };\n })\n );\n}\n",
|
|
9
|
-
"/**\n * Authentication Middleware for Elysia\n *\n * API key-based authentication using the x-agent-api-key header.\n * Key format: vcak_{base64url}\n *\n * Auth-exempt paths:\n * - Static: /health, /api/agent/identity, /api/agent/api-key, /api/agent/tunnel,\n * /terminal/, /ws/, /ui/\n * - Dynamic: Plugin-declared publicPaths (via getPluginPublicPaths callback)\n */\n\nimport { Elysia } from \"elysia\";\nimport
|
|
9
|
+
"/**\n * Authentication Middleware for Elysia\n *\n * API key-based authentication using the x-agent-api-key header.\n * Key format: vcak_{base64url}\n *\n * Auth-exempt paths:\n * - Static: /health, /api/agent/identity, /api/agent/api-key, /api/agent/tunnel,\n * /terminal/, /ws/, /ui/\n * - Dynamic: Plugin-declared publicPaths (via getPluginPublicPaths callback)\n */\n\nimport { Elysia } from \"elysia\";\nimport { join } from \"node:path\";\nimport { homedir } from \"node:os\";\nimport { existsSync, readFileSync } from \"node:fs\";\n\nimport { logger } from \"../services/logger.js\";\n\n// ── Static Auth-Exempt Paths ────────────────────────────────────────────\n\nconst STATIC_EXEMPT_PREFIXES = [\n \"/health\",\n \"/api/agent/identity\",\n \"/api/agent/api-key\",\n \"/api/agent/tunnel\",\n \"/terminal/\",\n \"/ws/\",\n \"/ui/\",\n];\n\n/**\n * Check if a path is exempt from auth.\n * Checks both static prefixes and dynamic plugin-declared public paths.\n */\nfunction isExempt(path: string, dynamicPaths: string[]): boolean {\n // Check static exemptions\n if (STATIC_EXEMPT_PREFIXES.some((prefix) => path.startsWith(prefix))) {\n return true;\n }\n\n // Check dynamic plugin-declared public paths\n return dynamicPaths.some((prefix) => path.startsWith(prefix));\n}\n\n// ── API Key Generation ──────────────────────────────────────────────────\n\nfunction generateApiKey(): string {\n const bytes = new Uint8Array(32);\n crypto.getRandomValues(bytes);\n return `vcak_${Buffer.from(bytes).toString(\"base64url\")}`;\n}\n\nfunction loadStaticApiKey(): string | undefined {\n const configFile = join(homedir(), \".vibecontrols\", \"config.json\");\n if (!existsSync(configFile)) return undefined;\n try {\n const config = JSON.parse(readFileSync(configFile, \"utf8\"));\n return config[\"static-api-key\"] || undefined;\n } catch {\n return undefined;\n }\n}\n\n// ── Auth Plugin ─────────────────────────────────────────────────────────\n\n/**\n * Creates the auth plugin for Elysia.\n * Generates or loads an API key and validates it on every request.\n *\n * @param getPluginPublicPaths - Optional callback that returns dynamic\n * auth-exempt paths declared by plugins (e.g., from plugin-router).\n * Called on every request so newly loaded plugins are immediately respected.\n */\nexport function createAuthPlugin(getPluginPublicPaths?: () => string[]) {\n // Determine API key\n const envKey = process.env.AGENT_API_KEY;\n const staticKey = loadStaticApiKey();\n const apiKey = envKey || staticKey || generateApiKey();\n\n logger.info(\"auth\", `Agent API key: ${apiKey.substring(0, 12)}...`);\n\n return new Elysia({ name: \"plugin/auth\" })\n .decorate(\"apiKey\", apiKey)\n .derive(({ headers, path }) => {\n const dynamicPaths = getPluginPublicPaths?.() ?? [];\n return {\n isAuthenticated: (() => {\n if (isExempt(path, dynamicPaths)) return true;\n const providedKey = headers[\"x-agent-api-key\"];\n return providedKey === apiKey;\n })(),\n };\n })\n .onBeforeHandle(({ isAuthenticated, path, set }) => {\n const dynamicPaths = getPluginPublicPaths?.() ?? [];\n if (!isAuthenticated && !isExempt(path, dynamicPaths)) {\n set.status = 401;\n return { error: \"Unauthorized\", message: \"Invalid or missing API key\" };\n }\n });\n}\n",
|
|
10
10
|
"/**\n * Health Routes\n *\n * Endpoints:\n * GET /health — Basic health check\n * GET /health/live — Liveness probe (for k8s)\n * GET /health/ready — Readiness probe (for k8s)\n */\n\nimport { Elysia } from \"elysia\";\n\nexport function createHealthRoutes(_serviceRegistry?: unknown) {\n return new Elysia({ prefix: \"/health\" })\n .get(\"/\", () => ({\n status: \"ok\",\n timestamp: new Date().toISOString(),\n uptime: process.uptime(),\n }))\n .get(\"/live\", () => ({ status: \"ok\" }))\n .get(\"/ready\", () => ({ status: \"ok\" }));\n}\n",
|
|
11
11
|
"/**\n * Events WebSocket\n *\n * General event stream for real-time updates. Replaces Socket.IO.\n * Clients connect to /ws/events and receive JSON-encoded events.\n *\n * Protocol:\n * Client → Server: { type: \"subscribe\", channel: string }\n * { type: \"unsubscribe\", channel: string }\n * { type: \"ping\" }\n * Server → Client: { type: WsEventType, payload: unknown, timestamp: string }\n * { type: \"pong\" }\n */\n\nimport { Elysia } from \"elysia\";\nimport { EventEmitter } from \"node:events\";\n\nimport type { WsEvent, WsEventType } from \"../core/types.js\";\nimport { logger } from \"../services/logger.js\";\n\n// ── Event Bus ───────────────────────────────────────────────────────────\n\n/**\n * Global event bus. Routes, services, and plugins emit events here.\n * The WebSocket handler subscribes and forwards to connected clients.\n */\nexport const eventBus = new EventEmitter();\neventBus.setMaxListeners(100);\n\n/**\n * Emit a typed event to all connected WebSocket clients.\n */\nexport function broadcast(type: WsEventType, payload: unknown): void {\n const event: WsEvent = {\n type,\n payload,\n timestamp: new Date().toISOString(),\n };\n eventBus.emit(\"ws:event\", event);\n}\n\n// ── WebSocket Route ─────────────────────────────────────────────────────\n\nexport function createEventsWs() {\n // Track connected clients\n const clients = new Set<{\n ws: unknown;\n channels: Set<string>;\n send: (data: string) => void;\n }>();\n\n // Forward events from the bus to all connected clients\n eventBus.on(\"ws:event\", (event: WsEvent) => {\n const json = JSON.stringify(event);\n for (const client of clients) {\n try {\n client.send(json);\n } catch {\n /* client may have disconnected */\n }\n }\n });\n\n return new Elysia().ws(\"/ws/events\", {\n open(ws) {\n const client = {\n ws,\n channels: new Set<string>(),\n send: (data: string) => ws.send(data),\n };\n clients.add(client);\n (ws as Record<string, unknown>)._client = client;\n\n logger.info(\"ws-events\", \"Client connected\", {\n id: String(ws.id || \"unknown\"),\n });\n\n // Send initial connected event\n ws.send(\n JSON.stringify({\n type: \"connected\",\n timestamp: new Date().toISOString(),\n }),\n );\n },\n\n message(ws, message) {\n try {\n const data =\n typeof message === \"string\" ? JSON.parse(message) : message;\n\n switch (data.type) {\n case \"subscribe\": {\n const client = (ws as Record<string, unknown>)\n ._client as typeof clients extends Set<infer T> ? T : never;\n if (client) client.channels.add(data.channel);\n logger.debug(\"ws-events\", `Subscribed to ${data.channel}`);\n break;\n }\n case \"unsubscribe\": {\n const client = (ws as Record<string, unknown>)\n ._client as typeof clients extends Set<infer T> ? T : never;\n if (client) client.channels.delete(data.channel);\n logger.debug(\"ws-events\", `Unsubscribed from ${data.channel}`);\n break;\n }\n case \"ping\":\n ws.send(\n JSON.stringify({\n type: \"pong\",\n timestamp: new Date().toISOString(),\n }),\n );\n break;\n default:\n logger.debug(\"ws-events\", `Unknown message type: ${data.type}`);\n }\n } catch {\n logger.warn(\"ws-events\", \"Failed to parse incoming message\");\n }\n },\n\n close(ws) {\n const client = (ws as Record<string, unknown>)\n ._client as typeof clients extends Set<infer T> ? T : never;\n if (client) clients.delete(client);\n logger.info(\"ws-events\", \"Client disconnected\");\n },\n });\n}\n",
|
|
12
12
|
"/**\n * Terminal WebSocket Proxy\n *\n * Proxies WebSocket connections from /terminal/:sessionId/ws to the local\n * ttyd instance running for that session. This allows a single agent tunnel\n * to proxy all terminal sessions (no per-session cloudflared tunnels needed).\n *\n * Protocol: ttyd uses the 'tty' sub-protocol.\n * The proxy bridges client WS ↔ upstream ttyd WS bidirectionally.\n *\n * HTTP proxy for terminal assets (/terminal/:sessionId/*) is also included.\n */\n\nimport { Elysia } from \"elysia\";\n\nimport type { ServiceRegistry } from \"../core/service-registry.js\";\nimport type { SessionProvider } from \"../core/providers/session.provider.js\";\nimport { logger } from \"../services/logger.js\";\n\n// ── Terminal HTTP Proxy ─────────────────────────────────────────────────\n\nasync function proxyToTtyd(\n port: number,\n upstreamPath: string,\n method: string,\n headers: Record<string, string | undefined>,\n body?: unknown,\n): Promise<Response> {\n const fetchHeaders: Record<string, string> = {};\n for (const [k, v] of Object.entries(headers)) {\n if (v && ![\"host\", \"connection\"].includes(k.toLowerCase())) {\n fetchHeaders[k] = v;\n }\n }\n\n const init: RequestInit = { method, headers: fetchHeaders };\n if (method !== \"GET\" && method !== \"HEAD\" && body) {\n init.body = typeof body === \"string\" ? body : JSON.stringify(body);\n }\n\n return fetch(`http://127.0.0.1:${port}${upstreamPath}`, init);\n}\n\n// ── Helper ──────────────────────────────────────────────────────────────\n\nasync function resolveTtydPort(\n serviceRegistry: ServiceRegistry,\n sessionId: string,\n): Promise<number | null> {\n const provider = serviceRegistry.getProvider<SessionProvider>(\"session\");\n if (!provider) return null;\n\n const terminal = await provider.getTerminalInfo(sessionId);\n if (!terminal) return null;\n\n // Verify process is alive\n try {\n process.kill(terminal.pid, 0);\n return terminal.port;\n } catch {\n return null;\n }\n}\n\n// ── Routes & WebSocket ──────────────────────────────────────────────────\n\nexport function createTerminalProxy(serviceRegistry: ServiceRegistry) {\n return (\n new Elysia()\n // HTTP proxy: /terminal/:sessionId (root)\n .all(\"/terminal/:sessionId\", async ({ params, request, set }) => {\n const port = await resolveTtydPort(serviceRegistry, params.sessionId);\n if (!port) {\n set.status = 502;\n return { error: \"Terminal not running for this session\" };\n }\n\n const upstream = await proxyToTtyd(\n port,\n \"/\",\n request.method,\n Object.fromEntries(\n Object.entries(request.headers).map(([k, v]) => [k, v as string]),\n ),\n );\n\n // Forward response status and headers\n set.status = upstream.status;\n const buf = await upstream.arrayBuffer();\n return new Response(buf, {\n status: upstream.status,\n headers: upstream.headers,\n });\n })\n\n // HTTP proxy: /terminal/:sessionId/* (all subpaths)\n .all(\"/terminal/:sessionId/*\", async ({ params, request, set }) => {\n const sessionId = params.sessionId;\n const wildcardPath = (params as Record<string, string>)[\"*\"] || \"\";\n const port = await resolveTtydPort(serviceRegistry, sessionId);\n if (!port) {\n set.status = 502;\n return { error: \"Terminal not running for this session\" };\n }\n\n const upstream = await proxyToTtyd(\n port,\n `/${wildcardPath}`,\n request.method,\n Object.fromEntries(\n Object.entries(request.headers).map(([k, v]) => [k, v as string]),\n ),\n );\n\n set.status = upstream.status;\n const buf = await upstream.arrayBuffer();\n return new Response(buf, {\n status: upstream.status,\n headers: upstream.headers,\n });\n })\n\n // WebSocket proxy: /terminal/:sessionId/ws\n // Bridges client WS ↔ upstream ttyd WS\n .ws(\"/terminal/:sessionId/ws\", {\n open(ws) {\n const wsData = ws.data as unknown as {\n params?: { sessionId?: string };\n };\n const sessionId = wsData.params?.sessionId;\n if (!sessionId) {\n ws.close(1008, \"Missing sessionId\");\n return;\n }\n\n logger.info(\n \"terminal-ws\",\n `Client connected for session ${sessionId}`,\n );\n\n // Resolve ttyd port and establish upstream connection\n resolveTtydPort(serviceRegistry, sessionId).then((port) => {\n if (!port) {\n logger.warn(\n \"terminal-ws\",\n `No ttyd running for session ${sessionId}`,\n );\n ws.close(1011, \"No terminal running\");\n return;\n }\n\n // Connect to upstream ttyd WS\n // Note: In Bun, we use the native WebSocket\n const upstreamUrl = `ws://127.0.0.1:${port}/ws`;\n const upstreamWs = new WebSocket(upstreamUrl, [\"tty\"]);\n\n const upstreamBuffer: Array<string | ArrayBuffer> = [];\n let upstreamReady = false;\n\n upstreamWs.addEventListener(\"open\", () => {\n upstreamReady = true;\n logger.info(\"terminal-ws\", `Bridge established → port ${port}`, {\n sessionId,\n });\n\n // Flush buffered messages\n for (const msg of upstreamBuffer) {\n upstreamWs.send(msg);\n }\n upstreamBuffer.length = 0;\n });\n\n // Forward: upstream ttyd → client browser\n upstreamWs.addEventListener(\"message\", (event) => {\n try {\n ws.send(event.data);\n } catch {\n /* client disconnected */\n }\n });\n\n upstreamWs.addEventListener(\"close\", (event) => {\n logger.info(\n \"terminal-ws\",\n `Upstream closed (code=${event.code})`,\n { sessionId },\n );\n try {\n ws.close(1000, \"Upstream closed\");\n } catch {\n /* already closed */\n }\n });\n\n upstreamWs.addEventListener(\"error\", (event) => {\n logger.error(\"terminal-ws\", `Upstream error`, { sessionId });\n try {\n ws.close(1011, \"Upstream error\");\n } catch {\n /* already closed */\n }\n });\n\n // Store upstream connection on the ws object for the message handler\n (ws as Record<string, unknown>)._upstream = upstreamWs;\n (ws as Record<string, unknown>)._upstreamReady = () =>\n upstreamReady;\n (ws as Record<string, unknown>)._upstreamBuffer = upstreamBuffer;\n });\n },\n\n message(ws, message) {\n const upstreamWs = (ws as Record<string, unknown>)._upstream as\n | WebSocket\n | undefined;\n const isReady = (\n (ws as Record<string, unknown>)._upstreamReady as\n | (() => boolean)\n | undefined\n )?.();\n const buffer = (ws as Record<string, unknown>)._upstreamBuffer as\n | Array<string | ArrayBuffer>\n | undefined;\n\n if (\n upstreamWs &&\n isReady &&\n upstreamWs.readyState === WebSocket.OPEN\n ) {\n upstreamWs.send(message as string | ArrayBufferLike);\n } else if (buffer) {\n // Buffer until upstream is ready\n buffer.push(message as string | ArrayBuffer);\n }\n },\n\n close(ws) {\n const sessionId = (\n ws.data as unknown as { params?: { sessionId?: string } }\n ).params?.sessionId;\n logger.info(\"terminal-ws\", `Client disconnected`, { sessionId });\n\n const upstreamWs = (ws as Record<string, unknown>)._upstream as\n | WebSocket\n | undefined;\n if (upstreamWs && upstreamWs.readyState === WebSocket.OPEN) {\n upstreamWs.close(1000, \"Client disconnected\");\n }\n },\n })\n );\n}\n",
|
|
13
13
|
"/**\n * Logs WebSocket & SSE\n *\n * Real-time log streaming. Provides both:\n * - GET /api/logs — Paginated historical log entries\n * - GET /api/logs/stream — Server-Sent Events (SSE) real-time log stream\n * - /ws/logs — WebSocket real-time log stream (replaces SSE for WS clients)\n *\n * The SSE endpoint is kept for backwards compatibility and curl-friendly access.\n * The WS endpoint is preferred for the MFE.\n */\n\nimport { Elysia, t } from \"elysia\";\n\nimport { logger } from \"../services/logger.js\";\nimport type { LogLevel, LogEntry } from \"../core/types.js\";\n\n// ── Level Priority ──────────────────────────────────────────────────────\n\nconst LEVEL_PRIORITY: Record<LogLevel, number> = {\n debug: 0,\n info: 1,\n warn: 2,\n error: 3,\n};\n\n// ── Routes ──────────────────────────────────────────────────────────────\n\nexport function createLogRoutes() {\n return (\n new Elysia({ prefix: \"/api/logs\" })\n // Historical log entries\n .get(\"/\", async ({ query }) => {\n const q = query as Record<string, string>;\n const entries = await logger.readHistory({\n level: q.level as LogLevel | undefined,\n source: q.source,\n from: q.from,\n to: q.to,\n limit: q.limit ? parseInt(q.limit, 10) : 200,\n offset: q.offset ? parseInt(q.offset, 10) : 0,\n });\n return { entries, count: entries.length };\n })\n\n // SSE stream for real-time logs (backwards-compatible)\n .get(\"/stream\", ({ query, set }) => {\n const q = query as Record<string, string>;\n const minLevel = (q.level ?? \"info\") as LogLevel;\n const sourceFilter = q.source ?? \"\";\n\n // Return an SSE stream using Elysia's generator pattern\n set.headers[\"Content-Type\"] = \"text/event-stream\";\n set.headers[\"Cache-Control\"] = \"no-cache\";\n set.headers[\"Connection\"] = \"keep-alive\";\n set.headers[\"X-Accel-Buffering\"] = \"no\";\n\n return new ReadableStream({\n start(controller) {\n const encoder = new TextEncoder();\n\n // Initial comment to establish connection\n controller.enqueue(encoder.encode(\": connected\\n\\n\"));\n\n // Heartbeat\n const heartbeat = setInterval(() => {\n try {\n controller.enqueue(encoder.encode(\": heartbeat\\n\\n\"));\n } catch {\n cleanup();\n }\n }, 15_000);\n\n // Log event handler\n const onLog = (entry: LogEntry) => {\n if (LEVEL_PRIORITY[entry.level] < LEVEL_PRIORITY[minLevel])\n return;\n if (sourceFilter && !entry.source.includes(sourceFilter)) return;\n\n try {\n controller.enqueue(\n encoder.encode(\n `event: log\\ndata: ${JSON.stringify(entry)}\\n\\n`,\n ),\n );\n } catch {\n cleanup();\n }\n };\n\n const cleanup = () => {\n clearInterval(heartbeat);\n logger.removeListener(\"log\", onLog);\n try {\n controller.close();\n } catch {\n /* already closed */\n }\n };\n\n logger.on(\"log\", onLog);\n\n // Note: ReadableStream cancel callback handles client disconnect\n return () => cleanup();\n },\n\n cancel() {\n // Client disconnected — cleanup is handled by the start's return\n },\n });\n })\n );\n}\n\n// ── WebSocket Log Stream ────────────────────────────────────────────────\n\nexport function createLogWs() {\n return new Elysia().ws(\"/ws/logs\", {\n open(ws) {\n logger.info(\"ws-logs\", \"Log stream client connected\");\n\n // Default filters\n const filters = {\n minLevel: \"info\" as LogLevel,\n source: \"\",\n };\n (ws as Record<string, unknown>)._filters = filters;\n\n const onLog = (entry: LogEntry) => {\n const f = (ws as Record<string, unknown>)._filters as typeof filters;\n if (LEVEL_PRIORITY[entry.level] < LEVEL_PRIORITY[f.minLevel]) return;\n if (f.source && !entry.source.includes(f.source)) return;\n\n try {\n ws.send(JSON.stringify(entry));\n } catch {\n /* disconnected */\n }\n };\n\n logger.on(\"log\", onLog);\n (ws as Record<string, unknown>)._logHandler = onLog;\n\n // Send initial acknowledgment\n ws.send(\n JSON.stringify({\n type: \"connected\",\n timestamp: new Date().toISOString(),\n }),\n );\n },\n\n message(ws, message) {\n try {\n const data =\n typeof message === \"string\" ? JSON.parse(message) : message;\n\n // Allow client to update filters\n if (data.type === \"filter\") {\n const filters = (ws as Record<string, unknown>)._filters as {\n minLevel: LogLevel;\n source: string;\n };\n if (data.level) filters.minLevel = data.level as LogLevel;\n if (data.source !== undefined) filters.source = data.source;\n\n ws.send(JSON.stringify({ type: \"filter-updated\", filters }));\n }\n } catch {\n /* ignore malformed messages */\n }\n },\n\n close(ws) {\n const handler = (ws as Record<string, unknown>)._logHandler as\n | ((...args: unknown[]) => void)\n | undefined;\n if (handler) {\n logger.removeListener(\"log\", handler);\n }\n logger.info(\"ws-logs\", \"Log stream client disconnected\");\n },\n });\n}\n",
|
|
14
14
|
"/**\n * App Factory — Plugin-First Architecture\n *\n * Creates and configures the Elysia application using the plugin system.\n * All routes are contributed by plugins via createPluginRouter().\n * Only health routes remain outside the plugin system.\n *\n * Lifecycle:\n * 1. Initialize database, service registry, plugin manager\n * 2. Load core + external plugins\n * 3. Mount CORS, auth (with dynamic public paths), logging\n * 4. Mount health routes (always available, non-overridable)\n * 5. Mount plugin routes via plugin-router\n * 6. Mount plugin UI server (/ui/*)\n * 7. Mount WebSocket handlers (events, logs, terminal proxy)\n * 8. Dispatch plugin lifecycle events\n */\n\nimport { Elysia } from \"elysia\";\nimport { cors } from \"@elysiajs/cors\";\n\nimport type { AppOptions } from \"./core/types.js\";\nimport type { StorageEntry } from \"./core/types.js\";\nimport type { StorageProvider } from \"./core/providers/storage.provider.js\";\nimport { AgentDatabase } from \"./db/database.js\";\nimport { ServiceRegistry } from \"./core/service-registry.js\";\nimport { PluginManager } from \"./core/plugin-system.js\";\nimport type { HostServices } from \"./core/plugin-system.js\";\nimport { createPluginRouter } from \"./core/plugin-router.js\";\nimport { createUIServer } from \"./core/ui-server.js\";\nimport { createAuthPlugin } from \"./middleware/auth.js\";\nimport { logger } from \"./services/logger.js\";\nimport { gatewayClient } from \"./services/gateway-client.js\";\n\n// Health routes (outside plugin system)\nimport { createHealthRoutes } from \"./routes/health.routes.js\";\n\n// WebSocket handlers\nimport {\n createEventsWs,\n createTerminalProxy,\n createLogWs,\n} from \"./ws/index.js\";\n\n// ── Create App ──────────────────────────────────────────────────────────\n\nexport async function createApp(options: AppOptions) {\n const { port, host, dbPath, logLevel, corsOrigin } = options;\n\n // ── Set log level ──────────────────────────────────────────────────\n if (logLevel) {\n logger.setLevel(logLevel);\n }\n\n // ── Database ────────────────────────────────────────────────────────\n const db = new AgentDatabase(dbPath);\n\n // ── Service Registry ────────────────────────────────────────────────\n const serviceRegistry = new ServiceRegistry(db);\n\n // ── Plugin Manager ──────────────────────────────────────────────────\n const pluginManager = new PluginManager(db);\n\n // Load core plugins first\n await pluginManager.loadCorePlugins();\n\n // Load external plugins\n try {\n await pluginManager.loadAll();\n } catch (err) {\n logger.warn(\"app\", \"Failed to load some external plugins\", {\n error: String(err),\n });\n }\n\n logger.info(\n \"app\",\n `Plugins loaded: ${pluginManager.getPluginDetails().length} total (${pluginManager.getPluginDetails().filter((p) => p.isCore).length} core)`,\n );\n\n // ── Restore Gateway Client Config ───────────────────────────────────\n try {\n const gwGlobalUrl = db.getConfig(\"gateway-auth:globalGatewayUrl\");\n const gwClientId = db.getConfig(\"gateway-auth:clientId\");\n const gwClientSecret = db.getConfig(\"gateway-auth:clientSecret\");\n\n if (gwGlobalUrl && gwClientId && gwClientSecret) {\n const gwWorkspaceUrl = db.getConfig(\"gateway-auth:workspaceGatewayUrl\");\n gatewayClient.configure({\n globalGatewayUrl: gwGlobalUrl,\n workspaceGatewayUrl: gwWorkspaceUrl,\n clientId: gwClientId,\n clientSecret: gwClientSecret,\n });\n logger.info(\"app\", \"Restored gateway client config from database\");\n }\n } catch (err) {\n logger.warn(\"app\", \"Failed to restore gateway client config\", {\n error: String(err),\n });\n }\n\n // ── Host Services (passed to plugins) ───────────────────────────────\n const storageProvider: StorageProvider = {\n async get(key: string) {\n return db.getPluginState(\"_host\", key) ?? null;\n },\n async set(key: string, value: string) {\n db.setPluginState(\"_host\", key, value);\n },\n async delete(key: string) {\n return db.deletePluginState(\"_host\", key);\n },\n async list() {\n return db.getAllPluginState(\"_host\") as StorageEntry[];\n },\n async deleteAll() {\n return db.deleteAllPluginState(\"_host\");\n },\n };\n\n const packageVersion = await getPackageVersion();\n\n const hostServices: HostServices = {\n storage: storageProvider,\n logger,\n serviceRegistry,\n getProvider: (<T>(type: \"tunnel\" | \"session\") =>\n serviceRegistry.getProvider<T>(type)) as HostServices[\"getProvider\"],\n getAgentBaseUrl: () => process.env.AGENT_URL || `http://localhost:${port}`,\n getAgentVersion: () => packageVersion,\n };\n\n // ── Build Plugin Router ─────────────────────────────────────────────\n const { routes: pluginRoutes, getPublicPaths } = createPluginRouter(\n pluginManager,\n { db, serviceRegistry, pluginManager },\n );\n\n // ── Build UI Server ─────────────────────────────────────────────────\n const uiServer = createUIServer(pluginManager);\n\n // ── Elysia App ──────────────────────────────────────────────────────\n const app = new Elysia()\n // CORS\n .use(\n cors({\n origin: corsOrigin || true,\n credentials: true,\n }),\n )\n\n // Auth middleware (with dynamic public paths from plugins)\n .use(createAuthPlugin(getPublicPaths))\n\n // Request/Response logging\n .onAfterHandle(({ request, set }) => {\n const url = new URL(request.url).pathname;\n const isNoisy =\n url === \"/health\" ||\n url.startsWith(\"/api/logs/stream\") ||\n url.startsWith(\"/ui/\");\n const status = typeof set.status === \"number\" ? set.status : 200;\n const level = isNoisy ? \"debug\" : status >= 400 ? \"warn\" : \"info\";\n logger[level](\"http\", `${request.method} ${url} → ${status}`, {\n method: request.method,\n path: url,\n statusCode: status,\n });\n })\n\n // ── Health Routes (auth-exempt, outside plugin system) ──────────\n .use(createHealthRoutes(serviceRegistry))\n\n // ── Plugin Routes (all REST APIs) ───────────────────────────────\n .use(pluginRoutes)\n\n // ── Plugin UI Server ────────────────────────────────────────────\n .use(uiServer)\n\n // ── WebSocket: Events ───────────────────────────────────────────\n .use(createEventsWs())\n\n // ── WebSocket: Logs ─────────────────────────────────────────────\n .use(createLogWs())\n\n // ── Terminal Proxy (HTTP + WS) ──────────────────────────────────\n .use(createTerminalProxy(serviceRegistry));\n\n // ── Plugin Lifecycle: onServerStart ─────────────────────────────────\n try {\n // Cast to Elysia to satisfy the generic type constraint —\n // the concrete app type carries decorator metadata that the plugin\n // lifecycle interface doesn't need.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n await pluginManager.dispatchServerStart(app as any, hostServices);\n } catch (err) {\n logger.warn(\"app\", \"Error during plugin onServerStart dispatch\", {\n error: String(err),\n });\n }\n\n return {\n app,\n db,\n serviceRegistry,\n pluginManager,\n hostServices,\n async start() {\n app.listen({ port, hostname: host });\n logger.info(\"app\", `Agent server listening on ${host}:${port}`);\n\n // Dispatch onServerReady\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n await pluginManager.dispatchServerReady(app as any, hostServices);\n } catch (err) {\n logger.warn(\"app\", \"Error during plugin onServerReady dispatch\", {\n error: String(err),\n });\n }\n\n return app;\n },\n async stop() {\n try {\n await pluginManager.dispatchServerStop();\n } catch (err) {\n logger.warn(\"app\", \"Error stopping plugins\", { error: String(err) });\n }\n db.close();\n logger.close();\n logger.info(\"app\", \"Agent server stopped\");\n },\n };\n}\n\n// ── Helpers ──────────────────────────────────────────────────────────────\n\nasync function getPackageVersion(): Promise<string> {\n try {\n const { readFileSync } = await import(\"node:fs\");\n const { join, dirname } = await import(\"node:path\");\n const { fileURLToPath } = await import(\"node:url\");\n const __dirname = dirname(fileURLToPath(import.meta.url));\n const packageJson = JSON.parse(\n readFileSync(join(__dirname, \"..\", \"package.json\"), \"utf8\"),\n );\n return packageJson.version || \"1.0.0\";\n } catch {\n return \"1.0.0\";\n }\n}\n"
|
|
15
15
|
],
|
|
16
|
-
"mappings": "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",
|
|
17
|
-
"debugId": "
|
|
16
|
+
"mappings": "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",
|
|
17
|
+
"debugId": "47D5567939C3896F64756E2164756E21",
|
|
18
18
|
"names": []
|
|
19
19
|
}
|
package/dist/cli.js
CHANGED
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
ServiceManager,
|
|
8
8
|
checkDependencies,
|
|
9
9
|
installDependencies
|
|
10
|
-
} from "./index-
|
|
10
|
+
} from "./index-s7ff1fj1.js";
|
|
11
11
|
import {
|
|
12
12
|
logger
|
|
13
13
|
} from "./index-88ym10cs.js";
|
|
@@ -33,7 +33,7 @@ import {
|
|
|
33
33
|
} from "./index-g8dczzvv.js";
|
|
34
34
|
import {
|
|
35
35
|
PluginManager
|
|
36
|
-
} from "./plugin-system-
|
|
36
|
+
} from "./plugin-system-7r9mb1tb.js";
|
|
37
37
|
|
|
38
38
|
// node_modules/commander/lib/error.js
|
|
39
39
|
var require_error = __commonJS((exports) => {
|
|
@@ -2145,9 +2145,7 @@ var {
|
|
|
2145
2145
|
} = import__.default;
|
|
2146
2146
|
|
|
2147
2147
|
// src/cli.ts
|
|
2148
|
-
import {
|
|
2149
|
-
import { join as join3, dirname } from "path";
|
|
2150
|
-
import { fileURLToPath } from "url";
|
|
2148
|
+
import { join as join3 } from "path";
|
|
2151
2149
|
|
|
2152
2150
|
// src/cli/commands/start.cmd.ts
|
|
2153
2151
|
import { existsSync } from "fs";
|
|
@@ -2155,15 +2153,21 @@ import { join } from "path";
|
|
|
2155
2153
|
import { homedir } from "os";
|
|
2156
2154
|
|
|
2157
2155
|
// src/services/port-utils.ts
|
|
2158
|
-
import { createServer } from "net";
|
|
2159
2156
|
function isPortAvailable(port, host = "0.0.0.0") {
|
|
2160
2157
|
return new Promise((resolve) => {
|
|
2161
|
-
|
|
2162
|
-
|
|
2163
|
-
|
|
2164
|
-
|
|
2165
|
-
|
|
2166
|
-
|
|
2158
|
+
try {
|
|
2159
|
+
const server = Bun.listen({
|
|
2160
|
+
hostname: host,
|
|
2161
|
+
port,
|
|
2162
|
+
socket: {
|
|
2163
|
+
data() {}
|
|
2164
|
+
}
|
|
2165
|
+
});
|
|
2166
|
+
server.stop(true);
|
|
2167
|
+
resolve(true);
|
|
2168
|
+
} catch {
|
|
2169
|
+
resolve(false);
|
|
2170
|
+
}
|
|
2167
2171
|
});
|
|
2168
2172
|
}
|
|
2169
2173
|
async function findFreePortFrom(startPort, host = "0.0.0.0") {
|
|
@@ -2224,7 +2228,7 @@ function register(program2) {
|
|
|
2224
2228
|
kv("Host", host);
|
|
2225
2229
|
kv("Database", dbPath);
|
|
2226
2230
|
blank();
|
|
2227
|
-
const { createApp } = await import("./app-
|
|
2231
|
+
const { createApp } = await import("./app-sm6n9xst.js");
|
|
2228
2232
|
const appInstance = await createApp({
|
|
2229
2233
|
port,
|
|
2230
2234
|
host,
|
|
@@ -2490,7 +2494,6 @@ function register7(program2) {
|
|
|
2490
2494
|
}
|
|
2491
2495
|
|
|
2492
2496
|
// src/cli/commands/update.cmd.ts
|
|
2493
|
-
import { execSync } from "child_process";
|
|
2494
2497
|
var PACKAGE_NAME = "vibecontrols-agent";
|
|
2495
2498
|
function register8(program2) {
|
|
2496
2499
|
program2.command("update").description("Check for and install VibeControls agent updates").option("--check", "Only check for updates without installing", false).action(async (opts) => {
|
|
@@ -2499,7 +2502,7 @@ function register8(program2) {
|
|
|
2499
2502
|
blank();
|
|
2500
2503
|
let currentVersion;
|
|
2501
2504
|
try {
|
|
2502
|
-
const pkg = await import("./package-
|
|
2505
|
+
const pkg = await import("./package-04nkt49b.js", {
|
|
2503
2506
|
with: { type: "json" }
|
|
2504
2507
|
});
|
|
2505
2508
|
currentVersion = pkg.default.version || pkg.version;
|
|
@@ -2510,9 +2513,10 @@ function register8(program2) {
|
|
|
2510
2513
|
blank();
|
|
2511
2514
|
let latestVersion;
|
|
2512
2515
|
try {
|
|
2513
|
-
|
|
2514
|
-
|
|
2515
|
-
|
|
2516
|
+
const result = Bun.spawnSync(["npm", "view", PACKAGE_NAME, "version"], { stdout: "pipe", stderr: "pipe" });
|
|
2517
|
+
if (result.exitCode !== 0)
|
|
2518
|
+
throw new Error("npm view failed");
|
|
2519
|
+
latestVersion = result.stdout.toString().trim();
|
|
2516
2520
|
} catch {
|
|
2517
2521
|
fail(`Could not check for updates. Ensure you have internet connectivity and npm is available.`);
|
|
2518
2522
|
return;
|
|
@@ -2532,10 +2536,9 @@ function register8(program2) {
|
|
|
2532
2536
|
info(`${icons.info} Updating to ${colors.bold(latestVersion)}...`);
|
|
2533
2537
|
blank();
|
|
2534
2538
|
try {
|
|
2535
|
-
|
|
2536
|
-
|
|
2537
|
-
|
|
2538
|
-
});
|
|
2539
|
+
const installResult = Bun.spawnSync(["npm", "install", "-g", `${PACKAGE_NAME}@${latestVersion}`], { stdout: "inherit", stderr: "inherit" });
|
|
2540
|
+
if (installResult.exitCode !== 0)
|
|
2541
|
+
throw new Error("install failed");
|
|
2539
2542
|
} catch {
|
|
2540
2543
|
fail(`Failed to install update. Try running with sudo: ${colors.bold(`sudo npm install -g ${PACKAGE_NAME}@${latestVersion}`)}`);
|
|
2541
2544
|
return;
|
|
@@ -2851,12 +2854,10 @@ if (typeof Bun === "undefined") {
|
|
|
2851
2854
|
` + " Then run: bun run vibe ...");
|
|
2852
2855
|
process.exit(1);
|
|
2853
2856
|
}
|
|
2854
|
-
var __filename2 = fileURLToPath(import.meta.url);
|
|
2855
|
-
var __dirname2 = dirname(__filename2);
|
|
2856
2857
|
var packageVersion = "1.0.0";
|
|
2857
2858
|
try {
|
|
2858
|
-
const packageJsonPath = join3(
|
|
2859
|
-
const packageJson =
|
|
2859
|
+
const packageJsonPath = join3(import.meta.dir, "..", "package.json");
|
|
2860
|
+
const packageJson = await Bun.file(packageJsonPath).json();
|
|
2860
2861
|
packageVersion = packageJson.version;
|
|
2861
2862
|
} catch {}
|
|
2862
2863
|
var program2 = new Command;
|
|
@@ -2912,5 +2913,5 @@ main().catch((err) => {
|
|
|
2912
2913
|
process.exit(1);
|
|
2913
2914
|
});
|
|
2914
2915
|
|
|
2915
|
-
//# debugId=
|
|
2916
|
+
//# debugId=B3B10A5CB7971CB864756E2164756E21
|
|
2916
2917
|
//# sourceMappingURL=cli.js.map
|