{"version":3,"file":"vscode-tunnel-manager-Tl3LC5FY.mjs","names":["ChildProcess","execSync","EventEmitter","trackedSpawn","createLogger","tunnelLogger","isVSCodeCliAvailable","command","process","platform","stdio","TunnelStatus","TunnelInfo","status","name","url","vscodeUri","cursorUri","webUrl","error","workspacePath","TunnelOptions","acceptLicense","autoRestart","DEFAULT_WORKSPACE_PATH","VSCodeTunnelManager","tunnelName","tunnelUrl","restartAttempts","maxRestartAttempts","restartDelay","isShuttingDown","start","options","Promise","getInfo","spawnTunnel","emit","info","args","env","VSCODE_CLI_DISABLE_INTERACTIVE","stdout","on","data","Buffer","output","toString","parseOutput","stderr","debug","loggerOptions","code","signal","wasRunning","setTimeout","catch","err","message","resolve","reject","cleanup","clearTimeout","timeout","off","checkReady","kill","Error","vscodeDevMatch","match","tunnelNameMatch","includes","toLowerCase","warn","stop","currentProcess","cleanedUp","forceKillTimeout","once","getStatus","isEnabled","disabled","VSCODE_TUNNEL_ENABLED","isAutoStartEnabled","autoStart","VSCODE_TUNNEL_AUTO_START","getTunnelName","projectId","branchName","envName","VSCODE_TUNNEL_NAME","sanitized","replace","substring","getWorkspacePath","VSCODE_TUNNEL_WORKSPACE","tunnelManagerInstance","getTunnelManager","generateVSCodeDeepLink","generateCursorDeepLink","generateWebEditorLink"],"sources":["../../dev-tools/cli/launch/vscode-tunnel-manager.ts"],"sourcesContent":["import { type ChildProcess, execSync } from \"node:child_process\";\nimport { EventEmitter } from \"node:events\";\nimport { trackedSpawn } from \"../utils/process-tracker\";\nimport { createLogger } from \"../../common/logger\";\n\nconst tunnelLogger = createLogger(\"VSCodeTunnel\");\n\n/**\n * Check if the VS Code CLI command is available\n */\nfunction isVSCodeCliAvailable(): boolean {\n  try {\n    // Use 'which' on Unix-like systems, 'where' on Windows\n    const command = process.platform === \"win32\" ? \"where code\" : \"which code\";\n    execSync(command, { stdio: \"ignore\" });\n    return true;\n  } catch {\n    return false;\n  }\n}\n\n/**\n * VS Code Tunnel status\n */\nexport type TunnelStatus = \"stopped\" | \"starting\" | \"running\" | \"error\";\n\n/**\n * VS Code Tunnel information\n */\nexport interface TunnelInfo {\n  status: TunnelStatus;\n  name: string | null;\n  url: string | null;\n  vscodeUri: string | null;\n  cursorUri: string | null;\n  webUrl: string | null;\n  error: string | null;\n  workspacePath: string;\n}\n\n/**\n * Options for starting a VS Code tunnel\n */\nexport interface TunnelOptions {\n  name: string;\n  workspacePath?: string;\n  acceptLicense?: boolean;\n  autoRestart?: boolean;\n}\n\n/**\n * Default workspace path for the tunnel\n */\nconst DEFAULT_WORKSPACE_PATH = \"/root/app/code\";\n\n/**\n * VS Code Tunnel Manager\n *\n * Manages the lifecycle of a VS Code tunnel process, providing:\n * - Start/stop functionality\n * - URL parsing from CLI output\n * - Health monitoring\n * - Automatic restart on failure\n * - Cleanup on shutdown\n */\nexport class VSCodeTunnelManager extends EventEmitter {\n  private process: ChildProcess | null = null;\n  private status: TunnelStatus = \"stopped\";\n  private tunnelName: string | null = null;\n  private tunnelUrl: string | null = null;\n  private error: string | null = null;\n  private workspacePath: string = DEFAULT_WORKSPACE_PATH;\n  private autoRestart: boolean = false;\n  private restartAttempts: number = 0;\n  private maxRestartAttempts: number = 3;\n  private restartDelay: number = 5000;\n  private isShuttingDown: boolean = false;\n\n  /**\n   * Start the VS Code tunnel\n   */\n  async start(options: TunnelOptions): Promise<TunnelInfo> {\n    if (this.status === \"running\" || this.status === \"starting\") {\n      return this.getInfo();\n    }\n\n    // Set status immediately to prevent race condition with concurrent calls\n    this.status = \"starting\";\n\n    this.tunnelName = options.name;\n    this.workspacePath = options.workspacePath || DEFAULT_WORKSPACE_PATH;\n    this.autoRestart = options.autoRestart ?? true;\n    this.isShuttingDown = false;\n    this.restartAttempts = 0;\n\n    return this.spawnTunnel(options);\n  }\n\n  /**\n   * Spawn the tunnel process\n   */\n  private async spawnTunnel(options: TunnelOptions): Promise<TunnelInfo> {\n    this.status = \"starting\";\n    this.error = null;\n    this.emit(\"status\", this.getInfo());\n\n    // Check if VS Code CLI is available before attempting to spawn\n    if (!isVSCodeCliAvailable()) {\n      this.status = \"stopped\";\n      this.tunnelName = null;\n      this.error =\n        \"VS Code CLI ('code' command) is not installed or not in PATH.\";\n      tunnelLogger.info(\n        `Skipping: ${this.error} Set VSCODE_TUNNEL_ENABLED=false to suppress this message.`,\n      );\n      this.emit(\"status\", this.getInfo());\n      return this.getInfo();\n    }\n\n    const args = [\n      \"tunnel\",\n      \"--name\",\n      options.name,\n      \"--accept-server-license-terms\",\n    ];\n\n    try {\n      this.process = trackedSpawn({\n        command: \"code\",\n        args,\n        options: {\n          stdio: [\"ignore\", \"pipe\", \"pipe\"],\n          env: {\n            ...process.env,\n            // Disable interactive prompts\n            VSCODE_CLI_DISABLE_INTERACTIVE: \"1\",\n          },\n        },\n      });\n\n      // Handle stdout\n      this.process.stdout?.on(\"data\", (data: Buffer) => {\n        const output = data.toString();\n        this.parseOutput(output);\n      });\n\n      // Handle stderr\n      this.process.stderr?.on(\"data\", (data: Buffer) => {\n        const output = data.toString();\n        this.parseOutput(output);\n        // Log stderr for debugging\n        tunnelLogger.debug(\"stderr:\", output, {\n          loggerOptions: { stderr: true },\n        });\n      });\n\n      // Handle process exit\n      this.process.on(\"exit\", (code, signal) => {\n        const wasRunning = this.status === \"running\";\n        this.process = null;\n\n        if (this.isShuttingDown) {\n          this.status = \"stopped\";\n          this.emit(\"status\", this.getInfo());\n          return;\n        }\n\n        if (code !== 0) {\n          this.status = \"error\";\n          this.error = `Tunnel process exited with code ${code}`;\n          this.emit(\"error\", this.error);\n          this.emit(\"status\", this.getInfo());\n\n          // Attempt restart if enabled\n          if (\n            this.autoRestart &&\n            wasRunning &&\n            this.restartAttempts < this.maxRestartAttempts\n          ) {\n            this.restartAttempts++;\n            tunnelLogger.info(\n              `Restarting (attempt ${this.restartAttempts}/${this.maxRestartAttempts})...`,\n            );\n            setTimeout(() => {\n              // Check if we should still restart (not shutting down and not already running/starting)\n              if (\n                !this.isShuttingDown &&\n                this.status !== \"running\" &&\n                this.status !== \"starting\"\n              ) {\n                this.spawnTunnel(options).catch((err) => {\n                  tunnelLogger.error(\"Restart failed:\", err.message);\n                });\n              }\n            }, this.restartDelay);\n          }\n        } else {\n          this.status = \"stopped\";\n          this.emit(\"status\", this.getInfo());\n        }\n      });\n\n      // Handle process errors\n      this.process.on(\"error\", (err) => {\n        this.status = \"error\";\n        this.error = err.message;\n        this.process = null;\n        this.emit(\"error\", this.error);\n        this.emit(\"status\", this.getInfo());\n      });\n\n      // Wait for tunnel to be ready (with timeout)\n      return new Promise((resolve, reject) => {\n        const cleanup = () => {\n          clearTimeout(timeout);\n          this.off(\"status\", checkReady);\n        };\n\n        const timeout = setTimeout(() => {\n          if (this.status === \"starting\") {\n            cleanup();\n            // Check if we have a URL even if status didn't update\n            if (this.tunnelUrl) {\n              this.status = \"running\";\n              this.restartAttempts = 0; // Reset on successful connection\n              resolve(this.getInfo());\n            } else {\n              // Kill the process to avoid orphaned tunnel processes\n              // Set isShuttingDown to prevent the exit handler from emitting duplicate events\n              this.isShuttingDown = true;\n              if (this.process) {\n                this.process.kill(\"SIGTERM\");\n                this.process = null;\n              }\n              this.status = \"error\";\n              this.error = \"Tunnel startup timeout\";\n              this.emit(\"error\", this.error);\n              reject(new Error(this.error));\n            }\n          }\n        }, 60000); // 60 second timeout\n\n        const checkReady = () => {\n          if (this.status === \"running\") {\n            cleanup();\n            resolve(this.getInfo());\n          } else if (this.status === \"error\") {\n            cleanup();\n            reject(new Error(this.error || \"Unknown tunnel error\"));\n          } else if (this.status === \"stopped\") {\n            // Process exited cleanly before becoming ready\n            cleanup();\n            reject(new Error(\"Tunnel process exited before becoming ready\"));\n          }\n        };\n\n        this.on(\"status\", checkReady);\n      });\n    } catch (err) {\n      this.status = \"error\";\n      this.error =\n        err instanceof Error ? err.message : \"Failed to start tunnel\";\n      this.emit(\"error\", this.error);\n      throw err;\n    }\n  }\n\n  /**\n   * Parse tunnel output to extract URL\n   */\n  private parseOutput(output: string): void {\n    // VS Code tunnel outputs the URL in various formats\n    // Look for patterns like:\n    // - \"Open this link in your browser https://vscode.dev/tunnel/tunnel-name\"\n    // - \"https://vscode.dev/tunnel/tunnel-name\"\n    // - Connected to tunnel: tunnel-name\n\n    // Check for vscode.dev URL\n    const vscodeDevMatch = output.match(\n      /https:\\/\\/vscode\\.dev\\/tunnel\\/([a-zA-Z0-9_-]+)/,\n    );\n    if (vscodeDevMatch) {\n      this.tunnelUrl = vscodeDevMatch[0];\n      this.tunnelName = vscodeDevMatch[1];\n      this.status = \"running\";\n      this.restartAttempts = 0; // Reset restart attempts on successful connection\n      tunnelLogger.info(`Connected: ${this.tunnelUrl}`);\n      this.emit(\"ready\", this.getInfo());\n      this.emit(\"status\", this.getInfo());\n    }\n\n    // Check for tunnel name assignment - always update with actual name from VS Code\n    // in case VS Code assigned a different name (e.g., due to name collision)\n    const tunnelNameMatch = output.match(\n      /Connected to tunnel:\\s*([a-zA-Z0-9_-]+)/i,\n    );\n    if (tunnelNameMatch) {\n      this.tunnelName = tunnelNameMatch[1];\n    }\n\n    // Check for \"Hosting\" line which indicates ready state\n    if (\n      output.includes(\"Hosting\") &&\n      this.tunnelName &&\n      this.status !== \"running\"\n    ) {\n      this.tunnelUrl = `https://vscode.dev/tunnel/${this.tunnelName}`;\n      this.status = \"running\";\n      this.restartAttempts = 0;\n      tunnelLogger.info(`Connected: ${this.tunnelUrl}`);\n      this.emit(\"ready\", this.getInfo());\n      this.emit(\"status\", this.getInfo());\n    }\n\n    // Check for errors\n    if (\n      output.toLowerCase().includes(\"error\") ||\n      output.toLowerCase().includes(\"failed\")\n    ) {\n      // Don't treat every error message as a failure, just log it\n      tunnelLogger.warn(\"Warning:\", output);\n    }\n  }\n\n  /**\n   * Stop the VS Code tunnel\n   */\n  async stop(): Promise<void> {\n    this.isShuttingDown = true;\n    this.autoRestart = false;\n\n    const currentProcess = this.process;\n    if (currentProcess) {\n      return new Promise((resolve) => {\n        let cleanedUp = false;\n        const cleanup = () => {\n          if (cleanedUp) return; // Prevent double cleanup\n          cleanedUp = true;\n          this.process = null;\n          this.status = \"stopped\";\n          this.tunnelName = null;\n          this.tunnelUrl = null;\n          this.error = null;\n          this.emit(\"status\", this.getInfo());\n          resolve();\n        };\n\n        // Give it time to gracefully shutdown\n        const forceKillTimeout = setTimeout(() => {\n          if (this.process) {\n            this.process.kill(\"SIGKILL\");\n          }\n          cleanup();\n        }, 5000);\n\n        currentProcess.once(\"exit\", () => {\n          clearTimeout(forceKillTimeout);\n          cleanup();\n        });\n\n        // Send SIGTERM for graceful shutdown\n        currentProcess.kill(\"SIGTERM\");\n      });\n    }\n\n    this.status = \"stopped\";\n    this.tunnelName = null;\n    this.tunnelUrl = null;\n    this.error = null;\n    this.emit(\"status\", this.getInfo());\n  }\n\n  /**\n   * Get current tunnel information\n   */\n  getInfo(): TunnelInfo {\n    const name = this.tunnelName;\n    const workspacePath = this.workspacePath;\n\n    return {\n      status: this.status,\n      name,\n      url: this.tunnelUrl,\n      vscodeUri: name\n        ? `vscode://vscode-remote/tunnel+${name}${workspacePath}`\n        : null,\n      cursorUri: name\n        ? `cursor://cursor-remote/tunnel+${name}${workspacePath}`\n        : null,\n      webUrl: name ? `https://vscode.dev/tunnel/${name}${workspacePath}` : null,\n      error: this.error,\n      workspacePath,\n    };\n  }\n\n  /**\n   * Get tunnel status\n   */\n  getStatus(): TunnelStatus {\n    return this.status;\n  }\n\n  /**\n   * Check if tunnel is enabled\n   * Enabled by default for cloud environments, can be disabled with VSCODE_TUNNEL_ENABLED=false\n   */\n  static isEnabled(): boolean {\n    const disabled = process.env.VSCODE_TUNNEL_ENABLED;\n    // Enabled by default, only disabled if explicitly set to false\n    if (disabled === \"false\" || disabled === \"0\") {\n      return false;\n    }\n    return true;\n  }\n\n  /**\n   * Check if auto-start is enabled\n   */\n  static isAutoStartEnabled(): boolean {\n    const autoStart = process.env.VSCODE_TUNNEL_AUTO_START;\n    // Default to false (off by default), only enabled if explicitly set\n    if (autoStart === \"true\" || autoStart === \"1\") {\n      return true;\n    }\n    return false;\n  }\n\n  /**\n   * Get the configured tunnel name from environment or generate one\n   */\n  static getTunnelName(projectId?: string, branchName?: string): string {\n    const envName = process.env.VSCODE_TUNNEL_NAME;\n    if (envName) {\n      return envName;\n    }\n\n    // Generate name from project and branch\n    if (projectId && branchName) {\n      // Sanitize for DNS-compatible name (lowercase, alphanumeric and hyphens only)\n      const sanitized = `${projectId}-${branchName}`\n        .toLowerCase()\n        .replace(/[^a-z0-9-]/g, \"-\")\n        .replace(/-+/g, \"-\")\n        .replace(/^-|-$/g, \"\")\n        .substring(0, 63);\n      return sanitized || \"builder-tunnel\";\n    }\n\n    return \"builder-tunnel\";\n  }\n\n  /**\n   * Get the configured workspace path\n   */\n  static getWorkspacePath(): string {\n    return process.env.VSCODE_TUNNEL_WORKSPACE || DEFAULT_WORKSPACE_PATH;\n  }\n}\n\n// Singleton instance for use across the application\nlet tunnelManagerInstance: VSCodeTunnelManager | null = null;\n\n/**\n * Get the singleton tunnel manager instance\n */\nexport function getTunnelManager(): VSCodeTunnelManager {\n  if (!tunnelManagerInstance) {\n    tunnelManagerInstance = new VSCodeTunnelManager();\n  }\n  return tunnelManagerInstance;\n}\n\n/**\n * Generate VS Code deep link for a tunnel\n */\nexport function generateVSCodeDeepLink(\n  tunnelName: string,\n  workspacePath: string = DEFAULT_WORKSPACE_PATH,\n): string {\n  return `vscode://vscode-remote/tunnel+${tunnelName}${workspacePath}`;\n}\n\n/**\n * Generate Cursor deep link for a tunnel\n */\nexport function generateCursorDeepLink(\n  tunnelName: string,\n  workspacePath: string = DEFAULT_WORKSPACE_PATH,\n): string {\n  return `cursor://cursor-remote/tunnel+${tunnelName}${workspacePath}`;\n}\n\n/**\n * Generate web editor link for a tunnel\n */\nexport function generateWebEditorLink(\n  tunnelName: string,\n  workspacePath: string = DEFAULT_WORKSPACE_PATH,\n): string {\n  return `https://vscode.dev/tunnel/${tunnelName}${workspacePath}`;\n}\n"],"mappings":"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"}