branch-nexus 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +190 -0
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +3651 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +326 -0
- package/dist/index.js +3661 -0
- package/dist/index.js.map +1 -0
- package/package.json +79 -0
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../node_modules/tsup/assets/esm_shims.js","../ts-src/types/errors.ts","../ts-src/utils/logger.ts","../ts-src/git/branch.ts","../ts-src/cli.ts","../ts-src/commands/index.ts","../ts-src/commands/run.ts","../ts-src/core/config.ts","../ts-src/types/index.ts","../ts-src/types/config.ts","../ts-src/types/worktree.ts","../ts-src/types/session.ts","../ts-src/core/orchestrator.ts","../ts-src/runtime/wsl.ts","../ts-src/runtime/platform.ts","../ts-src/tmux/layouts.ts","../ts-src/tmux/session.ts","../ts-src/runtime/shell.ts","../ts-src/git/worktree.ts","../ts-src/git/clone.ts","../ts-src/utils/validators.ts","../ts-src/prompts/wsl.ts","../ts-src/prompts/panel.ts","../ts-src/core/presets.ts","../ts-src/utils/theme.ts","../ts-src/prompts/github-browser.ts","../ts-src/github/api.ts","../ts-src/prompts/cleanup.ts","../ts-src/hooks/runner.ts","../ts-src/core/session.ts","../ts-src/commands/config.ts","../ts-src/commands/kill.ts","../ts-src/commands/preset.ts","../ts-src/commands/status.ts","../ts-src/commands/attach.ts","../ts-src/prompts/setup.ts"],"names":["simpleGit","path","z","platform","execa","pruneCmd","inquirer","chalk","resolve","ANSI_RE","CLR","stripAnsi","padToWidth","boxLine","boxTop","boxMid","boxBottom","readline2","key","confirm","p","p2","runCommand","isWindows","distribution","assignments","worktreeBase","request","s","existsSync","mkdirSync","join","listLocalBranches","readFileSync","removed","p4","readdirSync","SESSION_PREFIX","p5","answers"],"mappings":"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","file":"cli.js","sourcesContent":["// Shim globals in esm bundle\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nconst getFilename = () => fileURLToPath(import.meta.url)\nconst getDirname = () => path.dirname(getFilename())\n\nexport const __dirname = /* @__PURE__ */ getDirname()\nexport const __filename = /* @__PURE__ */ getFilename()\n","export enum ExitCode {\n SUCCESS = 0,\n INVALID_ARGS = 2,\n CONFIG_ERROR = 3,\n RUNTIME_ERROR = 4,\n GIT_ERROR = 5,\n TMUX_ERROR = 6,\n VALIDATION_ERROR = 7,\n UNSUPPORTED_PLATFORM = 8,\n}\n\nexport class BranchNexusError extends Error {\n public readonly code: ExitCode;\n public readonly hint: string;\n\n constructor(message: string, code: ExitCode = ExitCode.RUNTIME_ERROR, hint = '') {\n super(message);\n this.name = 'BranchNexusError';\n this.code = code;\n this.hint = hint;\n }\n\n public override toString(): string {\n if (this.hint !== '') {\n return `${this.message} Hint: ${this.hint}`;\n }\n return this.message;\n }\n}\n\nexport function userFacingError(message: string, hint?: string): string {\n if (hint !== undefined && hint !== '') {\n return `Error: ${message}. Next step: ${hint}`;\n }\n return `Error: ${message}.`;\n}\n\nexport function isBranchNexusError(error: unknown): error is BranchNexusError {\n return error instanceof BranchNexusError;\n}\n","import { appendFileSync, mkdirSync, existsSync, writeFileSync } from 'node:fs';\nimport { dirname, resolve } from 'node:path';\nimport { homedir } from 'node:os';\n\nexport type LogLevel = 'debug' | 'info' | 'warn' | 'error';\n\nconst LOG_LEVELS: Record<LogLevel, number> = {\n debug: 0,\n info: 1,\n warn: 2,\n error: 3,\n};\n\nlet currentLevel: LogLevel = 'info';\nlet logFilePath: string | null = null;\n\nconst DEFAULT_LOG_DIR = '.config/branchnexus/logs';\nconst DEFAULT_LOG_FILE = 'branchnexus.log';\n\nexport function defaultLogPath(): string {\n const logDir = resolve(homedir(), DEFAULT_LOG_DIR);\n return resolve(logDir, DEFAULT_LOG_FILE);\n}\n\nexport function configureLogging(options?: { level?: LogLevel; logFile?: string }): void {\n if (options?.level !== undefined) {\n currentLevel = options.level;\n }\n if (options?.logFile !== undefined && options.logFile !== '') {\n logFilePath = resolve(options.logFile);\n const logDir = dirname(logFilePath);\n if (!existsSync(logDir)) {\n mkdirSync(logDir, { recursive: true });\n }\n }\n}\n\nfunction formatMessage(level: LogLevel, message: string, args: unknown[]): string {\n const timestamp = new Date().toISOString();\n const formattedArgs =\n args.length > 0 ? ' ' + args.map((arg) => JSON.stringify(arg)).join(' ') : '';\n return `${timestamp} ${level.toUpperCase()} ${message}${formattedArgs}`;\n}\n\nfunction log(level: LogLevel, message: string, args: unknown[]): void {\n if (LOG_LEVELS[level] < LOG_LEVELS[currentLevel]) {\n return;\n }\n\n const formatted = formatMessage(level, message, args);\n\n if (level === 'error') {\n console.error(formatted);\n } else if (level === 'warn') {\n console.warn(formatted);\n } else {\n console.log(formatted);\n }\n\n if (logFilePath !== null) {\n try {\n appendFileSync(logFilePath, formatted + '\\n', 'utf-8');\n } catch {\n // Ignore file write errors\n }\n }\n}\n\nexport const logger = {\n debug: (message: string, ...args: unknown[]): void => {\n log('debug', message, args);\n },\n info: (message: string, ...args: unknown[]): void => {\n log('info', message, args);\n },\n warn: (message: string, ...args: unknown[]): void => {\n log('warn', message, args);\n },\n error: (message: string, ...args: unknown[]): void => {\n log('error', message, args);\n },\n};\n\nexport function createFileLogger(logFile: string): void {\n logFilePath = resolve(logFile);\n const logDir = dirname(logFilePath);\n if (!existsSync(logDir)) {\n mkdirSync(logDir, { recursive: true });\n }\n writeFileSync(logFilePath, '', 'utf-8');\n}\n","import simpleGit, { type SimpleGit } from 'simple-git';\nimport { logger } from '../utils/logger.js';\nimport { BranchNexusError, ExitCode } from '../types/errors.js';\n\nexport interface BranchListResult {\n branches: string[];\n warning?: string;\n}\n\nexport async function listLocalBranches(repoPath: string): Promise<BranchListResult> {\n logger.debug(`Listing local branches for ${repoPath}`);\n\n const git: SimpleGit = simpleGit(repoPath);\n\n try {\n const isRepo = await git.checkIsRepo();\n if (!isRepo) {\n throw new BranchNexusError(\n `Not a git repository: ${repoPath}`,\n ExitCode.GIT_ERROR,\n 'Check the path and ensure it is a valid Git repository.'\n );\n }\n } catch (error) {\n if (error instanceof BranchNexusError) {\n throw error;\n }\n throw new BranchNexusError(\n `Repository is not accessible: ${repoPath}`,\n ExitCode.GIT_ERROR,\n 'Check the path and ensure it is a valid Git repository.'\n );\n }\n\n let warning: string | undefined;\n\n try {\n const status = await git.status();\n if (status.detached) {\n warning = 'Detached HEAD detected. Branch operations may be limited.';\n logger.warn(`Detached HEAD detected repo=${repoPath}`);\n }\n } catch {\n // Ignore status check errors\n }\n\n try {\n const localBranches = await git.branchLocal();\n\n // Filter out BranchNexus fork branches (e.g. main-pane-2, feature/x-pane-3)\n const FORK_BRANCH_RE = /-pane-\\d+$/;\n let branchNames = localBranches.all.filter((b) => !FORK_BRANCH_RE.test(b)).sort();\n\n // Also fetch remote branches for more options\n try {\n await git.fetch(['--all']);\n const remoteBranches = await git.branch(['-r']);\n const remoteNames = remoteBranches.all\n .filter((b) => !b.includes('HEAD') && !FORK_BRANCH_RE.test(b))\n .sort();\n\n // Combine local and remote branches, local first\n branchNames = [...branchNames, ...remoteNames];\n logger.debug(\n `Discovered ${localBranches.all.length} local + ${remoteNames.length} remote branches`\n );\n } catch (fetchError) {\n logger.debug('Could not fetch remote branches');\n }\n\n if (branchNames.length === 0) {\n throw new BranchNexusError(\n 'No branches found.',\n ExitCode.GIT_ERROR,\n 'Create an initial commit and at least one branch.'\n );\n }\n\n logger.debug(`Total ${branchNames.length} branches available`);\n\n return {\n branches: branchNames,\n warning,\n };\n } catch (error) {\n if (error instanceof BranchNexusError) {\n throw error;\n }\n throw new BranchNexusError(\n `Failed to list branches for ${repoPath}`,\n ExitCode.GIT_ERROR,\n 'Run `git branch -a` manually to inspect repository state.'\n );\n }\n}\n\nexport async function getCurrentBranch(repoPath: string): Promise<string> {\n const git: SimpleGit = simpleGit(repoPath);\n const status = await git.status();\n return status.current ?? 'HEAD';\n}\n\nexport async function branchExists(repoPath: string, branch: string): Promise<boolean> {\n const git: SimpleGit = simpleGit(repoPath);\n const branches = await git.branchLocal();\n return branches.all.includes(branch);\n}\n\nexport async function remoteBranchExists(repoPath: string, remoteBranch: string): Promise<boolean> {\n const git: SimpleGit = simpleGit(repoPath);\n const branches = await git.branch(['-r']);\n return branches.all.includes(remoteBranch);\n}\n","#!/usr/bin/env node\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport {\n initCommand,\n runCommand,\n configCommand,\n killCommand,\n presetCommand,\n statusCommand,\n attachCommand,\n} from './commands/index.js';\nimport { type RunOptions } from './commands/run.js';\nimport { userFacingError, isBranchNexusError, ExitCode } from './types/errors.js';\nimport { configureLogging, defaultLogPath, logger } from './utils/logger.js';\n\nconst program = new Command();\n\nprogram\n .name('branchnexus')\n .description('Multi-branch workspace orchestrator for tmux')\n .version('1.0.0');\n\nprogram\n .command('init')\n .description('First-time setup wizard')\n .action(async () => {\n await initCommand();\n });\n\nprogram\n .command('config')\n .description('Manage configuration (show | set | reset | export | import)')\n .argument('[action]', 'show | set | reset | export | import')\n .argument('[key]', 'Config key or file path')\n .argument('[value]', 'Config value')\n .action((action: string | undefined, key: string | undefined, value: string | undefined) => {\n configCommand(action, key, value);\n });\n\nprogram\n .command('kill')\n .description('Kill an active BranchNexus tmux session')\n .argument('[session]', 'Session name to kill')\n .action(async (session?: string) => {\n await killCommand(session);\n });\n\nprogram\n .command('preset')\n .description('Manage presets (list | save | load | delete | rename)')\n .argument('[action]', 'list | save | load | delete | rename')\n .argument('[name]', 'Preset name')\n .argument('[extra]', 'JSON data or new name for rename')\n .action((action?: string, name?: string, extra?: string) => {\n presetCommand(action, name, extra);\n });\n\nprogram\n .command('status')\n .description('Show BranchNexus status overview')\n .action(async () => {\n await statusCommand();\n });\n\nprogram\n .command('attach')\n .description('Attach to a detached BranchNexus tmux session')\n .argument('[session]', 'Session name to attach')\n .action(async (session?: string) => {\n await attachCommand(session);\n });\n\nprogram\n .option('--root <path>', 'Working directory')\n .option('--layout <layout>', 'horizontal | vertical | grid')\n .option('--panes <number>', 'Number of panes (2-6)', parseInt)\n .option('--cleanup <policy>', 'session | persistent')\n .option('--fresh', 'Reset workspace and start fresh')\n .option('--terminal-template <template>', '2 | 4 | 6 | 8 | 12 | 16 | custom')\n .option('--max-terminals <count>', 'Maximum terminals', parseInt)\n .option('--log-level <level>', 'DEBUG | INFO | WARN | ERROR')\n .option('--log-file <path>', 'Log file path')\n .option('--session <name>', 'Custom session name')\n .option('--no-hooks', 'Skip command hooks');\n\nprogram.action(async (options: Record<string, unknown>) => {\n await runCommand(options as RunOptions);\n});\n\nasync function main(): Promise<void> {\n const logPath = defaultLogPath();\n configureLogging({ logFile: logPath });\n\n try {\n await program.parseAsync(process.argv);\n } catch (error) {\n if (isBranchNexusError(error)) {\n logger.error(`BranchNexusError: ${error.message}`);\n console.error(chalk.red(userFacingError(error.message, error.hint)));\n process.exit(error.code);\n }\n\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`Unexpected error: ${message}`);\n console.error(\n chalk.red(userFacingError('Unexpected runtime failure', `Check logs: ${logPath}`))\n );\n process.exit(ExitCode.RUNTIME_ERROR);\n }\n}\n\nvoid main();\n","export { runCommand, type RunOptions } from './run.js';\nexport { configCommand } from './config.js';\nexport { killCommand } from './kill.js';\nexport { presetCommand } from './preset.js';\nexport { statusCommand } from './status.js';\nexport { attachCommand } from './attach.js';\nexport { initCommand } from '../prompts/setup.js';\n","import chalk from 'chalk';\nimport * as p from '@clack/prompts';\nimport { type Layout, type CleanupPolicy } from '../types/index.js';\nimport { BranchNexusError, ExitCode } from '../types/errors.js';\nimport { loadConfig, updateLastSession } from '../core/config.js';\nimport { orchestrate, type OrchestrationRequest } from '../core/orchestrator.js';\nimport { promptWslDistribution } from '../prompts/wsl.js';\nimport {\n showPanel,\n showBranchSelection,\n showPreview,\n showSuccess,\n showError,\n confirmStart,\n} from '../prompts/panel.js';\nimport { promptCleanup } from '../prompts/cleanup.js';\nimport { Platform, detectPlatform, expandHomeDir, hasTmux } from '../runtime/platform.js';\nimport { listDistributions } from '../runtime/wsl.js';\nimport { logger, configureLogging } from '../utils/logger.js';\nimport { cloneRepository } from '../git/clone.js';\nimport { existsSync, mkdirSync } from 'node:fs';\nimport { join, basename } from 'node:path';\nimport simpleGit from 'simple-git';\nimport { execa } from 'execa';\nimport { HookRunner } from '../hooks/runner.js';\nimport { parseRuntimeSnapshot, SessionCleanupHandler } from '../core/session.js';\nimport { WorktreeManager } from '../git/worktree.js';\n\nexport interface RunOptions {\n root?: string;\n layout?: Layout;\n panes?: number;\n cleanup?: CleanupPolicy;\n fresh?: boolean;\n terminalTemplate?: string;\n maxTerminals?: number;\n logLevel?: string;\n logFile?: string;\n session?: string;\n hooks?: boolean;\n}\n\nasync function ensureTmuxInstalled(): Promise<void> {\n const tmuxInstalled = await hasTmux();\n\n if (tmuxInstalled) {\n return;\n }\n\n const platform = detectPlatform();\n\n console.log(chalk.yellow('\\n📦 tmux bulunamadı, kuruluyor...\\n'));\n\n if (platform === Platform.MACOS) {\n try {\n await execa('brew', ['install', 'tmux'], { timeout: 120000 });\n console.log(chalk.green('✅ tmux kuruldu!\\n'));\n return;\n } catch (error) {\n const msg = error instanceof Error ? error.message : String(error);\n throw new BranchNexusError(\n `tmux kurulumu başarısız: ${msg}`,\n ExitCode.TMUX_ERROR,\n 'Manuel kurulum: brew install tmux'\n );\n }\n }\n\n // Linux/WSL\n let installCmd: string;\n\n try {\n await execa('bash', ['-lc', 'which apt-get']);\n installCmd = 'apt-get update && apt-get install -y tmux';\n } catch {\n try {\n await execa('bash', ['-lc', 'which dnf']);\n installCmd = 'dnf install -y tmux';\n } catch {\n try {\n await execa('bash', ['-lc', 'which pacman']);\n installCmd = 'pacman -S --noconfirm tmux';\n } catch {\n try {\n await execa('bash', ['-lc', 'which apk']);\n installCmd = 'apk add tmux';\n } catch {\n throw new BranchNexusError(\n 'Paket yöneticisi bulunamadı.',\n ExitCode.TMUX_ERROR,\n \"Lütfen tmux'u manuel kurun.\"\n );\n }\n }\n }\n }\n\n // Try sudo -n first\n try {\n console.log(chalk.dim(`Çalıştırılıyor: sudo ${installCmd}`));\n await execa('sudo', ['-n', 'bash', '-lc', installCmd], { timeout: 180000 });\n console.log(chalk.green('✅ tmux kuruldu!\\n'));\n return;\n } catch {\n // Needs password\n }\n\n // Show command and wait\n console.log(chalk.cyan('Başka bir terminalde bu komutu çalıştırın:\\n'));\n console.log(chalk.bold.white(` sudo ${installCmd}\\n`));\n console.log(chalk.dim('tmux kurulumu bekleniyor...'));\n\n for (let i = 0; i < 60; i++) {\n await new Promise((r) => setTimeout(r, 2000));\n const installed = await hasTmux();\n if (installed) {\n console.log(chalk.green('\\n✅ tmux algılandı!\\n'));\n return;\n }\n process.stdout.write('.');\n }\n\n console.log();\n throw new BranchNexusError(\n '2 dakika içinde tmux kurulumu algılanamadı.',\n ExitCode.TMUX_ERROR,\n 'tmux kurduktan sonra tekrar deneyin.'\n );\n}\n\nexport async function runCommand(options: RunOptions): Promise<void> {\n if (\n (options.logLevel !== undefined && options.logLevel !== '') ||\n (options.logFile !== undefined && options.logFile !== '')\n ) {\n configureLogging({\n level: options.logLevel as 'debug' | 'info' | 'warn' | 'error',\n logFile: options.logFile,\n });\n }\n\n logger.info('Starting BranchNexus');\n\n // Check tmux first\n await ensureTmuxInstalled();\n\n const config = loadConfig();\n const sessionName = options.session ?? 'branchnexus';\n\n // Session restore check (skip if --fresh)\n if (\n options.fresh !== true &&\n config.sessionRestoreEnabled &&\n Object.keys(config.lastSession).length > 0\n ) {\n const snapshot = parseRuntimeSnapshot(config.lastSession);\n\n if (snapshot !== null) {\n const restore = await p.confirm({\n message: 'Son oturumu geri yüklemek ister misiniz?',\n initialValue: true,\n });\n\n if (restore !== undefined && restore !== null && restore === true) {\n logger.info('Restoring previous session');\n\n const platform = detectPlatform();\n const isWindows = platform === Platform.WINDOWS;\n let distribution = '';\n\n if (isWindows && config.wslDistribution !== '') {\n distribution = config.wslDistribution;\n }\n\n // Rebuild from snapshot\n const assignments = snapshot.terminals.map((t, i) => ({\n pane: i,\n repoPath: t.repoPath,\n branch: t.branch,\n }));\n\n const worktreeBase = expandHomeDir(\n config.defaultRoot !== '' ? `${config.defaultRoot}/.bnx` : '~/.bnx'\n );\n\n const request: OrchestrationRequest = {\n distribution,\n availableDistributions: [],\n layout: snapshot.layout as 'horizontal' | 'vertical' | 'grid',\n cleanupPolicy: config.cleanupPolicy,\n assignments,\n worktreeBase,\n sessionName,\n tmuxAutoInstall: config.tmuxAutoInstall,\n colorTheme: config.colorTheme,\n paneNames: snapshot.terminals.map((t) => t.title),\n displayBranches: snapshot.terminals.map((t) => t.branch),\n };\n\n const s = p.spinner();\n s.start('Oturum geri yükleniyor...');\n\n try {\n const result = await orchestrate(request);\n s.stop(`${result.worktrees.length} worktree geri yüklendi`);\n\n showSuccess('tmux session hazır! Bağlanılıyor...');\n\n try {\n await execa('tmux', ['attach-session', '-t', sessionName], {\n stdio: 'inherit',\n timeout: 0,\n });\n } catch {\n console.log();\n console.log(chalk.dim('tmux session devam ediyor. Tekrar bağlanmak için:'));\n console.log(chalk.cyan(` tmux attach -t ${sessionName}`));\n console.log();\n }\n return;\n } catch (error) {\n s.stop('Geri yükleme başarısız, yeni oturum başlatılıyor');\n logger.warn(`Session restore failed: ${error instanceof Error ? error.message : String(error)}`);\n }\n }\n }\n }\n\n // Show interactive panel\n const panelResult = await showPanel();\n\n if (!panelResult) {\n return;\n }\n\n const { token, repoUrl, repoUrls, layout, paneCount, cleanup } = panelResult;\n const allRepoUrls = repoUrls.length > 0 ? repoUrls : [repoUrl];\n\n const platform = detectPlatform();\n const isWindows = platform === Platform.WINDOWS;\n\n let distribution = '';\n let availableDistributions: string[] = [];\n\n if (isWindows) {\n try {\n availableDistributions = await listDistributions();\n if (\n config.wslDistribution !== '' &&\n availableDistributions.includes(config.wslDistribution)\n ) {\n distribution = config.wslDistribution;\n } else {\n distribution = await promptWslDistribution();\n }\n } catch (error) {\n showError(\n 'WSL distributions alınamadı',\n error instanceof Error ? error.message : String(error)\n );\n return;\n }\n }\n\n // Prepare workspace\n const workspaceRoot = expandHomeDir(\n config.defaultRoot !== '' ? config.defaultRoot : '~/workspace'\n );\n if (!existsSync(workspaceRoot)) {\n mkdirSync(workspaceRoot, { recursive: true });\n }\n\n // Clone/fetch all repos\n const s = p.spinner();\n const localRepoPaths: string[] = [];\n\n for (const url of allRepoUrls) {\n let rName = basename(url.replace('.git', ''));\n if (rName.startsWith('git@')) {\n rName = rName.split(':').pop()?.replace('.git', '') ?? 'repo';\n }\n\n const localPath = join(workspaceRoot, rName);\n localRepoPaths.push(localPath);\n\n if (existsSync(localPath) && existsSync(join(localPath, '.git'))) {\n s.start(`Mevcut repo kullanılıyor: ${rName}...`);\n try {\n const git = simpleGit(localPath);\n await git.fetch('origin');\n s.stop('Mevcut repo: ' + localPath);\n } catch {\n s.stop('Fetch başarısız, local ile devam');\n }\n } else {\n s.start(`Repo klonlanıyor: ${rName}...`);\n\n let cloneUrl = url;\n\n if (token !== null && token !== '' && url.startsWith('https://')) {\n cloneUrl = url.replace('https://', `https://${token}@`);\n }\n\n try {\n await cloneRepository(cloneUrl, localPath);\n s.stop('Klonlandı: ' + localPath);\n } catch (error) {\n s.stop('Klonlama başarısız');\n const message = error instanceof Error ? error.message : String(error);\n\n if (message.includes('403') || message.includes('Authentication failed')) {\n showError('Kimlik doğrulama başarısız', 'Private repo için GitHub token gerekli');\n return;\n }\n\n showError('Repo klonlanamadı', message);\n return;\n }\n }\n }\n\n const localRepoPath = localRepoPaths[0];\n\n // Merge branches from all repos (prefix with repo name if multi-repo)\n const allBranches: string[] = [];\n const branchRepoMap: Map<string, string> = new Map();\n\n try {\n const { listLocalBranches } = await import('../git/branch.js');\n\n for (let ri = 0; ri < localRepoPaths.length; ri++) {\n const rPath = localRepoPaths[ri];\n const branchResult = await listLocalBranches(rPath);\n\n if (branchResult.warning !== undefined && branchResult.warning !== '') {\n p.log.warn(branchResult.warning);\n }\n\n for (const branch of branchResult.branches) {\n const key = localRepoPaths.length > 1\n ? `[${basename(rPath)}] ${branch}`\n : branch;\n allBranches.push(key);\n branchRepoMap.set(key, rPath);\n }\n }\n\n if (allBranches.length === 0) {\n showError(\"Repository'de branch bulunamadı.\");\n return;\n }\n } catch (error) {\n showError('Branch listesi alınamadı', error instanceof Error ? error.message : String(error));\n return;\n }\n\n // Get branches via interactive per-pane selection table\n let branches: string[];\n let paneNames: string[] = [];\n let startupCommands: string[] = [];\n\n try {\n const selected = await showBranchSelection(allBranches, paneCount);\n if (selected === null) {\n p.cancel('İptal edildi.');\n return;\n }\n branches = selected.branches;\n paneNames = selected.paneNames;\n startupCommands = selected.startupCommands ?? [];\n } catch (error) {\n showError('Branch seçimi başarısız', error instanceof Error ? error.message : String(error));\n return;\n }\n\n // Show preview with selected branches\n showPreview({\n repoUrl,\n layout,\n branchCount: branches.length,\n branches,\n cleanup,\n });\n\n // Final confirmation\n const confirmed = await confirmStart();\n if (!confirmed) {\n p.cancel('İptal edildi.');\n return;\n }\n\n s.start(\"Worktree'ler oluşturuluyor...\");\n\n // Each pane needs its own branch for git worktree (git doesn't allow same branch in 2 worktrees)\n // Create a unique local branch per pane: e.g. bnx-Alpha-0, bnx-Beta-1\n const resolvedBranches: string[] = [];\n const paneRepoPaths: string[] = [];\n\n for (let i = 0; i < branches.length; i++) {\n const branchKey = branches[i];\n // For multi-repo, strip repo prefix to get actual branch name\n const actualBranch = branchKey.replace(/^\\[.*?\\]\\s*/, '');\n const paneRepoPath = branchRepoMap.get(branchKey) ?? localRepoPath;\n paneRepoPaths.push(paneRepoPath);\n\n const git = simpleGit(paneRepoPath);\n const safeName =\n paneNames[i].replace(/[^A-Za-z0-9._-]+/g, '-').replace(/^-+|-+$/g, '') || `pane-${i}`;\n const localName = `bnx-${safeName}-${i}`;\n try {\n // Delete if exists from previous run, then recreate from source\n try {\n await git.branch(['-D', localName]);\n } catch {\n /* ignore */\n }\n await git.branch([localName, actualBranch]);\n logger.debug(`Created local branch ${localName} from ${actualBranch}`);\n } catch {\n logger.debug(`Branch ${localName} already exists, reusing`);\n }\n resolvedBranches.push(localName);\n }\n\n const assignments = resolvedBranches.map((branch, index) => ({\n pane: index,\n repoPath: paneRepoPaths[index],\n branch,\n }));\n\n const worktreeBase = expandHomeDir(\n config.defaultRoot !== '' ? `${config.defaultRoot}/.bnx` : '~/.bnx'\n );\n\n const request: OrchestrationRequest = {\n distribution,\n availableDistributions,\n layout,\n cleanupPolicy: cleanup,\n assignments,\n worktreeBase,\n sessionName,\n tmuxAutoInstall: config.tmuxAutoInstall,\n colorTheme: config.colorTheme,\n paneNames,\n displayBranches: branches,\n startupCommands: startupCommands.length > 0 ? startupCommands : undefined,\n };\n\n try {\n const result = await orchestrate(request);\n s.stop(`${result.worktrees.length} worktree oluşturuldu`);\n\n // Run command hooks (unless --no-hooks)\n const noHooks = options.hooks === false;\n const hookCommands = config.commandHooks['post-setup'] ?? [];\n\n if (!noHooks && hookCommands.length > 0) {\n const hookSpinner = p.spinner();\n hookSpinner.start('Hook\\'lar çalıştırılıyor...');\n\n const runner = new HookRunner({ timeoutSeconds: 60 });\n let totalFailures = 0;\n\n for (let i = 0; i < result.worktrees.length; i++) {\n const hookResult = await runner.run(i, hookCommands, distribution || undefined);\n if (hookResult.hasFailures) {\n totalFailures += hookResult.executions.filter((e) => !e.success).length;\n }\n }\n\n if (totalFailures > 0) {\n hookSpinner.stop(chalk.yellow(`Hook'lar tamamlandı (${totalFailures} hata)`));\n } else {\n hookSpinner.stop('Hook\\'lar tamamlandı');\n }\n }\n\n // Save session snapshot for restore\n const snapshotData: Record<string, unknown> = {\n layout,\n templateCount: branches.length,\n focusedTerminalId: '',\n terminals: branches.map((branch, i) => ({\n terminalId: `pane-${i}`,\n title: paneNames[i] ?? `Pane ${i}`,\n runtime: 'native' as const,\n repoPath: localRepoPath,\n branch,\n })),\n };\n updateLastSession(snapshotData);\n\n showSuccess('tmux session hazır! Bağlanılıyor...');\n\n // Attach to tmux session interactively\n try {\n await execa('tmux', ['attach-session', '-t', sessionName], {\n stdio: 'inherit',\n timeout: 0,\n });\n } catch {\n // User detached from tmux (Ctrl+B D) or session ended - this is normal\n console.log();\n console.log(chalk.dim('tmux session devam ediyor. Tekrar bağlanmak için:'));\n console.log(chalk.cyan(` tmux attach -t ${sessionName}`));\n console.log();\n }\n\n // Post-detach cleanup handler\n if (cleanup === 'session' && result.worktrees.length > 0) {\n const worktreeManager = new WorktreeManager(worktreeBase, cleanup);\n // Populate managed worktrees from result\n for (const wt of result.worktrees) {\n await worktreeManager.addWorktree(\n { pane: wt.pane, repoPath: wt.repoPath, branch: wt.branch },\n distribution || undefined\n );\n }\n\n const cleanupHandler = new SessionCleanupHandler(\n worktreeManager,\n promptCleanup,\n distribution || undefined\n );\n\n const cleanupResult = await cleanupHandler.handleExit();\n\n if (cleanupResult.removed.length > 0) {\n console.log(chalk.green(`✓ ${cleanupResult.removed.length} worktree temizlendi.`));\n }\n if (cleanupResult.preservedDirty.length > 0) {\n console.log(\n chalk.yellow(`⚠ ${cleanupResult.preservedDirty.length} dirty worktree korundu.`)\n );\n }\n }\n } catch (error) {\n s.stop('Session oluşturulamadı');\n\n if (error instanceof BranchNexusError) {\n showError(error.message, error.hint);\n } else {\n showError('Beklenmeyen hata', error instanceof Error ? error.message : String(error));\n }\n }\n}\n","import { z } from 'zod';\nimport Conf from 'conf';\nimport {\n type AppConfig,\n DEFAULT_CONFIG,\n AppConfigSchema,\n type CleanupPolicy,\n type ColorTheme,\n type Layout,\n} from '../types/index.js';\nimport { BranchNexusError, ExitCode } from '../types/errors.js';\n\nconst GITHUB_TOKEN_ENV = 'BRANCHNEXUS_GH_TOKEN';\n\nconst configStore = new Conf<AppConfig>({\n projectName: 'branchnexus',\n configName: 'config',\n defaults: DEFAULT_CONFIG,\n schema: {\n defaultRoot: { type: 'string' },\n remoteRepoUrl: { type: 'string' },\n githubToken: { type: 'string' },\n githubRepositoriesCache: { type: 'array' },\n githubBranchesCache: { type: 'object' },\n defaultLayout: { type: 'string', enum: ['horizontal', 'vertical', 'grid'] },\n defaultPanes: { type: 'number', minimum: 2, maximum: 6 },\n cleanupPolicy: { type: 'string', enum: ['session', 'persistent'] },\n tmuxAutoInstall: { type: 'boolean' },\n wslDistribution: { type: 'string' },\n terminalDefaultRuntime: { type: 'string', enum: ['wsl', 'powershell', 'native'] },\n terminalMaxCount: { type: 'number', minimum: 2, maximum: 16 },\n sessionRestoreEnabled: { type: 'boolean' },\n lastSession: { type: 'object' },\n colorTheme: { type: 'string', enum: ['cyan', 'green', 'magenta', 'blue', 'yellow', 'red'] },\n presets: { type: 'object' },\n commandHooks: { type: 'object' },\n } as const,\n});\n\nexport function getConfigPath(): string {\n return configStore.path;\n}\n\nexport function loadConfig(): AppConfig {\n try {\n const raw = configStore.store;\n const config = AppConfigSchema.parse(raw);\n\n const envToken = process.env[GITHUB_TOKEN_ENV];\n if (envToken !== undefined && envToken.trim() !== '') {\n config.githubToken = envToken.trim();\n }\n\n return config;\n } catch (error) {\n if (error instanceof z.ZodError) {\n throw new BranchNexusError(\n 'Configuration validation failed',\n ExitCode.CONFIG_ERROR,\n error.message\n );\n }\n return { ...DEFAULT_CONFIG };\n }\n}\n\nexport function saveConfig(config: AppConfig): void {\n const validated = AppConfigSchema.parse(config);\n configStore.store = validated;\n}\n\nexport function resetConfig(): AppConfig {\n configStore.store = DEFAULT_CONFIG;\n return { ...DEFAULT_CONFIG };\n}\n\nexport function setWslDistribution(distribution: string): AppConfig {\n const config = loadConfig();\n config.wslDistribution = distribution;\n saveConfig(config);\n return config;\n}\n\nexport function setDefaultRoot(root: string): AppConfig {\n const config = loadConfig();\n config.defaultRoot = root;\n saveConfig(config);\n return config;\n}\n\nexport function setGithubToken(token: string): AppConfig {\n const config = loadConfig();\n config.githubToken = token;\n saveConfig(config);\n return config;\n}\n\nexport function updateGithubRepoCache(\n repos: Array<{ full_name: string; clone_url: string }>\n): AppConfig {\n const config = loadConfig();\n config.githubRepositoriesCache = repos.map((repo) => ({\n full_name: repo.full_name,\n clone_url: repo.clone_url,\n }));\n saveConfig(config);\n return config;\n}\n\nexport function updateGithubBranchesCache(repoName: string, branches: string[]): AppConfig {\n const config = loadConfig();\n config.githubBranchesCache = {\n ...config.githubBranchesCache,\n [repoName]: branches,\n };\n saveConfig(config);\n return config;\n}\n\nexport function updateLastSession(session: Record<string, unknown>): AppConfig {\n const config = loadConfig();\n config.lastSession = session;\n saveConfig(config);\n return config;\n}\n\nexport function setConfigValue(key: string, value: string): AppConfig {\n const config = loadConfig();\n\n switch (key) {\n case 'defaultRoot':\n config.defaultRoot = value;\n break;\n case 'remoteRepoUrl':\n config.remoteRepoUrl = value;\n break;\n case 'githubToken':\n config.githubToken = value;\n break;\n case 'defaultLayout':\n if (['horizontal', 'vertical', 'grid'].includes(value)) {\n config.defaultLayout = value as Layout;\n }\n break;\n case 'defaultPanes':\n config.defaultPanes = parseInt(value, 10);\n break;\n case 'cleanupPolicy':\n if (['session', 'persistent'].includes(value)) {\n config.cleanupPolicy = value as CleanupPolicy;\n }\n break;\n case 'wslDistribution':\n config.wslDistribution = value;\n break;\n case 'terminalMaxCount':\n config.terminalMaxCount = parseInt(value, 10);\n break;\n case 'tmuxAutoInstall':\n config.tmuxAutoInstall = value === 'true';\n break;\n case 'sessionRestoreEnabled':\n config.sessionRestoreEnabled = value === 'true';\n break;\n case 'colorTheme':\n if (['cyan', 'green', 'magenta', 'blue', 'yellow', 'red'].includes(value)) {\n config.colorTheme = value as ColorTheme;\n }\n break;\n default:\n throw new BranchNexusError(\n `Unknown config key: ${key}`,\n ExitCode.CONFIG_ERROR,\n 'Use \"branchnexus config show\" to see available keys.'\n );\n }\n\n saveConfig(config);\n return config;\n}\n","export type {\n Layout,\n CleanupPolicy,\n ColorTheme,\n TerminalRuntime,\n RepositoryCacheEntry,\n PresetConfig,\n AppConfig,\n} from './config.js';\n\nexport {\n LayoutSchema,\n CleanupPolicySchema,\n ColorThemeSchema,\n TerminalRuntimeSchema,\n RepositoryCacheEntrySchema,\n PresetConfigSchema,\n AppConfigSchema,\n DEFAULT_CONFIG,\n} from './config.js';\n\nexport { ExitCode, BranchNexusError, userFacingError, isBranchNexusError } from './errors.js';\n\nexport type { WorktreeAssignment, ManagedWorktree } from './worktree.js';\n\nexport { createWorktreeAssignment, createManagedWorktree } from './worktree.js';\n\nexport type {\n RuntimeKind,\n SessionTerminalSnapshot,\n RuntimeSessionSnapshot,\n SessionCleanupResult,\n} from './session.js';\n\nexport {\n ExitChoice,\n createTerminalSnapshot,\n createSessionSnapshot,\n isSessionSnapshot,\n} from './session.js';\n","import { z } from 'zod';\n\nexport const LayoutSchema = z.enum(['horizontal', 'vertical', 'grid']);\nexport type Layout = z.infer<typeof LayoutSchema>;\n\nexport const CleanupPolicySchema = z.enum(['session', 'persistent']);\nexport type CleanupPolicy = z.infer<typeof CleanupPolicySchema>;\n\nexport const ColorThemeSchema = z.enum(['cyan', 'green', 'magenta', 'blue', 'yellow', 'red']);\nexport type ColorTheme = z.infer<typeof ColorThemeSchema>;\n\nexport const TerminalRuntimeSchema = z.enum(['wsl', 'powershell', 'native']);\nexport type TerminalRuntime = z.infer<typeof TerminalRuntimeSchema>;\n\nexport const RepositoryCacheEntrySchema = z.object({\n full_name: z.string(),\n clone_url: z.string(),\n});\nexport type RepositoryCacheEntry = z.infer<typeof RepositoryCacheEntrySchema>;\n\nexport const PresetConfigSchema = z.object({\n layout: LayoutSchema,\n panes: z.number().int().min(2).max(6),\n cleanup: CleanupPolicySchema,\n});\nexport type PresetConfig = z.infer<typeof PresetConfigSchema>;\n\nexport const AppConfigSchema = z.object({\n defaultRoot: z.string().default(''),\n remoteRepoUrl: z.string().default(''),\n githubToken: z.string().default(''),\n githubRepositoriesCache: z.array(RepositoryCacheEntrySchema).default([]),\n githubBranchesCache: z.record(z.array(z.string())).default({}),\n defaultLayout: LayoutSchema.default('grid'),\n defaultPanes: z.number().int().min(2).max(6).default(4),\n cleanupPolicy: CleanupPolicySchema.default('session'),\n tmuxAutoInstall: z.boolean().default(true),\n wslDistribution: z.string().default(''),\n terminalDefaultRuntime: TerminalRuntimeSchema.default('wsl'),\n terminalMaxCount: z.number().int().min(2).max(16).default(16),\n sessionRestoreEnabled: z.boolean().default(true),\n lastSession: z.record(z.unknown()).default({}),\n colorTheme: ColorThemeSchema.default('cyan'),\n presets: z.record(PresetConfigSchema).default({}),\n commandHooks: z.record(z.array(z.string())).default({}),\n});\nexport type AppConfig = z.infer<typeof AppConfigSchema>;\n\nexport const DEFAULT_CONFIG: AppConfig = {\n defaultRoot: '',\n remoteRepoUrl: '',\n githubToken: '',\n githubRepositoriesCache: [],\n githubBranchesCache: {},\n defaultLayout: 'grid',\n defaultPanes: 4,\n cleanupPolicy: 'session',\n tmuxAutoInstall: true,\n wslDistribution: '',\n terminalDefaultRuntime: 'wsl',\n terminalMaxCount: 16,\n sessionRestoreEnabled: true,\n lastSession: {},\n colorTheme: 'cyan',\n presets: {},\n commandHooks: {},\n};\n","export interface WorktreeAssignment {\n pane: number;\n repoPath: string;\n branch: string;\n}\n\nexport interface ManagedWorktree {\n pane: number;\n repoPath: string;\n branch: string;\n path: string;\n}\n\nexport function createWorktreeAssignment(\n pane: number,\n repoPath: string,\n branch: string\n): WorktreeAssignment {\n return { pane, repoPath, branch };\n}\n\nexport function createManagedWorktree(\n assignment: WorktreeAssignment,\n path: string\n): ManagedWorktree {\n return {\n pane: assignment.pane,\n repoPath: assignment.repoPath,\n branch: assignment.branch,\n path,\n };\n}\n","export type RuntimeKind = 'wsl' | 'powershell' | 'native';\n\nexport interface SessionTerminalSnapshot {\n terminalId: string;\n title: string;\n runtime: RuntimeKind;\n repoPath: string;\n branch: string;\n}\n\nexport interface RuntimeSessionSnapshot {\n layout: string;\n templateCount: number;\n focusedTerminalId: string;\n terminals: SessionTerminalSnapshot[];\n}\n\nexport function createTerminalSnapshot(\n terminalId: string,\n title: string,\n runtime: RuntimeKind,\n repoPath: string,\n branch: string\n): SessionTerminalSnapshot {\n return { terminalId, title, runtime, repoPath, branch };\n}\n\nexport function createSessionSnapshot(\n layout: string,\n templateCount: number,\n terminals: SessionTerminalSnapshot[],\n focusedTerminalId = ''\n): RuntimeSessionSnapshot {\n return {\n layout,\n templateCount,\n focusedTerminalId,\n terminals,\n };\n}\n\nexport function isSessionSnapshot(value: unknown): value is RuntimeSessionSnapshot {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n const snapshot = value as Record<string, unknown>;\n return (\n typeof snapshot['layout'] === 'string' &&\n typeof snapshot['templateCount'] === 'number' &&\n Array.isArray(snapshot['terminals'])\n );\n}\n\nexport enum ExitChoice {\n CANCEL = 'Vazgec',\n PRESERVE = 'Koruyarak Cik',\n CLEAN = 'Temizleyerek Cik',\n}\n\nexport interface SessionCleanupResult {\n closed: boolean;\n cancelled: boolean;\n removed: string[];\n preservedDirty: string[];\n}\n","import {\n type Layout,\n type CleanupPolicy,\n type ColorTheme,\n type WorktreeAssignment,\n type ManagedWorktree,\n createWorktreeAssignment,\n} from '../types/index.js';\nimport { BranchNexusError, ExitCode } from '../types/errors.js';\nimport { validateDistribution } from '../runtime/wsl.js';\nimport { buildLayoutCommands } from '../tmux/layouts.js';\nimport { startSession } from '../tmux/session.js';\nimport { WorktreeManager } from '../git/worktree.js';\nimport { materializeRemoteBranch } from '../git/clone.js';\nimport { logger } from '../utils/logger.js';\nimport { Platform, detectPlatform } from '../runtime/platform.js';\n\nexport interface OrchestrationRequest {\n distribution: string;\n availableDistributions: string[];\n layout: Layout;\n cleanupPolicy: CleanupPolicy;\n assignments: WorktreeAssignment[];\n worktreeBase: string;\n sessionName?: string;\n tmuxAutoInstall: boolean;\n colorTheme?: ColorTheme;\n paneNames?: string[];\n displayBranches?: string[];\n startupCommands?: string[];\n}\n\nexport interface OrchestrationResult {\n worktrees: ManagedWorktree[];\n executedCommands: string[][];\n}\n\nexport async function orchestrate(request: OrchestrationRequest): Promise<OrchestrationResult> {\n const platform = detectPlatform();\n const isWindows = platform === Platform.WINDOWS;\n const sessionName =\n request.sessionName !== undefined && request.sessionName !== ''\n ? request.sessionName\n : 'branchnexus';\n\n logger.debug(\n `Starting orchestration distribution=${request.distribution} layout=${request.layout} panes=${request.assignments.length}`\n );\n\n // Validate WSL distribution on Windows\n if (isWindows && request.distribution !== '') {\n if (!validateDistribution(request.distribution, request.availableDistributions)) {\n logger.error(`Invalid WSL distribution: ${request.distribution}`);\n throw new BranchNexusError(\n `Invalid WSL distribution: ${request.distribution}`,\n ExitCode.RUNTIME_ERROR,\n 'Re-open WSL selection and choose a discovered distribution.'\n );\n }\n }\n\n // tmux check is done in run.ts before orchestrate\n logger.debug('Proceeding with orchestration');\n\n const worktreeManager = new WorktreeManager(request.worktreeBase, request.cleanupPolicy);\n\n if (isWindows) {\n worktreeManager.setPosixMode(true);\n }\n\n const executedCommands: string[][] = [];\n\n // Materialize remote branches\n const normalizedAssignments: WorktreeAssignment[] = [];\n logger.debug('Preparing selected branches');\n\n for (const assignment of request.assignments.sort((a, b) => a.pane - b.pane)) {\n let localBranch = assignment.branch;\n\n if (assignment.branch.startsWith('origin/')) {\n logger.debug(\n `Materializing remote branch pane=${assignment.pane} repo=${assignment.repoPath} branch=${assignment.branch}`\n );\n\n localBranch = await materializeRemoteBranch(assignment.repoPath, assignment.branch);\n }\n\n normalizedAssignments.push(\n createWorktreeAssignment(assignment.pane, assignment.repoPath, localBranch)\n );\n }\n\n logger.debug(`Prepared ${normalizedAssignments.length} pane assignments`);\n\n let worktrees: ManagedWorktree[] = [];\n\n try {\n // Create worktrees\n logger.debug('Creating worktrees');\n worktrees = await worktreeManager.materialize(\n normalizedAssignments,\n isWindows ? request.distribution : undefined\n );\n logger.debug(`Created ${worktrees.length} worktrees`);\n\n // Build tmux layout commands\n const sorted = worktrees.sort((a, b) => a.pane - b.pane);\n const panePaths = sorted.map((w) => w.path);\n // Use original branch names for display, not internal fork names like main-pane-2\n const paneBranches = request.displayBranches ?? sorted.map((w) => w.branch);\n\n const tmuxCommands = buildLayoutCommands(\n sessionName, request.layout, panePaths, request.colorTheme, paneBranches, request.paneNames,\n request.startupCommands\n );\n\n // Start tmux session\n logger.debug('Starting tmux session');\n await startSession(sessionName, tmuxCommands, isWindows ? request.distribution : undefined);\n\n logger.debug('Orchestration finished successfully');\n\n return {\n worktrees,\n executedCommands,\n };\n } catch (error) {\n // Rollback on failure\n if (worktrees.length > 0) {\n try {\n const removed = await worktreeManager.cleanup({\n ignorePolicy: true,\n selected: worktrees,\n distribution: isWindows ? request.distribution : undefined,\n });\n logger.warn(`Orchestration rollback removed ${removed.length} worktrees`);\n } catch (cleanupError) {\n logger.error(`Orchestration rollback cleanup failed: ${String(cleanupError)}`);\n }\n }\n\n throw error;\n }\n}\n","import { execa } from 'execa';\nimport { logger } from '../utils/logger.js';\nimport { BranchNexusError, ExitCode } from '../types/errors.js';\nimport { Platform, detectPlatform } from './platform.js';\n\nexport async function listDistributions(): Promise<string[]> {\n logger.debug('Listing WSL distributions using wsl.exe -l -q');\n\n if (detectPlatform() !== Platform.WINDOWS) {\n throw new BranchNexusError(\n 'WSL is only available on Windows',\n ExitCode.UNSUPPORTED_PLATFORM,\n 'Use native tmux on this platform.'\n );\n }\n\n try {\n const result = await execa('wsl.exe', ['-l', '-q'], {\n encoding: 'buffer',\n });\n\n const output = decodeWslOutput(result.stdout);\n const distros = output\n .split('\\n')\n .map((line) => line.trim())\n .filter((line) => line.length > 0)\n .sort();\n\n if (distros.length === 0) {\n throw new BranchNexusError(\n 'No WSL distributions were found.',\n ExitCode.RUNTIME_ERROR,\n 'Install a distribution using `wsl --install` and retry.'\n );\n }\n\n logger.debug(`Discovered ${distros.length} WSL distributions`);\n return distros;\n } catch (error) {\n if (error instanceof BranchNexusError) {\n throw error;\n }\n\n const message = error instanceof Error ? error.message : String(error);\n throw new BranchNexusError(\n 'Failed to list WSL distributions.',\n ExitCode.RUNTIME_ERROR,\n message\n );\n }\n}\n\nfunction decodeWslOutput(buffer: Buffer): string {\n if (buffer.includes(0x00)) {\n try {\n return buffer.toString('utf-16le').replace(/\\ufeff/g, '');\n } catch {\n // Fall through\n }\n }\n return buffer.toString('utf-8');\n}\n\nexport function validateDistribution(distribution: string, available: string[]): boolean {\n return available.includes(distribution);\n}\n\nexport function buildWslCommand(distribution: string, command: string[]): string[] {\n if (distribution === '') {\n throw new BranchNexusError(\n 'WSL distribution is required.',\n ExitCode.VALIDATION_ERROR,\n 'Select a distribution before orchestration.'\n );\n }\n\n if (command.length === 0) {\n throw new BranchNexusError(\n 'Runtime command is empty.',\n ExitCode.VALIDATION_ERROR,\n 'Provide a command to execute in WSL.'\n );\n }\n\n return ['wsl.exe', '-d', distribution, '--', ...command];\n}\n\nexport async function toWslPath(distribution: string, hostPath: string): Promise<string> {\n const normalized = hostPath.replace(/\\\\/g, '/');\n\n if (normalized.startsWith('/') && !normalized.startsWith('//')) {\n return normalized;\n }\n\n try {\n const cmd = buildWslCommand(distribution, ['wslpath', '-a', normalized]);\n const result = await execa(cmd[0], cmd.slice(1));\n const wslPath = result.stdout.trim();\n\n if (wslPath !== '') {\n return wslPath;\n }\n } catch {\n // Fall through to fallback\n }\n\n return fallbackWindowsToWslPath(normalized);\n}\n\nfunction fallbackWindowsToWslPath(hostPath: string): string {\n const match = hostPath.match(/^([A-Za-z]):[/\\\\](.*)$/);\n if (!match) {\n return hostPath;\n }\n\n const drive = match[1].toLowerCase();\n const rest = match[2].replace(/[/\\\\]/g, '/').replace(/\\/+$/, '');\n\n if (rest === '') {\n return `/mnt/${drive}`;\n }\n\n return `/mnt/${drive}/${rest}`;\n}\n\nexport function distributionUnreachableMessage(distribution: string): string {\n return (\n `Selected WSL distribution '${distribution}' is not reachable. ` +\n 'Choose another distribution or start this one manually and retry.'\n );\n}\n","import * as os from 'node:os';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { execa } from 'execa';\n\nexport enum Platform {\n WINDOWS = 'windows',\n MACOS = 'macos',\n LINUX = 'linux',\n}\n\nexport function detectPlatform(): Platform {\n const platform = os.platform();\n\n if (platform === 'win32') {\n return Platform.WINDOWS;\n }\n\n if (platform === 'darwin') {\n return Platform.MACOS;\n }\n\n return Platform.LINUX;\n}\n\nexport function isWSL(): boolean {\n if (detectPlatform() !== Platform.LINUX) {\n return false;\n }\n\n try {\n const version = fs.readFileSync('/proc/version', 'utf-8');\n return version.toLowerCase().includes('microsoft');\n } catch {\n return false;\n }\n}\n\nexport async function hasTmux(): Promise<boolean> {\n try {\n await execa('tmux', ['-V']);\n return true;\n } catch {\n return false;\n }\n}\n\nexport async function getTmuxVersion(): Promise<string | null> {\n try {\n const result = await execa('tmux', ['-V']);\n const match = result.stdout.match(/tmux\\s+(\\d+\\.\\d+)/);\n return match ? match[1] : null;\n } catch {\n return null;\n }\n}\n\nexport function expandHomeDir(filepath: string): string {\n if (filepath.startsWith('~/')) {\n return path.join(os.homedir(), filepath.slice(2));\n }\n return filepath;\n}\n\nexport function getHomeDir(): string {\n return os.homedir();\n}\n\nexport function getPlatformInfo(): {\n platform: Platform;\n isWSL: boolean;\n arch: string;\n homedir: string;\n} {\n return {\n platform: detectPlatform(),\n isWSL: isWSL(),\n arch: os.arch(),\n homedir: os.homedir(),\n };\n}\n","import { type Layout, type ColorTheme } from '../types/index.js';\nimport { BranchNexusError, ExitCode } from '../types/errors.js';\n\nexport interface PaneTarget {\n paneIndex: number;\n worktreePath: string;\n}\n\nconst VALID_LAYOUTS = new Set(['horizontal', 'vertical', 'grid']);\n\nexport function validateLayout(layout: string, panes: number): void {\n if (!VALID_LAYOUTS.has(layout)) {\n throw new BranchNexusError(\n `Unsupported layout: ${layout}`,\n ExitCode.VALIDATION_ERROR,\n 'Use horizontal, vertical, or grid.'\n );\n }\n\n if (panes < 1 || panes > 6) {\n throw new BranchNexusError(\n `Invalid pane count: ${panes}`,\n ExitCode.VALIDATION_ERROR,\n 'Use a pane value between 1 and 6.'\n );\n }\n}\n\nexport function buildLayoutCommands(\n sessionName: string,\n layout: Layout,\n panePaths: string[],\n colorTheme?: ColorTheme,\n paneBranches?: string[],\n paneNames?: string[],\n startupCommands?: string[]\n): string[][] {\n const panes = panePaths.length;\n validateLayout(layout, panes);\n\n const tmuxColor = colorTheme ?? 'cyan';\n\n const commands: string[][] = [\n ['tmux', 'new-session', '-d', '-s', sessionName, '-c', panePaths[0]],\n ['tmux', 'set-option', '-t', sessionName, 'mouse', 'on'],\n ['tmux', 'bind-key', '-n', 'WheelUpPane', 'send-keys', '-M'],\n ['tmux', 'bind-key', '-n', 'WheelDownPane', 'send-keys', '-M'],\n // Apply color theme\n ['tmux', 'set-option', '-t', sessionName, 'status-style', `bg=${tmuxColor},fg=black`],\n ['tmux', 'set-option', '-t', sessionName, 'pane-border-style', `fg=${tmuxColor}`],\n ['tmux', 'set-option', '-t', sessionName, 'pane-active-border-style', `fg=${tmuxColor},bold`],\n ['tmux', 'set-option', '-t', sessionName, 'status-left', ` ${sessionName} `],\n ['tmux', 'set-option', '-t', sessionName, 'status-left-style', `bg=${tmuxColor},fg=black,bold`],\n ['tmux', 'set-option', '-t', sessionName, 'status-right', ' %H:%M %d-%b-%y '],\n ['tmux', 'set-option', '-t', sessionName, 'status-right-style', `bg=${tmuxColor},fg=black`],\n ['tmux', 'set-option', '-t', sessionName, 'window-status-format', ''],\n ['tmux', 'set-option', '-t', sessionName, 'window-status-current-format', ''],\n // Pane border labels with blinking indicator for active pane\n ['tmux', 'set-option', '-t', sessionName, 'pane-border-status', 'top'],\n ['tmux', 'set-option', '-t', sessionName, 'pane-border-format',\n `#{?pane_active,#[fg=${tmuxColor}#,blink] ● #[noblink#,bold]#{pane_title} #[default],#[fg=grey] ○ #{pane_title} #[default]}`],\n ];\n\n function paneTitle(index: number): string {\n const customName = paneNames?.[index] ?? '';\n const branch = paneBranches?.[index]?.replace(/^origin\\//, '') ?? '';\n if (customName !== '') return `${customName} [${branch}]`;\n return `Pane ${index} [${branch}]`;\n }\n\n // Set pane title for first pane (pane 0)\n commands.push([\n 'tmux', 'select-pane', '-t', `${sessionName}:0.0`,\n '-T', paneTitle(0),\n ]);\n\n for (let index = 1; index < panes; index++) {\n let splitFlag: string;\n if (layout === 'horizontal') {\n splitFlag = '-h';\n } else if (layout === 'vertical') {\n splitFlag = '-v';\n } else {\n splitFlag = index % 2 === 0 ? '-v' : '-h';\n }\n\n commands.push([\n 'tmux',\n 'split-window',\n splitFlag,\n '-t',\n `${sessionName}:0`,\n '-c',\n panePaths[index],\n ]);\n\n commands.push([\n 'tmux', 'select-pane', '-t', `${sessionName}:0.${index}`,\n '-T', paneTitle(index),\n ]);\n }\n\n let tmuxLayout: string;\n if (layout === 'horizontal') {\n tmuxLayout = 'even-horizontal';\n } else if (layout === 'vertical') {\n tmuxLayout = 'even-vertical';\n } else {\n tmuxLayout = 'tiled';\n }\n\n commands.push(['tmux', 'select-layout', '-t', `${sessionName}:0`, tmuxLayout]);\n\n commands.push([\n 'tmux',\n 'set-hook',\n '-t',\n sessionName,\n 'client-resized',\n `select-layout -t ${sessionName}:0 ${tmuxLayout}`,\n ]);\n\n commands.push(['tmux', 'select-pane', '-t', `${sessionName}:0.0`]);\n\n // Send startup commands to each pane\n if (startupCommands !== undefined && startupCommands.length > 0) {\n for (let i = 0; i < panes; i++) {\n const cmd = startupCommands[i];\n if (cmd !== undefined && cmd.trim() !== '') {\n commands.push([\n 'tmux', 'send-keys', '-t', `${sessionName}:0.${i}`, cmd.trim(), 'Enter',\n ]);\n }\n }\n }\n\n return commands;\n}\n\nexport function mapPaneTargets(panePaths: string[]): PaneTarget[] {\n return panePaths.map((path, index) => ({\n paneIndex: index,\n worktreePath: path,\n }));\n}\n","import { runCommand, runCommandViaWSL } from '../runtime/shell.js';\nimport { buildWslCommand } from '../runtime/wsl.js';\nimport { logger } from '../utils/logger.js';\nimport { BranchNexusError, ExitCode } from '../types/errors.js';\nimport { Platform, detectPlatform } from '../runtime/platform.js';\n\nconst DEFAULT_SESSION_NAME = 'branchnexus';\n\nexport async function startSession(\n sessionName: string,\n commands: string[][],\n distribution?: string\n): Promise<void> {\n const isWindows = detectPlatform() === Platform.WINDOWS;\n\n logger.debug(`Starting tmux session: ${sessionName}`);\n\n for (const command of commands) {\n const wrappedCommand =\n isWindows && distribution !== undefined && distribution !== ''\n ? buildWslCommand(distribution, command)\n : command;\n\n logger.debug(`Executing tmux command: ${wrappedCommand.join(' ')}`);\n\n const result =\n isWindows && distribution !== undefined && distribution !== ''\n ? await runCommandViaWSL(distribution, command)\n : await runCommand(wrappedCommand);\n\n if (result.exitCode !== 0) {\n const stderr = result.stderr.trim();\n\n // Check for duplicate session\n const isNewSession = command[0] === 'tmux' && command[1] === 'new-session';\n if (isNewSession && stderr.toLowerCase().includes('duplicate session')) {\n logger.warn(`tmux session already exists: ${sessionName}, replacing`);\n\n // Kill existing session and retry\n await killSession(sessionName, distribution);\n\n const retryResult =\n isWindows && distribution !== undefined && distribution !== ''\n ? await runCommandViaWSL(distribution, command)\n : await runCommand(wrappedCommand);\n\n if (retryResult.exitCode !== 0) {\n throw new BranchNexusError(\n 'Failed to initialize tmux session.',\n ExitCode.TMUX_ERROR,\n retryResult.stderr || 'tmux command failed'\n );\n }\n\n continue;\n }\n\n throw new BranchNexusError(\n 'Failed to initialize tmux session.',\n ExitCode.TMUX_ERROR,\n stderr || 'tmux command failed'\n );\n }\n }\n\n logger.info(`tmux session ready: ${sessionName}`);\n}\n\nexport async function killSession(sessionName: string, distribution?: string): Promise<void> {\n const isWindows = detectPlatform() === Platform.WINDOWS;\n const command = ['tmux', 'kill-session', '-t', sessionName];\n\n logger.debug(`Killing tmux session: ${sessionName}`);\n\n const result =\n isWindows && distribution !== undefined && distribution !== ''\n ? await runCommandViaWSL(distribution, command)\n : await runCommand(command);\n\n if (result.exitCode !== 0) {\n logger.warn(`Failed to kill session: ${result.stderr}`);\n }\n}\n\nexport async function sessionExists(sessionName: string, distribution?: string): Promise<boolean> {\n const isWindows = detectPlatform() === Platform.WINDOWS;\n const command = ['tmux', 'has-session', '-t', sessionName];\n\n const result =\n isWindows && distribution !== undefined && distribution !== ''\n ? await runCommandViaWSL(distribution, command)\n : await runCommand(command);\n\n return result.exitCode === 0;\n}\n\nexport async function attachSession(sessionName: string, distribution?: string): Promise<void> {\n const isWindows = detectPlatform() === Platform.WINDOWS;\n const command = ['tmux', 'attach-session', '-t', sessionName];\n\n logger.info(`Attaching to tmux session: ${sessionName}`);\n\n // This will take over the terminal\n const result =\n isWindows && distribution !== undefined && distribution !== ''\n ? await runCommandViaWSL(distribution, command)\n : await runCommand(command);\n\n if (result.exitCode !== 0) {\n throw new BranchNexusError(\n `Failed to attach to session: ${sessionName}`,\n ExitCode.TMUX_ERROR,\n result.stderr\n );\n }\n}\n\nexport function getDefaultSessionName(): string {\n return DEFAULT_SESSION_NAME;\n}\n\nexport async function listSessions(distribution?: string): Promise<string[]> {\n const isWindows = detectPlatform() === Platform.WINDOWS;\n const command = ['tmux', 'list-sessions', '-F', '#{session_name}'];\n\n try {\n const result =\n isWindows && distribution !== undefined && distribution !== ''\n ? await runCommandViaWSL(distribution, command)\n : await runCommand(command);\n\n if (result.exitCode !== 0) {\n return [];\n }\n\n return result.stdout\n .split('\\n')\n .map((s) => s.trim())\n .filter((s) => s.length > 0);\n } catch {\n return [];\n }\n}\n","import { execa, type ExecaError } from 'execa';\nimport { logger } from '../utils/logger.js';\nimport { BranchNexusError, ExitCode } from '../types/errors.js';\nimport { buildWslCommand } from './wsl.js';\n\nexport interface ShellResult {\n exitCode: number;\n stdout: string;\n stderr: string;\n}\n\nexport interface RunCommandOptions {\n cwd?: string;\n timeout?: number;\n captureOutput?: boolean;\n input?: string;\n}\n\nexport async function runCommand(\n command: string[],\n options: RunCommandOptions = {}\n): Promise<ShellResult> {\n const [cmd, ...args] = command;\n logger.debug(`Running command: ${command.join(' ')}`);\n\n try {\n const result = await execa(cmd, args, {\n cwd: options.cwd,\n timeout: options.timeout ?? 30000,\n input: options.input,\n reject: false,\n all: true,\n });\n\n return {\n exitCode: result.exitCode,\n stdout: result.stdout,\n stderr: result.stderr,\n };\n } catch (error) {\n const execaError = error as ExecaError;\n return {\n exitCode: execaError.exitCode ?? 1,\n stdout: execaError.stdout ?? '',\n stderr: execaError.stderr ?? execaError.message,\n };\n }\n}\n\nexport async function runCommandViaWSL(\n distribution: string,\n command: string[],\n options: RunCommandOptions = {}\n): Promise<ShellResult> {\n const wrapped = buildWslCommand(distribution, command);\n logger.debug(`Running WSL command: ${wrapped.join(' ')}`);\n return runCommand(wrapped, options);\n}\n\nexport async function runCommandChecked(\n command: string[],\n options: RunCommandOptions = {}\n): Promise<ShellResult> {\n const result = await runCommand(command, options);\n\n if (result.exitCode !== 0) {\n throw new BranchNexusError(\n `Command failed: ${command.join(' ')}`,\n ExitCode.RUNTIME_ERROR,\n result.stderr || `Exit code: ${result.exitCode}`\n );\n }\n\n return result;\n}\n\nexport async function runCommandViaWSLChecked(\n distribution: string,\n command: string[],\n options: RunCommandOptions = {}\n): Promise<ShellResult> {\n const result = await runCommandViaWSL(distribution, command, options);\n\n if (result.exitCode !== 0) {\n throw new BranchNexusError(\n `WSL command failed: ${command.join(' ')}`,\n ExitCode.RUNTIME_ERROR,\n result.stderr || `Exit code: ${result.exitCode}`\n );\n }\n\n return result;\n}\n","import { logger } from '../utils/logger.js';\nimport { BranchNexusError, ExitCode } from '../types/errors.js';\nimport {\n type WorktreeAssignment,\n type ManagedWorktree,\n type CleanupPolicy,\n createManagedWorktree,\n} from '../types/index.js';\nimport { runCommand, runCommandViaWSL } from '../runtime/shell.js';\n\nconst SANITIZE_PATTERN = /[^A-Za-z0-9._-]+/g;\n\nexport class WorktreeManager {\n private baseDir: string;\n private cleanupPolicy: CleanupPolicy;\n private posixMode: boolean;\n private managed: ManagedWorktree[] = [];\n\n constructor(baseDir: string, cleanupPolicy: CleanupPolicy = 'session') {\n this.baseDir = baseDir;\n this.cleanupPolicy = cleanupPolicy;\n this.posixMode = false;\n }\n\n setPosixMode(enabled: boolean): void {\n this.posixMode = enabled;\n }\n\n private safe(value: string): string {\n const cleaned = value.replace(SANITIZE_PATTERN, '-').replace(/^-+|-+$/g, '');\n return cleaned || 'default';\n }\n\n private asPosix(value: string): string {\n let normalized = value.replace(/\\\\/g, '/');\n while (normalized.startsWith('//')) {\n normalized = normalized.slice(1);\n }\n return normalized;\n }\n\n private commandPath(value: string): string {\n return this.posixMode ? this.asPosix(value) : value;\n }\n\n buildWorktreePath(assignment: WorktreeAssignment): string {\n const repoName = this.safe(this.asPosix(assignment.repoPath).split('/').pop() ?? 'repo');\n // Strip bnx- prefix from branch name for cleaner path\n const branchSlug = this.safe(assignment.branch.replace(/^bnx-/, '').replace(/^origin\\//, ''));\n return `${this.baseDir}/${repoName}/${branchSlug}`;\n }\n\n async addWorktree(\n assignment: WorktreeAssignment,\n distribution?: string\n ): Promise<ManagedWorktree> {\n const target = this.buildWorktreePath(assignment);\n logger.debug(\n `Adding worktree pane=${assignment.pane} repo=${assignment.repoPath} branch=${assignment.branch} target=${target}`\n );\n\n const repoPath = this.commandPath(assignment.repoPath);\n const targetPath = this.commandPath(target);\n\n // Prune stale worktree references first\n const pruneCmd = ['git', '-C', repoPath, 'worktree', 'prune'];\n try {\n if (distribution !== undefined && distribution !== '') {\n await runCommandViaWSL(distribution, pruneCmd);\n } else {\n await runCommand(pruneCmd);\n }\n } catch {\n // ignore prune errors\n }\n\n const existingWorktrees = await this.getWorktreesForBranch(\n assignment.repoPath,\n assignment.branch,\n distribution\n );\n\n if (existingWorktrees.length > 0) {\n const existingPath = existingWorktrees[0];\n if (this.isUnderBaseDir(existingPath) || existingPath === repoPath) {\n logger.info(`Reusing existing worktree at ${existingPath}`);\n const managed = createManagedWorktree(assignment, existingPath);\n this.managed.push(managed);\n return managed;\n }\n\n // Remove stale worktree from a previous run and continue\n logger.warn(`Removing stale worktree at ${existingPath}`);\n const removeCmd = ['git', '-C', repoPath, 'worktree', 'remove', '--force', this.commandPath(existingPath)];\n try {\n if (distribution !== undefined && distribution !== '') {\n await runCommandViaWSL(distribution, removeCmd);\n } else {\n await runCommand(removeCmd);\n }\n logger.debug(`Removed stale worktree: ${existingPath}`);\n } catch {\n // If remove fails, try prune and continue\n const pruneCmd = ['git', '-C', repoPath, 'worktree', 'prune'];\n if (distribution !== undefined && distribution !== '') {\n await runCommandViaWSL(distribution, pruneCmd);\n } else {\n await runCommand(pruneCmd);\n }\n logger.debug('Pruned stale worktree references');\n }\n }\n\n const cmd = ['git', '-C', repoPath, 'worktree', 'add', targetPath, assignment.branch];\n\n try {\n if (distribution !== undefined && distribution !== '') {\n await runCommandViaWSL(distribution, cmd);\n } else {\n await runCommand(cmd);\n }\n\n logger.debug(`Created worktree at ${target}`);\n const managed = createManagedWorktree(assignment, target);\n this.managed.push(managed);\n return managed;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n throw new BranchNexusError(\n `Failed to create worktree for pane ${assignment.pane}`,\n ExitCode.GIT_ERROR,\n message\n );\n }\n }\n\n private async getCurrentBranch(repoPath: string, distribution?: string): Promise<string> {\n const cmd = ['git', '-C', repoPath, 'branch', '--show-current'];\n try {\n const result =\n distribution !== undefined && distribution !== ''\n ? await runCommandViaWSL(distribution, cmd)\n : await runCommand(cmd);\n return result.stdout.trim();\n } catch {\n return '';\n }\n }\n\n async materialize(\n assignments: WorktreeAssignment[],\n distribution?: string\n ): Promise<ManagedWorktree[]> {\n logger.debug(`Materializing ${assignments.length} worktree assignments`);\n const created: ManagedWorktree[] = [];\n\n for (const assignment of assignments.sort((a, b) => a.pane - b.pane)) {\n created.push(await this.addWorktree(assignment, distribution));\n }\n\n return created;\n }\n\n async checkDirty(worktree: ManagedWorktree, distribution?: string): Promise<boolean> {\n const cmd = ['git', '-C', this.commandPath(worktree.path), 'status', '--porcelain'];\n\n try {\n const result =\n distribution !== undefined && distribution !== ''\n ? await runCommandViaWSL(distribution, cmd)\n : await runCommand(cmd);\n\n const dirty = result.stdout.trim().length > 0;\n logger.debug(`Dirty check path=${worktree.path} dirty=${dirty}`);\n return dirty;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n throw new BranchNexusError(\n `Dirty check failed for ${worktree.path}`,\n ExitCode.GIT_ERROR,\n message\n );\n }\n }\n\n async cleanup(options?: {\n force?: boolean;\n selected?: ManagedWorktree[];\n ignorePolicy?: boolean;\n distribution?: string;\n }): Promise<string[]> {\n if (this.cleanupPolicy === 'persistent' && options?.ignorePolicy !== true) {\n logger.debug('Cleanup skipped due to persistent policy');\n return [];\n }\n\n const targets = options?.selected ?? this.managed;\n const removed: string[] = [];\n const removedPaths = new Set<string>();\n\n for (const worktree of targets) {\n const worktreePath = this.commandPath(worktree.path);\n if (removedPaths.has(worktreePath)) {\n continue;\n }\n removedPaths.add(worktreePath);\n\n const cmd = ['git', '-C', this.commandPath(worktree.repoPath), 'worktree', 'remove'];\n if (options?.force !== false) {\n cmd.push('--force');\n }\n cmd.push(worktreePath);\n\n try {\n if (options?.distribution !== undefined && options.distribution !== '') {\n await runCommandViaWSL(options.distribution, cmd);\n } else {\n await runCommand(cmd);\n }\n removed.push(worktreePath);\n logger.debug(`Removed worktree at ${worktreePath}`);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n throw new BranchNexusError(\n `Cleanup failed for ${worktreePath}`,\n ExitCode.GIT_ERROR,\n message\n );\n }\n }\n\n return removed;\n }\n\n getManaged(): ManagedWorktree[] {\n return [...this.managed];\n }\n\n getCleanupPolicy(): CleanupPolicy {\n return this.cleanupPolicy;\n }\n\n private isUnderBaseDir(path: string): boolean {\n const normalizedBase = this.asPosix(this.baseDir);\n const normalizedPath = this.asPosix(path);\n return normalizedPath.startsWith(normalizedBase);\n }\n\n private async getWorktreesForBranch(\n repoPath: string,\n branch: string,\n distribution?: string\n ): Promise<string[]> {\n const cmd = ['git', '-C', this.commandPath(repoPath), 'worktree', 'list', '--porcelain'];\n\n try {\n const result =\n distribution !== undefined && distribution !== ''\n ? await runCommandViaWSL(distribution, cmd)\n : await runCommand(cmd);\n\n const worktrees: string[] = [];\n let currentWorktree = '';\n const expectedRef = branch.startsWith('refs/heads/') ? branch : `refs/heads/${branch}`;\n\n for (const line of result.stdout.split('\\n')) {\n const trimmed = line.trim();\n if (trimmed === '') continue;\n\n if (trimmed.startsWith('worktree ')) {\n currentWorktree = trimmed.slice(9).trim();\n } else if (trimmed.startsWith('branch ') && currentWorktree !== '') {\n const branchRef = trimmed.slice(7).trim();\n if (branchRef === expectedRef) {\n worktrees.push(currentWorktree);\n }\n }\n }\n\n return worktrees;\n } catch {\n return [];\n }\n }\n}\n","import simpleGit, { type SimpleGit } from 'simple-git';\nimport { logger } from '../utils/logger.js';\nimport { BranchNexusError, ExitCode } from '../types/errors.js';\nimport { posixPath } from '../utils/validators.js';\n\nexport async function materializeRemoteBranch(\n repoPath: string,\n remoteBranch: string,\n _distribution?: string\n): Promise<string> {\n const normalizedRepo = posixPath(repoPath);\n\n if (!remoteBranch.includes('/')) {\n throw new BranchNexusError(\n `Invalid remote branch format: ${remoteBranch}`,\n ExitCode.VALIDATION_ERROR,\n 'Use branch names like origin/feature-x.'\n );\n }\n\n const localBranch = remoteBranch.split('/').slice(1).join('/');\n logger.debug(\n `Materializing remote branch repo=${normalizedRepo} remote=${remoteBranch} local=${localBranch}`\n );\n\n const git: SimpleGit = simpleGit(normalizedRepo);\n\n try {\n const localBranches = await git.branchLocal();\n if (localBranches.all.includes(localBranch)) {\n logger.debug(`Local branch already exists: ${localBranch}`);\n return localBranch;\n }\n } catch {\n // Continue with creation\n }\n\n try {\n await git.branch(['--track', localBranch, remoteBranch]);\n logger.debug(`Created tracking branch: ${localBranch}`);\n return localBranch;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n throw new BranchNexusError(\n `Failed to materialize remote branch ${remoteBranch}`,\n ExitCode.GIT_ERROR,\n message\n );\n }\n}\n\nexport async function fetchRemote(repoPath: string, remote = 'origin'): Promise<void> {\n const git: SimpleGit = simpleGit(posixPath(repoPath));\n\n try {\n await git.fetch(remote);\n logger.debug(`Fetched remote: ${remote}`);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n throw new BranchNexusError(`Failed to fetch from ${remote}`, ExitCode.GIT_ERROR, message);\n }\n}\n\nexport async function cloneRepository(url: string, targetPath: string): Promise<void> {\n logger.debug(`Cloning repository ${url} to ${targetPath}`);\n\n const git: SimpleGit = simpleGit();\n\n try {\n await git.clone(url, targetPath);\n logger.debug(`Cloned repository to ${targetPath}`);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n throw new BranchNexusError(`Failed to clone repository: ${url}`, ExitCode.GIT_ERROR, message);\n }\n}\n","import {\n AppConfigSchema,\n LayoutSchema,\n CleanupPolicySchema,\n PresetConfigSchema,\n type AppConfig,\n type Layout,\n type CleanupPolicy,\n type PresetConfig,\n} from '../types/index.js';\n\nexport {\n AppConfigSchema,\n LayoutSchema,\n CleanupPolicySchema,\n PresetConfigSchema,\n type AppConfig,\n type Layout,\n type CleanupPolicy,\n type PresetConfig,\n};\n\nexport function validateConfig(config: unknown): AppConfig {\n return AppConfigSchema.parse(config);\n}\n\nexport function validateLayout(value: string): Layout {\n return LayoutSchema.parse(value);\n}\n\nexport function validateCleanupPolicy(value: string): CleanupPolicy {\n return CleanupPolicySchema.parse(value);\n}\n\nexport function validatePresetConfig(config: unknown): PresetConfig {\n return PresetConfigSchema.parse(config);\n}\n\nexport function isValidLayout(value: string): value is Layout {\n return LayoutSchema.safeParse(value).success;\n}\n\nexport function isValidCleanupPolicy(value: string): value is CleanupPolicy {\n return CleanupPolicySchema.safeParse(value).success;\n}\n\nexport function isValidPaneCount(value: number): boolean {\n return Number.isInteger(value) && value >= 2 && value <= 6;\n}\n\nexport function isValidTerminalCount(value: number): boolean {\n return Number.isInteger(value) && value >= 2 && value <= 16;\n}\n\nconst SANITIZE_PATTERN = /[^A-Za-z0-9._-]+/g;\n\nexport function sanitizePathSegment(value: string): string {\n const cleaned = value.replace(SANITIZE_PATTERN, '-').replace(/^-+|-+$/g, '');\n return cleaned || 'default';\n}\n\nexport function normalizePath(path: string): string {\n return path.replace(/\\\\/g, '/');\n}\n\nexport function posixPath(path: string): string {\n let normalized = normalizePath(path);\n while (normalized.startsWith('//')) {\n normalized = normalized.slice(1);\n }\n return normalized;\n}\n","import inquirer from 'inquirer';\nimport { listDistributions } from '../runtime/wsl.js';\nimport { loadConfig, setWslDistribution } from '../core/config.js';\nimport { detectPlatform, Platform } from '../runtime/platform.js';\nimport { BranchNexusError, ExitCode } from '../types/errors.js';\nimport { logger } from '../utils/logger.js';\n\nexport async function promptWslDistribution(): Promise<string> {\n const platform = detectPlatform();\n\n if (platform !== Platform.WINDOWS) {\n throw new BranchNexusError(\n 'WSL is only available on Windows',\n ExitCode.UNSUPPORTED_PLATFORM,\n 'Use native tmux on this platform.'\n );\n }\n\n const config = loadConfig();\n const cachedDistribution = config.wslDistribution;\n\n logger.debug('Prompting for WSL distribution');\n\n const distributions = await listDistributions();\n\n if (cachedDistribution && distributions.includes(cachedDistribution)) {\n const { useCached } = await inquirer.prompt<{\n useCached: boolean;\n }>([\n {\n type: 'confirm',\n name: 'useCached',\n message: `Use cached distribution \"${cachedDistribution}\"?`,\n default: true,\n },\n ]);\n\n if (useCached) {\n logger.debug(`Using cached distribution: ${cachedDistribution}`);\n return cachedDistribution;\n }\n }\n\n const { distribution } = await inquirer.prompt<{\n distribution: string;\n }>([\n {\n type: 'list',\n name: 'distribution',\n message: 'Select WSL distribution:',\n choices: distributions.map((d) => ({ name: d, value: d })),\n },\n ]);\n\n setWslDistribution(distribution);\n logger.debug(`Selected distribution: ${distribution}`);\n\n return distribution;\n}\n","import * as p from '@clack/prompts';\nimport * as readline from 'node:readline';\nimport chalk from 'chalk';\nimport { type Layout, type CleanupPolicy, type ColorTheme } from '../types/index.js';\nimport { loadConfig, setGithubToken, saveConfig } from '../core/config.js';\nimport { loadPresets, applyPreset } from '../core/presets.js';\nimport {\n formatPreview,\n type ColorPalette,\n getPalette,\n PALETTE_KEYS,\n COLOR_PALETTES,\n} from '../utils/theme.js';\nimport { showGitHubBrowser } from './github-browser.js';\n\nexport interface PanelResult {\n token: string | null;\n repoUrl: string;\n repoUrls: string[];\n layout: Layout;\n paneCount: number;\n cleanup: CleanupPolicy;\n colorTheme: ColorTheme;\n}\n\n/* ── Option constants ─────────────────────────────────── */\n\nconst LAYOUTS: { value: Layout; label: string }[] = [\n { value: 'grid', label: 'Grid (2x2)' },\n { value: 'horizontal', label: 'Yatay' },\n { value: 'vertical', label: 'Dikey' },\n];\n\nconst PANE_OPTIONS = [1, 2, 3, 4, 5, 6];\n\nconst CLEANUP_OPTIONS: { value: CleanupPolicy; label: string }[] = [\n { value: 'session', label: 'Session' },\n { value: 'persistent', label: 'Persistent' },\n];\n\n/* ── Field IDs (panel form) ───────────────────────────── */\n\nconst FIELD = {\n HAS_TOKEN: 0,\n TOKEN: 1,\n REPO: 2,\n LAYOUT: 3,\n PANES: 4,\n CLEANUP: 5,\n COLOR: 6,\n SUBMIT: 7,\n} as const;\n\nconst COLOR_OPTIONS = PALETTE_KEYS.map((key) => ({\n value: key as ColorTheme,\n label: COLOR_PALETTES[key].label,\n}));\n\n/* ── Shared types & helpers ───────────────────────────── */\n\ninterface KeypressKey {\n name?: string;\n ctrl?: boolean;\n meta?: boolean;\n shift?: boolean;\n}\n\n// eslint-disable-next-line no-control-regex\nconst ANSI_RE = /[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:[a-zA-Z\\d]*(?:;[-a-zA-Z\\d/#&.:=?%@~_]*)*)?\\u0007)|(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))/g;\nconst CLR = '\\x1B[K';\n\nfunction stripAnsi(str: string): string {\n return str.replace(ANSI_RE, '');\n}\n\nfunction visibleLength(str: string): number {\n return stripAnsi(str).length;\n}\n\nfunction padToWidth(content: string, width: number): string {\n const pad = Math.max(0, width - visibleLength(content));\n return content + ' '.repeat(pad);\n}\n\nfunction boxLine(content: string, width: number): string {\n return '║' + padToWidth(content, width) + '║' + CLR;\n}\n\nfunction boxTop(title: string, width: number, pal: ColorPalette): string {\n const tPad = Math.floor((width - title.length) / 2);\n return '╔' + '═'.repeat(tPad) + pal.primaryBold(title) + '═'.repeat(width - tPad - title.length) + '╗' + CLR;\n}\n\nfunction boxMid(width: number): string {\n return '╠' + '═'.repeat(width) + '╣' + CLR;\n}\n\nfunction boxBottom(width: number): string {\n return '╚' + '═'.repeat(width) + '╝' + CLR;\n}\n\nfunction selectDisplay(label: string, focused: boolean, pal: ColorPalette): string {\n if (focused) {\n return chalk.dim('◀ ') + pal.primaryBold(label) + chalk.dim(' ▶');\n }\n return chalk.white(label);\n}\n\nfunction renderButton(label: string, focused: boolean, width: number, pal: ColorPalette): string {\n const btn = focused ? pal.bg(` ▶ ${label} `) : chalk.dim(` ▶ ${label} `);\n const btnLen = visibleLength(btn);\n const left = Math.floor((width - btnLen) / 2);\n const right = Math.max(0, width - left - btnLen);\n return '║' + ' '.repeat(left) + btn + ' '.repeat(right) + '║' + CLR;\n}\n\n/** Shared keypress loop — returns a promise + teardown hook */\nfunction attachKeypress(\n handler: (str: string | undefined, key: KeypressKey) => void\n): { teardown: () => void } {\n readline.emitKeypressEvents(process.stdin);\n const wasRaw = process.stdin.isRaw ?? false;\n if (process.stdin.isTTY === true) {\n process.stdin.setRawMode(true);\n }\n process.stdin.resume();\n\n function onKey(str: string | undefined, key: KeypressKey): void {\n if (key === undefined || key === null) return;\n if (key.ctrl === true && key.name === 'c') {\n teardown();\n process.exit(0);\n }\n handler(str, key);\n }\n\n function teardown(): void {\n process.stdin.removeListener('keypress', onKey);\n if (process.stdin.isTTY === true) {\n process.stdin.setRawMode(wasRaw);\n }\n process.stdout.write('\\x1B[?25h');\n process.stdin.pause();\n }\n\n process.stdin.on('keypress', onKey);\n return { teardown };\n}\n\nfunction createDrawFn(renderFn: () => string): (editing: boolean) => void {\n let first = true;\n return (editing: boolean): void => {\n process.stdout.write(first ? '\\x1B[2J\\x1B[H' : '\\x1B[H');\n first = false;\n process.stdout.write(editing ? '\\x1B[?25h' : '\\x1B[?25l');\n process.stdout.write(renderFn() + '\\x1B[J\\n');\n };\n}\n\n/* ═══════════════════════════════════════════════════════\n PANEL FORM (config)\n ═══════════════════════════════════════════════════════ */\n\ninterface PanelState {\n focusIndex: number;\n editing: boolean;\n editBuffer: string;\n error: string;\n hasToken: boolean;\n token: string;\n repoUrl: string;\n layoutIndex: number;\n panesIndex: number;\n cleanupIndex: number;\n colorIndex: number;\n}\n\nfunction getPanelNav(state: PanelState): number[] {\n const fields: number[] = [FIELD.HAS_TOKEN];\n if (state.hasToken) {\n fields.push(FIELD.TOKEN);\n }\n fields.push(FIELD.REPO, FIELD.LAYOUT, FIELD.PANES, FIELD.CLEANUP, FIELD.COLOR, FIELD.SUBMIT);\n return fields;\n}\n\nfunction renderPanel(state: PanelState): string {\n const W = 58;\n const LBL_W = 17;\n const lines: string[] = [];\n const pal = getPalette(COLOR_OPTIONS[state.colorIndex].value);\n\n function fRow(id: number, label: string, value: string): string {\n const focused = state.focusIndex === id;\n const ptr = focused ? pal.primary('❯') : ' ';\n const lbl = focused ? pal.primaryBold(label.padEnd(LBL_W)) : chalk.white(label.padEnd(LBL_W));\n return boxLine(` ${ptr} ${lbl} ${value}`, W);\n }\n\n lines.push(boxTop(' BranchNexus ', W, pal));\n lines.push(boxLine(' ' + chalk.dim('Multi-Branch Workspace Manager'), W));\n lines.push(boxMid(W));\n lines.push(boxLine('', W));\n\n // 1) GitHub Token toggle\n const tokLabel = state.hasToken ? 'Evet' : 'Hayır';\n lines.push(fRow(FIELD.HAS_TOKEN, 'GitHub Token', selectDisplay(tokLabel, state.focusIndex === FIELD.HAS_TOKEN, pal)));\n\n // 2) Token input (conditional)\n if (state.hasToken) {\n let tv: string;\n if (state.focusIndex === FIELD.TOKEN && state.editing) {\n tv = pal.primary(state.editBuffer + '█');\n } else if (state.token !== '') {\n tv = chalk.dim('*'.repeat(Math.min(state.token.length, 20)));\n } else {\n tv = chalk.dim('(Enter ile girin)');\n }\n lines.push(fRow(FIELD.TOKEN, ' Token', tv));\n }\n\n // 3) Repository URL\n let rv: string;\n if (state.focusIndex === FIELD.REPO && state.editing) {\n const buf = state.editBuffer;\n rv = pal.primary((buf.length > 28 ? '...' + buf.slice(-25) : buf) + '█');\n } else if (state.repoUrl !== '') {\n const s = state.repoUrl;\n rv = chalk.white(s.length > 30 ? s.slice(0, 27) + '...' : s);\n } else {\n rv = chalk.dim('(Enter ile girin)');\n }\n lines.push(fRow(FIELD.REPO, 'Repository URL', rv));\n\n // 4) Layout\n lines.push(fRow(FIELD.LAYOUT, 'Layout', selectDisplay(LAYOUTS[state.layoutIndex].label, state.focusIndex === FIELD.LAYOUT, pal)));\n\n // 5) Pane Count\n lines.push(fRow(FIELD.PANES, 'Pane Sayısı', selectDisplay(String(PANE_OPTIONS[state.panesIndex]), state.focusIndex === FIELD.PANES, pal)));\n\n // 6) Cleanup\n lines.push(fRow(FIELD.CLEANUP, 'Cleanup', selectDisplay(CLEANUP_OPTIONS[state.cleanupIndex].label, state.focusIndex === FIELD.CLEANUP, pal)));\n\n // 7) Color Theme\n const colorLabel = COLOR_OPTIONS[state.colorIndex].label;\n const colorPreview = pal.primary('■ ') + colorLabel;\n lines.push(fRow(FIELD.COLOR, 'Renk', selectDisplay(colorPreview, state.focusIndex === FIELD.COLOR, pal)));\n\n lines.push(boxLine('', W));\n\n if (state.error !== '') {\n lines.push(boxLine(' ' + chalk.red('⚠ ' + state.error), W));\n lines.push(boxLine('', W));\n }\n\n lines.push(renderButton('BAŞLAT', state.focusIndex === FIELD.SUBMIT, W, pal));\n lines.push(boxLine('', W));\n lines.push(boxMid(W));\n const help = state.editing\n ? 'Yazın... Enter Onayla Esc İptal Ctrl+U Temizle'\n : '↑↓ Gezin ←→ Değiştir Enter Düzenle P Preset G GitHub Esc Çıkış';\n lines.push(boxLine(' ' + chalk.dim(help), W));\n lines.push(boxBottom(W));\n\n return lines.join('\\n');\n}\n\nexport async function showPanel(): Promise<PanelResult | null> {\n const config = loadConfig();\n\n let layoutIdx = LAYOUTS.findIndex((l) => l.value === config.defaultLayout);\n if (layoutIdx < 0) layoutIdx = 0;\n let panesIdx = PANE_OPTIONS.indexOf(config.defaultPanes > 0 ? config.defaultPanes : 4);\n if (panesIdx < 0) panesIdx = 3; // default 4\n let cleanupIdx = CLEANUP_OPTIONS.findIndex((o) => o.value === config.cleanupPolicy);\n if (cleanupIdx < 0) cleanupIdx = 0;\n\n let colorIdx = PALETTE_KEYS.indexOf(config.colorTheme);\n if (colorIdx < 0) colorIdx = 0;\n\n const state: PanelState = {\n focusIndex: FIELD.REPO,\n editing: false,\n editBuffer: '',\n error: '',\n hasToken: config.githubToken !== undefined && config.githubToken !== '',\n token: '',\n repoUrl: '',\n layoutIndex: layoutIdx,\n panesIndex: panesIdx,\n cleanupIndex: cleanupIdx,\n colorIndex: colorIdx,\n };\n\n return new Promise<PanelResult | null>((resolve) => {\n const draw = createDrawFn(() => renderPanel(state));\n const { teardown } = attachKeypress((str, key) => {\n state.error = '';\n if (state.editing) {\n panelEdit(str, key);\n } else {\n panelNav(str, key);\n }\n });\n\n function done(result: PanelResult | null): void {\n teardown();\n console.clear();\n resolve(result);\n }\n\n function panelEdit(str: string | undefined, key: KeypressKey): void {\n if (key.name === 'return') {\n if (state.focusIndex === FIELD.TOKEN) state.token = state.editBuffer;\n else if (state.focusIndex === FIELD.REPO) state.repoUrl = state.editBuffer;\n state.editing = false;\n draw(false);\n return;\n }\n if (key.name === 'escape') { state.editing = false; draw(false); return; }\n if (key.name === 'backspace') { state.editBuffer = state.editBuffer.slice(0, -1); draw(true); return; }\n if (key.ctrl === true && key.name === 'u') { state.editBuffer = ''; draw(true); return; }\n if (str !== undefined && str !== '' && key.ctrl !== true && key.meta !== true) {\n state.editBuffer += str;\n draw(true);\n }\n }\n\n function panelNav(str: string | undefined, key: KeypressKey): void {\n const nav = getPanelNav(state);\n const idx = nav.indexOf(state.focusIndex);\n\n if (key.name === 'escape') { done(null); return; }\n\n if (key.name === 'up' || (key.name === 'tab' && key.shift === true)) {\n if (idx > 0) state.focusIndex = nav[idx - 1];\n draw(false); return;\n }\n if (key.name === 'down' || key.name === 'tab') {\n if (idx < nav.length - 1) state.focusIndex = nav[idx + 1];\n draw(false); return;\n }\n\n if (key.name === 'left' || key.name === 'right') {\n const d = key.name === 'right' ? 1 : -1;\n panelCycle(d);\n draw(false); return;\n }\n if (key.name === 'space') { panelCycle(1); draw(false); return; }\n\n // P key → load preset\n if (str === 'p' || str === 'P') {\n const presets = loadPresets();\n const names = Object.keys(presets);\n if (names.length === 0) {\n state.error = 'Kayıtlı preset yok';\n draw(false);\n return;\n }\n // Cycle through presets: apply next one\n const currentConfig = `${LAYOUTS[state.layoutIndex].value}-${PANE_OPTIONS[state.panesIndex]}-${CLEANUP_OPTIONS[state.cleanupIndex].value}`;\n let nextIdx = 0;\n for (let i = 0; i < names.length; i++) {\n const pr = presets[names[i]];\n const key = `${pr.layout}-${pr.panes}-${pr.cleanup}`;\n if (key === currentConfig && i < names.length - 1) {\n nextIdx = i + 1;\n break;\n }\n }\n const preset = applyPreset(names[nextIdx]);\n const li = LAYOUTS.findIndex((l) => l.value === preset.layout);\n if (li >= 0) state.layoutIndex = li;\n const pi = PANE_OPTIONS.indexOf(preset.panes);\n if (pi >= 0) state.panesIndex = pi;\n const ci = CLEANUP_OPTIONS.findIndex((o) => o.value === preset.cleanup);\n if (ci >= 0) state.cleanupIndex = ci;\n state.error = `Preset: ${names[nextIdx]}`;\n draw(false);\n return;\n }\n\n // G key → GitHub browser\n if (str === 'g' || str === 'G') {\n const token = state.hasToken && state.token !== ''\n ? state.token\n : loadConfig().githubToken;\n if (token === '') {\n state.error = 'GitHub token gerekli';\n draw(false);\n return;\n }\n // Temporarily teardown panel keypress to give control to browser\n teardown();\n showGitHubBrowser(token).then((result) => {\n if (result !== null) {\n state.repoUrl = result.cloneUrl;\n }\n // Re-attach panel keypress\n const reattached = attachKeypress((s, k) => {\n state.error = '';\n if (state.editing) {\n panelEdit(s, k);\n } else {\n panelNav(s, k);\n }\n });\n // Replace teardown reference\n Object.assign({ teardown: reattached.teardown });\n draw(false);\n }).catch(() => {\n draw(false);\n });\n return;\n }\n\n if (key.name === 'return') { panelEnter(); return; }\n }\n\n function panelCycle(d: number): void {\n switch (state.focusIndex) {\n case FIELD.HAS_TOKEN: state.hasToken = !state.hasToken; break;\n case FIELD.LAYOUT: state.layoutIndex = (state.layoutIndex + d + LAYOUTS.length) % LAYOUTS.length; break;\n case FIELD.PANES: state.panesIndex = (state.panesIndex + d + PANE_OPTIONS.length) % PANE_OPTIONS.length; break;\n case FIELD.CLEANUP: state.cleanupIndex = (state.cleanupIndex + d + CLEANUP_OPTIONS.length) % CLEANUP_OPTIONS.length; break;\n case FIELD.COLOR: state.colorIndex = (state.colorIndex + d + COLOR_OPTIONS.length) % COLOR_OPTIONS.length; break;\n }\n }\n\n function panelEnter(): void {\n if (state.focusIndex === FIELD.TOKEN || state.focusIndex === FIELD.REPO) {\n state.editing = true;\n state.editBuffer = state.focusIndex === FIELD.TOKEN ? state.token : state.repoUrl;\n draw(true); return;\n }\n if (state.focusIndex === FIELD.HAS_TOKEN) { state.hasToken = !state.hasToken; draw(false); return; }\n\n if (state.focusIndex === FIELD.SUBMIT) {\n if (state.repoUrl.trim() === '') {\n state.error = 'Repository URL gerekli';\n state.focusIndex = FIELD.REPO;\n draw(false); return;\n }\n const url = state.repoUrl.trim();\n if (!url.includes('github.com') && !url.includes('gitlab.com') && !url.includes('bitbucket.org')) {\n state.error = 'Geçerli bir Git URL girin';\n state.focusIndex = FIELD.REPO;\n draw(false); return;\n }\n if (state.hasToken && state.token !== '') {\n setGithubToken(state.token);\n }\n // Persist color theme to config\n const selectedColor = COLOR_OPTIONS[state.colorIndex].value;\n const cfg = loadConfig();\n cfg.colorTheme = selectedColor;\n saveConfig(cfg);\n\n // Support multiple repos separated by comma\n const urls = url.split(',').map((u) => u.trim()).filter((u) => u !== '');\n\n done({\n token: state.hasToken && state.token !== '' ? state.token : null,\n repoUrl: urls[0],\n repoUrls: urls,\n layout: LAYOUTS[state.layoutIndex].value,\n paneCount: PANE_OPTIONS[state.panesIndex],\n cleanup: CLEANUP_OPTIONS[state.cleanupIndex].value,\n colorTheme: selectedColor,\n });\n return;\n }\n draw(false);\n }\n\n draw(false);\n });\n}\n\n/* ═══════════════════════════════════════════════════════\n BRANCH SELECTION FORM (per-pane)\n ═══════════════════════════════════════════════════════ */\n\nexport interface BranchSelectionResult {\n branches: string[];\n paneNames: string[];\n startupCommands?: string[];\n}\n\nconst RANDOM_NAMES = [\n 'Alpha', 'Beta', 'Gamma', 'Delta', 'Epsilon', 'Zeta',\n 'Nova', 'Orion', 'Vega', 'Atlas', 'Comet', 'Pulsar',\n 'Spark', 'Blaze', 'Storm', 'Frost', 'Lunar', 'Solar',\n];\n\nfunction pickRandomNames(count: number): string[] {\n const shuffled = [...RANDOM_NAMES].sort(() => Math.random() - 0.5);\n return shuffled.slice(0, count);\n}\n\ninterface BranchFormState {\n focusIndex: number; // 0..paneCount-1 = pane rows, paneCount = submit\n branchIndices: number[]; // selected branch index per pane\n paneNames: string[]; // custom name per pane\n startupCommands: string[]; // startup command per pane\n editing: boolean; // editing pane name\n editingCommand: boolean; // editing startup command\n editBuffer: string;\n error: string;\n}\n\nfunction renderBranchForm(\n state: BranchFormState,\n branches: string[],\n paneCount: number,\n pal: ColorPalette\n): string {\n const W = 62;\n const lines: string[] = [];\n const submitIdx = paneCount;\n\n lines.push(boxTop(' Branch Seçimi ', W, pal));\n lines.push(boxLine(' ' + chalk.dim('←→ Branch N İsim C Komut'), W));\n lines.push(boxMid(W));\n lines.push(boxLine('', W));\n\n // Count how many times each branch is used to show duplicate hint\n const usageCount = new Map<number, number>();\n for (const bi of state.branchIndices) {\n usageCount.set(bi, (usageCount.get(bi) ?? 0) + 1);\n }\n\n for (let i = 0; i < paneCount; i++) {\n const focused = state.focusIndex === i;\n const ptr = focused ? pal.primary('❯') : ' ';\n\n // If editing this pane's name\n if (focused && state.editing) {\n const editLabel = pal.primaryBold('İsim: ');\n const cursor = pal.primary(state.editBuffer + '█');\n lines.push(boxLine(` ${ptr} ${editLabel}${cursor}`, W));\n continue;\n }\n\n // If editing startup command\n if (focused && state.editingCommand) {\n const editLabel = pal.primaryBold('Cmd: ');\n const cursor = pal.primary(state.editBuffer + '█');\n lines.push(boxLine(` ${ptr} ${editLabel}${cursor}`, W));\n continue;\n }\n\n // Name | Branch on one line\n const name = state.paneNames[i];\n const nameDisplay = focused ? pal.primaryBold(name.padEnd(10)) : chalk.white(name.padEnd(10));\n const branchName = branches[state.branchIndices[i]];\n const shortBranch = branchName.length > 22 ? '...' + branchName.slice(-19) : branchName;\n const isDuplicate = (usageCount.get(state.branchIndices[i]) ?? 0) > 1;\n const dupHint = isDuplicate ? chalk.yellow(' +fork') : '';\n const cmdHint = state.startupCommands[i] !== '' ? chalk.dim(' $') : '';\n const branchDisplay = selectDisplay(shortBranch, focused, pal) + dupHint + cmdHint;\n lines.push(boxLine(` ${ptr} ${nameDisplay} ${chalk.dim('│')} ${branchDisplay}`, W));\n }\n\n lines.push(boxLine('', W));\n\n if (state.error !== '') {\n lines.push(boxLine(' ' + chalk.red('⚠ ' + state.error), W));\n lines.push(boxLine('', W));\n }\n\n lines.push(renderButton('ONAYLA', state.focusIndex === submitIdx, W, pal));\n lines.push(boxLine('', W));\n lines.push(boxMid(W));\n const help = state.editing || state.editingCommand\n ? 'Yazın... Enter Onayla Esc İptal Ctrl+U Temizle'\n : '↑↓ Gezin ←→ Branch N İsim C Komut Enter Onayla Esc Çıkış';\n lines.push(boxLine(' ' + chalk.dim(help), W));\n lines.push(boxBottom(W));\n\n return lines.join('\\n');\n}\n\nexport async function showBranchSelection(\n availableBranches: string[],\n paneCount: number\n): Promise<BranchSelectionResult | null> {\n const submitIdx = paneCount;\n\n // Assign initial branches: each pane gets a different branch\n const initialIndices: number[] = [];\n for (let i = 0; i < paneCount; i++) {\n initialIndices.push(i % availableBranches.length);\n }\n\n const randomNames = pickRandomNames(paneCount);\n\n const state: BranchFormState = {\n focusIndex: 0,\n branchIndices: initialIndices,\n paneNames: randomNames,\n startupCommands: Array.from({ length: paneCount }, () => ''),\n editing: false,\n editingCommand: false,\n editBuffer: '',\n error: '',\n };\n\n const pal = getPalette(loadConfig().colorTheme);\n\n return new Promise<BranchSelectionResult | null>((resolve) => {\n const draw = createDrawFn(() => renderBranchForm(state, availableBranches, paneCount, pal));\n const { teardown } = attachKeypress((str, key) => {\n state.error = '';\n\n // Name editing mode\n if (state.editing) {\n if (key.name === 'return') {\n const val = state.editBuffer.trim();\n state.paneNames[state.focusIndex] = val !== '' ? val : randomNames[state.focusIndex];\n state.editing = false;\n draw(false); return;\n }\n if (key.name === 'escape') { state.editing = false; draw(false); return; }\n if (key.name === 'backspace') { state.editBuffer = state.editBuffer.slice(0, -1); draw(true); return; }\n if (key.ctrl === true && key.name === 'u') { state.editBuffer = ''; draw(true); return; }\n if (str !== undefined && str !== '' && key.ctrl !== true && key.meta !== true) {\n state.editBuffer += str;\n draw(true);\n }\n return;\n }\n\n // Command editing mode\n if (state.editingCommand) {\n if (key.name === 'return') {\n state.startupCommands[state.focusIndex] = state.editBuffer.trim();\n state.editingCommand = false;\n draw(false); return;\n }\n if (key.name === 'escape') { state.editingCommand = false; draw(false); return; }\n if (key.name === 'backspace') { state.editBuffer = state.editBuffer.slice(0, -1); draw(true); return; }\n if (key.ctrl === true && key.name === 'u') { state.editBuffer = ''; draw(true); return; }\n if (str !== undefined && str !== '' && key.ctrl !== true && key.meta !== true) {\n state.editBuffer += str;\n draw(true);\n }\n return;\n }\n\n if (key.name === 'escape') {\n teardown();\n console.clear();\n resolve(null);\n return;\n }\n\n // Navigation\n if (key.name === 'up' || (key.name === 'tab' && key.shift === true)) {\n if (state.focusIndex > 0) state.focusIndex--;\n draw(false); return;\n }\n if (key.name === 'down' || key.name === 'tab') {\n if (state.focusIndex < submitIdx) state.focusIndex++;\n draw(false); return;\n }\n\n // N key → edit name\n if ((str === 'n' || str === 'N') && state.focusIndex < paneCount) {\n state.editing = true;\n state.editBuffer = state.paneNames[state.focusIndex];\n draw(true); return;\n }\n\n // C key → edit startup command\n if ((str === 'c' || str === 'C') && state.focusIndex < paneCount) {\n state.editingCommand = true;\n state.editBuffer = state.startupCommands[state.focusIndex];\n draw(true); return;\n }\n\n // ←→ cycle branch\n if (key.name === 'left' || key.name === 'right') {\n if (state.focusIndex < paneCount) {\n const d = key.name === 'right' ? 1 : -1;\n const cur = state.branchIndices[state.focusIndex];\n state.branchIndices[state.focusIndex] =\n (cur + d + availableBranches.length) % availableBranches.length;\n }\n draw(false); return;\n }\n\n if (key.name === 'space' && state.focusIndex < paneCount) {\n const cur = state.branchIndices[state.focusIndex];\n state.branchIndices[state.focusIndex] = (cur + 1) % availableBranches.length;\n draw(false); return;\n }\n\n // Enter\n if (key.name === 'return') {\n if (state.focusIndex === submitIdx) {\n const selected = state.branchIndices.map((bi) => availableBranches[bi]);\n teardown();\n console.clear();\n resolve({\n branches: selected,\n paneNames: [...state.paneNames],\n startupCommands: [...state.startupCommands],\n });\n return;\n }\n // On a pane row, Enter cycles branch forward\n if (state.focusIndex < paneCount) {\n const cur = state.branchIndices[state.focusIndex];\n state.branchIndices[state.focusIndex] = (cur + 1) % availableBranches.length;\n draw(false);\n }\n }\n });\n\n draw(false);\n });\n}\n\n/* ── Other exports (unchanged) ────────────────────────── */\n\nexport function showPreview(data: {\n repoUrl: string;\n layout: string;\n branchCount: number;\n branches: string[];\n cleanup: string;\n}): void {\n console.log();\n console.log(chalk.dim('─'.repeat(50)));\n console.log(chalk.bold('📋 ÖNİZLEME'));\n console.log(chalk.dim('─'.repeat(50)));\n console.log();\n console.log(formatPreview('Repo', data.repoUrl));\n console.log(formatPreview('Layout', data.layout.toUpperCase()));\n console.log(formatPreview('Branches', `${data.branchCount} adet`));\n data.branches.forEach((b, i) => {\n console.log(chalk.dim(` ${i + 1}. ${b}`));\n });\n console.log(formatPreview('Cleanup', data.cleanup === 'session' ? 'Session' : 'Persistent'));\n console.log();\n}\n\nexport async function confirmStart(): Promise<boolean> {\n const confirm = await p.confirm({\n message: 'Başlatmak için onayla',\n initialValue: true,\n });\n\n return confirm === true;\n}\n\nexport function showProgress(steps: string[]): void {\n const s = p.spinner();\n\n for (const step of steps) {\n s.start(step);\n }\n}\n\nexport function showSuccess(message: string): void {\n p.outro(chalk.green('✓ ') + message);\n}\n\nexport function showError(message: string, hint?: string): void {\n console.log();\n console.log(chalk.red('✕ ') + message);\n if (hint !== undefined && hint !== '') {\n console.log(chalk.dim(' → ' + hint));\n }\n}\n\nexport function showInfo(message: string): void {\n p.log.info(message);\n}\n","import { type PresetConfig, PresetConfigSchema } from '../types/index.js';\nimport { BranchNexusError, ExitCode } from '../types/errors.js';\nimport { loadConfig, saveConfig } from './config.js';\n\nexport const TERMINAL_TEMPLATE_CATALOG = [2, 4, 6, 8, 12, 16] as const;\nexport const TERMINAL_TEMPLATE_MIN = 2;\nexport const TERMINAL_TEMPLATE_MAX = 16;\nexport const TERMINAL_TEMPLATE_CUSTOM = 'custom';\n\nexport function terminalTemplateChoices(): string[] {\n return [...TERMINAL_TEMPLATE_CATALOG.map(String), TERMINAL_TEMPLATE_CUSTOM];\n}\n\nexport function validateTerminalCount(value: number): number {\n if (value < TERMINAL_TEMPLATE_MIN || value > TERMINAL_TEMPLATE_MAX) {\n throw new BranchNexusError(\n `Invalid terminal count: ${value}`,\n ExitCode.VALIDATION_ERROR,\n `Use a value between ${TERMINAL_TEMPLATE_MIN} and ${TERMINAL_TEMPLATE_MAX}.`\n );\n }\n return value;\n}\n\nexport function resolveTerminalTemplate(template: string | number, customValue?: number): number {\n if (typeof template === 'number') {\n return validateTerminalCount(template);\n }\n\n const normalized = template.trim().toLowerCase();\n\n if (normalized === TERMINAL_TEMPLATE_CUSTOM) {\n if (customValue === undefined) {\n throw new BranchNexusError(\n 'Custom template requires an explicit terminal count.',\n ExitCode.VALIDATION_ERROR,\n `Provide --max-terminals between ${TERMINAL_TEMPLATE_MIN} and ${TERMINAL_TEMPLATE_MAX}.`\n );\n }\n return validateTerminalCount(customValue);\n }\n\n if (/^\\d+$/.test(normalized)) {\n return validateTerminalCount(parseInt(normalized, 10));\n }\n\n throw new BranchNexusError(\n `Invalid terminal template: ${template}`,\n ExitCode.VALIDATION_ERROR,\n `Use one of: ${terminalTemplateChoices().join(', ')}.`\n );\n}\n\nexport function savePreset(name: string, preset: PresetConfig): void {\n const validated = PresetConfigSchema.parse(preset);\n const config = loadConfig();\n config.presets[name] = validated;\n saveConfig(config);\n}\n\nexport function loadPresets(): Record<string, PresetConfig> {\n const config = loadConfig();\n return { ...config.presets };\n}\n\nexport function applyPreset(name: string): PresetConfig {\n const presets = loadPresets();\n const preset = presets[name] as PresetConfig | undefined;\n if (preset === undefined) {\n throw new BranchNexusError(\n `Preset not found: ${name}`,\n ExitCode.VALIDATION_ERROR,\n 'Select an existing preset or create a new one.'\n );\n }\n return preset;\n}\n\nexport function deletePreset(name: string): void {\n const config = loadConfig();\n delete config.presets[name];\n saveConfig(config);\n}\n\nexport function renamePreset(oldName: string, newName: string): void {\n const config = loadConfig();\n const preset = config.presets[oldName] as PresetConfig | undefined;\n if (preset === undefined) {\n throw new BranchNexusError(\n `Preset not found: ${oldName}`,\n ExitCode.VALIDATION_ERROR,\n 'Choose an existing preset to rename.'\n );\n }\n config.presets[newName] = preset;\n delete config.presets[oldName];\n saveConfig(config);\n}\n\nexport function presetExists(name: string): boolean {\n const config = loadConfig();\n return name in config.presets;\n}\n\nexport function createPresetFromCurrentConfig(name: string): PresetConfig {\n const config = loadConfig();\n const preset: PresetConfig = {\n layout: config.defaultLayout,\n panes: config.defaultPanes,\n cleanup: config.cleanupPolicy,\n };\n savePreset(name, preset);\n return preset;\n}\n","import chalk, { type ChalkInstance } from 'chalk';\n\n/* ── Color Palettes ───────────────────────────────────── */\n\nexport interface ColorPalette {\n name: string;\n label: string;\n primary: ChalkInstance;\n primaryBold: ChalkInstance;\n bg: ChalkInstance;\n}\n\nexport const COLOR_PALETTES: Record<string, ColorPalette> = {\n cyan: {\n name: 'cyan',\n label: 'Cyan',\n primary: chalk.cyan,\n primaryBold: chalk.cyan.bold,\n bg: chalk.bgCyan.black.bold,\n },\n green: {\n name: 'green',\n label: 'Yeşil',\n primary: chalk.green,\n primaryBold: chalk.green.bold,\n bg: chalk.bgGreen.black.bold,\n },\n magenta: {\n name: 'magenta',\n label: 'Magenta',\n primary: chalk.magenta,\n primaryBold: chalk.magenta.bold,\n bg: chalk.bgMagenta.black.bold,\n },\n blue: {\n name: 'blue',\n label: 'Mavi',\n primary: chalk.blue,\n primaryBold: chalk.blue.bold,\n bg: chalk.bgBlue.black.bold,\n },\n yellow: {\n name: 'yellow',\n label: 'Sarı',\n primary: chalk.yellow,\n primaryBold: chalk.yellow.bold,\n bg: chalk.bgYellow.black.bold,\n },\n red: {\n name: 'red',\n label: 'Kırmızı',\n primary: chalk.red,\n primaryBold: chalk.red.bold,\n bg: chalk.bgRed.black.bold,\n },\n};\n\nexport const PALETTE_KEYS = Object.keys(COLOR_PALETTES);\n\nexport function getPalette(name: string): ColorPalette {\n return COLOR_PALETTES[name] ?? COLOR_PALETTES.cyan;\n}\n\nexport const theme = {\n colors: {\n primary: chalk.cyan,\n success: chalk.green,\n warning: chalk.yellow,\n error: chalk.red,\n info: chalk.blue,\n muted: chalk.gray,\n highlight: chalk.white.bold,\n accent: chalk.magenta,\n },\n\n symbols: {\n pointer: '❯',\n check: '✓',\n cross: '✕',\n radio: {\n on: '●',\n off: '○',\n },\n checkbox: {\n on: '◼',\n off: '◻',\n },\n arrow: {\n left: '←',\n right: '→',\n up: '↑',\n down: '↓',\n },\n box: {\n topLeft: '╔',\n topRight: '╗',\n bottomLeft: '╚',\n bottomRight: '╝',\n horizontal: '═',\n vertical: '║',\n left: '╠',\n right: '╣',\n },\n },\n\n spacing: {\n xs: 1,\n sm: 2,\n md: 3,\n lg: 4,\n },\n};\n\nexport function box(title: string, content: string[], width = 60): string {\n const { box: b } = theme.symbols;\n const lines: string[] = [];\n\n const titleLine = ` ${title} `;\n const titlePadding = Math.floor((width - titleLine.length) / 2);\n const paddedTitle =\n b.horizontal.repeat(titlePadding) +\n titleLine +\n b.horizontal.repeat(width - titlePadding - titleLine.length);\n\n lines.push(b.topLeft + paddedTitle + b.topRight);\n\n for (const line of content) {\n const paddedLine = line.padEnd(width - 2);\n lines.push(b.vertical + ' ' + paddedLine + b.vertical);\n }\n\n lines.push(b.bottomLeft + b.horizontal.repeat(width) + b.bottomRight);\n\n return lines.join('\\n');\n}\n\nexport function formatPreview(key: string, value: string): string {\n return `${theme.colors.muted(key.padEnd(10))} ${theme.colors.highlight(value)}`;\n}\n","import * as readline from 'node:readline';\nimport chalk from 'chalk';\nimport { GitHubClient, type GitHubRepo } from '../github/api.js';\nimport { loadConfig } from '../core/config.js';\nimport { updateGithubRepoCache } from '../core/config.js';\nimport { type ColorPalette, getPalette } from '../utils/theme.js';\n\ninterface KeypressKey {\n name?: string;\n ctrl?: boolean;\n meta?: boolean;\n shift?: boolean;\n}\n\n/* eslint-disable no-control-regex */\nconst ANSI_RE =\n /[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:[a-zA-Z\\d]*(?:;[-a-zA-Z\\d/#&.:=?%@~_]*)*)?\\u0007)|(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))/g;\n/* eslint-enable no-control-regex */\nconst CLR = '\\x1B[K';\n\nfunction stripAnsi(str: string): number {\n return str.replace(ANSI_RE, '').length;\n}\n\nfunction padToWidth(content: string, width: number): string {\n const pad = Math.max(0, width - stripAnsi(content));\n return content + ' '.repeat(pad);\n}\n\nfunction boxLine(content: string, width: number): string {\n return '║' + padToWidth(content, width) + '║' + CLR;\n}\n\nfunction boxTop(title: string, width: number, pal: ColorPalette): string {\n const tPad = Math.floor((width - title.length) / 2);\n return (\n '╔' +\n '═'.repeat(tPad) +\n pal.primaryBold(title) +\n '═'.repeat(width - tPad - title.length) +\n '╗' +\n CLR\n );\n}\n\nfunction boxMid(width: number): string {\n return '╠' + '═'.repeat(width) + '╣' + CLR;\n}\n\nfunction boxBottom(width: number): string {\n return '╚' + '═'.repeat(width) + '╝' + CLR;\n}\n\nexport interface GitHubBrowserResult {\n cloneUrl: string;\n fullName: string;\n}\n\ninterface BrowserState {\n repos: GitHubRepo[];\n filteredRepos: GitHubRepo[];\n selectedIndex: number;\n scrollOffset: number;\n filterText: string;\n filtering: boolean;\n loading: boolean;\n error: string;\n}\n\nconst MAX_VISIBLE = 12;\n\nfunction renderBrowser(state: BrowserState, pal: ColorPalette): string {\n const W = 62;\n const lines: string[] = [];\n\n lines.push(boxTop(' GitHub Repositories ', W, pal));\n\n if (state.loading) {\n lines.push(boxLine('', W));\n lines.push(boxLine(' ' + chalk.dim('Yükleniyor...'), W));\n lines.push(boxLine('', W));\n lines.push(boxBottom(W));\n return lines.join('\\n');\n }\n\n if (state.error !== '') {\n lines.push(boxLine('', W));\n lines.push(boxLine(' ' + chalk.red(state.error), W));\n lines.push(boxLine('', W));\n lines.push(boxBottom(W));\n return lines.join('\\n');\n }\n\n // Filter bar\n if (state.filtering) {\n const cursor = pal.primary(state.filterText + '█');\n lines.push(boxLine(' ' + chalk.dim('Filtre: ') + cursor, W));\n } else if (state.filterText !== '') {\n lines.push(boxLine(' ' + chalk.dim('Filtre: ') + chalk.white(state.filterText), W));\n }\n lines.push(boxMid(W));\n\n // Repo list\n const repos = state.filteredRepos;\n if (repos.length === 0) {\n lines.push(boxLine('', W));\n lines.push(boxLine(' ' + chalk.dim('Eşleşen repo bulunamadı'), W));\n lines.push(boxLine('', W));\n } else {\n const start = state.scrollOffset;\n const end = Math.min(start + MAX_VISIBLE, repos.length);\n\n if (start > 0) {\n lines.push(boxLine(' ' + chalk.dim(` ↑ ${start} daha...`), W));\n }\n\n for (let i = start; i < end; i++) {\n const focused = i === state.selectedIndex;\n const ptr = focused ? pal.primary('❯') : ' ';\n const name = repos[i].fullName;\n const display = name.length > 50 ? '...' + name.slice(-47) : name;\n const label = focused ? pal.primaryBold(display) : chalk.white(display);\n lines.push(boxLine(` ${ptr} ${label}`, W));\n }\n\n if (end < repos.length) {\n lines.push(boxLine(' ' + chalk.dim(` ↓ ${repos.length - end} daha...`), W));\n }\n }\n\n lines.push(boxLine('', W));\n lines.push(boxMid(W));\n const count = chalk.dim(`${repos.length} repo`);\n const help = state.filtering\n ? 'Yazın... Enter Onayla Esc İptal'\n : '↑↓ Gezin / Filtrele Enter Seç Esc Çıkış';\n lines.push(boxLine(' ' + chalk.dim(help) + ' ' + count, W));\n lines.push(boxBottom(W));\n\n return lines.join('\\n');\n}\n\nexport async function showGitHubBrowser(token: string): Promise<GitHubBrowserResult | null> {\n const config = loadConfig();\n const pal = getPalette(config.colorTheme);\n\n const state: BrowserState = {\n repos: [],\n filteredRepos: [],\n selectedIndex: 0,\n scrollOffset: 0,\n filterText: '',\n filtering: false,\n loading: true,\n error: '',\n };\n\n return new Promise<GitHubBrowserResult | null>((resolve) => {\n let first = true;\n\n function draw(): void {\n process.stdout.write(first ? '\\x1B[2J\\x1B[H' : '\\x1B[H');\n first = false;\n process.stdout.write(\n state.filtering ? '\\x1B[?25h' : '\\x1B[?25l'\n );\n process.stdout.write(renderBrowser(state, pal) + '\\x1B[J\\n');\n }\n\n readline.emitKeypressEvents(process.stdin);\n const wasRaw = process.stdin.isRaw ?? false;\n if (process.stdin.isTTY === true) {\n process.stdin.setRawMode(true);\n }\n process.stdin.resume();\n\n function teardown(): void {\n process.stdin.removeListener('keypress', onKey);\n if (process.stdin.isTTY === true) {\n process.stdin.setRawMode(wasRaw);\n }\n process.stdout.write('\\x1B[?25h');\n process.stdin.pause();\n }\n\n function done(result: GitHubBrowserResult | null): void {\n teardown();\n console.clear();\n resolve(result);\n }\n\n function applyFilter(): void {\n if (state.filterText === '') {\n state.filteredRepos = [...state.repos];\n } else {\n const lower = state.filterText.toLowerCase();\n state.filteredRepos = state.repos.filter((r) =>\n r.fullName.toLowerCase().includes(lower)\n );\n }\n state.selectedIndex = 0;\n state.scrollOffset = 0;\n }\n\n function ensureVisible(): void {\n if (state.selectedIndex < state.scrollOffset) {\n state.scrollOffset = state.selectedIndex;\n }\n if (state.selectedIndex >= state.scrollOffset + MAX_VISIBLE) {\n state.scrollOffset = state.selectedIndex - MAX_VISIBLE + 1;\n }\n }\n\n function onKey(str: string | undefined, key: KeypressKey): void {\n if (key === undefined || key === null) return;\n if (key.ctrl === true && key.name === 'c') {\n done(null);\n return;\n }\n\n if (state.loading) return;\n\n if (state.filtering) {\n if (key.name === 'return') {\n state.filtering = false;\n draw();\n return;\n }\n if (key.name === 'escape') {\n state.filtering = false;\n state.filterText = '';\n applyFilter();\n draw();\n return;\n }\n if (key.name === 'backspace') {\n state.filterText = state.filterText.slice(0, -1);\n applyFilter();\n draw();\n return;\n }\n if (key.ctrl === true && key.name === 'u') {\n state.filterText = '';\n applyFilter();\n draw();\n return;\n }\n if (str !== undefined && str !== '' && key.ctrl !== true && key.meta !== true) {\n state.filterText += str;\n applyFilter();\n draw();\n }\n return;\n }\n\n if (key.name === 'escape') {\n done(null);\n return;\n }\n\n if (key.name === 'up') {\n if (state.selectedIndex > 0) {\n state.selectedIndex--;\n ensureVisible();\n }\n draw();\n return;\n }\n\n if (key.name === 'down') {\n if (state.selectedIndex < state.filteredRepos.length - 1) {\n state.selectedIndex++;\n ensureVisible();\n }\n draw();\n return;\n }\n\n if (str === '/') {\n state.filtering = true;\n draw();\n return;\n }\n\n if (key.name === 'return') {\n if (state.filteredRepos.length > 0) {\n const repo = state.filteredRepos[state.selectedIndex];\n done({ cloneUrl: repo.cloneUrl, fullName: repo.fullName });\n }\n return;\n }\n }\n\n process.stdin.on('keypress', onKey);\n draw();\n\n // Fetch repos\n const client = new GitHubClient(token);\n client\n .listRepositories()\n .then((repos) => {\n state.repos = repos;\n state.filteredRepos = [...repos];\n state.loading = false;\n\n // Cache repos\n updateGithubRepoCache(\n repos.map((r) => ({ full_name: r.fullName, clone_url: r.cloneUrl }))\n );\n\n draw();\n })\n .catch((error: unknown) => {\n state.loading = false;\n state.error = error instanceof Error ? error.message : String(error);\n draw();\n });\n });\n}\n","export interface GitHubRepo {\n fullName: string;\n cloneUrl: string;\n}\n\nexport interface GitHubBranch {\n name: string;\n isDefault: boolean;\n}\n\nexport class GitHubClient {\n private token: string;\n\n constructor(token?: string) {\n this.token = token ?? process.env.BRANCHNEXUS_GH_TOKEN ?? '';\n }\n\n private async fetch(endpoint: string): Promise<unknown> {\n if (this.token === '') {\n throw new Error('GitHub token is required. Set BRANCHNEXUS_GH_TOKEN env var.');\n }\n\n const response = await fetch(`https://api.github.com${endpoint}`, {\n headers: {\n Authorization: `Bearer ${this.token}`,\n Accept: 'application/vnd.github.v3+json',\n 'User-Agent': 'BranchNexus/1.0',\n },\n });\n\n if (!response.ok) {\n const error = await response.text();\n throw new Error(`GitHub API error: ${response.status} ${error}`);\n }\n\n return response.json();\n }\n\n async listRepositories(): Promise<GitHubRepo[]> {\n const data = (await this.fetch('/user/repos?per_page=100&sort=updated')) as Array<{\n full_name: string;\n clone_url: string;\n }>;\n\n return data.map((repo) => ({\n fullName: repo.full_name,\n cloneUrl: repo.clone_url,\n }));\n }\n\n async listBranches(owner: string, repo: string): Promise<GitHubBranch[]> {\n const data = (await this.fetch(`/repos/${owner}/${repo}/branches?per_page=100`)) as Array<{\n name: string;\n }>;\n\n const defaultBranch = await this.getDefaultBranch(owner, repo);\n\n return data.map((branch) => ({\n name: branch.name,\n isDefault: branch.name === defaultBranch,\n }));\n }\n\n async getDefaultBranch(owner: string, repo: string): Promise<string> {\n const data = (await this.fetch(`/repos/${owner}/${repo}`)) as {\n default_branch: string;\n };\n return data.default_branch ?? 'main';\n }\n}\n","import chalk from 'chalk';\nimport * as p from '@clack/prompts';\nimport { ExitChoice } from '../types/index.js';\n\nexport async function promptCleanup(dirtyPaths: string[]): Promise<ExitChoice> {\n console.log();\n console.log(chalk.yellow('⚠ Kaydedilmemiş değişiklikler tespit edildi:'));\n console.log();\n\n for (const path of dirtyPaths) {\n const short = path.split('/').slice(-2).join('/');\n console.log(chalk.dim(` ● ${short}`));\n }\n\n console.log();\n\n const choice = await p.select({\n message: 'Ne yapmak istersiniz?',\n options: [\n {\n value: ExitChoice.PRESERVE,\n label: 'Koruyarak Çık',\n hint: 'Dirty worktree\\'ler korunur, temizler silinir',\n },\n {\n value: ExitChoice.CLEAN,\n label: 'Temizleyerek Çık',\n hint: 'Tüm worktree\\'ler silinir (değişiklikler kaybolur!)',\n },\n {\n value: ExitChoice.CANCEL,\n label: 'Vazgeç',\n hint: 'Hiçbir şey yapma',\n },\n ],\n });\n\n if (p.isCancel(choice)) {\n return ExitChoice.CANCEL;\n }\n\n return choice;\n}\n","import { execa } from 'execa';\nimport { logger } from '../utils/logger.js';\nimport { buildWslCommand } from '../runtime/wsl.js';\nimport { Platform, detectPlatform } from '../runtime/platform.js';\n\nexport interface HookExecution {\n command: string;\n success: boolean;\n returncode: number;\n output: string;\n}\n\nexport interface HookRunResult {\n pane: number;\n executions: HookExecution[];\n hasFailures: boolean;\n}\n\nexport class HookRunner {\n private timeoutSeconds: number;\n private trustedConfig: boolean;\n private allowCommandPrefixes: string[];\n\n constructor(options?: {\n timeoutSeconds?: number;\n trustedConfig?: boolean;\n allowCommandPrefixes?: string[];\n }) {\n this.timeoutSeconds = options?.timeoutSeconds ?? 30;\n this.trustedConfig = options?.trustedConfig ?? true;\n this.allowCommandPrefixes = options?.allowCommandPrefixes ?? [];\n }\n\n private isCommandAllowed(command: string): boolean {\n if (this.trustedConfig) {\n return true;\n }\n\n const argv = command.split(/\\s+/);\n if (argv.length === 0) {\n return false;\n }\n\n if (this.allowCommandPrefixes.length === 0) {\n return false;\n }\n\n return this.allowCommandPrefixes.includes(argv[0]);\n }\n\n async run(pane: number, commands: string[], distribution?: string): Promise<HookRunResult> {\n const executions: HookExecution[] = [];\n logger.debug(`Running ${commands.length} hook commands for pane=${pane}`);\n\n for (const command of commands) {\n if (!this.isCommandAllowed(command)) {\n logger.warn(`Hook command blocked by policy pane=${pane} command=${command}`);\n executions.push({\n command,\n success: false,\n returncode: 126,\n output: 'Command blocked by hook trust policy.',\n });\n continue;\n }\n\n try {\n logger.debug(`Executing hook command pane=${pane} command=${command}`);\n\n const isWindows = detectPlatform() === Platform.WINDOWS;\n const cmd = ['bash', '-lc', command];\n const finalCmd =\n isWindows && distribution !== undefined && distribution !== ''\n ? buildWslCommand(distribution, cmd)\n : cmd;\n\n const result = await execa(finalCmd[0], finalCmd.slice(1), {\n timeout: this.timeoutSeconds * 1000,\n reject: false,\n all: true,\n });\n\n const success = result.exitCode === 0;\n const output = `${result.stdout}${result.stderr}`.trim();\n\n if (!success) {\n logger.warn(\n `Hook command failed pane=${pane} returncode=${result.exitCode} command=${command}`\n );\n }\n\n executions.push({\n command,\n success,\n returncode: result.exitCode,\n output,\n });\n } catch (error) {\n const isTimeout = error instanceof Error && error.message.includes('timed out');\n logger.error(\n `Hook command ${isTimeout ? 'timed out' : 'failed'} pane=${pane} command=${command}`\n );\n\n executions.push({\n command,\n success: false,\n returncode: isTimeout ? 124 : 1,\n output: isTimeout\n ? 'Command timed out.'\n : error instanceof Error\n ? error.message\n : 'Unknown error',\n });\n }\n }\n\n return {\n pane,\n executions,\n hasFailures: executions.some((e) => !e.success),\n };\n }\n}\n","import {\n type RuntimeSessionSnapshot,\n type SessionTerminalSnapshot,\n type SessionCleanupResult,\n type ManagedWorktree,\n ExitChoice,\n type RuntimeKind,\n isSessionSnapshot,\n} from '../types/index.js';\nimport { WorktreeManager } from '../git/worktree.js';\nimport { logger } from '../utils/logger.js';\n\nconst TERMINAL_MIN = 2;\nconst TERMINAL_MAX = 16;\n\nfunction validateTerminalCount(value: number): number {\n if (value < TERMINAL_MIN || value > TERMINAL_MAX) {\n throw new Error(`Invalid terminal count: ${value}`);\n }\n return value;\n}\n\nexport function buildRuntimeSnapshot(\n layout: string,\n templateCount: number,\n terminals: SessionTerminalSnapshot[],\n focusedTerminalId = ''\n): RuntimeSessionSnapshot {\n const count = validateTerminalCount(templateCount);\n return {\n layout,\n templateCount: count,\n focusedTerminalId,\n terminals,\n };\n}\n\nexport function parseRuntimeSnapshot(raw: unknown): RuntimeSessionSnapshot | null {\n if (!isSessionSnapshot(raw)) {\n return null;\n }\n\n const snapshot = raw;\n\n if (snapshot.terminals.length === 0) {\n return null;\n }\n\n try {\n validateTerminalCount(snapshot.templateCount);\n } catch {\n return null;\n }\n\n const terminals: SessionTerminalSnapshot[] = [];\n for (const item of snapshot.terminals) {\n if (!item.terminalId) {\n return null;\n }\n\n const runtime = normalizeRuntimeKind(item.runtime);\n if (!runtime) {\n return null;\n }\n\n terminals.push({\n terminalId: item.terminalId.trim(),\n title: item.title?.trim() || item.terminalId,\n runtime,\n repoPath: item.repoPath?.trim() || '',\n branch: item.branch?.trim() || '',\n });\n }\n\n return {\n layout: snapshot.layout || 'grid',\n templateCount: snapshot.templateCount,\n focusedTerminalId: snapshot.focusedTerminalId?.trim() || '',\n terminals,\n };\n}\n\nfunction normalizeRuntimeKind(value: string): RuntimeKind | null {\n const normalized = value?.toLowerCase().trim();\n if (normalized === 'wsl') return 'wsl';\n if (normalized === 'powershell') return 'powershell';\n if (normalized === 'native') return 'native';\n return null;\n}\n\nexport class SessionCleanupHandler {\n private manager: WorktreeManager;\n private prompt: (dirty: string[]) => Promise<ExitChoice>;\n private distribution?: string;\n\n constructor(\n manager: WorktreeManager,\n prompt: (dirty: string[]) => Promise<ExitChoice>,\n distribution?: string\n ) {\n this.manager = manager;\n this.prompt = prompt;\n this.distribution = distribution;\n }\n\n async handleExit(): Promise<SessionCleanupResult> {\n if (this.manager.getCleanupPolicy() === 'persistent') {\n logger.debug('Session cleanup skipped due to persistent policy');\n return {\n closed: true,\n cancelled: false,\n removed: [],\n preservedDirty: this.manager.getManaged().map((w) => w.path),\n };\n }\n\n const dirty: ManagedWorktree[] = [];\n const clean: ManagedWorktree[] = [];\n\n for (const worktree of this.manager.getManaged()) {\n const isDirty = await this.manager.checkDirty(worktree, this.distribution);\n if (isDirty) {\n dirty.push(worktree);\n } else {\n clean.push(worktree);\n }\n }\n\n logger.debug(`Cleanup check complete dirty=${dirty.length} clean=${clean.length}`);\n\n if (dirty.length === 0) {\n const removed = await this.manager.cleanup({\n distribution: this.distribution,\n });\n logger.debug(`All worktrees clean; removed=${removed.length}`);\n return {\n closed: true,\n cancelled: false,\n removed,\n preservedDirty: [],\n };\n }\n\n const choice = await this.prompt(dirty.map((w) => w.path));\n logger.info(`Cleanup prompt result choice=${choice} dirty_count=${dirty.length}`);\n\n if (choice === ExitChoice.CANCEL) {\n return {\n closed: false,\n cancelled: true,\n removed: [],\n preservedDirty: dirty.map((w) => w.path),\n };\n }\n\n if (choice === ExitChoice.PRESERVE) {\n const removedClean = await this.manager.cleanup({\n selected: clean,\n distribution: this.distribution,\n });\n logger.debug(`Preserve dirty worktrees; removed clean=${removedClean.length}`);\n return {\n closed: true,\n cancelled: false,\n removed: removedClean,\n preservedDirty: dirty.map((w) => w.path),\n };\n }\n\n const removedAll = await this.manager.cleanup({\n distribution: this.distribution,\n });\n logger.debug(`Cleanup forced for all worktrees removed=${removedAll.length}`);\n return {\n closed: true,\n cancelled: false,\n removed: removedAll,\n preservedDirty: [],\n };\n }\n}\n","import chalk from 'chalk';\nimport { readFileSync } from 'node:fs';\nimport { loadConfig, saveConfig, setConfigValue, resetConfig, getConfigPath } from '../core/config.js';\nimport { AppConfigSchema } from '../types/index.js';\n\nexport function configCommand(action?: string, key?: string, value?: string): void {\n const config = loadConfig();\n\n switch (action) {\n case 'show':\n console.log(chalk.bold('\\n📋 BranchNexus Configuration\\n'));\n console.log(chalk.dim(`Location: ${getConfigPath()}\\n`));\n console.log(JSON.stringify(config, null, 2));\n console.log();\n break;\n\n case 'set':\n if (key === undefined || key === '' || value === undefined) {\n console.error(chalk.red('Usage: branchnexus config set <key> <value>'));\n console.log(chalk.dim('\\nAvailable keys:'));\n console.log(' defaultRoot, defaultLayout, defaultPanes, cleanupPolicy');\n console.log(' wslDistribution, tmuxAutoInstall, sessionRestoreEnabled');\n console.log(' githubToken, terminalMaxCount, colorTheme');\n process.exit(1);\n }\n try {\n setConfigValue(key, value);\n console.log(chalk.green(`\\n✅ Set ${key} = ${value}\\n`));\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.error(chalk.red(`\\n❌ ${message}\\n`));\n process.exit(1);\n }\n break;\n\n case 'reset':\n resetConfig();\n console.log(chalk.green('\\n✅ Configuration reset to defaults\\n'));\n break;\n\n case 'export': {\n // Export config as JSON to stdout\n const exportData = JSON.stringify(config, null, 2);\n console.log(exportData);\n break;\n }\n\n case 'import': {\n if (key === undefined || key === '') {\n console.error(chalk.red('Usage: branchnexus config import <file-path>'));\n process.exit(1);\n }\n\n try {\n const fileContent = readFileSync(key, 'utf-8');\n const parsed = JSON.parse(fileContent) as unknown;\n const validated = AppConfigSchema.parse(parsed);\n saveConfig(validated);\n console.log(chalk.green(`\\n✅ Configuration imported from ${key}\\n`));\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.error(chalk.red(`\\n❌ Import başarısız: ${message}\\n`));\n process.exit(1);\n }\n break;\n }\n\n default:\n console.log(chalk.bold('\\n📋 Configuration Commands\\n'));\n console.log(' branchnexus config show Show current configuration');\n console.log(' branchnexus config set <key> <value> Set a configuration value');\n console.log(' branchnexus config reset Reset to defaults');\n console.log(' branchnexus config export Export config as JSON');\n console.log(' branchnexus config import <file> Import config from JSON file');\n console.log();\n }\n}\n","import chalk from 'chalk';\nimport * as p from '@clack/prompts';\nimport { existsSync, readdirSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { listSessions, killSession } from '../tmux/session.js';\nimport { loadConfig } from '../core/config.js';\nimport { expandHomeDir } from '../runtime/platform.js';\nimport { runCommand } from '../runtime/shell.js';\nimport { logger } from '../utils/logger.js';\n\nconst SESSION_PREFIX = 'branchnexus';\n\nasync function cleanupWorktreeDir(basePath: string, distribution?: string): Promise<number> {\n if (!existsSync(basePath)) {\n return 0;\n }\n\n let removed = 0;\n const repoDirs = readdirSync(basePath, { withFileTypes: true }).filter((d) => d.isDirectory());\n\n for (const repoDir of repoDirs) {\n const repoWorktreeDir = join(basePath, repoDir.name);\n const paneDirs = readdirSync(repoWorktreeDir, { withFileTypes: true }).filter((d) => d.isDirectory());\n\n for (const paneDir of paneDirs) {\n const panePath = join(repoWorktreeDir, paneDir.name);\n const gitFile = join(panePath, '.git');\n\n // Only remove if it's actually a worktree (has .git file, not directory)\n if (!existsSync(gitFile)) {\n continue;\n }\n\n // Find the parent repo to run git worktree remove against it\n const cmd = ['git', '-C', panePath, 'worktree', 'list', '--porcelain'];\n try {\n const result = distribution ? await runCommand(['wsl', '-d', distribution, ...cmd]) : await runCommand(cmd);\n\n // Extract the main worktree path (first \"worktree\" entry)\n let mainRepoPath = '';\n for (const line of result.stdout.split('\\n')) {\n if (line.startsWith('worktree ')) {\n mainRepoPath = line.slice(9).trim();\n break;\n }\n }\n\n if (mainRepoPath !== '') {\n const removeCmd = ['git', '-C', mainRepoPath, 'worktree', 'remove', '--force', panePath];\n const removeResult = distribution\n ? await runCommand(['wsl', '-d', distribution, ...removeCmd])\n : await runCommand(removeCmd);\n\n if (removeResult.exitCode === 0) {\n removed++;\n logger.debug(`Removed worktree: ${panePath}`);\n } else {\n logger.warn(`Failed to remove worktree ${panePath}: ${removeResult.stderr}`);\n }\n }\n } catch (error) {\n logger.warn(`Error cleaning worktree ${panePath}: ${error instanceof Error ? error.message : String(error)}`);\n }\n }\n\n // Remove the repo directory if now empty\n try {\n const remaining = readdirSync(repoWorktreeDir);\n if (remaining.length === 0) {\n const { rmSync } = await import('node:fs');\n rmSync(repoWorktreeDir, { recursive: true });\n logger.debug(`Removed empty worktree dir: ${repoWorktreeDir}`);\n }\n } catch {\n // ignore\n }\n }\n\n // Remove basePath if now empty\n try {\n const remaining = readdirSync(basePath);\n if (remaining.length === 0) {\n const { rmSync } = await import('node:fs');\n rmSync(basePath, { recursive: true });\n logger.debug(`Removed empty worktree base: ${basePath}`);\n }\n } catch {\n // ignore\n }\n\n return removed;\n}\n\nasync function cleanupWorktrees(distribution?: string): Promise<number> {\n const config = loadConfig();\n const root = config.defaultRoot !== '' ? config.defaultRoot : expandHomeDir('~');\n const workspaceRoot = config.defaultRoot !== '' ? config.defaultRoot : expandHomeDir('~/workspace');\n\n // Clean both new (.bnx) and legacy (branchnexus-worktrees) paths\n const paths = [\n join(root, '.bnx'),\n join(workspaceRoot, '.bnx'),\n join(workspaceRoot, 'branchnexus-worktrees'),\n join(root, 'branchnexus-worktrees'),\n ];\n\n let total = 0;\n const seen = new Set<string>();\n for (const p of paths) {\n if (seen.has(p)) continue;\n seen.add(p);\n total += await cleanupWorktreeDir(p, distribution);\n }\n return total;\n}\n\nexport async function killCommand(sessionName?: string): Promise<void> {\n const config = loadConfig();\n const distribution = config.wslDistribution || undefined;\n\n const allSessions = await listSessions(distribution);\n const bnSessions = allSessions.filter((s) => s.startsWith(SESSION_PREFIX));\n\n if (bnSessions.length === 0) {\n console.log(chalk.yellow('\\nAktif BranchNexus session bulunamadı.\\n'));\n\n // Still try to clean up orphaned worktrees\n const removed = await cleanupWorktrees(distribution);\n if (removed > 0) {\n console.log(chalk.green(`${removed} orphan worktree temizlendi.\\n`));\n }\n return;\n }\n\n let target: string;\n\n if (sessionName !== undefined && sessionName !== '') {\n if (!bnSessions.includes(sessionName)) {\n console.error(chalk.red(`\\nSession \"${sessionName}\" bulunamadı.\\n`));\n console.log(chalk.dim('Aktif session\\'lar:'));\n for (const s of bnSessions) {\n console.log(chalk.dim(` - ${s}`));\n }\n console.log();\n process.exit(1);\n }\n target = sessionName;\n } else if (bnSessions.length === 1) {\n target = bnSessions[0];\n } else {\n const selected = await p.select({\n message: 'Hangi session kapatılsın?',\n options: bnSessions.map((s) => ({ value: s, label: s })),\n });\n\n if (p.isCancel(selected)) {\n p.cancel('İptal edildi.');\n return;\n }\n\n target = selected;\n }\n\n // 1) Kill tmux session\n await killSession(target, distribution);\n console.log(chalk.green(`\\n✓ Session \"${target}\" kapatıldı.`));\n\n // 2) Cleanup worktrees\n const removed = await cleanupWorktrees(distribution);\n if (removed > 0) {\n console.log(chalk.green(`✓ ${removed} worktree temizlendi.\\n`));\n } else {\n console.log();\n }\n}\n","import chalk from 'chalk';\nimport {\n savePreset,\n loadPresets,\n applyPreset,\n deletePreset,\n renamePreset,\n presetExists,\n createPresetFromCurrentConfig,\n} from '../core/presets.js';\nimport { type PresetConfig } from '../types/index.js';\n\nexport function presetCommand(\n action?: string,\n name?: string,\n extra?: string\n): void {\n switch (action) {\n case 'list': {\n const presets = loadPresets();\n const entries = Object.entries(presets);\n\n if (entries.length === 0) {\n console.log(chalk.yellow('\\nKayıtlı preset bulunamadı.\\n'));\n console.log(chalk.dim('Yeni preset: branchnexus preset save <isim>'));\n console.log();\n return;\n }\n\n console.log(chalk.bold('\\n📋 Preset Listesi\\n'));\n\n for (const [presetName, preset] of entries) {\n const p = preset;\n console.log(\n chalk.cyan(` ${presetName}`) +\n chalk.dim(` — layout: ${p.layout}, panes: ${p.panes}, cleanup: ${p.cleanup}`)\n );\n }\n console.log();\n break;\n }\n\n case 'save': {\n if (name === undefined || name === '') {\n console.error(chalk.red('Kullanım: branchnexus preset save <isim>'));\n process.exit(1);\n }\n\n if (extra !== undefined && extra !== '') {\n // Parse inline: branchnexus preset save myPreset '{\"layout\":\"grid\",\"panes\":4,\"cleanup\":\"session\"}'\n try {\n const parsed = JSON.parse(extra) as PresetConfig;\n savePreset(name, parsed);\n console.log(chalk.green(`\\n✓ Preset \"${name}\" kaydedildi.\\n`));\n } catch (error) {\n const msg = error instanceof Error ? error.message : String(error);\n console.error(chalk.red(`\\nGeçersiz preset verisi: ${msg}\\n`));\n process.exit(1);\n }\n } else {\n // Create from current config defaults\n const preset = createPresetFromCurrentConfig(name);\n console.log(chalk.green(`\\n✓ Preset \"${name}\" mevcut ayarlardan oluşturuldu.`));\n console.log(\n chalk.dim(` layout: ${preset.layout}, panes: ${preset.panes}, cleanup: ${preset.cleanup}`)\n );\n console.log();\n }\n break;\n }\n\n case 'load': {\n if (name === undefined || name === '') {\n console.error(chalk.red('Kullanım: branchnexus preset load <isim>'));\n process.exit(1);\n }\n\n try {\n const preset = applyPreset(name);\n console.log(chalk.green(`\\n✓ Preset \"${name}\" yüklendi.`));\n console.log(\n chalk.dim(` layout: ${preset.layout}, panes: ${preset.panes}, cleanup: ${preset.cleanup}`)\n );\n console.log();\n } catch (error) {\n const msg = error instanceof Error ? error.message : String(error);\n console.error(chalk.red(`\\n${msg}\\n`));\n process.exit(1);\n }\n break;\n }\n\n case 'delete': {\n if (name === undefined || name === '') {\n console.error(chalk.red('Kullanım: branchnexus preset delete <isim>'));\n process.exit(1);\n }\n\n if (!presetExists(name)) {\n console.error(chalk.red(`\\nPreset \"${name}\" bulunamadı.\\n`));\n process.exit(1);\n }\n\n deletePreset(name);\n console.log(chalk.green(`\\n✓ Preset \"${name}\" silindi.\\n`));\n break;\n }\n\n case 'rename': {\n if (name === undefined || name === '' || extra === undefined || extra === '') {\n console.error(chalk.red('Kullanım: branchnexus preset rename <eski-isim> <yeni-isim>'));\n process.exit(1);\n }\n\n try {\n renamePreset(name, extra);\n console.log(chalk.green(`\\n✓ Preset \"${name}\" → \"${extra}\" olarak yeniden adlandırıldı.\\n`));\n } catch (error) {\n const msg = error instanceof Error ? error.message : String(error);\n console.error(chalk.red(`\\n${msg}\\n`));\n process.exit(1);\n }\n break;\n }\n\n default:\n console.log(chalk.bold('\\n📋 Preset Komutları\\n'));\n console.log(' branchnexus preset list Kayıtlı preset\\'leri listele');\n console.log(' branchnexus preset save <isim> Mevcut ayarlardan preset kaydet');\n console.log(' branchnexus preset load <isim> Preset yükle');\n console.log(' branchnexus preset delete <isim> Preset sil');\n console.log(' branchnexus preset rename <eski> <yeni> Preset yeniden adlandır');\n console.log();\n }\n}\n","import chalk from 'chalk';\nimport { loadConfig, getConfigPath } from '../core/config.js';\nimport { loadPresets } from '../core/presets.js';\nimport { listSessions } from '../tmux/session.js';\nimport { existsSync, readdirSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { expandHomeDir } from '../runtime/platform.js';\n\nexport async function statusCommand(): Promise<void> {\n const config = loadConfig();\n const distribution = config.wslDistribution || undefined;\n\n console.log(chalk.bold('\\n📊 BranchNexus Durum\\n'));\n\n // Config path\n console.log(chalk.dim('Config: ') + getConfigPath());\n console.log();\n\n // Active tmux sessions\n console.log(chalk.bold('tmux Session\\'lar:'));\n const sessions = await listSessions(distribution);\n const bnSessions = sessions.filter((s) => s.startsWith('branchnexus'));\n\n if (bnSessions.length === 0) {\n console.log(chalk.dim(' Aktif session yok'));\n } else {\n for (const s of bnSessions) {\n console.log(chalk.green(` ● ${s}`));\n }\n }\n console.log();\n\n // Managed worktrees\n console.log(chalk.bold('Worktree\\'ler:'));\n const root = config.defaultRoot !== '' ? config.defaultRoot : expandHomeDir('~');\n const bnxDir = join(root, '.bnx');\n\n if (existsSync(bnxDir)) {\n try {\n const repoDirs = readdirSync(bnxDir, { withFileTypes: true }).filter((d) => d.isDirectory());\n let wtCount = 0;\n\n for (const repoDir of repoDirs) {\n const repoPath = join(bnxDir, repoDir.name);\n const paneDirs = readdirSync(repoPath, { withFileTypes: true }).filter((d) =>\n d.isDirectory()\n );\n\n for (const paneDir of paneDirs) {\n const gitFile = join(repoPath, paneDir.name, '.git');\n if (existsSync(gitFile)) {\n wtCount++;\n console.log(chalk.cyan(` ${repoDir.name}/${paneDir.name}`));\n }\n }\n }\n\n if (wtCount === 0) {\n console.log(chalk.dim(' Aktif worktree yok'));\n }\n } catch {\n console.log(chalk.dim(' Worktree dizini okunamadı'));\n }\n } else {\n console.log(chalk.dim(' Aktif worktree yok'));\n }\n console.log();\n\n // Presets\n console.log(chalk.bold('Preset\\'ler:'));\n const presets = loadPresets();\n const presetEntries = Object.entries(presets);\n\n if (presetEntries.length === 0) {\n console.log(chalk.dim(' Kayıtlı preset yok'));\n } else {\n for (const [name, preset] of presetEntries) {\n console.log(\n chalk.cyan(` ${name}`) +\n chalk.dim(` — ${preset.layout}, ${preset.panes} pane, ${preset.cleanup}`)\n );\n }\n }\n console.log();\n\n // Command hooks\n console.log(chalk.bold('Hook\\'lar:'));\n const hooks = config.commandHooks;\n const hookEntries = Object.entries(hooks);\n\n if (hookEntries.length === 0) {\n console.log(chalk.dim(' Tanımlı hook yok'));\n } else {\n for (const [event, commands] of hookEntries) {\n console.log(chalk.cyan(` ${event}:`));\n for (const cmd of commands) {\n console.log(chalk.dim(` $ ${cmd}`));\n }\n }\n }\n console.log();\n\n // GitHub token\n console.log(chalk.bold('GitHub Token:'));\n const hasToken = config.githubToken !== '';\n const envToken = process.env.BRANCHNEXUS_GH_TOKEN;\n const tokenSource = envToken !== undefined && envToken !== '' ? ' (env)' : ' (config)';\n console.log(\n hasToken\n ? chalk.green(` ● Tanımlı${tokenSource}`)\n : chalk.dim(' ○ Tanımlı değil')\n );\n console.log();\n\n // General settings\n console.log(chalk.bold('Ayarlar:'));\n console.log(chalk.dim(' Layout: ') + config.defaultLayout);\n console.log(chalk.dim(' Panes: ') + config.defaultPanes);\n console.log(chalk.dim(' Cleanup: ') + config.cleanupPolicy);\n console.log(chalk.dim(' Theme: ') + config.colorTheme);\n console.log(chalk.dim(' Restore: ') + (config.sessionRestoreEnabled ? 'Açık' : 'Kapalı'));\n\n if (config.wslDistribution !== '') {\n console.log(chalk.dim(' WSL: ') + config.wslDistribution);\n }\n console.log();\n}\n","import chalk from 'chalk';\nimport * as p from '@clack/prompts';\nimport { listSessions } from '../tmux/session.js';\nimport { loadConfig } from '../core/config.js';\nimport { execa } from 'execa';\n\nconst SESSION_PREFIX = 'branchnexus';\n\nexport async function attachCommand(sessionName?: string): Promise<void> {\n const config = loadConfig();\n const distribution = config.wslDistribution || undefined;\n\n const allSessions = await listSessions(distribution);\n const bnSessions = allSessions.filter((s) => s.startsWith(SESSION_PREFIX));\n\n if (bnSessions.length === 0) {\n console.log(chalk.yellow('\\nAktif BranchNexus session bulunamadı.\\n'));\n console.log(chalk.dim('Yeni session başlatmak için: branchnexus'));\n console.log();\n return;\n }\n\n let target: string;\n\n if (sessionName !== undefined && sessionName !== '') {\n if (!bnSessions.includes(sessionName)) {\n console.error(chalk.red(`\\nSession \"${sessionName}\" bulunamadı.\\n`));\n console.log(chalk.dim('Aktif session\\'lar:'));\n for (const s of bnSessions) {\n console.log(chalk.dim(` - ${s}`));\n }\n console.log();\n process.exit(1);\n }\n target = sessionName;\n } else if (bnSessions.length === 1) {\n target = bnSessions[0];\n } else {\n const selected = await p.select({\n message: 'Hangi session\\'a bağlanılsın?',\n options: bnSessions.map((s) => ({ value: s, label: s })),\n });\n\n if (p.isCancel(selected)) {\n p.cancel('İptal edildi.');\n return;\n }\n\n target = selected;\n }\n\n console.log(chalk.cyan(`\\nSession \"${target}\" bağlanılıyor...\\n`));\n\n try {\n await execa('tmux', ['attach-session', '-t', target], {\n stdio: 'inherit',\n timeout: 0,\n });\n } catch {\n // User detached or session ended — normal\n console.log();\n console.log(chalk.dim('tmux session devam ediyor. Tekrar bağlanmak için:'));\n console.log(chalk.cyan(` branchnexus attach ${target}`));\n console.log();\n }\n}\n","import inquirer from 'inquirer';\nimport chalk from 'chalk';\nimport { type AppConfig, type Layout, type CleanupPolicy, DEFAULT_CONFIG } from '../types/index.js';\nimport { loadConfig, saveConfig, setWslDistribution, setGithubToken } from '../core/config.js';\nimport { detectPlatform, Platform, hasTmux } from '../runtime/platform.js';\nimport { listDistributions } from '../runtime/wsl.js';\nimport { logger } from '../utils/logger.js';\nimport { execa } from 'execa';\n\nasync function checkDependencies(): Promise<{ tmux: boolean; git: boolean }> {\n const tmuxInstalled = await hasTmux();\n let gitInstalled = false;\n\n try {\n await execa('git', ['--version']);\n gitInstalled = true;\n } catch {\n gitInstalled = false;\n }\n\n return { tmux: tmuxInstalled, git: gitInstalled };\n}\n\nasync function installTmux(): Promise<boolean> {\n const platform = detectPlatform();\n\n console.log(chalk.dim('\\n📦 Installing tmux...\\n'));\n\n let cmd: string;\n\n if (platform === Platform.MACOS) {\n cmd = 'brew install tmux';\n } else {\n // Linux/WSL - try apt first, then other package managers\n try {\n await execa('bash', ['-lc', 'which apt-get']);\n cmd = 'sudo apt-get update && sudo apt-get install -y tmux';\n } catch {\n try {\n await execa('bash', ['-lc', 'which dnf']);\n cmd = 'sudo dnf install -y tmux';\n } catch {\n try {\n await execa('bash', ['-lc', 'which pacman']);\n cmd = 'sudo pacman -S --noconfirm tmux';\n } catch {\n console.log(chalk.red('Could not detect package manager. Please install tmux manually.'));\n return false;\n }\n }\n }\n }\n\n console.log(chalk.dim(`Running: ${cmd}`));\n\n try {\n if (cmd.includes('sudo')) {\n // For sudo commands, we need interactive terminal\n console.log(chalk.yellow('\\n⚠️ sudo password required. Running in your shell...\\n'));\n console.log(chalk.cyan(`Please run: ${cmd}\\n`));\n\n const { proceed } = await inquirer.prompt<{\n proceed: boolean;\n }>([\n {\n type: 'confirm',\n name: 'proceed',\n message: 'Press Enter after you have run the command above',\n default: true,\n },\n ]);\n\n return proceed;\n } else {\n await execa('bash', ['-lc', cmd]);\n console.log(chalk.green('✅ tmux installed successfully!\\n'));\n return true;\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.log(chalk.red(`Failed to install tmux: ${message}`));\n console.log(chalk.dim(`Please run manually: ${cmd}`));\n return false;\n }\n}\n\nexport async function promptSetup(): Promise<Partial<AppConfig>> {\n console.log(chalk.cyan.bold('\\n🚀 BranchNexus Setup Wizard\\n'));\n\n const platform = detectPlatform();\n const currentConfig = loadConfig();\n\n // Check and install dependencies\n const deps = await checkDependencies();\n\n if (!deps.git) {\n console.log(chalk.red('❌ Git is not installed. Please install Git first.'));\n console.log(chalk.dim('https://git-scm.com/downloads\\n'));\n process.exit(1);\n }\n\n if (!deps.tmux) {\n console.log(chalk.yellow('⚠️ tmux is not installed.\\n'));\n\n const { installTmuxNow } = await inquirer.prompt<{\n installTmuxNow: boolean;\n }>([\n {\n type: 'confirm',\n name: 'installTmuxNow',\n message: 'Install tmux automatically?',\n default: true,\n },\n ]);\n\n if (installTmuxNow) {\n const installed = await installTmux();\n if (!installed) {\n console.log(chalk.red('\\n❌ tmux installation failed or was skipped.'));\n console.log(chalk.dim('Please install tmux manually and run branchnexus init again.\\n'));\n process.exit(1);\n }\n } else {\n console.log(chalk.dim('\\nPlease install tmux manually:'));\n if (platform === Platform.MACOS) {\n console.log(chalk.cyan(' brew install tmux'));\n } else {\n console.log(chalk.cyan(' sudo apt-get install tmux'));\n }\n console.log();\n process.exit(1);\n }\n } else {\n console.log(chalk.green('✅ tmux is installed\\n'));\n }\n\n const answers = await inquirer.prompt<{\n defaultRoot: string;\n layout: Layout;\n panes: number;\n cleanup: CleanupPolicy;\n wslDistribution?: string;\n githubToken?: string;\n saveConfig: boolean;\n }>([\n {\n type: 'input',\n name: 'defaultRoot',\n message: 'Default working directory:',\n default: currentConfig.defaultRoot || '~/workspace',\n },\n {\n type: 'list',\n name: 'layout',\n message: 'Default layout:',\n choices: [\n { name: 'grid (2x2)', value: 'grid' },\n { name: 'horizontal (side by side)', value: 'horizontal' },\n { name: 'vertical (stacked)', value: 'vertical' },\n ],\n default: currentConfig.defaultLayout,\n },\n {\n type: 'number',\n name: 'panes',\n message: 'Default number of panes (2-6):',\n default: currentConfig.defaultPanes,\n validate: (value: number): string | boolean => {\n if (value < 2 || value > 6) {\n return 'Panes must be between 2 and 6';\n }\n return true;\n },\n },\n {\n type: 'list',\n name: 'cleanup',\n message: 'Cleanup policy:',\n choices: [\n { name: 'session (delete worktrees on exit)', value: 'session' },\n { name: 'persistent (keep worktrees)', value: 'persistent' },\n ],\n default: currentConfig.cleanupPolicy,\n },\n ...(platform === Platform.WINDOWS\n ? [\n {\n type: 'list' as const,\n name: 'wslDistribution',\n message: 'WSL distribution:',\n choices: async (): Promise<Array<{ name: string; value: string }>> => {\n try {\n const distros = await listDistributions();\n return distros.map((d) => ({ name: d, value: d }));\n } catch {\n return [{ name: 'No WSL distributions found', value: '' }];\n }\n },\n default: currentConfig.wslDistribution,\n },\n ]\n : []),\n {\n type: 'confirm',\n name: 'githubTokenPrompt',\n message: 'Configure GitHub token for private repos?',\n default: false,\n },\n {\n type: 'password',\n name: 'githubToken',\n message: 'GitHub token (optional):',\n mask: '*',\n when: (answers: { githubTokenPrompt: boolean }) => answers.githubTokenPrompt,\n },\n {\n type: 'confirm',\n name: 'saveConfig',\n message: 'Save configuration?',\n default: true,\n },\n ]);\n\n return {\n defaultRoot: answers.defaultRoot,\n defaultLayout: answers.layout,\n defaultPanes: answers.panes,\n cleanupPolicy: answers.cleanup,\n wslDistribution: answers.wslDistribution,\n githubToken: answers.githubToken,\n };\n}\n\nexport async function initCommand(): Promise<void> {\n logger.info('Starting init wizard');\n\n console.log(chalk.bold('\\n📋 BranchNexus Setup\\n'));\n\n console.log('This wizard will help you configure BranchNexus for your workflow.\\n');\n\n const partialConfig = await promptSetup();\n\n const config = loadConfig();\n const merged: AppConfig = {\n ...DEFAULT_CONFIG,\n ...config,\n ...partialConfig,\n };\n\n if (partialConfig.wslDistribution !== undefined && partialConfig.wslDistribution !== '') {\n setWslDistribution(partialConfig.wslDistribution);\n }\n\n if (partialConfig.githubToken !== undefined && partialConfig.githubToken !== '') {\n setGithubToken(partialConfig.githubToken);\n }\n\n saveConfig(merged);\n\n console.log(chalk.green('\\n✅ Configuration saved!\\n'));\n console.log(chalk.dim(`Config location: ${process.env.HOME}/.config/branchnexus/config.json`));\n console.log(chalk.dim('\\nRun `branchnexus` to start a session.\\n'));\n}\n"]}
|