@burdenoff/vibe-agent 2.7.1 → 2.7.2

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.
@@ -17,7 +17,7 @@ import {
17
17
  } from "./index-g8dczzvv.js";
18
18
  import {
19
19
  PluginManager
20
- } from "./plugin-system-w2727db6.js";
20
+ } from "./plugin-system-4h7vtge8.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("_host", key) ?? null;
1071
+ async get(namespace, key) {
1072
+ return db.getPluginState(namespace, key) ?? null;
1073
1073
  },
1074
- async set(key, value) {
1075
- db.setPluginState("_host", key, value);
1074
+ async set(namespace, key, value) {
1075
+ db.setPluginState(namespace, key, value);
1076
1076
  },
1077
- async delete(key) {
1078
- return db.deletePluginState("_host", key);
1077
+ async delete(namespace, key) {
1078
+ return db.deletePluginState(namespace, key);
1079
1079
  },
1080
- async list() {
1081
- return db.getAllPluginState("_host");
1080
+ async list(namespace) {
1081
+ return db.getAllPluginState(namespace);
1082
1082
  },
1083
- async deleteAll() {
1084
- return db.deleteAllPluginState("_host");
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=09014DBE5BA56E4964756E2164756E21
1165
- //# sourceMappingURL=app-7xd13pn3.js.map
1164
+ //# debugId=F2C6BFB8F350A48F64756E2164756E21
1165
+ //# sourceMappingURL=app-fr7b9dpr.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(\"_host\", key) ?? null;\n },\n async set(key: string, value: string) {\n db.setPluginState(\"_host\", key, value);\n },\n async delete(key: string) {\n return db.deletePluginState(\"_host\", key);\n },\n async list() {\n return db.getAllPluginState(\"_host\") as StorageEntry[];\n },\n async deleteAll() {\n return db.deleteAllPluginState(\"_host\");\n },\n };\n\n const packageVersion = await getPackageVersion();\n\n const hostServices: HostServices = {\n storage: storageProvider,\n logger,\n serviceRegistry,\n getProvider: (<T>(type: \"tunnel\" | \"session\") =>\n serviceRegistry.getProvider<T>(type)) as HostServices[\"getProvider\"],\n getAgentBaseUrl: () => process.env.AGENT_URL || `http://localhost:${port}`,\n getAgentVersion: () => packageVersion,\n };\n\n // ── Build Plugin Router ─────────────────────────────────────────────\n const { routes: pluginRoutes, getPublicPaths } = createPluginRouter(\n pluginManager,\n { db, serviceRegistry, pluginManager },\n );\n\n // ── Build UI Server ─────────────────────────────────────────────────\n const uiServer = createUIServer(pluginManager);\n\n // ── Elysia App ──────────────────────────────────────────────────────\n const app = new Elysia()\n // CORS\n .use(\n cors({\n origin: corsOrigin || true,\n credentials: true,\n }),\n )\n\n // Auth middleware (with dynamic public paths from plugins)\n .use(createAuthPlugin(getPublicPaths))\n\n // Request/Response logging\n .onAfterHandle(({ request, set }) => {\n const url = new URL(request.url).pathname;\n const isNoisy =\n url === \"/health\" ||\n url.startsWith(\"/api/logs/stream\") ||\n url.startsWith(\"/ui/\");\n const status = typeof set.status === \"number\" ? set.status : 200;\n const level = isNoisy ? \"debug\" : status >= 400 ? \"warn\" : \"info\";\n logger[level](\"http\", `${request.method} ${url} → ${status}`, {\n method: request.method,\n path: url,\n statusCode: status,\n });\n })\n\n // ── Health Routes (auth-exempt, outside plugin system) ──────────\n .use(createHealthRoutes(serviceRegistry))\n\n // ── Plugin Routes (all REST APIs) ───────────────────────────────\n .use(pluginRoutes)\n\n // ── Plugin UI Server ────────────────────────────────────────────\n .use(uiServer)\n\n // ── WebSocket: Events ───────────────────────────────────────────\n .use(createEventsWs())\n\n // ── WebSocket: Logs ─────────────────────────────────────────────\n .use(createLogWs())\n\n // ── Terminal Proxy (HTTP + WS) ──────────────────────────────────\n .use(createTerminalProxy(serviceRegistry));\n\n // ── Plugin Lifecycle: onServerStart ─────────────────────────────────\n try {\n // Cast to Elysia to satisfy the generic type constraint —\n // the concrete app type carries decorator metadata that the plugin\n // lifecycle interface doesn't need.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n await pluginManager.dispatchServerStart(app as any, hostServices);\n } catch (err) {\n logger.warn(\"app\", \"Error during plugin onServerStart dispatch\", {\n error: String(err),\n });\n }\n\n return {\n app,\n db,\n serviceRegistry,\n pluginManager,\n hostServices,\n async start() {\n app.listen({ port, hostname: host });\n logger.info(\"app\", `Agent server listening on ${host}:${port}`);\n\n // Dispatch onServerReady\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n await pluginManager.dispatchServerReady(app as any, hostServices);\n } catch (err) {\n logger.warn(\"app\", \"Error during plugin onServerReady dispatch\", {\n error: String(err),\n });\n }\n\n return app;\n },\n async stop() {\n try {\n await pluginManager.dispatchServerStop();\n } catch (err) {\n logger.warn(\"app\", \"Error stopping plugins\", { error: String(err) });\n }\n db.close();\n logger.close();\n logger.info(\"app\", \"Agent server stopped\");\n },\n };\n}\n\n// ── Helpers ──────────────────────────────────────────────────────────────\n\nasync function getPackageVersion(): Promise<string> {\n try {\n const { readFileSync } = await import(\"node:fs\");\n const { join, dirname } = await import(\"node:path\");\n const { fileURLToPath } = await import(\"node:url\");\n const __dirname = dirname(fileURLToPath(import.meta.url));\n const packageJson = JSON.parse(\n readFileSync(join(__dirname, \"..\", \"package.json\"), \"utf8\"),\n );\n return packageJson.version || \"1.0.0\";\n } catch {\n return \"1.0.0\";\n }\n}\n"
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": "09014DBE5BA56E4964756E2164756E21",
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-w2727db6.js";
36
+ } from "./plugin-system-4h7vtge8.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-7xd13pn3.js");
2231
+ const { createApp } = await import("./app-fr7b9dpr.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-a1mt704j.js", {
2505
+ const pkg = await import("./package-ma89np7x.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-w2727db6.js");
165
+ const { PluginManager } = await import("./plugin-system-4h7vtge8.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-w2727db6.js");
201
+ const { PluginManager } = await import("./plugin-system-4h7vtge8.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-w2727db6.js");
224
+ const { PluginManager } = await import("./plugin-system-4h7vtge8.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-5hb62xkm.js.map
601
+ //# sourceMappingURL=index-x4hap91d.js.map
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-7xd13pn3.js";
13
- import"./plugin-system-w2727db6.js";
12
+ } from "./app-fr7b9dpr.js";
13
+ import"./plugin-system-4h7vtge8.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.1";
6
+ var version = "2.7.2";
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=CF5F37FA4C0A09C664756E2164756E21
138
- //# sourceMappingURL=package-a1mt704j.js.map
137
+ //# debugId=DDC5055380D52BE364756E2164756E21
138
+ //# sourceMappingURL=package-ma89np7x.js.map
@@ -4,6 +4,6 @@
4
4
  "sourcesContent": [
5
5
  ],
6
6
  "mappings": "",
7
- "debugId": "CF5F37FA4C0A09C664756E2164756E21",
7
+ "debugId": "DDC5055380D52BE364756E2164756E21",
8
8
  "names": []
9
9
  }
@@ -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-5hb62xkm.js"),
77
+ import("./index-x4hap91d.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=8DD2577C7DC4CE6B64756E2164756E21
507
- //# sourceMappingURL=plugin-system-w2727db6.js.map
507
+ //# debugId=B63838C4965057F664756E2164756E21
508
+ //# sourceMappingURL=plugin-system-4h7vtge8.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": "8DD2577C7DC4CE6B64756E2164756E21",
7
+ "mappings": "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",
8
+ "debugId": "B63838C4965057F664756E2164756E21",
9
9
  "names": []
10
10
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@burdenoff/vibe-agent",
3
- "version": "2.7.1",
3
+ "version": "2.7.2",
4
4
  "main": "./dist/index.js",
5
5
  "type": "module",
6
6
  "bin": {