UNPKG

ccgwz

Version:

Claude Code Git Worktree Zellij - CLI tool for parallel development with git worktrees and Claude Code in zellij panes

94 lines 2.58 kB
import { execa } from 'execa'; import { ERROR_MESSAGES } from './constants.js'; export async function validateGitRepository() { try { await execa('git', ['rev-parse', '--is-inside-work-tree']); const projectName = await getProjectName(); const currentBranch = await getCurrentBranch(); return { success: true, data: { isRepository: true, projectName, currentBranch, }, }; } catch { return { success: false, error: ERROR_MESSAGES.NOT_GIT_REPO, }; } } export async function validateZellijRunning() { try { const { stdout } = await execa('zellij', ['list-sessions']); const sessions = stdout .split('\n') .filter((line) => line.trim().length > 0) .filter((line) => !line.includes('No active zellij sessions')); return { success: true, data: { isRunning: true, sessions, }, }; } catch { return { success: false, error: ERROR_MESSAGES.ZELLIJ_NOT_RUNNING, }; } } export function validatePaneCount(count) { if (count < 1 || count > 10) { return { success: false, error: ERROR_MESSAGES.INVALID_PANE_COUNT, }; } return { success: true, data: count, }; } export function sanitizeBranchName(name) { return name .replace(/[^a-zA-Z0-9-_]/g, '-') .replace(/^-+|-+$/g, '') .replace(/-+/g, '-') .toLowerCase(); } export function generateUniqueBranchName(baseName, existingNames) { let counter = 1; let candidateName = baseName; while (existingNames.includes(candidateName)) { candidateName = `${baseName}_${counter.toString().padStart(2, '0')}`; counter++; } return candidateName; } async function getProjectName() { try { const { stdout } = await execa('git', ['remote', 'get-url', 'origin']); const match = stdout.match(/\/([^/]+)\.git$/); return match?.[1] ?? 'unknown-project'; } catch { const { stdout } = await execa('basename', [process.cwd()]); return stdout.trim(); } } async function getCurrentBranch() { try { const { stdout } = await execa('git', ['branch', '--show-current']); return stdout.trim(); } catch { return 'main'; } } //# sourceMappingURL=validation.js.map