@burdenoff/vibe-agent 2.4.0 → 2.6.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/README.md +30 -21
- package/dist/{app-8dgv7s3y.js → app-6d1xq46v.js} +5 -5
- package/dist/{app-8dgv7s3y.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-wjsms9jw.js → index-tjymws9j.js} +2 -2
- package/dist/{index-wjsms9jw.js.map → index-tjymws9j.js.map} +2 -2
- 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-4andgzzt.js} +5 -5
- package/dist/{package-04nkt49b.js.map → package-4andgzzt.js.map} +1 -1
- package/dist/{plugin-system-bc4rvt1c.js → plugin-system-x4tbwzyq.js} +4 -4
- package/package.json +3 -3
- package/dist/index-05qfwz8r.js.map +0 -10
- package/dist/index-x82yjxw7.js +0 -287
- package/dist/index-x82yjxw7.js.map +0 -13
- /package/dist/{plugin-system-bc4rvt1c.js.map → plugin-system-x4tbwzyq.js.map} +0 -0
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/plugins/plugin-mgr/routes.ts", "../src/cli/commands/plugin.cmd.ts", "../src/plugins/plugin-mgr/commands.ts", "../src/plugins/plugin-mgr/index.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"/**\n * Plugin Manager Routes\n *\n * Plugin management — list, install, remove, reload, available catalog.\n *\n * Endpoints:\n * GET /api/plugins — List all installed plugins\n * GET /api/plugins/available — List available plugins from catalog\n * POST /api/plugins/install — Install a plugin by package name\n * POST /api/plugins/remove — Remove (uninstall) a plugin\n * POST /api/plugins/reload — Hot-reload all plugins\n */\n\nimport { Elysia, t } from \"elysia\";\n\nimport type { AvailablePlugin, PluginRouteDeps } from \"../../core/types.js\";\n\n// ── Available Plugins Catalog ───────────────────────────────────────────\n\nconst AVAILABLE_PLUGINS: AvailablePlugin[] = [\n {\n packageName: \"@burdenoff/vibe-plugin-tunnel-cloudflare\",\n name: \"tunnel-cloudflare\",\n description: \"Cloudflare Tunnel provider for remote access\",\n cliCommand: \"tunnel\",\n apiPrefix: \"/api/tunnel-cloudflare\",\n installed: false,\n category: \"tunnel\",\n },\n {\n packageName: \"@burdenoff/vibe-plugin-session-tmux\",\n name: \"session-tmux\",\n description: \"tmux session provider for terminal management\",\n cliCommand: \"session\",\n apiPrefix: \"/api/session-tmux\",\n installed: false,\n category: \"session\",\n },\n {\n packageName: \"@burdenoff/vibe-plugin-ssh\",\n name: \"ssh\",\n description: \"SSH connection management and port forwarding\",\n cliCommand: \"ssh\",\n apiPrefix: \"/api/ssh\",\n installed: false,\n category: \"tool\",\n },\n {\n packageName: \"@burdenoff/vibe-plugin-ai\",\n name: \"ai\",\n description: \"AI tool management and integration\",\n cliCommand: \"ai\",\n apiPrefix: undefined,\n installed: false,\n category: \"integration\",\n },\n {\n packageName: \"@burdenoff/vibe-plugin-ui-ssh\",\n name: \"ui-ssh\",\n description: \"Web UI for SSH connection management and port forwarding\",\n cliCommand: undefined,\n apiPrefix: undefined,\n installed: false,\n category: \"frontend\",\n },\n {\n packageName: \"@burdenoff/vibe-plugin-ui-ai\",\n name: \"ui-ai\",\n description: \"Web UI for AI tool catalog and detection status\",\n cliCommand: undefined,\n apiPrefix: undefined,\n installed: false,\n category: \"frontend\",\n },\n];\n\n// ── Routes ──────────────────────────────────────────────────────────────\n\nexport function createRoutes(deps: PluginRouteDeps) {\n const { pluginManager } = deps;\n\n return (\n new Elysia()\n // List all installed plugins\n .get(\"/\", () => {\n const plugins = pluginManager.getPluginDetails();\n return { plugins, count: plugins.length };\n })\n\n // List available plugins from catalog\n .get(\"/available\", () => {\n const installed = pluginManager.getPluginDetails();\n const installedNames = new Set(installed.map((p) => p.packageName));\n\n return {\n plugins: AVAILABLE_PLUGINS.map((p) => ({\n ...p,\n installed: installedNames.has(p.packageName),\n })),\n };\n })\n\n // Install a plugin by package name\n .post(\n \"/install\",\n async ({ body, set }) => {\n if (!body.packageName || typeof body.packageName !== \"string\") {\n set.status = 400;\n return { error: \"Missing required field: packageName\" };\n }\n\n try {\n await pluginManager.install(body.packageName);\n return {\n success: true,\n message: `Plugin ${body.packageName} installed and loaded successfully`,\n };\n } catch (err) {\n set.status = 500;\n return { error: \"Failed to install plugin\", details: String(err) };\n }\n },\n {\n body: t.Object({\n packageName: t.String(),\n }),\n },\n )\n\n // Remove (uninstall) a plugin\n .post(\n \"/remove\",\n async ({ body, set }) => {\n if (!body.packageName || typeof body.packageName !== \"string\") {\n set.status = 400;\n return { error: \"Missing required field: packageName\" };\n }\n\n try {\n await pluginManager.remove(body.packageName);\n return {\n success: true,\n message: `Plugin ${body.packageName} removed successfully`,\n };\n } catch (err) {\n set.status = 500;\n return { error: \"Failed to remove plugin\", details: String(err) };\n }\n },\n {\n body: t.Object({\n packageName: t.String(),\n }),\n },\n )\n\n // Hot-reload all plugins\n // TODO: reloadAll needs app + hostServices — for now we just loadAll again\n .post(\"/reload\", async ({ set }) => {\n try {\n await pluginManager.dispatchServerStop();\n await pluginManager.loadAll();\n const plugins = pluginManager.getPluginDetails();\n return {\n success: true,\n plugins,\n message: `Reloaded ${plugins.length} plugin(s)`,\n };\n } catch (err) {\n set.status = 500;\n return { error: \"Failed to reload plugins\", details: String(err) };\n }\n })\n );\n}\n",
|
|
6
|
+
"import { Command } from \"commander\";\nimport { mkdirSync, writeFileSync, existsSync } from \"node:fs\";\nimport { join, resolve } from \"node:path\";\nimport {\n getAgentUrl,\n apiGet,\n apiPost,\n fail,\n success,\n info,\n warn,\n header,\n kv,\n formatTable,\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(\"plugin\").description(\"Manage plugins\");\n\n // plugin list\n cmd\n .command(\"list\")\n .description(\"List installed plugins\")\n .option(\"--agent-url <url>\", \"Agent URL\", DEFAULT_AGENT_URL)\n .action(async (options) => {\n try {\n const url = getAgentUrl(options);\n let plugins: any[];\n try {\n const data = await apiGet<{ plugins: any[]; count: number }>(\n url,\n \"/api/plugins\",\n );\n plugins = data.plugins || [];\n } catch {\n warn(\"Agent not reachable. Attempting local plugin registry...\");\n try {\n const { PluginManager } =\n await import(\"../../core/plugin-system.js\");\n const pm = new PluginManager();\n plugins = pm.getPluginDetails() || [];\n } catch {\n fail(\"Could not list plugins from agent or local registry.\");\n return;\n }\n }\n if (!plugins || plugins.length === 0) {\n info(\"No plugins installed.\");\n return;\n }\n header(\"Installed Plugins\");\n formatTable(\n plugins.map((p: any) => ({\n Name: p.name || p.package || \"-\",\n Version: p.version || \"-\",\n Status: p.status || p.enabled ? \"enabled\" : \"disabled\",\n Description: p.description || \"-\",\n })),\n );\n } catch (err: any) {\n fail(err.message);\n }\n });\n\n // plugin install\n cmd\n .command(\"install\")\n .description(\"Install a plugin\")\n .argument(\"<package>\", \"NPM package name to install\")\n .option(\"--agent-url <url>\", \"Agent URL\", DEFAULT_AGENT_URL)\n .action(async (packageName: string, options) => {\n try {\n const url = getAgentUrl(options);\n try {\n const result = await apiPost<any>(url, \"/api/plugins/install\", {\n package: packageName,\n });\n success(`Plugin \"${packageName}\" installed.`);\n if (result?.version) kv(\"Version\", result.version);\n } catch {\n warn(\"Agent not reachable. Attempting local install...\");\n try {\n const { PluginManager } =\n await import(\"../../core/plugin-system.js\");\n const pm = new PluginManager();\n await pm.install(packageName);\n success(`Plugin \"${packageName}\" installed locally.`);\n } catch (localErr: any) {\n fail(\n `Could not install plugin via agent or locally: ${localErr.message}`,\n );\n }\n }\n } catch (err: any) {\n fail(err.message);\n }\n });\n\n // plugin remove\n cmd\n .command(\"remove\")\n .description(\"Remove a plugin\")\n .argument(\"<package>\", \"NPM package name to remove\")\n .option(\"--agent-url <url>\", \"Agent URL\", DEFAULT_AGENT_URL)\n .action(async (packageName: string, options) => {\n try {\n const url = getAgentUrl(options);\n try {\n await apiPost<any>(url, \"/api/plugins/remove\", {\n package: packageName,\n });\n success(`Plugin \"${packageName}\" removed.`);\n } catch {\n warn(\"Agent not reachable. Attempting local removal...\");\n try {\n const { PluginManager } =\n await import(\"../../core/plugin-system.js\");\n const pm = new PluginManager();\n await pm.remove(packageName);\n success(`Plugin \"${packageName}\" removed locally.`);\n } catch (localErr: any) {\n fail(\n `Could not remove plugin via agent or locally: ${localErr.message}`,\n );\n }\n }\n } catch (err: any) {\n fail(err.message);\n }\n });\n\n // plugin reload\n cmd\n .command(\"reload\")\n .description(\"Reload all plugins\")\n .option(\"--agent-url <url>\", \"Agent URL\", DEFAULT_AGENT_URL)\n .action(async (options) => {\n try {\n const url = getAgentUrl(options);\n await apiPost<any>(url, \"/api/plugins/reload\", {});\n success(\"Plugins reloaded.\");\n } catch (err: any) {\n fail(err.message);\n }\n });\n\n // plugin available\n cmd\n .command(\"available\")\n .description(\"Show available plugins\")\n .option(\"--agent-url <url>\", \"Agent URL\", DEFAULT_AGENT_URL)\n .action(async (options) => {\n try {\n const url = getAgentUrl(options);\n const availData = await apiGet<{ plugins: any[] }>(\n url,\n \"/api/plugins/available\",\n );\n const plugins = availData.plugins || [];\n if (!plugins || plugins.length === 0) {\n info(\"No available plugins found.\");\n return;\n }\n header(\"Available Plugins\");\n formatTable(\n plugins.map((p: any) => ({\n Name: p.name || p.package || \"-\",\n Version: p.version || p.latestVersion || \"-\",\n Description: p.description || \"-\",\n })),\n );\n } catch (err: any) {\n fail(err.message);\n }\n });\n\n // plugin create — scaffold a new plugin project\n cmd\n .command(\"create\")\n .description(\"Scaffold a new plugin project\")\n .argument(\"<name>\", 'Plugin name (e.g. \"docker\" → vibe-plugin-docker)')\n .option(\"-d, --dir <directory>\", \"Parent directory\", \".\")\n .option(\n \"--tag <tag>\",\n \"Plugin tag (backend, frontend, cli, provider, adapter, integration)\",\n \"backend\",\n )\n .option(\"--with-ui\", \"Include a companion UI plugin scaffold\", false)\n .action(async (name: string, options) => {\n try {\n const pluginName = name.startsWith(\"vibe-plugin-\")\n ? name\n : `vibe-plugin-${name}`;\n const dir = resolve(options.dir, pluginName);\n\n if (existsSync(dir)) {\n fail(`Directory \"${dir}\" already exists.`);\n return;\n }\n\n info(`Scaffolding ${pluginName}...`);\n\n // Create directory structure\n mkdirSync(join(dir, \"src\"), { recursive: true });\n mkdirSync(join(dir, \"dist\"), { recursive: true });\n\n const tag = options.tag as string;\n const description = `VibeControls plugin: ${name}`;\n\n // package.json\n const packageJson = {\n name: `@burdenoff/${pluginName}`,\n version: \"0.1.0\",\n main: \"./dist/index.js\",\n type: \"module\",\n engines: { bun: \">=1.3.0\" },\n scripts: {\n build: \"bun build ./src/index.ts --outdir ./dist --target bun\",\n lint: \"eslint ./src\",\n format: \"bunx prettier . --write\",\n \"format:check\": \"bunx prettier . --check\",\n \"type:check\": \"tsc --noEmit\",\n clean: \"rimraf dist\",\n prebuild: \"bun run clean\",\n prepublishOnly: \"bun run build\",\n sanity:\n \"bun run format:check && bun run lint && bun run type:check && bun run build\",\n },\n keywords: [\"vibecontrols\", \"vibe\", \"vibe-plugin\", name, \"bun\"],\n author: {\n name: \"Your Name\",\n email: \"you@example.com\",\n },\n license: \"SEE LICENSE IN LICENSE\",\n description,\n devDependencies: {\n \"@types/bun\": \"^1.2.16\",\n \"bun-types\": \"^1.3.9\",\n commander: \"^14.0.3\",\n eslint: \"^9.30.1\",\n prettier: \"^3.6.2\",\n rimraf: \"^6.0.1\",\n typescript: \"^5.8.3\",\n \"typescript-eslint\": \"^8.56.0\",\n },\n peerDependencies: {\n \"@burdenoff/vibe-agent\": \">=2.0.0\",\n },\n peerDependenciesMeta: {\n \"@burdenoff/vibe-agent\": { optional: true },\n },\n publishConfig: {\n access: \"public\",\n registry: \"https://registry.npmjs.org/\",\n },\n files: [\"dist/**/*\", \"README.md\", \"LICENSE\"],\n };\n writeFileSync(\n join(dir, \"package.json\"),\n JSON.stringify(packageJson, null, 2) + \"\\n\",\n );\n\n // tsconfig.json\n const tsconfig = {\n compilerOptions: {\n target: \"ES2022\",\n module: \"ES2022\",\n moduleResolution: \"bundler\",\n types: [\"bun-types\"],\n strict: true,\n esModuleInterop: true,\n skipLibCheck: true,\n outDir: \"./dist\",\n rootDir: \"./src\",\n declaration: true,\n sourceMap: true,\n },\n include: [\"src/**/*.ts\"],\n exclude: [\"node_modules\", \"dist\"],\n };\n writeFileSync(\n join(dir, \"tsconfig.json\"),\n JSON.stringify(tsconfig, null, 2) + \"\\n\",\n );\n\n // .gitignore\n writeFileSync(\n join(dir, \".gitignore\"),\n [\n \"node_modules/\",\n \"dist/\",\n \"bun.lock\",\n \".env\",\n \".env.local\",\n \"*.tgz\",\n ].join(\"\\n\") + \"\\n\",\n );\n\n // src/index.ts — main plugin entry\n const cliCmd = name.replace(/[^a-z0-9-]/gi, \"-\").toLowerCase();\n const indexTs = `import type { Command } from \"commander\";\n\n/**\n * @burdenoff/${pluginName}\n *\n * ${description}\n */\n\n// ── Plugin Interfaces ────────────────────────────────────────────────────────\n\nexport interface HostServices {\n logger?: {\n info: (msg: string) => void;\n warn: (msg: string) => void;\n error: (msg: string) => void;\n debug: (msg: string) => void;\n };\n config?: Record<string, unknown>;\n}\n\nexport interface VibePlugin {\n name: string;\n version: string;\n description: string;\n tags?: Array<\n \"backend\" | \"frontend\" | \"cli\" | \"provider\" | \"adapter\" | \"integration\"\n >;\n cliCommand: string;\n onCliSetup: (program: Command, hostServices?: HostServices) => void;\n}\n\n// ── Plugin Implementation ────────────────────────────────────────────────────\n\nconst plugin: VibePlugin = {\n name: \"${pluginName}\",\n version: \"0.1.0\",\n description: \"${description}\",\n tags: [\"${tag}\"],\n cliCommand: \"${cliCmd}\",\n\n onCliSetup(program: Command, _hostServices?: HostServices): void {\n const cmd = program\n .command(\"${cliCmd}\")\n .description(\"${description}\");\n\n cmd\n .command(\"status\")\n .description(\"Show ${name} status\")\n .action(() => {\n console.log(\"${pluginName} is ready.\");\n });\n\n cmd\n .command(\"info\")\n .description(\"Show plugin info\")\n .action(() => {\n console.log(JSON.stringify({\n name: plugin.name,\n version: plugin.version,\n description: plugin.description,\n tags: plugin.tags,\n }, null, 2));\n });\n },\n};\n\nexport default plugin;\n`;\n writeFileSync(join(dir, \"src\", \"index.ts\"), indexTs);\n\n // README.md\n const readme = `# ${pluginName}\n\n${description}\n\n## Installation\n\n\\`\\`\\`bash\nvibe plugin install @burdenoff/${pluginName}\n\\`\\`\\`\n\n## Usage\n\n\\`\\`\\`bash\nvibe ${cliCmd} status\nvibe ${cliCmd} info\n\\`\\`\\`\n\n## Development\n\n\\`\\`\\`bash\nbun install\nbun run build\nbun run sanity\n\\`\\`\\`\n\n## Publishing\n\n\\`\\`\\`bash\nbun run build\nnpm publish\n\\`\\`\\`\n`;\n writeFileSync(join(dir, \"README.md\"), readme);\n\n success(`Created ${pluginName} at ${dir}`);\n kv(\"Plugin Name\", `@burdenoff/${pluginName}`);\n kv(\"CLI Command\", `vibe ${cliCmd}`);\n kv(\"Tag\", tag);\n\n info(\"\\nNext steps:\");\n info(` cd ${pluginName}`);\n info(\" bun install\");\n info(\" bun run build\");\n info(` vibe plugin install . # install locally from this directory`);\n\n // Optionally scaffold UI plugin\n if (options.withUi) {\n const uiName = `${pluginName.replace(\"vibe-plugin-\", \"vibe-plugin-ui-\")}`;\n const uiDir = resolve(options.dir, uiName);\n\n if (existsSync(uiDir)) {\n warn(`UI directory \"${uiDir}\" already exists, skipping.`);\n } else {\n mkdirSync(join(uiDir, \"src\"), { recursive: true });\n mkdirSync(join(uiDir, \"public\"), { recursive: true });\n\n const uiPackageJson = {\n name: `@burdenoff/${uiName}`,\n version: \"0.1.0\",\n private: false,\n type: \"module\",\n scripts: {\n dev: \"vite --port 5180\",\n build: \"tsc && vite build\",\n preview: \"vite preview\",\n lint: \"eslint ./src\",\n format: \"bunx prettier . --write\",\n \"format:check\": \"bunx prettier . --check\",\n \"type:check\": \"tsc --noEmit\",\n sanity:\n \"bun run format:check && bun run lint && bun run type:check && bun run build\",\n },\n keywords: [\"vibecontrols\", \"vibe-plugin\", \"ui\", name],\n author: { name: \"Your Name\", email: \"you@example.com\" },\n license: \"SEE LICENSE IN LICENSE\",\n description: `UI for ${pluginName}`,\n dependencies: {\n react: \"^19.0.0\",\n \"react-dom\": \"^19.0.0\",\n },\n devDependencies: {\n \"@types/react\": \"^19.0.0\",\n \"@types/react-dom\": \"^19.0.0\",\n \"@vitejs/plugin-react\": \"^4.5.2\",\n typescript: \"^5.8.3\",\n vite: \"^7.0.0\",\n },\n publishConfig: {\n access: \"public\",\n registry: \"https://registry.npmjs.org/\",\n },\n files: [\"dist/**/*\", \"README.md\"],\n };\n writeFileSync(\n join(uiDir, \"package.json\"),\n JSON.stringify(uiPackageJson, null, 2) + \"\\n\",\n );\n\n const uiIndex = `import React from \"react\";\nimport ReactDOM from \"react-dom/client\";\nimport App from \"./App\";\n\nReactDOM.createRoot(document.getElementById(\"root\")!).render(\n <React.StrictMode>\n <App />\n </React.StrictMode>\n);\n`;\n writeFileSync(join(uiDir, \"src\", \"main.tsx\"), uiIndex);\n\n const uiApp = `import { useState, useEffect } from \"react\";\n\nconst DARK_BG = \"#0d1117\";\nconst DARK_TEXT = \"#e6edf3\";\n\nexport default function App() {\n const [apiKey, setApiKey] = useState<string | null>(null);\n const [status, setStatus] = useState(\"loading...\");\n\n useEffect(() => {\n // Auth via postMessage (iframe) or URL param (new tab)\n const params = new URLSearchParams(window.location.search);\n const key = params.get(\"apiKey\");\n if (key) {\n setApiKey(key);\n setStatus(\"connected\");\n return;\n }\n\n const handler = (e: MessageEvent) => {\n if (e.data?.type === \"vibe-auth\" && e.data.apiKey) {\n setApiKey(e.data.apiKey);\n setStatus(\"connected\");\n }\n };\n window.addEventListener(\"message\", handler);\n return () => window.removeEventListener(\"message\", handler);\n }, []);\n\n return (\n <div style={{ background: DARK_BG, color: DARK_TEXT, minHeight: \"100vh\", padding: 24, fontFamily: \"system-ui\" }}>\n <h1>${name} UI</h1>\n <p>Status: {status}</p>\n {apiKey && <p style={{ color: \"#3fb950\" }}>Authenticated</p>}\n </div>\n );\n}\n`;\n writeFileSync(join(uiDir, \"src\", \"App.tsx\"), uiApp);\n\n const indexHtml = `<!DOCTYPE html>\n<html lang=\"en\">\n<head><meta charset=\"UTF-8\" /><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" /><title>${name} UI</title></head>\n<body><div id=\"root\"></div><script type=\"module\" src=\"/src/main.tsx\"></script></body>\n</html>`;\n writeFileSync(join(uiDir, \"index.html\"), indexHtml);\n\n success(`Created UI plugin ${uiName} at ${uiDir}`);\n }\n }\n } catch (err: any) {\n fail(err.message);\n }\n });\n}\n",
|
|
7
|
+
"import type { Command } from \"commander\";\nimport type { HostServices } from \"../../core/plugin-system.js\";\nimport { register as registerPlugin } from \"../../cli/commands/plugin.cmd.js\";\n\nexport function registerCommands(\n program: Command,\n _hostServices: HostServices,\n): void {\n registerPlugin(program);\n}\n",
|
|
8
|
+
"import type { VibePlugin } from \"../../core/plugin-system.js\";\nimport type { PluginRouteDeps } from \"../../core/types.js\";\nimport { createRoutes } from \"./routes.js\";\nimport { registerCommands } from \"./commands.js\";\n\nexport const vibePlugin: VibePlugin = {\n name: \"plugin-mgr\",\n version: \"2.2.0\",\n description: \"Plugin lifecycle management — install, remove, reload, catalog\",\n tags: [\"backend\", \"cli\"],\n cliCommand: \"plugin\",\n apiPrefix: \"/api/plugins\",\n createRoutes: (deps: PluginRouteDeps) => createRoutes(deps),\n onCliSetup: async (program, hostServices) => {\n registerCommands(program, hostServices);\n },\n};\n"
|
|
9
|
+
],
|
|
10
|
+
"mappings": "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",
|
|
11
|
+
"debugId": "77470ADF30C64CDD64756E2164756E21",
|
|
12
|
+
"names": []
|
|
13
|
+
}
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env bun
|
|
2
2
|
// @bun
|
|
3
3
|
import"./index-atjhkm74.js";
|
|
4
|
-
import"./index-
|
|
4
|
+
import"./index-jerwk237.js";
|
|
5
5
|
import {
|
|
6
6
|
logger
|
|
7
7
|
} from "./index-88ym10cs.js";
|
|
@@ -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-6d1xq46v.js";
|
|
13
|
+
import"./plugin-system-x4tbwzyq.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.6.0";
|
|
7
7
|
var main = "./dist/index.js";
|
|
8
8
|
var type = "module";
|
|
9
9
|
var bin = {
|
|
@@ -47,8 +47,8 @@ var author = {
|
|
|
47
47
|
var license = "SEE LICENSE IN LICENSE";
|
|
48
48
|
var description = "VibeControls Agent CLI - Remote development environment management with terminal multiplexing, tunnels, and extensible plugins. Powered by Bun + Elysia.";
|
|
49
49
|
var dependencies = {
|
|
50
|
-
"@burdenoff/vibe-plugin-ai": "
|
|
51
|
-
"@burdenoff/vibe-plugin-ssh": "2.
|
|
50
|
+
"@burdenoff/vibe-plugin-ai": "^3.1.0",
|
|
51
|
+
"@burdenoff/vibe-plugin-ssh": "^2.2.0",
|
|
52
52
|
"@elysiajs/cors": "^1.3.1",
|
|
53
53
|
commander: "^14.0.3",
|
|
54
54
|
elysia: "^1.3.2"
|
|
@@ -134,5 +134,5 @@ export {
|
|
|
134
134
|
author
|
|
135
135
|
};
|
|
136
136
|
|
|
137
|
-
//# debugId=
|
|
138
|
-
//# sourceMappingURL=package-
|
|
137
|
+
//# debugId=5863818052E0872D64756E2164756E21
|
|
138
|
+
//# sourceMappingURL=package-4andgzzt.js.map
|
|
@@ -64,9 +64,9 @@ class PluginManager {
|
|
|
64
64
|
}
|
|
65
65
|
async loadCorePlugins() {
|
|
66
66
|
const coreModules = await Promise.allSettled([
|
|
67
|
-
import("./index-
|
|
67
|
+
import("./index-tjymws9j.js"),
|
|
68
68
|
import("./index-rdm6e3rr.js"),
|
|
69
|
-
import("./index-
|
|
69
|
+
import("./index-4nsdre0j.js"),
|
|
70
70
|
import("./index-3rjnbp97.js"),
|
|
71
71
|
import("./index-c7zy3n33.js"),
|
|
72
72
|
import("./index-fm6gqenc.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-wxxv9rec.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-x4tbwzyq.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@burdenoff/vibe-agent",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.6.0",
|
|
4
4
|
"main": "./dist/index.js",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -44,8 +44,8 @@
|
|
|
44
44
|
"license": "SEE LICENSE IN LICENSE",
|
|
45
45
|
"description": "VibeControls Agent CLI - Remote development environment management with terminal multiplexing, tunnels, and extensible plugins. Powered by Bun + Elysia.",
|
|
46
46
|
"dependencies": {
|
|
47
|
-
"@burdenoff/vibe-plugin-ai": "
|
|
48
|
-
"@burdenoff/vibe-plugin-ssh": "2.
|
|
47
|
+
"@burdenoff/vibe-plugin-ai": "^3.1.0",
|
|
48
|
+
"@burdenoff/vibe-plugin-ssh": "^2.2.0",
|
|
49
49
|
"@elysiajs/cors": "^1.3.1",
|
|
50
50
|
"commander": "^14.0.3",
|
|
51
51
|
"elysia": "^1.3.2"
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/services/gateway-client.ts"],
|
|
4
|
-
"sourcesContent": [
|
|
5
|
-
"/**\n * Gateway Client — Authenticated GraphQL client for public API gateways\n *\n * After an agent is created via the UI, the MFE configures the agent with\n * gateway credentials (clientId + clientSecret) via POST /api/agent/gateway-auth.\n * This client uses those credentials to:\n *\n * 1. Authenticate via `authenticateApp` mutation (Client Credentials flow)\n * 2. Cache the access token and auto-refresh before expiry\n * 3. Make authenticated GraphQL calls to both workspace and global supergraphs\n */\n\nimport { logger } from \"./logger.js\";\n\n// ── Types ────────────────────────────────────────────────────────────────\n\nexport interface GatewayConfig {\n globalGatewayUrl: string;\n workspaceGatewayUrl?: string;\n clientId: string;\n clientSecret: string;\n scopes?: string[];\n}\n\ninterface TokenCache {\n accessToken: string;\n expiresAt: number;\n scopes: string[];\n}\n\ninterface GraphQLResponse<T = Record<string, unknown>> {\n data?: T;\n errors?: Array<{ message: string; extensions?: Record<string, unknown> }>;\n}\n\n// ── Client ───────────────────────────────────────────────────────────────\n\nclass GatewayClient {\n private config: GatewayConfig | null = null;\n private token: TokenCache | null = null;\n\n configure(config: GatewayConfig): void {\n this.config = config;\n this.token = null;\n logger.info(\"gateway-client\", \"Gateway client configured\", {\n globalGatewayUrl: config.globalGatewayUrl,\n clientId: config.clientId,\n });\n }\n\n isConfigured(): boolean {\n return this.config !== null;\n }\n\n getConfig(): Omit<GatewayConfig, \"clientSecret\"> | null {\n if (!this.config) return null;\n const { clientSecret: _, ...rest } = this.config;\n return rest;\n }\n\n async globalQuery<T = Record<string, unknown>>(\n query: string,\n variables?: Record<string, unknown>,\n ): Promise<GraphQLResponse<T>> {\n return this.executeQuery<T>(\"global\", query, variables);\n }\n\n async workspaceQuery<T = Record<string, unknown>>(\n query: string,\n variables?: Record<string, unknown>,\n ): Promise<GraphQLResponse<T>> {\n return this.executeQuery<T>(\"workspaces\", query, variables);\n }\n\n // ── Internal ──────────────────────────────────────────────────────\n\n private async executeQuery<T>(\n supergraph: \"global\" | \"workspaces\",\n query: string,\n variables?: Record<string, unknown>,\n ): Promise<GraphQLResponse<T>> {\n if (!this.config) {\n throw new Error(\"Gateway client not configured. Call configure() first.\");\n }\n\n const token = await this.ensureToken();\n const baseUrl =\n supergraph === \"workspaces\"\n ? (this.config.workspaceGatewayUrl ?? this.config.globalGatewayUrl)\n : this.config.globalGatewayUrl;\n\n const url = `${baseUrl.replace(/\\/$/, \"\")}/${supergraph}/graphql`;\n\n logger.debug(\"gateway-client\", `GraphQL ${supergraph} request`, {\n url,\n queryLength: query.length,\n });\n\n const response = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${token}`,\n },\n body: JSON.stringify({ query, variables }),\n });\n\n const result = (await response.json()) as GraphQLResponse<T>;\n\n if (result.errors?.length) {\n logger.warn(\"gateway-client\", \"GraphQL errors\", {\n supergraph,\n errors: result.errors.map((e) => e.message),\n });\n }\n\n return result;\n }\n\n private async ensureToken(): Promise<string> {\n if (this.token && this.token.expiresAt > Date.now() + 60_000) {\n return this.token.accessToken;\n }\n return this.authenticate();\n }\n\n private async authenticate(): Promise<string> {\n if (!this.config) {\n throw new Error(\"Gateway client not configured.\");\n }\n\n logger.info(\"gateway-client\", \"Authenticating with gateway\", {\n clientId: this.config.clientId,\n });\n\n const url = `${this.config.globalGatewayUrl.replace(/\\/$/, \"\")}/global/graphql`;\n\n const response = await fetch(url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n query: `\n mutation AuthenticateApp($input: AuthenticateAppInput!) {\n authenticateApp(input: $input) {\n accessToken\n tokenType\n expiresIn\n scopes\n }\n }\n `,\n variables: {\n input: {\n clientId: this.config.clientId,\n clientSecret: this.config.clientSecret,\n scopes: this.config.scopes ?? [],\n },\n },\n }),\n });\n\n const result = (await response.json()) as GraphQLResponse<{\n authenticateApp: {\n accessToken: string;\n tokenType: string;\n expiresIn: number;\n scopes: string[];\n };\n }>;\n\n if (result.errors?.length || !result.data?.authenticateApp) {\n const msg = result.errors?.[0]?.message ?? \"Authentication failed\";\n logger.error(\"gateway-client\", `Authentication failed: ${msg}`);\n throw new Error(`Gateway authentication failed: ${msg}`);\n }\n\n const auth = result.data.authenticateApp;\n this.token = {\n accessToken: auth.accessToken,\n expiresAt: Date.now() + auth.expiresIn * 1000,\n scopes: auth.scopes,\n };\n\n logger.info(\"gateway-client\", \"Authenticated successfully\", {\n expiresIn: auth.expiresIn,\n scopes: auth.scopes,\n });\n\n return this.token.accessToken;\n }\n}\n\n// ── Singleton Export ──────────────────────────────────────────────────────\n\nexport const gatewayClient = new GatewayClient();\nexport default gatewayClient;\n"
|
|
6
|
-
],
|
|
7
|
-
"mappings": "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",
|
|
8
|
-
"debugId": "0181833FB8285E7664756E2164756E21",
|
|
9
|
-
"names": []
|
|
10
|
-
}
|
package/dist/index-x82yjxw7.js
DELETED
|
@@ -1,287 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import {
|
|
3
|
-
Elysia,
|
|
4
|
-
t
|
|
5
|
-
} from "./index-wr0mkm57.js";
|
|
6
|
-
import {
|
|
7
|
-
apiGet,
|
|
8
|
-
apiPost,
|
|
9
|
-
fail,
|
|
10
|
-
formatTable,
|
|
11
|
-
getAgentUrl,
|
|
12
|
-
header,
|
|
13
|
-
info,
|
|
14
|
-
kv,
|
|
15
|
-
success,
|
|
16
|
-
warn
|
|
17
|
-
} from "./index-xmeskdnb.js";
|
|
18
|
-
import {
|
|
19
|
-
__require,
|
|
20
|
-
__toESM
|
|
21
|
-
} from "./index-g8dczzvv.js";
|
|
22
|
-
|
|
23
|
-
// src/plugins/plugin-mgr/routes.ts
|
|
24
|
-
var AVAILABLE_PLUGINS = [
|
|
25
|
-
{
|
|
26
|
-
packageName: "@burdenoff/vibe-plugin-tunnel-cloudflare",
|
|
27
|
-
name: "tunnel-cloudflare",
|
|
28
|
-
description: "Cloudflare Tunnel provider for remote access",
|
|
29
|
-
cliCommand: "tunnel",
|
|
30
|
-
apiPrefix: "/api/tunnel-cloudflare",
|
|
31
|
-
installed: false,
|
|
32
|
-
category: "tunnel"
|
|
33
|
-
},
|
|
34
|
-
{
|
|
35
|
-
packageName: "@burdenoff/vibe-plugin-session-tmux",
|
|
36
|
-
name: "session-tmux",
|
|
37
|
-
description: "tmux session provider for terminal management",
|
|
38
|
-
cliCommand: "session",
|
|
39
|
-
apiPrefix: "/api/session-tmux",
|
|
40
|
-
installed: false,
|
|
41
|
-
category: "session"
|
|
42
|
-
},
|
|
43
|
-
{
|
|
44
|
-
packageName: "@burdenoff/vibe-plugin-ssh",
|
|
45
|
-
name: "ssh",
|
|
46
|
-
description: "SSH connection management and port forwarding",
|
|
47
|
-
cliCommand: "ssh",
|
|
48
|
-
apiPrefix: "/api/ssh",
|
|
49
|
-
installed: false,
|
|
50
|
-
category: "tool"
|
|
51
|
-
},
|
|
52
|
-
{
|
|
53
|
-
packageName: "@burdenoff/vibe-plugin-ai",
|
|
54
|
-
name: "ai",
|
|
55
|
-
description: "AI tool management and integration",
|
|
56
|
-
cliCommand: "ai",
|
|
57
|
-
apiPrefix: undefined,
|
|
58
|
-
installed: false,
|
|
59
|
-
category: "integration"
|
|
60
|
-
},
|
|
61
|
-
{
|
|
62
|
-
packageName: "@burdenoff/vibe-plugin-ui-ssh",
|
|
63
|
-
name: "ui-ssh",
|
|
64
|
-
description: "Web UI for SSH connection management and port forwarding",
|
|
65
|
-
cliCommand: undefined,
|
|
66
|
-
apiPrefix: undefined,
|
|
67
|
-
installed: false,
|
|
68
|
-
category: "frontend"
|
|
69
|
-
},
|
|
70
|
-
{
|
|
71
|
-
packageName: "@burdenoff/vibe-plugin-ui-ai",
|
|
72
|
-
name: "ui-ai",
|
|
73
|
-
description: "Web UI for AI tool catalog and detection status",
|
|
74
|
-
cliCommand: undefined,
|
|
75
|
-
apiPrefix: undefined,
|
|
76
|
-
installed: false,
|
|
77
|
-
category: "frontend"
|
|
78
|
-
}
|
|
79
|
-
];
|
|
80
|
-
function createRoutes(deps) {
|
|
81
|
-
const { pluginManager } = deps;
|
|
82
|
-
return new Elysia().get("/", () => {
|
|
83
|
-
const plugins = pluginManager.getPluginDetails();
|
|
84
|
-
return { plugins, count: plugins.length };
|
|
85
|
-
}).get("/available", () => {
|
|
86
|
-
const installed = pluginManager.getPluginDetails();
|
|
87
|
-
const installedNames = new Set(installed.map((p) => p.packageName));
|
|
88
|
-
return {
|
|
89
|
-
plugins: AVAILABLE_PLUGINS.map((p) => ({
|
|
90
|
-
...p,
|
|
91
|
-
installed: installedNames.has(p.packageName)
|
|
92
|
-
}))
|
|
93
|
-
};
|
|
94
|
-
}).post("/install", async ({ body, set }) => {
|
|
95
|
-
if (!body.packageName || typeof body.packageName !== "string") {
|
|
96
|
-
set.status = 400;
|
|
97
|
-
return { error: "Missing required field: packageName" };
|
|
98
|
-
}
|
|
99
|
-
try {
|
|
100
|
-
await pluginManager.install(body.packageName);
|
|
101
|
-
return {
|
|
102
|
-
success: true,
|
|
103
|
-
message: `Plugin ${body.packageName} installed and loaded successfully`
|
|
104
|
-
};
|
|
105
|
-
} catch (err) {
|
|
106
|
-
set.status = 500;
|
|
107
|
-
return { error: "Failed to install plugin", details: String(err) };
|
|
108
|
-
}
|
|
109
|
-
}, {
|
|
110
|
-
body: t.Object({
|
|
111
|
-
packageName: t.String()
|
|
112
|
-
})
|
|
113
|
-
}).post("/remove", async ({ body, set }) => {
|
|
114
|
-
if (!body.packageName || typeof body.packageName !== "string") {
|
|
115
|
-
set.status = 400;
|
|
116
|
-
return { error: "Missing required field: packageName" };
|
|
117
|
-
}
|
|
118
|
-
try {
|
|
119
|
-
await pluginManager.remove(body.packageName);
|
|
120
|
-
return {
|
|
121
|
-
success: true,
|
|
122
|
-
message: `Plugin ${body.packageName} removed successfully`
|
|
123
|
-
};
|
|
124
|
-
} catch (err) {
|
|
125
|
-
set.status = 500;
|
|
126
|
-
return { error: "Failed to remove plugin", details: String(err) };
|
|
127
|
-
}
|
|
128
|
-
}, {
|
|
129
|
-
body: t.Object({
|
|
130
|
-
packageName: t.String()
|
|
131
|
-
})
|
|
132
|
-
}).post("/reload", async ({ set }) => {
|
|
133
|
-
try {
|
|
134
|
-
await pluginManager.dispatchServerStop();
|
|
135
|
-
await pluginManager.loadAll();
|
|
136
|
-
const plugins = pluginManager.getPluginDetails();
|
|
137
|
-
return {
|
|
138
|
-
success: true,
|
|
139
|
-
plugins,
|
|
140
|
-
message: `Reloaded ${plugins.length} plugin(s)`
|
|
141
|
-
};
|
|
142
|
-
} catch (err) {
|
|
143
|
-
set.status = 500;
|
|
144
|
-
return { error: "Failed to reload plugins", details: String(err) };
|
|
145
|
-
}
|
|
146
|
-
});
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
// src/cli/commands/plugin.cmd.ts
|
|
150
|
-
var DEFAULT_AGENT_URL = "http://localhost:3005";
|
|
151
|
-
function register(program) {
|
|
152
|
-
const cmd = program.command("plugin").description("Manage plugins");
|
|
153
|
-
cmd.command("list").description("List installed plugins").option("--agent-url <url>", "Agent URL", DEFAULT_AGENT_URL).action(async (options) => {
|
|
154
|
-
try {
|
|
155
|
-
const url = getAgentUrl(options);
|
|
156
|
-
let plugins;
|
|
157
|
-
try {
|
|
158
|
-
const data = await apiGet(url, "/api/plugins");
|
|
159
|
-
plugins = data.plugins || [];
|
|
160
|
-
} catch {
|
|
161
|
-
warn("Agent not reachable. Attempting local plugin registry...");
|
|
162
|
-
try {
|
|
163
|
-
const { PluginManager } = await import("./plugin-system-bc4rvt1c.js");
|
|
164
|
-
const pm = new PluginManager;
|
|
165
|
-
plugins = pm.getPluginDetails() || [];
|
|
166
|
-
} catch {
|
|
167
|
-
fail("Could not list plugins from agent or local registry.");
|
|
168
|
-
return;
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
if (!plugins || plugins.length === 0) {
|
|
172
|
-
info("No plugins installed.");
|
|
173
|
-
return;
|
|
174
|
-
}
|
|
175
|
-
header("Installed Plugins");
|
|
176
|
-
formatTable(plugins.map((p) => ({
|
|
177
|
-
Name: p.name || p.package || "-",
|
|
178
|
-
Version: p.version || "-",
|
|
179
|
-
Status: p.status || p.enabled ? "enabled" : "disabled",
|
|
180
|
-
Description: p.description || "-"
|
|
181
|
-
})));
|
|
182
|
-
} catch (err) {
|
|
183
|
-
fail(err.message);
|
|
184
|
-
}
|
|
185
|
-
});
|
|
186
|
-
cmd.command("install").description("Install a plugin").argument("<package>", "NPM package name to install").option("--agent-url <url>", "Agent URL", DEFAULT_AGENT_URL).action(async (packageName, options) => {
|
|
187
|
-
try {
|
|
188
|
-
const url = getAgentUrl(options);
|
|
189
|
-
try {
|
|
190
|
-
const result = await apiPost(url, "/api/plugins/install", {
|
|
191
|
-
package: packageName
|
|
192
|
-
});
|
|
193
|
-
success(`Plugin "${packageName}" installed.`);
|
|
194
|
-
if (result?.version)
|
|
195
|
-
kv("Version", result.version);
|
|
196
|
-
} catch {
|
|
197
|
-
warn("Agent not reachable. Attempting local install...");
|
|
198
|
-
try {
|
|
199
|
-
const { PluginManager } = await import("./plugin-system-bc4rvt1c.js");
|
|
200
|
-
const pm = new PluginManager;
|
|
201
|
-
await pm.install(packageName);
|
|
202
|
-
success(`Plugin "${packageName}" installed locally.`);
|
|
203
|
-
} catch (localErr) {
|
|
204
|
-
fail(`Could not install plugin via agent or locally: ${localErr.message}`);
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
} catch (err) {
|
|
208
|
-
fail(err.message);
|
|
209
|
-
}
|
|
210
|
-
});
|
|
211
|
-
cmd.command("remove").description("Remove a plugin").argument("<package>", "NPM package name to remove").option("--agent-url <url>", "Agent URL", DEFAULT_AGENT_URL).action(async (packageName, options) => {
|
|
212
|
-
try {
|
|
213
|
-
const url = getAgentUrl(options);
|
|
214
|
-
try {
|
|
215
|
-
await apiPost(url, "/api/plugins/remove", {
|
|
216
|
-
package: packageName
|
|
217
|
-
});
|
|
218
|
-
success(`Plugin "${packageName}" removed.`);
|
|
219
|
-
} catch {
|
|
220
|
-
warn("Agent not reachable. Attempting local removal...");
|
|
221
|
-
try {
|
|
222
|
-
const { PluginManager } = await import("./plugin-system-bc4rvt1c.js");
|
|
223
|
-
const pm = new PluginManager;
|
|
224
|
-
await pm.remove(packageName);
|
|
225
|
-
success(`Plugin "${packageName}" removed locally.`);
|
|
226
|
-
} catch (localErr) {
|
|
227
|
-
fail(`Could not remove plugin via agent or locally: ${localErr.message}`);
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
} catch (err) {
|
|
231
|
-
fail(err.message);
|
|
232
|
-
}
|
|
233
|
-
});
|
|
234
|
-
cmd.command("reload").description("Reload all plugins").option("--agent-url <url>", "Agent URL", DEFAULT_AGENT_URL).action(async (options) => {
|
|
235
|
-
try {
|
|
236
|
-
const url = getAgentUrl(options);
|
|
237
|
-
await apiPost(url, "/api/plugins/reload", {});
|
|
238
|
-
success("Plugins reloaded.");
|
|
239
|
-
} catch (err) {
|
|
240
|
-
fail(err.message);
|
|
241
|
-
}
|
|
242
|
-
});
|
|
243
|
-
cmd.command("available").description("Show available plugins").option("--agent-url <url>", "Agent URL", DEFAULT_AGENT_URL).action(async (options) => {
|
|
244
|
-
try {
|
|
245
|
-
const url = getAgentUrl(options);
|
|
246
|
-
const availData = await apiGet(url, "/api/plugins/available");
|
|
247
|
-
const plugins = availData.plugins || [];
|
|
248
|
-
if (!plugins || plugins.length === 0) {
|
|
249
|
-
info("No available plugins found.");
|
|
250
|
-
return;
|
|
251
|
-
}
|
|
252
|
-
header("Available Plugins");
|
|
253
|
-
formatTable(plugins.map((p) => ({
|
|
254
|
-
Name: p.name || p.package || "-",
|
|
255
|
-
Version: p.version || p.latestVersion || "-",
|
|
256
|
-
Description: p.description || "-"
|
|
257
|
-
})));
|
|
258
|
-
} catch (err) {
|
|
259
|
-
fail(err.message);
|
|
260
|
-
}
|
|
261
|
-
});
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
// src/plugins/plugin-mgr/commands.ts
|
|
265
|
-
function registerCommands(program, _hostServices) {
|
|
266
|
-
register(program);
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
// src/plugins/plugin-mgr/index.ts
|
|
270
|
-
var vibePlugin = {
|
|
271
|
-
name: "plugin-mgr",
|
|
272
|
-
version: "2.2.0",
|
|
273
|
-
description: "Plugin lifecycle management \u2014 install, remove, reload, catalog",
|
|
274
|
-
tags: ["backend", "cli"],
|
|
275
|
-
cliCommand: "plugin",
|
|
276
|
-
apiPrefix: "/api/plugins",
|
|
277
|
-
createRoutes: (deps) => createRoutes(deps),
|
|
278
|
-
onCliSetup: async (program, hostServices) => {
|
|
279
|
-
registerCommands(program, hostServices);
|
|
280
|
-
}
|
|
281
|
-
};
|
|
282
|
-
export {
|
|
283
|
-
vibePlugin
|
|
284
|
-
};
|
|
285
|
-
|
|
286
|
-
//# debugId=6D591618982CB48A64756E2164756E21
|
|
287
|
-
//# sourceMappingURL=index-x82yjxw7.js.map
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/plugins/plugin-mgr/routes.ts", "../src/cli/commands/plugin.cmd.ts", "../src/plugins/plugin-mgr/commands.ts", "../src/plugins/plugin-mgr/index.ts"],
|
|
4
|
-
"sourcesContent": [
|
|
5
|
-
"/**\n * Plugin Manager Routes\n *\n * Plugin management — list, install, remove, reload, available catalog.\n *\n * Endpoints:\n * GET /api/plugins — List all installed plugins\n * GET /api/plugins/available — List available plugins from catalog\n * POST /api/plugins/install — Install a plugin by package name\n * POST /api/plugins/remove — Remove (uninstall) a plugin\n * POST /api/plugins/reload — Hot-reload all plugins\n */\n\nimport { Elysia, t } from \"elysia\";\n\nimport type { PluginManager } from \"../../core/plugin-system.js\";\nimport type { AvailablePlugin, PluginRouteDeps } from \"../../core/types.js\";\n\n// ── Available Plugins Catalog ───────────────────────────────────────────\n\nconst AVAILABLE_PLUGINS: AvailablePlugin[] = [\n {\n packageName: \"@burdenoff/vibe-plugin-tunnel-cloudflare\",\n name: \"tunnel-cloudflare\",\n description: \"Cloudflare Tunnel provider for remote access\",\n cliCommand: \"tunnel\",\n apiPrefix: \"/api/tunnel-cloudflare\",\n installed: false,\n category: \"tunnel\",\n },\n {\n packageName: \"@burdenoff/vibe-plugin-session-tmux\",\n name: \"session-tmux\",\n description: \"tmux session provider for terminal management\",\n cliCommand: \"session\",\n apiPrefix: \"/api/session-tmux\",\n installed: false,\n category: \"session\",\n },\n {\n packageName: \"@burdenoff/vibe-plugin-ssh\",\n name: \"ssh\",\n description: \"SSH connection management and port forwarding\",\n cliCommand: \"ssh\",\n apiPrefix: \"/api/ssh\",\n installed: false,\n category: \"tool\",\n },\n {\n packageName: \"@burdenoff/vibe-plugin-ai\",\n name: \"ai\",\n description: \"AI tool management and integration\",\n cliCommand: \"ai\",\n apiPrefix: undefined,\n installed: false,\n category: \"integration\",\n },\n {\n packageName: \"@burdenoff/vibe-plugin-ui-ssh\",\n name: \"ui-ssh\",\n description: \"Web UI for SSH connection management and port forwarding\",\n cliCommand: undefined,\n apiPrefix: undefined,\n installed: false,\n category: \"frontend\",\n },\n {\n packageName: \"@burdenoff/vibe-plugin-ui-ai\",\n name: \"ui-ai\",\n description: \"Web UI for AI tool catalog and detection status\",\n cliCommand: undefined,\n apiPrefix: undefined,\n installed: false,\n category: \"frontend\",\n },\n];\n\n// ── Routes ──────────────────────────────────────────────────────────────\n\nexport function createRoutes(deps: PluginRouteDeps) {\n const { pluginManager } = deps;\n\n return (\n new Elysia()\n // List all installed plugins\n .get(\"/\", () => {\n const plugins = pluginManager.getPluginDetails();\n return { plugins, count: plugins.length };\n })\n\n // List available plugins from catalog\n .get(\"/available\", () => {\n const installed = pluginManager.getPluginDetails();\n const installedNames = new Set(installed.map((p) => p.packageName));\n\n return {\n plugins: AVAILABLE_PLUGINS.map((p) => ({\n ...p,\n installed: installedNames.has(p.packageName),\n })),\n };\n })\n\n // Install a plugin by package name\n .post(\n \"/install\",\n async ({ body, set }) => {\n if (!body.packageName || typeof body.packageName !== \"string\") {\n set.status = 400;\n return { error: \"Missing required field: packageName\" };\n }\n\n try {\n await pluginManager.install(body.packageName);\n return {\n success: true,\n message: `Plugin ${body.packageName} installed and loaded successfully`,\n };\n } catch (err) {\n set.status = 500;\n return { error: \"Failed to install plugin\", details: String(err) };\n }\n },\n {\n body: t.Object({\n packageName: t.String(),\n }),\n },\n )\n\n // Remove (uninstall) a plugin\n .post(\n \"/remove\",\n async ({ body, set }) => {\n if (!body.packageName || typeof body.packageName !== \"string\") {\n set.status = 400;\n return { error: \"Missing required field: packageName\" };\n }\n\n try {\n await pluginManager.remove(body.packageName);\n return {\n success: true,\n message: `Plugin ${body.packageName} removed successfully`,\n };\n } catch (err) {\n set.status = 500;\n return { error: \"Failed to remove plugin\", details: String(err) };\n }\n },\n {\n body: t.Object({\n packageName: t.String(),\n }),\n },\n )\n\n // Hot-reload all plugins\n // TODO: reloadAll needs app + hostServices — for now we just loadAll again\n .post(\"/reload\", async ({ set }) => {\n try {\n await pluginManager.dispatchServerStop();\n await pluginManager.loadAll();\n const plugins = pluginManager.getPluginDetails();\n return {\n success: true,\n plugins,\n message: `Reloaded ${plugins.length} plugin(s)`,\n };\n } catch (err) {\n set.status = 500;\n return { error: \"Failed to reload plugins\", details: String(err) };\n }\n })\n );\n}\n",
|
|
6
|
-
"import { Command } from \"commander\";\nimport {\n getAgentUrl,\n apiGet,\n apiPost,\n fail,\n success,\n info,\n warn,\n header,\n kv,\n blank,\n formatTable,\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(\"plugin\").description(\"Manage plugins\");\n\n // plugin list\n cmd\n .command(\"list\")\n .description(\"List installed plugins\")\n .option(\"--agent-url <url>\", \"Agent URL\", DEFAULT_AGENT_URL)\n .action(async (options) => {\n try {\n const url = getAgentUrl(options);\n let plugins: any[];\n try {\n const data = await apiGet<{ plugins: any[]; count: number }>(\n url,\n \"/api/plugins\",\n );\n plugins = data.plugins || [];\n } catch {\n warn(\"Agent not reachable. Attempting local plugin registry...\");\n try {\n const { PluginManager } =\n await import(\"../../core/plugin-system.js\");\n const pm = new PluginManager();\n plugins = pm.getPluginDetails() || [];\n } catch {\n fail(\"Could not list plugins from agent or local registry.\");\n return;\n }\n }\n if (!plugins || plugins.length === 0) {\n info(\"No plugins installed.\");\n return;\n }\n header(\"Installed Plugins\");\n formatTable(\n plugins.map((p: any) => ({\n Name: p.name || p.package || \"-\",\n Version: p.version || \"-\",\n Status: p.status || p.enabled ? \"enabled\" : \"disabled\",\n Description: p.description || \"-\",\n })),\n );\n } catch (err: any) {\n fail(err.message);\n }\n });\n\n // plugin install\n cmd\n .command(\"install\")\n .description(\"Install a plugin\")\n .argument(\"<package>\", \"NPM package name to install\")\n .option(\"--agent-url <url>\", \"Agent URL\", DEFAULT_AGENT_URL)\n .action(async (packageName: string, options) => {\n try {\n const url = getAgentUrl(options);\n try {\n const result = await apiPost<any>(url, \"/api/plugins/install\", {\n package: packageName,\n });\n success(`Plugin \"${packageName}\" installed.`);\n if (result?.version) kv(\"Version\", result.version);\n } catch {\n warn(\"Agent not reachable. Attempting local install...\");\n try {\n const { PluginManager } =\n await import(\"../../core/plugin-system.js\");\n const pm = new PluginManager();\n await pm.install(packageName);\n success(`Plugin \"${packageName}\" installed locally.`);\n } catch (localErr: any) {\n fail(\n `Could not install plugin via agent or locally: ${localErr.message}`,\n );\n }\n }\n } catch (err: any) {\n fail(err.message);\n }\n });\n\n // plugin remove\n cmd\n .command(\"remove\")\n .description(\"Remove a plugin\")\n .argument(\"<package>\", \"NPM package name to remove\")\n .option(\"--agent-url <url>\", \"Agent URL\", DEFAULT_AGENT_URL)\n .action(async (packageName: string, options) => {\n try {\n const url = getAgentUrl(options);\n try {\n await apiPost<any>(url, \"/api/plugins/remove\", {\n package: packageName,\n });\n success(`Plugin \"${packageName}\" removed.`);\n } catch {\n warn(\"Agent not reachable. Attempting local removal...\");\n try {\n const { PluginManager } =\n await import(\"../../core/plugin-system.js\");\n const pm = new PluginManager();\n await pm.remove(packageName);\n success(`Plugin \"${packageName}\" removed locally.`);\n } catch (localErr: any) {\n fail(\n `Could not remove plugin via agent or locally: ${localErr.message}`,\n );\n }\n }\n } catch (err: any) {\n fail(err.message);\n }\n });\n\n // plugin reload\n cmd\n .command(\"reload\")\n .description(\"Reload all plugins\")\n .option(\"--agent-url <url>\", \"Agent URL\", DEFAULT_AGENT_URL)\n .action(async (options) => {\n try {\n const url = getAgentUrl(options);\n await apiPost<any>(url, \"/api/plugins/reload\", {});\n success(\"Plugins reloaded.\");\n } catch (err: any) {\n fail(err.message);\n }\n });\n\n // plugin available\n cmd\n .command(\"available\")\n .description(\"Show available plugins\")\n .option(\"--agent-url <url>\", \"Agent URL\", DEFAULT_AGENT_URL)\n .action(async (options) => {\n try {\n const url = getAgentUrl(options);\n const availData = await apiGet<{ plugins: any[] }>(\n url,\n \"/api/plugins/available\",\n );\n const plugins = availData.plugins || [];\n if (!plugins || plugins.length === 0) {\n info(\"No available plugins found.\");\n return;\n }\n header(\"Available Plugins\");\n formatTable(\n plugins.map((p: any) => ({\n Name: p.name || p.package || \"-\",\n Version: p.version || p.latestVersion || \"-\",\n Description: p.description || \"-\",\n })),\n );\n } catch (err: any) {\n fail(err.message);\n }\n });\n}\n",
|
|
7
|
-
"import type { Command } from \"commander\";\nimport type { HostServices } from \"../../core/plugin-system.js\";\nimport { register as registerPlugin } from \"../../cli/commands/plugin.cmd.js\";\n\nexport function registerCommands(\n program: Command,\n _hostServices: HostServices,\n): void {\n registerPlugin(program);\n}\n",
|
|
8
|
-
"import type { VibePlugin } from \"../../core/plugin-system.js\";\nimport type { PluginRouteDeps } from \"../../core/types.js\";\nimport { createRoutes } from \"./routes.js\";\nimport { registerCommands } from \"./commands.js\";\n\nexport const vibePlugin: VibePlugin = {\n name: \"plugin-mgr\",\n version: \"2.2.0\",\n description: \"Plugin lifecycle management — install, remove, reload, catalog\",\n tags: [\"backend\", \"cli\"],\n cliCommand: \"plugin\",\n apiPrefix: \"/api/plugins\",\n createRoutes: (deps: PluginRouteDeps) => createRoutes(deps),\n onCliSetup: async (program, hostServices) => {\n registerCommands(program, hostServices);\n },\n};\n"
|
|
9
|
-
],
|
|
10
|
-
"mappings": "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",
|
|
11
|
-
"debugId": "6D591618982CB48A64756E2164756E21",
|
|
12
|
-
"names": []
|
|
13
|
-
}
|
|
File without changes
|