@burdenoff/vibe-agent 2.4.0 → 2.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,12 +2,12 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/plugins/bookmark/routes.ts", "../src/cli/commands/bookmark.cmd.ts", "../src/plugins/bookmark/commands.ts", "../src/plugins/bookmark/index.ts"],
4
4
  "sourcesContent": [
5
- "/**\n * Bookmark Plugin — Routes\n *\n * Bookmarked command management — CRUD + execute in session or as task.\n *\n * Endpoints (mounted by plugin system at /api/bookmarks):\n * GET / — List bookmarks (optional projectId filter)\n * GET /global — Get global (no project) bookmarks\n * GET /project/:projectId — Get bookmarks by project\n * GET /category/:category — Get bookmarks by category\n * GET /:id — Get bookmark by ID\n * POST / — Create new bookmark\n * PUT /:id — Update bookmark\n * DELETE /:id — Delete bookmark\n * POST /:id/execute — Execute bookmarked command\n */\n\nimport { Elysia, t } from \"elysia\";\n\nimport type { AgentDatabase } from \"../../db/database.js\";\nimport type { ServiceRegistry } from \"../../core/service-registry.js\";\nimport type { SessionProvider } from \"../../core/providers/session.provider.js\";\nimport type { PluginRouteDeps } from \"../../core/types.js\";\n\n// ── Routes ──────────────────────────────────────────────────────────────\n\nexport function createRoutes(deps: PluginRouteDeps) {\n const { db, serviceRegistry } = deps;\n\n return (\n new Elysia()\n // List bookmarks (optional projectId filter)\n .get(\"/\", ({ query }) => {\n const q = query as Record<string, string>;\n const bookmarks =\n q.projectId !== undefined\n ? db.getBookmarkedCommandsByProject(q.projectId)\n : db.getAllBookmarkedCommands();\n return { bookmarks };\n })\n\n // Get global bookmarks (no project)\n .get(\"/global\", () => {\n const bookmarks = db.getBookmarkedCommandsByProject(null);\n return { bookmarks };\n })\n\n // Get bookmarks by project\n .get(\"/project/:projectId\", ({ params }) => {\n const bookmarks = db.getBookmarkedCommandsByProject(params.projectId);\n return { bookmarks };\n })\n\n // Get bookmarks by category\n .get(\"/category/:category\", ({ params }) => {\n const bookmarks = db.getBookmarkedCommandsByCategory(params.category);\n return { bookmarks, category: params.category };\n })\n\n // Get bookmark by ID\n .get(\"/:id\", ({ params, set }) => {\n const bookmark = db.getBookmarkedCommand(params.id);\n if (!bookmark) {\n set.status = 404;\n return { error: \"Bookmarked command not found\" };\n }\n return { bookmark };\n })\n\n // Create new bookmark\n .post(\n \"/\",\n ({ body, set }) => {\n try {\n const bookmark = db.createBookmarkedCommand({\n id: globalThis.crypto.randomUUID(),\n projectId: body.projectId,\n command: body.command,\n description: body.description,\n category: body.category,\n });\n return { bookmark };\n } catch (err) {\n set.status = 500;\n return {\n error: \"Failed to create bookmarked command\",\n details: String(err),\n };\n }\n },\n {\n body: t.Object({\n projectId: t.Optional(t.String()),\n command: t.String(),\n description: t.Optional(t.String()),\n category: t.Optional(t.String()),\n }),\n },\n )\n\n // Update bookmark\n .put(\n \"/:id\",\n ({ params, body, set }) => {\n const bookmark = db.getBookmarkedCommand(params.id);\n if (!bookmark) {\n set.status = 404;\n return { error: \"Bookmarked command not found\" };\n }\n\n try {\n const updates: Record<string, string | undefined> = {};\n if (body.command !== undefined) updates.command = body.command;\n if (body.description !== undefined)\n updates.description = body.description;\n if (body.category !== undefined) updates.category = body.category;\n\n db.updateBookmarkedCommand(params.id, updates);\n const updatedBookmark = db.getBookmarkedCommand(params.id)!;\n return { bookmark: updatedBookmark };\n } catch (err) {\n set.status = 500;\n return {\n error: \"Failed to update bookmarked command\",\n details: String(err),\n };\n }\n },\n {\n body: t.Object({\n command: t.Optional(t.String()),\n description: t.Optional(t.String()),\n category: t.Optional(t.String()),\n }),\n },\n )\n\n // Delete bookmark\n .delete(\"/:id\", ({ params, set }) => {\n const bookmark = db.getBookmarkedCommand(params.id);\n if (!bookmark) {\n set.status = 404;\n return { error: \"Bookmarked command not found\" };\n }\n\n try {\n db.deleteBookmarkedCommand(params.id);\n return { success: true };\n } catch (err) {\n set.status = 500;\n return {\n error: \"Failed to delete bookmarked command\",\n details: String(err),\n };\n }\n })\n\n // Execute bookmarked command\n .post(\n \"/:id/execute\",\n async ({ params, body, set }) => {\n const bookmark = db.getBookmarkedCommand(params.id);\n if (!bookmark) {\n set.status = 404;\n return { error: \"Bookmarked command not found\" };\n }\n\n try {\n // If sessionId provided, execute in session via SessionProvider\n if (body.sessionId) {\n const sessionProvider =\n serviceRegistry.getProvider<SessionProvider>(\"session\");\n if (!sessionProvider) {\n set.status = 400;\n return { error: \"No session provider registered\" };\n }\n\n const session = await sessionProvider.get(body.sessionId);\n if (!session) {\n set.status = 404;\n return { error: \"Session not found\" };\n }\n\n await sessionProvider.sendCommand(\n body.sessionId,\n bookmark.command,\n );\n\n return {\n success: true,\n executedIn: \"session\",\n sessionId: body.sessionId,\n };\n }\n\n // Otherwise, execute as a background task\n const task = db.createTask({\n id: globalThis.crypto.randomUUID(),\n type: \"command\",\n status: \"pending\",\n payload: JSON.stringify({\n command: bookmark.command,\n cwd: body.cwd || process.cwd(),\n }),\n });\n\n return {\n success: true,\n executedIn: \"task\",\n taskId: task.id,\n };\n } catch (err) {\n set.status = 500;\n return {\n error: \"Failed to execute bookmarked command\",\n details: String(err),\n };\n }\n },\n {\n body: t.Object({\n sessionId: t.Optional(t.String()),\n cwd: t.Optional(t.String()),\n }),\n },\n )\n );\n}\n",
6
- "import { Command } from \"commander\";\nimport {\n getAgentUrl,\n apiGet,\n apiPost,\n apiPut,\n apiDelete,\n fail,\n success,\n info,\n header,\n kv,\n formatTable,\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(\"bookmark\")\n .description(\"Manage command bookmarks\");\n\n // bookmark list\n cmd\n .command(\"list\")\n .description(\"List bookmarks\")\n .option(\"--project <id>\", \"Filter by project ID\")\n .option(\"--category <cat>\", \"Filter by category\")\n .option(\"--agent-url <url>\", \"Agent URL\", DEFAULT_AGENT_URL)\n .action(async (options) => {\n try {\n const url = getAgentUrl(options);\n const params = new URLSearchParams();\n if (options.project) params.set(\"project\", options.project);\n if (options.category) params.set(\"category\", options.category);\n const query = params.toString();\n const endpoint = query ? `/api/bookmarks?${query}` : \"/api/bookmarks\";\n const data = await apiGet<{ bookmarks: any[] }>(url, endpoint);\n const bookmarks = data.bookmarks || [];\n if (!bookmarks || bookmarks.length === 0) {\n info(\"No bookmarks found.\");\n return;\n }\n header(\"Bookmarks\");\n formatTable(\n bookmarks.map((b: any) => ({\n ID: shortId(b.id),\n Command: b.command || \"-\",\n Description: b.description || \"-\",\n Category: b.category || \"-\",\n Project: b.project || b.projectId || \"-\",\n })),\n );\n } catch (err: any) {\n fail(err.message);\n }\n });\n\n // bookmark create\n cmd\n .command(\"create\")\n .description(\"Create a new bookmark\")\n .requiredOption(\"-c, --command <cmd>\", \"Command to bookmark\")\n .option(\"--description <desc>\", \"Bookmark description\")\n .option(\"--category <cat>\", \"Category\")\n .option(\"--project <id>\", \"Project ID\")\n .option(\"--agent-url <url>\", \"Agent URL\", DEFAULT_AGENT_URL)\n .action(async (options) => {\n try {\n const url = getAgentUrl(options);\n const body: Record<string, any> = { command: options.command };\n if (options.description) body.description = options.description;\n if (options.category) body.category = options.category;\n if (options.project) body.project = options.project;\n const result = await apiPost<any>(url, \"/api/bookmarks\", body);\n success(`Bookmark created: ${shortId(result?.id)}`);\n } catch (err: any) {\n fail(err.message);\n }\n });\n\n // bookmark update\n cmd\n .command(\"update\")\n .description(\"Update a bookmark\")\n .requiredOption(\"-i, --id <id>\", \"Bookmark ID\")\n .option(\"-c, --command <cmd>\", \"New command\")\n .option(\"--description <desc>\", \"New description\")\n .option(\"--category <cat>\", \"New category\")\n .option(\"--agent-url <url>\", \"Agent URL\", DEFAULT_AGENT_URL)\n .action(async (options) => {\n try {\n const url = getAgentUrl(options);\n const body: Record<string, any> = {};\n if (options.command) body.command = options.command;\n if (options.description) body.description = options.description;\n if (options.category) body.category = options.category;\n if (Object.keys(body).length === 0) {\n fail(\n \"No fields to update. Provide at least one of --command, --description, or --category.\",\n );\n return;\n }\n await apiPut<any>(url, `/api/bookmarks/${options.id}`, body);\n success(`Bookmark ${shortId(options.id)} updated.`);\n } catch (err: any) {\n fail(err.message);\n }\n });\n\n // bookmark delete\n cmd\n .command(\"delete\")\n .description(\"Delete a bookmark\")\n .requiredOption(\"-i, --id <id>\", \"Bookmark 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/bookmarks/${options.id}`);\n success(`Bookmark ${shortId(options.id)} deleted.`);\n } catch (err: any) {\n fail(err.message);\n }\n });\n\n // bookmark execute\n cmd\n .command(\"execute\")\n .description(\"Execute a bookmarked command\")\n .requiredOption(\"-i, --id <id>\", \"Bookmark ID\")\n .option(\"--session <sessionId>\", \"Session ID to execute in\")\n .option(\"--agent-url <url>\", \"Agent URL\", DEFAULT_AGENT_URL)\n .action(async (options) => {\n try {\n const url = getAgentUrl(options);\n const body: Record<string, any> = {};\n if (options.session) body.sessionId = options.session;\n const result = await apiPost<any>(\n url,\n `/api/bookmarks/${options.id}/execute`,\n body,\n );\n success(`Bookmark ${shortId(options.id)} executed.`);\n if (result?.output) {\n console.log(result.output);\n }\n } catch (err: any) {\n fail(err.message);\n }\n });\n}\n",
5
+ "/**\n * Bookmark Plugin — Routes\n *\n * Bookmarked command management — CRUD + execute in session or as task.\n *\n * Endpoints (mounted by plugin system at /api/bookmarks):\n * GET / — List bookmarks (optional projectId filter)\n * GET /global — Get global (no project) bookmarks\n * GET /project/:projectId — Get bookmarks by project\n * GET /category/:category — Get bookmarks by category\n * GET /:id — Get bookmark by ID\n * POST / — Create new bookmark\n * PUT /:id — Update bookmark\n * DELETE /:id — Delete bookmark\n * POST /:id/execute — Execute bookmarked command\n */\n\nimport { Elysia, t } from \"elysia\";\n\nimport type { SessionProvider } from \"../../core/providers/session.provider.js\";\nimport type { PluginRouteDeps } from \"../../core/types.js\";\n\n// ── Routes ──────────────────────────────────────────────────────────────\n\nexport function createRoutes(deps: PluginRouteDeps) {\n const { db, serviceRegistry } = deps;\n\n return (\n new Elysia()\n // List bookmarks (optional projectId filter)\n .get(\"/\", ({ query }) => {\n const q = query as Record<string, string>;\n const bookmarks =\n q.projectId !== undefined\n ? db.getBookmarkedCommandsByProject(q.projectId)\n : db.getAllBookmarkedCommands();\n return { bookmarks };\n })\n\n // Get global bookmarks (no project)\n .get(\"/global\", () => {\n const bookmarks = db.getBookmarkedCommandsByProject(null);\n return { bookmarks };\n })\n\n // Get bookmarks by project\n .get(\"/project/:projectId\", ({ params }) => {\n const bookmarks = db.getBookmarkedCommandsByProject(params.projectId);\n return { bookmarks };\n })\n\n // Get bookmarks by category\n .get(\"/category/:category\", ({ params }) => {\n const bookmarks = db.getBookmarkedCommandsByCategory(params.category);\n return { bookmarks, category: params.category };\n })\n\n // Get bookmark by ID\n .get(\"/:id\", ({ params, set }) => {\n const bookmark = db.getBookmarkedCommand(params.id);\n if (!bookmark) {\n set.status = 404;\n return { error: \"Bookmarked command not found\" };\n }\n return { bookmark };\n })\n\n // Create new bookmark\n .post(\n \"/\",\n ({ body, set }) => {\n try {\n const bookmark = db.createBookmarkedCommand({\n id: globalThis.crypto.randomUUID(),\n projectId: body.projectId,\n command: body.command,\n description: body.description,\n category: body.category,\n });\n return { bookmark };\n } catch (err) {\n set.status = 500;\n return {\n error: \"Failed to create bookmarked command\",\n details: String(err),\n };\n }\n },\n {\n body: t.Object({\n projectId: t.Optional(t.String()),\n command: t.String(),\n description: t.Optional(t.String()),\n category: t.Optional(t.String()),\n }),\n },\n )\n\n // Update bookmark\n .put(\n \"/:id\",\n ({ params, body, set }) => {\n const bookmark = db.getBookmarkedCommand(params.id);\n if (!bookmark) {\n set.status = 404;\n return { error: \"Bookmarked command not found\" };\n }\n\n try {\n const updates: Record<string, string | undefined> = {};\n if (body.command !== undefined) updates.command = body.command;\n if (body.description !== undefined)\n updates.description = body.description;\n if (body.category !== undefined) updates.category = body.category;\n\n db.updateBookmarkedCommand(params.id, updates);\n const updatedBookmark = db.getBookmarkedCommand(params.id)!;\n return { bookmark: updatedBookmark };\n } catch (err) {\n set.status = 500;\n return {\n error: \"Failed to update bookmarked command\",\n details: String(err),\n };\n }\n },\n {\n body: t.Object({\n command: t.Optional(t.String()),\n description: t.Optional(t.String()),\n category: t.Optional(t.String()),\n }),\n },\n )\n\n // Delete bookmark\n .delete(\"/:id\", ({ params, set }) => {\n const bookmark = db.getBookmarkedCommand(params.id);\n if (!bookmark) {\n set.status = 404;\n return { error: \"Bookmarked command not found\" };\n }\n\n try {\n db.deleteBookmarkedCommand(params.id);\n return { success: true };\n } catch (err) {\n set.status = 500;\n return {\n error: \"Failed to delete bookmarked command\",\n details: String(err),\n };\n }\n })\n\n // Execute bookmarked command\n .post(\n \"/:id/execute\",\n async ({ params, body, set }) => {\n const bookmark = db.getBookmarkedCommand(params.id);\n if (!bookmark) {\n set.status = 404;\n return { error: \"Bookmarked command not found\" };\n }\n\n try {\n // If sessionId provided, execute in session via SessionProvider\n if (body.sessionId) {\n const sessionProvider =\n serviceRegistry.getProvider<SessionProvider>(\"session\");\n if (!sessionProvider) {\n set.status = 400;\n return { error: \"No session provider registered\" };\n }\n\n const session = await sessionProvider.get(body.sessionId);\n if (!session) {\n set.status = 404;\n return { error: \"Session not found\" };\n }\n\n await sessionProvider.sendCommand(\n body.sessionId,\n bookmark.command,\n );\n\n return {\n success: true,\n executedIn: \"session\",\n sessionId: body.sessionId,\n };\n }\n\n // Otherwise, execute as a background task\n const task = db.createTask({\n id: globalThis.crypto.randomUUID(),\n type: \"command\",\n status: \"pending\",\n payload: JSON.stringify({\n command: bookmark.command,\n cwd: body.cwd || process.cwd(),\n }),\n });\n\n return {\n success: true,\n executedIn: \"task\",\n taskId: task.id,\n };\n } catch (err) {\n set.status = 500;\n return {\n error: \"Failed to execute bookmarked command\",\n details: String(err),\n };\n }\n },\n {\n body: t.Object({\n sessionId: t.Optional(t.String()),\n cwd: t.Optional(t.String()),\n }),\n },\n )\n );\n}\n",
6
+ "import { Command } from \"commander\";\nimport {\n getAgentUrl,\n apiGet,\n apiPost,\n apiPut,\n apiDelete,\n fail,\n success,\n info,\n header,\n formatTable,\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(\"bookmark\")\n .description(\"Manage command bookmarks\");\n\n // bookmark list\n cmd\n .command(\"list\")\n .description(\"List bookmarks\")\n .option(\"--project <id>\", \"Filter by project ID\")\n .option(\"--category <cat>\", \"Filter by category\")\n .option(\"--agent-url <url>\", \"Agent URL\", DEFAULT_AGENT_URL)\n .action(async (options) => {\n try {\n const url = getAgentUrl(options);\n const params = new URLSearchParams();\n if (options.project) params.set(\"project\", options.project);\n if (options.category) params.set(\"category\", options.category);\n const query = params.toString();\n const endpoint = query ? `/api/bookmarks?${query}` : \"/api/bookmarks\";\n const data = await apiGet<{ bookmarks: any[] }>(url, endpoint);\n const bookmarks = data.bookmarks || [];\n if (!bookmarks || bookmarks.length === 0) {\n info(\"No bookmarks found.\");\n return;\n }\n header(\"Bookmarks\");\n formatTable(\n bookmarks.map((b: any) => ({\n ID: shortId(b.id),\n Command: b.command || \"-\",\n Description: b.description || \"-\",\n Category: b.category || \"-\",\n Project: b.project || b.projectId || \"-\",\n })),\n );\n } catch (err: any) {\n fail(err.message);\n }\n });\n\n // bookmark create\n cmd\n .command(\"create\")\n .description(\"Create a new bookmark\")\n .requiredOption(\"-c, --command <cmd>\", \"Command to bookmark\")\n .option(\"--description <desc>\", \"Bookmark description\")\n .option(\"--category <cat>\", \"Category\")\n .option(\"--project <id>\", \"Project ID\")\n .option(\"--agent-url <url>\", \"Agent URL\", DEFAULT_AGENT_URL)\n .action(async (options) => {\n try {\n const url = getAgentUrl(options);\n const body: Record<string, any> = { command: options.command };\n if (options.description) body.description = options.description;\n if (options.category) body.category = options.category;\n if (options.project) body.project = options.project;\n const result = await apiPost<any>(url, \"/api/bookmarks\", body);\n success(`Bookmark created: ${shortId(result?.id)}`);\n } catch (err: any) {\n fail(err.message);\n }\n });\n\n // bookmark update\n cmd\n .command(\"update\")\n .description(\"Update a bookmark\")\n .requiredOption(\"-i, --id <id>\", \"Bookmark ID\")\n .option(\"-c, --command <cmd>\", \"New command\")\n .option(\"--description <desc>\", \"New description\")\n .option(\"--category <cat>\", \"New category\")\n .option(\"--agent-url <url>\", \"Agent URL\", DEFAULT_AGENT_URL)\n .action(async (options) => {\n try {\n const url = getAgentUrl(options);\n const body: Record<string, any> = {};\n if (options.command) body.command = options.command;\n if (options.description) body.description = options.description;\n if (options.category) body.category = options.category;\n if (Object.keys(body).length === 0) {\n fail(\n \"No fields to update. Provide at least one of --command, --description, or --category.\",\n );\n return;\n }\n await apiPut<any>(url, `/api/bookmarks/${options.id}`, body);\n success(`Bookmark ${shortId(options.id)} updated.`);\n } catch (err: any) {\n fail(err.message);\n }\n });\n\n // bookmark delete\n cmd\n .command(\"delete\")\n .description(\"Delete a bookmark\")\n .requiredOption(\"-i, --id <id>\", \"Bookmark 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/bookmarks/${options.id}`);\n success(`Bookmark ${shortId(options.id)} deleted.`);\n } catch (err: any) {\n fail(err.message);\n }\n });\n\n // bookmark execute\n cmd\n .command(\"execute\")\n .description(\"Execute a bookmarked command\")\n .requiredOption(\"-i, --id <id>\", \"Bookmark ID\")\n .option(\"--session <sessionId>\", \"Session ID to execute in\")\n .option(\"--agent-url <url>\", \"Agent URL\", DEFAULT_AGENT_URL)\n .action(async (options) => {\n try {\n const url = getAgentUrl(options);\n const body: Record<string, any> = {};\n if (options.session) body.sessionId = options.session;\n const result = await apiPost<any>(\n url,\n `/api/bookmarks/${options.id}/execute`,\n body,\n );\n success(`Bookmark ${shortId(options.id)} executed.`);\n if (result?.output) {\n console.log(result.output);\n }\n } catch (err: any) {\n fail(err.message);\n }\n });\n}\n",
7
7
  "import type { Command } from \"commander\";\nimport type { HostServices } from \"../../core/plugin-system.js\";\nimport { register as registerBookmark } from \"../../cli/commands/bookmark.cmd.js\";\n\nexport function registerCommands(\n program: Command,\n _hostServices: HostServices,\n): void {\n registerBookmark(program);\n}\n",
8
8
  "import type { VibePlugin } from \"../../core/plugin-system.js\";\nimport type { PluginRouteDeps } from \"../../core/types.js\";\nimport { createRoutes } from \"./routes.js\";\nimport { registerCommands } from \"./commands.js\";\n\nexport const vibePlugin: VibePlugin = {\n name: \"bookmark\",\n version: \"2.2.0\",\n description: \"Bookmarked command management — CRUD and execute\",\n tags: [\"backend\", \"cli\"],\n cliCommand: \"bookmark\",\n apiPrefix: \"/api/bookmarks\",\n createRoutes: (deps: PluginRouteDeps) => createRoutes(deps),\n onCliSetup: async (program, hostServices) => {\n registerCommands(program, hostServices);\n },\n};\n"
9
9
  ],
