@burdenoff/vibe-agent 2.6.0 → 2.7.1
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/README.md +8 -8
- package/dist/{app-6d1xq46v.js → app-7xd13pn3.js} +2 -2
- package/dist/cli.js +313 -7
- package/dist/cli.js.map +6 -5
- package/dist/{index-wxxv9rec.js → index-5hb62xkm.js} +4 -4
- package/dist/{index-s7ff1fj1.js → index-f6296kqk.js} +4 -3
- package/dist/{index-s7ff1fj1.js.map → index-f6296kqk.js.map} +3 -3
- package/dist/{index-tjymws9j.js → index-ftbphe7j.js} +160 -8
- package/dist/index-ftbphe7j.js.map +20 -0
- package/dist/index.js +2 -2
- package/dist/{package-4andgzzt.js → package-a1mt704j.js} +3 -3
- package/dist/{package-4andgzzt.js.map → package-a1mt704j.js.map} +1 -1
- package/dist/{plugin-system-x4tbwzyq.js → plugin-system-w2727db6.js} +3 -3
- package/package.json +1 -1
- package/dist/index-tjymws9j.js.map +0 -19
- /package/dist/{app-6d1xq46v.js.map → app-7xd13pn3.js.map} +0 -0
- /package/dist/{index-wxxv9rec.js.map → index-5hb62xkm.js.map} +0 -0
- /package/dist/{plugin-system-x4tbwzyq.js.map → plugin-system-w2727db6.js.map} +0 -0
|
@@ -162,7 +162,7 @@ function register(program) {
|
|
|
162
162
|
} catch {
|
|
163
163
|
warn("Agent not reachable. Attempting local plugin registry...");
|
|
164
164
|
try {
|
|
165
|
-
const { PluginManager } = await import("./plugin-system-
|
|
165
|
+
const { PluginManager } = await import("./plugin-system-w2727db6.js");
|
|
166
166
|
const pm = new PluginManager;
|
|
167
167
|
plugins = pm.getPluginDetails() || [];
|
|
168
168
|
} catch {
|
|
@@ -198,7 +198,7 @@ function register(program) {
|
|
|
198
198
|
} catch {
|
|
199
199
|
warn("Agent not reachable. Attempting local install...");
|
|
200
200
|
try {
|
|
201
|
-
const { PluginManager } = await import("./plugin-system-
|
|
201
|
+
const { PluginManager } = await import("./plugin-system-w2727db6.js");
|
|
202
202
|
const pm = new PluginManager;
|
|
203
203
|
await pm.install(packageName);
|
|
204
204
|
success(`Plugin "${packageName}" installed locally.`);
|
|
@@ -221,7 +221,7 @@ function register(program) {
|
|
|
221
221
|
} catch {
|
|
222
222
|
warn("Agent not reachable. Attempting local removal...");
|
|
223
223
|
try {
|
|
224
|
-
const { PluginManager } = await import("./plugin-system-
|
|
224
|
+
const { PluginManager } = await import("./plugin-system-w2727db6.js");
|
|
225
225
|
const pm = new PluginManager;
|
|
226
226
|
await pm.remove(packageName);
|
|
227
227
|
success(`Plugin "${packageName}" removed locally.`);
|
|
@@ -598,4 +598,4 @@ export {
|
|
|
598
598
|
};
|
|
599
599
|
|
|
600
600
|
//# debugId=77470ADF30C64CDD64756E2164756E21
|
|
601
|
-
//# sourceMappingURL=index-
|
|
601
|
+
//# sourceMappingURL=index-5hb62xkm.js.map
|
|
@@ -206,7 +206,8 @@ class ServiceManager {
|
|
|
206
206
|
}
|
|
207
207
|
const logFile = join(this.logsDir, `${config.name}.log`);
|
|
208
208
|
const logFd = openSync(logFile, "a");
|
|
209
|
-
const
|
|
209
|
+
const isDist = import.meta.dir.endsWith("/dist") || import.meta.dir.includes("/dist/");
|
|
210
|
+
const indexPath = isDist ? join(import.meta.dir, "index.js") : join(import.meta.dir, "..", "index.ts");
|
|
210
211
|
const child = Bun.spawn(["bun", "run", indexPath], {
|
|
211
212
|
stdin: "ignore",
|
|
212
213
|
stdout: logFd,
|
|
@@ -411,5 +412,5 @@ class ServiceManager {
|
|
|
411
412
|
|
|
412
413
|
export { checkDependencies, installDependencies, ServiceManager };
|
|
413
414
|
|
|
414
|
-
//# debugId=
|
|
415
|
-
//# sourceMappingURL=index-
|
|
415
|
+
//# debugId=86FF4BC55E7E7DC564756E2164756E21
|
|
416
|
+
//# sourceMappingURL=index-f6296kqk.js.map
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
"sources": ["../src/services/bootstrap.service.ts", "../src/services/service-manager.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"/**\n * Bootstrap Service\n *\n * Handles dependency checking and auto-installation for the vibe agent.\n * Checks for required system tools and optionally installs them.\n *\n * Required prerequisites:\n * - bun (runtime - already present if running this code)\n * - tmux (installed via session-tmux plugin, but checked here for setup)\n * - ttyd (installed via session-tmux plugin, but checked here for setup)\n * - cloudflared (installed via tunnel-cloudflare plugin, but checked here for setup)\n */\n\nimport os from \"node:os\";\n\nimport { logger } from \"./logger.js\";\n\n// ── Types ────────────────────────────────────────────────────────────────\n\nexport interface DependencyCheck {\n name: string;\n installed: boolean;\n version?: string;\n required: boolean;\n category: \"runtime\" | \"session\" | \"tunnel\" | \"tool\";\n}\n\nexport interface SetupResult {\n success: boolean;\n installed: string[];\n failed: string[];\n skipped: string[];\n}\n\n// ── Check Functions ─────────────────────────────────────────────────────\n\nfunction checkCommand(cmd: string): { installed: boolean; version?: string } {\n try {\n const result = Bun.spawnSync([cmd, \"--version\"], {\n timeout: 5000,\n stdout: \"pipe\",\n stderr: \"pipe\",\n });\n if (result.exitCode === 0) {\n const version = result.stdout.toString().trim().split(\"\\n\")[0];\n return { installed: true, version };\n }\n // Try -v fallback\n const result2 = Bun.spawnSync([cmd, \"-v\"], {\n timeout: 5000,\n stdout: \"pipe\",\n stderr: \"pipe\",\n });\n if (result2.exitCode === 0) {\n const version = result2.stdout.toString().trim().split(\"\\n\")[0];\n return { installed: true, version };\n }\n return { installed: false };\n } catch {\n return { installed: false };\n }\n}\n\n/**\n * Check all dependencies and return their status.\n */\nexport function checkDependencies(): DependencyCheck[] {\n const deps: Array<{\n name: string;\n cmd: string;\n required: boolean;\n category: DependencyCheck[\"category\"];\n }> = [\n { name: \"bun\", cmd: \"bun\", required: true, category: \"runtime\" },\n { name: \"tmux\", cmd: \"tmux\", required: false, category: \"session\" },\n { name: \"ttyd\", cmd: \"ttyd\", required: false, category: \"session\" },\n {\n name: \"cloudflared\",\n cmd: \"cloudflared\",\n required: false,\n category: \"tunnel\",\n },\n ];\n\n return deps.map((dep) => {\n const { installed, version } = checkCommand(dep.cmd);\n return {\n name: dep.name,\n installed,\n version,\n required: dep.required,\n category: dep.category,\n };\n });\n}\n\n/**\n * Install missing dependencies.\n */\nexport async function installDependencies(\n deps?: string[],\n): Promise<SetupResult> {\n const platform = os.platform();\n const result: SetupResult = {\n success: true,\n installed: [],\n failed: [],\n skipped: [],\n };\n\n const checks = checkDependencies();\n const toInstall = deps\n ? checks.filter((d) => deps.includes(d.name) && !d.installed)\n : checks.filter((d) => !d.installed);\n\n for (const dep of toInstall) {\n try {\n logger.info(\"bootstrap\", `Installing ${dep.name}...`);\n\n if (dep.name === \"tmux\") {\n await installTmux(platform);\n } else if (dep.name === \"ttyd\") {\n await installTtyd(platform);\n } else if (dep.name === \"cloudflared\") {\n await installCloudflared(platform);\n } else {\n result.skipped.push(dep.name);\n continue;\n }\n\n // Verify installation\n const check = checkCommand(dep.name);\n if (check.installed) {\n result.installed.push(dep.name);\n logger.info(\n \"bootstrap\",\n `Successfully installed ${dep.name}: ${check.version}`,\n );\n } else {\n result.failed.push(dep.name);\n result.success = false;\n logger.error(\n \"bootstrap\",\n `Failed to install ${dep.name}: command not found after install`,\n );\n }\n } catch (err) {\n result.failed.push(dep.name);\n result.success = false;\n logger.error(\"bootstrap\", `Failed to install ${dep.name}: ${err}`);\n }\n }\n\n return result;\n}\n\n// ── Platform-Specific Installers ────────────────────────────────────────\n\nasync function installTmux(platform: string): Promise<void> {\n if (platform === \"darwin\") {\n const r = Bun.spawnSync([\"brew\", \"install\", \"tmux\"], {\n timeout: 120_000,\n stdout: \"pipe\",\n stderr: \"pipe\",\n });\n if (r.exitCode !== 0) throw new Error(r.stderr.toString());\n } else if (platform === \"linux\") {\n const apt = Bun.spawnSync([\"sudo\", \"apt-get\", \"install\", \"-y\", \"tmux\"], {\n timeout: 120_000,\n stdout: \"pipe\",\n stderr: \"pipe\",\n });\n if (apt.exitCode !== 0) {\n const yum = Bun.spawnSync([\"sudo\", \"yum\", \"install\", \"-y\", \"tmux\"], {\n timeout: 120_000,\n stdout: \"pipe\",\n stderr: \"pipe\",\n });\n if (yum.exitCode !== 0) throw new Error(yum.stderr.toString());\n }\n } else {\n throw new Error(`Unsupported platform for tmux: ${platform}`);\n }\n}\n\nasync function installTtyd(platform: string): Promise<void> {\n if (platform === \"darwin\") {\n const r = Bun.spawnSync([\"brew\", \"install\", \"ttyd\"], {\n timeout: 120_000,\n stdout: \"pipe\",\n stderr: \"pipe\",\n });\n if (r.exitCode !== 0) throw new Error(r.stderr.toString());\n } else if (platform === \"linux\") {\n const snap = Bun.spawnSync(\n [\"sudo\", \"snap\", \"install\", \"ttyd\", \"--classic\"],\n { timeout: 120_000, stdout: \"pipe\", stderr: \"pipe\" },\n );\n if (snap.exitCode !== 0) {\n // Try direct download\n const arch = os.arch() === \"x64\" ? \"x86_64\" : os.arch();\n const curl = Bun.spawnSync(\n [\n \"sh\",\n \"-c\",\n `curl -sLo /tmp/ttyd https://github.com/tsl0922/ttyd/releases/latest/download/ttyd.${arch} && sudo install /tmp/ttyd /usr/local/bin/ttyd`,\n ],\n { timeout: 120_000, stdout: \"pipe\", stderr: \"pipe\" },\n );\n if (curl.exitCode !== 0) throw new Error(curl.stderr.toString());\n }\n } else {\n throw new Error(`Unsupported platform for ttyd: ${platform}`);\n }\n}\n\nasync function installCloudflared(platform: string): Promise<void> {\n if (platform === \"darwin\") {\n const r = Bun.spawnSync([\"brew\", \"install\", \"cloudflared\"], {\n timeout: 120_000,\n stdout: \"pipe\",\n stderr: \"pipe\",\n });\n if (r.exitCode !== 0) throw new Error(r.stderr.toString());\n } else if (platform === \"linux\") {\n const arch = os.arch();\n let archStr = \"amd64\";\n if (arch === \"arm64\" || (arch as string) === \"aarch64\") archStr = \"arm64\";\n else if (arch === \"arm\") archStr = \"arm\";\n\n const r = Bun.spawnSync(\n [\n \"sh\",\n \"-c\",\n `curl -sLo /tmp/cloudflared https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-${archStr} && sudo install /tmp/cloudflared /usr/local/bin/cloudflared`,\n ],\n { timeout: 120_000, stdout: \"pipe\", stderr: \"pipe\" },\n );\n if (r.exitCode !== 0) throw new Error(r.stderr.toString());\n } else {\n throw new Error(`Unsupported platform for cloudflared: ${platform}`);\n }\n}\n",
|
|
6
|
-
"/**\n * Service Manager\n *\n * Manages multiple agent instances as background daemon processes.\n * Handles start, stop, restart, kill, status, and log operations.\n *\n * Process registry persisted at ~/.vibecontrols/agents.json\n * Logs written to ~/.vibecontrols/logs/{name}.log\n */\n\nimport {\n existsSync,\n readFileSync,\n writeFileSync,\n mkdirSync,\n openSync,\n closeSync,\n} from \"node:fs\";\nimport { join } from \"node:path\";\nimport { homedir } from \"node:os\";\n\nimport type { AgentConfig } from \"./agent.service.js\";\n\nexport interface ProcessInfo {\n name: string;\n pid: number;\n port: number;\n config: AgentConfig;\n startTime: string;\n status: \"running\" | \"stopped\" | \"unknown\";\n}\n\nexport interface LogOptions {\n follow: boolean;\n tail: number;\n}\n\nexport class ServiceManager {\n private registryPath: string;\n private logsDir: string;\n\n constructor() {\n const configDir = join(homedir(), \".vibecontrols\");\n this.registryPath = join(configDir, \"agents.json\");\n this.logsDir = join(configDir, \"logs\");\n\n mkdirSync(configDir, { recursive: true });\n mkdirSync(this.logsDir, { recursive: true });\n }\n\n async startDaemon(config: AgentConfig): Promise<void> {\n // Check if already running\n const existing = await this.findProcessByName(config.name);\n if (existing && existing.status === \"running\") {\n console.log(\n `⚠️ Agent '${config.name}' is already running on port ${existing.port}`,\n );\n return;\n }\n\n // Create log file FD for direct redirect\n const logFile = join(this.logsDir, `${config.name}.log`);\n const logFd = openSync(logFile, \"a\");\n\n // Spawn the process using bun\n // index.js lives
|
|
6
|
+
"/**\n * Service Manager\n *\n * Manages multiple agent instances as background daemon processes.\n * Handles start, stop, restart, kill, status, and log operations.\n *\n * Process registry persisted at ~/.vibecontrols/agents.json\n * Logs written to ~/.vibecontrols/logs/{name}.log\n */\n\nimport {\n existsSync,\n readFileSync,\n writeFileSync,\n mkdirSync,\n openSync,\n closeSync,\n} from \"node:fs\";\nimport { join } from \"node:path\";\nimport { homedir } from \"node:os\";\n\nimport type { AgentConfig } from \"./agent.service.js\";\n\nexport interface ProcessInfo {\n name: string;\n pid: number;\n port: number;\n config: AgentConfig;\n startTime: string;\n status: \"running\" | \"stopped\" | \"unknown\";\n}\n\nexport interface LogOptions {\n follow: boolean;\n tail: number;\n}\n\nexport class ServiceManager {\n private registryPath: string;\n private logsDir: string;\n\n constructor() {\n const configDir = join(homedir(), \".vibecontrols\");\n this.registryPath = join(configDir, \"agents.json\");\n this.logsDir = join(configDir, \"logs\");\n\n mkdirSync(configDir, { recursive: true });\n mkdirSync(this.logsDir, { recursive: true });\n }\n\n async startDaemon(config: AgentConfig): Promise<void> {\n // Check if already running\n const existing = await this.findProcessByName(config.name);\n if (existing && existing.status === \"running\") {\n console.log(\n `⚠️ Agent '${config.name}' is already running on port ${existing.port}`,\n );\n return;\n }\n\n // Create log file FD for direct redirect\n const logFile = join(this.logsDir, `${config.name}.log`);\n const logFd = openSync(logFile, \"a\");\n\n // Spawn the process using bun\n // In production (dist/), import.meta.dir already points to dist/ where index.js lives.\n // In dev (src/services/), we resolve to src/index.ts via \"../index.ts\".\n const isDist =\n import.meta.dir.endsWith(\"/dist\") || import.meta.dir.includes(\"/dist/\");\n const indexPath = isDist\n ? join(import.meta.dir, \"index.js\")\n : join(import.meta.dir, \"..\", \"index.ts\");\n const child = Bun.spawn([\"bun\", \"run\", indexPath], {\n stdin: \"ignore\",\n stdout: logFd,\n stderr: logFd,\n env: {\n ...process.env,\n PORT: config.port.toString(),\n DB_PATH: config.dbPath,\n NODE_ENV: \"production\",\n },\n });\n\n closeSync(logFd);\n\n // Wait for process to start\n await new Promise((resolve) => setTimeout(resolve, 2000));\n\n const isRunning = await this.isProcessRunning(child.pid);\n if (!isRunning) {\n throw new Error(`Failed to start agent '${config.name}'`);\n }\n\n await this.saveProcessInfo(config.name, child.pid, config);\n console.log(\n `🚀 Agent '${config.name}' started (PID: ${child.pid}, Port: ${config.port})`,\n );\n }\n\n async stop(name: string): Promise<void> {\n const agentProcess = await this.findProcessByName(name);\n if (!agentProcess || agentProcess.status !== \"running\") {\n console.log(`⚠️ Agent '${name}' is not running`);\n return;\n }\n\n try {\n process.kill(agentProcess.pid, \"SIGTERM\");\n await new Promise((resolve) => setTimeout(resolve, 3000));\n\n const stillRunning = await this.isProcessRunning(agentProcess.pid);\n if (stillRunning) {\n process.kill(agentProcess.pid, \"SIGKILL\");\n }\n\n await this.updateProcessStatus(name, \"stopped\");\n console.log(`✅ Agent '${name}' stopped`);\n } catch (err) {\n throw new Error(`Failed to stop agent '${name}': ${err}`, { cause: err });\n }\n }\n\n async restart(name: string, config: AgentConfig): Promise<void> {\n const existing = await this.findProcessByName(name);\n if (existing && existing.status === \"running\") {\n await this.stop(name);\n }\n await this.startDaemon(config);\n console.log(`🔄 Agent '${name}' restarted`);\n }\n\n async kill(name: string): Promise<void> {\n const agentProcess = await this.findProcessByName(name);\n if (!agentProcess || agentProcess.status !== \"running\") {\n console.log(`⚠️ Agent '${name}' is not running`);\n return;\n }\n\n await this.killProcessTree(agentProcess.pid);\n await this.updateProcessStatus(name, \"stopped\");\n console.log(`💀 Agent '${name}' killed`);\n }\n\n async getStatus(name: string): Promise<ProcessInfo | null> {\n return this.findProcessByName(name);\n }\n\n async getStatusAll(): Promise<ProcessInfo[]> {\n const registry = this.loadRegistry();\n const processes: ProcessInfo[] = [];\n\n for (const processInfo of registry) {\n const isRunning = await this.isProcessRunning(processInfo.pid);\n processes.push({\n ...processInfo,\n status: isRunning ? \"running\" : \"stopped\",\n });\n }\n\n return processes;\n }\n\n async listInstances(): Promise<ProcessInfo[]> {\n return this.getStatusAll();\n }\n\n async showLogs(name: string, options: LogOptions): Promise<void> {\n const logFile = join(this.logsDir, `${name}.log`);\n\n if (!existsSync(logFile)) {\n console.log(`No logs found for agent '${name}'`);\n return;\n }\n\n if (options.follow) {\n const tail = Bun.spawn(\n [\"tail\", \"-f\", \"-n\", options.tail.toString(), logFile],\n { stdout: \"pipe\", stderr: \"pipe\" },\n );\n\n // Pipe stdout and stderr to process\n (async () => {\n for await (const chunk of tail.stdout as ReadableStream) {\n process.stdout.write(chunk);\n }\n })();\n (async () => {\n for await (const chunk of tail.stderr as ReadableStream) {\n process.stderr.write(chunk);\n }\n })();\n\n process.on(\"SIGINT\", () => {\n tail.kill();\n process.exit(0);\n });\n } else {\n try {\n const proc = Bun.spawnSync(\n [\"tail\", \"-n\", options.tail.toString(), logFile],\n { stdout: \"pipe\", stderr: \"pipe\" },\n );\n console.log(proc.stdout.toString());\n } catch (err) {\n console.error(\"Failed to read logs:\", err);\n }\n }\n }\n\n async checkHealth(\n name: string,\n ): Promise<{ healthy: boolean; details: unknown }> {\n const proc = await this.findProcessByName(name);\n\n if (!proc || proc.status !== \"running\") {\n return { healthy: false, details: { error: \"Process not running\" } };\n }\n\n try {\n const response = await fetch(`http://localhost:${proc.port}/health`);\n const data = await response.json();\n return { healthy: response.ok, details: data };\n } catch (err) {\n return {\n healthy: false,\n details: {\n error: \"Health check failed\",\n message: (err as Error).message,\n },\n };\n }\n }\n\n async setConfig(key: string, value: string): Promise<void> {\n const configFile = join(homedir(), \".vibecontrols\", \"config.json\");\n let config: Record<string, unknown> = {};\n if (existsSync(configFile)) {\n config = JSON.parse(readFileSync(configFile, \"utf8\"));\n }\n config[key] = value;\n writeFileSync(configFile, JSON.stringify(config, null, 2));\n }\n\n async getConfig(key?: string): Promise<unknown> {\n const configFile = join(homedir(), \".vibecontrols\", \"config.json\");\n if (!existsSync(configFile)) return key ? undefined : {};\n const config = JSON.parse(readFileSync(configFile, \"utf8\"));\n return key ? config[key] : config;\n }\n\n // ── Private Helpers ───────────────────────────────────────────────\n\n private loadRegistry(): ProcessInfo[] {\n if (!existsSync(this.registryPath)) return [];\n try {\n return JSON.parse(readFileSync(this.registryPath, \"utf8\"));\n } catch {\n return [];\n }\n }\n\n private saveRegistry(processes: ProcessInfo[]): void {\n writeFileSync(this.registryPath, JSON.stringify(processes, null, 2));\n }\n\n private async saveProcessInfo(\n name: string,\n pid: number,\n config: AgentConfig,\n ): Promise<void> {\n const registry = this.loadRegistry();\n const filtered = registry.filter((p) => p.name !== name);\n filtered.push({\n name,\n pid,\n port: config.port,\n config,\n startTime: new Date().toISOString(),\n status: \"running\",\n });\n this.saveRegistry(filtered);\n }\n\n private async updateProcessStatus(\n name: string,\n status: \"running\" | \"stopped\" | \"unknown\",\n ): Promise<void> {\n const registry = this.loadRegistry();\n const proc = registry.find((p) => p.name === name);\n if (proc) {\n proc.status = status;\n this.saveRegistry(registry);\n }\n }\n\n private async findProcessByName(name: string): Promise<ProcessInfo | null> {\n const registry = this.loadRegistry();\n const proc = registry.find((p) => p.name === name);\n if (!proc) return null;\n const isRunning = await this.isProcessRunning(proc.pid);\n proc.status = isRunning ? \"running\" : \"stopped\";\n return proc;\n }\n\n private async isProcessRunning(pid: number): Promise<boolean> {\n try {\n process.kill(pid, 0);\n return true;\n } catch {\n return false;\n }\n }\n\n private async killProcessTree(pid: number): Promise<void> {\n try {\n // Kill process group\n process.kill(-pid, \"SIGKILL\");\n } catch {\n try {\n process.kill(pid, \"SIGKILL\");\n } catch {\n // Process already dead\n }\n }\n }\n}\n"
|
|
7
7
|
],
|
|
8
|
-
"mappings": "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",
|
|
9
|
-
"debugId": "
|
|
8
|
+
"mappings": "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",
|
|
9
|
+
"debugId": "86FF4BC55E7E7DC564756E2164756E21",
|
|
10
10
|
"names": []
|
|
11
11
|
}
|
|
@@ -6,8 +6,10 @@ import {
|
|
|
6
6
|
ServiceManager,
|
|
7
7
|
checkDependencies,
|
|
8
8
|
installDependencies
|
|
9
|
-
} from "./index-
|
|
10
|
-
import
|
|
9
|
+
} from "./index-f6296kqk.js";
|
|
10
|
+
import {
|
|
11
|
+
logger
|
|
12
|
+
} from "./index-88ym10cs.js";
|
|
11
13
|
import {
|
|
12
14
|
Elysia,
|
|
13
15
|
t
|
|
@@ -124,6 +126,9 @@ function createRoutes(deps) {
|
|
|
124
126
|
if (body.workspaceId) {
|
|
125
127
|
db.setConfig("gateway-auth:workspaceId", body.workspaceId);
|
|
126
128
|
}
|
|
129
|
+
if (body.agentRecordId) {
|
|
130
|
+
db.setConfig("gateway-auth:agentRecordId", body.agentRecordId);
|
|
131
|
+
}
|
|
127
132
|
return { success: true, message: "Gateway auth configured" };
|
|
128
133
|
} catch (err) {
|
|
129
134
|
set.status = 500;
|
|
@@ -142,7 +147,8 @@ function createRoutes(deps) {
|
|
|
142
147
|
appClientSecret: t.Optional(t.String()),
|
|
143
148
|
clientId: t.Optional(t.String()),
|
|
144
149
|
clientSecret: t.Optional(t.String()),
|
|
145
|
-
workspaceId: t.Optional(t.String())
|
|
150
|
+
workspaceId: t.Optional(t.String()),
|
|
151
|
+
agentRecordId: t.Optional(t.String())
|
|
146
152
|
})
|
|
147
153
|
}).get("/gateway-auth", () => {
|
|
148
154
|
const config = gatewayClient.getConfig();
|
|
@@ -493,23 +499,169 @@ function registerCommands(program, _hostServices) {
|
|
|
493
499
|
register7(program);
|
|
494
500
|
}
|
|
495
501
|
|
|
502
|
+
// src/plugins/agent/auto-report.ts
|
|
503
|
+
import os2 from "os";
|
|
504
|
+
import { readFileSync as readFileSync2 } from "fs";
|
|
505
|
+
import { join as join2, dirname } from "path";
|
|
506
|
+
import { fileURLToPath } from "url";
|
|
507
|
+
var MAX_RETRIES = 10;
|
|
508
|
+
var RETRY_INTERVAL_MS = 3000;
|
|
509
|
+
var LOG_SOURCE = "auto-report";
|
|
510
|
+
var REGISTER_AGENT_MUTATION = `
|
|
511
|
+
mutation RegisterVibecontrolsAgent($input: RegisterVibecontrolsAgentInput!) {
|
|
512
|
+
registerVibecontrolsAgent(input: $input) {
|
|
513
|
+
id
|
|
514
|
+
name
|
|
515
|
+
hostname
|
|
516
|
+
tunnelUrl
|
|
517
|
+
tunnelStatus
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
`;
|
|
521
|
+
var UPDATE_AGENT_MUTATION = `
|
|
522
|
+
mutation UpdateVibecontrolsAgent($id: ID!, $input: UpdateVibecontrolsAgentInput!) {
|
|
523
|
+
updateVibecontrolsAgent(id: $id, input: $input) {
|
|
524
|
+
id
|
|
525
|
+
tunnelUrl
|
|
526
|
+
tunnelStatus
|
|
527
|
+
agentApiKey
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
`;
|
|
531
|
+
function getAgentVersion2() {
|
|
532
|
+
try {
|
|
533
|
+
const __dirname2 = dirname(fileURLToPath(import.meta.url));
|
|
534
|
+
const pkgPath = join2(__dirname2, "..", "..", "package.json");
|
|
535
|
+
const pkg = JSON.parse(readFileSync2(pkgPath, "utf8"));
|
|
536
|
+
return pkg.version || "0.0.0";
|
|
537
|
+
} catch {
|
|
538
|
+
return "0.0.0";
|
|
539
|
+
}
|
|
540
|
+
}
|
|
541
|
+
async function waitForTunnelUrl(serviceRegistry) {
|
|
542
|
+
for (let attempt = 1;attempt <= MAX_RETRIES; attempt++) {
|
|
543
|
+
const tunnelProvider = serviceRegistry.getProvider("tunnel");
|
|
544
|
+
if (tunnelProvider) {
|
|
545
|
+
const url = await tunnelProvider.getActiveTunnelUrl();
|
|
546
|
+
if (url) {
|
|
547
|
+
logger.debug(LOG_SOURCE, `Tunnel URL available on attempt ${attempt}: ${url}`);
|
|
548
|
+
return url;
|
|
549
|
+
}
|
|
550
|
+
}
|
|
551
|
+
if (attempt < MAX_RETRIES) {
|
|
552
|
+
logger.debug(LOG_SOURCE, `Tunnel URL not ready, retrying in ${RETRY_INTERVAL_MS / 1000}s (attempt ${attempt}/${MAX_RETRIES})`);
|
|
553
|
+
await new Promise((resolve) => setTimeout(resolve, RETRY_INTERVAL_MS));
|
|
554
|
+
}
|
|
555
|
+
}
|
|
556
|
+
logger.warn(LOG_SOURCE, `Tunnel URL not available after ${MAX_RETRIES} attempts`);
|
|
557
|
+
return null;
|
|
558
|
+
}
|
|
559
|
+
async function autoReportToBackend(db, serviceRegistry, apiKey) {
|
|
560
|
+
if (!gatewayClient.isConfigured()) {
|
|
561
|
+
logger.debug(LOG_SOURCE, "Gateway auth not configured \u2014 skipping auto-report");
|
|
562
|
+
return;
|
|
563
|
+
}
|
|
564
|
+
const workspaceId = db.getConfig("gateway-auth:workspaceId");
|
|
565
|
+
if (!workspaceId) {
|
|
566
|
+
logger.warn(LOG_SOURCE, "No workspaceId configured \u2014 skipping auto-report. " + "Configure via POST /api/agent/gateway-auth with workspaceId.");
|
|
567
|
+
return;
|
|
568
|
+
}
|
|
569
|
+
logger.info(LOG_SOURCE, "Starting auto-report to backend...");
|
|
570
|
+
try {
|
|
571
|
+
const tunnelUrl = await waitForTunnelUrl(serviceRegistry);
|
|
572
|
+
const hostname2 = os2.hostname();
|
|
573
|
+
const platform2 = os2.platform();
|
|
574
|
+
const arch2 = os2.arch();
|
|
575
|
+
const version = getAgentVersion2();
|
|
576
|
+
const agentRecordId = db.getConfig("gateway-auth:agentRecordId");
|
|
577
|
+
if (agentRecordId) {
|
|
578
|
+
logger.info(LOG_SOURCE, `Updating agent record ${agentRecordId} via workspace gateway`);
|
|
579
|
+
const result2 = await gatewayClient.workspaceQuery(UPDATE_AGENT_MUTATION, {
|
|
580
|
+
id: agentRecordId,
|
|
581
|
+
input: {
|
|
582
|
+
tunnelUrl: tunnelUrl || null,
|
|
583
|
+
tunnelStatus: tunnelUrl ? "CONNECTED" : "DISCONNECTED",
|
|
584
|
+
agentApiKey: apiKey,
|
|
585
|
+
agentVersion: version,
|
|
586
|
+
platform: `${platform2}/${arch2}`
|
|
587
|
+
}
|
|
588
|
+
});
|
|
589
|
+
if (result2.errors?.length) {
|
|
590
|
+
logger.warn(LOG_SOURCE, "Update mutation returned errors", {
|
|
591
|
+
errors: result2.errors.map((e) => e.message)
|
|
592
|
+
});
|
|
593
|
+
} else {
|
|
594
|
+
logger.info(LOG_SOURCE, "Agent record updated successfully", {
|
|
595
|
+
agentRecordId,
|
|
596
|
+
tunnelUrl
|
|
597
|
+
});
|
|
598
|
+
return;
|
|
599
|
+
}
|
|
600
|
+
}
|
|
601
|
+
logger.info(LOG_SOURCE, `Registering agent via workspace gateway (hostname: ${hostname2})`);
|
|
602
|
+
const result = await gatewayClient.workspaceQuery(REGISTER_AGENT_MUTATION, {
|
|
603
|
+
input: {
|
|
604
|
+
name: hostname2,
|
|
605
|
+
hostname: hostname2,
|
|
606
|
+
platform: `${platform2}/${arch2}`,
|
|
607
|
+
agentVersion: version,
|
|
608
|
+
tunnelUrl: tunnelUrl || null,
|
|
609
|
+
tunnelStatus: tunnelUrl ? "CONNECTED" : "DISCONNECTED",
|
|
610
|
+
agentApiKey: apiKey,
|
|
611
|
+
workspaceId
|
|
612
|
+
}
|
|
613
|
+
});
|
|
614
|
+
if (result.errors?.length) {
|
|
615
|
+
logger.error(LOG_SOURCE, "Register mutation failed", {
|
|
616
|
+
errors: result.errors.map((e) => e.message)
|
|
617
|
+
});
|
|
618
|
+
return;
|
|
619
|
+
}
|
|
620
|
+
const data = result.data;
|
|
621
|
+
const registeredId = data?.registerVibecontrolsAgent?.id;
|
|
622
|
+
if (registeredId) {
|
|
623
|
+
db.setConfig("gateway-auth:agentRecordId", registeredId);
|
|
624
|
+
logger.info(LOG_SOURCE, "Agent registered successfully", {
|
|
625
|
+
agentRecordId: registeredId,
|
|
626
|
+
name: data?.registerVibecontrolsAgent?.name,
|
|
627
|
+
tunnelUrl
|
|
628
|
+
});
|
|
629
|
+
}
|
|
630
|
+
} catch (err) {
|
|
631
|
+
logger.error(LOG_SOURCE, `Auto-report failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
632
|
+
}
|
|
633
|
+
}
|
|
634
|
+
|
|
496
635
|
// src/plugins/agent/index.ts
|
|
636
|
+
var capturedDb = null;
|
|
637
|
+
var capturedApiKey = null;
|
|
497
638
|
var vibePlugin = {
|
|
498
639
|
name: "agent",
|
|
499
|
-
version: "2.
|
|
500
|
-
description: "Core agent identity, system info, setup,
|
|
640
|
+
version: "2.3.0",
|
|
641
|
+
description: "Core agent identity, system info, setup, gateway authentication, and auto-report",
|
|
501
642
|
tags: ["backend", "cli"],
|
|
502
643
|
cliCommand: "agent",
|
|
503
644
|
apiPrefix: "/api/agent",
|
|
504
645
|
publicPaths: ["/identity", "/api-key", "/tunnel"],
|
|
505
|
-
createRoutes: (deps) =>
|
|
646
|
+
createRoutes: (deps) => {
|
|
647
|
+
capturedDb = deps.db;
|
|
648
|
+
capturedApiKey = process.env.API_KEY || "vibecontrols-agent-secret-key";
|
|
649
|
+
return createRoutes(deps);
|
|
650
|
+
},
|
|
506
651
|
onCliSetup: async (program, hostServices) => {
|
|
507
652
|
registerCommands(program, hostServices);
|
|
653
|
+
},
|
|
654
|
+
onServerReady: async (_app, hostServices) => {
|
|
655
|
+
if (capturedDb) {
|
|
656
|
+
autoReportToBackend(capturedDb, hostServices.serviceRegistry, capturedApiKey || "unknown").catch((err) => {
|
|
657
|
+
hostServices.logger.warn("agent-plugin", `Auto-report background task failed: ${err}`);
|
|
658
|
+
});
|
|
659
|
+
}
|
|
508
660
|
}
|
|
509
661
|
};
|
|
510
662
|
export {
|
|
511
663
|
vibePlugin
|
|
512
664
|
};
|
|
513
665
|
|
|
514
|
-
//# debugId=
|
|
515
|
-
//# sourceMappingURL=index-
|
|
666
|
+
//# debugId=FB296CA280CCBCD464756E2164756E21
|
|
667
|
+
//# sourceMappingURL=index-ftbphe7j.js.map
|
|
@@ -0,0 +1,20 @@
|
|
|
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/auto-report.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 if (body.agentRecordId) {\n db.setConfig(\"gateway-auth:agentRecordId\", body.agentRecordId);\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 agentRecordId: 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 * Auto-Report — Push agent details to backend after startup\n *\n * When gateway auth (OAuth2) is configured, automatically reports the\n * agent's tunnel URL, API key, hostname, platform, and version to the\n * backend via the `registerVibecontrolsAgent` mutation (upsert by hostname).\n *\n * This runs as a non-blocking background task from the `onServerReady` hook.\n * Retries are needed because the tunnel may not be ready immediately at\n * server start (Cloudflare tunnel starts in an external plugin).\n */\n\nimport os from \"node:os\";\nimport { readFileSync } from \"node:fs\";\nimport { join, dirname } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nimport { gatewayClient } from \"../../services/gateway-client.js\";\nimport { logger } from \"../../services/logger.js\";\nimport type { ServiceRegistry } from \"../../core/service-registry.js\";\nimport type { TunnelProvider } from \"../../core/providers/tunnel.provider.js\";\nimport type { AgentDatabase } from \"../../db/database.js\";\n\n// ── Constants ────────────────────────────────────────────────────────────\n\nconst MAX_RETRIES = 10;\nconst RETRY_INTERVAL_MS = 3_000;\nconst LOG_SOURCE = \"auto-report\";\n\n// ── GraphQL Mutations ────────────────────────────────────────────────────\n\nconst REGISTER_AGENT_MUTATION = `\n mutation RegisterVibecontrolsAgent($input: RegisterVibecontrolsAgentInput!) {\n registerVibecontrolsAgent(input: $input) {\n id\n name\n hostname\n tunnelUrl\n tunnelStatus\n }\n }\n`;\n\nconst UPDATE_AGENT_MUTATION = `\n mutation UpdateVibecontrolsAgent($id: ID!, $input: UpdateVibecontrolsAgentInput!) {\n updateVibecontrolsAgent(id: $id, input: $input) {\n id\n tunnelUrl\n tunnelStatus\n agentApiKey\n }\n }\n`;\n\n// ── Helpers ──────────────────────────────────────────────────────────────\n\nfunction getAgentVersion(): string {\n try {\n const __dirname = dirname(fileURLToPath(import.meta.url));\n const pkgPath = join(__dirname, \"..\", \"..\", \"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\nasync function waitForTunnelUrl(\n serviceRegistry: ServiceRegistry,\n): Promise<string | null> {\n for (let attempt = 1; attempt <= MAX_RETRIES; attempt++) {\n const tunnelProvider =\n serviceRegistry.getProvider<TunnelProvider>(\"tunnel\");\n if (tunnelProvider) {\n const url = await tunnelProvider.getActiveTunnelUrl();\n if (url) {\n logger.debug(\n LOG_SOURCE,\n `Tunnel URL available on attempt ${attempt}: ${url}`,\n );\n return url;\n }\n }\n\n if (attempt < MAX_RETRIES) {\n logger.debug(\n LOG_SOURCE,\n `Tunnel URL not ready, retrying in ${RETRY_INTERVAL_MS / 1000}s (attempt ${attempt}/${MAX_RETRIES})`,\n );\n await new Promise((resolve) => setTimeout(resolve, RETRY_INTERVAL_MS));\n }\n }\n\n logger.warn(\n LOG_SOURCE,\n `Tunnel URL not available after ${MAX_RETRIES} attempts`,\n );\n return null;\n}\n\n// ── Main Export ──────────────────────────────────────────────────────────\n\n/**\n * Auto-report agent details to the backend.\n * Called from the agent plugin's `onServerReady` hook.\n * Non-blocking — errors are logged but do not crash the agent.\n */\nexport async function autoReportToBackend(\n db: AgentDatabase,\n serviceRegistry: ServiceRegistry,\n apiKey: string,\n): Promise<void> {\n // Gate: only report if gateway auth is configured\n if (!gatewayClient.isConfigured()) {\n logger.debug(\n LOG_SOURCE,\n \"Gateway auth not configured — skipping auto-report\",\n );\n return;\n }\n\n const workspaceId = db.getConfig(\"gateway-auth:workspaceId\");\n if (!workspaceId) {\n logger.warn(\n LOG_SOURCE,\n \"No workspaceId configured — skipping auto-report. \" +\n \"Configure via POST /api/agent/gateway-auth with workspaceId.\",\n );\n return;\n }\n\n logger.info(LOG_SOURCE, \"Starting auto-report to backend...\");\n\n try {\n // Wait for tunnel URL (retries)\n const tunnelUrl = await waitForTunnelUrl(serviceRegistry);\n\n const hostname = os.hostname();\n const platform = os.platform();\n const arch = os.arch();\n const version = getAgentVersion();\n const agentRecordId = db.getConfig(\"gateway-auth:agentRecordId\");\n\n if (agentRecordId) {\n // We have a known backend record ID — use targeted update\n logger.info(\n LOG_SOURCE,\n `Updating agent record ${agentRecordId} via workspace gateway`,\n );\n\n const result = await gatewayClient.workspaceQuery(UPDATE_AGENT_MUTATION, {\n id: agentRecordId,\n input: {\n tunnelUrl: tunnelUrl || null,\n tunnelStatus: tunnelUrl ? \"CONNECTED\" : \"DISCONNECTED\",\n agentApiKey: apiKey,\n agentVersion: version,\n platform: `${platform}/${arch}`,\n },\n });\n\n if (result.errors?.length) {\n logger.warn(LOG_SOURCE, \"Update mutation returned errors\", {\n errors: result.errors.map((e) => e.message),\n });\n // Fall through to try register instead\n } else {\n logger.info(LOG_SOURCE, \"Agent record updated successfully\", {\n agentRecordId,\n tunnelUrl,\n });\n return;\n }\n }\n\n // No agentRecordId or update failed — use register (upsert by hostname)\n logger.info(\n LOG_SOURCE,\n `Registering agent via workspace gateway (hostname: ${hostname})`,\n );\n\n const result = await gatewayClient.workspaceQuery(REGISTER_AGENT_MUTATION, {\n input: {\n name: hostname,\n hostname,\n platform: `${platform}/${arch}`,\n agentVersion: version,\n tunnelUrl: tunnelUrl || null,\n tunnelStatus: tunnelUrl ? \"CONNECTED\" : \"DISCONNECTED\",\n agentApiKey: apiKey,\n workspaceId,\n },\n });\n\n if (result.errors?.length) {\n logger.error(LOG_SOURCE, \"Register mutation failed\", {\n errors: result.errors.map((e) => e.message),\n });\n return;\n }\n\n const data = result.data as\n | {\n registerVibecontrolsAgent?: { id: string; name: string };\n }\n | undefined;\n\n const registeredId = data?.registerVibecontrolsAgent?.id;\n if (registeredId) {\n // Persist the record ID for future targeted updates\n db.setConfig(\"gateway-auth:agentRecordId\", registeredId);\n logger.info(LOG_SOURCE, \"Agent registered successfully\", {\n agentRecordId: registeredId,\n name: data?.registerVibecontrolsAgent?.name,\n tunnelUrl,\n });\n }\n } catch (err) {\n logger.error(\n LOG_SOURCE,\n `Auto-report failed: ${err instanceof Error ? err.message : String(err)}`,\n );\n }\n}\n",
|
|
15
|
+
"/**\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 * Lifecycle:\n * createRoutes → captures db reference\n * onServerReady → triggers auto-report to backend (if gateway auth configured)\n */\n\nimport type { VibePlugin } from \"../../core/plugin-system.js\";\nimport type { PluginRouteDeps } from \"../../core/types.js\";\nimport type { AgentDatabase } from \"../../db/database.js\";\nimport { createRoutes } from \"./routes.js\";\nimport { registerCommands } from \"./commands.js\";\nimport { autoReportToBackend } from \"./auto-report.js\";\n\n// Captured from createRoutes deps — used by onServerReady\nlet capturedDb: AgentDatabase | null = null;\nlet capturedApiKey: string | null = null;\n\nexport const vibePlugin: VibePlugin = {\n name: \"agent\",\n version: \"2.3.0\",\n description:\n \"Core agent identity, system info, setup, gateway authentication, and auto-report\",\n tags: [\"backend\", \"cli\"],\n cliCommand: \"agent\",\n apiPrefix: \"/api/agent\",\n publicPaths: [\"/identity\", \"/api-key\", \"/tunnel\"],\n\n createRoutes: (deps: PluginRouteDeps) => {\n capturedDb = deps.db;\n // Store the API key so auto-report can send it to backend\n capturedApiKey = process.env.API_KEY || \"vibecontrols-agent-secret-key\";\n return createRoutes(deps);\n },\n\n onCliSetup: async (program, hostServices) => {\n registerCommands(program, hostServices);\n },\n\n onServerReady: async (_app, hostServices) => {\n // Fire-and-forget: auto-report agent details to backend\n // This is non-blocking so the server doesn't wait for it\n if (capturedDb) {\n autoReportToBackend(\n capturedDb,\n hostServices.serviceRegistry,\n capturedApiKey || \"unknown\",\n ).catch((err) => {\n hostServices.logger.warn(\n \"agent-plugin\",\n `Auto-report background task failed: ${err}`,\n );\n });\n }\n },\n};\n"
|
|
16
|
+
],
|
|
17
|
+
"mappings": "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",
|
|
18
|
+
"debugId": "FB296CA280CCBCD464756E2164756E21",
|
|
19
|
+
"names": []
|
|
20
|
+
}
|
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-7xd13pn3.js";
|
|
13
|
+
import"./plugin-system-w2727db6.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.7.1";
|
|
7
7
|
var main = "./dist/index.js";
|
|
8
8
|
var type = "module";
|
|
9
9
|
var bin = {
|
|
@@ -134,5 +134,5 @@ export {
|
|
|
134
134
|
author
|
|
135
135
|
};
|
|
136
136
|
|
|
137
|
-
//# debugId=
|
|
138
|
-
//# sourceMappingURL=package-
|
|
137
|
+
//# debugId=CF5F37FA4C0A09C664756E2164756E21
|
|
138
|
+
//# sourceMappingURL=package-a1mt704j.js.map
|
|
@@ -64,7 +64,7 @@ class PluginManager {
|
|
|
64
64
|
}
|
|
65
65
|
async loadCorePlugins() {
|
|
66
66
|
const coreModules = await Promise.allSettled([
|
|
67
|
-
import("./index-
|
|
67
|
+
import("./index-ftbphe7j.js"),
|
|
68
68
|
import("./index-rdm6e3rr.js"),
|
|
69
69
|
import("./index-4nsdre0j.js"),
|
|
70
70
|
import("./index-3rjnbp97.js"),
|
|
@@ -74,7 +74,7 @@ class PluginManager {
|
|
|
74
74
|
import("./index-6vry08rz.js"),
|
|
75
75
|
import("./index-wmvkjcjj.js"),
|
|
76
76
|
import("./index-30p492yv.js"),
|
|
77
|
-
import("./index-
|
|
77
|
+
import("./index-5hb62xkm.js"),
|
|
78
78
|
import("./index-hefqxwht.js"),
|
|
79
79
|
import("./index-a9g7hbj9.js")
|
|
80
80
|
]);
|
|
@@ -504,4 +504,4 @@ class PluginManager {
|
|
|
504
504
|
export { PluginManager };
|
|
505
505
|
|
|
506
506
|
//# debugId=8DD2577C7DC4CE6B64756E2164756E21
|
|
507
|
-
//# sourceMappingURL=plugin-system-
|
|
507
|
+
//# sourceMappingURL=plugin-system-w2727db6.js.map
|