@burdenoff/vibe-agent 2.7.5 → 2.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{app-rjhw31y9.js → app-tba5zhmy.js} +2 -2
- package/dist/cli.js +374 -8
- package/dist/cli.js.map +8 -5
- package/dist/{index-wmvkjcjj.js → index-0429nfr9.js} +2 -2
- package/dist/{index-3rjnbp97.js → index-0nt6wnb9.js} +2 -2
- package/dist/{index-npmvh1x9.js → index-7ph3496b.js} +2 -2
- package/dist/{index-4nsdre0j.js → index-9grqzmk5.js} +40 -12
- package/dist/index-9grqzmk5.js.map +13 -0
- package/dist/{index-fm6gqenc.js → index-a3q5ewrj.js} +2 -2
- package/dist/{index-b6fsz3ht.js → index-cndcb55v.js} +178 -13
- package/dist/index-cndcb55v.js.map +13 -0
- package/dist/{index-6vry08rz.js → index-dhbg241c.js} +2 -2
- package/dist/{index-hefqxwht.js → index-e2dzjkmm.js} +2 -2
- package/dist/{index-t0nsa57v.js → index-et6rnq2y.js} +2 -2
- package/dist/{index-ftbphe7j.js → index-exh7dh2v.js} +141 -14
- package/dist/{index-ftbphe7j.js.map → index-exh7dh2v.js.map} +3 -3
- package/dist/{index-30p492yv.js → index-swqzafr9.js} +2 -2
- package/dist/{index-xmeskdnb.js → index-t0x810hm.js} +133 -74
- package/dist/index-t0x810hm.js.map +12 -0
- package/dist/{index-c7zy3n33.js → index-vzmmv3r7.js} +2 -2
- package/dist/{index-a9g7hbj9.js → index-w7m3p4qa.js} +2 -2
- package/dist/index.js +2 -2
- package/dist/{package-6sds8pgn.js → package-cck2kzyn.js} +3 -3
- package/dist/{package-6sds8pgn.js.map → package-cck2kzyn.js.map} +1 -1
- package/dist/{plugin-system-a2hmq7cg.js → plugin-system-75q3s1rf.js} +87 -15
- package/dist/plugin-system-75q3s1rf.js.map +10 -0
- package/package.json +1 -1
- package/dist/index-4nsdre0j.js.map +0 -13
- package/dist/index-b6fsz3ht.js.map +0 -13
- package/dist/index-xmeskdnb.js.map +0 -11
- package/dist/plugin-system-a2hmq7cg.js.map +0 -10
- /package/dist/{app-rjhw31y9.js.map → app-tba5zhmy.js.map} +0 -0
- /package/dist/{index-wmvkjcjj.js.map → index-0429nfr9.js.map} +0 -0
- /package/dist/{index-3rjnbp97.js.map → index-0nt6wnb9.js.map} +0 -0
- /package/dist/{index-npmvh1x9.js.map → index-7ph3496b.js.map} +0 -0
- /package/dist/{index-fm6gqenc.js.map → index-a3q5ewrj.js.map} +0 -0
- /package/dist/{index-6vry08rz.js.map → index-dhbg241c.js.map} +0 -0
- /package/dist/{index-hefqxwht.js.map → index-e2dzjkmm.js.map} +0 -0
- /package/dist/{index-t0nsa57v.js.map → index-et6rnq2y.js.map} +0 -0
- /package/dist/{index-30p492yv.js.map → index-swqzafr9.js.map} +0 -0
- /package/dist/{index-c7zy3n33.js.map → index-vzmmv3r7.js.map} +0 -0
- /package/dist/{index-a9g7hbj9.js.map → index-w7m3p4qa.js.map} +0 -0
|
@@ -18,7 +18,7 @@ import {
|
|
|
18
18
|
shortId,
|
|
19
19
|
success,
|
|
20
20
|
timeAgo
|
|
21
|
-
} from "./index-
|
|
21
|
+
} from "./index-t0x810hm.js";
|
|
22
22
|
import"./index-g8dczzvv.js";
|
|
23
23
|
|
|
24
24
|
// src/plugins/notification/routes.ts
|
|
@@ -298,4 +298,4 @@ export {
|
|
|
298
298
|
};
|
|
299
299
|
|
|
300
300
|
//# debugId=AE9C4A672990742664756E2164756E21
|
|
301
|
-
//# sourceMappingURL=index-
|
|
301
|
+
//# sourceMappingURL=index-0429nfr9.js.map
|
|
@@ -16,7 +16,7 @@ import {
|
|
|
16
16
|
shortId,
|
|
17
17
|
success,
|
|
18
18
|
timeAgo
|
|
19
|
-
} from "./index-
|
|
19
|
+
} from "./index-t0x810hm.js";
|
|
20
20
|
import"./index-g8dczzvv.js";
|
|
21
21
|
|
|
22
22
|
// src/plugins/task/routes.ts
|
|
@@ -265,4 +265,4 @@ export {
|
|
|
265
265
|
};
|
|
266
266
|
|
|
267
267
|
//# debugId=BC2EA895432C9ECA64756E2164756E21
|
|
268
|
-
//# sourceMappingURL=index-
|
|
268
|
+
//# sourceMappingURL=index-0nt6wnb9.js.map
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
header,
|
|
13
13
|
info,
|
|
14
14
|
success
|
|
15
|
-
} from "./index-
|
|
15
|
+
} from "./index-t0x810hm.js";
|
|
16
16
|
import"./index-g8dczzvv.js";
|
|
17
17
|
|
|
18
18
|
// src/plugins/file/routes.ts
|
|
@@ -382,4 +382,4 @@ export {
|
|
|
382
382
|
};
|
|
383
383
|
|
|
384
384
|
//# debugId=EBEB983AE70EABB664756E2164756E21
|
|
385
|
-
//# sourceMappingURL=index-
|
|
385
|
+
//# sourceMappingURL=index-7ph3496b.js.map
|
|
@@ -7,6 +7,8 @@ import {
|
|
|
7
7
|
apiDelete,
|
|
8
8
|
apiGet,
|
|
9
9
|
apiPost,
|
|
10
|
+
blank,
|
|
11
|
+
colors,
|
|
10
12
|
fail,
|
|
11
13
|
formatStatus,
|
|
12
14
|
formatTable,
|
|
@@ -16,7 +18,7 @@ import {
|
|
|
16
18
|
kv,
|
|
17
19
|
shortId,
|
|
18
20
|
success
|
|
19
|
-
} from "./index-
|
|
21
|
+
} from "./index-t0x810hm.js";
|
|
20
22
|
import"./index-g8dczzvv.js";
|
|
21
23
|
|
|
22
24
|
// src/plugins/tunnel/routes.ts
|
|
@@ -154,7 +156,7 @@ function createRoutes(deps) {
|
|
|
154
156
|
var DEFAULT_AGENT_URL = "http://localhost:3005";
|
|
155
157
|
function register(program) {
|
|
156
158
|
const cmd = program.command("tunnel").description("Manage tunnels for exposing local ports");
|
|
157
|
-
cmd.command("list").description("List all tunnels").option("--agent-url <url>", "Agent URL", DEFAULT_AGENT_URL).action(async (options) => {
|
|
159
|
+
cmd.command("list").description("List all tunnels").option("--agent-url <url>", "Agent URL", DEFAULT_AGENT_URL).option("--agent <name>", "Target agent instance by name").option("--profile <name>", "Alias for --agent").action(async (options) => {
|
|
158
160
|
try {
|
|
159
161
|
const url = getAgentUrl(options);
|
|
160
162
|
const tunnels = await apiGet(url, "/api/tunnels");
|
|
@@ -174,7 +176,7 @@ function register(program) {
|
|
|
174
176
|
fail(err.message);
|
|
175
177
|
}
|
|
176
178
|
});
|
|
177
|
-
cmd.command("start").description("Start a new tunnel").requiredOption("-p, --port <port>", "Local port to expose").option("-s, --subdomain <subdomain>", "Preferred subdomain").option("--agent-url <url>", "Agent URL", DEFAULT_AGENT_URL).action(async (options) => {
|
|
179
|
+
cmd.command("start").description("Start a new tunnel").requiredOption("-p, --port <port>", "Local port to expose").option("-s, --subdomain <subdomain>", "Preferred subdomain").option("--agent-url <url>", "Agent URL", DEFAULT_AGENT_URL).option("--agent <name>", "Target agent instance by name").option("--profile <name>", "Alias for --agent").action(async (options) => {
|
|
178
180
|
try {
|
|
179
181
|
const url = getAgentUrl(options);
|
|
180
182
|
const body = {
|
|
@@ -193,7 +195,7 @@ function register(program) {
|
|
|
193
195
|
fail(err.message);
|
|
194
196
|
}
|
|
195
197
|
});
|
|
196
|
-
cmd.command("stop").description("Stop a tunnel").requiredOption("-i, --id <id>", "Tunnel ID").option("--agent-url <url>", "Agent URL", DEFAULT_AGENT_URL).action(async (options) => {
|
|
198
|
+
cmd.command("stop").description("Stop a tunnel").requiredOption("-i, --id <id>", "Tunnel ID").option("--agent-url <url>", "Agent URL", DEFAULT_AGENT_URL).option("--agent <name>", "Target agent instance by name").option("--profile <name>", "Alias for --agent").action(async (options) => {
|
|
197
199
|
try {
|
|
198
200
|
const url = getAgentUrl(options);
|
|
199
201
|
await apiPost(url, `/api/tunnels/${options.id}/stop`, {});
|
|
@@ -202,7 +204,7 @@ function register(program) {
|
|
|
202
204
|
fail(err.message);
|
|
203
205
|
}
|
|
204
206
|
});
|
|
205
|
-
cmd.command("delete").description("Delete a tunnel").requiredOption("-i, --id <id>", "Tunnel ID").option("--agent-url <url>", "Agent URL", DEFAULT_AGENT_URL).action(async (options) => {
|
|
207
|
+
cmd.command("delete").description("Delete a tunnel").requiredOption("-i, --id <id>", "Tunnel ID").option("--agent-url <url>", "Agent URL", DEFAULT_AGENT_URL).option("--agent <name>", "Target agent instance by name").option("--profile <name>", "Alias for --agent").action(async (options) => {
|
|
206
208
|
try {
|
|
207
209
|
const url = getAgentUrl(options);
|
|
208
210
|
await apiDelete(url, `/api/tunnels/${options.id}`);
|
|
@@ -211,7 +213,7 @@ function register(program) {
|
|
|
211
213
|
fail(err.message);
|
|
212
214
|
}
|
|
213
215
|
});
|
|
214
|
-
cmd.command("status").description("Show tunnel status summary").option("--agent-url <url>", "Agent URL", DEFAULT_AGENT_URL).action(async (options) => {
|
|
216
|
+
cmd.command("status").description("Show tunnel status summary").option("--agent-url <url>", "Agent URL", DEFAULT_AGENT_URL).option("--agent <name>", "Target agent instance by name").option("--profile <name>", "Alias for --agent").action(async (options) => {
|
|
215
217
|
try {
|
|
216
218
|
const url = getAgentUrl(options);
|
|
217
219
|
const result = await apiGet(url, "/api/tunnels/status");
|
|
@@ -224,7 +226,7 @@ function register(program) {
|
|
|
224
226
|
fail(err.message);
|
|
225
227
|
}
|
|
226
228
|
});
|
|
227
|
-
cmd.command("agent").description("
|
|
229
|
+
cmd.command("agent").description("Show, start, or stop the agent tunnel").option("--start", "Start the agent tunnel").option("--stop", "Stop the agent tunnel").option("--url-only", "Print only the tunnel URL (for scripting)").option("--agent-url <url>", "Agent URL", DEFAULT_AGENT_URL).option("--agent <name>", "Target agent instance by name").option("--profile <name>", "Alias for --agent").action(async (options) => {
|
|
228
230
|
try {
|
|
229
231
|
const url = getAgentUrl(options);
|
|
230
232
|
if (options.start) {
|
|
@@ -241,12 +243,38 @@ function register(program) {
|
|
|
241
243
|
success("Agent tunnel stopped.");
|
|
242
244
|
} else {
|
|
243
245
|
const result = await apiGet(url, "/api/agent/tunnel");
|
|
246
|
+
const tunnelUrl = result?.tunnelUrl || result?.publicUrl || result?.url;
|
|
247
|
+
const status = result?.status || "unknown";
|
|
248
|
+
if (options.urlOnly) {
|
|
249
|
+
if (tunnelUrl) {
|
|
250
|
+
console.log(tunnelUrl);
|
|
251
|
+
} else {
|
|
252
|
+
process.exit(1);
|
|
253
|
+
}
|
|
254
|
+
return;
|
|
255
|
+
}
|
|
244
256
|
header("Agent Tunnel");
|
|
245
|
-
kv("Status", formatStatus(
|
|
246
|
-
if (
|
|
247
|
-
kv("Public URL",
|
|
257
|
+
kv("Status", formatStatus(status));
|
|
258
|
+
if (tunnelUrl) {
|
|
259
|
+
kv("Public URL", colors.green(tunnelUrl));
|
|
260
|
+
} else if (status === "active" || status === "running") {
|
|
261
|
+
kv("Public URL", colors.yellow("(starting...)"));
|
|
262
|
+
} else {
|
|
263
|
+
kv("Public URL", colors.dim("(not running)"));
|
|
264
|
+
}
|
|
248
265
|
if (result?.port)
|
|
249
266
|
kv("Port", result.port);
|
|
267
|
+
if (result?.pid)
|
|
268
|
+
kv("PID", result.pid);
|
|
269
|
+
if (result?.provider)
|
|
270
|
+
kv("Provider", result.provider);
|
|
271
|
+
if (result?.startedAt)
|
|
272
|
+
kv("Started", result.startedAt);
|
|
273
|
+
blank();
|
|
274
|
+
if (!tunnelUrl && status !== "active" && status !== "running") {
|
|
275
|
+
info(`Start tunnel: ${colors.bold("vibe tunnel agent --start")}`);
|
|
276
|
+
blank();
|
|
277
|
+
}
|
|
250
278
|
}
|
|
251
279
|
} catch (err) {
|
|
252
280
|
fail(err.message);
|
|
@@ -276,5 +304,5 @@ export {
|
|
|
276
304
|
vibePlugin
|
|
277
305
|
};
|
|
278
306
|
|
|
279
|
-
//# debugId=
|
|
280
|
-
//# sourceMappingURL=index-
|
|
307
|
+
//# debugId=D57E4E2F87CA36CC64756E2164756E21
|
|
308
|
+
//# sourceMappingURL=index-9grqzmk5.js.map
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/plugins/tunnel/routes.ts", "../src/cli/commands/tunnel.cmd.ts", "../src/plugins/tunnel/commands.ts", "../src/plugins/tunnel/index.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"import { Elysia, t } from \"elysia\";\nimport type { PluginRouteDeps } from \"../../core/types.js\";\nimport type { ServiceRegistry } from \"../../core/service-registry.js\";\nimport type { TunnelProvider } from \"../../core/providers/tunnel.provider.js\";\n\nfunction getTunnelProvider(registry: ServiceRegistry): TunnelProvider {\n const provider = registry.getProvider<TunnelProvider>(\"tunnel\");\n if (!provider) throw new Error(\"No tunnel provider registered\");\n return provider;\n}\n\nexport function createRoutes(deps: PluginRouteDeps) {\n const { serviceRegistry } = deps;\n\n return new Elysia()\n .get(\"/\", async ({ set }) => {\n try {\n const provider = getTunnelProvider(serviceRegistry);\n const tunnels = await provider.list();\n return { tunnels };\n } catch (err) {\n set.status = 500;\n return { error: \"Failed to list tunnels\", details: String(err) };\n }\n })\n .get(\"/status\", async ({ set }) => {\n try {\n const provider = getTunnelProvider(serviceRegistry);\n const tunnels = await provider.list();\n const active = tunnels.filter((t) => t.status === \"active\");\n const inactive = tunnels.filter((t) => t.status === \"stopped\");\n const errored = tunnels.filter((t) => t.status === \"error\");\n return {\n total: tunnels.length,\n active: active.length,\n inactive: inactive.length,\n errored: errored.length,\n tunnels: active.map((t) => ({\n id: t.id,\n port: t.port,\n url: t.url,\n pid: t.pid,\n })),\n };\n } catch (err) {\n set.status = 500;\n return { error: \"Failed to get tunnel status\", details: String(err) };\n }\n })\n .post(\n \"/start\",\n async ({ body, set }) => {\n if (body.localPort < 1 || body.localPort > 65535) {\n set.status = 400;\n return { error: \"Invalid localPort\" };\n }\n try {\n const provider = getTunnelProvider(serviceRegistry);\n const existing = await provider.list();\n const portTunnel = existing.find(\n (t) => t.port === body.localPort && t.status === \"active\",\n );\n if (portTunnel) {\n set.status = 409;\n return {\n error: `Active tunnel exists for port ${body.localPort}`,\n tunnel: portTunnel,\n };\n }\n const tunnel = await provider.start({\n port: body.localPort,\n name: body.subdomain,\n metadata: body.sessionId\n ? { sessionId: body.sessionId }\n : undefined,\n });\n return {\n id: tunnel.id,\n localPort: tunnel.port,\n publicUrl: tunnel.url,\n pid: tunnel.pid,\n status: tunnel.status,\n sessionId: body.sessionId || null,\n };\n } catch (err) {\n set.status = 500;\n return { error: \"Failed to start tunnel\", details: String(err) };\n }\n },\n {\n body: t.Object({\n localPort: t.Number(),\n subdomain: t.Optional(t.String()),\n sessionId: t.Optional(t.String()),\n }),\n },\n )\n .get(\"/:id\", async ({ params, set }) => {\n try {\n const provider = getTunnelProvider(serviceRegistry);\n const tunnel = await provider.getStatus(params.id);\n if (!tunnel) {\n set.status = 404;\n return { error: \"Tunnel not found\" };\n }\n return { tunnel };\n } catch (err) {\n set.status = 500;\n return { error: \"Failed to get tunnel\", details: String(err) };\n }\n })\n .post(\"/:id/stop\", async ({ params, set }) => {\n try {\n const provider = getTunnelProvider(serviceRegistry);\n const tunnel = await provider.getStatus(params.id);\n if (!tunnel) {\n set.status = 404;\n return { error: \"Tunnel not found\" };\n }\n if (tunnel.status !== \"active\") {\n set.status = 400;\n return { error: \"Tunnel is not active\" };\n }\n await provider.stop(params.id);\n return { success: true };\n } catch (err) {\n set.status = 500;\n return { error: \"Failed to stop tunnel\", details: String(err) };\n }\n })\n .delete(\"/:id\", async ({ params, set }) => {\n try {\n const provider = getTunnelProvider(serviceRegistry);\n const tunnel = await provider.getStatus(params.id);\n if (!tunnel) {\n set.status = 404;\n return { error: \"Tunnel not found\" };\n }\n if (tunnel.status === \"active\") {\n await provider.stop(params.id);\n }\n await provider.delete(params.id);\n return { success: true };\n } catch (err) {\n set.status = 500;\n return { error: \"Failed to delete tunnel\", details: String(err) };\n }\n });\n}\n",
|
|
6
|
+
"import { Command } from \"commander\";\nimport {\n getAgentUrl,\n apiGet,\n apiPost,\n apiDelete,\n fail,\n success,\n info,\n header,\n kv,\n blank,\n colors,\n formatTable,\n formatStatus,\n shortId,\n} from \"../utils/index.js\";\n\nconst DEFAULT_AGENT_URL = \"http://localhost:3005\";\n\nexport function register(program: Command): void {\n const cmd = program\n .command(\"tunnel\")\n .description(\"Manage tunnels for exposing local ports\");\n\n // tunnel list\n cmd\n .command(\"list\")\n .description(\"List all tunnels\")\n .option(\"--agent-url <url>\", \"Agent URL\", DEFAULT_AGENT_URL)\n .option(\"--agent <name>\", \"Target agent instance by name\")\n .option(\"--profile <name>\", \"Alias for --agent\")\n .action(async (options) => {\n try {\n const url = getAgentUrl(options);\n const tunnels = await apiGet<any[]>(url, \"/api/tunnels\");\n if (!tunnels || tunnels.length === 0) {\n info(\"No tunnels found.\");\n return;\n }\n header(\"Tunnels\");\n formatTable(\n tunnels.map((t: any) => ({\n ID: shortId(t.id),\n Port: t.port ?? \"-\",\n \"Public URL\": t.publicUrl || t.url || \"-\",\n Status: formatStatus(t.status),\n PID: t.pid ?? \"-\",\n })),\n );\n } catch (err: any) {\n fail(err.message);\n }\n });\n\n // tunnel start\n cmd\n .command(\"start\")\n .description(\"Start a new tunnel\")\n .requiredOption(\"-p, --port <port>\", \"Local port to expose\")\n .option(\"-s, --subdomain <subdomain>\", \"Preferred subdomain\")\n .option(\"--agent-url <url>\", \"Agent URL\", DEFAULT_AGENT_URL)\n .option(\"--agent <name>\", \"Target agent instance by name\")\n .option(\"--profile <name>\", \"Alias for --agent\")\n .action(async (options) => {\n try {\n const url = getAgentUrl(options);\n const body: Record<string, any> = {\n port: parseInt(options.port, 10),\n };\n if (options.subdomain) body.subdomain = options.subdomain;\n const result = await apiPost<any>(url, \"/api/tunnels/start\", body);\n success(\"Tunnel started.\");\n if (result?.id) kv(\"ID\", shortId(result.id));\n if (result?.publicUrl || result?.url)\n kv(\"Public URL\", result.publicUrl || result.url);\n kv(\"Port\", options.port);\n } catch (err: any) {\n fail(err.message);\n }\n });\n\n // tunnel stop\n cmd\n .command(\"stop\")\n .description(\"Stop a tunnel\")\n .requiredOption(\"-i, --id <id>\", \"Tunnel ID\")\n .option(\"--agent-url <url>\", \"Agent URL\", DEFAULT_AGENT_URL)\n .option(\"--agent <name>\", \"Target agent instance by name\")\n .option(\"--profile <name>\", \"Alias for --agent\")\n .action(async (options) => {\n try {\n const url = getAgentUrl(options);\n await apiPost<any>(url, `/api/tunnels/${options.id}/stop`, {});\n success(`Tunnel ${shortId(options.id)} stopped.`);\n } catch (err: any) {\n fail(err.message);\n }\n });\n\n // tunnel delete\n cmd\n .command(\"delete\")\n .description(\"Delete a tunnel\")\n .requiredOption(\"-i, --id <id>\", \"Tunnel ID\")\n .option(\"--agent-url <url>\", \"Agent URL\", DEFAULT_AGENT_URL)\n .option(\"--agent <name>\", \"Target agent instance by name\")\n .option(\"--profile <name>\", \"Alias for --agent\")\n .action(async (options) => {\n try {\n const url = getAgentUrl(options);\n await apiDelete<any>(url, `/api/tunnels/${options.id}`);\n success(`Tunnel ${shortId(options.id)} deleted.`);\n } catch (err: any) {\n fail(err.message);\n }\n });\n\n // tunnel status\n cmd\n .command(\"status\")\n .description(\"Show tunnel status summary\")\n .option(\"--agent-url <url>\", \"Agent URL\", DEFAULT_AGENT_URL)\n .option(\"--agent <name>\", \"Target agent instance by name\")\n .option(\"--profile <name>\", \"Alias for --agent\")\n .action(async (options) => {\n try {\n const url = getAgentUrl(options);\n const result = await apiGet<any>(url, \"/api/tunnels/status\");\n header(\"Tunnel Status\");\n kv(\"Total\", result?.total ?? 0);\n kv(\"Active\", result?.active ?? 0);\n kv(\"Inactive\", result?.inactive ?? 0);\n kv(\"Errored\", result?.errored ?? 0);\n } catch (err: any) {\n fail(err.message);\n }\n });\n\n // tunnel agent\n cmd\n .command(\"agent\")\n .description(\"Show, start, or stop the agent tunnel\")\n .option(\"--start\", \"Start the agent tunnel\")\n .option(\"--stop\", \"Stop the agent tunnel\")\n .option(\"--url-only\", \"Print only the tunnel URL (for scripting)\")\n .option(\"--agent-url <url>\", \"Agent URL\", DEFAULT_AGENT_URL)\n .option(\"--agent <name>\", \"Target agent instance by name\")\n .option(\"--profile <name>\", \"Alias for --agent\")\n .action(async (options) => {\n try {\n const url = getAgentUrl(options);\n if (options.start) {\n const result = await apiPost<any>(url, \"/api/agent/tunnel\", {\n action: \"start\",\n });\n success(\"Agent tunnel started.\");\n if (result?.publicUrl || result?.url)\n kv(\"Public URL\", result.publicUrl || result.url);\n } else if (options.stop) {\n await apiPost<any>(url, \"/api/agent/tunnel\", {\n action: \"stop\",\n });\n success(\"Agent tunnel stopped.\");\n } else {\n // Default: show tunnel status with active URL\n const result = await apiGet<any>(url, \"/api/agent/tunnel\");\n const tunnelUrl =\n result?.tunnelUrl || result?.publicUrl || result?.url;\n const status = result?.status || \"unknown\";\n\n // --url-only: print raw URL for scripting / piping\n if (options.urlOnly) {\n if (tunnelUrl) {\n console.log(tunnelUrl);\n } else {\n process.exit(1);\n }\n return;\n }\n\n header(\"Agent Tunnel\");\n kv(\"Status\", formatStatus(status));\n\n if (tunnelUrl) {\n kv(\"Public URL\", colors.green(tunnelUrl));\n } else if (status === \"active\" || status === \"running\") {\n kv(\"Public URL\", colors.yellow(\"(starting...)\"));\n } else {\n kv(\"Public URL\", colors.dim(\"(not running)\"));\n }\n\n if (result?.port) kv(\"Port\", result.port);\n if (result?.pid) kv(\"PID\", result.pid);\n if (result?.provider) kv(\"Provider\", result.provider);\n if (result?.startedAt) kv(\"Started\", result.startedAt);\n\n blank();\n\n if (!tunnelUrl && status !== \"active\" && status !== \"running\") {\n info(`Start tunnel: ${colors.bold(\"vibe tunnel agent --start\")}`);\n blank();\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 registerTunnel } from \"../../cli/commands/tunnel.cmd.js\";\n\nexport function registerCommands(\n program: Command,\n _hostServices: HostServices,\n): void {\n registerTunnel(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: \"tunnel\",\n version: \"2.2.0\",\n description: \"Tunnel management via registered tunnel provider\",\n tags: [\"backend\", \"cli\", \"provider\"],\n cliCommand: \"tunnel\",\n apiPrefix: \"/api/tunnels\",\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": "D57E4E2F87CA36CC64756E2164756E21",
|
|
12
|
+
"names": []
|
|
13
|
+
}
|
|
@@ -17,7 +17,7 @@ import {
|
|
|
17
17
|
shortId,
|
|
18
18
|
success,
|
|
19
19
|
timeAgo
|
|
20
|
-
} from "./index-
|
|
20
|
+
} from "./index-t0x810hm.js";
|
|
21
21
|
import"./index-g8dczzvv.js";
|
|
22
22
|
|
|
23
23
|
// src/plugins/git/routes.ts
|
|
@@ -335,4 +335,4 @@ export {
|
|
|
335
335
|
};
|
|
336
336
|
|
|
337
337
|
//# debugId=7833782DA41E97E464756E2164756E21
|
|
338
|
-
//# sourceMappingURL=index-
|
|
338
|
+
//# sourceMappingURL=index-a3q5ewrj.js.map
|
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
kv,
|
|
15
15
|
success,
|
|
16
16
|
warn
|
|
17
|
-
} from "./index-
|
|
17
|
+
} from "./index-t0x810hm.js";
|
|
18
18
|
import {
|
|
19
19
|
__require,
|
|
20
20
|
__toESM
|
|
@@ -129,6 +129,56 @@ function createRoutes(deps) {
|
|
|
129
129
|
body: t.Object({
|
|
130
130
|
packageName: t.String()
|
|
131
131
|
})
|
|
132
|
+
}).post("/update", async ({ body, set }) => {
|
|
133
|
+
if (!body.packageName || typeof body.packageName !== "string") {
|
|
134
|
+
set.status = 400;
|
|
135
|
+
return { error: "Missing required field: packageName" };
|
|
136
|
+
}
|
|
137
|
+
try {
|
|
138
|
+
const entry = await pluginManager.update(body.packageName);
|
|
139
|
+
return {
|
|
140
|
+
success: true,
|
|
141
|
+
message: `Plugin ${body.packageName} updated to v${entry.version}`,
|
|
142
|
+
version: entry.version
|
|
143
|
+
};
|
|
144
|
+
} catch (err) {
|
|
145
|
+
set.status = 500;
|
|
146
|
+
return { error: "Failed to update plugin", details: String(err) };
|
|
147
|
+
}
|
|
148
|
+
}, {
|
|
149
|
+
body: t.Object({
|
|
150
|
+
packageName: t.String()
|
|
151
|
+
})
|
|
152
|
+
}).post("/update-all", async ({ set }) => {
|
|
153
|
+
try {
|
|
154
|
+
const results = await pluginManager.updateAll();
|
|
155
|
+
return {
|
|
156
|
+
success: true,
|
|
157
|
+
results,
|
|
158
|
+
message: `Updated ${results.filter((r) => r.success).length}/${results.length} plugin(s)`
|
|
159
|
+
};
|
|
160
|
+
} catch (err) {
|
|
161
|
+
set.status = 500;
|
|
162
|
+
return {
|
|
163
|
+
error: "Failed to update all plugins",
|
|
164
|
+
details: String(err)
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
}).post("/remove-all", async ({ set }) => {
|
|
168
|
+
try {
|
|
169
|
+
const results = await pluginManager.removeAll();
|
|
170
|
+
return {
|
|
171
|
+
success: true,
|
|
172
|
+
results,
|
|
173
|
+
message: `Removed ${results.filter((r) => r.success).length}/${results.length} plugin(s)`
|
|
174
|
+
};
|
|
175
|
+
} catch (err) {
|
|
176
|
+
set.status = 500;
|
|
177
|
+
return {
|
|
178
|
+
error: "Failed to remove all plugins",
|
|
179
|
+
details: String(err)
|
|
180
|
+
};
|
|
181
|
+
}
|
|
132
182
|
}).post("/reload", async ({ set }) => {
|
|
133
183
|
try {
|
|
134
184
|
await pluginManager.dispatchServerStop();
|
|
@@ -152,7 +202,7 @@ import { join, resolve } from "path";
|
|
|
152
202
|
var DEFAULT_AGENT_URL = "http://localhost:3005";
|
|
153
203
|
function register(program) {
|
|
154
204
|
const cmd = program.command("plugin").description("Manage plugins");
|
|
155
|
-
cmd.command("list").description("List installed plugins").option("--agent-url <url>", "Agent URL", DEFAULT_AGENT_URL).action(async (options) => {
|
|
205
|
+
cmd.command("list").description("List installed plugins").option("--agent-url <url>", "Agent URL", DEFAULT_AGENT_URL).option("--agent <name>", "Target agent instance by name").option("--profile <name>", "Alias for --agent").action(async (options) => {
|
|
156
206
|
try {
|
|
157
207
|
const url = getAgentUrl(options);
|
|
158
208
|
let plugins;
|
|
@@ -162,7 +212,7 @@ function register(program) {
|
|
|
162
212
|
} catch {
|
|
163
213
|
warn("Agent not reachable. Attempting local plugin registry...");
|
|
164
214
|
try {
|
|
165
|
-
const { PluginManager } = await import("./plugin-system-
|
|
215
|
+
const { PluginManager } = await import("./plugin-system-75q3s1rf.js");
|
|
166
216
|
const pm = new PluginManager;
|
|
167
217
|
plugins = pm.getPluginDetails() || [];
|
|
168
218
|
} catch {
|
|
@@ -185,12 +235,12 @@ function register(program) {
|
|
|
185
235
|
fail(err.message);
|
|
186
236
|
}
|
|
187
237
|
});
|
|
188
|
-
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) => {
|
|
238
|
+
cmd.command("install").description("Install a plugin").argument("<package>", "NPM package name to install").option("--agent-url <url>", "Agent URL", DEFAULT_AGENT_URL).option("--agent <name>", "Target agent instance by name").option("--profile <name>", "Alias for --agent").action(async (packageName, options) => {
|
|
189
239
|
try {
|
|
190
240
|
const url = getAgentUrl(options);
|
|
191
241
|
try {
|
|
192
242
|
const result = await apiPost(url, "/api/plugins/install", {
|
|
193
|
-
|
|
243
|
+
packageName
|
|
194
244
|
});
|
|
195
245
|
success(`Plugin "${packageName}" installed.`);
|
|
196
246
|
if (result?.version)
|
|
@@ -198,7 +248,7 @@ function register(program) {
|
|
|
198
248
|
} catch {
|
|
199
249
|
warn("Agent not reachable. Attempting local install...");
|
|
200
250
|
try {
|
|
201
|
-
const { PluginManager } = await import("./plugin-system-
|
|
251
|
+
const { PluginManager } = await import("./plugin-system-75q3s1rf.js");
|
|
202
252
|
const pm = new PluginManager;
|
|
203
253
|
await pm.install(packageName);
|
|
204
254
|
success(`Plugin "${packageName}" installed locally.`);
|
|
@@ -210,18 +260,18 @@ function register(program) {
|
|
|
210
260
|
fail(err.message);
|
|
211
261
|
}
|
|
212
262
|
});
|
|
213
|
-
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) => {
|
|
263
|
+
cmd.command("remove").description("Remove a plugin").argument("<package>", "NPM package name to remove").option("--agent-url <url>", "Agent URL", DEFAULT_AGENT_URL).option("--agent <name>", "Target agent instance by name").option("--profile <name>", "Alias for --agent").action(async (packageName, options) => {
|
|
214
264
|
try {
|
|
215
265
|
const url = getAgentUrl(options);
|
|
216
266
|
try {
|
|
217
267
|
await apiPost(url, "/api/plugins/remove", {
|
|
218
|
-
|
|
268
|
+
packageName
|
|
219
269
|
});
|
|
220
270
|
success(`Plugin "${packageName}" removed.`);
|
|
221
271
|
} catch {
|
|
222
272
|
warn("Agent not reachable. Attempting local removal...");
|
|
223
273
|
try {
|
|
224
|
-
const { PluginManager } = await import("./plugin-system-
|
|
274
|
+
const { PluginManager } = await import("./plugin-system-75q3s1rf.js");
|
|
225
275
|
const pm = new PluginManager;
|
|
226
276
|
await pm.remove(packageName);
|
|
227
277
|
success(`Plugin "${packageName}" removed locally.`);
|
|
@@ -233,7 +283,122 @@ function register(program) {
|
|
|
233
283
|
fail(err.message);
|
|
234
284
|
}
|
|
235
285
|
});
|
|
236
|
-
cmd.command("
|
|
286
|
+
cmd.command("update").description("Update a plugin (or all plugins with --all)").argument("[package]", "NPM package name to update").option("--all", "Update all installed plugins", false).option("--agent-url <url>", "Agent URL", DEFAULT_AGENT_URL).option("--agent <name>", "Target agent instance by name").option("--profile <name>", "Alias for --agent").action(async (packageName, options) => {
|
|
287
|
+
try {
|
|
288
|
+
const url = getAgentUrl(options);
|
|
289
|
+
if (options.all) {
|
|
290
|
+
info("Updating all plugins...");
|
|
291
|
+
try {
|
|
292
|
+
const result = await apiPost(url, "/api/plugins/update-all", {});
|
|
293
|
+
const results = result?.results || [];
|
|
294
|
+
for (const r of results) {
|
|
295
|
+
if (r.success) {
|
|
296
|
+
success(`Updated ${r.packageName}${r.version ? ` to v${r.version}` : ""}`);
|
|
297
|
+
} else {
|
|
298
|
+
warn(`Failed to update ${r.packageName}: ${r.error}`);
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
success(result?.message || "Done.");
|
|
302
|
+
} catch {
|
|
303
|
+
warn("Agent not reachable. Attempting local update...");
|
|
304
|
+
try {
|
|
305
|
+
const { PluginManager } = await import("./plugin-system-75q3s1rf.js");
|
|
306
|
+
const pm = new PluginManager;
|
|
307
|
+
const results = await pm.updateAll();
|
|
308
|
+
for (const r of results) {
|
|
309
|
+
if (r.success) {
|
|
310
|
+
success(`Updated ${r.packageName}${r.version ? ` to v${r.version}` : ""}`);
|
|
311
|
+
} else {
|
|
312
|
+
warn(`Failed to update ${r.packageName}: ${r.error}`);
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
} catch (localErr) {
|
|
316
|
+
fail(`Could not update plugins: ${localErr.message}`);
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
} else if (packageName) {
|
|
320
|
+
info(`Updating ${packageName}...`);
|
|
321
|
+
try {
|
|
322
|
+
const result = await apiPost(url, "/api/plugins/update", {
|
|
323
|
+
packageName
|
|
324
|
+
});
|
|
325
|
+
success(result?.message || `Plugin "${packageName}" updated.`);
|
|
326
|
+
} catch {
|
|
327
|
+
warn("Agent not reachable. Attempting local update...");
|
|
328
|
+
try {
|
|
329
|
+
const { PluginManager } = await import("./plugin-system-75q3s1rf.js");
|
|
330
|
+
const pm = new PluginManager;
|
|
331
|
+
const entry = await pm.update(packageName);
|
|
332
|
+
success(`Plugin "${packageName}" updated to v${entry.version}.`);
|
|
333
|
+
} catch (localErr) {
|
|
334
|
+
fail(`Could not update plugin: ${localErr.message}`);
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
} else {
|
|
338
|
+
fail("Provide a package name to update, or use --all to update all plugins.");
|
|
339
|
+
}
|
|
340
|
+
} catch (err) {
|
|
341
|
+
fail(err.message);
|
|
342
|
+
}
|
|
343
|
+
});
|
|
344
|
+
cmd.command("uninstall").description("Uninstall a plugin (or all plugins with --all)").argument("[package]", "NPM package name to uninstall").option("--all", "Uninstall all external plugins", false).option("--agent-url <url>", "Agent URL", DEFAULT_AGENT_URL).option("--agent <name>", "Target agent instance by name").option("--profile <name>", "Alias for --agent").action(async (packageName, options) => {
|
|
345
|
+
try {
|
|
346
|
+
const url = getAgentUrl(options);
|
|
347
|
+
if (options.all) {
|
|
348
|
+
info("Uninstalling all plugins...");
|
|
349
|
+
try {
|
|
350
|
+
const result = await apiPost(url, "/api/plugins/remove-all", {});
|
|
351
|
+
const results = result?.results || [];
|
|
352
|
+
for (const r of results) {
|
|
353
|
+
if (r.success) {
|
|
354
|
+
success(`Removed ${r.packageName}`);
|
|
355
|
+
} else {
|
|
356
|
+
warn(`Failed to remove ${r.packageName}: ${r.error}`);
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
success(result?.message || "Done.");
|
|
360
|
+
} catch {
|
|
361
|
+
warn("Agent not reachable. Attempting local removal...");
|
|
362
|
+
try {
|
|
363
|
+
const { PluginManager } = await import("./plugin-system-75q3s1rf.js");
|
|
364
|
+
const pm = new PluginManager;
|
|
365
|
+
const results = await pm.removeAll();
|
|
366
|
+
for (const r of results) {
|
|
367
|
+
if (r.success) {
|
|
368
|
+
success(`Removed ${r.packageName}`);
|
|
369
|
+
} else {
|
|
370
|
+
warn(`Failed to remove ${r.packageName}: ${r.error}`);
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
} catch (localErr) {
|
|
374
|
+
fail(`Could not uninstall plugins: ${localErr.message}`);
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
} else if (packageName) {
|
|
378
|
+
try {
|
|
379
|
+
await apiPost(url, "/api/plugins/remove", {
|
|
380
|
+
packageName
|
|
381
|
+
});
|
|
382
|
+
success(`Plugin "${packageName}" uninstalled.`);
|
|
383
|
+
} catch {
|
|
384
|
+
warn("Agent not reachable. Attempting local removal...");
|
|
385
|
+
try {
|
|
386
|
+
const { PluginManager } = await import("./plugin-system-75q3s1rf.js");
|
|
387
|
+
const pm = new PluginManager;
|
|
388
|
+
await pm.remove(packageName);
|
|
389
|
+
success(`Plugin "${packageName}" uninstalled locally.`);
|
|
390
|
+
} catch (localErr) {
|
|
391
|
+
fail(`Could not uninstall plugin: ${localErr.message}`);
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
} else {
|
|
395
|
+
fail("Provide a package name to uninstall, or use --all to uninstall all plugins.");
|
|
396
|
+
}
|
|
397
|
+
} catch (err) {
|
|
398
|
+
fail(err.message);
|
|
399
|
+
}
|
|
400
|
+
});
|
|
401
|
+
cmd.command("reload").description("Reload all plugins").option("--agent-url <url>", "Agent URL", DEFAULT_AGENT_URL).option("--agent <name>", "Target agent instance by name").option("--profile <name>", "Alias for --agent").action(async (options) => {
|
|
237
402
|
try {
|
|
238
403
|
const url = getAgentUrl(options);
|
|
239
404
|
await apiPost(url, "/api/plugins/reload", {});
|
|
@@ -242,7 +407,7 @@ function register(program) {
|
|
|
242
407
|
fail(err.message);
|
|
243
408
|
}
|
|
244
409
|
});
|
|
245
|
-
cmd.command("available").description("Show available plugins").option("--agent-url <url>", "Agent URL", DEFAULT_AGENT_URL).action(async (options) => {
|
|
410
|
+
cmd.command("available").description("Show available plugins").option("--agent-url <url>", "Agent URL", DEFAULT_AGENT_URL).option("--agent <name>", "Target agent instance by name").option("--profile <name>", "Alias for --agent").action(async (options) => {
|
|
246
411
|
try {
|
|
247
412
|
const url = getAgentUrl(options);
|
|
248
413
|
const availData = await apiGet(url, "/api/plugins/available");
|
|
@@ -597,5 +762,5 @@ export {
|
|
|
597
762
|
vibePlugin
|
|
598
763
|
};
|
|
599
764
|
|
|
600
|
-
//# debugId=
|
|
601
|
-
//# sourceMappingURL=index-
|
|
765
|
+
//# debugId=622EB666D741386464756E2164756E21
|
|
766
|
+
//# sourceMappingURL=index-cndcb55v.js.map
|