@burdenoff/vibe-agent 2.7.1 → 2.7.3
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-7xd13pn3.js → app-334d98sj.js} +13 -13
- package/dist/{app-7xd13pn3.js.map → app-334d98sj.js.map} +3 -3
- package/dist/cli.js +3 -3
- package/dist/{index-5hb62xkm.js → index-10wkaqpa.js} +4 -4
- package/dist/{index-rdm6e3rr.js → index-t0nsa57v.js} +3 -2
- package/dist/{index-rdm6e3rr.js.map → index-t0nsa57v.js.map} +3 -3
- package/dist/index.js +2 -2
- package/dist/{package-a1mt704j.js → package-v2hcn3dp.js} +3 -3
- package/dist/{package-a1mt704j.js.map → package-v2hcn3dp.js.map} +1 -1
- package/dist/{plugin-system-w2727db6.js → plugin-system-7hmbwvtf.js} +5 -4
- package/dist/{plugin-system-w2727db6.js.map → plugin-system-7hmbwvtf.js.map} +3 -3
- package/package.json +1 -1
- /package/dist/{index-5hb62xkm.js.map → index-10wkaqpa.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-7hmbwvtf.js";
|
|
21
21
|
|
|
22
22
|
// node_modules/@elysiajs/cors/dist/index.mjs
|
|
23
23
|
var isBun = typeof new Headers()?.toJSON === "function";
|
|
@@ -1068,20 +1068,20 @@ async function createApp(options) {
|
|
|
1068
1068
|
});
|
|
1069
1069
|
}
|
|
1070
1070
|
const storageProvider = {
|
|
1071
|
-
async get(key) {
|
|
1072
|
-
return db.getPluginState(
|
|
1071
|
+
async get(namespace, key) {
|
|
1072
|
+
return db.getPluginState(namespace, key) ?? null;
|
|
1073
1073
|
},
|
|
1074
|
-
async set(key, value) {
|
|
1075
|
-
db.setPluginState(
|
|
1074
|
+
async set(namespace, key, value) {
|
|
1075
|
+
db.setPluginState(namespace, key, value);
|
|
1076
1076
|
},
|
|
1077
|
-
async delete(key) {
|
|
1078
|
-
return db.deletePluginState(
|
|
1077
|
+
async delete(namespace, key) {
|
|
1078
|
+
return db.deletePluginState(namespace, key);
|
|
1079
1079
|
},
|
|
1080
|
-
async list() {
|
|
1081
|
-
return db.getAllPluginState(
|
|
1080
|
+
async list(namespace) {
|
|
1081
|
+
return db.getAllPluginState(namespace);
|
|
1082
1082
|
},
|
|
1083
|
-
async deleteAll() {
|
|
1084
|
-
return db.deleteAllPluginState(
|
|
1083
|
+
async deleteAll(namespace) {
|
|
1084
|
+
return db.deleteAllPluginState(namespace);
|
|
1085
1085
|
}
|
|
1086
1086
|
};
|
|
1087
1087
|
const packageVersion = await getPackageVersion();
|
|
@@ -1161,5 +1161,5 @@ async function getPackageVersion() {
|
|
|
1161
1161
|
|
|
1162
1162
|
export { createApp };
|
|
1163
1163
|
|
|
1164
|
-
//# debugId=
|
|
1165
|
-
//# sourceMappingURL=app-
|
|
1164
|
+
//# debugId=F2C6BFB8F350A48F64756E2164756E21
|
|
1165
|
+
//# sourceMappingURL=app-334d98sj.js.map
|
|
@@ -11,9 +11,9 @@
|
|
|
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 } 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
|
-
"/**\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(
|
|
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(namespace: string, key: string) {\n return db.getPluginState(namespace, key) ?? null;\n },\n async set(namespace: string, key: string, value: string) {\n db.setPluginState(namespace, key, value);\n },\n async delete(namespace: string, key: string) {\n return db.deletePluginState(namespace, key);\n },\n async list(namespace: string) {\n return db.getAllPluginState(namespace) as StorageEntry[];\n },\n async deleteAll(namespace: string) {\n return db.deleteAllPluginState(namespace);\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": "F2C6BFB8F350A48F64756E2164756E21",
|
|
18
18
|
"names": []
|
|
19
19
|
}
|
package/dist/cli.js
CHANGED
|
@@ -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-7hmbwvtf.js";
|
|
37
37
|
|
|
38
38
|
// node_modules/commander/lib/error.js
|
|
39
39
|
var require_error = __commonJS((exports) => {
|
|
@@ -2228,7 +2228,7 @@ function register(program2) {
|
|
|
2228
2228
|
kv("Host", host);
|
|
2229
2229
|
kv("Database", dbPath);
|
|
2230
2230
|
blank();
|
|
2231
|
-
const { createApp } = await import("./app-
|
|
2231
|
+
const { createApp } = await import("./app-334d98sj.js");
|
|
2232
2232
|
const appInstance = await createApp({
|
|
2233
2233
|
port,
|
|
2234
2234
|
host,
|
|
@@ -2502,7 +2502,7 @@ function register8(program2) {
|
|
|
2502
2502
|
blank();
|
|
2503
2503
|
let currentVersion;
|
|
2504
2504
|
try {
|
|
2505
|
-
const pkg = await import("./package-
|
|
2505
|
+
const pkg = await import("./package-v2hcn3dp.js", {
|
|
2506
2506
|
with: { type: "json" }
|
|
2507
2507
|
});
|
|
2508
2508
|
currentVersion = pkg.default.version || pkg.version;
|
|
@@ -162,7 +162,7 @@ function register(program) {
|
|
|
162
162
|
} catch {
|
|
163
163
|
warn("Agent not reachable. Attempting local plugin registry...");
|
|
164
164
|
try {
|
|
165
|
-
const { PluginManager } = await import("./plugin-system-
|
|
165
|
+
const { PluginManager } = await import("./plugin-system-7hmbwvtf.js");
|
|
166
166
|
const pm = new PluginManager;
|
|
167
167
|
plugins = pm.getPluginDetails() || [];
|
|
168
168
|
} catch {
|
|
@@ -198,7 +198,7 @@ function register(program) {
|
|
|
198
198
|
} catch {
|
|
199
199
|
warn("Agent not reachable. Attempting local install...");
|
|
200
200
|
try {
|
|
201
|
-
const { PluginManager } = await import("./plugin-system-
|
|
201
|
+
const { PluginManager } = await import("./plugin-system-7hmbwvtf.js");
|
|
202
202
|
const pm = new PluginManager;
|
|
203
203
|
await pm.install(packageName);
|
|
204
204
|
success(`Plugin "${packageName}" installed locally.`);
|
|
@@ -221,7 +221,7 @@ function register(program) {
|
|
|
221
221
|
} catch {
|
|
222
222
|
warn("Agent not reachable. Attempting local removal...");
|
|
223
223
|
try {
|
|
224
|
-
const { PluginManager } = await import("./plugin-system-
|
|
224
|
+
const { PluginManager } = await import("./plugin-system-7hmbwvtf.js");
|
|
225
225
|
const pm = new PluginManager;
|
|
226
226
|
await pm.remove(packageName);
|
|
227
227
|
success(`Plugin "${packageName}" removed locally.`);
|
|
@@ -598,4 +598,4 @@ export {
|
|
|
598
598
|
};
|
|
599
599
|
|
|
600
600
|
//# debugId=77470ADF30C64CDD64756E2164756E21
|
|
601
|
-
//# sourceMappingURL=index-
|
|
601
|
+
//# sourceMappingURL=index-10wkaqpa.js.map
|
|
@@ -163,6 +163,7 @@ function createRoutes(deps) {
|
|
|
163
163
|
}
|
|
164
164
|
}
|
|
165
165
|
const session = await provider.create({
|
|
166
|
+
id: body.sessionId,
|
|
166
167
|
name: body.sessionName || `vibecontrols-${Date.now()}`,
|
|
167
168
|
command: body.command,
|
|
168
169
|
workingDirectory: body.startDirectory,
|
|
@@ -583,5 +584,5 @@ export {
|
|
|
583
584
|
vibePlugin
|
|
584
585
|
};
|
|
585
586
|
|
|
586
|
-
//# debugId=
|
|
587
|
-
//# sourceMappingURL=index-
|
|
587
|
+
//# debugId=5AB9B114935378E764756E2164756E21
|
|
588
|
+
//# sourceMappingURL=index-t0nsa57v.js.map
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/plugins/session/routes.ts", "../src/cli/commands/session.cmd.ts", "../src/plugins/session/commands.ts", "../src/plugins/session/index.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"/**\n * Session Plugin — Routes\n *\n * Delegates all session management to the registered SessionProvider.\n * This decouples the API from any specific terminal multiplexer (tmux, wezterm, etc.).\n *\n * Endpoints:\n * GET / — List all managed sessions\n * GET /system — List all system sessions (incl. unmanaged)\n * GET /system/terminals — List all system terminal server processes\n * POST /system/kill — Bulk kill system sessions\n * POST /system/terminals/kill — Bulk kill system terminal processes\n * POST /health-check — Bulk session health check\n * POST /create — Create a new session (idempotent)\n * GET /:id — Get session by ID\n * DELETE /:id — Kill/terminate session\n * POST /:id/command — Send command to session\n * POST /:id/keys — Send raw keys to session\n * POST /:id/interrupt — Send Ctrl+C to session\n * GET /:id/capture — Capture session output\n * PUT /:id/rename — Rename session\n * POST /:id/toggle-mouse — Toggle mouse mode\n * GET /:id/termination-status — Get session termination verification\n * GET /:id/terminal — Get terminal info\n * POST /:id/terminal — Start web terminal (ttyd)\n * POST /:id/terminal/stop — Stop web terminal\n */\n\nimport { Elysia, t } from \"elysia\";\n\nimport type { PluginRouteDeps } from \"../../core/types.js\";\nimport type { ServiceRegistry } from \"../../core/service-registry.js\";\nimport type { SessionProvider } from \"../../core/providers/session.provider.js\";\nimport type { TunnelProvider } from \"../../core/providers/tunnel.provider.js\";\n\n// ── Helpers ─────────────────────────────────────────────────────────────\n\nfunction getSessionProvider(registry: ServiceRegistry): SessionProvider {\n const provider = registry.getProvider<SessionProvider>(\"session\");\n if (!provider) {\n throw new Error(\"No session provider registered\");\n }\n return provider;\n}\n\n// ── Routes ──────────────────────────────────────────────────────────────\n\nexport function createRoutes(deps: PluginRouteDeps) {\n const { serviceRegistry } = deps;\n\n return (\n new Elysia()\n // List all managed sessions\n .get(\"/\", async ({ set }) => {\n try {\n const provider = getSessionProvider(serviceRegistry);\n const sessions = await provider.list();\n return { sessions };\n } catch (err) {\n set.status = 500;\n return { error: \"Failed to list sessions\", details: String(err) };\n }\n })\n\n // List all system sessions (including unmanaged ones)\n .get(\"/system\", async ({ set }) => {\n try {\n const provider = getSessionProvider(serviceRegistry);\n const sessions = await provider.listSystem();\n return { sessions };\n } catch (err) {\n set.status = 500;\n return {\n error: \"Failed to get system sessions\",\n details: String(err),\n };\n }\n })\n\n // List all system terminal server processes\n .get(\"/system/terminals\", async ({ set }) => {\n try {\n const provider = getSessionProvider(serviceRegistry);\n const processes = await provider.listSystemTerminals();\n return { processes };\n } catch (err) {\n set.status = 500;\n return {\n error: \"Failed to get system terminal processes\",\n details: String(err),\n };\n }\n })\n\n // Bulk kill system sessions\n .post(\n \"/system/kill\",\n async ({ body, set }) => {\n try {\n const provider = getSessionProvider(serviceRegistry);\n const results: Array<{\n target: string;\n success: boolean;\n error?: string;\n }> = [];\n\n for (const sessionId of body.sessionIds) {\n try {\n await provider.killSystem(sessionId);\n results.push({ target: sessionId, success: true });\n } catch (err) {\n results.push({\n target: sessionId,\n success: false,\n error: String(err),\n });\n }\n }\n\n return { results };\n } catch (err) {\n set.status = 500;\n return {\n error: \"Failed to kill system sessions\",\n details: String(err),\n };\n }\n },\n {\n body: t.Object({\n sessionIds: t.Array(t.String()),\n force: t.Optional(t.Boolean()),\n }),\n },\n )\n\n // Bulk kill system terminal processes\n .post(\n \"/system/terminals/kill\",\n async ({ body, set }) => {\n try {\n const provider = getSessionProvider(serviceRegistry);\n const results: Array<{\n target: string;\n success: boolean;\n error?: string;\n }> = [];\n\n for (const pid of body.pids) {\n try {\n await provider.killSystemTerminal(pid);\n results.push({ target: String(pid), success: true });\n } catch (err) {\n results.push({\n target: String(pid),\n success: false,\n error: String(err),\n });\n }\n }\n\n return { results };\n } catch (err) {\n set.status = 500;\n return {\n error: \"Failed to kill system terminal processes\",\n details: String(err),\n };\n }\n },\n {\n body: t.Object({\n pids: t.Array(t.Number()),\n force: t.Optional(t.Boolean()),\n }),\n },\n )\n\n // Bulk session health check\n .post(\n \"/health-check\",\n async ({ body, set }) => {\n try {\n const provider = getSessionProvider(serviceRegistry);\n const results: Array<{\n sessionId: string;\n status: \"running\" | \"dead\" | \"unknown\";\n }> = [];\n\n for (const sessionId of body.sessionIds) {\n try {\n const session = await provider.get(sessionId);\n if (!session) {\n results.push({ sessionId, status: \"unknown\" });\n } else {\n results.push({\n sessionId,\n status: session.status === \"active\" ? \"running\" : \"dead\",\n });\n }\n } catch {\n results.push({ sessionId, status: \"unknown\" });\n }\n }\n\n return { results };\n } catch (err) {\n set.status = 500;\n return {\n error: \"Failed to health check sessions\",\n details: String(err),\n };\n }\n },\n {\n body: t.Object({\n sessionIds: t.Array(t.String()),\n }),\n },\n )\n\n // Create new session (idempotent)\n .post(\n \"/create\",\n async ({ body, set }) => {\n try {\n const provider = getSessionProvider(serviceRegistry);\n\n // Check if session already exists (idempotent)\n if (body.sessionId) {\n const existing = await provider.get(body.sessionId);\n if (existing && existing.status === \"active\") {\n return { session: existing, reused: true };\n }\n }\n\n const session = await provider.create({\n name: body.sessionName || `vibecontrols-${Date.now()}`,\n command: body.command,\n workingDirectory: body.startDirectory,\n projectId: body.projectId,\n });\n\n return { session, reused: false };\n } catch (err) {\n set.status = 500;\n return { error: \"Failed to create session\", details: String(err) };\n }\n },\n {\n body: t.Object({\n sessionId: t.Optional(t.String()),\n projectId: t.Optional(t.String()),\n sessionName: t.Optional(t.String()),\n windowName: t.Optional(t.String()),\n command: t.Optional(t.String()),\n startDirectory: t.Optional(t.String()),\n }),\n },\n )\n\n // Get session by ID\n .get(\"/:id\", async ({ params, set }) => {\n try {\n const provider = getSessionProvider(serviceRegistry);\n const session = await provider.get(params.id);\n\n if (!session) {\n set.status = 404;\n return { error: \"Session not found\" };\n }\n\n return { session };\n } catch (err) {\n set.status = 500;\n return { error: \"Failed to get session\", details: String(err) };\n }\n })\n\n // Kill session\n .delete(\"/:id\", async ({ params, set }) => {\n try {\n const provider = getSessionProvider(serviceRegistry);\n const session = await provider.get(params.id);\n\n if (!session) {\n set.status = 404;\n return { error: \"Session not found\" };\n }\n\n await provider.kill(params.id);\n\n return { success: true, sessionName: session.name };\n } catch (err) {\n set.status = 500;\n return { error: \"Failed to kill session\", details: String(err) };\n }\n })\n\n // Send command to session\n .post(\n \"/:id/command\",\n async ({ params, body, set }) => {\n try {\n const provider = getSessionProvider(serviceRegistry);\n const session = await provider.get(params.id);\n\n if (!session) {\n set.status = 404;\n return { error: \"Session not found\" };\n }\n\n await provider.sendCommand(params.id, body.command);\n return { success: true };\n } catch (err) {\n set.status = 500;\n return { error: \"Failed to execute command\", details: String(err) };\n }\n },\n {\n body: t.Object({\n command: t.String(),\n }),\n },\n )\n\n // Send raw keys to session\n .post(\n \"/:id/keys\",\n async ({ params, body, set }) => {\n try {\n const provider = getSessionProvider(serviceRegistry);\n const session = await provider.get(params.id);\n\n if (!session) {\n set.status = 404;\n return { error: \"Session not found\" };\n }\n\n await provider.sendKeys(params.id, body.keys);\n return { success: true };\n } catch (err) {\n set.status = 500;\n return { error: \"Failed to send keys\", details: String(err) };\n }\n },\n {\n body: t.Object({\n keys: t.String(),\n }),\n },\n )\n\n // Interrupt session (Ctrl+C)\n .post(\"/:id/interrupt\", async ({ params, set }) => {\n try {\n const provider = getSessionProvider(serviceRegistry);\n const session = await provider.get(params.id);\n\n if (!session) {\n set.status = 404;\n return { error: \"Session not found\" };\n }\n\n await provider.interrupt(params.id);\n return { success: true };\n } catch (err) {\n set.status = 500;\n return { error: \"Failed to send interrupt\", details: String(err) };\n }\n })\n\n // Capture session output\n .get(\"/:id/capture\", async ({ params, set }) => {\n try {\n const provider = getSessionProvider(serviceRegistry);\n const session = await provider.get(params.id);\n\n if (!session) {\n set.status = 404;\n return { error: \"Session not found\" };\n }\n\n const output = await provider.capture(params.id);\n return { output };\n } catch (err) {\n set.status = 500;\n return { error: \"Failed to capture output\", details: String(err) };\n }\n })\n\n // Rename session\n .put(\n \"/:id/rename\",\n async ({ params, body, set }) => {\n try {\n const provider = getSessionProvider(serviceRegistry);\n const session = await provider.get(params.id);\n\n if (!session) {\n set.status = 404;\n return { error: \"Session not found\" };\n }\n\n await provider.rename(params.id, body.newName);\n return { success: true };\n } catch (err) {\n set.status = 500;\n return { error: \"Failed to rename session\", details: String(err) };\n }\n },\n {\n body: t.Object({\n newName: t.String(),\n }),\n },\n )\n\n // Toggle mouse mode\n .post(\"/:id/toggle-mouse\", async ({ params, set }) => {\n try {\n const provider = getSessionProvider(serviceRegistry);\n const session = await provider.get(params.id);\n\n if (!session) {\n set.status = 404;\n return { error: \"Session not found\" };\n }\n\n await provider.toggleMouse(params.id);\n return { success: true };\n } catch (err) {\n set.status = 500;\n return { error: \"Failed to toggle mouse mode\", details: String(err) };\n }\n })\n\n // Get termination status\n .get(\"/:id/termination-status\", async ({ params, set }) => {\n try {\n const provider = getSessionProvider(serviceRegistry);\n const session = await provider.get(params.id);\n\n if (!session) {\n set.status = 404;\n return { error: \"Session not found\" };\n }\n\n const termStatus = await provider.getTerminationStatus(params.id);\n return {\n sessionId: params.id,\n sessionName: session.name,\n databaseStatus: session.status,\n ...termStatus,\n isFullyTerminated:\n termStatus.exited && session.status === \"terminated\",\n };\n } catch (err) {\n set.status = 500;\n return {\n error: \"Failed to verify termination\",\n details: String(err),\n };\n }\n })\n\n // Get terminal info\n .get(\"/:id/terminal\", async ({ params, set }) => {\n try {\n const provider = getSessionProvider(serviceRegistry);\n const session = await provider.get(params.id);\n\n if (!session) {\n set.status = 404;\n return { error: \"Session not found\" };\n }\n\n const terminal = await provider.getTerminalInfo(params.id);\n if (!terminal) {\n set.status = 404;\n return { error: \"Terminal not running for this session\" };\n }\n\n // Build proxy URL if tunnel is available\n const tunnelProvider =\n serviceRegistry.getProvider<TunnelProvider>(\"tunnel\");\n const tunnelUrl = tunnelProvider\n ? await tunnelProvider.getActiveTunnelUrl()\n : null;\n const terminalProxyUrl = tunnelUrl\n ? `${tunnelUrl}/terminal/${params.id}/`\n : null;\n\n return {\n port: terminal.port,\n url: `http://localhost:${terminal.port}`,\n pid: terminal.pid,\n terminalUrl: terminalProxyUrl,\n };\n } catch (err) {\n set.status = 500;\n return { error: \"Failed to get terminal info\", details: String(err) };\n }\n })\n\n // Start web terminal (ttyd)\n .post(\"/:id/terminal\", async ({ params, set }) => {\n try {\n const provider = getSessionProvider(serviceRegistry);\n const session = await provider.get(params.id);\n\n if (!session) {\n set.status = 404;\n return { error: \"Session not found\" };\n }\n\n // Check if terminal is already running\n const existingTerminal = await provider.getTerminalInfo(params.id);\n if (existingTerminal) {\n const tunnelProvider =\n serviceRegistry.getProvider<TunnelProvider>(\"tunnel\");\n const tunnelUrl = tunnelProvider\n ? await tunnelProvider.getActiveTunnelUrl()\n : null;\n const terminalProxyUrl = tunnelUrl\n ? `${tunnelUrl}/terminal/${params.id}/`\n : null;\n\n return {\n port: existingTerminal.port,\n pid: existingTerminal.pid,\n url: `http://localhost:${existingTerminal.port}`,\n terminalUrl: terminalProxyUrl,\n };\n }\n\n const terminal = await provider.startTerminal(params.id);\n\n // Build proxy URL\n const tunnelProvider =\n serviceRegistry.getProvider<TunnelProvider>(\"tunnel\");\n const tunnelUrl = tunnelProvider\n ? await tunnelProvider.getActiveTunnelUrl()\n : null;\n const terminalProxyUrl = tunnelUrl\n ? `${tunnelUrl}/terminal/${params.id}/`\n : null;\n\n return {\n port: terminal.port,\n pid: terminal.pid,\n url: `http://localhost:${terminal.port}`,\n terminalUrl: terminalProxyUrl,\n };\n } catch (err) {\n set.status = 500;\n return { error: \"Failed to start terminal\", details: String(err) };\n }\n })\n\n // Stop web terminal\n .post(\"/:id/terminal/stop\", async ({ params, set }) => {\n try {\n const provider = getSessionProvider(serviceRegistry);\n const session = await provider.get(params.id);\n\n if (!session) {\n set.status = 404;\n return { error: \"Session not found\" };\n }\n\n await provider.stopTerminal(params.id);\n return { success: true };\n } catch (err) {\n set.status = 500;\n return { error: \"Failed to stop terminal\", details: String(err) };\n }\n })\n );\n}\n",
|
|
5
|
+
"/**\n * Session Plugin — Routes\n *\n * Delegates all session management to the registered SessionProvider.\n * This decouples the API from any specific terminal multiplexer (tmux, wezterm, etc.).\n *\n * Endpoints:\n * GET / — List all managed sessions\n * GET /system — List all system sessions (incl. unmanaged)\n * GET /system/terminals — List all system terminal server processes\n * POST /system/kill — Bulk kill system sessions\n * POST /system/terminals/kill — Bulk kill system terminal processes\n * POST /health-check — Bulk session health check\n * POST /create — Create a new session (idempotent)\n * GET /:id — Get session by ID\n * DELETE /:id — Kill/terminate session\n * POST /:id/command — Send command to session\n * POST /:id/keys — Send raw keys to session\n * POST /:id/interrupt — Send Ctrl+C to session\n * GET /:id/capture — Capture session output\n * PUT /:id/rename — Rename session\n * POST /:id/toggle-mouse — Toggle mouse mode\n * GET /:id/termination-status — Get session termination verification\n * GET /:id/terminal — Get terminal info\n * POST /:id/terminal — Start web terminal (ttyd)\n * POST /:id/terminal/stop — Stop web terminal\n */\n\nimport { Elysia, t } from \"elysia\";\n\nimport type { PluginRouteDeps } from \"../../core/types.js\";\nimport type { ServiceRegistry } from \"../../core/service-registry.js\";\nimport type { SessionProvider } from \"../../core/providers/session.provider.js\";\nimport type { TunnelProvider } from \"../../core/providers/tunnel.provider.js\";\n\n// ── Helpers ─────────────────────────────────────────────────────────────\n\nfunction getSessionProvider(registry: ServiceRegistry): SessionProvider {\n const provider = registry.getProvider<SessionProvider>(\"session\");\n if (!provider) {\n throw new Error(\"No session provider registered\");\n }\n return provider;\n}\n\n// ── Routes ──────────────────────────────────────────────────────────────\n\nexport function createRoutes(deps: PluginRouteDeps) {\n const { serviceRegistry } = deps;\n\n return (\n new Elysia()\n // List all managed sessions\n .get(\"/\", async ({ set }) => {\n try {\n const provider = getSessionProvider(serviceRegistry);\n const sessions = await provider.list();\n return { sessions };\n } catch (err) {\n set.status = 500;\n return { error: \"Failed to list sessions\", details: String(err) };\n }\n })\n\n // List all system sessions (including unmanaged ones)\n .get(\"/system\", async ({ set }) => {\n try {\n const provider = getSessionProvider(serviceRegistry);\n const sessions = await provider.listSystem();\n return { sessions };\n } catch (err) {\n set.status = 500;\n return {\n error: \"Failed to get system sessions\",\n details: String(err),\n };\n }\n })\n\n // List all system terminal server processes\n .get(\"/system/terminals\", async ({ set }) => {\n try {\n const provider = getSessionProvider(serviceRegistry);\n const processes = await provider.listSystemTerminals();\n return { processes };\n } catch (err) {\n set.status = 500;\n return {\n error: \"Failed to get system terminal processes\",\n details: String(err),\n };\n }\n })\n\n // Bulk kill system sessions\n .post(\n \"/system/kill\",\n async ({ body, set }) => {\n try {\n const provider = getSessionProvider(serviceRegistry);\n const results: Array<{\n target: string;\n success: boolean;\n error?: string;\n }> = [];\n\n for (const sessionId of body.sessionIds) {\n try {\n await provider.killSystem(sessionId);\n results.push({ target: sessionId, success: true });\n } catch (err) {\n results.push({\n target: sessionId,\n success: false,\n error: String(err),\n });\n }\n }\n\n return { results };\n } catch (err) {\n set.status = 500;\n return {\n error: \"Failed to kill system sessions\",\n details: String(err),\n };\n }\n },\n {\n body: t.Object({\n sessionIds: t.Array(t.String()),\n force: t.Optional(t.Boolean()),\n }),\n },\n )\n\n // Bulk kill system terminal processes\n .post(\n \"/system/terminals/kill\",\n async ({ body, set }) => {\n try {\n const provider = getSessionProvider(serviceRegistry);\n const results: Array<{\n target: string;\n success: boolean;\n error?: string;\n }> = [];\n\n for (const pid of body.pids) {\n try {\n await provider.killSystemTerminal(pid);\n results.push({ target: String(pid), success: true });\n } catch (err) {\n results.push({\n target: String(pid),\n success: false,\n error: String(err),\n });\n }\n }\n\n return { results };\n } catch (err) {\n set.status = 500;\n return {\n error: \"Failed to kill system terminal processes\",\n details: String(err),\n };\n }\n },\n {\n body: t.Object({\n pids: t.Array(t.Number()),\n force: t.Optional(t.Boolean()),\n }),\n },\n )\n\n // Bulk session health check\n .post(\n \"/health-check\",\n async ({ body, set }) => {\n try {\n const provider = getSessionProvider(serviceRegistry);\n const results: Array<{\n sessionId: string;\n status: \"running\" | \"dead\" | \"unknown\";\n }> = [];\n\n for (const sessionId of body.sessionIds) {\n try {\n const session = await provider.get(sessionId);\n if (!session) {\n results.push({ sessionId, status: \"unknown\" });\n } else {\n results.push({\n sessionId,\n status: session.status === \"active\" ? \"running\" : \"dead\",\n });\n }\n } catch {\n results.push({ sessionId, status: \"unknown\" });\n }\n }\n\n return { results };\n } catch (err) {\n set.status = 500;\n return {\n error: \"Failed to health check sessions\",\n details: String(err),\n };\n }\n },\n {\n body: t.Object({\n sessionIds: t.Array(t.String()),\n }),\n },\n )\n\n // Create new session (idempotent)\n .post(\n \"/create\",\n async ({ body, set }) => {\n try {\n const provider = getSessionProvider(serviceRegistry);\n\n // Check if session already exists (idempotent)\n if (body.sessionId) {\n const existing = await provider.get(body.sessionId);\n if (existing && existing.status === \"active\") {\n return { session: existing, reused: true };\n }\n }\n\n const session = await provider.create({\n id: body.sessionId,\n name: body.sessionName || `vibecontrols-${Date.now()}`,\n command: body.command,\n workingDirectory: body.startDirectory,\n projectId: body.projectId,\n });\n\n return { session, reused: false };\n } catch (err) {\n set.status = 500;\n return { error: \"Failed to create session\", details: String(err) };\n }\n },\n {\n body: t.Object({\n sessionId: t.Optional(t.String()),\n projectId: t.Optional(t.String()),\n sessionName: t.Optional(t.String()),\n windowName: t.Optional(t.String()),\n command: t.Optional(t.String()),\n startDirectory: t.Optional(t.String()),\n }),\n },\n )\n\n // Get session by ID\n .get(\"/:id\", async ({ params, set }) => {\n try {\n const provider = getSessionProvider(serviceRegistry);\n const session = await provider.get(params.id);\n\n if (!session) {\n set.status = 404;\n return { error: \"Session not found\" };\n }\n\n return { session };\n } catch (err) {\n set.status = 500;\n return { error: \"Failed to get session\", details: String(err) };\n }\n })\n\n // Kill session\n .delete(\"/:id\", async ({ params, set }) => {\n try {\n const provider = getSessionProvider(serviceRegistry);\n const session = await provider.get(params.id);\n\n if (!session) {\n set.status = 404;\n return { error: \"Session not found\" };\n }\n\n await provider.kill(params.id);\n\n return { success: true, sessionName: session.name };\n } catch (err) {\n set.status = 500;\n return { error: \"Failed to kill session\", details: String(err) };\n }\n })\n\n // Send command to session\n .post(\n \"/:id/command\",\n async ({ params, body, set }) => {\n try {\n const provider = getSessionProvider(serviceRegistry);\n const session = await provider.get(params.id);\n\n if (!session) {\n set.status = 404;\n return { error: \"Session not found\" };\n }\n\n await provider.sendCommand(params.id, body.command);\n return { success: true };\n } catch (err) {\n set.status = 500;\n return { error: \"Failed to execute command\", details: String(err) };\n }\n },\n {\n body: t.Object({\n command: t.String(),\n }),\n },\n )\n\n // Send raw keys to session\n .post(\n \"/:id/keys\",\n async ({ params, body, set }) => {\n try {\n const provider = getSessionProvider(serviceRegistry);\n const session = await provider.get(params.id);\n\n if (!session) {\n set.status = 404;\n return { error: \"Session not found\" };\n }\n\n await provider.sendKeys(params.id, body.keys);\n return { success: true };\n } catch (err) {\n set.status = 500;\n return { error: \"Failed to send keys\", details: String(err) };\n }\n },\n {\n body: t.Object({\n keys: t.String(),\n }),\n },\n )\n\n // Interrupt session (Ctrl+C)\n .post(\"/:id/interrupt\", async ({ params, set }) => {\n try {\n const provider = getSessionProvider(serviceRegistry);\n const session = await provider.get(params.id);\n\n if (!session) {\n set.status = 404;\n return { error: \"Session not found\" };\n }\n\n await provider.interrupt(params.id);\n return { success: true };\n } catch (err) {\n set.status = 500;\n return { error: \"Failed to send interrupt\", details: String(err) };\n }\n })\n\n // Capture session output\n .get(\"/:id/capture\", async ({ params, set }) => {\n try {\n const provider = getSessionProvider(serviceRegistry);\n const session = await provider.get(params.id);\n\n if (!session) {\n set.status = 404;\n return { error: \"Session not found\" };\n }\n\n const output = await provider.capture(params.id);\n return { output };\n } catch (err) {\n set.status = 500;\n return { error: \"Failed to capture output\", details: String(err) };\n }\n })\n\n // Rename session\n .put(\n \"/:id/rename\",\n async ({ params, body, set }) => {\n try {\n const provider = getSessionProvider(serviceRegistry);\n const session = await provider.get(params.id);\n\n if (!session) {\n set.status = 404;\n return { error: \"Session not found\" };\n }\n\n await provider.rename(params.id, body.newName);\n return { success: true };\n } catch (err) {\n set.status = 500;\n return { error: \"Failed to rename session\", details: String(err) };\n }\n },\n {\n body: t.Object({\n newName: t.String(),\n }),\n },\n )\n\n // Toggle mouse mode\n .post(\"/:id/toggle-mouse\", async ({ params, set }) => {\n try {\n const provider = getSessionProvider(serviceRegistry);\n const session = await provider.get(params.id);\n\n if (!session) {\n set.status = 404;\n return { error: \"Session not found\" };\n }\n\n await provider.toggleMouse(params.id);\n return { success: true };\n } catch (err) {\n set.status = 500;\n return { error: \"Failed to toggle mouse mode\", details: String(err) };\n }\n })\n\n // Get termination status\n .get(\"/:id/termination-status\", async ({ params, set }) => {\n try {\n const provider = getSessionProvider(serviceRegistry);\n const session = await provider.get(params.id);\n\n if (!session) {\n set.status = 404;\n return { error: \"Session not found\" };\n }\n\n const termStatus = await provider.getTerminationStatus(params.id);\n return {\n sessionId: params.id,\n sessionName: session.name,\n databaseStatus: session.status,\n ...termStatus,\n isFullyTerminated:\n termStatus.exited && session.status === \"terminated\",\n };\n } catch (err) {\n set.status = 500;\n return {\n error: \"Failed to verify termination\",\n details: String(err),\n };\n }\n })\n\n // Get terminal info\n .get(\"/:id/terminal\", async ({ params, set }) => {\n try {\n const provider = getSessionProvider(serviceRegistry);\n const session = await provider.get(params.id);\n\n if (!session) {\n set.status = 404;\n return { error: \"Session not found\" };\n }\n\n const terminal = await provider.getTerminalInfo(params.id);\n if (!terminal) {\n set.status = 404;\n return { error: \"Terminal not running for this session\" };\n }\n\n // Build proxy URL if tunnel is available\n const tunnelProvider =\n serviceRegistry.getProvider<TunnelProvider>(\"tunnel\");\n const tunnelUrl = tunnelProvider\n ? await tunnelProvider.getActiveTunnelUrl()\n : null;\n const terminalProxyUrl = tunnelUrl\n ? `${tunnelUrl}/terminal/${params.id}/`\n : null;\n\n return {\n port: terminal.port,\n url: `http://localhost:${terminal.port}`,\n pid: terminal.pid,\n terminalUrl: terminalProxyUrl,\n };\n } catch (err) {\n set.status = 500;\n return { error: \"Failed to get terminal info\", details: String(err) };\n }\n })\n\n // Start web terminal (ttyd)\n .post(\"/:id/terminal\", async ({ params, set }) => {\n try {\n const provider = getSessionProvider(serviceRegistry);\n const session = await provider.get(params.id);\n\n if (!session) {\n set.status = 404;\n return { error: \"Session not found\" };\n }\n\n // Check if terminal is already running\n const existingTerminal = await provider.getTerminalInfo(params.id);\n if (existingTerminal) {\n const tunnelProvider =\n serviceRegistry.getProvider<TunnelProvider>(\"tunnel\");\n const tunnelUrl = tunnelProvider\n ? await tunnelProvider.getActiveTunnelUrl()\n : null;\n const terminalProxyUrl = tunnelUrl\n ? `${tunnelUrl}/terminal/${params.id}/`\n : null;\n\n return {\n port: existingTerminal.port,\n pid: existingTerminal.pid,\n url: `http://localhost:${existingTerminal.port}`,\n terminalUrl: terminalProxyUrl,\n };\n }\n\n const terminal = await provider.startTerminal(params.id);\n\n // Build proxy URL\n const tunnelProvider =\n serviceRegistry.getProvider<TunnelProvider>(\"tunnel\");\n const tunnelUrl = tunnelProvider\n ? await tunnelProvider.getActiveTunnelUrl()\n : null;\n const terminalProxyUrl = tunnelUrl\n ? `${tunnelUrl}/terminal/${params.id}/`\n : null;\n\n return {\n port: terminal.port,\n pid: terminal.pid,\n url: `http://localhost:${terminal.port}`,\n terminalUrl: terminalProxyUrl,\n };\n } catch (err) {\n set.status = 500;\n return { error: \"Failed to start terminal\", details: String(err) };\n }\n })\n\n // Stop web terminal\n .post(\"/:id/terminal/stop\", async ({ params, set }) => {\n try {\n const provider = getSessionProvider(serviceRegistry);\n const session = await provider.get(params.id);\n\n if (!session) {\n set.status = 404;\n return { error: \"Session not found\" };\n }\n\n await provider.stopTerminal(params.id);\n return { success: true };\n } catch (err) {\n set.status = 500;\n return { error: \"Failed to stop terminal\", details: String(err) };\n }\n })\n );\n}\n",
|
|
6
6
|
"import { Command } from \"commander\";\nimport {\n getAgentUrl,\n apiGet,\n apiPost,\n apiPut,\n apiDelete,\n fail,\n success,\n info,\n header,\n kv,\n blank,\n formatTable,\n formatStatus,\n shortId,\n} from \"../utils/index.js\";\n\nconst DEFAULT_AGENT_URL = \"http://localhost:3005\";\n\nexport function register(program: Command): void {\n const cmd = program\n .command(\"session\")\n .description(\"Manage terminal sessions\");\n\n // session list\n cmd\n .command(\"list\")\n .description(\"List all sessions\")\n .option(\"--system\", \"Show system sessions instead of user sessions\")\n .option(\"--agent-url <url>\", \"Agent URL\", DEFAULT_AGENT_URL)\n .action(async (options) => {\n try {\n const url = getAgentUrl(options);\n const endpoint = options.system\n ? \"/api/sessions?system=true\"\n : \"/api/sessions\";\n const sessions = await apiGet<any[]>(url, endpoint);\n if (!sessions || sessions.length === 0) {\n info(\"No sessions found.\");\n return;\n }\n header(\"Sessions\");\n formatTable(\n sessions.map((s: any) => ({\n ID: shortId(s.id),\n Name: s.name || \"-\",\n Status: formatStatus(s.status),\n Port: s.port ?? \"-\",\n Project: s.project || s.projectId || \"-\",\n })),\n );\n } catch (err: any) {\n fail(err.message);\n }\n });\n\n // session create\n cmd\n .command(\"create\")\n .description(\"Create a new session\")\n .requiredOption(\"--name <name>\", \"Session name\")\n .option(\"--project <id>\", \"Project ID\", \"default\")\n .option(\"--command <cmd>\", \"Initial command to run\")\n .option(\"--cwd <dir>\", \"Working directory\")\n .option(\"--agent-url <url>\", \"Agent URL\", DEFAULT_AGENT_URL)\n .action(async (options) => {\n try {\n const url = getAgentUrl(options);\n const body: Record<string, any> = {\n name: options.name,\n project: options.project,\n };\n if (options.command) body.command = options.command;\n if (options.cwd) body.cwd = options.cwd;\n const result = await apiPost<any>(url, \"/api/sessions/create\", body);\n success(`Session created: ${shortId(result.id || result.sessionId)}`);\n kv(\"Name\", options.name);\n kv(\"Project\", options.project);\n } catch (err: any) {\n fail(err.message);\n }\n });\n\n // session kill\n cmd\n .command(\"kill\")\n .description(\"Kill a session\")\n .requiredOption(\"-i, --id <id>\", \"Session ID\")\n .option(\"--agent-url <url>\", \"Agent URL\", DEFAULT_AGENT_URL)\n .action(async (options) => {\n try {\n const url = getAgentUrl(options);\n await apiDelete<any>(url, `/api/sessions/${options.id}`);\n success(`Session ${shortId(options.id)} killed.`);\n } catch (err: any) {\n fail(err.message);\n }\n });\n\n // session exec\n cmd\n .command(\"exec\")\n .description(\"Execute a command in a session\")\n .requiredOption(\"-i, --id <id>\", \"Session ID\")\n .requiredOption(\"-c, --command <cmd>\", \"Command to execute\")\n .option(\"--agent-url <url>\", \"Agent URL\", DEFAULT_AGENT_URL)\n .action(async (options) => {\n try {\n const url = getAgentUrl(options);\n const result = await apiPost<any>(\n url,\n `/api/sessions/${options.id}/command`,\n { command: options.command },\n );\n success(\"Command executed.\");\n if (result?.output) {\n blank();\n console.log(result.output);\n }\n } catch (err: any) {\n fail(err.message);\n }\n });\n\n // session capture\n cmd\n .command(\"capture\")\n .description(\"Capture session terminal output\")\n .requiredOption(\"-i, --id <id>\", \"Session ID\")\n .option(\"--agent-url <url>\", \"Agent URL\", DEFAULT_AGENT_URL)\n .action(async (options) => {\n try {\n const url = getAgentUrl(options);\n const result = await apiGet<any>(\n url,\n `/api/sessions/${options.id}/capture`,\n );\n if (result?.content || result?.output) {\n console.log(result.content || result.output);\n } else {\n info(\"No capture data available.\");\n }\n } catch (err: any) {\n fail(err.message);\n }\n });\n\n // session keys\n cmd\n .command(\"keys\")\n .description(\"Send keys to a session\")\n .requiredOption(\"-i, --id <id>\", \"Session ID\")\n .requiredOption(\"-k, --keys <keys>\", \"Keys to send\")\n .option(\"--agent-url <url>\", \"Agent URL\", DEFAULT_AGENT_URL)\n .action(async (options) => {\n try {\n const url = getAgentUrl(options);\n await apiPost<any>(url, `/api/sessions/${options.id}/keys`, {\n keys: options.keys,\n });\n success(\"Keys sent.\");\n } catch (err: any) {\n fail(err.message);\n }\n });\n\n // session interrupt\n cmd\n .command(\"interrupt\")\n .description(\"Send interrupt signal to a session\")\n .requiredOption(\"-i, --id <id>\", \"Session ID\")\n .option(\"--agent-url <url>\", \"Agent URL\", DEFAULT_AGENT_URL)\n .action(async (options) => {\n try {\n const url = getAgentUrl(options);\n await apiPost<any>(url, `/api/sessions/${options.id}/interrupt`, {});\n success(`Session ${shortId(options.id)} interrupted.`);\n } catch (err: any) {\n fail(err.message);\n }\n });\n\n // session rename\n cmd\n .command(\"rename\")\n .description(\"Rename a session\")\n .requiredOption(\"-i, --id <id>\", \"Session ID\")\n .requiredOption(\"--name <name>\", \"New session name\")\n .option(\"--agent-url <url>\", \"Agent URL\", DEFAULT_AGENT_URL)\n .action(async (options) => {\n try {\n const url = getAgentUrl(options);\n await apiPut<any>(url, `/api/sessions/${options.id}/rename`, {\n name: options.name,\n });\n success(`Session ${shortId(options.id)} renamed to \"${options.name}\".`);\n } catch (err: any) {\n fail(err.message);\n }\n });\n\n // session toggle-mouse\n cmd\n .command(\"toggle-mouse\")\n .description(\"Toggle mouse support in a session\")\n .requiredOption(\"-i, --id <id>\", \"Session ID\")\n .option(\"--agent-url <url>\", \"Agent URL\", DEFAULT_AGENT_URL)\n .action(async (options) => {\n try {\n const url = getAgentUrl(options);\n const result = await apiPost<any>(\n url,\n `/api/sessions/${options.id}/toggle-mouse`,\n {},\n );\n success(\n `Mouse support ${result?.mouseEnabled ? \"enabled\" : \"toggled\"} for session ${shortId(options.id)}.`,\n );\n } catch (err: any) {\n fail(err.message);\n }\n });\n\n // session terminal-start\n cmd\n .command(\"terminal-start\")\n .description(\"Start terminal for a session\")\n .requiredOption(\"-i, --id <id>\", \"Session ID\")\n .option(\"--agent-url <url>\", \"Agent URL\", DEFAULT_AGENT_URL)\n .action(async (options) => {\n try {\n const url = getAgentUrl(options);\n const result = await apiPost<any>(\n url,\n `/api/sessions/${options.id}/terminal`,\n {},\n );\n success(`Terminal started for session ${shortId(options.id)}.`);\n if (result?.port) kv(\"Port\", result.port);\n } catch (err: any) {\n fail(err.message);\n }\n });\n\n // session terminal-stop\n cmd\n .command(\"terminal-stop\")\n .description(\"Stop terminal for a session\")\n .requiredOption(\"-i, --id <id>\", \"Session ID\")\n .option(\"--agent-url <url>\", \"Agent URL\", DEFAULT_AGENT_URL)\n .action(async (options) => {\n try {\n const url = getAgentUrl(options);\n await apiPost<any>(\n url,\n `/api/sessions/${options.id}/terminal/stop`,\n {},\n );\n success(`Terminal stopped for session ${shortId(options.id)}.`);\n } catch (err: any) {\n fail(err.message);\n }\n });\n\n // session health-check\n cmd\n .command(\"health-check\")\n .description(\"Run health check on all sessions\")\n .option(\"--agent-url <url>\", \"Agent URL\", DEFAULT_AGENT_URL)\n .action(async (options) => {\n try {\n const url = getAgentUrl(options);\n const result = await apiPost<any>(\n url,\n \"/api/sessions/health-check\",\n {},\n );\n success(\"Health check completed.\");\n if (result?.healthy !== undefined) kv(\"Healthy\", result.healthy);\n if (result?.checked !== undefined) kv(\"Checked\", result.checked);\n if (result?.fixed !== undefined) kv(\"Fixed\", result.fixed);\n } catch (err: any) {\n fail(err.message);\n }\n });\n}\n",
|
|
7
7
|
"import type { Command } from \"commander\";\nimport type { HostServices } from \"../../core/plugin-system.js\";\nimport { register as registerSession } from \"../../cli/commands/session.cmd.js\";\n\nexport function registerCommands(\n program: Command,\n _hostServices: HostServices,\n): void {\n registerSession(program);\n}\n",
|
|
8
8
|
"import type { VibePlugin } from \"../../core/plugin-system.js\";\nimport type { PluginRouteDeps } from \"../../core/types.js\";\nimport { createRoutes } from \"./routes.js\";\nimport { registerCommands } from \"./commands.js\";\n\nexport const vibePlugin: VibePlugin = {\n name: \"session\",\n version: \"2.2.0\",\n description: \"Terminal session management via registered session provider\",\n tags: [\"backend\", \"cli\", \"provider\"],\n cliCommand: \"session\",\n apiPrefix: \"/api/sessions\",\n createRoutes: (deps: PluginRouteDeps) => createRoutes(deps),\n onCliSetup: async (program, hostServices) => {\n registerCommands(program, hostServices);\n },\n};\n"
|
|
9
9
|
],
|
|
10
|
-
"mappings": "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",
|
|
11
|
-
"debugId": "
|
|
10
|
+
"mappings": "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",
|
|
11
|
+
"debugId": "5AB9B114935378E764756E2164756E21",
|
|
12
12
|
"names": []
|
|
13
13
|
}
|
package/dist/index.js
CHANGED
|
@@ -9,8 +9,8 @@ import"./index-wr0mkm57.js";
|
|
|
9
9
|
import"./index-g8dczzvv.js";
|
|
10
10
|
import {
|
|
11
11
|
createApp
|
|
12
|
-
} from "./app-
|
|
13
|
-
import"./plugin-system-
|
|
12
|
+
} from "./app-334d98sj.js";
|
|
13
|
+
import"./plugin-system-7hmbwvtf.js";
|
|
14
14
|
|
|
15
15
|
// src/index.ts
|
|
16
16
|
if (typeof Bun === "undefined") {
|
|
@@ -3,7 +3,7 @@ import"./index-g8dczzvv.js";
|
|
|
3
3
|
|
|
4
4
|
// package.json
|
|
5
5
|
var name = "@burdenoff/vibe-agent";
|
|
6
|
-
var version = "2.7.
|
|
6
|
+
var version = "2.7.3";
|
|
7
7
|
var main = "./dist/index.js";
|
|
8
8
|
var type = "module";
|
|
9
9
|
var bin = {
|
|
@@ -134,5 +134,5 @@ export {
|
|
|
134
134
|
author
|
|
135
135
|
};
|
|
136
136
|
|
|
137
|
-
//# debugId=
|
|
138
|
-
//# sourceMappingURL=package-
|
|
137
|
+
//# debugId=2D8EF03848BCB53064756E2164756E21
|
|
138
|
+
//# sourceMappingURL=package-v2hcn3dp.js.map
|
|
@@ -65,7 +65,7 @@ class PluginManager {
|
|
|
65
65
|
async loadCorePlugins() {
|
|
66
66
|
const coreModules = await Promise.allSettled([
|
|
67
67
|
import("./index-ftbphe7j.js"),
|
|
68
|
-
import("./index-
|
|
68
|
+
import("./index-t0nsa57v.js"),
|
|
69
69
|
import("./index-4nsdre0j.js"),
|
|
70
70
|
import("./index-3rjnbp97.js"),
|
|
71
71
|
import("./index-c7zy3n33.js"),
|
|
@@ -74,7 +74,7 @@ class PluginManager {
|
|
|
74
74
|
import("./index-6vry08rz.js"),
|
|
75
75
|
import("./index-wmvkjcjj.js"),
|
|
76
76
|
import("./index-30p492yv.js"),
|
|
77
|
-
import("./index-
|
|
77
|
+
import("./index-10wkaqpa.js"),
|
|
78
78
|
import("./index-hefqxwht.js"),
|
|
79
79
|
import("./index-a9g7hbj9.js")
|
|
80
80
|
]);
|
|
@@ -261,6 +261,7 @@ class PluginManager {
|
|
|
261
261
|
logger.error("plugin-manager", `onServerStart failed for ${plugin.name}: ${err}`);
|
|
262
262
|
}
|
|
263
263
|
}
|
|
264
|
+
this.registerPluginProviders(plugin, hostServices);
|
|
264
265
|
}
|
|
265
266
|
}
|
|
266
267
|
async dispatchServerReady(app, hostServices) {
|
|
@@ -503,5 +504,5 @@ class PluginManager {
|
|
|
503
504
|
|
|
504
505
|
export { PluginManager };
|
|
505
506
|
|
|
506
|
-
//# debugId=
|
|
507
|
-
//# sourceMappingURL=plugin-system-
|
|
507
|
+
//# debugId=B63838C4965057F664756E2164756E21
|
|
508
|
+
//# sourceMappingURL=plugin-system-7hmbwvtf.js.map
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/core/plugin-system.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"/**\n * Plugin System — Plugin-First Architecture\n *\n * Manages the full lifecycle of VibeControls plugins: discovery, loading,\n * provider registration, lifecycle dispatch, and introspection.\n *\n * Two plugin classes:\n * 1. Core plugins — statically imported from ../plugins/index.js,\n * always available, bundled with the agent.\n * 2. External plugins — npm packages installed globally, loaded via\n * dynamic import, persisted in ~/.vibecontrols/plugins.json.\n *\n * Override rule: An external plugin whose name matches a core plugin\n * replaces the core version. Loading order is core-first, external-second.\n *\n * Plugin registry persisted at ~/.vibecontrols/plugins.json\n *\n * Lifecycle:\n * install - load - onServerStart - onServerReady - ... - onServerStop - remove\n *\n * CLI lifecycle:\n * load - onCliSetup - program.parse() - ...\n */\n\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport os from \"node:os\";\nimport type { Command } from \"commander\";\nimport type { Elysia } from \"elysia\";\n\nimport type { TunnelProvider } from \"./providers/tunnel.provider.js\";\nimport type { SessionProvider } from \"./providers/session.provider.js\";\nimport type { StorageProvider } from \"./providers/storage.provider.js\";\nimport type { ServiceRegistry } from \"./service-registry.js\";\nimport type { AgentDatabase } from \"../db/database.js\";\nimport type {\n PluginTag,\n PluginUIConfig,\n PluginRouteDeps,\n PluginEntry,\n PluginInfo,\n LogLevel,\n} from \"./types.js\";\nimport { logger } from \"../services/logger.js\";\n\n// ── Constants ────────────────────────────────────────────────────────────\n\n/** Core plugin names — order matches the static import array */\nconst CORE_PLUGIN_NAMES = [\n \"agent\",\n \"session\",\n \"tunnel\",\n \"task\",\n \"config\",\n \"git\",\n \"file\",\n \"bookmark\",\n \"notification\",\n \"project\",\n \"plugin-mgr\",\n \"state\",\n \"log\",\n] as const;\n\n/** Registry directory and file */\nconst VIBECONTROLS_DIR = join(os.homedir(), \".vibecontrols\");\nconst REGISTRY_FILE = join(VIBECONTROLS_DIR, \"plugins.json\");\n\n/** DB key prefix for default provider settings */\nconst PROVIDER_DEFAULT_PREFIX = \"provider:default:\";\n\n// ── Host Services (passed to plugins) ───────────────────────────────────\n\nexport interface HostServices {\n /** KV storage for plugin data */\n storage: StorageProvider;\n /** Structured logger */\n logger: {\n debug(\n source: string,\n message: string,\n metadata?: Record<string, unknown>,\n ): void;\n info(\n source: string,\n message: string,\n metadata?: Record<string, unknown>,\n ): void;\n warn(\n source: string,\n message: string,\n metadata?: Record<string, unknown>,\n ): void;\n error(\n source: string,\n message: string,\n metadata?: Record<string, unknown>,\n ): void;\n setLevel(level: LogLevel): void;\n };\n /** Service registry for inter-plugin communication */\n serviceRegistry: ServiceRegistry;\n /** Get a registered provider */\n getProvider<T extends TunnelProvider | SessionProvider>(\n type: \"tunnel\" | \"session\",\n ): T | undefined;\n /** Get the agent's base URL (local) */\n getAgentBaseUrl(): string;\n /** Get the agent version */\n getAgentVersion(): string;\n}\n\n// ── Plugin Interface ────────────────────────────────────────────────────\n\nexport interface VibePlugin {\n /** Unique plugin name (e.g., \"tunnel\", \"session\", \"git\") */\n name: string;\n /** Semver version string */\n version: string;\n /** Short description */\n description?: string;\n\n // Discovery metadata\n /** Classification tags for filtering and grouping */\n tags?: PluginTag[];\n /** Base CLI command name (e.g., \"git\" → `vibe git ...`) */\n cliCommand?: string;\n /** Base API route prefix (e.g., \"/api/git\") */\n apiPrefix?: string;\n /** Other plugin names this plugin depends on */\n dependencies?: string[];\n /** Public paths that bypass authentication */\n publicPaths?: string[];\n\n // Provider registration\n providers?: {\n tunnel?: TunnelProvider;\n session?: SessionProvider;\n [key: string]: unknown;\n };\n\n // UI configuration\n ui?: PluginUIConfig;\n\n // Route factory\n /** Create Elysia sub-routes for the plugin */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n createRoutes?: (deps: PluginRouteDeps) => any;\n\n // Lifecycle hooks\n /** Called during CLI setup to register commander commands */\n onCliSetup?: (\n program: Command,\n hostServices: HostServices,\n ) => void | Promise<void>;\n /** Called when the server starts (before listening) */\n onServerStart?: (\n app: Elysia,\n hostServices: HostServices,\n ) => void | Promise<void>;\n /** Called after the server is listening */\n onServerReady?: (\n app: Elysia,\n hostServices: HostServices,\n ) => void | Promise<void>;\n /** Called when the server is stopping */\n onServerStop?: () => void | Promise<void>;\n}\n\n// ── Plugin Manager ──────────────────────────────────────────────────────\n\nexport class PluginManager {\n /** External plugin registry (persisted to JSON) */\n private registry: PluginEntry[] = [];\n\n /** External plugins loaded in memory, keyed by packageName */\n private loaded = new Map<string, VibePlugin>();\n\n /** Core plugins loaded from ../plugins/*, keyed by plugin name */\n private corePlugins = new Map<string, VibePlugin>();\n\n /** Optional database reference for provider defaults */\n private db: AgentDatabase | undefined;\n\n constructor(db?: AgentDatabase) {\n this.db = db;\n this.ensureDir();\n this.loadRegistry();\n }\n\n // ── Registry Persistence ────────────────────────────────────────────\n\n /**\n * Ensure the ~/.vibecontrols directory exists.\n */\n private ensureDir(): void {\n if (!existsSync(VIBECONTROLS_DIR)) {\n mkdirSync(VIBECONTROLS_DIR, { recursive: true });\n }\n }\n\n /**\n * Load the plugin registry from disk.\n */\n private loadRegistry(): void {\n try {\n if (existsSync(REGISTRY_FILE)) {\n const raw = readFileSync(REGISTRY_FILE, \"utf-8\");\n const parsed: unknown = JSON.parse(raw);\n if (Array.isArray(parsed)) {\n this.registry = parsed as PluginEntry[];\n }\n }\n } catch {\n this.registry = [];\n }\n }\n\n /**\n * Persist the plugin registry to disk.\n */\n private saveRegistry(): void {\n this.ensureDir();\n writeFileSync(\n REGISTRY_FILE,\n JSON.stringify(this.registry, null, 2),\n \"utf-8\",\n );\n }\n\n // ── Core Plugin Loading ─────────────────────────────────────────────\n\n /**\n * Load all core plugins via static imports.\n *\n * Uses Promise.allSettled so a single broken plugin does not prevent\n * the rest from loading. Each module is expected to export a default\n * VibePlugin (or a named `vibePlugin` export).\n */\n async loadCorePlugins(): Promise<void> {\n const coreModules = await Promise.allSettled([\n import(\"../plugins/agent/index.js\"),\n import(\"../plugins/session/index.js\"),\n import(\"../plugins/tunnel/index.js\"),\n import(\"../plugins/task/index.js\"),\n import(\"../plugins/config/index.js\"),\n import(\"../plugins/git/index.js\"),\n import(\"../plugins/file/index.js\"),\n import(\"../plugins/bookmark/index.js\"),\n import(\"../plugins/notification/index.js\"),\n import(\"../plugins/project/index.js\"),\n import(\"../plugins/plugin-mgr/index.js\"),\n import(\"../plugins/state/index.js\"),\n import(\"../plugins/log/index.js\"),\n ]);\n\n for (let i = 0; i < coreModules.length; i++) {\n const result = coreModules[i];\n const expectedName = CORE_PLUGIN_NAMES[i];\n\n if (result.status === \"fulfilled\") {\n const mod = result.value as Record<string, unknown>;\n const plugin = this.extractPlugin(mod);\n\n if (plugin?.name) {\n this.corePlugins.set(plugin.name, plugin);\n logger.info(\n \"plugin-manager\",\n `Core plugin loaded: ${plugin.name} v${plugin.version}`,\n );\n } else {\n logger.warn(\n \"plugin-manager\",\n `Core plugin '${expectedName}' did not export a valid VibePlugin`,\n );\n }\n } else {\n logger.warn(\n \"plugin-manager\",\n `Failed to load core plugin '${expectedName}': ${result.reason}`,\n );\n }\n }\n\n logger.info(\n \"plugin-manager\",\n `Core plugins loaded: ${this.corePlugins.size}/${CORE_PLUGIN_NAMES.length}`,\n );\n }\n\n // ── External Plugin Install ─────────────────────────────────────────\n\n /**\n * Install a plugin package globally via npm.\n * Validates the package exports a valid VibePlugin before persisting.\n */\n async install(packageName: string): Promise<PluginEntry> {\n logger.info(\"plugin-manager\", `Installing ${packageName}...`);\n\n // npm install -g\n try {\n const result = Bun.spawnSync([\"npm\", \"install\", \"-g\", packageName], {\n timeout: 120_000,\n stdout: \"pipe\",\n stderr: \"pipe\",\n });\n if (result.exitCode !== 0) {\n throw new Error(result.stderr.toString().trim());\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n throw new Error(`Failed to install ${packageName}: ${message}`, {\n cause: err,\n });\n }\n\n // Dynamic import to validate\n const plugin = await this.importPlugin(packageName);\n\n // Log if this overrides a core plugin\n if (this.corePlugins.has(plugin.name)) {\n logger.info(\n \"plugin-manager\",\n `External plugin '${packageName}' overrides core plugin '${plugin.name}'`,\n );\n }\n\n // Save to registry (deduplicate by packageName)\n const entry: PluginEntry = {\n packageName,\n version: plugin.version,\n pluginName: plugin.name,\n installedAt: new Date().toISOString(),\n };\n\n this.registry = this.registry.filter((e) => e.packageName !== packageName);\n this.registry.push(entry);\n this.saveRegistry();\n\n logger.info(\n \"plugin-manager\",\n `Installed ${packageName}@${plugin.version} (${plugin.name})`,\n );\n return entry;\n }\n\n /**\n * Install and immediately load a plugin into a running server.\n * Registers providers and dispatches onServerStart.\n */\n async installAndLoad(\n packageName: string,\n app: Elysia,\n hostServices: HostServices,\n ): Promise<PluginEntry> {\n const entry = await this.install(packageName);\n\n // Load and start\n const plugin = this.loaded.get(entry.packageName);\n if (plugin) {\n this.registerPluginProviders(plugin, hostServices);\n\n if (plugin.onServerStart) {\n await plugin.onServerStart(app, hostServices);\n }\n }\n\n return entry;\n }\n\n // ── External Plugin Remove ──────────────────────────────────────────\n\n /**\n * Remove a plugin package. Stops the plugin, unregisters it,\n * runs npm uninstall -g, and updates the persisted registry.\n */\n async remove(packageName: string): Promise<void> {\n logger.info(\"plugin-manager\", `Removing ${packageName}...`);\n\n // Stop plugin if loaded\n const plugin = this.loaded.get(packageName);\n if (plugin?.onServerStop) {\n try {\n await plugin.onServerStop();\n } catch (err) {\n logger.warn(\"plugin-manager\", `Error stopping ${packageName}: ${err}`);\n }\n }\n\n // Clean up loaded reference\n if (plugin) {\n this.loaded.delete(packageName);\n }\n\n // npm uninstall -g\n try {\n Bun.spawnSync([\"npm\", \"uninstall\", \"-g\", packageName], {\n timeout: 60_000,\n stdout: \"pipe\",\n stderr: \"pipe\",\n });\n } catch {\n // Package might not be globally installed — that's ok\n }\n\n // Remove from registry\n this.registry = this.registry.filter((e) => e.packageName !== packageName);\n this.saveRegistry();\n\n logger.info(\"plugin-manager\", `Removed ${packageName}`);\n }\n\n // ── External Plugin Load ────────────────────────────────────────────\n\n /**\n * Load all registered external plugins into memory.\n * Does not clear core plugins — only external loaded map.\n */\n async loadAll(): Promise<void> {\n this.loaded.clear();\n\n for (const entry of this.registry) {\n try {\n await this.importPlugin(entry.packageName);\n logger.info(\n \"plugin-manager\",\n `Loaded ${entry.packageName} (${entry.pluginName})`,\n );\n } catch (err) {\n logger.warn(\n \"plugin-manager\",\n `Failed to load ${entry.packageName}: ${err}`,\n );\n }\n }\n }\n\n /**\n * Import a plugin module and extract the VibePlugin export.\n *\n * Supports multiple export patterns:\n * 1. `{ vibePlugin: VibePlugin }`\n * 2. `{ default: { vibePlugin: VibePlugin } }`\n * 3. `{ default: VibePlugin }`\n */\n private async importPlugin(packageName: string): Promise<VibePlugin> {\n let mod: Record<string, unknown>;\n\n try {\n // Try bare import first (works when running from source)\n mod = (await import(packageName)) as Record<string, unknown>;\n } catch {\n // Bare import fails in bundled dist — resolve from npm global root\n const globalRoot = this.getNpmGlobalRoot();\n if (!globalRoot) {\n throw new Error(\n `Cannot find module '${packageName}': bare import failed and npm global root is unavailable`,\n );\n }\n const absolutePath = join(globalRoot, packageName);\n mod = (await import(absolutePath)) as Record<string, unknown>;\n }\n\n const plugin = this.extractPlugin(mod);\n\n if (!plugin) {\n throw new Error(`${packageName} does not export a valid VibePlugin`);\n }\n\n this.loaded.set(packageName, plugin);\n return plugin;\n }\n\n /**\n * Get npm global root directory via `npm root -g`.\n * Cached after first call to avoid repeated spawns.\n */\n private npmGlobalRoot: string | null | undefined;\n private getNpmGlobalRoot(): string | null {\n if (this.npmGlobalRoot !== undefined) return this.npmGlobalRoot;\n\n try {\n const result = Bun.spawnSync([\"npm\", \"root\", \"-g\"], {\n stdout: \"pipe\",\n stderr: \"pipe\",\n timeout: 10_000,\n });\n if (result.exitCode === 0) {\n this.npmGlobalRoot = result.stdout.toString().trim();\n return this.npmGlobalRoot;\n }\n } catch {\n // Fall through\n }\n\n this.npmGlobalRoot = null;\n return null;\n }\n\n /**\n * Extract a VibePlugin from a module object, supporting multiple\n * export patterns (default export, named vibePlugin export, nested).\n */\n private extractPlugin(mod: Record<string, unknown>): VibePlugin | undefined {\n // Pattern 1: named export { vibePlugin }\n if (this.isVibePlugin(mod.vibePlugin)) {\n return mod.vibePlugin;\n }\n\n // Pattern 2: { default: { vibePlugin } }\n const defaultExport = mod.default as Record<string, unknown> | undefined;\n if (defaultExport && this.isVibePlugin(defaultExport.vibePlugin)) {\n return defaultExport.vibePlugin as VibePlugin;\n }\n\n // Pattern 3: { default: VibePlugin }\n if (this.isVibePlugin(defaultExport)) {\n return defaultExport as VibePlugin;\n }\n\n return undefined;\n }\n\n /**\n * Type guard: check if a value looks like a valid VibePlugin.\n */\n private isVibePlugin(value: unknown): value is VibePlugin {\n if (!value || typeof value !== \"object\") return false;\n const candidate = value as Record<string, unknown>;\n return (\n typeof candidate.name === \"string\" &&\n typeof candidate.version === \"string\"\n );\n }\n\n // ── Provider Registration ───────────────────────────────────────────\n\n /**\n * Register tunnel and session providers from a plugin into the\n * service registry.\n */\n private registerPluginProviders(\n plugin: VibePlugin,\n hostServices: HostServices,\n ): void {\n if (plugin.providers?.tunnel) {\n hostServices.serviceRegistry.registerProvider(\n \"tunnel\",\n plugin.providers.tunnel,\n plugin.name,\n );\n }\n if (plugin.providers?.session) {\n hostServices.serviceRegistry.registerProvider(\n \"session\",\n plugin.providers.session,\n plugin.name,\n );\n }\n }\n\n // ── Lifecycle Dispatch ──────────────────────────────────────────────\n\n /**\n * Dispatch onCliSetup to all loaded plugins (core + external).\n */\n async dispatchCliSetup(\n program: Command,\n hostServices: HostServices,\n ): Promise<void> {\n for (const plugin of this.getAllPlugins()) {\n if (plugin.onCliSetup) {\n try {\n await plugin.onCliSetup(program, hostServices);\n } catch (err) {\n logger.warn(\n \"plugin-manager\",\n `onCliSetup failed for ${plugin.name}: ${err}`,\n );\n }\n }\n }\n }\n\n /**\n * Dispatch onServerStart to all plugins (core + external).\n * Sorts by dependencies before dispatching. Registers providers first.\n */\n async dispatchServerStart(\n app: Elysia,\n hostServices: HostServices,\n ): Promise<void> {\n const sorted = this.sortAllByDependencies();\n\n for (const plugin of sorted) {\n // Register providers before calling onServerStart\n this.registerPluginProviders(plugin, hostServices);\n\n if (plugin.onServerStart) {\n try {\n await plugin.onServerStart(app, hostServices);\n } catch (err) {\n logger.error(\n \"plugin-manager\",\n `onServerStart failed for ${plugin.name}: ${err}`,\n );\n }\n }\n }\n }\n\n /**\n * Dispatch onServerReady to all plugins (core + external).\n */\n async dispatchServerReady(\n app: Elysia,\n hostServices: HostServices,\n ): Promise<void> {\n for (const plugin of this.getAllPlugins()) {\n if (plugin.onServerReady) {\n try {\n await plugin.onServerReady(app, hostServices);\n } catch (err) {\n logger.warn(\n \"plugin-manager\",\n `onServerReady failed for ${plugin.name}: ${err}`,\n );\n }\n }\n }\n }\n\n /**\n * Dispatch onServerStop to all plugins (core + external).\n */\n async dispatchServerStop(): Promise<void> {\n for (const plugin of this.getAllPlugins()) {\n if (plugin.onServerStop) {\n try {\n await plugin.onServerStop();\n } catch (err) {\n logger.warn(\n \"plugin-manager\",\n `onServerStop failed for ${plugin.name}: ${err}`,\n );\n }\n }\n }\n }\n\n /**\n * Reload all plugins: stop everything, clear state, reload registry,\n * reload core + external plugins, and restart.\n */\n async reloadAll(app: Elysia, hostServices: HostServices): Promise<void> {\n await this.dispatchServerStop();\n this.loaded.clear();\n this.corePlugins.clear();\n this.loadRegistry();\n await this.loadCorePlugins();\n await this.loadAll();\n await this.dispatchServerStart(app, hostServices);\n await this.dispatchServerReady(app, hostServices);\n }\n\n // ── Dependency Sorting ──────────────────────────────────────────────\n\n /**\n * Topological sort of ALL plugins (core + external, deduplicated)\n * respecting declared dependencies.\n */\n private sortAllByDependencies(): VibePlugin[] {\n const allPlugins = this.getAllPlugins();\n const pluginMap = new Map<string, VibePlugin>();\n for (const plugin of allPlugins) {\n pluginMap.set(plugin.name, plugin);\n }\n\n const visited = new Set<string>();\n const sorted: VibePlugin[] = [];\n\n const visit = (name: string) => {\n if (visited.has(name)) return;\n visited.add(name);\n\n const plugin = pluginMap.get(name);\n if (!plugin) return;\n\n if (plugin.dependencies) {\n for (const dep of plugin.dependencies) {\n if (pluginMap.has(dep)) {\n visit(dep);\n }\n }\n }\n\n sorted.push(plugin);\n };\n\n for (const plugin of allPlugins) {\n visit(plugin.name);\n }\n\n return sorted;\n }\n\n /**\n * Topological sort of external plugins only.\n * Returns [packageName, VibePlugin] pairs in dependency order.\n */\n private sortByDependencies(): Array<[string, VibePlugin]> {\n const entries = Array.from(this.loaded.entries());\n const nameToPackage = new Map<string, string>();\n for (const [pkg, plugin] of entries) {\n nameToPackage.set(plugin.name, pkg);\n }\n\n const visited = new Set<string>();\n const sorted: Array<[string, VibePlugin]> = [];\n\n const visit = (pkg: string) => {\n if (visited.has(pkg)) return;\n visited.add(pkg);\n\n const plugin = this.loaded.get(pkg);\n if (plugin?.dependencies) {\n for (const dep of plugin.dependencies) {\n const depPkg = nameToPackage.get(dep);\n if (depPkg && this.loaded.has(depPkg)) {\n visit(depPkg);\n }\n }\n }\n const loadedPlugin = this.loaded.get(pkg);\n if (loadedPlugin) {\n sorted.push([pkg, loadedPlugin]);\n }\n };\n\n for (const [pkg] of entries) {\n visit(pkg);\n }\n\n return sorted;\n }\n\n // ── Unified Lookup ──────────────────────────────────────────────────\n\n /**\n * Look up a plugin by its name across core and external.\n * External plugins win on conflict (override semantics).\n */\n getPluginByKey(key: string): VibePlugin | undefined {\n // Check external plugins first (they override core)\n for (const [, plugin] of this.loaded) {\n if (plugin.name === key) {\n return plugin;\n }\n }\n\n // Fall back to core plugins\n return this.corePlugins.get(key);\n }\n\n /**\n * Return all plugins (core + external), deduplicated by name.\n * External plugins override core plugins with the same name.\n */\n getAllPlugins(): VibePlugin[] {\n const merged = new Map<string, VibePlugin>();\n\n // Core first\n for (const [key, plugin] of this.corePlugins) {\n merged.set(key, plugin);\n }\n\n // External override core\n for (const [, plugin] of this.loaded) {\n merged.set(plugin.name, plugin);\n }\n\n return Array.from(merged.values());\n }\n\n /**\n * Return all plugins that have the specified tag.\n */\n getAllPluginsByTag(tag: PluginTag): VibePlugin[] {\n return this.getAllPlugins().filter(\n (plugin) => plugin.tags?.includes(tag) ?? false,\n );\n }\n\n // ── Plugin Chain Resolution ─────────────────────────────────────────\n\n /**\n * Walk tokens left-to-right, matching against all known plugin names.\n * First non-matching token (or flag starting with `-`) is treated as\n * the command.\n *\n * Examples:\n * tokens = [\"git\", \"commit\", \"-m\", \"msg\"]\n * → { chain: [\"git\"], command: \"commit\", args: [\"-m\", \"msg\"] }\n *\n * tokens = [\"agent\", \"config\", \"set\", \"key\", \"value\"]\n * → { chain: [\"agent\", \"config\"], command: \"set\", args: [\"key\", \"value\"] }\n *\n * tokens = [\"tunnel\"]\n * → { chain: [\"tunnel\"], command: \"\", args: [] }\n */\n resolvePluginChain(tokens: string[]): {\n chain: string[];\n command: string;\n args: string[];\n } {\n const allKeys = new Set<string>();\n for (const p of this.getAllPlugins()) {\n allKeys.add(p.name);\n }\n\n const chain: string[] = [];\n let commandIdx = -1;\n\n for (let i = 0; i < tokens.length; i++) {\n if (tokens[i].startsWith(\"-\")) {\n // Flag — stop chain resolution\n commandIdx = i;\n break;\n }\n if (allKeys.has(tokens[i])) {\n chain.push(tokens[i]);\n } else {\n commandIdx = i;\n break;\n }\n }\n\n if (commandIdx === -1) {\n // All tokens were plugins, no command\n return { chain, command: \"\", args: [] };\n }\n\n return {\n chain,\n command: tokens[commandIdx],\n args: tokens.slice(commandIdx + 1),\n };\n }\n\n // ── Provider Defaults ───────────────────────────────────────────────\n\n /**\n * Get the default provider plugin name for a given provider type.\n * Reads from `provider:default:<type>` in the agent database.\n * Returns null if no default is set or db is not available.\n */\n getDefaultProvider(type: string): string | null {\n if (!this.db) return null;\n\n const value = this.db.getConfig(`${PROVIDER_DEFAULT_PREFIX}${type}`);\n return value ?? null;\n }\n\n /**\n * Set the default provider plugin name for a given provider type.\n * Writes `provider:default:<type>` to the agent database.\n * Throws if db is not available.\n */\n setDefaultProvider(type: string, pluginName: string): void {\n if (!this.db) {\n throw new Error(\n \"Cannot set default provider: PluginManager was constructed without a database reference\",\n );\n }\n\n // Verify the plugin exists\n const plugin = this.getPluginByKey(pluginName);\n if (!plugin) {\n throw new Error(`Plugin '${pluginName}' not found`);\n }\n\n this.db.setConfig(`${PROVIDER_DEFAULT_PREFIX}${type}`, pluginName);\n logger.info(\n \"plugin-manager\",\n `Set default '${type}' provider to '${pluginName}'`,\n );\n }\n\n // ── Introspection ───────────────────────────────────────────────────\n\n /**\n * Get detailed information about all plugins (core + external).\n * Deduplicated — external overrides core by plugin name.\n */\n getPluginDetails(): PluginInfo[] {\n const coreInfos = this.getCorePluginDetails();\n const externalInfos = this.getExternalPluginDetails();\n\n // Deduplicate: external overrides core by pluginName\n const merged = new Map<string, PluginInfo>();\n for (const info of coreInfos) {\n merged.set(info.pluginName, info);\n }\n for (const info of externalInfos) {\n merged.set(info.pluginName, info);\n }\n\n return Array.from(merged.values());\n }\n\n /**\n * Build PluginInfo entries for all core plugins.\n */\n private getCorePluginDetails(): PluginInfo[] {\n const infos: PluginInfo[] = [];\n\n for (const [name, plugin] of this.corePlugins) {\n infos.push({\n packageName: `@vibecontrols/plugin-${name}`,\n pluginName: name,\n version: plugin.version,\n description: plugin.description,\n tags: plugin.tags,\n cliCommand: plugin.cliCommand,\n apiPrefix: plugin.apiPrefix,\n dependencies: plugin.dependencies,\n installedAt: \"\",\n loaded: true,\n isCore: true,\n hasUI: !!plugin.ui,\n uiUrl: plugin.ui ? `/ui/${name}` : undefined,\n hasCliSetup: !!plugin.onCliSetup,\n hasServerStart: !!plugin.onServerStart,\n hasServerStop: !!plugin.onServerStop,\n hasServerReady: !!plugin.onServerReady,\n hasProviders: !!(plugin.providers?.tunnel || plugin.providers?.session),\n });\n }\n\n return infos;\n }\n\n /**\n * Build PluginInfo entries for all external (installed) plugins.\n */\n private getExternalPluginDetails(): PluginInfo[] {\n return this.registry.map((entry) => {\n const plugin = this.loaded.get(entry.packageName);\n return {\n packageName: entry.packageName,\n pluginName: entry.pluginName,\n version: plugin?.version ?? entry.version,\n description: plugin?.description,\n tags: plugin?.tags,\n cliCommand: plugin?.cliCommand,\n apiPrefix: plugin?.apiPrefix,\n dependencies: plugin?.dependencies,\n installedAt: entry.installedAt,\n loaded: !!plugin,\n isCore: false,\n hasUI: !!plugin?.ui,\n uiUrl: plugin?.ui ? `/ui/${entry.pluginName}` : undefined,\n hasCliSetup: !!plugin?.onCliSetup,\n hasServerStart: !!plugin?.onServerStart,\n hasServerStop: !!plugin?.onServerStop,\n hasServerReady: !!plugin?.onServerReady,\n hasProviders: !!(\n plugin?.providers?.tunnel || plugin?.providers?.session\n ),\n };\n });\n }\n\n /**\n * Get the external plugin registry entries.\n */\n getRegistry(): PluginEntry[] {\n return [...this.registry];\n }\n\n /**\n * Get an external loaded plugin by package name.\n */\n getLoaded(packageName: string): VibePlugin | undefined {\n return this.loaded.get(packageName);\n }\n\n /**\n * Get all externally loaded plugins (Map keyed by packageName).\n */\n getAllLoaded(): Map<string, VibePlugin> {\n return new Map(this.loaded);\n }\n\n /**\n * Check if a package is installed in the external registry.\n */\n isInstalled(packageName: string): boolean {\n return this.registry.some((e) => e.packageName === packageName);\n }\n\n /**\n * Check if a package is loaded in the external plugins map.\n */\n isLoaded(packageName: string): boolean {\n return this.loaded.has(packageName);\n }\n}\n"
|
|
5
|
+
"/**\n * Plugin System — Plugin-First Architecture\n *\n * Manages the full lifecycle of VibeControls plugins: discovery, loading,\n * provider registration, lifecycle dispatch, and introspection.\n *\n * Two plugin classes:\n * 1. Core plugins — statically imported from ../plugins/index.js,\n * always available, bundled with the agent.\n * 2. External plugins — npm packages installed globally, loaded via\n * dynamic import, persisted in ~/.vibecontrols/plugins.json.\n *\n * Override rule: An external plugin whose name matches a core plugin\n * replaces the core version. Loading order is core-first, external-second.\n *\n * Plugin registry persisted at ~/.vibecontrols/plugins.json\n *\n * Lifecycle:\n * install - load - onServerStart - onServerReady - ... - onServerStop - remove\n *\n * CLI lifecycle:\n * load - onCliSetup - program.parse() - ...\n */\n\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport os from \"node:os\";\nimport type { Command } from \"commander\";\nimport type { Elysia } from \"elysia\";\n\nimport type { TunnelProvider } from \"./providers/tunnel.provider.js\";\nimport type { SessionProvider } from \"./providers/session.provider.js\";\nimport type { StorageProvider } from \"./providers/storage.provider.js\";\nimport type { ServiceRegistry } from \"./service-registry.js\";\nimport type { AgentDatabase } from \"../db/database.js\";\nimport type {\n PluginTag,\n PluginUIConfig,\n PluginRouteDeps,\n PluginEntry,\n PluginInfo,\n LogLevel,\n} from \"./types.js\";\nimport { logger } from \"../services/logger.js\";\n\n// ── Constants ────────────────────────────────────────────────────────────\n\n/** Core plugin names — order matches the static import array */\nconst CORE_PLUGIN_NAMES = [\n \"agent\",\n \"session\",\n \"tunnel\",\n \"task\",\n \"config\",\n \"git\",\n \"file\",\n \"bookmark\",\n \"notification\",\n \"project\",\n \"plugin-mgr\",\n \"state\",\n \"log\",\n] as const;\n\n/** Registry directory and file */\nconst VIBECONTROLS_DIR = join(os.homedir(), \".vibecontrols\");\nconst REGISTRY_FILE = join(VIBECONTROLS_DIR, \"plugins.json\");\n\n/** DB key prefix for default provider settings */\nconst PROVIDER_DEFAULT_PREFIX = \"provider:default:\";\n\n// ── Host Services (passed to plugins) ───────────────────────────────────\n\nexport interface HostServices {\n /** KV storage for plugin data */\n storage: StorageProvider;\n /** Structured logger */\n logger: {\n debug(\n source: string,\n message: string,\n metadata?: Record<string, unknown>,\n ): void;\n info(\n source: string,\n message: string,\n metadata?: Record<string, unknown>,\n ): void;\n warn(\n source: string,\n message: string,\n metadata?: Record<string, unknown>,\n ): void;\n error(\n source: string,\n message: string,\n metadata?: Record<string, unknown>,\n ): void;\n setLevel(level: LogLevel): void;\n };\n /** Service registry for inter-plugin communication */\n serviceRegistry: ServiceRegistry;\n /** Get a registered provider */\n getProvider<T extends TunnelProvider | SessionProvider>(\n type: \"tunnel\" | \"session\",\n ): T | undefined;\n /** Get the agent's base URL (local) */\n getAgentBaseUrl(): string;\n /** Get the agent version */\n getAgentVersion(): string;\n}\n\n// ── Plugin Interface ────────────────────────────────────────────────────\n\nexport interface VibePlugin {\n /** Unique plugin name (e.g., \"tunnel\", \"session\", \"git\") */\n name: string;\n /** Semver version string */\n version: string;\n /** Short description */\n description?: string;\n\n // Discovery metadata\n /** Classification tags for filtering and grouping */\n tags?: PluginTag[];\n /** Base CLI command name (e.g., \"git\" → `vibe git ...`) */\n cliCommand?: string;\n /** Base API route prefix (e.g., \"/api/git\") */\n apiPrefix?: string;\n /** Other plugin names this plugin depends on */\n dependencies?: string[];\n /** Public paths that bypass authentication */\n publicPaths?: string[];\n\n // Provider registration\n providers?: {\n tunnel?: TunnelProvider;\n session?: SessionProvider;\n [key: string]: unknown;\n };\n\n // UI configuration\n ui?: PluginUIConfig;\n\n // Route factory\n /** Create Elysia sub-routes for the plugin */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n createRoutes?: (deps: PluginRouteDeps) => any;\n\n // Lifecycle hooks\n /** Called during CLI setup to register commander commands */\n onCliSetup?: (\n program: Command,\n hostServices: HostServices,\n ) => void | Promise<void>;\n /** Called when the server starts (before listening) */\n onServerStart?: (\n app: Elysia,\n hostServices: HostServices,\n ) => void | Promise<void>;\n /** Called after the server is listening */\n onServerReady?: (\n app: Elysia,\n hostServices: HostServices,\n ) => void | Promise<void>;\n /** Called when the server is stopping */\n onServerStop?: () => void | Promise<void>;\n}\n\n// ── Plugin Manager ──────────────────────────────────────────────────────\n\nexport class PluginManager {\n /** External plugin registry (persisted to JSON) */\n private registry: PluginEntry[] = [];\n\n /** External plugins loaded in memory, keyed by packageName */\n private loaded = new Map<string, VibePlugin>();\n\n /** Core plugins loaded from ../plugins/*, keyed by plugin name */\n private corePlugins = new Map<string, VibePlugin>();\n\n /** Optional database reference for provider defaults */\n private db: AgentDatabase | undefined;\n\n constructor(db?: AgentDatabase) {\n this.db = db;\n this.ensureDir();\n this.loadRegistry();\n }\n\n // ── Registry Persistence ────────────────────────────────────────────\n\n /**\n * Ensure the ~/.vibecontrols directory exists.\n */\n private ensureDir(): void {\n if (!existsSync(VIBECONTROLS_DIR)) {\n mkdirSync(VIBECONTROLS_DIR, { recursive: true });\n }\n }\n\n /**\n * Load the plugin registry from disk.\n */\n private loadRegistry(): void {\n try {\n if (existsSync(REGISTRY_FILE)) {\n const raw = readFileSync(REGISTRY_FILE, \"utf-8\");\n const parsed: unknown = JSON.parse(raw);\n if (Array.isArray(parsed)) {\n this.registry = parsed as PluginEntry[];\n }\n }\n } catch {\n this.registry = [];\n }\n }\n\n /**\n * Persist the plugin registry to disk.\n */\n private saveRegistry(): void {\n this.ensureDir();\n writeFileSync(\n REGISTRY_FILE,\n JSON.stringify(this.registry, null, 2),\n \"utf-8\",\n );\n }\n\n // ── Core Plugin Loading ─────────────────────────────────────────────\n\n /**\n * Load all core plugins via static imports.\n *\n * Uses Promise.allSettled so a single broken plugin does not prevent\n * the rest from loading. Each module is expected to export a default\n * VibePlugin (or a named `vibePlugin` export).\n */\n async loadCorePlugins(): Promise<void> {\n const coreModules = await Promise.allSettled([\n import(\"../plugins/agent/index.js\"),\n import(\"../plugins/session/index.js\"),\n import(\"../plugins/tunnel/index.js\"),\n import(\"../plugins/task/index.js\"),\n import(\"../plugins/config/index.js\"),\n import(\"../plugins/git/index.js\"),\n import(\"../plugins/file/index.js\"),\n import(\"../plugins/bookmark/index.js\"),\n import(\"../plugins/notification/index.js\"),\n import(\"../plugins/project/index.js\"),\n import(\"../plugins/plugin-mgr/index.js\"),\n import(\"../plugins/state/index.js\"),\n import(\"../plugins/log/index.js\"),\n ]);\n\n for (let i = 0; i < coreModules.length; i++) {\n const result = coreModules[i];\n const expectedName = CORE_PLUGIN_NAMES[i];\n\n if (result.status === \"fulfilled\") {\n const mod = result.value as Record<string, unknown>;\n const plugin = this.extractPlugin(mod);\n\n if (plugin?.name) {\n this.corePlugins.set(plugin.name, plugin);\n logger.info(\n \"plugin-manager\",\n `Core plugin loaded: ${plugin.name} v${plugin.version}`,\n );\n } else {\n logger.warn(\n \"plugin-manager\",\n `Core plugin '${expectedName}' did not export a valid VibePlugin`,\n );\n }\n } else {\n logger.warn(\n \"plugin-manager\",\n `Failed to load core plugin '${expectedName}': ${result.reason}`,\n );\n }\n }\n\n logger.info(\n \"plugin-manager\",\n `Core plugins loaded: ${this.corePlugins.size}/${CORE_PLUGIN_NAMES.length}`,\n );\n }\n\n // ── External Plugin Install ─────────────────────────────────────────\n\n /**\n * Install a plugin package globally via npm.\n * Validates the package exports a valid VibePlugin before persisting.\n */\n async install(packageName: string): Promise<PluginEntry> {\n logger.info(\"plugin-manager\", `Installing ${packageName}...`);\n\n // npm install -g\n try {\n const result = Bun.spawnSync([\"npm\", \"install\", \"-g\", packageName], {\n timeout: 120_000,\n stdout: \"pipe\",\n stderr: \"pipe\",\n });\n if (result.exitCode !== 0) {\n throw new Error(result.stderr.toString().trim());\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n throw new Error(`Failed to install ${packageName}: ${message}`, {\n cause: err,\n });\n }\n\n // Dynamic import to validate\n const plugin = await this.importPlugin(packageName);\n\n // Log if this overrides a core plugin\n if (this.corePlugins.has(plugin.name)) {\n logger.info(\n \"plugin-manager\",\n `External plugin '${packageName}' overrides core plugin '${plugin.name}'`,\n );\n }\n\n // Save to registry (deduplicate by packageName)\n const entry: PluginEntry = {\n packageName,\n version: plugin.version,\n pluginName: plugin.name,\n installedAt: new Date().toISOString(),\n };\n\n this.registry = this.registry.filter((e) => e.packageName !== packageName);\n this.registry.push(entry);\n this.saveRegistry();\n\n logger.info(\n \"plugin-manager\",\n `Installed ${packageName}@${plugin.version} (${plugin.name})`,\n );\n return entry;\n }\n\n /**\n * Install and immediately load a plugin into a running server.\n * Registers providers and dispatches onServerStart.\n */\n async installAndLoad(\n packageName: string,\n app: Elysia,\n hostServices: HostServices,\n ): Promise<PluginEntry> {\n const entry = await this.install(packageName);\n\n // Load and start\n const plugin = this.loaded.get(entry.packageName);\n if (plugin) {\n this.registerPluginProviders(plugin, hostServices);\n\n if (plugin.onServerStart) {\n await plugin.onServerStart(app, hostServices);\n }\n }\n\n return entry;\n }\n\n // ── External Plugin Remove ──────────────────────────────────────────\n\n /**\n * Remove a plugin package. Stops the plugin, unregisters it,\n * runs npm uninstall -g, and updates the persisted registry.\n */\n async remove(packageName: string): Promise<void> {\n logger.info(\"plugin-manager\", `Removing ${packageName}...`);\n\n // Stop plugin if loaded\n const plugin = this.loaded.get(packageName);\n if (plugin?.onServerStop) {\n try {\n await plugin.onServerStop();\n } catch (err) {\n logger.warn(\"plugin-manager\", `Error stopping ${packageName}: ${err}`);\n }\n }\n\n // Clean up loaded reference\n if (plugin) {\n this.loaded.delete(packageName);\n }\n\n // npm uninstall -g\n try {\n Bun.spawnSync([\"npm\", \"uninstall\", \"-g\", packageName], {\n timeout: 60_000,\n stdout: \"pipe\",\n stderr: \"pipe\",\n });\n } catch {\n // Package might not be globally installed — that's ok\n }\n\n // Remove from registry\n this.registry = this.registry.filter((e) => e.packageName !== packageName);\n this.saveRegistry();\n\n logger.info(\"plugin-manager\", `Removed ${packageName}`);\n }\n\n // ── External Plugin Load ────────────────────────────────────────────\n\n /**\n * Load all registered external plugins into memory.\n * Does not clear core plugins — only external loaded map.\n */\n async loadAll(): Promise<void> {\n this.loaded.clear();\n\n for (const entry of this.registry) {\n try {\n await this.importPlugin(entry.packageName);\n logger.info(\n \"plugin-manager\",\n `Loaded ${entry.packageName} (${entry.pluginName})`,\n );\n } catch (err) {\n logger.warn(\n \"plugin-manager\",\n `Failed to load ${entry.packageName}: ${err}`,\n );\n }\n }\n }\n\n /**\n * Import a plugin module and extract the VibePlugin export.\n *\n * Supports multiple export patterns:\n * 1. `{ vibePlugin: VibePlugin }`\n * 2. `{ default: { vibePlugin: VibePlugin } }`\n * 3. `{ default: VibePlugin }`\n */\n private async importPlugin(packageName: string): Promise<VibePlugin> {\n let mod: Record<string, unknown>;\n\n try {\n // Try bare import first (works when running from source)\n mod = (await import(packageName)) as Record<string, unknown>;\n } catch {\n // Bare import fails in bundled dist — resolve from npm global root\n const globalRoot = this.getNpmGlobalRoot();\n if (!globalRoot) {\n throw new Error(\n `Cannot find module '${packageName}': bare import failed and npm global root is unavailable`,\n );\n }\n const absolutePath = join(globalRoot, packageName);\n mod = (await import(absolutePath)) as Record<string, unknown>;\n }\n\n const plugin = this.extractPlugin(mod);\n\n if (!plugin) {\n throw new Error(`${packageName} does not export a valid VibePlugin`);\n }\n\n this.loaded.set(packageName, plugin);\n return plugin;\n }\n\n /**\n * Get npm global root directory via `npm root -g`.\n * Cached after first call to avoid repeated spawns.\n */\n private npmGlobalRoot: string | null | undefined;\n private getNpmGlobalRoot(): string | null {\n if (this.npmGlobalRoot !== undefined) return this.npmGlobalRoot;\n\n try {\n const result = Bun.spawnSync([\"npm\", \"root\", \"-g\"], {\n stdout: \"pipe\",\n stderr: \"pipe\",\n timeout: 10_000,\n });\n if (result.exitCode === 0) {\n this.npmGlobalRoot = result.stdout.toString().trim();\n return this.npmGlobalRoot;\n }\n } catch {\n // Fall through\n }\n\n this.npmGlobalRoot = null;\n return null;\n }\n\n /**\n * Extract a VibePlugin from a module object, supporting multiple\n * export patterns (default export, named vibePlugin export, nested).\n */\n private extractPlugin(mod: Record<string, unknown>): VibePlugin | undefined {\n // Pattern 1: named export { vibePlugin }\n if (this.isVibePlugin(mod.vibePlugin)) {\n return mod.vibePlugin;\n }\n\n // Pattern 2: { default: { vibePlugin } }\n const defaultExport = mod.default as Record<string, unknown> | undefined;\n if (defaultExport && this.isVibePlugin(defaultExport.vibePlugin)) {\n return defaultExport.vibePlugin as VibePlugin;\n }\n\n // Pattern 3: { default: VibePlugin }\n if (this.isVibePlugin(defaultExport)) {\n return defaultExport as VibePlugin;\n }\n\n return undefined;\n }\n\n /**\n * Type guard: check if a value looks like a valid VibePlugin.\n */\n private isVibePlugin(value: unknown): value is VibePlugin {\n if (!value || typeof value !== \"object\") return false;\n const candidate = value as Record<string, unknown>;\n return (\n typeof candidate.name === \"string\" &&\n typeof candidate.version === \"string\"\n );\n }\n\n // ── Provider Registration ───────────────────────────────────────────\n\n /**\n * Register tunnel and session providers from a plugin into the\n * service registry.\n */\n private registerPluginProviders(\n plugin: VibePlugin,\n hostServices: HostServices,\n ): void {\n if (plugin.providers?.tunnel) {\n hostServices.serviceRegistry.registerProvider(\n \"tunnel\",\n plugin.providers.tunnel,\n plugin.name,\n );\n }\n if (plugin.providers?.session) {\n hostServices.serviceRegistry.registerProvider(\n \"session\",\n plugin.providers.session,\n plugin.name,\n );\n }\n }\n\n // ── Lifecycle Dispatch ──────────────────────────────────────────────\n\n /**\n * Dispatch onCliSetup to all loaded plugins (core + external).\n */\n async dispatchCliSetup(\n program: Command,\n hostServices: HostServices,\n ): Promise<void> {\n for (const plugin of this.getAllPlugins()) {\n if (plugin.onCliSetup) {\n try {\n await plugin.onCliSetup(program, hostServices);\n } catch (err) {\n logger.warn(\n \"plugin-manager\",\n `onCliSetup failed for ${plugin.name}: ${err}`,\n );\n }\n }\n }\n }\n\n /**\n * Dispatch onServerStart to all plugins (core + external).\n * Sorts by dependencies before dispatching. Registers providers first.\n */\n async dispatchServerStart(\n app: Elysia,\n hostServices: HostServices,\n ): Promise<void> {\n const sorted = this.sortAllByDependencies();\n\n for (const plugin of sorted) {\n // Register providers before calling onServerStart\n this.registerPluginProviders(plugin, hostServices);\n\n if (plugin.onServerStart) {\n try {\n await plugin.onServerStart(app, hostServices);\n } catch (err) {\n logger.error(\n \"plugin-manager\",\n `onServerStart failed for ${plugin.name}: ${err}`,\n );\n }\n }\n\n // Re-register providers after onServerStart — some plugins (e.g.\n // tunnel-cloudflare) only populate their providers bag at runtime\n // inside onServerStart, so the pre-start registration saw undefined.\n this.registerPluginProviders(plugin, hostServices);\n }\n }\n\n /**\n * Dispatch onServerReady to all plugins (core + external).\n */\n async dispatchServerReady(\n app: Elysia,\n hostServices: HostServices,\n ): Promise<void> {\n for (const plugin of this.getAllPlugins()) {\n if (plugin.onServerReady) {\n try {\n await plugin.onServerReady(app, hostServices);\n } catch (err) {\n logger.warn(\n \"plugin-manager\",\n `onServerReady failed for ${plugin.name}: ${err}`,\n );\n }\n }\n }\n }\n\n /**\n * Dispatch onServerStop to all plugins (core + external).\n */\n async dispatchServerStop(): Promise<void> {\n for (const plugin of this.getAllPlugins()) {\n if (plugin.onServerStop) {\n try {\n await plugin.onServerStop();\n } catch (err) {\n logger.warn(\n \"plugin-manager\",\n `onServerStop failed for ${plugin.name}: ${err}`,\n );\n }\n }\n }\n }\n\n /**\n * Reload all plugins: stop everything, clear state, reload registry,\n * reload core + external plugins, and restart.\n */\n async reloadAll(app: Elysia, hostServices: HostServices): Promise<void> {\n await this.dispatchServerStop();\n this.loaded.clear();\n this.corePlugins.clear();\n this.loadRegistry();\n await this.loadCorePlugins();\n await this.loadAll();\n await this.dispatchServerStart(app, hostServices);\n await this.dispatchServerReady(app, hostServices);\n }\n\n // ── Dependency Sorting ──────────────────────────────────────────────\n\n /**\n * Topological sort of ALL plugins (core + external, deduplicated)\n * respecting declared dependencies.\n */\n private sortAllByDependencies(): VibePlugin[] {\n const allPlugins = this.getAllPlugins();\n const pluginMap = new Map<string, VibePlugin>();\n for (const plugin of allPlugins) {\n pluginMap.set(plugin.name, plugin);\n }\n\n const visited = new Set<string>();\n const sorted: VibePlugin[] = [];\n\n const visit = (name: string) => {\n if (visited.has(name)) return;\n visited.add(name);\n\n const plugin = pluginMap.get(name);\n if (!plugin) return;\n\n if (plugin.dependencies) {\n for (const dep of plugin.dependencies) {\n if (pluginMap.has(dep)) {\n visit(dep);\n }\n }\n }\n\n sorted.push(plugin);\n };\n\n for (const plugin of allPlugins) {\n visit(plugin.name);\n }\n\n return sorted;\n }\n\n /**\n * Topological sort of external plugins only.\n * Returns [packageName, VibePlugin] pairs in dependency order.\n */\n private sortByDependencies(): Array<[string, VibePlugin]> {\n const entries = Array.from(this.loaded.entries());\n const nameToPackage = new Map<string, string>();\n for (const [pkg, plugin] of entries) {\n nameToPackage.set(plugin.name, pkg);\n }\n\n const visited = new Set<string>();\n const sorted: Array<[string, VibePlugin]> = [];\n\n const visit = (pkg: string) => {\n if (visited.has(pkg)) return;\n visited.add(pkg);\n\n const plugin = this.loaded.get(pkg);\n if (plugin?.dependencies) {\n for (const dep of plugin.dependencies) {\n const depPkg = nameToPackage.get(dep);\n if (depPkg && this.loaded.has(depPkg)) {\n visit(depPkg);\n }\n }\n }\n const loadedPlugin = this.loaded.get(pkg);\n if (loadedPlugin) {\n sorted.push([pkg, loadedPlugin]);\n }\n };\n\n for (const [pkg] of entries) {\n visit(pkg);\n }\n\n return sorted;\n }\n\n // ── Unified Lookup ──────────────────────────────────────────────────\n\n /**\n * Look up a plugin by its name across core and external.\n * External plugins win on conflict (override semantics).\n */\n getPluginByKey(key: string): VibePlugin | undefined {\n // Check external plugins first (they override core)\n for (const [, plugin] of this.loaded) {\n if (plugin.name === key) {\n return plugin;\n }\n }\n\n // Fall back to core plugins\n return this.corePlugins.get(key);\n }\n\n /**\n * Return all plugins (core + external), deduplicated by name.\n * External plugins override core plugins with the same name.\n */\n getAllPlugins(): VibePlugin[] {\n const merged = new Map<string, VibePlugin>();\n\n // Core first\n for (const [key, plugin] of this.corePlugins) {\n merged.set(key, plugin);\n }\n\n // External override core\n for (const [, plugin] of this.loaded) {\n merged.set(plugin.name, plugin);\n }\n\n return Array.from(merged.values());\n }\n\n /**\n * Return all plugins that have the specified tag.\n */\n getAllPluginsByTag(tag: PluginTag): VibePlugin[] {\n return this.getAllPlugins().filter(\n (plugin) => plugin.tags?.includes(tag) ?? false,\n );\n }\n\n // ── Plugin Chain Resolution ─────────────────────────────────────────\n\n /**\n * Walk tokens left-to-right, matching against all known plugin names.\n * First non-matching token (or flag starting with `-`) is treated as\n * the command.\n *\n * Examples:\n * tokens = [\"git\", \"commit\", \"-m\", \"msg\"]\n * → { chain: [\"git\"], command: \"commit\", args: [\"-m\", \"msg\"] }\n *\n * tokens = [\"agent\", \"config\", \"set\", \"key\", \"value\"]\n * → { chain: [\"agent\", \"config\"], command: \"set\", args: [\"key\", \"value\"] }\n *\n * tokens = [\"tunnel\"]\n * → { chain: [\"tunnel\"], command: \"\", args: [] }\n */\n resolvePluginChain(tokens: string[]): {\n chain: string[];\n command: string;\n args: string[];\n } {\n const allKeys = new Set<string>();\n for (const p of this.getAllPlugins()) {\n allKeys.add(p.name);\n }\n\n const chain: string[] = [];\n let commandIdx = -1;\n\n for (let i = 0; i < tokens.length; i++) {\n if (tokens[i].startsWith(\"-\")) {\n // Flag — stop chain resolution\n commandIdx = i;\n break;\n }\n if (allKeys.has(tokens[i])) {\n chain.push(tokens[i]);\n } else {\n commandIdx = i;\n break;\n }\n }\n\n if (commandIdx === -1) {\n // All tokens were plugins, no command\n return { chain, command: \"\", args: [] };\n }\n\n return {\n chain,\n command: tokens[commandIdx],\n args: tokens.slice(commandIdx + 1),\n };\n }\n\n // ── Provider Defaults ───────────────────────────────────────────────\n\n /**\n * Get the default provider plugin name for a given provider type.\n * Reads from `provider:default:<type>` in the agent database.\n * Returns null if no default is set or db is not available.\n */\n getDefaultProvider(type: string): string | null {\n if (!this.db) return null;\n\n const value = this.db.getConfig(`${PROVIDER_DEFAULT_PREFIX}${type}`);\n return value ?? null;\n }\n\n /**\n * Set the default provider plugin name for a given provider type.\n * Writes `provider:default:<type>` to the agent database.\n * Throws if db is not available.\n */\n setDefaultProvider(type: string, pluginName: string): void {\n if (!this.db) {\n throw new Error(\n \"Cannot set default provider: PluginManager was constructed without a database reference\",\n );\n }\n\n // Verify the plugin exists\n const plugin = this.getPluginByKey(pluginName);\n if (!plugin) {\n throw new Error(`Plugin '${pluginName}' not found`);\n }\n\n this.db.setConfig(`${PROVIDER_DEFAULT_PREFIX}${type}`, pluginName);\n logger.info(\n \"plugin-manager\",\n `Set default '${type}' provider to '${pluginName}'`,\n );\n }\n\n // ── Introspection ───────────────────────────────────────────────────\n\n /**\n * Get detailed information about all plugins (core + external).\n * Deduplicated — external overrides core by plugin name.\n */\n getPluginDetails(): PluginInfo[] {\n const coreInfos = this.getCorePluginDetails();\n const externalInfos = this.getExternalPluginDetails();\n\n // Deduplicate: external overrides core by pluginName\n const merged = new Map<string, PluginInfo>();\n for (const info of coreInfos) {\n merged.set(info.pluginName, info);\n }\n for (const info of externalInfos) {\n merged.set(info.pluginName, info);\n }\n\n return Array.from(merged.values());\n }\n\n /**\n * Build PluginInfo entries for all core plugins.\n */\n private getCorePluginDetails(): PluginInfo[] {\n const infos: PluginInfo[] = [];\n\n for (const [name, plugin] of this.corePlugins) {\n infos.push({\n packageName: `@vibecontrols/plugin-${name}`,\n pluginName: name,\n version: plugin.version,\n description: plugin.description,\n tags: plugin.tags,\n cliCommand: plugin.cliCommand,\n apiPrefix: plugin.apiPrefix,\n dependencies: plugin.dependencies,\n installedAt: \"\",\n loaded: true,\n isCore: true,\n hasUI: !!plugin.ui,\n uiUrl: plugin.ui ? `/ui/${name}` : undefined,\n hasCliSetup: !!plugin.onCliSetup,\n hasServerStart: !!plugin.onServerStart,\n hasServerStop: !!plugin.onServerStop,\n hasServerReady: !!plugin.onServerReady,\n hasProviders: !!(plugin.providers?.tunnel || plugin.providers?.session),\n });\n }\n\n return infos;\n }\n\n /**\n * Build PluginInfo entries for all external (installed) plugins.\n */\n private getExternalPluginDetails(): PluginInfo[] {\n return this.registry.map((entry) => {\n const plugin = this.loaded.get(entry.packageName);\n return {\n packageName: entry.packageName,\n pluginName: entry.pluginName,\n version: plugin?.version ?? entry.version,\n description: plugin?.description,\n tags: plugin?.tags,\n cliCommand: plugin?.cliCommand,\n apiPrefix: plugin?.apiPrefix,\n dependencies: plugin?.dependencies,\n installedAt: entry.installedAt,\n loaded: !!plugin,\n isCore: false,\n hasUI: !!plugin?.ui,\n uiUrl: plugin?.ui ? `/ui/${entry.pluginName}` : undefined,\n hasCliSetup: !!plugin?.onCliSetup,\n hasServerStart: !!plugin?.onServerStart,\n hasServerStop: !!plugin?.onServerStop,\n hasServerReady: !!plugin?.onServerReady,\n hasProviders: !!(\n plugin?.providers?.tunnel || plugin?.providers?.session\n ),\n };\n });\n }\n\n /**\n * Get the external plugin registry entries.\n */\n getRegistry(): PluginEntry[] {\n return [...this.registry];\n }\n\n /**\n * Get an external loaded plugin by package name.\n */\n getLoaded(packageName: string): VibePlugin | undefined {\n return this.loaded.get(packageName);\n }\n\n /**\n * Get all externally loaded plugins (Map keyed by packageName).\n */\n getAllLoaded(): Map<string, VibePlugin> {\n return new Map(this.loaded);\n }\n\n /**\n * Check if a package is installed in the external registry.\n */\n isInstalled(packageName: string): boolean {\n return this.registry.some((e) => e.packageName === packageName);\n }\n\n /**\n * Check if a package is loaded in the external plugins map.\n */\n isLoaded(packageName: string): boolean {\n return this.loaded.has(packageName);\n }\n}\n"
|
|
6
6
|
],
|
|
7
|
-
"mappings": "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",
|
|
8
|
-
"debugId": "
|
|
7
|
+
"mappings": "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",
|
|
8
|
+
"debugId": "B63838C4965057F664756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
package/package.json
CHANGED
|
File without changes
|