@burdenoff/vibe-agent 2.1.1 → 2.3.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.
Files changed (53) hide show
  1. package/dist/app-sm6n9xst.js +1165 -0
  2. package/dist/app-sm6n9xst.js.map +19 -0
  3. package/dist/cli.js +167 -2050
  4. package/dist/cli.js.map +8 -30
  5. package/dist/index-05qfwz8r.js +122 -0
  6. package/dist/index-05qfwz8r.js.map +10 -0
  7. package/dist/index-30p492yv.js +294 -0
  8. package/dist/index-30p492yv.js.map +13 -0
  9. package/dist/index-3rjnbp97.js +268 -0
  10. package/dist/index-3rjnbp97.js.map +13 -0
  11. package/dist/index-6vry08rz.js +285 -0
  12. package/dist/index-6vry08rz.js.map +13 -0
  13. package/dist/index-88ym10cs.js +194 -0
  14. package/dist/index-88ym10cs.js.map +10 -0
  15. package/dist/index-a9g7hbj9.js +229 -0
  16. package/dist/index-a9g7hbj9.js.map +13 -0
  17. package/dist/index-atjhkm74.js +149 -0
  18. package/dist/index-atjhkm74.js.map +10 -0
  19. package/dist/index-b1eq3qvs.js +515 -0
  20. package/dist/index-b1eq3qvs.js.map +19 -0
  21. package/dist/index-c7zy3n33.js +167 -0
  22. package/dist/index-c7zy3n33.js.map +13 -0
  23. package/dist/index-fm6gqenc.js +338 -0
  24. package/dist/index-fm6gqenc.js.map +13 -0
  25. package/dist/index-hefqxwht.js +270 -0
  26. package/dist/index-hefqxwht.js.map +13 -0
  27. package/dist/index-k9hb0b93.js +280 -0
  28. package/dist/index-k9hb0b93.js.map +13 -0
  29. package/dist/index-npmvh1x9.js +385 -0
  30. package/dist/index-npmvh1x9.js.map +13 -0
  31. package/dist/index-rdm6e3rr.js +587 -0
  32. package/dist/index-rdm6e3rr.js.map +13 -0
  33. package/dist/index-s7ff1fj1.js +415 -0
  34. package/dist/index-s7ff1fj1.js.map +11 -0
  35. package/dist/index-t4qgjy5w.js +287 -0
  36. package/dist/index-t4qgjy5w.js.map +13 -0
  37. package/dist/index-wmvkjcjj.js +301 -0
  38. package/dist/index-wmvkjcjj.js.map +13 -0
  39. package/dist/{app-31chs2a1.js → index-wr0mkm57.js} +8 -3201
  40. package/dist/{app-31chs2a1.js.map → index-wr0mkm57.js.map} +4 -25
  41. package/dist/index-xmeskdnb.js +292 -0
  42. package/dist/index-xmeskdnb.js.map +11 -0
  43. package/dist/index.js +9 -6
  44. package/dist/index.js.map +2 -2
  45. package/dist/{package-hb6db316.js → package-04nkt49b.js} +5 -3
  46. package/dist/{package-hb6db316.js.map → package-04nkt49b.js.map} +1 -1
  47. package/dist/plugin-system-7r9mb1tb.js +479 -0
  48. package/dist/plugin-system-7r9mb1tb.js.map +10 -0
  49. package/package.json +3 -1
  50. package/dist/index-t06ktmx9.js +0 -216
  51. package/dist/index-t06ktmx9.js.map +0 -11
  52. package/dist/plugin-system-bg1pzjj9.js +0 -450
  53. package/dist/plugin-system-bg1pzjj9.js.map +0 -11
