@openbuilder/cli 0.50.43 → 0.50.46
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunks/{Banner-C-FTiOIR.js → Banner-BKC6yG6z.js} +2 -2
- package/dist/chunks/Banner-BKC6yG6z.js.map +1 -0
- package/dist/chunks/auto-update-Dq2PFvjt.js +1 -0
- package/dist/chunks/auto-update-Dq2PFvjt.js.map +1 -0
- package/dist/chunks/build-D0qYqIq0.js +1 -0
- package/dist/chunks/build-D0qYqIq0.js.map +1 -0
- package/dist/chunks/cleanup-qVTsA3tk.js +1 -0
- package/dist/chunks/cleanup-qVTsA3tk.js.map +1 -0
- package/dist/chunks/{cli-auth-ChCnxlFl.js → cli-auth-BgiGSBOt.js} +4 -3
- package/dist/chunks/cli-auth-BgiGSBOt.js.map +1 -0
- package/dist/chunks/cli-error-BjQwvWtK.js +1 -0
- package/dist/chunks/cli-error-BjQwvWtK.js.map +1 -0
- package/dist/chunks/config-BGP1jZJ4.js +1 -0
- package/dist/chunks/config-BGP1jZJ4.js.map +1 -0
- package/dist/chunks/config-manager-BkbjtN-H.js +1 -0
- package/dist/chunks/config-manager-BkbjtN-H.js.map +1 -0
- package/dist/chunks/database-BvAbD4sP.js +1 -0
- package/dist/chunks/database-BvAbD4sP.js.map +1 -0
- package/dist/chunks/database-setup-BYjIRAmT.js +1 -0
- package/dist/chunks/database-setup-BYjIRAmT.js.map +1 -0
- package/dist/chunks/devtools-7A3EXJhY.js +75 -0
- package/dist/chunks/devtools-7A3EXJhY.js.map +1 -0
- package/dist/chunks/index-ZNRLfdj5.js +119 -0
- package/dist/chunks/index-ZNRLfdj5.js.map +1 -0
- package/dist/chunks/{init-DNyPS_SR.js → init-IQRjA1g3.js} +8 -9
- package/dist/chunks/init-IQRjA1g3.js.map +1 -0
- package/dist/chunks/{init-tui-EFMXj-MG.js → init-tui-B4jfmo3U.js} +7 -8
- package/dist/chunks/init-tui-B4jfmo3U.js.map +1 -0
- package/dist/chunks/logger-ZpJi7chw.js +1 -0
- package/dist/chunks/logger-ZpJi7chw.js.map +1 -0
- package/dist/chunks/{login-BhtodVsj.js → login-CrIcDJpS.js} +2 -1
- package/dist/chunks/login-CrIcDJpS.js.map +1 -0
- package/dist/chunks/{logout-CDDASeuQ.js → logout-BxgiczmY.js} +2 -1
- package/dist/chunks/logout-BxgiczmY.js.map +1 -0
- package/dist/chunks/{main-tui-D-SG-Ba5.js → main-tui-NPDVPKol.js} +9 -10
- package/dist/chunks/main-tui-NPDVPKol.js.map +1 -0
- package/dist/chunks/manager-CvGX9qqe.js +1 -0
- package/dist/chunks/manager-CvGX9qqe.js.map +1 -0
- package/dist/chunks/{port-allocator-B0q7xkLs.js → port-allocator-DuAZe2_S.js} +3 -36
- package/dist/chunks/port-allocator-DuAZe2_S.js.map +1 -0
- package/dist/chunks/process-killer-CaUL7Kpl.js +1 -0
- package/dist/chunks/process-killer-CaUL7Kpl.js.map +1 -0
- package/dist/chunks/prompts-1QbE_bRr.js +1 -0
- package/dist/chunks/prompts-1QbE_bRr.js.map +1 -0
- package/dist/chunks/repo-cloner-CpOQjFSo.js +1 -0
- package/dist/chunks/repo-cloner-CpOQjFSo.js.map +1 -0
- package/dist/chunks/repo-detector-B_oj696o.js +1 -0
- package/dist/chunks/repo-detector-B_oj696o.js.map +1 -0
- package/dist/chunks/{run-Cor14S0I.js → run-Yh3YjeLl.js} +17 -36
- package/dist/chunks/run-Yh3YjeLl.js.map +1 -0
- package/dist/chunks/runner-logger-instance-nDWv2h2T.js +1 -0
- package/dist/chunks/runner-logger-instance-nDWv2h2T.js.map +1 -0
- package/dist/chunks/spinner-BJL9zWAJ.js +1 -0
- package/dist/chunks/spinner-BJL9zWAJ.js.map +1 -0
- package/dist/chunks/{start-k9iGDVWo.js → start-B-brfyVy.js} +7 -7
- package/dist/chunks/start-B-brfyVy.js.map +1 -0
- package/dist/chunks/start-traditional-uoLZXdxm.js +1 -0
- package/dist/chunks/start-traditional-uoLZXdxm.js.map +1 -0
- package/dist/chunks/status-cS8YwtUx.js +1 -0
- package/dist/chunks/status-cS8YwtUx.js.map +1 -0
- package/dist/chunks/{vendor-react-CXgiD1Dl.js → theme-DOjeB8BU.js} +50 -225
- package/dist/chunks/theme-DOjeB8BU.js.map +1 -0
- package/dist/chunks/upgrade-CKjl4HlB.js +1 -0
- package/dist/chunks/upgrade-CKjl4HlB.js.map +1 -0
- package/dist/chunks/use-app-DozfqdJj.js +10 -0
- package/dist/chunks/use-app-DozfqdJj.js.map +1 -0
- package/dist/chunks/{useBuildState-DscLOZLl.js → useBuildState-DV6wurQ2.js} +2 -2
- package/dist/chunks/useBuildState-DV6wurQ2.js.map +1 -0
- package/dist/cli/index.js +8 -7
- package/dist/cli/index.js.map +1 -0
- package/dist/index.js +109 -700
- package/dist/index.js.map +1 -0
- package/dist/instrument.js +8 -81
- package/dist/instrument.js.map +1 -0
- package/package.json +2 -11
- package/dist/chunks/theme-DhorI2Hb.js +0 -43
- package/dist/chunks/vendor-ai-sdk-CSJ0bw9X.js +0 -1970
- package/dist/chunks/vendor-sentry-CqA9P3UG.js +0 -71910
- package/scripts/install-vendor-deps.js +0 -34
- package/scripts/install-vendor.js +0 -167
- package/scripts/prepare-release.js +0 -83
- package/vendor/ai-sdk-provider-claude-code-LOCAL.tgz +0 -0
- package/vendor/sentry-core-LOCAL.tgz +0 -0
- package/vendor/sentry-nextjs-LOCAL.tgz +0 -0
- package/vendor/sentry-node-LOCAL.tgz +0 -0
- package/vendor/sentry-node-core-LOCAL.tgz +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"port-allocator-DuAZe2_S.js","sources":["../../../../packages/agent-core/dist/lib/port-allocator.js"],"sourcesContent":["var __defProp = Object.defineProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\n\n// src/lib/db/client.ts\nimport { drizzle } from \"drizzle-orm/node-postgres\";\nimport pg from \"pg\";\n\n// src/lib/db/schema.ts\nvar schema_exports = {};\n__export(schema_exports, {\n accounts: () => accounts,\n cliAuthSessions: () => cliAuthSessions,\n generationNotes: () => generationNotes,\n generationSessions: () => generationSessions,\n generationTodos: () => generationTodos,\n generationToolCalls: () => generationToolCalls,\n messages: () => messages,\n portAllocations: () => portAllocations,\n projects: () => projects,\n runnerKeys: () => runnerKeys,\n runningProcesses: () => runningProcesses,\n serverOperations: () => serverOperations,\n sessions: () => sessions,\n users: () => users,\n verifications: () => verifications\n});\nimport { pgTable, text, integer, timestamp, uuid, jsonb, index, uniqueIndex, boolean } from \"drizzle-orm/pg-core\";\nimport { sql } from \"drizzle-orm\";\nvar users = pgTable(\"users\", {\n id: uuid(\"id\").primaryKey().defaultRandom(),\n name: text(\"name\").notNull(),\n email: text(\"email\").notNull().unique(),\n emailVerified: boolean(\"email_verified\").notNull().default(false),\n image: text(\"image\"),\n hasCompletedOnboarding: boolean(\"has_completed_onboarding\").notNull().default(false),\n createdAt: timestamp(\"created_at\").notNull().defaultNow(),\n updatedAt: timestamp(\"updated_at\").notNull().defaultNow()\n});\nvar sessions = pgTable(\"sessions\", {\n id: uuid(\"id\").primaryKey().defaultRandom(),\n userId: uuid(\"user_id\").notNull().references(() => users.id, { onDelete: \"cascade\" }),\n token: text(\"token\").notNull().unique(),\n expiresAt: timestamp(\"expires_at\").notNull(),\n ipAddress: text(\"ip_address\"),\n userAgent: text(\"user_agent\"),\n createdAt: timestamp(\"created_at\").notNull().defaultNow(),\n updatedAt: timestamp(\"updated_at\").notNull().defaultNow()\n}, (table) => ({\n userIdIdx: index(\"sessions_user_id_idx\").on(table.userId),\n tokenIdx: index(\"sessions_token_idx\").on(table.token)\n}));\nvar accounts = pgTable(\"accounts\", {\n id: uuid(\"id\").primaryKey().defaultRandom(),\n userId: uuid(\"user_id\").notNull().references(() => users.id, { onDelete: \"cascade\" }),\n accountId: text(\"account_id\").notNull(),\n providerId: text(\"provider_id\").notNull(),\n // 'credential', 'google', etc.\n accessToken: text(\"access_token\"),\n refreshToken: text(\"refresh_token\"),\n accessTokenExpiresAt: timestamp(\"access_token_expires_at\"),\n refreshTokenExpiresAt: timestamp(\"refresh_token_expires_at\"),\n scope: text(\"scope\"),\n idToken: text(\"id_token\"),\n // ID token from OAuth providers\n password: text(\"password\"),\n // Hashed password for credential provider\n createdAt: timestamp(\"created_at\").notNull().defaultNow(),\n updatedAt: timestamp(\"updated_at\").notNull().defaultNow()\n}, (table) => ({\n userIdIdx: index(\"accounts_user_id_idx\").on(table.userId),\n providerAccountIdx: uniqueIndex(\"accounts_provider_account_idx\").on(table.providerId, table.accountId)\n}));\nvar verifications = pgTable(\"verifications\", {\n id: uuid(\"id\").primaryKey().defaultRandom(),\n identifier: text(\"identifier\").notNull(),\n // email or other identifier\n value: text(\"value\").notNull(),\n // verification token\n expiresAt: timestamp(\"expires_at\").notNull(),\n createdAt: timestamp(\"created_at\").notNull().defaultNow(),\n updatedAt: timestamp(\"updated_at\").notNull().defaultNow()\n}, (table) => ({\n identifierIdx: index(\"verifications_identifier_idx\").on(table.identifier)\n}));\nvar runnerKeys = pgTable(\"runner_keys\", {\n id: uuid(\"id\").primaryKey().defaultRandom(),\n userId: uuid(\"user_id\").notNull().references(() => users.id, { onDelete: \"cascade\" }),\n name: text(\"name\").notNull(),\n // User-friendly name like \"My MacBook\"\n keyHash: text(\"key_hash\").notNull(),\n // SHA-256 hash of the full key\n keyPrefix: text(\"key_prefix\").notNull(),\n // First 8 chars for display: \"sv_abc123...\"\n source: text(\"source\").default(\"web\"),\n // 'web' | 'cli' - how the key was created\n lastUsedAt: timestamp(\"last_used_at\"),\n createdAt: timestamp(\"created_at\").notNull().defaultNow(),\n revokedAt: timestamp(\"revoked_at\")\n // Soft delete - null means active\n}, (table) => ({\n userIdIdx: index(\"runner_keys_user_id_idx\").on(table.userId),\n keyHashIdx: uniqueIndex(\"runner_keys_key_hash_idx\").on(table.keyHash)\n}));\nvar cliAuthSessions = pgTable(\"cli_auth_sessions\", {\n id: uuid(\"id\").primaryKey().defaultRandom(),\n token: text(\"token\").notNull().unique(),\n // Random token for session identification\n callbackPort: integer(\"callback_port\").notNull(),\n // Port the CLI is listening on\n callbackHost: text(\"callback_host\").default(\"localhost\"),\n // Host for callback\n state: text(\"state\").notNull().default(\"pending\"),\n // 'pending' | 'authenticated' | 'completed' | 'expired'\n userId: uuid(\"user_id\").references(() => users.id, { onDelete: \"cascade\" }),\n // Set after auth\n runnerKeyId: uuid(\"runner_key_id\").references(() => runnerKeys.id, { onDelete: \"cascade\" }),\n // Created key\n deviceName: text(\"device_name\"),\n // Auto-detected device name\n expiresAt: timestamp(\"expires_at\").notNull(),\n // Session expiration (short-lived)\n createdAt: timestamp(\"created_at\").notNull().defaultNow(),\n authenticatedAt: timestamp(\"authenticated_at\")\n // When user completed OAuth\n}, (table) => ({\n tokenIdx: uniqueIndex(\"cli_auth_sessions_token_idx\").on(table.token),\n expiresAtIdx: index(\"cli_auth_sessions_expires_at_idx\").on(table.expiresAt)\n}));\nvar projects = pgTable(\"projects\", {\n id: uuid(\"id\").primaryKey().defaultRandom(),\n userId: uuid(\"user_id\").references(() => users.id, { onDelete: \"set null\" }),\n // Owner of the project (nullable for migration/local mode)\n name: text(\"name\").notNull(),\n slug: text(\"slug\").notNull().unique(),\n description: text(\"description\"),\n originalPrompt: text(\"original_prompt\"),\n icon: text(\"icon\").default(\"Folder\"),\n status: text(\"status\").notNull().default(\"pending\"),\n projectType: text(\"project_type\"),\n detectedFramework: text(\"detected_framework\"),\n // Auto-detected framework (astro, next, vite, etc.)\n path: text(\"path\"),\n // Nullable - deprecated, path should be calculated from slug\n runCommand: text(\"run_command\"),\n port: integer(\"port\"),\n devServerPid: integer(\"dev_server_pid\"),\n devServerPort: integer(\"dev_server_port\"),\n devServerStatus: text(\"dev_server_status\").default(\"stopped\"),\n devServerStatusUpdatedAt: timestamp(\"dev_server_status_updated_at\").defaultNow(),\n tunnelUrl: text(\"tunnel_url\"),\n runnerId: text(\"runner_id\"),\n // Runner that created/manages this project\n generationState: text(\"generation_state\"),\n designPreferences: jsonb(\"design_preferences\"),\n // User-specified design constraints (deprecated - use tags)\n tags: jsonb(\"tags\"),\n // Tag-based configuration system\n lastActivityAt: timestamp(\"last_activity_at\").defaultNow(),\n errorMessage: text(\"error_message\"),\n // GitHub integration fields\n githubRepo: text(\"github_repo\"),\n // e.g., \"owner/repo-name\"\n githubUrl: text(\"github_url\"),\n // Full repository URL\n githubBranch: text(\"github_branch\"),\n // Default branch (e.g., \"main\")\n githubLastPushedAt: timestamp(\"github_last_pushed_at\"),\n // Last push timestamp\n githubAutoPush: boolean(\"github_auto_push\").default(false),\n // Auto-push after builds\n githubLastSyncAt: timestamp(\"github_last_sync_at\"),\n // Last time we synced repo info\n githubMeta: jsonb(\"github_meta\"),\n // Additional metadata (issues count, recent commits, etc.)\n // NeonDB integration fields\n neondbConnectionString: text(\"neondb_connection_string\"),\n // DATABASE_URL (encrypted/partial)\n neondbClaimUrl: text(\"neondb_claim_url\"),\n // URL to claim the database\n neondbHost: text(\"neondb_host\"),\n // Database host endpoint\n neondbDatabase: text(\"neondb_database\"),\n // Database name\n neondbCreatedAt: timestamp(\"neondb_created_at\"),\n // When database was provisioned\n neondbExpiresAt: timestamp(\"neondb_expires_at\"),\n // When unclaimed DB expires (72 hours)\n createdAt: timestamp(\"created_at\").notNull().defaultNow(),\n updatedAt: timestamp(\"updated_at\").notNull().defaultNow()\n}, (table) => ({\n // Indexes for performance\n userIdIdx: index(\"projects_user_id_idx\").on(table.userId),\n runnerIdIdx: index(\"projects_runner_id_idx\").on(table.runnerId),\n statusIdx: index(\"projects_status_idx\").on(table.status),\n lastActivityIdx: index(\"projects_last_activity_idx\").on(table.lastActivityAt)\n}));\nvar messages = pgTable(\"messages\", {\n id: uuid(\"id\").primaryKey().defaultRandom(),\n projectId: uuid(\"project_id\").notNull().references(() => projects.id, { onDelete: \"cascade\" }),\n role: text(\"role\").notNull(),\n content: text(\"content\").notNull(),\n createdAt: timestamp(\"created_at\").notNull().defaultNow()\n});\nvar portAllocations = pgTable(\"port_allocations\", {\n port: integer(\"port\").primaryKey(),\n framework: text(\"framework\").notNull(),\n projectId: uuid(\"project_id\").references(() => projects.id, { onDelete: \"set null\" }),\n reservedAt: timestamp(\"reserved_at\").defaultNow()\n});\nvar runningProcesses = pgTable(\"running_processes\", {\n projectId: uuid(\"project_id\").primaryKey().notNull().references(() => projects.id, { onDelete: \"cascade\" }),\n pid: integer(\"pid\").notNull(),\n port: integer(\"port\"),\n command: text(\"command\"),\n runnerId: text(\"runner_id\"),\n // Runner that manages this process\n startedAt: timestamp(\"started_at\").notNull().defaultNow(),\n lastHealthCheck: timestamp(\"last_health_check\"),\n healthCheckFailCount: integer(\"health_check_fail_count\").notNull().default(0)\n}, (table) => ({\n // Index for filtering by runner\n runnerIdIdx: index(\"running_processes_runner_id_idx\").on(table.runnerId)\n}));\nvar generationSessions = pgTable(\"generation_sessions\", {\n id: uuid(\"id\").primaryKey().defaultRandom(),\n projectId: uuid(\"project_id\").notNull().references(() => projects.id, { onDelete: \"cascade\" }),\n buildId: text(\"build_id\").notNull(),\n operationType: text(\"operation_type\"),\n status: text(\"status\").notNull().default(\"active\"),\n startedAt: timestamp(\"started_at\").notNull().defaultNow(),\n endedAt: timestamp(\"ended_at\"),\n summary: text(\"summary\"),\n rawState: jsonb(\"raw_state\"),\n isAutoFix: boolean(\"is_auto_fix\").default(false),\n // Flag for auto-fix sessions triggered by startup errors\n autoFixError: text(\"auto_fix_error\"),\n // The error message that triggered the auto-fix\n createdAt: timestamp(\"created_at\").notNull().defaultNow(),\n updatedAt: timestamp(\"updated_at\").notNull().defaultNow()\n}, (table) => ({\n projectIdIdx: index(\"generation_sessions_project_id_idx\").on(table.projectId),\n buildIdUnique: uniqueIndex(\"generation_sessions_build_id_unique\").on(table.buildId)\n}));\nvar generationTodos = pgTable(\"generation_todos\", {\n id: uuid(\"id\").primaryKey().defaultRandom(),\n sessionId: uuid(\"session_id\").notNull().references(() => generationSessions.id, { onDelete: \"cascade\" }),\n todoIndex: integer(\"todo_index\").notNull(),\n content: text(\"content\").notNull(),\n activeForm: text(\"active_form\"),\n status: text(\"status\").notNull(),\n createdAt: timestamp(\"created_at\").notNull().defaultNow(),\n updatedAt: timestamp(\"updated_at\").notNull().defaultNow()\n}, (table) => ({\n sessionIdIdx: index(\"generation_todos_session_id_idx\").on(table.sessionId),\n sessionIndexUnique: uniqueIndex(\"generation_todos_session_index_unique\").on(table.sessionId, table.todoIndex)\n}));\nvar generationToolCalls = pgTable(\"generation_tool_calls\", {\n id: uuid(\"id\").primaryKey().defaultRandom(),\n sessionId: uuid(\"session_id\").notNull().references(() => generationSessions.id, { onDelete: \"cascade\" }),\n todoIndex: integer(\"todo_index\").notNull(),\n toolCallId: text(\"tool_call_id\").notNull(),\n name: text(\"name\").notNull(),\n input: jsonb(\"input\"),\n output: jsonb(\"output\"),\n state: text(\"state\").notNull(),\n startedAt: timestamp(\"started_at\").notNull().defaultNow(),\n endedAt: timestamp(\"ended_at\"),\n createdAt: timestamp(\"created_at\").notNull().defaultNow(),\n updatedAt: timestamp(\"updated_at\").notNull().defaultNow()\n}, (table) => ({\n sessionIdIdx: index(\"generation_tool_calls_session_id_idx\").on(table.sessionId),\n toolCallUnique: uniqueIndex(\"generation_tool_calls_call_id_unique\").on(table.sessionId, table.toolCallId)\n}));\nvar generationNotes = pgTable(\"generation_notes\", {\n id: uuid(\"id\").primaryKey().defaultRandom(),\n sessionId: uuid(\"session_id\").notNull().references(() => generationSessions.id, { onDelete: \"cascade\" }),\n todoIndex: integer(\"todo_index\").notNull(),\n textId: text(\"text_id\"),\n kind: text(\"kind\").notNull().default(\"text\"),\n content: text(\"content\").notNull(),\n createdAt: timestamp(\"created_at\").notNull().defaultNow()\n}, (table) => ({\n sessionIdIdx: index(\"generation_notes_session_id_idx\").on(table.sessionId),\n textIdUnique: uniqueIndex(\"generation_notes_text_id_unique\").on(table.sessionId, table.textId).where(sql`${table.textId} is not null`)\n}));\nvar serverOperations = pgTable(\"server_operations\", {\n id: uuid(\"id\").primaryKey().defaultRandom(),\n projectId: uuid(\"project_id\").notNull().references(() => projects.id, { onDelete: \"cascade\" }),\n operation: text(\"operation\").notNull(),\n // 'start', 'stop', 'restart'\n status: text(\"status\").notNull().default(\"pending\"),\n // 'pending', 'sent', 'ack', 'completed', 'failed', 'timeout'\n runnerId: text(\"runner_id\"),\n port: integer(\"port\"),\n pid: integer(\"pid\"),\n error: text(\"error\"),\n failureReason: text(\"failure_reason\"),\n // 'port_in_use', 'health_check_timeout', 'immediate_crash', etc.\n retryCount: integer(\"retry_count\").notNull().default(0),\n metadata: jsonb(\"metadata\"),\n createdAt: timestamp(\"created_at\").notNull().defaultNow(),\n sentAt: timestamp(\"sent_at\"),\n ackAt: timestamp(\"ack_at\"),\n completedAt: timestamp(\"completed_at\")\n}, (table) => ({\n projectIdIdx: index(\"server_operations_project_id_idx\").on(table.projectId),\n statusIdx: index(\"server_operations_status_idx\").on(table.status),\n createdAtIdx: index(\"server_operations_created_at_idx\").on(table.createdAt)\n}));\n\n// src/lib/db/client.ts\nvar { Pool } = pg;\nfunction createPostgresClient() {\n const connectionString = process.env.DATABASE_URL;\n if (!connectionString) {\n throw new Error(\n 'DATABASE_URL is not set. Please configure your database connection:\\n - Run \"openbuilder init\" to set up a Neon database\\n - Or set DATABASE_URL environment variable to your PostgreSQL connection string'\n );\n }\n const pool = new Pool({\n connectionString,\n ssl: process.env.PGSSLMODE === \"disable\" ? false : { rejectUnauthorized: false }\n });\n const client = drizzle(pool, { schema: schema_exports });\n return client;\n}\nvar db = new Proxy({}, {\n get(_target, prop) {\n if (!global.__db) {\n global.__db = createPostgresClient();\n }\n return global.__db[prop];\n }\n});\n\n// src/lib/port-allocator.ts\nimport { and, eq, isNull, sql as sql2, isNotNull, lt } from \"drizzle-orm\";\nimport { createServer } from \"net\";\nimport { readFile } from \"fs/promises\";\nimport { existsSync } from \"fs\";\nimport { join } from \"path\";\n\n// src/lib/logging/build-logger.ts\nimport * as Sentry from \"@sentry/node\";\nvar BuildLogger = class {\n buildId = null;\n projectId = null;\n /**\n * Set correlation IDs for the current build\n * Call this at the start of each build to enable correlation tracking\n */\n setBuildContext(buildId, projectId) {\n this.buildId = buildId;\n this.projectId = projectId;\n this.log(\"debug\", \"runner\", `Build context set: ${buildId} / ${projectId}`);\n }\n /**\n * Clear correlation IDs after build completes\n */\n clearBuildContext() {\n this.log(\"debug\", \"runner\", \"Build context cleared\");\n this.buildId = null;\n this.projectId = null;\n }\n /**\n * Core logging method - creates structured log entries\n * Public for custom logging needs\n */\n log(level, context, message, data) {\n if (process.env.SILENT_MODE === \"1\") {\n return;\n }\n if (level === \"info\" || level === \"debug\") {\n if (process.env.DEBUG_BUILD === \"0\") {\n return;\n }\n }\n const entry = {\n timestamp: (/* @__PURE__ */ new Date()).toISOString(),\n level,\n context,\n buildId: this.buildId ?? void 0,\n projectId: this.projectId ?? void 0,\n message,\n data\n };\n const prefix = `[${context}]`;\n const icon = {\n debug: \"\\u{1F50D}\",\n info: \"\\u{1F4CB}\",\n warn: \"\\u26A0\\uFE0F \",\n error: \"\\u274C\"\n }[level];\n const logFn = level === \"error\" ? console.error : level === \"warn\" ? console.warn : console.log;\n if (data && Object.keys(data).length > 0) {\n logFn(`${icon} ${prefix} ${message}`, data);\n } else {\n logFn(`${icon} ${prefix} ${message}`);\n }\n if (typeof process !== \"undefined\" && process.env.NODE_ENV !== \"test\") {\n try {\n if (level === \"warn\" || level === \"error\") {\n Sentry.addBreadcrumb({\n category: `build-logger.${context}`,\n message,\n level: level === \"error\" ? \"error\" : \"warning\",\n data: {\n ...data,\n buildId: this.buildId,\n projectId: this.projectId\n }\n });\n }\n } catch {\n }\n }\n }\n /**\n * Orchestrator-specific logging methods\n */\n orchestrator = {\n newProject: (operationType) => this.log(\"info\", \"orchestrator\", `NEW PROJECT (operationType: ${operationType})`),\n existingProject: (operationType) => this.log(\"info\", \"orchestrator\", `EXISTING PROJECT (operationType: ${operationType})`),\n templateProvided: (templateName, templateId, framework) => this.log(\"info\", \"orchestrator\", `Frontend provided template: ${templateName}`, {\n templateId,\n framework\n }),\n templateSelecting: (method) => this.log(\"info\", \"orchestrator\", `Template selection: ${method}`),\n templateSelected: (templateName, templateId) => this.log(\"info\", \"orchestrator\", `Selected template: ${templateName}`, { templateId }),\n templateDownloading: (templateName, repository, target) => this.log(\"info\", \"orchestrator\", `Downloading template: ${templateName}`, {\n repository,\n target\n }),\n templateDownloaded: (templateName, path, fileTreeSize) => this.log(\"info\", \"orchestrator\", `Template downloaded: ${templateName}`, {\n path,\n fileTreeSize\n }),\n catalogPrepared: (catalogSize) => this.log(\"info\", \"orchestrator\", `Template catalog prepared (${catalogSize} chars)`, {\n catalogSize\n }),\n systemPromptGenerated: (size) => this.log(\"info\", \"orchestrator\", `System prompt generated (${size} chars)`, { size }),\n orchestrationComplete: (data) => this.log(\"info\", \"orchestrator\", \"Orchestration complete\", data),\n error: (message, error) => this.log(\"error\", \"orchestrator\", message, {\n error: error instanceof Error ? error.message : String(error)\n })\n };\n /**\n * Message transformer-specific logging methods\n */\n transformer = {\n todoListFound: () => this.log(\"debug\", \"transformer\", \"Found Codex task list, parsing...\"),\n todoListParsed: (todoCount, completed, inProgress, pending) => this.log(\"info\", \"transformer\", `Parsed ${todoCount} todos`, {\n completed,\n inProgress,\n pending\n }),\n todoListInvalidFormat: (expected, got) => this.log(\"error\", \"transformer\", \"Invalid todo format from Codex\", {\n expected,\n got: JSON.stringify(got).substring(0, 200)\n }),\n todoListParseError: (error, rawJson) => this.log(\"error\", \"transformer\", \"Failed to parse Codex todolist\", {\n error: String(error),\n rawJson: rawJson.substring(0, 300)\n }),\n todoListRemoved: () => this.log(\"debug\", \"transformer\", \"Removed task list from chat text\"),\n toolStarted: (toolName, toolId) => this.log(\"debug\", \"transformer\", `Tool started: ${toolName}`, { toolName, toolId }),\n toolCompleted: (toolName, toolId) => this.log(\"debug\", \"transformer\", `Tool completed: ${toolName}`, { toolName, toolId }),\n pathViolationWarning: (toolName, path, workspace) => this.log(\"warn\", \"transformer\", `Path outside workspace: ${path}`, {\n toolName,\n path,\n workspace\n }),\n desktopPathDetected: (path) => this.log(\"error\", \"transformer\", `DESKTOP PATH DETECTED - Likely hallucinated: ${path}`, { path })\n };\n /**\n * Codex query-specific logging methods\n */\n codexQuery = {\n promptBuilding: (workingDirectory, systemPromptSize, userPromptSize) => this.log(\"info\", \"codex-query\", \"Building Codex prompt\", {\n workingDirectory,\n systemPromptSize,\n userPromptSize\n }),\n threadStarting: () => this.log(\"info\", \"codex-query\", \"Starting Codex thread (multi-turn)\"),\n turnStarted: (turnNumber, maxTurns, promptSize) => this.log(\"info\", \"codex-query\", `\\u2550\\u2550\\u2550 Turn ${turnNumber}/${maxTurns} \\u2550\\u2550\\u2550`, {\n turnNumber,\n maxTurns,\n promptSize\n }),\n taskListExtracted: () => this.log(\"info\", \"codex-query\", \"Task list extracted and updated\"),\n taskListStatus: (completed, inProgress, pending, total) => this.log(\"info\", \"codex-query\", `Tasks: ${completed} completed | ${inProgress} in_progress | ${pending} pending (total: ${total})`, {\n completed,\n inProgress,\n pending,\n total\n }),\n taskListTask: (index2, content, status, icon) => this.log(\"debug\", \"codex-query\", ` ${icon} ${index2 + 1}. ${content}`, { status }),\n taskListParseError: (error, rawContent) => this.log(\"error\", \"codex-query\", \"PARSE ERROR: Could not parse task list JSON\", {\n error: String(error),\n rawContent: rawContent.substring(0, 200)\n }),\n taskListMissing: (turnNumber) => this.log(\"warn\", \"codex-query\", `WARNING: No <start-todolist> tags found in Turn ${turnNumber}`, {\n turnNumber\n }),\n turnComplete: (turnNumber, hadToolCalls, messageLength) => this.log(\"info\", \"codex-query\", `Turn ${turnNumber} complete`, {\n hadToolCalls,\n messageLength\n }),\n tasksComplete: (completed, total) => this.log(\"info\", \"codex-query\", `Task status: ${completed}/${total} completed`, {\n completed,\n total\n }),\n allComplete: () => this.log(\"info\", \"codex-query\", \"\\u2705 All MVP tasks complete!\"),\n allTasksComplete: () => this.log(\"info\", \"codex-query\", \"\\u2705 All MVP tasks complete!\"),\n taskCompleteDetected: () => this.log(\"info\", \"codex-query\", \"\\u2705 Task complete (detected completion signal)\"),\n continuePrompting: (reason) => this.log(\"warn\", \"codex-query\", `No tools used but not done - ${reason}`),\n continuing: () => this.log(\"info\", \"codex-query\", \"\\u23ED\\uFE0F Continuing to next turn (had tool calls)\"),\n loopExited: (turnCount, maxTurns) => this.log(\"info\", \"codex-query\", `EXITED WHILE LOOP after ${turnCount} turns`, {\n turnCount,\n maxTurns\n }),\n sessionComplete: (turnCount) => this.log(\"info\", \"codex-query\", `Session complete after ${turnCount} turns`, { turnCount }),\n error: (message, error) => this.log(\"error\", \"codex-query\", message, {\n error: error instanceof Error ? error.message : String(error)\n })\n };\n /**\n * Claude query-specific logging methods\n */\n claudeQuery = {\n queryStarted: (model, cwd, maxTurns) => this.log(\"info\", \"claude-query\", `Starting Claude query (${model})`, {\n cwd,\n maxTurns\n }),\n error: (message, error) => this.log(\"error\", \"claude-query\", message, {\n error: error instanceof Error ? error.message : String(error)\n })\n };\n /**\n * Runner-specific logging methods\n */\n runner = {\n workspaceRoot: (path) => this.log(\"info\", \"runner\", `Workspace root: ${path}`, { path }),\n commandReceived: (commandType, projectId) => this.log(\"info\", \"runner\", `Received command: ${commandType}`, { commandType, projectId }),\n buildOperation: (operationType, projectSlug, agentId) => this.log(\"info\", \"runner\", `Build operation: ${operationType}`, {\n operationType,\n projectSlug,\n agentId\n }),\n templateProvided: (templateId) => this.log(\"info\", \"runner\", `Template provided by frontend: ${templateId}`, { templateId }),\n buildStreamCreated: () => this.log(\"info\", \"runner\", \"Build stream created, starting to process chunks...\"),\n firstChunkReceived: (agentLabel) => this.log(\"info\", \"runner\", `First chunk received from ${agentLabel}`, { agentLabel }),\n streamEnded: (chunkCount) => this.log(\"info\", \"runner\", `Stream ended after ${chunkCount} chunks`, { chunkCount }),\n buildCompleted: (projectId) => this.log(\"info\", \"runner\", `Build completed successfully`, { projectId }),\n buildFailed: (error) => this.log(\"error\", \"runner\", `Build failed: ${error}`, { error }),\n portDetected: (port) => this.log(\"info\", \"runner\", `Port detected: ${port}`, { port }),\n tunnelCreated: (port, tunnelUrl) => this.log(\"info\", \"runner\", `Tunnel created: ${tunnelUrl} \\u2192 localhost:${port}`, {\n port,\n tunnelUrl\n }),\n error: (message, error, context) => this.log(\"error\", \"runner\", message, {\n error: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : void 0,\n ...context\n })\n };\n /**\n * Build stream-specific logging (tool calls, text, etc.)\n */\n build = {\n agentText: (agentLabel, text2) => {\n const truncated = text2.length > 200 ? text2.slice(0, 200) + \"...\" : text2;\n this.log(\"debug\", \"build\", `${agentLabel}: ${truncated}`, {\n agentLabel,\n textLength: text2.length\n });\n },\n agentThinking: (thinking) => {\n const truncated = thinking.length > 300 ? thinking.slice(0, 300) + \"...\" : thinking;\n this.log(\"debug\", \"build\", `Thinking: ${truncated}`, {\n thinkingLength: thinking.length\n });\n },\n toolCalled: (toolName, toolId, inputSize) => this.log(\"info\", \"build\", `Tool called: ${toolName} (${toolId})`, {\n toolName,\n toolId,\n inputSize\n }),\n toolResult: (toolId, outputSize, isError) => this.log(isError ? \"error\" : \"info\", \"build\", `Tool result (${toolId})`, {\n toolId,\n outputSize,\n isError\n }),\n runCommandDetected: (runCommand) => this.log(\"info\", \"build\", `Detected runCommand: ${runCommand}`, { runCommand })\n };\n /**\n * WebSocket-specific logging methods\n */\n websocket = {\n serverCreated: (instanceId) => this.log(\"info\", \"websocket\", `WebSocket server instance created`, { instanceId }),\n serverInitialized: (path, runnerPath) => this.log(\"info\", \"websocket\", `Server initialized`, { path, runnerPath }),\n clientConnected: (clientId, projectId, sessionId) => this.log(\"info\", \"websocket\", `Client connected: ${clientId}`, { clientId, projectId, sessionId }),\n clientDisconnected: (clientId) => this.log(\"info\", \"websocket\", `Client disconnected: ${clientId}`, { clientId }),\n clientSubscribed: (clientId, projectId) => this.log(\"info\", \"websocket\", `Client subscribed to project: ${projectId}`, { clientId, projectId }),\n clientTimeout: (clientId) => this.log(\"warn\", \"websocket\", `Client timeout: ${clientId}`, { clientId }),\n runnerConnected: (runnerId) => this.log(\"info\", \"websocket\", `Runner connected: ${runnerId}`, { runnerId }),\n runnerDisconnected: (runnerId, code) => this.log(\"info\", \"websocket\", `Runner disconnected: ${runnerId}`, { runnerId, code }),\n runnerNotConnected: (runnerId, commandType) => this.log(\"warn\", \"websocket\", `Cannot send command to runner ${runnerId}: not connected`, {\n runnerId,\n commandType\n }),\n runnerAuthRejected: () => this.log(\"warn\", \"websocket\", `Runner connection rejected: invalid auth`),\n runnerAuthMissing: () => this.log(\"error\", \"websocket\", `RUNNER_SHARED_SECRET is not configured`),\n runnerStaleRemoved: (runnerId) => this.log(\"info\", \"websocket\", `Removing stale runner connection: ${runnerId}`, { runnerId }),\n commandSent: (runnerId, commandType, traceAttached) => this.log(\"debug\", \"websocket\", `Sent command to runner: ${commandType}`, {\n runnerId,\n commandType,\n traceAttached\n }),\n eventReceived: (runnerId, eventType) => this.log(\"debug\", \"websocket\", `Received event from runner: ${eventType}`, {\n runnerId,\n eventType\n }),\n broadcastToolCall: (toolName, toolState, subscriberCount) => this.log(\"info\", \"websocket\", `Broadcasting planning tool: ${toolName} (state=${toolState})`, {\n toolName,\n toolState,\n subscriberCount\n }),\n broadcastBuildComplete: (projectId, sessionId, subscriberCount) => this.log(\"info\", \"websocket\", `Broadcasting build-complete`, {\n projectId,\n sessionId,\n subscriberCount\n }),\n unknownUpgradePath: (pathname) => this.log(\"warn\", \"websocket\", `Unknown upgrade path: ${pathname}`, { pathname }),\n shutdown: () => this.log(\"info\", \"websocket\", `Shutting down server...`),\n shutdownComplete: () => this.log(\"info\", \"websocket\", `Server shut down`),\n error: (message, error, context) => this.log(\"error\", \"websocket\", message, {\n error: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : void 0,\n ...context\n })\n };\n /**\n * Port allocator-specific logging methods\n */\n portAllocator = {\n portAllocated: (port, projectId) => this.log(\"info\", \"port-allocator\", `Port allocated: ${port}`, { port, projectId }),\n portReleased: (port, projectId) => this.log(\"info\", \"port-allocator\", `Port released: ${port}`, { port, projectId }),\n portInUse: (port) => this.log(\"warn\", \"port-allocator\", `Port ${port} is already in use`, { port }),\n portRangeExhausted: (minPort, maxPort) => this.log(\"error\", \"port-allocator\", `No available ports in range ${minPort}-${maxPort}`, {\n minPort,\n maxPort\n }),\n portConflict: (port, projectId, existingProjectId) => this.log(\"warn\", \"port-allocator\", `Port ${port} conflict detected`, {\n port,\n projectId,\n existingProjectId\n }),\n allocationsCleared: (count) => this.log(\"info\", \"port-allocator\", `Cleared ${count} port allocations`, { count }),\n error: (message, error, context) => this.log(\"error\", \"port-allocator\", message, {\n error: error instanceof Error ? error.message : String(error),\n ...context\n })\n };\n /**\n * Process manager-specific logging methods\n */\n processManager = {\n processStarting: (projectId, command, cwd) => this.log(\"info\", \"process-manager\", `Starting process: ${command}`, {\n projectId,\n command,\n cwd\n }),\n processStarted: (projectId, pid) => this.log(\"info\", \"process-manager\", `Process started`, { projectId, pid }),\n processOutput: (projectId, output) => this.log(\"debug\", \"process-manager\", `Process output: ${output.substring(0, 100)}`, {\n projectId,\n outputLength: output.length\n }),\n processError: (projectId, error) => this.log(\"error\", \"process-manager\", `Process error: ${error}`, { projectId, error }),\n processExited: (projectId, code, signal) => this.log(\"info\", \"process-manager\", `Process exited`, { projectId, code, signal }),\n processStopped: (projectId) => this.log(\"info\", \"process-manager\", `Process stopped`, { projectId }),\n processNotFound: (projectId) => this.log(\"warn\", \"process-manager\", `Process not found for project: ${projectId}`, { projectId }),\n processKilled: (projectId, signal) => this.log(\"info\", \"process-manager\", `Process killed with signal: ${signal}`, {\n projectId,\n signal\n }),\n processCleanup: (projectId) => this.log(\"info\", \"process-manager\", `Cleaning up process`, { projectId }),\n processListRetrieved: (count) => this.log(\"debug\", \"process-manager\", `Retrieved ${count} running processes`, { count }),\n error: (message, error, context) => this.log(\"error\", \"process-manager\", message, {\n error: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : void 0,\n ...context\n })\n };\n /**\n * Build events-specific logging methods\n */\n buildEvents = {\n eventReceived: (eventType, projectId, sessionId) => this.log(\"info\", \"build-events\", `Received event: ${eventType}`, {\n eventType,\n projectId,\n sessionId\n }),\n eventProcessed: (eventType, projectId) => this.log(\"debug\", \"build-events\", `Processed event: ${eventType}`, { eventType, projectId }),\n buildStarted: (projectId, sessionId) => this.log(\"info\", \"build-events\", `Build started`, { projectId, sessionId }),\n buildCompleted: (projectId, sessionId, success) => this.log(\"info\", \"build-events\", `Build ${success ? \"completed\" : \"failed\"}`, {\n projectId,\n sessionId,\n success\n }),\n portDetected: (projectId, port) => this.log(\"info\", \"build-events\", `Port detected: ${port}`, { projectId, port }),\n devServerStarted: (projectId, port, url) => this.log(\"info\", \"build-events\", `Dev server started: ${url}`, { projectId, port, url }),\n devServerError: (projectId, error) => this.log(\"error\", \"build-events\", `Dev server error: ${error}`, { projectId, error }),\n toolCallReceived: (toolName, toolId) => this.log(\"debug\", \"build-events\", `Tool call: ${toolName}`, { toolName, toolId }),\n logChunkReceived: (projectId, chunkSize) => this.log(\"debug\", \"build-events\", `Log chunk received`, { projectId, chunkSize }),\n invalidEvent: (reason) => this.log(\"warn\", \"build-events\", `Invalid event: ${reason}`, { reason }),\n error: (message, error, context) => this.log(\"error\", \"build-events\", message, {\n error: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : void 0,\n ...context\n })\n };\n};\nvar buildLogger = new BuildLogger();\n\n// src/lib/port-allocator.ts\nvar FRAMEWORK_RANGES = {\n next: { start: 3101, end: 3200 },\n node: { start: 3101, end: 3200 },\n tanstack: { start: 3101, end: 3200 },\n astro: { start: 4321, end: 4421 },\n vite: { start: 5173, end: 5273 },\n default: { start: 6e3, end: 6100 }\n};\nvar FRAMEWORK_ENV_MAP = {\n next: [\"PORT\", \"NEXT_PUBLIC_PORT\"],\n node: [\"PORT\"],\n tanstack: [\"PORT\", \"VITE_PORT\"],\n astro: [\"PORT\", \"ASTRO_PORT\"],\n vite: [\"PORT\", \"VITE_PORT\"],\n default: [\"PORT\"]\n};\nasync function detectFrameworkFromFilesystem(projectPath) {\n try {\n let cachedPkg = null;\n const loadPackageJson = async () => {\n if (cachedPkg) return cachedPkg;\n const pkgPath = join(projectPath, \"package.json\");\n if (!existsSync(pkgPath)) {\n cachedPkg = null;\n return cachedPkg;\n }\n const pkgContent = await readFile(pkgPath, \"utf-8\");\n const pkg2 = JSON.parse(pkgContent);\n cachedPkg = {\n deps: { ...pkg2.dependencies ?? {}, ...pkg2.peerDependencies ?? {} },\n devDeps: pkg2.devDependencies ?? {},\n devScript: pkg2.scripts?.dev?.toLowerCase() ?? \"\"\n };\n return cachedPkg;\n };\n const hasTanStackDependency = async () => {\n const pkg2 = await loadPackageJson();\n if (!pkg2) return false;\n const combined = { ...pkg2.deps, ...pkg2.devDeps };\n if (combined[\"@tanstack/react-start\"]) return true;\n if (pkg2.devScript.includes(\"tanstack\")) return true;\n return false;\n };\n if (existsSync(join(projectPath, \"astro.config.mjs\")) || existsSync(join(projectPath, \"astro.config.ts\")) || existsSync(join(projectPath, \"astro.config.js\"))) {\n return \"astro\";\n }\n if (existsSync(join(projectPath, \"next.config.ts\")) || existsSync(join(projectPath, \"next.config.js\")) || existsSync(join(projectPath, \"next.config.mjs\"))) {\n return \"next\";\n }\n if (existsSync(join(projectPath, \"vite.config.ts\")) || existsSync(join(projectPath, \"vite.config.js\"))) {\n if (await hasTanStackDependency()) {\n return \"tanstack\";\n }\n return \"vite\";\n }\n const pkg = await loadPackageJson();\n if (pkg) {\n const allDeps = { ...pkg.deps, ...pkg.devDeps };\n if (allDeps[\"astro\"]) return \"astro\";\n if (allDeps[\"@tanstack/react-start\"]) return \"tanstack\";\n if (allDeps[\"next\"]) return \"next\";\n if (allDeps[\"vite\"]) return \"vite\";\n if (pkg.devScript.includes(\"tanstack\")) return \"tanstack\";\n if (pkg.devScript.includes(\"astro\")) return \"astro\";\n if (pkg.devScript.includes(\"next\")) return \"next\";\n if (pkg.devScript.includes(\"vite\")) return \"vite\";\n }\n } catch (error) {\n buildLogger.portAllocator.error(\"Failed to detect framework from filesystem\", error);\n }\n return null;\n}\nasync function resolveFramework(projectType, runCommand, savedFramework) {\n if (savedFramework) {\n const framework = toFrameworkKey(savedFramework);\n buildLogger.log(\"info\", \"port-allocator\", `Using saved framework (locked): ${framework}`, {\n savedFramework,\n projectType,\n runCommand\n });\n return framework;\n }\n buildLogger.log(\"warn\", \"port-allocator\", \"No saved framework found, falling back to detection (may cause port drift)\", {\n projectType,\n runCommand\n });\n const normalizedType = projectType?.toLowerCase() ?? \"\";\n if (normalizedType.includes(\"tanstack\")) {\n buildLogger.log(\"debug\", \"port-allocator\", \"Detected from projectType: tanstack\", { projectType });\n return \"tanstack\";\n }\n if (normalizedType.includes(\"vite\")) {\n buildLogger.log(\"debug\", \"port-allocator\", \"Detected from projectType: vite\", { projectType });\n return \"vite\";\n }\n if (normalizedType.includes(\"astro\")) {\n buildLogger.log(\"debug\", \"port-allocator\", \"Detected from projectType: astro\", { projectType });\n return \"astro\";\n }\n if (normalizedType.includes(\"next\")) {\n buildLogger.log(\"debug\", \"port-allocator\", \"Detected from projectType: next\", { projectType });\n return \"next\";\n }\n if (normalizedType.includes(\"node\")) {\n buildLogger.log(\"debug\", \"port-allocator\", \"Detected from projectType: node\", { projectType });\n return \"node\";\n }\n const normalizedCommand = runCommand?.toLowerCase() ?? \"\";\n if (normalizedCommand.includes(\"vite\")) {\n buildLogger.log(\"debug\", \"port-allocator\", \"Detected from runCommand: vite\", { runCommand });\n return \"vite\";\n }\n if (normalizedCommand.includes(\"astro\")) {\n buildLogger.log(\"debug\", \"port-allocator\", \"Detected from runCommand: astro\", { runCommand });\n return \"astro\";\n }\n if (normalizedCommand.includes(\"tanstack\")) {\n buildLogger.log(\"debug\", \"port-allocator\", \"Detected from runCommand: tanstack\", { runCommand });\n return \"tanstack\";\n }\n if (normalizedCommand.includes(\"next\")) {\n buildLogger.log(\"debug\", \"port-allocator\", \"Detected from runCommand: next\", { runCommand });\n return \"next\";\n }\n buildLogger.log(\"warn\", \"port-allocator\", \"No framework detected, using default (port 6000+)\", {\n projectType,\n runCommand\n });\n return \"default\";\n}\nfunction toFrameworkKey(value) {\n switch (value) {\n case \"next\":\n case \"astro\":\n case \"vite\":\n case \"tanstack\":\n case \"node\":\n return value;\n default:\n return \"default\";\n }\n}\nasync function reservePortForProject(params) {\n const framework = await resolveFramework(params.projectType, params.runCommand, params.detectedFramework);\n const range = FRAMEWORK_RANGES[framework];\n const preferred = params.preferredPort ?? void 0;\n return db.transaction(async (tx) => {\n await tx.update(portAllocations).set({ projectId: null, reservedAt: null }).where(eq(portAllocations.projectId, params.projectId)).execute();\n const now = /* @__PURE__ */ new Date();\n const tryReservePort = async (port) => {\n if (port < range.start || port > range.end) {\n return null;\n }\n const existing = await tx.select().from(portAllocations).where(eq(portAllocations.port, port)).limit(1).execute();\n if (existing.length === 0) {\n await tx.insert(portAllocations).values({\n port,\n framework,\n projectId: params.projectId,\n reservedAt: now\n }).execute();\n return port;\n }\n if (existing[0].projectId === null) {\n await tx.update(portAllocations).set({ projectId: params.projectId, reservedAt: now }).where(eq(portAllocations.port, port)).execute();\n return port;\n }\n return null;\n };\n if (preferred) {\n const reserved = await tryReservePort(preferred);\n if (reserved !== null) {\n return { port: reserved, framework };\n }\n }\n const reusable = await tx.select().from(portAllocations).where(and(eq(portAllocations.framework, framework), isNull(portAllocations.projectId))).orderBy(portAllocations.port).limit(1).execute();\n if (reusable.length > 0) {\n await tx.update(portAllocations).set({ projectId: params.projectId, reservedAt: now }).where(eq(portAllocations.port, reusable[0].port)).execute();\n return { port: reusable[0].port, framework };\n }\n const rows = await tx.select({\n maxPort: sql2`COALESCE(MAX(${portAllocations.port}), ${range.start - 1})`\n }).from(portAllocations).where(eq(portAllocations.framework, framework)).execute();\n const maxPort = rows[0]?.maxPort ?? range.start - 1;\n const nextPort = Math.max(range.start, maxPort + 1);\n if (nextPort > range.end) {\n throw new Error(`No available ports remaining for framework \"${framework}\" (${range.start}-${range.end}).`);\n }\n await tx.insert(portAllocations).values({\n port: nextPort,\n framework,\n projectId: params.projectId,\n reservedAt: now\n }).execute();\n return { port: nextPort, framework };\n });\n}\nasync function updatePortReservationForProject(projectId, actualPort) {\n await db.transaction(async (tx) => {\n const rows = await tx.select().from(portAllocations).where(eq(portAllocations.projectId, projectId)).limit(1).execute();\n if (rows.length === 0) {\n return;\n }\n const current = rows[0];\n if (current.port === actualPort) {\n return;\n }\n const frameworkKey = toFrameworkKey(current.framework);\n const range = FRAMEWORK_RANGES[frameworkKey] ?? FRAMEWORK_RANGES.default;\n if (actualPort < range.start || actualPort > range.end) {\n return;\n }\n const occupying = await tx.select().from(portAllocations).where(eq(portAllocations.port, actualPort)).limit(1).execute();\n if (occupying.length > 0 && occupying[0].projectId !== null && occupying[0].projectId !== projectId) {\n return;\n }\n await tx.delete(portAllocations).where(eq(portAllocations.port, current.port)).execute();\n const now = /* @__PURE__ */ new Date();\n if (occupying.length > 0) {\n await tx.update(portAllocations).set({ projectId, reservedAt: now }).where(eq(portAllocations.port, actualPort)).execute();\n } else {\n await tx.insert(portAllocations).values({\n port: actualPort,\n framework: current.framework,\n projectId,\n reservedAt: now\n }).execute();\n }\n });\n}\nasync function releasePortForProject(projectId) {\n await db.update(portAllocations).set({ projectId: null, reservedAt: null }).where(eq(portAllocations.projectId, projectId)).execute();\n}\nfunction buildEnvForFramework(framework, port) {\n const envKeys = FRAMEWORK_ENV_MAP[framework] ?? FRAMEWORK_ENV_MAP.default;\n const env = {};\n envKeys.forEach((key) => {\n env[key] = String(port);\n });\n env.DEV_SERVER_PORT = String(port);\n return env;\n}\nfunction getRunCommand(baseCommand) {\n if (!baseCommand || !baseCommand.trim()) {\n return \"npm run dev\";\n }\n return baseCommand;\n}\nasync function checkPortAvailability(port) {\n const localhostAvailable = await checkSingleInterface(port, \"localhost\");\n if (!localhostAvailable) {\n return false;\n }\n const allInterfacesAvailable = await checkSingleInterface(port, \"0.0.0.0\");\n return allInterfacesAvailable;\n}\nfunction checkSingleInterface(port, host) {\n return new Promise((resolve) => {\n const server = createServer();\n server.once(\"error\", (err) => {\n if (err.code === \"EADDRINUSE\") {\n resolve(false);\n } else {\n resolve(false);\n }\n });\n server.once(\"listening\", () => {\n server.close(() => {\n resolve(true);\n });\n });\n server.listen(port, host);\n });\n}\nasync function findAvailablePortInRange(range, preferredStart) {\n const scanStart = preferredStart && preferredStart >= range.start && preferredStart <= range.end ? preferredStart : range.start;\n buildLogger.log(\"debug\", \"port-allocator\", `Scanning for available port in range ${range.start}-${range.end}`, {\n scanStart,\n rangeStart: range.start,\n rangeEnd: range.end\n });\n for (let port = scanStart; port <= range.end; port++) {\n const isAvailable = await checkPortAvailability(port);\n if (isAvailable) {\n buildLogger.log(\"debug\", \"port-allocator\", `Found available port: ${port}`, { port });\n return port;\n }\n buildLogger.log(\"debug\", \"port-allocator\", `Port ${port} in use`, { port });\n }\n if (scanStart > range.start) {\n buildLogger.log(\"debug\", \"port-allocator\", `Wrapping around to scan ${range.start}-${scanStart - 1}`, {\n rangeStart: range.start,\n scanStart: scanStart - 1\n });\n for (let port = range.start; port < scanStart; port++) {\n const isAvailable = await checkPortAvailability(port);\n if (isAvailable) {\n buildLogger.log(\"debug\", \"port-allocator\", `Found available port: ${port}`, { port });\n return port;\n }\n buildLogger.log(\"debug\", \"port-allocator\", `Port ${port} in use`, { port });\n }\n }\n buildLogger.portAllocator.portRangeExhausted(range.start, range.end);\n return null;\n}\nasync function getPortForProject(projectId) {\n const rows = await db.select().from(portAllocations).where(eq(portAllocations.projectId, projectId)).limit(1).execute();\n if (rows.length === 0) {\n return null;\n }\n const allocation = rows[0];\n return {\n port: allocation.port,\n framework: toFrameworkKey(allocation.framework)\n };\n}\nasync function reserveOrReallocatePort(params, skipPortCheck = false) {\n const framework = await resolveFramework(params.projectType, params.runCommand, params.detectedFramework);\n const range = FRAMEWORK_RANGES[framework];\n buildLogger.log(\"info\", \"port-allocator\", `Allocating port for project ${params.projectId}`, {\n projectId: params.projectId,\n framework,\n rangeStart: range.start,\n rangeEnd: range.end,\n skipPortCheck\n });\n const existing = await getPortForProject(params.projectId);\n if (existing) {\n const withinRange = existing.port >= range.start && existing.port <= range.end;\n const sameFramework = existing.framework === framework;\n buildLogger.log(\"debug\", \"port-allocator\", `Found existing allocation: port ${existing.port}`, {\n port: existing.port,\n framework: existing.framework,\n projectId: params.projectId\n });\n if (!withinRange) {\n buildLogger.log(\"warn\", \"port-allocator\", `Port ${existing.port} outside valid range ${range.start}-${range.end}, will reallocate`, {\n port: existing.port,\n rangeStart: range.start,\n rangeEnd: range.end,\n projectId: params.projectId\n });\n await releasePortForProject(params.projectId);\n } else if (!sameFramework) {\n buildLogger.log(\"warn\", \"port-allocator\", `Framework mismatch (${existing.framework} \\u2192 ${framework}), will reallocate`, {\n oldFramework: existing.framework,\n newFramework: framework,\n projectId: params.projectId\n });\n await releasePortForProject(params.projectId);\n } else {\n if (skipPortCheck) {\n buildLogger.log(\"info\", \"port-allocator\", `Reusing port ${existing.port} (skipPortCheck=true)`, {\n port: existing.port,\n projectId: params.projectId\n });\n await db.update(portAllocations).set({ reservedAt: /* @__PURE__ */ new Date() }).where(eq(portAllocations.projectId, params.projectId)).execute();\n return existing;\n }\n const isAvailable = await checkPortAvailability(existing.port);\n if (isAvailable) {\n buildLogger.portAllocator.portAllocated(existing.port, params.projectId);\n await db.update(portAllocations).set({ reservedAt: /* @__PURE__ */ new Date() }).where(eq(portAllocations.projectId, params.projectId)).execute();\n return existing;\n }\n buildLogger.portAllocator.portInUse(existing.port);\n await releasePortForProject(params.projectId);\n }\n }\n let availablePort = null;\n if (skipPortCheck) {\n buildLogger.log(\"info\", \"port-allocator\", \"Remote runner mode: using DB allocation without OS check\", {\n projectId: params.projectId\n });\n try {\n const allocation = await reservePortForProject({\n ...params,\n detectedFramework: params.detectedFramework ?? framework\n });\n availablePort = allocation.port;\n buildLogger.log(\"info\", \"port-allocator\", `Allocated port ${availablePort} from DB`, {\n port: availablePort,\n projectId: params.projectId\n });\n } catch (error) {\n throw new Error(`Unable to allocate port for remote runner: ${error instanceof Error ? error.message : \"Unknown error\"}`);\n }\n } else {\n buildLogger.log(\"info\", \"port-allocator\", \"Local runner mode: scanning OS for available port\", {\n projectId: params.projectId,\n preferredPort: params.preferredPort\n });\n availablePort = await findAvailablePortInRange(range, params.preferredPort ?? void 0);\n if (!availablePort) {\n throw new Error(\n `All ports in range ${range.start}-${range.end} are in use. Please stop other dev servers or free up ports.`\n );\n }\n }\n buildLogger.log(\"debug\", \"port-allocator\", `Reserving port ${availablePort} in database`, {\n port: availablePort,\n projectId: params.projectId\n });\n await db.transaction(async (tx) => {\n await tx.update(portAllocations).set({ projectId: null, reservedAt: null }).where(eq(portAllocations.projectId, params.projectId)).execute();\n const existingPort = await tx.select().from(portAllocations).where(eq(portAllocations.port, availablePort)).limit(1).execute();\n const now = /* @__PURE__ */ new Date();\n if (existingPort.length === 0) {\n await tx.insert(portAllocations).values({\n port: availablePort,\n framework,\n projectId: params.projectId,\n reservedAt: now\n }).execute();\n } else {\n await tx.update(portAllocations).set({ projectId: params.projectId, framework, reservedAt: now }).where(eq(portAllocations.port, availablePort)).execute();\n }\n });\n buildLogger.portAllocator.portAllocated(availablePort, params.projectId);\n return { port: availablePort, framework };\n}\nasync function cleanupAbandonedPorts() {\n const threshold = new Date(Date.now() - 7 * 24 * 60 * 60 * 1e3);\n const result = await db.update(portAllocations).set({ projectId: null, reservedAt: null }).where(and(\n isNotNull(portAllocations.projectId),\n lt(portAllocations.reservedAt, threshold)\n )).returning();\n const cleanedCount = result.length;\n if (cleanedCount > 0) {\n buildLogger.portAllocator.allocationsCleared(cleanedCount);\n }\n return cleanedCount;\n}\nexport {\n buildEnvForFramework,\n checkPortAvailability,\n cleanupAbandonedPorts,\n detectFrameworkFromFilesystem,\n getPortForProject,\n getRunCommand,\n releasePortForProject,\n reserveOrReallocatePort,\n reservePortForProject,\n updatePortReservationForProject\n};\n//# sourceMappingURL=port-allocator.js.map"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process-killer-CaUL7Kpl.js","sources":["../../src/cli/utils/process-killer.ts"],"sourcesContent":["import { exec } from 'node:child_process';\nimport { promisify } from 'node:util';\nimport { platform } from 'node:os';\n\nconst execAsync = promisify(exec);\n\n/**\n * Kill a process and all its children\n * Works on macOS and Linux\n */\nexport async function killProcessTree(pid: number, signal: string = 'SIGTERM'): Promise<void> {\n if (!pid || pid <= 0) {\n return;\n }\n\n const isWindows = platform() === 'win32';\n\n try {\n if (isWindows) {\n // Windows - use taskkill\n await execAsync(`taskkill /pid ${pid} /T /F`);\n } else {\n // Unix (macOS/Linux) - kill process group\n // Using negative PID kills the entire process group\n try {\n process.kill(-pid, signal);\n } catch (error) {\n // If that fails, try killing just the PID\n try {\n process.kill(pid, signal);\n } catch {\n // Process might already be dead\n }\n\n // Also try pkill as fallback\n try {\n await execAsync(`pkill -P ${pid}`);\n } catch {\n // Best effort\n }\n }\n }\n } catch (error) {\n // Process might already be dead, that's fine\n }\n}\n\n/**\n * Kill process by port number\n * Useful for cleaning up zombie processes\n */\nexport async function killProcessOnPort(port: number): Promise<boolean> {\n const isWindows = platform() === 'win32';\n\n try {\n if (isWindows) {\n // Windows\n const { stdout } = await execAsync(`netstat -ano | findstr :${port}`);\n const lines = stdout.trim().split('\\n');\n for (const line of lines) {\n const parts = line.trim().split(/\\s+/);\n const pid = parts[parts.length - 1];\n if (pid && !isNaN(Number(pid))) {\n await execAsync(`taskkill /PID ${pid} /F`);\n }\n }\n } else {\n // Unix - use lsof and kill\n const { stdout } = await execAsync(`lsof -ti:${port}`);\n const pids = stdout.trim().split('\\n').filter(Boolean);\n\n for (const pid of pids) {\n if (pid && !isNaN(Number(pid))) {\n await killProcessTree(Number(pid), 'SIGKILL');\n }\n }\n }\n return true;\n } catch (error) {\n // No process found on port or already dead\n return false;\n }\n}\n"],"names":[],"mappings":";;;;;AAIA,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC;AAEjC;;;AAGG;AACI,eAAe,eAAe,CAAC,GAAW,EAAE,SAAiB,SAAS,EAAA;AAC3E,IAAA,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,EAAE;QACpB;IACF;AAEA,IAAA,MAAM,SAAS,GAAG,QAAQ,EAAE,KAAK,OAAO;AAExC,IAAA,IAAI;QACF,IAAI,SAAS,EAAE;;AAEb,YAAA,MAAM,SAAS,CAAC,CAAA,cAAA,EAAiB,GAAG,CAAA,MAAA,CAAQ,CAAC;QAC/C;aAAO;;;AAGL,YAAA,IAAI;gBACF,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC;YAC5B;YAAE,OAAO,KAAK,EAAE;;AAEd,gBAAA,IAAI;AACF,oBAAA,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC;gBAC3B;AAAE,gBAAA,MAAM;;gBAER;;AAGA,gBAAA,IAAI;AACF,oBAAA,MAAM,SAAS,CAAC,CAAA,SAAA,EAAY,GAAG,CAAA,CAAE,CAAC;gBACpC;AAAE,gBAAA,MAAM;;gBAER;YACF;QACF;IACF;IAAE,OAAO,KAAK,EAAE;;IAEhB;AACF;AAEA;;;AAGG;AACI,eAAe,iBAAiB,CAAC,IAAY,EAAA;AAClD,IAAA,MAAM,SAAS,GAAG,QAAQ,EAAE,KAAK,OAAO;AAExC,IAAA,IAAI;QACF,IAAI,SAAS,EAAE;;YAEb,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,CAAA,wBAAA,EAA2B,IAAI,CAAA,CAAE,CAAC;YACrE,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;AACvC,YAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;gBACxB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC;gBACtC,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;gBACnC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE;AAC9B,oBAAA,MAAM,SAAS,CAAC,CAAA,cAAA,EAAiB,GAAG,CAAA,GAAA,CAAK,CAAC;gBAC5C;YACF;QACF;aAAO;;YAEL,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,CAAA,SAAA,EAAY,IAAI,CAAA,CAAE,CAAC;AACtD,YAAA,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;AAEtD,YAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;gBACtB,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE;oBAC9B,MAAM,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC;gBAC/C;YACF;QACF;AACA,QAAA,OAAO,IAAI;IACb;IAAE,OAAO,KAAK,EAAE;;AAEd,QAAA,OAAO,KAAK;IACd;AACF;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts-1QbE_bRr.js","sources":["../../src/cli/utils/prompts.ts"],"sourcesContent":["import inquirer from 'inquirer';\nimport { homedir } from 'node:os';\nimport { join } from 'node:path';\n\nexport interface InitPromptAnswers {\n workspace: string;\n wsUrl: string;\n apiUrl: string;\n secret: string;\n runnerId: string;\n}\n\n/**\n * Interactive prompts for CLI commands\n */\nexport class Prompts {\n /**\n * Prompt for initial configuration\n */\n async promptInit(): Promise<InitPromptAnswers> {\n const defaultWorkspace = join(homedir(), 'openbuilder-workspace');\n\n const answers = await inquirer.prompt([\n {\n type: 'input',\n name: 'workspace',\n message: 'Where should projects be stored?',\n default: defaultWorkspace,\n validate: (input: string) => {\n if (!input || input.trim() === '') {\n return 'Workspace path is required';\n }\n return true;\n },\n },\n {\n type: 'input',\n name: 'wsUrl',\n message: 'Server WebSocket URL:',\n default: 'ws://localhost:3000/ws/runner', // Direct connection to Next.js\n validate: (input: string) => {\n if (!input || input.trim() === '') {\n return 'WebSocket URL is required';\n }\n if (!input.startsWith('ws://') && !input.startsWith('wss://')) {\n return 'WebSocket URL must start with ws:// or wss://';\n }\n return true;\n },\n },\n {\n type: 'input',\n name: 'apiUrl',\n message: 'API base URL (frontend URL):',\n default: 'http://localhost:3000', // Default to local\n validate: (input: string) => {\n if (!input || input.trim() === '') {\n return 'API URL is required';\n }\n return true;\n },\n },\n {\n type: 'input',\n name: 'secret',\n message: 'Shared secret:',\n default: 'dev-secret', // Default local secret\n validate: (input: string) => {\n if (!input || input.trim() === '') {\n return 'Shared secret is required';\n }\n return true;\n },\n },\n {\n type: 'input',\n name: 'runnerId',\n message: 'Runner ID (identifier for this machine):',\n default: 'local', // Default to 'local'\n validate: (input: string) => {\n if (!input || input.trim() === '') {\n return 'Runner ID is required';\n }\n return true;\n },\n },\n ]);\n\n return answers;\n }\n\n /**\n * Confirm action with user\n */\n async confirm(message: string, defaultValue: boolean = false): Promise<boolean> {\n const { confirmed } = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'confirmed',\n message,\n default: defaultValue,\n },\n ]);\n return confirmed;\n }\n\n /**\n * Select from a list of options\n */\n async select(message: string, choices: string[]): Promise<string> {\n const { selected } = await inquirer.prompt([\n {\n type: 'list',\n name: 'selected',\n message,\n choices,\n },\n ]);\n return selected;\n }\n\n /**\n * Prompt for text input\n */\n async input(message: string, defaultValue?: string): Promise<string> {\n const { value } = await inquirer.prompt([\n {\n type: 'input',\n name: 'value',\n message,\n default: defaultValue,\n },\n ]);\n return value;\n }\n}\n\nexport const prompts = new Prompts();\n"],"names":[],"mappings":";;;;;AAYA;;AAEG;MACU,OAAO,CAAA;AAClB;;AAEG;AACH,IAAA,MAAM,UAAU,GAAA;QACd,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,uBAAuB,CAAC;AAEjE,QAAA,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;AACpC,YAAA;AACE,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,IAAI,EAAE,WAAW;AACjB,gBAAA,OAAO,EAAE,kCAAkC;AAC3C,gBAAA,OAAO,EAAE,gBAAgB;AACzB,gBAAA,QAAQ,EAAE,CAAC,KAAa,KAAI;oBAC1B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;AACjC,wBAAA,OAAO,4BAA4B;oBACrC;AACA,oBAAA,OAAO,IAAI;gBACb,CAAC;AACF,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,OAAO,EAAE,uBAAuB;gBAChC,OAAO,EAAE,+BAA+B;AACxC,gBAAA,QAAQ,EAAE,CAAC,KAAa,KAAI;oBAC1B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;AACjC,wBAAA,OAAO,2BAA2B;oBACpC;AACA,oBAAA,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;AAC7D,wBAAA,OAAO,+CAA+C;oBACxD;AACA,oBAAA,OAAO,IAAI;gBACb,CAAC;AACF,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,OAAO,EAAE,8BAA8B;gBACvC,OAAO,EAAE,uBAAuB;AAChC,gBAAA,QAAQ,EAAE,CAAC,KAAa,KAAI;oBAC1B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;AACjC,wBAAA,OAAO,qBAAqB;oBAC9B;AACA,oBAAA,OAAO,IAAI;gBACb,CAAC;AACF,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,OAAO,EAAE,gBAAgB;gBACzB,OAAO,EAAE,YAAY;AACrB,gBAAA,QAAQ,EAAE,CAAC,KAAa,KAAI;oBAC1B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;AACjC,wBAAA,OAAO,2BAA2B;oBACpC;AACA,oBAAA,OAAO,IAAI;gBACb,CAAC;AACF,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,IAAI,EAAE,UAAU;AAChB,gBAAA,OAAO,EAAE,0CAA0C;gBACnD,OAAO,EAAE,OAAO;AAChB,gBAAA,QAAQ,EAAE,CAAC,KAAa,KAAI;oBAC1B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;AACjC,wBAAA,OAAO,uBAAuB;oBAChC;AACA,oBAAA,OAAO,IAAI;gBACb,CAAC;AACF,aAAA;AACF,SAAA,CAAC;AAEF,QAAA,OAAO,OAAO;IAChB;AAEA;;AAEG;AACH,IAAA,MAAM,OAAO,CAAC,OAAe,EAAE,eAAwB,KAAK,EAAA;QAC1D,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;AAC1C,YAAA;AACE,gBAAA,IAAI,EAAE,SAAS;AACf,gBAAA,IAAI,EAAE,WAAW;gBACjB,OAAO;AACP,gBAAA,OAAO,EAAE,YAAY;AACtB,aAAA;AACF,SAAA,CAAC;AACF,QAAA,OAAO,SAAS;IAClB;AAEA;;AAEG;AACH,IAAA,MAAM,MAAM,CAAC,OAAe,EAAE,OAAiB,EAAA;QAC7C,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;AACzC,YAAA;AACE,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,IAAI,EAAE,UAAU;gBAChB,OAAO;gBACP,OAAO;AACR,aAAA;AACF,SAAA,CAAC;AACF,QAAA,OAAO,QAAQ;IACjB;AAEA;;AAEG;AACH,IAAA,MAAM,KAAK,CAAC,OAAe,EAAE,YAAqB,EAAA;QAChD,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;AACtC,YAAA;AACE,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,IAAI,EAAE,OAAO;gBACb,OAAO;AACP,gBAAA,OAAO,EAAE,YAAY;AACtB,aAAA;AACF,SAAA,CAAC;AACF,QAAA,OAAO,KAAK;IACd;AACD;AAEM,MAAM,OAAO,GAAG,IAAI,OAAO;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repo-cloner-CpOQjFSo.js","sources":["../../src/cli/utils/repo-cloner.ts"],"sourcesContent":["import { spawn } from 'node:child_process';\nimport { existsSync } from 'node:fs';\nimport { mkdir } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { logger } from './logger.js';\nimport { spinner } from './spinner.js';\n\nconst DEFAULT_REPO_URL = 'https://github.com/codyde/openbuilder.git';\nconst DEFAULT_CLONE_PATH = join(process.cwd(), 'openbuilder'); // Current directory + /openbuilder\n\nexport interface CloneOptions {\n repoUrl?: string;\n targetPath?: string;\n branch?: string;\n silent?: boolean; // Suppress all console output (for TUI mode)\n}\n\n/**\n * Clone the OpenBuilder repository\n */\nexport async function cloneRepository(options: CloneOptions = {}): Promise<string> {\n const repoUrl = options.repoUrl || DEFAULT_REPO_URL;\n const targetPath = options.targetPath || DEFAULT_CLONE_PATH;\n const branch = options.branch || 'main';\n const silent = options.silent || false;\n\n if (!silent) {\n logger.info(`Repository: ${repoUrl}`);\n logger.info(`Target: ${targetPath}`);\n logger.info(`Branch: ${branch}`);\n logger.log('');\n }\n\n // Check if target already exists (should be handled by caller)\n if (existsSync(targetPath) && !silent) {\n logger.warn(`Directory already exists: ${targetPath}`);\n logger.warn('This should have been handled by init command');\n // Continue anyway - caller should have cleaned it up\n }\n\n // Create parent directory if needed\n const parentPath = join(targetPath, '..');\n if (!existsSync(parentPath)) {\n await mkdir(parentPath, { recursive: true });\n }\n\n if (!silent) {\n spinner.start('Cloning repository...');\n }\n\n return new Promise((resolve, reject) => {\n const proc = spawn('git', [\n 'clone',\n '--branch', branch,\n '--single-branch', \n '--depth', '1',\n '--progress',\n repoUrl,\n targetPath,\n ], {\n stdio: ['ignore', 'pipe', 'pipe'],\n });\n\n let stderrOutput = '';\n\n proc.stderr?.on('data', (data) => {\n stderrOutput += data.toString();\n });\n\n proc.on('close', (code) => {\n if (code === 0) {\n if (!silent) {\n spinner.succeed('Repository cloned successfully');\n }\n resolve(targetPath);\n } else {\n if (!silent) {\n spinner.fail('Failed to clone repository');\n // Show the actual git error message\n if (stderrOutput) {\n logger.error('Git error:');\n logger.log(stderrOutput.trim());\n }\n }\n reject(new Error(`git clone failed with code ${code}: ${stderrOutput.trim()}`));\n }\n });\n\n proc.on('error', (error) => {\n if (!silent) {\n spinner.fail('Failed to clone repository');\n logger.error(error.message);\n }\n reject(error);\n });\n });\n}\n\n/**\n * Install dependencies in the cloned repository\n */\nexport async function installDependencies(repoPath: string, silent: boolean = false): Promise<void> {\n const { spawn } = await import('child_process');\n\n if (!silent) {\n spinner.start('Installing dependencies (this may take a few minutes)...');\n }\n\n return new Promise((resolve, reject) => {\n const proc = spawn('pnpm', ['install'], {\n cwd: repoPath,\n stdio: ['ignore', 'pipe', 'pipe'],\n shell: true,\n });\n\n let hasError = false;\n let stderrBuffer = '';\n let stdoutBuffer = '';\n\n proc.stdout?.on('data', (data) => {\n stdoutBuffer += data.toString();\n });\n\n proc.stderr?.on('data', (data) => {\n const text = data.toString();\n stderrBuffer += text;\n\n // Show critical errors immediately (only if not silent)\n if (!silent && (text.includes('ERR!') || text.includes('ERROR') || text.includes('ELIFECYCLE'))) {\n hasError = true;\n spinner.stop();\n logger.error(text.trim());\n }\n });\n\n proc.on('exit', (code) => {\n if (code === 0 && !hasError) {\n if (!silent) {\n spinner.succeed('Dependencies installed');\n }\n resolve();\n } else {\n if (!silent) {\n spinner.fail('Failed to install dependencies');\n\n // Show full output on failure\n logger.log('');\n logger.error('Installation failed. Full output:');\n logger.log('');\n\n if (stderrBuffer) {\n logger.error('STDERR:');\n logger.log(stderrBuffer);\n }\n\n if (stdoutBuffer) {\n logger.log('STDOUT:');\n logger.log(stdoutBuffer);\n }\n }\n\n reject(new Error(`pnpm install exited with code ${code}`));\n }\n });\n\n proc.on('error', (error) => {\n if (!silent) {\n spinner.fail('Failed to install dependencies');\n logger.error(`Process error: ${error.message}`);\n }\n reject(error);\n });\n });\n}\n\n/**\n * Build agent-core package (required before running apps)\n */\nexport async function buildAgentCore(repoPath: string, silent: boolean = false): Promise<void> {\n const { spawn } = await import('child_process');\n\n if (!silent) {\n spinner.start('Building agent-core package...');\n }\n\n return new Promise((resolve, reject) => {\n const proc = spawn('pnpm', ['--filter', '@openbuilder/agent-core', 'build'], {\n cwd: repoPath,\n stdio: ['ignore', 'pipe', 'pipe'],\n shell: true,\n });\n\n let hasError = false;\n let errorOutput = '';\n\n proc.stderr?.on('data', (data) => {\n const text = data.toString();\n // Capture errors but don't spam the console\n if (text.includes('ERR!') || text.includes('ERROR')) {\n hasError = true;\n errorOutput += text;\n }\n });\n\n proc.on('exit', (code) => {\n if (code === 0 && !hasError) {\n if (!silent) {\n spinner.succeed('agent-core package built');\n }\n resolve();\n } else {\n if (!silent) {\n spinner.fail('Failed to build agent-core package');\n if (errorOutput) {\n logger.error(errorOutput.trim());\n }\n }\n reject(new Error(`agent-core build exited with code ${code}`));\n }\n });\n\n proc.on('error', (error) => {\n if (!silent) {\n spinner.fail('Failed to build agent-core package');\n }\n reject(error);\n });\n });\n}\n\n/**\n * Check if pnpm is installed\n */\nexport async function isPnpmInstalled(): Promise<boolean> {\n const { spawn } = await import('child_process');\n\n return new Promise((resolve) => {\n const proc = spawn('pnpm', ['--version'], {\n stdio: 'ignore',\n shell: true,\n });\n\n proc.on('exit', (code) => {\n resolve(code === 0);\n });\n\n proc.on('error', () => {\n resolve(false);\n });\n });\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repo-detector-B_oj696o.js","sources":["../../src/cli/utils/repo-detector.ts"],"sourcesContent":["import { existsSync } from 'node:fs';\nimport { readFile } from 'node:fs/promises';\nimport { join } from 'node:path';\n\n/**\n * Check if current directory or a given path contains the OpenBuilder monorepo\n */\nexport async function isOpenBuilderRepo(path: string = process.cwd()): Promise<boolean> {\n try {\n // Check for key indicators\n const packageJsonPath = join(path, 'package.json');\n const runnerPath = join(path, 'apps/runner');\n const openbuilderPath = join(path, 'apps/openbuilder');\n\n // Must have package.json\n if (!existsSync(packageJsonPath)) {\n return false;\n }\n\n // Must have the core app directories\n if (!existsSync(runnerPath) || !existsSync(openbuilderPath)) {\n return false;\n }\n\n // Verify package.json has correct name\n const packageJson = JSON.parse(await readFile(packageJsonPath, 'utf-8'));\n if (packageJson.name !== 'openbuilder-monorepo') {\n return false;\n }\n\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Find the OpenBuilder monorepo root from current location\n * Searches up the directory tree\n */\nexport async function findMonorepoRoot(startPath: string = process.cwd()): Promise<string | null> {\n let currentPath = startPath;\n const root = '/';\n\n while (currentPath !== root) {\n if (await isOpenBuilderRepo(currentPath)) {\n return currentPath;\n }\n\n // Move up one directory\n const parentPath = join(currentPath, '..');\n if (parentPath === currentPath) {\n break; // Reached root\n }\n currentPath = parentPath;\n }\n\n return null;\n}\n\n/**\n * Check if we're inside the monorepo (current dir or any parent)\n */\nexport async function isInsideMonorepo(): Promise<{ inside: boolean; root?: string }> {\n const root = await findMonorepoRoot();\n return {\n inside: root !== null,\n root: root || undefined,\n };\n}\n"],"names":[],"mappings":";;;;;AAIA;;AAEG;AACI,eAAe,iBAAiB,CAAC,IAAA,GAAe,OAAO,CAAC,GAAG,EAAE,EAAA;AAClE,IAAA,IAAI;;QAEF,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC;QAClD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC;QAC5C,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,EAAE,kBAAkB,CAAC;;AAGtD,QAAA,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE;AAChC,YAAA,OAAO,KAAK;QACd;;AAGA,QAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE;AAC3D,YAAA,OAAO,KAAK;QACd;;AAGA,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;AACxE,QAAA,IAAI,WAAW,CAAC,IAAI,KAAK,sBAAsB,EAAE;AAC/C,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,OAAO,IAAI;IACb;AAAE,IAAA,MAAM;AACN,QAAA,OAAO,KAAK;IACd;AACF;AAEA;;;AAGG;AACI,eAAe,gBAAgB,CAAC,SAAA,GAAoB,OAAO,CAAC,GAAG,EAAE,EAAA;IACtE,IAAI,WAAW,GAAG,SAAS;IAC3B,MAAM,IAAI,GAAG,GAAG;AAEhB,IAAA,OAAO,WAAW,KAAK,IAAI,EAAE;AAC3B,QAAA,IAAI,MAAM,iBAAiB,CAAC,WAAW,CAAC,EAAE;AACxC,YAAA,OAAO,WAAW;QACpB;;QAGA,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC;AAC1C,QAAA,IAAI,UAAU,KAAK,WAAW,EAAE;AAC9B,YAAA,MAAM;QACR;QACA,WAAW,GAAG,UAAU;IAC1B;AAEA,IAAA,OAAO,IAAI;AACb;AAEA;;AAEG;AACI,eAAe,gBAAgB,GAAA;AACpC,IAAA,MAAM,IAAI,GAAG,MAAM,gBAAgB,EAAE;IACrC,OAAO;QACL,MAAM,EAAE,IAAI,KAAK,IAAI;QACrB,IAAI,EAAE,IAAI,IAAI,SAAS;KACxB;AACH;;;;"}
|
|
@@ -2,73 +2,53 @@
|
|
|
2
2
|
import chalk from 'chalk';
|
|
3
3
|
import { homedir, userInfo } from 'node:os';
|
|
4
4
|
import { join } from 'node:path';
|
|
5
|
-
import { r as reactExports, u as useInput, j as jsxRuntimeExports, B as Box,
|
|
5
|
+
import { r as reactExports, u as useInput, j as jsxRuntimeExports, B as Box, c as colors, T as Text, a as useStdout, b as render, R as React } from './theme-DOjeB8BU.js';
|
|
6
6
|
import { l as logger } from './logger-ZpJi7chw.js';
|
|
7
7
|
import { c as configManager } from './config-manager-BkbjtN-H.js';
|
|
8
8
|
import { startRunner } from '../index.js';
|
|
9
9
|
import 'node:stream';
|
|
10
10
|
import 'node:process';
|
|
11
11
|
import 'node:events';
|
|
12
|
-
import {
|
|
13
|
-
import { u as useBuildState, a as useLogEntries, B as BuildPanel } from './useBuildState-
|
|
14
|
-
import { g as getVersionInfo, B as Banner } from './Banner-
|
|
12
|
+
import { u as useApp } from './use-app-DozfqdJj.js';
|
|
13
|
+
import { u as useBuildState, a as useLogEntries, B as BuildPanel } from './useBuildState-DV6wurQ2.js';
|
|
14
|
+
import { g as getVersionInfo, B as Banner } from './Banner-BKC6yG6z.js';
|
|
15
|
+
import { T as TextInput } from './index-ZNRLfdj5.js';
|
|
15
16
|
import { g as getLogBuffer, i as initRunnerLogger, s as setFileLoggerTuiMode } from './runner-logger-instance-nDWv2h2T.js';
|
|
16
|
-
import { o as openBrowser, h as hasStoredToken, g as getStoredToken, p as performOAuthLogin, s as storeToken } from './cli-auth-
|
|
17
|
+
import { o as openBrowser, h as hasStoredToken, g as getStoredToken, p as performOAuthLogin, s as storeToken } from './cli-auth-BgiGSBOt.js';
|
|
17
18
|
import 'node:fs';
|
|
18
|
-
import 'module';
|
|
19
|
-
import 'events';
|
|
20
19
|
import 'assert';
|
|
21
|
-
import '
|
|
22
|
-
import '
|
|
20
|
+
import 'events';
|
|
21
|
+
import 'module';
|
|
23
22
|
import 'node:buffer';
|
|
24
23
|
import 'conf';
|
|
24
|
+
import '@sentry/node';
|
|
25
25
|
import '@anthropic-ai/claude-agent-sdk';
|
|
26
26
|
import '@openai/codex-sdk';
|
|
27
27
|
import 'dotenv';
|
|
28
28
|
import 'node:url';
|
|
29
|
-
import 'ai';
|
|
30
|
-
import './vendor-ai-sdk-CSJ0bw9X.js';
|
|
31
|
-
import 'zod/v4';
|
|
32
|
-
import 'zod/v3';
|
|
33
|
-
import 'jsonc-parser';
|
|
34
|
-
import 'zod';
|
|
35
|
-
import 'fs';
|
|
36
29
|
import 'fs/promises';
|
|
37
30
|
import 'path';
|
|
31
|
+
import 'ws';
|
|
38
32
|
import 'drizzle-orm/node-postgres';
|
|
39
33
|
import 'pg';
|
|
40
34
|
import 'drizzle-orm/pg-core';
|
|
41
35
|
import 'drizzle-orm';
|
|
42
36
|
import 'crypto';
|
|
43
37
|
import 'drizzle-orm/node-postgres/migrator';
|
|
44
|
-
import '
|
|
45
|
-
import 'url';
|
|
46
|
-
import 'tty';
|
|
47
|
-
import 'util';
|
|
48
|
-
import 'os';
|
|
49
|
-
import 'worker_threads';
|
|
50
|
-
import 'process';
|
|
51
|
-
import 'node:module';
|
|
52
|
-
import 'async_hooks';
|
|
53
|
-
import 'diagnostics_channel';
|
|
54
|
-
import 'node:diagnostics_channel';
|
|
55
|
-
import 'node:net';
|
|
56
|
-
import 'node:child_process';
|
|
57
|
-
import 'node:util';
|
|
58
|
-
import 'node:readline';
|
|
59
|
-
import 'node:worker_threads';
|
|
60
|
-
import 'node:http';
|
|
61
|
-
import 'node:https';
|
|
62
|
-
import 'node:zlib';
|
|
63
|
-
import 'node:tls';
|
|
38
|
+
import 'zod';
|
|
64
39
|
import 'node:crypto';
|
|
65
40
|
import 'express';
|
|
41
|
+
import 'node:child_process';
|
|
42
|
+
import 'node:net';
|
|
66
43
|
import 'node:fs/promises';
|
|
67
44
|
import 'simple-git';
|
|
45
|
+
import 'os';
|
|
46
|
+
import 'fs';
|
|
68
47
|
import './manager-CvGX9qqe.js';
|
|
69
48
|
import 'http';
|
|
70
49
|
import 'http-proxy';
|
|
71
50
|
import 'zlib';
|
|
51
|
+
import 'node:http';
|
|
72
52
|
|
|
73
53
|
function LogPanel({ entries, isVerbose, width, height, isFocused }) {
|
|
74
54
|
const [scrollOffset, setScrollOffset] = reactExports.useState(0);
|
|
@@ -714,3 +694,4 @@ async function runCommand(options) {
|
|
|
714
694
|
}
|
|
715
695
|
|
|
716
696
|
export { runCommand };
|
|
697
|
+
//# sourceMappingURL=run-Yh3YjeLl.js.map
|