10
- "mappings": ";;;;;;;;;;;;;;;;;;;;;AA0BO,SAAS,YAAY,CAAC,MAAuB;AAAA,EAClD,QAAQ,IAAI,oBAAoB;AAAA,EAEhC,OACE,IAAI,OAAO,EAER,IAAI,KAAK,GAAG,YAAY;AAAA,IACvB,MAAM,IAAI;AAAA,IACV,MAAM,YACJ,EAAE,cAAc,YACZ,GAAG,+BAA+B,EAAE,SAAS,IAC7C,GAAG,yBAAyB;AAAA,IAClC,OAAO,EAAE,UAAU;AAAA,GACpB,EAGA,IAAI,WAAW,MAAM;AAAA,IACpB,MAAM,YAAY,GAAG,+BAA+B,IAAI;AAAA,IACxD,OAAO,EAAE,UAAU;AAAA,GACpB,EAGA,IAAI,uBAAuB,GAAG,aAAa;AAAA,IAC1C,MAAM,YAAY,GAAG,+BAA+B,OAAO,SAAS;AAAA,IACpE,OAAO,EAAE,UAAU;AAAA,GACpB,EAGA,IAAI,uBAAuB,GAAG,aAAa;AAAA,IAC1C,MAAM,YAAY,GAAG,gCAAgC,OAAO,QAAQ;AAAA,IACpE,OAAO,EAAE,WAAW,UAAU,OAAO,SAAS;AAAA,GAC/C,EAGA,IAAI,QAAQ,GAAG,QAAQ,UAAU;AAAA,IAChC,MAAM,WAAW,GAAG,qBAAqB,OAAO,EAAE;AAAA,IAClD,IAAI,CAAC,UAAU;AAAA,MACb,IAAI,SAAS;AAAA,MACb,OAAO,EAAE,OAAO,+BAA+B;AAAA,IACjD;AAAA,IACA,OAAO,EAAE,SAAS;AAAA,GACnB,EAGA,KACC,KACA,GAAG,MAAM,UAAU;AAAA,IACjB,IAAI;AAAA,MACF,MAAM,WAAW,GAAG,wBAAwB;AAAA,QAC1C,IAAI,WAAW,OAAO,WAAW;AAAA,QACjC,WAAW,KAAK;AAAA,QAChB,SAAS,KAAK;AAAA,QACd,aAAa,KAAK;AAAA,QAClB,UAAU,KAAK;AAAA,MACjB,CAAC;AAAA,MACD,OAAO,EAAE,SAAS;AAAA,MAClB,OAAO,KAAK;AAAA,MACZ,IAAI,SAAS;AAAA,MACb,OAAO;AAAA,QACL,OAAO;AAAA,QACP,SAAS,OAAO,GAAG;AAAA,MACrB;AAAA;AAAA,KAGJ;AAAA,IACE,MAAM,EAAE,OAAO;AAAA,MACb,WAAW,EAAE,SAAS,EAAE,OAAO,CAAC;AAAA,MAChC,SAAS,EAAE,OAAO;AAAA,MAClB,aAAa,EAAE,SAAS,EAAE,OAAO,CAAC;AAAA,MAClC,UAAU,EAAE,SAAS,EAAE,OAAO,CAAC;AAAA,IACjC,CAAC;AAAA,EACH,CACF,EAGC,IACC,QACA,GAAG,QAAQ,MAAM,UAAU;AAAA,IACzB,MAAM,WAAW,GAAG,qBAAqB,OAAO,EAAE;AAAA,IAClD,IAAI,CAAC,UAAU;AAAA,MACb,IAAI,SAAS;AAAA,MACb,OAAO,EAAE,OAAO,+BAA+B;AAAA,IACjD;AAAA,IAEA,IAAI;AAAA,MACF,MAAM,UAA8C,CAAC;AAAA,MACrD,IAAI,KAAK,YAAY;AAAA,QAAW,QAAQ,UAAU,KAAK;AAAA,MACvD,IAAI,KAAK,gBAAgB;AAAA,QACvB,QAAQ,cAAc,KAAK;AAAA,MAC7B,IAAI,KAAK,aAAa;AAAA,QAAW,QAAQ,WAAW,KAAK;AAAA,MAEzD,GAAG,wBAAwB,OAAO,IAAI,OAAO;AAAA,MAC7C,MAAM,kBAAkB,GAAG,qBAAqB,OAAO,EAAE;AAAA,MACzD,OAAO,EAAE,UAAU,gBAAgB;AAAA,MACnC,OAAO,KAAK;AAAA,MACZ,IAAI,SAAS;AAAA,MACb,OAAO;AAAA,QACL,OAAO;AAAA,QACP,SAAS,OAAO,GAAG;AAAA,MACrB;AAAA;AAAA,KAGJ;AAAA,IACE,MAAM,EAAE,OAAO;AAAA,MACb,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC;AAAA,MAC9B,aAAa,EAAE,SAAS,EAAE,OAAO,CAAC;AAAA,MAClC,UAAU,EAAE,SAAS,EAAE,OAAO,CAAC;AAAA,IACjC,CAAC;AAAA,EACH,CACF,EAGC,OAAO,QAAQ,GAAG,QAAQ,UAAU;AAAA,IACnC,MAAM,WAAW,GAAG,qBAAqB,OAAO,EAAE;AAAA,IAClD,IAAI,CAAC,UAAU;AAAA,MACb,IAAI,SAAS;AAAA,MACb,OAAO,EAAE,OAAO,+BAA+B;AAAA,IACjD;AAAA,IAEA,IAAI;AAAA,MACF,GAAG,wBAAwB,OAAO,EAAE;AAAA,MACpC,OAAO,EAAE,SAAS,KAAK;AAAA,MACvB,OAAO,KAAK;AAAA,MACZ,IAAI,SAAS;AAAA,MACb,OAAO;AAAA,QACL,OAAO;AAAA,QACP,SAAS,OAAO,GAAG;AAAA,MACrB;AAAA;AAAA,GAEH,EAGA,KACC,gBACA,SAAS,QAAQ,MAAM,UAAU;AAAA,IAC/B,MAAM,WAAW,GAAG,qBAAqB,OAAO,EAAE;AAAA,IAClD,IAAI,CAAC,UAAU;AAAA,MACb,IAAI,SAAS;AAAA,MACb,OAAO,EAAE,OAAO,+BAA+B;AAAA,IACjD;AAAA,IAEA,IAAI;AAAA,MAEF,IAAI,KAAK,WAAW;AAAA,QAClB,MAAM,kBACJ,gBAAgB,YAA6B,SAAS;AAAA,QACxD,IAAI,CAAC,iBAAiB;AAAA,UACpB,IAAI,SAAS;AAAA,UACb,OAAO,EAAE,OAAO,iCAAiC;AAAA,QACnD;AAAA,QAEA,MAAM,UAAU,MAAM,gBAAgB,IAAI,KAAK,SAAS;AAAA,QACxD,IAAI,CAAC,SAAS;AAAA,UACZ,IAAI,SAAS;AAAA,UACb,OAAO,EAAE,OAAO,oBAAoB;AAAA,QACtC;AAAA,QAEA,MAAM,gBAAgB,YACpB,KAAK,WACL,SAAS,OACX;AAAA,QAEA,OAAO;AAAA,UACL,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,WAAW,KAAK;AAAA,QAClB;AAAA,MACF;AAAA,MAGA,MAAM,OAAO,GAAG,WAAW;AAAA,QACzB,IAAI,WAAW,OAAO,WAAW;AAAA,QACjC,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,SAAS,KAAK,UAAU;AAAA,UACtB,SAAS,SAAS;AAAA,UAClB,KAAK,KAAK,OAAO,QAAQ,IAAI;AAAA,QAC/B,CAAC;AAAA,MACH,CAAC;AAAA,MAED,OAAO;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,QAAQ,KAAK;AAAA,MACf;AAAA,MACA,OAAO,KAAK;AAAA,MACZ,IAAI,SAAS;AAAA,MACb,OAAO;AAAA,QACL,OAAO;AAAA,QACP,SAAS,OAAO,GAAG;AAAA,MACrB;AAAA;AAAA,KAGJ;AAAA,IACE,MAAM,EAAE,OAAO;AAAA,MACb,WAAW,EAAE,SAAS,EAAE,OAAO,CAAC;AAAA,MAChC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC;AAAA,IAC5B,CAAC;AAAA,EACH,CACF;AAAA;;;ACjNN,IAAM,oBAAoB;AAEnB,SAAS,QAAQ,CAAC,SAAwB;AAAA,EAC/C,MAAM,MAAM,QACT,QAAQ,UAAU,EAClB,YAAY,0BAA0B;AAAA,EAGzC,IACG,QAAQ,MAAM,EACd,YAAY,gBAAgB,EAC5B,OAAO,kBAAkB,sBAAsB,EAC/C,OAAO,oBAAoB,oBAAoB,EAC/C,OAAO,qBAAqB,aAAa,iBAAiB,EAC1D,OAAO,OAAO,YAAY;AAAA,IACzB,IAAI;AAAA,MACF,MAAM,MAAM,YAAY,OAAO;AAAA,MAC/B,MAAM,SAAS,IAAI;AAAA,MACnB,IAAI,QAAQ;AAAA,QAAS,OAAO,IAAI,WAAW,QAAQ,OAAO;AAAA,MAC1D,IAAI,QAAQ;AAAA,QAAU,OAAO,IAAI,YAAY,QAAQ,QAAQ;AAAA,MAC7D,MAAM,QAAQ,OAAO,SAAS;AAAA,MAC9B,MAAM,WAAW,QAAQ,kBAAkB,UAAU;AAAA,MACrD,MAAM,OAAO,MAAM,OAA6B,KAAK,QAAQ;AAAA,MAC7D,MAAM,YAAY,KAAK,aAAa,CAAC;AAAA,MACrC,IAAI,CAAC,aAAa,UAAU,WAAW,GAAG;AAAA,QACxC,KAAK,qBAAqB;AAAA,QAC1B;AAAA,MACF;AAAA,MACA,OAAO,WAAW;AAAA,MAClB,YACE,UAAU,IAAI,CAAC,OAAY;AAAA,QACzB,IAAI,QAAQ,EAAE,EAAE;AAAA,QAChB,SAAS,EAAE,WAAW;AAAA,QACtB,aAAa,EAAE,eAAe;AAAA,QAC9B,UAAU,EAAE,YAAY;AAAA,QACxB,SAAS,EAAE,WAAW,EAAE,aAAa;AAAA,MACvC,EAAE,CACJ;AAAA,MACA,OAAO,KAAU;AAAA,MACjB,KAAK,IAAI,OAAO;AAAA;AAAA,GAEnB;AAAA,EAGH,IACG,QAAQ,QAAQ,EAChB,YAAY,uBAAuB,EACnC,eAAe,uBAAuB,qBAAqB,EAC3D,OAAO,wBAAwB,sBAAsB,EACrD,OAAO,oBAAoB,UAAU,EACrC,OAAO,kBAAkB,YAAY,EACrC,OAAO,qBAAqB,aAAa,iBAAiB,EAC1D,OAAO,OAAO,YAAY;AAAA,IACzB,IAAI;AAAA,MACF,MAAM,MAAM,YAAY,OAAO;AAAA,MAC/B,MAAM,OAA4B,EAAE,SAAS,QAAQ,QAAQ;AAAA,MAC7D,IAAI,QAAQ;AAAA,QAAa,KAAK,cAAc,QAAQ;AAAA,MACpD,IAAI,QAAQ;AAAA,QAAU,KAAK,WAAW,QAAQ;AAAA,MAC9C,IAAI,QAAQ;AAAA,QAAS,KAAK,UAAU,QAAQ;AAAA,MAC5C,MAAM,SAAS,MAAM,QAAa,KAAK,kBAAkB,IAAI;AAAA,MAC7D,QAAQ,qBAAqB,QAAQ,QAAQ,EAAE,GAAG;AAAA,MAClD,OAAO,KAAU;AAAA,MACjB,KAAK,IAAI,OAAO;AAAA;AAAA,GAEnB;AAAA,EAGH,IACG,QAAQ,QAAQ,EAChB,YAAY,mBAAmB,EAC/B,eAAe,iBAAiB,aAAa,EAC7C,OAAO,uBAAuB,aAAa,EAC3C,OAAO,wBAAwB,iBAAiB,EAChD,OAAO,oBAAoB,cAAc,EACzC,OAAO,qBAAqB,aAAa,iBAAiB,EAC1D,OAAO,OAAO,YAAY;AAAA,IACzB,IAAI;AAAA,MACF,MAAM,MAAM,YAAY,OAAO;AAAA,MAC/B,MAAM,OAA4B,CAAC;AAAA,MACnC,IAAI,QAAQ;AAAA,QAAS,KAAK,UAAU,QAAQ;AAAA,MAC5C,IAAI,QAAQ;AAAA,QAAa,KAAK,cAAc,QAAQ;AAAA,MACpD,IAAI,QAAQ;AAAA,QAAU,KAAK,WAAW,QAAQ;AAAA,MAC9C,IAAI,OAAO,KAAK,IAAI,EAAE,WAAW,GAAG;AAAA,QAClC,KACE,uFACF;AAAA,QACA;AAAA,MACF;AAAA,MACA,MAAM,OAAY,KAAK,kBAAkB,QAAQ,MAAM,IAAI;AAAA,MAC3D,QAAQ,YAAY,QAAQ,QAAQ,EAAE,YAAY;AAAA,MAClD,OAAO,KAAU;AAAA,MACjB,KAAK,IAAI,OAAO;AAAA;AAAA,GAEnB;AAAA,EAGH,IACG,QAAQ,QAAQ,EAChB,YAAY,mBAAmB,EAC/B,eAAe,iBAAiB,aAAa,EAC7C,OAAO,qBAAqB,aAAa,iBAAiB,EAC1D,OAAO,OAAO,YAAY;AAAA,IACzB,IAAI;AAAA,MACF,MAAM,MAAM,YAAY,OAAO;AAAA,MAC/B,MAAM,UAAe,KAAK,kBAAkB,QAAQ,IAAI;AAAA,MACxD,QAAQ,YAAY,QAAQ,QAAQ,EAAE,YAAY;AAAA,MAClD,OAAO,KAAU;AAAA,MACjB,KAAK,IAAI,OAAO;AAAA;AAAA,GAEnB;AAAA,EAGH,IACG,QAAQ,SAAS,EACjB,YAAY,8BAA8B,EAC1C,eAAe,iBAAiB,aAAa,EAC7C,OAAO,yBAAyB,0BAA0B,EAC1D,OAAO,qBAAqB,aAAa,iBAAiB,EAC1D,OAAO,OAAO,YAAY;AAAA,IACzB,IAAI;AAAA,MACF,MAAM,MAAM,YAAY,OAAO;AAAA,MAC/B,MAAM,OAA4B,CAAC;AAAA,MACnC,IAAI,QAAQ;AAAA,QAAS,KAAK,YAAY,QAAQ;AAAA,MAC9C,MAAM,SAAS,MAAM,QACnB,KACA,kBAAkB,QAAQ,cAC1B,IACF;AAAA,MACA,QAAQ,YAAY,QAAQ,QAAQ,EAAE,aAAa;AAAA,MACnD,IAAI,QAAQ,QAAQ;AAAA,QAClB,QAAQ,IAAI,OAAO,MAAM;AAAA,MAC3B;AAAA,MACA,OAAO,KAAU;AAAA,MACjB,KAAK,IAAI,OAAO;AAAA;AAAA,GAEnB;AAAA;;;ACnJE,SAAS,gBAAgB,CAC9B,SACA,eACM;AAAA,EACN,SAAiB,OAAO;AAAA;;;ACHnB,IAAM,aAAyB;AAAA,EACpC,MAAM;AAAA,EACN,SAAS;AAAA,EACT,aAAa;AAAA,EACb,MAAM,CAAC,WAAW,KAAK;AAAA,EACvB,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,cAAc,CAAC,SAA0B,aAAa,IAAI;AAAA,EAC1D,YAAY,OAAO,SAAS,iBAAiB;AAAA,IAC3C,iBAAiB,SAAS,YAAY;AAAA;AAE1C;",
10
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;AAwBO,SAAS,YAAY,CAAC,MAAuB;AAAA,EAClD,QAAQ,IAAI,oBAAoB;AAAA,EAEhC,OACE,IAAI,OAAO,EAER,IAAI,KAAK,GAAG,YAAY;AAAA,IACvB,MAAM,IAAI;AAAA,IACV,MAAM,YACJ,EAAE,cAAc,YACZ,GAAG,+BAA+B,EAAE,SAAS,IAC7C,GAAG,yBAAyB;AAAA,IAClC,OAAO,EAAE,UAAU;AAAA,GACpB,EAGA,IAAI,WAAW,MAAM;AAAA,IACpB,MAAM,YAAY,GAAG,+BAA+B,IAAI;AAAA,IACxD,OAAO,EAAE,UAAU;AAAA,GACpB,EAGA,IAAI,uBAAuB,GAAG,aAAa;AAAA,IAC1C,MAAM,YAAY,GAAG,+BAA+B,OAAO,SAAS;AAAA,IACpE,OAAO,EAAE,UAAU;AAAA,GACpB,EAGA,IAAI,uBAAuB,GAAG,aAAa;AAAA,IAC1C,MAAM,YAAY,GAAG,gCAAgC,OAAO,QAAQ;AAAA,IACpE,OAAO,EAAE,WAAW,UAAU,OAAO,SAAS;AAAA,GAC/C,EAGA,IAAI,QAAQ,GAAG,QAAQ,UAAU;AAAA,IAChC,MAAM,WAAW,GAAG,qBAAqB,OAAO,EAAE;AAAA,IAClD,IAAI,CAAC,UAAU;AAAA,MACb,IAAI,SAAS;AAAA,MACb,OAAO,EAAE,OAAO,+BAA+B;AAAA,IACjD;AAAA,IACA,OAAO,EAAE,SAAS;AAAA,GACnB,EAGA,KACC,KACA,GAAG,MAAM,UAAU;AAAA,IACjB,IAAI;AAAA,MACF,MAAM,WAAW,GAAG,wBAAwB;AAAA,QAC1C,IAAI,WAAW,OAAO,WAAW;AAAA,QACjC,WAAW,KAAK;AAAA,QAChB,SAAS,KAAK;AAAA,QACd,aAAa,KAAK;AAAA,QAClB,UAAU,KAAK;AAAA,MACjB,CAAC;AAAA,MACD,OAAO,EAAE,SAAS;AAAA,MAClB,OAAO,KAAK;AAAA,MACZ,IAAI,SAAS;AAAA,MACb,OAAO;AAAA,QACL,OAAO;AAAA,QACP,SAAS,OAAO,GAAG;AAAA,MACrB;AAAA;AAAA,KAGJ;AAAA,IACE,MAAM,EAAE,OAAO;AAAA,MACb,WAAW,EAAE,SAAS,EAAE,OAAO,CAAC;AAAA,MAChC,SAAS,EAAE,OAAO;AAAA,MAClB,aAAa,EAAE,SAAS,EAAE,OAAO,CAAC;AAAA,MAClC,UAAU,EAAE,SAAS,EAAE,OAAO,CAAC;AAAA,IACjC,CAAC;AAAA,EACH,CACF,EAGC,IACC,QACA,GAAG,QAAQ,MAAM,UAAU;AAAA,IACzB,MAAM,WAAW,GAAG,qBAAqB,OAAO,EAAE;AAAA,IAClD,IAAI,CAAC,UAAU;AAAA,MACb,IAAI,SAAS;AAAA,MACb,OAAO,EAAE,OAAO,+BAA+B;AAAA,IACjD;AAAA,IAEA,IAAI;AAAA,MACF,MAAM,UAA8C,CAAC;AAAA,MACrD,IAAI,KAAK,YAAY;AAAA,QAAW,QAAQ,UAAU,KAAK;AAAA,MACvD,IAAI,KAAK,gBAAgB;AAAA,QACvB,QAAQ,cAAc,KAAK;AAAA,MAC7B,IAAI,KAAK,aAAa;AAAA,QAAW,QAAQ,WAAW,KAAK;AAAA,MAEzD,GAAG,wBAAwB,OAAO,IAAI,OAAO;AAAA,MAC7C,MAAM,kBAAkB,GAAG,qBAAqB,OAAO,EAAE;AAAA,MACzD,OAAO,EAAE,UAAU,gBAAgB;AAAA,MACnC,OAAO,KAAK;AAAA,MACZ,IAAI,SAAS;AAAA,MACb,OAAO;AAAA,QACL,OAAO;AAAA,QACP,SAAS,OAAO,GAAG;AAAA,MACrB;AAAA;AAAA,KAGJ;AAAA,IACE,MAAM,EAAE,OAAO;AAAA,MACb,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC;AAAA,MAC9B,aAAa,EAAE,SAAS,EAAE,OAAO,CAAC;AAAA,MAClC,UAAU,EAAE,SAAS,EAAE,OAAO,CAAC;AAAA,IACjC,CAAC;AAAA,EACH,CACF,EAGC,OAAO,QAAQ,GAAG,QAAQ,UAAU;AAAA,IACnC,MAAM,WAAW,GAAG,qBAAqB,OAAO,EAAE;AAAA,IAClD,IAAI,CAAC,UAAU;AAAA,MACb,IAAI,SAAS;AAAA,MACb,OAAO,EAAE,OAAO,+BAA+B;AAAA,IACjD;AAAA,IAEA,IAAI;AAAA,MACF,GAAG,wBAAwB,OAAO,EAAE;AAAA,MACpC,OAAO,EAAE,SAAS,KAAK;AAAA,MACvB,OAAO,KAAK;AAAA,MACZ,IAAI,SAAS;AAAA,MACb,OAAO;AAAA,QACL,OAAO;AAAA,QACP,SAAS,OAAO,GAAG;AAAA,MACrB;AAAA;AAAA,GAEH,EAGA,KACC,gBACA,SAAS,QAAQ,MAAM,UAAU;AAAA,IAC/B,MAAM,WAAW,GAAG,qBAAqB,OAAO,EAAE;AAAA,IAClD,IAAI,CAAC,UAAU;AAAA,MACb,IAAI,SAAS;AAAA,MACb,OAAO,EAAE,OAAO,+BAA+B;AAAA,IACjD;AAAA,IAEA,IAAI;AAAA,MAEF,IAAI,KAAK,WAAW;AAAA,QAClB,MAAM,kBACJ,gBAAgB,YAA6B,SAAS;AAAA,QACxD,IAAI,CAAC,iBAAiB;AAAA,UACpB,IAAI,SAAS;AAAA,UACb,OAAO,EAAE,OAAO,iCAAiC;AAAA,QACnD;AAAA,QAEA,MAAM,UAAU,MAAM,gBAAgB,IAAI,KAAK,SAAS;AAAA,QACxD,IAAI,CAAC,SAAS;AAAA,UACZ,IAAI,SAAS;AAAA,UACb,OAAO,EAAE,OAAO,oBAAoB;AAAA,QACtC;AAAA,QAEA,MAAM,gBAAgB,YACpB,KAAK,WACL,SAAS,OACX;AAAA,QAEA,OAAO;AAAA,UACL,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,WAAW,KAAK;AAAA,QAClB;AAAA,MACF;AAAA,MAGA,MAAM,OAAO,GAAG,WAAW;AAAA,QACzB,IAAI,WAAW,OAAO,WAAW;AAAA,QACjC,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,SAAS,KAAK,UAAU;AAAA,UACtB,SAAS,SAAS;AAAA,UAClB,KAAK,KAAK,OAAO,QAAQ,IAAI;AAAA,QAC/B,CAAC;AAAA,MACH,CAAC;AAAA,MAED,OAAO;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,QAAQ,KAAK;AAAA,MACf;AAAA,MACA,OAAO,KAAK;AAAA,MACZ,IAAI,SAAS;AAAA,MACb,OAAO;AAAA,QACL,OAAO;AAAA,QACP,SAAS,OAAO,GAAG;AAAA,MACrB;AAAA;AAAA,KAGJ;AAAA,IACE,MAAM,EAAE,OAAO;AAAA,MACb,WAAW,EAAE,SAAS,EAAE,OAAO,CAAC;AAAA,MAChC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC;AAAA,IAC5B,CAAC;AAAA,EACH,CACF;AAAA;;;AChNN,IAAM,oBAAoB;AAEnB,SAAS,QAAQ,CAAC,SAAwB;AAAA,EAC/C,MAAM,MAAM,QACT,QAAQ,UAAU,EAClB,YAAY,0BAA0B;AAAA,EAGzC,IACG,QAAQ,MAAM,EACd,YAAY,gBAAgB,EAC5B,OAAO,kBAAkB,sBAAsB,EAC/C,OAAO,oBAAoB,oBAAoB,EAC/C,OAAO,qBAAqB,aAAa,iBAAiB,EAC1D,OAAO,OAAO,YAAY;AAAA,IACzB,IAAI;AAAA,MACF,MAAM,MAAM,YAAY,OAAO;AAAA,MAC/B,MAAM,SAAS,IAAI;AAAA,MACnB,IAAI,QAAQ;AAAA,QAAS,OAAO,IAAI,WAAW,QAAQ,OAAO;AAAA,MAC1D,IAAI,QAAQ;AAAA,QAAU,OAAO,IAAI,YAAY,QAAQ,QAAQ;AAAA,MAC7D,MAAM,QAAQ,OAAO,SAAS;AAAA,MAC9B,MAAM,WAAW,QAAQ,kBAAkB,UAAU;AAAA,MACrD,MAAM,OAAO,MAAM,OAA6B,KAAK,QAAQ;AAAA,MAC7D,MAAM,YAAY,KAAK,aAAa,CAAC;AAAA,MACrC,IAAI,CAAC,aAAa,UAAU,WAAW,GAAG;AAAA,QACxC,KAAK,qBAAqB;AAAA,QAC1B;AAAA,MACF;AAAA,MACA,OAAO,WAAW;AAAA,MAClB,YACE,UAAU,IAAI,CAAC,OAAY;AAAA,QACzB,IAAI,QAAQ,EAAE,EAAE;AAAA,QAChB,SAAS,EAAE,WAAW;AAAA,QACtB,aAAa,EAAE,eAAe;AAAA,QAC9B,UAAU,EAAE,YAAY;AAAA,QACxB,SAAS,EAAE,WAAW,EAAE,aAAa;AAAA,MACvC,EAAE,CACJ;AAAA,MACA,OAAO,KAAU;AAAA,MACjB,KAAK,IAAI,OAAO;AAAA;AAAA,GAEnB;AAAA,EAGH,IACG,QAAQ,QAAQ,EAChB,YAAY,uBAAuB,EACnC,eAAe,uBAAuB,qBAAqB,EAC3D,OAAO,wBAAwB,sBAAsB,EACrD,OAAO,oBAAoB,UAAU,EACrC,OAAO,kBAAkB,YAAY,EACrC,OAAO,qBAAqB,aAAa,iBAAiB,EAC1D,OAAO,OAAO,YAAY;AAAA,IACzB,IAAI;AAAA,MACF,MAAM,MAAM,YAAY,OAAO;AAAA,MAC/B,MAAM,OAA4B,EAAE,SAAS,QAAQ,QAAQ;AAAA,MAC7D,IAAI,QAAQ;AAAA,QAAa,KAAK,cAAc,QAAQ;AAAA,MACpD,IAAI,QAAQ;AAAA,QAAU,KAAK,WAAW,QAAQ;AAAA,MAC9C,IAAI,QAAQ;AAAA,QAAS,KAAK,UAAU,QAAQ;AAAA,MAC5C,MAAM,SAAS,MAAM,QAAa,KAAK,kBAAkB,IAAI;AAAA,MAC7D,QAAQ,qBAAqB,QAAQ,QAAQ,EAAE,GAAG;AAAA,MAClD,OAAO,KAAU;AAAA,MACjB,KAAK,IAAI,OAAO;AAAA;AAAA,GAEnB;AAAA,EAGH,IACG,QAAQ,QAAQ,EAChB,YAAY,mBAAmB,EAC/B,eAAe,iBAAiB,aAAa,EAC7C,OAAO,uBAAuB,aAAa,EAC3C,OAAO,wBAAwB,iBAAiB,EAChD,OAAO,oBAAoB,cAAc,EACzC,OAAO,qBAAqB,aAAa,iBAAiB,EAC1D,OAAO,OAAO,YAAY;AAAA,IACzB,IAAI;AAAA,MACF,MAAM,MAAM,YAAY,OAAO;AAAA,MAC/B,MAAM,OAA4B,CAAC;AAAA,MACnC,IAAI,QAAQ;AAAA,QAAS,KAAK,UAAU,QAAQ;AAAA,MAC5C,IAAI,QAAQ;AAAA,QAAa,KAAK,cAAc,QAAQ;AAAA,MACpD,IAAI,QAAQ;AAAA,QAAU,KAAK,WAAW,QAAQ;AAAA,MAC9C,IAAI,OAAO,KAAK,IAAI,EAAE,WAAW,GAAG;AAAA,QAClC,KACE,uFACF;AAAA,QACA;AAAA,MACF;AAAA,MACA,MAAM,OAAY,KAAK,kBAAkB,QAAQ,MAAM,IAAI;AAAA,MAC3D,QAAQ,YAAY,QAAQ,QAAQ,EAAE,YAAY;AAAA,MAClD,OAAO,KAAU;AAAA,MACjB,KAAK,IAAI,OAAO;AAAA;AAAA,GAEnB;AAAA,EAGH,IACG,QAAQ,QAAQ,EAChB,YAAY,mBAAmB,EAC/B,eAAe,iBAAiB,aAAa,EAC7C,OAAO,qBAAqB,aAAa,iBAAiB,EAC1D,OAAO,OAAO,YAAY;AAAA,IACzB,IAAI;AAAA,MACF,MAAM,MAAM,YAAY,OAAO;AAAA,MAC/B,MAAM,UAAe,KAAK,kBAAkB,QAAQ,IAAI;AAAA,MACxD,QAAQ,YAAY,QAAQ,QAAQ,EAAE,YAAY;AAAA,MAClD,OAAO,KAAU;AAAA,MACjB,KAAK,IAAI,OAAO;AAAA;AAAA,GAEnB;AAAA,EAGH,IACG,QAAQ,SAAS,EACjB,YAAY,8BAA8B,EAC1C,eAAe,iBAAiB,aAAa,EAC7C,OAAO,yBAAyB,0BAA0B,EAC1D,OAAO,qBAAqB,aAAa,iBAAiB,EAC1D,OAAO,OAAO,YAAY;AAAA,IACzB,IAAI;AAAA,MACF,MAAM,MAAM,YAAY,OAAO;AAAA,MAC/B,MAAM,OAA4B,CAAC;AAAA,MACnC,IAAI,QAAQ;AAAA,QAAS,KAAK,YAAY,QAAQ;AAAA,MAC9C,MAAM,SAAS,MAAM,QACnB,KACA,kBAAkB,QAAQ,cAC1B,IACF;AAAA,MACA,QAAQ,YAAY,QAAQ,QAAQ,EAAE,aAAa;AAAA,MACnD,IAAI,QAAQ,QAAQ;AAAA,QAClB,QAAQ,IAAI,OAAO,MAAM;AAAA,MAC3B;AAAA,MACA,OAAO,KAAU;AAAA,MACjB,KAAK,IAAI,OAAO;AAAA;AAAA,GAEnB;AAAA;;;AClJE,SAAS,gBAAgB,CAC9B,SACA,eACM;AAAA,EACN,SAAiB,OAAO;AAAA;;;ACHnB,IAAM,aAAyB;AAAA,EACpC,MAAM;AAAA,EACN,SAAS;AAAA,EACT,aAAa;AAAA,EACb,MAAM,CAAC,WAAW,KAAK;AAAA,EACvB,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,cAAc,CAAC,SAA0B,aAAa,IAAI;AAAA,EAC1D,YAAY,OAAO,SAAS,iBAAiB;AAAA,IAC3C,iBAAiB,SAAS,YAAY;AAAA;AAE1C;",
11
11
  "debugId": "E29820E5E0F6A45164756E2164756E21",
