UNPKG

@pimzino/claude-code-spec-workflow

Version:

Automated workflows for Claude Code. Includes spec-driven development (Requirements → Design → Tasks → Implementation) with intelligent task execution, optional steering documents and streamlined bug fix workflow (Report → Analyze → Fix → Verify). We have

126 lines 4.45 kB
"use strict"; /** * Automatic update functionality * Checks for newer versions and auto-updates the package */ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getCurrentVersion = getCurrentVersion; exports.getLatestVersion = getLatestVersion; exports.compareVersions = compareVersions; exports.checkForUpdate = checkForUpdate; exports.performAutoUpdate = performAutoUpdate; exports.autoUpdate = autoUpdate; const child_process_1 = require("child_process"); const util_1 = require("util"); const chalk_1 = __importDefault(require("chalk")); const ora_1 = __importDefault(require("ora")); const execAsync = (0, util_1.promisify)(child_process_1.exec); /** * Get the current package version */ function getCurrentVersion() { try { const packageJson = require('../package.json'); return packageJson.version; } catch { return '1.5.5'; // Fallback version } } /** * Get the latest version from npm registry */ async function getLatestVersion(packageName) { try { const { stdout } = await execAsync(`npm view ${packageName} version`); return stdout.trim(); } catch (error) { console.error(chalk_1.default.gray('Could not check for updates:', error instanceof Error ? error.message : error)); return null; } } /** * Compare two semantic versions * Returns: 1 if v1 > v2, -1 if v1 < v2, 0 if equal */ function compareVersions(v1, v2) { const parts1 = v1.split('.').map(Number); const parts2 = v2.split('.').map(Number); for (let i = 0; i < Math.max(parts1.length, parts2.length); i++) { const part1 = parts1[i] || 0; const part2 = parts2[i] || 0; if (part1 > part2) return 1; if (part1 < part2) return -1; } return 0; } /** * Check if an update is available */ async function checkForUpdate(packageName) { const currentVersion = getCurrentVersion(); const latestVersion = await getLatestVersion(packageName); if (!latestVersion) { return { hasUpdate: false, currentVersion, latestVersion }; } const hasUpdate = compareVersions(latestVersion, currentVersion) > 0; return { hasUpdate, currentVersion, latestVersion }; } /** * Perform automatic update */ async function performAutoUpdate(packageName) { const spinner = (0, ora_1.default)('Updating to latest version...').start(); try { // Try global update first await execAsync(`npm install -g ${packageName}`, { timeout: 60000 }); spinner.succeed(chalk_1.default.green('Successfully updated to latest version!')); return true; } catch (error) { spinner.fail(chalk_1.default.red('Auto-update failed')); console.error(chalk_1.default.gray('Update error:', error instanceof Error ? error.message : error)); console.log(chalk_1.default.yellow('Please update manually: npm install -g @pimzino/claude-code-spec-workflow')); return false; } } /** * Main auto-update function * Checks for updates and auto-updates if available */ async function autoUpdate(packageName = '@pimzino/claude-code-spec-workflow') { try { const updateInfo = await checkForUpdate(packageName); if (!updateInfo.hasUpdate) { // No update needed return true; } console.log(chalk_1.default.cyan(`📦 Update available: ${updateInfo.currentVersion}${updateInfo.latestVersion}`)); console.log(chalk_1.default.gray('Auto-updating...')); console.log(); const success = await performAutoUpdate(packageName); if (success) { console.log(chalk_1.default.green('✅ Update complete! Continuing with setup...')); console.log(); return true; } else { console.log(chalk_1.default.yellow('⚠️ Update failed, but continuing with current version...')); console.log(); return false; } } catch (error) { console.error(chalk_1.default.gray('Auto-update check failed:', error instanceof Error ? error.message : error)); console.log(chalk_1.default.gray('Continuing with current version...')); console.log(); return false; } } //# sourceMappingURL=auto-update.js.map