aweskill 0.1.7 → 0.2.1

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/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/commands/backup.ts","../src/lib/backup.ts","../src/lib/fs.ts","../src/lib/path.ts","../src/lib/bundles.ts","../src/lib/skills.ts","../src/lib/templates.ts","../src/commands/bundle.ts","../src/lib/import.ts","../src/lib/scanner.ts","../src/lib/agents.ts","../src/commands/import.ts","../src/lib/symlink.ts","../src/commands/check.ts","../src/commands/disable.ts","../src/commands/enable.ts","../src/commands/scan.ts","../src/commands/init.ts","../src/commands/list.ts","../src/commands/recover.ts","../src/lib/references.ts","../src/commands/remove.ts","../src/commands/restore.ts","../src/lib/rmdup.ts","../src/commands/rmdup.ts","../src/commands/sync.ts","../src/lib/version.ts","../src/lib/runtime.ts","../src/lib/ui.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { Command } from \"commander\";\nimport { homedir } from \"node:os\";\n\nimport { runBackup } from \"./commands/backup.js\";\nimport {\n runBundleAddTemplate,\n runBundleAddSkill,\n runBundleCreate,\n runBundleDelete,\n runBundleRemoveSkill,\n runBundleShow,\n} from \"./commands/bundle.js\";\nimport { runImport } from \"./commands/import.js\";\nimport { runCheck } from \"./commands/check.js\";\nimport { runDisable } from \"./commands/disable.js\";\nimport { runEnable } from \"./commands/enable.js\";\nimport { runInit } from \"./commands/init.js\";\nimport { runListBundles, runListSkills, runListTemplateBundles } from \"./commands/list.js\";\nimport { runRecover } from \"./commands/recover.js\";\nimport { runRemove } from \"./commands/remove.js\";\nimport { runRestore } from \"./commands/restore.js\";\nimport { runRmdup } from \"./commands/rmdup.js\";\nimport { runScan } from \"./commands/scan.js\";\nimport { runSync } from \"./commands/sync.js\";\nimport { AWESKILL_VERSION } from \"./lib/version.js\";\nimport { listSupportedAgents } from \"./lib/agents.js\";\nimport { isDirectCliEntry } from \"./lib/runtime.js\";\nimport { introCommand, outroCommand, writeCliError, writeCliMessage } from \"./lib/ui.js\";\nimport type { ActivationType, ImportMode, RuntimeContext, Scope } from \"./types.js\";\n\nfunction createRuntimeContext(overrides: Partial<RuntimeContext> = {}): RuntimeContext {\n return {\n cwd: overrides.cwd ?? process.cwd(),\n homeDir: overrides.homeDir ?? process.env.AWESKILL_HOME ?? homedir(),\n write: overrides.write ?? writeCliMessage,\n error: overrides.error ?? writeCliError,\n };\n}\n\nasync function runFramedCommand<T>(title: string, action: () => Promise<T>): Promise<T> {\n introCommand(title);\n const result = await action();\n outroCommand();\n return result;\n}\n\nfunction collectAgents(value: string, previous?: string[]): string[] {\n return [...(previous ?? []), ...value.split(\",\").map((entry) => entry.trim()).filter(Boolean)];\n}\n\nfunction getMode(value: string): ImportMode {\n if (value === \"mv\" || value === \"cp\") {\n return value;\n }\n throw new Error(`Unsupported import mode: ${value}. Use \"cp\" or \"mv\".`);\n}\n\nfunction getActivationType(value: string): ActivationType {\n if (value === \"bundle\" || value === \"skill\") {\n return value;\n }\n throw new Error(`Unsupported activation type: ${value}`);\n}\n\nfunction formatCliErrorMessage(message: string): string {\n const match = message.match(/missing required argument '([^']+)'/i);\n if (!match) {\n const optionMatch = message.match(/option '([^']+)' argument missing/i);\n if (optionMatch?.[1] === \"--agent <agent>\") {\n return \"Option --agent <agent> argument missing. Use one or more supported agent ids, for example \\\"codex\\\" or \\\"codex,cursor\\\". Run \\\"aweskill agent supported\\\" to see the supported agent list.\";\n }\n const normalizedMessage = message.replace(/^error:\\s*/i, \"\");\n const bundleFileMatch = normalizedMessage.match(/ENOENT: no such file or directory, open '([^']+\\/(bundles|resources\\/bundle_templates)\\/([^/'\"]+)\\.ya?ml)'/i);\n if (bundleFileMatch) {\n const bundleName = bundleFileMatch[3]!;\n if (bundleFileMatch[2] === \"resources/bundle_templates\") {\n return `Bundle template not found: ${bundleName}. Run \"aweskill bundle template list\" to see available bundle templates.`;\n }\n return `Bundle not found: ${bundleName}. Run \"aweskill bundle list\" to see available bundles.`;\n }\n const unknownSkillMatch = normalizedMessage.match(/^Unknown skill: (.+)$/);\n if (unknownSkillMatch) {\n return `Unknown skill: ${unknownSkillMatch[1]}. Run \"aweskill skill list\" to see available skills.`;\n }\n const bundleNotFoundMatch = normalizedMessage.match(/^Bundle not found: (.+)$/);\n if (bundleNotFoundMatch) {\n return `Bundle not found: ${bundleNotFoundMatch[1]}. Run \"aweskill bundle list\" to see available bundles.`;\n }\n return normalizedMessage;\n }\n\n const argName = match[1]!;\n const hints: Record<string, string> = {\n archive: 'Use a backup archive path, for example \"skills-2026-04-12T19-20-00Z.tar.gz\".',\n bundle: \"Use a bundle name.\",\n name: 'Use a bundle or skill name, for example \"my-bundle\", \"biopython\", or \"all\".',\n skill: \"Use a skill name.\",\n type: 'Use \"bundle\" or \"skill\".',\n };\n const hint = hints[argName];\n return `Missing required argument <${argName}>.${hint ? ` ${hint}` : \"\"}`;\n}\n\nfunction writeSupportedAgents(context: RuntimeContext): void {\n const lines = [\n \"Supported agents:\",\n ...listSupportedAgents().map((agent) => `${agent.id} (${agent.displayName})`),\n ];\n for (const line of lines) {\n context.write(line);\n }\n}\n\nfunction configureCommandTree(command: Command): void {\n command.showHelpAfterError();\n command.exitOverride((error) => {\n throw new Error(formatCliErrorMessage(error.message));\n });\n\n for (const child of command.commands) {\n configureCommandTree(child);\n }\n}\n\n\nexport function createProgram(overrides: Partial<RuntimeContext> = {}) {\n const context = createRuntimeContext(overrides);\n const program = new Command();\n\n program\n .name(\"aweskill\")\n .description(\"Local skill orchestration CLI for AI agents\")\n .version(AWESKILL_VERSION)\n .helpOption(\"-h, --help\", \"Display help\");\n\n const skill = program.command(\"skill\").description(\"Manage skills in the central store\");\n skill\n .command(\"list\")\n .description(\"List skills in the central store\")\n .option(\"--verbose\", \"show all skills instead of a short preview\", false)\n .action(async (options) => {\n await runListSkills(context, { verbose: options.verbose });\n });\n skill\n .command(\"scan\")\n .description(\"Scan supported agent skill directories\")\n .option(\"--verbose\", \"show scanned skill details instead of per-agent totals\", false)\n .action(async (options) => {\n await runFramedCommand(\" aweskill skill scan \", async () =>\n runScan(context, {\n verbose: options.verbose,\n }),\n );\n });\n skill\n .command(\"import\")\n .argument(\"[path]\")\n .description(\"Import one skill or a skills root directory\")\n .option(\"--scan\", \"import scanned skills\", false)\n .option(\"--mode <mode>\", \"import mode: cp (default) or mv\", getMode, \"cp\")\n .option(\"--override\", \"overwrite existing files when importing\", false)\n .action(async (sourcePath, options) => {\n await runFramedCommand(\" aweskill skill import \", async () =>\n runImport(context, {\n sourcePath,\n scan: options.scan,\n mode: options.mode,\n override: options.override,\n }),\n );\n });\n skill\n .command(\"remove\")\n .argument(\"<skill>\")\n .description(\"Remove a skill from the central store\")\n .option(\"--force\", \"remove and clean references\", false)\n .option(\"--project <dir>\", \"project config to inspect\")\n .action(async (skillName, options) => {\n await runFramedCommand(\" aweskill skill remove \", async () =>\n runRemove(context, {\n skillName,\n force: options.force,\n projectDir: options.project,\n }),\n );\n });\n\n const bundle = program.command(\"bundle\").description(\"Manage skill bundles\");\n bundle\n .command(\"list\")\n .description(\"List bundles in the central store\")\n .option(\"--verbose\", \"show all bundles instead of a short preview\", false)\n .action(async (options) => {\n await runListBundles(context, { verbose: options.verbose });\n });\n bundle.command(\"create\").argument(\"<name>\").description(\"Create a bundle\").action(async (name) => {\n await runFramedCommand(\" aweskill bundle create \", async () => runBundleCreate(context, name));\n });\n bundle.command(\"show\").argument(\"<name>\").description(\"Show bundle contents\").action(async (name) => {\n await runBundleShow(context, name);\n });\n bundle\n .command(\"add\")\n .argument(\"<bundle>\")\n .argument(\"<skill>\")\n .description(\"Add skill entries to one or more bundles\")\n .action(async (bundleName, skillName) => {\n await runFramedCommand(\" aweskill bundle add \", async () => runBundleAddSkill(context, bundleName, skillName));\n });\n bundle\n .command(\"remove\")\n .argument(\"<bundle>\")\n .argument(\"<skill>\")\n .description(\"Remove skill entries from one or more bundles\")\n .action(async (bundleName, skillName) => {\n await runFramedCommand(\" aweskill bundle remove \", async () => runBundleRemoveSkill(context, bundleName, skillName));\n });\n bundle.command(\"delete\").argument(\"<name>\").description(\"Delete a bundle\").action(async (name) => {\n await runFramedCommand(\" aweskill bundle delete \", async () => runBundleDelete(context, name));\n });\n const bundleTemplate = bundle.command(\"template\").description(\"Manage built-in bundle templates\");\n bundleTemplate\n .command(\"list\")\n .description(\"List available built-in bundle templates\")\n .option(\"--verbose\", \"show all bundle templates instead of a short preview\", false)\n .action(async (options) => {\n await runListTemplateBundles(context, { verbose: options.verbose });\n });\n bundleTemplate.command(\"import\").argument(\"<name>\").description(\"Copy built-in templates into the central store\").action(async (name) => {\n await runFramedCommand(\" aweskill bundle template import \", async () => runBundleAddTemplate(context, name));\n });\n\n const agent = program.command(\"agent\").description(\"Manage skills used by agents\");\n agent.command(\"supported\").description(\"List supported agent ids and display names\").action(async () => {\n writeSupportedAgents(context);\n });\n agent\n .command(\"list\")\n .description(\"Inspect agent skill directories and optionally normalize them\")\n .option(\"--global\", \"check global scope (default when no scope flag given)\")\n .option(\"--project [dir]\", \"check project scope; uses cwd when dir is omitted\")\n .option(\"--agent <agent>\", 'repeat or use comma list; defaults to all; run \"aweskill agent supported\" to see supported ids', collectAgents)\n .option(\"--update\", \"import missing skills into the central store and relink duplicates/new skills\", false)\n .option(\"--verbose\", \"show all skills in each category instead of a short preview\", false)\n .action(async (options) => {\n const isProject = options.project !== undefined;\n const scope: Scope = isProject ? \"project\" : \"global\";\n const projectDir = isProject && typeof options.project === \"string\" ? options.project : undefined;\n await runFramedCommand(\" aweskill agent list \", async () =>\n runCheck(context, {\n scope,\n agents: options.agent ?? [],\n projectDir,\n update: options.update,\n verbose: options.verbose,\n }),\n );\n });\n agent\n .command(\"add\")\n .description(\"Create skill projections in agent directories\")\n .argument(\"<type>\", \"bundle or skill\", getActivationType)\n .argument(\"<name>\", 'bundle or skill name(s), comma-separated, or \"all\"')\n .option(\"--global\", \"apply to global scope (default when no scope flag given)\")\n .option(\"--project [dir]\", \"apply to project scope; uses cwd when dir is omitted\")\n .option(\"--agent <agent>\", 'repeat or use comma list; defaults to all; run \"aweskill agent supported\" to see supported ids', collectAgents)\n .action(async (type, targetName, options) => {\n const isProject = options.project !== undefined;\n const scope: Scope = isProject ? \"project\" : \"global\";\n const projectDir = isProject && typeof options.project === \"string\" ? options.project : undefined;\n await runFramedCommand(\" aweskill agent add \", async () =>\n runEnable(context, {\n type,\n name: targetName,\n scope,\n agents: options.agent ?? [],\n projectDir,\n }),\n );\n });\n agent\n .command(\"remove\")\n .description(\"Remove skill projections in agent directories\")\n .argument(\"<type>\", \"bundle or skill\", getActivationType)\n .argument(\"<name>\", 'bundle or skill name(s), comma-separated, or \"all\"')\n .option(\"--global\", \"apply to global scope (default when no scope flag given)\")\n .option(\"--project [dir]\", \"apply to project scope; uses cwd when dir is omitted\")\n .option(\"--agent <agent>\", 'repeat or use comma list; defaults to all; run \"aweskill agent supported\" to see supported ids', collectAgents)\n .option(\n \"--force\",\n \"with skill: remove projection even when this skill is in a bundle that still has other members enabled here\",\n false,\n )\n .action(async (type, targetName, options) => {\n const isProject = options.project !== undefined;\n const scope: Scope = isProject ? \"project\" : \"global\";\n const projectDir = isProject && typeof options.project === \"string\" ? options.project : undefined;\n await runFramedCommand(\" aweskill agent remove \", async () =>\n runDisable(context, {\n type,\n name: targetName,\n scope,\n agents: options.agent ?? [],\n projectDir,\n force: options.force,\n }),\n );\n });\n agent\n .command(\"sync\")\n .description(\"Remove stale managed projections whose source skill no longer exists\")\n .option(\"--project <dir>\", \"also check this project directory\")\n .action(async (options) => {\n await runFramedCommand(\" aweskill agent sync \", async () => runSync(context, { projectDir: options.project }));\n });\n agent\n .command(\"recover\")\n .description(\"Convert aweskill-managed symlink projections into full skill directories\")\n .option(\"--global\", \"recover global scope (default when no scope flag given)\")\n .option(\"--project [dir]\", \"recover project scope; uses cwd when dir is omitted\")\n .option(\"--agent <agent>\", 'repeat or use comma list; defaults to all; run \"aweskill agent supported\" to see supported ids', collectAgents)\n .action(async (options) => {\n const isProject = options.project !== undefined;\n const scope: Scope = isProject ? \"project\" : \"global\";\n const projectDir = isProject && typeof options.project === \"string\" ? options.project : undefined;\n await runFramedCommand(\" aweskill agent recover \", async () =>\n runRecover(context, {\n scope,\n agents: options.agent ?? [],\n projectDir,\n }),\n );\n });\n\n const store = program.command(\"store\").description(\"Manage the aweskill local store\");\n store\n .command(\"init\")\n .description(\"Create ~/.aweskill layout\")\n .option(\"--scan\", \"scan existing agent directories after init\", false)\n .option(\"--verbose\", \"show scanned skill details instead of per-agent totals\", false)\n .action(async (options) => {\n await runFramedCommand(\" aweskill store init \", async () => runInit(context, options));\n });\n store\n .command(\"backup\")\n .argument(\"[archive]\")\n .description(\"Create a timestamped archive of the central skills repository\")\n .option(\"--both\", \"include bundle definitions in the backup archive\", false)\n .action(async (archivePath, options) => {\n await runFramedCommand(\" aweskill store backup \", async () =>\n runBackup(context, {\n archivePath,\n includeBundles: options.both,\n }),\n );\n });\n store\n .command(\"restore\")\n .argument(\"<archive>\")\n .description(\"Restore skills from a backup archive and auto-back up the current skills first\")\n .option(\"--override\", \"replace existing skills with the archive contents\", false)\n .option(\"--both\", \"restore bundle definitions and include them in the pre-restore backup\", false)\n .action(async (archivePath, options) => {\n await runFramedCommand(\" aweskill store restore \", async () =>\n runRestore(context, {\n archivePath,\n override: options.override,\n includeBundles: options.both,\n }),\n );\n });\n\n const doctor = program.command(\"doctor\").description(\"Diagnose and repair repository issues\");\n doctor\n .command(\"dedupe\")\n .description(\"Find or remove duplicate central-store skills with numeric/version suffixes\")\n .option(\"--fix\", \"move duplicate skills into dup_skills (or delete them with --delete)\", false)\n .option(\"--delete\", \"when used with --fix, permanently delete duplicates instead of moving them\", false)\n .action(async (options) => {\n await runFramedCommand(\" aweskill doctor dedupe \", async () =>\n runRmdup(context, {\n remove: options.fix,\n delete: options.delete,\n }),\n );\n });\n\n configureCommandTree(program);\n return program;\n}\n\nexport async function main(argv = process.argv) {\n const program = createProgram();\n try {\n await program.parseAsync(argv);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n if (message === \"(outputHelp)\" || message === \"outputHelp\") {\n return;\n }\n\n console.error(`Error: ${formatCliErrorMessage(message)}`);\n process.exitCode = 1;\n }\n}\n\nif (isDirectCliEntry(import.meta.url, process.argv[1])) {\n void main();\n}\n","import path from \"node:path\";\n\nimport { createSkillsBackupArchive, formatBackupLabel } from \"../lib/backup.js\";\nimport { expandHomePath } from \"../lib/path.js\";\nimport type { RuntimeContext } from \"../types.js\";\n\nexport async function runBackup(\n context: RuntimeContext,\n options: {\n archivePath?: string;\n includeBundles?: boolean;\n } = {},\n) {\n const archivePath = await createSkillsBackupArchive(context.homeDir, {\n archivePath: options.archivePath ? path.resolve(context.cwd, expandHomePath(options.archivePath, context.homeDir)) : undefined,\n includeBundles: options.includeBundles,\n });\n context.write(`Backed up ${formatBackupLabel(options.includeBundles ?? false)} to ${archivePath}`);\n return { archivePath };\n}\n","import { mkdtemp, mkdir, stat } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport path from \"node:path\";\nimport { spawn } from \"node:child_process\";\n\nimport { pathExists } from \"./fs.js\";\nimport { getAweskillPaths } from \"./path.js\";\n\nfunction formatTimestamp(date: Date): string {\n return date.toISOString().replace(/:/g, \"-\").replace(/\\.\\d{3}Z$/, \"Z\");\n}\n\nasync function runTar(args: string[]): Promise<void> {\n await new Promise<void>((resolve, reject) => {\n const child = spawn(\"tar\", args, { stdio: \"ignore\" });\n child.on(\"error\", reject);\n child.on(\"exit\", (code) => {\n if (code === 0) {\n resolve();\n return;\n }\n reject(new Error(`tar exited with code ${code ?? \"unknown\"}`));\n });\n });\n}\n\nfunction formatBackupLabel(includeBundles: boolean): string {\n return includeBundles ? \"skills and bundles\" : \"skills\";\n}\n\nfunction archiveEntries(homeDir: string, includeBundles: boolean) {\n const { rootDir, skillsDir, bundlesDir } = getAweskillPaths(homeDir);\n return includeBundles\n ? [path.relative(rootDir, skillsDir), path.relative(rootDir, bundlesDir)]\n : [path.relative(rootDir, skillsDir)];\n}\n\nexport async function createSkillsBackupArchive(\n homeDir: string,\n options: {\n archivePath?: string;\n includeBundles?: boolean;\n } = {},\n): Promise<string> {\n const { rootDir, backupDir } = getAweskillPaths(homeDir);\n const includeBundles = options.includeBundles ?? false;\n const archivePath = await resolveBackupArchivePath(backupDir, options.archivePath);\n\n await mkdir(path.dirname(archivePath), { recursive: true });\n\n await runTar([\"-czf\", archivePath, \"-C\", rootDir, ...archiveEntries(homeDir, includeBundles)]);\n return archivePath;\n}\n\nexport async function extractSkillsArchive(archivePath: string): Promise<{\n tempDir: string;\n extractedSkillsDir: string;\n extractedBundlesDir: string;\n}> {\n const tempDir = await mkdtemp(path.join(tmpdir(), \"aweskill-restore-\"));\n await runTar([\"-xzf\", archivePath, \"-C\", tempDir]);\n return {\n tempDir,\n extractedSkillsDir: path.join(tempDir, \"skills\"),\n extractedBundlesDir: path.join(tempDir, \"bundles\"),\n };\n}\n\nexport { formatBackupLabel };\n\nasync function resolveBackupArchivePath(backupDir: string, requestedPath?: string): Promise<string> {\n if (!requestedPath) {\n return nextBackupArchivePath(backupDir);\n }\n\n try {\n const requestedStats = await stat(requestedPath);\n if (requestedStats.isDirectory()) {\n return nextBackupArchivePath(requestedPath);\n }\n } catch {\n // Treat missing paths as explicit archive filenames and let tar surface other filesystem errors.\n }\n\n return requestedPath;\n}\n\nasync function nextBackupArchivePath(backupDir: string): Promise<string> {\n const base = `skills-${formatTimestamp(new Date())}`;\n const primary = path.join(backupDir, `${base}.tar.gz`);\n if (!(await pathExists(primary))) {\n return primary;\n }\n\n let index = 1;\n while (true) {\n const candidate = path.join(backupDir, `${base}-${index}.tar.gz`);\n if (!(await pathExists(candidate))) {\n return candidate;\n }\n index += 1;\n }\n}\n","import { access } from \"node:fs/promises\";\n\nexport async function pathExists(targetPath: string): Promise<boolean> {\n try {\n await access(targetPath);\n return true;\n } catch {\n return false;\n }\n}\n","import { homedir } from \"node:os\";\nimport path from \"node:path\";\n\nimport type { AweskillPaths } from \"../types.js\";\n\nexport function sanitizeName(input: string): string {\n return input\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9._-]+/g, \"-\")\n .replace(/^-+/, \"\")\n .replace(/-+$/, \"\")\n .slice(0, 80);\n}\n\nexport function expandHomePath(targetPath: string, homeDir = homedir()): string {\n if (targetPath === \"~\") {\n return homeDir;\n }\n\n if (targetPath.startsWith(\"~/\")) {\n return path.join(homeDir, targetPath.slice(2));\n }\n\n return targetPath;\n}\n\nexport function getAweskillPaths(homeDir: string): AweskillPaths {\n const rootDir = path.join(homeDir, \".aweskill\");\n return {\n homeDir,\n rootDir,\n skillsDir: path.join(rootDir, \"skills\"),\n dupSkillsDir: path.join(rootDir, \"dup_skills\"),\n backupDir: path.join(rootDir, \"backup\"),\n bundlesDir: path.join(rootDir, \"bundles\"),\n };\n}\n\nexport function getProjectConfigPath(projectDir: string): string {\n return path.join(projectDir, \".aweskill.yaml\");\n}\n\nexport function isPathSafe(baseDir: string, targetPath: string): boolean {\n const base = path.resolve(baseDir);\n const target = path.resolve(targetPath);\n\n if (base === target) {\n return true;\n }\n\n const relativePath = path.relative(base, target);\n return relativePath !== \"\" && !relativePath.startsWith(\"..\") && !path.isAbsolute(relativePath);\n}\n\nexport function assertPathSafe(baseDir: string, targetPath: string): void {\n if (!isPathSafe(baseDir, targetPath)) {\n throw new Error(`Path escapes base directory: ${targetPath}`);\n }\n}\n\nexport function uniqueSorted<T>(items: T[]): T[] {\n return [...new Set(items)].sort() as T[];\n}\n\nexport function splitCommaValues(input: string): string[] {\n return input\n .split(\",\")\n .map((value) => value.trim())\n .filter(Boolean);\n}\n","import { mkdir, readFile, readdir, rm, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport { parse, stringify } from \"yaml\";\n\nimport type { BundleDefinition } from \"../types.js\";\nimport { pathExists } from \"./fs.js\";\nimport { getAweskillPaths, sanitizeName, uniqueSorted } from \"./path.js\";\nimport { skillExists } from \"./skills.js\";\n\nfunction bundleFilePath(homeDir: string, bundleName: string): string {\n return path.join(getAweskillPaths(homeDir).bundlesDir, `${sanitizeName(bundleName)}.yaml`);\n}\n\nfunction bundleFilePathInDirectory(bundlesDir: string, bundleName: string): string {\n return path.join(bundlesDir, `${sanitizeName(bundleName)}.yaml`);\n}\n\nfunction normalizeBundle(raw: unknown, fallbackName: string): BundleDefinition {\n const data = (raw ?? {}) as Partial<BundleDefinition>;\n return {\n name: sanitizeName(data.name ?? fallbackName),\n skills: uniqueSorted((data.skills ?? []).map((skill) => sanitizeName(String(skill))).filter(Boolean)),\n };\n}\n\nexport async function listBundles(homeDir: string): Promise<BundleDefinition[]> {\n const bundlesDir = getAweskillPaths(homeDir).bundlesDir;\n return listBundlesInDirectory(bundlesDir);\n}\n\nexport async function listBundlesInDirectory(bundlesDir: string): Promise<BundleDefinition[]> {\n await mkdir(bundlesDir, { recursive: true });\n const entries = await readdir(bundlesDir, { withFileTypes: true });\n\n const bundles = await Promise.all(\n entries\n .filter((entry) => entry.isFile() && entry.name.endsWith(\".yaml\"))\n .map(async (entry) => readBundleFromDirectory(bundlesDir, entry.name.replace(/\\.yaml$/, \"\"))),\n );\n\n return bundles.sort((left, right) => left.name.localeCompare(right.name));\n}\n\nexport async function readBundle(homeDir: string, bundleName: string): Promise<BundleDefinition> {\n const filePath = bundleFilePath(homeDir, bundleName);\n const content = await readFile(filePath, \"utf8\");\n return normalizeBundle(parse(content), bundleName);\n}\n\nexport async function readBundleFromDirectory(bundlesDir: string, bundleName: string): Promise<BundleDefinition> {\n const filePath = bundleFilePathInDirectory(bundlesDir, bundleName);\n const content = await readFile(filePath, \"utf8\");\n return normalizeBundle(parse(content), bundleName);\n}\n\nexport async function writeBundle(homeDir: string, bundle: BundleDefinition): Promise<BundleDefinition> {\n const normalized = normalizeBundle(bundle, bundle.name);\n const filePath = bundleFilePath(homeDir, normalized.name);\n await mkdir(path.dirname(filePath), { recursive: true });\n await writeFile(filePath, stringify(normalized), \"utf8\");\n return normalized;\n}\n\nexport async function createBundle(homeDir: string, bundleName: string): Promise<BundleDefinition> {\n const normalizedName = sanitizeName(bundleName);\n return writeBundle(homeDir, { name: normalizedName, skills: [] });\n}\n\nexport async function addSkillToBundle(homeDir: string, bundleName: string, skillName: string): Promise<BundleDefinition> {\n const normalizedSkill = sanitizeName(skillName);\n if (!(await skillExists(homeDir, normalizedSkill))) {\n throw new Error(`Unknown skill: ${normalizedSkill}`);\n }\n\n const bundle = await readBundle(homeDir, bundleName);\n bundle.skills = uniqueSorted([...bundle.skills, normalizedSkill].filter(Boolean));\n return writeBundle(homeDir, bundle);\n}\n\nexport async function removeSkillFromBundle(homeDir: string, bundleName: string, skillName: string): Promise<BundleDefinition> {\n const bundle = await readBundle(homeDir, bundleName);\n const normalizedSkill = sanitizeName(skillName);\n bundle.skills = bundle.skills.filter((skill) => skill !== normalizedSkill);\n return writeBundle(homeDir, bundle);\n}\n\nexport async function deleteBundle(homeDir: string, bundleName: string): Promise<boolean> {\n const filePath = bundleFilePath(homeDir, bundleName);\n if (!(await pathExists(filePath))) {\n return false;\n }\n\n await rm(filePath, { force: true });\n return true;\n}\n","import { mkdir, readdir } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport type { SkillEntry } from \"../types.js\";\nimport { pathExists } from \"./fs.js\";\nimport { getAweskillPaths, sanitizeName } from \"./path.js\";\n\nexport async function ensureHomeLayout(homeDir: string): Promise<void> {\n const paths = getAweskillPaths(homeDir);\n await mkdir(paths.rootDir, { recursive: true });\n await mkdir(paths.skillsDir, { recursive: true });\n await mkdir(paths.dupSkillsDir, { recursive: true });\n await mkdir(paths.backupDir, { recursive: true });\n await mkdir(paths.bundlesDir, { recursive: true });\n}\n\nexport function getSkillPath(homeDir: string, skillName: string): string {\n return path.join(getAweskillPaths(homeDir).skillsDir, sanitizeName(skillName));\n}\n\nexport async function listSkills(homeDir: string): Promise<SkillEntry[]> {\n const skillsDir = getAweskillPaths(homeDir).skillsDir;\n return listSkillEntriesInDirectory(skillsDir);\n}\n\nexport async function listSkillEntriesInDirectory(skillsDir: string): Promise<SkillEntry[]> {\n if (!(await pathExists(skillsDir))) {\n return [];\n }\n\n const entries = await readdir(skillsDir, { withFileTypes: true });\n const skills = await Promise.all(\n entries\n .filter((entry) => entry.isDirectory() || entry.isSymbolicLink())\n .map(async (entry) => {\n const skillPath = path.join(skillsDir, entry.name);\n return {\n name: entry.name,\n path: skillPath,\n hasSKILLMd: await pathExists(path.join(skillPath, \"SKILL.md\")),\n } satisfies SkillEntry;\n }),\n );\n\n return skills.sort((left, right) => left.name.localeCompare(right.name));\n}\n\nexport async function assertSkillSource(sourcePath: string): Promise<void> {\n const skillReadme = path.join(sourcePath, \"SKILL.md\");\n if (!(await pathExists(skillReadme))) {\n throw new Error(`Skill source must contain SKILL.md: ${sourcePath}`);\n }\n}\n\nexport async function skillExists(homeDir: string, skillName: string): Promise<boolean> {\n return pathExists(getSkillPath(homeDir, skillName));\n}\n","import path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { pathExists } from \"./fs.js\";\n\nexport async function getTemplateBundlesDir(): Promise<string> {\n const moduleDir = path.dirname(fileURLToPath(import.meta.url));\n const candidates = [\n path.resolve(moduleDir, \"..\", \"..\", \"resources\", \"bundle_templates\"),\n path.resolve(moduleDir, \"..\", \"resources\", \"bundle_templates\"),\n ];\n\n for (const candidate of candidates) {\n if (await pathExists(candidate)) {\n return candidate;\n }\n }\n\n throw new Error(`Template bundles directory not found. Checked: ${candidates.join(\", \")}`);\n}\n","import { addSkillToBundle, createBundle, deleteBundle, readBundle, readBundleFromDirectory, removeSkillFromBundle, writeBundle } from \"../lib/bundles.js\";\nimport { sanitizeName, splitCommaValues, uniqueSorted } from \"../lib/path.js\";\nimport { getTemplateBundlesDir } from \"../lib/templates.js\";\nimport type { RuntimeContext } from \"../types.js\";\n\nfunction parseNames(value: string): string[] {\n return uniqueSorted(splitCommaValues(value).map((entry) => sanitizeName(entry)));\n}\n\nexport async function runBundleCreate(context: RuntimeContext, bundleName: string) {\n const bundles = await Promise.all(parseNames(bundleName).map((name) => createBundle(context.homeDir, name)));\n context.write(bundles.map((bundle) => `Created bundle ${bundle.name}`).join(\"\\n\"));\n return bundles;\n}\n\nexport async function runBundleShow(context: RuntimeContext, bundleName: string) {\n const bundles = await Promise.all(parseNames(bundleName).map((name) => readBundle(context.homeDir, name)));\n context.write(bundles.map((bundle) => `${bundle.name}: ${bundle.skills.join(\", \") || \"(empty)\"}`).join(\"\\n\"));\n return bundles;\n}\n\nexport async function runBundleAddSkill(context: RuntimeContext, bundleName: string, skillName: string) {\n const bundleNames = parseNames(bundleName);\n const skillNames = parseNames(skillName);\n const bundles = [];\n for (const currentBundleName of bundleNames) {\n let bundle = await readBundle(context.homeDir, currentBundleName);\n for (const currentSkillName of skillNames) {\n bundle = await addSkillToBundle(context.homeDir, bundle.name, currentSkillName);\n }\n bundles.push(bundle);\n }\n context.write(bundles.map((bundle) => `Bundle ${bundle.name}: ${bundle.skills.join(\", \") || \"(empty)\"}`).join(\"\\n\"));\n return bundles;\n}\n\nexport async function runBundleRemoveSkill(context: RuntimeContext, bundleName: string, skillName: string) {\n const bundleNames = parseNames(bundleName);\n const skillNames = parseNames(skillName);\n const bundles = [];\n for (const currentBundleName of bundleNames) {\n let bundle = await readBundle(context.homeDir, currentBundleName);\n for (const currentSkillName of skillNames) {\n bundle = await removeSkillFromBundle(context.homeDir, bundle.name, currentSkillName);\n }\n bundles.push(bundle);\n }\n context.write(bundles.map((bundle) => `Bundle ${bundle.name}: ${bundle.skills.join(\", \") || \"(empty)\"}`).join(\"\\n\"));\n return bundles;\n}\n\nexport async function runBundleDelete(context: RuntimeContext, bundleName: string) {\n const deletedNames: string[] = [];\n for (const currentBundleName of parseNames(bundleName)) {\n const deleted = await deleteBundle(context.homeDir, currentBundleName);\n if (!deleted) {\n throw new Error(`Bundle not found: ${currentBundleName}`);\n }\n deletedNames.push(currentBundleName);\n }\n\n context.write(deletedNames.map((name) => `Deleted bundle ${name}`).join(\"\\n\"));\n return deletedNames;\n}\n\nexport async function runBundleAddTemplate(context: RuntimeContext, bundleName: string) {\n const templateBundlesDir = await getTemplateBundlesDir();\n const bundles = [];\n\n for (const currentBundleName of parseNames(bundleName)) {\n const templateBundle = await readBundleFromDirectory(templateBundlesDir, currentBundleName);\n\n try {\n await readBundle(context.homeDir, templateBundle.name);\n throw new Error(`Bundle already exists: ${templateBundle.name}`);\n } catch (error) {\n if (!(error instanceof Error) || !error.message.includes(\"ENOENT\")) {\n if (error instanceof Error && error.message.startsWith(\"Bundle already exists:\")) {\n throw error;\n }\n throw error;\n }\n }\n\n bundles.push(await writeBundle(context.homeDir, templateBundle));\n }\n\n context.write(bundles.map((bundle) => `Added bundle ${bundle.name} from template`).join(\"\\n\"));\n return bundles;\n}\n","import { cp, lstat, mkdir, readlink, readdir, rename, rm, stat } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport type { ImportMode, ImportResult, ScanCandidate } from \"../types.js\";\nimport { pathExists } from \"./fs.js\";\nimport { sanitizeName } from \"./path.js\";\nimport { assertSkillSource, getSkillPath, skillExists } from \"./skills.js\";\n\nclass MissingSymlinkSourceError extends Error {\n sourcePath: string;\n resolvedSourcePath: string;\n\n constructor(sourcePath: string, resolvedSourcePath: string) {\n super(`Missing symlink source: ${resolvedSourcePath}`);\n this.name = \"MissingSymlinkSourceError\";\n this.sourcePath = sourcePath;\n this.resolvedSourcePath = resolvedSourcePath;\n }\n}\n\nasync function resolveImportSource(sourcePath: string): Promise<{\n effectiveSourcePath: string;\n isSymlinkSource: boolean;\n}> {\n const statResult = await lstat(sourcePath);\n if (!statResult.isSymbolicLink()) {\n return {\n effectiveSourcePath: sourcePath,\n isSymlinkSource: false,\n };\n }\n\n const linkTarget = await readlink(sourcePath);\n const resolvedSourcePath = path.resolve(path.dirname(sourcePath), linkTarget);\n if (!(await pathExists(resolvedSourcePath))) {\n throw new MissingSymlinkSourceError(sourcePath, resolvedSourcePath);\n }\n\n return {\n effectiveSourcePath: resolvedSourcePath,\n isSymlinkSource: true,\n };\n}\n\nasync function mergeMissingEntries(sourcePath: string, destinationPath: string): Promise<void> {\n const sourceStat = await stat(sourcePath);\n\n if (sourceStat.isDirectory()) {\n await mkdir(destinationPath, { recursive: true });\n const entries = await readdir(sourcePath, { withFileTypes: true });\n for (const entry of entries) {\n await mergeMissingEntries(path.join(sourcePath, entry.name), path.join(destinationPath, entry.name));\n }\n return;\n }\n\n if (await pathExists(destinationPath)) {\n return;\n }\n\n await mkdir(path.dirname(destinationPath), { recursive: true });\n await cp(sourcePath, destinationPath, { recursive: false, errorOnExist: true, force: false });\n}\n\nasync function copyIntoDestination(sourcePath: string, destination: string, override: boolean): Promise<void> {\n if (!override && (await pathExists(destination))) {\n await mergeMissingEntries(sourcePath, destination);\n return;\n }\n\n await cp(sourcePath, destination, { recursive: true, errorOnExist: false, force: override });\n}\n\nasync function moveIntoDestination(sourcePath: string, destination: string, override: boolean): Promise<void> {\n if (!(await pathExists(destination))) {\n await rename(sourcePath, destination);\n return;\n }\n\n if (override) {\n await cp(sourcePath, destination, { recursive: true, errorOnExist: false, force: true });\n await rm(sourcePath, { recursive: true, force: true });\n return;\n }\n\n await mergeMissingEntries(sourcePath, destination);\n}\n\ninterface BatchImportSource {\n name: string;\n path: string;\n}\n\nasync function importBatchSources(options: {\n homeDir: string;\n sources: BatchImportSource[];\n mode: ImportMode;\n override?: boolean;\n}): Promise<{ imported: string[]; skipped: string[]; overwritten: string[]; warnings: string[]; errors: string[]; missingSources: number }> {\n const seen = new Set<string>();\n const imported: string[] = [];\n const skipped: string[] = [];\n const overwritten: string[] = [];\n const warnings: string[] = [];\n const errors: string[] = [];\n let missingSources = 0;\n\n for (const source of options.sources) {\n if (seen.has(source.name)) {\n skipped.push(source.name);\n continue;\n }\n seen.add(source.name);\n\n const alreadyExists = await skillExists(options.homeDir, source.name);\n if (alreadyExists && !options.override) {\n skipped.push(source.name);\n continue;\n }\n\n try {\n const result = await importSkill({\n homeDir: options.homeDir,\n sourcePath: source.path,\n mode: options.mode,\n override: options.override,\n });\n warnings.push(...result.warnings);\n if (alreadyExists) {\n overwritten.push(source.name);\n } else {\n imported.push(source.name);\n }\n } catch (error) {\n if (error instanceof MissingSymlinkSourceError) {\n missingSources += 1;\n errors.push(`Broken symlink for ${source.name}: ${source.path}; source not found: ${error.resolvedSourcePath}`);\n continue;\n }\n\n if (error instanceof Error && error.message.startsWith(\"Skill source must contain SKILL.md:\")) {\n skipped.push(source.name);\n continue;\n }\n\n throw error;\n }\n }\n\n return { imported, skipped, overwritten, warnings, errors, missingSources };\n}\n\nasync function listImportableChildren(sourceRoot: string): Promise<BatchImportSource[]> {\n const entries = await readdir(sourceRoot, { withFileTypes: true });\n const sources: BatchImportSource[] = [];\n\n for (const entry of entries) {\n if (!(entry.isDirectory() || entry.isSymbolicLink())) {\n continue;\n }\n\n const childPath = path.join(sourceRoot, entry.name);\n if (await pathExists(path.join(childPath, \"SKILL.md\"))) {\n sources.push({\n name: sanitizeName(entry.name),\n path: childPath,\n });\n continue;\n }\n\n if (entry.isSymbolicLink()) {\n sources.push({\n name: sanitizeName(entry.name),\n path: childPath,\n });\n }\n }\n\n return sources.sort((left, right) => left.name.localeCompare(right.name));\n}\n\nexport async function importSkill(options: {\n homeDir: string;\n sourcePath: string;\n mode: ImportMode;\n override?: boolean;\n}): Promise<ImportResult> {\n const { effectiveSourcePath, isSymlinkSource } = await resolveImportSource(options.sourcePath);\n await assertSkillSource(effectiveSourcePath);\n\n const skillName = sanitizeName(path.basename(options.sourcePath));\n if (!skillName) {\n throw new Error(`Unable to infer skill name from path: ${options.sourcePath}`);\n }\n\n const destination = getSkillPath(options.homeDir, skillName);\n await mkdir(path.dirname(destination), { recursive: true });\n\n const warnings: string[] = [];\n if (isSymlinkSource) {\n warnings.push(`Source ${options.sourcePath} is a symlink; copied from ${effectiveSourcePath} to ${destination}`);\n }\n\n if (options.mode === \"mv\" && !isSymlinkSource) {\n await moveIntoDestination(effectiveSourcePath, destination, options.override ?? false);\n } else {\n await copyIntoDestination(effectiveSourcePath, destination, options.override ?? false);\n }\n\n return { name: skillName, destination, warnings };\n}\n\nexport async function importScannedSkills(options: {\n homeDir: string;\n candidates: ScanCandidate[];\n mode: ImportMode;\n override?: boolean;\n}): Promise<{ imported: string[]; skipped: string[]; overwritten: string[]; warnings: string[]; errors: string[]; missingSources: number }> {\n return importBatchSources({\n homeDir: options.homeDir,\n sources: options.candidates.map((candidate) => ({\n name: candidate.name,\n path: candidate.path,\n })),\n mode: options.mode,\n override: options.override,\n });\n}\n\nexport async function importPath(options: {\n homeDir: string;\n sourcePath: string;\n mode: ImportMode;\n override?: boolean;\n}): Promise<\n | ({ kind: \"single\"; alreadyExisted: boolean } & ImportResult)\n | {\n kind: \"batch\";\n imported: string[];\n skipped: string[];\n overwritten: string[];\n warnings: string[];\n errors: string[];\n missingSources: number;\n }\n> {\n if (await pathExists(path.join(options.sourcePath, \"SKILL.md\"))) {\n const skillName = sanitizeName(path.basename(options.sourcePath));\n const alreadyExisted = skillName ? await skillExists(options.homeDir, skillName) : false;\n\n if (alreadyExisted && !options.override) {\n return {\n kind: \"single\",\n alreadyExisted: true,\n name: skillName,\n destination: getSkillPath(options.homeDir, skillName),\n warnings: [],\n };\n }\n\n const result = await importSkill(options);\n return { kind: \"single\", alreadyExisted, ...result };\n }\n\n const sources = await listImportableChildren(options.sourcePath);\n if (sources.length === 0) {\n throw new Error(`Path is neither a skill directory nor a skills directory: ${options.sourcePath}`);\n }\n\n const batchResult = await importBatchSources({\n homeDir: options.homeDir,\n sources,\n mode: options.mode,\n override: options.override,\n });\n return { kind: \"batch\", ...batchResult };\n}\n","import { access, lstat, readdir, readlink } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport type { ScanCandidate } from \"../types.js\";\nimport { listSupportedAgents, supportsScope } from \"./agents.js\";\nimport { pathExists } from \"./fs.js\";\nimport { sanitizeName } from \"./path.js\";\n\nasync function hasSkillReadme(skillDir: string): Promise<boolean> {\n try {\n await access(path.join(skillDir, \"SKILL.md\"));\n return true;\n } catch {\n return false;\n }\n}\n\nasync function isSymlinkPath(targetPath: string): Promise<boolean> {\n try {\n return (await lstat(targetPath)).isSymbolicLink();\n } catch {\n return false;\n }\n}\n\nasync function resolveSymlinkSource(targetPath: string): Promise<{ sourcePath?: string; isBroken: boolean }> {\n try {\n const linkTarget = await readlink(targetPath);\n const sourcePath = path.resolve(path.dirname(targetPath), linkTarget);\n return {\n sourcePath,\n isBroken: !(await pathExists(sourcePath)),\n };\n } catch {\n return {\n isBroken: true,\n };\n }\n}\n\nasync function scanDirectory(baseDir: string, agentId: ScanCandidate[\"agentId\"], scope: ScanCandidate[\"scope\"], projectDir?: string) {\n try {\n const entries = await readdir(baseDir, { withFileTypes: true });\n const candidates: ScanCandidate[] = [];\n for (const entry of entries) {\n if (!entry.isDirectory() && !entry.isSymbolicLink()) {\n continue;\n }\n const fullPath = path.join(baseDir, entry.name);\n const isSymlink = await isSymlinkPath(fullPath);\n const symlinkInfo = isSymlink ? await resolveSymlinkSource(fullPath) : { isBroken: false };\n\n if (!(await hasSkillReadme(fullPath)) && !symlinkInfo.isBroken) {\n continue;\n }\n candidates.push({\n agentId,\n name: sanitizeName(entry.name),\n path: fullPath,\n scope,\n projectDir,\n isSymlink,\n symlinkSourcePath: symlinkInfo.sourcePath,\n isBrokenSymlink: symlinkInfo.isBroken,\n });\n }\n return candidates;\n } catch {\n return [];\n }\n}\n\nexport async function scanSkills(options: {\n homeDir: string;\n projectDirs?: string[];\n}): Promise<ScanCandidate[]> {\n const results: ScanCandidate[] = [];\n\n for (const agent of listSupportedAgents()) {\n if (supportsScope(agent.id, \"global\")) {\n results.push(...(await scanDirectory(agent.globalSkillsDir!(options.homeDir), agent.id, \"global\")));\n }\n for (const projectDir of options.projectDirs ?? []) {\n if (supportsScope(agent.id, \"project\")) {\n results.push(...(await scanDirectory(agent.projectSkillsDir!(projectDir), agent.id, \"project\", projectDir)));\n }\n }\n }\n\n return results.sort((left, right) => left.path.localeCompare(right.path));\n}\n","import path from \"node:path\";\n\nimport type { AgentDefinition, AgentId, ProjectionMode, Scope } from \"../types.js\";\nimport { pathExists } from \"./fs.js\";\n\nfunction defineAgent(\n id: AgentId,\n displayName: string,\n options: {\n defaultProjectionMode?: ProjectionMode;\n rootDir: (homeDir: string) => string;\n globalSkillsDir?: (homeDir: string) => string;\n projectSkillsDir?: (projectDir: string) => string;\n },\n): AgentDefinition {\n return {\n id,\n displayName,\n defaultProjectionMode: options.defaultProjectionMode ?? \"symlink\",\n supportsGlobal: Boolean(options.globalSkillsDir),\n supportsProject: Boolean(options.projectSkillsDir),\n rootDir: options.rootDir,\n globalSkillsDir: options.globalSkillsDir,\n projectSkillsDir: options.projectSkillsDir,\n };\n}\n\nconst AGENTS: Record<AgentId, AgentDefinition> = {\n adal: defineAgent(\"adal\", \"AdaL\", {\n rootDir: (homeDir) => path.join(homeDir, \".adal\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".adal\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".adal\", \"skills\"),\n }),\n amp: defineAgent(\"amp\", \"Amp\", {\n rootDir: (homeDir) => path.join(homeDir, \".agents\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".agents\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".agents\", \"skills\"),\n }),\n antigravity: defineAgent(\"antigravity\", \"Antigravity\", {\n rootDir: (homeDir) => path.join(homeDir, \".gemini\", \"antigravity\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".gemini\", \"antigravity\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".gemini\", \"antigravity\", \"skills\"),\n }),\n augment: defineAgent(\"augment\", \"Augment\", {\n rootDir: (homeDir) => path.join(homeDir, \".augment\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".augment\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".augment\", \"skills\"),\n }),\n bob: defineAgent(\"bob\", \"IBM Bob\", {\n rootDir: (homeDir) => path.join(homeDir, \".bob\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".bob\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".bob\", \"skills\"),\n }),\n \"claude-code\": defineAgent(\"claude-code\", \"Claude Code\", {\n rootDir: (homeDir) => path.join(homeDir, \".claude\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".claude\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".claude\", \"skills\"),\n }),\n cline: defineAgent(\"cline\", \"Cline\", {\n rootDir: (homeDir) => path.join(homeDir, \".cline\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".cline\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".cline\", \"skills\"),\n }),\n codebuddy: defineAgent(\"codebuddy\", \"CodeBuddy\", {\n rootDir: (homeDir) => path.join(homeDir, \".codebuddy\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".codebuddy\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".codebuddy\", \"skills\"),\n }),\n \"command-code\": defineAgent(\"command-code\", \"Command Code\", {\n rootDir: (homeDir) => path.join(homeDir, \".commandcode\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".commandcode\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".commandcode\", \"skills\"),\n }),\n continue: defineAgent(\"continue\", \"Continue\", {\n rootDir: (homeDir) => path.join(homeDir, \".continue\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".continue\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".continue\", \"skills\"),\n }),\n codex: defineAgent(\"codex\", \"Codex\", {\n rootDir: (homeDir) => path.join(homeDir, \".codex\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".codex\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".codex\", \"skills\"),\n }),\n copilot: defineAgent(\"copilot\", \"GitHub Copilot\", {\n rootDir: (homeDir) => path.join(homeDir, \".copilot\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".copilot\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".copilot\", \"skills\"),\n }),\n cortex: defineAgent(\"cortex\", \"Cortex Code\", {\n rootDir: (homeDir) => path.join(homeDir, \".snowflake\", \"cortex\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".snowflake\", \"cortex\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".cortex\", \"skills\"),\n }),\n crush: defineAgent(\"crush\", \"Crush\", {\n rootDir: (homeDir) => path.join(homeDir, \".config\", \"crush\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".config\", \"crush\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".config\", \"crush\", \"skills\"),\n }),\n cursor: defineAgent(\"cursor\", \"Cursor\", {\n rootDir: (homeDir) => path.join(homeDir, \".cursor\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".cursor\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".cursor\", \"skills\"),\n }),\n deepagents: defineAgent(\"deepagents\", \"Deep Agents\", {\n rootDir: (homeDir) => path.join(homeDir, \".deepagents\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".deepagents\", \"agent\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".deepagents\", \"agent\", \"skills\"),\n }),\n droid: defineAgent(\"droid\", \"Droid\", {\n rootDir: (homeDir) => path.join(homeDir, \".factory\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".factory\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".factory\", \"skills\"),\n }),\n firebender: defineAgent(\"firebender\", \"Firebender\", {\n rootDir: (homeDir) => path.join(homeDir, \".firebender\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".firebender\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".firebender\", \"skills\"),\n }),\n \"gemini-cli\": defineAgent(\"gemini-cli\", \"Gemini CLI\", {\n rootDir: (homeDir) => path.join(homeDir, \".gemini\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".gemini\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".gemini\", \"skills\"),\n }),\n \"github-copilot\": defineAgent(\"github-copilot\", \"GitHub Copilot\", {\n rootDir: (homeDir) => path.join(homeDir, \".copilot\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".copilot\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".copilot\", \"skills\"),\n }),\n goose: defineAgent(\"goose\", \"Goose\", {\n rootDir: (homeDir) => path.join(homeDir, \".goose\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".goose\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".goose\", \"skills\"),\n }),\n \"iflow-cli\": defineAgent(\"iflow-cli\", \"iFlow CLI\", {\n rootDir: (homeDir) => path.join(homeDir, \".iflow\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".iflow\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".iflow\", \"skills\"),\n }),\n junie: defineAgent(\"junie\", \"Junie\", {\n rootDir: (homeDir) => path.join(homeDir, \".junie\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".junie\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".junie\", \"skills\"),\n }),\n kilo: defineAgent(\"kilo\", \"Kilo Code\", {\n rootDir: (homeDir) => path.join(homeDir, \".kilocode\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".kilocode\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".kilocode\", \"skills\"),\n }),\n \"kiro-cli\": defineAgent(\"kiro-cli\", \"Kiro CLI\", {\n rootDir: (homeDir) => path.join(homeDir, \".kiro\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".kiro\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".kiro\", \"skills\"),\n }),\n \"kilo-code\": defineAgent(\"kilo-code\", \"Kilo Code\", {\n rootDir: (homeDir) => path.join(homeDir, \".kilocode\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".kilocode\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".kilocode\", \"skills\"),\n }),\n \"kimi-cli\": defineAgent(\"kimi-cli\", \"Kimi Code CLI\", {\n rootDir: (homeDir) => path.join(homeDir, \".kimi\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".kimi\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".kimi\", \"skills\"),\n }),\n kode: defineAgent(\"kode\", \"Kode\", {\n rootDir: (homeDir) => path.join(homeDir, \".kode\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".kode\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".kode\", \"skills\"),\n }),\n mcpjam: defineAgent(\"mcpjam\", \"MCPJam\", {\n rootDir: (homeDir) => path.join(homeDir, \".mcpjam\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".mcpjam\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".mcpjam\", \"skills\"),\n }),\n \"mistral-vibe\": defineAgent(\"mistral-vibe\", \"Mistral Vibe\", {\n rootDir: (homeDir) => path.join(homeDir, \".vibe\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".vibe\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".vibe\", \"skills\"),\n }),\n mux: defineAgent(\"mux\", \"Mux\", {\n rootDir: (homeDir) => path.join(homeDir, \".mux\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".mux\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".mux\", \"skills\"),\n }),\n neovate: defineAgent(\"neovate\", \"Neovate\", {\n rootDir: (homeDir) => path.join(homeDir, \".neovate\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".neovate\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".neovate\", \"skills\"),\n }),\n openclaw: defineAgent(\"openclaw\", \"OpenClaw\", {\n rootDir: (homeDir) => path.join(homeDir, \".openclaw\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".openclaw\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".openclaw\", \"skills\"),\n }),\n \"openclaude-ide\": defineAgent(\"openclaude-ide\", \"OpenClaude IDE\", {\n rootDir: (homeDir) => path.join(homeDir, \".openclaude\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".openclaude\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".openclaude\", \"skills\"),\n }),\n openhands: defineAgent(\"openhands\", \"OpenHands\", {\n rootDir: (homeDir) => path.join(homeDir, \".openhands\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".openhands\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".openhands\", \"skills\"),\n }),\n opencode: defineAgent(\"opencode\", \"OpenCode\", {\n rootDir: (homeDir) => path.join(homeDir, \".opencode\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".opencode\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".opencode\", \"skills\"),\n }),\n pi: defineAgent(\"pi\", \"Pi\", {\n rootDir: (homeDir) => path.join(homeDir, \".pi\", \"agent\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".pi\", \"agent\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".pi\", \"agent\", \"skills\"),\n }),\n pochi: defineAgent(\"pochi\", \"Pochi\", {\n rootDir: (homeDir) => path.join(homeDir, \".pochi\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".pochi\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".pochi\", \"skills\"),\n }),\n qoder: defineAgent(\"qoder\", \"Qoder\", {\n rootDir: (homeDir) => path.join(homeDir, \".qoder\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".qoder\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".qoder\", \"skills\"),\n }),\n \"qwen-code\": defineAgent(\"qwen-code\", \"Qwen Code\", {\n rootDir: (homeDir) => path.join(homeDir, \".qwen\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".qwen\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".qwen\", \"skills\"),\n }),\n replit: defineAgent(\"replit\", \"Replit\", {\n rootDir: (homeDir) => path.join(homeDir, \".config\", \"replit\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".agent\", \"skills\"),\n }),\n roo: defineAgent(\"roo\", \"Roo Code\", {\n rootDir: (homeDir) => path.join(homeDir, \".roo\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".roo\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".roo\", \"skills\"),\n }),\n trae: defineAgent(\"trae\", \"Trae\", {\n rootDir: (homeDir) => path.join(homeDir, \".trae\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".trae\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".trae\", \"skills\"),\n }),\n \"trae-cn\": defineAgent(\"trae-cn\", \"Trae CN\", {\n rootDir: (homeDir) => path.join(homeDir, \".trae-cn\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".trae-cn\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".trae-cn\", \"skills\"),\n }),\n warp: defineAgent(\"warp\", \"Warp\", {\n rootDir: (homeDir) => path.join(homeDir, \".warp\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".warp\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".warp\", \"skills\"),\n }),\n windsurf: defineAgent(\"windsurf\", \"Windsurf\", {\n rootDir: (homeDir) => path.join(homeDir, \".codeium\", \"windsurf\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".codeium\", \"windsurf\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".codeium\", \"windsurf\", \"skills\"),\n }),\n zencoder: defineAgent(\"zencoder\", \"Zencoder\", {\n rootDir: (homeDir) => path.join(homeDir, \".zencoder\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".zencoder\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".zencoder\", \"skills\"),\n }),\n};\n\nexport function listSupportedAgents(): AgentDefinition[] {\n return Object.values(AGENTS).sort((left, right) => left.id.localeCompare(right.id));\n}\n\nexport function listSupportedAgentIds(): AgentId[] {\n return listSupportedAgents().map((agent) => agent.id);\n}\n\nexport function supportsScope(agentId: AgentId, scope: Scope): boolean {\n const definition = getAgentDefinition(agentId);\n return scope === \"global\" ? definition.supportsGlobal : definition.supportsProject;\n}\n\nexport function isAgentId(value: string): value is AgentId {\n return value in AGENTS;\n}\n\nexport function getAgentDefinition(agentId: AgentId): AgentDefinition {\n return AGENTS[agentId];\n}\n\nexport function resolveAgentSkillsDir(agentId: AgentId, scope: Scope, baseDir: string): string {\n const definition = getAgentDefinition(agentId);\n const resolver = scope === \"global\" ? definition.globalSkillsDir : definition.projectSkillsDir;\n if (!resolver) {\n throw new Error(`Agent ${agentId} does not support ${scope} scope.`);\n }\n return resolver(baseDir);\n}\n\nexport function getProjectionMode(agentId: AgentId): ProjectionMode {\n return getAgentDefinition(agentId).defaultProjectionMode;\n}\n\nexport async function detectInstalledAgents(options: {\n homeDir: string;\n projectDir?: string;\n}): Promise<AgentId[]> {\n const installed: AgentId[] = [];\n\n for (const agent of listSupportedAgents()) {\n const globalRootPath = agent.supportsGlobal ? agent.rootDir(options.homeDir) : null;\n const projectPath = agent.supportsProject && options.projectDir\n ? resolveAgentSkillsDir(agent.id, \"project\", options.projectDir)\n : null;\n\n if (globalRootPath && (await pathExists(globalRootPath))) {\n installed.push(agent.id);\n continue;\n }\n\n if (projectPath && (await pathExists(projectPath))) {\n installed.push(agent.id);\n }\n }\n\n return installed;\n}\n","import { importPath, importScannedSkills } from \"../lib/import.js\";\nimport { scanSkills } from \"../lib/scanner.js\";\nimport type { ImportMode, RuntimeContext } from \"../types.js\";\n\nexport async function runImport(\n context: RuntimeContext,\n options: {\n sourcePath?: string;\n scan?: boolean;\n mode: ImportMode;\n override?: boolean;\n },\n) {\n if (options.scan) {\n const candidates = await scanSkills({\n homeDir: context.homeDir,\n projectDirs: [context.cwd],\n });\n const result = await importScannedSkills({\n homeDir: context.homeDir,\n candidates,\n mode: options.mode,\n override: options.override,\n });\n for (const warning of result.warnings) {\n context.write(`Warning: ${warning}`);\n }\n for (const error of result.errors) {\n context.error(`Error: ${error}`);\n }\n context.write(`Imported ${result.imported.length} skills`);\n if (result.overwritten.length > 0) {\n context.write(`Overwritten ${result.overwritten.length} existing skills: ${result.overwritten.join(\", \")}`);\n }\n if (result.skipped.length > 0) {\n context.write(`Skipped ${result.skipped.length} existing skills (use --override to overwrite): ${result.skipped.join(\", \")}`);\n }\n if (result.missingSources > 0) {\n context.write(`Missing source files: ${result.missingSources}`);\n }\n return result;\n }\n\n if (!options.sourcePath) {\n throw new Error('import requires a source path or --scan');\n }\n\n const result = await importPath({\n homeDir: context.homeDir,\n sourcePath: options.sourcePath,\n mode: options.mode,\n override: options.override,\n });\n\n if (result.kind === \"single\") {\n for (const warning of result.warnings) {\n context.write(`Warning: ${warning}`);\n }\n if (result.alreadyExisted && !options.override) {\n context.write(`Skipped ${result.name} (already exists; use --override to overwrite)`);\n } else if (result.alreadyExisted) {\n context.write(`Overwritten ${result.name}`);\n } else {\n context.write(`Imported ${result.name}`);\n }\n return result;\n }\n\n for (const warning of result.warnings) {\n context.write(`Warning: ${warning}`);\n }\n for (const error of result.errors) {\n context.error(`Error: ${error}`);\n }\n context.write(`Imported ${result.imported.length} skills`);\n if (result.overwritten.length > 0) {\n context.write(`Overwritten ${result.overwritten.length} existing skills: ${result.overwritten.join(\", \")}`);\n }\n if (result.skipped.length > 0) {\n context.write(`Skipped ${result.skipped.length} existing skills (use --override to overwrite): ${result.skipped.join(\", \")}`);\n }\n if (result.missingSources > 0) {\n context.write(`Missing source files: ${result.missingSources}`);\n }\n return result;\n}\n","import { cp, lstat, mkdir, readFile, readdir, readlink, rm, symlink, unlink, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nconst COPY_MARKER = \".aweskill-projection.json\";\n\ninterface CopyMarker {\n managedBy: \"aweskill\";\n sourcePath: string;\n}\n\nasync function tryLstat(targetPath: string) {\n try {\n return await lstat(targetPath);\n } catch {\n return null;\n }\n}\n\nasync function readCopyMarker(targetPath: string): Promise<CopyMarker | null> {\n try {\n const content = await readFile(path.join(targetPath, COPY_MARKER), \"utf8\");\n const parsed = JSON.parse(content) as CopyMarker;\n return parsed.managedBy === \"aweskill\" ? parsed : null;\n } catch {\n return null;\n }\n}\n\nexport async function assertProjectionTargetSafe(\n mode: \"symlink\" | \"copy\",\n sourcePath: string,\n targetPath: string,\n options: { allowReplaceExisting?: boolean } = {},\n): Promise<void> {\n const existing = await tryLstat(targetPath);\n if (!existing) {\n return;\n }\n\n if (mode === \"symlink\") {\n if (!existing.isSymbolicLink()) {\n if (options.allowReplaceExisting) {\n return;\n }\n throw new Error(`Refusing to overwrite non-symlink target: ${targetPath}`);\n }\n\n const currentTarget = await readlink(targetPath);\n const resolvedCurrent = path.resolve(path.dirname(targetPath), currentTarget);\n if (resolvedCurrent === path.resolve(sourcePath)) {\n return;\n }\n return;\n }\n\n if (existing.isSymbolicLink()) {\n return;\n }\n\n const marker = await readCopyMarker(targetPath);\n if (!marker) {\n if (options.allowReplaceExisting) {\n return;\n }\n throw new Error(`Refusing to overwrite unmanaged directory: ${targetPath}`);\n }\n}\n\nexport async function createSkillSymlink(\n sourcePath: string,\n targetPath: string,\n options: { allowReplaceExisting?: boolean } = {},\n): Promise<\"created\" | \"skipped\"> {\n await mkdir(path.dirname(targetPath), { recursive: true });\n const existing = await tryLstat(targetPath);\n\n if (existing?.isSymbolicLink()) {\n const currentTarget = await readlink(targetPath);\n const resolvedCurrent = path.resolve(path.dirname(targetPath), currentTarget);\n if (resolvedCurrent === path.resolve(sourcePath)) {\n return \"skipped\";\n }\n await unlink(targetPath);\n } else if (existing) {\n if (options.allowReplaceExisting) {\n await rm(targetPath, { force: true, recursive: true });\n } else {\n throw new Error(`Refusing to overwrite non-symlink target: ${targetPath}`);\n }\n }\n\n const linkTarget = path.relative(path.dirname(targetPath), sourcePath) || \".\";\n await symlink(linkTarget, targetPath, \"dir\");\n return \"created\";\n}\n\nexport async function createSkillCopy(\n sourcePath: string,\n targetPath: string,\n options: { allowReplaceExisting?: boolean } = {},\n): Promise<\"created\" | \"skipped\"> {\n await mkdir(path.dirname(targetPath), { recursive: true });\n const existing = await tryLstat(targetPath);\n\n if (existing?.isSymbolicLink()) {\n await unlink(targetPath);\n } else if (existing) {\n const marker = await readCopyMarker(targetPath);\n if (!marker) {\n if (!options.allowReplaceExisting) {\n throw new Error(`Refusing to overwrite unmanaged directory: ${targetPath}`);\n }\n }\n await rm(targetPath, { force: true, recursive: true });\n }\n\n await cp(sourcePath, targetPath, { recursive: true });\n const marker: CopyMarker = { managedBy: \"aweskill\", sourcePath: path.resolve(sourcePath) };\n await writeFile(path.join(targetPath, COPY_MARKER), JSON.stringify(marker, null, 2), \"utf8\");\n return \"created\";\n}\n\nexport async function removeManagedProjection(targetPath: string): Promise<boolean> {\n const existing = await tryLstat(targetPath);\n if (!existing) {\n return false;\n }\n\n if (existing.isSymbolicLink()) {\n await unlink(targetPath);\n return true;\n }\n\n if (existing.isDirectory()) {\n const marker = await readCopyMarker(targetPath);\n if (marker) {\n await rm(targetPath, { force: true, recursive: true });\n return true;\n }\n }\n\n return false;\n}\n\nexport async function listManagedSkillNames(\n skillsDir: string,\n centralSkillsDir: string,\n): Promise<Map<string, \"symlink\" | \"copy\">> {\n const result = new Map<string, \"symlink\" | \"copy\">();\n\n try {\n const entries = await readdir(skillsDir, { withFileTypes: true });\n for (const entry of entries) {\n const targetPath = path.join(skillsDir, entry.name);\n if (entry.isSymbolicLink()) {\n try {\n const currentTarget = await readlink(targetPath);\n const resolvedCurrent = path.resolve(path.dirname(targetPath), currentTarget);\n if (resolvedCurrent.startsWith(path.resolve(centralSkillsDir))) {\n result.set(entry.name, \"symlink\");\n }\n } catch {\n result.set(entry.name, \"symlink\");\n }\n continue;\n }\n\n if (entry.isDirectory()) {\n const marker = await readCopyMarker(targetPath);\n if (marker) {\n result.set(entry.name, \"copy\");\n }\n }\n }\n } catch {\n return result;\n }\n\n return result;\n}\n","import { detectInstalledAgents, isAgentId, listSupportedAgentIds, resolveAgentSkillsDir, supportsScope } from \"../lib/agents.js\";\nimport { importSkill } from \"../lib/import.js\";\nimport { getAweskillPaths, uniqueSorted } from \"../lib/path.js\";\nimport { listSkillEntriesInDirectory, listSkills, getSkillPath } from \"../lib/skills.js\";\nimport { listManagedSkillNames, createSkillSymlink } from \"../lib/symlink.js\";\nimport type { AgentId, RuntimeContext, Scope } from \"../types.js\";\n\nconst DEFAULT_PREVIEW_COUNT = 5;\n\nfunction getProjectDir(context: RuntimeContext, explicitProjectDir?: string): string {\n return explicitProjectDir ?? context.cwd;\n}\n\nasync function resolveAgentsForScope(\n context: RuntimeContext,\n requestedAgents: string[],\n scope: Scope,\n projectDir?: string,\n): Promise<AgentId[]> {\n if (requestedAgents.length === 0 || requestedAgents.includes(\"all\")) {\n const detected = await detectInstalledAgents({\n homeDir: context.homeDir,\n projectDir: scope === \"project\" ? projectDir : undefined,\n });\n const candidates = detected.length > 0 ? detected : listSupportedAgentIds();\n return candidates.filter((agentId) => supportsScope(agentId, scope));\n }\n\n return uniqueSorted(\n requestedAgents.map((agent) => {\n if (!isAgentId(agent)) {\n throw new Error(`Unsupported agent: ${agent}`);\n }\n if (!supportsScope(agent, scope)) {\n throw new Error(`Agent ${agent} does not support ${scope} scope.`);\n }\n return agent;\n }),\n );\n}\n\ntype CheckCategory = \"linked\" | \"duplicate\" | \"new\";\n\ninterface CheckedSkill {\n name: string;\n path: string;\n category: CheckCategory;\n hasSKILLMd: boolean;\n}\n\nfunction formatSkillBlockWithSummary(title: string, skills: CheckedSkill[], verbose = false): string[] {\n if (skills.length === 0) {\n return [`No skills found for ${title.replace(/:$/, \"\").toLowerCase()}.`];\n }\n\n const lines = [title];\n const categories: Array<{ title: string; marker: string; key: CheckCategory }> = [\n { title: \" linked\", marker: \"✓\", key: \"linked\" },\n { title: \" duplicate\", marker: \"!\", key: \"duplicate\" },\n { title: \" new\", marker: \"+\", key: \"new\" },\n ];\n\n for (const category of categories) {\n const entries = skills.filter((skill) => skill.category === category.key);\n lines.push(`${category.title}: ${entries.length}`);\n const preview = verbose ? entries : entries.slice(0, DEFAULT_PREVIEW_COUNT);\n for (const skill of preview) {\n lines.push(` ${category.marker} ${skill.name} ${skill.path}`);\n }\n if (!verbose && entries.length > preview.length) {\n lines.push(` ... and ${entries.length - preview.length} more (use --verbose to show all)`);\n }\n }\n\n return lines;\n}\n\nexport async function runCheck(\n context: RuntimeContext,\n options: {\n scope: Scope;\n agents: string[];\n projectDir?: string;\n update?: boolean;\n verbose?: boolean;\n },\n) {\n const lines: string[] = [];\n const centralSkillEntries = await listSkills(context.homeDir);\n const centralSkills = new Set(centralSkillEntries.map((skill) => skill.name));\n\n const projectDir = options.scope === \"project\" ? getProjectDir(context, options.projectDir) : undefined;\n const agents = await resolveAgentsForScope(context, options.agents, options.scope, projectDir);\n const updated: string[] = [];\n const skipped: string[] = [];\n let importedCount = 0;\n\n for (const agentId of agents) {\n const baseDir = options.scope === \"global\" ? context.homeDir : projectDir!;\n const skillsDir = resolveAgentSkillsDir(agentId, options.scope, baseDir);\n const managed = await listManagedSkillNames(skillsDir, getAweskillPaths(context.homeDir).skillsDir);\n const skills = await listSkillEntriesInDirectory(skillsDir);\n const checked = skills.map((skill) => {\n let category: CheckCategory = \"new\";\n if (managed.has(skill.name)) {\n category = \"linked\";\n } else if (centralSkills.has(skill.name)) {\n category = \"duplicate\";\n }\n\n return {\n name: skill.name,\n path: skill.path,\n category,\n hasSKILLMd: skill.hasSKILLMd,\n } satisfies CheckedSkill;\n });\n\n if (options.update) {\n for (const skill of checked) {\n if (skill.category === \"linked\") {\n continue;\n }\n\n if (!skill.hasSKILLMd) {\n context.write(`Warning: Skipping ${agentId}:${skill.name}; missing SKILL.md in ${skill.path}`);\n skipped.push(`${agentId}:${skill.name}`);\n continue;\n }\n\n if (skill.category === \"new\") {\n await importSkill({\n homeDir: context.homeDir,\n sourcePath: skill.path,\n mode: \"mv\",\n });\n centralSkills.add(skill.name);\n importedCount += 1;\n }\n\n await createSkillSymlink(getSkillPath(context.homeDir, skill.name), skill.path, {\n allowReplaceExisting: true,\n });\n updated.push(`${agentId}:${skill.name}`);\n }\n }\n\n const title = options.scope === \"global\"\n ? `Global skills for ${agentId}:`\n : `Project skills for ${agentId} (${projectDir}):`;\n lines.push(\"\");\n lines.push(...formatSkillBlockWithSummary(title, checked, options.verbose));\n }\n\n if (options.update) {\n lines.push(\"\");\n lines.push(`Updated ${updated.length} skills`);\n if (importedCount > 0) {\n lines.push(`Imported ${importedCount} new skills into the central repo`);\n }\n if (skipped.length > 0) {\n lines.push(`Skipped ${skipped.length} entries: ${skipped.join(\", \")}`);\n }\n }\n\n context.write(lines.join(\"\\n\").trim());\n return { agents, updated, importedCount, skipped };\n}\n","import { detectInstalledAgents, isAgentId, listSupportedAgentIds, resolveAgentSkillsDir, supportsScope } from \"../lib/agents.js\";\nimport { listBundles, readBundle } from \"../lib/bundles.js\";\nimport { getAweskillPaths, sanitizeName, splitCommaValues, uniqueSorted } from \"../lib/path.js\";\nimport { skillExists } from \"../lib/skills.js\";\nimport { listManagedSkillNames, removeManagedProjection } from \"../lib/symlink.js\";\nimport type { ActivationType, AgentId, RuntimeContext, Scope } from \"../types.js\";\n\nfunction getProjectDir(context: RuntimeContext, explicitProjectDir?: string): string {\n return explicitProjectDir ?? context.cwd;\n}\n\nasync function resolveAgentsForScope(\n context: RuntimeContext,\n requestedAgents: string[],\n scope: Scope,\n projectDir?: string,\n): Promise<AgentId[]> {\n if (requestedAgents.length === 0 || requestedAgents.includes(\"all\")) {\n const detected = await detectInstalledAgents({\n homeDir: context.homeDir,\n projectDir: scope === \"project\" ? projectDir : undefined,\n });\n const candidates = detected.length > 0 ? detected : listSupportedAgentIds();\n return candidates.filter((agentId) => supportsScope(agentId, scope));\n }\n\n return uniqueSorted(\n requestedAgents.map((agent) => {\n if (!isAgentId(agent)) {\n throw new Error(`Unsupported agent: ${agent}`);\n }\n if (!supportsScope(agent, scope)) {\n throw new Error(`Agent ${agent} does not support ${scope} scope.`);\n }\n return agent;\n }),\n );\n}\n\nasync function resolveSkillNames(context: RuntimeContext, type: ActivationType, names: string): Promise<string[]> {\n const normalizedNames = uniqueSorted(splitCommaValues(names).map((name) => sanitizeName(name)));\n\n if (normalizedNames.includes(\"all\")) {\n if (type === \"bundle\") {\n const bundles = await listBundles(context.homeDir);\n return uniqueSorted(bundles.flatMap((bundle) => bundle.skills));\n }\n\n const { skillsDir: centralSkillsDir } = getAweskillPaths(context.homeDir);\n const detected = await detectInstalledAgents({\n homeDir: context.homeDir,\n });\n const globalManaged = await Promise.all(\n detected.filter((agentId) => supportsScope(agentId, \"global\")).map(async (agentId) => {\n const agentSkillsDir = resolveAgentSkillsDir(agentId, \"global\", context.homeDir);\n return listManagedSkillNames(agentSkillsDir, centralSkillsDir);\n }),\n );\n const managedSkillNames = uniqueSorted(\n globalManaged.flatMap((managed) => [...managed.keys()]),\n );\n\n return managedSkillNames;\n }\n\n if (type === \"bundle\") {\n const bundles = await Promise.all(normalizedNames.map((bundleName) => readBundle(context.homeDir, bundleName)));\n return uniqueSorted(bundles.flatMap((bundle) => bundle.skills));\n }\n\n // For disable we don't require the skill to still exist in central repo\n const resolvedNames: string[] = [];\n for (const normalizedName of normalizedNames) {\n if (!(await skillExists(context.homeDir, normalizedName))) {\n resolvedNames.push(normalizedName);\n continue;\n }\n resolvedNames.push(normalizedName);\n }\n return uniqueSorted(resolvedNames);\n}\n\n/**\n * True when `skillName` appears in a bundle and at least one other skill from that bundle\n * still has an aweskill-managed projection under the same scope/agents — typical after\n * `enable bundle` while the user tries `disable skill` for one member only.\n */\nasync function bundlesWithCoEnabledSiblings(options: {\n homeDir: string;\n skillName: string;\n agents: AgentId[];\n scope: Scope;\n baseDir: string;\n}): Promise<string[]> {\n const { skillsDir: centralSkillsDir } = getAweskillPaths(options.homeDir);\n const bundles = await listBundles(options.homeDir);\n const normalized = sanitizeName(options.skillName);\n const hit = new Set<string>();\n\n for (const bundle of bundles) {\n if (!bundle.skills.includes(normalized)) {\n continue;\n }\n const siblings = bundle.skills.filter((s) => s !== normalized);\n if (siblings.length === 0) {\n continue;\n }\n\n for (const agentId of options.agents) {\n const agentSkillsDir = resolveAgentSkillsDir(agentId, options.scope, options.baseDir);\n const managed = await listManagedSkillNames(agentSkillsDir, centralSkillsDir);\n if (siblings.some((s) => managed.has(s))) {\n hit.add(bundle.name);\n break;\n }\n }\n }\n\n return [...hit].sort();\n}\n\nexport async function runDisable(\n context: RuntimeContext,\n options: {\n type: ActivationType;\n name: string;\n scope: Scope;\n agents: string[];\n projectDir?: string;\n force?: boolean;\n },\n) {\n const projectDir = options.scope === \"project\" ? getProjectDir(context, options.projectDir) : undefined;\n const agents = await resolveAgentsForScope(context, options.agents, options.scope, projectDir);\n const baseDir = options.scope === \"global\" ? context.homeDir : (projectDir ?? context.cwd);\n const skillNames = await resolveSkillNames(context, options.type, options.name);\n\n if (splitCommaValues(options.name).map((name) => sanitizeName(name)).includes(\"all\") && options.type === \"skill\") {\n const { skillsDir: centralSkillsDir } = getAweskillPaths(context.homeDir);\n const scopedManaged = await Promise.all(\n agents.map(async (agentId) => {\n const agentSkillsDir = resolveAgentSkillsDir(agentId, options.scope, baseDir);\n return listManagedSkillNames(agentSkillsDir, centralSkillsDir);\n }),\n );\n const managedSkillNames = uniqueSorted(\n scopedManaged.flatMap((managed) => [...managed.keys()]),\n );\n skillNames.splice(0, skillNames.length, ...managedSkillNames);\n }\n\n if (options.type === \"skill\" && skillNames.length === 1 && !options.force) {\n const bundleNames = await bundlesWithCoEnabledSiblings({\n homeDir: context.homeDir,\n skillName: skillNames[0]!,\n agents,\n scope: options.scope,\n baseDir,\n });\n if (bundleNames.length > 0) {\n throw new Error(\n `Skill \"${skillNames[0]}\" is listed in bundle(s): ${bundleNames.join(\", \")}. ` +\n `Other skills from those bundle(s) are still enabled in this scope. ` +\n `Use --force to remove only this skill's projection, or run \"aweskill agent remove bundle <name>\" to drop the whole bundle.`,\n );\n }\n }\n\n const removed: string[] = [];\n for (const agentId of agents) {\n const skillsDir = resolveAgentSkillsDir(agentId, options.scope, baseDir);\n for (const skillName of skillNames) {\n const targetPath = `${skillsDir}/${skillName}`;\n const wasRemoved = await removeManagedProjection(targetPath);\n if (wasRemoved) {\n removed.push(`${agentId}:${skillName}`);\n }\n }\n }\n\n const scopeLabel = options.scope === \"global\" ? \"global scope\" : (projectDir ?? context.cwd);\n const targetLabel = uniqueSorted(splitCommaValues(options.name).map((name) => sanitizeName(name))).join(\", \");\n context.write(`Disabled ${options.type} ${targetLabel} for ${agents.join(\", \")} in ${scopeLabel}${removed.length > 0 ? ` (${removed.length} removed)` : \"\"}`);\n return { agents, skillNames, removed };\n}\n","import { mkdir } from \"node:fs/promises\";\n\nimport { detectInstalledAgents, getProjectionMode, isAgentId, listSupportedAgentIds, resolveAgentSkillsDir, supportsScope } from \"../lib/agents.js\";\nimport { listBundles, readBundle } from \"../lib/bundles.js\";\nimport { getSkillPath, listSkills, skillExists } from \"../lib/skills.js\";\nimport { assertProjectionTargetSafe, createSkillCopy, createSkillSymlink } from \"../lib/symlink.js\";\nimport { sanitizeName, splitCommaValues, uniqueSorted } from \"../lib/path.js\";\nimport type { ActivationType, AgentId, RuntimeContext, Scope } from \"../types.js\";\n\nfunction getProjectDir(context: RuntimeContext, explicitProjectDir?: string): string {\n return explicitProjectDir ?? context.cwd;\n}\n\nasync function resolveAgentsForScope(\n context: RuntimeContext,\n requestedAgents: string[],\n scope: Scope,\n projectDir?: string,\n): Promise<AgentId[]> {\n if (requestedAgents.length === 0 || requestedAgents.includes(\"all\")) {\n const detected = await detectInstalledAgents({\n homeDir: context.homeDir,\n projectDir: scope === \"project\" ? projectDir : undefined,\n });\n const candidates = detected.length > 0 ? detected : listSupportedAgentIds();\n return candidates.filter((agentId) => supportsScope(agentId, scope));\n }\n\n return uniqueSorted(\n requestedAgents.map((agent) => {\n if (!isAgentId(agent)) {\n throw new Error(`Unsupported agent: ${agent}`);\n }\n if (!supportsScope(agent, scope)) {\n throw new Error(`Agent ${agent} does not support ${scope} scope.`);\n }\n return agent;\n }),\n );\n}\n\nasync function resolveSkillNames(context: RuntimeContext, type: ActivationType, names: string): Promise<string[]> {\n const normalizedNames = uniqueSorted(splitCommaValues(names).map((name) => sanitizeName(name)));\n\n if (normalizedNames.includes(\"all\")) {\n if (type === \"bundle\") {\n const bundles = await listBundles(context.homeDir);\n const skillNames = uniqueSorted(bundles.flatMap((bundle) => bundle.skills));\n for (const skillName of skillNames) {\n if (!(await skillExists(context.homeDir, skillName))) {\n throw new Error(`A bundle in \"all\" references unknown skill: ${skillName}`);\n }\n }\n return skillNames;\n }\n\n const skills = await listSkills(context.homeDir);\n return skills.map((skill) => skill.name);\n }\n\n if (type === \"bundle\") {\n const bundles = await Promise.all(normalizedNames.map((bundleName) => readBundle(context.homeDir, bundleName)));\n const skillNames = uniqueSorted(bundles.flatMap((bundle) => bundle.skills));\n for (const skillName of skillNames) {\n if (!(await skillExists(context.homeDir, skillName))) {\n const bundle = bundles.find((candidate) => candidate.skills.includes(skillName));\n throw new Error(`Bundle ${bundle?.name ?? \"(unknown)\"} references unknown skill: ${skillName}`);\n }\n }\n return skillNames;\n }\n\n for (const normalizedName of normalizedNames) {\n if (!(await skillExists(context.homeDir, normalizedName))) {\n throw new Error(`Unknown skill: ${normalizedName}`);\n }\n }\n\n return normalizedNames;\n}\n\nexport async function runEnable(\n context: RuntimeContext,\n options: {\n type: ActivationType;\n name: string;\n scope: Scope;\n agents: string[];\n projectDir?: string;\n },\n) {\n const projectDir = options.scope === \"project\" ? getProjectDir(context, options.projectDir) : undefined;\n const agents = await resolveAgentsForScope(context, options.agents, options.scope, projectDir);\n const skillNames = await resolveSkillNames(context, options.type, options.name);\n const baseDir = options.scope === \"global\" ? context.homeDir : (projectDir ?? context.cwd);\n\n // Preflight: check all targets are safe before touching any\n for (const agentId of agents) {\n const skillsDir = resolveAgentSkillsDir(agentId, options.scope, baseDir);\n await mkdir(skillsDir, { recursive: true });\n for (const skillName of skillNames) {\n const sourcePath = getSkillPath(context.homeDir, skillName);\n const targetPath = `${skillsDir}/${skillName}`;\n await assertProjectionTargetSafe(getProjectionMode(agentId), sourcePath, targetPath);\n }\n }\n\n // Apply projections directly\n const created: string[] = [];\n for (const agentId of agents) {\n const skillsDir = resolveAgentSkillsDir(agentId, options.scope, baseDir);\n const mode = getProjectionMode(agentId);\n for (const skillName of skillNames) {\n const sourcePath = getSkillPath(context.homeDir, skillName);\n const targetPath = `${skillsDir}/${skillName}`;\n const result = mode === \"symlink\"\n ? await createSkillSymlink(sourcePath, targetPath)\n : await createSkillCopy(sourcePath, targetPath);\n if (result === \"created\") {\n created.push(`${agentId}:${skillName}`);\n }\n }\n }\n\n const scopeLabel = options.scope === \"global\" ? \"global scope\" : (projectDir ?? context.cwd);\n const targetLabel = uniqueSorted(splitCommaValues(options.name).map((name) => sanitizeName(name))).join(\", \");\n context.write(`Enabled ${options.type} ${targetLabel} for ${agents.join(\", \")} in ${scopeLabel}${created.length > 0 ? ` (${created.length} created)` : \"\"}`);\n return { agents, skillNames, created };\n}\n","import { importScannedSkills } from \"../lib/import.js\";\nimport { scanSkills } from \"../lib/scanner.js\";\nimport type { ImportMode, RuntimeContext, ScanCandidate } from \"../types.js\";\n\nfunction groupLabel(candidate: ScanCandidate): string {\n return candidate.scope === \"global\"\n ? `Global scanned skills for ${candidate.agentId}:`\n : `Project scanned skills for ${candidate.agentId} (${candidate.projectDir}):`;\n}\n\nexport function formatScanSummary(candidates: ScanCandidate[], verbose = false): string {\n if (candidates.length === 0) {\n return \"(no scanned skills)\";\n }\n\n const groups = new Map<string, ScanCandidate[]>();\n for (const candidate of candidates) {\n const key = `${candidate.scope}:${candidate.agentId}:${candidate.projectDir ?? \"\"}`;\n const bucket = groups.get(key) ?? [];\n bucket.push(candidate);\n groups.set(key, bucket);\n }\n\n const lines = [\"Scanned skills:\"];\n for (const [, groupedCandidates] of [...groups.entries()].sort((left, right) => left[0].localeCompare(right[0]))) {\n const sorted = [...groupedCandidates].sort((left, right) => left.name.localeCompare(right.name));\n lines.push(` ${groupLabel(sorted[0])} ${sorted.length}`);\n if (verbose) {\n for (const candidate of sorted) {\n lines.push(` ✓ ${candidate.name} ${candidate.path}`);\n }\n }\n }\n\n return lines.join(\"\\n\");\n}\n\nexport async function runScan(\n context: RuntimeContext,\n options: { add?: boolean; mode?: ImportMode; override?: boolean; verbose?: boolean },\n) {\n const candidates = await scanSkills({\n homeDir: context.homeDir,\n projectDirs: [context.cwd],\n });\n\n context.write(formatScanSummary(candidates, options.verbose));\n\n if (options.add) {\n const result = await importScannedSkills({\n homeDir: context.homeDir,\n candidates,\n mode: options.mode ?? \"cp\",\n override: options.override,\n });\n for (const warning of result.warnings) {\n context.write(`Warning: ${warning}`);\n }\n for (const error of result.errors) {\n context.error(`Error: ${error}`);\n }\n context.write(`Imported ${result.imported.length} skills`);\n if (result.overwritten.length > 0) {\n context.write(`Overwritten ${result.overwritten.length} existing skills: ${result.overwritten.join(\", \")}`);\n }\n if (result.skipped.length > 0) {\n context.write(`Skipped ${result.skipped.length} existing skills (use --override to overwrite): ${result.skipped.join(\", \")}`);\n }\n if (result.missingSources > 0) {\n context.write(`Missing source files: ${result.missingSources}`);\n }\n return { candidates, ...result };\n }\n return candidates;\n}\n","import { scanSkills } from \"../lib/scanner.js\";\nimport { ensureHomeLayout } from \"../lib/skills.js\";\nimport { formatScanSummary } from \"./scan.js\";\nimport type { RuntimeContext } from \"../types.js\";\n\nexport async function runInit(context: RuntimeContext, options: { scan?: boolean; verbose?: boolean }) {\n await ensureHomeLayout(context.homeDir);\n context.write(`Initialized ${context.homeDir}/.aweskill`);\n\n if (options.scan) {\n const candidates = await scanSkills({ homeDir: context.homeDir, projectDirs: [context.cwd] });\n context.write(formatScanSummary(candidates, options.verbose));\n return candidates;\n }\n\n return [];\n}\n","import { listBundles, listBundlesInDirectory } from \"../lib/bundles.js\";\nimport { listSkills } from \"../lib/skills.js\";\nimport { getTemplateBundlesDir } from \"../lib/templates.js\";\nimport type { RuntimeContext } from \"../types.js\";\n\nconst DEFAULT_PREVIEW_COUNT = 5;\n\nexport async function runListSkills(context: RuntimeContext, options: { verbose?: boolean } = {}) {\n const skills = await listSkills(context.homeDir);\n\n if (skills.length === 0) {\n context.write(\"No skills found in central repo.\");\n return skills;\n }\n\n const preview = options.verbose ? skills : skills.slice(0, DEFAULT_PREVIEW_COUNT);\n const lines = [`Skills in central repo: ${skills.length} total`];\n if (!options.verbose && skills.length > preview.length) {\n lines.push(`Showing first ${preview.length} skills (use --verbose to show all)`);\n }\n for (const skill of preview) {\n const marker = skill.hasSKILLMd ? \"✓\" : \"!\";\n lines.push(` ${marker} ${skill.name} ${skill.path}`);\n }\n context.write(lines.join(\"\\n\"));\n return skills;\n}\n\nfunction formatBundleLines(title: string, bundles: { name: string; skills: string[] }[], verbose?: boolean): string[] {\n if (bundles.length === 0) {\n return [title, \"(none)\"];\n }\n\n const preview = verbose ? bundles : bundles.slice(0, DEFAULT_PREVIEW_COUNT);\n const lines = [`${title}: ${bundles.length} total`];\n if (!verbose && bundles.length > preview.length) {\n lines.push(`Showing first ${preview.length} bundles (use --verbose to show all)`);\n }\n for (const bundle of preview) {\n const skillsPreview = verbose ? bundle.skills : bundle.skills.slice(0, DEFAULT_PREVIEW_COUNT);\n const suffix = !verbose && bundle.skills.length > skillsPreview.length\n ? `, ... (+${bundle.skills.length - skillsPreview.length} more)`\n : \"\";\n lines.push(` - ${bundle.name}: ${bundle.skills.length} skills${skillsPreview.length > 0 ? ` -> ${skillsPreview.join(\", \")}${suffix}` : \" -> (empty)\"}`);\n }\n return lines;\n}\n\nexport async function runListBundles(context: RuntimeContext, options: { verbose?: boolean } = {}) {\n const bundles = await listBundles(context.homeDir);\n context.write(formatBundleLines(\"Bundles in central repo\", bundles, options.verbose).join(\"\\n\"));\n return bundles;\n}\n\nexport async function runListTemplateBundles(context: RuntimeContext, options: { verbose?: boolean } = {}) {\n const templateBundlesDir = await getTemplateBundlesDir();\n const bundles = await listBundlesInDirectory(templateBundlesDir);\n context.write(formatBundleLines(\"Bundle templates\", bundles, options.verbose).join(\"\\n\"));\n return bundles;\n}\n","import { cp, mkdir, readlink, unlink } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport { detectInstalledAgents, isAgentId, listSupportedAgentIds, resolveAgentSkillsDir, supportsScope } from \"../lib/agents.js\";\nimport { getAweskillPaths, uniqueSorted } from \"../lib/path.js\";\nimport { listManagedSkillNames } from \"../lib/symlink.js\";\nimport type { AgentId, RuntimeContext, Scope } from \"../types.js\";\n\nfunction getProjectDir(context: RuntimeContext, explicitProjectDir?: string): string {\n return explicitProjectDir ?? context.cwd;\n}\n\nasync function resolveAgentsForScope(\n context: RuntimeContext,\n requestedAgents: string[],\n scope: Scope,\n projectDir?: string,\n): Promise<AgentId[]> {\n if (requestedAgents.length === 0 || requestedAgents.includes(\"all\")) {\n const detected = await detectInstalledAgents({\n homeDir: context.homeDir,\n projectDir: scope === \"project\" ? projectDir : undefined,\n });\n const candidates = detected.length > 0 ? detected : listSupportedAgentIds();\n return candidates.filter((agentId) => supportsScope(agentId, scope));\n }\n\n return uniqueSorted(\n requestedAgents.map((agent) => {\n if (!isAgentId(agent)) {\n throw new Error(`Unsupported agent: ${agent}`);\n }\n if (!supportsScope(agent, scope)) {\n throw new Error(`Agent ${agent} does not support ${scope} scope.`);\n }\n return agent;\n }),\n );\n}\n\nexport async function runRecover(\n context: RuntimeContext,\n options: {\n scope: Scope;\n agents: string[];\n projectDir?: string;\n },\n) {\n const projectDir = options.scope === \"project\" ? getProjectDir(context, options.projectDir) : undefined;\n const agents = await resolveAgentsForScope(context, options.agents, options.scope, projectDir);\n const { skillsDir: centralSkillsDir } = getAweskillPaths(context.homeDir);\n const baseDir = options.scope === \"global\" ? context.homeDir : (projectDir ?? context.cwd);\n\n const recovered: string[] = [];\n\n for (const agentId of agents) {\n const agentSkillsDir = resolveAgentSkillsDir(agentId, options.scope, baseDir);\n const managed = await listManagedSkillNames(agentSkillsDir, centralSkillsDir);\n\n for (const [skillName, mode] of managed) {\n if (mode !== \"symlink\") {\n continue;\n }\n\n const targetPath = path.join(agentSkillsDir, skillName);\n const sourcePath = path.join(centralSkillsDir, skillName);\n const currentTarget = await readlink(targetPath);\n const resolvedCurrent = path.resolve(path.dirname(targetPath), currentTarget);\n if (resolvedCurrent !== path.resolve(sourcePath)) {\n continue;\n }\n\n await unlink(targetPath);\n await mkdir(path.dirname(targetPath), { recursive: true });\n await cp(sourcePath, targetPath, { recursive: true });\n recovered.push(`${agentId}:${skillName}`);\n }\n }\n\n const scopeLabel = options.scope === \"global\" ? \"global scope\" : (projectDir ?? context.cwd);\n context.write(`Recovered ${recovered.length} skill projection(s) in ${scopeLabel}${recovered.length > 0 ? `: ${recovered.join(\", \")}` : \"\"}`);\n return { agents, recovered };\n}\n","import { rm } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport { listSupportedAgents, resolveAgentSkillsDir, supportsScope } from \"./agents.js\";\nimport { listBundles, writeBundle } from \"./bundles.js\";\nimport { getAweskillPaths, sanitizeName } from \"./path.js\";\nimport { getSkillPath } from \"./skills.js\";\nimport { listManagedSkillNames, removeManagedProjection } from \"./symlink.js\";\n\nexport interface SkillReferences {\n bundles: string[];\n agentProjections: string[];\n}\n\n/**\n * Find all places a skill is referenced:\n * - bundle definitions that list it\n * - active managed projections (symlinks/copies) in agent skill directories\n */\nexport async function findSkillReferences(options: {\n homeDir: string;\n skillName: string;\n projectDir?: string;\n}): Promise<SkillReferences> {\n const normalizedSkill = sanitizeName(options.skillName);\n const { skillsDir } = getAweskillPaths(options.homeDir);\n\n const bundles = (await listBundles(options.homeDir))\n .filter((bundle) => bundle.skills.includes(normalizedSkill))\n .map((bundle) => bundle.name);\n\n const agentProjections: string[] = [];\n const baseDirs: Array<{ scope: \"global\" | \"project\"; dir: string }> = [\n { scope: \"global\", dir: options.homeDir },\n ];\n if (options.projectDir) {\n baseDirs.push({ scope: \"project\", dir: options.projectDir });\n }\n\n for (const { scope, dir } of baseDirs) {\n for (const agent of listSupportedAgents()) {\n if (!supportsScope(agent.id, scope)) {\n continue;\n }\n const agentSkillsDir = resolveAgentSkillsDir(agent.id, scope, dir);\n const managed = await listManagedSkillNames(agentSkillsDir, skillsDir);\n if (managed.has(normalizedSkill)) {\n agentProjections.push(`${agent.id}(${scope}):${normalizedSkill}`);\n }\n }\n }\n\n return { bundles, agentProjections };\n}\n\n/**\n * Remove the skill from bundles, delete all managed projections pointing to it,\n * then delete the skill from the central repository.\n */\nexport async function removeSkillWithReferences(options: {\n homeDir: string;\n skillName: string;\n projectDir?: string;\n}): Promise<void> {\n const normalizedSkill = sanitizeName(options.skillName);\n const { skillsDir } = getAweskillPaths(options.homeDir);\n\n // Strip from bundle definitions\n const bundles = await listBundles(options.homeDir);\n for (const bundle of bundles) {\n if (!bundle.skills.includes(normalizedSkill)) {\n continue;\n }\n bundle.skills = bundle.skills.filter((skill) => skill !== normalizedSkill);\n await writeBundle(options.homeDir, bundle);\n }\n\n // Remove managed projections across all known agent dirs\n const baseDirs: Array<{ scope: \"global\" | \"project\"; dir: string }> = [\n { scope: \"global\", dir: options.homeDir },\n ];\n if (options.projectDir) {\n baseDirs.push({ scope: \"project\", dir: options.projectDir });\n }\n\n for (const { scope, dir } of baseDirs) {\n for (const agent of listSupportedAgents()) {\n if (!supportsScope(agent.id, scope)) {\n continue;\n }\n const agentSkillsDir = resolveAgentSkillsDir(agent.id, scope, dir);\n const managed = await listManagedSkillNames(agentSkillsDir, skillsDir);\n if (managed.has(normalizedSkill)) {\n await removeManagedProjection(path.join(agentSkillsDir, normalizedSkill));\n }\n }\n }\n\n // Delete from central repo\n await rm(getSkillPath(options.homeDir, normalizedSkill), { force: true, recursive: true });\n}\n","import { findSkillReferences, removeSkillWithReferences } from \"../lib/references.js\";\nimport type { RuntimeContext } from \"../types.js\";\n\nexport async function runRemove(\n context: RuntimeContext,\n options: {\n skillName: string;\n force?: boolean;\n projectDir?: string;\n },\n) {\n const projectDir = options.projectDir ?? context.cwd;\n const references = await findSkillReferences({\n homeDir: context.homeDir,\n skillName: options.skillName,\n projectDir,\n });\n const referenceCount = references.bundles.length + references.agentProjections.length;\n\n if (referenceCount > 0 && !options.force) {\n throw new Error(\n `Skill ${options.skillName} is still referenced: ${[\n ...references.bundles,\n ...references.agentProjections,\n ].join(\", \")}`,\n );\n }\n\n await removeSkillWithReferences({\n homeDir: context.homeDir,\n skillName: options.skillName,\n projectDir,\n });\n context.write(`Removed ${options.skillName}`);\n return references;\n}\n","import { cp, mkdir, readdir, rm } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport { createSkillsBackupArchive, extractSkillsArchive, formatBackupLabel } from \"../lib/backup.js\";\nimport { listBundlesInDirectory } from \"../lib/bundles.js\";\nimport { getAweskillPaths } from \"../lib/path.js\";\nimport { listSkillEntriesInDirectory } from \"../lib/skills.js\";\nimport type { RuntimeContext } from \"../types.js\";\n\nexport async function runRestore(\n context: RuntimeContext,\n options: {\n archivePath: string;\n override?: boolean;\n includeBundles?: boolean;\n },\n) {\n const includeBundles = options.includeBundles ?? false;\n const { tempDir, extractedSkillsDir, extractedBundlesDir } = await extractSkillsArchive(options.archivePath);\n\n try {\n const extracted = await listSkillEntriesInDirectory(extractedSkillsDir);\n if (extracted.length === 0) {\n throw new Error(`Archive does not contain a skills/ directory: ${options.archivePath}`);\n }\n\n const { skillsDir, bundlesDir } = getAweskillPaths(context.homeDir);\n const current = await listSkillEntriesInDirectory(skillsDir);\n const currentNames = new Set(current.map((entry) => entry.name));\n const conflicts = extracted.map((entry) => entry.name).filter((name) => currentNames.has(name));\n const extractedBundles = includeBundles ? await listBundlesInDirectory(extractedBundlesDir) : [];\n const currentBundles = includeBundles ? await listBundlesInDirectory(bundlesDir) : [];\n const currentBundleNames = new Set(currentBundles.map((bundle) => bundle.name));\n const bundleConflicts = extractedBundles.map((bundle) => bundle.name).filter((name) => currentBundleNames.has(name));\n\n if ((conflicts.length > 0 || bundleConflicts.length > 0) && !options.override) {\n const conflictMessages: string[] = [];\n if (conflicts.length > 0) {\n conflictMessages.push(`skills: ${conflicts.join(\", \")}`);\n }\n if (bundleConflicts.length > 0) {\n conflictMessages.push(`bundles: ${bundleConflicts.join(\", \")}`);\n }\n throw new Error(`Restore would overwrite existing ${conflictMessages.join(\"; \")}. Use --override to replace them.`);\n }\n\n const backupArchivePath = await createSkillsBackupArchive(context.homeDir, { includeBundles });\n\n if (options.override) {\n await rm(skillsDir, { recursive: true, force: true });\n await mkdir(path.dirname(skillsDir), { recursive: true });\n await cp(extractedSkillsDir, skillsDir, { recursive: true });\n if (includeBundles) {\n await rm(bundlesDir, { recursive: true, force: true });\n await mkdir(path.dirname(bundlesDir), { recursive: true });\n await cp(extractedBundlesDir, bundlesDir, { recursive: true });\n }\n } else {\n await mkdir(skillsDir, { recursive: true });\n for (const entry of extracted) {\n await cp(entry.path, path.join(skillsDir, entry.name), { recursive: true });\n }\n if (includeBundles) {\n await mkdir(bundlesDir, { recursive: true });\n for (const bundle of extractedBundles) {\n await cp(path.join(extractedBundlesDir, `${bundle.name}.yaml`), path.join(bundlesDir, `${bundle.name}.yaml`), { recursive: true });\n }\n }\n }\n\n const restoredLabel = includeBundles\n ? `Restored ${extracted.length} skills and ${extractedBundles.length} bundles from ${options.archivePath}`\n : `Restored ${extracted.length} skills from ${options.archivePath}`;\n context.write(restoredLabel);\n context.write(`Backed up current ${formatBackupLabel(includeBundles)} to ${backupArchivePath}`);\n return { restored: extracted.map((entry) => entry.name), backupArchivePath };\n } finally {\n await rm(tempDir, { recursive: true, force: true });\n }\n}\n","import { mkdir, readdir, rename, rm } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport type { SkillEntry } from \"../types.js\";\nimport { getAweskillPaths } from \"./path.js\";\nimport { listSkills } from \"./skills.js\";\n\ninterface ParsedSkillName {\n baseName: string;\n numericKey?: number[];\n hasNumericSuffix: boolean;\n}\n\nexport interface DuplicateGroup {\n baseName: string;\n kept: SkillEntry;\n removed: SkillEntry[];\n}\n\nconst NUMERIC_SUFFIX_PATTERN = /^(.*?)-(\\d+(?:\\.\\d+)*)$/;\n\nfunction parseSkillName(name: string): ParsedSkillName {\n const match = name.match(NUMERIC_SUFFIX_PATTERN);\n if (!match) {\n return {\n baseName: name,\n hasNumericSuffix: false,\n };\n }\n\n return {\n baseName: match[1],\n hasNumericSuffix: true,\n numericKey: match[2].split(\".\").map((part) => Number.parseInt(part, 10)),\n };\n}\n\nfunction compareNumericKeys(left: number[], right: number[]): number {\n const length = Math.max(left.length, right.length);\n for (let index = 0; index < length; index += 1) {\n const leftValue = left[index] ?? 0;\n const rightValue = right[index] ?? 0;\n if (leftValue !== rightValue) {\n return leftValue - rightValue;\n }\n }\n return 0;\n}\n\nfunction choosePreferredSkill(entries: SkillEntry[]): SkillEntry {\n return [...entries].sort((left, right) => {\n const leftParsed = parseSkillName(left.name);\n const rightParsed = parseSkillName(right.name);\n\n if (leftParsed.hasNumericSuffix && !rightParsed.hasNumericSuffix) {\n return -1;\n }\n if (!leftParsed.hasNumericSuffix && rightParsed.hasNumericSuffix) {\n return 1;\n }\n\n if (leftParsed.numericKey && rightParsed.numericKey) {\n const comparison = compareNumericKeys(rightParsed.numericKey, leftParsed.numericKey);\n if (comparison !== 0) {\n return comparison;\n }\n }\n\n return left.name.localeCompare(right.name);\n })[0]!;\n}\n\nexport async function findDuplicateSkills(homeDir: string): Promise<DuplicateGroup[]> {\n const skills = await listSkills(homeDir);\n const grouped = new Map<string, SkillEntry[]>();\n\n for (const skill of skills) {\n const parsed = parseSkillName(skill.name);\n const bucket = grouped.get(parsed.baseName) ?? [];\n bucket.push(skill);\n grouped.set(parsed.baseName, bucket);\n }\n\n const duplicates: DuplicateGroup[] = [];\n for (const [baseName, entries] of grouped) {\n if (entries.length < 2) {\n continue;\n }\n\n const kept = choosePreferredSkill(entries);\n const removed = entries\n .filter((entry) => entry.path !== kept.path)\n .sort((left, right) => left.name.localeCompare(right.name));\n\n if (removed.length > 0) {\n duplicates.push({ baseName, kept, removed });\n }\n }\n\n return duplicates.sort((left, right) => left.baseName.localeCompare(right.baseName));\n}\n\nexport async function removeDuplicateSkills(\n homeDir: string,\n duplicates: DuplicateGroup[],\n options: { delete?: boolean } = {},\n): Promise<{ moved: string[]; deleted: string[] }> {\n const paths = getAweskillPaths(homeDir);\n await mkdir(paths.dupSkillsDir, { recursive: true });\n\n const moved: string[] = [];\n const deleted: string[] = [];\n\n for (const group of duplicates) {\n for (const skill of group.removed) {\n if (options.delete) {\n await rm(skill.path, { recursive: true, force: true });\n deleted.push(skill.name);\n continue;\n }\n\n const targetPath = await nextAvailableDupPath(paths.dupSkillsDir, skill.name);\n await rename(skill.path, targetPath);\n moved.push(`${skill.name} -> ${targetPath}`);\n }\n }\n\n return { moved, deleted };\n}\n\nasync function nextAvailableDupPath(dupSkillsDir: string, skillName: string): Promise<string> {\n const entries = new Set(await readdir(dupSkillsDir).catch(() => []));\n if (!entries.has(skillName)) {\n return path.join(dupSkillsDir, skillName);\n }\n\n let index = 1;\n while (entries.has(`${skillName}-${index}`)) {\n index += 1;\n }\n return path.join(dupSkillsDir, `${skillName}-${index}`);\n}\n","import { findDuplicateSkills, removeDuplicateSkills } from \"../lib/rmdup.js\";\nimport type { RuntimeContext } from \"../types.js\";\n\nexport async function runRmdup(\n context: RuntimeContext,\n options: { remove?: boolean; delete?: boolean },\n) {\n if (options.delete && !options.remove) {\n throw new Error(\"--delete requires --remove\");\n }\n\n const duplicates = await findDuplicateSkills(context.homeDir);\n\n if (duplicates.length === 0) {\n context.write(\"No duplicate skills found in the central repo.\");\n return { duplicates, moved: [], deleted: [] };\n }\n\n const lines = [\"Duplicate skill groups in central repo:\"];\n for (const group of duplicates) {\n lines.push(` ${group.baseName}: ${group.removed.length + 1} entries`);\n lines.push(` keep: ${group.kept.name} ${group.kept.path}`);\n for (const skill of group.removed) {\n lines.push(` drop: ${skill.name} ${skill.path}`);\n }\n }\n\n let moved: string[] = [];\n let deleted: string[] = [];\n if (options.remove) {\n const result = await removeDuplicateSkills(context.homeDir, duplicates, { delete: options.delete });\n moved = result.moved;\n deleted = result.deleted;\n lines.push(\"\");\n if (options.delete) {\n lines.push(`Deleted ${deleted.length} duplicate skills`);\n } else {\n lines.push(`Moved ${moved.length} duplicate skills to ${context.homeDir}/.aweskill/dup_skills`);\n }\n } else {\n lines.push(\"\");\n lines.push(\"Dry run only. Use --remove to move duplicates into dup_skills, or --remove --delete to delete them.\");\n }\n\n context.write(lines.join(\"\\n\"));\n return { duplicates, moved, deleted };\n}\n","import path from \"node:path\";\n\nimport { listSupportedAgents, resolveAgentSkillsDir, supportsScope } from \"../lib/agents.js\";\nimport { pathExists } from \"../lib/fs.js\";\nimport { getAweskillPaths } from \"../lib/path.js\";\nimport { listManagedSkillNames, removeManagedProjection } from \"../lib/symlink.js\";\nimport type { RuntimeContext } from \"../types.js\";\n\n/**\n * Scan all known agent skill directories and remove any managed projections\n * (symlinks or aweskill-copies) whose source no longer exists in the central repo.\n */\nexport async function runSync(context: RuntimeContext, options: { projectDir?: string }) {\n const { skillsDir } = getAweskillPaths(context.homeDir);\n const baseDirs = new Set<{ scope: \"global\" | \"project\"; dir: string }>();\n\n baseDirs.add({ scope: \"global\", dir: context.homeDir });\n if (options.projectDir) {\n baseDirs.add({ scope: \"project\", dir: options.projectDir });\n }\n if (await pathExists(path.join(context.cwd, \".aweskill.yaml\"))) {\n baseDirs.add({ scope: \"project\", dir: context.cwd });\n }\n\n let removed = 0;\n const warnings: string[] = [];\n\n for (const { scope, dir } of baseDirs) {\n for (const agent of listSupportedAgents()) {\n if (!supportsScope(agent.id, scope)) {\n continue;\n }\n const skillsDir2 = resolveAgentSkillsDir(agent.id, scope, dir);\n const managed = await listManagedSkillNames(skillsDir2, skillsDir);\n for (const [skillName] of managed) {\n const sourcePath = path.join(skillsDir, skillName);\n if (!(await pathExists(sourcePath))) {\n const wasRemoved = await removeManagedProjection(path.join(skillsDir2, skillName));\n if (wasRemoved) {\n removed += 1;\n warnings.push(`Removed stale projection: ${agent.id}:${skillName} (source missing)`);\n }\n }\n }\n }\n }\n\n context.write(`Sync complete. Removed ${removed} stale projection(s).`);\n if (warnings.length > 0) {\n context.write(warnings.join(\"\\n\"));\n }\n return { removed, warnings };\n}\n","import { existsSync, readFileSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nfunction readVersionFromPackageJson(packageJsonPath: string) {\n const packageJson = JSON.parse(readFileSync(packageJsonPath, \"utf8\")) as { version?: string };\n\n if (!packageJson.version) {\n throw new Error(`Missing version in ${packageJsonPath}`);\n }\n\n return packageJson.version;\n}\n\nexport function resolveVersionForModuleUrl(moduleUrl: string) {\n const moduleDir = path.dirname(fileURLToPath(moduleUrl));\n\n for (const relativePath of [\"../package.json\", \"../../package.json\"]) {\n const packageJsonPath = path.resolve(moduleDir, relativePath);\n\n if (existsSync(packageJsonPath)) {\n return readVersionFromPackageJson(packageJsonPath);\n }\n }\n\n throw new Error(`Cannot find package.json for module ${moduleUrl}`);\n}\n\nexport const AWESKILL_VERSION = resolveVersionForModuleUrl(import.meta.url);\n","import { realpathSync } from \"node:fs\";\nimport { fileURLToPath, pathToFileURL } from \"node:url\";\n\nexport function isDirectCliEntry(importMetaUrl: string, argv1?: string): boolean {\n if (!argv1) {\n return false;\n }\n\n try {\n const executedPath = realpathSync(argv1);\n const modulePath = realpathSync(fileURLToPath(importMetaUrl));\n return pathToFileURL(modulePath).href === pathToFileURL(executedPath).href;\n } catch {\n return importMetaUrl === pathToFileURL(argv1).href;\n }\n}\n","import * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\n\nfunction emitMessage(line: string) {\n const trimmed = line.trim();\n if (!trimmed) {\n return;\n }\n\n if (trimmed.startsWith(\"Warning: \")) {\n p.log.warn(trimmed.slice(\"Warning: \".length));\n return;\n }\n\n if (trimmed.startsWith(\"Error: \")) {\n p.log.error(trimmed.slice(\"Error: \".length));\n return;\n }\n\n if (\n trimmed.startsWith(\"Created \")\n || trimmed.startsWith(\"Backed up \")\n || trimmed.startsWith(\"Imported \")\n || trimmed.startsWith(\"Enabled \")\n || trimmed.startsWith(\"Disabled \")\n || trimmed.startsWith(\"Initialized \")\n || trimmed.startsWith(\"Deleted \")\n || trimmed.startsWith(\"Removed \")\n || trimmed.startsWith(\"Recovered \")\n || trimmed.startsWith(\"Sync applied \")\n ) {\n p.log.success(trimmed);\n return;\n }\n\n if (\n trimmed.startsWith(\"Skills in central repo:\")\n || trimmed === \"Scanned skills:\"\n || trimmed === \"Duplicate skill groups in central repo:\"\n || trimmed === \"Bundles:\"\n || trimmed.startsWith(\"Global skills for \")\n || trimmed.startsWith(\"Project skills for \")\n ) {\n console.log(pc.bold(trimmed));\n return;\n }\n\n if (trimmed.startsWith(\"linked:\") || trimmed.startsWith(\"duplicate:\") || trimmed.startsWith(\"new:\")) {\n console.log(pc.dim(trimmed));\n return;\n }\n\n if (trimmed.startsWith(\"No duplicate skills found\")) {\n console.log(pc.dim(trimmed));\n return;\n }\n\n if (line.startsWith(\" Global scanned skills for \") || line.startsWith(\" Project scanned skills for \")) {\n console.log(pc.dim(line.trim()));\n return;\n }\n\n if (line.startsWith(\" keep: \") || line.startsWith(\" drop: \")) {\n const [label, ...rest] = line.trim().split(\" \");\n const marker = label === \"keep:\" ? pc.green(\"keep:\") : pc.yellow(\"drop:\");\n console.log(` ${marker} ${rest.join(\" \")}`);\n return;\n }\n\n if (line.startsWith(\" ✓ \")) {\n const rest = line.slice(4);\n const firstSpace = rest.indexOf(\" \");\n if (firstSpace === -1) {\n console.log(` ${pc.green(\"✓\")} ${pc.cyan(rest)}`);\n return;\n }\n\n const name = rest.slice(0, firstSpace);\n const location = rest.slice(firstSpace + 1);\n console.log(` ${pc.green(\"✓\")} ${pc.cyan(name)} ${pc.dim(location)}`);\n return;\n }\n\n if (line.startsWith(\" ! \")) {\n const rest = line.slice(4);\n const firstSpace = rest.indexOf(\" \");\n if (firstSpace === -1) {\n console.log(` ${pc.yellow(\"!\")} ${pc.cyan(rest)}`);\n return;\n }\n\n const name = rest.slice(0, firstSpace);\n const location = rest.slice(firstSpace + 1);\n console.log(` ${pc.yellow(\"!\")} ${pc.cyan(name)} ${pc.dim(location)}`);\n return;\n }\n\n if (line.startsWith(\" ✓ \") || line.startsWith(\" ! \") || line.startsWith(\" + \")) {\n const marker = line.slice(4, 5);\n const rest = line.slice(6);\n const firstSpace = rest.indexOf(\" \");\n const name = firstSpace === -1 ? rest : rest.slice(0, firstSpace);\n const location = firstSpace === -1 ? \"\" : rest.slice(firstSpace + 1);\n const coloredMarker = marker === \"✓\" ? pc.green(\"✓\") : marker === \"!\" ? pc.yellow(\"!\") : pc.cyan(\"+\");\n console.log(` ${coloredMarker} ${pc.cyan(name)}${location ? ` ${pc.dim(location)}` : \"\"}`);\n return;\n }\n\n if (\n trimmed.startsWith(\"No skills found \")\n || trimmed === \"No bundles found.\"\n || trimmed.startsWith(\"Showing first \")\n || trimmed.startsWith(\"... and \")\n ) {\n console.log(pc.dim(trimmed));\n return;\n }\n\n p.log.message(trimmed, { symbol: pc.cyan(\"•\") });\n}\n\nexport function commandTitle(title: string): string {\n return pc.bgCyan(pc.black(` ${title} `));\n}\n\nexport function writeCliMessage(message: string) {\n for (const line of message.split(\"\\n\")) {\n emitMessage(line);\n }\n}\n\nexport function writeCliError(message: string) {\n for (const line of message.split(\"\\n\")) {\n if (!line.trim()) {\n continue;\n }\n p.log.error(line.replace(/^Error:\\s*/, \"\"));\n }\n}\n\nexport function introCommand(title: string) {\n p.intro(commandTitle(title));\n}\n\nexport function outroCommand(message = pc.green(\"Done.\")) {\n p.outro(message);\n}\n"],"mappings":"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","names":["homedir","path","path","path","path","path","mkdir","readdir","path","mkdir","path","mkdir","path","path","mkdir","readdir","path","path","mkdir","readdir","rm","stat","path","path","stat","mkdir","readdir","rm","access","lstat","readdir","readlink","path","path","path","access","path","lstat","readlink","readdir","result","cp","lstat","mkdir","readFile","readdir","readlink","rm","writeFile","path","marker","getProjectDir","resolveAgentsForScope","mkdir","getProjectDir","resolveAgentsForScope","resolveSkillNames","mkdir","DEFAULT_PREVIEW_COUNT","cp","mkdir","readlink","unlink","path","getProjectDir","resolveAgentsForScope","path","readlink","unlink","mkdir","cp","rm","path","path","rm","cp","mkdir","rm","path","rm","mkdir","path","cp","mkdir","readdir","rename","rm","path","mkdir","rm","rename","readdir","path","path","path","path","fileURLToPath","fileURLToPath","homedir"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/commands/backup.ts","../src/lib/backup.ts","../src/lib/fs.ts","../src/lib/hygiene.ts","../src/lib/path.ts","../src/lib/bundles.ts","../src/lib/skills.ts","../src/lib/templates.ts","../src/commands/bundle.ts","../src/lib/import.ts","../src/lib/symlink.ts","../src/lib/scanner.ts","../src/lib/agents.ts","../src/commands/import.ts","../src/commands/disable.ts","../src/commands/enable.ts","../src/commands/scan.ts","../src/commands/init.ts","../src/commands/list.ts","../src/commands/recover.ts","../src/lib/references.ts","../src/commands/remove.ts","../src/commands/restore.ts","../src/lib/rmdup.ts","../src/commands/rmdup.ts","../src/commands/sync.ts","../src/commands/agent-inspection.ts","../src/commands/clean.ts","../src/commands/where.ts","../src/lib/version.ts","../src/lib/runtime.ts","../src/lib/ui.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { Command } from \"commander\";\nimport { homedir } from \"node:os\";\n\nimport { runBackup } from \"./commands/backup.js\";\nimport {\n runBundleAddTemplate,\n runBundleAddSkill,\n runBundleCreate,\n runBundleDelete,\n runBundleRemoveSkill,\n runBundleShow,\n} from \"./commands/bundle.js\";\nimport { runImport } from \"./commands/import.js\";\nimport { runDisable } from \"./commands/disable.js\";\nimport { runEnable } from \"./commands/enable.js\";\nimport { runInit } from \"./commands/init.js\";\nimport { runListBundles, runListSkills, runListTemplateBundles } from \"./commands/list.js\";\nimport { runRecover } from \"./commands/recover.js\";\nimport { runRemove } from \"./commands/remove.js\";\nimport { runRestore } from \"./commands/restore.js\";\nimport { runRmdup } from \"./commands/rmdup.js\";\nimport { runScan } from \"./commands/scan.js\";\nimport { runSync } from \"./commands/sync.js\";\nimport { runClean } from \"./commands/clean.js\";\nimport { runStoreWhere } from \"./commands/where.js\";\nimport { AWESKILL_VERSION } from \"./lib/version.js\";\nimport { listSupportedAgentsWithGlobalStatus } from \"./lib/agents.js\";\nimport { pathExists } from \"./lib/fs.js\";\nimport { getAweskillPaths } from \"./lib/path.js\";\nimport { isDirectCliEntry } from \"./lib/runtime.js\";\nimport { introCommand, outroCommand, writeCliError, writeCliMessage } from \"./lib/ui.js\";\nimport type { ActivationType, RuntimeContext, Scope } from \"./types.js\";\n\nfunction createRuntimeContext(overrides: Partial<RuntimeContext> = {}): RuntimeContext {\n return {\n cwd: overrides.cwd ?? process.cwd(),\n homeDir: overrides.homeDir ?? process.env.AWESKILL_HOME ?? homedir(),\n write: overrides.write ?? writeCliMessage,\n error: overrides.error ?? writeCliError,\n };\n}\n\nasync function runFramedCommand<T>(title: string, action: () => Promise<T>): Promise<T> {\n introCommand(title);\n const result = await action();\n outroCommand();\n return result;\n}\n\nfunction collectAgents(value: string, previous?: string[]): string[] {\n return [...(previous ?? []), ...value.split(\",\").map((entry) => entry.trim()).filter(Boolean)];\n}\n\nfunction getActivationType(value: string): ActivationType {\n if (value === \"bundle\" || value === \"skill\") {\n return value;\n }\n throw new Error(`Unsupported activation type: ${value}`);\n}\n\nfunction formatCliErrorMessage(message: string): string {\n const match = message.match(/missing required argument '([^']+)'/i);\n if (!match) {\n const optionMatch = message.match(/option '([^']+)' argument missing/i);\n if (optionMatch?.[1] === \"--agent <agent>\") {\n return \"Option --agent <agent> argument missing. Use one or more supported agent ids, for example \\\"codex\\\" or \\\"codex,cursor\\\". Run \\\"aweskill agent supported\\\" to see the supported agent list.\";\n }\n const normalizedMessage = message.replace(/^error:\\s*/i, \"\");\n const bundleFileMatch = normalizedMessage.match(/ENOENT: no such file or directory, open '([^']+\\/(bundles|resources\\/bundle_templates)\\/([^/'\"]+)\\.ya?ml)'/i);\n if (bundleFileMatch) {\n const bundleName = bundleFileMatch[3]!;\n if (bundleFileMatch[2] === \"resources/bundle_templates\") {\n return `Bundle template not found: ${bundleName}. Run \"aweskill bundle template list\" to see available bundle templates.`;\n }\n return `Bundle not found: ${bundleName}. Run \"aweskill bundle list\" to see available bundles.`;\n }\n const unknownSkillMatch = normalizedMessage.match(/^Unknown skill: (.+)$/);\n if (unknownSkillMatch) {\n return `Unknown skill: ${unknownSkillMatch[1]}. Run \"aweskill store list\" to see available skills.`;\n }\n const bundleNotFoundMatch = normalizedMessage.match(/^Bundle not found: (.+)$/);\n if (bundleNotFoundMatch) {\n return `Bundle not found: ${bundleNotFoundMatch[1]}. Run \"aweskill bundle list\" to see available bundles.`;\n }\n return normalizedMessage;\n }\n\n const argName = match[1]!;\n const hints: Record<string, string> = {\n archive: 'Use a backup archive path, for example \"skills-2026-04-12T19-20-00Z.tar.gz\".',\n bundle: \"Use a bundle name.\",\n name: 'Use a bundle or skill name, for example \"my-bundle\", \"biopython\", or \"all\".',\n skill: \"Use a skill name.\",\n type: 'Use \"bundle\" or \"skill\".',\n };\n const hint = hints[argName];\n return `Missing required argument <${argName}>.${hint ? ` ${hint}` : \"\"}`;\n}\n\nasync function writeSupportedAgents(context: RuntimeContext): Promise<void> {\n const lines = [\"Supported agents:\"];\n const agents = await listSupportedAgentsWithGlobalStatus(context.homeDir);\n const installedAgents = agents.filter((agent) => agent.installed).map((agent) => agent.id);\n lines.push(\n `Detected ${installedAgents.length} installed global agent${installedAgents.length === 1 ? \"\" : \"s\"}: ${\n installedAgents.length > 0 ? installedAgents.join(\", \") : \"none\"\n }`,\n );\n for (const agent of agents) {\n lines.push(agent.installed ? `✓ ${agent.id} (${agent.displayName}) ${agent.skillsDir}` : `x ${agent.id} (${agent.displayName})`);\n }\n for (const line of lines) {\n context.write(line);\n }\n}\n\nfunction configureCommandTree(command: Command): void {\n command.showHelpAfterError();\n command.exitOverride((error) => {\n error.message = formatCliErrorMessage(error.message);\n throw error;\n });\n\n for (const child of command.commands) {\n configureCommandTree(child);\n }\n}\n\nfunction normalizeVersionAlias(argv: string[]): string[] {\n return argv.map((arg, index) => {\n if (index >= 2 && arg === \"-V\") {\n return \"-v\";\n }\n return arg;\n });\n}\n\nfunction isInitializationExempt(args: string[]): boolean {\n if (args.length === 0) {\n return true;\n }\n\n if (args.includes(\"-h\") || args.includes(\"--help\") || args.includes(\"-v\") || args.includes(\"-V\") || args.includes(\"--version\")) {\n return true;\n }\n\n return args[0] === \"store\" && args[1] === \"init\";\n}\n\nasync function assertStoreInitialized(homeDir: string, args: string[]): Promise<void> {\n if (isInitializationExempt(args)) {\n return;\n }\n\n const { rootDir } = getAweskillPaths(homeDir);\n if (await pathExists(rootDir)) {\n return;\n }\n\n throw new Error(`aweskill store is not initialized at ${rootDir}. Run \"aweskill store init\" first.`);\n}\n\n\nexport function createProgram(overrides: Partial<RuntimeContext> = {}) {\n const context = createRuntimeContext(overrides);\n const program = new Command();\n\n program\n .name(\"aweskill\")\n .description(\"Local skill orchestration CLI for AI agents\")\n .version(AWESKILL_VERSION, \"-v, --version\", \"output the version number\")\n .helpOption(\"-h, --help\", \"Display help\");\n\n const bundle = program.command(\"bundle\").description(\"Manage skill bundles\");\n bundle\n .command(\"list\")\n .description(\"List bundles in the central store\")\n .option(\"--verbose\", \"show all bundles instead of a short preview\", false)\n .action(async (options) => {\n await runListBundles(context, { verbose: options.verbose });\n });\n bundle.command(\"create\").argument(\"<name>\").description(\"Create a bundle\").action(async (name) => {\n await runFramedCommand(\" aweskill bundle create \", async () => runBundleCreate(context, name));\n });\n bundle.command(\"show\").argument(\"<name>\").description(\"Show bundle contents\").action(async (name) => {\n await runBundleShow(context, name);\n });\n bundle\n .command(\"add\")\n .argument(\"<bundle>\")\n .argument(\"<skill>\")\n .description(\"Add skill entries to one or more bundles\")\n .action(async (bundleName, skillName) => {\n await runFramedCommand(\" aweskill bundle add \", async () => runBundleAddSkill(context, bundleName, skillName));\n });\n bundle\n .command(\"remove\")\n .argument(\"<bundle>\")\n .argument(\"<skill>\")\n .description(\"Remove skill entries from one or more bundles\")\n .action(async (bundleName, skillName) => {\n await runFramedCommand(\" aweskill bundle remove \", async () => runBundleRemoveSkill(context, bundleName, skillName));\n });\n bundle.command(\"delete\").argument(\"<name>\").description(\"Delete a bundle\").action(async (name) => {\n await runFramedCommand(\" aweskill bundle delete \", async () => runBundleDelete(context, name));\n });\n const bundleTemplate = bundle.command(\"template\").description(\"Manage built-in bundle templates\");\n bundleTemplate\n .command(\"list\")\n .description(\"List available built-in bundle templates\")\n .option(\"--verbose\", \"show all bundle templates instead of a short preview\", false)\n .action(async (options) => {\n await runListTemplateBundles(context, { verbose: options.verbose });\n });\n bundleTemplate.command(\"import\").argument(\"<name>\").description(\"Copy built-in templates into the central store\").action(async (name) => {\n await runFramedCommand(\" aweskill bundle template import \", async () => runBundleAddTemplate(context, name));\n });\n\n const agent = program.command(\"agent\").description(\"Manage skills used by agents\");\n agent.command(\"supported\").description(\"List supported agent ids and display names\").action(async () => {\n await writeSupportedAgents(context);\n });\n agent\n .command(\"list\")\n .description(\"Inspect agent skill directories\")\n .option(\"--global\", \"check global scope (default when no scope flag given)\")\n .option(\"--project [dir]\", \"check project scope; uses cwd when dir is omitted\")\n .option(\n \"--agent <agent>\",\n 'repeat or use comma list; defaults to all agents detected at this scope; run \"aweskill agent supported\" to see supported ids',\n collectAgents,\n )\n .option(\"--verbose\", \"show all skills in each category instead of a short preview\", false)\n .action(async (options) => {\n const isProject = options.project !== undefined;\n const scope: Scope = isProject ? \"project\" : \"global\";\n const projectDir = isProject && typeof options.project === \"string\" ? options.project : undefined;\n await runFramedCommand(\" aweskill agent list \", async () =>\n runSync(context, {\n scope,\n agents: options.agent ?? [],\n projectDir,\n apply: false,\n verbose: options.verbose,\n }),\n );\n });\n agent\n .command(\"add\")\n .description(\"Create skill projections in agent directories\")\n .argument(\"<type>\", \"bundle or skill\", getActivationType)\n .argument(\"<name>\", 'bundle or skill name(s), comma-separated, or \"all\"')\n .option(\"--global\", \"apply to global scope (default when no scope flag given)\")\n .option(\"--project [dir]\", \"apply to project scope; uses cwd when dir is omitted\")\n .option(\"--agent <agent>\", 'repeat or use comma list; defaults to all; run \"aweskill agent supported\" to see supported ids', collectAgents)\n .option(\"--force\", \"replace existing duplicate, foreign, or unmanaged targets in agent directories\", false)\n .action(async (type, targetName, options) => {\n const isProject = options.project !== undefined;\n const scope: Scope = isProject ? \"project\" : \"global\";\n const projectDir = isProject && typeof options.project === \"string\" ? options.project : undefined;\n await runFramedCommand(\" aweskill agent add \", async () =>\n runEnable(context, {\n type,\n name: targetName,\n scope,\n agents: options.agent ?? [],\n projectDir,\n force: options.force,\n }),\n );\n });\n agent\n .command(\"remove\")\n .description(\"Remove skill projections in agent directories\")\n .argument(\"<type>\", \"bundle or skill\", getActivationType)\n .argument(\"<name>\", 'bundle or skill name(s), comma-separated, or \"all\"')\n .option(\"--global\", \"apply to global scope (default when no scope flag given)\")\n .option(\"--project [dir]\", \"apply to project scope; uses cwd when dir is omitted\")\n .option(\"--agent <agent>\", 'repeat or use comma list; defaults to all; run \"aweskill agent supported\" to see supported ids', collectAgents)\n .option(\n \"--force\",\n \"with skill: remove a single bundle member or delete duplicate, foreign, or unmanaged targets in agent directories\",\n false,\n )\n .action(async (type, targetName, options) => {\n const isProject = options.project !== undefined;\n const scope: Scope = isProject ? \"project\" : \"global\";\n const projectDir = isProject && typeof options.project === \"string\" ? options.project : undefined;\n await runFramedCommand(\" aweskill agent remove \", async () =>\n runDisable(context, {\n type,\n name: targetName,\n scope,\n agents: options.agent ?? [],\n projectDir,\n force: options.force,\n }),\n );\n });\n agent\n .command(\"recover\")\n .description(\"Convert aweskill-managed symlink projections into full skill directories\")\n .option(\"--global\", \"recover global scope (default when no scope flag given)\")\n .option(\"--project [dir]\", \"recover project scope; uses cwd when dir is omitted\")\n .option(\"--agent <agent>\", 'repeat or use comma list; defaults to all; run \"aweskill agent supported\" to see supported ids', collectAgents)\n .action(async (options) => {\n const isProject = options.project !== undefined;\n const scope: Scope = isProject ? \"project\" : \"global\";\n const projectDir = isProject && typeof options.project === \"string\" ? options.project : undefined;\n await runFramedCommand(\" aweskill agent recover \", async () =>\n runRecover(context, {\n scope,\n agents: options.agent ?? [],\n projectDir,\n }),\n );\n });\n\n const store = program.command(\"store\").description(\"Manage the aweskill local store\");\n store\n .command(\"init\")\n .description(\"Create ~/.aweskill layout\")\n .option(\"--scan\", \"scan existing agent directories after init\", false)\n .option(\"--verbose\", \"show scanned skill details instead of per-agent totals\", false)\n .action(async (options) => {\n await runFramedCommand(\" aweskill store init \", async () => runInit(context, options));\n });\n store\n .command(\"list\")\n .description(\"List skills in the central store\")\n .option(\"--verbose\", \"show all skills instead of a short preview\", false)\n .action(async (options) => {\n await runListSkills(context, { verbose: options.verbose });\n });\n store\n .command(\"scan\")\n .description(\"Scan supported agent skill directories\")\n .option(\"--global\", \"scan global scope (default when no scope flag given)\")\n .option(\"--project [dir]\", \"scan project scope; uses cwd when dir is omitted\")\n .option(\"--agent <agent>\", 'repeat or use comma list; defaults to all; run \"aweskill agent supported\" to see supported ids', collectAgents)\n .option(\"--verbose\", \"show scanned skill details instead of per-agent totals\", false)\n .action(async (options) => {\n const isProject = options.project !== undefined;\n const scope: Scope = isProject ? \"project\" : \"global\";\n const projectDir = isProject && typeof options.project === \"string\" ? options.project : undefined;\n await runFramedCommand(\" aweskill store scan \", async () =>\n runScan(context, {\n scope,\n agents: options.agent ?? [],\n projectDir,\n verbose: options.verbose,\n }),\n );\n });\n store\n .command(\"import\")\n .argument(\"[path]\")\n .description(\"Import one skill or a skills root directory\")\n .option(\"--scan\", \"import scanned skills\", false)\n .option(\"--global\", \"scan global scope when used with --scan (default when no scope flag given)\")\n .option(\"--project [dir]\", \"scan project scope when used with --scan; uses cwd when dir is omitted\")\n .option(\"--agent <agent>\", 'repeat or use comma list; defaults to all; run \"aweskill agent supported\" to see supported ids', collectAgents)\n .option(\"--keep-source\", \"keep the source path in place after importing\", false)\n .option(\"--link-source\", \"replace the source path with an aweskill-managed projection after importing\", false)\n .option(\"--override\", \"overwrite existing files when importing\", false)\n .action(async (sourcePath, options) => {\n const isProject = options.project !== undefined;\n const scope: Scope = isProject ? \"project\" : \"global\";\n const projectDir = isProject && typeof options.project === \"string\" ? options.project : undefined;\n await runFramedCommand(\" aweskill store import \", async () =>\n runImport(context, {\n sourcePath,\n scan: options.scan,\n scope,\n agents: options.agent ?? [],\n projectDir,\n override: options.override,\n keepSource: options.keepSource,\n linkSource: options.linkSource,\n }),\n );\n });\n store\n .command(\"remove\")\n .argument(\"<skill>\")\n .description(\"Remove a skill from the central store\")\n .option(\"--force\", \"remove and clean references\", false)\n .option(\"--project <dir>\", \"project config to inspect\")\n .action(async (skillName, options) => {\n await runFramedCommand(\" aweskill store remove \", async () =>\n runRemove(context, {\n skillName,\n force: options.force,\n projectDir: options.project,\n }),\n );\n });\n store\n .command(\"backup\")\n .argument(\"[archive]\")\n .description(\"Create a timestamped archive of the central skills repository\")\n .option(\"--both\", \"include bundle definitions in the backup archive (default behavior)\", true)\n .option(\"--skills-only\", \"back up only skills/ without bundles/\", false)\n .action(async (archivePath, options) => {\n await runFramedCommand(\" aweskill store backup \", async () =>\n runBackup(context, {\n archivePath,\n includeBundles: options.skillsOnly ? false : options.both,\n }),\n );\n });\n store\n .command(\"restore\")\n .argument(\"<archive>\")\n .description(\"Restore skills from a backup archive or unpacked backup directory and auto-back up the current store first\")\n .option(\"--override\", \"replace existing skills with the archive contents\", false)\n .option(\"--both\", \"restore bundle definitions and include them in the pre-restore backup (default behavior)\", true)\n .option(\"--skills-only\", \"restore only skills/ without bundles/\", false)\n .action(async (archivePath, options) => {\n await runFramedCommand(\" aweskill store restore \", async () =>\n runRestore(context, {\n archivePath,\n override: options.override,\n includeBundles: options.skillsOnly ? false : options.both,\n }),\n );\n });\n store\n .command(\"where\")\n .description(\"Show the aweskill store location and optionally summarize its contents\")\n .option(\"--verbose\", \"show core store directories and entry counts\", false)\n .action(async (options) => {\n await runStoreWhere(context, { verbose: options.verbose });\n });\n\n const doctor = program.command(\"doctor\").description(\"Diagnose and repair repository issues\");\n doctor\n .command(\"clean\")\n .description(\"Find and optionally remove suspicious non-store entries in skills/ and bundles/\")\n .option(\"--apply\", \"remove suspicious entries instead of reporting only\", false)\n .option(\"--skills-only\", \"scan only skills/\", false)\n .option(\"--bundles-only\", \"scan only bundles/\", false)\n .option(\"--verbose\", \"show all suspicious entries instead of a short preview\", false)\n .action(async (options) => {\n await runFramedCommand(\" aweskill doctor clean \", async () =>\n runClean(context, {\n apply: options.apply,\n skillsOnly: options.skillsOnly,\n bundlesOnly: options.bundlesOnly,\n verbose: options.verbose,\n }),\n );\n });\n doctor\n .command(\"dedup\")\n .description(\"Find or remove duplicate central-store skills with numeric/version suffixes\")\n .option(\"--apply\", \"move duplicate skills into dup_skills (or delete them with --delete)\", false)\n .option(\"--delete\", \"when used with --apply, permanently delete duplicates instead of moving them\", false)\n .action(async (options) => {\n await runFramedCommand(\" aweskill doctor dedup \", async () =>\n runRmdup(context, {\n apply: options.apply,\n delete: options.delete,\n }),\n );\n });\n doctor\n .command(\"sync\")\n .description(\"Inspect and optionally repair agent-side projections; dry-run by default\")\n .option(\"--apply\", \"repair broken projections and relink duplicate and matched entries\", false)\n .option(\"--remove-suspicious\", \"when used with --apply, remove suspicious agent entries instead of only reporting them\", false)\n .option(\"--global\", \"check global scope (default when no scope flag given)\")\n .option(\"--project [dir]\", \"check project scope; uses cwd when dir is omitted\")\n .option(\n \"--agent <agent>\",\n 'repeat or use comma list; defaults to all agents detected at this scope; run \"aweskill agent supported\" to see supported ids',\n collectAgents,\n )\n .option(\"--verbose\", \"show all agent skill entries instead of a short preview\", false)\n .action(async (options) => {\n const isProject = options.project !== undefined;\n const scope: Scope = isProject ? \"project\" : \"global\";\n const projectDir = isProject && typeof options.project === \"string\" ? options.project : undefined;\n await runFramedCommand(\" aweskill doctor sync \", async () =>\n runSync(context, {\n apply: options.apply,\n removeSuspicious: options.removeSuspicious,\n scope,\n agents: options.agent ?? [],\n projectDir,\n verbose: options.verbose,\n }),\n );\n });\n\n configureCommandTree(program);\n return program;\n}\n\nexport async function main(argv = process.argv) {\n const program = createProgram();\n try {\n const normalizedArgv = normalizeVersionAlias(argv);\n const context = createRuntimeContext();\n await assertStoreInitialized(context.homeDir, normalizedArgv.slice(2));\n await program.parseAsync(normalizedArgv);\n } catch (error) {\n const code = typeof error === \"object\" && error !== null && \"code\" in error ? error.code : undefined;\n if (code === \"commander.version\" || code === \"commander.helpDisplayed\") {\n return;\n }\n\n const message = error instanceof Error ? error.message : String(error);\n if (message === \"(outputHelp)\" || message === \"outputHelp\") {\n return;\n }\n\n console.error(`Error: ${formatCliErrorMessage(message)}`);\n process.exitCode = 1;\n }\n}\n\nif (isDirectCliEntry(import.meta.url, process.argv[1])) {\n void main();\n}\n","import path from \"node:path\";\n\nimport { createSkillsBackupArchive, formatBackupLabel } from \"../lib/backup.js\";\nimport { scanStoreHygiene } from \"../lib/hygiene.js\";\nimport { expandHomePath } from \"../lib/path.js\";\nimport { getAweskillPaths } from \"../lib/path.js\";\nimport type { RuntimeContext } from \"../types.js\";\n\nexport async function runBackup(\n context: RuntimeContext,\n options: {\n archivePath?: string;\n includeBundles?: boolean;\n } = {},\n) {\n const includeBundles = options.includeBundles ?? true;\n const { rootDir, skillsDir, bundlesDir } = getAweskillPaths(context.homeDir);\n const { findings } = await scanStoreHygiene({ rootDir, skillsDir, bundlesDir, includeBundles });\n const archivePath = await createSkillsBackupArchive(context.homeDir, {\n archivePath: options.archivePath ? path.resolve(context.cwd, expandHomePath(options.archivePath, context.homeDir)) : undefined,\n includeBundles,\n });\n context.write(`Backed up ${formatBackupLabel(includeBundles)} to ${archivePath}`);\n if (findings.length > 0) {\n context.write(`Skipped suspicious store entries during backup: ${findings.map((finding) => finding.relativePath).join(\", \")}`);\n }\n return { archivePath };\n}\n","import { gunzipSync, gzipSync } from \"node:zlib\";\nimport { cp, mkdtemp, mkdir, readdir, readFile, stat, writeFile } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport path from \"node:path\";\n\nimport { pathExists } from \"./fs.js\";\nimport { scanStoreHygiene } from \"./hygiene.js\";\nimport { getAweskillPaths } from \"./path.js\";\n\nconst TAR_BLOCK_SIZE = 512;\n\ninterface TarEntry {\n name: string;\n type: \"file\" | \"directory\";\n mode: number;\n data?: Buffer;\n}\n\nfunction formatTimestamp(date: Date): string {\n return date.toISOString().replace(/:/g, \"-\").replace(/\\.\\d{3}Z$/, \"Z\");\n}\n\nfunction formatBackupLabel(includeBundles: boolean): string {\n return includeBundles ? \"skills and bundles\" : \"skills\";\n}\n\nfunction normalizeTarPath(entryPath: string): string {\n return entryPath.split(path.sep).join(\"/\");\n}\n\nfunction encodeOctal(value: number, length: number): Buffer {\n const encoded = value.toString(8).padStart(length - 1, \"0\");\n return Buffer.from(`${encoded}\\0`, \"ascii\");\n}\n\nfunction writeString(field: Buffer, value: string): void {\n field.fill(0);\n field.write(value, 0, Math.min(Buffer.byteLength(value, \"utf8\"), field.length), \"utf8\");\n}\n\nfunction splitTarName(name: string): { name: string; prefix: string } {\n if (Buffer.byteLength(name, \"utf8\") <= 100) {\n return { name, prefix: \"\" };\n }\n\n const parts = name.split(\"/\");\n while (parts.length > 1) {\n const candidatePrefix = parts.slice(0, -1).join(\"/\");\n const candidateName = parts[parts.length - 1] ?? \"\";\n if (Buffer.byteLength(candidateName, \"utf8\") <= 100 && Buffer.byteLength(candidatePrefix, \"utf8\") <= 155) {\n return { name: candidateName, prefix: candidatePrefix };\n }\n parts.shift();\n }\n\n throw new Error(`Path is too long for tar header: ${name}`);\n}\n\nfunction createTarHeader(entry: TarEntry): Buffer {\n const header = Buffer.alloc(TAR_BLOCK_SIZE, 0);\n const entryName = entry.type === \"directory\" && !entry.name.endsWith(\"/\") ? `${entry.name}/` : entry.name;\n const { name, prefix } = splitTarName(entryName);\n\n writeString(header.subarray(0, 100), name);\n encodeOctal(entry.mode, 8).copy(header, 100);\n encodeOctal(0, 8).copy(header, 108);\n encodeOctal(0, 8).copy(header, 116);\n encodeOctal(entry.type === \"file\" ? (entry.data?.length ?? 0) : 0, 12).copy(header, 124);\n encodeOctal(Math.floor(Date.now() / 1000), 12).copy(header, 136);\n header.fill(0x20, 148, 156);\n header[156] = entry.type === \"directory\" ? \"5\".charCodeAt(0) : \"0\".charCodeAt(0);\n writeString(header.subarray(257, 263), \"ustar\");\n writeString(header.subarray(263, 265), \"00\");\n writeString(header.subarray(345, 500), prefix);\n\n let checksum = 0;\n for (const byte of header) {\n checksum += byte;\n }\n Buffer.from(checksum.toString(8).padStart(6, \"0\") + \"\\0 \", \"ascii\").copy(header, 148);\n return header;\n}\n\nfunction buildTarArchive(entries: TarEntry[]): Buffer {\n const chunks: Buffer[] = [];\n\n for (const entry of entries) {\n chunks.push(createTarHeader(entry));\n if (entry.type === \"file\") {\n const data = entry.data ?? Buffer.alloc(0);\n chunks.push(data);\n const remainder = data.length % TAR_BLOCK_SIZE;\n if (remainder !== 0) {\n chunks.push(Buffer.alloc(TAR_BLOCK_SIZE - remainder, 0));\n }\n }\n }\n\n chunks.push(Buffer.alloc(TAR_BLOCK_SIZE * 2, 0));\n return Buffer.concat(chunks);\n}\n\nfunction isZeroBlock(block: Buffer): boolean {\n for (const byte of block) {\n if (byte !== 0) {\n return false;\n }\n }\n return true;\n}\n\nfunction readTarString(block: Buffer, start: number, end: number): string {\n const value = block.subarray(start, end).toString(\"utf8\");\n return value.replace(/\\0.*$/, \"\");\n}\n\nfunction readTarNumber(block: Buffer, start: number, end: number): number {\n const value = readTarString(block, start, end).trim();\n return value === \"\" ? 0 : Number.parseInt(value, 8);\n}\n\nfunction safeExtractPath(baseDir: string, entryName: string): string {\n const normalized = entryName.replace(/\\\\/g, \"/\");\n if (normalized.startsWith(\"/\") || normalized.split(\"/\").includes(\"..\")) {\n throw new Error(`Archive contains unsafe path: ${entryName}`);\n }\n return path.join(baseDir, ...normalized.split(\"/\").filter(Boolean));\n}\n\nasync function extractTarArchive(buffer: Buffer, destinationDir: string): Promise<void> {\n let offset = 0;\n\n while (offset + TAR_BLOCK_SIZE <= buffer.length) {\n const header = buffer.subarray(offset, offset + TAR_BLOCK_SIZE);\n offset += TAR_BLOCK_SIZE;\n\n if (isZeroBlock(header)) {\n break;\n }\n\n const name = readTarString(header, 0, 100);\n const prefix = readTarString(header, 345, 500);\n const entryName = prefix ? `${prefix}/${name}` : name;\n const typeFlag = String.fromCharCode(header[156] || \"0\".charCodeAt(0));\n const size = readTarNumber(header, 124, 136);\n const outputPath = safeExtractPath(destinationDir, entryName);\n\n if (typeFlag === \"5\") {\n await mkdir(outputPath, { recursive: true });\n continue;\n }\n\n const fileData = buffer.subarray(offset, offset + size);\n offset += Math.ceil(size / TAR_BLOCK_SIZE) * TAR_BLOCK_SIZE;\n await mkdir(path.dirname(outputPath), { recursive: true });\n await writeFile(outputPath, fileData);\n }\n}\n\nasync function collectTarEntries(rootDir: string, relativeDir: string): Promise<TarEntry[]> {\n const entries: TarEntry[] = [\n {\n name: normalizeTarPath(relativeDir),\n type: \"directory\",\n mode: 0o755,\n },\n ];\n const absoluteDir = path.join(rootDir, relativeDir);\n const directoryEntries = await readdir(absoluteDir, { withFileTypes: true });\n\n for (const entry of directoryEntries) {\n const absolutePath = path.join(absoluteDir, entry.name);\n const archivePath = normalizeTarPath(path.join(relativeDir, entry.name));\n if (entry.isDirectory()) {\n entries.push(...await collectTarEntries(rootDir, path.join(relativeDir, entry.name)));\n continue;\n }\n\n if (!entry.isFile()) {\n continue;\n }\n\n const entryStats = await stat(absolutePath);\n entries.push({\n name: archivePath,\n type: \"file\",\n mode: entryStats.mode & 0o777,\n data: await readFile(absolutePath),\n });\n }\n\n return entries;\n}\n\nasync function collectTarEntriesForFile(rootDir: string, relativeFilePath: string): Promise<TarEntry[]> {\n const absolutePath = path.join(rootDir, relativeFilePath);\n const entryStats = await stat(absolutePath);\n return [{\n name: normalizeTarPath(relativeFilePath),\n type: \"file\",\n mode: entryStats.mode & 0o777,\n data: await readFile(absolutePath),\n }];\n}\n\nasync function archiveEntries(homeDir: string, includeBundles: boolean): Promise<TarEntry[]> {\n const { rootDir, skillsDir, bundlesDir } = getAweskillPaths(homeDir);\n const entries: TarEntry[] = [];\n const hygiene = await scanStoreHygiene({ rootDir, skillsDir, bundlesDir, includeBundles });\n\n if (hygiene.validSkills.length > 0) {\n entries.push({ name: \"skills\", type: \"directory\", mode: 0o755 });\n for (const skill of hygiene.validSkills) {\n entries.push(...await collectTarEntries(rootDir, path.relative(rootDir, skill.path)));\n }\n }\n\n if (includeBundles && hygiene.validBundles.length > 0) {\n entries.push({ name: \"bundles\", type: \"directory\", mode: 0o755 });\n for (const bundle of hygiene.validBundles) {\n entries.push(...await collectTarEntriesForFile(rootDir, path.join(\"bundles\", `${bundle.name}.yaml`)));\n }\n }\n\n return entries;\n}\n\nexport async function createSkillsBackupArchive(\n homeDir: string,\n options: {\n archivePath?: string;\n includeBundles?: boolean;\n } = {},\n): Promise<string> {\n const { backupDir } = getAweskillPaths(homeDir);\n const includeBundles = options.includeBundles ?? false;\n const archivePath = await resolveBackupArchivePath(backupDir, options.archivePath);\n\n await mkdir(path.dirname(archivePath), { recursive: true });\n\n const tarArchive = buildTarArchive(await archiveEntries(homeDir, includeBundles));\n await writeFile(archivePath, gzipSync(tarArchive));\n return archivePath;\n}\n\nexport async function extractSkillsArchive(archivePath: string): Promise<{\n tempDir: string;\n extractedSkillsDir: string;\n extractedBundlesDir: string;\n}> {\n const tempDir = await mkdtemp(path.join(tmpdir(), \"aweskill-restore-\"));\n const sourceStats = await stat(archivePath);\n\n if (sourceStats.isDirectory()) {\n const sourceSkillsDir = path.join(archivePath, \"skills\");\n const sourceBundlesDir = path.join(archivePath, \"bundles\");\n if (!(await pathExists(sourceSkillsDir))) {\n throw new Error(`Restore source does not contain a skills/ directory: ${archivePath}`);\n }\n\n await cp(sourceSkillsDir, path.join(tempDir, \"skills\"), { recursive: true });\n if (await pathExists(sourceBundlesDir)) {\n await cp(sourceBundlesDir, path.join(tempDir, \"bundles\"), { recursive: true });\n }\n } else {\n const archiveBuffer = await readFile(archivePath);\n await extractTarArchive(gunzipSync(archiveBuffer), tempDir);\n }\n\n return {\n tempDir,\n extractedSkillsDir: path.join(tempDir, \"skills\"),\n extractedBundlesDir: path.join(tempDir, \"bundles\"),\n };\n}\n\nexport { formatBackupLabel };\n\nasync function resolveBackupArchivePath(backupDir: string, requestedPath?: string): Promise<string> {\n if (!requestedPath) {\n return nextBackupArchivePath(backupDir);\n }\n\n try {\n const requestedStats = await stat(requestedPath);\n if (requestedStats.isDirectory()) {\n return nextBackupArchivePath(requestedPath);\n }\n } catch {\n // Treat missing paths as explicit archive filenames and let writeFile surface other filesystem errors.\n }\n\n return requestedPath;\n}\n\nasync function nextBackupArchivePath(backupDir: string): Promise<string> {\n const base = `skills-${formatTimestamp(new Date())}`;\n const primary = path.join(backupDir, `${base}.tar.gz`);\n if (!(await pathExists(primary))) {\n return primary;\n }\n\n let index = 1;\n while (true) {\n const candidate = path.join(backupDir, `${base}-${index}.tar.gz`);\n if (!(await pathExists(candidate))) {\n return candidate;\n }\n index += 1;\n }\n}\n","import { access } from \"node:fs/promises\";\n\nexport async function pathExists(targetPath: string): Promise<boolean> {\n try {\n await access(targetPath);\n return true;\n } catch {\n return false;\n }\n}\n","import { lstat, readFile, readdir } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport { parse } from \"yaml\";\n\nimport type { BundleDefinition, SkillEntry } from \"../types.js\";\nimport { pathExists } from \"./fs.js\";\n\nexport type HygieneFindingKind =\n | \"unexpected-skill-entry\"\n | \"missing-skill-md\"\n | \"unexpected-bundle-entry\"\n | \"invalid-bundle-yaml\";\n\nexport interface HygieneFinding {\n kind: HygieneFindingKind;\n path: string;\n relativePath: string;\n}\n\nexport interface HygieneScanResult {\n validSkills: SkillEntry[];\n validBundles: BundleDefinition[];\n findings: HygieneFinding[];\n}\n\nfunction relativeLabel(rootDir: string, targetPath: string): string {\n return path.relative(rootDir, targetPath).split(path.sep).join(\"/\");\n}\n\nexport async function scanStoreHygiene(options: {\n rootDir: string;\n skillsDir: string;\n bundlesDir: string;\n includeSkills?: boolean;\n includeBundles?: boolean;\n}): Promise<HygieneScanResult> {\n const includeSkills = options.includeSkills ?? true;\n const includeBundles = options.includeBundles ?? true;\n const findings: HygieneFinding[] = [];\n const validSkills: SkillEntry[] = [];\n const validBundles: BundleDefinition[] = [];\n\n if (includeSkills && await pathExists(options.skillsDir)) {\n const entries = await readdir(options.skillsDir, { withFileTypes: true });\n for (const entry of entries) {\n const entryPath = path.join(options.skillsDir, entry.name);\n const stats = await lstat(entryPath);\n\n if (stats.isDirectory() || stats.isSymbolicLink()) {\n const hasSKILLMd = await pathExists(path.join(entryPath, \"SKILL.md\"));\n if (hasSKILLMd) {\n validSkills.push({ name: entry.name, path: entryPath, hasSKILLMd: true });\n } else {\n findings.push({\n kind: \"missing-skill-md\",\n path: entryPath,\n relativePath: relativeLabel(options.rootDir, entryPath),\n });\n }\n continue;\n }\n\n findings.push({\n kind: \"unexpected-skill-entry\",\n path: entryPath,\n relativePath: relativeLabel(options.rootDir, entryPath),\n });\n }\n }\n\n if (includeBundles && await pathExists(options.bundlesDir)) {\n const entries = await readdir(options.bundlesDir, { withFileTypes: true });\n for (const entry of entries) {\n const entryPath = path.join(options.bundlesDir, entry.name);\n if (!entry.isFile() || !entry.name.endsWith(\".yaml\")) {\n findings.push({\n kind: \"unexpected-bundle-entry\",\n path: entryPath,\n relativePath: relativeLabel(options.rootDir, entryPath),\n });\n continue;\n }\n\n try {\n const parsed = parse(await readFile(entryPath, \"utf8\")) as Partial<BundleDefinition> | null;\n validBundles.push({\n name: String(parsed?.name ?? entry.name.replace(/\\.yaml$/, \"\")).trim().toLowerCase(),\n skills: Array.isArray(parsed?.skills)\n ? parsed.skills.map((skill) => String(skill).trim().toLowerCase()).filter(Boolean).sort()\n : [],\n });\n } catch {\n findings.push({\n kind: \"invalid-bundle-yaml\",\n path: entryPath,\n relativePath: relativeLabel(options.rootDir, entryPath),\n });\n }\n }\n }\n\n validSkills.sort((left, right) => left.name.localeCompare(right.name));\n validBundles.sort((left, right) => left.name.localeCompare(right.name));\n findings.sort((left, right) => left.relativePath.localeCompare(right.relativePath));\n\n return { validSkills, validBundles, findings };\n}\n\nexport function formatHygieneHint(findings: HygieneFinding[]): string[] {\n if (findings.length === 0) {\n return [];\n }\n\n return [\n `Suspicious store entries detected: ${findings.length}`,\n `Run \"aweskill doctor clean\" to inspect them, or \"aweskill doctor clean --apply\" to remove them.`,\n ];\n}\n","import { homedir } from \"node:os\";\nimport path from \"node:path\";\n\nimport type { AweskillPaths } from \"../types.js\";\n\nexport function sanitizeName(input: string): string {\n return input\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9._-]+/g, \"-\")\n .replace(/^-+/, \"\")\n .replace(/-+$/, \"\")\n .slice(0, 80);\n}\n\nexport function stripVersionSuffix(input: string): string {\n return input.replace(/-\\d+(?:\\.\\d+)*$/, \"\");\n}\n\nexport function getDuplicateMatchKey(input: string): string {\n return stripVersionSuffix(sanitizeName(input)).replace(/[^a-z0-9]+/g, \"\");\n}\n\nexport function expandHomePath(targetPath: string, homeDir = homedir()): string {\n if (targetPath === \"~\") {\n return homeDir;\n }\n\n if (targetPath.startsWith(\"~/\")) {\n return path.join(homeDir, targetPath.slice(2));\n }\n\n return targetPath;\n}\n\nexport function getAweskillPaths(homeDir: string): AweskillPaths {\n const rootDir = path.join(homeDir, \".aweskill\");\n return {\n homeDir,\n rootDir,\n skillsDir: path.join(rootDir, \"skills\"),\n dupSkillsDir: path.join(rootDir, \"dup_skills\"),\n backupDir: path.join(rootDir, \"backup\"),\n bundlesDir: path.join(rootDir, \"bundles\"),\n };\n}\n\nexport function getProjectConfigPath(projectDir: string): string {\n return path.join(projectDir, \".aweskill.yaml\");\n}\n\nexport function isPathSafe(baseDir: string, targetPath: string): boolean {\n const base = path.resolve(baseDir);\n const target = path.resolve(targetPath);\n\n if (base === target) {\n return true;\n }\n\n const relativePath = path.relative(base, target);\n return relativePath !== \"\" && !relativePath.startsWith(\"..\") && !path.isAbsolute(relativePath);\n}\n\nexport function assertPathSafe(baseDir: string, targetPath: string): void {\n if (!isPathSafe(baseDir, targetPath)) {\n throw new Error(`Path escapes base directory: ${targetPath}`);\n }\n}\n\nexport function uniqueSorted<T>(items: T[]): T[] {\n return [...new Set(items)].sort() as T[];\n}\n\nexport function splitCommaValues(input: string): string[] {\n return input\n .split(\",\")\n .map((value) => value.trim())\n .filter(Boolean);\n}\n","import { mkdir, readFile, readdir, rm, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport { parse, stringify } from \"yaml\";\n\nimport type { BundleDefinition } from \"../types.js\";\nimport { pathExists } from \"./fs.js\";\nimport { getAweskillPaths, sanitizeName, uniqueSorted } from \"./path.js\";\nimport { skillExists } from \"./skills.js\";\n\nfunction bundleFilePath(homeDir: string, bundleName: string): string {\n return path.join(getAweskillPaths(homeDir).bundlesDir, `${sanitizeName(bundleName)}.yaml`);\n}\n\nfunction bundleFilePathInDirectory(bundlesDir: string, bundleName: string): string {\n return path.join(bundlesDir, `${sanitizeName(bundleName)}.yaml`);\n}\n\nfunction normalizeBundle(raw: unknown, fallbackName: string): BundleDefinition {\n const data = (raw ?? {}) as Partial<BundleDefinition>;\n return {\n name: sanitizeName(data.name ?? fallbackName),\n skills: uniqueSorted((data.skills ?? []).map((skill) => sanitizeName(String(skill))).filter(Boolean)),\n };\n}\n\nexport async function listBundles(homeDir: string): Promise<BundleDefinition[]> {\n const bundlesDir = getAweskillPaths(homeDir).bundlesDir;\n return listBundlesInDirectory(bundlesDir);\n}\n\nexport async function listBundlesInDirectory(bundlesDir: string): Promise<BundleDefinition[]> {\n await mkdir(bundlesDir, { recursive: true });\n const entries = await readdir(bundlesDir, { withFileTypes: true });\n\n const bundles = await Promise.all(\n entries\n .filter((entry) => entry.isFile() && entry.name.endsWith(\".yaml\"))\n .map(async (entry) => readBundleFromDirectory(bundlesDir, entry.name.replace(/\\.yaml$/, \"\"))),\n );\n\n return bundles.sort((left, right) => left.name.localeCompare(right.name));\n}\n\nexport async function readBundle(homeDir: string, bundleName: string): Promise<BundleDefinition> {\n const filePath = bundleFilePath(homeDir, bundleName);\n const content = await readFile(filePath, \"utf8\");\n return normalizeBundle(parse(content), bundleName);\n}\n\nexport async function readBundleFromDirectory(bundlesDir: string, bundleName: string): Promise<BundleDefinition> {\n const filePath = bundleFilePathInDirectory(bundlesDir, bundleName);\n const content = await readFile(filePath, \"utf8\");\n return normalizeBundle(parse(content), bundleName);\n}\n\nexport async function writeBundle(homeDir: string, bundle: BundleDefinition): Promise<BundleDefinition> {\n const normalized = normalizeBundle(bundle, bundle.name);\n const filePath = bundleFilePath(homeDir, normalized.name);\n await mkdir(path.dirname(filePath), { recursive: true });\n await writeFile(filePath, stringify(normalized), \"utf8\");\n return normalized;\n}\n\nexport async function createBundle(homeDir: string, bundleName: string): Promise<BundleDefinition> {\n const normalizedName = sanitizeName(bundleName);\n return writeBundle(homeDir, { name: normalizedName, skills: [] });\n}\n\nexport async function addSkillToBundle(homeDir: string, bundleName: string, skillName: string): Promise<BundleDefinition> {\n const normalizedSkill = sanitizeName(skillName);\n if (!(await skillExists(homeDir, normalizedSkill))) {\n throw new Error(`Unknown skill: ${normalizedSkill}`);\n }\n\n const bundle = await readBundle(homeDir, bundleName);\n bundle.skills = uniqueSorted([...bundle.skills, normalizedSkill].filter(Boolean));\n return writeBundle(homeDir, bundle);\n}\n\nexport async function removeSkillFromBundle(homeDir: string, bundleName: string, skillName: string): Promise<BundleDefinition> {\n const bundle = await readBundle(homeDir, bundleName);\n const normalizedSkill = sanitizeName(skillName);\n bundle.skills = bundle.skills.filter((skill) => skill !== normalizedSkill);\n return writeBundle(homeDir, bundle);\n}\n\nexport async function deleteBundle(homeDir: string, bundleName: string): Promise<boolean> {\n const filePath = bundleFilePath(homeDir, bundleName);\n if (!(await pathExists(filePath))) {\n return false;\n }\n\n await rm(filePath, { force: true });\n return true;\n}\n","import { mkdir, readdir } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport type { SkillEntry } from \"../types.js\";\nimport { pathExists } from \"./fs.js\";\nimport { getAweskillPaths, sanitizeName } from \"./path.js\";\n\nexport type SkillSuspicionReason = \"missing-skill-md\" | \"reserved-name\";\n\nexport async function ensureHomeLayout(homeDir: string): Promise<void> {\n const paths = getAweskillPaths(homeDir);\n await mkdir(paths.rootDir, { recursive: true });\n await mkdir(paths.skillsDir, { recursive: true });\n await mkdir(paths.dupSkillsDir, { recursive: true });\n await mkdir(paths.backupDir, { recursive: true });\n await mkdir(paths.bundlesDir, { recursive: true });\n}\n\nexport function getSkillPath(homeDir: string, skillName: string): string {\n return path.join(getAweskillPaths(homeDir).skillsDir, sanitizeName(skillName));\n}\n\nexport async function listSkills(homeDir: string): Promise<SkillEntry[]> {\n const skillsDir = getAweskillPaths(homeDir).skillsDir;\n return listSkillEntriesInDirectory(skillsDir);\n}\n\nexport async function listSkillEntriesInDirectory(skillsDir: string): Promise<SkillEntry[]> {\n if (!(await pathExists(skillsDir))) {\n return [];\n }\n\n const entries = await readdir(skillsDir, { withFileTypes: true });\n const skills = await Promise.all(\n entries\n .filter((entry) => entry.isDirectory() || entry.isSymbolicLink())\n .map(async (entry) => {\n const skillPath = path.join(skillsDir, entry.name);\n return {\n name: entry.name,\n path: skillPath,\n hasSKILLMd: await pathExists(path.join(skillPath, \"SKILL.md\")),\n } satisfies SkillEntry;\n }),\n );\n\n return skills.sort((left, right) => left.name.localeCompare(right.name));\n}\n\nexport async function assertSkillSource(sourcePath: string): Promise<void> {\n const skillReadme = path.join(sourcePath, \"SKILL.md\");\n if (!(await pathExists(skillReadme))) {\n throw new Error(`Skill source must contain SKILL.md: ${sourcePath}`);\n }\n}\n\nexport async function skillExists(homeDir: string, skillName: string): Promise<boolean> {\n return pathExists(getSkillPath(homeDir, skillName));\n}\n\nexport function getSkillSuspicionReason(skill: Pick<SkillEntry, \"name\" | \"hasSKILLMd\">): SkillSuspicionReason | null {\n if (!skill.hasSKILLMd) {\n return \"missing-skill-md\";\n }\n\n if (skill.name.startsWith(\".\")) {\n return \"reserved-name\";\n }\n\n return null;\n}\n","import path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { pathExists } from \"./fs.js\";\n\nexport async function getTemplateBundlesDir(): Promise<string> {\n const moduleDir = path.dirname(fileURLToPath(import.meta.url));\n const candidates = [\n path.resolve(moduleDir, \"..\", \"..\", \"resources\", \"bundle_templates\"),\n path.resolve(moduleDir, \"..\", \"resources\", \"bundle_templates\"),\n ];\n\n for (const candidate of candidates) {\n if (await pathExists(candidate)) {\n return candidate;\n }\n }\n\n throw new Error(`Template bundles directory not found. Checked: ${candidates.join(\", \")}`);\n}\n","import { addSkillToBundle, createBundle, deleteBundle, readBundle, readBundleFromDirectory, removeSkillFromBundle, writeBundle } from \"../lib/bundles.js\";\nimport { sanitizeName, splitCommaValues, uniqueSorted } from \"../lib/path.js\";\nimport { getTemplateBundlesDir } from \"../lib/templates.js\";\nimport type { RuntimeContext } from \"../types.js\";\n\nfunction parseNames(value: string): string[] {\n return uniqueSorted(splitCommaValues(value).map((entry) => sanitizeName(entry)));\n}\n\nexport async function runBundleCreate(context: RuntimeContext, bundleName: string) {\n const bundles = await Promise.all(parseNames(bundleName).map((name) => createBundle(context.homeDir, name)));\n context.write(bundles.map((bundle) => `Created bundle ${bundle.name}`).join(\"\\n\"));\n return bundles;\n}\n\nexport async function runBundleShow(context: RuntimeContext, bundleName: string) {\n const bundles = await Promise.all(parseNames(bundleName).map((name) => readBundle(context.homeDir, name)));\n context.write(bundles.map((bundle) => `${bundle.name}: ${bundle.skills.join(\", \") || \"(empty)\"}`).join(\"\\n\"));\n return bundles;\n}\n\nexport async function runBundleAddSkill(context: RuntimeContext, bundleName: string, skillName: string) {\n const bundleNames = parseNames(bundleName);\n const skillNames = parseNames(skillName);\n const bundles = [];\n for (const currentBundleName of bundleNames) {\n let bundle = await readBundle(context.homeDir, currentBundleName);\n for (const currentSkillName of skillNames) {\n bundle = await addSkillToBundle(context.homeDir, bundle.name, currentSkillName);\n }\n bundles.push(bundle);\n }\n context.write(bundles.map((bundle) => `Bundle ${bundle.name}: ${bundle.skills.join(\", \") || \"(empty)\"}`).join(\"\\n\"));\n return bundles;\n}\n\nexport async function runBundleRemoveSkill(context: RuntimeContext, bundleName: string, skillName: string) {\n const bundleNames = parseNames(bundleName);\n const skillNames = parseNames(skillName);\n const bundles = [];\n for (const currentBundleName of bundleNames) {\n let bundle = await readBundle(context.homeDir, currentBundleName);\n for (const currentSkillName of skillNames) {\n bundle = await removeSkillFromBundle(context.homeDir, bundle.name, currentSkillName);\n }\n bundles.push(bundle);\n }\n context.write(bundles.map((bundle) => `Bundle ${bundle.name}: ${bundle.skills.join(\", \") || \"(empty)\"}`).join(\"\\n\"));\n return bundles;\n}\n\nexport async function runBundleDelete(context: RuntimeContext, bundleName: string) {\n const deletedNames: string[] = [];\n for (const currentBundleName of parseNames(bundleName)) {\n const deleted = await deleteBundle(context.homeDir, currentBundleName);\n if (!deleted) {\n throw new Error(`Bundle not found: ${currentBundleName}`);\n }\n deletedNames.push(currentBundleName);\n }\n\n context.write(deletedNames.map((name) => `Deleted bundle ${name}`).join(\"\\n\"));\n return deletedNames;\n}\n\nexport async function runBundleAddTemplate(context: RuntimeContext, bundleName: string) {\n const templateBundlesDir = await getTemplateBundlesDir();\n const bundles = [];\n\n for (const currentBundleName of parseNames(bundleName)) {\n const templateBundle = await readBundleFromDirectory(templateBundlesDir, currentBundleName);\n\n try {\n await readBundle(context.homeDir, templateBundle.name);\n throw new Error(`Bundle already exists: ${templateBundle.name}`);\n } catch (error) {\n if (!(error instanceof Error) || !error.message.includes(\"ENOENT\")) {\n if (error instanceof Error && error.message.startsWith(\"Bundle already exists:\")) {\n throw error;\n }\n throw error;\n }\n }\n\n bundles.push(await writeBundle(context.homeDir, templateBundle));\n }\n\n context.write(bundles.map((bundle) => `Added bundle ${bundle.name} from template`).join(\"\\n\"));\n return bundles;\n}\n","import { cp, lstat, mkdir, readlink, readdir, rm, stat } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport type { ImportResult, ScanCandidate } from \"../types.js\";\nimport { pathExists } from \"./fs.js\";\nimport { sanitizeName } from \"./path.js\";\nimport { assertSkillSource, getSkillPath, skillExists } from \"./skills.js\";\nimport { createSkillSymlink } from \"./symlink.js\";\n\nclass MissingSymlinkSourceError extends Error {\n sourcePath: string;\n resolvedSourcePath: string;\n\n constructor(sourcePath: string, resolvedSourcePath: string) {\n super(`Missing symlink source: ${resolvedSourcePath}`);\n this.name = \"MissingSymlinkSourceError\";\n this.sourcePath = sourcePath;\n this.resolvedSourcePath = resolvedSourcePath;\n }\n}\n\nasync function resolveImportSource(sourcePath: string): Promise<{\n effectiveSourcePath: string;\n isSymlinkSource: boolean;\n}> {\n const statResult = await lstat(sourcePath);\n if (!statResult.isSymbolicLink()) {\n return {\n effectiveSourcePath: sourcePath,\n isSymlinkSource: false,\n };\n }\n\n const linkTarget = await readlink(sourcePath);\n const resolvedSourcePath = path.resolve(path.dirname(sourcePath), linkTarget);\n if (!(await pathExists(resolvedSourcePath))) {\n throw new MissingSymlinkSourceError(sourcePath, resolvedSourcePath);\n }\n\n return {\n effectiveSourcePath: resolvedSourcePath,\n isSymlinkSource: true,\n };\n}\n\nasync function mergeMissingEntries(sourcePath: string, destinationPath: string): Promise<void> {\n const sourceStat = await stat(sourcePath);\n\n if (sourceStat.isDirectory()) {\n await mkdir(destinationPath, { recursive: true });\n const entries = await readdir(sourcePath, { withFileTypes: true });\n for (const entry of entries) {\n await mergeMissingEntries(path.join(sourcePath, entry.name), path.join(destinationPath, entry.name));\n }\n return;\n }\n\n if (await pathExists(destinationPath)) {\n return;\n }\n\n await mkdir(path.dirname(destinationPath), { recursive: true });\n await cp(sourcePath, destinationPath, { recursive: false, errorOnExist: true, force: false });\n}\n\nasync function copyIntoDestination(sourcePath: string, destination: string, override: boolean): Promise<void> {\n if (!override && (await pathExists(destination))) {\n await mergeMissingEntries(sourcePath, destination);\n return;\n }\n\n await cp(sourcePath, destination, { recursive: true, errorOnExist: false, force: override });\n}\n\nasync function relinkImportedSource(sourcePath: string, destination: string): Promise<string | undefined> {\n if (path.resolve(sourcePath) === path.resolve(destination)) {\n return undefined;\n }\n\n await createSkillSymlink(destination, sourcePath, { allowReplaceExisting: true });\n return sourcePath;\n}\n\ninterface BatchImportSource {\n name: string;\n path: string;\n}\n\nexport interface BatchImportSummary {\n imported: string[];\n skipped: string[];\n overwritten: string[];\n warnings: string[];\n errors: string[];\n missingSources: number;\n linkedSources: string[];\n}\n\nasync function importBatchSources(options: {\n homeDir: string;\n sources: BatchImportSource[];\n override?: boolean;\n linkSource?: boolean;\n}): Promise<BatchImportSummary> {\n const seen = new Set<string>();\n const imported: string[] = [];\n const skipped: string[] = [];\n const overwritten: string[] = [];\n const warnings: string[] = [];\n const errors: string[] = [];\n const linkedSources: string[] = [];\n let missingSources = 0;\n\n for (const source of options.sources) {\n if (seen.has(source.name)) {\n skipped.push(source.name);\n continue;\n }\n seen.add(source.name);\n\n const alreadyExists = await skillExists(options.homeDir, source.name);\n\n try {\n if (!alreadyExists || options.override) {\n const result = await importSkill({\n homeDir: options.homeDir,\n sourcePath: source.path,\n override: options.override,\n linkSource: options.linkSource,\n });\n warnings.push(...result.warnings);\n if (result.linkedSourcePath) {\n linkedSources.push(result.name);\n }\n if (alreadyExists) {\n overwritten.push(source.name);\n } else {\n imported.push(source.name);\n }\n } else {\n if (options.linkSource) {\n const linkedPath = await relinkImportedSource(source.path, getSkillPath(options.homeDir, source.name));\n if (linkedPath) {\n linkedSources.push(source.name);\n }\n }\n skipped.push(source.name);\n }\n } catch (error) {\n if (error instanceof MissingSymlinkSourceError) {\n missingSources += 1;\n errors.push(`Broken symlink for ${source.name}: ${source.path}; source not found: ${error.resolvedSourcePath}`);\n continue;\n }\n\n if (error instanceof Error && error.message.startsWith(\"Skill source must contain SKILL.md:\")) {\n skipped.push(source.name);\n continue;\n }\n\n throw error;\n }\n }\n\n return { imported, skipped, overwritten, warnings, errors, missingSources, linkedSources };\n}\n\nasync function listImportableChildren(sourceRoot: string): Promise<BatchImportSource[]> {\n const entries = await readdir(sourceRoot, { withFileTypes: true });\n const sources: BatchImportSource[] = [];\n\n for (const entry of entries) {\n if (!(entry.isDirectory() || entry.isSymbolicLink())) {\n continue;\n }\n\n const childPath = path.join(sourceRoot, entry.name);\n if (await pathExists(path.join(childPath, \"SKILL.md\"))) {\n sources.push({\n name: sanitizeName(entry.name),\n path: childPath,\n });\n continue;\n }\n\n if (entry.isSymbolicLink()) {\n sources.push({\n name: sanitizeName(entry.name),\n path: childPath,\n });\n }\n }\n\n return sources.sort((left, right) => left.name.localeCompare(right.name));\n}\n\nexport async function importSkill(options: {\n homeDir: string;\n sourcePath: string;\n override?: boolean;\n linkSource?: boolean;\n}): Promise<ImportResult> {\n const { effectiveSourcePath, isSymlinkSource } = await resolveImportSource(options.sourcePath);\n await assertSkillSource(effectiveSourcePath);\n\n const skillName = sanitizeName(path.basename(options.sourcePath));\n if (!skillName) {\n throw new Error(`Unable to infer skill name from path: ${options.sourcePath}`);\n }\n\n const destination = getSkillPath(options.homeDir, skillName);\n await mkdir(path.dirname(destination), { recursive: true });\n\n const warnings: string[] = [];\n if (isSymlinkSource) {\n warnings.push(`Source ${options.sourcePath} is a symlink; copied from ${effectiveSourcePath} to ${destination}`);\n }\n\n await copyIntoDestination(effectiveSourcePath, destination, options.override ?? false);\n const linkedSourcePath = options.linkSource ? await relinkImportedSource(options.sourcePath, destination) : undefined;\n\n return { name: skillName, destination, warnings, linkedSourcePath };\n}\n\nexport async function importScannedSkills(options: {\n homeDir: string;\n candidates: ScanCandidate[];\n override?: boolean;\n linkSource?: boolean;\n}): Promise<BatchImportSummary> {\n return importBatchSources({\n homeDir: options.homeDir,\n sources: options.candidates.map((candidate) => ({\n name: candidate.name,\n path: candidate.path,\n })),\n override: options.override,\n linkSource: options.linkSource,\n });\n}\n\nexport async function importPath(options: {\n homeDir: string;\n sourcePath: string;\n override?: boolean;\n linkSource?: boolean;\n}): Promise<\n | ({ kind: \"single\"; alreadyExisted: boolean } & ImportResult)\n | (BatchImportSummary & { kind: \"batch\" })\n> {\n if (await pathExists(path.join(options.sourcePath, \"SKILL.md\"))) {\n const skillName = sanitizeName(path.basename(options.sourcePath));\n const alreadyExisted = skillName ? await skillExists(options.homeDir, skillName) : false;\n\n if (alreadyExisted && !options.override) {\n const linkedSourcePath = options.linkSource\n ? await relinkImportedSource(options.sourcePath, getSkillPath(options.homeDir, skillName))\n : undefined;\n return {\n kind: \"single\",\n alreadyExisted: true,\n name: skillName,\n destination: getSkillPath(options.homeDir, skillName),\n warnings: [],\n linkedSourcePath,\n };\n }\n\n const result = await importSkill(options);\n return { kind: \"single\", alreadyExisted, ...result };\n }\n\n const sources = await listImportableChildren(options.sourcePath);\n if (sources.length === 0) {\n throw new Error(`Path is neither a skill directory nor a skills directory: ${options.sourcePath}`);\n }\n\n const batchResult = await importBatchSources({\n homeDir: options.homeDir,\n sources,\n override: options.override,\n linkSource: options.linkSource,\n });\n return { kind: \"batch\", ...batchResult };\n}\n","import { cp, lstat, mkdir, readFile, readdir, readlink, rm, symlink, unlink, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nconst COPY_MARKER = \".aweskill-projection.json\";\n\ninterface CopyMarker {\n managedBy: \"aweskill\";\n sourcePath: string;\n}\n\nexport type ProjectionTargetStatus =\n | { kind: \"missing\" }\n | { kind: \"managed_symlink\"; sourcePath: string; matchesSource: boolean }\n | { kind: \"managed_copy\"; sourcePath: string; matchesSource: boolean }\n | { kind: \"foreign_symlink\"; sourcePath: string }\n | { kind: \"directory\" }\n | { kind: \"file\" };\n\nexport interface ProjectionResult {\n status: \"created\" | \"skipped\";\n mode: \"symlink\" | \"copy\";\n}\n\ntype DirectoryLinkCreator = (sourcePath: string, targetPath: string) => Promise<void>;\n\nasync function tryLstat(targetPath: string) {\n try {\n return await lstat(targetPath);\n } catch {\n return null;\n }\n}\n\nasync function readCopyMarker(targetPath: string): Promise<CopyMarker | null> {\n try {\n const content = await readFile(path.join(targetPath, COPY_MARKER), \"utf8\");\n const parsed = JSON.parse(content) as CopyMarker;\n return parsed.managedBy === \"aweskill\" ? parsed : null;\n } catch {\n return null;\n }\n}\n\nexport function getDirectoryLinkTypeForPlatform(platform = process.platform): \"dir\" | \"junction\" {\n return platform === \"win32\" ? \"junction\" : \"dir\";\n}\n\nasync function defaultDirectoryLinkCreator(sourcePath: string, targetPath: string): Promise<void> {\n const linkTarget = path.relative(path.dirname(targetPath), sourcePath) || \".\";\n await symlink(linkTarget, targetPath, getDirectoryLinkTypeForPlatform());\n}\n\nlet directoryLinkCreator: DirectoryLinkCreator = defaultDirectoryLinkCreator;\n\nexport function setDirectoryLinkCreatorForTesting(creator?: DirectoryLinkCreator): void {\n directoryLinkCreator = creator ?? defaultDirectoryLinkCreator;\n}\n\nfunction shouldFallbackToCopy(error: unknown, platform = process.platform): boolean {\n if (platform !== \"win32\") {\n return false;\n }\n\n const code = typeof error === \"object\" && error !== null && \"code\" in error ? error.code : undefined;\n return code === \"EPERM\" || code === \"EACCES\" || code === \"EINVAL\" || code === \"UNKNOWN\";\n}\n\nexport async function inspectProjectionTarget(\n targetPath: string,\n options: { centralSkillsDir?: string; sourcePath?: string } = {},\n): Promise<ProjectionTargetStatus> {\n const existing = await tryLstat(targetPath);\n if (!existing) {\n return { kind: \"missing\" };\n }\n\n const centralRoot = options.centralSkillsDir ? path.resolve(options.centralSkillsDir) : undefined;\n const expectedSource = options.sourcePath ? path.resolve(options.sourcePath) : undefined;\n\n if (existing.isSymbolicLink()) {\n const currentTarget = await readlink(targetPath);\n const resolvedCurrent = path.resolve(path.dirname(targetPath), currentTarget);\n if (centralRoot && resolvedCurrent.startsWith(centralRoot)) {\n return {\n kind: \"managed_symlink\",\n sourcePath: resolvedCurrent,\n matchesSource: expectedSource ? resolvedCurrent === expectedSource : true,\n };\n }\n return { kind: \"foreign_symlink\", sourcePath: resolvedCurrent };\n }\n\n if (existing.isDirectory()) {\n const marker = await readCopyMarker(targetPath);\n if (marker) {\n return {\n kind: \"managed_copy\",\n sourcePath: marker.sourcePath,\n matchesSource: expectedSource ? marker.sourcePath === expectedSource : true,\n };\n }\n return { kind: \"directory\" };\n }\n\n return { kind: \"file\" };\n}\n\nexport async function assertProjectionTargetSafe(\n mode: \"symlink\" | \"copy\",\n sourcePath: string,\n targetPath: string,\n options: { allowReplaceExisting?: boolean } = {},\n): Promise<void> {\n const status = await inspectProjectionTarget(targetPath, { sourcePath });\n if (status.kind === \"missing\") {\n return;\n }\n\n if (mode === \"symlink\") {\n if ((status.kind === \"managed_symlink\" || status.kind === \"managed_copy\") && status.matchesSource) {\n return;\n }\n if (options.allowReplaceExisting) {\n return;\n }\n throw new Error(`Refusing to overwrite non-symlink target: ${targetPath}`);\n }\n\n if (status.kind === \"managed_symlink\" || status.kind === \"managed_copy\") {\n return;\n }\n\n if (options.allowReplaceExisting) {\n return;\n }\n throw new Error(`Refusing to overwrite unmanaged directory: ${targetPath}`);\n}\n\nexport async function createSkillSymlink(\n sourcePath: string,\n targetPath: string,\n options: { allowReplaceExisting?: boolean } = {},\n): Promise<ProjectionResult> {\n await mkdir(path.dirname(targetPath), { recursive: true });\n const existing = await tryLstat(targetPath);\n\n if (existing?.isSymbolicLink()) {\n const currentTarget = await readlink(targetPath);\n const resolvedCurrent = path.resolve(path.dirname(targetPath), currentTarget);\n if (resolvedCurrent === path.resolve(sourcePath)) {\n return { status: \"skipped\", mode: \"symlink\" };\n }\n await unlink(targetPath);\n } else if (existing) {\n if (existing.isDirectory()) {\n const marker = await readCopyMarker(targetPath);\n if (marker?.sourcePath === path.resolve(sourcePath)) {\n return { status: \"skipped\", mode: \"copy\" };\n }\n }\n\n if (!options.allowReplaceExisting) {\n throw new Error(`Refusing to overwrite non-symlink target: ${targetPath}`);\n }\n await rm(targetPath, { force: true, recursive: true });\n }\n\n try {\n await directoryLinkCreator(sourcePath, targetPath);\n return { status: \"created\", mode: \"symlink\" };\n } catch (error) {\n if (!shouldFallbackToCopy(error)) {\n throw error;\n }\n return createSkillCopy(sourcePath, targetPath, options);\n }\n}\n\nexport async function createSkillCopy(\n sourcePath: string,\n targetPath: string,\n options: { allowReplaceExisting?: boolean } = {},\n): Promise<ProjectionResult> {\n await mkdir(path.dirname(targetPath), { recursive: true });\n const existing = await tryLstat(targetPath);\n\n if (existing?.isSymbolicLink()) {\n await unlink(targetPath);\n } else if (existing) {\n const marker = await readCopyMarker(targetPath);\n if (marker?.sourcePath === path.resolve(sourcePath)) {\n return { status: \"skipped\", mode: \"copy\" };\n }\n if (!marker && !options.allowReplaceExisting) {\n throw new Error(`Refusing to overwrite unmanaged directory: ${targetPath}`);\n }\n await rm(targetPath, { force: true, recursive: true });\n }\n\n await cp(sourcePath, targetPath, { recursive: true });\n const marker: CopyMarker = { managedBy: \"aweskill\", sourcePath: path.resolve(sourcePath) };\n await writeFile(path.join(targetPath, COPY_MARKER), JSON.stringify(marker, null, 2), \"utf8\");\n return { status: \"created\", mode: \"copy\" };\n}\n\nexport async function removeManagedProjection(targetPath: string): Promise<boolean> {\n const existing = await tryLstat(targetPath);\n if (!existing) {\n return false;\n }\n\n if (existing.isSymbolicLink()) {\n await unlink(targetPath);\n return true;\n }\n\n if (existing.isDirectory()) {\n const marker = await readCopyMarker(targetPath);\n if (marker) {\n await rm(targetPath, { force: true, recursive: true });\n return true;\n }\n }\n\n return false;\n}\n\nexport async function removeProjectionTarget(\n targetPath: string,\n options: { force?: boolean; centralSkillsDir?: string } = {},\n): Promise<boolean> {\n const status = await inspectProjectionTarget(targetPath, { centralSkillsDir: options.centralSkillsDir });\n if (status.kind === \"missing\") {\n return false;\n }\n\n if (status.kind === \"managed_symlink\") {\n await unlink(targetPath);\n return true;\n }\n\n if (status.kind === \"managed_copy\" || status.kind === \"directory\") {\n if (status.kind === \"directory\" && !options.force) {\n return false;\n }\n await rm(targetPath, { force: true, recursive: true });\n return true;\n }\n\n if (status.kind === \"foreign_symlink\") {\n if (!options.force) {\n return false;\n }\n await unlink(targetPath);\n return true;\n }\n\n if (status.kind === \"file\") {\n if (!options.force) {\n return false;\n }\n await rm(targetPath, { force: true });\n return true;\n }\n\n return false;\n}\n\nexport async function listManagedSkillNames(\n skillsDir: string,\n centralSkillsDir: string,\n): Promise<Map<string, \"symlink\" | \"copy\">> {\n const result = new Map<string, \"symlink\" | \"copy\">();\n\n try {\n const entries = await readdir(skillsDir, { withFileTypes: true });\n for (const entry of entries) {\n const targetPath = path.join(skillsDir, entry.name);\n const stats = await tryLstat(targetPath);\n if (stats?.isSymbolicLink()) {\n try {\n const currentTarget = await readlink(targetPath);\n const resolvedCurrent = path.resolve(path.dirname(targetPath), currentTarget);\n if (resolvedCurrent.startsWith(path.resolve(centralSkillsDir))) {\n result.set(entry.name, \"symlink\");\n }\n } catch {\n result.set(entry.name, \"symlink\");\n }\n continue;\n }\n\n if (stats?.isDirectory()) {\n const marker = await readCopyMarker(targetPath);\n if (marker) {\n result.set(entry.name, \"copy\");\n }\n }\n }\n } catch {\n return result;\n }\n\n return result;\n}\n\nexport async function listBrokenSymlinkNames(skillsDir: string): Promise<Set<string>> {\n const result = new Set<string>();\n\n try {\n const entries = await readdir(skillsDir, { withFileTypes: true });\n for (const entry of entries) {\n const targetPath = path.join(skillsDir, entry.name);\n const stats = await tryLstat(targetPath);\n if (!stats?.isSymbolicLink()) {\n continue;\n }\n\n try {\n const currentTarget = await readlink(targetPath);\n const resolvedCurrent = path.resolve(path.dirname(targetPath), currentTarget);\n if (!(await tryLstat(resolvedCurrent))) {\n result.add(entry.name);\n }\n } catch {\n result.add(entry.name);\n }\n }\n } catch {\n return result;\n }\n\n return result;\n}\n","import { access, lstat, readdir, readlink } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport type { AgentId, ScanCandidate, Scope } from \"../types.js\";\nimport { isAgentId, listSupportedAgentIds, resolveAgentSkillsDir, supportsScope } from \"./agents.js\";\nimport { pathExists } from \"./fs.js\";\nimport { sanitizeName } from \"./path.js\";\n\nasync function hasSkillReadme(skillDir: string): Promise<boolean> {\n try {\n await access(path.join(skillDir, \"SKILL.md\"));\n return true;\n } catch {\n return false;\n }\n}\n\nasync function isSymlinkPath(targetPath: string): Promise<boolean> {\n try {\n return (await lstat(targetPath)).isSymbolicLink();\n } catch {\n return false;\n }\n}\n\nasync function resolveSymlinkSource(targetPath: string): Promise<{ sourcePath?: string; isBroken: boolean }> {\n try {\n const linkTarget = await readlink(targetPath);\n const sourcePath = path.resolve(path.dirname(targetPath), linkTarget);\n return {\n sourcePath,\n isBroken: !(await pathExists(sourcePath)),\n };\n } catch {\n return {\n isBroken: true,\n };\n }\n}\n\nasync function scanDirectory(baseDir: string, agentId: ScanCandidate[\"agentId\"], scope: ScanCandidate[\"scope\"], projectDir?: string) {\n try {\n const entries = await readdir(baseDir, { withFileTypes: true });\n const candidates: ScanCandidate[] = [];\n for (const entry of entries) {\n if (!entry.isDirectory() && !entry.isSymbolicLink()) {\n continue;\n }\n const fullPath = path.join(baseDir, entry.name);\n const isSymlink = await isSymlinkPath(fullPath);\n const symlinkInfo = isSymlink ? await resolveSymlinkSource(fullPath) : { isBroken: false };\n\n if (!(await hasSkillReadme(fullPath)) && !symlinkInfo.isBroken) {\n continue;\n }\n candidates.push({\n agentId,\n name: sanitizeName(entry.name),\n path: fullPath,\n scope,\n projectDir,\n isSymlink,\n symlinkSourcePath: symlinkInfo.sourcePath,\n isBrokenSymlink: symlinkInfo.isBroken,\n });\n }\n return candidates;\n } catch {\n return [];\n }\n}\n\nfunction uniqueSorted<T extends string>(items: T[]): T[] {\n return [...new Set(items)].sort((left, right) => left.localeCompare(right));\n}\n\nexport function resolveRequestedAgents(requestedAgents: string[], scope: Scope): AgentId[] {\n if (requestedAgents.length === 0 || requestedAgents.includes(\"all\")) {\n return listSupportedAgentIds().filter((agentId) => supportsScope(agentId, scope));\n }\n\n return uniqueSorted(\n requestedAgents.map((agent) => {\n if (!isAgentId(agent)) {\n throw new Error(`Unsupported agent: ${agent}`);\n }\n if (!supportsScope(agent, scope)) {\n throw new Error(`Agent ${agent} does not support ${scope} scope.`);\n }\n return agent;\n }),\n );\n}\n\nexport async function scanSkills(options: {\n homeDir: string;\n scope: Scope;\n agents?: string[];\n projectDir?: string;\n}): Promise<ScanCandidate[]> {\n const results: ScanCandidate[] = [];\n const agents = resolveRequestedAgents(options.agents ?? [], options.scope);\n\n for (const agentId of agents) {\n const baseDir = options.scope === \"global\" ? options.homeDir : options.projectDir!;\n const skillsDir = resolveAgentSkillsDir(agentId, options.scope, baseDir);\n results.push(...(await scanDirectory(skillsDir, agentId, options.scope, options.projectDir)));\n }\n\n return results.sort((left, right) => left.path.localeCompare(right.path));\n}\n","import path from \"node:path\";\n\nimport type { AgentDefinition, AgentId, ProjectionMode, Scope } from \"../types.js\";\nimport { pathExists } from \"./fs.js\";\nimport { uniqueSorted } from \"./path.js\";\n\nfunction defineAgent(\n id: AgentId,\n displayName: string,\n options: {\n defaultProjectionMode?: ProjectionMode;\n rootDir: (homeDir: string) => string;\n globalSkillsDir?: (homeDir: string) => string;\n projectSkillsDir?: (projectDir: string) => string;\n },\n): AgentDefinition {\n return {\n id,\n displayName,\n defaultProjectionMode: options.defaultProjectionMode ?? \"symlink\",\n supportsGlobal: Boolean(options.globalSkillsDir),\n supportsProject: Boolean(options.projectSkillsDir),\n rootDir: options.rootDir,\n globalSkillsDir: options.globalSkillsDir,\n projectSkillsDir: options.projectSkillsDir,\n };\n}\n\nconst AGENTS: Record<AgentId, AgentDefinition> = {\n adal: defineAgent(\"adal\", \"AdaL\", {\n rootDir: (homeDir) => path.join(homeDir, \".adal\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".adal\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".adal\", \"skills\"),\n }),\n amp: defineAgent(\"amp\", \"Amp\", {\n rootDir: (homeDir) => path.join(homeDir, \".agents\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".agents\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".agents\", \"skills\"),\n }),\n antigravity: defineAgent(\"antigravity\", \"Antigravity\", {\n rootDir: (homeDir) => path.join(homeDir, \".gemini\", \"antigravity\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".gemini\", \"antigravity\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".gemini\", \"antigravity\", \"skills\"),\n }),\n augment: defineAgent(\"augment\", \"Augment\", {\n rootDir: (homeDir) => path.join(homeDir, \".augment\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".augment\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".augment\", \"skills\"),\n }),\n bob: defineAgent(\"bob\", \"IBM Bob\", {\n rootDir: (homeDir) => path.join(homeDir, \".bob\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".bob\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".bob\", \"skills\"),\n }),\n \"claude-code\": defineAgent(\"claude-code\", \"Claude Code\", {\n rootDir: (homeDir) => path.join(homeDir, \".claude\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".claude\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".claude\", \"skills\"),\n }),\n cline: defineAgent(\"cline\", \"Cline\", {\n rootDir: (homeDir) => path.join(homeDir, \".cline\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".cline\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".cline\", \"skills\"),\n }),\n codebuddy: defineAgent(\"codebuddy\", \"CodeBuddy\", {\n rootDir: (homeDir) => path.join(homeDir, \".codebuddy\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".codebuddy\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".codebuddy\", \"skills\"),\n }),\n \"command-code\": defineAgent(\"command-code\", \"Command Code\", {\n rootDir: (homeDir) => path.join(homeDir, \".commandcode\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".commandcode\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".commandcode\", \"skills\"),\n }),\n continue: defineAgent(\"continue\", \"Continue\", {\n rootDir: (homeDir) => path.join(homeDir, \".continue\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".continue\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".continue\", \"skills\"),\n }),\n codex: defineAgent(\"codex\", \"Codex\", {\n rootDir: (homeDir) => path.join(homeDir, \".codex\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".codex\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".codex\", \"skills\"),\n }),\n copilot: defineAgent(\"copilot\", \"GitHub Copilot\", {\n rootDir: (homeDir) => path.join(homeDir, \".copilot\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".copilot\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".copilot\", \"skills\"),\n }),\n cortex: defineAgent(\"cortex\", \"Cortex Code\", {\n rootDir: (homeDir) => path.join(homeDir, \".snowflake\", \"cortex\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".snowflake\", \"cortex\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".cortex\", \"skills\"),\n }),\n crush: defineAgent(\"crush\", \"Crush\", {\n rootDir: (homeDir) => path.join(homeDir, \".config\", \"crush\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".config\", \"crush\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".config\", \"crush\", \"skills\"),\n }),\n cursor: defineAgent(\"cursor\", \"Cursor\", {\n rootDir: (homeDir) => path.join(homeDir, \".cursor\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".cursor\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".cursor\", \"skills\"),\n }),\n deepagents: defineAgent(\"deepagents\", \"Deep Agents\", {\n rootDir: (homeDir) => path.join(homeDir, \".deepagents\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".deepagents\", \"agent\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".deepagents\", \"agent\", \"skills\"),\n }),\n droid: defineAgent(\"droid\", \"Droid\", {\n rootDir: (homeDir) => path.join(homeDir, \".factory\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".factory\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".factory\", \"skills\"),\n }),\n firebender: defineAgent(\"firebender\", \"Firebender\", {\n rootDir: (homeDir) => path.join(homeDir, \".firebender\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".firebender\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".firebender\", \"skills\"),\n }),\n \"gemini-cli\": defineAgent(\"gemini-cli\", \"Gemini CLI\", {\n rootDir: (homeDir) => path.join(homeDir, \".gemini\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".gemini\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".gemini\", \"skills\"),\n }),\n \"github-copilot\": defineAgent(\"github-copilot\", \"GitHub Copilot\", {\n rootDir: (homeDir) => path.join(homeDir, \".copilot\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".copilot\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".copilot\", \"skills\"),\n }),\n goose: defineAgent(\"goose\", \"Goose\", {\n rootDir: (homeDir) => path.join(homeDir, \".goose\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".goose\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".goose\", \"skills\"),\n }),\n \"iflow-cli\": defineAgent(\"iflow-cli\", \"iFlow CLI\", {\n rootDir: (homeDir) => path.join(homeDir, \".iflow\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".iflow\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".iflow\", \"skills\"),\n }),\n junie: defineAgent(\"junie\", \"Junie\", {\n rootDir: (homeDir) => path.join(homeDir, \".junie\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".junie\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".junie\", \"skills\"),\n }),\n kilo: defineAgent(\"kilo\", \"Kilo Code\", {\n rootDir: (homeDir) => path.join(homeDir, \".kilocode\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".kilocode\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".kilocode\", \"skills\"),\n }),\n \"kiro-cli\": defineAgent(\"kiro-cli\", \"Kiro CLI\", {\n rootDir: (homeDir) => path.join(homeDir, \".kiro\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".kiro\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".kiro\", \"skills\"),\n }),\n \"kilo-code\": defineAgent(\"kilo-code\", \"Kilo Code\", {\n rootDir: (homeDir) => path.join(homeDir, \".kilocode\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".kilocode\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".kilocode\", \"skills\"),\n }),\n \"kimi-cli\": defineAgent(\"kimi-cli\", \"Kimi Code CLI\", {\n rootDir: (homeDir) => path.join(homeDir, \".kimi\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".kimi\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".kimi\", \"skills\"),\n }),\n kode: defineAgent(\"kode\", \"Kode\", {\n rootDir: (homeDir) => path.join(homeDir, \".kode\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".kode\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".kode\", \"skills\"),\n }),\n mcpjam: defineAgent(\"mcpjam\", \"MCPJam\", {\n rootDir: (homeDir) => path.join(homeDir, \".mcpjam\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".mcpjam\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".mcpjam\", \"skills\"),\n }),\n \"mistral-vibe\": defineAgent(\"mistral-vibe\", \"Mistral Vibe\", {\n rootDir: (homeDir) => path.join(homeDir, \".vibe\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".vibe\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".vibe\", \"skills\"),\n }),\n mux: defineAgent(\"mux\", \"Mux\", {\n rootDir: (homeDir) => path.join(homeDir, \".mux\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".mux\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".mux\", \"skills\"),\n }),\n neovate: defineAgent(\"neovate\", \"Neovate\", {\n rootDir: (homeDir) => path.join(homeDir, \".neovate\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".neovate\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".neovate\", \"skills\"),\n }),\n openclaw: defineAgent(\"openclaw\", \"OpenClaw\", {\n rootDir: (homeDir) => path.join(homeDir, \".openclaw\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".openclaw\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".openclaw\", \"skills\"),\n }),\n \"openclaude-ide\": defineAgent(\"openclaude-ide\", \"OpenClaude IDE\", {\n rootDir: (homeDir) => path.join(homeDir, \".openclaude\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".openclaude\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".openclaude\", \"skills\"),\n }),\n openhands: defineAgent(\"openhands\", \"OpenHands\", {\n rootDir: (homeDir) => path.join(homeDir, \".openhands\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".openhands\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".openhands\", \"skills\"),\n }),\n opencode: defineAgent(\"opencode\", \"OpenCode\", {\n rootDir: (homeDir) => path.join(homeDir, \".opencode\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".opencode\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".opencode\", \"skills\"),\n }),\n pi: defineAgent(\"pi\", \"Pi\", {\n rootDir: (homeDir) => path.join(homeDir, \".pi\", \"agent\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".pi\", \"agent\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".pi\", \"agent\", \"skills\"),\n }),\n pochi: defineAgent(\"pochi\", \"Pochi\", {\n rootDir: (homeDir) => path.join(homeDir, \".pochi\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".pochi\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".pochi\", \"skills\"),\n }),\n qoder: defineAgent(\"qoder\", \"Qoder\", {\n rootDir: (homeDir) => path.join(homeDir, \".qoder\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".qoder\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".qoder\", \"skills\"),\n }),\n \"qwen-code\": defineAgent(\"qwen-code\", \"Qwen Code\", {\n rootDir: (homeDir) => path.join(homeDir, \".qwen\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".qwen\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".qwen\", \"skills\"),\n }),\n replit: defineAgent(\"replit\", \"Replit\", {\n rootDir: (homeDir) => path.join(homeDir, \".config\", \"replit\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".agent\", \"skills\"),\n }),\n roo: defineAgent(\"roo\", \"Roo Code\", {\n rootDir: (homeDir) => path.join(homeDir, \".roo\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".roo\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".roo\", \"skills\"),\n }),\n trae: defineAgent(\"trae\", \"Trae\", {\n rootDir: (homeDir) => path.join(homeDir, \".trae\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".trae\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".trae\", \"skills\"),\n }),\n \"trae-cn\": defineAgent(\"trae-cn\", \"Trae CN\", {\n rootDir: (homeDir) => path.join(homeDir, \".trae-cn\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".trae-cn\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".trae-cn\", \"skills\"),\n }),\n warp: defineAgent(\"warp\", \"Warp\", {\n rootDir: (homeDir) => path.join(homeDir, \".warp\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".warp\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".warp\", \"skills\"),\n }),\n windsurf: defineAgent(\"windsurf\", \"Windsurf\", {\n rootDir: (homeDir) => path.join(homeDir, \".codeium\", \"windsurf\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".codeium\", \"windsurf\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".codeium\", \"windsurf\", \"skills\"),\n }),\n zencoder: defineAgent(\"zencoder\", \"Zencoder\", {\n rootDir: (homeDir) => path.join(homeDir, \".zencoder\"),\n globalSkillsDir: (homeDir) => path.join(homeDir, \".zencoder\", \"skills\"),\n projectSkillsDir: (projectDir) => path.join(projectDir, \".zencoder\", \"skills\"),\n }),\n};\n\nexport function listSupportedAgents(): AgentDefinition[] {\n return Object.values(AGENTS).sort((left, right) => left.id.localeCompare(right.id));\n}\n\nexport function listSupportedAgentIds(): AgentId[] {\n return listSupportedAgents().map((agent) => agent.id);\n}\n\nexport function formatDetectedAgentsForScope(scope: Scope, agents: AgentId[], projectDir?: string): string {\n const countLabel = `${agents.length} agent${agents.length === 1 ? \"\" : \"s\"}`;\n if (scope === \"global\") {\n return `Detected ${countLabel} for global scope: ${agents.join(\", \")}`;\n }\n return `Detected ${countLabel} for project scope at ${projectDir}: ${agents.join(\", \")}`;\n}\n\nexport function supportsScope(agentId: AgentId, scope: Scope): boolean {\n const definition = getAgentDefinition(agentId);\n return scope === \"global\" ? definition.supportsGlobal : definition.supportsProject;\n}\n\nexport function isAgentId(value: string): value is AgentId {\n return value in AGENTS;\n}\n\nexport function getAgentDefinition(agentId: AgentId): AgentDefinition {\n return AGENTS[agentId];\n}\n\nexport function resolveAgentSkillsDir(agentId: AgentId, scope: Scope, baseDir: string): string {\n const definition = getAgentDefinition(agentId);\n const resolver = scope === \"global\" ? definition.globalSkillsDir : definition.projectSkillsDir;\n if (!resolver) {\n throw new Error(`Agent ${agentId} does not support ${scope} scope.`);\n }\n return resolver(baseDir);\n}\n\nexport function getProjectionMode(agentId: AgentId): ProjectionMode {\n return getAgentDefinition(agentId).defaultProjectionMode;\n}\n\nexport async function detectInstalledAgents(options: {\n homeDir: string;\n projectDir?: string;\n}): Promise<AgentId[]> {\n const installed: AgentId[] = [];\n\n for (const agent of listSupportedAgents()) {\n const globalRootPath = agent.supportsGlobal ? agent.rootDir(options.homeDir) : null;\n const projectPath = agent.supportsProject && options.projectDir\n ? resolveAgentSkillsDir(agent.id, \"project\", options.projectDir)\n : null;\n\n if (globalRootPath && (await pathExists(globalRootPath))) {\n installed.push(agent.id);\n continue;\n }\n\n if (projectPath && (await pathExists(projectPath))) {\n installed.push(agent.id);\n }\n }\n\n return installed;\n}\n\nexport async function listSupportedAgentsWithGlobalStatus(homeDir: string): Promise<Array<{\n id: AgentId;\n displayName: string;\n installed: boolean;\n skillsDir?: string;\n}>> {\n const results: Array<{\n id: AgentId;\n displayName: string;\n installed: boolean;\n skillsDir?: string;\n }> = [];\n\n for (const agent of listSupportedAgents()) {\n if (!agent.supportsGlobal || !agent.globalSkillsDir) {\n results.push({\n id: agent.id,\n displayName: agent.displayName,\n installed: false,\n });\n continue;\n }\n\n const skillsDir = agent.globalSkillsDir(homeDir);\n results.push({\n id: agent.id,\n displayName: agent.displayName,\n installed: await pathExists(agent.rootDir(homeDir)),\n skillsDir,\n });\n }\n\n return results;\n}\n\n/** Agents to scan for `agent list` / `doctor sync` when the user does not name specific agents. */\nexport async function detectAgentsForListingScope(\n homeDir: string,\n scope: Scope,\n projectDir?: string,\n): Promise<AgentId[]> {\n const installed: AgentId[] = [];\n\n for (const agent of listSupportedAgents()) {\n if (scope === \"global\") {\n if (!agent.supportsGlobal) {\n continue;\n }\n const rootPath = agent.rootDir(homeDir);\n if (await pathExists(rootPath)) {\n installed.push(agent.id);\n }\n } else {\n if (!agent.supportsProject || !projectDir) {\n continue;\n }\n const skillsPath = resolveAgentSkillsDir(agent.id, \"project\", projectDir);\n if (await pathExists(skillsPath)) {\n installed.push(agent.id);\n }\n }\n }\n\n return installed;\n}\n\nexport async function resolveAgentsForListingOrSync(options: {\n requestedAgents: string[];\n scope: Scope;\n homeDir: string;\n projectDir?: string;\n}): Promise<{ agents: AgentId[]; explicit: boolean }> {\n const wantsAll = options.requestedAgents.length === 0 || options.requestedAgents.includes(\"all\");\n\n if (!wantsAll) {\n const agents = uniqueSorted(\n options.requestedAgents.map((agent) => {\n if (!isAgentId(agent)) {\n throw new Error(`Unsupported agent: ${agent}`);\n }\n if (!supportsScope(agent, options.scope)) {\n throw new Error(`Agent ${agent} does not support ${options.scope} scope.`);\n }\n return agent;\n }),\n );\n return { agents, explicit: true };\n }\n\n const agents = await detectAgentsForListingScope(options.homeDir, options.scope, options.projectDir);\n return { agents, explicit: false };\n}\n\nexport function formatNoAgentsDetectedForScope(scope: Scope, projectDir: string | undefined): string {\n if (scope === \"global\") {\n return \"No agents detected for global scope (no supported agent installation directories were found). Install an agent or pass --agent <id> to inspect a specific agent.\";\n }\n return `No agents detected for project scope at ${projectDir}. Add project-local agent skill directories or pass --agent <id> to inspect a specific agent.`;\n}\n","import { importPath, importScannedSkills } from \"../lib/import.js\";\nimport { scanSkills } from \"../lib/scanner.js\";\nimport type { RuntimeContext, Scope } from \"../types.js\";\n\nexport async function runImport(\n context: RuntimeContext,\n options: {\n sourcePath?: string;\n scan?: boolean;\n override?: boolean;\n linkSource?: boolean;\n keepSource?: boolean;\n scope?: Scope;\n agents?: string[];\n projectDir?: string;\n },\n) {\n if (options.keepSource && options.linkSource) {\n throw new Error(\"Choose either --keep-source or --link-source, not both.\");\n }\n\n const linkSource = options.scan ? !options.keepSource : Boolean(options.linkSource);\n\n if (options.scan) {\n const candidates = await scanSkills({\n homeDir: context.homeDir,\n scope: options.scope ?? \"global\",\n agents: options.agents,\n projectDir: (options.scope ?? \"global\") === \"project\" ? (options.projectDir ?? context.cwd) : undefined,\n });\n const result = await importScannedSkills({\n homeDir: context.homeDir,\n candidates,\n override: options.override,\n linkSource,\n });\n for (const warning of result.warnings) {\n context.write(`Warning: ${warning}`);\n }\n for (const error of result.errors) {\n context.error(`Error: ${error}`);\n }\n context.write(`Imported ${result.imported.length} skills`);\n if (result.overwritten.length > 0) {\n context.write(`Overwritten ${result.overwritten.length} existing skills: ${result.overwritten.join(\", \")}`);\n }\n if (result.skipped.length > 0) {\n context.write(`Skipped ${result.skipped.length} existing skills (use --override to overwrite): ${result.skipped.join(\", \")}`);\n }\n if (result.missingSources > 0) {\n context.write(`Missing source files: ${result.missingSources}`);\n }\n if (linkSource) {\n context.write(`Replaced ${result.linkedSources.length} scanned source paths with aweskill-managed projections.`);\n } else {\n context.write(\"Source paths were kept in place. Re-run without --keep-source to replace scanned agent skills with aweskill-managed projections.\");\n }\n return result;\n }\n\n if (!options.sourcePath) {\n throw new Error('import requires a source path or --scan');\n }\n\n const result = await importPath({\n homeDir: context.homeDir,\n sourcePath: options.sourcePath,\n override: options.override,\n linkSource,\n });\n\n if (result.kind === \"single\") {\n for (const warning of result.warnings) {\n context.write(`Warning: ${warning}`);\n }\n if (result.alreadyExisted && !options.override) {\n context.write(`Skipped ${result.name} (already exists; use --override to overwrite)`);\n } else if (result.alreadyExisted) {\n context.write(`Overwritten ${result.name}`);\n } else {\n context.write(`Imported ${result.name}`);\n }\n if (result.linkedSourcePath) {\n context.write(`Replaced source path with an aweskill-managed projection: ${result.linkedSourcePath}`);\n } else {\n context.write(\"Source was kept in place. Re-run with --link-source to replace it with an aweskill-managed projection.\");\n }\n return result;\n }\n\n for (const warning of result.warnings) {\n context.write(`Warning: ${warning}`);\n }\n for (const error of result.errors) {\n context.error(`Error: ${error}`);\n }\n context.write(`Imported ${result.imported.length} skills`);\n if (result.overwritten.length > 0) {\n context.write(`Overwritten ${result.overwritten.length} existing skills: ${result.overwritten.join(\", \")}`);\n }\n if (result.skipped.length > 0) {\n context.write(`Skipped ${result.skipped.length} existing skills (use --override to overwrite): ${result.skipped.join(\", \")}`);\n }\n if (result.missingSources > 0) {\n context.write(`Missing source files: ${result.missingSources}`);\n }\n if (linkSource) {\n context.write(`Replaced ${result.linkedSources.length} source paths with aweskill-managed projections.`);\n } else {\n context.write(\"Source paths were kept in place. Re-run with --link-source to replace them with aweskill-managed projections.\");\n }\n return result;\n}\n","import { detectInstalledAgents, isAgentId, listSupportedAgentIds, resolveAgentSkillsDir, supportsScope } from \"../lib/agents.js\";\nimport { listBundles, readBundle } from \"../lib/bundles.js\";\nimport { getAweskillPaths, sanitizeName, splitCommaValues, uniqueSorted } from \"../lib/path.js\";\nimport { skillExists } from \"../lib/skills.js\";\nimport { inspectProjectionTarget, listManagedSkillNames, removeProjectionTarget } from \"../lib/symlink.js\";\nimport type { ActivationType, AgentId, RuntimeContext, Scope } from \"../types.js\";\nimport path from \"node:path\";\n\nfunction getProjectDir(context: RuntimeContext, explicitProjectDir?: string): string {\n return explicitProjectDir ?? context.cwd;\n}\n\nasync function resolveAgentsForScope(\n context: RuntimeContext,\n requestedAgents: string[],\n scope: Scope,\n projectDir?: string,\n): Promise<AgentId[]> {\n if (requestedAgents.length === 0 || requestedAgents.includes(\"all\")) {\n const detected = await detectInstalledAgents({\n homeDir: context.homeDir,\n projectDir: scope === \"project\" ? projectDir : undefined,\n });\n const candidates = detected.length > 0 ? detected : listSupportedAgentIds();\n return candidates.filter((agentId) => supportsScope(agentId, scope));\n }\n\n return uniqueSorted(\n requestedAgents.map((agent) => {\n if (!isAgentId(agent)) {\n throw new Error(`Unsupported agent: ${agent}`);\n }\n if (!supportsScope(agent, scope)) {\n throw new Error(`Agent ${agent} does not support ${scope} scope.`);\n }\n return agent;\n }),\n );\n}\n\nasync function resolveSkillNames(context: RuntimeContext, type: ActivationType, names: string): Promise<string[]> {\n const normalizedNames = uniqueSorted(splitCommaValues(names).map((name) => sanitizeName(name)));\n\n if (normalizedNames.includes(\"all\")) {\n if (type === \"bundle\") {\n const bundles = await listBundles(context.homeDir);\n return uniqueSorted(bundles.flatMap((bundle) => bundle.skills));\n }\n\n const { skillsDir: centralSkillsDir } = getAweskillPaths(context.homeDir);\n const detected = await detectInstalledAgents({\n homeDir: context.homeDir,\n });\n const globalManaged = await Promise.all(\n detected.filter((agentId) => supportsScope(agentId, \"global\")).map(async (agentId) => {\n const agentSkillsDir = resolveAgentSkillsDir(agentId, \"global\", context.homeDir);\n return listManagedSkillNames(agentSkillsDir, centralSkillsDir);\n }),\n );\n const managedSkillNames = uniqueSorted(\n globalManaged.flatMap((managed) => [...managed.keys()]),\n );\n\n return managedSkillNames;\n }\n\n if (type === \"bundle\") {\n const bundles = await Promise.all(normalizedNames.map((bundleName) => readBundle(context.homeDir, bundleName)));\n return uniqueSorted(bundles.flatMap((bundle) => bundle.skills));\n }\n\n // For disable we don't require the skill to still exist in central repo\n const resolvedNames: string[] = [];\n for (const normalizedName of normalizedNames) {\n if (!(await skillExists(context.homeDir, normalizedName))) {\n resolvedNames.push(normalizedName);\n continue;\n }\n resolvedNames.push(normalizedName);\n }\n return uniqueSorted(resolvedNames);\n}\n\n/**\n * True when `skillName` appears in a bundle and at least one other skill from that bundle\n * still has an aweskill-managed projection under the same scope/agents — typical after\n * `enable bundle` while the user tries `disable skill` for one member only.\n */\nasync function bundlesWithCoEnabledSiblings(options: {\n homeDir: string;\n skillName: string;\n agents: AgentId[];\n scope: Scope;\n baseDir: string;\n}): Promise<string[]> {\n const { skillsDir: centralSkillsDir } = getAweskillPaths(options.homeDir);\n const bundles = await listBundles(options.homeDir);\n const normalized = sanitizeName(options.skillName);\n const hit = new Set<string>();\n\n for (const bundle of bundles) {\n if (!bundle.skills.includes(normalized)) {\n continue;\n }\n const siblings = bundle.skills.filter((s) => s !== normalized);\n if (siblings.length === 0) {\n continue;\n }\n\n for (const agentId of options.agents) {\n const agentSkillsDir = resolveAgentSkillsDir(agentId, options.scope, options.baseDir);\n const managed = await listManagedSkillNames(agentSkillsDir, centralSkillsDir);\n if (siblings.some((s) => managed.has(s))) {\n hit.add(bundle.name);\n break;\n }\n }\n }\n\n return [...hit].sort();\n}\n\nexport async function runDisable(\n context: RuntimeContext,\n options: {\n type: ActivationType;\n name: string;\n scope: Scope;\n agents: string[];\n projectDir?: string;\n force?: boolean;\n },\n) {\n const projectDir = options.scope === \"project\" ? getProjectDir(context, options.projectDir) : undefined;\n const agents = await resolveAgentsForScope(context, options.agents, options.scope, projectDir);\n const baseDir = options.scope === \"global\" ? context.homeDir : (projectDir ?? context.cwd);\n const skillNames = await resolveSkillNames(context, options.type, options.name);\n const { skillsDir: centralSkillsDir } = getAweskillPaths(context.homeDir);\n\n if (splitCommaValues(options.name).map((name) => sanitizeName(name)).includes(\"all\") && options.type === \"skill\") {\n const scopedManaged = await Promise.all(\n agents.map(async (agentId) => {\n const agentSkillsDir = resolveAgentSkillsDir(agentId, options.scope, baseDir);\n return listManagedSkillNames(agentSkillsDir, centralSkillsDir);\n }),\n );\n const managedSkillNames = uniqueSorted(\n scopedManaged.flatMap((managed) => [...managed.keys()]),\n );\n skillNames.splice(0, skillNames.length, ...managedSkillNames);\n }\n\n if (options.type === \"skill\" && skillNames.length === 1 && !options.force) {\n const bundleNames = await bundlesWithCoEnabledSiblings({\n homeDir: context.homeDir,\n skillName: skillNames[0]!,\n agents,\n scope: options.scope,\n baseDir,\n });\n if (bundleNames.length > 0) {\n throw new Error(\n `Skill \"${skillNames[0]}\" is listed in bundle(s): ${bundleNames.join(\", \")}. ` +\n `Other skills from those bundle(s) are still enabled in this scope. ` +\n `Use --force to remove only this skill's projection, or run \"aweskill agent remove bundle <name>\" to drop the whole bundle.`,\n );\n }\n }\n\n for (const agentId of agents) {\n const skillsDir = resolveAgentSkillsDir(agentId, options.scope, baseDir);\n for (const skillName of skillNames) {\n const targetPath = path.join(skillsDir, skillName);\n const status = await inspectProjectionTarget(targetPath, { centralSkillsDir });\n if (status.kind === \"missing\" || status.kind === \"managed_symlink\" || status.kind === \"managed_copy\") {\n continue;\n }\n if (status.kind === \"foreign_symlink\" && !options.force) {\n throw new Error(\n `Target path is a symlink that is not managed by aweskill: ${targetPath}. ` +\n `Re-run with --force to remove it.`,\n );\n }\n if (status.kind === \"directory\" && !options.force) {\n throw new Error(`Target path already exists as a directory: ${targetPath}. Re-run with --force to remove it.`);\n }\n if (status.kind === \"file\" && !options.force) {\n throw new Error(`Target path already exists as a file: ${targetPath}. Re-run with --force to remove it.`);\n }\n }\n }\n\n const removed: string[] = [];\n for (const agentId of agents) {\n const skillsDir = resolveAgentSkillsDir(agentId, options.scope, baseDir);\n for (const skillName of skillNames) {\n const targetPath = path.join(skillsDir, skillName);\n const wasRemoved = await removeProjectionTarget(targetPath, {\n force: options.force,\n centralSkillsDir,\n });\n if (wasRemoved) {\n removed.push(`${agentId}:${skillName}`);\n }\n }\n }\n\n const scopeLabel = options.scope === \"global\" ? \"global scope\" : (projectDir ?? context.cwd);\n const targetLabel = uniqueSorted(splitCommaValues(options.name).map((name) => sanitizeName(name))).join(\", \");\n context.write(`Disabled ${options.type} ${targetLabel} for ${agents.join(\", \")} in ${scopeLabel}${removed.length > 0 ? ` (${removed.length} removed)` : \"\"}`);\n return { agents, skillNames, removed };\n}\n","import { mkdir } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport { detectInstalledAgents, getProjectionMode, isAgentId, listSupportedAgentIds, resolveAgentSkillsDir, supportsScope } from \"../lib/agents.js\";\nimport { listBundles, readBundle } from \"../lib/bundles.js\";\nimport { getAweskillPaths, sanitizeName, splitCommaValues, uniqueSorted } from \"../lib/path.js\";\nimport { getSkillPath, listSkills, skillExists } from \"../lib/skills.js\";\nimport { createSkillCopy, createSkillSymlink, inspectProjectionTarget } from \"../lib/symlink.js\";\nimport type { ActivationType, AgentId, RuntimeContext, Scope } from \"../types.js\";\n\nfunction getProjectDir(context: RuntimeContext, explicitProjectDir?: string): string {\n return explicitProjectDir ?? context.cwd;\n}\n\nasync function resolveAgentsForScope(\n context: RuntimeContext,\n requestedAgents: string[],\n scope: Scope,\n projectDir?: string,\n): Promise<AgentId[]> {\n if (requestedAgents.length === 0 || requestedAgents.includes(\"all\")) {\n const detected = await detectInstalledAgents({\n homeDir: context.homeDir,\n projectDir: scope === \"project\" ? projectDir : undefined,\n });\n const candidates = detected.length > 0 ? detected : listSupportedAgentIds();\n return candidates.filter((agentId) => supportsScope(agentId, scope));\n }\n\n return uniqueSorted(\n requestedAgents.map((agent) => {\n if (!isAgentId(agent)) {\n throw new Error(`Unsupported agent: ${agent}`);\n }\n if (!supportsScope(agent, scope)) {\n throw new Error(`Agent ${agent} does not support ${scope} scope.`);\n }\n return agent;\n }),\n );\n}\n\nasync function resolveSkillNames(context: RuntimeContext, type: ActivationType, names: string): Promise<string[]> {\n const normalizedNames = uniqueSorted(splitCommaValues(names).map((name) => sanitizeName(name)));\n\n if (normalizedNames.includes(\"all\")) {\n if (type === \"bundle\") {\n const bundles = await listBundles(context.homeDir);\n const skillNames = uniqueSorted(bundles.flatMap((bundle) => bundle.skills));\n for (const skillName of skillNames) {\n if (!(await skillExists(context.homeDir, skillName))) {\n throw new Error(`A bundle in \"all\" references unknown skill: ${skillName}`);\n }\n }\n return skillNames;\n }\n\n const skills = await listSkills(context.homeDir);\n return skills.map((skill) => skill.name);\n }\n\n if (type === \"bundle\") {\n const bundles = await Promise.all(normalizedNames.map((bundleName) => readBundle(context.homeDir, bundleName)));\n const skillNames = uniqueSorted(bundles.flatMap((bundle) => bundle.skills));\n for (const skillName of skillNames) {\n if (!(await skillExists(context.homeDir, skillName))) {\n const bundle = bundles.find((candidate) => candidate.skills.includes(skillName));\n throw new Error(`Bundle ${bundle?.name ?? \"(unknown)\"} references unknown skill: ${skillName}`);\n }\n }\n return skillNames;\n }\n\n for (const normalizedName of normalizedNames) {\n if (!(await skillExists(context.homeDir, normalizedName))) {\n throw new Error(`Unknown skill: ${normalizedName}`);\n }\n }\n\n return normalizedNames;\n}\n\nexport async function runEnable(\n context: RuntimeContext,\n options: {\n type: ActivationType;\n name: string;\n scope: Scope;\n agents: string[];\n projectDir?: string;\n force?: boolean;\n },\n) {\n const projectDir = options.scope === \"project\" ? getProjectDir(context, options.projectDir) : undefined;\n const agents = await resolveAgentsForScope(context, options.agents, options.scope, projectDir);\n const skillNames = await resolveSkillNames(context, options.type, options.name);\n const baseDir = options.scope === \"global\" ? context.homeDir : (projectDir ?? context.cwd);\n const { skillsDir: centralSkillsDir } = getAweskillPaths(context.homeDir);\n\n // Preflight: check all targets are safe before touching any\n for (const agentId of agents) {\n const skillsDir = resolveAgentSkillsDir(agentId, options.scope, baseDir);\n await mkdir(skillsDir, { recursive: true });\n for (const skillName of skillNames) {\n const sourcePath = getSkillPath(context.homeDir, skillName);\n const targetPath = path.join(skillsDir, skillName);\n const status = await inspectProjectionTarget(targetPath, { centralSkillsDir, sourcePath });\n if (status.kind === \"missing\") {\n continue;\n }\n if (status.kind === \"managed_symlink\" || status.kind === \"managed_copy\") {\n if (status.matchesSource && !options.force) {\n throw new Error(\n `Target path is already an aweskill-managed projection for ${skillName}: ${targetPath}. ` +\n `Re-run with --force to recreate it.`,\n );\n }\n continue;\n }\n if (status.kind === \"foreign_symlink\" && !options.force) {\n throw new Error(\n `Target path is a symlink that is not managed by aweskill: ${targetPath}. ` +\n `Re-run with --force to replace it with an aweskill-managed projection.`,\n );\n }\n if (status.kind === \"directory\" && !options.force) {\n throw new Error(\n `Target path already exists as a directory: ${targetPath}. ` +\n `Re-run with --force to replace it with an aweskill-managed projection.`,\n );\n }\n if (status.kind === \"file\" && !options.force) {\n throw new Error(\n `Target path already exists as a file: ${targetPath}. ` +\n `Re-run with --force to replace it with an aweskill-managed projection.`,\n );\n }\n }\n }\n\n // Apply projections directly\n const created: string[] = [];\n for (const agentId of agents) {\n const skillsDir = resolveAgentSkillsDir(agentId, options.scope, baseDir);\n const mode = getProjectionMode(agentId);\n for (const skillName of skillNames) {\n const sourcePath = getSkillPath(context.homeDir, skillName);\n const targetPath = path.join(skillsDir, skillName);\n const result = mode === \"symlink\"\n ? await createSkillSymlink(sourcePath, targetPath, { allowReplaceExisting: options.force })\n : await createSkillCopy(sourcePath, targetPath, { allowReplaceExisting: options.force });\n if (result.status === \"created\") {\n created.push(`${agentId}:${skillName}`);\n }\n }\n }\n\n const scopeLabel = options.scope === \"global\" ? \"global scope\" : (projectDir ?? context.cwd);\n const targetLabel = uniqueSorted(splitCommaValues(options.name).map((name) => sanitizeName(name))).join(\", \");\n context.write(`Enabled ${options.type} ${targetLabel} for ${agents.join(\", \")} in ${scopeLabel}${created.length > 0 ? ` (${created.length} created)` : \"\"}`);\n return { agents, skillNames, created };\n}\n","import { importScannedSkills } from \"../lib/import.js\";\nimport { scanSkills } from \"../lib/scanner.js\";\nimport type { RuntimeContext, ScanCandidate, Scope } from \"../types.js\";\n\nfunction groupLabel(candidate: ScanCandidate): string {\n return candidate.scope === \"global\"\n ? `Global scanned skills for ${candidate.agentId}:`\n : `Project scanned skills for ${candidate.agentId} (${candidate.projectDir}):`;\n}\n\nexport function formatScanSummary(candidates: ScanCandidate[], verbose = false): string {\n if (candidates.length === 0) {\n return \"(no scanned skills)\";\n }\n\n const groups = new Map<string, ScanCandidate[]>();\n for (const candidate of candidates) {\n const key = `${candidate.scope}:${candidate.agentId}:${candidate.projectDir ?? \"\"}`;\n const bucket = groups.get(key) ?? [];\n bucket.push(candidate);\n groups.set(key, bucket);\n }\n\n const lines = [\"Scanned skills:\"];\n for (const [, groupedCandidates] of [...groups.entries()].sort((left, right) => left[0].localeCompare(right[0]))) {\n const sorted = [...groupedCandidates].sort((left, right) => left.name.localeCompare(right.name));\n lines.push(` ${groupLabel(sorted[0])} ${sorted.length}`);\n if (verbose) {\n for (const candidate of sorted) {\n lines.push(` ✓ ${candidate.name} ${candidate.path}`);\n }\n }\n }\n\n return lines.join(\"\\n\");\n}\n\nexport async function runScan(\n context: RuntimeContext,\n options: {\n add?: boolean;\n override?: boolean;\n verbose?: boolean;\n keepSource?: boolean;\n linkSource?: boolean;\n scope: Scope;\n agents?: string[];\n projectDir?: string;\n },\n) {\n if (options.keepSource && options.linkSource) {\n throw new Error(\"Choose either --keep-source or --link-source, not both.\");\n }\n\n const candidates = await scanSkills({\n homeDir: context.homeDir,\n scope: options.scope,\n agents: options.agents,\n projectDir: options.scope === \"project\" ? (options.projectDir ?? context.cwd) : undefined,\n });\n\n context.write(formatScanSummary(candidates, options.verbose));\n\n if (options.add) {\n const linkSource = !options.keepSource;\n const result = await importScannedSkills({\n homeDir: context.homeDir,\n candidates,\n override: options.override,\n linkSource,\n });\n for (const warning of result.warnings) {\n context.write(`Warning: ${warning}`);\n }\n for (const error of result.errors) {\n context.error(`Error: ${error}`);\n }\n context.write(`Imported ${result.imported.length} skills`);\n if (result.overwritten.length > 0) {\n context.write(`Overwritten ${result.overwritten.length} existing skills: ${result.overwritten.join(\", \")}`);\n }\n if (result.skipped.length > 0) {\n context.write(`Skipped ${result.skipped.length} existing skills (use --override to overwrite): ${result.skipped.join(\", \")}`);\n }\n if (result.missingSources > 0) {\n context.write(`Missing source files: ${result.missingSources}`);\n }\n if (linkSource) {\n context.write(`Replaced ${result.linkedSources.length} scanned source paths with aweskill-managed projections.`);\n } else {\n context.write(\"Source paths were kept in place. Re-run without --keep-source to replace scanned agent skills with aweskill-managed projections.\");\n }\n return { candidates, ...result };\n }\n return candidates;\n}\n","import { scanSkills } from \"../lib/scanner.js\";\nimport { ensureHomeLayout } from \"../lib/skills.js\";\nimport { formatScanSummary } from \"./scan.js\";\nimport type { RuntimeContext } from \"../types.js\";\n\nexport async function runInit(context: RuntimeContext, options: { scan?: boolean; verbose?: boolean }) {\n await ensureHomeLayout(context.homeDir);\n context.write(`Initialized ${context.homeDir}/.aweskill`);\n\n if (options.scan) {\n const candidates = await scanSkills({ homeDir: context.homeDir, scope: \"global\" });\n context.write(formatScanSummary(candidates, options.verbose));\n return candidates;\n }\n\n return [];\n}\n","import { getAweskillPaths } from \"../lib/path.js\";\nimport { listBundlesInDirectory } from \"../lib/bundles.js\";\nimport { getTemplateBundlesDir } from \"../lib/templates.js\";\nimport { formatHygieneHint, scanStoreHygiene } from \"../lib/hygiene.js\";\nimport type { RuntimeContext } from \"../types.js\";\n\nconst DEFAULT_PREVIEW_COUNT = 5;\n\nexport async function runListSkills(context: RuntimeContext, options: { verbose?: boolean } = {}) {\n const { rootDir, skillsDir, bundlesDir } = getAweskillPaths(context.homeDir);\n const { validSkills: skills, findings } = await scanStoreHygiene({ rootDir, skillsDir, bundlesDir, includeBundles: true });\n\n if (skills.length === 0) {\n context.write([\"No skills found in central repo.\", ...formatHygieneHint(findings)].join(\"\\n\"));\n return skills;\n }\n\n const preview = options.verbose ? skills : skills.slice(0, DEFAULT_PREVIEW_COUNT);\n const lines = [`Skills in central repo: ${skills.length} total`];\n if (!options.verbose && skills.length > preview.length) {\n lines.push(`Showing first ${preview.length} skills (use --verbose to show all)`);\n }\n for (const skill of preview) {\n const marker = skill.hasSKILLMd ? \"✓\" : \"!\";\n lines.push(` ${marker} ${skill.name} ${skill.path}`);\n }\n lines.push(...formatHygieneHint(findings));\n context.write(lines.join(\"\\n\"));\n return skills;\n}\n\nfunction formatBundleLines(title: string, bundles: { name: string; skills: string[] }[], verbose?: boolean): string[] {\n if (bundles.length === 0) {\n return [title, \"(none)\"];\n }\n\n const preview = verbose ? bundles : bundles.slice(0, DEFAULT_PREVIEW_COUNT);\n const lines = [`${title}: ${bundles.length} total`];\n if (!verbose && bundles.length > preview.length) {\n lines.push(`Showing first ${preview.length} bundles (use --verbose to show all)`);\n }\n for (const bundle of preview) {\n const skillsPreview = verbose ? bundle.skills : bundle.skills.slice(0, DEFAULT_PREVIEW_COUNT);\n const suffix = !verbose && bundle.skills.length > skillsPreview.length\n ? `, ... (+${bundle.skills.length - skillsPreview.length} more)`\n : \"\";\n lines.push(` - ${bundle.name}: ${bundle.skills.length} skills${skillsPreview.length > 0 ? ` -> ${skillsPreview.join(\", \")}${suffix}` : \" -> (empty)\"}`);\n }\n return lines;\n}\n\nexport async function runListBundles(context: RuntimeContext, options: { verbose?: boolean } = {}) {\n const { rootDir, skillsDir, bundlesDir } = getAweskillPaths(context.homeDir);\n const { validBundles: bundles, findings } = await scanStoreHygiene({ rootDir, skillsDir, bundlesDir, includeSkills: true });\n context.write([...formatBundleLines(\"Bundles in central repo\", bundles, options.verbose), ...formatHygieneHint(findings)].join(\"\\n\"));\n return bundles;\n}\n\nexport async function runListTemplateBundles(context: RuntimeContext, options: { verbose?: boolean } = {}) {\n const templateBundlesDir = await getTemplateBundlesDir();\n const bundles = await listBundlesInDirectory(templateBundlesDir);\n context.write(formatBundleLines(\"Bundle templates\", bundles, options.verbose).join(\"\\n\"));\n return bundles;\n}\n","import { cp, mkdir, readlink, unlink } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport { detectInstalledAgents, isAgentId, listSupportedAgentIds, resolveAgentSkillsDir, supportsScope } from \"../lib/agents.js\";\nimport { getAweskillPaths, uniqueSorted } from \"../lib/path.js\";\nimport { listManagedSkillNames } from \"../lib/symlink.js\";\nimport type { AgentId, RuntimeContext, Scope } from \"../types.js\";\n\nfunction getProjectDir(context: RuntimeContext, explicitProjectDir?: string): string {\n return explicitProjectDir ?? context.cwd;\n}\n\nasync function resolveAgentsForScope(\n context: RuntimeContext,\n requestedAgents: string[],\n scope: Scope,\n projectDir?: string,\n): Promise<AgentId[]> {\n if (requestedAgents.length === 0 || requestedAgents.includes(\"all\")) {\n const detected = await detectInstalledAgents({\n homeDir: context.homeDir,\n projectDir: scope === \"project\" ? projectDir : undefined,\n });\n const candidates = detected.length > 0 ? detected : listSupportedAgentIds();\n return candidates.filter((agentId) => supportsScope(agentId, scope));\n }\n\n return uniqueSorted(\n requestedAgents.map((agent) => {\n if (!isAgentId(agent)) {\n throw new Error(`Unsupported agent: ${agent}`);\n }\n if (!supportsScope(agent, scope)) {\n throw new Error(`Agent ${agent} does not support ${scope} scope.`);\n }\n return agent;\n }),\n );\n}\n\nexport async function runRecover(\n context: RuntimeContext,\n options: {\n scope: Scope;\n agents: string[];\n projectDir?: string;\n },\n) {\n const projectDir = options.scope === \"project\" ? getProjectDir(context, options.projectDir) : undefined;\n const agents = await resolveAgentsForScope(context, options.agents, options.scope, projectDir);\n const { skillsDir: centralSkillsDir } = getAweskillPaths(context.homeDir);\n const baseDir = options.scope === \"global\" ? context.homeDir : (projectDir ?? context.cwd);\n\n const recovered: string[] = [];\n\n for (const agentId of agents) {\n const agentSkillsDir = resolveAgentSkillsDir(agentId, options.scope, baseDir);\n const managed = await listManagedSkillNames(agentSkillsDir, centralSkillsDir);\n\n for (const [skillName, mode] of managed) {\n if (mode !== \"symlink\") {\n continue;\n }\n\n const targetPath = path.join(agentSkillsDir, skillName);\n const sourcePath = path.join(centralSkillsDir, skillName);\n const currentTarget = await readlink(targetPath);\n const resolvedCurrent = path.resolve(path.dirname(targetPath), currentTarget);\n if (resolvedCurrent !== path.resolve(sourcePath)) {\n continue;\n }\n\n await unlink(targetPath);\n await mkdir(path.dirname(targetPath), { recursive: true });\n await cp(sourcePath, targetPath, { recursive: true });\n recovered.push(`${agentId}:${skillName}`);\n }\n }\n\n const scopeLabel = options.scope === \"global\" ? \"global scope\" : (projectDir ?? context.cwd);\n context.write(`Recovered ${recovered.length} skill projection(s) in ${scopeLabel}${recovered.length > 0 ? `: ${recovered.join(\", \")}` : \"\"}`);\n return { agents, recovered };\n}\n","import { rm } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport { listSupportedAgents, resolveAgentSkillsDir, supportsScope } from \"./agents.js\";\nimport { listBundles, writeBundle } from \"./bundles.js\";\nimport { getAweskillPaths, sanitizeName } from \"./path.js\";\nimport { getSkillPath } from \"./skills.js\";\nimport { listManagedSkillNames, removeManagedProjection } from \"./symlink.js\";\n\nexport interface SkillReferences {\n bundles: string[];\n agentProjections: string[];\n}\n\n/**\n * Find all places a skill is referenced:\n * - bundle definitions that list it\n * - active managed projections (symlinks/copies) in agent skill directories\n */\nexport async function findSkillReferences(options: {\n homeDir: string;\n skillName: string;\n projectDir?: string;\n}): Promise<SkillReferences> {\n const normalizedSkill = sanitizeName(options.skillName);\n const { skillsDir } = getAweskillPaths(options.homeDir);\n\n const bundles = (await listBundles(options.homeDir))\n .filter((bundle) => bundle.skills.includes(normalizedSkill))\n .map((bundle) => bundle.name);\n\n const agentProjections: string[] = [];\n const baseDirs: Array<{ scope: \"global\" | \"project\"; dir: string }> = [\n { scope: \"global\", dir: options.homeDir },\n ];\n if (options.projectDir) {\n baseDirs.push({ scope: \"project\", dir: options.projectDir });\n }\n\n for (const { scope, dir } of baseDirs) {\n for (const agent of listSupportedAgents()) {\n if (!supportsScope(agent.id, scope)) {\n continue;\n }\n const agentSkillsDir = resolveAgentSkillsDir(agent.id, scope, dir);\n const managed = await listManagedSkillNames(agentSkillsDir, skillsDir);\n if (managed.has(normalizedSkill)) {\n agentProjections.push(`${agent.id}(${scope}):${normalizedSkill}`);\n }\n }\n }\n\n return { bundles, agentProjections };\n}\n\n/**\n * Remove the skill from bundles, delete all managed projections pointing to it,\n * then delete the skill from the central repository.\n */\nexport async function removeSkillWithReferences(options: {\n homeDir: string;\n skillName: string;\n projectDir?: string;\n}): Promise<void> {\n const normalizedSkill = sanitizeName(options.skillName);\n const { skillsDir } = getAweskillPaths(options.homeDir);\n\n // Strip from bundle definitions\n const bundles = await listBundles(options.homeDir);\n for (const bundle of bundles) {\n if (!bundle.skills.includes(normalizedSkill)) {\n continue;\n }\n bundle.skills = bundle.skills.filter((skill) => skill !== normalizedSkill);\n await writeBundle(options.homeDir, bundle);\n }\n\n // Remove managed projections across all known agent dirs\n const baseDirs: Array<{ scope: \"global\" | \"project\"; dir: string }> = [\n { scope: \"global\", dir: options.homeDir },\n ];\n if (options.projectDir) {\n baseDirs.push({ scope: \"project\", dir: options.projectDir });\n }\n\n for (const { scope, dir } of baseDirs) {\n for (const agent of listSupportedAgents()) {\n if (!supportsScope(agent.id, scope)) {\n continue;\n }\n const agentSkillsDir = resolveAgentSkillsDir(agent.id, scope, dir);\n const managed = await listManagedSkillNames(agentSkillsDir, skillsDir);\n if (managed.has(normalizedSkill)) {\n await removeManagedProjection(path.join(agentSkillsDir, normalizedSkill));\n }\n }\n }\n\n // Delete from central repo\n await rm(getSkillPath(options.homeDir, normalizedSkill), { force: true, recursive: true });\n}\n","import { findSkillReferences, removeSkillWithReferences } from \"../lib/references.js\";\nimport type { RuntimeContext } from \"../types.js\";\n\nexport async function runRemove(\n context: RuntimeContext,\n options: {\n skillName: string;\n force?: boolean;\n projectDir?: string;\n },\n) {\n const projectDir = options.projectDir ?? context.cwd;\n const references = await findSkillReferences({\n homeDir: context.homeDir,\n skillName: options.skillName,\n projectDir,\n });\n const referenceCount = references.bundles.length + references.agentProjections.length;\n\n if (referenceCount > 0 && !options.force) {\n throw new Error(\n `Skill ${options.skillName} is still referenced: ${[\n ...references.bundles,\n ...references.agentProjections,\n ].join(\", \")}`,\n );\n }\n\n await removeSkillWithReferences({\n homeDir: context.homeDir,\n skillName: options.skillName,\n projectDir,\n });\n context.write(`Removed ${options.skillName}`);\n return references;\n}\n","import { cp, mkdir, readdir, rm } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport { createSkillsBackupArchive, extractSkillsArchive, formatBackupLabel } from \"../lib/backup.js\";\nimport { pathExists } from \"../lib/fs.js\";\nimport { scanStoreHygiene } from \"../lib/hygiene.js\";\nimport { getAweskillPaths } from \"../lib/path.js\";\nimport type { RuntimeContext } from \"../types.js\";\n\nexport async function runRestore(\n context: RuntimeContext,\n options: {\n archivePath: string;\n override?: boolean;\n includeBundles?: boolean;\n },\n) {\n const includeBundles = options.includeBundles ?? true;\n const { tempDir, extractedSkillsDir, extractedBundlesDir } = await extractSkillsArchive(options.archivePath);\n\n try {\n const extractedScan = await scanStoreHygiene({\n rootDir: tempDir,\n skillsDir: extractedSkillsDir,\n bundlesDir: extractedBundlesDir,\n includeBundles,\n });\n const extracted = extractedScan.validSkills;\n if (extracted.length === 0) {\n throw new Error(`Archive does not contain a skills/ directory: ${options.archivePath}`);\n }\n\n const { skillsDir, bundlesDir } = getAweskillPaths(context.homeDir);\n const currentScan = await scanStoreHygiene({\n rootDir: getAweskillPaths(context.homeDir).rootDir,\n skillsDir,\n bundlesDir,\n includeBundles,\n });\n const current = currentScan.validSkills;\n const currentNames = new Set(current.map((entry) => entry.name));\n const conflicts = extracted.map((entry) => entry.name).filter((name) => currentNames.has(name));\n const extractedBundles = includeBundles ? extractedScan.validBundles : [];\n const currentBundles = includeBundles ? currentScan.validBundles : [];\n const currentBundleNames = new Set(currentBundles.map((bundle) => bundle.name));\n const bundleConflicts = extractedBundles.map((bundle) => bundle.name).filter((name) => currentBundleNames.has(name));\n\n const backupArchivePath = await createSkillsBackupArchive(context.homeDir, { includeBundles });\n const skippedSkills = new Set(options.override ? [] : conflicts);\n const skippedBundles = new Set(options.override ? [] : bundleConflicts);\n\n if (options.override) {\n await rm(skillsDir, { recursive: true, force: true });\n await mkdir(path.dirname(skillsDir), { recursive: true });\n await cp(extractedSkillsDir, skillsDir, { recursive: true });\n if (includeBundles) {\n await rm(bundlesDir, { recursive: true, force: true });\n if (await pathExists(extractedBundlesDir)) {\n await mkdir(path.dirname(bundlesDir), { recursive: true });\n await cp(extractedBundlesDir, bundlesDir, { recursive: true });\n }\n }\n } else {\n await mkdir(skillsDir, { recursive: true });\n for (const entry of extracted) {\n if (skippedSkills.has(entry.name)) {\n continue;\n }\n await cp(entry.path, path.join(skillsDir, entry.name), { recursive: true });\n }\n if (includeBundles) {\n await mkdir(bundlesDir, { recursive: true });\n for (const bundle of extractedBundles) {\n if (skippedBundles.has(bundle.name)) {\n continue;\n }\n await cp(path.join(extractedBundlesDir, `${bundle.name}.yaml`), path.join(bundlesDir, `${bundle.name}.yaml`), { recursive: true });\n }\n }\n }\n\n const restoredSkillCount = options.override ? extracted.length : extracted.length - skippedSkills.size;\n const restoredBundleCount = includeBundles\n ? (options.override ? extractedBundles.length : extractedBundles.length - skippedBundles.size)\n : 0;\n const restoredLabel = includeBundles\n ? `Restored ${restoredSkillCount} skills and ${restoredBundleCount} bundles from ${options.archivePath}`\n : `Restored ${restoredSkillCount} skills from ${options.archivePath}`;\n context.write(restoredLabel);\n if (skippedSkills.size > 0) {\n context.write(`Skipped existing skills: ${[...skippedSkills].sort().join(\", \")}`);\n }\n if (skippedBundles.size > 0) {\n context.write(`Skipped existing bundles: ${[...skippedBundles].sort().join(\", \")}`);\n }\n if (extractedScan.findings.length > 0) {\n context.write(`Skipped suspicious restore source entries: ${extractedScan.findings.map((finding) => finding.relativePath).join(\", \")}`);\n }\n context.write(`Backed up current ${formatBackupLabel(includeBundles)} to ${backupArchivePath}`);\n return {\n restored: extracted.map((entry) => entry.name).filter((name) => !skippedSkills.has(name)),\n skipped: [...skippedSkills],\n backupArchivePath,\n };\n } finally {\n await rm(tempDir, { recursive: true, force: true });\n }\n}\n","import { mkdir, readdir, rename, rm } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport type { SkillEntry } from \"../types.js\";\nimport { getAweskillPaths, getDuplicateMatchKey, sanitizeName, stripVersionSuffix } from \"./path.js\";\nimport { listSkills } from \"./skills.js\";\n\ninterface ParsedSkillName {\n baseName: string;\n matchKey: string;\n numericKey?: number[];\n hasNumericSuffix: boolean;\n}\n\nexport interface DuplicateGroup {\n baseName: string;\n kept: SkillEntry;\n removed: SkillEntry[];\n}\n\nconst NUMERIC_SUFFIX_PATTERN = /^(.*?)-(\\d+(?:\\.\\d+)*)$/;\n\nexport function parseSkillName(name: string): ParsedSkillName {\n const normalizedName = sanitizeName(name);\n const match = normalizedName.match(NUMERIC_SUFFIX_PATTERN);\n if (!match) {\n return {\n baseName: stripVersionSuffix(normalizedName),\n matchKey: getDuplicateMatchKey(name),\n hasNumericSuffix: false,\n };\n }\n\n return {\n baseName: stripVersionSuffix(normalizedName),\n matchKey: getDuplicateMatchKey(name),\n hasNumericSuffix: true,\n numericKey: match[2].split(\".\").map((part) => Number.parseInt(part, 10)),\n };\n}\n\nfunction compareNumericKeys(left: number[], right: number[]): number {\n const length = Math.max(left.length, right.length);\n for (let index = 0; index < length; index += 1) {\n const leftValue = left[index] ?? 0;\n const rightValue = right[index] ?? 0;\n if (leftValue !== rightValue) {\n return leftValue - rightValue;\n }\n }\n return 0;\n}\n\nexport function choosePreferredSkill(entries: SkillEntry[]): SkillEntry {\n return [...entries].sort((left, right) => {\n const leftParsed = parseSkillName(left.name);\n const rightParsed = parseSkillName(right.name);\n\n if (leftParsed.hasNumericSuffix && !rightParsed.hasNumericSuffix) {\n return -1;\n }\n if (!leftParsed.hasNumericSuffix && rightParsed.hasNumericSuffix) {\n return 1;\n }\n\n if (leftParsed.numericKey && rightParsed.numericKey) {\n const comparison = compareNumericKeys(rightParsed.numericKey, leftParsed.numericKey);\n if (comparison !== 0) {\n return comparison;\n }\n }\n\n return left.name.localeCompare(right.name);\n })[0]!;\n}\n\nexport function buildCanonicalSkillIndex(entries: SkillEntry[]): Map<string, SkillEntry> {\n const grouped = new Map<string, SkillEntry[]>();\n\n for (const entry of entries) {\n const parsed = parseSkillName(entry.name);\n const bucket = grouped.get(parsed.matchKey) ?? [];\n bucket.push(entry);\n grouped.set(parsed.matchKey, bucket);\n }\n\n const canonical = new Map<string, SkillEntry>();\n for (const [baseName, group] of grouped) {\n canonical.set(baseName, choosePreferredSkill(group));\n }\n\n return canonical;\n}\n\nexport function resolveCanonicalSkillName(\n skillName: string,\n canonicalSkills: Map<string, Pick<SkillEntry, \"name\">>,\n): string | undefined {\n if (canonicalSkills.has(skillName)) {\n return canonicalSkills.get(skillName)!.name;\n }\n\n const parsed = parseSkillName(skillName);\n return canonicalSkills.get(parsed.matchKey)?.name;\n}\n\nexport async function findDuplicateSkills(homeDir: string): Promise<DuplicateGroup[]> {\n const skills = await listSkills(homeDir);\n const grouped = new Map<string, SkillEntry[]>();\n\n for (const skill of skills) {\n const parsed = parseSkillName(skill.name);\n const bucket = grouped.get(parsed.matchKey) ?? [];\n bucket.push(skill);\n grouped.set(parsed.matchKey, bucket);\n }\n\n const duplicates: DuplicateGroup[] = [];\n for (const [baseName, entries] of grouped) {\n if (entries.length < 2) {\n continue;\n }\n\n const kept = choosePreferredSkill(entries);\n const removed = entries\n .filter((entry) => entry.path !== kept.path)\n .sort((left, right) => left.name.localeCompare(right.name));\n\n if (removed.length > 0) {\n duplicates.push({ baseName: parseSkillName(kept.name).baseName, kept, removed });\n }\n }\n\n return duplicates.sort((left, right) => left.baseName.localeCompare(right.baseName));\n}\n\nexport async function removeDuplicateSkills(\n homeDir: string,\n duplicates: DuplicateGroup[],\n options: { delete?: boolean } = {},\n): Promise<{ moved: string[]; deleted: string[] }> {\n const paths = getAweskillPaths(homeDir);\n await mkdir(paths.dupSkillsDir, { recursive: true });\n\n const moved: string[] = [];\n const deleted: string[] = [];\n\n for (const group of duplicates) {\n for (const skill of group.removed) {\n if (options.delete) {\n await rm(skill.path, { recursive: true, force: true });\n deleted.push(skill.name);\n continue;\n }\n\n const targetPath = await nextAvailableDupPath(paths.dupSkillsDir, skill.name);\n await rename(skill.path, targetPath);\n moved.push(`${skill.name} -> ${targetPath}`);\n }\n }\n\n return { moved, deleted };\n}\n\nasync function nextAvailableDupPath(dupSkillsDir: string, skillName: string): Promise<string> {\n const entries = new Set(await readdir(dupSkillsDir).catch(() => []));\n if (!entries.has(skillName)) {\n return path.join(dupSkillsDir, skillName);\n }\n\n let index = 1;\n while (entries.has(`${skillName}-${index}`)) {\n index += 1;\n }\n return path.join(dupSkillsDir, `${skillName}-${index}`);\n}\n","import { findDuplicateSkills, removeDuplicateSkills } from \"../lib/rmdup.js\";\nimport type { RuntimeContext } from \"../types.js\";\n\nexport async function runRmdup(\n context: RuntimeContext,\n options: { apply?: boolean; delete?: boolean },\n) {\n if (options.delete && !options.apply) {\n throw new Error(\"--delete requires --apply\");\n }\n\n const duplicates = await findDuplicateSkills(context.homeDir);\n\n if (duplicates.length === 0) {\n context.write(\"No duplicate skills found in the central repo.\");\n return { duplicates, moved: [], deleted: [] };\n }\n\n const lines = [\"Duplicate skill groups in central repo:\"];\n for (const group of duplicates) {\n lines.push(` ${group.baseName}: ${group.removed.length + 1} entries`);\n lines.push(` keep: ${group.kept.name} ${group.kept.path}`);\n for (const skill of group.removed) {\n lines.push(` drop: ${skill.name} ${skill.path}`);\n }\n }\n\n let moved: string[] = [];\n let deleted: string[] = [];\n if (options.apply) {\n const result = await removeDuplicateSkills(context.homeDir, duplicates, { delete: options.delete });\n moved = result.moved;\n deleted = result.deleted;\n lines.push(\"\");\n if (options.delete) {\n lines.push(`Deleted ${deleted.length} duplicate skills`);\n } else {\n lines.push(`Moved ${moved.length} duplicate skills to ${context.homeDir}/.aweskill/dup_skills`);\n }\n } else {\n lines.push(\"\");\n lines.push(\"Dry run only. Use --apply to move duplicates into dup_skills, or --apply --delete to delete them.\");\n }\n\n context.write(lines.join(\"\\n\"));\n return { duplicates, moved, deleted };\n}\n","import path from \"node:path\";\nimport { rm } from \"node:fs/promises\";\n\nimport { formatDetectedAgentsForScope, formatNoAgentsDetectedForScope, resolveAgentsForListingOrSync, resolveAgentSkillsDir } from \"../lib/agents.js\";\nimport { pathExists } from \"../lib/fs.js\";\nimport { getAweskillPaths } from \"../lib/path.js\";\nimport { resolveCanonicalSkillName } from \"../lib/rmdup.js\";\nimport { listSkillEntriesInDirectory, listSkills, getSkillPath } from \"../lib/skills.js\";\nimport { createSkillSymlink, listBrokenSymlinkNames, listManagedSkillNames, removeManagedProjection } from \"../lib/symlink.js\";\nimport { buildCentralCanonicalSkills, classifyCheckedSkill } from \"./agent-inspection.js\";\nimport type { AgentId, RuntimeContext, Scope } from \"../types.js\";\n\nconst DEFAULT_PREVIEW_COUNT = 5;\n\ntype SyncCategory = \"broken\" | \"duplicate\" | \"matched\" | \"new\" | \"suspicious\" | \"linked\";\n\ninterface SyncEntry {\n name: string;\n path: string;\n category: SyncCategory;\n}\n\nfunction getProjectDir(context: RuntimeContext, explicitProjectDir?: string): string {\n return explicitProjectDir ?? context.cwd;\n}\n\nfunction formatSkillBlockWithSummary(title: string, skills: SyncEntry[], verbose = false): string[] {\n if (skills.length === 0) {\n return [`No skills found for ${title.replace(/:$/, \"\").toLowerCase()}.`];\n }\n\n const lines = [title];\n const categories: Array<{ title: string; marker: string; key: SyncCategory }> = [\n { title: \" linked\", marker: \"✓\", key: \"linked\" },\n { title: \" broken\", marker: \"!\", key: \"broken\" },\n { title: \" duplicate\", marker: \"!\", key: \"duplicate\" },\n { title: \" matched\", marker: \"~\", key: \"matched\" },\n { title: \" new\", marker: \"+\", key: \"new\" },\n { title: \" suspicious\", marker: \"?\", key: \"suspicious\" },\n ];\n\n for (const category of categories) {\n const entries = skills.filter((skill) => skill.category === category.key);\n lines.push(`${category.title}: ${entries.length}`);\n const preview = verbose ? entries : entries.slice(0, DEFAULT_PREVIEW_COUNT);\n for (const skill of preview) {\n lines.push(` ${category.marker} ${skill.name} ${skill.path}`);\n }\n if (!verbose && entries.length > preview.length) {\n lines.push(` ... and ${entries.length - preview.length} more (use --verbose to show all)`);\n }\n }\n\n return lines;\n}\n\nexport async function runSync(\n context: RuntimeContext,\n options: {\n scope: Scope;\n agents: string[];\n projectDir?: string;\n apply?: boolean;\n removeSuspicious?: boolean;\n verbose?: boolean;\n },\n) {\n if (options.removeSuspicious && !options.apply) {\n throw new Error(\"--remove-suspicious requires --apply.\");\n }\n\n const projectDir = options.scope === \"project\" ? getProjectDir(context, options.projectDir) : undefined;\n const { agents, explicit } = await resolveAgentsForListingOrSync({\n requestedAgents: options.agents,\n scope: options.scope,\n homeDir: context.homeDir,\n projectDir,\n });\n\n if (agents.length === 0) {\n context.write(formatNoAgentsDetectedForScope(options.scope, projectDir));\n return { relinked: [], repairedBroken: [], removedBroken: [], removedSuspicious: [], newEntries: [] };\n }\n\n const { skillsDir: centralSkillsDir } = getAweskillPaths(context.homeDir);\n const centralSkillEntries = await listSkills(context.homeDir);\n const canonicalSkillNames = buildCentralCanonicalSkills(centralSkillEntries);\n const baseDir = options.scope === \"global\" ? context.homeDir : projectDir!;\n\n const lines: string[] = [];\n if (!explicit) {\n lines.push(formatDetectedAgentsForScope(options.scope, agents, projectDir));\n }\n const relinked: string[] = [];\n const repairedBroken: string[] = [];\n const removedBroken: string[] = [];\n const removedSuspicious: string[] = [];\n const newEntries: string[] = [];\n let suspiciousCount = 0;\n let repairableCount = 0;\n\n for (const agentId of agents) {\n const skillsDir = resolveAgentSkillsDir(agentId, options.scope, baseDir);\n const managed = await listManagedSkillNames(skillsDir, centralSkillsDir);\n const brokenSymlinks = await listBrokenSymlinkNames(skillsDir);\n const skills = await listSkillEntriesInDirectory(skillsDir);\n const entries: SyncEntry[] = [];\n\n for (const skillName of Array.from(brokenSymlinks).sort((left, right) => left.localeCompare(right))) {\n const targetPath = path.join(skillsDir, skillName);\n entries.push({ name: skillName, path: targetPath, category: \"broken\" });\n repairableCount += 1;\n\n if (!options.apply) {\n continue;\n }\n\n const canonicalName = resolveCanonicalSkillName(skillName, canonicalSkillNames);\n if (canonicalName) {\n await createSkillSymlink(getSkillPath(context.homeDir, canonicalName), targetPath, {\n allowReplaceExisting: true,\n });\n repairedBroken.push(`${agentId}:${skillName}`);\n continue;\n }\n\n const wasRemoved = await removeManagedProjection(targetPath);\n if (wasRemoved) {\n removedBroken.push(`${agentId}:${skillName}`);\n }\n }\n\n for (const skill of skills) {\n if (brokenSymlinks.has(skill.name)) {\n continue;\n }\n\n const checkedSkill = classifyCheckedSkill(skill, managed, canonicalSkillNames);\n entries.push({ name: checkedSkill.name, path: checkedSkill.path, category: checkedSkill.category });\n\n if (checkedSkill.category === \"duplicate\" || checkedSkill.category === \"matched\") {\n repairableCount += 1;\n }\n if (checkedSkill.category === \"suspicious\") {\n suspiciousCount += 1;\n }\n if (checkedSkill.category === \"new\") {\n newEntries.push(`${agentId}:${checkedSkill.name}`);\n }\n\n if (!options.apply) {\n continue;\n }\n\n if (checkedSkill.category === \"duplicate\" || checkedSkill.category === \"matched\") {\n await createSkillSymlink(getSkillPath(context.homeDir, checkedSkill.canonicalName ?? checkedSkill.name), checkedSkill.path, {\n allowReplaceExisting: true,\n });\n relinked.push(`${agentId}:${checkedSkill.name}`);\n continue;\n }\n\n if (checkedSkill.category === \"suspicious\" && options.removeSuspicious) {\n await rm(checkedSkill.path, { recursive: true, force: true });\n removedSuspicious.push(`${agentId}:${checkedSkill.name}`);\n }\n }\n\n for (const [skillName] of managed) {\n if (brokenSymlinks.has(skillName)) {\n continue;\n }\n const sourcePath = path.join(centralSkillsDir, skillName);\n if (await pathExists(sourcePath)) {\n continue;\n }\n\n const targetPath = path.join(skillsDir, skillName);\n entries.push({ name: skillName, path: targetPath, category: \"broken\" });\n repairableCount += 1;\n\n if (!options.apply) {\n continue;\n }\n\n const wasRemoved = await removeManagedProjection(targetPath);\n if (wasRemoved) {\n removedBroken.push(`${agentId}:${skillName}`);\n }\n }\n\n const title = options.scope === \"global\"\n ? `Global skills for ${agentId}:`\n : `Project skills for ${agentId} (${projectDir}):`;\n lines.push(\"\");\n lines.push(...formatSkillBlockWithSummary(title, entries, options.verbose));\n }\n\n lines.push(\"\");\n if (!options.apply) {\n if (repairableCount > 0) {\n lines.push(\"Re-run with aweskill doctor sync --apply to repair broken projections and relink duplicate/matched entries.\");\n }\n if (suspiciousCount > 0) {\n lines.push(\"Suspicious agent skill entries were reported only. Re-run with aweskill doctor sync --apply --remove-suspicious to remove them.\");\n }\n if (newEntries.length > 0) {\n lines.push(\"New agent skill entries found. Use aweskill store import --scan with same scope and agent filters to import them.\");\n }\n } else {\n lines.push(`Repaired ${repairedBroken.length} broken symlink projection${repairedBroken.length === 1 ? \"\" : \"s\"}.`);\n lines.push(`Removed ${removedBroken.length} broken projection${removedBroken.length === 1 ? \"\" : \"s\"}.`);\n lines.push(`Relinked ${relinked.length} duplicate or matched agent skill entr${relinked.length === 1 ? \"y\" : \"ies\"}.`);\n if (options.removeSuspicious) {\n lines.push(`Removed ${removedSuspicious.length} suspicious agent skill entr${removedSuspicious.length === 1 ? \"y\" : \"ies\"}.`);\n } else if (suspiciousCount > 0) {\n lines.push(\"Suspicious agent skill entries were reported only. Re-run with --apply --remove-suspicious to remove them.\");\n }\n if (newEntries.length > 0) {\n lines.push(\"New agent skill entries were found. Use aweskill store import --scan with same scope and agent filters to import them.\");\n }\n }\n\n context.write(lines.join(\"\\n\").trim());\n return { relinked, repairedBroken, removedBroken, removedSuspicious, newEntries };\n}\n","import { buildCanonicalSkillIndex, parseSkillName, resolveCanonicalSkillName } from \"../lib/rmdup.js\";\nimport { getSkillSuspicionReason, listSkills } from \"../lib/skills.js\";\n\nexport type CheckCategory = \"linked\" | \"broken\" | \"duplicate\" | \"matched\" | \"new\" | \"suspicious\";\n\nexport interface CheckedSkill {\n name: string;\n path: string;\n category: CheckCategory;\n hasSKILLMd: boolean;\n suspicionReason?: string;\n duplicateKind?: \"exact\" | \"family\";\n canonicalName?: string;\n}\n\nexport function classifyCheckedSkill(\n skill: { name: string; path: string; hasSKILLMd: boolean },\n managed: Map<string, \"symlink\" | \"copy\">,\n canonicalSkillNames: Map<string, { name: string }>,\n): CheckedSkill {\n const suspicionReason = getSkillSuspicionReason(skill);\n if (suspicionReason) {\n return {\n name: skill.name,\n path: skill.path,\n category: \"suspicious\",\n hasSKILLMd: skill.hasSKILLMd,\n suspicionReason,\n };\n }\n\n let category: CheckCategory = \"new\";\n let duplicateKind: CheckedSkill[\"duplicateKind\"];\n let canonicalName: string | undefined;\n if (managed.has(skill.name)) {\n category = \"linked\";\n } else {\n canonicalName = resolveCanonicalSkillName(skill.name, canonicalSkillNames);\n if (canonicalName) {\n category = canonicalName === skill.name ? \"duplicate\" : \"matched\";\n duplicateKind = canonicalName === skill.name ? \"exact\" : \"family\";\n }\n }\n\n if (category === \"linked\") {\n const parsed = parseSkillName(skill.name);\n canonicalName = canonicalSkillNames.get(parsed.baseName)?.name;\n }\n\n return {\n name: skill.name,\n path: skill.path,\n category,\n hasSKILLMd: skill.hasSKILLMd,\n duplicateKind,\n canonicalName,\n };\n}\n\nexport function buildCentralCanonicalSkills(centralSkillEntries: Awaited<ReturnType<typeof listSkills>>): Map<string, { name: string }> {\n return buildCanonicalSkillIndex(centralSkillEntries);\n}\n","import { rm } from \"node:fs/promises\";\n\nimport { scanStoreHygiene } from \"../lib/hygiene.js\";\nimport { getAweskillPaths } from \"../lib/path.js\";\nimport type { RuntimeContext } from \"../types.js\";\n\nconst DEFAULT_PREVIEW_COUNT = 5;\n\nfunction formatFindingGroups(\n relativePaths: string[],\n options: { verbose?: boolean; includeSkills: boolean; includeBundles: boolean },\n): string[] {\n const groups = [\n options.includeSkills\n ? {\n label: \"skills\",\n entries: relativePaths.filter((entry) => entry.startsWith(\"skills/\")),\n }\n : undefined,\n options.includeBundles\n ? {\n label: \"bundles\",\n entries: relativePaths.filter((entry) => entry.startsWith(\"bundles/\")),\n }\n : undefined,\n ].filter((group): group is { label: string; entries: string[] } => Boolean(group));\n\n const lines: string[] = [];\n for (const group of groups) {\n if (group.entries.length === 0) {\n continue;\n }\n lines.push(`${group.label}: ${group.entries.length}`);\n const preview = options.verbose ? group.entries : group.entries.slice(0, DEFAULT_PREVIEW_COUNT);\n if (!options.verbose && group.entries.length > preview.length) {\n lines.push(`Showing first ${preview.length} suspicious entries in ${group.label} (use --verbose to show all)`);\n }\n for (const entry of preview) {\n lines.push(` - ${entry}`);\n }\n if (!options.verbose && group.entries.length > preview.length) {\n lines.push(`... and ${group.entries.length - preview.length} more (use --verbose to show all)`);\n }\n }\n\n return lines;\n}\n\nexport async function runClean(\n context: RuntimeContext,\n options: { apply?: boolean; skillsOnly?: boolean; bundlesOnly?: boolean; verbose?: boolean } = {},\n) {\n const { rootDir, skillsDir, bundlesDir } = getAweskillPaths(context.homeDir);\n const includeSkills = !options.bundlesOnly;\n const includeBundles = !options.skillsOnly;\n const { findings } = await scanStoreHygiene({ rootDir, skillsDir, bundlesDir, includeSkills, includeBundles });\n\n if (findings.length === 0) {\n context.write(\"No suspicious store entries found.\");\n return { findings, removed: [] as string[] };\n }\n\n const lines = [\n \"Suspicious store entries:\",\n ...formatFindingGroups(\n findings.map((finding) => finding.relativePath),\n { verbose: options.verbose, includeSkills, includeBundles },\n ),\n ];\n\n if (!options.apply) {\n lines.push(\"\");\n lines.push(\"Dry run only. Use --apply to remove suspicious entries.\");\n context.write(lines.join(\"\\n\"));\n return { findings, removed: [] as string[] };\n }\n\n const removed: string[] = [];\n for (const finding of findings) {\n await rm(finding.path, { recursive: true, force: true });\n removed.push(finding.relativePath);\n }\n\n lines.push(\"\");\n lines.push(`Removed ${removed.length} suspicious store entries`);\n context.write(lines.join(\"\\n\"));\n return { findings, removed };\n}\n","import { readdir } from \"node:fs/promises\";\n\nimport { pathExists } from \"../lib/fs.js\";\nimport { getAweskillPaths } from \"../lib/path.js\";\nimport type { RuntimeContext } from \"../types.js\";\n\ninterface StoreLocationEntry {\n label: string;\n path: string;\n entryCount: number;\n}\n\nasync function countEntries(targetPath: string): Promise<number> {\n if (!(await pathExists(targetPath))) {\n return 0;\n }\n\n return (await readdir(targetPath)).length;\n}\n\nfunction formatEntryCount(count: number): string {\n return `${count} ${count === 1 ? \"entry\" : \"entries\"}`;\n}\n\nexport async function runStoreWhere(context: RuntimeContext, options: { verbose?: boolean } = {}) {\n const paths = getAweskillPaths(context.homeDir);\n\n if (!options.verbose) {\n context.write(`aweskill store: ${paths.rootDir}`);\n return paths.rootDir;\n }\n\n const entries: StoreLocationEntry[] = [\n { label: \"skills\", path: paths.skillsDir, entryCount: await countEntries(paths.skillsDir) },\n { label: \"dup_skills\", path: paths.dupSkillsDir, entryCount: await countEntries(paths.dupSkillsDir) },\n { label: \"backup\", path: paths.backupDir, entryCount: await countEntries(paths.backupDir) },\n { label: \"bundles\", path: paths.bundlesDir, entryCount: await countEntries(paths.bundlesDir) },\n ];\n\n const lines = [`aweskill store: ${paths.rootDir}`];\n for (const entry of entries) {\n lines.push(` - ${entry.label}: ${formatEntryCount(entry.entryCount)} -> ${entry.path}`);\n }\n\n context.write(lines.join(\"\\n\"));\n return {\n rootDir: paths.rootDir,\n entries,\n };\n}\n","import { existsSync, readFileSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nfunction readVersionFromPackageJson(packageJsonPath: string) {\n const packageJson = JSON.parse(readFileSync(packageJsonPath, \"utf8\")) as { version?: string };\n\n if (!packageJson.version) {\n throw new Error(`Missing version in ${packageJsonPath}`);\n }\n\n return packageJson.version;\n}\n\nexport function resolveVersionForModuleUrl(moduleUrl: string) {\n const moduleDir = path.dirname(fileURLToPath(moduleUrl));\n\n for (const relativePath of [\"../package.json\", \"../../package.json\"]) {\n const packageJsonPath = path.resolve(moduleDir, relativePath);\n\n if (existsSync(packageJsonPath)) {\n return readVersionFromPackageJson(packageJsonPath);\n }\n }\n\n throw new Error(`Cannot find package.json for module ${moduleUrl}`);\n}\n\nexport const AWESKILL_VERSION = resolveVersionForModuleUrl(import.meta.url);\n","import { realpathSync } from \"node:fs\";\nimport { fileURLToPath, pathToFileURL } from \"node:url\";\n\nexport function isDirectCliEntry(importMetaUrl: string, argv1?: string): boolean {\n if (!argv1) {\n return false;\n }\n\n try {\n const executedPath = realpathSync(argv1);\n const modulePath = realpathSync(fileURLToPath(importMetaUrl));\n return pathToFileURL(modulePath).href === pathToFileURL(executedPath).href;\n } catch {\n return importMetaUrl === pathToFileURL(argv1).href;\n }\n}\n","import * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\n\nfunction emitMessage(line: string) {\n const trimmed = line.trim();\n if (!trimmed) {\n return;\n }\n\n if (trimmed.startsWith(\"Warning: \")) {\n p.log.warn(trimmed.slice(\"Warning: \".length));\n return;\n }\n\n if (trimmed.startsWith(\"Error: \")) {\n p.log.error(trimmed.slice(\"Error: \".length));\n return;\n }\n\n if (\n trimmed.startsWith(\"Created \")\n || trimmed.startsWith(\"Backed up \")\n || trimmed.startsWith(\"Imported \")\n || trimmed.startsWith(\"Enabled \")\n || trimmed.startsWith(\"Disabled \")\n || trimmed.startsWith(\"Initialized \")\n || trimmed.startsWith(\"Deleted \")\n || trimmed.startsWith(\"Removed \")\n || trimmed.startsWith(\"Recovered \")\n || trimmed.startsWith(\"Sync applied \")\n ) {\n p.log.success(trimmed);\n return;\n }\n\n if (\n trimmed.startsWith(\"Skills in central repo:\")\n || trimmed === \"Scanned skills:\"\n || trimmed === \"Duplicate skill groups in central repo:\"\n || trimmed === \"Bundles:\"\n || trimmed === \"Supported agents:\"\n || trimmed.startsWith(\"Global skills for \")\n || trimmed.startsWith(\"Project skills for \")\n ) {\n console.log(pc.bold(trimmed));\n return;\n }\n\n if (\n trimmed.startsWith(\"linked:\")\n || trimmed.startsWith(\"duplicate:\")\n || trimmed.startsWith(\"matched:\")\n || trimmed.startsWith(\"new:\")\n || trimmed.startsWith(\"suspicious:\")\n ) {\n console.log(pc.dim(trimmed));\n return;\n }\n\n if (trimmed.startsWith(\"No duplicate skills found\")) {\n console.log(pc.dim(trimmed));\n return;\n }\n\n if (line.startsWith(\" Global scanned skills for \") || line.startsWith(\" Project scanned skills for \")) {\n console.log(pc.dim(line.trim()));\n return;\n }\n\n if (line.startsWith(\" keep: \") || line.startsWith(\" drop: \")) {\n const [label, ...rest] = line.trim().split(\" \");\n const marker = label === \"keep:\" ? pc.green(\"keep:\") : pc.yellow(\"drop:\");\n console.log(` ${marker} ${rest.join(\" \")}`);\n return;\n }\n\n if (line.startsWith(\" ✓ \")) {\n const rest = line.slice(4);\n const firstSpace = rest.indexOf(\" \");\n if (firstSpace === -1) {\n console.log(` ${pc.green(\"✓\")} ${pc.cyan(rest)}`);\n return;\n }\n\n const name = rest.slice(0, firstSpace);\n const location = rest.slice(firstSpace + 1);\n console.log(` ${pc.green(\"✓\")} ${pc.cyan(name)} ${pc.dim(location)}`);\n return;\n }\n\n if (line.startsWith(\"✓ \")) {\n const rest = line.slice(2);\n const firstSpace = rest.indexOf(\" \");\n const name = firstSpace === -1 ? rest : rest.slice(0, firstSpace);\n const location = firstSpace === -1 ? \"\" : rest.slice(firstSpace + 1);\n console.log(`${pc.green(\"✓\")} ${pc.cyan(name)}${location ? ` ${pc.dim(location)}` : \"\"}`);\n return;\n }\n\n if (line.startsWith(\"x \")) {\n const rest = line.slice(2);\n console.log(`${pc.red(\"x\")} ${pc.cyan(rest)}`);\n return;\n }\n\n if (line.startsWith(\" ! \")) {\n const rest = line.slice(4);\n const firstSpace = rest.indexOf(\" \");\n if (firstSpace === -1) {\n console.log(` ${pc.yellow(\"!\")} ${pc.cyan(rest)}`);\n return;\n }\n\n const name = rest.slice(0, firstSpace);\n const location = rest.slice(firstSpace + 1);\n console.log(` ${pc.yellow(\"!\")} ${pc.cyan(name)} ${pc.dim(location)}`);\n return;\n }\n\n if (line.startsWith(\" ✓ \") || line.startsWith(\" ! \") || line.startsWith(\" ~ \") || line.startsWith(\" + \") || line.startsWith(\" ? \")) {\n const marker = line.slice(4, 5);\n const rest = line.slice(6);\n const firstSpace = rest.indexOf(\" \");\n const name = firstSpace === -1 ? rest : rest.slice(0, firstSpace);\n const location = firstSpace === -1 ? \"\" : rest.slice(firstSpace + 1);\n const coloredMarker = marker === \"✓\"\n ? pc.green(\"✓\")\n : marker === \"!\"\n ? pc.yellow(\"!\")\n : marker === \"~\"\n ? pc.blue(\"~\")\n : marker === \"?\"\n ? pc.red(\"?\")\n : pc.cyan(\"+\");\n console.log(` ${coloredMarker} ${pc.cyan(name)}${location ? ` ${pc.dim(location)}` : \"\"}`);\n return;\n }\n\n if (\n trimmed.startsWith(\"No skills found \")\n || trimmed === \"No bundles found.\"\n || trimmed.startsWith(\"Showing first \")\n || trimmed.startsWith(\"... and \")\n ) {\n console.log(pc.dim(trimmed));\n return;\n }\n\n p.log.message(trimmed, { symbol: pc.cyan(\"•\") });\n}\n\nexport function commandTitle(title: string): string {\n return pc.bgCyan(pc.black(` ${title} `));\n}\n\nexport function writeCliMessage(message: string) {\n for (const line of message.split(\"\\n\")) {\n emitMessage(line);\n }\n}\n\nexport function writeCliError(message: string) {\n for (const line of message.split(\"\\n\")) {\n if (!line.trim()) {\n continue;\n }\n p.log.error(line.replace(/^Error:\\s*/, \"\"));\n }\n}\n\nexport function introCommand(title: string) {\n p.intro(commandTitle(title));\n}\n\nexport function outroCommand(message = pc.green(\"Done.\")) {\n p.outro(message);\n}\n"],"mappings":"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","names":["homedir","path","readdir","readFile","path","path","path","readdir","readFile","path","path","mkdir","readFile","readdir","writeFile","path","parse","mkdir","readdir","path","mkdir","path","readdir","path","mkdir","readdir","readFile","parse","writeFile","path","path","cp","lstat","mkdir","readlink","readdir","stat","path","cp","lstat","mkdir","readFile","readdir","rm","writeFile","path","path","mkdir","path","rm","marker","cp","writeFile","readdir","lstat","readlink","path","stat","mkdir","readdir","cp","access","lstat","readdir","readlink","path","path","path","agents","access","path","lstat","readlink","readdir","uniqueSorted","result","path","mkdir","path","getProjectDir","resolveAgentsForScope","resolveSkillNames","mkdir","path","cp","mkdir","readlink","unlink","path","getProjectDir","resolveAgentsForScope","path","readlink","unlink","mkdir","cp","rm","path","path","rm","cp","mkdir","rm","path","rm","mkdir","path","cp","mkdir","readdir","rm","path","mkdir","rm","readdir","path","path","rm","DEFAULT_PREVIEW_COUNT","getProjectDir","path","rm","rm","DEFAULT_PREVIEW_COUNT","rm","readdir","readdir","path","fileURLToPath","fileURLToPath","homedir"]}