@burdenoff/vibe-agent 2.3.0 → 2.5.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-sm6n9xst.js → app-6d1xq46v.js} +5 -5
- package/dist/{app-sm6n9xst.js.map → app-6d1xq46v.js.map} +5 -5
- package/dist/cli.js +3 -3
- package/dist/cli.js.map +3 -3
- package/dist/{index-k9hb0b93.js → index-4nsdre0j.js} +3 -3
- package/dist/{index-k9hb0b93.js.map → index-4nsdre0j.js.map} +3 -3
- package/dist/index-6vry08rz.js.map +3 -3
- package/dist/index-a9g7hbj9.js.map +2 -2
- package/dist/index-fm6gqenc.js.map +2 -2
- package/dist/index-hefqxwht.js.map +2 -2
- package/dist/{index-05qfwz8r.js → index-jerwk237.js} +3 -3
- package/dist/index-jerwk237.js.map +10 -0
- package/dist/index-npmvh1x9.js.map +2 -2
- package/dist/{index-b1eq3qvs.js → index-tjymws9j.js} +5 -5
- package/dist/index-tjymws9j.js.map +19 -0
- package/dist/index-wmvkjcjj.js.map +3 -3
- package/dist/index-wxxv9rec.js +601 -0
- package/dist/index-wxxv9rec.js.map +13 -0
- package/dist/index.js +3 -3
- package/dist/{package-04nkt49b.js → package-1bz5z415.js} +3 -3
- package/dist/{package-04nkt49b.js.map → package-1bz5z415.js.map} +1 -1
- package/dist/{plugin-system-7r9mb1tb.js → plugin-system-x4tbwzyq.js} +34 -6
- package/dist/plugin-system-x4tbwzyq.js.map +10 -0
- package/package.json +1 -1
- package/dist/index-05qfwz8r.js.map +0 -10
- package/dist/index-b1eq3qvs.js.map +0 -19
- package/dist/index-t4qgjy5w.js +0 -287
- package/dist/index-t4qgjy5w.js.map +0 -13
- package/dist/plugin-system-7r9mb1tb.js.map +0 -10
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 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
|
+
"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 { 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
|
+
"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
|
+
"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
|
+
"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",
|
|
9
|
+
"import { Command } from \"commander\";\nimport {\n info,\n fail,\n header,\n kv,\n blank,\n colors,\n icons,\n formatBytes,\n formatDuration,\n getAgentUrl,\n apiGet,\n} from \"../utils/index.js\";\n\nconst DEFAULT_AGENT_URL = \"http://localhost:3005\";\n\ninterface SystemResponse {\n hostname: string;\n platform: string;\n arch: string;\n release: string;\n cpus: number;\n totalMemory: number;\n freeMemory: number;\n uptime: number;\n bunVersion?: string;\n agentVersion: string;\n homeDir: string;\n cwd: string;\n environment?: string;\n}\n\nexport function register(program: Command): void {\n program\n .command(\"system\")\n .description(\"Show system information 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 System Information\");\n blank();\n\n const data = await apiGet<SystemResponse>(\n agentUrl,\n \"/api/agent/system\",\n );\n\n // Agent info\n info(`${icons.info} Agent`);\n kv(\"Version\", colors.bold(data.agentVersion));\n if (data.bunVersion) {\n kv(\"Bun\", data.bunVersion);\n }\n if (data.environment) {\n kv(\"Environment\", data.environment);\n }\n kv(\"Uptime\", formatDuration(data.uptime));\n blank();\n\n // Platform info\n info(`${icons.info} Platform`);\n kv(\"OS\", `${data.platform} ${data.arch}`);\n kv(\"Hostname\", data.hostname);\n kv(\"Release\", data.release);\n blank();\n\n // Resources\n info(`${icons.info} Resources`);\n kv(\"CPUs\", String(data.cpus));\n kv(\"Total Memory\", formatBytes(data.totalMemory));\n kv(\"Free Memory\", formatBytes(data.freeMemory));\n blank();\n\n // Paths\n info(`${icons.info} Paths`);\n kv(\"Home\", data.homeDir);\n kv(\"CWD\", data.cwd);\n blank();\n } catch (err: any) {\n fail(`Failed to get system info: ${err.message}`);\n }\n });\n}\n",
|
|
10
|
+
"import { Command } from \"commander\";\nimport {\n info,\n fail,\n header,\n kv,\n blank,\n colors,\n icons,\n formatStatus,\n timeAgo,\n formatTable,\n} from \"../utils/index.js\";\nimport { ServiceManager } from \"../../services/service-manager.js\";\n\nexport function register(program: Command): void {\n program\n .command(\"status\")\n .description(\"Show status of VibeControls agent instance(s)\")\n .option(\"-n, --name <name>\", \"Agent instance name\")\n .action(async (opts) => {\n try {\n const serviceManager = new ServiceManager();\n\n if (opts.name) {\n // Show individual instance status\n header(`Agent Status: ${opts.name}`);\n blank();\n\n const instance = await serviceManager.getStatus(opts.name);\n\n if (!instance) {\n fail(`Agent instance ${colors.bold(opts.name)} not found.`);\n return;\n }\n\n kv(\"Name\", instance.name);\n kv(\"Status\", formatStatus(instance.status));\n kv(\"PID\", instance.pid ? String(instance.pid) : colors.dim(\"n/a\"));\n kv(\"Port\", instance.port ? String(instance.port) : colors.dim(\"n/a\"));\n kv(\"Host\", instance.config?.host || colors.dim(\"n/a\"));\n kv(\"Database\", instance.config?.dbPath || colors.dim(\"n/a\"));\n\n if (instance.startTime) {\n kv(\"Started\", timeAgo(instance.startTime));\n }\n\n blank();\n } else {\n // Show all instances\n header(\"Agent Instances\");\n blank();\n\n const instances = await serviceManager.listInstances();\n\n if (!instances || instances.length === 0) {\n info(`${icons.info} No agent instances found.`);\n info(`Run ${colors.bold(\"vibe start\")} to start an agent.`);\n return;\n }\n\n const rows = instances.map((inst) => ({\n Name: inst.name,\n Status: formatStatus(inst.status),\n PID: inst.pid || \"-\",\n Port: inst.port || \"-\",\n Started: inst.startTime ? timeAgo(inst.startTime) : \"-\",\n }));\n\n formatTable(rows);\n\n blank();\n info(\n `${icons.info} ${instances.length} instance(s) found. Use ${colors.bold(\"vibe status -n <name>\")} for details.`,\n );\n }\n } catch (err: any) {\n fail(`Failed to get status: ${err.message}`);\n }\n });\n}\n",
|
|
11
|
+
"import { Command } from \"commander\";\nimport {\n info,\n fail,\n header,\n kv,\n blank,\n colors,\n icons,\n getAgentUrl,\n apiGet,\n} from \"../utils/index.js\";\n\nconst DEFAULT_AGENT_URL = \"http://localhost:3005\";\n\ninterface UrlResponse {\n url: string;\n tunnelUrl?: string;\n localUrl: string;\n isTunnel: boolean;\n}\n\nexport function register(program: Command): void {\n program\n .command(\"url\")\n .description(\"Show the active URL 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 URL\");\n blank();\n\n const data = await apiGet<UrlResponse>(agentUrl, \"/api/agent/url\");\n\n kv(\"Active URL\", colors.bold(data.url));\n kv(\"Local URL\", data.localUrl);\n\n if (data.tunnelUrl) {\n kv(\"Tunnel URL\", colors.cyan(data.tunnelUrl));\n }\n\n kv(\n \"Mode\",\n data.isTunnel\n ? `${icons.running} Tunnel active`\n : `${icons.info} Local only`,\n );\n\n blank();\n\n if (data.isTunnel) {\n info(\n `${icons.info} Agent is accessible via tunnel at ${colors.bold(data.tunnelUrl!)}`,\n );\n } else {\n info(\n `${icons.info} Agent is running locally at ${colors.bold(data.localUrl)}`,\n );\n }\n } catch (err: any) {\n fail(`Failed to get URL: ${err.message}`);\n }\n });\n}\n",
|
|
12
|
+
"import { Command } from \"commander\";\nimport {\n success,\n info,\n fail,\n header,\n kv,\n blank,\n colors,\n icons,\n getAgentUrl,\n apiGet,\n apiPost,\n} from \"../utils/index.js\";\n\nconst DEFAULT_AGENT_URL = \"http://localhost:3005\";\n\ninterface GatewayAuthStatusResponse {\n configured: boolean;\n globalUrl?: string;\n workspaceUrl?: string;\n clientId?: string;\n authenticated: boolean;\n tokenExpiresAt?: string;\n}\n\ninterface GatewayAuthConfigureResponse {\n success: boolean;\n message: string;\n}\n\nexport function register(program: Command): void {\n const gatewayAuth = program\n .command(\"gateway-auth\")\n .description(\"Manage gateway authentication for VibeControls agent\");\n\n gatewayAuth\n .command(\"configure\")\n .description(\"Configure gateway authentication credentials\")\n .requiredOption(\"--global-url <url>\", \"Global gateway URL\")\n .requiredOption(\"--workspace-url <url>\", \"Workspace gateway URL\")\n .requiredOption(\"--client-id <id>\", \"OAuth client ID\")\n .requiredOption(\"--client-secret <secret>\", \"OAuth client secret\")\n .option(\"--agent-url <url>\", \"Agent URL\", DEFAULT_AGENT_URL)\n .action(async (opts) => {\n try {\n const agentUrl = getAgentUrl(opts);\n\n header(\"Configure Gateway Authentication\");\n blank();\n\n info(`${icons.info} Sending gateway auth configuration...`);\n blank();\n\n const data = await apiPost<GatewayAuthConfigureResponse>(\n agentUrl,\n \"/api/agent/gateway-auth\",\n {\n globalUrl: opts.globalUrl,\n workspaceUrl: opts.workspaceUrl,\n clientId: opts.clientId,\n clientSecret: opts.clientSecret,\n },\n );\n\n if (data.success) {\n success(\n `${icons.success} Gateway authentication configured successfully.`,\n );\n blank();\n kv(\"Global URL\", opts.globalUrl);\n kv(\"Workspace URL\", opts.workspaceUrl);\n kv(\"Client ID\", opts.clientId);\n kv(\"Client Secret\", colors.dim(\"********\"));\n } else {\n fail(data.message || \"Failed to configure gateway authentication.\");\n }\n\n blank();\n } catch (err: any) {\n fail(`Failed to configure gateway auth: ${err.message}`);\n }\n });\n\n gatewayAuth\n .command(\"status\")\n .description(\"Check gateway authentication status\")\n .option(\"--agent-url <url>\", \"Agent URL\", DEFAULT_AGENT_URL)\n .action(async (opts) => {\n try {\n const agentUrl = getAgentUrl(opts);\n\n header(\"Gateway Authentication Status\");\n blank();\n\n const data = await apiGet<GatewayAuthStatusResponse>(\n agentUrl,\n \"/api/agent/gateway-auth\",\n );\n\n kv(\n \"Configured\",\n data.configured\n ? `${icons.success} ${colors.green(\"Yes\")}`\n : `${icons.error} ${colors.red(\"No\")}`,\n );\n\n if (data.configured) {\n kv(\"Global URL\", data.globalUrl || colors.dim(\"n/a\"));\n kv(\"Workspace URL\", data.workspaceUrl || colors.dim(\"n/a\"));\n kv(\"Client ID\", data.clientId || colors.dim(\"n/a\"));\n kv(\n \"Authenticated\",\n data.authenticated\n ? `${icons.success} ${colors.green(\"Yes\")}`\n : `${icons.error} ${colors.red(\"No\")}`,\n );\n\n if (data.tokenExpiresAt) {\n kv(\"Token Expires\", data.tokenExpiresAt);\n }\n } else {\n blank();\n info(\n `${icons.info} Run ${colors.bold(\"vibe gateway-auth configure\")} to set up gateway authentication.`,\n );\n }\n\n blank();\n } catch (err: any) {\n fail(`Failed to get gateway auth status: ${err.message}`);\n }\n });\n}\n",
|
|
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
|
+
"/**\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
|
+
],
|
|
16
|
+
"mappings": "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",
|
|
17
|
+
"debugId": "9AE6B13FD3CF2B6664756E2164756E21",
|
|
18
|
+
"names": []
|
|
19
|
+
}
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
"version": 3,
|
|
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
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 {
|
|
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
|
|
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 { 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 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
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
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
9
|
],
|
|
10
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;
|
|
10
|
+
"mappings": "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",
|
|
11
11
|
"debugId": "AE9C4A672990742664756E2164756E21",
|
|
12
12
|
"names": []
|
|
13
13
|
}
|