12
12
  "names": []
13
13
  }
@@ -3,11 +3,11 @@
3
3
  "sources": ["../src/plugins/log/routes.ts", "../src/cli/commands/log.cmd.ts", "../src/plugins/log/commands.ts", "../src/plugins/log/index.ts"],
4
4
  "sourcesContent": [
5
5
  "/**\n * Log Plugin Routes\n *\n * Log viewing and real-time streaming via Server-Sent Events.\n *\n * Endpoints:\n * GET / — List recent log entries (query: level, limit, source, from, to, offset)\n * GET /stream — SSE stream of log entries (query: level, source)\n */\n\nimport { Elysia } from \"elysia\";\n\nimport type { PluginRouteDeps } from \"../../core/types.js\";\nimport type { LogLevel, LogEntry } from \"../../core/types.js\";\nimport { logger } from \"../../services/logger.js\";\n\nconst LEVEL_PRIORITY: Record<LogLevel, number> = {\n debug: 0,\n info: 1,\n warn: 2,\n error: 3,\n};\n\nexport function createRoutes(_deps: PluginRouteDeps) {\n return (\n new Elysia()\n // List recent log entries from the log file\n .get(\"/\", async ({ query }) => {\n const q = query as Record<string, string>;\n const entries = await logger.readHistory({\n level: q.level as LogLevel | undefined,\n source: q.source,\n from: q.from,\n to: q.to,\n limit: q.limit ? parseInt(q.limit, 10) : 200,\n offset: q.offset ? parseInt(q.offset, 10) : 0,\n });\n return { entries, count: entries.length };\n })\n\n // SSE stream logs using EventEmitter\n .get(\"/stream\", ({ query, set }) => {\n const q = query as Record<string, string>;\n const minLevel = (q.level ?? \"info\") as LogLevel;\n const sourceFilter = q.source ?? \"\";\n\n set.headers[\"Content-Type\"] = \"text/event-stream\";\n set.headers[\"Cache-Control\"] = \"no-cache\";\n set.headers[\"Connection\"] = \"keep-alive\";\n set.headers[\"X-Accel-Buffering\"] = \"no\";\n\n return new ReadableStream({\n start(controller) {\n const encoder = new TextEncoder();\n\n // Initial comment to establish connection\n controller.enqueue(encoder.encode(\": connected\\n\\n\"));\n\n // Log event handler\n const onLog = (entry: LogEntry) => {\n if (LEVEL_PRIORITY[entry.level] < LEVEL_PRIORITY[minLevel])\n return;\n if (sourceFilter && !entry.source.includes(sourceFilter)) return;\n\n try {\n controller.enqueue(\n encoder.encode(\n `event: log\\ndata: ${JSON.stringify(entry)}\\n\\n`,\n ),\n );\n } catch {\n cleanup();\n }\n };\n\n // Heartbeat every 15s\n const heartbeat = setInterval(() => {\n try {\n controller.enqueue(encoder.encode(\": heartbeat\\n\\n\"));\n } catch {\n cleanup();\n }\n }, 15_000);\n\n const cleanup = () => {\n clearInterval(heartbeat);\n logger.removeListener(\"log\", onLog);\n try {\n controller.close();\n } catch {\n /* already closed */\n }\n };\n\n logger.on(\"log\", onLog);\n\n // Cleanup on stream cancel\n return () => cleanup();\n },\n\n cancel() {\n // Client disconnected — cleanup handled by start's return\n },\n });\n })\n );\n}\n",
6
- "import { Command } from \"commander\";\nimport {\n getAgentUrl,\n agentFetch,\n apiGet,\n fail,\n info,\n header,\n blank,\n colors,\n timeAgo,\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(\"log\").description(\"View and stream logs\");\n\n // log list\n cmd\n .command(\"list\")\n .description(\"List recent log entries\")\n .option(\"--level <level>\", \"Minimum log level\", \"info\")\n .option(\"--limit <n>\", \"Number of entries to show\", \"50\")\n .option(\"--source <source>\", \"Filter by source\")\n .option(\"--agent-url <url>\", \"Agent URL\", DEFAULT_AGENT_URL)\n .action(async (options) => {\n try {\n const url = getAgentUrl(options);\n const params = new URLSearchParams();\n params.set(\"level\", options.level);\n params.set(\"limit\", options.limit);\n if (options.source) params.set(\"source\", options.source);\n const logs = await apiGet<any[]>(url, `/api/logs?${params.toString()}`);\n if (!logs || logs.length === 0) {\n info(\"No log entries found.\");\n return;\n }\n header(\"Logs\");\n blank();\n for (const entry of logs) {\n const level = formatLogLevel(entry.level);\n const time = entry.timestamp\n ? colors.dim(timeAgo(entry.timestamp))\n : \"\";\n const source = entry.source ? colors.cyan(`[${entry.source}]`) : \"\";\n const message = entry.message || \"\";\n console.log(` ${level} ${source} ${message} ${time}`);\n }\n } catch (err: any) {\n fail(err.message);\n }\n });\n\n // log stream\n cmd\n .command(\"stream\")\n .description(\"Stream logs in real-time (SSE)\")\n .option(\"--level <level>\", \"Minimum log level\", \"info\")\n .option(\"--agent-url <url>\", \"Agent URL\", DEFAULT_AGENT_URL)\n .action(async (options) => {\n try {\n const url = getAgentUrl(options);\n const params = new URLSearchParams();\n params.set(\"level\", options.level);\n const streamUrl = `${url}/api/logs/stream?${params.toString()}`;\n\n info(`Streaming logs from ${url} (level: ${options.level})...`);\n info(\"Press Ctrl+C to stop.\\n\");\n\n const response = await fetch(streamUrl, {\n headers: { Accept: \"text/event-stream\" },\n });\n\n if (!response.ok) {\n fail(\n `Failed to connect to log stream: ${response.status} ${response.statusText}`,\n );\n return;\n }\n\n if (!response.body) {\n fail(\"No response body for SSE stream.\");\n return;\n }\n\n const decoder = new TextDecoder();\n const reader = response.body.getReader();\n\n const cleanup = () => {\n reader.cancel().catch(() => {});\n console.log(\"\\nLog stream ended.\");\n process.exit(0);\n };\n\n process.on(\"SIGINT\", cleanup);\n process.on(\"SIGTERM\", cleanup);\n\n let buffer = \"\";\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split(\"\\n\");\n buffer = lines.pop() || \"\";\n\n for (const line of lines) {\n if (line.startsWith(\"data: \")) {\n const data = line.slice(6).trim();\n if (!data || data === \"[DONE]\") continue;\n try {\n const entry = JSON.parse(data);\n const level = formatLogLevel(entry.level);\n const source = entry.source\n ? colors.cyan(`[${entry.source}]`)\n : \"\";\n const message = entry.message || \"\";\n const time = entry.timestamp\n ? colors.dim(new Date(entry.timestamp).toLocaleTimeString())\n : \"\";\n console.log(`${level} ${source} ${message} ${time}`);\n } catch {\n // raw text line\n if (data.trim()) console.log(data);\n }\n }\n }\n }\n } catch (err: any) {\n if (err.name === \"AbortError\") return;\n fail(err.message);\n }\n });\n}\n\nfunction formatLogLevel(level: string | undefined): string {\n if (!level) return colors.dim(\"???\");\n switch (level.toLowerCase()) {\n case \"error\":\n return colors.red(colors.bold(\"ERR\"));\n case \"warn\":\n case \"warning\":\n return colors.yellow(\"WRN\");\n case \"info\":\n return colors.blue(\"INF\");\n case \"debug\":\n return colors.gray(\"DBG\");\n case \"trace\":\n return colors.dim(\"TRC\");\n default:\n return colors.dim(level.toUpperCase().slice(0, 3));\n }\n}\n",
6
+ "import { Command } from \"commander\";\nimport {\n getAgentUrl,\n apiGet,\n fail,\n info,\n header,\n blank,\n colors,\n timeAgo,\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(\"log\").description(\"View and stream logs\");\n\n // log list\n cmd\n .command(\"list\")\n .description(\"List recent log entries\")\n .option(\"--level <level>\", \"Minimum log level\", \"info\")\n .option(\"--limit <n>\", \"Number of entries to show\", \"50\")\n .option(\"--source <source>\", \"Filter by source\")\n .option(\"--agent-url <url>\", \"Agent URL\", DEFAULT_AGENT_URL)\n .action(async (options) => {\n try {\n const url = getAgentUrl(options);\n const params = new URLSearchParams();\n params.set(\"level\", options.level);\n params.set(\"limit\", options.limit);\n if (options.source) params.set(\"source\", options.source);\n const logs = await apiGet<any[]>(url, `/api/logs?${params.toString()}`);\n if (!logs || logs.length === 0) {\n info(\"No log entries found.\");\n return;\n }\n header(\"Logs\");\n blank();\n for (const entry of logs) {\n const level = formatLogLevel(entry.level);\n const time = entry.timestamp\n ? colors.dim(timeAgo(entry.timestamp))\n : \"\";\n const source = entry.source ? colors.cyan(`[${entry.source}]`) : \"\";\n const message = entry.message || \"\";\n console.log(` ${level} ${source} ${message} ${time}`);\n }\n } catch (err: any) {\n fail(err.message);\n }\n });\n\n // log stream\n cmd\n .command(\"stream\")\n .description(\"Stream logs in real-time (SSE)\")\n .option(\"--level <level>\", \"Minimum log level\", \"info\")\n .option(\"--agent-url <url>\", \"Agent URL\", DEFAULT_AGENT_URL)\n .action(async (options) => {\n try {\n const url = getAgentUrl(options);\n const params = new URLSearchParams();\n params.set(\"level\", options.level);\n const streamUrl = `${url}/api/logs/stream?${params.toString()}`;\n\n info(`Streaming logs from ${url} (level: ${options.level})...`);\n info(\"Press Ctrl+C to stop.\\n\");\n\n const response = await fetch(streamUrl, {\n headers: { Accept: \"text/event-stream\" },\n });\n\n if (!response.ok) {\n fail(\n `Failed to connect to log stream: ${response.status} ${response.statusText}`,\n );\n return;\n }\n\n if (!response.body) {\n fail(\"No response body for SSE stream.\");\n return;\n }\n\n const decoder = new TextDecoder();\n const reader = response.body.getReader();\n\n const cleanup = () => {\n reader.cancel().catch(() => {});\n console.log(\"\\nLog stream ended.\");\n process.exit(0);\n };\n\n process.on(\"SIGINT\", cleanup);\n process.on(\"SIGTERM\", cleanup);\n\n let buffer = \"\";\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split(\"\\n\");\n buffer = lines.pop() || \"\";\n\n for (const line of lines) {\n if (line.startsWith(\"data: \")) {\n const data = line.slice(6).trim();\n if (!data || data === \"[DONE]\") continue;\n try {\n const entry = JSON.parse(data);\n const level = formatLogLevel(entry.level);\n const source = entry.source\n ? colors.cyan(`[${entry.source}]`)\n : \"\";\n const message = entry.message || \"\";\n const time = entry.timestamp\n ? colors.dim(new Date(entry.timestamp).toLocaleTimeString())\n : \"\";\n console.log(`${level} ${source} ${message} ${time}`);\n } catch {\n // raw text line\n if (data.trim()) console.log(data);\n }\n }\n }\n }\n } catch (err: any) {\n if (err.name === \"AbortError\") return;\n fail(err.message);\n }\n });\n}\n\nfunction formatLogLevel(level: string | undefined): string {\n if (!level) return colors.dim(\"???\");\n switch (level.toLowerCase()) {\n case \"error\":\n return colors.red(colors.bold(\"ERR\"));\n case \"warn\":\n case \"warning\":\n return colors.yellow(\"WRN\");\n case \"info\":\n return colors.blue(\"INF\");\n case \"debug\":\n return colors.gray(\"DBG\");\n case \"trace\":\n return colors.dim(\"TRC\");\n default:\n return colors.dim(level.toUpperCase().slice(0, 3));\n }\n}\n",
7
7
  "import type { Command } from \"commander\";\nimport type { HostServices } from \"../../core/plugin-system.js\";\nimport { register as registerLog } from \"../../cli/commands/log.cmd.js\";\n\nexport function registerCommands(\n program: Command,\n _hostServices: HostServices,\n): void {\n registerLog(program);\n}\n",
8
8
  "import type { VibePlugin } from \"../../core/plugin-system.js\";\nimport type { PluginRouteDeps } from \"../../core/types.js\";\nimport { createRoutes } from \"./routes.js\";\nimport { registerCommands } from \"./commands.js\";\n\nexport const vibePlugin: VibePlugin = {\n name: \"log\",\n version: \"2.2.0\",\n description: \"Log viewing and real-time streaming via SSE\",\n tags: [\"backend\", \"cli\"],\n cliCommand: \"log\",\n apiPrefix: \"/api/logs\",\n createRoutes: (deps: PluginRouteDeps) => createRoutes(deps),\n onCliSetup: async (program, hostServices) => {\n registerCommands(program, hostServices);\n },\n};\n"
9
9
  ],
