@burdenoff/vibe-agent 2.2.0 → 2.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{app-6mmbmske.js → app-8dgv7s3y.js} +13 -14
- package/dist/{app-6mmbmske.js.map → app-8dgv7s3y.js.map} +3 -3
- package/dist/cli.js +28 -27
- package/dist/cli.js.map +5 -5
- package/dist/{index-41m1exz7.js → index-3rjnbp97.js} +3 -4
- package/dist/index-3rjnbp97.js.map +13 -0
- package/dist/{index-q4ytrfx7.js → index-6vry08rz.js} +4 -5
- package/dist/index-6vry08rz.js.map +13 -0
- package/dist/{index-wdtxbebz.js → index-fm6gqenc.js} +3 -4
- package/dist/index-fm6gqenc.js.map +13 -0
- package/dist/{index-3v78e2cn.js → index-s7ff1fj1.js} +88 -46
- package/dist/index-s7ff1fj1.js.map +11 -0
- package/dist/{index-9tgyd3ep.js → index-wjsms9jw.js} +11 -9
- package/dist/{index-9tgyd3ep.js.map → index-wjsms9jw.js.map} +3 -3
- package/dist/{index-qthbtg9n.js → index-wmvkjcjj.js} +4 -5
- package/dist/index-wmvkjcjj.js.map +13 -0
- package/dist/{index-xn4tarcd.js → index-x82yjxw7.js} +4 -4
- package/dist/index.js +2 -2
- package/dist/{package-ywexp6sg.js → package-04nkt49b.js} +5 -3
- package/dist/{package-ywexp6sg.js.map → package-04nkt49b.js.map} +1 -1
- package/dist/{plugin-system-v7a7xnhk.js → plugin-system-bc4rvt1c.js} +46 -14
- package/dist/plugin-system-bc4rvt1c.js.map +10 -0
- package/package.json +3 -1
- package/dist/index-3v78e2cn.js.map +0 -11
- package/dist/index-41m1exz7.js.map +0 -13
- package/dist/index-q4ytrfx7.js.map +0 -13
- package/dist/index-qthbtg9n.js.map +0 -13
- package/dist/index-wdtxbebz.js.map +0 -13
- package/dist/plugin-system-v7a7xnhk.js.map +0 -10
- /package/dist/{index-xn4tarcd.js.map → index-x82yjxw7.js.map} +0 -0
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/plugins/agent/routes.ts", "../src/cli/commands/health.cmd.ts", "../src/cli/commands/info.cmd.ts", "../src/cli/commands/key.cmd.ts", "../src/cli/commands/system.cmd.ts", "../src/cli/commands/status.cmd.ts", "../src/cli/commands/url.cmd.ts", "../src/cli/commands/gateway-auth.cmd.ts", "../src/plugins/agent/commands.ts", "../src/plugins/agent/index.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"/**\n * Agent Plugin — Routes\n *\n * Core agent endpoints for identity, API key, setup, config, system info,\n * and gateway authentication.\n *\n * Adapted from src/routes/agent.routes.ts for the plugin architecture.\n * The plugin router adds the \"/api/agent\" prefix — this factory returns\n * a bare Elysia instance with no prefix.\n *\n * Endpoints:\n * GET /identity — Agent identity (machineId, platform, etc.)\n * GET /api-key — Get the current API key\n * GET /tunnel — Get agent tunnel URL (from tunnel provider)\n * POST /tunnel/start — Start the agent tunnel\n * POST /tunnel/stop — Stop the agent tunnel\n * GET /setup/check — Check dependency status\n * POST /setup/install — Install missing dependencies\n * POST /gateway-auth — Configure gateway credentials\n * GET /gateway-auth — Get gateway config (without secret)\n * GET /version — Agent version info\n * GET /system — System information\n * GET /status — Agent status\n * GET /url — Get the active API URL (tunnel or local)\n */\n\nimport { Elysia, t } from \"elysia\";\nimport os from \"node:os\";\nimport
|
|
5
|
+
"/**\n * Agent Plugin — Routes\n *\n * Core agent endpoints for identity, API key, setup, config, system info,\n * and gateway authentication.\n *\n * Adapted from src/routes/agent.routes.ts for the plugin architecture.\n * The plugin router adds the \"/api/agent\" prefix — this factory returns\n * a bare Elysia instance with no prefix.\n *\n * Endpoints:\n * GET /identity — Agent identity (machineId, platform, etc.)\n * GET /api-key — Get the current API key\n * GET /tunnel — Get agent tunnel URL (from tunnel provider)\n * POST /tunnel/start — Start the agent tunnel\n * POST /tunnel/stop — Stop the agent tunnel\n * GET /setup/check — Check dependency status\n * POST /setup/install — Install missing dependencies\n * POST /gateway-auth — Configure gateway credentials\n * GET /gateway-auth — Get gateway config (without secret)\n * GET /version — Agent version info\n * GET /system — System information\n * GET /status — Agent status\n * GET /url — Get the active API URL (tunnel or local)\n */\n\nimport { Elysia, t } from \"elysia\";\nimport os from \"node:os\";\nimport { join } from \"node:path\";\nimport { readFileSync } from \"node:fs\";\n\nimport type { PluginRouteDeps } from \"../../core/types.js\";\nimport type { TunnelProvider } from \"../../core/providers/tunnel.provider.js\";\nimport {\n checkDependencies,\n installDependencies,\n} from \"../../services/bootstrap.service.js\";\nimport { gatewayClient } from \"../../services/gateway-client.js\";\n\n// ── Machine ID ──────────────────────────────────────────────────────────\n\nfunction getMachineId(): string {\n const hostname = os.hostname();\n const platform = os.platform();\n const arch = os.arch();\n const hasher = new Bun.CryptoHasher(\"sha256\");\n hasher.update(`${hostname}-${platform}-${arch}`);\n return hasher.digest(\"hex\").substring(0, 16);\n}\n\n// ── Version ─────────────────────────────────────────────────────────────\n\nfunction getAgentVersion(): string {\n try {\n const pkgPath = join(import.meta.dir, \"..\", \"..\", \"package.json\");\n const pkg = JSON.parse(readFileSync(pkgPath, \"utf8\")) as Record<\n string,\n unknown\n >;\n return (pkg.version as string) || \"0.0.0\";\n } catch {\n return \"0.0.0\";\n }\n}\n\n// ── Routes ──────────────────────────────────────────────────────────────\n\nexport function createRoutes(deps: PluginRouteDeps) {\n const { db, serviceRegistry } = deps;\n const version = getAgentVersion();\n const machineId = getMachineId();\n\n return (\n new Elysia()\n // Identity (auth-exempt)\n .get(\"/identity\", () => ({\n machineId,\n hostname: os.hostname(),\n platform: os.platform(),\n arch: os.arch(),\n version,\n uptime: process.uptime(),\n }))\n\n // API key (auth-exempt)\n .get(\"/api-key\", (ctx) => ({\n apiKey:\n (ctx as unknown as Record<string, string>).apiKey ??\n (ctx.store as Record<string, string>).apiKey ??\n \"unknown\",\n }))\n\n // Tunnel URL (auth-exempt — used by backend for probing)\n .get(\"/tunnel\", async () => {\n const tunnelProvider =\n serviceRegistry.getProvider<TunnelProvider>(\"tunnel\");\n if (!tunnelProvider) {\n return { tunnelUrl: null, message: \"No tunnel provider registered\" };\n }\n const url = await tunnelProvider.getActiveTunnelUrl();\n return { tunnelUrl: url };\n })\n\n // Start agent tunnel\n .post(\"/tunnel/start\", async ({ set }) => {\n const tunnelProvider =\n serviceRegistry.getProvider<TunnelProvider>(\"tunnel\");\n if (!tunnelProvider) {\n set.status = 400;\n return { error: \"No tunnel provider registered\" };\n }\n const port = parseInt(process.env.PORT || \"3005\");\n const tunnel = await tunnelProvider.start({ port, name: \"agent\" });\n return { success: true, tunnel };\n })\n\n // Stop agent tunnel\n .post(\"/tunnel/stop\", async ({ set }) => {\n const tunnelProvider =\n serviceRegistry.getProvider<TunnelProvider>(\"tunnel\");\n if (!tunnelProvider) {\n set.status = 400;\n return { error: \"No tunnel provider registered\" };\n }\n const tunnels = await tunnelProvider.list();\n const agentTunnel = tunnels.find((t) => t.metadata?.isAgent);\n if (agentTunnel) {\n await tunnelProvider.stop(agentTunnel.id);\n }\n return { success: true };\n })\n\n // Setup check\n .get(\"/setup/check\", () => {\n const deps = checkDependencies();\n const allInstalled = deps\n .filter((d) => d.required)\n .every((d) => d.installed);\n return { ready: allInstalled, dependencies: deps };\n })\n\n // Setup install\n .post(\"/setup/install\", async () => {\n const result = await installDependencies();\n return result;\n })\n\n // Gateway auth — configure\n .post(\n \"/gateway-auth\",\n async ({ body, set }) => {\n try {\n gatewayClient.configure({\n globalGatewayUrl:\n body.tenantApiUrl || body.globalGatewayUrl || \"\",\n workspaceGatewayUrl:\n body.workspacesApiUrl || body.workspaceGatewayUrl,\n clientId: body.appClientId || body.clientId || \"\",\n clientSecret: body.appClientSecret || body.clientSecret || \"\",\n });\n\n // Persist credentials\n if (body.appClientId || body.clientId) {\n db.setConfig(\n \"gateway-auth:clientId\",\n body.appClientId || body.clientId || \"\",\n );\n }\n if (body.appClientSecret || body.clientSecret) {\n db.setConfig(\n \"gateway-auth:clientSecret\",\n body.appClientSecret || body.clientSecret || \"\",\n );\n }\n if (body.workspacesApiUrl || body.workspaceGatewayUrl) {\n db.setConfig(\n \"gateway-auth:workspaceGatewayUrl\",\n body.workspacesApiUrl || body.workspaceGatewayUrl || \"\",\n );\n }\n if (body.tenantApiUrl || body.globalGatewayUrl) {\n db.setConfig(\n \"gateway-auth:globalGatewayUrl\",\n body.tenantApiUrl || body.globalGatewayUrl || \"\",\n );\n }\n if (body.workspaceId) {\n db.setConfig(\"gateway-auth:workspaceId\", body.workspaceId);\n }\n\n return { success: true, message: \"Gateway auth configured\" };\n } catch (err) {\n set.status = 500;\n return {\n error: \"Failed to configure gateway auth\",\n message: String(err),\n };\n }\n },\n {\n body: t.Object({\n workspacesApiUrl: t.Optional(t.String()),\n tenantApiUrl: t.Optional(t.String()),\n globalGatewayUrl: t.Optional(t.String()),\n workspaceGatewayUrl: t.Optional(t.String()),\n appClientId: t.Optional(t.String()),\n appClientSecret: t.Optional(t.String()),\n clientId: t.Optional(t.String()),\n clientSecret: t.Optional(t.String()),\n workspaceId: t.Optional(t.String()),\n }),\n },\n )\n\n // Gateway auth — get config (without secret)\n .get(\"/gateway-auth\", () => {\n const config = gatewayClient.getConfig();\n return { configured: gatewayClient.isConfigured(), config };\n })\n\n // Version\n .get(\"/version\", () => ({\n version,\n runtime: \"bun\",\n runtimeVersion: typeof Bun !== \"undefined\" ? Bun.version : \"unknown\",\n }))\n\n // System info\n .get(\"/system\", () => ({\n hostname: os.hostname(),\n platform: os.platform(),\n arch: os.arch(),\n release: os.release(),\n cpus: os.cpus().length,\n totalMemory: os.totalmem(),\n freeMemory: os.freemem(),\n uptime: os.uptime(),\n bunVersion: typeof Bun !== \"undefined\" ? Bun.version : undefined,\n agentVersion: version,\n homeDir: os.homedir(),\n cwd: process.cwd(),\n environment: process.env.NODE_ENV || \"production\",\n }))\n\n // Agent status\n .get(\"/status\", () => ({\n status: \"online\",\n timestamp: new Date().toISOString(),\n version,\n providers: serviceRegistry.listProviders(),\n services: serviceRegistry.listServices(),\n }))\n\n // Get active URL (tunnel URL or local URL)\n .get(\"/url\", async () => {\n const tunnelProvider =\n serviceRegistry.getProvider<TunnelProvider>(\"tunnel\");\n const tunnelUrl = tunnelProvider\n ? await tunnelProvider.getActiveTunnelUrl()\n : null;\n const localUrl = `http://localhost:${process.env.PORT || 3005}`;\n return {\n url: tunnelUrl || localUrl,\n tunnelUrl,\n localUrl,\n source: tunnelUrl ? \"tunnel\" : \"local\",\n };\n })\n );\n}\n",
|
|
6
6
|
"import { Command } from \"commander\";\nimport {\n success,\n info,\n fail,\n header,\n kv,\n blank,\n colors,\n icons,\n formatStatus,\n getAgentUrl,\n apiGet,\n} from \"../utils/index.js\";\nimport { ServiceManager } from \"../../services/service-manager.js\";\n\nconst DEFAULT_AGENT_URL = \"http://localhost:3005\";\n\ninterface HealthResponse {\n status: string;\n uptime?: number;\n version?: string;\n timestamp?: string;\n checks?: Record<string, { status: string; message?: string }>;\n}\n\ninterface HealthCheckResult {\n healthy: boolean;\n details: {\n status?: string;\n uptime?: number;\n checks?: Record<string, { status: string; message?: string }>;\n [key: string]: unknown;\n };\n}\n\nexport function register(program: Command): void {\n program\n .command(\"health\")\n .description(\"Check health of a VibeControls agent instance\")\n .option(\"-n, --name <name>\", \"Agent instance name\")\n .option(\"--agent-url <url>\", \"Agent URL\", DEFAULT_AGENT_URL)\n .action(async (opts) => {\n try {\n header(\"Agent Health\");\n blank();\n\n if (opts.name) {\n // Use service manager for named instance health check\n const serviceManager = new ServiceManager();\n\n const result = (await serviceManager.checkHealth(\n opts.name,\n )) as HealthCheckResult;\n\n if (!result.healthy) {\n fail(`Agent instance ${colors.bold(opts.name)} is not responding.`);\n return;\n }\n\n const details = result.details;\n kv(\"Instance\", opts.name);\n kv(\"Status\", formatStatus(details.status ?? \"healthy\"));\n\n if (details.uptime !== undefined) {\n kv(\"Uptime\", `${details.uptime}s`);\n }\n\n if (details.checks) {\n blank();\n info(`${icons.info} Health checks:`);\n for (const [name, check] of Object.entries(details.checks)) {\n const icon =\n check.status === \"healthy\" ? icons.success : icons.error;\n kv(` ${icon} ${name}`, formatStatus(check.status));\n }\n }\n } else {\n // Use HTTP endpoint for URL-based health check\n const agentUrl = getAgentUrl(opts);\n\n const data = await apiGet<HealthResponse>(agentUrl, \"/health\");\n\n kv(\"URL\", agentUrl);\n kv(\"Status\", formatStatus(data.status));\n\n if (data.version) {\n kv(\"Version\", data.version);\n }\n\n if (data.uptime !== undefined) {\n kv(\"Uptime\", `${data.uptime}s`);\n }\n\n if (data.timestamp) {\n kv(\"Timestamp\", data.timestamp);\n }\n\n if (data.checks) {\n blank();\n info(`${icons.info} Health checks:`);\n for (const [name, check] of Object.entries(data.checks)) {\n const icon =\n check.status === \"healthy\" ? icons.success : icons.error;\n kv(` ${icon} ${name}`, formatStatus(check.status));\n }\n }\n }\n\n blank();\n success(`${icons.success} Agent is healthy.`);\n } catch (err: any) {\n fail(`Health check failed: ${err.message}`);\n }\n });\n}\n",
|
|
7
7
|
"import { Command } from \"commander\";\nimport { platform, arch, release, hostname, cpus, totalmem } from \"node:os\";\nimport {\n info,\n fail,\n header,\n kv,\n blank,\n colors,\n icons,\n formatBytes,\n getAgentUrl,\n apiGet,\n} from \"../utils/index.js\";\n\nconst DEFAULT_AGENT_URL = \"http://localhost:3005\";\n\ninterface VersionResponse {\n version: string;\n build?: string;\n commit?: string;\n nodeVersion?: string;\n bunVersion?: string;\n}\n\nexport function register(program: Command): void {\n program\n .command(\"info\")\n .description(\"Show local and remote VibeControls agent information\")\n .option(\"--agent-url <url>\", \"Agent URL\", DEFAULT_AGENT_URL)\n .action(async (opts) => {\n try {\n header(\"VibeControls Agent Info\");\n blank();\n\n // Local system info\n info(`${icons.info} Local System`);\n kv(\"Hostname\", hostname());\n kv(\"Platform\", `${platform()} ${arch()}`);\n kv(\"OS Release\", release());\n kv(\"CPUs\", String(cpus().length));\n kv(\"Total Memory\", formatBytes(totalmem()));\n kv(\"Node.js\", process.version);\n\n if (process.versions.bun) {\n kv(\"Bun\", process.versions.bun);\n }\n\n blank();\n\n // Remote agent info\n const agentUrl = getAgentUrl(opts);\n\n try {\n const data = await apiGet<VersionResponse>(\n agentUrl,\n \"/api/agent/version\",\n );\n\n info(`${icons.info} Remote Agent`);\n kv(\"URL\", agentUrl);\n kv(\"Version\", colors.bold(data.version));\n\n if (data.build) {\n kv(\"Build\", data.build);\n }\n\n if (data.commit) {\n kv(\"Commit\", data.commit);\n }\n\n if (data.nodeVersion) {\n kv(\"Node.js (remote)\", data.nodeVersion);\n }\n\n if (data.bunVersion) {\n kv(\"Bun (remote)\", data.bunVersion);\n }\n } catch {\n info(`${icons.info} Remote Agent`);\n kv(\"URL\", agentUrl);\n kv(\"Status\", colors.dim(\"not reachable\"));\n }\n\n blank();\n } catch (err: any) {\n fail(`Failed to get info: ${err.message}`);\n }\n });\n}\n",
|
|
8
8
|
"import { Command } from \"commander\";\nimport {\n fail,\n header,\n kv,\n blank,\n colors,\n getAgentUrl,\n apiGet,\n} from \"../utils/index.js\";\n\nconst DEFAULT_AGENT_URL = \"http://localhost:3005\";\n\ninterface ApiKeyResponse {\n apiKey: string;\n}\n\nexport function register(program: Command): void {\n program\n .command(\"key\")\n .description(\"Get the API key for a running VibeControls agent\")\n .option(\"--agent-url <url>\", \"Agent URL\", DEFAULT_AGENT_URL)\n .action(async (opts) => {\n try {\n const agentUrl = getAgentUrl(opts);\n\n header(\"Agent API Key\");\n blank();\n\n const data = await apiGet<ApiKeyResponse>(\n agentUrl,\n \"/api/agent/api-key\",\n );\n\n kv(\"API Key\", colors.bold(data.apiKey));\n blank();\n } catch (err: any) {\n fail(`Failed to get API key: ${err.message}`);\n }\n });\n}\n",
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"/**\n * Agent Plugin — CLI Commands\n *\n * Consolidates the core agent CLI commands by re-exporting the existing\n * register functions from the individual command files. The plugin's\n * onCliSetup hook calls registerCommands() to wire them into Commander.\n *\n * Commands: health, info, key, system, status, url, gateway-auth\n */\n\nimport type { Command } from \"commander\";\nimport type { HostServices } from \"../../core/plugin-system.js\";\n\n// Re-export individual command registrations\nimport { register as registerHealth } from \"../../cli/commands/health.cmd.js\";\nimport { register as registerInfo } from \"../../cli/commands/info.cmd.js\";\nimport { register as registerKey } from \"../../cli/commands/key.cmd.js\";\nimport { register as registerSystem } from \"../../cli/commands/system.cmd.js\";\nimport { register as registerStatus } from \"../../cli/commands/status.cmd.js\";\nimport { register as registerUrl } from \"../../cli/commands/url.cmd.js\";\nimport { register as registerGatewayAuth } from \"../../cli/commands/gateway-auth.cmd.js\";\n\nexport function registerCommands(\n program: Command,\n _hostServices: HostServices,\n): void {\n registerHealth(program);\n registerInfo(program);\n registerKey(program);\n registerSystem(program);\n registerStatus(program);\n registerUrl(program);\n registerGatewayAuth(program);\n}\n",
|
|
14
14
|
"/**\n * Agent Plugin — Entry Point\n *\n * Core plugin providing agent identity, system information, dependency\n * setup, and gateway authentication. Always loaded as part of the\n * built-in plugin set.\n */\n\nimport type { VibePlugin } from \"../../core/plugin-system.js\";\nimport type { PluginRouteDeps } from \"../../core/types.js\";\nimport { createRoutes } from \"./routes.js\";\nimport { registerCommands } from \"./commands.js\";\n\nexport const vibePlugin: VibePlugin = {\n name: \"agent\",\n version: \"2.2.0\",\n description:\n \"Core agent identity, system info, setup, and gateway authentication\",\n tags: [\"backend\", \"cli\"],\n cliCommand: \"agent\",\n apiPrefix: \"/api/agent\",\n publicPaths: [\"/identity\", \"/api-key\", \"/tunnel\"],\n\n createRoutes: (deps: PluginRouteDeps) => createRoutes(deps),\n\n onCliSetup: async (program, hostServices) => {\n registerCommands(program, hostServices);\n },\n};\n"
|
|
15
15
|
],
|
|
16
|
-
"mappings": "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",
|
|
17
|
-
"debugId": "
|
|
16
|
+
"mappings": "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",
|
|
17
|
+
"debugId": "9AE6B13FD3CF2B6664756E2164756E21",
|
|
18
18
|
"names": []
|
|
19
19
|
}
|
|
@@ -22,7 +22,6 @@ import {
|
|
|
22
22
|
import"./index-g8dczzvv.js";
|
|
23
23
|
|
|
24
24
|
// src/plugins/notification/routes.ts
|
|
25
|
-
import crypto from "crypto";
|
|
26
25
|
function createRoutes(deps) {
|
|
27
26
|
const { db } = deps;
|
|
28
27
|
return new Elysia().get("/", ({ query }) => {
|
|
@@ -69,7 +68,7 @@ function createRoutes(deps) {
|
|
|
69
68
|
}).post("/", ({ body, set }) => {
|
|
70
69
|
try {
|
|
71
70
|
const notification = db.createNotification({
|
|
72
|
-
id: crypto.randomUUID(),
|
|
71
|
+
id: globalThis.crypto.randomUUID(),
|
|
73
72
|
sessionName: body.sessionName,
|
|
74
73
|
projectId: body.projectId,
|
|
75
74
|
type: body.type || "info",
|
|
@@ -144,7 +143,7 @@ function createRoutes(deps) {
|
|
|
144
143
|
|
|
145
144
|
Metadata: ${JSON.stringify(body.metadata, null, 2)}` : body.message;
|
|
146
145
|
const notification = db.createNotification({
|
|
147
|
-
id: crypto.randomUUID(),
|
|
146
|
+
id: globalThis.crypto.randomUUID(),
|
|
148
147
|
sessionName: body.projectName,
|
|
149
148
|
projectId: params.sessionId,
|
|
150
149
|
type: mappedType,
|
|
@@ -298,5 +297,5 @@ export {
|
|
|
298
297
|
vibePlugin
|
|
299
298
|
};
|
|
300
299
|
|
|
301
|
-
//# debugId=
|
|
302
|
-
//# sourceMappingURL=index-
|
|
300
|
+
//# debugId=AE9C4A672990742664756E2164756E21
|
|
301
|
+
//# sourceMappingURL=index-wmvkjcjj.js.map
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/plugins/notification/routes.ts", "../src/cli/commands/notify.cmd.ts", "../src/plugins/notification/commands.ts", "../src/plugins/notification/index.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"/**\n * Notification Plugin — Routes\n *\n * Notification management — CRUD, read/unread status, webhook endpoint.\n *\n * Endpoints (mounted by plugin system at /api/notifications):\n * GET / — List notifications (with filters)\n * GET /unread — Get unread notifications\n * GET /global — Get global notifications\n * GET /project/:projectId — Get notifications by project\n * PUT /read-all — Mark all as read\n * DELETE /clear/old — Clear old notifications\n * GET /:id — Get notification by ID\n * POST / — Create notification\n * PUT /:id/read — Mark as read\n * PUT /:id/unread — Mark as unread\n * DELETE /:id — Delete notification\n * POST /webhook/:sessionId — Webhook for external notifications\n */\n\nimport { Elysia, t } from \"elysia\";\n\nimport type { AgentDatabase } from \"../../db/database.js\";\nimport type { PluginRouteDeps } from \"../../core/types.js\";\n\n// ── Routes ──────────────────────────────────────────────────────────────\n\nexport function createRoutes(deps: PluginRouteDeps) {\n const { db } = deps;\n\n return (\n new Elysia()\n // List notifications (with optional filters)\n .get(\"/\", ({ query }) => {\n const q = query as Record<string, string>;\n\n if (q.status === \"unread\") {\n return { notifications: db.getUnreadNotifications() };\n }\n if (q.projectId !== undefined) {\n return { notifications: db.getNotificationsByProject(q.projectId) };\n }\n return { notifications: db.getAllNotifications() };\n })\n\n // Get unread notifications\n .get(\"/unread\", () => {\n const notifications = db.getUnreadNotifications();\n return { notifications, count: notifications.length };\n })\n\n // Get global notifications (not tied to a project)\n .get(\"/global\", () => {\n const notifications = db.getGlobalNotifications();\n return { notifications, count: notifications.length };\n })\n\n // Get notifications by project\n .get(\"/project/:projectId\", ({ params }) => {\n const notifications = db.getNotificationsByProject(params.projectId);\n return { notifications };\n })\n\n // Mark all as read — defined before /:id to avoid route conflict\n .put(\"/read-all\", ({ set }) => {\n try {\n const count = db.markAllNotificationsRead();\n return { success: true, markedCount: count };\n } catch (err) {\n set.status = 500;\n return {\n error: \"Failed to mark all notifications as read\",\n details: String(err),\n };\n }\n })\n\n // Clear old notifications — defined before /:id to avoid route conflict\n .delete(\"/clear/old\", ({ query }) => {\n const q = query as Record<string, string>;\n const days = q.days ? parseInt(q.days, 10) : 30;\n const count = db.clearOldNotifications(days);\n return { success: true, deletedCount: count };\n })\n\n // Get notification by ID\n .get(\"/:id\", ({ params, set }) => {\n const notification = db.getNotification(params.id);\n if (!notification) {\n set.status = 404;\n return { error: \"Notification not found\" };\n }\n return { notification };\n })\n\n // Create notification\n .post(\n \"/\",\n ({ body, set }) => {\n try {\n const notification = db.createNotification({\n id: globalThis.crypto.randomUUID(),\n sessionName: body.sessionName,\n projectId: body.projectId,\n type: body.type || \"info\",\n title: body.title,\n message: body.message,\n status: \"unread\",\n });\n return { notification };\n } catch (err) {\n set.status = 500;\n return {\n error: \"Failed to create notification\",\n details: String(err),\n };\n }\n },\n {\n body: t.Object({\n sessionName: t.Optional(t.String()),\n projectId: t.Optional(t.String()),\n type: t.Optional(\n t.Union([\n t.Literal(\"info\"),\n t.Literal(\"success\"),\n t.Literal(\"warning\"),\n t.Literal(\"error\"),\n ]),\n ),\n title: t.String(),\n message: t.String(),\n }),\n },\n )\n\n // Mark as read\n .put(\"/:id/read\", ({ params, set }) => {\n const notification = db.getNotification(params.id);\n if (!notification) {\n set.status = 404;\n return { error: \"Notification not found\" };\n }\n db.updateNotificationStatus(params.id, \"read\");\n return { success: true };\n })\n\n // Mark as unread\n .put(\"/:id/unread\", ({ params, set }) => {\n const notification = db.getNotification(params.id);\n if (!notification) {\n set.status = 404;\n return { error: \"Notification not found\" };\n }\n db.updateNotificationStatus(params.id, \"unread\");\n return { success: true };\n })\n\n // Delete notification\n .delete(\"/:id\", ({ params, set }) => {\n const notification = db.getNotification(params.id);\n if (!notification) {\n set.status = 404;\n return { error: \"Notification not found\" };\n }\n\n try {\n db.deleteNotification(params.id);\n return { success: true };\n } catch (err) {\n set.status = 500;\n return {\n error: \"Failed to delete notification\",\n details: String(err),\n };\n }\n })\n\n // Webhook endpoint for external notifications\n .post(\n \"/webhook/:sessionId\",\n ({ params, body, set }) => {\n try {\n // Map type variants to valid DB types\n const typeMap: Record<\n string,\n \"info\" | \"success\" | \"warning\" | \"error\"\n > = {\n task_completed: \"success\",\n info: \"info\",\n success: \"success\",\n warning: \"warning\",\n error: \"error\",\n };\n const mappedType = typeMap[body.type || \"info\"] || \"info\";\n\n const message = body.metadata\n ? `${body.message}\\n\\nMetadata: ${JSON.stringify(body.metadata, null, 2)}`\n : body.message;\n\n const notification = db.createNotification({\n id: globalThis.crypto.randomUUID(),\n sessionName: body.projectName,\n projectId: params.sessionId,\n type: mappedType,\n title: body.title,\n message,\n status: \"unread\",\n });\n\n return {\n notification,\n webhook: true,\n originalType: body.type || \"info\",\n mappedType,\n };\n } catch (err) {\n set.status = 500;\n return {\n error: \"Failed to create webhook notification\",\n details: String(err),\n };\n }\n },\n {\n body: t.Object({\n type: t.Optional(t.String()),\n title: t.String(),\n message: t.String(),\n metadata: t.Optional(t.Record(t.String(), t.Unknown())),\n projectName: t.Optional(t.String()),\n }),\n },\n )\n );\n}\n",
|
|
6
|
+
"import { Command } from \"commander\";\nimport {\n getAgentUrl,\n apiGet,\n apiPost,\n apiPut,\n apiDelete,\n fail,\n success,\n info,\n header,\n kv,\n blank,\n formatNotificationType,\n timeAgo,\n shortId,\n colors,\n} from \"../utils/index.js\";\n\nconst DEFAULT_AGENT_URL = \"http://localhost:3005\";\n\nexport function register(program: Command): void {\n const cmd = program.command(\"notify\").description(\"Manage notifications\");\n\n // notify list\n cmd\n .command(\"list\")\n .description(\"List notifications\")\n .option(\"--unread\", \"Show only unread notifications\")\n .option(\"--project <id>\", \"Filter by project ID\")\n .option(\"--agent-url <url>\", \"Agent URL\", DEFAULT_AGENT_URL)\n .action(async (options) => {\n try {\n const url = getAgentUrl(options);\n const params = new URLSearchParams();\n if (options.unread) params.set(\"unread\", \"true\");\n if (options.project) params.set(\"project\", options.project);\n const query = params.toString();\n const endpoint = query\n ? `/api/notifications?${query}`\n : \"/api/notifications\";\n const data = await apiGet<{ notifications: any[] }>(url, endpoint);\n const notifications = data.notifications || [];\n if (!notifications || notifications.length === 0) {\n info(\"No notifications found.\");\n return;\n }\n header(\"Notifications\");\n blank();\n for (const n of notifications) {\n const icon = formatNotificationType(n.type);\n const time = n.createdAt ? colors.dim(timeAgo(n.createdAt)) : \"\";\n const title = colors.bold(n.title || \"Untitled\");\n const id = colors.dim(`[${shortId(n.id)}]`);\n console.log(` ${icon} ${title} ${id} ${time}`);\n if (n.message) {\n console.log(` ${n.message}`);\n }\n blank();\n }\n } catch (err: any) {\n fail(err.message);\n }\n });\n\n // notify create\n cmd\n .command(\"create\")\n .description(\"Create a notification\")\n .requiredOption(\"--title <title>\", \"Notification title\")\n .requiredOption(\"--message <msg>\", \"Notification message\")\n .option(\"--type <type>\", \"Notification type\", \"info\")\n .option(\"--project <id>\", \"Project ID\")\n .option(\"--session <name>\", \"Session name\")\n .option(\"--agent-url <url>\", \"Agent URL\", DEFAULT_AGENT_URL)\n .action(async (options) => {\n try {\n const url = getAgentUrl(options);\n const body: Record<string, any> = {\n title: options.title,\n message: options.message,\n type: options.type,\n };\n if (options.project) body.project = options.project;\n if (options.session) body.session = options.session;\n const result = await apiPost<any>(url, \"/api/notifications\", body);\n success(`Notification created: ${shortId(result?.id)}`);\n } catch (err: any) {\n fail(err.message);\n }\n });\n\n // notify delete\n cmd\n .command(\"delete\")\n .description(\"Delete a notification\")\n .requiredOption(\"-i, --id <id>\", \"Notification ID\")\n .option(\"--agent-url <url>\", \"Agent URL\", DEFAULT_AGENT_URL)\n .action(async (options) => {\n try {\n const url = getAgentUrl(options);\n await apiDelete<any>(url, `/api/notifications/${options.id}`);\n success(`Notification ${shortId(options.id)} deleted.`);\n } catch (err: any) {\n fail(err.message);\n }\n });\n\n // notify read-all\n cmd\n .command(\"read-all\")\n .description(\"Mark all notifications as read\")\n .option(\"--agent-url <url>\", \"Agent URL\", DEFAULT_AGENT_URL)\n .action(async (options) => {\n try {\n const url = getAgentUrl(options);\n await apiPut<any>(url, \"/api/notifications/read-all\", {});\n success(\"All notifications marked as read.\");\n } catch (err: any) {\n fail(err.message);\n }\n });\n\n // notify clear-old\n cmd\n .command(\"clear-old\")\n .description(\"Clear old notifications\")\n .option(\"--agent-url <url>\", \"Agent URL\", DEFAULT_AGENT_URL)\n .action(async (options) => {\n try {\n const url = getAgentUrl(options);\n await apiDelete<any>(url, \"/api/notifications/clear/old\");\n success(\"Old notifications cleared.\");\n } catch (err: any) {\n fail(err.message);\n }\n });\n\n // notify webhook\n cmd\n .command(\"webhook\")\n .description(\"Send a webhook notification to a session\")\n .requiredOption(\"--session <sessionId>\", \"Target session ID\")\n .option(\"--title <title>\", \"Notification title\")\n .option(\"--message <msg>\", \"Notification message\")\n .option(\"--type <type>\", \"Notification type\", \"info\")\n .option(\"--agent-url <url>\", \"Agent URL\", DEFAULT_AGENT_URL)\n .action(async (options) => {\n try {\n const url = getAgentUrl(options);\n const body: Record<string, any> = {};\n if (options.title) body.title = options.title;\n if (options.message) body.message = options.message;\n if (options.type) body.type = options.type;\n await apiPost<any>(\n url,\n `/api/notifications/webhook/${options.session}`,\n body,\n );\n success(\n `Webhook notification sent to session ${shortId(options.session)}.`,\n );\n } catch (err: any) {\n fail(err.message);\n }\n });\n}\n",
|
|
7
|
+
"import type { Command } from \"commander\";\nimport type { HostServices } from \"../../core/plugin-system.js\";\nimport { register as registerNotify } from \"../../cli/commands/notify.cmd.js\";\n\nexport function registerCommands(\n program: Command,\n _hostServices: HostServices,\n): void {\n registerNotify(program);\n}\n",
|
|
8
|
+
"import type { VibePlugin } from \"../../core/plugin-system.js\";\nimport type { PluginRouteDeps } from \"../../core/types.js\";\nimport { createRoutes } from \"./routes.js\";\nimport { registerCommands } from \"./commands.js\";\n\nexport const vibePlugin: VibePlugin = {\n name: \"notification\",\n version: \"2.2.0\",\n description: \"Notification management — CRUD, read/unread status, webhooks\",\n tags: [\"backend\", \"cli\"],\n cliCommand: \"notify\",\n apiPrefix: \"/api/notifications\",\n createRoutes: (deps: PluginRouteDeps) => createRoutes(deps),\n onCliSetup: async (program, hostServices) => {\n registerCommands(program, hostServices);\n },\n};\n"
|
|
9
|
+
],
|
|
10
|
+
"mappings": "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",
|
|
11
|
+
"debugId": "AE9C4A672990742664756E2164756E21",
|
|
12
|
+
"names": []
|
|
13
|
+
}
|
|
@@ -160,7 +160,7 @@ function register(program) {
|
|
|
160
160
|
} catch {
|
|
161
161
|
warn("Agent not reachable. Attempting local plugin registry...");
|
|
162
162
|
try {
|
|
163
|
-
const { PluginManager } = await import("./plugin-system-
|
|
163
|
+
const { PluginManager } = await import("./plugin-system-bc4rvt1c.js");
|
|
164
164
|
const pm = new PluginManager;
|
|
165
165
|
plugins = pm.getPluginDetails() || [];
|
|
166
166
|
} catch {
|
|
@@ -196,7 +196,7 @@ function register(program) {
|
|
|
196
196
|
} catch {
|
|
197
197
|
warn("Agent not reachable. Attempting local install...");
|
|
198
198
|
try {
|
|
199
|
-
const { PluginManager } = await import("./plugin-system-
|
|
199
|
+
const { PluginManager } = await import("./plugin-system-bc4rvt1c.js");
|
|
200
200
|
const pm = new PluginManager;
|
|
201
201
|
await pm.install(packageName);
|
|
202
202
|
success(`Plugin "${packageName}" installed locally.`);
|
|
@@ -219,7 +219,7 @@ function register(program) {
|
|
|
219
219
|
} catch {
|
|
220
220
|
warn("Agent not reachable. Attempting local removal...");
|
|
221
221
|
try {
|
|
222
|
-
const { PluginManager } = await import("./plugin-system-
|
|
222
|
+
const { PluginManager } = await import("./plugin-system-bc4rvt1c.js");
|
|
223
223
|
const pm = new PluginManager;
|
|
224
224
|
await pm.remove(packageName);
|
|
225
225
|
success(`Plugin "${packageName}" removed locally.`);
|
|
@@ -284,4 +284,4 @@ export {
|
|
|
284
284
|
};
|
|
285
285
|
|
|
286
286
|
//# debugId=6D591618982CB48A64756E2164756E21
|
|
287
|
-
//# sourceMappingURL=index-
|
|
287
|
+
//# sourceMappingURL=index-x82yjxw7.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-
|
|
13
|
-
import"./plugin-system-
|
|
12
|
+
} from "./app-8dgv7s3y.js";
|
|
13
|
+
import"./plugin-system-bc4rvt1c.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.
|
|
6
|
+
var version = "2.3.0";
|
|
7
7
|
var main = "./dist/index.js";
|
|
8
8
|
var type = "module";
|
|
9
9
|
var bin = {
|
|
@@ -47,6 +47,8 @@ var author = {
|
|
|
47
47
|
var license = "SEE LICENSE IN LICENSE";
|
|
48
48
|
var description = "VibeControls Agent CLI - Remote development environment management with terminal multiplexing, tunnels, and extensible plugins. Powered by Bun + Elysia.";
|
|
49
49
|
var dependencies = {
|
|
50
|
+
"@burdenoff/vibe-plugin-ai": "2.0.0",
|
|
51
|
+
"@burdenoff/vibe-plugin-ssh": "2.0.0",
|
|
50
52
|
"@elysiajs/cors": "^1.3.1",
|
|
51
53
|
commander: "^14.0.3",
|
|
52
54
|
elysia: "^1.3.2"
|
|
@@ -132,5 +134,5 @@ export {
|
|
|
132
134
|
author
|
|
133
135
|
};
|
|
134
136
|
|
|
135
|
-
//# debugId=
|
|
136
|
-
//# sourceMappingURL=package-
|
|
137
|
+
//# debugId=5FB86CA3CE7847C964756E2164756E21
|
|
138
|
+
//# sourceMappingURL=package-04nkt49b.js.map
|
|
@@ -11,7 +11,6 @@ import {
|
|
|
11
11
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
|
|
12
12
|
import { join } from "path";
|
|
13
13
|
import os from "os";
|
|
14
|
-
import { execSync } from "child_process";
|
|
15
14
|
var CORE_PLUGIN_NAMES = [
|
|
16
15
|
"agent",
|
|
17
16
|
"session",
|
|
@@ -65,17 +64,17 @@ class PluginManager {
|
|
|
65
64
|
}
|
|
66
65
|
async loadCorePlugins() {
|
|
67
66
|
const coreModules = await Promise.allSettled([
|
|
68
|
-
import("./index-
|
|
67
|
+
import("./index-wjsms9jw.js"),
|
|
69
68
|
import("./index-rdm6e3rr.js"),
|
|
70
69
|
import("./index-k9hb0b93.js"),
|
|
71
|
-
import("./index-
|
|
70
|
+
import("./index-3rjnbp97.js"),
|
|
72
71
|
import("./index-c7zy3n33.js"),
|
|
73
|
-
import("./index-
|
|
72
|
+
import("./index-fm6gqenc.js"),
|
|
74
73
|
import("./index-npmvh1x9.js"),
|
|
75
|
-
import("./index-
|
|
76
|
-
import("./index-
|
|
74
|
+
import("./index-6vry08rz.js"),
|
|
75
|
+
import("./index-wmvkjcjj.js"),
|
|
77
76
|
import("./index-30p492yv.js"),
|
|
78
|
-
import("./index-
|
|
77
|
+
import("./index-x82yjxw7.js"),
|
|
79
78
|
import("./index-hefqxwht.js"),
|
|
80
79
|
import("./index-a9g7hbj9.js")
|
|
81
80
|
]);
|
|
@@ -100,10 +99,14 @@ class PluginManager {
|
|
|
100
99
|
async install(packageName) {
|
|
101
100
|
logger.info("plugin-manager", `Installing ${packageName}...`);
|
|
102
101
|
try {
|
|
103
|
-
|
|
102
|
+
const result = Bun.spawnSync(["npm", "install", "-g", packageName], {
|
|
104
103
|
timeout: 120000,
|
|
105
|
-
|
|
104
|
+
stdout: "pipe",
|
|
105
|
+
stderr: "pipe"
|
|
106
106
|
});
|
|
107
|
+
if (result.exitCode !== 0) {
|
|
108
|
+
throw new Error(result.stderr.toString().trim());
|
|
109
|
+
}
|
|
107
110
|
} catch (err) {
|
|
108
111
|
const message = err instanceof Error ? err.message : String(err);
|
|
109
112
|
throw new Error(`Failed to install ${packageName}: ${message}`, {
|
|
@@ -151,9 +154,10 @@ class PluginManager {
|
|
|
151
154
|
this.loaded.delete(packageName);
|
|
152
155
|
}
|
|
153
156
|
try {
|
|
154
|
-
|
|
157
|
+
Bun.spawnSync(["npm", "uninstall", "-g", packageName], {
|
|
155
158
|
timeout: 60000,
|
|
156
|
-
|
|
159
|
+
stdout: "pipe",
|
|
160
|
+
stderr: "pipe"
|
|
157
161
|
});
|
|
158
162
|
} catch {}
|
|
159
163
|
this.registry = this.registry.filter((e) => e.packageName !== packageName);
|
|
@@ -172,7 +176,17 @@ class PluginManager {
|
|
|
172
176
|
}
|
|
173
177
|
}
|
|
174
178
|
async importPlugin(packageName) {
|
|
175
|
-
|
|
179
|
+
let mod;
|
|
180
|
+
try {
|
|
181
|
+
mod = await import(packageName);
|
|
182
|
+
} catch {
|
|
183
|
+
const globalRoot = this.getNpmGlobalRoot();
|
|
184
|
+
if (!globalRoot) {
|
|
185
|
+
throw new Error(`Cannot find module '${packageName}': bare import failed and npm global root is unavailable`);
|
|
186
|
+
}
|
|
187
|
+
const absolutePath = join(globalRoot, packageName);
|
|
188
|
+
mod = await import(absolutePath);
|
|
189
|
+
}
|
|
176
190
|
const plugin = this.extractPlugin(mod);
|
|
177
191
|
if (!plugin) {
|
|
178
192
|
throw new Error(`${packageName} does not export a valid VibePlugin`);
|
|
@@ -180,6 +194,24 @@ class PluginManager {
|
|
|
180
194
|
this.loaded.set(packageName, plugin);
|
|
181
195
|
return plugin;
|
|
182
196
|
}
|
|
197
|
+
npmGlobalRoot;
|
|
198
|
+
getNpmGlobalRoot() {
|
|
199
|
+
if (this.npmGlobalRoot !== undefined)
|
|
200
|
+
return this.npmGlobalRoot;
|
|
201
|
+
try {
|
|
202
|
+
const result = Bun.spawnSync(["npm", "root", "-g"], {
|
|
203
|
+
stdout: "pipe",
|
|
204
|
+
stderr: "pipe",
|
|
205
|
+
timeout: 1e4
|
|
206
|
+
});
|
|
207
|
+
if (result.exitCode === 0) {
|
|
208
|
+
this.npmGlobalRoot = result.stdout.toString().trim();
|
|
209
|
+
return this.npmGlobalRoot;
|
|
210
|
+
}
|
|
211
|
+
} catch {}
|
|
212
|
+
this.npmGlobalRoot = null;
|
|
213
|
+
return null;
|
|
214
|
+
}
|
|
183
215
|
extractPlugin(mod) {
|
|
184
216
|
if (this.isVibePlugin(mod.vibePlugin)) {
|
|
185
217
|
return mod.vibePlugin;
|
|
@@ -471,5 +503,5 @@ class PluginManager {
|
|
|
471
503
|
|
|
472
504
|
export { PluginManager };
|
|
473
505
|
|
|
474
|
-
//# debugId=
|
|
475
|
-
//# sourceMappingURL=plugin-system-
|
|
506
|
+
//# debugId=8DD2577C7DC4CE6B64756E2164756E21
|
|
507
|
+
//# sourceMappingURL=plugin-system-bc4rvt1c.js.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/core/plugin-system.ts"],
|
|
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"
|
|
6
|
+
],
|
|
7
|
+
"mappings": ";;;;;;;;;;AAwBA;AACA;AACA;AAsBA,IAAM,oBAAoB;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAGA,IAAM,mBAAmB,KAAK,GAAG,QAAQ,GAAG,eAAe;AAC3D,IAAM,gBAAgB,KAAK,kBAAkB,cAAc;AAG3D,IAAM,0BAA0B;AAAA;AAsGzB,MAAM,cAAc;AAAA,EAEjB,WAA0B,CAAC;AAAA,EAG3B,SAAS,IAAI;AAAA,EAGb,cAAc,IAAI;AAAA,EAGlB;AAAA,EAER,WAAW,CAAC,IAAoB;AAAA,IAC9B,KAAK,KAAK;AAAA,IACV,KAAK,UAAU;AAAA,IACf,KAAK,aAAa;AAAA;AAAA,EAQZ,SAAS,GAAS;AAAA,IACxB,IAAI,CAAC,WAAW,gBAAgB,GAAG;AAAA,MACjC,UAAU,kBAAkB,EAAE,WAAW,KAAK,CAAC;AAAA,IACjD;AAAA;AAAA,EAMM,YAAY,GAAS;AAAA,IAC3B,IAAI;AAAA,MACF,IAAI,WAAW,aAAa,GAAG;AAAA,QAC7B,MAAM,MAAM,aAAa,eAAe,OAAO;AAAA,QAC/C,MAAM,SAAkB,KAAK,MAAM,GAAG;AAAA,QACtC,IAAI,MAAM,QAAQ,MAAM,GAAG;AAAA,UACzB,KAAK,WAAW;AAAA,QAClB;AAAA,MACF;AAAA,MACA,MAAM;AAAA,MACN,KAAK,WAAW,CAAC;AAAA;AAAA;AAAA,EAOb,YAAY,GAAS;AAAA,IAC3B,KAAK,UAAU;AAAA,IACf,cACE,eACA,KAAK,UAAU,KAAK,UAAU,MAAM,CAAC,GACrC,OACF;AAAA;AAAA,OAYI,gBAAe,GAAkB;AAAA,IACrC,MAAM,cAAc,MAAM,QAAQ,WAAW;AAAA,MACpC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACT,CAAC;AAAA,IAED,SAAS,IAAI,EAAG,IAAI,YAAY,QAAQ,KAAK;AAAA,MAC3C,MAAM,SAAS,YAAY;AAAA,MAC3B,MAAM,eAAe,kBAAkB;AAAA,MAEvC,IAAI,OAAO,WAAW,aAAa;AAAA,QACjC,MAAM,MAAM,OAAO;AAAA,QACnB,MAAM,SAAS,KAAK,cAAc,GAAG;AAAA,QAErC,IAAI,QAAQ,MAAM;AAAA,UAChB,KAAK,YAAY,IAAI,OAAO,MAAM,MAAM;AAAA,UACxC,OAAO,KACL,kBACA,uBAAuB,OAAO,SAAS,OAAO,SAChD;AAAA,QACF,EAAO;AAAA,UACL,OAAO,KACL,kBACA,gBAAgB,iDAClB;AAAA;AAAA,MAEJ,EAAO;AAAA,QACL,OAAO,KACL,kBACA,+BAA+B,kBAAkB,OAAO,QAC1D;AAAA;AAAA,IAEJ;AAAA,IAEA,OAAO,KACL,kBACA,wBAAwB,KAAK,YAAY,QAAQ,kBAAkB,QACrE;AAAA;AAAA,OASI,QAAO,CAAC,aAA2C;AAAA,IACvD,OAAO,KAAK,kBAAkB,cAAc,gBAAgB;AAAA,IAG5D,IAAI;AAAA,MACF,MAAM,SAAS,IAAI,UAAU,CAAC,OAAO,WAAW,MAAM,WAAW,GAAG;AAAA,QAClE,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,QAAQ;AAAA,MACV,CAAC;AAAA,MACD,IAAI,OAAO,aAAa,GAAG;AAAA,QACzB,MAAM,IAAI,MAAM,OAAO,OAAO,SAAS,EAAE,KAAK,CAAC;AAAA,MACjD;AAAA,MACA,OAAO,KAAK;AAAA,MACZ,MAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAAA,MAC/D,MAAM,IAAI,MAAM,qBAAqB,gBAAgB,WAAW;AAAA,QAC9D,OAAO;AAAA,MACT,CAAC;AAAA;AAAA,IAIH,MAAM,SAAS,MAAM,KAAK,aAAa,WAAW;AAAA,IAGlD,IAAI,KAAK,YAAY,IAAI,OAAO,IAAI,GAAG;AAAA,MACrC,OAAO,KACL,kBACA,oBAAoB,uCAAuC,OAAO,OACpE;AAAA,IACF;AAAA,IAGA,MAAM,QAAqB;AAAA,MACzB;AAAA,MACA,SAAS,OAAO;AAAA,MAChB,YAAY,OAAO;AAAA,MACnB,aAAa,IAAI,KAAK,EAAE,YAAY;AAAA,IACtC;AAAA,IAEA,KAAK,WAAW,KAAK,SAAS,OAAO,CAAC,MAAM,EAAE,gBAAgB,WAAW;AAAA,IACzE,KAAK,SAAS,KAAK,KAAK;AAAA,IACxB,KAAK,aAAa;AAAA,IAElB,OAAO,KACL,kBACA,aAAa,eAAe,OAAO,YAAY,OAAO,OACxD;AAAA,IACA,OAAO;AAAA;AAAA,OAOH,eAAc,CAClB,aACA,KACA,cACsB;AAAA,IACtB,MAAM,QAAQ,MAAM,KAAK,QAAQ,WAAW;AAAA,IAG5C,MAAM,SAAS,KAAK,OAAO,IAAI,MAAM,WAAW;AAAA,IAChD,IAAI,QAAQ;AAAA,MACV,KAAK,wBAAwB,QAAQ,YAAY;AAAA,MAEjD,IAAI,OAAO,eAAe;AAAA,QACxB,MAAM,OAAO,cAAc,KAAK,YAAY;AAAA,MAC9C;AAAA,IACF;AAAA,IAEA,OAAO;AAAA;AAAA,OASH,OAAM,CAAC,aAAoC;AAAA,IAC/C,OAAO,KAAK,kBAAkB,YAAY,gBAAgB;AAAA,IAG1D,MAAM,SAAS,KAAK,OAAO,IAAI,WAAW;AAAA,IAC1C,IAAI,QAAQ,cAAc;AAAA,MACxB,IAAI;AAAA,QACF,MAAM,OAAO,aAAa;AAAA,QAC1B,OAAO,KAAK;AAAA,QACZ,OAAO,KAAK,kBAAkB,kBAAkB,gBAAgB,KAAK;AAAA;AAAA,IAEzE;AAAA,IAGA,IAAI,QAAQ;AAAA,MACV,KAAK,OAAO,OAAO,WAAW;AAAA,IAChC;AAAA,IAGA,IAAI;AAAA,MACF,IAAI,UAAU,CAAC,OAAO,aAAa,MAAM,WAAW,GAAG;AAAA,QACrD,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,QAAQ;AAAA,MACV,CAAC;AAAA,MACD,MAAM;AAAA,IAKR,KAAK,WAAW,KAAK,SAAS,OAAO,CAAC,MAAM,EAAE,gBAAgB,WAAW;AAAA,IACzE,KAAK,aAAa;AAAA,IAElB,OAAO,KAAK,kBAAkB,WAAW,aAAa;AAAA;AAAA,OASlD,QAAO,GAAkB;AAAA,IAC7B,KAAK,OAAO,MAAM;AAAA,IAElB,WAAW,SAAS,KAAK,UAAU;AAAA,MACjC,IAAI;AAAA,QACF,MAAM,KAAK,aAAa,MAAM,WAAW;AAAA,QACzC,OAAO,KACL,kBACA,UAAU,MAAM,gBAAgB,MAAM,aACxC;AAAA,QACA,OAAO,KAAK;AAAA,QACZ,OAAO,KACL,kBACA,kBAAkB,MAAM,gBAAgB,KAC1C;AAAA;AAAA,IAEJ;AAAA;AAAA,OAWY,aAAY,CAAC,aAA0C;AAAA,IACnE,IAAI;AAAA,IAEJ,IAAI;AAAA,MAEF,MAAO,MAAa;AAAA,MACpB,MAAM;AAAA,MAEN,MAAM,aAAa,KAAK,iBAAiB;AAAA,MACzC,IAAI,CAAC,YAAY;AAAA,QACf,MAAM,IAAI,MACR,uBAAuB,qEACzB;AAAA,MACF;AAAA,MACA,MAAM,eAAe,KAAK,YAAY,WAAW;AAAA,MACjD,MAAO,MAAa;AAAA;AAAA,IAGtB,MAAM,SAAS,KAAK,cAAc,GAAG;AAAA,IAErC,IAAI,CAAC,QAAQ;AAAA,MACX,MAAM,IAAI,MAAM,GAAG,gDAAgD;AAAA,IACrE;AAAA,IAEA,KAAK,OAAO,IAAI,aAAa,MAAM;AAAA,IACnC,OAAO;AAAA;AAAA,EAOD;AAAA,EACA,gBAAgB,GAAkB;AAAA,IACxC,IAAI,KAAK,kBAAkB;AAAA,MAAW,OAAO,KAAK;AAAA,IAElD,IAAI;AAAA,MACF,MAAM,SAAS,IAAI,UAAU,CAAC,OAAO,QAAQ,IAAI,GAAG;AAAA,QAClD,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,SAAS;AAAA,MACX,CAAC;AAAA,MACD,IAAI,OAAO,aAAa,GAAG;AAAA,QACzB,KAAK,gBAAgB,OAAO,OAAO,SAAS,EAAE,KAAK;AAAA,QACnD,OAAO,KAAK;AAAA,MACd;AAAA,MACA,MAAM;AAAA,IAIR,KAAK,gBAAgB;AAAA,IACrB,OAAO;AAAA;AAAA,EAOD,aAAa,CAAC,KAAsD;AAAA,IAE1E,IAAI,KAAK,aAAa,IAAI,UAAU,GAAG;AAAA,MACrC,OAAO,IAAI;AAAA,IACb;AAAA,IAGA,MAAM,gBAAgB,IAAI;AAAA,IAC1B,IAAI,iBAAiB,KAAK,aAAa,cAAc,UAAU,GAAG;AAAA,MAChE,OAAO,cAAc;AAAA,IACvB;AAAA,IAGA,IAAI,KAAK,aAAa,aAAa,GAAG;AAAA,MACpC,OAAO;AAAA,IACT;AAAA,IAEA;AAAA;AAAA,EAMM,YAAY,CAAC,OAAqC;AAAA,IACxD,IAAI,CAAC,SAAS,OAAO,UAAU;AAAA,MAAU,OAAO;AAAA,IAChD,MAAM,YAAY;AAAA,IAClB,OACE,OAAO,UAAU,SAAS,YAC1B,OAAO,UAAU,YAAY;AAAA;AAAA,EAUzB,uBAAuB,CAC7B,QACA,cACM;AAAA,IACN,IAAI,OAAO,WAAW,QAAQ;AAAA,MAC5B,aAAa,gBAAgB,iBAC3B,UACA,OAAO,UAAU,QACjB,OAAO,IACT;AAAA,IACF;AAAA,IACA,IAAI,OAAO,WAAW,SAAS;AAAA,MAC7B,aAAa,gBAAgB,iBAC3B,WACA,OAAO,UAAU,SACjB,OAAO,IACT;AAAA,IACF;AAAA;AAAA,OAQI,iBAAgB,CACpB,SACA,cACe;AAAA,IACf,WAAW,UAAU,KAAK,cAAc,GAAG;AAAA,MACzC,IAAI,OAAO,YAAY;AAAA,QACrB,IAAI;AAAA,UACF,MAAM,OAAO,WAAW,SAAS,YAAY;AAAA,UAC7C,OAAO,KAAK;AAAA,UACZ,OAAO,KACL,kBACA,yBAAyB,OAAO,SAAS,KAC3C;AAAA;AAAA,MAEJ;AAAA,IACF;AAAA;AAAA,OAOI,oBAAmB,CACvB,KACA,cACe;AAAA,IACf,MAAM,SAAS,KAAK,sBAAsB;AAAA,IAE1C,WAAW,UAAU,QAAQ;AAAA,MAE3B,KAAK,wBAAwB,QAAQ,YAAY;AAAA,MAEjD,IAAI,OAAO,eAAe;AAAA,QACxB,IAAI;AAAA,UACF,MAAM,OAAO,cAAc,KAAK,YAAY;AAAA,UAC5C,OAAO,KAAK;AAAA,UACZ,OAAO,MACL,kBACA,4BAA4B,OAAO,SAAS,KAC9C;AAAA;AAAA,MAEJ;AAAA,IACF;AAAA;AAAA,OAMI,oBAAmB,CACvB,KACA,cACe;AAAA,IACf,WAAW,UAAU,KAAK,cAAc,GAAG;AAAA,MACzC,IAAI,OAAO,eAAe;AAAA,QACxB,IAAI;AAAA,UACF,MAAM,OAAO,cAAc,KAAK,YAAY;AAAA,UAC5C,OAAO,KAAK;AAAA,UACZ,OAAO,KACL,kBACA,4BAA4B,OAAO,SAAS,KAC9C;AAAA;AAAA,MAEJ;AAAA,IACF;AAAA;AAAA,OAMI,mBAAkB,GAAkB;AAAA,IACxC,WAAW,UAAU,KAAK,cAAc,GAAG;AAAA,MACzC,IAAI,OAAO,cAAc;AAAA,QACvB,IAAI;AAAA,UACF,MAAM,OAAO,aAAa;AAAA,UAC1B,OAAO,KAAK;AAAA,UACZ,OAAO,KACL,kBACA,2BAA2B,OAAO,SAAS,KAC7C;AAAA;AAAA,MAEJ;AAAA,IACF;AAAA;AAAA,OAOI,UAAS,CAAC,KAAa,cAA2C;AAAA,IACtE,MAAM,KAAK,mBAAmB;AAAA,IAC9B,KAAK,OAAO,MAAM;AAAA,IAClB,KAAK,YAAY,MAAM;AAAA,IACvB,KAAK,aAAa;AAAA,IAClB,MAAM,KAAK,gBAAgB;AAAA,IAC3B,MAAM,KAAK,QAAQ;AAAA,IACnB,MAAM,KAAK,oBAAoB,KAAK,YAAY;AAAA,IAChD,MAAM,KAAK,oBAAoB,KAAK,YAAY;AAAA;AAAA,EAS1C,qBAAqB,GAAiB;AAAA,IAC5C,MAAM,aAAa,KAAK,cAAc;AAAA,IACtC,MAAM,YAAY,IAAI;AAAA,IACtB,WAAW,UAAU,YAAY;AAAA,MAC/B,UAAU,IAAI,OAAO,MAAM,MAAM;AAAA,IACnC;AAAA,IAEA,MAAM,UAAU,IAAI;AAAA,IACpB,MAAM,SAAuB,CAAC;AAAA,IAE9B,MAAM,QAAQ,CAAC,SAAiB;AAAA,MAC9B,IAAI,QAAQ,IAAI,IAAI;AAAA,QAAG;AAAA,MACvB,QAAQ,IAAI,IAAI;AAAA,MAEhB,MAAM,SAAS,UAAU,IAAI,IAAI;AAAA,MACjC,IAAI,CAAC;AAAA,QAAQ;AAAA,MAEb,IAAI,OAAO,cAAc;AAAA,QACvB,WAAW,OAAO,OAAO,cAAc;AAAA,UACrC,IAAI,UAAU,IAAI,GAAG,GAAG;AAAA,YACtB,MAAM,GAAG;AAAA,UACX;AAAA,QACF;AAAA,MACF;AAAA,MAEA,OAAO,KAAK,MAAM;AAAA;AAAA,IAGpB,WAAW,UAAU,YAAY;AAAA,MAC/B,MAAM,OAAO,IAAI;AAAA,IACnB;AAAA,IAEA,OAAO;AAAA;AAAA,EAOD,kBAAkB,GAAgC;AAAA,IACxD,MAAM,UAAU,MAAM,KAAK,KAAK,OAAO,QAAQ,CAAC;AAAA,IAChD,MAAM,gBAAgB,IAAI;AAAA,IAC1B,YAAY,KAAK,WAAW,SAAS;AAAA,MACnC,cAAc,IAAI,OAAO,MAAM,GAAG;AAAA,IACpC;AAAA,IAEA,MAAM,UAAU,IAAI;AAAA,IACpB,MAAM,SAAsC,CAAC;AAAA,IAE7C,MAAM,QAAQ,CAAC,QAAgB;AAAA,MAC7B,IAAI,QAAQ,IAAI,GAAG;AAAA,QAAG;AAAA,MACtB,QAAQ,IAAI,GAAG;AAAA,MAEf,MAAM,SAAS,KAAK,OAAO,IAAI,GAAG;AAAA,MAClC,IAAI,QAAQ,cAAc;AAAA,QACxB,WAAW,OAAO,OAAO,cAAc;AAAA,UACrC,MAAM,SAAS,cAAc,IAAI,GAAG;AAAA,UACpC,IAAI,UAAU,KAAK,OAAO,IAAI,MAAM,GAAG;AAAA,YACrC,MAAM,MAAM;AAAA,UACd;AAAA,QACF;AAAA,MACF;AAAA,MACA,MAAM,eAAe,KAAK,OAAO,IAAI,GAAG;AAAA,MACxC,IAAI,cAAc;AAAA,QAChB,OAAO,KAAK,CAAC,KAAK,YAAY,CAAC;AAAA,MACjC;AAAA;AAAA,IAGF,YAAY,QAAQ,SAAS;AAAA,MAC3B,MAAM,GAAG;AAAA,IACX;AAAA,IAEA,OAAO;AAAA;AAAA,EAST,cAAc,CAAC,KAAqC;AAAA,IAElD,cAAc,WAAW,KAAK,QAAQ;AAAA,MACpC,IAAI,OAAO,SAAS,KAAK;AAAA,QACvB,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IAGA,OAAO,KAAK,YAAY,IAAI,GAAG;AAAA;AAAA,EAOjC,aAAa,GAAiB;AAAA,IAC5B,MAAM,SAAS,IAAI;AAAA,IAGnB,YAAY,KAAK,WAAW,KAAK,aAAa;AAAA,MAC5C,OAAO,IAAI,KAAK,MAAM;AAAA,IACxB;AAAA,IAGA,cAAc,WAAW,KAAK,QAAQ;AAAA,MACpC,OAAO,IAAI,OAAO,MAAM,MAAM;AAAA,IAChC;AAAA,IAEA,OAAO,MAAM,KAAK,OAAO,OAAO,CAAC;AAAA;AAAA,EAMnC,kBAAkB,CAAC,KAA8B;AAAA,IAC/C,OAAO,KAAK,cAAc,EAAE,OAC1B,CAAC,WAAW,OAAO,MAAM,SAAS,GAAG,KAAK,KAC5C;AAAA;AAAA,EAoBF,kBAAkB,CAAC,QAIjB;AAAA,IACA,MAAM,UAAU,IAAI;AAAA,IACpB,WAAW,KAAK,KAAK,cAAc,GAAG;AAAA,MACpC,QAAQ,IAAI,EAAE,IAAI;AAAA,IACpB;AAAA,IAEA,MAAM,QAAkB,CAAC;AAAA,IACzB,IAAI,aAAa;AAAA,IAEjB,SAAS,IAAI,EAAG,IAAI,OAAO,QAAQ,KAAK;AAAA,MACtC,IAAI,OAAO,GAAG,WAAW,GAAG,GAAG;AAAA,QAE7B,aAAa;AAAA,QACb;AAAA,MACF;AAAA,MACA,IAAI,QAAQ,IAAI,OAAO,EAAE,GAAG;AAAA,QAC1B,MAAM,KAAK,OAAO,EAAE;AAAA,MACtB,EAAO;AAAA,QACL,aAAa;AAAA,QACb;AAAA;AAAA,IAEJ;AAAA,IAEA,IAAI,eAAe,IAAI;AAAA,MAErB,OAAO,EAAE,OAAO,SAAS,IAAI,MAAM,CAAC,EAAE;AAAA,IACxC;AAAA,IAEA,OAAO;AAAA,MACL;AAAA,MACA,SAAS,OAAO;AAAA,MAChB,MAAM,OAAO,MAAM,aAAa,CAAC;AAAA,IACnC;AAAA;AAAA,EAUF,kBAAkB,CAAC,MAA6B;AAAA,IAC9C,IAAI,CAAC,KAAK;AAAA,MAAI,OAAO;AAAA,IAErB,MAAM,QAAQ,KAAK,GAAG,UAAU,GAAG,0BAA0B,MAAM;AAAA,IACnE,OAAO,SAAS;AAAA;AAAA,EAQlB,kBAAkB,CAAC,MAAc,YAA0B;AAAA,IACzD,IAAI,CAAC,KAAK,IAAI;AAAA,MACZ,MAAM,IAAI,MACR,yFACF;AAAA,IACF;AAAA,IAGA,MAAM,SAAS,KAAK,eAAe,UAAU;AAAA,IAC7C,IAAI,CAAC,QAAQ;AAAA,MACX,MAAM,IAAI,MAAM,WAAW,uBAAuB;AAAA,IACpD;AAAA,IAEA,KAAK,GAAG,UAAU,GAAG,0BAA0B,QAAQ,UAAU;AAAA,IACjE,OAAO,KACL,kBACA,gBAAgB,sBAAsB,aACxC;AAAA;AAAA,EASF,gBAAgB,GAAiB;AAAA,IAC/B,MAAM,YAAY,KAAK,qBAAqB;AAAA,IAC5C,MAAM,gBAAgB,KAAK,yBAAyB;AAAA,IAGpD,MAAM,SAAS,IAAI;AAAA,IACnB,WAAW,QAAQ,WAAW;AAAA,MAC5B,OAAO,IAAI,KAAK,YAAY,IAAI;AAAA,IAClC;AAAA,IACA,WAAW,QAAQ,eAAe;AAAA,MAChC,OAAO,IAAI,KAAK,YAAY,IAAI;AAAA,IAClC;AAAA,IAEA,OAAO,MAAM,KAAK,OAAO,OAAO,CAAC;AAAA;AAAA,EAM3B,oBAAoB,GAAiB;AAAA,IAC3C,MAAM,QAAsB,CAAC;AAAA,IAE7B,YAAY,MAAM,WAAW,KAAK,aAAa;AAAA,MAC7C,MAAM,KAAK;AAAA,QACT,aAAa,wBAAwB;AAAA,QACrC,YAAY;AAAA,QACZ,SAAS,OAAO;AAAA,QAChB,aAAa,OAAO;AAAA,QACpB,MAAM,OAAO;AAAA,QACb,YAAY,OAAO;AAAA,QACnB,WAAW,OAAO;AAAA,QAClB,cAAc,OAAO;AAAA,QACrB,aAAa;AAAA,QACb,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,OAAO,CAAC,CAAC,OAAO;AAAA,QAChB,OAAO,OAAO,KAAK,OAAO,SAAS;AAAA,QACnC,aAAa,CAAC,CAAC,OAAO;AAAA,QACtB,gBAAgB,CAAC,CAAC,OAAO;AAAA,QACzB,eAAe,CAAC,CAAC,OAAO;AAAA,QACxB,gBAAgB,CAAC,CAAC,OAAO;AAAA,QACzB,cAAc,CAAC,EAAE,OAAO,WAAW,UAAU,OAAO,WAAW;AAAA,MACjE,CAAC;AAAA,IACH;AAAA,IAEA,OAAO;AAAA;AAAA,EAMD,wBAAwB,GAAiB;AAAA,IAC/C,OAAO,KAAK,SAAS,IAAI,CAAC,UAAU;AAAA,MAClC,MAAM,SAAS,KAAK,OAAO,IAAI,MAAM,WAAW;AAAA,MAChD,OAAO;AAAA,QACL,aAAa,MAAM;AAAA,QACnB,YAAY,MAAM;AAAA,QAClB,SAAS,QAAQ,WAAW,MAAM;AAAA,QAClC,aAAa,QAAQ;AAAA,QACrB,MAAM,QAAQ;AAAA,QACd,YAAY,QAAQ;AAAA,QACpB,WAAW,QAAQ;AAAA,QACnB,cAAc,QAAQ;AAAA,QACtB,aAAa,MAAM;AAAA,QACnB,QAAQ,CAAC,CAAC;AAAA,QACV,QAAQ;AAAA,QACR,OAAO,CAAC,CAAC,QAAQ;AAAA,QACjB,OAAO,QAAQ,KAAK,OAAO,MAAM,eAAe;AAAA,QAChD,aAAa,CAAC,CAAC,QAAQ;AAAA,QACvB,gBAAgB,CAAC,CAAC,QAAQ;AAAA,QAC1B,eAAe,CAAC,CAAC,QAAQ;AAAA,QACzB,gBAAgB,CAAC,CAAC,QAAQ;AAAA,QAC1B,cAAc,CAAC,EACb,QAAQ,WAAW,UAAU,QAAQ,WAAW;AAAA,MAEpD;AAAA,KACD;AAAA;AAAA,EAMH,WAAW,GAAkB;AAAA,IAC3B,OAAO,CAAC,GAAG,KAAK,QAAQ;AAAA;AAAA,EAM1B,SAAS,CAAC,aAA6C;AAAA,IACrD,OAAO,KAAK,OAAO,IAAI,WAAW;AAAA;AAAA,EAMpC,YAAY,GAA4B;AAAA,IACtC,OAAO,IAAI,IAAI,KAAK,MAAM;AAAA;AAAA,EAM5B,WAAW,CAAC,aAA8B;AAAA,IACxC,OAAO,KAAK,SAAS,KAAK,CAAC,MAAM,EAAE,gBAAgB,WAAW;AAAA;AAAA,EAMhE,QAAQ,CAAC,aAA8B;AAAA,IACrC,OAAO,KAAK,OAAO,IAAI,WAAW;AAAA;AAEtC;",
|
|
8
|
+
"debugId": "8DD2577C7DC4CE6B64756E2164756E21",
|
|
9
|
+
"names": []
|
|
10
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@burdenoff/vibe-agent",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.4.0",
|
|
4
4
|
"main": "./dist/index.js",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -44,6 +44,8 @@
|
|
|
44
44
|
"license": "SEE LICENSE IN LICENSE",
|
|
45
45
|
"description": "VibeControls Agent CLI - Remote development environment management with terminal multiplexing, tunnels, and extensible plugins. Powered by Bun + Elysia.",
|
|
46
46
|
"dependencies": {
|
|
47
|
+
"@burdenoff/vibe-plugin-ai": "2.0.0",
|
|
48
|
+
"@burdenoff/vibe-plugin-ssh": "2.0.0",
|
|
47
49
|
"@elysiajs/cors": "^1.3.1",
|
|
48
50
|
"commander": "^14.0.3",
|
|
49
51
|
"elysia": "^1.3.2"
|