@@ -0,0 +1,280 @@
1
+ // @bun
2
+ import {
3
+ Elysia,
4
+ t
5
+ } from "./index-wr0mkm57.js";
6
+ import {
7
+ apiDelete,
8
+ apiGet,
9
+ apiPost,
10
+ fail,
11
+ formatStatus,
12
+ formatTable,
13
+ getAgentUrl,
14
+ header,
15
+ info,
16
+ kv,
17
+ shortId,
18
+ success
19
+ } from "./index-xmeskdnb.js";
20
+ import"./index-g8dczzvv.js";
21
+
22
+ // src/plugins/tunnel/routes.ts
23
+ function getTunnelProvider(registry) {
24
+ const provider = registry.getProvider("tunnel");
25
+ if (!provider)
26
+ throw new Error("No tunnel provider registered");
27
+ return provider;
28
+ }
29
+ function createRoutes(deps) {
30
+ const { serviceRegistry } = deps;
31
+ return new Elysia().get("/", async ({ set }) => {
32
+ try {
33
+ const provider = getTunnelProvider(serviceRegistry);
34
+ const tunnels = await provider.list();
35
+ return { tunnels };
36
+ } catch (err) {
37
+ set.status = 500;
38
+ return { error: "Failed to list tunnels", details: String(err) };
39
+ }
40
+ }).get("/status", async ({ set }) => {
41
+ try {
42
+ const provider = getTunnelProvider(serviceRegistry);
43
+ const tunnels = await provider.list();
44
+ const active = tunnels.filter((t2) => t2.status === "active");
45
+ const inactive = tunnels.filter((t2) => t2.status === "stopped");
46
+ const errored = tunnels.filter((t2) => t2.status === "error");
47
+ return {
48
+ total: tunnels.length,
49
+ active: active.length,
50
+ inactive: inactive.length,
51
+ errored: errored.length,
52
+ tunnels: active.map((t2) => ({
53
+ id: t2.id,
54
+ port: t2.port,
55
+ url: t2.url,
56
+ pid: t2.pid
57
+ }))
58
+ };
59
+ } catch (err) {
60
+ set.status = 500;
61
+ return { error: "Failed to get tunnel status", details: String(err) };
62
+ }
63
+ }).post("/start", async ({ body, set }) => {
64
+ if (body.localPort < 1 || body.localPort > 65535) {
65
+ set.status = 400;
66
+ return { error: "Invalid localPort" };
67
+ }
68
+ try {
69
+ const provider = getTunnelProvider(serviceRegistry);
70
+ const existing = await provider.list();
71
+ const portTunnel = existing.find((t2) => t2.port === body.localPort && t2.status === "active");
72
+ if (portTunnel) {
73
+ set.status = 409;
74
+ return {
75
+ error: `Active tunnel exists for port ${body.localPort}`,
76
+ tunnel: portTunnel
77
+ };
78
+ }
79
+ const tunnel = await provider.start({
80
+ port: body.localPort,
81
+ name: body.subdomain,
82
+ metadata: body.sessionId ? { sessionId: body.sessionId } : undefined
83
+ });
84
+ return {
85
+ id: tunnel.id,
86
+ localPort: tunnel.port,
87
+ publicUrl: tunnel.url,
88
+ pid: tunnel.pid,
89
+ status: tunnel.status,
90
+ sessionId: body.sessionId || null
91
+ };
92
+ } catch (err) {
93
+ set.status = 500;
94
+ return { error: "Failed to start tunnel", details: String(err) };
95
+ }
96
+ }, {
97
+ body: t.Object({
98
+ localPort: t.Number(),
99
+ subdomain: t.Optional(t.String()),
100
+ sessionId: t.Optional(t.String())
101
+ })
102
+ }).get("/:id", async ({ params, set }) => {
103
+ try {
104
+ const provider = getTunnelProvider(serviceRegistry);
105
+ const tunnel = await provider.getStatus(params.id);
106
+ if (!tunnel) {
107
+ set.status = 404;
108
+ return { error: "Tunnel not found" };
109
+ }
110
+ return { tunnel };
111
+ } catch (err) {
112
+ set.status = 500;
113
+ return { error: "Failed to get tunnel", details: String(err) };
114
+ }
115
+ }).post("/:id/stop", async ({ params, set }) => {
116
+ try {
117
+ const provider = getTunnelProvider(serviceRegistry);
118
+ const tunnel = await provider.getStatus(params.id);
119
+ if (!tunnel) {
120
+ set.status = 404;
121
+ return { error: "Tunnel not found" };
122
+ }
123
+ if (tunnel.status !== "active") {
124
+ set.status = 400;
125
+ return { error: "Tunnel is not active" };
126
+ }
127
+ await provider.stop(params.id);
128
+ return { success: true };
129
+ } catch (err) {
130
+ set.status = 500;
131
+ return { error: "Failed to stop tunnel", details: String(err) };
132
+ }
133
+ }).delete("/:id", async ({ params, set }) => {
134
+ try {
135
+ const provider = getTunnelProvider(serviceRegistry);
136
+ const tunnel = await provider.getStatus(params.id);
137
+ if (!tunnel) {
138
+ set.status = 404;
139
+ return { error: "Tunnel not found" };
140
+ }
141
+ if (tunnel.status === "active") {
142
+ await provider.stop(params.id);
143
+ }
144
+ await provider.delete(params.id);
145
+ return { success: true };
146
+ } catch (err) {
147
+ set.status = 500;
148
+ return { error: "Failed to delete tunnel", details: String(err) };
149
+ }
150
+ });
151
+ }
152
+
153
+ // src/cli/commands/tunnel.cmd.ts
154
+ var DEFAULT_AGENT_URL = "http://localhost:3005";
155
+ function register(program) {
156
+ 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) => {
158
+ try {
159
+ const url = getAgentUrl(options);
160
+ const tunnels = await apiGet(url, "/api/tunnels");
161
+ if (!tunnels || tunnels.length === 0) {
162
+ info("No tunnels found.");
163
+ return;
164
+ }
165
+ header("Tunnels");
166
+ formatTable(tunnels.map((t2) => ({
167
+ ID: shortId(t2.id),
168
+ Port: t2.port ?? "-",
169
+ "Public URL": t2.publicUrl || t2.url || "-",
170
+ Status: formatStatus(t2.status),
171
+ PID: t2.pid ?? "-"
172
+ })));
173
+ } catch (err) {
174
+ fail(err.message);
175
+ }
176
+ });
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) => {
178
+ try {
179
+ const url = getAgentUrl(options);
180
+ const body = {
181
+ port: parseInt(options.port, 10)
182
+ };
183
+ if (options.subdomain)
184
+ body.subdomain = options.subdomain;
185
+ const result = await apiPost(url, "/api/tunnels/start", body);
186
+ success("Tunnel started.");
187
+ if (result?.id)
188
+ kv("ID", shortId(result.id));
189
+ if (result?.publicUrl || result?.url)
190
+ kv("Public URL", result.publicUrl || result.url);
191
+ kv("Port", options.port);
192
+ } catch (err) {
193
+ fail(err.message);
194
+ }
195
+ });
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) => {
197
+ try {
198
+ const url = getAgentUrl(options);
199
+ await apiPost(url, `/api/tunnels/${options.id}/stop`, {});
200
+ success(`Tunnel ${shortId(options.id)} stopped.`);
201
+ } catch (err) {
202
+ fail(err.message);
203
+ }
204
+ });
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) => {
206
+ try {
207
+ const url = getAgentUrl(options);
208
+ await apiDelete(url, `/api/tunnels/${options.id}`);
209
+ success(`Tunnel ${shortId(options.id)} deleted.`);
210
+ } catch (err) {
211
+ fail(err.message);
212
+ }
213
+ });
214
+ cmd.command("status").description("Show tunnel status summary").option("--agent-url <url>", "Agent URL", DEFAULT_AGENT_URL).action(async (options) => {
215
+ try {
216
+ const url = getAgentUrl(options);
217
+ const result = await apiGet(url, "/api/tunnels/status");
218
+ header("Tunnel Status");
219
+ kv("Total", result?.total ?? 0);
220
+ kv("Active", result?.active ?? 0);
221
+ kv("Inactive", result?.inactive ?? 0);
222
+ kv("Errored", result?.errored ?? 0);
223
+ } catch (err) {
224
+ fail(err.message);
225
+ }
226
+ });
227
+ cmd.command("agent").description("Manage agent tunnel").option("--start", "Start the agent tunnel").option("--stop", "Stop the agent tunnel").option("--agent-url <url>", "Agent URL", DEFAULT_AGENT_URL).action(async (options) => {
228
+ try {
229
+ const url = getAgentUrl(options);
230
+ if (options.start) {
231
+ const result = await apiPost(url, "/api/agent/tunnel", {
232
+ action: "start"
233
+ });
234
+ success("Agent tunnel started.");
235
+ if (result?.publicUrl || result?.url)
236
+ kv("Public URL", result.publicUrl || result.url);
237
+ } else if (options.stop) {
238
+ const result = await apiPost(url, "/api/agent/tunnel", {
239
+ action: "stop"
240
+ });
241
+ success("Agent tunnel stopped.");
242
+ } else {
243
+ const result = await apiGet(url, "/api/agent/tunnel");
244
+ header("Agent Tunnel");
245
+ kv("Status", formatStatus(result?.status || "unknown"));
246
+ if (result?.publicUrl || result?.url)
247
+ kv("Public URL", result.publicUrl || result.url);
248
+ if (result?.port)
249
+ kv("Port", result.port);
250
+ }
251
+ } catch (err) {
252
+ fail(err.message);
253
+ }
254
+ });
255
+ }
256
+
257
+ // src/plugins/tunnel/commands.ts
258
+ function registerCommands(program, _hostServices) {
259
+ register(program);
260
+ }
261
+
262
+ // src/plugins/tunnel/index.ts
263
+ var vibePlugin = {
264
+ name: "tunnel",
265
+ version: "2.2.0",
266
+ description: "Tunnel management via registered tunnel provider",
267
+ tags: ["backend", "cli", "provider"],
268
+ cliCommand: "tunnel",
269
+ apiPrefix: "/api/tunnels",
270
+ createRoutes: (deps) => createRoutes(deps),
271
+ onCliSetup: async (program, hostServices) => {
272
+ registerCommands(program, hostServices);
273
+ }
274
+ };
275
+ export {
276
+ vibePlugin
277
+ };
278
+
279
+ //# debugId=295E54DE0BD81D3964756E2164756E21
280
+ //# sourceMappingURL=index-k9hb0b93.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 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 .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 .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 .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 .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 .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(\"Manage agent tunnel\")\n .option(\"--start\", \"Start the agent tunnel\")\n .option(\"--stop\", \"Stop the agent tunnel\")\n .option(\"--agent-url <url>\", \"Agent URL\", DEFAULT_AGENT_URL)\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 const result = await apiPost<any>(url, \"/api/agent/tunnel\", {\n action: \"stop\",\n });\n success(\"Agent tunnel stopped.\");\n } else {\n const result = await apiGet<any>(url, \"/api/agent/tunnel\");\n header(\"Agent Tunnel\");\n kv(\"Status\", formatStatus(result?.status || \"unknown\"));\n if (result?.publicUrl || result?.url)\n kv(\"Public URL\", result.publicUrl || result.url);\n if (result?.port) kv(\"Port\", result.port);\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": "295E54DE0BD81D3964756E2164756E21",
12
+ "names": []
13
+ }