10
- "mappings": "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",
10
+ "mappings": "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",
11
11
  "debugId": "04448E46225BA29664756E2164756E21",
12
12
  "names": []
13
13
  }
@@ -2,12 +2,12 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/plugins/git/routes.ts", "../src/cli/commands/git.cmd.ts", "../src/plugins/git/commands.ts", "../src/plugins/git/index.ts"],
4
4
  "sourcesContent": [
5
- "/**\n * Git Plugin — Routes\n *\n * Git repository scanning, tracking, and hierarchy management.\n *\n * Endpoints:\n * GET / — List all tracked git repositories\n * GET /:id — Get repository by ID\n * POST /scan — Scan directory for git repositories\n * PUT /:id — Update repository metadata\n * DELETE /:id — Delete repository from tracking\n * POST /fix-hierarchy — Fix parent/child relationships\n */\n\nimport { Elysia, t } from \"elysia\";\nimport { promises as fs } from \"node:fs\";\nimport path from \"node:path\";\n\nimport type { PluginRouteDeps } from \"../../core/types.js\";\nimport type { AgentDatabase } from \"../../db/database.js\";\n\n// ── Project Type Detection ──────────────────────────────────────────────\n\nasync function detectProjectType(\n directory: string,\n): Promise<string | undefined> {\n try {\n const entries = await fs.readdir(directory);\n\n if (entries.includes(\"package.json\")) {\n try {\n const packageJson = JSON.parse(\n await fs.readFile(path.join(directory, \"package.json\"), \"utf8\"),\n );\n const deps = {\n ...packageJson.dependencies,\n ...packageJson.devDependencies,\n };\n\n if (deps.react || deps[\"@types/react\"]) return \"react\";\n if (deps.vue || deps[\"@vue/cli\"]) return \"vue\";\n if (deps.angular || deps[\"@angular/core\"]) return \"angular\";\n if (deps.next || deps[\"@types/next\"]) return \"nextjs\";\n if (deps.nuxt || deps[\"@nuxt/core\"]) return \"nuxtjs\";\n if (deps.svelte || deps[\"@sveltejs/kit\"]) return \"svelte\";\n if (deps.express || deps.fastify || deps.koa) return \"nodejs-backend\";\n if (deps.electron) return \"electron\";\n if (deps.vite) return \"vite\";\n } catch {\n /* fallback */\n }\n return \"nodejs\";\n }\n\n if (\n entries.includes(\"setup.py\") ||\n entries.includes(\"requirements.txt\") ||\n entries.includes(\"pyproject.toml\") ||\n entries.includes(\"Pipfile\")\n ) {\n if (entries.includes(\"manage.py\")) return \"django\";\n if (entries.includes(\"app.py\")) return \"flask\";\n return \"python\";\n }\n\n if (entries.includes(\"go.mod\")) return \"go\";\n if (entries.includes(\"Cargo.toml\")) return \"rust\";\n if (entries.includes(\"pom.xml\")) return \"maven\";\n if (\n entries.includes(\"build.gradle\") ||\n entries.includes(\"build.gradle.kts\")\n )\n return \"gradle\";\n if (entries.includes(\"Gemfile\")) return \"ruby\";\n if (entries.includes(\"composer.json\")) return \"php\";\n if (entries.some((e) => e.endsWith(\".csproj\") || e.endsWith(\".sln\")))\n return \"dotnet\";\n if (entries.includes(\"CMakeLists.txt\") || entries.includes(\"Makefile\"))\n return \"cpp\";\n if (entries.includes(\"Package.swift\")) return \"swift\";\n if (entries.includes(\"pubspec.yaml\")) return \"flutter\";\n if (entries.some((e) => e.endsWith(\".tf\"))) return \"terraform\";\n if (entries.includes(\"Dockerfile\")) return \"docker\";\n } catch {\n /* ignore */\n }\n\n return undefined;\n}\n\nasync function detectVitePort(directory: string): Promise<number | undefined> {\n try {\n const variants = [\"vite.config.ts\", \"vite.config.js\"];\n for (const name of variants) {\n try {\n const content = await fs.readFile(path.join(directory, name), \"utf-8\");\n const match = content.match(/port:\\s*(\\d+)/);\n if (match) return parseInt(match[1], 10);\n } catch {\n /* next */\n }\n }\n } catch {\n /* ignore */\n }\n return undefined;\n}\n\n// ── Git Repo Scanner ────────────────────────────────────────────────────\n\nconst SKIP_DIRS = new Set([\n \".git\",\n \"node_modules\",\n \"__pycache__\",\n \".venv\",\n \"venv\",\n \"dist\",\n \"build\",\n]);\n\nasync function scanForGitRepositories(\n directory: string,\n includeSubmodules: boolean,\n parentPath?: string,\n): Promise<\n Array<{\n path: string;\n name: string;\n parentPath?: string;\n isSubmodule: boolean;\n projectType?: string;\n vitePort?: number;\n }>\n> {\n const repositories: Array<{\n path: string;\n name: string;\n parentPath?: string;\n isSubmodule: boolean;\n projectType?: string;\n vitePort?: number;\n }> = [];\n\n try {\n const entries = await fs.readdir(directory, { withFileTypes: true });\n const hasGit = entries.some((e) => e.name === \".git\" && e.isDirectory());\n\n if (hasGit) {\n repositories.push({\n path: directory,\n name: path.basename(directory),\n parentPath,\n isSubmodule: !!parentPath,\n projectType: await detectProjectType(directory),\n vitePort: await detectVitePort(directory),\n });\n\n if (!includeSubmodules) return repositories;\n parentPath = directory;\n }\n\n for (const entry of entries) {\n if (\n entry.isDirectory() &&\n !SKIP_DIRS.has(entry.name) &&\n !entry.name.startsWith(\".\")\n ) {\n const subPath = path.join(directory, entry.name);\n const subRepos = await scanForGitRepositories(\n subPath,\n includeSubmodules,\n parentPath,\n );\n repositories.push(...subRepos);\n }\n }\n } catch {\n /* permission errors */\n }\n\n return repositories;\n}\n\n// ── Routes ──────────────────────────────────────────────────────────────\n\nexport function createRoutes(deps: PluginRouteDeps) {\n const { db } = deps;\n\n return (\n new Elysia()\n // List all tracked git repositories\n .get(\"/\", () => {\n const repositories = db.getAllGitRepositories();\n return { repositories };\n })\n\n // Get repository by ID\n .get(\"/:id\", ({ params, set }) => {\n const repository = db.getGitRepository(params.id);\n if (!repository) {\n set.status = 404;\n return { error: \"Repository not found\" };\n }\n return { repository };\n })\n\n // Scan directory for git repositories\n .post(\n \"/scan\",\n async ({ body, set }) => {\n try {\n const stats = await fs.stat(body.directory);\n if (!stats.isDirectory()) {\n set.status = 400;\n return { error: \"Path is not a directory\" };\n }\n\n const repositories = await scanForGitRepositories(\n body.directory,\n body.includeSubmodules ?? true,\n );\n\n const savedRepos = [];\n for (const repo of repositories) {\n const existing = db.getGitRepositoryByPath(repo.path);\n if (existing) {\n db.updateGitRepository(existing.id, repo);\n savedRepos.push({ ...existing, ...repo });\n } else {\n const newRepo = db.createGitRepository({\n id: globalThis.crypto.randomUUID(),\n ...repo,\n });\n savedRepos.push(newRepo);\n }\n }\n\n return {\n repositories: savedRepos,\n scannedPath: body.directory,\n totalFound: savedRepos.length,\n };\n } catch (err) {\n set.status = 500;\n return { error: \"Failed to scan directory\", details: String(err) };\n }\n },\n {\n body: t.Object({\n directory: t.String(),\n includeSubmodules: t.Optional(t.Boolean()),\n }),\n },\n )\n\n // Update repository metadata\n .put(\n \"/:id\",\n ({ params, body, set }) => {\n const repository = db.getGitRepository(params.id);\n if (!repository) {\n set.status = 404;\n return { error: \"Repository not found\" };\n }\n\n try {\n db.updateGitRepository(params.id, body);\n return { success: true };\n } catch (err) {\n set.status = 500;\n return {\n error: \"Failed to update repository\",\n details: String(err),\n };\n }\n },\n {\n body: t.Object({\n name: t.Optional(t.String()),\n projectType: t.Optional(t.String()),\n vitePort: t.Optional(t.Number()),\n }),\n },\n )\n\n // Delete repository from tracking\n .delete(\"/:id\", ({ params, set }) => {\n const repository = db.getGitRepository(params.id);\n if (!repository) {\n set.status = 404;\n return { error: \"Repository not found\" };\n }\n\n try {\n db.deleteGitRepository(params.id);\n return { success: true };\n } catch (err) {\n set.status = 500;\n return { error: \"Failed to delete repository\", details: String(err) };\n }\n })\n\n // Fix repository hierarchy\n .post(\"/fix-hierarchy\", ({ set }) => {\n try {\n const result = db.fixGitHierarchy();\n const repos = db.getAllGitRepositories();\n return { success: true, fixed: result.fixed, total: repos.length };\n } catch (err) {\n set.status = 500;\n return { error: \"Failed to fix hierarchy\", details: String(err) };\n }\n })\n );\n}\n",
5
+ "/**\n * Git Plugin — Routes\n *\n * Git repository scanning, tracking, and hierarchy management.\n *\n * Endpoints:\n * GET / — List all tracked git repositories\n * GET /:id — Get repository by ID\n * POST /scan — Scan directory for git repositories\n * PUT /:id — Update repository metadata\n * DELETE /:id — Delete repository from tracking\n * POST /fix-hierarchy — Fix parent/child relationships\n */\n\nimport { Elysia, t } from \"elysia\";\nimport { promises as fs } from \"node:fs\";\nimport path from \"node:path\";\n\nimport type { PluginRouteDeps } from \"../../core/types.js\";\n\n// ── Project Type Detection ──────────────────────────────────────────────\n\nasync function detectProjectType(\n directory: string,\n): Promise<string | undefined> {\n try {\n const entries = await fs.readdir(directory);\n\n if (entries.includes(\"package.json\")) {\n try {\n const packageJson = JSON.parse(\n await fs.readFile(path.join(directory, \"package.json\"), \"utf8\"),\n );\n const deps = {\n ...packageJson.dependencies,\n ...packageJson.devDependencies,\n };\n\n if (deps.react || deps[\"@types/react\"]) return \"react\";\n if (deps.vue || deps[\"@vue/cli\"]) return \"vue\";\n if (deps.angular || deps[\"@angular/core\"]) return \"angular\";\n if (deps.next || deps[\"@types/next\"]) return \"nextjs\";\n if (deps.nuxt || deps[\"@nuxt/core\"]) return \"nuxtjs\";\n if (deps.svelte || deps[\"@sveltejs/kit\"]) return \"svelte\";\n if (deps.express || deps.fastify || deps.koa) return \"nodejs-backend\";\n if (deps.electron) return \"electron\";\n if (deps.vite) return \"vite\";\n } catch {\n /* fallback */\n }\n return \"nodejs\";\n }\n\n if (\n entries.includes(\"setup.py\") ||\n entries.includes(\"requirements.txt\") ||\n entries.includes(\"pyproject.toml\") ||\n entries.includes(\"Pipfile\")\n ) {\n if (entries.includes(\"manage.py\")) return \"django\";\n if (entries.includes(\"app.py\")) return \"flask\";\n return \"python\";\n }\n\n if (entries.includes(\"go.mod\")) return \"go\";\n if (entries.includes(\"Cargo.toml\")) return \"rust\";\n if (entries.includes(\"pom.xml\")) return \"maven\";\n if (\n entries.includes(\"build.gradle\") ||\n entries.includes(\"build.gradle.kts\")\n )\n return \"gradle\";\n if (entries.includes(\"Gemfile\")) return \"ruby\";\n if (entries.includes(\"composer.json\")) return \"php\";\n if (entries.some((e) => e.endsWith(\".csproj\") || e.endsWith(\".sln\")))\n return \"dotnet\";\n if (entries.includes(\"CMakeLists.txt\") || entries.includes(\"Makefile\"))\n return \"cpp\";\n if (entries.includes(\"Package.swift\")) return \"swift\";\n if (entries.includes(\"pubspec.yaml\")) return \"flutter\";\n if (entries.some((e) => e.endsWith(\".tf\"))) return \"terraform\";\n if (entries.includes(\"Dockerfile\")) return \"docker\";\n } catch {\n /* ignore */\n }\n\n return undefined;\n}\n\nasync function detectVitePort(directory: string): Promise<number | undefined> {\n try {\n const variants = [\"vite.config.ts\", \"vite.config.js\"];\n for (const name of variants) {\n try {\n const content = await fs.readFile(path.join(directory, name), \"utf-8\");\n const match = content.match(/port:\\s*(\\d+)/);\n if (match) return parseInt(match[1], 10);\n } catch {\n /* next */\n }\n }\n } catch {\n /* ignore */\n }\n return undefined;\n}\n\n// ── Git Repo Scanner ────────────────────────────────────────────────────\n\nconst SKIP_DIRS = new Set([\n \".git\",\n \"node_modules\",\n \"__pycache__\",\n \".venv\",\n \"venv\",\n \"dist\",\n \"build\",\n]);\n\nasync function scanForGitRepositories(\n directory: string,\n includeSubmodules: boolean,\n parentPath?: string,\n): Promise<\n Array<{\n path: string;\n name: string;\n parentPath?: string;\n isSubmodule: boolean;\n projectType?: string;\n vitePort?: number;\n }>\n> {\n const repositories: Array<{\n path: string;\n name: string;\n parentPath?: string;\n isSubmodule: boolean;\n projectType?: string;\n vitePort?: number;\n }> = [];\n\n try {\n const entries = await fs.readdir(directory, { withFileTypes: true });\n const hasGit = entries.some((e) => e.name === \".git\" && e.isDirectory());\n\n if (hasGit) {\n repositories.push({\n path: directory,\n name: path.basename(directory),\n parentPath,\n isSubmodule: !!parentPath,\n projectType: await detectProjectType(directory),\n vitePort: await detectVitePort(directory),\n });\n\n if (!includeSubmodules) return repositories;\n parentPath = directory;\n }\n\n for (const entry of entries) {\n if (\n entry.isDirectory() &&\n !SKIP_DIRS.has(entry.name) &&\n !entry.name.startsWith(\".\")\n ) {\n const subPath = path.join(directory, entry.name);\n const subRepos = await scanForGitRepositories(\n subPath,\n includeSubmodules,\n parentPath,\n );\n repositories.push(...subRepos);\n }\n }\n } catch {\n /* permission errors */\n }\n\n return repositories;\n}\n\n// ── Routes ──────────────────────────────────────────────────────────────\n\nexport function createRoutes(deps: PluginRouteDeps) {\n const { db } = deps;\n\n return (\n new Elysia()\n // List all tracked git repositories\n .get(\"/\", () => {\n const repositories = db.getAllGitRepositories();\n return { repositories };\n })\n\n // Get repository by ID\n .get(\"/:id\", ({ params, set }) => {\n const repository = db.getGitRepository(params.id);\n if (!repository) {\n set.status = 404;\n return { error: \"Repository not found\" };\n }\n return { repository };\n })\n\n // Scan directory for git repositories\n .post(\n \"/scan\",\n async ({ body, set }) => {\n try {\n const stats = await fs.stat(body.directory);\n if (!stats.isDirectory()) {\n set.status = 400;\n return { error: \"Path is not a directory\" };\n }\n\n const repositories = await scanForGitRepositories(\n body.directory,\n body.includeSubmodules ?? true,\n );\n\n const savedRepos = [];\n for (const repo of repositories) {\n const existing = db.getGitRepositoryByPath(repo.path);\n if (existing) {\n db.updateGitRepository(existing.id, repo);\n savedRepos.push({ ...existing, ...repo });\n } else {\n const newRepo = db.createGitRepository({\n id: globalThis.crypto.randomUUID(),\n ...repo,\n });\n savedRepos.push(newRepo);\n }\n }\n\n return {\n repositories: savedRepos,\n scannedPath: body.directory,\n totalFound: savedRepos.length,\n };\n } catch (err) {\n set.status = 500;\n return { error: \"Failed to scan directory\", details: String(err) };\n }\n },\n {\n body: t.Object({\n directory: t.String(),\n includeSubmodules: t.Optional(t.Boolean()),\n }),\n },\n )\n\n // Update repository metadata\n .put(\n \"/:id\",\n ({ params, body, set }) => {\n const repository = db.getGitRepository(params.id);\n if (!repository) {\n set.status = 404;\n return { error: \"Repository not found\" };\n }\n\n try {\n db.updateGitRepository(params.id, body);\n return { success: true };\n } catch (err) {\n set.status = 500;\n return {\n error: \"Failed to update repository\",\n details: String(err),\n };\n }\n },\n {\n body: t.Object({\n name: t.Optional(t.String()),\n projectType: t.Optional(t.String()),\n vitePort: t.Optional(t.Number()),\n }),\n },\n )\n\n // Delete repository from tracking\n .delete(\"/:id\", ({ params, set }) => {\n const repository = db.getGitRepository(params.id);\n if (!repository) {\n set.status = 404;\n return { error: \"Repository not found\" };\n }\n\n try {\n db.deleteGitRepository(params.id);\n return { success: true };\n } catch (err) {\n set.status = 500;\n return { error: \"Failed to delete repository\", details: String(err) };\n }\n })\n\n // Fix repository hierarchy\n .post(\"/fix-hierarchy\", ({ set }) => {\n try {\n const result = db.fixGitHierarchy();\n const repos = db.getAllGitRepositories();\n return { success: true, fixed: result.fixed, total: repos.length };\n } catch (err) {\n set.status = 500;\n return { error: \"Failed to fix hierarchy\", details: String(err) };\n }\n })\n );\n}\n",
6
6
  "import { Command } from \"commander\";\nimport {\n getAgentUrl,\n apiGet,\n apiPost,\n apiPut,\n apiDelete,\n fail,\n success,\n info,\n header,\n kv,\n formatTable,\n timeAgo,\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.command(\"git\").description(\"Manage git repositories\");\n\n // git list\n cmd\n .command(\"list\")\n .description(\"List discovered git repositories\")\n .option(\"--agent-url <url>\", \"Agent URL\", DEFAULT_AGENT_URL)\n .action(async (options) => {\n try {\n const url = getAgentUrl(options);\n const data = await apiGet<{ repositories: any[] }>(url, \"/api/git\");\n const repos = data.repositories || [];\n if (!repos || repos.length === 0) {\n info(\"No git repositories found.\");\n return;\n }\n header(\"Git Repositories\");\n formatTable(\n repos.map((r: any) => ({\n ID: shortId(r.id),\n Name: r.name || \"-\",\n Path: r.path || \"-\",\n Type: r.type || r.projectType || \"-\",\n Submodule: r.isSubmodule ? \"Yes\" : \"No\",\n Scanned: r.scannedAt ? timeAgo(r.scannedAt) : \"-\",\n })),\n );\n } catch (err: any) {\n fail(err.message);\n }\n });\n\n // git scan\n cmd\n .command(\"scan\")\n .description(\"Scan a directory for git repositories\")\n .requiredOption(\"--dir <directory>\", \"Directory to scan\")\n .option(\"--depth <depth>\", \"Scan depth\", \"3\")\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 apiPost<any>(url, \"/api/git/scan\", {\n directory: options.dir,\n depth: parseInt(options.depth, 10),\n });\n success(\"Git scan completed.\");\n if (result?.found !== undefined) kv(\"Repositories found\", result.found);\n if (result?.repositories)\n kv(\"Repositories found\", result.repositories.length);\n } catch (err: any) {\n fail(err.message);\n }\n });\n\n // git update\n cmd\n .command(\"update\")\n .description(\"Update a git repository entry\")\n .requiredOption(\"-i, --id <id>\", \"Repository ID\")\n .option(\"--vite-port <port>\", \"Vite dev server port\")\n .option(\"--project-type <type>\", \"Project type\")\n .option(\"--agent-url <url>\", \"Agent URL\", DEFAULT_AGENT_URL)\n .action(async (options) => {\n try {\n const url = getAgentUrl(options);\n const body: Record<string, any> = {};\n if (options.vitePort) body.vitePort = parseInt(options.vitePort, 10);\n if (options.projectType) body.projectType = options.projectType;\n await apiPut<any>(url, `/api/git/${options.id}`, body);\n success(`Repository ${shortId(options.id)} updated.`);\n } catch (err: any) {\n fail(err.message);\n }\n });\n\n // git delete\n cmd\n .command(\"delete\")\n .description(\"Delete a git repository entry\")\n .requiredOption(\"-i, --id <id>\", \"Repository 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/git/${options.id}`);\n success(`Repository ${shortId(options.id)} deleted.`);\n } catch (err: any) {\n fail(err.message);\n }\n });\n\n // git fix-hierarchy\n cmd\n .command(\"fix-hierarchy\")\n .description(\"Fix repository parent-child hierarchy\")\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 apiPost<any>(url, \"/api/git/fix-hierarchy\", {});\n success(\"Hierarchy fix completed.\");\n if (result?.fixed !== undefined) kv(\"Fixed\", result.fixed);\n } catch (err: any) {\n fail(err.message);\n }\n });\n}\n",
7
7
  "/**\n * Git Plugin — CLI Commands\n *\n * Delegates to the shared git CLI command registration.\n */\n\nimport type { Command } from \"commander\";\nimport type { HostServices } from \"../../core/plugin-system.js\";\nimport { register as registerGit } from \"../../cli/commands/git.cmd.js\";\n\nexport function registerCommands(\n program: Command,\n _hostServices: HostServices,\n): void {\n registerGit(program);\n}\n",
8
8
  "/**\n * Git Plugin — Entry Point\n *\n * Core plugin for git repository scanning, tracking, and hierarchy management.\n */\n\nimport type { VibePlugin } from \"../../core/plugin-system.js\";\nimport type { PluginRouteDeps } from \"../../core/types.js\";\nimport { createRoutes } from \"./routes.js\";\nimport { registerCommands } from \"./commands.js\";\n\nexport const vibePlugin: VibePlugin = {\n name: \"git\",\n version: \"2.2.0\",\n description: \"Git repository scanning, tracking, and hierarchy management\",\n tags: [\"backend\", \"cli\"],\n cliCommand: \"git\",\n apiPrefix: \"/api/git\",\n createRoutes: (deps: PluginRouteDeps) => createRoutes(deps),\n onCliSetup: async (program, hostServices) => {\n registerCommands(program, hostServices);\n },\n};\n"
9
9
  ],
