@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
JavaScript
;
/**
* 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