diff --git a/.codex/skills/impeccable/SKILL.md b/.codex/skills/impeccable/SKILL.md index 29e31ef86..e5389af77 100644 --- a/.codex/skills/impeccable/SKILL.md +++ b/.codex/skills/impeccable/SKILL.md @@ -354,4 +354,4 @@ Confirm completion and summarize the key design principles that will now guide a ## Extract Mode -If this skill is invoked with the argument "extract" (e.g., `$impeccable extract [target]`), follow the [extract flow](reference$extract.md). Pass any additional arguments as the extraction target. \ No newline at end of file +If this skill is invoked with the argument "extract" (e.g., `$impeccable extract [target]`), follow the [extract flow](reference/extract.md). Pass any additional arguments as the extraction target. \ No newline at end of file diff --git a/bin/commands/skills.mjs b/bin/commands/skills.mjs index 5fd000f5e..b51c1e233 100644 --- a/bin/commands/skills.mjs +++ b/bin/commands/skills.mjs @@ -220,6 +220,18 @@ async function install(flags) { } } + // Clean up deprecated skills from previous versions + try { + const { cleanup } = await import('../../source/skills/impeccable/scripts/cleanup-deprecated.mjs'); + const result = cleanup(root); + const total = result.deletedPaths.length + result.removedLockEntries.length; + if (total > 0) { + console.log(`Cleaned up ${total} deprecated skill(s) from previous versions.`); + } + } catch { + // Cleanup script not available -- skip + } + console.log(`\nDone! Run /${prefix}impeccable teach in your AI harness to set up design context.\n`); } @@ -356,6 +368,21 @@ function downloadFile(url, dest) { async function update(flags = []) { const yes = flags.includes('-y') || flags.includes('--yes'); + + // Clean up deprecated skills before updating, so npx skills update + // does not fail on entries that no longer exist in the source repo. + try { + const { cleanup } = await import('../../source/skills/impeccable/scripts/cleanup-deprecated.mjs'); + const root = findProjectRoot(); + const result = cleanup(root); + const total = result.deletedPaths.length + result.removedLockEntries.length; + if (total > 0) { + console.log(`Cleaned up ${total} deprecated skill(s) from previous versions.\n`); + } + } catch { + // Cleanup script not available (e.g. running from npm package) -- skip + } + // Try npx skills update first console.log('Checking for skills manager...'); let noLockFile = true; diff --git a/public/index.html b/public/index.html index 89b888b21..e2dda6bab 100644 --- a/public/index.html +++ b/public/index.html @@ -452,7 +452,22 @@