10
- "mappings": "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",
10
+ "mappings": "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",
11
11
  "debugId": "7833782DA41E97E464756E2164756E21",
12
12
  "names": []
13
13
  }
@@ -3,11 +3,11 @@
3
3
  "sources": ["../src/plugins/state/routes.ts", "../src/cli/commands/state.cmd.ts", "../src/plugins/state/commands.ts", "../src/plugins/state/index.ts"],
4
4
  "sourcesContent": [
5
5
  "/**\n * Plugin State Routes\n *\n * Scoped key-value store for plugins. Each plugin has its own namespace.\n * Supports multiple backends: local (bun:sqlite), remote (GraphQL), external (REST).\n *\n * Endpoints:\n * POST /config/external — Configure external backend\n * GET /:pluginName — List all keys for a plugin\n * GET /:pluginName/:key — Get a single value\n * PUT /:pluginName/:key — Set a value\n * DELETE /:pluginName/:key — Delete a key\n * DELETE /:pluginName — Delete all keys for a plugin\n */\n\nimport { Elysia, t } from \"elysia\";\n\nimport type { PluginRouteDeps } from \"../../core/types.js\";\nimport type { AgentDatabase } from \"../../db/database.js\";\nimport { logger } from \"../../services/logger.js\";\n\n// ── Backend Types ───────────────────────────────────────────────────────\n\ntype BackendType = \"local\" | \"remote\" | \"external\";\n\ninterface PluginStateBackend {\n getAll(pluginName: string): Promise<Array<{ key: string; value: string }>>;\n get(pluginName: string, key: string): Promise<string | undefined>;\n set(pluginName: string, key: string, value: string): Promise<void>;\n delete(pluginName: string, key: string): Promise<boolean>;\n deleteAll(pluginName: string): Promise<number>;\n}\n\n// ── Local Backend (bun:sqlite) ──────────────────────────────────────────\n\nclass LocalPluginStateBackend implements PluginStateBackend {\n constructor(private db: AgentDatabase) {}\n\n async getAll(pluginName: string) {\n return this.db.getAllPluginState(pluginName).map((e) => ({\n key: e.key,\n value: e.value,\n }));\n }\n\n async get(pluginName: string, key: string) {\n return this.db.getPluginState(pluginName, key);\n }\n\n async set(pluginName: string, key: string, value: string) {\n this.db.setPluginState(pluginName, key, value);\n }\n\n async delete(pluginName: string, key: string) {\n return this.db.deletePluginState(pluginName, key);\n }\n\n async deleteAll(pluginName: string) {\n return this.db.deleteAllPluginState(pluginName);\n }\n}\n\n// ── External Backend Config ─────────────────────────────────────────────\n\ninterface ExternalStoreConfig {\n baseUrl: string;\n headers?: Record<string, string>;\n}\n\n// ── Plugin State Router ─────────────────────────────────────────────────\n\nclass PluginStateRouter {\n private localBackend: LocalPluginStateBackend;\n private externalConfig?: ExternalStoreConfig;\n\n constructor(\n private db: AgentDatabase,\n private _agentId?: string,\n ) {\n this.localBackend = new LocalPluginStateBackend(db);\n }\n\n configureExternal(config: ExternalStoreConfig): void {\n this.externalConfig = config;\n }\n\n resolve(backend?: BackendType): PluginStateBackend {\n // For now, always use local backend.\n // Remote and external backends will be implemented in the plugin-state/ directory.\n switch (backend) {\n case \"remote\":\n logger.warn(\n \"plugin-state\",\n \"Remote backend not yet implemented, falling back to local\",\n );\n return this.localBackend;\n case \"external\":\n if (!this.externalConfig) {\n logger.warn(\n \"plugin-state\",\n \"External backend not configured, falling back to local\",\n );\n return this.localBackend;\n }\n logger.warn(\n \"plugin-state\",\n \"External backend not yet implemented, falling back to local\",\n );\n return this.localBackend;\n case \"local\":\n default:\n return this.localBackend;\n }\n }\n}\n\n// ── Routes ──────────────────────────────────────────────────────────────\n\nexport function createRoutes(deps: PluginRouteDeps) {\n const { db } = deps;\n\n const agentId = db.getConfig(\"gateway-auth:clientId\");\n const router = new PluginStateRouter(db, agentId);\n\n // Restore external config from agent config store\n const externalConfigStr = db.getConfig(\"plugin-state:external-config\");\n if (externalConfigStr) {\n try {\n const config = JSON.parse(externalConfigStr) as ExternalStoreConfig;\n router.configureExternal(config);\n } catch {\n logger.warn(\n \"plugin-state-routes\",\n \"Failed to parse saved external config\",\n );\n }\n }\n\n return (\n new Elysia()\n // Configure external backend\n .post(\n \"/config/external\",\n ({ body, set }) => {\n if (!body.baseUrl) {\n set.status = 400;\n return { error: \"Missing required field: baseUrl\" };\n }\n router.configureExternal(body);\n // Persist so it survives restarts\n db.setConfig(\"plugin-state:external-config\", JSON.stringify(body));\n return { configured: true, baseUrl: body.baseUrl };\n },\n {\n body: t.Object({\n baseUrl: t.String(),\n headers: t.Optional(t.Record(t.String(), t.String())),\n }),\n },\n )\n\n // List all key-value pairs for a plugin\n .get(\"/:pluginName\", async ({ params, query }) => {\n const q = query as Record<string, string>;\n const backend = router.resolve(q.backend as BackendType);\n const entries = await backend.getAll(params.pluginName);\n return {\n pluginName: params.pluginName,\n entries,\n count: entries.length,\n backend: q.backend ?? \"local\",\n };\n })\n\n // Get a single value\n .get(\"/:pluginName/:key\", async ({ params, query, set }) => {\n const q = query as Record<string, string>;\n const backend = router.resolve(q.backend as BackendType);\n const value = await backend.get(params.pluginName, params.key);\n\n if (value === undefined) {\n set.status = 404;\n return {\n error: \"Not found\",\n message: `Key \"${params.key}\" not found for plugin \"${params.pluginName}\"`,\n };\n }\n\n return {\n pluginName: params.pluginName,\n key: params.key,\n value,\n backend: q.backend ?? \"local\",\n };\n })\n\n // Set a value\n .put(\n \"/:pluginName/:key\",\n async ({ params, body, query, set }) => {\n if (body.value === undefined || body.value === null) {\n set.status = 400;\n return { error: \"Missing required field: value\" };\n }\n\n const q = query as Record<string, string>;\n const strValue =\n typeof body.value === \"string\"\n ? body.value\n : JSON.stringify(body.value);\n const backend = router.resolve(q.backend as BackendType);\n await backend.set(params.pluginName, params.key, strValue);\n\n return {\n pluginName: params.pluginName,\n key: params.key,\n value: strValue,\n updated: true,\n backend: q.backend ?? \"local\",\n };\n },\n {\n body: t.Object({\n value: t.Union([t.String(), t.Any()]),\n }),\n },\n )\n\n // Delete a single key\n .delete(\"/:pluginName/:key\", async ({ params, query, set }) => {\n const q = query as Record<string, string>;\n const backend = router.resolve(q.backend as BackendType);\n const deleted = await backend.delete(params.pluginName, params.key);\n\n if (!deleted) {\n set.status = 404;\n return {\n error: \"Not found\",\n message: `Key \"${params.key}\" not found for plugin \"${params.pluginName}\"`,\n };\n }\n\n return {\n pluginName: params.pluginName,\n key: params.key,\n deleted: true,\n backend: q.backend ?? \"local\",\n };\n })\n\n // Delete all state for a plugin\n .delete(\"/:pluginName\", async ({ params, query }) => {\n const q = query as Record<string, string>;\n const backend = router.resolve(q.backend as BackendType);\n const count = await backend.deleteAll(params.pluginName);\n return {\n pluginName: params.pluginName,\n deletedCount: count,\n backend: q.backend ?? \"local\",\n };\n })\n );\n}\n",
6
- "import { Command } from \"commander\";\nimport {\n getAgentUrl,\n apiGet,\n apiPut,\n apiDelete,\n fail,\n success,\n info,\n header,\n kv,\n blank,\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\n .command(\"state\")\n .description(\"Manage plugin key-value state\");\n\n // state list\n cmd\n .command(\"list\")\n .description(\"List all state entries for a plugin\")\n .argument(\"<plugin>\", \"Plugin name\")\n .option(\"--agent-url <url>\", \"Agent URL\", DEFAULT_AGENT_URL)\n .action(async (plugin: string, options) => {\n try {\n const url = getAgentUrl(options);\n const entries = await apiGet<any>(\n url,\n `/api/plugin-state/${encodeURIComponent(plugin)}`,\n );\n if (\n !entries ||\n (typeof entries === \"object\" && Object.keys(entries).length === 0)\n ) {\n info(`No state entries for plugin \"${plugin}\".`);\n return;\n }\n header(`State: ${plugin}`);\n blank();\n if (Array.isArray(entries)) {\n for (const entry of entries) {\n kv(entry.key, JSON.stringify(entry.value));\n }\n } else if (typeof entries === \"object\") {\n for (const [key, value] of Object.entries(entries)) {\n kv(key, JSON.stringify(value));\n }\n }\n } catch (err: any) {\n fail(err.message);\n }\n });\n\n // state get\n cmd\n .command(\"get\")\n .description(\"Get a state value\")\n .argument(\"<plugin>\", \"Plugin name\")\n .argument(\"<key>\", \"State key\")\n .option(\"--agent-url <url>\", \"Agent URL\", DEFAULT_AGENT_URL)\n .action(async (plugin: string, key: string, options) => {\n try {\n const url = getAgentUrl(options);\n const result = await apiGet<any>(\n url,\n `/api/plugin-state/${encodeURIComponent(plugin)}/${encodeURIComponent(key)}`,\n );\n if (result?.value !== undefined) {\n header(`${plugin} / ${key}`);\n console.log(\n typeof result.value === \"string\"\n ? result.value\n : JSON.stringify(result.value, null, 2),\n );\n } else {\n info(`No value found for key \"${key}\" in plugin \"${plugin}\".`);\n }\n } catch (err: any) {\n fail(err.message);\n }\n });\n\n // state set\n cmd\n .command(\"set\")\n .description(\"Set a state value\")\n .argument(\"<plugin>\", \"Plugin name\")\n .argument(\"<key>\", \"State key\")\n .argument(\"<value>\", \"Value to set\")\n .option(\"--agent-url <url>\", \"Agent URL\", DEFAULT_AGENT_URL)\n .action(async (plugin: string, key: string, value: string, options) => {\n try {\n const url = getAgentUrl(options);\n let parsedValue: any = value;\n try {\n parsedValue = JSON.parse(value);\n } catch {\n // keep as string\n }\n await apiPut<any>(\n url,\n `/api/plugin-state/${encodeURIComponent(plugin)}/${encodeURIComponent(key)}`,\n { value: parsedValue },\n );\n success(`State set: ${plugin}/${key}`);\n } catch (err: any) {\n fail(err.message);\n }\n });\n\n // state unset\n cmd\n .command(\"unset\")\n .description(\"Remove a state value\")\n .argument(\"<plugin>\", \"Plugin name\")\n .argument(\"<key>\", \"State key\")\n .option(\"--agent-url <url>\", \"Agent URL\", DEFAULT_AGENT_URL)\n .action(async (plugin: string, key: string, options) => {\n try {\n const url = getAgentUrl(options);\n await apiDelete<any>(\n url,\n `/api/plugin-state/${encodeURIComponent(plugin)}/${encodeURIComponent(key)}`,\n );\n success(`State removed: ${plugin}/${key}`);\n } catch (err: any) {\n fail(err.message);\n }\n });\n}\n",
6
+ "import { Command } from \"commander\";\nimport {\n getAgentUrl,\n apiGet,\n apiPut,\n apiDelete,\n fail,\n success,\n info,\n header,\n kv,\n blank,\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(\"state\")\n .description(\"Manage plugin key-value state\");\n\n // state list\n cmd\n .command(\"list\")\n .description(\"List all state entries for a plugin\")\n .argument(\"<plugin>\", \"Plugin name\")\n .option(\"--agent-url <url>\", \"Agent URL\", DEFAULT_AGENT_URL)\n .action(async (plugin: string, options) => {\n try {\n const url = getAgentUrl(options);\n const entries = await apiGet<any>(\n url,\n `/api/plugin-state/${encodeURIComponent(plugin)}`,\n );\n if (\n !entries ||\n (typeof entries === \"object\" && Object.keys(entries).length === 0)\n ) {\n info(`No state entries for plugin \"${plugin}\".`);\n return;\n }\n header(`State: ${plugin}`);\n blank();\n if (Array.isArray(entries)) {\n for (const entry of entries) {\n kv(entry.key, JSON.stringify(entry.value));\n }\n } else if (typeof entries === \"object\") {\n for (const [key, value] of Object.entries(entries)) {\n kv(key, JSON.stringify(value));\n }\n }\n } catch (err: any) {\n fail(err.message);\n }\n });\n\n // state get\n cmd\n .command(\"get\")\n .description(\"Get a state value\")\n .argument(\"<plugin>\", \"Plugin name\")\n .argument(\"<key>\", \"State key\")\n .option(\"--agent-url <url>\", \"Agent URL\", DEFAULT_AGENT_URL)\n .action(async (plugin: string, key: string, options) => {\n try {\n const url = getAgentUrl(options);\n const result = await apiGet<any>(\n url,\n `/api/plugin-state/${encodeURIComponent(plugin)}/${encodeURIComponent(key)}`,\n );\n if (result?.value !== undefined) {\n header(`${plugin} / ${key}`);\n console.log(\n typeof result.value === \"string\"\n ? result.value\n : JSON.stringify(result.value, null, 2),\n );\n } else {\n info(`No value found for key \"${key}\" in plugin \"${plugin}\".`);\n }\n } catch (err: any) {\n fail(err.message);\n }\n });\n\n // state set\n cmd\n .command(\"set\")\n .description(\"Set a state value\")\n .argument(\"<plugin>\", \"Plugin name\")\n .argument(\"<key>\", \"State key\")\n .argument(\"<value>\", \"Value to set\")\n .option(\"--agent-url <url>\", \"Agent URL\", DEFAULT_AGENT_URL)\n .action(async (plugin: string, key: string, value: string, options) => {\n try {\n const url = getAgentUrl(options);\n let parsedValue: any = value;\n try {\n parsedValue = JSON.parse(value);\n } catch {\n // keep as string\n }\n await apiPut<any>(\n url,\n `/api/plugin-state/${encodeURIComponent(plugin)}/${encodeURIComponent(key)}`,\n { value: parsedValue },\n );\n success(`State set: ${plugin}/${key}`);\n } catch (err: any) {\n fail(err.message);\n }\n });\n\n // state unset\n cmd\n .command(\"unset\")\n .description(\"Remove a state value\")\n .argument(\"<plugin>\", \"Plugin name\")\n .argument(\"<key>\", \"State key\")\n .option(\"--agent-url <url>\", \"Agent URL\", DEFAULT_AGENT_URL)\n .action(async (plugin: string, key: string, options) => {\n try {\n const url = getAgentUrl(options);\n await apiDelete<any>(\n url,\n `/api/plugin-state/${encodeURIComponent(plugin)}/${encodeURIComponent(key)}`,\n );\n success(`State removed: ${plugin}/${key}`);\n } catch (err: any) {\n fail(err.message);\n }\n });\n}\n",
7
7
  "import type { Command } from \"commander\";\nimport type { HostServices } from \"../../core/plugin-system.js\";\nimport { register as registerState } from \"../../cli/commands/state.cmd.js\";\n\nexport function registerCommands(\n program: Command,\n _hostServices: HostServices,\n): void {\n registerState(program);\n}\n",
8
8
  "import type { VibePlugin } from \"../../core/plugin-system.js\";\nimport type { PluginRouteDeps } from \"../../core/types.js\";\nimport { createRoutes } from \"./routes.js\";\nimport { registerCommands } from \"./commands.js\";\n\nexport const vibePlugin: VibePlugin = {\n name: \"state\",\n version: \"2.2.0\",\n description: \"Scoped key-value store for plugin state management\",\n tags: [\"backend\", \"cli\"],\n cliCommand: \"state\",\n apiPrefix: \"/api/plugin-state\",\n createRoutes: (deps: PluginRouteDeps) => createRoutes(deps),\n onCliSetup: async (program, hostServices) => {\n registerCommands(program, hostServices);\n },\n};\n"
9
9
  ],
10
- "mappings": "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",
10
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;AAmCA,MAAM,wBAAsD;AAAA,EACtC;AAAA,EAApB,WAAW,CAAS,IAAmB;AAAA,IAAnB;AAAA;AAAA,OAEd,OAAM,CAAC,YAAoB;AAAA,IAC/B,OAAO,KAAK,GAAG,kBAAkB,UAAU,EAAE,IAAI,CAAC,OAAO;AAAA,MACvD,KAAK,EAAE;AAAA,MACP,OAAO,EAAE;AAAA,IACX,EAAE;AAAA;AAAA,OAGE,IAAG,CAAC,YAAoB,KAAa;AAAA,IACzC,OAAO,KAAK,GAAG,eAAe,YAAY,GAAG;AAAA;AAAA,OAGzC,IAAG,CAAC,YAAoB,KAAa,OAAe;AAAA,IACxD,KAAK,GAAG,eAAe,YAAY,KAAK,KAAK;AAAA;AAAA,OAGzC,OAAM,CAAC,YAAoB,KAAa;AAAA,IAC5C,OAAO,KAAK,GAAG,kBAAkB,YAAY,GAAG;AAAA;AAAA,OAG5C,UAAS,CAAC,YAAoB;AAAA,IAClC,OAAO,KAAK,GAAG,qBAAqB,UAAU;AAAA;AAElD;AAAA;AAWA,MAAM,kBAAkB;AAAA,EAKZ;AAAA,EACA;AAAA,EALF;AAAA,EACA;AAAA,EAER,WAAW,CACD,IACA,UACR;AAAA,IAFQ;AAAA,IACA;AAAA,IAER,KAAK,eAAe,IAAI,wBAAwB,EAAE;AAAA;AAAA,EAGpD,iBAAiB,CAAC,QAAmC;AAAA,IACnD,KAAK,iBAAiB;AAAA;AAAA,EAGxB,OAAO,CAAC,SAA2C;AAAA,IAGjD,QAAQ;AAAA,WACD;AAAA,QACH,OAAO,KACL,gBACA,2DACF;AAAA,QACA,OAAO,KAAK;AAAA,WACT;AAAA,QACH,IAAI,CAAC,KAAK,gBAAgB;AAAA,UACxB,OAAO,KACL,gBACA,wDACF;AAAA,UACA,OAAO,KAAK;AAAA,QACd;AAAA,QACA,OAAO,KACL,gBACA,6DACF;AAAA,QACA,OAAO,KAAK;AAAA,WACT;AAAA;AAAA,QAEH,OAAO,KAAK;AAAA;AAAA;AAGpB;AAIO,SAAS,YAAY,CAAC,MAAuB;AAAA,EAClD,QAAQ,OAAO;AAAA,EAEf,MAAM,UAAU,GAAG,UAAU,uBAAuB;AAAA,EACpD,MAAM,SAAS,IAAI,kBAAkB,IAAI,OAAO;AAAA,EAGhD,MAAM,oBAAoB,GAAG,UAAU,8BAA8B;AAAA,EACrE,IAAI,mBAAmB;AAAA,IACrB,IAAI;AAAA,MACF,MAAM,SAAS,KAAK,MAAM,iBAAiB;AAAA,MAC3C,OAAO,kBAAkB,MAAM;AAAA,MAC/B,MAAM;AAAA,MACN,OAAO,KACL,uBACA,uCACF;AAAA;AAAA,EAEJ;AAAA,EAEA,OACE,IAAI,OAAO,EAER,KACC,oBACA,GAAG,MAAM,UAAU;AAAA,IACjB,IAAI,CAAC,KAAK,SAAS;AAAA,MACjB,IAAI,SAAS;AAAA,MACb,OAAO,EAAE,OAAO,kCAAkC;AAAA,IACpD;AAAA,IACA,OAAO,kBAAkB,IAAI;AAAA,IAE7B,GAAG,UAAU,gCAAgC,KAAK,UAAU,IAAI,CAAC;AAAA,IACjE,OAAO,EAAE,YAAY,MAAM,SAAS,KAAK,QAAQ;AAAA,KAEnD;AAAA,IACE,MAAM,EAAE,OAAO;AAAA,MACb,SAAS,EAAE,OAAO;AAAA,MAClB,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,OAAO,CAAC,CAAC;AAAA,IACtD,CAAC;AAAA,EACH,CACF,EAGC,IAAI,gBAAgB,SAAS,QAAQ,YAAY;AAAA,IAChD,MAAM,IAAI;AAAA,IACV,MAAM,UAAU,OAAO,QAAQ,EAAE,OAAsB;AAAA,IACvD,MAAM,UAAU,MAAM,QAAQ,OAAO,OAAO,UAAU;AAAA,IACtD,OAAO;AAAA,MACL,YAAY,OAAO;AAAA,MACnB;AAAA,MACA,OAAO,QAAQ;AAAA,MACf,SAAS,EAAE,WAAW;AAAA,IACxB;AAAA,GACD,EAGA,IAAI,qBAAqB,SAAS,QAAQ,OAAO,UAAU;AAAA,IAC1D,MAAM,IAAI;AAAA,IACV,MAAM,UAAU,OAAO,QAAQ,EAAE,OAAsB;AAAA,IACvD,MAAM,QAAQ,MAAM,QAAQ,IAAI,OAAO,YAAY,OAAO,GAAG;AAAA,IAE7D,IAAI,UAAU,WAAW;AAAA,MACvB,IAAI,SAAS;AAAA,MACb,OAAO;AAAA,QACL,OAAO;AAAA,QACP,SAAS,QAAQ,OAAO,8BAA8B,OAAO;AAAA,MAC/D;AAAA,IACF;AAAA,IAEA,OAAO;AAAA,MACL,YAAY,OAAO;AAAA,MACnB,KAAK,OAAO;AAAA,MACZ;AAAA,MACA,SAAS,EAAE,WAAW;AAAA,IACxB;AAAA,GACD,EAGA,IACC,qBACA,SAAS,QAAQ,MAAM,OAAO,UAAU;AAAA,IACtC,IAAI,KAAK,UAAU,aAAa,KAAK,UAAU,MAAM;AAAA,MACnD,IAAI,SAAS;AAAA,MACb,OAAO,EAAE,OAAO,gCAAgC;AAAA,IAClD;AAAA,IAEA,MAAM,IAAI;AAAA,IACV,MAAM,WACJ,OAAO,KAAK,UAAU,WAClB,KAAK,QACL,KAAK,UAAU,KAAK,KAAK;AAAA,IAC/B,MAAM,UAAU,OAAO,QAAQ,EAAE,OAAsB;AAAA,IACvD,MAAM,QAAQ,IAAI,OAAO,YAAY,OAAO,KAAK,QAAQ;AAAA,IAEzD,OAAO;AAAA,MACL,YAAY,OAAO;AAAA,MACnB,KAAK,OAAO;AAAA,MACZ,OAAO;AAAA,MACP,SAAS;AAAA,MACT,SAAS,EAAE,WAAW;AAAA,IACxB;AAAA,KAEF;AAAA,IACE,MAAM,EAAE,OAAO;AAAA,MACb,OAAO,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,EAAE,IAAI,CAAC,CAAC;AAAA,IACtC,CAAC;AAAA,EACH,CACF,EAGC,OAAO,qBAAqB,SAAS,QAAQ,OAAO,UAAU;AAAA,IAC7D,MAAM,IAAI;AAAA,IACV,MAAM,UAAU,OAAO,QAAQ,EAAE,OAAsB;AAAA,IACvD,MAAM,UAAU,MAAM,QAAQ,OAAO,OAAO,YAAY,OAAO,GAAG;AAAA,IAElE,IAAI,CAAC,SAAS;AAAA,MACZ,IAAI,SAAS;AAAA,MACb,OAAO;AAAA,QACL,OAAO;AAAA,QACP,SAAS,QAAQ,OAAO,8BAA8B,OAAO;AAAA,MAC/D;AAAA,IACF;AAAA,IAEA,OAAO;AAAA,MACL,YAAY,OAAO;AAAA,MACnB,KAAK,OAAO;AAAA,MACZ,SAAS;AAAA,MACT,SAAS,EAAE,WAAW;AAAA,IACxB;AAAA,GACD,EAGA,OAAO,gBAAgB,SAAS,QAAQ,YAAY;AAAA,IACnD,MAAM,IAAI;AAAA,IACV,MAAM,UAAU,OAAO,QAAQ,EAAE,OAAsB;AAAA,IACvD,MAAM,QAAQ,MAAM,QAAQ,UAAU,OAAO,UAAU;AAAA,IACvD,OAAO;AAAA,MACL,YAAY,OAAO;AAAA,MACnB,cAAc;AAAA,MACd,SAAS,EAAE,WAAW;AAAA,IACxB;AAAA,GACD;AAAA;;;ACtPP,IAAM,oBAAoB;AAEnB,SAAS,QAAQ,CAAC,SAAwB;AAAA,EAC/C,MAAM,MAAM,QACT,QAAQ,OAAO,EACf,YAAY,+BAA+B;AAAA,EAG9C,IACG,QAAQ,MAAM,EACd,YAAY,qCAAqC,EACjD,SAAS,YAAY,aAAa,EAClC,OAAO,qBAAqB,aAAa,iBAAiB,EAC1D,OAAO,OAAO,QAAgB,YAAY;AAAA,IACzC,IAAI;AAAA,MACF,MAAM,MAAM,YAAY,OAAO;AAAA,MAC/B,MAAM,UAAU,MAAM,OACpB,KACA,qBAAqB,mBAAmB,MAAM,GAChD;AAAA,MACA,IACE,CAAC,WACA,OAAO,YAAY,YAAY,OAAO,KAAK,OAAO,EAAE,WAAW,GAChE;AAAA,QACA,KAAK,gCAAgC,UAAU;AAAA,QAC/C;AAAA,MACF;AAAA,MACA,OAAO,UAAU,QAAQ;AAAA,MACzB,MAAM;AAAA,MACN,IAAI,MAAM,QAAQ,OAAO,GAAG;AAAA,QAC1B,WAAW,SAAS,SAAS;AAAA,UAC3B,GAAG,MAAM,KAAK,KAAK,UAAU,MAAM,KAAK,CAAC;AAAA,QAC3C;AAAA,MACF,EAAO,SAAI,OAAO,YAAY,UAAU;AAAA,QACtC,YAAY,KAAK,UAAU,OAAO,QAAQ,OAAO,GAAG;AAAA,UAClD,GAAG,KAAK,KAAK,UAAU,KAAK,CAAC;AAAA,QAC/B;AAAA,MACF;AAAA,MACA,OAAO,KAAU;AAAA,MACjB,KAAK,IAAI,OAAO;AAAA;AAAA,GAEnB;AAAA,EAGH,IACG,QAAQ,KAAK,EACb,YAAY,mBAAmB,EAC/B,SAAS,YAAY,aAAa,EAClC,SAAS,SAAS,WAAW,EAC7B,OAAO,qBAAqB,aAAa,iBAAiB,EAC1D,OAAO,OAAO,QAAgB,KAAa,YAAY;AAAA,IACtD,IAAI;AAAA,MACF,MAAM,MAAM,YAAY,OAAO;AAAA,MAC/B,MAAM,SAAS,MAAM,OACnB,KACA,qBAAqB,mBAAmB,MAAM,KAAK,mBAAmB,GAAG,GAC3E;AAAA,MACA,IAAI,QAAQ,UAAU,WAAW;AAAA,QAC/B,OAAO,GAAG,YAAY,KAAK;AAAA,QAC3B,QAAQ,IACN,OAAO,OAAO,UAAU,WACpB,OAAO,QACP,KAAK,UAAU,OAAO,OAAO,MAAM,CAAC,CAC1C;AAAA,MACF,EAAO;AAAA,QACL,KAAK,2BAA2B,mBAAmB,UAAU;AAAA;AAAA,MAE/D,OAAO,KAAU;AAAA,MACjB,KAAK,IAAI,OAAO;AAAA;AAAA,GAEnB;AAAA,EAGH,IACG,QAAQ,KAAK,EACb,YAAY,mBAAmB,EAC/B,SAAS,YAAY,aAAa,EAClC,SAAS,SAAS,WAAW,EAC7B,SAAS,WAAW,cAAc,EAClC,OAAO,qBAAqB,aAAa,iBAAiB,EAC1D,OAAO,OAAO,QAAgB,KAAa,OAAe,YAAY;AAAA,IACrE,IAAI;AAAA,MACF,MAAM,MAAM,YAAY,OAAO;AAAA,MAC/B,IAAI,cAAmB;AAAA,MACvB,IAAI;AAAA,QACF,cAAc,KAAK,MAAM,KAAK;AAAA,QAC9B,MAAM;AAAA,MAGR,MAAM,OACJ,KACA,qBAAqB,mBAAmB,MAAM,KAAK,mBAAmB,GAAG,KACzE,EAAE,OAAO,YAAY,CACvB;AAAA,MACA,QAAQ,cAAc,UAAU,KAAK;AAAA,MACrC,OAAO,KAAU;AAAA,MACjB,KAAK,IAAI,OAAO;AAAA;AAAA,GAEnB;AAAA,EAGH,IACG,QAAQ,OAAO,EACf,YAAY,sBAAsB,EAClC,SAAS,YAAY,aAAa,EAClC,SAAS,SAAS,WAAW,EAC7B,OAAO,qBAAqB,aAAa,iBAAiB,EAC1D,OAAO,OAAO,QAAgB,KAAa,YAAY;AAAA,IACtD,IAAI;AAAA,MACF,MAAM,MAAM,YAAY,OAAO;AAAA,MAC/B,MAAM,UACJ,KACA,qBAAqB,mBAAmB,MAAM,KAAK,mBAAmB,GAAG,GAC3E;AAAA,MACA,QAAQ,kBAAkB,UAAU,KAAK;AAAA,MACzC,OAAO,KAAU;AAAA,MACjB,KAAK,IAAI,OAAO;AAAA;AAAA,GAEnB;AAAA;;;AChIE,SAAS,gBAAgB,CAC9B,SACA,eACM;AAAA,EACN,SAAc,OAAO;AAAA;;;ACHhB,IAAM,aAAyB;AAAA,EACpC,MAAM;AAAA,EACN,SAAS;AAAA,EACT,aAAa;AAAA,EACb,MAAM,CAAC,WAAW,KAAK;AAAA,EACvB,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,cAAc,CAAC,SAA0B,aAAa,IAAI;AAAA,EAC1D,YAAY,OAAO,SAAS,iBAAiB;AAAA,IAC3C,iBAAiB,SAAS,YAAY;AAAA;AAE1C;",
11
11
  "debugId": "B336A2A2717B47BE64756E2164756E21",
12
12
  "names": []
13
13
  }
@@ -21,7 +21,7 @@ class GatewayClient {
21
21
  getConfig() {
22
22
  if (!this.config)
23
23
  return null;
24
- const { clientSecret: _, ...rest } = this.config;
24
+ const { clientSecret: _clientSecret, ...rest } = this.config;
25
25
  return rest;
26
26
  }
27
27
  async globalQuery(query, variables) {
@@ -118,5 +118,5 @@ var gatewayClient = new GatewayClient;
118
118
 
119
119
  export { gatewayClient };
120
120
 
121
- //# debugId=0181833FB8285E7664756E2164756E21
122
- //# sourceMappingURL=index-05qfwz8r.js.map
121
+ //# debugId=78CAF32ADAC7819D64756E2164756E21
122
+ //# sourceMappingURL=index-jerwk237.js.map
@@ -0,0 +1,10 @@
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: _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": "78CAF32ADAC7819D64756E2164756E21",
9
+ "names": []
10
+ }
@@ -3,11 +3,11 @@
3
3
  "sources": ["../src/plugins/file/routes.ts", "../src/cli/commands/file.cmd.ts", "../src/plugins/file/commands.ts", "../src/plugins/file/index.ts"],
4
4
  "sourcesContent": [
5
5
  "/**\n * File Plugin — Routes\n *\n * File system operations with security checks (path traversal, sensitive file blocking).\n *\n * Endpoints:\n * POST /read — Read file content\n * POST /write — Write file content\n * POST /list — List directory contents\n * POST /exists — Check if path exists\n * POST /delete — Delete file or directory\n * POST /readme — Read README file from a project\n */\n\nimport { Elysia, t } from \"elysia\";\nimport { promises as fs } from \"node:fs\";\nimport nodePath from \"node:path\";\nimport type { PluginRouteDeps } from \"../../core/types.js\";\n\n// ── Security Helpers ────────────────────────────────────────────────────\n\nconst SENSITIVE_PATTERNS = [\n /\\.env$/,\n /\\.pem$/,\n /\\.key$/,\n /id_rsa/,\n /\\.ssh\\//,\n /\\.git\\/config$/,\n /\\.npmrc$/,\n];\n\nconst PROTECTED_PATHS = [\"/\", \"/etc\", \"/usr\", \"/bin\", \"/sbin\", \"/var\", \"/opt\"];\n\nfunction validatePath(filePath: string): {\n valid: boolean;\n normalized: string;\n error?: string;\n} {\n const normalized = nodePath.normalize(filePath);\n\n if (normalized.includes(\"..\")) {\n return {\n valid: false,\n normalized,\n error: \"Directory traversal not allowed\",\n };\n }\n\n return { valid: true, normalized };\n}\n\nfunction isSensitiveFile(filePath: string): boolean {\n return SENSITIVE_PATTERNS.some((p) => p.test(filePath));\n}\n\nfunction isProtectedPath(filePath: string): boolean {\n return (\n PROTECTED_PATHS.includes(filePath) ||\n PROTECTED_PATHS.some((p) => filePath.startsWith(p + \"/\"))\n );\n}\n\n// ── Routes ──────────────────────────────────────────────────────────────\n\nexport function createRoutes(_deps: PluginRouteDeps) {\n return (\n new Elysia()\n // Read file\n .post(\n \"/read\",\n async ({ body, set }) => {\n const { valid, normalized, error } = validatePath(body.path);\n if (!valid) {\n set.status = 403;\n return { error };\n }\n\n if (isSensitiveFile(normalized)) {\n set.status = 403;\n return { error: \"Access to sensitive files not allowed\" };\n }\n\n try {\n const content = await fs.readFile(normalized, \"utf-8\");\n return { content, path: normalized, size: content.length };\n } catch (err) {\n const nodeErr = err as NodeJS.ErrnoException;\n if (nodeErr.code === \"ENOENT\") {\n set.status = 404;\n return { error: \"File not found\" };\n }\n if (nodeErr.code === \"EACCES\") {\n set.status = 403;\n return { error: \"Permission denied\" };\n }\n set.status = 500;\n return { error: \"Failed to read file\", details: String(err) };\n }\n },\n {\n body: t.Object({\n path: t.String(),\n projectId: t.Optional(t.String()),\n }),\n },\n )\n\n // Write file\n .post(\n \"/write\",\n async ({ body, set }) => {\n const { valid, normalized, error } = validatePath(body.path);\n if (!valid) {\n set.status = 403;\n return { error };\n }\n\n try {\n const dir = nodePath.dirname(normalized);\n await fs.mkdir(dir, { recursive: true });\n await fs.writeFile(normalized, body.content, \"utf-8\");\n const stats = await fs.stat(normalized);\n return { success: true, path: normalized, size: stats.size };\n } catch (err) {\n const nodeErr = err as NodeJS.ErrnoException;\n if (nodeErr.code === \"EACCES\") {\n set.status = 403;\n return { error: \"Permission denied\" };\n }\n set.status = 500;\n return { error: \"Failed to write file\", details: String(err) };\n }\n },\n {\n body: t.Object({\n path: t.String(),\n content: t.String(),\n projectId: t.Optional(t.String()),\n }),\n },\n )\n\n // List directory\n .post(\n \"/list\",\n async ({ body, set }) => {\n const { valid, normalized, error } = validatePath(body.path);\n if (!valid) {\n set.status = 403;\n return { error };\n }\n\n try {\n const entries = await fs.readdir(normalized, {\n withFileTypes: true,\n });\n\n const files = await Promise.all(\n entries.map(async (entry) => {\n const fullPath = nodePath.join(normalized, entry.name);\n let stats;\n try {\n stats = await fs.stat(fullPath);\n } catch {\n stats = null;\n }\n\n return {\n name: entry.name,\n path: fullPath,\n type: entry.isDirectory()\n ? \"directory\"\n : entry.isFile()\n ? \"file\"\n : entry.isSymbolicLink()\n ? \"symlink\"\n : \"other\",\n size: stats?.size || 0,\n modified: stats?.mtime || null,\n permissions: stats?.mode || null,\n };\n }),\n );\n\n // Sort: directories first, then files alphabetically\n files.sort((a, b) => {\n if (a.type === \"directory\" && b.type !== \"directory\") return -1;\n if (a.type !== \"directory\" && b.type === \"directory\") return 1;\n return a.name.localeCompare(b.name);\n });\n\n return { path: normalized, files, count: files.length };\n } catch (err) {\n const nodeErr = err as NodeJS.ErrnoException;\n if (nodeErr.code === \"ENOENT\") {\n set.status = 404;\n return { error: \"Directory not found\" };\n }\n if (nodeErr.code === \"ENOTDIR\") {\n set.status = 400;\n return { error: \"Path is not a directory\" };\n }\n if (nodeErr.code === \"EACCES\") {\n set.status = 403;\n return { error: \"Permission denied\" };\n }\n set.status = 500;\n return { error: \"Failed to list directory\", details: String(err) };\n }\n },\n {\n body: t.Object({\n path: t.String(),\n projectId: t.Optional(t.String()),\n }),\n },\n )\n\n // Check if path exists\n .post(\n \"/exists\",\n async ({ body, set }) => {\n const { valid, normalized, error } = validatePath(body.path);\n if (!valid) {\n set.status = 403;\n return { error };\n }\n\n try {\n const stats = await fs.stat(normalized);\n return {\n exists: true,\n path: normalized,\n type: stats.isDirectory()\n ? \"directory\"\n : stats.isFile()\n ? \"file\"\n : \"other\",\n size: stats.size,\n modified: stats.mtime,\n };\n } catch (err) {\n const nodeErr = err as NodeJS.ErrnoException;\n if (nodeErr.code === \"ENOENT\") {\n return { exists: false, path: normalized };\n }\n set.status = 500;\n return { error: \"Failed to check path\", details: String(err) };\n }\n },\n {\n body: t.Object({\n path: t.String(),\n }),\n },\n )\n\n // Delete file or directory\n .post(\n \"/delete\",\n async ({ body, set }) => {\n const { valid, normalized, error } = validatePath(body.path);\n if (!valid) {\n set.status = 403;\n return { error };\n }\n\n if (isProtectedPath(normalized)) {\n set.status = 403;\n return { error: \"Cannot delete system directories\" };\n }\n\n try {\n const stats = await fs.stat(normalized);\n if (stats.isDirectory()) {\n await fs.rm(normalized, { recursive: true, force: true });\n } else {\n await fs.unlink(normalized);\n }\n return {\n success: true,\n path: normalized,\n };\n } catch (err) {\n const nodeErr = err as NodeJS.ErrnoException;\n if (nodeErr.code === \"ENOENT\") {\n set.status = 404;\n return { error: \"Path not found\" };\n }\n if (nodeErr.code === \"EACCES\") {\n set.status = 403;\n return { error: \"Permission denied\" };\n }\n set.status = 500;\n return { error: \"Failed to delete path\", details: String(err) };\n }\n },\n {\n body: t.Object({\n path: t.String(),\n }),\n },\n )\n\n // Read README file\n .post(\n \"/readme\",\n async ({ body, set }) => {\n const { valid, normalized, error } = validatePath(body.path);\n if (!valid) {\n set.status = 403;\n return { error };\n }\n\n const readmeVariants = [\n \"README.md\",\n \"readme.md\",\n \"README.MD\",\n \"README\",\n \"readme\",\n \"README.txt\",\n \"readme.txt\",\n \"README.rst\",\n \"readme.rst\",\n ];\n\n for (const variant of readmeVariants) {\n try {\n const readmePath = nodePath.join(normalized, variant);\n const content = await fs.readFile(readmePath, \"utf-8\");\n return {\n content,\n path: readmePath,\n variant,\n size: content.length,\n };\n } catch {\n /* next variant */\n }\n }\n\n set.status = 404;\n return { error: \"No README file found\" };\n },\n {\n body: t.Object({\n path: t.String(),\n }),\n },\n )\n );\n}\n",
6
- "import { Command } from \"commander\";\nimport {\n getAgentUrl,\n apiPost,\n fail,\n success,\n info,\n header,\n kv,\n blank,\n formatTable,\n formatBytes,\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(\"file\")\n .description(\"File system operations via agent\");\n\n // file read\n cmd\n .command(\"read\")\n .description(\"Read a file\")\n .requiredOption(\"--path <path>\", \"File path to read\")\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 apiPost<any>(url, \"/api/files/read\", {\n path: options.path,\n });\n if (result?.content !== undefined) {\n console.log(result.content);\n } else {\n info(\"File is empty or has no content.\");\n }\n } catch (err: any) {\n fail(err.message);\n }\n });\n\n // file write\n cmd\n .command(\"write\")\n .description(\"Write content to a file\")\n .requiredOption(\"--path <path>\", \"File path to write\")\n .requiredOption(\"--content <content>\", \"Content to write\")\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/files/write\", {\n path: options.path,\n content: options.content,\n });\n success(`File written: ${options.path}`);\n } catch (err: any) {\n fail(err.message);\n }\n });\n\n // file list\n cmd\n .command(\"list\")\n .description(\"List files in a directory\")\n .requiredOption(\"--path <path>\", \"Directory path\")\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 apiPost<any>(url, \"/api/files/list\", {\n path: options.path,\n });\n const files = result?.files || result;\n if (!files || (Array.isArray(files) && files.length === 0)) {\n info(\"Directory is empty.\");\n return;\n }\n header(`Files in ${options.path}`);\n formatTable(\n (Array.isArray(files) ? files : []).map((f: any) => ({\n Name: f.name || f.filename || \"-\",\n Type: f.type || (f.isDirectory ? \"directory\" : \"file\"),\n Size: f.size !== undefined ? formatBytes(f.size) : \"-\",\n })),\n );\n } catch (err: any) {\n fail(err.message);\n }\n });\n\n // file exists\n cmd\n .command(\"exists\")\n .description(\"Check if a file exists\")\n .requiredOption(\"--path <path>\", \"File path to check\")\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 apiPost<any>(url, \"/api/files/exists\", {\n path: options.path,\n });\n if (result?.exists) {\n success(`File exists: ${options.path}`);\n } else {\n info(`File does not exist: ${options.path}`);\n }\n } catch (err: any) {\n fail(err.message);\n }\n });\n\n // file delete\n cmd\n .command(\"delete\")\n .description(\"Delete a file\")\n .requiredOption(\"--path <path>\", \"File path to delete\")\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/files/delete\", {\n path: options.path,\n });\n success(`File deleted: ${options.path}`);\n } catch (err: any) {\n fail(err.message);\n }\n });\n\n // file readme\n cmd\n .command(\"readme\")\n .description(\"Read the README file from a directory\")\n .requiredOption(\"--path <path>\", \"Directory path\")\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 apiPost<any>(url, \"/api/files/readme\", {\n path: options.path,\n });\n if (result?.content) {\n console.log(result.content);\n } else {\n info(\"No README found in the specified directory.\");\n }\n } catch (err: any) {\n fail(err.message);\n }\n });\n}\n",
6
+ "import { Command } from \"commander\";\nimport {\n getAgentUrl,\n apiPost,\n fail,\n success,\n info,\n header,\n formatTable,\n formatBytes,\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(\"file\")\n .description(\"File system operations via agent\");\n\n // file read\n cmd\n .command(\"read\")\n .description(\"Read a file\")\n .requiredOption(\"--path <path>\", \"File path to read\")\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 apiPost<any>(url, \"/api/files/read\", {\n path: options.path,\n });\n if (result?.content !== undefined) {\n console.log(result.content);\n } else {\n info(\"File is empty or has no content.\");\n }\n } catch (err: any) {\n fail(err.message);\n }\n });\n\n // file write\n cmd\n .command(\"write\")\n .description(\"Write content to a file\")\n .requiredOption(\"--path <path>\", \"File path to write\")\n .requiredOption(\"--content <content>\", \"Content to write\")\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/files/write\", {\n path: options.path,\n content: options.content,\n });\n success(`File written: ${options.path}`);\n } catch (err: any) {\n fail(err.message);\n }\n });\n\n // file list\n cmd\n .command(\"list\")\n .description(\"List files in a directory\")\n .requiredOption(\"--path <path>\", \"Directory path\")\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 apiPost<any>(url, \"/api/files/list\", {\n path: options.path,\n });\n const files = result?.files || result;\n if (!files || (Array.isArray(files) && files.length === 0)) {\n info(\"Directory is empty.\");\n return;\n }\n header(`Files in ${options.path}`);\n formatTable(\n (Array.isArray(files) ? files : []).map((f: any) => ({\n Name: f.name || f.filename || \"-\",\n Type: f.type || (f.isDirectory ? \"directory\" : \"file\"),\n Size: f.size !== undefined ? formatBytes(f.size) : \"-\",\n })),\n );\n } catch (err: any) {\n fail(err.message);\n }\n });\n\n // file exists\n cmd\n .command(\"exists\")\n .description(\"Check if a file exists\")\n .requiredOption(\"--path <path>\", \"File path to check\")\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 apiPost<any>(url, \"/api/files/exists\", {\n path: options.path,\n });\n if (result?.exists) {\n success(`File exists: ${options.path}`);\n } else {\n info(`File does not exist: ${options.path}`);\n }\n } catch (err: any) {\n fail(err.message);\n }\n });\n\n // file delete\n cmd\n .command(\"delete\")\n .description(\"Delete a file\")\n .requiredOption(\"--path <path>\", \"File path to delete\")\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/files/delete\", {\n path: options.path,\n });\n success(`File deleted: ${options.path}`);\n } catch (err: any) {\n fail(err.message);\n }\n });\n\n // file readme\n cmd\n .command(\"readme\")\n .description(\"Read the README file from a directory\")\n .requiredOption(\"--path <path>\", \"Directory path\")\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 apiPost<any>(url, \"/api/files/readme\", {\n path: options.path,\n });\n if (result?.content) {\n console.log(result.content);\n } else {\n info(\"No README found in the specified directory.\");\n }\n } catch (err: any) {\n fail(err.message);\n }\n });\n}\n",
7
7
  "import type { Command } from \"commander\";\nimport type { HostServices } from \"../../core/plugin-system.js\";\nimport { register as registerFile } from \"../../cli/commands/file.cmd.js\";\n\nexport function registerCommands(\n program: Command,\n _hostServices: HostServices,\n): void {\n registerFile(program);\n}\n",
8
8
  "import type { VibePlugin } from \"../../core/plugin-system.js\";\nimport type { PluginRouteDeps } from \"../../core/types.js\";\nimport { createRoutes } from \"./routes.js\";\nimport { registerCommands } from \"./commands.js\";\n\nexport const vibePlugin: VibePlugin = {\n name: \"file\",\n version: \"2.2.0\",\n description: \"File system operations with security checks\",\n tags: [\"backend\", \"cli\"],\n cliCommand: \"file\",\n apiPrefix: \"/api/files\",\n createRoutes: (deps: PluginRouteDeps) => createRoutes(deps),\n onCliSetup: async (program, hostServices) => {\n registerCommands(program, hostServices);\n },\n};\n"
9
9
  ],
10
- "mappings": "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",
10
+ "mappings": "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",
11
11
  "debugId": "EBEB983AE70EABB664756E2164756E21",
12
12
  "names": []
13
13
  }
@@ -1,7 +1,7 @@
1
1
  // @bun
2
2
  import {
3
3
  gatewayClient
4
- } from "./index-05qfwz8r.js";
4
+ } from "./index-jerwk237.js";
5
5
  import {
6
6
  ServiceManager,
7
7
  checkDependencies,
@@ -512,4 +512,4 @@ export {
512
512
  };
513
513
 
514
514
  //# debugId=9AE6B13FD3CF2B6664756E2164756E21
515
- //# sourceMappingURL=index-wjsms9jw.js.map
515
+ //# sourceMappingURL=index-tjymws9j.js.map