@agentver/cli 0.2.0 → 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/agentver.js +5 -1
- package/dist/agentver.js.map +1 -1
- package/package.json +1 -1
package/dist/agentver.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../bin/agentver.ts","../src/commands/adopt.ts","../../agent-definitions/src/agents/definitions.ts","../../agent-definitions/src/config-composer.ts","../../agent-definitions/src/config-translator.ts","../../agent-definitions/src/scanner.ts","../src/output.ts","../src/storage/integrity.ts","../src/storage/lockfile.ts","../../shared/src/cli-output.ts","../../shared/src/schemas.ts","../../shared/src/constants.ts","../../shared/src/errors.ts","../../../node_modules/.bun/tslog@4.10.2/node_modules/tslog/esm/urlToObj.js","../../../node_modules/.bun/tslog@4.10.2/node_modules/tslog/esm/prettyLogStyles.js","../../../node_modules/.bun/tslog@4.10.2/node_modules/tslog/esm/formatTemplate.js","../../../node_modules/.bun/tslog@4.10.2/node_modules/tslog/esm/formatNumberAddZeros.js","../../../node_modules/.bun/tslog@4.10.2/node_modules/tslog/esm/internal/metaFormatting.js","../../../node_modules/.bun/tslog@4.10.2/node_modules/tslog/esm/internal/stackTrace.js","../../../node_modules/.bun/tslog@4.10.2/node_modules/tslog/esm/internal/errorUtils.js","../../../node_modules/.bun/tslog@4.10.2/node_modules/tslog/esm/internal/jsonStringifyRecursive.js","../../../node_modules/.bun/tslog@4.10.2/node_modules/tslog/esm/internal/util.inspect.polyfill.js","../../../node_modules/.bun/tslog@4.10.2/node_modules/tslog/esm/internal/environment.js","../../../node_modules/.bun/tslog@4.10.2/node_modules/tslog/esm/BaseLogger.js","../../../node_modules/.bun/tslog@4.10.2/node_modules/tslog/esm/index.js","../../shared/src/logger.ts","../../shared/src/skill-spec.ts","../../shared/src/validation.ts","../src/storage/serialise.ts","../src/storage/manifest.ts","../src/commands/audit.ts","../src/git/fetcher.ts","../src/git/cache.ts","../src/security/file-policy.ts","../src/security/patterns.ts","../src/security/reporter.ts","../src/registry/config.ts","../src/registry/auth.ts","../src/security/scanner.ts","../src/storage/canonical.ts","../src/commands/completion.ts","../src/commands/config.ts","../src/commands/diff.ts","../src/git/resolver.ts","../src/commands/doctor.ts","../src/commands/draft.ts","../src/utils/retry.ts","../src/registry/platform.ts","../src/commands/info.ts","../src/commands/init.ts","../src/commands/install.ts","../src/registry/reporter.ts","../src/wellknown/resolver.ts","../src/commands/list.ts","../src/commands/log.ts","../src/commands/login.ts","../src/registry/client.ts","../src/utils/network.ts","../src/commands/logout.ts","../src/commands/pin.ts","../src/commands/publish.ts","../src/commands/remove.ts","../src/commands/save.ts","../src/commands/scan.ts","../src/commands/search.ts","../src/registry/skills-sh.ts","../src/commands/status.ts","../src/commands/suggest.ts","../src/commands/suggestions.ts","../src/commands/sync.ts","../src/commands/update.ts","../src/storage/patches.ts","../src/utils/backup.ts","../src/commands/upgrade.ts","../src/commands/verify.ts","../src/commands/version.ts","../src/commands/whoami.ts"],"sourcesContent":["import { createRequire } from 'node:module'\nimport { dirname, join } from 'node:path'\nimport { fileURLToPath } from 'node:url'\nimport { Command } from 'commander'\nimport chalk from 'chalk'\nimport updateNotifier from 'update-notifier'\nimport { registerAdoptCommand } from '../src/commands/adopt'\nimport { registerAuditCommand } from '../src/commands/audit'\nimport { registerCompletionCommand } from '../src/commands/completion'\nimport { registerConfigCommand } from '../src/commands/config'\nimport { registerDiffCommand } from '../src/commands/diff'\nimport { registerDoctorCommand } from '../src/commands/doctor'\nimport { registerDraftCommand } from '../src/commands/draft'\nimport { registerInfoCommand } from '../src/commands/info'\nimport { registerInitCommand } from '../src/commands/init'\nimport { registerInstallCommand } from '../src/commands/install'\nimport { registerListCommand } from '../src/commands/list'\nimport { registerLogCommand } from '../src/commands/log'\nimport { registerLoginCommand } from '../src/commands/login'\nimport { registerLogoutCommand } from '../src/commands/logout'\nimport { registerPinCommand, registerUnpinCommand } from '../src/commands/pin'\nimport { registerPublishCommand } from '../src/commands/publish'\nimport { registerRemoveCommand } from '../src/commands/remove'\nimport { registerSaveCommand } from '../src/commands/save'\nimport { registerScanCommand } from '../src/commands/scan'\nimport { registerSearchCommand } from '../src/commands/search'\nimport { registerStatusCommand } from '../src/commands/status'\nimport { registerSuggestCommand } from '../src/commands/suggest'\nimport { registerSuggestionsCommand } from '../src/commands/suggestions'\nimport { registerSyncCommand } from '../src/commands/sync'\nimport { registerUpdateCommand } from '../src/commands/update'\nimport { registerUpgradeCommand } from '../src/commands/upgrade'\nimport { registerVerifyCommand } from '../src/commands/verify'\nimport { registerVersionCommand } from '../src/commands/version'\nimport { registerWhoamiCommand } from '../src/commands/whoami'\n\nconst __dirname = dirname(fileURLToPath(import.meta.url))\nconst require = createRequire(import.meta.url)\nconst pkg = require(join(__dirname, '..', 'package.json')) as { name: string; version: string }\nupdateNotifier({ pkg }).notify({\n message: `Update available: {currentVersion} → {latestVersion}\\nRun ${chalk.cyan('agentver upgrade')} to update`,\n})\n\nconst program = new Command()\n\nprogram\n .name('agentver')\n .description('Agent skill registry — store, version, and distribute AI agent skills')\n .version(pkg.version)\n .option('--json', 'Output results as structured JSON')\n\nregisterAdoptCommand(program)\nregisterAuditCommand(program)\nregisterCompletionCommand(program)\nregisterConfigCommand(program)\nregisterDiffCommand(program)\nregisterDoctorCommand(program)\nregisterDraftCommand(program)\nregisterInfoCommand(program)\nregisterInitCommand(program)\nregisterInstallCommand(program)\nregisterListCommand(program)\nregisterLogCommand(program)\nregisterLoginCommand(program)\nregisterLogoutCommand(program)\nregisterPinCommand(program)\nregisterPublishCommand(program)\nregisterRemoveCommand(program)\nregisterSaveCommand(program)\nregisterScanCommand(program)\nregisterSearchCommand(program)\nregisterStatusCommand(program)\nregisterSuggestCommand(program)\nregisterSuggestionsCommand(program)\nregisterSyncCommand(program)\nregisterUnpinCommand(program)\nregisterUpdateCommand(program)\nregisterUpgradeCommand(program)\nregisterVerifyCommand(program)\nregisterVersionCommand(program)\nregisterWhoamiCommand(program)\n\nprogram.parse()\n","import { readFileSync } from 'node:fs'\nimport { homedir } from 'node:os'\nimport { dirname } from 'node:path'\nimport type { ScannedFile } from '@agentver/agent-definitions'\nimport { scanForSkillFiles, scanGlobalSkillFiles } from '@agentver/agent-definitions'\nimport type { AdoptResult, GitSource } from '@agentver/shared'\nimport chalk from 'chalk'\nimport type { Command } from 'commander'\nimport { createSpinner, isJSONMode, outputError, outputSuccess } from '../output.js'\nimport { computeSha256FromBuffer } from '../storage/integrity'\nimport { readLockfile, writeLockfile } from '../storage/lockfile'\nimport { readManifest, writeManifest } from '../storage/manifest'\n\nexport type AdoptOptions = {\n global?: boolean\n name?: string\n dryRun?: boolean\n}\n\ntype AdoptedEntry = {\n name: string\n path: string\n type: string\n agents: string[]\n}\n\ntype SkippedEntry = {\n name: string\n path: string\n reason: string\n}\n\ntype DeduplicatedFile = {\n path: string\n name: string\n detectedType: ScannedFile['detectedType']\n agents: string[]\n}\n\nfunction deduplicateByPath(files: ScannedFile[]): DeduplicatedFile[] {\n const byPath = new Map<string, DeduplicatedFile>()\n\n for (const file of files) {\n const existing = byPath.get(file.path)\n if (existing) {\n if (!existing.agents.includes(file.agentId)) {\n existing.agents.push(file.agentId)\n }\n } else {\n byPath.set(file.path, {\n path: file.path,\n name: file.name,\n detectedType: file.detectedType,\n agents: [file.agentId],\n })\n }\n }\n\n return [...byPath.values()]\n}\n\nfunction computeFileIntegrity(filePath: string): string {\n try {\n const content = readFileSync(filePath, 'utf-8')\n return computeSha256FromBuffer(content)\n } catch {\n return computeSha256FromBuffer('')\n }\n}\n\nfunction computeDirectoryIntegrity(entryFilePath: string): string {\n // For adopted skills, compute integrity from the entry file\n // (the SKILL.md or config file that was discovered)\n return computeFileIntegrity(entryFilePath)\n}\n\nexport async function adoptSkills(path: string | undefined, options: AdoptOptions): Promise<void> {\n const jsonMode = isJSONMode()\n const spinner = createSpinner('Scanning for skills...').start()\n\n try {\n const targetPath = path ?? process.cwd()\n const projectRoot = process.cwd()\n const home = homedir()\n\n // Collect scanned files\n const projectFiles = scanForSkillFiles(targetPath)\n const seenPaths = new Set(projectFiles.map((f) => f.path))\n\n let allFiles: ScannedFile[] = [...projectFiles]\n\n if (options.global) {\n const globalFiles = scanGlobalSkillFiles(home)\n for (const gf of globalFiles) {\n if (!seenPaths.has(gf.path)) {\n allFiles.push(gf)\n seenPaths.add(gf.path)\n }\n }\n }\n\n // Filter by name if --name provided\n if (options.name) {\n allFiles = allFiles.filter((f) => f.name === options.name)\n if (allFiles.length === 0) {\n if (jsonMode) {\n outputError('NOT_FOUND', `No skill found matching name \"${options.name}\"`)\n process.exit(1)\n }\n spinner.fail(`No skill found matching name \"${options.name}\"`)\n process.exit(1)\n }\n }\n\n if (allFiles.length === 0) {\n if (jsonMode) {\n outputSuccess<AdoptResult>({ adopted: [], skipped: [] }, [\n 'No skills or configs found to adopt.',\n ])\n return\n }\n spinner.warn('No skills or configs found to adopt.')\n return\n }\n\n // Deduplicate files by path, merging agents for the same file\n const deduped = deduplicateByPath(allFiles)\n\n const manifest = readManifest(projectRoot)\n const lockfile = readLockfile(projectRoot)\n const adopted: AdoptedEntry[] = []\n const skipped: SkippedEntry[] = []\n\n for (const file of deduped) {\n // Check if already in manifest\n if (manifest.packages[file.name]) {\n skipped.push({\n name: file.name,\n path: file.path,\n reason: 'Already managed by Agentver',\n })\n continue\n }\n\n const integrity = computeDirectoryIntegrity(file.path)\n const sourcePath = file.detectedType === 'AGENT_CONFIG' ? file.path : dirname(file.path)\n\n const source: GitSource = {\n type: 'git',\n uri: 'local',\n path: sourcePath,\n ref: 'local',\n commit: 'adopted',\n }\n\n if (!options.dryRun) {\n manifest.packages[file.name] = {\n source,\n agents: file.agents,\n installedAt: new Date().toISOString(),\n modified: false,\n }\n\n lockfile.packages[file.name] = {\n source,\n integrity,\n agents: file.agents,\n }\n }\n\n adopted.push({\n name: file.name,\n path: file.path,\n type: file.detectedType,\n agents: file.agents,\n })\n }\n\n // Write manifest and lockfile\n if (!options.dryRun && adopted.length > 0) {\n writeManifest(projectRoot, manifest)\n writeLockfile(projectRoot, lockfile)\n }\n\n // Output results\n if (jsonMode) {\n outputSuccess<AdoptResult>({ adopted, skipped })\n return\n }\n\n spinner.stop()\n\n if (options.dryRun) {\n process.stdout.write(chalk.yellow('\\n[dry-run] ') + chalk.dim('No changes written.\\n'))\n }\n\n if (adopted.length > 0) {\n process.stdout.write(chalk.bold('\\nAdopted:\\n'))\n for (const entry of adopted) {\n const typeLabel = entry.type === 'AGENT_CONFIG' ? chalk.dim(', config') : ''\n const agentList = entry.agents.join(', ')\n process.stdout.write(\n ` ${chalk.green('\\u2713')} ${chalk.green(entry.name.padEnd(16))} ${chalk.dim(entry.path.padEnd(45))} ${chalk.cyan(`(${agentList}${typeLabel})`)}\\n`\n )\n }\n }\n\n if (skipped.length > 0) {\n process.stdout.write(chalk.bold('\\nSkipped:\\n'))\n for (const entry of skipped) {\n process.stdout.write(\n ` ${chalk.dim('\\u2013')} ${entry.name.padEnd(16)} ${chalk.dim(entry.reason)}\\n`\n )\n }\n }\n\n const summary = `\\nAdopted ${adopted.length} skill${adopted.length === 1 ? '' : 's'}, skipped ${skipped.length}.\\n`\n process.stdout.write(chalk.dim(summary))\n } catch (error) {\n if (jsonMode) {\n outputError('ADOPT_FAILED', error instanceof Error ? error.message : String(error))\n process.exit(1)\n }\n spinner.fail(`Failed to adopt: ${error instanceof Error ? error.message : String(error)}`)\n process.exit(1)\n }\n}\n\nexport function registerAdoptCommand(program: Command): void {\n program\n .command('adopt [path]')\n .description('Adopt existing skills and configs into Agentver management')\n .option('--global', 'Also scan global paths (~/.claude/skills, etc.)')\n .option('--name <name>', 'Adopt a specific skill by name')\n .option('--dry-run', 'Show what would be adopted without making changes')\n .action(async (path: string | undefined, options: AdoptOptions) => {\n await adoptSkills(path, options)\n })\n}\n","import type { AgentDefinition } from '../types'\n\nexport const AGENT_DEFINITIONS: AgentDefinition[] = [\n // --- Chat and IDE agents ---\n {\n id: 'claude-code',\n name: 'Claude Code',\n projectSkillPath: '.claude/skills',\n globalSkillPath: '~/.claude/skills',\n configFiles: ['CLAUDE.md'],\n configDirs: ['.claude'],\n category: 'agent-specific',\n },\n {\n id: 'claude-cowork',\n name: 'Claude Cowork',\n projectSkillPath: '.claude/skills',\n globalSkillPath: '~/.claude/skills',\n configFiles: ['CLAUDE.md'],\n configDirs: ['.claude'],\n category: 'agent-specific',\n },\n {\n id: 'cursor',\n name: 'Cursor',\n projectSkillPath: '.cursor/skills',\n globalSkillPath: '~/.cursor/skills',\n configFiles: ['.cursorrules'],\n configDirs: ['.cursor'],\n category: 'agent-specific',\n },\n {\n id: 'codex',\n name: 'OpenAI Codex',\n projectSkillPath: '.agents/skills',\n globalSkillPath: '~/.codex/skills',\n configFiles: ['AGENTS.md'],\n configDirs: ['.codex', '.agents'],\n category: 'agent-specific',\n },\n {\n id: 'opencode',\n name: 'OpenCode',\n projectSkillPath: '.opencode/skills',\n globalSkillPath: '~/.config/opencode/skills',\n configFiles: [],\n configDirs: ['.opencode', '.config/opencode'],\n category: 'agent-specific',\n },\n {\n id: 'copilot',\n name: 'GitHub Copilot',\n projectSkillPath: '.github/skills',\n globalSkillPath: '~/.copilot/skills',\n configFiles: ['.github/copilot-instructions.md'],\n configDirs: [],\n category: 'agent-specific',\n aliases: ['github-copilot'],\n },\n {\n id: 'windsurf',\n name: 'Windsurf',\n projectSkillPath: '.windsurf/skills',\n globalSkillPath: '~/.codeium/windsurf/skills',\n configFiles: ['.windsurfrules'],\n configDirs: ['.windsurf'],\n category: 'agent-specific',\n },\n {\n id: 'gemini-cli',\n name: 'Gemini CLI',\n projectSkillPath: '.gemini/skills',\n globalSkillPath: '~/.gemini/skills',\n configFiles: ['GEMINI.md'],\n configDirs: ['.gemini'],\n category: 'agent-specific',\n aliases: ['gemini'],\n },\n {\n id: 'roo',\n name: 'Roo Code',\n projectSkillPath: '.roo/skills',\n globalSkillPath: '~/.roo/skills',\n configFiles: ['.roo/rules'],\n configDirs: ['.roo'],\n category: 'agent-specific',\n aliases: ['roo-code'],\n },\n {\n id: 'goose',\n name: 'Goose',\n projectSkillPath: '.goose/skills',\n globalSkillPath: '~/.config/goose/skills',\n configFiles: [],\n configDirs: ['.goose'],\n category: 'agent-specific',\n },\n {\n id: 'junie',\n name: 'JetBrains Junie',\n projectSkillPath: '.junie/skills',\n globalSkillPath: '~/.junie/skills',\n configFiles: ['.junie/guidelines.md'],\n configDirs: ['.junie'],\n category: 'agent-specific',\n },\n {\n id: 'aider',\n name: 'Aider',\n projectSkillPath: '.aider/skills',\n globalSkillPath: '~/.aider/skills',\n configFiles: ['.aider.conf.yml'],\n configDirs: ['.aider'],\n category: 'agent-specific',\n },\n\n // --- Universal agents ---\n {\n id: 'amp',\n name: 'Amp',\n projectSkillPath: '.agents/skills',\n globalSkillPath: '~/.config/agents/skills',\n configFiles: [],\n configDirs: [],\n category: 'universal',\n },\n {\n id: 'cline',\n name: 'Cline',\n projectSkillPath: '.agents/skills',\n globalSkillPath: '~/.agents/skills',\n configFiles: [],\n configDirs: ['.clinerules'],\n category: 'universal',\n },\n {\n id: 'kimi-cli',\n name: 'Kimi Code CLI',\n projectSkillPath: '.agents/skills',\n globalSkillPath: '~/.config/agents/skills',\n configFiles: [],\n configDirs: ['.kimi'],\n category: 'universal',\n },\n {\n id: 'replit',\n name: 'Replit',\n projectSkillPath: '.agents/skills',\n globalSkillPath: '~/.config/agents/skills',\n configFiles: ['.replit'],\n configDirs: [],\n category: 'universal',\n },\n {\n id: 'universal',\n name: 'Universal',\n projectSkillPath: '.agents/skills',\n globalSkillPath: '~/.config/agents/skills',\n configFiles: [],\n configDirs: [],\n category: 'universal',\n },\n\n // --- Agent-specific (simple pattern) ---\n {\n id: 'adal',\n name: 'AdaL',\n projectSkillPath: '.adal/skills',\n globalSkillPath: '~/.adal/skills',\n configFiles: [],\n configDirs: ['.adal'],\n category: 'agent-specific',\n },\n {\n id: 'augment',\n name: 'Augment',\n projectSkillPath: '.augment/skills',\n globalSkillPath: '~/.augment/skills',\n configFiles: [],\n configDirs: ['.augment'],\n category: 'agent-specific',\n },\n {\n id: 'codebuddy',\n name: 'CodeBuddy',\n projectSkillPath: '.codebuddy/skills',\n globalSkillPath: '~/.codebuddy/skills',\n configFiles: [],\n configDirs: ['.codebuddy'],\n category: 'agent-specific',\n },\n {\n id: 'command-code',\n name: 'Command Code',\n projectSkillPath: '.commandcode/skills',\n globalSkillPath: '~/.commandcode/skills',\n configFiles: [],\n configDirs: ['.commandcode'],\n category: 'agent-specific',\n },\n {\n id: 'continue',\n name: 'Continue',\n projectSkillPath: '.continue/skills',\n globalSkillPath: '~/.continue/skills',\n configFiles: [],\n configDirs: ['.continue'],\n category: 'agent-specific',\n },\n {\n id: 'crush',\n name: 'Crush',\n projectSkillPath: '.crush/skills',\n globalSkillPath: '~/.config/crush/skills',\n configFiles: [],\n configDirs: ['.crush'],\n category: 'agent-specific',\n },\n {\n id: 'iflow-cli',\n name: 'iFlow CLI',\n projectSkillPath: '.iflow/skills',\n globalSkillPath: '~/.iflow/skills',\n configFiles: [],\n configDirs: ['.iflow'],\n category: 'agent-specific',\n },\n {\n id: 'kilo',\n name: 'Kilo Code',\n projectSkillPath: '.kilocode/skills',\n globalSkillPath: '~/.kilocode/skills',\n configFiles: [],\n configDirs: ['.kilocode'],\n category: 'agent-specific',\n },\n {\n id: 'kiro-cli',\n name: 'Kiro CLI',\n projectSkillPath: '.kiro/skills',\n globalSkillPath: '~/.kiro/skills',\n configFiles: [],\n configDirs: ['.kiro'],\n category: 'agent-specific',\n },\n {\n id: 'kode',\n name: 'Kode',\n projectSkillPath: '.kode/skills',\n globalSkillPath: '~/.kode/skills',\n configFiles: [],\n configDirs: ['.kode'],\n category: 'agent-specific',\n },\n {\n id: 'mcpjam',\n name: 'MCPJam',\n projectSkillPath: '.mcpjam/skills',\n globalSkillPath: '~/.mcpjam/skills',\n configFiles: [],\n configDirs: ['.mcpjam'],\n category: 'agent-specific',\n },\n {\n id: 'mistral-vibe',\n name: 'Mistral Vibe',\n projectSkillPath: '.vibe/skills',\n globalSkillPath: '~/.vibe/skills',\n configFiles: [],\n configDirs: ['.vibe'],\n category: 'agent-specific',\n },\n {\n id: 'mux',\n name: 'Mux',\n projectSkillPath: '.mux/skills',\n globalSkillPath: '~/.mux/skills',\n configFiles: [],\n configDirs: ['.mux'],\n category: 'agent-specific',\n },\n {\n id: 'neovate',\n name: 'Neovate',\n projectSkillPath: '.neovate/skills',\n globalSkillPath: '~/.neovate/skills',\n configFiles: [],\n configDirs: ['.neovate'],\n category: 'agent-specific',\n },\n {\n id: 'openhands',\n name: 'OpenHands',\n projectSkillPath: '.openhands/skills',\n globalSkillPath: '~/.openhands/skills',\n configFiles: [],\n configDirs: ['.openhands'],\n category: 'agent-specific',\n },\n {\n id: 'pochi',\n name: 'Pochi',\n projectSkillPath: '.pochi/skills',\n globalSkillPath: '~/.pochi/skills',\n configFiles: [],\n configDirs: ['.pochi'],\n category: 'agent-specific',\n },\n {\n id: 'qoder',\n name: 'Qoder',\n projectSkillPath: '.qoder/skills',\n globalSkillPath: '~/.qoder/skills',\n configFiles: [],\n configDirs: ['.qoder'],\n category: 'agent-specific',\n },\n {\n id: 'qwen-code',\n name: 'Qwen Code',\n projectSkillPath: '.qwen/skills',\n globalSkillPath: '~/.qwen/skills',\n configFiles: [],\n configDirs: ['.qwen'],\n category: 'agent-specific',\n },\n {\n id: 'trae',\n name: 'Trae',\n projectSkillPath: '.trae/skills',\n globalSkillPath: '~/.trae/skills',\n configFiles: [],\n configDirs: ['.trae'],\n category: 'agent-specific',\n },\n {\n id: 'trae-cn',\n name: 'Trae CN',\n projectSkillPath: '.trae/skills',\n globalSkillPath: '~/.trae-cn/skills',\n configFiles: [],\n configDirs: ['.trae-cn'],\n category: 'agent-specific',\n },\n {\n id: 'zencoder',\n name: 'Zencoder',\n projectSkillPath: '.zencoder/skills',\n globalSkillPath: '~/.zencoder/skills',\n configFiles: [],\n configDirs: ['.zencoder'],\n category: 'agent-specific',\n },\n\n // --- Agent-specific (unusual paths) ---\n {\n id: 'antigravity',\n name: 'Antigravity',\n projectSkillPath: '.agent/skills',\n globalSkillPath: '~/.gemini/antigravity/skills',\n configFiles: [],\n configDirs: ['.gemini/antigravity'],\n category: 'agent-specific',\n },\n {\n id: 'cortex',\n name: 'Cortex Code',\n projectSkillPath: '.cortex/skills',\n globalSkillPath: '~/.snowflake/cortex/skills',\n configFiles: [],\n configDirs: ['.cortex'],\n category: 'agent-specific',\n },\n {\n id: 'droid',\n name: 'Droid',\n projectSkillPath: '.factory/skills',\n globalSkillPath: '~/.factory/skills',\n configFiles: [],\n configDirs: ['.factory'],\n category: 'agent-specific',\n },\n {\n id: 'openclaw',\n name: 'OpenClaw',\n projectSkillPath: 'skills',\n globalSkillPath: '~/.openclaw/skills',\n configFiles: [],\n configDirs: ['.openclaw'],\n category: 'agent-specific',\n },\n {\n id: 'pi',\n name: 'Pi',\n projectSkillPath: '.pi/skills',\n globalSkillPath: '~/.pi/agent/skills',\n configFiles: [],\n configDirs: ['.pi'],\n category: 'agent-specific',\n },\n]\n\nexport const AGENT_MAP = new Map(AGENT_DEFINITIONS.map((a) => [a.id, a]))\n","export type ComposableConfig = {\n packageName: string\n content: string\n sections?: string[]\n order: number\n}\n\nexport type ComposedResult = {\n content: string\n sources: string[]\n}\n\nconst SECTION_MARKER_PREFIX = '## From:'\nconst SECTION_MARKER_REGEX = /^## From: .+$/m\nconst SECTION_MARKER_REGEX_GLOBAL = /^## From: .+$/gm\n\n/**\n * Compose multiple agent configs into a single layered config.\n * Lower order = base config, higher order = overlay.\n * Identical lines from base configs are removed when they also appear in an overlay.\n */\nexport function composeConfigs(configs: ComposableConfig[]): ComposedResult {\n if (configs.length === 0) {\n return { content: '', sources: [] }\n }\n\n if (configs.length === 1) {\n const config = configs[0]!\n return {\n content: `${SECTION_MARKER_PREFIX} ${config.packageName}\\n\\n${config.content.trim()}`,\n sources: [config.packageName],\n }\n }\n\n const sorted = [...configs].sort((a, b) => a.order - b.order)\n\n // Collect lines from each config, tracking which overlay lines should override base lines\n const overlayLines = new Set<string>()\n for (const config of sorted.slice(1)) {\n for (const line of config.content.split('\\n')) {\n const trimmed = line.trim()\n if (trimmed.length > 0) {\n overlayLines.add(trimmed)\n }\n }\n }\n\n const sections: string[] = []\n\n for (const config of sorted) {\n const isBase = config === sorted[0]\n let lines = config.content.split('\\n')\n\n if (isBase) {\n // Remove lines from base that are duplicated in overlays\n lines = lines.filter((line) => {\n const trimmed = line.trim()\n if (trimmed.length === 0) return true\n return !overlayLines.has(trimmed)\n })\n }\n\n const body = lines.join('\\n').trim()\n if (body.length > 0) {\n sections.push(`${SECTION_MARKER_PREFIX} ${config.packageName}\\n\\n${body}`)\n }\n }\n\n return {\n content: sections.join('\\n\\n'),\n sources: sorted.map((c) => c.packageName),\n }\n}\n\n/**\n * Check whether a config file was produced by composition (contains section markers).\n */\nexport function isComposedConfig(content: string): boolean {\n return SECTION_MARKER_REGEX.test(content)\n}\n\n/**\n * Parse an existing composed config back into its constituent sections.\n */\nexport function parseComposedSections(\n content: string\n): Array<{ packageName: string; content: string }> {\n const parts = content.split(SECTION_MARKER_REGEX_GLOBAL)\n const markers = content.match(SECTION_MARKER_REGEX_GLOBAL) ?? []\n\n const sections: Array<{ packageName: string; content: string }> = []\n\n for (let i = 0; i < markers.length; i++) {\n const marker = markers[i]!\n const packageName = marker.replace(`${SECTION_MARKER_PREFIX} `, '').trim()\n const body = (parts[i + 1] ?? '').trim()\n\n if (packageName && body.length > 0) {\n sections.push({ packageName, content: body })\n }\n }\n\n return sections\n}\n","import { AGENT_MAP } from './agents/definitions'\nimport type { AgentId } from './types'\n\nexport type TranslatedConfig = {\n agentId: AgentId\n filePath: string\n content: string\n}\n\ntype ConfigTranslator = {\n agentId: AgentId\n filePath: string | ((name: string) => string)\n transform: (content: string, name: string) => string\n}\n\nconst markdownPassthrough = (content: string, _name: string) => content\n\nconst CONFIG_TRANSLATORS: ConfigTranslator[] = [\n {\n agentId: 'claude-code',\n filePath: 'CLAUDE.md',\n transform: markdownPassthrough,\n },\n {\n agentId: 'claude-cowork',\n filePath: 'CLAUDE.md',\n transform: markdownPassthrough,\n },\n {\n agentId: 'cursor',\n filePath: '.cursorrules',\n transform: markdownPassthrough,\n },\n {\n agentId: 'codex',\n filePath: 'AGENTS.md',\n transform: markdownPassthrough,\n },\n {\n agentId: 'windsurf',\n filePath: '.windsurfrules',\n transform: markdownPassthrough,\n },\n {\n agentId: 'copilot',\n filePath: '.github/copilot-instructions.md',\n transform: markdownPassthrough,\n },\n {\n agentId: 'gemini-cli',\n filePath: 'GEMINI.md',\n transform: markdownPassthrough,\n },\n {\n agentId: 'roo',\n filePath: (name: string) => `.roo/rules/${name}.md`,\n transform: markdownPassthrough,\n },\n {\n agentId: 'goose',\n filePath: '.goose/config.yaml',\n transform: (content: string, _name: string) => {\n const escaped = content.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"')\n return `instructions: \"${escaped}\"\\n`\n },\n },\n {\n agentId: 'junie',\n filePath: '.junie/guidelines.md',\n transform: markdownPassthrough,\n },\n {\n agentId: 'aider',\n filePath: '.aider.conf.yml',\n transform: (_content: string, _name: string) => {\n return `read:\\n - AGENTS.md\\n`\n },\n },\n // Agents with specific config formats\n {\n agentId: 'cline',\n filePath: (name: string) => `.clinerules/${name}.md`,\n transform: markdownPassthrough,\n },\n {\n agentId: 'continue',\n filePath: '.continue/config.yaml',\n transform: markdownPassthrough,\n },\n {\n agentId: 'replit',\n filePath: '.replit',\n transform: markdownPassthrough,\n },\n]\n\n/**\n * Default fallback: for agents without a specific translator, write\n * markdown content to AGENTS.md (the universal convention).\n */\nfunction getDefaultFilePath(agentId: AgentId, name: string): string {\n const agent = AGENT_MAP.get(agentId)\n if (!agent) return `${name}.md`\n\n // Universal agents use the AGENTS.md convention\n if (agent.category === 'universal') return 'AGENTS.md'\n\n // Agent-specific without a translator — use AGENTS.md in their config dir\n const primaryDir = agent.configDirs[0]\n return primaryDir ? `${primaryDir}/AGENTS.md` : 'AGENTS.md'\n}\n\nexport function translateConfig(\n content: string,\n name: string,\n targetAgents: AgentId[]\n): TranslatedConfig[] {\n return targetAgents.map((agentId) => {\n const translator = CONFIG_TRANSLATORS.find((t) => t.agentId === agentId)\n\n if (translator) {\n const filePath =\n typeof translator.filePath === 'function' ? translator.filePath(name) : translator.filePath\n return {\n agentId,\n filePath,\n content: translator.transform(content, name),\n }\n }\n\n // Default fallback: markdown passthrough\n return {\n agentId,\n filePath: getDefaultFilePath(agentId, name),\n content: markdownPassthrough(content, name),\n }\n })\n}\n\nexport function getConfigFilePath(agentId: AgentId, name: string): string | null {\n const translator = CONFIG_TRANSLATORS.find((t) => t.agentId === agentId)\n if (translator) {\n return typeof translator.filePath === 'function'\n ? translator.filePath(name)\n : translator.filePath\n }\n // Fallback for agents without explicit translators\n return getDefaultFilePath(agentId, name)\n}\n","import { existsSync, readdirSync, statSync } from 'node:fs'\nimport { join } from 'node:path'\nimport { AGENT_DEFINITIONS } from './agents/definitions'\nimport type { AgentId } from './types'\n\nexport type DetectedFileType = 'SKILL' | 'AGENT_CONFIG' | 'PLUGIN' | 'SCRIPT' | 'PROMPT'\n\nexport type DetectedAgent = {\n id: AgentId\n name: string\n configPath: string\n}\n\nexport type ScannedFile = {\n path: string\n agentId: AgentId\n type: 'skill' | 'config' | 'rules'\n detectedType: DetectedFileType\n name: string\n}\n\n/** Agents that should never be auto-detected — only via explicit --agent flag */\nconst NEVER_AUTO_DETECT: ReadonlySet<AgentId> = new Set(['universal'])\n\nexport function detectInstalledAgents(directory: string): DetectedAgent[] {\n const detected: DetectedAgent[] = []\n\n for (const agent of AGENT_DEFINITIONS) {\n if (NEVER_AUTO_DETECT.has(agent.id)) continue\n\n for (const configDir of agent.configDirs) {\n const fullPath = join(directory, configDir)\n if (existsSync(fullPath) && statSync(fullPath).isDirectory()) {\n detected.push({\n id: agent.id,\n name: agent.name,\n configPath: fullPath,\n })\n break\n }\n }\n\n for (const configFile of agent.configFiles) {\n const fullPath = join(directory, configFile)\n if (existsSync(fullPath) && statSync(fullPath).isFile()) {\n const alreadyDetected = detected.some((d) => d.id === agent.id)\n if (!alreadyDetected) {\n detected.push({\n id: agent.id,\n name: agent.name,\n configPath: fullPath,\n })\n }\n break\n }\n }\n }\n\n return detected\n}\n\n/**\n * Detect agents installed globally by checking home directory config paths.\n * Checks both project-style and global paths, deduplicating results.\n */\nexport function detectGlobalAgents(homeDir: string): DetectedAgent[] {\n const detected: DetectedAgent[] = []\n const seen = new Set<AgentId>()\n\n for (const agent of AGENT_DEFINITIONS) {\n if (NEVER_AUTO_DETECT.has(agent.id)) continue\n if (seen.has(agent.id)) continue\n\n // Check global config dirs (e.g. ~/.claude, ~/.cursor)\n for (const configDir of agent.configDirs) {\n const fullPath = join(homeDir, configDir)\n if (existsSync(fullPath) && statSync(fullPath).isDirectory()) {\n detected.push({\n id: agent.id,\n name: agent.name,\n configPath: fullPath,\n })\n seen.add(agent.id)\n break\n }\n }\n\n if (seen.has(agent.id)) continue\n\n // Check global skill path (e.g. ~/.claude/skills)\n const globalSkillPath = agent.globalSkillPath.replace(/^~/, homeDir)\n if (existsSync(globalSkillPath) && statSync(globalSkillPath).isDirectory()) {\n detected.push({\n id: agent.id,\n name: agent.name,\n configPath: globalSkillPath,\n })\n seen.add(agent.id)\n }\n }\n\n return detected\n}\n\nexport function scanForSkillFiles(directory: string): ScannedFile[] {\n const files: ScannedFile[] = []\n\n for (const agent of AGENT_DEFINITIONS) {\n const skillDir = join(directory, agent.projectSkillPath)\n scanSkillDirectory(skillDir, agent.id, files)\n\n for (const configFile of agent.configFiles) {\n const fullPath = join(directory, configFile)\n if (existsSync(fullPath) && statSync(fullPath).isFile()) {\n files.push({\n path: fullPath,\n agentId: agent.id,\n type: 'config',\n detectedType: 'AGENT_CONFIG',\n name: configFile,\n })\n }\n }\n }\n\n return files\n}\n\n/**\n * Scan global skill directories for all detected agents.\n * Checks paths like ~/.claude/skills/, ~/.cursor/skills/, etc.\n */\nexport function scanGlobalSkillFiles(homeDir: string): ScannedFile[] {\n const files: ScannedFile[] = []\n const seenPaths = new Set<string>()\n\n for (const agent of AGENT_DEFINITIONS) {\n if (NEVER_AUTO_DETECT.has(agent.id)) continue\n\n // Check global skill path (e.g. ~/.claude/skills)\n const globalSkillPath = agent.globalSkillPath.replace(/^~/, homeDir)\n scanSkillDirectory(globalSkillPath, agent.id, files, seenPaths)\n\n // Check global config files (e.g. ~/.claude/CLAUDE.md)\n for (const configFile of agent.configFiles) {\n const fullPath = join(homeDir, configFile)\n if (seenPaths.has(fullPath)) continue\n if (existsSync(fullPath) && statSync(fullPath).isFile()) {\n files.push({\n path: fullPath,\n agentId: agent.id,\n type: 'config',\n detectedType: 'AGENT_CONFIG',\n name: configFile,\n })\n seenPaths.add(fullPath)\n }\n }\n\n // Also check config files inside global config dirs (e.g. ~/.codex/AGENTS.md)\n for (const configDir of agent.configDirs) {\n const dirPath = join(homeDir, configDir)\n if (!existsSync(dirPath) || !statSync(dirPath).isDirectory()) continue\n\n for (const configFile of agent.configFiles) {\n const baseName = configFile.split('/').pop() ?? configFile\n const fullPath = join(dirPath, baseName)\n if (seenPaths.has(fullPath)) continue\n if (existsSync(fullPath) && statSync(fullPath).isFile()) {\n files.push({\n path: fullPath,\n agentId: agent.id,\n type: 'config',\n detectedType: 'AGENT_CONFIG',\n name: `${configDir}/${baseName}`,\n })\n seenPaths.add(fullPath)\n }\n }\n }\n }\n\n return files\n}\n\nfunction scanSkillDirectory(\n skillDir: string,\n agentId: AgentId,\n files: ScannedFile[],\n seenPaths?: Set<string>\n): void {\n if (!existsSync(skillDir) || !statSync(skillDir).isDirectory()) return\n\n const entries = readdirSync(skillDir, { withFileTypes: true })\n for (const entry of entries) {\n if (entry.isDirectory()) {\n // Check for SKILL.md inside subdirectory\n const skillMd = join(skillDir, entry.name, 'SKILL.md')\n if (existsSync(skillMd)) {\n if (seenPaths?.has(skillMd)) continue\n files.push({\n path: skillMd,\n agentId,\n type: 'skill',\n detectedType: 'SKILL',\n name: entry.name,\n })\n seenPaths?.add(skillMd)\n }\n // Also check for any .md files in the subdirectory (standalone skills)\n try {\n const subEntries = readdirSync(join(skillDir, entry.name), { withFileTypes: true })\n for (const subEntry of subEntries) {\n if (subEntry.isFile() && subEntry.name.endsWith('.md') && subEntry.name !== 'SKILL.md') {\n const filePath = join(skillDir, entry.name, subEntry.name)\n if (seenPaths?.has(filePath)) continue\n files.push({\n path: filePath,\n agentId,\n type: 'skill',\n detectedType: inferDetectedType(subEntry.name),\n name: `${entry.name}/${subEntry.name.replace(/\\.md$/, '')}`,\n })\n seenPaths?.add(filePath)\n }\n }\n } catch {\n // Permission denied or other read error\n }\n } else if (entry.name.endsWith('.md')) {\n const filePath = join(skillDir, entry.name)\n if (seenPaths?.has(filePath)) continue\n files.push({\n path: filePath,\n agentId,\n type: 'skill',\n detectedType: inferDetectedType(entry.name),\n name: entry.name.replace(/\\.md$/, ''),\n })\n seenPaths?.add(filePath)\n }\n }\n}\n\nexport function inferDetectedType(fileName: string): DetectedFileType {\n const lower = fileName.toLowerCase()\n\n if (lower === 'skill.md') return 'SKILL'\n if (lower === 'prompt.md') return 'PROMPT'\n if (lower === 'plugin.json') return 'PLUGIN'\n if (lower === 'script.json') return 'SCRIPT'\n\n // Agent config files\n const agentConfigPatterns = [\n 'claude.md',\n 'agents.md',\n 'gemini.md',\n '.cursorrules',\n '.windsurfrules',\n 'copilot-instructions.md',\n 'guidelines.md',\n '.aider.conf.yml',\n 'config.yaml',\n '.clinerules',\n '.replit',\n ]\n if (agentConfigPatterns.some((p) => lower.endsWith(p))) return 'AGENT_CONFIG'\n\n // Default to SKILL for .md files in skill directories\n return 'SKILL'\n}\n\nexport function getSkillPlacementPath(\n agentId: AgentId,\n skillName: string,\n scope: 'project' | 'global'\n): string | null {\n const agent = AGENT_DEFINITIONS.find((a) => a.id === agentId)\n if (!agent) return null\n\n const basePath = scope === 'project' ? agent.projectSkillPath : agent.globalSkillPath\n return join(basePath, skillName)\n}\n","import type { CLIOutput } from '@agentver/shared'\nimport ora from 'ora'\n\ntype Spinner = ReturnType<typeof ora>\n\nexport type SpinnerLike = {\n start: () => SpinnerLike\n succeed: (text?: string) => SpinnerLike\n fail: (text?: string) => SpinnerLike\n warn: (text?: string) => SpinnerLike\n info: (text?: string) => SpinnerLike\n stop: () => SpinnerLike\n text: string\n}\n\nconst noopSpinner: SpinnerLike = {\n start() {\n return this\n },\n succeed() {\n return this\n },\n fail() {\n return this\n },\n warn() {\n return this\n },\n info() {\n return this\n },\n stop() {\n return this\n },\n text: '',\n}\n\n/**\n * Check if JSON output mode is active.\n * Reads from process.argv directly since this may be called\n * before Commander parses options.\n */\nexport function isJSONMode(): boolean {\n return process.argv.includes('--json')\n}\n\n/**\n * Output a successful result as JSON to stdout.\n */\nexport function outputSuccess<T>(data: T, warnings?: string[]): void {\n const output: CLIOutput<T> = { success: true, data }\n if (warnings && warnings.length > 0) {\n output.warnings = warnings\n }\n process.stdout.write(`${JSON.stringify(output)}\\n`)\n}\n\n/**\n * Output an error as JSON to stdout.\n */\nexport function outputError(code: string, message: string): void {\n const output: CLIOutput<never> = {\n success: false,\n error: { code, message },\n }\n process.stdout.write(`${JSON.stringify(output)}\\n`)\n}\n\n/**\n * Create an ora spinner that is silent in JSON mode.\n * Returns a no-op spinner interface when --json is active.\n */\nexport function createSpinner(text: string): Spinner | SpinnerLike {\n if (isJSONMode()) {\n return { ...noopSpinner, text }\n }\n return ora(text)\n}\n","import { createHash } from 'node:crypto'\n\nexport function computeSha256FromBuffer(content: Buffer | string): string {\n const hash = createHash('sha256').update(content).digest('base64')\n return `sha256-${hash}`\n}\n\nexport function computeSha256FromFiles(files: Array<{ path: string; content: string }>): string {\n const sorted = [...files].sort((a, b) => a.path.localeCompare(b.path))\n const combined = sorted.map((f) => `${f.path}\\0${f.content}`).join('\\0')\n return computeSha256FromBuffer(combined)\n}\n","import { existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from 'node:fs'\nimport { join } from 'node:path'\nimport type { LockfileV2 } from '@agentver/shared'\nimport { lockfileAnySchema } from '@agentver/shared'\nimport { serialiseDeterministic } from './serialise'\n\nconst LOCKFILE_DIR = '.agentver'\nconst LOCKFILE_FILE = 'lockfile.json'\n\nconst EMPTY_LOCKFILE: LockfileV2 = { version: 2, packages: {} }\n\nfunction getLockfilePath(projectRoot: string): string {\n return join(projectRoot, LOCKFILE_DIR, LOCKFILE_FILE)\n}\n\nfunction migrateV1ToV2(v1: {\n version: 1\n packages: Record<\n string,\n { version: string; resolved: string; integrity: string; agents: string[] }\n >\n}): LockfileV2 {\n const packages: LockfileV2['packages'] = {}\n\n for (const [name, pkg] of Object.entries(v1.packages)) {\n packages[name] = {\n source: {\n type: 'git',\n uri: 'unknown',\n path: '',\n ref: 'unknown',\n commit: 'unknown',\n },\n integrity: pkg.integrity,\n agents: pkg.agents,\n }\n }\n\n return { version: 2, packages }\n}\n\nexport function readLockfile(projectRoot: string): LockfileV2 {\n const lockfilePath = getLockfilePath(projectRoot)\n\n if (!existsSync(lockfilePath)) {\n return EMPTY_LOCKFILE\n }\n\n const raw = readFileSync(lockfilePath, 'utf-8')\n\n let parsed: unknown\n try {\n parsed = JSON.parse(raw)\n } catch {\n return EMPTY_LOCKFILE\n }\n\n const result = lockfileAnySchema.safeParse(parsed)\n if (!result.success) {\n return EMPTY_LOCKFILE\n }\n\n if (result.data.version === 1) {\n const migrated = migrateV1ToV2(result.data)\n writeLockfile(projectRoot, migrated)\n return migrated\n }\n\n return result.data\n}\n\nexport function writeLockfile(projectRoot: string, lockfile: LockfileV2): void {\n const dir = join(projectRoot, LOCKFILE_DIR)\n\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true })\n }\n\n const filePath = getLockfilePath(projectRoot)\n const tmpPath = `${filePath}.tmp`\n writeFileSync(tmpPath, serialiseDeterministic(lockfile))\n renameSync(tmpPath, filePath)\n}\n","import { z } from 'zod'\nimport { manifestV2PackageSchema } from './schemas'\n\n// --- CLI output envelope ---\n\nexport const cliErrorSchema = z.object({\n code: z.string(),\n message: z.string(),\n})\n\nexport type CLIError = z.infer<typeof cliErrorSchema>\n\nexport function createCLIOutputSchema<T extends z.ZodType>(dataSchema: T) {\n return z.object({\n success: z.boolean(),\n data: dataSchema.optional(),\n error: cliErrorSchema.optional(),\n warnings: z.array(z.string()).optional(),\n })\n}\n\nexport type CLIOutput<T> = {\n success: boolean\n data?: T\n error?: CLIError\n warnings?: string[]\n}\n\n// --- Per-command result schemas ---\n\nexport const loginResultSchema = z.object({\n user: z.object({\n id: z.string(),\n email: z.string(),\n name: z.string(),\n }),\n})\n\nexport type LoginResult = z.infer<typeof loginResultSchema>\n\nexport const logoutResultSchema = z.object({\n cleared: z.boolean(),\n})\n\nexport type LogoutResult = z.infer<typeof logoutResultSchema>\n\nexport const whoamiResultSchema = z.object({\n authenticated: z.boolean(),\n user: z\n .object({\n id: z.string(),\n email: z.string(),\n name: z.string(),\n })\n .optional(),\n platform: z.string().optional(),\n organisation: z.string().optional(),\n})\n\nexport type WhoamiResult = z.infer<typeof whoamiResultSchema>\n\nexport const installResultSchema = z.object({\n name: z.string(),\n source: z.object({\n type: z.string(),\n uri: z.string().optional(),\n baseUrl: z.string().optional(),\n }),\n agents: z.array(z.string()),\n path: z.string(),\n scope: z.string(),\n audit: z.object({\n passed: z.boolean(),\n findings: z.number(),\n blockers: z.number(),\n }),\n})\n\nexport type InstallResult = z.infer<typeof installResultSchema>\n\nexport const removeResultSchema = z.object({\n name: z.string(),\n removed: z.boolean(),\n paths: z.array(z.string()),\n})\n\nexport type RemoveResult = z.infer<typeof removeResultSchema>\n\nexport const updateResultSchema = z.object({\n updated: z.array(\n z.object({\n name: z.string(),\n fromRef: z.string(),\n toRef: z.string(),\n strategy: z.string(),\n })\n ),\n skipped: z.array(\n z.object({\n name: z.string(),\n reason: z.string(),\n })\n ),\n})\n\nexport type UpdateResult = z.infer<typeof updateResultSchema>\n\nexport const listResultSchema = z.object({\n packages: z.record(z.string(), manifestV2PackageSchema),\n})\n\nexport type ListResult = z.infer<typeof listResultSchema>\n\nexport const searchResultSchema = z.object({\n results: z.array(\n z.object({\n name: z.string(),\n description: z.string(),\n type: z.string(),\n source: z.string(),\n url: z.string().optional(),\n })\n ),\n})\n\nexport type SearchResult = z.infer<typeof searchResultSchema>\n\nexport const auditResultSchema = z.object({\n target: z.string(),\n passed: z.boolean(),\n findings: z.array(\n z.object({\n rule: z.string(),\n severity: z.string(),\n file: z.string(),\n line: z.number(),\n evidence: z.string(),\n })\n ),\n})\n\nexport type AuditResult = z.infer<typeof auditResultSchema>\n\nexport const scanResultSchema = z.object({\n agents: z.array(\n z.object({\n id: z.string(),\n name: z.string(),\n paths: z.array(z.string()),\n })\n ),\n skills: z.array(\n z.object({\n name: z.string(),\n path: z.string(),\n type: z.string(),\n })\n ),\n})\n\nexport type ScanResult = z.infer<typeof scanResultSchema>\n\nexport const statusResultSchema = z.object({\n packages: z.array(\n z.object({\n name: z.string(),\n status: z.string(),\n modified: z.boolean(),\n upstream: z.boolean(),\n pinned: z.boolean().optional(),\n })\n ),\n summary: z.object({\n total: z.number(),\n upToDate: z.number(),\n modified: z.number(),\n upstream: z.number(),\n unknown: z.number(),\n }),\n})\n\nexport type StatusResult = z.infer<typeof statusResultSchema>\n\nexport const diffResultSchema = z.object({\n name: z.string(),\n hunks: z.array(\n z.object({\n file: z.string(),\n additions: z.number(),\n deletions: z.number(),\n content: z.string(),\n })\n ),\n})\n\nexport type DiffResult = z.infer<typeof diffResultSchema>\n\nexport const proposeResultSchema = z.object({\n proposalId: z.string(),\n title: z.string(),\n url: z.string(),\n})\n\nexport type ProposeResult = z.infer<typeof proposeResultSchema>\n\nexport const proposalsResultSchema = z.object({\n proposals: z.array(\n z.object({\n id: z.string(),\n title: z.string(),\n status: z.string(),\n author: z.string(),\n packageName: z.string(),\n createdAt: z.string(),\n })\n ),\n})\n\nexport type ProposalsResult = z.infer<typeof proposalsResultSchema>\n\nexport const syncResultSchema = z.object({\n synced: z.number(),\n machineId: z.string(),\n packages: z.array(z.string()),\n})\n\nexport type SyncResult = z.infer<typeof syncResultSchema>\n\nexport const initResultSchema = z.object({\n name: z.string(),\n type: z.string(),\n path: z.string(),\n files: z.array(z.string()),\n})\n\nexport type InitResult = z.infer<typeof initResultSchema>\n\nexport const adoptResultSchema = z.object({\n adopted: z.array(\n z.object({\n name: z.string(),\n path: z.string(),\n type: z.string(),\n agents: z.array(z.string()),\n })\n ),\n skipped: z.array(\n z.object({\n name: z.string(),\n path: z.string(),\n reason: z.string(),\n })\n ),\n})\n\nexport type AdoptResult = z.infer<typeof adoptResultSchema>\n\nexport const infoResultSchema = z.object({\n name: z.string(),\n source: z.object({\n type: z.string(),\n uri: z.string().optional(),\n ref: z.string().optional(),\n commit: z.string().optional(),\n hostname: z.string().optional(),\n }),\n agents: z.array(z.string()),\n installedAt: z.string(),\n modified: z.boolean(),\n integrity: z.string().optional(),\n files: z.object({\n count: z.number(),\n totalSize: z.number(),\n }),\n skill: z\n .object({\n title: z.string(),\n description: z.string(),\n })\n .optional(),\n})\n\nexport type InfoResult = z.infer<typeof infoResultSchema>\n\nexport const doctorCheckSchema = z.object({\n name: z.string(),\n status: z.enum(['pass', 'fail', 'warn']),\n message: z.string(),\n})\n\nexport type DoctorCheck = z.infer<typeof doctorCheckSchema>\n\nexport const doctorResultSchema = z.object({\n checks: z.array(doctorCheckSchema),\n passed: z.number(),\n failed: z.number(),\n warnings: z.number(),\n})\n\nexport type DoctorResult = z.infer<typeof doctorResultSchema>\n","import { z } from 'zod'\nimport { PACKAGE_TYPES, type PackageType } from './constants'\n\n// Canonical list lives in @agentver/agent-definitions/types.ts — kept in sync manually.\n// Not imported directly to avoid pulling node:fs into client bundles via the agent-definitions barrel export.\nconst AGENT_IDS_FOR_SCHEMA = [\n 'adal',\n 'aider',\n 'amp',\n 'antigravity',\n 'augment',\n 'claude-code',\n 'claude-cowork',\n 'cline',\n 'codebuddy',\n 'codex',\n 'command-code',\n 'continue',\n 'copilot',\n 'cortex',\n 'crush',\n 'cursor',\n 'droid',\n 'gemini-cli',\n 'goose',\n 'iflow-cli',\n 'junie',\n 'kilo',\n 'kimi-cli',\n 'kiro-cli',\n 'kode',\n 'mcpjam',\n 'mistral-vibe',\n 'mux',\n 'neovate',\n 'openclaw',\n 'opencode',\n 'openhands',\n 'pi',\n 'pochi',\n 'qoder',\n 'qwen-code',\n 'replit',\n 'roo',\n 'trae',\n 'trae-cn',\n 'universal',\n 'windsurf',\n 'zencoder',\n] as const\n\nconst agentIdEnum = z.enum(AGENT_IDS_FOR_SCHEMA)\n\nexport const skillMetadataSchema = z.object({\n name: z.string().min(1).max(100),\n description: z.string().max(500).optional(),\n version: z.string().regex(/^\\d+\\.\\d+\\.\\d+(-[\\w.]+)?$/, 'Must be valid semver'),\n type: z.enum(PACKAGE_TYPES),\n tags: z.array(z.string().max(50)).max(20).default([]),\n agents: z.array(agentIdEnum).default([]),\n})\n\nexport type SkillMetadata = z.infer<typeof skillMetadataSchema>\n\nconst installedPackageSchema = z.object({\n name: z.string(),\n version: z.string(),\n agents: z.array(z.string()).default([]),\n installedAt: z.string().datetime(),\n})\n\nexport const manifestSchema = z.object({\n version: z.literal(1),\n packages: z.record(z.string(), installedPackageSchema),\n})\n\nexport type Manifest = z.infer<typeof manifestSchema>\n\nconst lockedPackageSchema = z.object({\n version: z.string(),\n resolved: z.string().url(),\n integrity: z.string().regex(/^sha256-/),\n agents: z.array(z.string()),\n})\n\nexport const lockfileSchema = z.object({\n version: z.literal(1),\n packages: z.record(z.string(), lockedPackageSchema),\n})\n\nexport type Lockfile = z.infer<typeof lockfileSchema>\n\n// --- v2 schemas ---\n\nexport const gitSourceSchema = z.object({\n type: z.literal('git'),\n uri: z.string().min(1),\n path: z.string(),\n ref: z.string().min(1),\n commit: z.string().min(7),\n})\n\nexport type GitSource = z.infer<typeof gitSourceSchema>\n\nexport const wellKnownSourceSchema = z.object({\n type: z.literal('well-known'),\n baseUrl: z.string().min(1),\n hostname: z.string().min(1),\n skillName: z.string().min(1),\n})\n\nexport type WellKnownSource = z.infer<typeof wellKnownSourceSchema>\n\nexport const packageSourceSchema = z.discriminatedUnion('type', [\n gitSourceSchema,\n wellKnownSourceSchema,\n])\n\nexport type PackageSource = z.infer<typeof packageSourceSchema>\n\nexport const manifestV2PackageSchema = z.object({\n source: packageSourceSchema,\n agents: z.array(z.string()).default([]),\n installedAt: z.string().datetime(),\n modified: z.boolean().default(false),\n pinned: z.boolean().optional(),\n})\n\nexport type ManifestV2Package = z.infer<typeof manifestV2PackageSchema>\n\nexport const manifestV2Schema = z.object({\n version: z.literal(2),\n packages: z.record(z.string(), manifestV2PackageSchema),\n})\n\nexport type ManifestV2 = z.infer<typeof manifestV2Schema>\n\nexport const lockfileV2PackageSchema = z.object({\n source: packageSourceSchema,\n integrity: z.string().regex(/^sha256-/),\n agents: z.array(z.string()),\n})\n\nexport type LockfileV2Package = z.infer<typeof lockfileV2PackageSchema>\n\nexport const lockfileV2Schema = z.object({\n version: z.literal(2),\n packages: z.record(z.string(), lockfileV2PackageSchema),\n})\n\nexport type LockfileV2 = z.infer<typeof lockfileV2Schema>\n\nexport const manifestAnySchema = z.discriminatedUnion('version', [manifestSchema, manifestV2Schema])\n\nexport type ManifestAny = z.infer<typeof manifestAnySchema>\n\nexport const lockfileAnySchema = z.discriminatedUnion('version', [lockfileSchema, lockfileV2Schema])\n\nexport type LockfileAny = z.infer<typeof lockfileAnySchema>\n\n// --- Package structure ---\n\nexport const packageStructureSchema = z.object({\n type: z.enum(PACKAGE_TYPES),\n entryFile: z.string(),\n requiredFiles: z.array(z.string()).default([]),\n optionalDirs: z.array(z.string()).default([]),\n})\n\nexport type PackageStructure = z.infer<typeof packageStructureSchema>\n\nexport const PACKAGE_STRUCTURES: Record<PackageType, PackageStructure> = {\n SKILL: {\n type: 'SKILL',\n entryFile: 'SKILL.md',\n requiredFiles: ['SKILL.md'],\n optionalDirs: ['scripts', 'references', 'assets'],\n },\n AGENT_CONFIG: {\n type: 'AGENT_CONFIG',\n entryFile: 'CLAUDE.md',\n requiredFiles: [],\n optionalDirs: ['rules', 'hooks'],\n },\n PLUGIN: {\n type: 'PLUGIN',\n entryFile: 'plugin.json',\n requiredFiles: ['plugin.json'],\n optionalDirs: ['scripts', 'mcp'],\n },\n SCRIPT: {\n type: 'SCRIPT',\n entryFile: 'script.json',\n requiredFiles: ['script.json'],\n optionalDirs: ['src'],\n },\n PROMPT: {\n type: 'PROMPT',\n entryFile: 'PROMPT.md',\n requiredFiles: ['PROMPT.md'],\n optionalDirs: ['variants'],\n },\n}\n\n// --- Entry file schemas per package type ---\n\nexport const skillFrontmatterSchema = z.object({\n name: z.string().min(1),\n description: z.string().min(1),\n version: z\n .string()\n .regex(/^\\d+\\.\\d+\\.\\d+(-[\\w.]+)?$/)\n .optional(),\n license: z.string().optional(),\n compatibility: z.array(z.string()).optional(),\n metadata: z.record(z.string(), z.string()).optional(),\n 'allowed-tools': z.array(z.string()).optional(),\n})\n\nexport type SkillFrontmatter = z.infer<typeof skillFrontmatterSchema>\n\nexport const AGENT_CONFIG_FILES = [\n 'CLAUDE.md',\n 'AGENTS.md',\n '.cursorrules',\n '.windsurfrules',\n '.github/copilot-instructions.md',\n '.goose/config.yaml',\n '.roo/rules',\n '.cursor/rules',\n '.junie/guidelines.md',\n] as const\n\nexport type AgentConfigFile = (typeof AGENT_CONFIG_FILES)[number]\n\nexport const pluginManifestSchema = z.object({\n name: z.string().min(1),\n description: z.string().optional(),\n version: z\n .string()\n .regex(/^\\d+\\.\\d+\\.\\d+(-[\\w.]+)?$/)\n .optional(),\n tools: z\n .array(\n z.object({\n name: z.string(),\n description: z.string().optional(),\n command: z.string().optional(),\n })\n )\n .optional(),\n hooks: z.record(z.string(), z.string()).optional(),\n rules: z.array(z.string()).optional(),\n mcp: z\n .object({\n serverCommand: z.string(),\n args: z.array(z.string()).optional(),\n })\n .optional(),\n})\n\nexport type PluginManifest = z.infer<typeof pluginManifestSchema>\n\nexport const scriptManifestSchema = z.object({\n name: z.string().min(1),\n description: z.string().optional(),\n version: z\n .string()\n .regex(/^\\d+\\.\\d+\\.\\d+(-[\\w.]+)?$/)\n .optional(),\n runtime: z.enum(['node', 'bun', 'python', 'bash']),\n entryPoint: z.string().min(1),\n args: z.array(z.string()).optional(),\n})\n\nexport type ScriptManifest = z.infer<typeof scriptManifestSchema>\n\nexport const promptFrontmatterSchema = z.object({\n name: z.string().min(1),\n description: z.string().min(1),\n version: z\n .string()\n .regex(/^\\d+\\.\\d+\\.\\d+(-[\\w.]+)?$/)\n .optional(),\n category: z.string().optional(),\n variables: z\n .array(\n z.object({\n name: z.string(),\n description: z.string().optional(),\n required: z.boolean().optional(),\n default: z.string().optional(),\n })\n )\n .optional(),\n})\n\nexport type PromptFrontmatter = z.infer<typeof promptFrontmatterSchema>\n\n// --- File manifest ---\n\nexport const fileManifestEntrySchema = z.object({\n path: z.string(),\n size: z.number().int().nonnegative(),\n hash: z.string(),\n contentType: z.string().default('text/plain'),\n})\n\nexport type FileManifestEntry = z.infer<typeof fileManifestEntrySchema>\n\nexport const fileManifestSchema = z.object({\n files: z.array(fileManifestEntrySchema),\n totalSize: z.number().int().nonnegative(),\n entryFile: z.string(),\n packageType: z.enum(PACKAGE_TYPES),\n})\n\nexport type FileManifest = z.infer<typeof fileManifestSchema>\n\n// --- Agent config ---\n\nexport const agentConfigSchema = z.object({\n name: z.string().min(1),\n description: z.string().min(1),\n targetAgents: z.array(agentIdEnum).min(1),\n composable: z.boolean().default(false),\n baseConfig: z.string().optional(),\n sections: z.array(z.string()).optional(),\n})\n\nexport type AgentConfig = z.infer<typeof agentConfigSchema>\n","export const PACKAGE_TYPES = ['SKILL', 'AGENT_CONFIG', 'PLUGIN', 'SCRIPT', 'PROMPT'] as const\nexport type PackageType = (typeof PACKAGE_TYPES)[number]\n\nexport const VISIBILITY_LEVELS = ['PUBLIC', 'PRIVATE', 'TEAM'] as const\nexport type VisibilityLevel = (typeof VISIBILITY_LEVELS)[number]\n\nexport const WARNING_NO_LICENCE =\n 'No licence specified. Consider adding an SPDX licence identifier.'\n","export type AgentverErrorCode =\n | 'NOT_FOUND'\n | 'UNAUTHORISED'\n | 'FORBIDDEN'\n | 'CONFLICT'\n | 'VALIDATION_ERROR'\n | 'INTERNAL_ERROR'\n | 'RATE_LIMITED'\n | 'STORAGE_ERROR'\n | 'INTEGRITY_ERROR'\n\nexport class AgentverError extends Error {\n readonly code: AgentverErrorCode\n\n constructor(code: AgentverErrorCode, message: string) {\n super(message)\n this.name = 'AgentverError'\n this.code = code\n }\n}\n","export function urlToObject(url) {\n return {\n href: url.href,\n protocol: url.protocol,\n username: url.username,\n password: url.password,\n host: url.host,\n hostname: url.hostname,\n port: url.port,\n pathname: url.pathname,\n search: url.search,\n searchParams: [...url.searchParams].map(([key, value]) => ({ key, value })),\n hash: url.hash,\n origin: url.origin,\n };\n}\n","export const prettyLogStyles = {\n reset: [0, 0],\n bold: [1, 22],\n dim: [2, 22],\n italic: [3, 23],\n underline: [4, 24],\n overline: [53, 55],\n inverse: [7, 27],\n hidden: [8, 28],\n strikethrough: [9, 29],\n black: [30, 39],\n red: [31, 39],\n green: [32, 39],\n yellow: [33, 39],\n blue: [34, 39],\n magenta: [35, 39],\n cyan: [36, 39],\n white: [37, 39],\n blackBright: [90, 39],\n redBright: [91, 39],\n greenBright: [92, 39],\n yellowBright: [93, 39],\n blueBright: [94, 39],\n magentaBright: [95, 39],\n cyanBright: [96, 39],\n whiteBright: [97, 39],\n bgBlack: [40, 49],\n bgRed: [41, 49],\n bgGreen: [42, 49],\n bgYellow: [43, 49],\n bgBlue: [44, 49],\n bgMagenta: [45, 49],\n bgCyan: [46, 49],\n bgWhite: [47, 49],\n bgBlackBright: [100, 49],\n bgRedBright: [101, 49],\n bgGreenBright: [102, 49],\n bgYellowBright: [103, 49],\n bgBlueBright: [104, 49],\n bgMagentaBright: [105, 49],\n bgCyanBright: [106, 49],\n bgWhiteBright: [107, 49],\n};\n","import { prettyLogStyles } from \"./prettyLogStyles.js\";\nexport function formatTemplate(settings, template, values, hideUnsetPlaceholder = false) {\n const templateString = String(template);\n const ansiColorWrap = (placeholderValue, code) => `\\u001b[${code[0]}m${placeholderValue}\\u001b[${code[1]}m`;\n const styleWrap = (value, style) => {\n if (style != null && typeof style === \"string\") {\n return ansiColorWrap(value, prettyLogStyles[style]);\n }\n else if (style != null && Array.isArray(style)) {\n return style.reduce((prevValue, thisStyle) => styleWrap(prevValue, thisStyle), value);\n }\n else {\n if (style != null && style[value.trim()] != null) {\n return styleWrap(value, style[value.trim()]);\n }\n else if (style != null && style[\"*\"] != null) {\n return styleWrap(value, style[\"*\"]);\n }\n else {\n return value;\n }\n }\n };\n const defaultStyle = null;\n return templateString.replace(/{{(.+?)}}/g, (_, placeholder) => {\n const value = values[placeholder] != null ? String(values[placeholder]) : hideUnsetPlaceholder ? \"\" : _;\n return settings.stylePrettyLogs\n ? styleWrap(value, settings?.prettyLogStyles?.[placeholder] ?? defaultStyle) + ansiColorWrap(\"\", prettyLogStyles.reset)\n : value;\n });\n}\n","export function formatNumberAddZeros(value, digits = 2, addNumber = 0) {\n if (value != null && isNaN(value)) {\n return \"\";\n }\n value = value != null ? value + addNumber : value;\n return digits === 2\n ? value == null\n ? \"--\"\n : value < 10\n ? \"0\" + value\n : value.toString()\n : value == null\n ? \"---\"\n : value < 10\n ? \"00\" + value\n : value < 100\n ? \"0\" + value\n : value.toString();\n}\n","import { formatTemplate } from \"../formatTemplate.js\";\nimport { formatNumberAddZeros } from \"../formatNumberAddZeros.js\";\nexport function buildPrettyMeta(settings, meta) {\n if (meta == null) {\n return {\n text: \"\",\n template: settings.prettyLogTemplate,\n placeholders: {},\n };\n }\n let template = settings.prettyLogTemplate;\n const placeholderValues = {};\n if (template.includes(\"{{yyyy}}.{{mm}}.{{dd}} {{hh}}:{{MM}}:{{ss}}:{{ms}}\")) {\n template = template.replace(\"{{yyyy}}.{{mm}}.{{dd}} {{hh}}:{{MM}}:{{ss}}:{{ms}}\", \"{{dateIsoStr}}\");\n }\n else {\n if (settings.prettyLogTimeZone === \"UTC\") {\n placeholderValues[\"yyyy\"] = meta.date?.getUTCFullYear() ?? \"----\";\n placeholderValues[\"mm\"] = formatNumberAddZeros(meta.date?.getUTCMonth(), 2, 1);\n placeholderValues[\"dd\"] = formatNumberAddZeros(meta.date?.getUTCDate(), 2);\n placeholderValues[\"hh\"] = formatNumberAddZeros(meta.date?.getUTCHours(), 2);\n placeholderValues[\"MM\"] = formatNumberAddZeros(meta.date?.getUTCMinutes(), 2);\n placeholderValues[\"ss\"] = formatNumberAddZeros(meta.date?.getUTCSeconds(), 2);\n placeholderValues[\"ms\"] = formatNumberAddZeros(meta.date?.getUTCMilliseconds(), 3);\n }\n else {\n placeholderValues[\"yyyy\"] = meta.date?.getFullYear() ?? \"----\";\n placeholderValues[\"mm\"] = formatNumberAddZeros(meta.date?.getMonth(), 2, 1);\n placeholderValues[\"dd\"] = formatNumberAddZeros(meta.date?.getDate(), 2);\n placeholderValues[\"hh\"] = formatNumberAddZeros(meta.date?.getHours(), 2);\n placeholderValues[\"MM\"] = formatNumberAddZeros(meta.date?.getMinutes(), 2);\n placeholderValues[\"ss\"] = formatNumberAddZeros(meta.date?.getSeconds(), 2);\n placeholderValues[\"ms\"] = formatNumberAddZeros(meta.date?.getMilliseconds(), 3);\n }\n }\n const dateInSettingsTimeZone = settings.prettyLogTimeZone === \"UTC\" ? meta.date : meta.date != null ? new Date(meta.date.getTime() - meta.date.getTimezoneOffset() * 60000) : undefined;\n placeholderValues[\"rawIsoStr\"] = dateInSettingsTimeZone?.toISOString() ?? \"\";\n placeholderValues[\"dateIsoStr\"] = dateInSettingsTimeZone?.toISOString().replace(\"T\", \" \").replace(\"Z\", \"\") ?? \"\";\n placeholderValues[\"logLevelName\"] = meta.logLevelName;\n placeholderValues[\"fileNameWithLine\"] = meta.path?.fileNameWithLine ?? \"\";\n placeholderValues[\"filePathWithLine\"] = meta.path?.filePathWithLine ?? \"\";\n placeholderValues[\"fullFilePath\"] = meta.path?.fullFilePath ?? \"\";\n let parentNamesString = settings.parentNames?.join(settings.prettyErrorParentNamesSeparator);\n parentNamesString = parentNamesString != null && meta.name != null ? parentNamesString + settings.prettyErrorParentNamesSeparator : undefined;\n const combinedName = meta.name != null || parentNamesString != null ? `${parentNamesString ?? \"\"}${meta.name ?? \"\"}` : \"\";\n placeholderValues[\"name\"] = combinedName;\n placeholderValues[\"nameWithDelimiterPrefix\"] = combinedName.length > 0 ? settings.prettyErrorLoggerNameDelimiter + combinedName : \"\";\n placeholderValues[\"nameWithDelimiterSuffix\"] = combinedName.length > 0 ? combinedName + settings.prettyErrorLoggerNameDelimiter : \"\";\n if (settings.overwrite?.addPlaceholders != null) {\n settings.overwrite.addPlaceholders(meta, placeholderValues);\n }\n return {\n text: formatTemplate(settings, template, placeholderValues),\n template,\n placeholders: placeholderValues,\n };\n}\n","const DEFAULT_IGNORE_PATTERNS = [\n /(?:^|[\\\\/])node_modules[\\\\/].*tslog/i,\n /(?:^|[\\\\/])deps[\\\\/].*tslog/i,\n /tslog[\\\\/]+src[\\\\/]+internal[\\\\/]/i,\n /tslog[\\\\/]+src[\\\\/]BaseLogger/i,\n /tslog[\\\\/]+src[\\\\/]index/i,\n];\nexport function splitStackLines(error) {\n const stack = typeof error?.stack === \"string\" ? error.stack : undefined;\n if (stack == null || stack.length === 0) {\n return [];\n }\n return stack.split(\"\\n\").map((line) => line.trimEnd());\n}\nexport function sanitizeStackLines(lines) {\n return lines.filter((line) => line.length > 0 && !/^\\s*Error\\b/.test(line));\n}\nexport function toStackFrames(lines, parseLine) {\n const frames = [];\n for (const line of lines) {\n const frame = parseLine(line);\n if (frame != null) {\n frames.push(frame);\n }\n }\n return frames;\n}\nexport function findFirstExternalFrameIndex(frames, ignorePatterns = DEFAULT_IGNORE_PATTERNS) {\n for (let index = 0; index < frames.length; index += 1) {\n const frame = frames[index];\n const filePathCandidate = frame.filePath ?? \"\";\n const fullPathCandidate = frame.fullFilePath ?? \"\";\n if (!ignorePatterns.some((pattern) => pattern.test(filePathCandidate) || pattern.test(fullPathCandidate))) {\n return index;\n }\n }\n return 0;\n}\nexport function getFrameAt(frames, index) {\n if (index < 0 || index >= frames.length) {\n return undefined;\n }\n return frames[index];\n}\nexport function getCleanStackLines(error) {\n return sanitizeStackLines(splitStackLines(error));\n}\nexport function buildStackTrace(error, parseLine) {\n return toStackFrames(getCleanStackLines(error), parseLine);\n}\nexport function isIgnorableFrame(frame, ignorePatterns) {\n const filePathCandidate = frame.filePath ?? \"\";\n const fullPathCandidate = frame.fullFilePath ?? \"\";\n return ignorePatterns.some((pattern) => pattern.test(filePathCandidate) || pattern.test(fullPathCandidate));\n}\nexport function clampIndex(index, maxExclusive) {\n if (index < 0) {\n return 0;\n }\n if (index >= maxExclusive) {\n return Math.max(0, maxExclusive - 1);\n }\n return index;\n}\nexport function pickCallerStackFrame(error, parseLine, options = {}) {\n const lines = getCleanStackLines(error);\n const frames = toStackFrames(lines, parseLine);\n if (frames.length === 0) {\n return undefined;\n }\n const ignorePatterns = options.ignorePatterns ?? DEFAULT_IGNORE_PATTERNS;\n const autoIndex = findFirstExternalFrameIndex(frames, ignorePatterns);\n const resolvedIndex = options.stackDepthLevel != null ? options.stackDepthLevel : autoIndex;\n return getFrameAt(frames, clampIndex(resolvedIndex, frames.length));\n}\nexport function getDefaultIgnorePatterns() {\n return [...DEFAULT_IGNORE_PATTERNS];\n}\n","import { buildStackTrace } from \"./stackTrace.js\";\nconst DEFAULT_CAUSE_DEPTH = 5;\nexport function collectErrorCauses(error, options = {}) {\n const maxDepth = options.maxDepth ?? DEFAULT_CAUSE_DEPTH;\n const causes = [];\n const visited = new Set();\n let current = error;\n let depth = 0;\n while (current != null && depth < maxDepth) {\n const cause = current?.cause;\n if (cause == null || visited.has(cause)) {\n break;\n }\n visited.add(cause);\n causes.push(toError(cause));\n current = cause;\n depth += 1;\n }\n return causes;\n}\nexport function toError(value) {\n if (value instanceof Error) {\n return value;\n }\n const error = new Error(typeof value === \"string\" ? value : JSON.stringify(value));\n if (typeof value === \"object\" && value != null) {\n Object.assign(error, value);\n }\n return error;\n}\nexport function toErrorObject(error, parseLine) {\n return {\n nativeError: error,\n name: error.name ?? \"Error\",\n message: error.message ?? \"\",\n stack: buildStackTrace(error, parseLine),\n };\n}\n","export function jsonStringifyRecursive(obj) {\n const cache = new Set();\n return JSON.stringify(obj, (key, value) => {\n if (typeof value === \"object\" && value !== null) {\n if (cache.has(value)) {\n return \"[Circular]\";\n }\n cache.add(value);\n }\n if (typeof value === \"bigint\") {\n return `${value}`;\n }\n if (typeof value === \"undefined\") {\n return \"[undefined]\";\n }\n return value;\n });\n}\n","import { prettyLogStyles } from \"../prettyLogStyles.js\";\nimport { jsonStringifyRecursive } from \"./jsonStringifyRecursive.js\";\nexport function inspect(obj, opts) {\n const ctx = {\n seen: [],\n stylize: stylizeNoColor,\n };\n if (opts != null) {\n _extend(ctx, opts);\n }\n if (isUndefined(ctx.showHidden))\n ctx.showHidden = false;\n if (isUndefined(ctx.depth))\n ctx.depth = 2;\n if (isUndefined(ctx.colors))\n ctx.colors = true;\n if (isUndefined(ctx.customInspect))\n ctx.customInspect = true;\n if (ctx.colors)\n ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\ninspect.colors = prettyLogStyles;\ninspect.styles = {\n special: \"cyan\",\n number: \"yellow\",\n boolean: \"yellow\",\n undefined: \"grey\",\n null: \"bold\",\n string: \"green\",\n date: \"magenta\",\n regexp: \"red\",\n};\nfunction isBoolean(arg) {\n return typeof arg === \"boolean\";\n}\nfunction isUndefined(arg) {\n return arg === undefined;\n}\nfunction stylizeNoColor(str) {\n return str;\n}\nfunction stylizeWithColor(str, styleType) {\n const style = inspect.styles[styleType];\n if (style != null && inspect?.colors?.[style]?.[0] != null && inspect?.colors?.[style]?.[1] != null) {\n return \"\\u001b[\" + inspect.colors[style][0] + \"m\" + str + \"\\u001b[\" + inspect.colors[style][1] + \"m\";\n }\n else {\n return str;\n }\n}\nfunction isFunction(arg) {\n return typeof arg === \"function\";\n}\nfunction isString(arg) {\n return typeof arg === \"string\";\n}\nfunction isNumber(arg) {\n return typeof arg === \"number\";\n}\nfunction isNull(arg) {\n return arg === null;\n}\nfunction hasOwn(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\nfunction isRegExp(re) {\n return isObject(re) && objectToString(re) === \"[object RegExp]\";\n}\nfunction isObject(arg) {\n return typeof arg === \"object\" && arg !== null;\n}\nfunction isError(e) {\n return isObject(e) && (objectToString(e) === \"[object Error]\" || e instanceof Error);\n}\nfunction isDate(d) {\n return isObject(d) && objectToString(d) === \"[object Date]\";\n}\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\nfunction arrayToHash(array) {\n const hash = {};\n array.forEach((val) => {\n hash[val] = true;\n });\n return hash;\n}\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n const output = [];\n for (let i = 0, l = value.length; i < l; ++i) {\n if (hasOwn(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, String(i), true));\n }\n else {\n output.push(\"\");\n }\n }\n keys.forEach((key) => {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, key, true));\n }\n });\n return output;\n}\nfunction formatError(value) {\n return \"[\" + Error.prototype.toString.call(value) + \"]\";\n}\nexport function formatValue(ctx, value, recurseTimes = 0) {\n if (ctx.customInspect &&\n value != null &&\n isFunction(value) &&\n value?.inspect !== inspect &&\n !(value?.constructor && value?.constructor.prototype === value)) {\n if (typeof value.inspect !== \"function\" && value.toString != null) {\n return value.toString();\n }\n let ret = value?.inspect(recurseTimes, ctx);\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n const primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n let keys = Object.keys(value);\n const visibleKeys = arrayToHash(keys);\n try {\n if (ctx.showHidden && Object.getOwnPropertyNames) {\n keys = Object.getOwnPropertyNames(value);\n }\n }\n catch {\n }\n if (isError(value) && (keys.indexOf(\"message\") >= 0 || keys.indexOf(\"description\") >= 0)) {\n return formatError(value);\n }\n if (keys.length === 0) {\n if (isFunction(ctx.stylize)) {\n if (isFunction(value)) {\n const name = value.name ? \": \" + value.name : \"\";\n return ctx.stylize(\"[Function\" + name + \"]\", \"special\");\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), \"regexp\");\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toISOString.call(value), \"date\");\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n else {\n return value;\n }\n }\n let base = \"\";\n let array = false;\n let braces = [\"{\\n\", \"\\n}\"];\n if (Array.isArray(value)) {\n array = true;\n braces = [\"[\\n\", \"\\n]\"];\n }\n if (isFunction(value)) {\n const n = value.name ? \": \" + value.name : \"\";\n base = \" [Function\" + n + \"]\";\n }\n if (isRegExp(value)) {\n base = \" \" + RegExp.prototype.toString.call(value);\n }\n if (isDate(value)) {\n base = \" \" + Date.prototype.toUTCString.call(value);\n }\n if (isError(value)) {\n base = \" \" + formatError(value);\n }\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), \"regexp\");\n }\n else {\n return ctx.stylize(\"[Object]\", \"special\");\n }\n }\n ctx.seen.push(value);\n let output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n }\n else {\n output = keys.map((key) => {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n ctx.seen.pop();\n return reduceToSingleString(output, base, braces);\n}\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n let name, str;\n let desc = { value: void 0 };\n try {\n desc.value = value[key];\n }\n catch {\n }\n try {\n if (Object.getOwnPropertyDescriptor) {\n desc = Object.getOwnPropertyDescriptor(value, key) || desc;\n }\n }\n catch {\n }\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize(\"[Getter/Setter]\", \"special\");\n }\n else {\n str = ctx.stylize(\"[Getter]\", \"special\");\n }\n }\n else {\n if (desc.set) {\n str = ctx.stylize(\"[Setter]\", \"special\");\n }\n }\n if (!hasOwn(visibleKeys, key)) {\n name = \"[\" + key + \"]\";\n }\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, undefined);\n }\n else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n if (str.indexOf(\"\\n\") > -1) {\n if (array) {\n str = str\n .split(\"\\n\")\n .map((line) => {\n return \" \" + line;\n })\n .join(\"\\n\")\n .substr(2);\n }\n else {\n str =\n \"\\n\" +\n str\n .split(\"\\n\")\n .map((line) => {\n return \" \" + line;\n })\n .join(\"\\n\");\n }\n }\n }\n else {\n str = ctx.stylize(\"[Circular]\", \"special\");\n }\n }\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify(\"\" + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.substr(1, name.length - 2);\n name = ctx.stylize(name, \"name\");\n }\n else {\n name = name\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, \"\\\\'\")\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, \"string\");\n }\n }\n return name + \": \" + str;\n}\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value))\n return ctx.stylize(\"undefined\", \"undefined\");\n if (isString(value)) {\n const simple = \"'\" + JSON.stringify(value).replace(/^\"|\"$/g, \"\").replace(/'/g, \"\\\\'\").replace(/\\\\\"/g, \"\\\\'\") + \"'\";\n return ctx.stylize(simple, \"string\");\n }\n if (isNumber(value))\n return ctx.stylize(\"\" + value, \"number\");\n if (isBoolean(value))\n return ctx.stylize(\"\" + value, \"boolean\");\n if (isNull(value))\n return ctx.stylize(\"null\", \"null\");\n}\nfunction reduceToSingleString(output, base, braces) {\n return braces[0] + (base === \"\" ? \"\" : base + \"\\n\") + \" \" + output.join(\",\\n \") + \" \" + braces[1];\n}\nfunction _extend(origin, add) {\n const typedOrigin = { ...origin };\n if (!add || !isObject(add))\n return origin;\n const clonedAdd = { ...add };\n const keys = Object.keys(add);\n let i = keys.length;\n while (i--) {\n typedOrigin[keys[i]] = clonedAdd[keys[i]];\n }\n return typedOrigin;\n}\nexport function formatWithOptions(inspectOptions, ...args) {\n const ctx = {\n seen: [],\n stylize: stylizeNoColor,\n };\n if (inspectOptions != null) {\n _extend(ctx, inspectOptions);\n }\n const first = args[0];\n let a = 0;\n let str = \"\";\n let join = \"\";\n if (typeof first === \"string\") {\n if (args.length === 1) {\n return first;\n }\n let tempStr;\n let lastPos = 0;\n for (let i = 0; i < first.length - 1; i++) {\n if (first.charCodeAt(i) === 37) {\n const nextChar = first.charCodeAt(++i);\n if (a + 1 !== args.length) {\n switch (nextChar) {\n case 115: {\n const tempArg = args[++a];\n if (typeof tempArg === \"number\") {\n tempStr = formatPrimitive(ctx, tempArg);\n }\n else if (typeof tempArg === \"bigint\") {\n tempStr = formatPrimitive(ctx, tempArg);\n }\n else if (typeof tempArg !== \"object\" || tempArg === null) {\n tempStr = String(tempArg);\n }\n else {\n tempStr = inspect(tempArg, {\n ...inspectOptions,\n compact: 3,\n colors: false,\n depth: 0,\n });\n }\n break;\n }\n case 106:\n tempStr = jsonStringifyRecursive(args[++a]);\n break;\n case 100: {\n const tempNum = args[++a];\n if (typeof tempNum === \"bigint\") {\n tempStr = formatPrimitive(ctx, tempNum);\n }\n else if (typeof tempNum === \"symbol\") {\n tempStr = \"NaN\";\n }\n else {\n tempStr = formatPrimitive(ctx, tempNum);\n }\n break;\n }\n case 79:\n tempStr = inspect(args[++a], inspectOptions);\n break;\n case 111:\n tempStr = inspect(args[++a], {\n ...inspectOptions,\n showHidden: true,\n showProxy: true,\n depth: 4,\n });\n break;\n case 105: {\n const tempInteger = args[++a];\n if (typeof tempInteger === \"bigint\") {\n tempStr = formatPrimitive(ctx, tempInteger);\n }\n else if (typeof tempInteger === \"symbol\") {\n tempStr = \"NaN\";\n }\n else {\n tempStr = formatPrimitive(ctx, parseInt(tempStr));\n }\n break;\n }\n case 102: {\n const tempFloat = args[++a];\n if (typeof tempFloat === \"symbol\") {\n tempStr = \"NaN\";\n }\n else {\n tempStr = formatPrimitive(ctx, parseInt(tempFloat));\n }\n break;\n }\n case 99:\n a += 1;\n tempStr = \"\";\n break;\n case 37:\n str += first.slice(lastPos, i);\n lastPos = i + 1;\n continue;\n default:\n continue;\n }\n if (lastPos !== i - 1) {\n str += first.slice(lastPos, i - 1);\n }\n str += tempStr;\n lastPos = i + 1;\n }\n else if (nextChar === 37) {\n str += first.slice(lastPos, i);\n lastPos = i + 1;\n }\n }\n }\n if (lastPos !== 0) {\n a++;\n join = \" \";\n if (lastPos < first.length) {\n str += first.slice(lastPos);\n }\n }\n }\n while (a < args.length) {\n const value = args[a];\n str += join;\n str += typeof value !== \"string\" ? inspect(value, inspectOptions) : value;\n join = \" \";\n a++;\n }\n return str;\n}\n","export function safeGetCwd() {\n try {\n const nodeProcess = globalThis?.process;\n if (typeof nodeProcess?.cwd === \"function\") {\n return nodeProcess.cwd();\n }\n }\n catch {\n }\n try {\n const deno = globalThis?.[\"Deno\"];\n if (typeof deno?.cwd === \"function\") {\n return deno.cwd();\n }\n }\n catch {\n }\n return undefined;\n}\nexport function isBrowserEnvironment() {\n return typeof window !== \"undefined\" && typeof document !== \"undefined\";\n}\nexport function consoleSupportsCssStyling() {\n if (!isBrowserEnvironment()) {\n return false;\n }\n const navigatorObj = globalThis?.navigator;\n const userAgent = navigatorObj?.userAgent ?? \"\";\n if (/firefox/i.test(userAgent)) {\n return true;\n }\n const windowObj = globalThis;\n if (windowObj?.CSS?.supports?.(\"color\", \"#000\")) {\n return true;\n }\n return /safari/i.test(userAgent) && !/chrome/i.test(userAgent);\n}\n","import { urlToObject } from \"./urlToObj.js\";\nimport { buildPrettyMeta } from \"./internal/metaFormatting.js\";\nimport { toError, collectErrorCauses } from \"./internal/errorUtils.js\";\nimport { formatTemplate } from \"./formatTemplate.js\";\nimport { formatWithOptions } from \"./internal/util.inspect.polyfill.js\";\nimport { buildStackTrace, findFirstExternalFrameIndex, clampIndex, getDefaultIgnorePatterns } from \"./internal/stackTrace.js\";\nimport { safeGetCwd, consoleSupportsCssStyling, isBrowserEnvironment } from \"./internal/environment.js\";\nimport { jsonStringifyRecursive } from \"./internal/jsonStringifyRecursive.js\";\nexport function createLoggerEnvironment() {\n const runtimeInfo = detectRuntimeInfo();\n const meta = createRuntimeMeta(runtimeInfo);\n const usesBrowserStack = runtimeInfo.name === \"browser\" || runtimeInfo.name === \"worker\";\n const callerIgnorePatterns = usesBrowserStack\n ? [...getDefaultIgnorePatterns(), /node_modules[\\\\/].*tslog/i]\n : [...getDefaultIgnorePatterns(), /node:(?:internal|vm)/i, /\\binternal[\\\\/]/i];\n let cachedCwd;\n const environment = {\n getMeta(logLevelId, logLevelName, stackDepthLevel, hideLogPositionForPerformance, name, parentNames) {\n return Object.assign({}, meta, {\n name,\n parentNames,\n date: new Date(),\n logLevelId,\n logLevelName,\n path: !hideLogPositionForPerformance ? environment.getCallerStackFrame(stackDepthLevel) : undefined,\n });\n },\n getCallerStackFrame(stackDepthLevel, error = new Error()) {\n const frames = buildStackTrace(error, (line) => parseStackLine(line));\n if (frames.length === 0) {\n return {};\n }\n const autoIndex = findFirstExternalFrameIndex(frames, callerIgnorePatterns);\n const useManualIndex = Number.isFinite(stackDepthLevel) && stackDepthLevel >= 0;\n const resolvedIndex = useManualIndex ? clampIndex(stackDepthLevel, frames.length) : clampIndex(autoIndex, frames.length);\n return frames[resolvedIndex] ?? {};\n },\n getErrorTrace(error) {\n return buildStackTrace(error, (line) => parseStackLine(line));\n },\n isError(value) {\n return isNativeError(value);\n },\n isBuffer(value) {\n return typeof Buffer !== \"undefined\" && typeof Buffer.isBuffer === \"function\" ? Buffer.isBuffer(value) : false;\n },\n prettyFormatLogObj(maskedArgs, settings) {\n return maskedArgs.reduce((result, arg) => {\n if (environment.isError(arg)) {\n result.errors.push(environment.prettyFormatErrorObj(arg, settings));\n }\n else {\n result.args.push(arg);\n }\n return result;\n }, { args: [], errors: [] });\n },\n prettyFormatErrorObj(error, settings) {\n const stackLines = formatStackFrames(environment.getErrorTrace(error), settings);\n const causeSections = collectErrorCauses(error).map((cause, index) => {\n const header = `Caused by (${index + 1}): ${cause.name ?? \"Error\"}${cause.message ? `: ${cause.message}` : \"\"}`;\n const frames = formatStackFrames(buildStackTrace(cause, (line) => parseStackLine(line)), settings);\n return [header, ...frames].join(\"\\n\");\n });\n const placeholderValuesError = {\n errorName: ` ${error.name} `,\n errorMessage: formatErrorMessage(error),\n errorStack: [...stackLines, ...causeSections].join(\"\\n\"),\n };\n return formatTemplate(settings, settings.prettyErrorTemplate, placeholderValuesError);\n },\n transportFormatted(logMetaMarkup, logArgs, logErrors, logMeta, settings) {\n const prettyLogs = settings.stylePrettyLogs !== false;\n const logErrorsStr = (logErrors.length > 0 && logArgs.length > 0 ? \"\\n\" : \"\") + logErrors.join(\"\\n\");\n const sanitizedMetaMarkup = stripAnsi(logMetaMarkup);\n const metaMarkupForText = prettyLogs ? logMetaMarkup : sanitizedMetaMarkup;\n if (shouldUseCss(prettyLogs)) {\n settings.prettyInspectOptions.colors = false;\n const formattedArgs = formatWithOptionsSafe(settings.prettyInspectOptions, logArgs);\n const cssMeta = logMeta != null ? buildCssMetaOutput(settings, logMeta) : { text: sanitizedMetaMarkup, styles: [] };\n const hasCssMeta = cssMeta.text.length > 0 && cssMeta.styles.length > 0;\n const metaOutput = hasCssMeta ? cssMeta.text : sanitizedMetaMarkup;\n const output = metaOutput + formattedArgs + logErrorsStr;\n if (hasCssMeta) {\n console.log(output, ...cssMeta.styles);\n }\n else {\n console.log(output);\n }\n return;\n }\n settings.prettyInspectOptions.colors = prettyLogs;\n const formattedArgs = formatWithOptionsSafe(settings.prettyInspectOptions, logArgs);\n console.log(metaMarkupForText + formattedArgs + logErrorsStr);\n },\n transportJSON(json) {\n console.log(jsonStringifyRecursive(json));\n },\n };\n if (getNodeEnv() === \"test\") {\n environment.__resetWorkingDirectoryCacheForTests = () => {\n cachedCwd = undefined;\n };\n }\n return environment;\n function parseStackLine(line) {\n return usesBrowserStack ? parseBrowserStackLine(line) : parseServerStackLine(line);\n }\n function parseServerStackLine(rawLine) {\n if (typeof rawLine !== \"string\" || rawLine.length === 0) {\n return undefined;\n }\n const trimmedLine = rawLine.trim();\n if (!trimmedLine.includes(\" at \") && !trimmedLine.startsWith(\"at \")) {\n return undefined;\n }\n const line = trimmedLine.replace(/^at\\s+/, \"\");\n let method;\n let location = line;\n const methodMatch = line.match(/^(.*?)\\s+\\((.*)\\)$/);\n if (methodMatch) {\n method = methodMatch[1];\n location = methodMatch[2];\n }\n const sanitizedLocation = location.replace(/^\\(/, \"\").replace(/\\)$/, \"\");\n const withoutQuery = sanitizedLocation.replace(/\\?.*$/, \"\");\n let fileLine;\n let fileColumn;\n let filePathCandidate = withoutQuery;\n const segments = withoutQuery.split(\":\");\n if (segments.length >= 3 && /^\\d+$/.test(segments[segments.length - 1] ?? \"\")) {\n fileColumn = segments.pop();\n fileLine = segments.pop();\n filePathCandidate = segments.join(\":\");\n }\n else if (segments.length >= 2 && /^\\d+$/.test(segments[segments.length - 1] ?? \"\")) {\n fileLine = segments.pop();\n filePathCandidate = segments.join(\":\");\n }\n let normalizedPath = filePathCandidate.replace(/^file:\\/\\//, \"\");\n const cwd = getWorkingDirectory();\n if (cwd != null && normalizedPath.startsWith(cwd)) {\n normalizedPath = normalizedPath.slice(cwd.length);\n normalizedPath = normalizedPath.replace(/^[\\\\/]/, \"\");\n }\n if (normalizedPath.length === 0) {\n normalizedPath = filePathCandidate;\n }\n const normalizedPathWithoutLine = normalizeFilePath(normalizedPath);\n const effectivePath = normalizedPathWithoutLine.length > 0 ? normalizedPathWithoutLine : normalizedPath;\n const pathSegments = effectivePath.split(/\\\\|\\//);\n const fileName = pathSegments[pathSegments.length - 1];\n const fileNameWithLine = fileName && fileLine ? `${fileName}:${fileLine}` : undefined;\n const filePathWithLine = effectivePath && fileLine ? `${effectivePath}:${fileLine}` : undefined;\n return {\n fullFilePath: sanitizedLocation,\n fileName,\n fileNameWithLine,\n fileColumn,\n fileLine,\n filePath: effectivePath,\n filePathWithLine,\n method,\n };\n }\n function parseBrowserStackLine(line) {\n const href = globalThis.location?.origin;\n if (line == null) {\n return undefined;\n }\n const match = line.match(BROWSER_PATH_REGEX);\n if (!match) {\n return undefined;\n }\n const filePath = match[1]?.replace(/\\?.*$/, \"\");\n if (filePath == null) {\n return undefined;\n }\n const pathParts = filePath.split(\"/\");\n const fileLine = match[2];\n const fileColumn = match[3];\n const fileName = pathParts[pathParts.length - 1];\n return {\n fullFilePath: href ? `${href}${filePath}` : filePath,\n fileName,\n fileNameWithLine: fileName && fileLine ? `${fileName}:${fileLine}` : undefined,\n fileColumn,\n fileLine,\n filePath,\n filePathWithLine: fileLine ? `${filePath}:${fileLine}` : undefined,\n method: undefined,\n };\n }\n function formatStackFrames(frames, settings) {\n return frames.map((stackFrame) => formatTemplate(settings, settings.prettyErrorStackTemplate, { ...stackFrame }, true));\n }\n function formatErrorMessage(error) {\n return Object.getOwnPropertyNames(error)\n .filter((key) => key !== \"stack\" && key !== \"cause\")\n .reduce((result, key) => {\n const value = error[key];\n if (typeof value === \"function\") {\n return result;\n }\n result.push(String(value));\n return result;\n }, [])\n .join(\", \");\n }\n function shouldUseCss(prettyLogs) {\n return prettyLogs && (runtimeInfo.name === \"browser\" || runtimeInfo.name === \"worker\") && consoleSupportsCssStyling();\n }\n function stripAnsi(value) {\n return value.replace(ANSI_REGEX, \"\");\n }\n function buildCssMetaOutput(settings, metaValue) {\n if (metaValue == null) {\n return { text: \"\", styles: [] };\n }\n const { template, placeholders } = buildPrettyMeta(settings, metaValue);\n const parts = [];\n const styles = [];\n let lastIndex = 0;\n const placeholderRegex = /{{(.+?)}}/g;\n let match;\n while ((match = placeholderRegex.exec(template)) != null) {\n if (match.index > lastIndex) {\n parts.push(template.slice(lastIndex, match.index));\n }\n const key = match[1];\n const rawValue = placeholders[key] != null ? String(placeholders[key]) : \"\";\n const tokens = collectStyleTokens(settings.prettyLogStyles?.[key], rawValue);\n const css = tokensToCss(tokens);\n if (css.length > 0) {\n parts.push(`%c${rawValue}%c`);\n styles.push(css, \"\");\n }\n else {\n parts.push(rawValue);\n }\n lastIndex = placeholderRegex.lastIndex;\n }\n if (lastIndex < template.length) {\n parts.push(template.slice(lastIndex));\n }\n return {\n text: parts.join(\"\"),\n styles,\n };\n }\n function collectStyleTokens(style, value) {\n if (style == null) {\n return [];\n }\n if (typeof style === \"string\") {\n return [style];\n }\n if (Array.isArray(style)) {\n return style.flatMap((token) => collectStyleTokens(token, value));\n }\n if (typeof style === \"object\") {\n const normalizedValue = value.trim();\n const nextStyle = style[normalizedValue] ?? style[\"*\"];\n if (nextStyle == null) {\n return [];\n }\n return collectStyleTokens(nextStyle, value);\n }\n return [];\n }\n function tokensToCss(tokens) {\n const seen = new Set();\n const cssParts = [];\n for (const token of tokens) {\n const css = styleTokenToCss(token);\n if (css != null && css.length > 0 && !seen.has(css)) {\n seen.add(css);\n cssParts.push(css);\n }\n }\n return cssParts.join(\"; \");\n }\n function styleTokenToCss(token) {\n const color = COLOR_TOKENS[token];\n if (color != null) {\n return `color: ${color}`;\n }\n const background = BACKGROUND_TOKENS[token];\n if (background != null) {\n return `background-color: ${background}`;\n }\n switch (token) {\n case \"bold\":\n return \"font-weight: bold\";\n case \"dim\":\n return \"opacity: 0.75\";\n case \"italic\":\n return \"font-style: italic\";\n case \"underline\":\n return \"text-decoration: underline\";\n case \"overline\":\n return \"text-decoration: overline\";\n case \"inverse\":\n return \"filter: invert(1)\";\n case \"hidden\":\n return \"visibility: hidden\";\n case \"strikethrough\":\n return \"text-decoration: line-through\";\n default:\n return undefined;\n }\n }\n function getWorkingDirectory() {\n if (cachedCwd === undefined) {\n cachedCwd = safeGetCwd() ?? null;\n }\n return cachedCwd ?? undefined;\n }\n function shouldCaptureHostname() {\n return runtimeInfo.name === \"node\" || runtimeInfo.name === \"deno\" || runtimeInfo.name === \"bun\";\n }\n function shouldCaptureRuntimeVersion() {\n return runtimeInfo.name === \"node\" || runtimeInfo.name === \"deno\" || runtimeInfo.name === \"bun\";\n }\n function createRuntimeMeta(info) {\n if (info.name === \"browser\" || info.name === \"worker\") {\n return {\n runtime: info.name,\n browser: info.userAgent,\n };\n }\n const metaStatic = {\n runtime: info.name,\n };\n if (shouldCaptureRuntimeVersion()) {\n metaStatic.runtimeVersion = info.version ?? \"unknown\";\n }\n if (shouldCaptureHostname()) {\n metaStatic.hostname = info.hostname ?? \"unknown\";\n }\n return metaStatic;\n }\n function formatWithOptionsSafe(options, args) {\n try {\n return formatWithOptions(options, ...args);\n }\n catch {\n return args.map(stringifyFallback).join(\" \");\n }\n }\n function stringifyFallback(value) {\n if (typeof value === \"string\") {\n return value;\n }\n try {\n return JSON.stringify(value);\n }\n catch {\n return String(value);\n }\n }\n function normalizeFilePath(value) {\n if (typeof value !== \"string\" || value.length === 0) {\n return value;\n }\n const replaced = value.replace(/\\\\+/g, \"\\\\\").replace(/\\\\/g, \"/\");\n const hasRootDoubleSlash = replaced.startsWith(\"//\");\n const hasLeadingSlash = replaced.startsWith(\"/\") && !hasRootDoubleSlash;\n const driveMatch = replaced.match(/^[A-Za-z]:/);\n const drivePrefix = driveMatch ? driveMatch[0] : \"\";\n const withoutDrive = drivePrefix ? replaced.slice(drivePrefix.length) : replaced;\n const segments = withoutDrive.split(\"/\");\n const normalizedSegments = [];\n for (const segment of segments) {\n if (segment === \"\" || segment === \".\") {\n continue;\n }\n if (segment === \"..\") {\n if (normalizedSegments.length > 0) {\n normalizedSegments.pop();\n }\n continue;\n }\n normalizedSegments.push(segment);\n }\n let normalized = normalizedSegments.join(\"/\");\n if (hasRootDoubleSlash) {\n normalized = `//${normalized}`;\n }\n else if (hasLeadingSlash) {\n normalized = `/${normalized}`;\n }\n else if (drivePrefix !== \"\") {\n normalized = `${drivePrefix}${normalized.length > 0 ? `/${normalized}` : \"\"}`;\n }\n if (normalized.length === 0) {\n return value;\n }\n return normalized;\n }\n function detectRuntimeInfo() {\n if (isBrowserEnvironment()) {\n const navigatorObj = globalThis.navigator;\n return {\n name: \"browser\",\n userAgent: navigatorObj?.userAgent,\n };\n }\n const globalScope = globalThis;\n if (typeof globalScope.importScripts === \"function\") {\n return {\n name: \"worker\",\n userAgent: globalScope.navigator?.userAgent,\n };\n }\n const globalAny = globalThis;\n if (globalAny.Bun != null) {\n const bunVersion = globalAny.Bun.version;\n return {\n name: \"bun\",\n version: bunVersion != null ? `bun/${bunVersion}` : undefined,\n hostname: getEnvironmentHostname(globalAny.process, globalAny.Deno, globalAny.Bun, globalAny.location),\n };\n }\n if (globalAny.Deno != null) {\n const denoHostname = resolveDenoHostname(globalAny.Deno);\n const denoVersion = globalAny.Deno?.version?.deno;\n return {\n name: \"deno\",\n version: denoVersion != null ? `deno/${denoVersion}` : undefined,\n hostname: denoHostname ?? getEnvironmentHostname(globalAny.process, globalAny.Deno, globalAny.Bun, globalAny.location),\n };\n }\n if (globalAny.process?.versions?.node != null || globalAny.process?.version != null) {\n return {\n name: \"node\",\n version: globalAny.process?.versions?.node ?? globalAny.process?.version,\n hostname: getEnvironmentHostname(globalAny.process, globalAny.Deno, globalAny.Bun, globalAny.location),\n };\n }\n if (globalAny.process != null) {\n return {\n name: \"node\",\n version: \"unknown\",\n hostname: getEnvironmentHostname(globalAny.process, globalAny.Deno, globalAny.Bun, globalAny.location),\n };\n }\n return {\n name: \"unknown\",\n };\n }\n function getEnvironmentHostname(nodeProcess, deno, bun, location) {\n const processHostname = nodeProcess?.env?.HOSTNAME ?? nodeProcess?.env?.HOST ?? nodeProcess?.env?.COMPUTERNAME;\n if (processHostname != null && processHostname.length > 0) {\n return processHostname;\n }\n const bunHostname = bun?.env?.HOSTNAME ?? bun?.env?.HOST ?? bun?.env?.COMPUTERNAME;\n if (bunHostname != null && bunHostname.length > 0) {\n return bunHostname;\n }\n try {\n const denoEnvGet = deno?.env?.get;\n if (typeof denoEnvGet === \"function\") {\n const value = denoEnvGet(\"HOSTNAME\");\n if (value != null && value.length > 0) {\n return value;\n }\n }\n }\n catch {\n }\n if (location?.hostname != null && location.hostname.length > 0) {\n return location.hostname;\n }\n return undefined;\n }\n function resolveDenoHostname(deno) {\n try {\n if (typeof deno?.hostname === \"function\") {\n const value = deno.hostname();\n if (value != null && value.length > 0) {\n return value;\n }\n }\n }\n catch {\n }\n const locationHostname = globalThis.location?.hostname;\n if (locationHostname != null && locationHostname.length > 0) {\n return locationHostname;\n }\n return undefined;\n }\n function getNodeEnv() {\n const globalProcess = globalThis?.process;\n return globalProcess?.env?.NODE_ENV;\n }\n function isNativeError(value) {\n if (value instanceof Error) {\n return true;\n }\n if (value != null && typeof value === \"object\") {\n const objectTag = Object.prototype.toString.call(value);\n if (/\\[object .*Error\\]/.test(objectTag)) {\n return true;\n }\n const name = value.name;\n if (typeof name === \"string\" && name.endsWith(\"Error\")) {\n return true;\n }\n }\n return false;\n }\n}\nconst ANSI_REGEX = /\\u001b\\[[0-9;]*m/g;\nconst COLOR_TOKENS = {\n black: \"#000000\",\n red: \"#ef5350\",\n green: \"#66bb6a\",\n yellow: \"#fdd835\",\n blue: \"#42a5f5\",\n magenta: \"#ab47bc\",\n cyan: \"#26c6da\",\n white: \"#fafafa\",\n blackBright: \"#424242\",\n redBright: \"#ff7043\",\n greenBright: \"#81c784\",\n yellowBright: \"#ffe082\",\n blueBright: \"#64b5f6\",\n magentaBright: \"#ce93d8\",\n cyanBright: \"#4dd0e1\",\n whiteBright: \"#ffffff\",\n};\nconst BACKGROUND_TOKENS = {\n bgBlack: \"#000000\",\n bgRed: \"#ef5350\",\n bgGreen: \"#66bb6a\",\n bgYellow: \"#fdd835\",\n bgBlue: \"#42a5f5\",\n bgMagenta: \"#ab47bc\",\n bgCyan: \"#26c6da\",\n bgWhite: \"#fafafa\",\n bgBlackBright: \"#424242\",\n bgRedBright: \"#ff7043\",\n bgGreenBright: \"#81c784\",\n bgYellowBright: \"#ffe082\",\n bgBlueBright: \"#64b5f6\",\n bgMagentaBright: \"#ce93d8\",\n bgCyanBright: \"#4dd0e1\",\n bgWhiteBright: \"#ffffff\",\n};\nconst BROWSER_PATH_REGEX = /(?:(?:file|https?|global code|[^@]+)@)?(?:file:)?((?:\\/[^:/]+){2,})(?::(\\d+))?(?::(\\d+))?/;\nconst runtime = createLoggerEnvironment();\nexport const loggerEnvironment = runtime;\nexport * from \"./interfaces.js\";\nexport class BaseLogger {\n constructor(settings, logObj, stackDepthLevel = Number.NaN) {\n this.logObj = logObj;\n this.stackDepthLevel = stackDepthLevel;\n this.runtime = runtime;\n this.maxErrorCauseDepth = 5;\n this.settings = {\n type: settings?.type ?? \"pretty\",\n name: settings?.name,\n parentNames: settings?.parentNames,\n minLevel: settings?.minLevel ?? 0,\n argumentsArrayName: settings?.argumentsArrayName,\n hideLogPositionForProduction: settings?.hideLogPositionForProduction ?? false,\n prettyLogTemplate: settings?.prettyLogTemplate ??\n \"{{yyyy}}.{{mm}}.{{dd}} {{hh}}:{{MM}}:{{ss}}:{{ms}}\\t{{logLevelName}}\\t{{filePathWithLine}}{{nameWithDelimiterPrefix}}\\t\",\n prettyErrorTemplate: settings?.prettyErrorTemplate ?? \"\\n{{errorName}} {{errorMessage}}\\nerror stack:\\n{{errorStack}}\",\n prettyErrorStackTemplate: settings?.prettyErrorStackTemplate ?? \" • {{fileName}}\\t{{method}}\\n\\t{{filePathWithLine}}\",\n prettyErrorParentNamesSeparator: settings?.prettyErrorParentNamesSeparator ?? \":\",\n prettyErrorLoggerNameDelimiter: settings?.prettyErrorLoggerNameDelimiter ?? \"\\t\",\n stylePrettyLogs: settings?.stylePrettyLogs ?? true,\n prettyLogTimeZone: settings?.prettyLogTimeZone ?? \"UTC\",\n prettyLogStyles: settings?.prettyLogStyles ?? {\n logLevelName: {\n \"*\": [\"bold\", \"black\", \"bgWhiteBright\", \"dim\"],\n SILLY: [\"bold\", \"white\"],\n TRACE: [\"bold\", \"whiteBright\"],\n DEBUG: [\"bold\", \"green\"],\n INFO: [\"bold\", \"blue\"],\n WARN: [\"bold\", \"yellow\"],\n ERROR: [\"bold\", \"red\"],\n FATAL: [\"bold\", \"redBright\"],\n },\n dateIsoStr: \"white\",\n filePathWithLine: \"white\",\n name: [\"white\", \"bold\"],\n nameWithDelimiterPrefix: [\"white\", \"bold\"],\n nameWithDelimiterSuffix: [\"white\", \"bold\"],\n errorName: [\"bold\", \"bgRedBright\", \"whiteBright\"],\n fileName: [\"yellow\"],\n fileNameWithLine: \"white\",\n },\n prettyInspectOptions: settings?.prettyInspectOptions ?? {\n colors: true,\n compact: false,\n depth: Infinity,\n },\n metaProperty: settings?.metaProperty ?? \"_meta\",\n maskPlaceholder: settings?.maskPlaceholder ?? \"[***]\",\n maskValuesOfKeys: settings?.maskValuesOfKeys ?? [\"password\"],\n maskValuesOfKeysCaseInsensitive: settings?.maskValuesOfKeysCaseInsensitive ?? false,\n maskValuesRegEx: settings?.maskValuesRegEx,\n prefix: [...(settings?.prefix ?? [])],\n attachedTransports: [...(settings?.attachedTransports ?? [])],\n overwrite: {\n mask: settings?.overwrite?.mask,\n toLogObj: settings?.overwrite?.toLogObj,\n addMeta: settings?.overwrite?.addMeta,\n addPlaceholders: settings?.overwrite?.addPlaceholders,\n formatMeta: settings?.overwrite?.formatMeta,\n formatLogObj: settings?.overwrite?.formatLogObj,\n transportFormatted: settings?.overwrite?.transportFormatted,\n transportJSON: settings?.overwrite?.transportJSON,\n },\n };\n this.captureStackForMeta = this._shouldCaptureStack();\n }\n log(logLevelId, logLevelName, ...args) {\n if (logLevelId < this.settings.minLevel) {\n return;\n }\n const resolvedArgs = this._resolveLogArguments(args);\n const logArgs = [...this.settings.prefix, ...resolvedArgs];\n const maskedArgs = this.settings.overwrite?.mask != null\n ? this.settings.overwrite?.mask(logArgs)\n : this.settings.maskValuesOfKeys != null && this.settings.maskValuesOfKeys.length > 0\n ? this._mask(logArgs)\n : logArgs;\n const thisLogObj = this.logObj != null ? this._recursiveCloneAndExecuteFunctions(this.logObj) : undefined;\n const logObj = this.settings.overwrite?.toLogObj != null ? this.settings.overwrite?.toLogObj(maskedArgs, thisLogObj) : this._toLogObj(maskedArgs, thisLogObj);\n const logObjWithMeta = this.settings.overwrite?.addMeta != null\n ? this.settings.overwrite?.addMeta(logObj, logLevelId, logLevelName)\n : this._addMetaToLogObj(logObj, logLevelId, logLevelName);\n const logMeta = logObjWithMeta?.[this.settings.metaProperty];\n let logMetaMarkup;\n let logArgsAndErrorsMarkup = undefined;\n if (this.settings.overwrite?.formatMeta != null) {\n logMetaMarkup = this.settings.overwrite?.formatMeta(logObjWithMeta?.[this.settings.metaProperty]);\n }\n if (this.settings.overwrite?.formatLogObj != null) {\n logArgsAndErrorsMarkup = this.settings.overwrite?.formatLogObj(maskedArgs, this.settings);\n }\n if (this.settings.type === \"pretty\") {\n logMetaMarkup = logMetaMarkup ?? this._prettyFormatLogObjMeta(logObjWithMeta?.[this.settings.metaProperty]);\n logArgsAndErrorsMarkup = logArgsAndErrorsMarkup ?? runtime.prettyFormatLogObj(maskedArgs, this.settings);\n }\n if (logMetaMarkup != null && logArgsAndErrorsMarkup != null) {\n if (this.settings.overwrite?.transportFormatted != null) {\n const transport = this.settings.overwrite.transportFormatted;\n const declaredParams = transport.length;\n if (declaredParams < 4) {\n transport(logMetaMarkup, logArgsAndErrorsMarkup.args, logArgsAndErrorsMarkup.errors);\n }\n else if (declaredParams === 4) {\n transport(logMetaMarkup, logArgsAndErrorsMarkup.args, logArgsAndErrorsMarkup.errors, logMeta);\n }\n else {\n transport(logMetaMarkup, logArgsAndErrorsMarkup.args, logArgsAndErrorsMarkup.errors, logMeta, this.settings);\n }\n }\n else {\n runtime.transportFormatted(logMetaMarkup, logArgsAndErrorsMarkup.args, logArgsAndErrorsMarkup.errors, logMeta, this.settings);\n }\n }\n else {\n if (this.settings.overwrite?.transportJSON != null) {\n this.settings.overwrite.transportJSON(logObjWithMeta);\n }\n else if (this.settings.type !== \"hidden\") {\n runtime.transportJSON(logObjWithMeta);\n }\n }\n if (this.settings.attachedTransports != null && this.settings.attachedTransports.length > 0) {\n this.settings.attachedTransports.forEach((transportLogger) => {\n transportLogger(logObjWithMeta);\n });\n }\n return logObjWithMeta;\n }\n attachTransport(transportLogger) {\n this.settings.attachedTransports.push(transportLogger);\n }\n getSubLogger(settings, logObj) {\n const subLoggerSettings = {\n ...this.settings,\n ...settings,\n parentNames: this.settings?.parentNames != null && this.settings?.name != null\n ? [...this.settings.parentNames, this.settings.name]\n : this.settings?.name != null\n ? [this.settings.name]\n : undefined,\n prefix: [...this.settings.prefix, ...(settings?.prefix ?? [])],\n };\n const subLogger = new this.constructor(subLoggerSettings, logObj ?? this.logObj, this.stackDepthLevel);\n return subLogger;\n }\n _mask(args) {\n const maskKeys = this._getMaskKeys();\n return args?.map((arg) => {\n return this._recursiveCloneAndMaskValuesOfKeys(arg, maskKeys);\n });\n }\n _getMaskKeys() {\n const maskKeys = this.settings.maskValuesOfKeys ?? [];\n const signature = maskKeys.map(String).join(\"|\");\n if (this.settings.maskValuesOfKeysCaseInsensitive === true) {\n if (this.maskKeysCache?.source === maskKeys && this.maskKeysCache.caseInsensitive === true && this.maskKeysCache.signature === signature) {\n return this.maskKeysCache.normalized;\n }\n const normalized = maskKeys.map((key) => (typeof key === \"string\" ? key.toLowerCase() : String(key).toLowerCase()));\n this.maskKeysCache = {\n source: maskKeys,\n caseInsensitive: true,\n normalized,\n signature,\n };\n return normalized;\n }\n this.maskKeysCache = {\n source: maskKeys,\n caseInsensitive: false,\n normalized: maskKeys,\n signature,\n };\n return maskKeys;\n }\n _resolveLogArguments(args) {\n if (args.length === 1 && typeof args[0] === \"function\") {\n const candidate = args[0];\n if (candidate.length === 0) {\n const result = candidate();\n return Array.isArray(result) ? result : [result];\n }\n }\n return args;\n }\n _recursiveCloneAndMaskValuesOfKeys(source, keys, seen = []) {\n if (seen.includes(source)) {\n return { ...source };\n }\n if (typeof source === \"object\" && source !== null) {\n seen.push(source);\n }\n if (runtime.isError(source) || runtime.isBuffer(source)) {\n return source;\n }\n else if (source instanceof Map) {\n return new Map(source);\n }\n else if (source instanceof Set) {\n return new Set(source);\n }\n else if (Array.isArray(source)) {\n return source.map((item) => this._recursiveCloneAndMaskValuesOfKeys(item, keys, seen));\n }\n else if (source instanceof Date) {\n return new Date(source.getTime());\n }\n else if (source instanceof URL) {\n return urlToObject(source);\n }\n else if (source !== null && typeof source === \"object\") {\n const baseObject = runtime.isError(source) ? this._cloneError(source) : Object.create(Object.getPrototypeOf(source));\n return Object.getOwnPropertyNames(source).reduce((o, prop) => {\n const lookupKey = this.settings?.maskValuesOfKeysCaseInsensitive !== true\n ? prop\n : typeof prop === \"string\"\n ? prop.toLowerCase()\n : String(prop).toLowerCase();\n o[prop] = keys.includes(lookupKey)\n ? this.settings.maskPlaceholder\n : (() => {\n try {\n return this._recursiveCloneAndMaskValuesOfKeys(source[prop], keys, seen);\n }\n catch {\n return null;\n }\n })();\n return o;\n }, baseObject);\n }\n else {\n if (typeof source === \"string\") {\n let modifiedSource = source;\n for (const regEx of this.settings?.maskValuesRegEx || []) {\n modifiedSource = modifiedSource.replace(regEx, this.settings?.maskPlaceholder || \"\");\n }\n return modifiedSource;\n }\n return source;\n }\n }\n _recursiveCloneAndExecuteFunctions(source, seen = []) {\n if (this.isObjectOrArray(source) && seen.includes(source)) {\n return this.shallowCopy(source);\n }\n if (this.isObjectOrArray(source)) {\n seen.push(source);\n }\n if (Array.isArray(source)) {\n return source.map((item) => this._recursiveCloneAndExecuteFunctions(item, seen));\n }\n else if (source instanceof Date) {\n return new Date(source.getTime());\n }\n else if (this.isObject(source)) {\n return Object.getOwnPropertyNames(source).reduce((o, prop) => {\n const descriptor = Object.getOwnPropertyDescriptor(source, prop);\n if (descriptor) {\n Object.defineProperty(o, prop, descriptor);\n const value = source[prop];\n o[prop] = typeof value === \"function\" ? value() : this._recursiveCloneAndExecuteFunctions(value, seen);\n }\n return o;\n }, Object.create(Object.getPrototypeOf(source)));\n }\n else {\n return source;\n }\n }\n isObjectOrArray(value) {\n return typeof value === \"object\" && value !== null;\n }\n isObject(value) {\n return typeof value === \"object\" && !Array.isArray(value) && value !== null;\n }\n shallowCopy(source) {\n if (Array.isArray(source)) {\n return [...source];\n }\n else {\n return { ...source };\n }\n }\n _toLogObj(args, clonedLogObj = {}) {\n args = args?.map((arg) => (runtime.isError(arg) ? this._toErrorObject(arg) : arg));\n if (this.settings.argumentsArrayName == null) {\n if (args.length === 1 && !Array.isArray(args[0]) && runtime.isBuffer(args[0]) !== true && !(args[0] instanceof Date)) {\n clonedLogObj = typeof args[0] === \"object\" && args[0] != null ? { ...args[0], ...clonedLogObj } : { 0: args[0], ...clonedLogObj };\n }\n else {\n clonedLogObj = { ...clonedLogObj, ...args };\n }\n }\n else {\n clonedLogObj = {\n ...clonedLogObj,\n [this.settings.argumentsArrayName]: args,\n };\n }\n return clonedLogObj;\n }\n _cloneError(error) {\n const cloned = new error.constructor();\n Object.getOwnPropertyNames(error).forEach((key) => {\n cloned[key] = error[key];\n });\n return cloned;\n }\n _toErrorObject(error, depth = 0, seen = new Set()) {\n if (!seen.has(error)) {\n seen.add(error);\n }\n const errorObject = {\n nativeError: error,\n name: error.name ?? \"Error\",\n message: error.message,\n stack: runtime.getErrorTrace(error),\n };\n if (depth >= this.maxErrorCauseDepth) {\n return errorObject;\n }\n const causeValue = error.cause;\n if (causeValue != null) {\n const normalizedCause = toError(causeValue);\n if (!seen.has(normalizedCause)) {\n errorObject.cause = this._toErrorObject(normalizedCause, depth + 1, seen);\n }\n }\n return errorObject;\n }\n _addMetaToLogObj(logObj, logLevelId, logLevelName) {\n return {\n ...logObj,\n [this.settings.metaProperty]: runtime.getMeta(logLevelId, logLevelName, this.stackDepthLevel, !this.captureStackForMeta, this.settings.name, this.settings.parentNames),\n };\n }\n _shouldCaptureStack() {\n if (this.settings.hideLogPositionForProduction) {\n return false;\n }\n if (this.settings.type === \"json\") {\n return true;\n }\n const template = this.settings.prettyLogTemplate ?? \"\";\n const stackPlaceholders = /{{\\s*(file(Name|Path|Line|PathWithLine|NameWithLine)|fullFilePath)\\s*}}/;\n if (stackPlaceholders.test(template)) {\n return true;\n }\n return false;\n }\n _prettyFormatLogObjMeta(logObjMeta) {\n return buildPrettyMeta(this.settings, logObjMeta).text;\n }\n}\n","import { BaseLogger } from \"./BaseLogger.js\";\nexport * from \"./interfaces.js\";\nexport * from \"./BaseLogger.js\";\nexport class Logger extends BaseLogger {\n constructor(settings, logObj) {\n const isBrowser = typeof window !== \"undefined\" && typeof document !== \"undefined\";\n const normalizedSettings = { ...(settings ?? {}) };\n if (isBrowser) {\n normalizedSettings.stylePrettyLogs = settings?.stylePrettyLogs ?? true;\n }\n super(normalizedSettings, logObj, Number.NaN);\n }\n log(logLevelId, logLevelName, ...args) {\n return super.log(logLevelId, logLevelName, ...args);\n }\n silly(...args) {\n return super.log(0, \"SILLY\", ...args);\n }\n trace(...args) {\n return super.log(1, \"TRACE\", ...args);\n }\n debug(...args) {\n return super.log(2, \"DEBUG\", ...args);\n }\n info(...args) {\n return super.log(3, \"INFO\", ...args);\n }\n warn(...args) {\n return super.log(4, \"WARN\", ...args);\n }\n error(...args) {\n return super.log(5, \"ERROR\", ...args);\n }\n fatal(...args) {\n return super.log(6, \"FATAL\", ...args);\n }\n getSubLogger(settings, logObj) {\n return super.getSubLogger(settings, logObj);\n }\n}\n","import { Logger } from 'tslog'\n\nexport function createLogger(name: string, minLevel?: number): Logger<unknown> {\n return new Logger({\n name,\n minLevel: minLevel ?? (process.env.NODE_ENV === 'production' ? 3 : 0),\n prettyLogTemplate: '{{dateIsoStr}} {{logLevelName}} [{{name}}] ',\n })\n}\n","import { z } from 'zod'\nimport { WARNING_NO_LICENCE } from './constants'\nimport { parseFrontmatter } from './validation'\n\n// --- Agent Skills spec name validation ---\n\nconst SKILL_NAME_REGEX = /^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/\nconst CONSECUTIVE_HYPHENS_REGEX = /--/\n\n/**\n * Validates a skill name against the agentskills.io spec:\n * - 1-64 characters\n * - Lowercase alphanumeric and hyphens only\n * - Must not start or end with a hyphen\n * - Must not contain consecutive hyphens\n */\nfunction isValidSkillName(name: string): boolean {\n if (name.length < 1 || name.length > 64) return false\n if (!SKILL_NAME_REGEX.test(name)) return false\n if (CONSECUTIVE_HYPHENS_REGEX.test(name)) return false\n return true\n}\n\n// --- Agent Skills spec schema (agentskills.io standard) ---\n\n/**\n * The official Agent Skills spec frontmatter fields.\n * Any valid agentskills.io SKILL.md should pass this schema.\n *\n * @see https://agentskills.io/specification\n */\nexport const agentSkillsSpecSchema = z.object({\n name: z.string().min(1).max(64).refine(isValidSkillName, {\n message:\n 'Name must be 1-64 lowercase alphanumeric characters and hyphens. Must not start/end with a hyphen or contain consecutive hyphens.',\n }),\n description: z.string().min(1).max(1024),\n license: z.string().optional(),\n compatibility: z.string().max(500).optional(),\n metadata: z.record(z.string(), z.string()).optional(),\n 'allowed-tools': z\n .union([z.string(), z.array(z.string())])\n .optional()\n .transform((val) => {\n if (typeof val === 'string') return val.split(/\\s+/).filter(Boolean)\n return val\n }),\n})\n\nexport type AgentSkillsSpec = z.infer<typeof agentSkillsSpecSchema>\n\n// --- Agentver extended fields (strict superset) ---\n\n/**\n * Agentver extends the Agent Skills spec with additional fields\n * for richer registry features: version pinning, triggers,\n * dependency management, and conflict resolution.\n */\nexport const agentverSkillSchema = agentSkillsSpecSchema.extend({\n /** Agentver requires semver for registry publishing */\n version: z\n .string()\n .regex(/^\\d+\\.\\d+\\.\\d+(-[\\w.]+)?$/, 'Must be valid semver')\n .optional(),\n /** Agent compatibility — which agents this skill is designed for */\n 'agentver-compatibility': z\n .object({\n agents: z.array(z.string()).optional(),\n })\n .optional(),\n /** Trigger keywords — when agents should activate this skill */\n triggers: z.array(z.string()).optional(),\n /** Extend another skill by name */\n extends: z.string().optional(),\n /** Skills this one depends on */\n dependsOn: z.array(z.string()).optional(),\n /** Skills that conflict with this one */\n conflictsWith: z.array(z.string()).optional(),\n})\n\nexport type AgentverSkill = z.infer<typeof agentverSkillSchema>\n\n// --- Validation result types ---\n\nexport type SkillValidationResult = {\n valid: boolean\n errors: string[]\n warnings: string[]\n specCompliant: boolean\n agentverExtensions: string[]\n data?: AgentverSkill\n body?: string\n}\n\n// --- Parsing and validation functions ---\n\nconst AGENTVER_EXTENSION_FIELDS = [\n 'version',\n 'agentver-compatibility',\n 'triggers',\n 'extends',\n 'dependsOn',\n 'conflictsWith',\n] as const\n\n/**\n * Parse SKILL.md content and extract typed frontmatter + body.\n * Returns the full Agentver skill data (superset of Agent Skills spec).\n */\nexport function parseSkillFrontmatter(content: string): {\n frontmatter: AgentverSkill\n body: string\n} {\n const { rawData, body, hasFrontmatter } = parseFrontmatter(content)\n\n if (!hasFrontmatter) {\n throw new Error('No YAML frontmatter found. Expected content delimited by --- markers.')\n }\n\n const parsed = agentverSkillSchema.safeParse(rawData)\n\n if (!parsed.success) {\n const messages = parsed.error.issues.map((issue) => {\n const path = issue.path.join('.')\n return path ? `${path}: ${issue.message}` : issue.message\n })\n throw new Error(`Invalid SKILL.md frontmatter:\\n${messages.join('\\n')}`)\n }\n\n return { frontmatter: parsed.data, body }\n}\n\n/**\n * Validate a SKILL.md file against both the Agent Skills spec\n * and Agentver extensions. Returns detailed validation info.\n */\nexport function validateSkillMd(content: string): SkillValidationResult {\n const errors: string[] = []\n const warnings: string[] = []\n const agentverExtensions: string[] = []\n\n const { rawData, body, hasFrontmatter } = parseFrontmatter(content)\n\n if (!hasFrontmatter) {\n return {\n valid: false,\n errors: ['No YAML frontmatter found. Expected content delimited by --- markers.'],\n warnings: [],\n specCompliant: false,\n agentverExtensions: [],\n body,\n }\n }\n\n // Check which Agentver extension fields are present\n for (const field of AGENTVER_EXTENSION_FIELDS) {\n if (field in rawData && rawData[field] !== undefined) {\n agentverExtensions.push(field)\n }\n }\n\n // Validate against the full Agentver schema (superset)\n const agentverParsed = agentverSkillSchema.safeParse(rawData)\n\n if (!agentverParsed.success) {\n const zodErrors = agentverParsed.error.issues.map((issue) => {\n const path = issue.path.join('.')\n return path ? `${path}: ${issue.message}` : issue.message\n })\n return {\n valid: false,\n errors: zodErrors,\n warnings: [],\n specCompliant: false,\n agentverExtensions,\n body,\n }\n }\n\n // Check spec compliance (required fields present with correct constraints)\n const specCompliant = isAgentSkillsSpecCompliant(content)\n\n // Warnings for missing optional fields that improve discoverability\n if (!agentverParsed.data.license) {\n warnings.push(WARNING_NO_LICENCE)\n }\n\n if (!body || body.trim().length === 0) {\n warnings.push('SKILL.md body is empty. Add instructions for agents to follow.')\n }\n\n if (agentverParsed.data.description && agentverParsed.data.description.length < 20) {\n warnings.push(\n 'Description is very short. Include what the skill does and when to use it for better discoverability.'\n )\n }\n\n return {\n valid: true,\n errors,\n warnings,\n specCompliant,\n agentverExtensions,\n data: agentverParsed.data,\n body,\n }\n}\n\n/**\n * Check whether a SKILL.md file is fully compliant with the\n * agentskills.io spec (ignoring Agentver extensions).\n */\nexport function isAgentSkillsSpecCompliant(content: string): boolean {\n const { rawData, hasFrontmatter } = parseFrontmatter(content)\n\n if (!hasFrontmatter) return false\n\n // Extract only spec-defined fields for validation\n const specFields: Record<string, unknown> = {}\n const specFieldNames = [\n 'name',\n 'description',\n 'license',\n 'compatibility',\n 'metadata',\n 'allowed-tools',\n ]\n\n for (const key of specFieldNames) {\n if (key in rawData) {\n specFields[key] = rawData[key]\n }\n }\n\n const parsed = agentSkillsSpecSchema.safeParse(specFields)\n return parsed.success\n}\n\n/**\n * Validate a skill name against the agentskills.io naming rules.\n * Useful for validating names independently of full SKILL.md parsing.\n */\nexport function validateSkillName(name: string): { valid: boolean; error?: string } {\n if (name.length < 1) {\n return { valid: false, error: 'Name must not be empty.' }\n }\n if (name.length > 64) {\n return { valid: false, error: `Name must be at most 64 characters (got ${name.length}).` }\n }\n if (name !== name.toLowerCase()) {\n return { valid: false, error: 'Name must be lowercase.' }\n }\n if (name.startsWith('-') || name.endsWith('-')) {\n return { valid: false, error: 'Name must not start or end with a hyphen.' }\n }\n if (CONSECUTIVE_HYPHENS_REGEX.test(name)) {\n return { valid: false, error: 'Name must not contain consecutive hyphens.' }\n }\n if (!SKILL_NAME_REGEX.test(name)) {\n return {\n valid: false,\n error: 'Name must contain only lowercase alphanumeric characters and hyphens.',\n }\n }\n return { valid: true }\n}\n","import { type SkillFrontmatter, skillFrontmatterSchema } from './schemas'\nimport { WARNING_NO_LICENCE } from './constants'\n\n// --- Frontmatter validation result ---\n\nexport type FrontmatterValidationResult = {\n valid: boolean\n errors: string[]\n warnings: string[]\n data?: SkillFrontmatter\n body?: string\n}\n\nexport type SpecComplianceLevel = 'compliant' | 'partial' | 'none'\n\n// --- Simple YAML frontmatter parser (no external dependency) ---\n\nconst FRONTMATTER_REGEX = /^---\\r?\\n([\\s\\S]*?)\\r?\\n---/\n\n/**\n * Parse a simple YAML key-value block.\n * Supports: strings, arrays (inline `[a, b]` and multiline `- item`),\n * and records (`key: value` nested under a parent).\n */\nfunction parseSimpleYaml(yaml: string): Record<string, unknown> {\n const result: Record<string, unknown> = {}\n const lines = yaml.split(/\\r?\\n/)\n\n let currentKey: string | null = null\n let currentArray: string[] | null = null\n let currentRecord: Record<string, string> | null = null\n\n for (const line of lines) {\n // Skip empty lines and comments\n if (line.trim() === '' || line.trim().startsWith('#')) {\n continue\n }\n\n // Array item continuation (e.g. ` - value`)\n const arrayItemMatch = line.match(/^\\s+-\\s+(.+)$/)\n if (arrayItemMatch && currentKey && currentArray) {\n currentArray.push(arrayItemMatch[1]!.trim().replace(/^['\"]|['\"]$/g, ''))\n continue\n }\n\n // Record item continuation (e.g. ` subkey: value`)\n const recordItemMatch = line.match(/^\\s+(\\S+):\\s+(.+)$/)\n if (recordItemMatch && currentKey && currentRecord) {\n currentRecord[recordItemMatch[1]!] = recordItemMatch[2]!.trim().replace(/^['\"]|['\"]$/g, '')\n continue\n }\n\n // If we were collecting an array or record, flush it\n if (currentKey && currentArray) {\n result[currentKey] = currentArray\n currentArray = null\n currentKey = null\n }\n if (currentKey && currentRecord) {\n result[currentKey] = currentRecord\n currentRecord = null\n currentKey = null\n }\n\n // Top-level key: value\n const kvMatch = line.match(/^([a-zA-Z_-]+):\\s*(.*)$/)\n if (!kvMatch) continue\n\n const key = kvMatch[1]!\n const rawValue = kvMatch[2]!.trim()\n\n // Empty value — could be start of array or record block\n if (rawValue === '') {\n currentKey = key\n currentArray = []\n currentRecord = {}\n continue\n }\n\n // Inline array: [a, b, c]\n const inlineArrayMatch = rawValue.match(/^\\[(.+)\\]$/)\n if (inlineArrayMatch) {\n result[key] = inlineArrayMatch[1]!.split(',').map((s) => s.trim().replace(/^['\"]|['\"]$/g, ''))\n continue\n }\n\n // Boolean\n if (rawValue === 'true' || rawValue === 'false') {\n result[key] = rawValue === 'true'\n continue\n }\n\n // Number\n if (/^\\d+(\\.\\d+)?$/.test(rawValue)) {\n result[key] = Number(rawValue)\n continue\n }\n\n // String (strip quotes if present)\n result[key] = rawValue.replace(/^['\"]|['\"]$/g, '')\n }\n\n // Flush any trailing collection\n if (currentKey && currentArray && currentArray.length > 0) {\n result[currentKey] = currentArray\n } else if (currentKey && currentRecord && Object.keys(currentRecord).length > 0) {\n result[currentKey] = currentRecord\n }\n\n return result\n}\n\n/**\n * Extract YAML frontmatter and markdown body from a SKILL.md string.\n */\nexport function parseFrontmatter(content: string): {\n rawData: Record<string, unknown>\n body: string\n hasFrontmatter: boolean\n} {\n const match = content.match(FRONTMATTER_REGEX)\n\n if (!match) {\n return { rawData: {}, body: content.trim(), hasFrontmatter: false }\n }\n\n const yamlBlock = match[1] ?? ''\n const afterFrontmatter = content.slice(match[0].length)\n\n return {\n rawData: parseSimpleYaml(yamlBlock),\n body: afterFrontmatter.trim(),\n hasFrontmatter: true,\n }\n}\n\n/**\n * Validate a SKILL.md file's frontmatter against the spec.\n *\n * Returns structured validation info including compliance level,\n * errors, warnings, and parsed data.\n */\nexport function validateSkillFrontmatter(content: string): FrontmatterValidationResult {\n const errors: string[] = []\n const warnings: string[] = []\n\n const { rawData, body, hasFrontmatter } = parseFrontmatter(content)\n\n if (!hasFrontmatter) {\n return {\n valid: false,\n errors: ['No YAML frontmatter found. Expected content delimited by --- markers.'],\n warnings: [],\n body,\n }\n }\n\n const parsed = skillFrontmatterSchema.safeParse(rawData)\n\n if (!parsed.success) {\n const zodErrors = parsed.error.issues.map((issue) => {\n const path = issue.path.join('.')\n return path ? `${path}: ${issue.message}` : issue.message\n })\n return {\n valid: false,\n errors: zodErrors,\n warnings: [],\n body,\n }\n }\n\n // Valid but check for optional fields that improve discoverability\n if (!parsed.data.license) {\n warnings.push(WARNING_NO_LICENCE)\n }\n\n if (!parsed.data.compatibility || parsed.data.compatibility.length === 0) {\n warnings.push(\n 'No compatibility agents listed. Consider adding agents like claude-code, cursor, etc.'\n )\n }\n\n if (!parsed.data['allowed-tools'] || parsed.data['allowed-tools'].length === 0) {\n warnings.push('No allowed-tools specified. Consider listing tools this skill requires.')\n }\n\n return {\n valid: true,\n errors,\n warnings,\n data: parsed.data,\n body,\n }\n}\n\n/**\n * Determine the spec compliance level from a validation result.\n */\nexport function getSpecComplianceLevel(content: string): SpecComplianceLevel {\n const { hasFrontmatter, rawData } = parseFrontmatter(content)\n\n if (!hasFrontmatter) {\n return 'none'\n }\n\n const parsed = skillFrontmatterSchema.safeParse(rawData)\n\n if (!parsed.success) {\n // Has frontmatter but doesn't fully validate\n return 'partial'\n }\n\n return 'compliant'\n}\n","/**\n * Deterministic JSON serialiser for merge-friendly Git output.\n *\n * - Deep-sorts all object keys alphabetically\n * - Sorts arrays of strings alphabetically\n * - Preserves order of arrays containing non-string elements\n * - 2-space indentation with trailing newline\n */\n\nfunction sortDeep(value: unknown): unknown {\n if (value === null || value === undefined) {\n return value\n }\n\n if (Array.isArray(value)) {\n // Sort arrays of strings alphabetically; leave other arrays in order\n const allStrings = value.length > 0 && value.every((item) => typeof item === 'string')\n\n if (allStrings) {\n return [...(value as string[])].sort()\n }\n\n return value.map(sortDeep)\n }\n\n if (typeof value === 'object') {\n const sorted: Record<string, unknown> = {}\n const keys = Object.keys(value as Record<string, unknown>).sort()\n\n for (const key of keys) {\n sorted[key] = sortDeep((value as Record<string, unknown>)[key])\n }\n\n return sorted\n }\n\n return value\n}\n\nexport function serialiseDeterministic(data: unknown): string {\n const sorted = sortDeep(data)\n return `${JSON.stringify(sorted, null, 2)}\\n`\n}\n","import { existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from 'node:fs'\nimport { join } from 'node:path'\nimport type { ManifestV2 } from '@agentver/shared'\nimport { manifestAnySchema } from '@agentver/shared'\nimport { serialiseDeterministic } from './serialise'\n\nconst MANIFEST_DIR = '.agentver'\nconst MANIFEST_FILE = 'manifest.json'\n\nconst EMPTY_MANIFEST: ManifestV2 = { version: 2, packages: {} }\n\nfunction getManifestPath(projectRoot: string): string {\n return join(projectRoot, MANIFEST_DIR, MANIFEST_FILE)\n}\n\nfunction migrateV1ToV2(v1: {\n version: 1\n packages: Record<string, { name: string; version: string; agents: string[]; installedAt: string }>\n}): ManifestV2 {\n const packages: ManifestV2['packages'] = {}\n\n for (const [name, pkg] of Object.entries(v1.packages)) {\n packages[name] = {\n source: {\n type: 'git',\n uri: 'unknown',\n path: '',\n ref: 'unknown',\n commit: 'unknown',\n },\n agents: pkg.agents,\n installedAt: pkg.installedAt,\n modified: false,\n }\n }\n\n return { version: 2, packages }\n}\n\nexport function readManifest(projectRoot: string): ManifestV2 {\n const manifestPath = getManifestPath(projectRoot)\n\n if (!existsSync(manifestPath)) {\n return EMPTY_MANIFEST\n }\n\n const raw = readFileSync(manifestPath, 'utf-8')\n\n let parsed: unknown\n try {\n parsed = JSON.parse(raw)\n } catch {\n return EMPTY_MANIFEST\n }\n\n const result = manifestAnySchema.safeParse(parsed)\n if (!result.success) {\n return EMPTY_MANIFEST\n }\n\n if (result.data.version === 1) {\n const migrated = migrateV1ToV2(result.data)\n writeManifest(projectRoot, migrated)\n return migrated\n }\n\n return result.data\n}\n\nexport function writeManifest(projectRoot: string, manifest: ManifestV2): void {\n const dir = join(projectRoot, MANIFEST_DIR)\n\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true })\n }\n\n const filePath = getManifestPath(projectRoot)\n const tmpPath = `${filePath}.tmp`\n writeFileSync(tmpPath, serialiseDeterministic(manifest))\n renameSync(tmpPath, filePath)\n}\n","import { join } from 'node:path'\nimport type { AuditResult, ManifestV2Package } from '@agentver/shared'\nimport chalk from 'chalk'\nimport type { Command } from 'commander'\nimport type ora from 'ora'\nimport { readFilesFromDirectory } from '../git/fetcher.js'\nimport type { GitSource } from '../git/types.js'\nimport { createSpinner, isJSONMode, outputError, outputSuccess } from '../output'\nimport type { ScanResult as SecurityScanResult } from '../security/index.js'\nimport { renderScanResult, scanFiles } from '../security/index.js'\nimport { getCanonicalSkillPath } from '../storage/canonical.js'\nimport { readManifest } from '../storage/manifest.js'\n\ntype AuditOptions = {\n path?: string\n}\n\nconst FALLBACK_SOURCE: GitSource = {\n host: 'github.com',\n owner: 'local',\n repo: 'audit',\n path: '',\n ref: 'HEAD',\n}\n\n/**\n * Builds a placeholder GitSource for locally-installed packages.\n * The scanner uses the source to check trusted patterns; for local\n * audits we provide the manifest's URI when available.\n */\nfunction buildSourceFromManifest(pkg: ManifestV2Package | undefined): GitSource {\n if (!pkg || pkg.source.type !== 'git') {\n return FALLBACK_SOURCE\n }\n\n const { source } = pkg\n const parts = source.uri.split('/')\n return {\n host: (parts[0] ?? 'github.com') as GitSource['host'],\n owner: parts[1] ?? 'unknown',\n repo: parts[2] ?? 'unknown',\n path: source.path,\n ref: source.ref,\n commit: source.commit,\n }\n}\n\nasync function auditDirectory(\n dirPath: string,\n label: string,\n source: GitSource\n): Promise<SecurityScanResult | null> {\n const jsonMode = isJSONMode()\n const spinner = createSpinner(`Scanning ${label}...`).start()\n\n try {\n const files = await readFilesFromDirectory(dirPath)\n\n if (files.length === 0) {\n if (jsonMode) {\n return null\n }\n spinner.warn(`No files found at ${dirPath}`)\n return null\n }\n\n const result = await scanFiles(files, source, { skipAudit: false })\n\n if (!jsonMode) {\n renderScanResult(result, spinner as ReturnType<typeof ora>)\n } else {\n spinner.stop()\n }\n\n return result\n } catch (error) {\n const message = `Failed to scan ${label}: ${error instanceof Error ? error.message : String(error)}`\n if (jsonMode) {\n outputError('AUDIT_FAILED', message)\n process.exit(1)\n }\n spinner.fail(message)\n return null\n }\n}\n\nexport function registerAuditCommand(program: Command): void {\n program\n .command('audit [name]')\n .description('Run a security scan on installed skills or an arbitrary directory')\n .option('--path <path>', 'Scan an arbitrary directory instead of installed skills')\n .action(async (name: string | undefined, options: AuditOptions) => {\n const jsonMode = isJSONMode()\n const projectRoot = process.cwd()\n\n // Scan arbitrary directory\n if (options.path) {\n const targetPath = join(projectRoot, options.path)\n const source: GitSource = {\n host: 'github.com',\n owner: 'local',\n repo: 'audit',\n path: '',\n ref: 'HEAD',\n }\n\n const scanResult = await auditDirectory(targetPath, options.path, source)\n\n if (jsonMode) {\n const passed =\n !scanResult || scanResult.verdict === 'PASS' || scanResult.verdict === 'WARN'\n const auditResult: AuditResult = {\n target: options.path,\n passed,\n findings: (scanResult?.findings ?? []).map((f) => ({\n rule: f.category,\n severity: f.severity,\n file: f.file,\n line: f.line ?? 0,\n evidence: f.evidence ?? '',\n })),\n }\n outputSuccess(auditResult)\n }\n return\n }\n\n const manifest = readManifest(projectRoot)\n const packageNames = name\n ? [name].filter((n) => manifest.packages[n])\n : Object.keys(manifest.packages)\n\n if (packageNames.length === 0) {\n if (jsonMode) {\n const auditResult: AuditResult = {\n target: name ?? projectRoot,\n passed: true,\n findings: [],\n }\n outputSuccess(auditResult)\n return\n }\n if (name) {\n console.log(chalk.dim(`Package \"${name}\" is not installed.`))\n } else {\n console.log(chalk.dim('No packages installed. Use --path to scan a directory.'))\n }\n return\n }\n\n if (!jsonMode) {\n console.log(\n chalk.bold(\n `\\nAuditing ${packageNames.length} package${packageNames.length === 1 ? '' : 's'}...\\n`\n )\n )\n }\n\n const allFindings: AuditResult['findings'] = []\n let allPassed = true\n\n for (const pkgName of packageNames) {\n const pkg = manifest.packages[pkgName]\n const canonicalPath = getCanonicalSkillPath(projectRoot, pkgName, 'project')\n const source = buildSourceFromManifest(pkg)\n\n const scanResult = await auditDirectory(canonicalPath, pkgName, source)\n\n if (jsonMode && scanResult) {\n if (scanResult.verdict === 'BLOCK') {\n allPassed = false\n }\n for (const f of scanResult.findings) {\n allFindings.push({\n rule: f.category,\n severity: f.severity,\n file: f.file,\n line: f.line ?? 0,\n evidence: f.evidence ?? '',\n })\n }\n }\n }\n\n if (jsonMode) {\n const auditResult: AuditResult = {\n target: name ?? projectRoot,\n passed: allPassed,\n findings: allFindings,\n }\n outputSuccess(auditResult)\n }\n })\n}\n","import { execFile } from 'node:child_process'\nimport { randomUUID } from 'node:crypto'\nimport type { Dirent } from 'node:fs'\nimport { mkdir, readdir, readFile, rm, stat, writeFile } from 'node:fs/promises'\nimport { tmpdir } from 'node:os'\nimport { join } from 'node:path'\nimport { promisify } from 'node:util'\nimport { AgentverError, createLogger } from '@agentver/shared'\nimport { cacheFiles, getCachedFiles } from './cache.js'\nimport type { FetchedFile, FetchResult, FetchStrategy, GitSource, ResolvedRef } from './types.js'\n\nconst logger = createLogger('git:fetcher')\n\nconst execFileAsync = promisify(execFile)\n\nconst GIT_TIMEOUT_MS = 60_000\nconst HTTP_TIMEOUT_MS = 15_000\nconst MAX_FILE_SIZE_BYTES = 5 * 1024 * 1024\n\nconst STRATEGIES: Array<{\n name: FetchStrategy\n fn: (resolved: ResolvedRef) => Promise<FetchedFile[]>\n}> = [\n { name: 'api', fn: fetchViaApi },\n { name: 'archive', fn: fetchViaArchive },\n { name: 'sparse-checkout', fn: fetchViaSparseCheckout },\n { name: 'clone', fn: fetchViaClone },\n]\n\nexport async function fetchFiles(resolved: ResolvedRef): Promise<FetchResult> {\n const cached = getCachedFiles(resolved.source, resolved.commitSha)\n if (cached) {\n logger.info('Using cached files')\n return { files: cached, commitSha: resolved.commitSha, source: resolved.source }\n }\n\n for (const strategy of STRATEGIES) {\n logger.info(`Trying fetch strategy: ${strategy.name}`)\n\n try {\n const files = await strategy.fn(resolved)\n cacheFiles(resolved.source, resolved.commitSha, files)\n return { files, commitSha: resolved.commitSha, source: resolved.source }\n } catch (error) {\n logger.warn(`Strategy \"${strategy.name}\" failed: ${String(error)}`)\n }\n }\n\n throw new AgentverError(\n 'INTERNAL_ERROR',\n `All fetch strategies exhausted for ${resolved.source.host}/${resolved.source.owner}/${resolved.source.repo}`\n )\n}\n\nexport function buildRepoUrl(source: GitSource): string {\n return `https://${source.host}/${source.owner}/${source.repo}.git`\n}\n\nexport async function execGit(args: string[], cwd?: string): Promise<string> {\n try {\n const { stdout } = await execFileAsync('git', args, {\n cwd,\n timeout: GIT_TIMEOUT_MS,\n maxBuffer: 50 * 1024 * 1024,\n })\n return stdout\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n throw new AgentverError(\n 'INTERNAL_ERROR',\n `Git command failed: git ${args.join(' ')} — ${message}`\n )\n }\n}\n\nexport async function readFilesFromDirectory(\n dirPath: string,\n basePath = ''\n): Promise<FetchedFile[]> {\n const files: FetchedFile[] = []\n\n let entries: Dirent[]\n try {\n entries = await readdir(dirPath, { withFileTypes: true })\n } catch (error) {\n if (isEnoent(error)) return []\n throw error\n }\n\n for (const entry of entries) {\n const name = String(entry.name)\n if (name === '.git') continue\n\n const fullPath = join(dirPath, name)\n const relativePath = basePath ? `${basePath}/${name}` : name\n\n if (entry.isDirectory()) {\n const nested = await readFilesFromDirectory(fullPath, relativePath)\n files.push(...nested)\n continue\n }\n\n if (!entry.isFile()) continue\n\n try {\n const fileStat = await stat(fullPath)\n if (fileStat.size > MAX_FILE_SIZE_BYTES) {\n logger.debug(`Skipping large file (${fileStat.size} bytes): ${relativePath}`)\n continue\n }\n\n const content = await readFile(fullPath, 'utf-8')\n files.push({ path: relativePath, content, size: fileStat.size })\n } catch (error) {\n if (isEnoent(error)) continue\n logger.warn(`Failed to read file ${relativePath}: ${String(error)}`)\n }\n }\n\n return files\n}\n\n// --- Strategy implementations ---\n\nasync function fetchViaApi(resolved: ResolvedRef): Promise<FetchedFile[]> {\n const { source, commitSha } = resolved\n\n if (source.host === 'github.com') {\n return fetchGitHubApi(source, commitSha)\n }\n\n if (source.host === 'gitlab.com') {\n return fetchGitLabApi(source, commitSha)\n }\n\n throw new AgentverError('INTERNAL_ERROR', `API fetch not supported for host: ${source.host}`)\n}\n\nasync function fetchGitHubApi(source: GitSource, commitSha: string): Promise<FetchedFile[]> {\n const path = source.path || ''\n const url = `https://api.github.com/repos/${source.owner}/${source.repo}/contents/${path}?ref=${commitSha}`\n\n const response = await gitHubFetch(url)\n\n if (!response.ok) {\n throw new AgentverError('INTERNAL_ERROR', `GitHub contents API returned ${response.status}`)\n }\n\n const data: unknown = await response.json()\n\n // Single file response\n if (!Array.isArray(data)) {\n const file = data as GitHubContentFile\n if (file.type !== 'file' || !file.content) {\n throw new AgentverError('INTERNAL_ERROR', 'Unexpected GitHub API response for single file')\n }\n\n const content = Buffer.from(file.content, 'base64').toString('utf-8')\n return [{ path: file.name, content, size: file.size }]\n }\n\n // Directory response — recursively fetch files\n const items = data as GitHubContentItem[]\n const files: FetchedFile[] = []\n\n for (const item of items) {\n if (item.type === 'dir') {\n const subSource: GitSource = { ...source, path: item.path }\n const subFiles = await fetchGitHubApi(subSource, commitSha)\n for (const subFile of subFiles) {\n files.push({ ...subFile, path: `${item.name}/${subFile.path}` })\n }\n continue\n }\n\n if (item.type !== 'file') continue\n\n // Files <= 1MB can be fetched via contents API directly\n if (item.size <= 1_000_000 && item.download_url) {\n const fileResponse = await gitHubFetch(\n `https://api.github.com/repos/${source.owner}/${source.repo}/contents/${item.path}?ref=${commitSha}`\n )\n if (fileResponse.ok) {\n const fileData = (await fileResponse.json()) as GitHubContentFile\n if (fileData.content) {\n const content = Buffer.from(fileData.content, 'base64').toString('utf-8')\n const relativePath = source.path ? item.path.slice(source.path.length + 1) : item.path\n files.push({ path: relativePath, content, size: item.size })\n continue\n }\n }\n }\n\n // Large files — use Git Blobs API\n if (item.sha) {\n const blobUrl = `https://api.github.com/repos/${source.owner}/${source.repo}/git/blobs/${item.sha}`\n const blobResponse = await gitHubFetch(blobUrl)\n if (blobResponse.ok) {\n const blobData = (await blobResponse.json()) as {\n content: string\n encoding: string\n size: number\n }\n if (blobData.size > MAX_FILE_SIZE_BYTES) {\n logger.debug(`Skipping large file via blob (${blobData.size} bytes): ${item.path}`)\n continue\n }\n const content =\n blobData.encoding === 'base64'\n ? Buffer.from(blobData.content, 'base64').toString('utf-8')\n : blobData.content\n const relativePath = source.path ? item.path.slice(source.path.length + 1) : item.path\n files.push({ path: relativePath, content, size: blobData.size })\n }\n }\n }\n\n return files\n}\n\nasync function fetchGitLabApi(source: GitSource, commitSha: string): Promise<FetchedFile[]> {\n const projectId = encodeURIComponent(`${source.owner}/${source.repo}`)\n const path = source.path || ''\n const treeUrl = `https://gitlab.com/api/v4/projects/${projectId}/repository/tree?path=${encodeURIComponent(path)}&ref=${commitSha}&recursive=true&per_page=100`\n\n const headers: Record<string, string> = { 'User-Agent': 'agentver-cli' }\n const token = process.env.GITLAB_TOKEN\n if (token) {\n headers['PRIVATE-TOKEN'] = token\n }\n\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), HTTP_TIMEOUT_MS)\n\n try {\n const response = await fetch(treeUrl, { headers, signal: controller.signal })\n clearTimeout(timeoutId)\n\n if (!response.ok) {\n throw new AgentverError('INTERNAL_ERROR', `GitLab tree API returned ${response.status}`)\n }\n\n const tree = (await response.json()) as GitLabTreeItem[]\n const files: FetchedFile[] = []\n\n for (const item of tree) {\n if (item.type !== 'blob') continue\n\n const filePath = encodeURIComponent(item.path)\n const fileUrl = `https://gitlab.com/api/v4/projects/${projectId}/repository/files/${filePath}/raw?ref=${commitSha}`\n\n const fileController = new AbortController()\n const fileTimeoutId = setTimeout(() => fileController.abort(), HTTP_TIMEOUT_MS)\n\n try {\n const fileResponse = await fetch(fileUrl, { headers, signal: fileController.signal })\n clearTimeout(fileTimeoutId)\n\n if (!fileResponse.ok) {\n logger.warn(`Failed to fetch GitLab file ${item.path}: ${fileResponse.status}`)\n continue\n }\n\n const content = await fileResponse.text()\n if (content.length > MAX_FILE_SIZE_BYTES) {\n logger.debug(`Skipping large file (${content.length} bytes): ${item.path}`)\n continue\n }\n\n const relativePath = path ? item.path.slice(path.length + 1) : item.path\n files.push({ path: relativePath, content, size: content.length })\n } catch (error) {\n clearTimeout(fileTimeoutId)\n logger.warn(`Failed to fetch GitLab file ${item.path}: ${String(error)}`)\n }\n }\n\n return files\n } catch (error) {\n clearTimeout(timeoutId)\n if (error instanceof AgentverError) throw error\n throw new AgentverError('INTERNAL_ERROR', `GitLab API fetch failed: ${String(error)}`)\n }\n}\n\nasync function fetchViaArchive(resolved: ResolvedRef): Promise<FetchedFile[]> {\n const { source, commitSha } = resolved\n\n if (source.host === 'github.com') {\n return fetchGitHubArchive(source, commitSha)\n }\n\n if (source.host === 'gitlab.com') {\n return fetchGitLabArchive(source, commitSha)\n }\n\n // Generic hosts — try git archive command\n return fetchGitArchiveCommand(source, commitSha)\n}\n\nasync function fetchGitHubArchive(source: GitSource, commitSha: string): Promise<FetchedFile[]> {\n const url = `https://api.github.com/repos/${source.owner}/${source.repo}/tarball/${commitSha}`\n const tempDir = join(tmpdir(), `agentver-archive-${randomUUID()}`)\n\n try {\n await mkdir(tempDir, { recursive: true })\n\n const headers: Record<string, string> = {\n Accept: 'application/vnd.github.v3+json',\n 'User-Agent': 'agentver-cli',\n }\n\n const token = process.env.GITHUB_TOKEN\n if (token) {\n headers.Authorization = `Bearer ${token}`\n }\n\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), GIT_TIMEOUT_MS)\n\n const response = await fetch(url, { headers, signal: controller.signal, redirect: 'follow' })\n clearTimeout(timeoutId)\n\n if (!response.ok) {\n throw new AgentverError('INTERNAL_ERROR', `GitHub tarball API returned ${response.status}`)\n }\n\n const tarballPath = join(tempDir, 'archive.tar.gz')\n const buffer = Buffer.from(await response.arrayBuffer())\n await writeFile(tarballPath, buffer)\n\n const extractDir = join(tempDir, 'extracted')\n await mkdir(extractDir, { recursive: true })\n\n await execFileAsync('tar', ['xzf', tarballPath, '-C', extractDir, '--strip-components=1'], {\n timeout: GIT_TIMEOUT_MS,\n })\n\n const readFrom = source.path ? join(extractDir, source.path) : extractDir\n return await readFilesFromDirectory(readFrom)\n } finally {\n await rm(tempDir, { recursive: true, force: true }).catch(() => {})\n }\n}\n\nasync function fetchGitLabArchive(source: GitSource, commitSha: string): Promise<FetchedFile[]> {\n const projectId = encodeURIComponent(`${source.owner}/${source.repo}`)\n const url = `https://gitlab.com/api/v4/projects/${projectId}/repository/archive.tar.gz?sha=${commitSha}`\n const tempDir = join(tmpdir(), `agentver-archive-${randomUUID()}`)\n\n try {\n await mkdir(tempDir, { recursive: true })\n\n const headers: Record<string, string> = { 'User-Agent': 'agentver-cli' }\n const token = process.env.GITLAB_TOKEN\n if (token) {\n headers['PRIVATE-TOKEN'] = token\n }\n\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), GIT_TIMEOUT_MS)\n\n const response = await fetch(url, { headers, signal: controller.signal, redirect: 'follow' })\n clearTimeout(timeoutId)\n\n if (!response.ok) {\n throw new AgentverError('INTERNAL_ERROR', `GitLab archive API returned ${response.status}`)\n }\n\n const tarballPath = join(tempDir, 'archive.tar.gz')\n const buffer = Buffer.from(await response.arrayBuffer())\n await writeFile(tarballPath, buffer)\n\n const extractDir = join(tempDir, 'extracted')\n await mkdir(extractDir, { recursive: true })\n\n await execFileAsync('tar', ['xzf', tarballPath, '-C', extractDir, '--strip-components=1'], {\n timeout: GIT_TIMEOUT_MS,\n })\n\n const readFrom = source.path ? join(extractDir, source.path) : extractDir\n return await readFilesFromDirectory(readFrom)\n } finally {\n await rm(tempDir, { recursive: true, force: true }).catch(() => {})\n }\n}\n\nasync function fetchGitArchiveCommand(\n source: GitSource,\n commitSha: string\n): Promise<FetchedFile[]> {\n const repoUrl = buildRepoUrl(source)\n const tempDir = join(tmpdir(), `agentver-archive-${randomUUID()}`)\n\n try {\n await mkdir(tempDir, { recursive: true })\n\n const args = ['archive', `--remote=${repoUrl}`, commitSha]\n if (source.path) {\n args.push('--', source.path)\n }\n\n const tarOutput = await execGit(args)\n const tarPath = join(tempDir, 'archive.tar')\n await writeFile(tarPath, tarOutput)\n\n const extractDir = join(tempDir, 'extracted')\n await mkdir(extractDir, { recursive: true })\n\n await execFileAsync('tar', ['xf', tarPath, '-C', extractDir], { timeout: GIT_TIMEOUT_MS })\n\n const readFrom = source.path ? join(extractDir, source.path) : extractDir\n return await readFilesFromDirectory(readFrom)\n } finally {\n await rm(tempDir, { recursive: true, force: true }).catch(() => {})\n }\n}\n\nasync function fetchViaSparseCheckout(resolved: ResolvedRef): Promise<FetchedFile[]> {\n const { source, commitSha } = resolved\n const repoUrl = buildRepoUrl(source)\n const tempDir = join(tmpdir(), `agentver-sparse-${randomUUID()}`)\n\n try {\n await mkdir(tempDir, { recursive: true })\n\n await execGit([\n 'clone',\n '--no-checkout',\n '--depth',\n '1',\n '--filter=blob:none',\n repoUrl,\n tempDir,\n ])\n await execGit(['sparse-checkout', 'set', source.path || '.'], tempDir)\n await execGit(['checkout', commitSha], tempDir)\n\n const readFrom = source.path ? join(tempDir, source.path) : tempDir\n return await readFilesFromDirectory(readFrom)\n } finally {\n await rm(tempDir, { recursive: true, force: true }).catch(() => {})\n }\n}\n\nasync function fetchViaClone(resolved: ResolvedRef): Promise<FetchedFile[]> {\n const { source, commitSha } = resolved\n const repoUrl = buildRepoUrl(source)\n const tempDir = join(tmpdir(), `agentver-clone-${randomUUID()}`)\n\n try {\n await mkdir(tempDir, { recursive: true })\n\n await execGit(['clone', '--depth', '1', repoUrl, tempDir])\n await execGit(['fetch', '--depth', '1', 'origin', commitSha], tempDir)\n await execGit(['checkout', commitSha], tempDir)\n\n const readFrom = source.path ? join(tempDir, source.path) : tempDir\n return await readFilesFromDirectory(readFrom)\n } finally {\n await rm(tempDir, { recursive: true, force: true }).catch(() => {})\n }\n}\n\nasync function gitHubFetch(url: string): Promise<Response> {\n const headers: Record<string, string> = {\n Accept: 'application/vnd.github.v3+json',\n 'User-Agent': 'agentver-cli',\n }\n\n const token = process.env.GITHUB_TOKEN\n if (token) {\n headers.Authorization = `Bearer ${token}`\n }\n\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), HTTP_TIMEOUT_MS)\n\n try {\n const response = await fetch(url, { headers, signal: controller.signal })\n clearTimeout(timeoutId)\n return response\n } catch (error) {\n clearTimeout(timeoutId)\n throw error\n }\n}\n\nfunction isEnoent(error: unknown): boolean {\n return (\n typeof error === 'object' &&\n error !== null &&\n 'code' in error &&\n (error as { code: string }).code === 'ENOENT'\n )\n}\n\n// --- GitHub API types ---\n\ntype GitHubContentItem = {\n name: string\n path: string\n sha: string\n size: number\n type: 'file' | 'dir' | 'symlink' | 'submodule'\n download_url: string | null\n}\n\ntype GitHubContentFile = {\n name: string\n path: string\n sha: string\n size: number\n type: 'file'\n content: string\n encoding: string\n}\n\n// --- GitLab API types ---\n\ntype GitLabTreeItem = {\n id: string\n name: string\n type: 'tree' | 'blob'\n path: string\n mode: string\n}\n","import type { Dirent } from 'node:fs'\nimport { existsSync, mkdirSync, readdirSync, readFileSync, statSync, writeFileSync } from 'node:fs'\nimport { homedir } from 'node:os'\nimport { dirname, join } from 'node:path'\nimport { createLogger } from '@agentver/shared'\nimport type { FetchedFile, GitSource } from './types.js'\n\nconst logger = createLogger('git:cache')\n\nexport function getCacheDir(): string {\n return join(homedir(), '.agentver', 'cache')\n}\n\nexport function getRepoCacheDir(source: GitSource): string {\n return join(getCacheDir(), source.host, source.owner, source.repo)\n}\n\nexport function getCachedFiles(source: GitSource, commitSha: string): FetchedFile[] | null {\n const commitDir = join(getRepoCacheDir(source), 'commits', commitSha)\n const basePath = source.path || '.'\n\n const targetDir = basePath === '.' ? commitDir : join(commitDir, basePath)\n\n if (!existsSync(targetDir)) return null\n\n try {\n const files = readCachedFilesSync(targetDir)\n if (files.length === 0) return null\n return files\n } catch (error) {\n logger.debug(`Cache read failed for ${commitSha}: ${String(error)}`)\n return null\n }\n}\n\nexport function cacheFiles(source: GitSource, commitSha: string, files: FetchedFile[]): void {\n const commitDir = join(getRepoCacheDir(source), 'commits', commitSha)\n const basePath = source.path || '.'\n\n try {\n for (const file of files) {\n const filePath =\n basePath === '.' ? join(commitDir, file.path) : join(commitDir, basePath, file.path)\n const dir = dirname(filePath)\n\n mkdirSync(dir, { recursive: true })\n writeFileSync(filePath, file.content)\n }\n } catch (error) {\n logger.warn(`Failed to cache files: ${String(error)}`)\n }\n}\n\n// --- Helpers ---\n\nfunction readCachedFilesSync(dirPath: string, basePath = ''): FetchedFile[] {\n const files: FetchedFile[] = []\n\n let entries: Dirent[]\n try {\n entries = readdirSync(dirPath, { withFileTypes: true })\n } catch {\n return []\n }\n\n for (const entry of entries) {\n const name = String(entry.name)\n if (name === '.git') continue\n\n const fullPath = join(dirPath, name)\n const relativePath = basePath ? `${basePath}/${name}` : name\n\n if (entry.isDirectory()) {\n files.push(...readCachedFilesSync(fullPath, relativePath))\n continue\n }\n\n if (!entry.isFile()) continue\n\n try {\n const content = readFileSync(fullPath, 'utf-8')\n const fileStat = statSync(fullPath)\n files.push({ path: relativePath, content, size: fileStat.size })\n } catch {\n // Skip unreadable files\n }\n }\n\n return files\n}\n","import { basename, extname } from 'node:path'\nimport type { FetchedFile } from '../git/types.js'\nimport type { ScanFinding } from './types.js'\n\nconst EXECUTABLE_EXTENSIONS = new Set([\n '.exe',\n '.sh',\n '.bat',\n '.cmd',\n '.ps1',\n '.dll',\n '.so',\n '.dylib',\n])\n\nconst PRIVATE_KEY_EXTENSIONS = new Set(['.pem', '.key', '.p12', '.pfx'])\n\nconst DANGEROUS_DOTFILES = new Set([\n '.env',\n '.env.local',\n '.env.production',\n '.env.staging',\n '.env.development',\n '.bashrc',\n '.zshrc',\n '.profile',\n '.gitconfig',\n])\n\nconst CREDENTIAL_FILE_PATHS = new Set([\n '.aws/credentials',\n '.ssh/id_rsa',\n '.ssh/id_ed25519',\n '.kube/config',\n])\n\nconst MAX_INDIVIDUAL_FILE_BYTES = 1_024 * 1_024 // 1MB\nconst MAX_TOTAL_PACKAGE_BYTES = 10 * 1_024 * 1_024 // 10MB\n\n/**\n * Checks whether file content is likely binary by scanning for null bytes\n * or non-UTF-8 sequences in the first 8KB.\n */\nfunction isBinaryContent(content: string): boolean {\n const sample = content.slice(0, 8192)\n for (let i = 0; i < sample.length; i++) {\n if (sample.charCodeAt(i) === 0) {\n return true\n }\n }\n return false\n}\n\n/**\n * Runs file-level policy checks on all fetched files.\n * Returns findings for binary files, executable extensions,\n * dangerous dotfiles, and size violations.\n */\nexport function checkFilePolicy(files: FetchedFile[]): ScanFinding[] {\n const findings: ScanFinding[] = []\n let totalSize = 0\n\n for (const file of files) {\n const fileName = basename(file.path)\n const ext = extname(file.path).toLowerCase()\n totalSize += file.size\n\n // Binary detection\n if (isBinaryContent(file.content)) {\n findings.push({\n severity: 'HIGH',\n category: 'BINARY_FILE',\n file: file.path,\n message: 'Binary file detected — may contain hidden executable code',\n })\n }\n\n // Executable extensions\n if (EXECUTABLE_EXTENSIONS.has(ext)) {\n findings.push({\n severity: 'HIGH',\n category: 'DISALLOWED_FILE_TYPE',\n file: file.path,\n message: `Executable file extension detected (${ext})`,\n })\n }\n\n // Private key file extensions\n if (PRIVATE_KEY_EXTENSIONS.has(ext)) {\n findings.push({\n severity: 'HIGH',\n category: 'CREDENTIAL_FILE',\n file: file.path,\n message: `Private key file extension detected (${ext}) — may contain cryptographic secrets`,\n })\n }\n\n // Dangerous dotfiles\n if (DANGEROUS_DOTFILES.has(fileName)) {\n findings.push({\n severity: 'CRITICAL',\n category: 'DISALLOWED_FILE_TYPE',\n file: file.path,\n message: `Dangerous dotfile detected (${fileName}) — may modify environment or expose secrets`,\n })\n }\n\n // Credential file paths\n const credPaths = Array.from(CREDENTIAL_FILE_PATHS)\n for (let i = 0; i < credPaths.length; i++) {\n const credPath = credPaths[i]!\n if (file.path.endsWith(credPath) || file.path.includes(`/${credPath}`)) {\n findings.push({\n severity: 'CRITICAL',\n category: 'CREDENTIAL_FILE',\n file: file.path,\n message: `Credential configuration file detected (${credPath})`,\n })\n break\n }\n }\n\n // .npmrc with _authToken\n if (fileName === '.npmrc') {\n if (file.content.includes('_authToken')) {\n findings.push({\n severity: 'CRITICAL',\n category: 'CREDENTIAL_FILE',\n file: file.path,\n message: 'NPM auth token detected in .npmrc',\n })\n }\n }\n\n // Individual file size\n if (file.size > MAX_INDIVIDUAL_FILE_BYTES) {\n findings.push({\n severity: 'LOW',\n category: 'EXCESSIVE_SIZE',\n file: file.path,\n message: `File exceeds 1MB (${formatBytes(file.size)})`,\n })\n }\n }\n\n // Total package size\n if (totalSize > MAX_TOTAL_PACKAGE_BYTES) {\n findings.push({\n severity: 'MEDIUM',\n category: 'EXCESSIVE_SIZE',\n file: '(package total)',\n message: `Total package size exceeds 10MB (${formatBytes(totalSize)})`,\n })\n }\n\n return findings\n}\n\n/**\n * Returns true if the file content appears to be binary.\n * Exposed for the scanner to skip pattern matching on binary files.\n */\nexport { isBinaryContent }\n\nfunction formatBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes}B`\n if (bytes < 1_024 * 1_024) return `${(bytes / 1_024).toFixed(1)}KB`\n return `${(bytes / (1_024 * 1_024)).toFixed(1)}MB`\n}\n","import type { ScanRule } from './types.js'\n\nexport const SCAN_RULES: ScanRule[] = [\n // --- DANGEROUS_COMMAND (HIGH) ---\n {\n id: 'DC001',\n category: 'DANGEROUS_COMMAND',\n severity: 'HIGH',\n pattern: /\\brm\\s+-rf\\b/,\n message: 'Recursive force delete detected (rm -rf)',\n },\n {\n id: 'DC002',\n category: 'DANGEROUS_COMMAND',\n severity: 'HIGH',\n pattern: /\\bsudo\\s+/,\n message: 'Elevated privilege command detected (sudo)',\n },\n {\n id: 'DC003',\n category: 'DANGEROUS_COMMAND',\n severity: 'HIGH',\n pattern: /\\bchmod\\s+777\\b/,\n message: 'World-writable permission detected (chmod 777)',\n },\n {\n id: 'DC004',\n category: 'DANGEROUS_COMMAND',\n severity: 'HIGH',\n pattern: /\\bcurl\\b.*\\|.*\\bbash\\b/,\n message: 'Piped remote script execution detected (curl | bash)',\n },\n {\n id: 'DC005',\n category: 'DANGEROUS_COMMAND',\n severity: 'HIGH',\n pattern: /\\beval\\s*\\(/,\n message: 'Dynamic code evaluation detected (eval())',\n },\n {\n id: 'DC006',\n category: 'DANGEROUS_COMMAND',\n severity: 'HIGH',\n pattern: /\\bexec\\s*\\(/,\n message: 'Process execution detected (exec())',\n },\n {\n id: 'DC007',\n category: 'DANGEROUS_COMMAND',\n severity: 'HIGH',\n pattern: /\\bsystem\\s*\\(/,\n message: 'System command execution detected (system())',\n },\n\n // --- DATA_EXFILTRATION (CRITICAL) ---\n {\n id: 'DE001',\n category: 'DATA_EXFILTRATION',\n severity: 'CRITICAL',\n pattern: /\\bcurl\\b.*-X\\s*POST\\b/,\n message: 'Outbound POST request via curl detected',\n },\n {\n id: 'DE002',\n category: 'DATA_EXFILTRATION',\n severity: 'CRITICAL',\n pattern: /\\bfetch\\s*\\([^)]*body\\s*:/,\n message: 'Outbound fetch with body payload detected',\n },\n {\n id: 'DE003',\n category: 'DATA_EXFILTRATION',\n severity: 'CRITICAL',\n pattern: /\\bwebhook\\.site\\b/,\n message: 'Known data exfiltration domain detected (webhook.site)',\n },\n {\n id: 'DE004',\n category: 'DATA_EXFILTRATION',\n severity: 'CRITICAL',\n pattern: /\\bngrok\\b/,\n message: 'Tunnelling service detected (ngrok)',\n },\n {\n id: 'DE005',\n category: 'DATA_EXFILTRATION',\n severity: 'CRITICAL',\n pattern: /\\brequestbin\\b/i,\n message: 'Known data exfiltration service detected (requestbin)',\n },\n\n // --- OBFUSCATED_CODE (HIGH) ---\n {\n id: 'OC001',\n category: 'OBFUSCATED_CODE',\n severity: 'HIGH',\n pattern: /[A-Za-z0-9+/=]{200,}/,\n message: 'Long base64-like string detected (>200 characters)',\n },\n {\n id: 'OC002',\n category: 'OBFUSCATED_CODE',\n severity: 'HIGH',\n pattern: /(\\\\x[0-9a-fA-F]{2}){10,}/,\n message: 'Hex escape chain detected (>10 sequences)',\n },\n {\n id: 'OC003',\n category: 'OBFUSCATED_CODE',\n severity: 'HIGH',\n pattern: /String\\.fromCharCode\\s*\\([^)]*,/,\n message: 'Character code construction chain detected (String.fromCharCode)',\n },\n {\n id: 'OC004',\n category: 'OBFUSCATED_CODE',\n severity: 'MEDIUM',\n pattern: /\\\\u00[0-9a-fA-F]{2}/,\n message: 'Unicode escape sequence detected — potential code obfuscation',\n },\n {\n id: 'OC005',\n category: 'OBFUSCATED_CODE',\n severity: 'MEDIUM',\n pattern: /\\batob\\s*\\(/,\n message: 'Base64 decode detected (atob()) — potential obfuscated payload',\n },\n {\n id: 'OC006',\n category: 'OBFUSCATED_CODE',\n severity: 'MEDIUM',\n pattern: /\\bbtoa\\s*\\(/,\n message: 'Base64 encode detected (btoa()) — potential data exfiltration encoding',\n },\n\n // --- SUSPICIOUS_URL (MEDIUM) ---\n {\n id: 'SU001',\n category: 'SUSPICIOUS_URL',\n severity: 'MEDIUM',\n pattern: /\\bpastebin\\.com\\b/,\n message: 'Suspicious URL detected (pastebin.com)',\n },\n {\n id: 'SU002',\n category: 'SUSPICIOUS_URL',\n severity: 'MEDIUM',\n pattern: /\\bdiscord\\.com\\/api\\/webhooks\\b/,\n message: 'Discord webhook URL detected',\n },\n {\n id: 'SU003',\n category: 'SUSPICIOUS_URL',\n severity: 'MEDIUM',\n pattern: /\\bbit\\.ly\\//,\n message: 'URL shortener detected (bit.ly)',\n },\n {\n id: 'SU004',\n category: 'SUSPICIOUS_URL',\n severity: 'MEDIUM',\n pattern: /\\bt\\.ly\\//,\n message: 'URL shortener detected (t.ly)',\n },\n\n // --- DATA_EXFILTRATION: process.env (HIGH) ---\n {\n id: 'DE006',\n category: 'DATA_EXFILTRATION',\n severity: 'HIGH',\n pattern: /\\bprocess\\.env\\.[A-Z_]{2,}\\b/,\n message: 'Environment variable access detected (process.env.VAR)',\n },\n {\n id: 'DE007',\n category: 'DATA_EXFILTRATION',\n severity: 'HIGH',\n pattern: /\\bprocess\\.env\\s*\\[/,\n message: 'Dynamic environment variable access detected (process.env[...])',\n },\n {\n id: 'DE008',\n category: 'DATA_EXFILTRATION',\n severity: 'HIGH',\n pattern: /\\bprocess\\s*\\[\\s*['\"]env['\"]\\s*\\]/,\n message: \"Obfuscated environment variable access detected (process['env'])\",\n },\n\n // --- DATA_EXFILTRATION: wget (HIGH) ---\n {\n id: 'DE009',\n category: 'DATA_EXFILTRATION',\n severity: 'HIGH',\n pattern: /\\bwget\\s/,\n message: 'File download via wget detected',\n },\n {\n id: 'DE010',\n category: 'DATA_EXFILTRATION',\n severity: 'HIGH',\n pattern: /\\bwget\\s*\\(/,\n message: 'Programmatic wget invocation detected',\n },\n\n // --- DATA_EXFILTRATION: nc/netcat (CRITICAL) ---\n {\n id: 'DE011',\n category: 'DATA_EXFILTRATION',\n severity: 'CRITICAL',\n pattern: /\\bnc\\b/,\n message: 'Netcat usage detected (nc) — potential reverse shell or data exfiltration',\n },\n {\n id: 'DE012',\n category: 'DATA_EXFILTRATION',\n severity: 'CRITICAL',\n pattern: /\\bnetcat\\b/,\n message: 'Netcat usage detected — potential reverse shell or data exfiltration',\n },\n {\n id: 'DE013',\n category: 'DATA_EXFILTRATION',\n severity: 'CRITICAL',\n pattern: /\\bncat\\b/,\n message: 'Ncat usage detected — potential reverse shell or data exfiltration',\n },\n\n // --- DATA_EXFILTRATION: DNS exfiltration (HIGH) ---\n {\n id: 'DE014',\n category: 'DATA_EXFILTRATION',\n severity: 'HIGH',\n pattern: /\\bnslookup\\s/,\n message: 'DNS lookup detected (nslookup) — potential DNS exfiltration',\n },\n {\n id: 'DE015',\n category: 'DATA_EXFILTRATION',\n severity: 'HIGH',\n pattern: /\\bdig\\s/,\n message: 'DNS query detected (dig) — potential DNS exfiltration',\n },\n {\n id: 'DE016',\n category: 'DATA_EXFILTRATION',\n severity: 'HIGH',\n pattern: /\\bhost\\s/,\n message: 'DNS resolution detected (host) — potential DNS exfiltration',\n },\n\n // --- DANGEROUS_COMMAND: child_process (CRITICAL) ---\n {\n id: 'DC008',\n category: 'DANGEROUS_COMMAND',\n severity: 'CRITICAL',\n pattern: /\\brequire\\s*\\(\\s*['\"`]child_process['\"`]\\s*\\)/,\n message: 'Child process module import detected (require child_process)',\n },\n {\n id: 'DC009',\n category: 'DANGEROUS_COMMAND',\n severity: 'CRITICAL',\n pattern: /\\bfrom\\s+['\"]child_process['\"]/,\n message: 'Child process module import detected (from child_process)',\n },\n {\n id: 'DC010',\n category: 'DANGEROUS_COMMAND',\n severity: 'CRITICAL',\n pattern: /\\bspawn\\s*\\(/,\n message: 'Process spawn detected (spawn())',\n },\n {\n id: 'DC011',\n category: 'DANGEROUS_COMMAND',\n severity: 'CRITICAL',\n pattern: /\\bexecSync\\s*\\(/,\n message: 'Synchronous command execution detected (execSync())',\n },\n {\n id: 'DC012',\n category: 'DANGEROUS_COMMAND',\n severity: 'CRITICAL',\n pattern: /\\bexecFile\\s*\\(/,\n message: 'File execution detected (execFile())',\n },\n {\n id: 'DC013',\n category: 'DANGEROUS_COMMAND',\n severity: 'CRITICAL',\n pattern: /\\bfork\\s*\\(/,\n message: 'Process fork detected (fork())',\n },\n\n // --- DANGEROUS_COMMAND: Function constructor (HIGH) ---\n {\n id: 'DC014',\n category: 'DANGEROUS_COMMAND',\n severity: 'HIGH',\n pattern: /\\bnew\\s+Function\\s*\\(/,\n message: 'Function constructor detected (new Function()) — dynamic code execution',\n },\n {\n id: 'DC015',\n category: 'DANGEROUS_COMMAND',\n severity: 'HIGH',\n pattern: /\\bFunction\\s*\\(/,\n message: 'Function constructor invocation detected (Function()) — dynamic code execution',\n },\n\n // --- CREDENTIAL_EXPOSURE (HIGH) ---\n {\n id: 'CE001',\n category: 'CREDENTIAL_EXPOSURE',\n severity: 'HIGH',\n pattern: /\\bsk-[a-zA-Z0-9]{20,}\\b/,\n message: 'Potential OpenAI/Stripe API key detected (sk-...)',\n },\n {\n id: 'CE002',\n category: 'CREDENTIAL_EXPOSURE',\n severity: 'HIGH',\n pattern: /\\bAKIA[A-Z0-9]{16}\\b/,\n message: 'AWS access key ID detected (AKIA...)',\n },\n {\n id: 'CE003',\n category: 'CREDENTIAL_EXPOSURE',\n severity: 'HIGH',\n pattern: /\\bghp_[a-zA-Z0-9]{36}\\b/,\n message: 'GitHub personal access token detected (ghp_...)',\n },\n {\n id: 'CE004',\n category: 'CREDENTIAL_EXPOSURE',\n severity: 'HIGH',\n pattern: /\\bpassword\\s*=\\s*['\"][^'\"]+['\"]/i,\n message: 'Hardcoded password assignment detected',\n },\n {\n id: 'CE005',\n category: 'CREDENTIAL_EXPOSURE',\n severity: 'HIGH',\n pattern: /\\bgithub_pat_[a-zA-Z0-9_]{20,}\\b/,\n message: 'GitHub fine-grained personal access token detected (github_pat_...)',\n },\n {\n id: 'CE006',\n category: 'CREDENTIAL_EXPOSURE',\n severity: 'HIGH',\n pattern: /[\"']private_key[\"']\\s*:\\s*[\"']-----BEGIN/,\n message: 'GCP service account private key detected',\n },\n\n // --- CREDENTIAL_EXPOSURE: generic token/secret assignments (HIGH) ---\n {\n id: 'CE007',\n category: 'CREDENTIAL_EXPOSURE',\n severity: 'HIGH',\n pattern: /\\btoken\\s*=\\s*['\"]/,\n message: 'Hardcoded token assignment detected',\n },\n {\n id: 'CE008',\n category: 'CREDENTIAL_EXPOSURE',\n severity: 'HIGH',\n pattern: /\\bapi_key\\s*=\\s*['\"]/,\n message: 'Hardcoded API key assignment detected (api_key)',\n },\n {\n id: 'CE009',\n category: 'CREDENTIAL_EXPOSURE',\n severity: 'HIGH',\n pattern: /\\bapiKey\\s*=\\s*['\"]/,\n message: 'Hardcoded API key assignment detected (apiKey)',\n },\n {\n id: 'CE010',\n category: 'CREDENTIAL_EXPOSURE',\n severity: 'HIGH',\n pattern: /\\bsecret\\s*=\\s*['\"]/,\n message: 'Hardcoded secret assignment detected',\n },\n\n // --- CREDENTIAL_EXPOSURE: GCP service account key (CRITICAL) ---\n {\n id: 'CE011',\n category: 'CREDENTIAL_EXPOSURE',\n severity: 'CRITICAL',\n pattern: /\"type\"\\s*:\\s*\"service_account\"/,\n message: 'GCP service account key file detected',\n },\n\n // --- CREDENTIAL_EXPOSURE: Slack token (CRITICAL) ---\n {\n id: 'CE012',\n category: 'CREDENTIAL_EXPOSURE',\n severity: 'CRITICAL',\n pattern: /xox[bpras]-[a-zA-Z0-9-]+/,\n message: 'Slack token detected (xox[bpras]-...)',\n },\n\n // --- CREDENTIAL_FILE: path-based credential detection (CRITICAL) ---\n {\n id: 'CF001',\n category: 'CREDENTIAL_FILE',\n severity: 'CRITICAL',\n pattern: /\\.aws\\/credentials/,\n message: 'AWS credentials file detected',\n },\n {\n id: 'CF002',\n category: 'CREDENTIAL_FILE',\n severity: 'CRITICAL',\n pattern: /\\.ssh\\/id_rsa/,\n message: 'SSH private key file reference detected (id_rsa)',\n },\n {\n id: 'CF003',\n category: 'CREDENTIAL_FILE',\n severity: 'CRITICAL',\n pattern: /\\.ssh\\/id_ed25519/,\n message: 'SSH private key file reference detected (id_ed25519)',\n },\n {\n id: 'CF004',\n category: 'CREDENTIAL_FILE',\n severity: 'CRITICAL',\n pattern: /\\.kube\\/config/,\n message: 'Kubernetes config file reference detected',\n },\n {\n id: 'CF005',\n category: 'CREDENTIAL_FILE',\n severity: 'CRITICAL',\n pattern: /\\.npmrc\\b.*_authToken/,\n message: 'NPM auth token in .npmrc detected',\n },\n\n // --- PROMPT_INJECTION (MEDIUM) ---\n {\n id: 'PI001',\n category: 'PROMPT_INJECTION',\n severity: 'MEDIUM',\n pattern: /\\bignore\\s+previous\\s+instructions\\b/i,\n message: 'Prompt injection pattern detected (ignore previous instructions)',\n },\n {\n id: 'PI002',\n category: 'PROMPT_INJECTION',\n severity: 'MEDIUM',\n pattern: /\\byou\\s+are\\s+now\\b/i,\n message: 'Prompt injection pattern detected (you are now)',\n },\n {\n id: 'PI003',\n category: 'PROMPT_INJECTION',\n severity: 'MEDIUM',\n pattern: /\\bdisregard\\s+all\\s+prior\\b/i,\n message: 'Prompt injection pattern detected (disregard all prior)',\n },\n {\n id: 'PI004',\n category: 'PROMPT_INJECTION',\n severity: 'MEDIUM',\n pattern: /\\bforget\\s+your\\s+instructions\\b/i,\n message: 'Prompt injection pattern detected (forget your instructions)',\n },\n\n // --- REMOTE_CODE_EXECUTION (CRITICAL) ---\n {\n id: 'RCE001',\n category: 'REMOTE_CODE_EXECUTION',\n severity: 'CRITICAL',\n pattern: /\\bimport\\s*\\(\\s*['\"`]https?:/,\n message: 'Dynamic remote import detected (import() with URL)',\n },\n {\n id: 'RCE002',\n category: 'REMOTE_CODE_EXECUTION',\n severity: 'CRITICAL',\n pattern: /\\brequire\\s*\\(\\s*['\"`]https?:/,\n message: 'Remote require detected (require() with URL)',\n },\n {\n id: 'RCE003',\n category: 'REMOTE_CODE_EXECUTION',\n severity: 'CRITICAL',\n pattern: /\\beval\\s*\\(\\s*.*\\bfetch\\s*\\(/,\n message: 'Remote code execution detected (eval(fetch()))',\n },\n]\n","import chalk from 'chalk'\nimport type ora from 'ora'\nimport type { ScanFinding, ScanResult, ScanSeverity } from './types.js'\n\nconst SEVERITY_COLOURS: Record<ScanSeverity, (text: string) => string> = {\n CRITICAL: chalk.red.bold,\n HIGH: chalk.red,\n MEDIUM: chalk.yellow,\n LOW: chalk.dim,\n INFO: chalk.dim,\n}\n\nconst SEVERITY_LABELS: Record<ScanSeverity, string> = {\n CRITICAL: 'CRITICAL',\n HIGH: 'HIGH',\n MEDIUM: 'MEDIUM',\n LOW: 'LOW',\n INFO: 'INFO',\n}\n\n/**\n * Groups findings by severity, then by file path.\n */\nfunction groupFindings(findings: ScanFinding[]): Map<ScanSeverity, Map<string, ScanFinding[]>> {\n const grouped = new Map<ScanSeverity, Map<string, ScanFinding[]>>()\n\n for (const finding of findings) {\n let severityMap = grouped.get(finding.severity)\n if (!severityMap) {\n severityMap = new Map<string, ScanFinding[]>()\n grouped.set(finding.severity, severityMap)\n }\n\n let fileFindings = severityMap.get(finding.file)\n if (!fileFindings) {\n fileFindings = []\n severityMap.set(finding.file, fileFindings)\n }\n\n fileFindings.push(finding)\n }\n\n return grouped\n}\n\n/**\n * Renders scan results to the terminal via the provided spinner.\n *\n * - BLOCK findings are shown in red with file, line, and evidence\n * - WARN findings are shown in yellow\n * - PASS shows a green tick with a single line\n */\nexport function renderScanResult(result: ScanResult, spinner: ReturnType<typeof ora>): void {\n if (result.verdict === 'PASS' && result.findings.length === 0) {\n spinner.succeed(chalk.green('Security scan passed') + chalk.dim(` (${result.duration}ms)`))\n return\n }\n\n // Stop the spinner before printing detailed output\n spinner.stop()\n\n const grouped = groupFindings(result.findings)\n const severityOrder: ScanSeverity[] = ['CRITICAL', 'HIGH', 'MEDIUM', 'LOW', 'INFO']\n\n console.log()\n console.log(\n chalk.bold('Security scan results') +\n chalk.dim(\n ` (${result.findings.length} finding${result.findings.length === 1 ? '' : 's'}, ${result.duration}ms)`\n )\n )\n console.log()\n\n for (const severity of severityOrder) {\n const fileMap = grouped.get(severity)\n if (!fileMap) continue\n\n const colour = SEVERITY_COLOURS[severity]\n const label = SEVERITY_LABELS[severity]\n\n console.log(colour(` ${label}`))\n\n for (const [filePath, findings] of fileMap) {\n console.log(chalk.dim(` ${filePath}`))\n\n for (const finding of findings) {\n const lineRef = finding.line ? chalk.dim(`:${finding.line}`) : ''\n console.log(` ${colour('\\u2716')} ${finding.message}${lineRef}`)\n\n if (finding.evidence) {\n const truncated =\n finding.evidence.length > 120\n ? `${finding.evidence.slice(0, 120)}...`\n : finding.evidence\n console.log(chalk.dim(` ${truncated}`))\n }\n }\n }\n\n console.log()\n }\n\n if (result.verdict === 'BLOCK') {\n console.log(\n chalk.red.bold(' Scan verdict: BLOCK') +\n chalk.red(' — install aborted due to security findings')\n )\n console.log(chalk.dim(' Use --skip-audit to bypass the security scan'))\n } else if (result.verdict === 'WARN') {\n console.log(\n chalk.yellow.bold(' Scan verdict: WARN') +\n chalk.yellow(' — potential security concerns detected')\n )\n }\n\n console.log()\n}\n","import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs'\nimport { homedir } from 'node:os'\nimport { join } from 'node:path'\nimport type { ScanSeverity } from '../security/types.js'\nimport { getCredentials } from './auth.js'\n\nexport type AuditConfig = {\n enabled?: boolean\n blockSeverity?: ScanSeverity\n trustedSources?: string[]\n}\n\nexport type AgentverConfig = {\n platformUrl?: string\n defaultOrg?: string\n telemetry?: boolean\n audit?: AuditConfig\n}\n\nconst CONFIG_DIR = join(homedir(), '.agentver')\nconst CONFIG_PATH = join(CONFIG_DIR, 'config.json')\n\nexport function getConfigPath(): string {\n return CONFIG_PATH\n}\n\nexport function readConfig(): AgentverConfig {\n if (!existsSync(CONFIG_PATH)) {\n return {}\n }\n\n try {\n const raw = readFileSync(CONFIG_PATH, 'utf-8')\n return JSON.parse(raw) as AgentverConfig\n } catch {\n return {}\n }\n}\n\nexport function writeConfig(config: AgentverConfig): void {\n if (!existsSync(CONFIG_DIR)) {\n mkdirSync(CONFIG_DIR, { recursive: true })\n }\n\n writeFileSync(CONFIG_PATH, JSON.stringify(config, null, 2), { mode: 0o600 })\n}\n\nexport function getPlatformUrl(): string | null {\n return readConfig().platformUrl ?? null\n}\n\nexport async function isConnected(): Promise<boolean> {\n const url = getPlatformUrl()\n if (!url) return false\n\n const creds = await getCredentials()\n return !!(creds?.token ?? creds?.apiKey)\n}\n","import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs'\nimport { homedir } from 'node:os'\nimport { join } from 'node:path'\n\ntype Credentials = {\n token?: string\n apiKey?: string\n}\n\nfunction getCredentialsPath(): string {\n return join(homedir(), '.agentver', 'credentials.json')\n}\n\nexport async function getCredentials(): Promise<Credentials | null> {\n const credPath = getCredentialsPath()\n\n if (!existsSync(credPath)) {\n return null\n }\n\n const raw = readFileSync(credPath, 'utf-8')\n\n try {\n return JSON.parse(raw) as Credentials\n } catch {\n return null\n }\n}\n\nexport function saveCredentials(credentials: Credentials): void {\n const credPath = getCredentialsPath()\n const dir = join(homedir(), '.agentver')\n\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true })\n }\n\n writeFileSync(credPath, JSON.stringify(credentials, null, 2), { mode: 0o600 })\n}\n\nexport function clearCredentials(): void {\n const credPath = getCredentialsPath()\n if (existsSync(credPath)) {\n writeFileSync(credPath, '{}', { mode: 0o600 })\n }\n}\n\nexport async function isAuthenticated(): Promise<boolean> {\n const creds = await getCredentials()\n return !!(creds?.token ?? creds?.apiKey)\n}\n","import type { FetchedFile, GitSource } from '../git/types.js'\nimport { readConfig } from '../registry/config.js'\nimport { checkFilePolicy, isBinaryContent } from './file-policy.js'\nimport { SCAN_RULES } from './patterns.js'\nimport type { ScanFinding, ScanOptions, ScanResult, ScanSeverity, ScanVerdict } from './types.js'\n\nconst SEVERITY_ORDER: Record<ScanSeverity, number> = {\n CRITICAL: 4,\n HIGH: 3,\n MEDIUM: 2,\n LOW: 1,\n INFO: 0,\n}\n\n/**\n * Checks whether a given source URI matches any trusted source patterns\n * from the user's config. Trusted sources skip scanning entirely.\n */\nfunction isTrustedSource(sourceUri: string, trustedPatterns: string[]): boolean {\n for (const pattern of trustedPatterns) {\n // Convert glob-style pattern to a regex\n // e.g. 'github.com/anthropics/*' → /^github\\.com\\/anthropics\\/[^/]+$/\n const escaped = pattern.replace(/[.+^${}()|[\\]\\\\]/g, '\\\\$&').replace(/\\*/g, '[^/]+')\n const regex = new RegExp(`^${escaped}$`)\n\n if (regex.test(sourceUri)) {\n return true\n }\n }\n return false\n}\n\n/**\n * Runs pattern matching against each line of text files.\n * Returns findings with file, line number, and evidence.\n */\nfunction scanPatterns(files: FetchedFile[]): ScanFinding[] {\n const findings: ScanFinding[] = []\n\n for (const file of files) {\n if (isBinaryContent(file.content)) {\n continue\n }\n\n const lines = file.content.split('\\n')\n\n for (let lineIdx = 0; lineIdx < lines.length; lineIdx++) {\n const line = lines[lineIdx]!\n\n for (const rule of SCAN_RULES) {\n if (rule.pattern.test(line)) {\n // Trim evidence to a reasonable length\n const evidence = line.trim().slice(0, 200)\n\n findings.push({\n severity: rule.severity,\n category: rule.category,\n file: file.path,\n line: lineIdx + 1,\n message: rule.message,\n evidence: evidence.length > 0 ? evidence : undefined,\n })\n }\n }\n }\n }\n\n return findings\n}\n\n/**\n * Determines the overall verdict from the highest-severity finding.\n * CRITICAL or HIGH -> BLOCK, MEDIUM -> WARN, otherwise PASS.\n */\nfunction determineVerdict(\n findings: ScanFinding[],\n blockSeverity: ScanSeverity = 'HIGH'\n): ScanVerdict {\n if (findings.length === 0) {\n return 'PASS'\n }\n\n const blockThreshold = SEVERITY_ORDER[blockSeverity]\n\n let highestSeverity = 0\n for (const finding of findings) {\n const level = SEVERITY_ORDER[finding.severity]\n if (level > highestSeverity) {\n highestSeverity = level\n }\n }\n\n if (highestSeverity >= blockThreshold) {\n return 'BLOCK'\n }\n\n if (highestSeverity >= SEVERITY_ORDER.MEDIUM) {\n return 'WARN'\n }\n\n return 'PASS'\n}\n\n/**\n * Main security scanner orchestrator.\n *\n * Runs file policy checks on all files, then pattern matching on\n * text files. Aggregates findings and determines a verdict.\n *\n * Checks trusted sources — if the source matches a trusted pattern,\n * scanning is skipped and an immediate PASS is returned.\n */\nexport async function scanFiles(\n files: FetchedFile[],\n source: GitSource,\n options: ScanOptions\n): Promise<ScanResult> {\n const startTime = performance.now()\n\n if (options.skipAudit) {\n return {\n verdict: 'PASS',\n findings: [],\n scannedAt: new Date().toISOString(),\n duration: 0,\n provider: 'built-in',\n }\n }\n\n const config = readConfig()\n const auditConfig = config.audit\n\n // Check if audit is disabled globally\n if (auditConfig?.enabled === false) {\n return {\n verdict: 'PASS',\n findings: [],\n scannedAt: new Date().toISOString(),\n duration: 0,\n provider: 'built-in',\n }\n }\n\n // Check trusted sources\n const sourceUri = `${source.host}/${source.owner}/${source.repo}`\n if (auditConfig?.trustedSources && isTrustedSource(sourceUri, auditConfig.trustedSources)) {\n return {\n verdict: 'PASS',\n findings: [],\n scannedAt: new Date().toISOString(),\n duration: 0,\n provider: 'built-in',\n }\n }\n\n // Run file policy checks\n const policyFindings = checkFilePolicy(files)\n\n // Run pattern matching on text files\n const patternFindings = scanPatterns(files)\n\n // Aggregate all findings\n const allFindings = [...policyFindings, ...patternFindings]\n\n // Sort by severity (highest first), then by file\n allFindings.sort((a, b) => {\n const severityDiff = SEVERITY_ORDER[b.severity] - SEVERITY_ORDER[a.severity]\n if (severityDiff !== 0) return severityDiff\n return a.file.localeCompare(b.file)\n })\n\n const blockSeverity = auditConfig?.blockSeverity ?? 'HIGH'\n const verdict = determineVerdict(allFindings, blockSeverity)\n const duration = Math.round(performance.now() - startTime)\n\n return {\n verdict,\n findings: allFindings,\n scannedAt: new Date().toISOString(),\n duration,\n provider: 'built-in',\n }\n}\n","import {\n existsSync,\n lstatSync,\n mkdirSync,\n readdirSync,\n readlinkSync,\n rmSync,\n symlinkSync,\n} from 'node:fs'\nimport { homedir } from 'node:os'\nimport { dirname, join, relative } from 'node:path'\nimport { type AgentId, getSkillPlacementPath } from '@agentver/agent-definitions'\nimport { createLogger } from '@agentver/shared'\nimport chalk from 'chalk'\n\nconst logger = createLogger('canonical')\n\nconst CANONICAL_DIR = '.agents/skills'\n\n/**\n * Returns the canonical path where skill files are stored once.\n * For project scope: `<projectRoot>/.agents/skills/<name>`\n * For global scope: `~/.agents/skills/<name>`\n */\nexport function getCanonicalSkillPath(\n projectRoot: string,\n name: string,\n scope: 'project' | 'global'\n): string {\n if (scope === 'global') {\n const home = homedir()\n return join(home, CANONICAL_DIR, name)\n }\n return join(projectRoot, CANONICAL_DIR, name)\n}\n\n/**\n * Checks whether a package is using the canonical symlinked install pattern.\n * Returns true if the canonical directory exists for this skill.\n */\nexport function isSymlinkedInstall(\n projectRoot: string,\n name: string,\n scope: 'project' | 'global' = 'project'\n): boolean {\n const canonicalPath = getCanonicalSkillPath(projectRoot, name, scope)\n return existsSync(canonicalPath) && lstatSync(canonicalPath).isDirectory()\n}\n\n/**\n * Creates symlinks from each agent's skill directory to the canonical path.\n * Uses relative symlinks so the project remains portable.\n * Falls back to a warning if symlink creation fails (e.g. Windows without elevated permissions).\n */\nexport function createAgentSymlinks(\n projectRoot: string,\n name: string,\n agents: string[],\n scope: 'project' | 'global'\n): void {\n const canonicalPath = getCanonicalSkillPath(projectRoot, name, scope)\n\n for (const agentId of agents) {\n const placementPath = getSkillPlacementPath(agentId as AgentId, name, scope)\n if (!placementPath) continue\n\n const agentSkillPath =\n scope === 'global' ? placementPath.replace('~', homedir()) : join(projectRoot, placementPath)\n\n // If this path already exists (file, directory, or symlink), remove it first\n if (existsSync(agentSkillPath) || isSymlink(agentSkillPath)) {\n rmSync(agentSkillPath, { recursive: true, force: true })\n }\n\n // Ensure the parent directory exists\n const parentDir = dirname(agentSkillPath)\n if (!existsSync(parentDir)) {\n mkdirSync(parentDir, { recursive: true })\n }\n\n // Compute relative symlink target\n const relativeTarget = relative(parentDir, canonicalPath)\n\n try {\n symlinkSync(relativeTarget, agentSkillPath)\n } catch (error) {\n // Symlink failed — likely Windows without elevated permissions\n // Log a warning but don't fail the install; the canonical directory\n // still has the files so the install isn't broken\n logger.warn(`Could not create symlink at ${agentSkillPath}: ${String(error)}`)\n console.log(\n chalk.yellow(' Warning:') +\n ` Could not create symlink for ${agentId}. ` +\n chalk.dim('Files are available at the canonical path.')\n )\n }\n }\n}\n\n/**\n * Removes symlinks from each agent's skill directory for a given package.\n * Also cleans up empty parent directories.\n */\nexport function removeAgentSymlinks(\n projectRoot: string,\n name: string,\n agents: string[],\n scope: 'project' | 'global'\n): void {\n for (const agentId of agents) {\n const placementPath = getSkillPlacementPath(agentId as AgentId, name, scope)\n if (!placementPath) continue\n\n const agentSkillPath =\n scope === 'global' ? placementPath.replace('~', homedir()) : join(projectRoot, placementPath)\n\n if (existsSync(agentSkillPath) || isSymlink(agentSkillPath)) {\n rmSync(agentSkillPath, { recursive: true, force: true })\n }\n\n // Clean up empty parent directories\n cleanupEmptyParents(dirname(agentSkillPath), projectRoot)\n }\n}\n\n/**\n * Removes the canonical skill directory.\n */\nexport function removeCanonicalDirectory(\n projectRoot: string,\n name: string,\n scope: 'project' | 'global'\n): void {\n const canonicalPath = getCanonicalSkillPath(projectRoot, name, scope)\n\n if (existsSync(canonicalPath)) {\n rmSync(canonicalPath, { recursive: true, force: true })\n }\n\n // Clean up empty parent directories\n cleanupEmptyParents(dirname(canonicalPath), projectRoot)\n}\n\n/**\n * Resolves the best path to read files from for a given package.\n * Returns the canonical path if it exists, otherwise falls back to\n * the first agent-specific path that exists (backwards compatibility).\n */\nexport function resolveReadPath(\n projectRoot: string,\n packageName: string,\n agents: string[],\n scope: 'project' | 'global' = 'project'\n): string | null {\n // Try canonical path first\n const canonicalPath = getCanonicalSkillPath(projectRoot, packageName, scope)\n if (existsSync(canonicalPath) && lstatSync(canonicalPath).isDirectory()) {\n return canonicalPath\n }\n\n // Fall back to agent-specific paths (pre-canonical installs)\n for (const agentId of agents) {\n const placementPath = getSkillPlacementPath(agentId as AgentId, packageName, scope)\n if (!placementPath) continue\n\n const fullPath =\n scope === 'global' ? placementPath.replace('~', homedir()) : join(projectRoot, placementPath)\n\n if (existsSync(fullPath)) {\n // If it's a symlink, resolve to the canonical directory\n if (isSymlink(fullPath)) {\n const target = readlinkSync(fullPath)\n const resolvedTarget = join(dirname(fullPath), target)\n if (existsSync(resolvedTarget)) {\n return resolvedTarget\n }\n }\n return fullPath\n }\n }\n\n return null\n}\n\n/**\n * Checks if a path is a symlink (even if broken).\n */\nfunction isSymlink(filePath: string): boolean {\n try {\n const stats = lstatSync(filePath)\n return stats.isSymbolicLink()\n } catch {\n return false\n }\n}\n\n/**\n * Removes empty parent directories up to (but not including) the stop directory.\n */\nfunction cleanupEmptyParents(dirPath: string, stopAt: string): void {\n let current = dirPath\n\n while (current !== stopAt && current.startsWith(stopAt)) {\n try {\n const entries = readdirSync(current)\n if (entries.length === 0) {\n rmSync(current, { recursive: true, force: true })\n current = dirname(current)\n } else {\n break\n }\n } catch {\n break\n }\n }\n}\n","import { appendFileSync, existsSync, readFileSync } from 'node:fs'\nimport { homedir } from 'node:os'\nimport { join } from 'node:path'\nimport chalk from 'chalk'\nimport type { Command } from 'commander'\nimport { isJSONMode, outputError, outputSuccess } from '../output'\n\ntype CompletionOptions = {\n install?: boolean\n}\n\nconst TOP_LEVEL_COMMANDS = [\n 'adopt',\n 'audit',\n 'completion',\n 'config',\n 'diff',\n 'doctor',\n 'draft',\n 'info',\n 'init',\n 'install',\n 'list',\n 'log',\n 'login',\n 'logout',\n 'publish',\n 'remove',\n 'save',\n 'scan',\n 'search',\n 'status',\n 'suggest',\n 'suggestions',\n 'sync',\n 'update',\n 'upgrade',\n 'verify',\n 'version',\n 'whoami',\n]\n\nconst SUBCOMMANDS: Record<string, string[]> = {\n draft: ['create', 'list', 'switch', 'publish', 'discard'],\n version: ['create', 'list'],\n config: ['list', 'get', 'set', 'unset', 'path'],\n completion: ['bash', 'zsh', 'fish'],\n}\n\nconst COMMON_FLAGS = ['--json', '--global', '--dry-run', '--help']\n\nfunction generateBashScript(): string {\n const subcmdCases = Object.entries(SUBCOMMANDS)\n .map(\n ([cmd, subs]) =>\n ` ${cmd})\\n COMPREPLY=( $(compgen -W \"${subs.join(' ')}\" -- \"$cur\") )\\n return 0\\n ;;`\n )\n .join('\\n')\n\n return `# agentver bash completion\n_agentver() {\n local cur prev commands\n COMPREPLY=()\n cur=\"\\${COMP_WORDS[COMP_CWORD]}\"\n prev=\"\\${COMP_WORDS[COMP_CWORD-1]}\"\n commands=\"${TOP_LEVEL_COMMANDS.join(' ')}\"\n\n if [[ \"$COMP_CWORD\" -eq 1 ]]; then\n COMPREPLY=( $(compgen -W \"$commands\" -- \"$cur\") )\n return 0\n fi\n\n if [[ \"$cur\" == -* ]]; then\n COMPREPLY=( $(compgen -W \"${COMMON_FLAGS.join(' ')}\" -- \"$cur\") )\n return 0\n fi\n\n case \"$prev\" in\n${subcmdCases}\n esac\n\n return 0\n}\n\ncomplete -F _agentver agentver\n`\n}\n\nfunction generateZshScript(): string {\n const subcmdCases = Object.entries(SUBCOMMANDS)\n .map(\n ([cmd, subs]) =>\n ` ${cmd})\\n _values 'subcommand' ${subs.map((s) => `'${s}'`).join(' ')}\\n ;;`\n )\n .join('\\n')\n\n return `# agentver zsh completion\n_agentver() {\n local -a commands\n commands=(\n${TOP_LEVEL_COMMANDS.map((c) => ` '${c}'`).join('\\n')}\n )\n\n _arguments -C \\\n '--json[Output results as structured JSON]' \\\n '--global[Apply globally]' \\\n '--dry-run[Preview changes without applying]' \\\n '--help[Show help]' \\\n '1:command:->cmd' \\\n '*::arg:->args'\n\n case \"$state\" in\n cmd)\n _describe 'command' commands\n ;;\n args)\n case \"\\${words[1]}\" in\n${subcmdCases}\n esac\n ;;\n esac\n}\n\ncompdef _agentver agentver\n`\n}\n\nfunction generateFishScript(): string {\n const topLevelCompletions = TOP_LEVEL_COMMANDS.map(\n (cmd) => `complete -c agentver -n '__fish_use_subcommand' -a '${cmd}'`\n ).join('\\n')\n\n const subcmdCompletions = Object.entries(SUBCOMMANDS)\n .flatMap(([cmd, subs]) =>\n subs.map((sub) => `complete -c agentver -n '__fish_seen_subcommand_from ${cmd}' -a '${sub}'`)\n )\n .join('\\n')\n\n const flagCompletions = [\n \"complete -c agentver -l json -d 'Output results as structured JSON'\",\n \"complete -c agentver -l global -d 'Apply globally'\",\n \"complete -c agentver -l dry-run -d 'Preview changes without applying'\",\n \"complete -c agentver -l help -d 'Show help'\",\n ].join('\\n')\n\n return `# agentver fish completion\n${topLevelCompletions}\n${subcmdCompletions}\n${flagCompletions}\n`\n}\n\ntype Shell = 'bash' | 'zsh' | 'fish'\n\nconst SHELL_GENERATORS: Record<Shell, () => string> = {\n bash: generateBashScript,\n zsh: generateZshScript,\n fish: generateFishScript,\n}\n\nconst RC_PATHS: Record<Shell, string> = {\n bash: join(homedir(), '.bashrc'),\n zsh: join(homedir(), '.zshrc'),\n fish: join(homedir(), '.config', 'fish', 'config.fish'),\n}\n\nconst EVAL_LINES: Record<Shell, string> = {\n bash: 'eval \"$(agentver completion bash)\"',\n zsh: 'eval \"$(agentver completion zsh)\"',\n fish: 'agentver completion fish | source',\n}\n\nfunction installCompletion(shell: Shell): void {\n const rcPath = RC_PATHS[shell]\n const evalLine = EVAL_LINES[shell]\n\n if (existsSync(rcPath)) {\n const content = readFileSync(rcPath, 'utf-8')\n if (content.includes(evalLine)) {\n process.stdout.write(chalk.dim(`Completion already installed in ${rcPath}\\n`))\n return\n }\n }\n\n appendFileSync(rcPath, `\\n# agentver shell completion\\n${evalLine}\\n`)\n process.stdout.write(\n chalk.green(`Completion installed in ${rcPath}\\n`) +\n chalk.dim('Restart your shell or run: ') +\n chalk.cyan(`source ${rcPath}`) +\n '\\n'\n )\n}\n\nexport function registerCompletionCommand(program: Command): void {\n program\n .command('completion <shell>')\n .description('Generate shell completion scripts (bash, zsh, fish)')\n .option('--install', 'Install the completion script to your shell RC file')\n .action((shell: string, options: CompletionOptions) => {\n const jsonMode = isJSONMode()\n\n if (!['bash', 'zsh', 'fish'].includes(shell)) {\n if (jsonMode) {\n outputError('INVALID_SHELL', `Unsupported shell \"${shell}\". Supported: bash, zsh, fish`)\n process.exit(1)\n }\n process.stderr.write(\n chalk.red(`Unsupported shell \"${shell}\". Supported: bash, zsh, fish\\n`)\n )\n process.exit(1)\n }\n\n const validShell = shell as Shell\n const script = SHELL_GENERATORS[validShell]()\n\n if (options.install) {\n if (jsonMode) {\n installCompletion(validShell)\n outputSuccess({ shell: validShell, installed: true, rcPath: RC_PATHS[validShell] })\n return\n }\n installCompletion(validShell)\n return\n }\n\n if (jsonMode) {\n outputSuccess({ shell: validShell, script })\n return\n }\n\n process.stdout.write(script)\n })\n}\n","import chalk from 'chalk'\nimport type { Command } from 'commander'\nimport { isJSONMode, outputError, outputSuccess } from '../output.js'\nimport { type AgentverConfig, getConfigPath, readConfig, writeConfig } from '../registry/config.js'\n\nconst KNOWN_KEYS = ['platformUrl', 'defaultOrg', 'telemetry'] as const\ntype KnownKey = (typeof KNOWN_KEYS)[number]\n\nfunction isKnownKey(key: string): key is KnownKey {\n return (KNOWN_KEYS as readonly string[]).includes(key)\n}\n\nfunction formatValue(value: unknown): string {\n if (value === undefined || value === null) return ''\n if (typeof value === 'object') return JSON.stringify(value)\n return String(value)\n}\n\nfunction validateKey(key: string): key is KnownKey {\n if (!isKnownKey(key)) {\n if (isJSONMode()) {\n outputError('INVALID_KEY', `Unknown config key: ${key}. Valid keys: ${KNOWN_KEYS.join(', ')}`)\n } else {\n console.error(chalk.red(`Unknown config key: ${key}. Valid keys: ${KNOWN_KEYS.join(', ')}`))\n }\n return false\n }\n return true\n}\n\nfunction validateValue(key: KnownKey, value: string): { valid: boolean; parsed?: unknown } {\n switch (key) {\n case 'telemetry': {\n if (value !== 'true' && value !== 'false') {\n if (isJSONMode()) {\n outputError('INVALID_VALUE', 'telemetry must be true or false')\n } else {\n console.error(chalk.red('telemetry must be true or false'))\n }\n return { valid: false }\n }\n return { valid: true, parsed: value === 'true' }\n }\n case 'platformUrl': {\n if (!value.startsWith('https://')) {\n if (isJSONMode()) {\n outputError('INVALID_VALUE', 'platformUrl must start with https://')\n } else {\n console.error(chalk.red('platformUrl must start with https://'))\n }\n return { valid: false }\n }\n return { valid: true, parsed: value }\n }\n default:\n return { valid: true, parsed: value }\n }\n}\n\nexport function registerConfigCommand(program: Command): void {\n const configCmd = program.command('config').description('Manage CLI configuration')\n\n configCmd\n .command('list')\n .description('Show all config values')\n .option('--json', 'Output as JSON')\n .action(() => {\n const config = readConfig()\n const jsonMode = isJSONMode()\n\n if (jsonMode) {\n outputSuccess(config)\n return\n }\n\n const entries = Object.entries(config)\n\n if (entries.length === 0) {\n console.log(chalk.dim('No configuration set.'))\n return\n }\n\n console.log(chalk.bold('\\nConfiguration:\\n'))\n\n for (const [key, value] of entries) {\n console.log(` ${chalk.green(key)} = ${chalk.cyan(formatValue(value))}`)\n }\n\n console.log()\n })\n\n configCmd\n .command('get')\n .description('Get a config value')\n .argument('<key>', 'Config key to read')\n .option('--json', 'Output as JSON')\n .action((key: string) => {\n const jsonMode = isJSONMode()\n\n if (!validateKey(key)) {\n process.exit(1)\n }\n\n const config = readConfig()\n const value = config[key as KnownKey]\n\n if (jsonMode) {\n outputSuccess({ key, value: value ?? null })\n return\n }\n\n if (value === undefined) {\n process.exit(0)\n }\n\n console.log(formatValue(value))\n })\n\n configCmd\n .command('set')\n .description('Set a config value')\n .argument('<key>', 'Config key to set')\n .argument('<value>', 'Value to set')\n .option('--json', 'Output as JSON')\n .action((key: string, value: string) => {\n const jsonMode = isJSONMode()\n\n if (!validateKey(key)) {\n process.exit(1)\n }\n\n const validation = validateValue(key, value)\n\n if (!validation.valid) {\n process.exit(1)\n }\n\n const config = readConfig()\n const updated: AgentverConfig = { ...config, [key]: validation.parsed }\n writeConfig(updated)\n\n if (jsonMode) {\n outputSuccess({ key, value: validation.parsed })\n return\n }\n\n console.log(chalk.green(`Set ${key} = ${formatValue(validation.parsed)}`))\n })\n\n configCmd\n .command('unset')\n .description('Remove a config key')\n .argument('<key>', 'Config key to remove')\n .option('--json', 'Output as JSON')\n .action((key: string) => {\n const jsonMode = isJSONMode()\n\n if (!validateKey(key)) {\n process.exit(1)\n }\n\n const config = readConfig()\n delete config[key as KnownKey]\n writeConfig(config)\n\n if (jsonMode) {\n outputSuccess({ key, removed: true })\n return\n }\n\n console.log(chalk.green(`Removed ${key}`))\n })\n\n configCmd\n .command('path')\n .description('Print the config file path')\n .action(() => {\n console.log(getConfigPath())\n })\n}\n","import type { DiffResult } from '@agentver/shared'\nimport chalk from 'chalk'\nimport type { Command } from 'commander'\nimport { readFilesFromDirectory } from '../git/fetcher.js'\nimport { fetchFiles } from '../git/index.js'\nimport type { GitSource as CliGitSource, ResolvedRef } from '../git/types.js'\nimport { createSpinner, isJSONMode, outputError, outputSuccess } from '../output'\nimport { resolveReadPath } from '../storage/canonical.js'\nimport { readLockfile } from '../storage/lockfile.js'\nimport { readManifest } from '../storage/manifest.js'\n\nconst CONTEXT_LINES = 3\n\ntype DiffHunk = {\n oldStart: number\n oldCount: number\n newStart: number\n newCount: number\n lines: string[]\n}\n\ntype FileDiff = {\n path: string\n type: 'added' | 'removed' | 'modified'\n hunks: DiffHunk[]\n}\n\nfunction parseManifestUri(uri: string): CliGitSource | null {\n const parts = uri.split('/')\n if (parts.length < 3) return null\n\n return {\n host: parts[0] as CliGitSource['host'],\n owner: parts[1]!,\n repo: parts[2]!,\n path: parts.slice(3).join('/'),\n ref: 'HEAD',\n }\n}\n\nasync function readLocalFiles(\n projectRoot: string,\n packageName: string,\n agents: string[]\n): Promise<Array<{ path: string; content: string }>> {\n // Try canonical path first, fall back to agent-specific paths\n const readPath = resolveReadPath(projectRoot, packageName, agents)\n if (readPath) {\n const files = await readFilesFromDirectory(readPath)\n return files.map((f) => ({ path: f.path, content: f.content }))\n }\n\n return []\n}\n\nfunction computeHunks(oldLines: string[], newLines: string[]): DiffHunk[] {\n const lcs = computeLcs(oldLines, newLines)\n const changes = buildChangeList(oldLines, newLines, lcs)\n\n if (changes.length === 0) return []\n\n return groupIntoHunks(changes)\n}\n\nfunction computeLcs(a: string[], b: string[]): Array<[number, number]> {\n const m = a.length\n const n = b.length\n const dp: number[][] = Array.from({ length: m + 1 }, () => Array(n + 1).fill(0) as number[])\n\n for (let i = 1; i <= m; i++) {\n for (let j = 1; j <= n; j++) {\n if (a[i - 1] === b[j - 1]) {\n dp[i]![j] = dp[i - 1]![j - 1]! + 1\n } else {\n dp[i]![j] = Math.max(dp[i - 1]![j]!, dp[i]![j - 1]!)\n }\n }\n }\n\n const result: Array<[number, number]> = []\n let i = m\n let j = n\n while (i > 0 && j > 0) {\n if (a[i - 1] === b[j - 1]) {\n result.unshift([i - 1, j - 1])\n i--\n j--\n } else if (dp[i - 1]![j]! >= dp[i]![j - 1]!) {\n i--\n } else {\n j--\n }\n }\n\n return result\n}\n\ntype Change = {\n type: 'context' | 'add' | 'remove'\n oldIndex: number\n newIndex: number\n line: string\n}\n\nfunction buildChangeList(\n oldLines: string[],\n newLines: string[],\n lcs: Array<[number, number]>\n): Change[] {\n const changes: Change[] = []\n let oldIdx = 0\n let newIdx = 0\n\n for (const [lcsOld, lcsNew] of lcs) {\n while (oldIdx < lcsOld) {\n changes.push({ type: 'remove', oldIndex: oldIdx, newIndex: newIdx, line: oldLines[oldIdx]! })\n oldIdx++\n }\n while (newIdx < lcsNew) {\n changes.push({ type: 'add', oldIndex: oldIdx, newIndex: newIdx, line: newLines[newIdx]! })\n newIdx++\n }\n changes.push({ type: 'context', oldIndex: oldIdx, newIndex: newIdx, line: oldLines[oldIdx]! })\n oldIdx++\n newIdx++\n }\n\n while (oldIdx < oldLines.length) {\n changes.push({ type: 'remove', oldIndex: oldIdx, newIndex: newIdx, line: oldLines[oldIdx]! })\n oldIdx++\n }\n while (newIdx < newLines.length) {\n changes.push({ type: 'add', oldIndex: oldIdx, newIndex: newIdx, line: newLines[newIdx]! })\n newIdx++\n }\n\n return changes\n}\n\nfunction groupIntoHunks(changes: Change[]): DiffHunk[] {\n const diffIndices: number[] = []\n for (let i = 0; i < changes.length; i++) {\n if (changes[i]!.type !== 'context') {\n diffIndices.push(i)\n }\n }\n\n if (diffIndices.length === 0) return []\n\n const hunks: DiffHunk[] = []\n let hunkStart = 0\n let groupStart = diffIndices[0]!\n\n for (let d = 0; d < diffIndices.length; d++) {\n const nextDiffIdx = diffIndices[d + 1]\n const currentDiffIdx = diffIndices[d]!\n\n const gapToNext = nextDiffIdx !== undefined ? nextDiffIdx - currentDiffIdx - 1 : Infinity\n\n if (gapToNext > CONTEXT_LINES * 2) {\n const contextBefore = Math.max(0, groupStart - CONTEXT_LINES)\n const contextAfter = Math.min(changes.length - 1, currentDiffIdx + CONTEXT_LINES)\n\n const hunkChanges = changes.slice(contextBefore, contextAfter + 1)\n const hunk = buildHunk(hunkChanges, contextBefore, changes)\n hunks.push(hunk)\n\n hunkStart = d + 1\n groupStart = nextDiffIdx ?? groupStart\n }\n }\n\n if (hunkStart <= diffIndices.length - 1) {\n const lastDiffIdx = diffIndices[diffIndices.length - 1]!\n const contextBefore = Math.max(0, groupStart - CONTEXT_LINES)\n const contextAfter = Math.min(changes.length - 1, lastDiffIdx + CONTEXT_LINES)\n\n const hunkChanges = changes.slice(contextBefore, contextAfter + 1)\n const hunk = buildHunk(hunkChanges, contextBefore, changes)\n hunks.push(hunk)\n }\n\n return hunks\n}\n\nfunction buildHunk(hunkChanges: Change[], startIdx: number, allChanges: Change[]): DiffHunk {\n let oldStart = 1\n let newStart = 1\n\n const firstChange = hunkChanges[0] ?? allChanges[startIdx]\n if (firstChange) {\n oldStart = firstChange.oldIndex + 1\n newStart = firstChange.newIndex + 1\n }\n\n let oldCount = 0\n let newCount = 0\n const lines: string[] = []\n\n for (const change of hunkChanges) {\n switch (change.type) {\n case 'context':\n lines.push(` ${change.line}`)\n oldCount++\n newCount++\n break\n case 'remove':\n lines.push(`-${change.line}`)\n oldCount++\n break\n case 'add':\n lines.push(`+${change.line}`)\n newCount++\n break\n }\n }\n\n return { oldStart, oldCount, newStart, newCount, lines }\n}\n\nfunction diffFiles(\n upstreamFiles: Map<string, string>,\n localFiles: Map<string, string>\n): FileDiff[] {\n const diffs: FileDiff[] = []\n const allPaths = new Set([...upstreamFiles.keys(), ...localFiles.keys()])\n\n for (const path of [...allPaths].sort()) {\n const upstreamContent = upstreamFiles.get(path)\n const localContent = localFiles.get(path)\n\n if (upstreamContent === undefined && localContent !== undefined) {\n const newLines = localContent.split('\\n')\n const hunks = computeHunks([], newLines)\n if (hunks.length > 0) {\n diffs.push({ path, type: 'added', hunks })\n }\n continue\n }\n\n if (upstreamContent !== undefined && localContent === undefined) {\n const oldLines = upstreamContent.split('\\n')\n const hunks = computeHunks(oldLines, [])\n if (hunks.length > 0) {\n diffs.push({ path, type: 'removed', hunks })\n }\n continue\n }\n\n if (\n upstreamContent !== undefined &&\n localContent !== undefined &&\n upstreamContent !== localContent\n ) {\n const oldLines = upstreamContent.split('\\n')\n const newLines = localContent.split('\\n')\n const hunks = computeHunks(oldLines, newLines)\n if (hunks.length > 0) {\n diffs.push({ path, type: 'modified', hunks })\n }\n }\n }\n\n return diffs\n}\n\nfunction formatDiff(diffs: FileDiff[]): string {\n const output: string[] = []\n\n for (const diff of diffs) {\n output.push(chalk.bold(`--- a/${diff.path}`))\n output.push(chalk.bold(`+++ b/${diff.path}`))\n\n for (const hunk of diff.hunks) {\n output.push(\n chalk.cyan(`@@ -${hunk.oldStart},${hunk.oldCount} +${hunk.newStart},${hunk.newCount} @@`)\n )\n\n for (const line of hunk.lines) {\n if (line.startsWith('+')) {\n output.push(chalk.green(line))\n } else if (line.startsWith('-')) {\n output.push(chalk.red(line))\n } else {\n output.push(line)\n }\n }\n }\n\n output.push('')\n }\n\n return output.join('\\n')\n}\n\nexport function registerDiffCommand(program: Command): void {\n program\n .command('diff <name>')\n .description('Show diff between local and upstream version of a skill')\n .action(async (name: string) => {\n const jsonMode = isJSONMode()\n const projectRoot = process.cwd()\n const manifest = readManifest(projectRoot)\n const lockfile = readLockfile(projectRoot)\n\n const manifestEntry = manifest.packages[name]\n if (!manifestEntry) {\n if (jsonMode) {\n outputError('NOT_INSTALLED', `Package \"${name}\" is not installed.`)\n process.exit(1)\n }\n console.error(chalk.red(`Package \"${name}\" is not installed.`))\n process.exit(1)\n }\n\n const { source, agents } = manifestEntry\n\n if (source.type === 'well-known') {\n if (jsonMode) {\n outputError('WELL_KNOWN_UNSUPPORTED', `Diff is not yet supported for well-known sources.`)\n process.exit(1)\n }\n console.error(\n chalk.red(\n `Package \"${name}\" was installed from a well-known source (${source.hostname}).`\n )\n )\n console.error(chalk.dim('Diff is not yet supported for well-known sources.'))\n process.exit(1)\n }\n\n if (source.uri === 'unknown') {\n if (jsonMode) {\n outputError(\n 'UNKNOWN_SOURCE',\n `Package \"${name}\" was migrated from v1 and has no known Git source.`\n )\n process.exit(1)\n }\n console.error(\n chalk.red(`Package \"${name}\" was migrated from v1 and has no known Git source.`)\n )\n console.error(\n chalk.dim('Reinstall it using a Git source URL to enable diff:\\n') +\n chalk.dim(` agentver remove ${name}\\n`) +\n chalk.dim(` agentver install <git-source>`)\n )\n process.exit(1)\n }\n\n const spinner = createSpinner('Fetching upstream files...').start()\n\n try {\n const cliSource = parseManifestUri(source.uri)\n if (!cliSource) {\n const message = `Could not parse source URI: ${source.uri}`\n if (jsonMode) {\n outputError('INVALID_SOURCE_URI', message)\n process.exit(1)\n }\n spinner.fail(message)\n process.exit(1)\n }\n\n cliSource.ref = source.ref\n cliSource.commit = source.commit\n const lockfileEntry = lockfile.packages[name]\n const lockfileSource = lockfileEntry?.source\n const commitSha =\n (lockfileSource?.type === 'git' ? lockfileSource.commit : undefined) ?? source.commit\n\n const resolved: ResolvedRef = {\n source: { ...cliSource, path: source.path },\n commitSha,\n }\n\n const fetchResult = await fetchFiles(resolved)\n spinner.text = 'Comparing files...'\n\n const localFiles = await readLocalFiles(projectRoot, name, agents)\n\n const upstreamMap = new Map<string, string>()\n for (const file of fetchResult.files) {\n upstreamMap.set(file.path, file.content)\n }\n\n const localMap = new Map<string, string>()\n for (const file of localFiles) {\n localMap.set(file.path, file.content)\n }\n\n const diffs = diffFiles(upstreamMap, localMap)\n spinner.stop()\n\n if (jsonMode) {\n const diffResult: DiffResult = {\n name,\n hunks: diffs.flatMap((d) =>\n d.hunks.map((h) => ({\n file: d.path,\n additions: h.lines.filter((l) => l.startsWith('+')).length,\n deletions: h.lines.filter((l) => l.startsWith('-')).length,\n content: h.lines.join('\\n'),\n }))\n ),\n }\n outputSuccess(diffResult)\n return\n }\n\n if (diffs.length === 0) {\n console.log(chalk.green('No differences found.'))\n return\n }\n\n console.log(formatDiff(diffs))\n } catch (error) {\n const message = `Failed to generate diff: ${error instanceof Error ? error.message : String(error)}`\n if (jsonMode) {\n outputError('DIFF_FAILED', message)\n process.exit(1)\n }\n spinner.fail(message)\n process.exit(1)\n }\n })\n}\n","import { AgentverError, createLogger } from '@agentver/shared'\nimport { buildRepoUrl, execGit } from './fetcher.js'\nimport type { GitHost, GitSource, ResolvedRef } from './types.js'\n\nconst logger = createLogger('git:resolver')\n\nconst KNOWN_HOSTS: GitHost[] = ['github.com', 'gitlab.com', 'bitbucket.org']\nconst RESOLVE_TIMEOUT_MS = 15_000\n\nexport function parseGitSource(source: string): GitSource {\n let cleaned = source.trim()\n\n if (cleaned.startsWith('https://')) {\n cleaned = cleaned.slice(8)\n }\n\n if (cleaned.startsWith('http://')) {\n cleaned = cleaned.slice(7)\n }\n\n // Extract commit SHA if specified with #\n let commit: string | undefined\n const hashIndex = cleaned.indexOf('#')\n if (hashIndex !== -1) {\n commit = cleaned.slice(hashIndex + 1)\n cleaned = cleaned.slice(0, hashIndex)\n if (!commit) {\n throw new AgentverError('VALIDATION_ERROR', 'Empty commit SHA after # separator')\n }\n }\n\n // Extract ref if specified with @\n let ref = 'HEAD'\n const atIndex = cleaned.indexOf('@')\n if (atIndex !== -1) {\n ref = cleaned.slice(atIndex + 1)\n cleaned = cleaned.slice(0, atIndex)\n if (!ref) {\n throw new AgentverError('VALIDATION_ERROR', 'Empty ref after @ separator')\n }\n }\n\n // Cannot have both # and @\n if (commit && ref !== 'HEAD') {\n throw new AgentverError(\n 'VALIDATION_ERROR',\n 'Cannot specify both a commit SHA (#) and a ref (@) — use one or the other'\n )\n }\n\n const segments = cleaned.split('/').filter(Boolean)\n\n if (segments.length < 3) {\n throw new AgentverError(\n 'VALIDATION_ERROR',\n `Invalid git source \"${source}\" — expected format: host/owner/repo[/path][@ref|#commit]`\n )\n }\n\n const hostRaw = segments[0]!\n const owner = segments[1]!\n const repo = segments[2]!\n const pathParts = segments.slice(3)\n const host: GitHost = KNOWN_HOSTS.includes(hostRaw as GitHost) ? (hostRaw as GitHost) : 'generic'\n\n return {\n host,\n owner,\n repo,\n path: pathParts.join('/'),\n ref: commit ? 'HEAD' : ref,\n commit,\n }\n}\n\nexport async function resolveRef(source: GitSource): Promise<ResolvedRef> {\n if (source.commit) {\n return { source, commitSha: source.commit }\n }\n\n logger.debug(`Resolving ref \"${source.ref}\" for ${source.host}/${source.owner}/${source.repo}`)\n\n if (source.host === 'github.com') {\n return resolveGitHubRef(source)\n }\n\n if (source.host === 'gitlab.com') {\n return resolveGitLabRef(source)\n }\n\n return resolveViaGitLsRemote(source)\n}\n\nasync function resolveGitHubRef(source: GitSource): Promise<ResolvedRef> {\n const url = `https://api.github.com/repos/${source.owner}/${source.repo}/commits/${encodeURIComponent(source.ref)}`\n\n const headers: Record<string, string> = {\n Accept: 'application/vnd.github.v3+json',\n 'User-Agent': 'agentver-cli',\n }\n\n const token = process.env.GITHUB_TOKEN\n if (token) {\n headers.Authorization = `Bearer ${token}`\n }\n\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), RESOLVE_TIMEOUT_MS)\n\n try {\n const response = await fetch(url, { headers, signal: controller.signal })\n clearTimeout(timeoutId)\n\n if (response.status === 403) {\n const remaining = response.headers.get('X-RateLimit-Remaining')\n if (remaining === '0') {\n const resetEpoch = response.headers.get('X-RateLimit-Reset')\n const resetAt = resetEpoch ? new Date(Number(resetEpoch) * 1000).toISOString() : 'unknown'\n throw new AgentverError(\n 'RATE_LIMITED',\n `GitHub API rate limit exceeded. Resets at ${resetAt}. Set GITHUB_TOKEN to increase your limit.`\n )\n }\n }\n\n if (response.status === 404 || response.status === 422) {\n throw new AgentverError(\n 'NOT_FOUND',\n `Could not resolve ref \"${source.ref}\" for ${source.owner}/${source.repo} on GitHub`\n )\n }\n\n if (!response.ok) {\n throw new AgentverError(\n 'INTERNAL_ERROR',\n `GitHub API returned ${response.status} whilst resolving ref \"${source.ref}\"`\n )\n }\n\n const data = (await response.json()) as { sha: string }\n return { source, commitSha: data.sha }\n } catch (error) {\n clearTimeout(timeoutId)\n\n if (error instanceof AgentverError) throw error\n\n if (error instanceof DOMException && error.name === 'AbortError') {\n throw new AgentverError(\n 'INTERNAL_ERROR',\n `Timed out resolving ref \"${source.ref}\" from GitHub API`\n )\n }\n\n logger.warn(`GitHub API failed, falling back to git ls-remote: ${String(error)}`)\n return resolveViaGitLsRemote(source)\n }\n}\n\nasync function resolveGitLabRef(source: GitSource): Promise<ResolvedRef> {\n const projectId = encodeURIComponent(`${source.owner}/${source.repo}`)\n const url = `https://gitlab.com/api/v4/projects/${projectId}/repository/commits/${encodeURIComponent(source.ref)}`\n\n const headers: Record<string, string> = {\n 'User-Agent': 'agentver-cli',\n }\n\n const token = process.env.GITLAB_TOKEN\n if (token) {\n headers['PRIVATE-TOKEN'] = token\n }\n\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), RESOLVE_TIMEOUT_MS)\n\n try {\n const response = await fetch(url, { headers, signal: controller.signal })\n clearTimeout(timeoutId)\n\n if (response.status === 404) {\n throw new AgentverError(\n 'NOT_FOUND',\n `Could not resolve ref \"${source.ref}\" for ${source.owner}/${source.repo} on GitLab`\n )\n }\n\n if (!response.ok) {\n throw new AgentverError(\n 'INTERNAL_ERROR',\n `GitLab API returned ${response.status} whilst resolving ref \"${source.ref}\"`\n )\n }\n\n const data = (await response.json()) as { id: string }\n return { source, commitSha: data.id }\n } catch (error) {\n clearTimeout(timeoutId)\n\n if (error instanceof AgentverError) throw error\n\n if (error instanceof DOMException && error.name === 'AbortError') {\n throw new AgentverError(\n 'INTERNAL_ERROR',\n `Timed out resolving ref \"${source.ref}\" from GitLab API`\n )\n }\n\n logger.warn(`GitLab API failed, falling back to git ls-remote: ${String(error)}`)\n return resolveViaGitLsRemote(source)\n }\n}\n\nasync function resolveViaGitLsRemote(source: GitSource): Promise<ResolvedRef> {\n const repoUrl = buildRepoUrl(source)\n\n try {\n const output = await execGit(['ls-remote', repoUrl, source.ref])\n const lines = output.trim().split('\\n')\n\n for (const line of lines) {\n const [sha, _refName] = line.split('\\t')\n if (sha && sha.length >= 40) {\n return { source, commitSha: sha }\n }\n }\n\n // If ref is HEAD and we got nothing, try without ref argument\n if (source.ref === 'HEAD') {\n const headOutput = await execGit(['ls-remote', repoUrl, 'HEAD'])\n const headLine = headOutput.trim().split('\\n')[0]\n if (headLine) {\n const [sha] = headLine.split('\\t')\n if (sha && sha.length >= 40) {\n return { source, commitSha: sha }\n }\n }\n }\n\n throw new AgentverError(\n 'NOT_FOUND',\n `Could not resolve ref \"${source.ref}\" for ${source.owner}/${source.repo} via git ls-remote`\n )\n } catch (error) {\n if (error instanceof AgentverError) throw error\n\n throw new AgentverError(\n 'NOT_FOUND',\n `Failed to resolve ref \"${source.ref}\" for ${source.owner}/${source.repo}: ${String(error)}`\n )\n }\n}\n","import { execSync } from 'node:child_process'\nimport { existsSync, lstatSync, readFileSync, readlinkSync } from 'node:fs'\nimport { dirname, join } from 'node:path'\nimport { type AgentId, getSkillPlacementPath } from '@agentver/agent-definitions'\nimport {\n type DoctorCheck,\n type DoctorResult,\n manifestAnySchema,\n lockfileAnySchema,\n} from '@agentver/shared'\nimport chalk from 'chalk'\nimport type { Command } from 'commander'\nimport { isJSONMode, outputSuccess } from '../output'\nimport { getCredentials } from '../registry/auth.js'\nimport { getPlatformUrl } from '../registry/config.js'\nimport { getCanonicalSkillPath } from '../storage/canonical.js'\nimport { readLockfile } from '../storage/lockfile.js'\nimport { readManifest } from '../storage/manifest.js'\n\ntype CheckStatus = DoctorCheck['status']\n\nconst MANIFEST_DIR = '.agentver'\nconst MANIFEST_FILE = 'manifest.json'\nconst LOCKFILE_FILE = 'lockfile.json'\nconst NETWORK_TIMEOUT_MS = 3000\nconst MIN_NODE_VERSION = 20\n\nfunction check(name: string, status: CheckStatus, message: string): DoctorCheck {\n return { name, status, message }\n}\n\nfunction checkManifestIntegrity(projectRoot: string): DoctorCheck {\n const manifestPath = join(projectRoot, MANIFEST_DIR, MANIFEST_FILE)\n\n if (!existsSync(manifestPath)) {\n return check('manifest-integrity', 'warn', 'Manifest file not found (no skills installed yet)')\n }\n\n let raw: string\n try {\n raw = readFileSync(manifestPath, 'utf-8')\n } catch {\n return check('manifest-integrity', 'fail', 'Cannot read manifest file')\n }\n\n let parsed: unknown\n try {\n parsed = JSON.parse(raw)\n } catch {\n return check('manifest-integrity', 'fail', 'Manifest contains invalid JSON')\n }\n\n const result = manifestAnySchema.safeParse(parsed)\n if (!result.success) {\n return check('manifest-integrity', 'fail', 'Manifest does not match expected schema')\n }\n\n return check('manifest-integrity', 'pass', 'Manifest is valid')\n}\n\nfunction checkLockfileIntegrity(projectRoot: string): DoctorCheck {\n const lockfilePath = join(projectRoot, MANIFEST_DIR, LOCKFILE_FILE)\n\n if (!existsSync(lockfilePath)) {\n return check('lockfile-integrity', 'warn', 'Lockfile not found (no skills installed yet)')\n }\n\n let raw: string\n try {\n raw = readFileSync(lockfilePath, 'utf-8')\n } catch {\n return check('lockfile-integrity', 'fail', 'Cannot read lockfile')\n }\n\n let parsed: unknown\n try {\n parsed = JSON.parse(raw)\n } catch {\n return check('lockfile-integrity', 'fail', 'Lockfile contains invalid JSON')\n }\n\n const result = lockfileAnySchema.safeParse(parsed)\n if (!result.success) {\n return check('lockfile-integrity', 'fail', 'Lockfile does not match expected schema')\n }\n\n return check('lockfile-integrity', 'pass', 'Lockfile is valid')\n}\n\nfunction checkManifestLockfileSync(projectRoot: string): DoctorCheck {\n const manifest = readManifest(projectRoot)\n const lockfile = readLockfile(projectRoot)\n\n const manifestNames = new Set(Object.keys(manifest.packages))\n const lockfileNames = new Set(Object.keys(lockfile.packages))\n\n if (manifestNames.size === 0 && lockfileNames.size === 0) {\n return check('manifest-lockfile-sync', 'pass', 'Manifest and lockfile are in sync (both empty)')\n }\n\n const inManifestOnly: string[] = []\n const inLockfileOnly: string[] = []\n\n for (const name of manifestNames) {\n if (!lockfileNames.has(name)) {\n inManifestOnly.push(name)\n }\n }\n\n for (const name of lockfileNames) {\n if (!manifestNames.has(name)) {\n inLockfileOnly.push(name)\n }\n }\n\n if (inManifestOnly.length > 0 || inLockfileOnly.length > 0) {\n const parts: string[] = []\n if (inManifestOnly.length > 0) {\n parts.push(`in manifest but not lockfile: ${inManifestOnly.join(', ')}`)\n }\n if (inLockfileOnly.length > 0) {\n parts.push(`in lockfile but not manifest: ${inLockfileOnly.join(', ')}`)\n }\n return check('manifest-lockfile-sync', 'fail', `Out of sync — ${parts.join('; ')}`)\n }\n\n return check('manifest-lockfile-sync', 'pass', 'Manifest and lockfile are in sync')\n}\n\nfunction checkSkillFilesExist(projectRoot: string): DoctorCheck {\n const manifest = readManifest(projectRoot)\n const entries = Object.keys(manifest.packages)\n\n if (entries.length === 0) {\n return check('skill-files-exist', 'pass', 'No packages installed')\n }\n\n const missing: string[] = []\n\n for (const name of entries) {\n const canonicalPath = getCanonicalSkillPath(projectRoot, name, 'project')\n if (!existsSync(canonicalPath) || !lstatSync(canonicalPath).isDirectory()) {\n missing.push(name)\n }\n }\n\n if (missing.length > 0) {\n return check('skill-files-exist', 'fail', `Missing skill directories: ${missing.join(', ')}`)\n }\n\n return check('skill-files-exist', 'pass', `All ${entries.length} skill directories present`)\n}\n\nfunction checkSymlinksValid(projectRoot: string): DoctorCheck {\n const manifest = readManifest(projectRoot)\n const entries = Object.entries(manifest.packages)\n\n if (entries.length === 0) {\n return check('symlinks-valid', 'pass', 'No packages installed')\n }\n\n const broken: string[] = []\n\n for (const [name, pkg] of entries) {\n for (const agentId of pkg.agents) {\n const placementPath = getSkillPlacementPath(agentId as AgentId, name, 'project')\n if (!placementPath) continue\n\n const agentSkillPath = join(projectRoot, placementPath)\n\n if (!existsSync(agentSkillPath)) {\n broken.push(`${name}/${agentId}`)\n continue\n }\n\n try {\n const stats = lstatSync(agentSkillPath)\n if (stats.isSymbolicLink()) {\n const target = readlinkSync(agentSkillPath)\n const resolvedTarget = join(dirname(agentSkillPath), target)\n if (!existsSync(resolvedTarget)) {\n broken.push(`${name}/${agentId} (broken symlink)`)\n }\n }\n } catch {\n broken.push(`${name}/${agentId} (unreadable)`)\n }\n }\n }\n\n if (broken.length > 0) {\n return check('symlinks-valid', 'fail', `Invalid symlinks: ${broken.join(', ')}`)\n }\n\n const totalLinks = entries.reduce((sum, [, pkg]) => sum + pkg.agents.length, 0)\n return check('symlinks-valid', 'pass', `All ${totalLinks} symlinks valid`)\n}\n\nasync function checkAuthentication(): Promise<DoctorCheck> {\n const creds = await getCredentials()\n const hasCredentials = !!(creds?.token ?? creds?.apiKey)\n\n if (!hasCredentials) {\n return check('authentication', 'warn', 'No credentials configured (run agentver login)')\n }\n\n const platformUrl = getPlatformUrl()\n if (!platformUrl) {\n return check('authentication', 'warn', 'Credentials present but no platform URL configured')\n }\n\n try {\n const controller = new AbortController()\n const timeout = setTimeout(() => controller.abort(), NETWORK_TIMEOUT_MS)\n\n const response = await fetch(`${platformUrl}/health`, {\n signal: controller.signal,\n })\n\n clearTimeout(timeout)\n\n if (response.ok) {\n return check('authentication', 'pass', 'Authenticated and platform reachable')\n }\n\n return check(\n 'authentication',\n 'warn',\n `Platform returned status ${String(response.status)} (offline mode available)`\n )\n } catch {\n return check('authentication', 'warn', 'Platform unreachable (offline mode available)')\n }\n}\n\nfunction checkGitAvailable(): DoctorCheck {\n try {\n execSync('git --version', { stdio: 'pipe' })\n return check('git-available', 'pass', 'Git is available')\n } catch {\n return check('git-available', 'fail', 'Git is not installed or not on PATH')\n }\n}\n\nfunction checkNodeVersion(): DoctorCheck {\n const major = parseInt(process.versions.node.split('.')[0] ?? '0', 10)\n\n if (major >= MIN_NODE_VERSION) {\n return check(\n 'node-version',\n 'pass',\n `Node ${process.versions.node} (>= ${String(MIN_NODE_VERSION)})`\n )\n }\n\n return check(\n 'node-version',\n 'fail',\n `Node ${process.versions.node} is below minimum ${String(MIN_NODE_VERSION)}`\n )\n}\n\nfunction formatCheck(result: DoctorCheck): string {\n switch (result.status) {\n case 'pass':\n return ` ${chalk.green('✓')} ${result.message}`\n case 'fail':\n return ` ${chalk.red('✗')} ${result.message}`\n case 'warn':\n return ` ${chalk.yellow('⚠')} ${result.message}`\n }\n}\n\nexport function registerDoctorCommand(program: Command): void {\n program\n .command('doctor')\n .description('Run health checks to diagnose common issues')\n .option('--json', 'Output as JSON')\n .action(async (options: { json?: boolean }) => {\n const jsonMode = isJSONMode() || options.json === true\n const projectRoot = process.cwd()\n\n const checks: DoctorCheck[] = []\n\n checks.push(checkManifestIntegrity(projectRoot))\n checks.push(checkLockfileIntegrity(projectRoot))\n checks.push(checkManifestLockfileSync(projectRoot))\n checks.push(checkSkillFilesExist(projectRoot))\n checks.push(checkSymlinksValid(projectRoot))\n checks.push(await checkAuthentication())\n checks.push(checkGitAvailable())\n checks.push(checkNodeVersion())\n\n const passed = checks.filter((c) => c.status === 'pass').length\n const failed = checks.filter((c) => c.status === 'fail').length\n const warnings = checks.filter((c) => c.status === 'warn').length\n\n if (jsonMode) {\n const result: DoctorResult = { checks, passed, failed, warnings }\n outputSuccess(result)\n process.exit(failed > 0 ? 1 : 0)\n return\n }\n\n console.log(chalk.bold('\\nHealth checks:\\n'))\n\n for (const result of checks) {\n console.log(formatCheck(result))\n }\n\n console.log()\n console.log(\n chalk.dim(\n `${chalk.green(String(passed))} passed, ${chalk.red(String(failed))} failed, ${chalk.yellow(String(warnings))} warnings`\n )\n )\n console.log()\n\n process.exit(failed > 0 ? 1 : 0)\n })\n}\n","import { existsSync, readFileSync } from 'node:fs'\nimport { basename, join } from 'node:path'\nimport chalk from 'chalk'\nimport type { Command } from 'commander'\nimport ora from 'ora'\nimport { platformFetch } from '../registry/platform.js'\nimport { readLockfile, writeLockfile } from '../storage/lockfile.js'\nimport { readManifest } from '../storage/manifest.js'\n\ntype DraftInfo = {\n name: string\n branchName: string\n latestCommitId: string\n latestMessage: string\n}\n\ntype DraftCreateResponse = {\n name: string\n branchName: string\n}\n\ntype DraftActionResponse = {\n commitSha?: string\n}\n\ntype DraftListOptions = {\n json?: boolean\n}\n\n/**\n * Resolve the skill name and namespace from the current directory or manifest.\n */\nfunction resolveSkillIdentity(): { org: string; name: string } | null {\n const cwd = process.cwd()\n const skillMdPath = join(cwd, 'SKILL.md')\n\n let skillName: string | null = null\n\n if (existsSync(skillMdPath)) {\n const content = readFileSync(skillMdPath, 'utf-8')\n const nameMatch = content.match(/^name:\\s*(.+)$/m)\n skillName = nameMatch?.[1]?.trim() ?? basename(cwd)\n }\n\n if (!skillName) {\n skillName = basename(cwd)\n }\n\n const manifest = readManifest(cwd)\n const entry = manifest.packages[skillName]\n\n if (entry?.source.type === 'git') {\n const parts = entry.source.uri.split('/')\n const org = parts.length >= 2 ? parts[parts.length - 2] : parts[0]\n if (org) {\n return { org, name: skillName }\n }\n }\n\n // Fallback: try directory structure\n const pathParts = cwd.split('/')\n const skillsIdx = pathParts.lastIndexOf('skills')\n if (skillsIdx >= 0 && pathParts.length > skillsIdx + 2) {\n return { org: pathParts[skillsIdx + 1]!, name: skillName }\n }\n\n return null\n}\n\nexport function registerDraftCommand(program: Command): void {\n const draft = program.command('draft').description('Manage skill drafts (branches)')\n\n // --- draft create <name> ---\n draft\n .command('create <name>')\n .description('Create a draft branch for the current skill')\n .option('--json', 'Output as JSON')\n .action(async (name: string, options: DraftListOptions) => {\n const identity = resolveSkillIdentity()\n if (!identity) {\n process.stderr.write(\n chalk.red('Could not determine skill identity. Run this from a skill directory.\\n')\n )\n process.exit(1)\n }\n\n const spinner = ora(`Creating draft \"${name}\"...`).start()\n\n try {\n const result = await platformFetch<DraftCreateResponse>(\n `/skills/@${identity.org}/${identity.name}/drafts`,\n {\n method: 'POST',\n body: { name },\n }\n )\n\n if (options.json) {\n spinner.stop()\n console.log(JSON.stringify(result, null, 2))\n } else {\n spinner.succeed(\n `Draft ${chalk.green(result.name)} created on branch ${chalk.cyan(result.branchName)}`\n )\n }\n } catch (error) {\n spinner.fail(\n `Failed to create draft: ${error instanceof Error ? error.message : String(error)}`\n )\n process.exit(1)\n }\n })\n\n // --- draft list ---\n draft\n .command('list')\n .description('List open drafts for the current skill')\n .option('--json', 'Output as JSON')\n .action(async (options: DraftListOptions) => {\n const identity = resolveSkillIdentity()\n if (!identity) {\n process.stderr.write(\n chalk.red('Could not determine skill identity. Run this from a skill directory.\\n')\n )\n process.exit(1)\n }\n\n const spinner = ora('Fetching drafts...').start()\n\n try {\n const drafts = await platformFetch<DraftInfo[]>(\n `/skills/@${identity.org}/${identity.name}/drafts`\n )\n\n spinner.stop()\n\n if (options.json) {\n console.log(JSON.stringify({ drafts }, null, 2))\n return\n }\n\n if (drafts.length === 0) {\n process.stdout.write(chalk.dim('No open drafts.\\n'))\n return\n }\n\n process.stdout.write(chalk.bold(`\\nDrafts for @${identity.org}/${identity.name}:\\n\\n`))\n\n for (const d of drafts) {\n process.stdout.write(\n ` ${chalk.green(d.name)} ${chalk.dim(`(${d.latestCommitId.slice(0, 7)})`)} ${chalk.dim(d.latestMessage)}\\n`\n )\n }\n\n process.stdout.write('\\n')\n } catch (error) {\n spinner.fail(\n `Failed to list drafts: ${error instanceof Error ? error.message : String(error)}`\n )\n process.exit(1)\n }\n })\n\n // --- draft switch <name> ---\n draft\n .command('switch <name>')\n .description('Switch to a draft branch (updates lockfile ref)')\n .option('--json', 'Output as JSON')\n .action(async (name: string, options: DraftListOptions) => {\n const identity = resolveSkillIdentity()\n if (!identity) {\n process.stderr.write(\n chalk.red('Could not determine skill identity. Run this from a skill directory.\\n')\n )\n process.exit(1)\n }\n\n const projectRoot = process.cwd()\n const lockfile = readLockfile(projectRoot)\n const lockEntry = lockfile.packages[identity.name]\n\n if (!lockEntry) {\n process.stderr.write(chalk.red(`Skill \"${identity.name}\" not found in lockfile.\\n`))\n process.exit(1)\n }\n\n if (lockEntry.source.type === 'git') {\n lockEntry.source.ref = `draft/${identity.name}/${name}`\n writeLockfile(projectRoot, lockfile)\n }\n\n if (options.json) {\n console.log(\n JSON.stringify(\n {\n skill: `@${identity.org}/${identity.name}`,\n draft: name,\n ref: `draft/${identity.name}/${name}`,\n },\n null,\n 2\n )\n )\n } else {\n process.stdout.write(\n `Switched to draft ${chalk.green(name)} ${chalk.dim(`(ref: draft/${identity.name}/${name})`)}\\n`\n )\n }\n })\n\n // --- draft publish ---\n draft\n .command('publish')\n .description('Merge current draft to main')\n .option('--json', 'Output as JSON')\n .action(async (options: DraftListOptions) => {\n const identity = resolveSkillIdentity()\n if (!identity) {\n process.stderr.write(\n chalk.red('Could not determine skill identity. Run this from a skill directory.\\n')\n )\n process.exit(1)\n }\n\n // Determine current draft from lockfile ref\n const projectRoot = process.cwd()\n const lockfile = readLockfile(projectRoot)\n const lockEntry = lockfile.packages[identity.name]\n\n if (!lockEntry || lockEntry.source.type !== 'git') {\n process.stderr.write(chalk.red('Skill not found in lockfile.\\n'))\n process.exit(1)\n }\n\n const currentRef = lockEntry.source.ref\n if (!currentRef.startsWith('draft/')) {\n process.stderr.write(chalk.red(`Not on a draft branch. Current ref: ${currentRef}\\n`))\n process.exit(1)\n }\n\n const spinner = ora('Merging draft to main...').start()\n\n try {\n const result = await platformFetch<DraftActionResponse>(\n `/skills/@${identity.org}/${identity.name}/drafts`,\n {\n method: 'POST',\n body: { action: 'merge', branchName: currentRef },\n }\n )\n\n // Update lockfile back to main\n lockEntry.source.ref = 'main'\n if (result.commitSha) {\n lockEntry.source.commit = result.commitSha\n }\n writeLockfile(projectRoot, lockfile)\n\n if (options.json) {\n spinner.stop()\n console.log(\n JSON.stringify(\n {\n merged: true,\n commitSha: result.commitSha,\n ref: 'main',\n },\n null,\n 2\n )\n )\n } else {\n spinner.succeed(\n `Draft merged to main ${result.commitSha ? chalk.dim(`(${result.commitSha.slice(0, 7)})`) : ''}`\n )\n }\n } catch (error) {\n spinner.fail(\n `Failed to merge draft: ${error instanceof Error ? error.message : String(error)}`\n )\n process.exit(1)\n }\n })\n\n // --- draft discard ---\n draft\n .command('discard')\n .description('Delete the current draft branch')\n .option('--json', 'Output as JSON')\n .action(async (options: DraftListOptions) => {\n const identity = resolveSkillIdentity()\n if (!identity) {\n process.stderr.write(\n chalk.red('Could not determine skill identity. Run this from a skill directory.\\n')\n )\n process.exit(1)\n }\n\n const projectRoot = process.cwd()\n const lockfile = readLockfile(projectRoot)\n const lockEntry = lockfile.packages[identity.name]\n\n if (!lockEntry || lockEntry.source.type !== 'git') {\n process.stderr.write(chalk.red('Skill not found in lockfile.\\n'))\n process.exit(1)\n }\n\n const currentRef = lockEntry.source.ref\n if (!currentRef.startsWith('draft/')) {\n process.stderr.write(chalk.red(`Not on a draft branch. Current ref: ${currentRef}\\n`))\n process.exit(1)\n }\n\n const spinner = ora('Discarding draft...').start()\n\n try {\n await platformFetch<DraftActionResponse>(\n `/skills/@${identity.org}/${identity.name}/drafts`,\n {\n method: 'POST',\n body: { action: 'delete', branchName: currentRef },\n }\n )\n\n // Reset lockfile ref to main\n lockEntry.source.ref = 'main'\n writeLockfile(projectRoot, lockfile)\n\n if (options.json) {\n spinner.stop()\n console.log(\n JSON.stringify(\n {\n discarded: true,\n previousRef: currentRef,\n ref: 'main',\n },\n null,\n 2\n )\n )\n } else {\n spinner.succeed(`Draft discarded. Switched back to ${chalk.cyan('main')}.`)\n }\n } catch (error) {\n spinner.fail(\n `Failed to discard draft: ${error instanceof Error ? error.message : String(error)}`\n )\n process.exit(1)\n }\n })\n}\n","const MAX_RETRY_ATTEMPTS = 3\nconst RETRY_BASE_DELAY_MS = 1_000\n\ntype RequestConfig = {\n url: string\n method?: string\n headers: Record<string, string>\n body?: string\n}\n\nexport type RetryOptions = {\n label: string\n timeoutMs: number\n buildRequest: () => RequestConfig\n onAuthExpired: () => never\n}\n\nexport class RequestTimeoutError extends Error {\n constructor(label: string) {\n super(`${label} request timed out. The service may be experiencing issues.`)\n this.name = 'RequestTimeoutError'\n }\n}\n\nfunction isRetryable(error: unknown, response?: Response): boolean {\n if (error instanceof RequestTimeoutError) return false\n if (error instanceof DOMException && error.name === 'AbortError') return false\n\n if (!response) return true\n\n return response.status >= 500\n}\n\nfunction delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n\nfunction isAuthExpired(status: number): boolean {\n return status === 401\n}\n\nexport async function fetchWithRetry<T>(options: RetryOptions): Promise<T> {\n let lastError: unknown\n let lastResponse: Response | undefined\n\n for (let attempt = 1; attempt <= MAX_RETRY_ATTEMPTS; attempt++) {\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), options.timeoutMs)\n\n try {\n const config = options.buildRequest()\n\n const response = await fetch(config.url, {\n method: config.method ?? 'GET',\n headers: config.headers,\n body: config.body,\n signal: controller.signal,\n })\n\n clearTimeout(timeoutId)\n\n if (response.ok) {\n return response.json() as Promise<T>\n }\n\n if (isAuthExpired(response.status)) {\n options.onAuthExpired()\n }\n\n lastResponse = response\n lastError = new Error(\n `${options.label} error (${response.status}): ${await response.text().catch(() => 'Unknown error')}`\n )\n\n if (!isRetryable(undefined, response)) {\n throw lastError\n }\n } catch (error) {\n clearTimeout(timeoutId)\n\n if (error instanceof DOMException && error.name === 'AbortError') {\n throw new RequestTimeoutError(options.label)\n }\n\n lastError = error\n lastResponse = undefined\n\n if (!isRetryable(error)) {\n throw error\n }\n }\n\n if (attempt < MAX_RETRY_ATTEMPTS) {\n const retryDelay = RETRY_BASE_DELAY_MS * 2 ** (attempt - 1)\n process.stderr.write(\n `${options.label} request failed (attempt ${attempt}/${MAX_RETRY_ATTEMPTS}), retrying in ${retryDelay / 1_000}s...\\n`\n )\n await delay(retryDelay)\n }\n }\n\n if (lastResponse && !lastResponse.ok) {\n throw lastError\n }\n\n throw lastError\n}\n","import { AgentverError } from '@agentver/shared'\nimport { getCredentials } from './auth.js'\nimport { getPlatformUrl } from './config.js'\nimport { fetchWithRetry } from '../utils/retry'\n\nconst REQUEST_TIMEOUT_MS = 30_000\nconst HEALTH_CHECK_TIMEOUT_MS = 10_000\n\nexport type PlatformRequestOptions = {\n method?: string\n body?: unknown\n timeout?: number\n}\n\nexport async function platformFetch<T>(\n path: string,\n options: PlatformRequestOptions = {}\n): Promise<T> {\n const platformUrl = getPlatformUrl()\n if (!platformUrl) {\n throw new AgentverError(\n 'UNAUTHORISED',\n 'No platform URL configured. Run `agentver login <url>` to connect.'\n )\n }\n\n const credentials = await getCredentials()\n if (!credentials?.token && !credentials?.apiKey) {\n throw new AgentverError('UNAUTHORISED', 'Not authenticated. Run `agentver login` to sign in.')\n }\n\n const url = `${platformUrl}/api/v1${path}`\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n }\n\n if (credentials.token) {\n headers.Authorization = `Bearer ${credentials.token}`\n } else if (credentials.apiKey) {\n headers['X-API-Key'] = credentials.apiKey\n }\n\n return fetchWithRetry<T>({\n label: 'Platform',\n timeoutMs: options.timeout ?? REQUEST_TIMEOUT_MS,\n buildRequest: () => ({\n url,\n method: options.method ?? 'GET',\n headers,\n body: options.body ? JSON.stringify(options.body) : undefined,\n }),\n onAuthExpired: () => {\n throw new AgentverError(\n 'UNAUTHORISED',\n 'Authentication expired. Run `agentver login` to re-authenticate.'\n )\n },\n })\n}\n\nexport async function platformFetchSilent<T>(\n path: string,\n options: PlatformRequestOptions = {}\n): Promise<T | null> {\n try {\n return await platformFetch<T>(path, options)\n } catch {\n return null\n }\n}\n\nexport async function isPlatformAvailable(): Promise<boolean> {\n const platformUrl = getPlatformUrl()\n if (!platformUrl) return false\n\n const url = `${platformUrl}/api/v1/health`\n\n try {\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), HEALTH_CHECK_TIMEOUT_MS)\n\n const response = await fetch(url, {\n method: 'HEAD',\n signal: controller.signal,\n })\n\n clearTimeout(timeoutId)\n return response.ok\n } catch {\n return false\n }\n}\n","import { readFileSync } from 'node:fs'\nimport { join } from 'node:path'\nimport type { InfoResult } from '@agentver/shared'\nimport { parseSkillFrontmatter } from '@agentver/shared'\nimport chalk from 'chalk'\nimport type { Command } from 'commander'\nimport { readFilesFromDirectory } from '../git/fetcher.js'\nimport { createSpinner, isJSONMode, outputError, outputSuccess } from '../output.js'\nimport { resolveReadPath } from '../storage/canonical.js'\nimport { computeSha256FromFiles } from '../storage/integrity.js'\nimport { readLockfile } from '../storage/lockfile.js'\nimport { readManifest } from '../storage/manifest.js'\n\nfunction formatBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`\n}\n\nexport function registerInfoCommand(program: Command): void {\n program\n .command('info <name>')\n .description('Show detailed information about an installed package')\n .option('--json', 'Output as JSON')\n .action(async (name: string, options: { json?: boolean }) => {\n const jsonMode = isJSONMode() || options.json === true\n const projectRoot = process.cwd()\n const manifest = readManifest(projectRoot)\n\n const pkg = manifest.packages[name]\n if (!pkg) {\n if (jsonMode) {\n outputError('NOT_FOUND', `Package \"${name}\" is not installed.`)\n process.exit(1)\n }\n console.error(chalk.red(`Package \"${name}\" is not installed.`))\n process.exit(1)\n }\n\n const spinner = createSpinner('Reading package information...').start()\n\n const lockfile = readLockfile(projectRoot)\n const lockfileEntry = lockfile.packages[name]\n const shortName = name.split('/').pop()!\n\n let fileCount = 0\n let totalSize = 0\n let locallyModified = false\n let skillTitle: string | undefined\n let skillDescription: string | undefined\n\n const readPath = resolveReadPath(projectRoot, shortName, pkg.agents)\n\n if (readPath) {\n try {\n const files = await readFilesFromDirectory(readPath)\n fileCount = files.length\n totalSize = files.reduce((sum, f) => sum + f.size, 0)\n\n if (lockfileEntry?.integrity && files.length > 0) {\n const localIntegrity = computeSha256FromFiles(files)\n locallyModified = localIntegrity !== lockfileEntry.integrity\n }\n\n const skillMdPath = join(readPath, 'SKILL.md')\n try {\n const skillMdContent = readFileSync(skillMdPath, 'utf-8')\n const { frontmatter } = parseSkillFrontmatter(skillMdContent)\n skillTitle = frontmatter.name\n skillDescription = frontmatter.description\n } catch {\n // No SKILL.md or invalid frontmatter — skip silently\n }\n } catch {\n // Unable to read files — continue with zero counts\n }\n }\n\n const sourceInfo =\n pkg.source.type === 'git'\n ? {\n type: 'git' as const,\n uri: pkg.source.uri,\n ref: pkg.source.ref,\n commit: pkg.source.commit,\n }\n : { type: 'well-known' as const, hostname: pkg.source.hostname }\n\n const result: InfoResult = {\n name,\n source: sourceInfo,\n agents: pkg.agents,\n installedAt: pkg.installedAt,\n modified: locallyModified,\n integrity: lockfileEntry?.integrity,\n files: {\n count: fileCount,\n totalSize,\n },\n skill:\n skillTitle && skillDescription\n ? { title: skillTitle, description: skillDescription }\n : undefined,\n }\n\n if (jsonMode) {\n spinner.stop()\n outputSuccess<InfoResult>(result)\n return\n }\n\n spinner.stop()\n\n console.log()\n console.log(chalk.bold(name))\n console.log()\n\n if (pkg.source.type === 'git') {\n console.log(` ${chalk.dim('Source:')} ${pkg.source.uri}`)\n console.log(` ${chalk.dim('Ref:')} ${chalk.cyan(pkg.source.ref)}`)\n console.log(` ${chalk.dim('Commit:')} ${chalk.dim(pkg.source.commit.slice(0, 7))}`)\n } else {\n console.log(\n ` ${chalk.dim('Source:')} ${pkg.source.hostname} ${chalk.dim('[well-known]')}`\n )\n }\n\n console.log(\n ` ${chalk.dim('Agents:')} ${pkg.agents.length > 0 ? pkg.agents.join(', ') : chalk.dim('none')}`\n )\n console.log(` ${chalk.dim('Installed:')} ${pkg.installedAt}`)\n console.log(\n ` ${chalk.dim('Modified:')} ${locallyModified ? chalk.yellow('yes') : chalk.green('no')}`\n )\n\n if (lockfileEntry?.integrity) {\n console.log(` ${chalk.dim('Integrity:')} ${lockfileEntry.integrity}`)\n }\n\n console.log(\n ` ${chalk.dim('Files:')} ${fileCount} file${fileCount !== 1 ? 's' : ''} (${formatBytes(totalSize)})`\n )\n\n if (skillTitle) {\n console.log()\n console.log(` ${chalk.dim('Skill:')} ${skillTitle}`)\n if (skillDescription) {\n console.log(` ${chalk.dim('Description:')} ${skillDescription}`)\n }\n }\n\n console.log()\n })\n}\n","import { existsSync, mkdirSync, writeFileSync } from 'node:fs'\nimport { join } from 'node:path'\nimport type { InitResult } from '@agentver/shared'\nimport chalk from 'chalk'\nimport type { Command } from 'commander'\nimport prompts from 'prompts'\nimport { isJSONMode, outputError, outputSuccess } from '../output.js'\n\n// ---------------------------------------------------------------------------\n// Token budget helpers\n// ---------------------------------------------------------------------------\n\nconst TOKEN_BUDGET = 5000\n\n/** Rough token estimate: ~4 characters per token. */\nfunction estimateTokens(content: string): number {\n return Math.ceil(content.length / 4)\n}\n\n/** Warn (informational only) if content exceeds the recommended budget. */\nfunction warnIfOverBudget(filePath: string, content: string): void {\n const tokens = estimateTokens(content)\n if (tokens > TOKEN_BUDGET) {\n console.log(\n chalk.yellow(`\\n Warning: ${filePath} is ~${tokens} tokens (recommended < ${TOKEN_BUDGET}).`)\n )\n console.log(\n chalk.yellow(' Move detailed content to docs/ or examples/ for progressive disclosure.')\n )\n }\n}\n\n// ---------------------------------------------------------------------------\n// Templates\n// ---------------------------------------------------------------------------\n\nconst SKILL_TEMPLATE = `---\nname: {{name}}\ndescription: {{description}}\nversion: 0.1.0\nauthor: {{author}}\ncompatibility:\n agents:\n - claude-code\n - cursor\n - windsurf\ntriggers:\n - \"Use when the user asks about...\"\n - \"Use when working with...\"\n---\n\n<!-- Keep this file under 5000 tokens. Use docs/ and examples/ for detailed content. -->\n\n# {{name}}\n\n{{description}}\n\n## When to use\n\n- Trigger condition 1\n- Trigger condition 2\n\n## Instructions\n\nStep-by-step instructions for the AI agent.\n\n1. First, do this\n2. Then, do that\n3. Finally, verify the result\n\n## Examples\n\n### Example 1: Basic usage\n\n\\`\\`\\`\nDescribe a typical interaction\n\\`\\`\\`\n`\n\nconst AGENT_CONFIG_TEMPLATE = `# {{name}}\n\n<!-- [section:overview] -->\n\n{{description}}\n\n## Project Overview\n\n<!-- Describe the project, its purpose, and key architecture decisions -->\n\n<!-- [/section:overview] -->\n\n<!-- [section:tech-stack] -->\n\n## Tech Stack\n\n<!-- List frameworks, languages, and key dependencies -->\n\n<!-- [/section:tech-stack] -->\n\n<!-- [section:standards] -->\n\n## Code Standards\n\n<!-- Define naming conventions, file structure, and coding patterns -->\n\n## Forbidden Patterns\n\n<!-- List anti-patterns, deprecated approaches, and things to avoid -->\n\n<!-- [/section:standards] -->\n\n<!-- [section:testing] -->\n\n## Testing Requirements\n\n<!-- Define testing strategy, coverage expectations, and testing patterns -->\n\n<!-- [/section:testing] -->\n\n<!-- [section:workflow] -->\n\n## PR Conventions\n\n<!-- Define PR title format, review process, and merge requirements -->\n\n<!-- [/section:workflow] -->\n`\n\nconst PLUGIN_TEMPLATE = `{\n \"name\": \"{{name}}\",\n \"description\": \"{{description}}\",\n \"version\": \"1.0.0\",\n \"tools\": [],\n \"hooks\": {},\n \"rules\": []\n}\n`\n\nconst SCRIPT_TEMPLATE = `{\n \"name\": \"{{name}}\",\n \"description\": \"{{description}}\",\n \"version\": \"1.0.0\",\n \"runtime\": \"node\",\n \"entryPoint\": \"src/index.ts\",\n \"args\": []\n}\n`\n\nconst PROMPT_TEMPLATE = `---\nname: {{name}}\ndescription: {{description}}\nversion: 0.1.0\nauthor: {{author}}\nvariables:\n - name: topic\n description: \"The subject to focus on\"\n required: true\n default: \"\"\n - name: tone\n description: \"The desired tone (e.g. formal, casual, technical)\"\n required: false\n default: \"neutral\"\n---\n\n# {{name}}\n\n{{description}}\n\n## Prompt\n\n<!-- Write the prompt content below. Use \\${variable_name} for variable substitution. -->\n\nYou are an expert on \\${topic}. Respond in a \\${tone} tone.\n\n## Notes\n\n<!-- Additional context or guidance for prompt usage. -->\n`\n\nconst SCRIPT_ENTRY_TEMPLATE = `#!/usr/bin/env node\n// {{name}} — entry point\n`\n\nconst AGENTVERIGNORE_CONTENT = `node_modules/\n.git/\n.DS_Store\n*.log\n.env*\n`\n\nconst EXAMPLES_README = `# Examples\n\nAdd example files here. These are loaded on demand by the agent when it needs\nmore context about how to use the skill.\n\nEach file should demonstrate a single use case or scenario.\n`\n\nconst DOCS_README = `# Documentation\n\nAdd detailed documentation here. Reference these files from SKILL.md when the\nagent needs deeper context.\n\nKeep SKILL.md concise (< 5000 tokens) and offload detailed explanations,\nreference material, and edge-case handling into this directory.\n`\n\nconst EXAMPLE_SKILL_TEMPLATE = `---\nname: example-skill\ndescription: A starter skill demonstrating best practices\nversion: 0.1.0\nauthor: Your Name\ncompatibility:\n agents:\n - claude-code\n - cursor\n - windsurf\ntriggers:\n - \"Use when the user asks about example patterns\"\n - \"Use when scaffolding a new skill\"\n---\n\n<!-- Keep this file under 5000 tokens. Use docs/ and examples/ for detailed content. -->\n\n# Example Skill\n\nA starter skill that demonstrates the recommended structure and conventions.\n\n## When to use\n\n- When creating a new skill for the first time\n- When reviewing best practices for skill authoring\n\n## Instructions\n\n1. Read the frontmatter to understand metadata and triggers\n2. Follow the progressive disclosure pattern: keep this file concise\n3. Place detailed docs in \\`docs/\\` and usage examples in \\`examples/\\`\n\n## Examples\n\n### Example 1: Basic usage\n\n\\`\\`\\`\nUser: \"Help me scaffold a new skill\"\nAgent: Reads this skill, follows the structure, creates a new SKILL.md\n\\`\\`\\`\n`\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction buildReadme(name: string, description: string): string {\n return `# ${name}\n\n${description}\n\n## Structure\n\n\\`\\`\\`\nskills/ — Agent skills (SKILL.md files)\nconfigs/ — Agent configurations (CLAUDE.md, .cursorrules, etc.)\nprompts/ — Reusable prompt templates (PROMPT.md files)\n\\`\\`\\`\n\n## Install\n\n\\`\\`\\`bash\nagentver install github.com/YOUR_ORG/YOUR_REPO@main\n\\`\\`\\`\n`\n}\n\nfunction createGitkeep(dirPath: string): void {\n mkdirSync(dirPath, { recursive: true })\n writeFileSync(join(dirPath, '.gitkeep'), '', 'utf-8')\n}\n\n// ---------------------------------------------------------------------------\n// Command registration\n// ---------------------------------------------------------------------------\n\nexport function registerInitCommand(program: Command): void {\n program\n .command('init')\n .description('Scaffold a new package')\n .option('--type <type>', 'Package type: skill, agent, plugin, script, prompt', 'skill')\n .option('--repo', 'Scaffold in a Git-repo-friendly structure')\n .option('--name <name>', 'Package name (required in JSON mode)')\n .option('--description <desc>', 'Package description')\n .action(\n async (options: { type: string; repo?: boolean; name?: string; description?: string }) => {\n let packageName: string\n let description: string\n let author = ''\n\n if (isJSONMode()) {\n if (!options.name) {\n outputError('VALIDATION_ERROR', 'Name is required in JSON mode (use --name flag)')\n process.exit(1)\n }\n packageName = options.name\n description = options.description ?? ''\n } else if (options.name) {\n packageName = options.name\n description = options.description ?? ''\n\n if (options.type === 'skill' || options.type === 'prompt') {\n const authorResponse = await prompts({\n type: 'text',\n name: 'author',\n message: 'Author:',\n })\n author = (authorResponse.author as string) ?? ''\n }\n } else {\n const promptQuestions: prompts.PromptObject[] = [\n {\n type: 'text',\n name: 'name',\n message: 'Package name:',\n validate: (value: string) => (value.length > 0 ? true : 'Name is required'),\n },\n {\n type: 'text',\n name: 'description',\n message: 'Description:',\n },\n ]\n\n if (options.type === 'skill' || options.type === 'prompt') {\n promptQuestions.push({\n type: 'text',\n name: 'author',\n message: 'Author:',\n })\n }\n\n const response = await prompts(promptQuestions)\n\n if (!response.name) return\n\n packageName = response.name as string\n description = (response.description as string) ?? ''\n author = (response.author as string) ?? ''\n }\n\n const dir = join(process.cwd(), packageName)\n\n if (existsSync(dir)) {\n if (isJSONMode()) {\n outputError('ALREADY_EXISTS', `Directory \"${packageName}\" already exists.`)\n process.exit(1)\n }\n console.error(chalk.red(`Directory \"${packageName}\" already exists.`))\n process.exit(1)\n }\n\n mkdirSync(dir, { recursive: true })\n\n const applyReplacements = (tmpl: string) =>\n tmpl\n .replace(/\\{\\{name\\}\\}/g, packageName)\n .replace(/\\{\\{description\\}\\}/g, description)\n .replace(/\\{\\{author\\}\\}/g, author)\n\n let fileName: string\n const createdFiles: string[] = []\n\n switch (options.type) {\n case 'skill': {\n fileName = 'SKILL.md'\n const content = applyReplacements(SKILL_TEMPLATE)\n writeFileSync(join(dir, fileName), content, 'utf-8')\n createdFiles.push(fileName)\n if (!options.repo) {\n mkdirSync(join(dir, 'examples'), { recursive: true })\n writeFileSync(join(dir, 'examples', 'README.md'), EXAMPLES_README, 'utf-8')\n createdFiles.push('examples/README.md')\n mkdirSync(join(dir, 'docs'), { recursive: true })\n writeFileSync(join(dir, 'docs', 'README.md'), DOCS_README, 'utf-8')\n createdFiles.push('docs/README.md')\n }\n if (!isJSONMode()) {\n warnIfOverBudget(fileName, content)\n }\n break\n }\n\n case 'agent': {\n fileName = 'CLAUDE.md'\n const content = applyReplacements(AGENT_CONFIG_TEMPLATE)\n writeFileSync(join(dir, fileName), content, 'utf-8')\n createdFiles.push(fileName)\n if (!options.repo) {\n mkdirSync(join(dir, 'rules'), { recursive: true })\n }\n break\n }\n\n case 'plugin': {\n fileName = 'plugin.json'\n writeFileSync(join(dir, fileName), applyReplacements(PLUGIN_TEMPLATE), 'utf-8')\n createdFiles.push(fileName)\n if (!options.repo) {\n mkdirSync(join(dir, 'scripts'), { recursive: true })\n }\n break\n }\n\n case 'script': {\n fileName = 'script.json'\n writeFileSync(join(dir, fileName), applyReplacements(SCRIPT_TEMPLATE), 'utf-8')\n createdFiles.push(fileName)\n mkdirSync(join(dir, 'src'), { recursive: true })\n writeFileSync(\n join(dir, 'src', 'index.ts'),\n applyReplacements(SCRIPT_ENTRY_TEMPLATE),\n 'utf-8'\n )\n createdFiles.push('src/index.ts')\n break\n }\n\n case 'prompt': {\n fileName = 'PROMPT.md'\n const content = applyReplacements(PROMPT_TEMPLATE)\n writeFileSync(join(dir, fileName), content, 'utf-8')\n createdFiles.push(fileName)\n if (!options.repo) {\n mkdirSync(join(dir, 'variants'), { recursive: true })\n }\n if (!isJSONMode()) {\n warnIfOverBudget(fileName, content)\n }\n break\n }\n\n default: {\n if (isJSONMode()) {\n outputError('VALIDATION_ERROR', `Unknown package type: \"${options.type}\"`)\n process.exit(1)\n }\n console.error(chalk.red(`Unknown package type: \"${options.type}\"`))\n process.exit(1)\n }\n }\n\n if (options.repo) {\n const skillsDir = join(dir, 'skills', 'example-skill')\n mkdirSync(skillsDir, { recursive: true })\n writeFileSync(join(skillsDir, 'SKILL.md'), EXAMPLE_SKILL_TEMPLATE, 'utf-8')\n createdFiles.push('skills/example-skill/SKILL.md')\n mkdirSync(join(skillsDir, 'examples'), { recursive: true })\n writeFileSync(join(skillsDir, 'examples', 'README.md'), EXAMPLES_README, 'utf-8')\n createdFiles.push('skills/example-skill/examples/README.md')\n mkdirSync(join(skillsDir, 'docs'), { recursive: true })\n writeFileSync(join(skillsDir, 'docs', 'README.md'), DOCS_README, 'utf-8')\n createdFiles.push('skills/example-skill/docs/README.md')\n\n createGitkeep(join(dir, 'configs'))\n createdFiles.push('configs/.gitkeep')\n createGitkeep(join(dir, 'prompts'))\n createdFiles.push('prompts/.gitkeep')\n\n writeFileSync(join(dir, 'README.md'), buildReadme(packageName, description), 'utf-8')\n createdFiles.push('README.md')\n writeFileSync(join(dir, '.agentverignore'), AGENTVERIGNORE_CONTENT, 'utf-8')\n createdFiles.push('.agentverignore')\n }\n\n if (isJSONMode()) {\n outputSuccess<InitResult>({\n name: packageName,\n type: options.type,\n path: dir,\n files: createdFiles,\n })\n return\n }\n\n console.log(chalk.green(`\\nCreated ${fileName} in ./${packageName}/`))\n\n if (options.repo) {\n console.log(chalk.dim('Repo structure created with skills/, configs/, prompts/'))\n console.log(\n chalk.dim(`Install with: agentver install github.com/YOUR_ORG/YOUR_REPO@main`)\n )\n } else {\n console.log(chalk.dim(`Edit the file, then run: agentver publish ./${packageName}`))\n }\n }\n )\n}\n","import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs'\nimport { homedir } from 'node:os'\nimport { dirname, join, relative, resolve } from 'node:path'\nimport {\n composeConfigs,\n detectInstalledAgents,\n getConfigFilePath,\n isComposedConfig,\n parseComposedSections,\n} from '@agentver/agent-definitions'\nimport type { InstallResult as InstallResultJSON } from '@agentver/shared'\nimport { AgentverError, type GitSource, type WellKnownSource } from '@agentver/shared'\nimport chalk from 'chalk'\nimport type { Command } from 'commander'\nimport type ora from 'ora'\nimport prompts from 'prompts'\nimport { fetchFiles, parseGitSource, resolveRef } from '../git/index.js'\nimport type { FetchedFile } from '../git/types.js'\nimport {\n createSpinner,\n isJSONMode,\n outputError,\n outputSuccess,\n type SpinnerLike,\n} from '../output.js'\nimport { getCredentials } from '../registry/auth.js'\nimport { readConfig } from '../registry/config.js'\nimport { reportInstallation } from '../registry/reporter.js'\nimport { renderScanResult, scanFiles } from '../security/index.js'\nimport type { ScanResult as SecurityScanResult } from '../security/types.js'\nimport { createAgentSymlinks, getCanonicalSkillPath } from '../storage/canonical'\nimport { computeSha256FromFiles } from '../storage/integrity'\nimport { readLockfile, writeLockfile } from '../storage/lockfile'\nimport { readManifest, writeManifest } from '../storage/manifest'\nimport {\n fetchWellKnownIndex,\n fetchWellKnownSkill,\n looksLikeWellKnownUrl,\n parseWellKnownSource,\n} from '../wellknown/index.js'\n\nexport type InstallOptions = {\n agent?: string\n global?: boolean\n dryRun?: boolean\n path?: string\n detect?: boolean\n skipAudit?: boolean\n}\n\nexport type InstallResult = {\n name: string\n ref: string\n commitSha: string\n agents: string[]\n}\n\ntype ResolveResponse = {\n gitUri: string\n gitPath: string\n gitRef: string\n}\n\nfunction buildAuditData(scanResult?: SecurityScanResult): InstallResultJSON['audit'] {\n if (!scanResult) {\n return { passed: true, findings: 0, blockers: 0 }\n }\n const blockers = scanResult.findings.filter(\n (f) => f.severity === 'CRITICAL' || f.severity === 'HIGH'\n ).length\n return {\n passed: scanResult.verdict !== 'BLOCK',\n findings: scanResult.findings.length,\n blockers,\n }\n}\n\nfunction looksLikeGitUrl(source: string): boolean {\n const cleaned = source\n .replace(/^https?:\\/\\//, '')\n .split('@')[0]!\n .split('#')[0]!\n const segments = cleaned.split('/').filter(Boolean)\n return segments.length >= 3 && segments[0]!.includes('.')\n}\n\nasync function fetchFromPlatform<T>(platformUrl: string, path: string): Promise<T> {\n const credentials = await getCredentials()\n\n const headers: Record<string, string> = { 'Content-Type': 'application/json' }\n if (credentials?.token) {\n headers.Authorization = `Bearer ${credentials.token}`\n } else if (credentials?.apiKey) {\n headers['X-API-Key'] = credentials.apiKey\n }\n\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), 10_000)\n\n try {\n const response = await fetch(`${platformUrl}/api/v1${path}`, {\n headers,\n signal: controller.signal,\n })\n clearTimeout(timeoutId)\n\n if (!response.ok) {\n throw new AgentverError('NOT_FOUND', `Platform could not resolve \"${path}\"`)\n }\n\n return response.json() as Promise<T>\n } catch (error) {\n clearTimeout(timeoutId)\n if (error instanceof AgentverError) throw error\n throw new AgentverError('INTERNAL_ERROR', `Platform request failed: ${String(error)}`)\n }\n}\n\nasync function resolveSource(source: string): Promise<string> {\n if (looksLikeGitUrl(source)) {\n return source\n }\n\n const [namePart, ref] = source.split('@')\n\n const config = readConfig()\n if (!config.platformUrl) {\n throw new AgentverError(\n 'VALIDATION_ERROR',\n `\"${source}\" doesn't look like a Git URL. Connect to a platform to resolve short names:\\n agentver login <platform-url>`\n )\n }\n\n const resolved = await fetchFromPlatform<ResolveResponse>(\n config.platformUrl,\n `/resolve?name=${encodeURIComponent(namePart!)}`\n )\n\n let fullSource = `${resolved.gitUri}/${resolved.gitPath}`\n if (ref) {\n fullSource += `@${ref}`\n } else if (resolved.gitRef) {\n fullSource += `@${resolved.gitRef}`\n }\n\n return fullSource\n}\n\nasync function installFromWellKnown(\n source: string,\n options: InstallOptions\n): Promise<InstallResult> {\n const jsonMode = isJSONMode()\n const spinner = createSpinner(`Resolving well-known source: ${source}`).start()\n\n try {\n const { baseUrl, skillName } = parseWellKnownSource(source)\n const hostname = new URL(baseUrl).hostname\n\n spinner.text = `Fetching well-known index from ${hostname}...`\n const index = await fetchWellKnownIndex(baseUrl)\n\n let selectedEntry = index.skills[0]!\n\n if (skillName) {\n const found = index.skills.find((s) => s.name === skillName)\n if (!found) {\n const available = index.skills.map((s) => s.name).join(', ')\n if (jsonMode) {\n outputError(\n 'NOT_FOUND',\n `Skill \"${skillName}\" not found at ${hostname}. Available: ${available}`\n )\n process.exit(1)\n }\n spinner.fail(`Skill \"${skillName}\" not found at ${hostname}. Available: ${available}`)\n process.exit(1)\n }\n selectedEntry = found\n } else if (index.skills.length > 1) {\n if (jsonMode) {\n outputError(\n 'AMBIGUOUS_SKILL',\n `Multiple skills available at ${hostname}: ${index.skills.map((s) => s.name).join(', ')}. Specify a skill name.`\n )\n process.exit(1)\n }\n spinner.stop()\n process.stdout.write(chalk.bold(`\\nMultiple skills available at ${hostname}:\\n\\n`))\n for (const skill of index.skills) {\n process.stdout.write(\n ` ${chalk.green(skill.name)} ${chalk.dim(`— ${skill.description}`)}\\n`\n )\n }\n process.stdout.write(\n `\\n${chalk.dim('Specify a skill:')} ${chalk.white(`agentver install ${hostname}/<skill-name>`)}\\n`\n )\n process.exit(1)\n }\n\n spinner.text = `Fetching files for ${selectedEntry.name} from ${hostname}...`\n const fetchResult = await fetchWellKnownSkill(baseUrl, selectedEntry)\n\n if (fetchResult.files.length === 0) {\n if (jsonMode) {\n outputError(\n 'NO_FILES',\n `No files fetched for skill \"${selectedEntry.name}\" from ${hostname}`\n )\n process.exit(1)\n }\n spinner.fail(`No files fetched for skill \"${selectedEntry.name}\" from ${hostname}`)\n process.exit(1)\n }\n\n const integrity = computeSha256FromFiles(fetchResult.files)\n\n const projectRoot = process.cwd()\n let agents: string[] = []\n const scope = options.global ? 'global' : 'project'\n\n if (options.path) {\n await installToCustomPath(selectedEntry.name, fetchResult.files, options, spinner)\n agents = options.agent ? [options.agent] : []\n } else {\n if (options.detect === false && !options.agent) {\n if (jsonMode) {\n outputError(\n 'VALIDATION_ERROR',\n 'Use --agent to specify a target agent when --no-detect is enabled'\n )\n process.exit(1)\n }\n spinner.fail('Use --agent to specify a target agent when --no-detect is enabled')\n process.exit(1)\n }\n\n agents = options.agent\n ? [options.agent]\n : options.detect === false\n ? []\n : detectInstalledAgents(projectRoot).map((a) => a.id)\n\n if (agents.length === 0) {\n if (jsonMode) {\n outputSuccess<InstallResultJSON>(\n {\n name: selectedEntry.name,\n source: { type: 'well-known', baseUrl },\n agents: [],\n path: '',\n scope,\n audit: buildAuditData(),\n },\n ['No agents detected. Use --agent to specify one.']\n )\n } else {\n spinner.warn('No agents detected. Use --agent to specify one.')\n }\n return { name: selectedEntry.name, ref: 'well-known', commitSha: '', agents: [] }\n }\n\n const packageType = detectPackageType(fetchResult.files)\n\n if (packageType === 'AGENT_CONFIG') {\n await installAgentConfig(selectedEntry.name, fetchResult.files, agents, options, spinner)\n } else {\n await installStandardPackage(\n selectedEntry.name,\n fetchResult.files,\n agents,\n options,\n spinner\n )\n }\n }\n\n if (options.dryRun) {\n if (jsonMode) {\n const installPath = options.path\n ? resolve(projectRoot, options.path)\n : getCanonicalSkillPath(projectRoot, selectedEntry.name, scope)\n outputSuccess<InstallResultJSON>({\n name: selectedEntry.name,\n source: { type: 'well-known', baseUrl },\n agents,\n path: installPath,\n scope,\n audit: buildAuditData(),\n })\n }\n return { name: selectedEntry.name, ref: 'well-known', commitSha: '', agents }\n }\n\n const wellKnownSourceRecord: WellKnownSource = {\n type: 'well-known',\n baseUrl,\n hostname,\n skillName: selectedEntry.name,\n }\n\n const manifest = readManifest(projectRoot)\n manifest.packages[selectedEntry.name] = {\n source: wellKnownSourceRecord,\n agents,\n installedAt: new Date().toISOString(),\n modified: false,\n }\n writeManifest(projectRoot, manifest)\n\n const lockfile = readLockfile(projectRoot)\n lockfile.packages[selectedEntry.name] = {\n source: wellKnownSourceRecord,\n integrity,\n agents,\n }\n writeLockfile(projectRoot, lockfile)\n\n const target = options.path ?? agents.join(', ')\n\n if (jsonMode) {\n const installPath = options.path\n ? resolve(projectRoot, options.path)\n : getCanonicalSkillPath(projectRoot, selectedEntry.name, scope)\n outputSuccess<InstallResultJSON>({\n name: selectedEntry.name,\n source: { type: 'well-known', baseUrl },\n agents,\n path: installPath,\n scope,\n audit: buildAuditData(),\n })\n } else {\n spinner.succeed(\n `Installed ${chalk.green(selectedEntry.name)} from ${chalk.dim(hostname)} ${chalk.dim('(well-known)')} to ${target}`\n )\n }\n\n return { name: selectedEntry.name, ref: 'well-known', commitSha: '', agents }\n } catch (error) {\n if (jsonMode) {\n outputError('INSTALL_FAILED', error instanceof Error ? error.message : String(error))\n process.exit(1)\n }\n spinner.fail(`Failed to install: ${error instanceof Error ? error.message : String(error)}`)\n process.exit(1)\n }\n}\n\nexport async function installPackage(\n source: string,\n options: InstallOptions\n): Promise<InstallResult> {\n if (looksLikeWellKnownUrl(source)) {\n return installFromWellKnown(source, options)\n }\n\n const jsonMode = isJSONMode()\n const spinner = createSpinner(`Parsing source: ${source}`).start()\n\n try {\n const resolvedSource = await resolveSource(source)\n const gitSource = parseGitSource(resolvedSource)\n const shortName = deriveSkillName(gitSource)\n\n spinner.text = `Resolving ${gitSource.owner}/${gitSource.repo}@${gitSource.ref}`\n const resolved = await resolveRef(gitSource)\n\n spinner.text = `Fetching files from ${gitSource.host}/${gitSource.owner}/${gitSource.repo}`\n const result = await fetchFiles(resolved)\n\n if (result.files.length === 0) {\n if (jsonMode) {\n outputError('NO_FILES', `No files found at ${formatSource(gitSource)}`)\n process.exit(1)\n }\n spinner.fail(`No files found at ${formatSource(gitSource)}`)\n process.exit(1)\n }\n\n let securityScanResult: SecurityScanResult | undefined\n\n if (!options.skipAudit) {\n spinner.text = 'Running security scan...'\n const scanResult = await scanFiles(result.files, gitSource, {\n skipAudit: options.skipAudit,\n })\n securityScanResult = scanResult\n\n if (scanResult.verdict === 'BLOCK') {\n if (jsonMode) {\n outputError(\n 'SECURITY_BLOCK',\n `Security scan blocked installation: ${scanResult.findings.length} finding(s)`\n )\n process.exit(1)\n }\n renderScanResult(scanResult, spinner as ReturnType<typeof ora>)\n process.exit(1)\n }\n\n if (scanResult.verdict === 'WARN') {\n if (jsonMode) {\n // In JSON mode, proceed with warnings (no interactive prompt)\n } else {\n renderScanResult(scanResult, spinner as ReturnType<typeof ora>)\n const { proceed } = await prompts({\n type: 'confirm',\n name: 'proceed',\n message: 'Continue with installation despite warnings?',\n initial: false,\n })\n\n if (!proceed) {\n console.log(chalk.dim('Installation cancelled.'))\n process.exit(0)\n }\n\n spinner.start('Continuing installation...')\n }\n } else {\n if (!jsonMode) {\n spinner.succeed(chalk.green('Security scan passed'))\n spinner.start('Installing...')\n }\n }\n }\n\n const integrity = computeSha256FromFiles(result.files)\n\n const projectRoot = process.cwd()\n const scope = options.global ? 'global' : 'project'\n const gitUri = `${gitSource.host}/${gitSource.owner}/${gitSource.repo}`\n let agents: string[] = []\n\n if (options.path) {\n await installToCustomPath(shortName, result.files, options, spinner)\n agents = options.agent ? [options.agent] : []\n } else {\n if (options.detect === false && !options.agent) {\n if (jsonMode) {\n outputError(\n 'VALIDATION_ERROR',\n 'Use --agent to specify a target agent when --no-detect is enabled'\n )\n process.exit(1)\n }\n spinner.fail('Use --agent to specify a target agent when --no-detect is enabled')\n process.exit(1)\n }\n\n agents = options.agent\n ? [options.agent]\n : options.detect === false\n ? []\n : detectInstalledAgents(projectRoot).map((a) => a.id)\n\n if (agents.length === 0) {\n if (jsonMode) {\n outputSuccess<InstallResultJSON>(\n {\n name: shortName,\n source: { type: 'git', uri: gitUri },\n agents: [],\n path: '',\n scope,\n audit: buildAuditData(securityScanResult),\n },\n ['No agents detected. Use --agent to specify one.']\n )\n } else {\n spinner.warn('No agents detected. Use --agent to specify one.')\n }\n return { name: shortName, ref: gitSource.ref, commitSha: resolved.commitSha, agents: [] }\n }\n\n const packageType = detectPackageType(result.files)\n\n if (packageType === 'AGENT_CONFIG') {\n await installAgentConfig(shortName, result.files, agents, options, spinner)\n } else {\n await installStandardPackage(shortName, result.files, agents, options, spinner)\n }\n }\n\n if (options.dryRun) {\n if (jsonMode) {\n const installPath = options.path\n ? resolve(projectRoot, options.path)\n : getCanonicalSkillPath(projectRoot, shortName, scope)\n outputSuccess<InstallResultJSON>({\n name: shortName,\n source: { type: 'git', uri: gitUri },\n agents,\n path: installPath,\n scope,\n audit: buildAuditData(securityScanResult),\n })\n }\n return { name: shortName, ref: gitSource.ref, commitSha: resolved.commitSha, agents }\n }\n\n const gitSourceRecord: GitSource = {\n type: 'git',\n uri: gitUri,\n path: gitSource.path,\n ref: gitSource.ref,\n commit: resolved.commitSha,\n }\n\n const manifest = readManifest(projectRoot)\n manifest.packages[shortName] = {\n source: gitSourceRecord,\n agents,\n installedAt: new Date().toISOString(),\n modified: false,\n }\n writeManifest(projectRoot, manifest)\n\n const lockfile = readLockfile(projectRoot)\n lockfile.packages[shortName] = {\n source: gitSourceRecord,\n integrity,\n agents,\n }\n writeLockfile(projectRoot, lockfile)\n\n reportInstallation(shortName, gitSourceRecord, agents, resolved.commitSha)\n\n const target = options.path ?? agents.join(', ')\n const installPath = options.path\n ? resolve(projectRoot, options.path)\n : getCanonicalSkillPath(projectRoot, shortName, scope)\n\n const warnings: string[] = []\n if (securityScanResult?.verdict === 'WARN') {\n warnings.push(`Security scan passed with ${securityScanResult.findings.length} warning(s)`)\n }\n\n if (jsonMode) {\n outputSuccess<InstallResultJSON>(\n {\n name: shortName,\n source: { type: 'git', uri: gitUri },\n agents,\n path: installPath,\n scope,\n audit: buildAuditData(securityScanResult),\n },\n warnings.length > 0 ? warnings : undefined\n )\n } else {\n spinner.succeed(\n `Installed ${chalk.green(shortName)} from ${chalk.dim(formatSource(gitSource))} ${chalk.cyan(`@${gitSource.ref}`)} ${chalk.dim(`(${resolved.commitSha.slice(0, 7)})`)} to ${target}`\n )\n }\n\n return { name: shortName, ref: gitSource.ref, commitSha: resolved.commitSha, agents }\n } catch (error) {\n if (jsonMode) {\n outputError('INSTALL_FAILED', error instanceof Error ? error.message : String(error))\n process.exit(1)\n }\n spinner.fail(`Failed to install: ${error instanceof Error ? error.message : String(error)}`)\n process.exit(1)\n }\n}\n\nfunction deriveSkillName(source: { path: string; repo: string }): string {\n if (source.path) {\n const parts = source.path.split('/').filter(Boolean)\n return parts[parts.length - 1] ?? source.repo\n }\n return source.repo\n}\n\nfunction formatSource(source: { host: string; owner: string; repo: string; path: string }): string {\n const base = `${source.host}/${source.owner}/${source.repo}`\n return source.path ? `${base}/${source.path}` : base\n}\n\nfunction detectPackageType(files: FetchedFile[]): string {\n const filenames = new Set(files.map((f) => f.path))\n\n if (filenames.has('SKILL.md')) return 'SKILL'\n if (filenames.has('plugin.json')) return 'PLUGIN'\n if (filenames.has('script.json')) return 'SCRIPT'\n if (filenames.has('PROMPT.md')) return 'PROMPT'\n\n const configFiles = [\n 'CLAUDE.md',\n 'AGENTS.md',\n '.cursorrules',\n '.windsurfrules',\n '.github/copilot-instructions.md',\n '.junie/guidelines.md',\n ]\n for (const cf of configFiles) {\n if (filenames.has(cf)) return 'AGENT_CONFIG'\n }\n\n return 'SKILL'\n}\n\nasync function installAgentConfig(\n name: string,\n files: FetchedFile[],\n agents: string[],\n options: InstallOptions,\n spinner: ReturnType<typeof ora> | SpinnerLike\n): Promise<void> {\n const projectRoot = process.cwd()\n\n if (options.dryRun) {\n spinner.info(\n `${chalk.yellow('[dry-run]')} Would install agent config ${chalk.green(name)} to ${agents.join(', ')}`\n )\n return\n }\n\n spinner.text = `Installing agent config to ${agents.length} agent(s)...`\n\n const contentFile = files.find(\n (f) =>\n f.path === 'CLAUDE.md' ||\n f.path === 'AGENTS.md' ||\n f.path === '.cursorrules' ||\n f.path === '.windsurfrules' ||\n f.path.endsWith('.md')\n )\n\n if (!contentFile) {\n spinner.fail('No config content file found in package')\n process.exit(1)\n }\n\n const configContent = contentFile.content\n\n for (const agentId of agents) {\n const configPath = getConfigFilePath(agentId as Parameters<typeof getConfigFilePath>[0], name)\n if (!configPath) continue\n\n const fullConfigPath = options.global\n ? configPath.replace('~', homedir())\n : join(projectRoot, configPath)\n\n const configDir = join(fullConfigPath, '..')\n if (!existsSync(configDir)) {\n mkdirSync(configDir, { recursive: true })\n }\n\n let finalContent = configContent\n if (existsSync(fullConfigPath)) {\n const existingContent = readFileSync(fullConfigPath, 'utf-8')\n\n if (isComposedConfig(existingContent)) {\n const existingSections = parseComposedSections(existingContent)\n const alreadyPresent = existingSections.some((s) => s.packageName === name)\n\n if (!alreadyPresent) {\n const allConfigs = [\n ...existingSections.map((s, idx) => ({\n packageName: s.packageName,\n content: s.content,\n order: idx,\n })),\n {\n packageName: name,\n content: contentFile.content,\n order: existingSections.length,\n },\n ]\n const composed = composeConfigs(allConfigs)\n finalContent = composed.content\n }\n }\n }\n\n writeFileSync(fullConfigPath, finalContent, 'utf-8')\n }\n}\n\nasync function installToCustomPath(\n name: string,\n files: FetchedFile[],\n options: InstallOptions,\n spinner: ReturnType<typeof ora> | SpinnerLike\n): Promise<void> {\n const targetPath = resolve(process.cwd(), options.path!)\n\n if (options.dryRun) {\n spinner.info(\n `${chalk.yellow('[dry-run]')} Would install ${chalk.green(name)} to ${chalk.dim(targetPath)}`\n )\n console.log(chalk.dim(` Files: ${files.map((f) => f.path).join(', ')}`))\n return\n }\n\n spinner.text = `Installing to ${targetPath}...`\n\n if (!existsSync(targetPath)) {\n mkdirSync(targetPath, { recursive: true })\n }\n\n for (const file of files) {\n const resolvedFilePath = resolve(targetPath, file.path)\n const relativePath = relative(targetPath, resolvedFilePath)\n if (relativePath.startsWith('..') || resolve(resolvedFilePath) !== resolvedFilePath) {\n continue\n }\n\n const dir = join(resolvedFilePath, '..')\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true })\n }\n writeFileSync(resolvedFilePath, file.content, 'utf-8')\n }\n}\n\nasync function installStandardPackage(\n name: string,\n files: FetchedFile[],\n agents: string[],\n options: InstallOptions,\n spinner: ReturnType<typeof ora> | SpinnerLike\n): Promise<void> {\n const projectRoot = process.cwd()\n const scope = options.global ? 'global' : 'project'\n\n if (options.dryRun) {\n const canonicalPath = getCanonicalSkillPath(projectRoot, name, scope)\n spinner.info(\n `${chalk.yellow('[dry-run]')} Would install ${chalk.green(name)} to ${chalk.dim(canonicalPath)}`\n )\n console.log(chalk.dim(` Files: ${files.map((f) => f.path).join(', ')}`))\n console.log(chalk.dim(` Symlinks: ${agents.join(', ')}`))\n return\n }\n\n spinner.text = `Installing to canonical path and symlinking to ${agents.length} agent(s)...`\n\n // Step 1: Write files to canonical directory\n const canonicalPath = getCanonicalSkillPath(projectRoot, name, scope)\n\n if (!existsSync(canonicalPath)) {\n mkdirSync(canonicalPath, { recursive: true })\n }\n\n for (const file of files) {\n const resolvedFilePath = resolve(canonicalPath, file.path)\n const relativePath = relative(canonicalPath, resolvedFilePath)\n if (relativePath.startsWith('..') || resolve(resolvedFilePath) !== resolvedFilePath) {\n continue\n }\n\n const dir = dirname(resolvedFilePath)\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true })\n }\n writeFileSync(resolvedFilePath, file.content, 'utf-8')\n }\n\n // Step 2: Create symlinks from each agent's skill path to the canonical directory\n createAgentSymlinks(projectRoot, name, agents, scope)\n}\n\nexport function registerInstallCommand(program: Command): void {\n program\n .command('install <source>')\n .description('Install a skill from a Git repository or well-known domain')\n .option('--agent <agent>', 'Target specific agent')\n .option('--global', 'Install globally')\n .option('--dry-run', 'Show what would be installed without making changes')\n .option('--path <path>', 'Override placement path (relative to cwd or absolute)')\n .option('--no-detect', 'Skip agent auto-detection (requires --agent)')\n .option('--skip-audit', 'Skip the security scan')\n .action(async (source: string, options: InstallOptions) => {\n await installPackage(source, options)\n })\n}\n","import { createHash } from 'node:crypto'\nimport { hostname } from 'node:os'\nimport type { GitSource } from '@agentver/shared'\nimport { getCredentials } from './auth.js'\nimport { getPlatformUrl } from './config.js'\n\nconst REPORT_TIMEOUT_MS = 5_000\n\nfunction getMachineId(): string {\n return createHash('sha256').update(hostname()).digest('hex')\n}\n\nasync function getAuthHeaders(): Promise<Record<string, string> | null> {\n const creds = await getCredentials()\n if (!creds) return null\n\n if (creds.token) {\n return { Authorization: `Bearer ${creds.token}` }\n }\n\n if (creds.apiKey) {\n return { 'X-API-Key': creds.apiKey }\n }\n\n return null\n}\n\nexport function reportInstallation(\n packageName: string,\n source: GitSource,\n agents: string[],\n commitSha: string\n): void {\n const platformUrl = getPlatformUrl()\n if (!platformUrl) return\n\n void (async () => {\n try {\n const authHeaders = await getAuthHeaders()\n if (!authHeaders) return\n\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), REPORT_TIMEOUT_MS)\n\n await fetch(`${platformUrl}/api/v1/installations`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...authHeaders,\n },\n body: JSON.stringify({\n packageSlug: packageName,\n source: {\n uri: source.uri,\n path: source.path,\n ref: source.ref,\n commit: commitSha,\n },\n agents,\n machineId: getMachineId(),\n modified: false,\n }),\n signal: controller.signal,\n })\n\n clearTimeout(timeoutId)\n } catch {\n // Silent — fire-and-forget\n }\n })()\n}\n\nexport function reportRemoval(packageName: string): void {\n const platformUrl = getPlatformUrl()\n if (!platformUrl) return\n\n void (async () => {\n try {\n const authHeaders = await getAuthHeaders()\n if (!authHeaders) return\n\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), REPORT_TIMEOUT_MS)\n\n await fetch(`${platformUrl}/api/v1/installations/${encodeURIComponent(packageName)}`, {\n method: 'DELETE',\n headers: authHeaders,\n signal: controller.signal,\n })\n\n clearTimeout(timeoutId)\n } catch {\n // Silent — fire-and-forget\n }\n })()\n}\n","import { AgentverError } from '@agentver/shared'\nimport { z } from 'zod'\nimport type { WellKnownFetchResult, WellKnownIndex, WellKnownIndexEntry } from './types.js'\n\nconst EXCLUDED_HOSTS = new Set(['github.com', 'gitlab.com', 'bitbucket.org'])\n\nconst INDEX_TIMEOUT_MS = 10_000\nconst FILE_TIMEOUT_MS = 5_000\n\nconst wellKnownIndexSchema = z.object({\n skills: z\n .array(\n z.object({\n name: z\n .string()\n .min(1)\n .max(64)\n .regex(/^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/),\n description: z.string().min(1).max(1024),\n files: z.array(z.string().min(1)).min(1),\n })\n )\n .min(1),\n})\n\n/**\n * Determines whether the given source string looks like a well-known URL\n * (i.e. a bare domain or domain/skill-name) rather than a git URL or short name.\n */\nexport function looksLikeWellKnownUrl(source: string): boolean {\n const cleaned = source.replace(/^https?:\\/\\//, '').replace(/\\/$/, '')\n const segments = cleaned.split('/').filter(Boolean)\n\n if (segments.length === 0 || segments.length > 2) {\n return false\n }\n\n const host = segments[0]!\n\n // Must contain a dot (it's a domain)\n if (!host.includes('.')) {\n return false\n }\n\n // Exclude known git hosts\n if (EXCLUDED_HOSTS.has(host.toLowerCase())) {\n return false\n }\n\n // Must NOT end with .git\n if (cleaned.endsWith('.git')) {\n return false\n }\n\n return true\n}\n\n/**\n * Parses a well-known source string into a baseUrl and optional skill name.\n *\n * - `example.com` -> `{ baseUrl: 'https://example.com' }`\n * - `example.com/my-skill` -> `{ baseUrl: 'https://example.com', skillName: 'my-skill' }`\n * - `https://example.com/my-skill` -> same\n */\nexport function parseWellKnownSource(source: string): {\n baseUrl: string\n skillName?: string\n} {\n const cleaned = source.replace(/^https?:\\/\\//, '').replace(/\\/$/, '')\n const segments = cleaned.split('/').filter(Boolean)\n\n const host = segments[0]!\n const baseUrl = `https://${host}`\n\n if (segments.length >= 2) {\n return { baseUrl, skillName: segments[1] }\n }\n\n return { baseUrl }\n}\n\n/**\n * Fetches and validates the well-known skills index from a domain.\n * Always uses HTTPS (auto-upgrades http).\n */\nexport async function fetchWellKnownIndex(baseUrl: string): Promise<WellKnownIndex> {\n const httpsUrl = baseUrl.replace(/^http:\\/\\//, 'https://')\n const indexUrl = `${httpsUrl}/.well-known/skills/index.json`\n\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), INDEX_TIMEOUT_MS)\n\n let response: Response\n try {\n response = await fetch(indexUrl, {\n signal: controller.signal,\n headers: { Accept: 'application/json' },\n })\n clearTimeout(timeoutId)\n } catch (error) {\n clearTimeout(timeoutId)\n throw new AgentverError(\n 'INTERNAL_ERROR',\n `Failed to fetch well-known index from ${indexUrl}: ${String(error)}`\n )\n }\n\n if (!response.ok) {\n throw new AgentverError(\n 'NOT_FOUND',\n `No well-known skills index found at ${indexUrl} (HTTP ${String(response.status)})`\n )\n }\n\n const raw: unknown = await response.json()\n const result = wellKnownIndexSchema.safeParse(raw)\n\n if (!result.success) {\n throw new AgentverError(\n 'VALIDATION_ERROR',\n `Invalid well-known skills index at ${indexUrl}: ${result.error.message}`\n )\n }\n\n return result.data\n}\n\n/**\n * Validates a file path for path traversal attacks.\n * Rejects paths containing `..`, leading `/` or `\\`.\n */\nfunction validateFilePath(filePath: string): boolean {\n if (filePath.includes('..')) return false\n if (filePath.startsWith('/')) return false\n if (filePath.startsWith('\\\\')) return false\n if (filePath.includes('\\\\')) return false\n return true\n}\n\n/**\n * Fetches all files for a single well-known skill entry.\n */\nexport async function fetchWellKnownSkill(\n baseUrl: string,\n entry: WellKnownIndexEntry\n): Promise<WellKnownFetchResult> {\n const httpsUrl = baseUrl.replace(/^http:\\/\\//, 'https://')\n const hostname = new URL(httpsUrl).hostname\n const files: Array<{ path: string; content: string; size: number }> = []\n\n for (const filePath of entry.files) {\n if (!validateFilePath(filePath)) {\n throw new AgentverError(\n 'VALIDATION_ERROR',\n `Unsafe file path in well-known skill \"${entry.name}\": ${filePath}`\n )\n }\n\n const fileUrl = `${httpsUrl}/.well-known/skills/${entry.name}/${filePath}`\n\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), FILE_TIMEOUT_MS)\n\n let response: Response\n try {\n response = await fetch(fileUrl, { signal: controller.signal })\n clearTimeout(timeoutId)\n } catch (error) {\n clearTimeout(timeoutId)\n throw new AgentverError(\n 'INTERNAL_ERROR',\n `Failed to fetch file ${filePath} from ${fileUrl}: ${String(error)}`\n )\n }\n\n if (!response.ok) {\n throw new AgentverError(\n 'NOT_FOUND',\n `File not found: ${fileUrl} (HTTP ${String(response.status)})`\n )\n }\n\n const content = await response.text()\n files.push({\n path: filePath,\n content,\n size: Buffer.byteLength(content, 'utf-8'),\n })\n }\n\n return {\n name: entry.name,\n description: entry.description,\n files,\n sourceUrl: `${httpsUrl}/.well-known/skills/${entry.name}`,\n hostname,\n }\n}\n","import type { ListResult } from '@agentver/shared'\nimport chalk from 'chalk'\nimport type { Command } from 'commander'\nimport { isJSONMode, outputSuccess } from '../output.js'\nimport { readManifest } from '../storage/manifest'\n\nexport function registerListCommand(program: Command): void {\n program\n .command('list')\n .description('Show installed packages')\n .option('--json', 'Output as JSON')\n .action(() => {\n const jsonMode = isJSONMode()\n const manifest = readManifest(process.cwd())\n const entries = Object.entries(manifest.packages)\n\n if (jsonMode) {\n outputSuccess<ListResult>({ packages: manifest.packages })\n return\n }\n\n if (entries.length === 0) {\n console.log(chalk.dim('No packages installed.'))\n return\n }\n\n console.log(chalk.bold(`\\nInstalled packages (${entries.length}):\\n`))\n\n for (const [name, pkg] of entries) {\n const agents = pkg.agents.length > 0 ? chalk.dim(` [${pkg.agents.join(', ')}]`) : ''\n const pinned = pkg.pinned === true ? chalk.yellow(' [pinned]') : ''\n\n if (pkg.source.type === 'git') {\n const ref = pkg.source.ref\n const commit = pkg.source.commit.slice(0, 7)\n console.log(\n ` ${chalk.green(name)}@${chalk.cyan(ref)} ${chalk.dim(`(${commit})`)}${pinned}${agents}`\n )\n } else {\n const hostname = pkg.source.hostname\n console.log(\n ` ${chalk.green(name)} ${chalk.dim(`(${hostname})`)} ${chalk.dim('[well-known]')}${pinned}${agents}`\n )\n }\n }\n\n console.log()\n })\n}\n","import { existsSync, readFileSync } from 'node:fs'\nimport { basename, join } from 'node:path'\nimport chalk from 'chalk'\nimport type { Command } from 'commander'\nimport ora from 'ora'\nimport { platformFetch } from '../registry/platform.js'\nimport { readManifest } from '../storage/manifest.js'\n\ntype CommitEntry = {\n sha: string\n message: string\n author: { name: string; email: string; date: string }\n createdAt: string\n}\n\ntype LogOptions = {\n limit?: string\n json?: boolean\n}\n\n/**\n * Resolve the skill identity from a name argument or the current directory.\n */\nfunction resolveSkillIdentity(nameArg?: string): { org: string; name: string } | null {\n const cwd = process.cwd()\n const manifest = readManifest(cwd)\n\n // If a name was provided, look it up in the manifest\n if (nameArg) {\n const entry = manifest.packages[nameArg]\n if (entry?.source.type === 'git') {\n const parts = entry.source.uri.split('/')\n const org = parts.length >= 2 ? parts[parts.length - 2] : parts[0]\n if (org) {\n return { org, name: nameArg }\n }\n }\n return null\n }\n\n // No name provided — detect from current directory\n const skillMdPath = join(cwd, 'SKILL.md')\n let skillName: string | null = null\n\n if (existsSync(skillMdPath)) {\n const content = readFileSync(skillMdPath, 'utf-8')\n const nameMatch = content.match(/^name:\\s*(.+)$/m)\n skillName = nameMatch?.[1]?.trim() ?? basename(cwd)\n }\n\n if (!skillName) {\n skillName = basename(cwd)\n }\n\n const entry = manifest.packages[skillName]\n if (entry?.source.type === 'git') {\n const parts = entry.source.uri.split('/')\n const org = parts.length >= 2 ? parts[parts.length - 2] : parts[0]\n if (org) {\n return { org, name: skillName }\n }\n }\n\n // Fallback: directory structure\n const pathParts = cwd.split('/')\n const skillsIdx = pathParts.lastIndexOf('skills')\n if (skillsIdx >= 0 && pathParts.length > skillsIdx + 2) {\n return { org: pathParts[skillsIdx + 1]!, name: skillName }\n }\n\n return null\n}\n\nfunction formatDate(dateStr: string): string {\n try {\n const date = new Date(dateStr)\n return date.toLocaleDateString('en-GB', {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n })\n } catch {\n return dateStr\n }\n}\n\nexport function registerLogCommand(program: Command): void {\n program\n .command('log [name]')\n .description('Show commit history for a skill')\n .option('--limit <n>', 'Number of entries to show', '20')\n .option('--json', 'Output as JSON')\n .action(async (nameArg: string | undefined, options: LogOptions) => {\n const identity = resolveSkillIdentity(nameArg)\n\n if (!identity) {\n const target = nameArg ?? 'current directory'\n process.stderr.write(\n chalk.red(\n `Could not determine skill identity for \"${target}\". Provide a skill name or run from a skill directory.\\n`\n )\n )\n process.exit(1)\n }\n\n const limit = Number.parseInt(options.limit ?? '20', 10)\n if (Number.isNaN(limit) || limit < 1) {\n process.stderr.write(chalk.red('Limit must be a positive number.\\n'))\n process.exit(1)\n }\n\n const spinner = ora('Fetching history...').start()\n\n try {\n const params = new URLSearchParams({ limit: String(limit) })\n const commits = await platformFetch<CommitEntry[]>(\n `/skills/@${identity.org}/${identity.name}/history?${params.toString()}`\n )\n\n spinner.stop()\n\n if (options.json) {\n console.log(JSON.stringify({ commits }, null, 2))\n return\n }\n\n if (commits.length === 0) {\n process.stdout.write(chalk.dim('No commits found.\\n'))\n return\n }\n\n process.stdout.write(chalk.bold(`\\nHistory for @${identity.org}/${identity.name}:\\n\\n`))\n\n for (const commit of commits) {\n const shortSha = commit.sha.slice(0, 7)\n const date = formatDate(commit.author.date || commit.createdAt)\n const firstLine = commit.message.split('\\n')[0] ?? commit.message\n\n process.stdout.write(\n ` ${chalk.yellow(shortSha)} ${chalk.dim('|')} ${chalk.dim(date)} ${chalk.dim('|')} ${firstLine}\\n`\n )\n }\n\n process.stdout.write('\\n')\n } catch (error) {\n spinner.fail(\n `Failed to fetch history: ${error instanceof Error ? error.message : String(error)}`\n )\n process.exit(1)\n }\n })\n}\n","import { createHash, randomBytes } from 'node:crypto'\nimport { createServer } from 'node:http'\nimport { URL } from 'node:url'\nimport type { LoginResult } from '@agentver/shared'\nimport chalk from 'chalk'\nimport type { Command } from 'commander'\nimport open from 'open'\nimport { createSpinner, isJSONMode, outputError, outputSuccess } from '../output.js'\nimport { saveCredentials } from '../registry/auth.js'\nimport { getRegistryUrl } from '../registry/client.js'\nimport { getPlatformUrl, readConfig, writeConfig } from '../registry/config.js'\nimport { checkOnline, showOfflineError } from '../utils/network.js'\n\nconst AUTH_TIMEOUT_MS = 120_000\n\nfunction generateCodeVerifier(): string {\n return randomBytes(32).toString('base64url')\n}\n\nfunction generateCodeChallenge(verifier: string): string {\n return createHash('sha256').update(verifier).digest('base64url')\n}\n\nfunction generateState(): string {\n return randomBytes(16).toString('hex')\n}\n\ntype TokenResponse = {\n access_token: string\n token_type: string\n}\n\ntype CallbackResult = {\n code: string\n returnedState: string\n}\n\nfunction startCallbackServer(expectedState: string): Promise<{\n port: number\n waitForCallback: () => Promise<CallbackResult>\n close: () => void\n}> {\n return new Promise((resolve, reject) => {\n let callbackResolve: (result: CallbackResult) => void\n let callbackReject: (error: Error) => void\n\n const callbackPromise = new Promise<CallbackResult>((res, rej) => {\n callbackResolve = res\n callbackReject = rej\n })\n\n const server = createServer((req, res) => {\n if (!req.url?.startsWith('/callback')) {\n res.writeHead(404, { 'Content-Type': 'text/plain' })\n res.end('Not found')\n return\n }\n\n const url = new URL(req.url, `http://localhost`)\n const code = url.searchParams.get('code')\n const returnedState = url.searchParams.get('state')\n const error = url.searchParams.get('error')\n\n if (error) {\n res.writeHead(200, { 'Content-Type': 'text/html' })\n res.end(authResultPage(false, `Authentication failed: ${error}`))\n callbackReject(new Error(`Authentication failed: ${error}`))\n return\n }\n\n if (!code || !returnedState) {\n res.writeHead(400, { 'Content-Type': 'text/html' })\n res.end(authResultPage(false, 'Missing code or state parameter.'))\n callbackReject(new Error('Missing code or state parameter in callback'))\n return\n }\n\n if (returnedState !== expectedState) {\n res.writeHead(400, { 'Content-Type': 'text/html' })\n res.end(authResultPage(false, 'State mismatch — possible CSRF attack.'))\n callbackReject(new Error('State mismatch — possible CSRF attack'))\n return\n }\n\n res.writeHead(200, { 'Content-Type': 'text/html' })\n res.end(authResultPage(true, 'Authentication successful! You can close this tab.'))\n callbackResolve({ code, returnedState })\n })\n\n server.on('error', (err) => {\n reject(new Error(`Failed to start callback server: ${err.message}`))\n })\n\n server.listen(0, '127.0.0.1', () => {\n const address = server.address()\n if (!address || typeof address === 'string') {\n reject(new Error('Failed to determine callback server port'))\n return\n }\n\n resolve({\n port: address.port,\n waitForCallback: () => callbackPromise,\n close: () => {\n server.close()\n },\n })\n })\n })\n}\n\nfunction authResultPage(success: boolean, message: string): string {\n const colour = success ? '#22c55e' : '#ef4444'\n const icon = success ? '✓' : '✗'\n return `<!DOCTYPE html>\n<html>\n<head><title>Agentver CLI</title></head>\n<body style=\"font-family:system-ui,sans-serif;display:flex;justify-content:center;align-items:center;height:100vh;margin:0;background:#0a0a0a;color:#fafafa;\">\n <div style=\"text-align:center;\">\n <div style=\"font-size:3rem;color:${colour};\">${icon}</div>\n <p style=\"font-size:1.1rem;margin-top:1rem;\">${message}</p>\n </div>\n</body>\n</html>`\n}\n\nasync function exchangeCodeForToken(\n registryUrl: string,\n code: string,\n codeVerifier: string,\n redirectUri: string\n): Promise<TokenResponse> {\n const tokenUrl = `${registryUrl.replace('/api/v1', '')}/auth/token`\n\n const response = await fetch(tokenUrl, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n grant_type: 'authorization_code',\n code,\n code_verifier: codeVerifier,\n redirect_uri: redirectUri,\n }),\n })\n\n if (!response.ok) {\n const errorBody = await response.text().catch(() => 'Unknown error')\n throw new Error(`Token exchange failed (${response.status}): ${errorBody}`)\n }\n\n return response.json() as Promise<TokenResponse>\n}\n\nfunction resolveBaseUrl(urlArg: string | undefined): string {\n if (urlArg) return urlArg\n const configured = getPlatformUrl()\n if (configured) return configured\n return getRegistryUrl().replace('/api/v1', '')\n}\n\nfunction resolveApiUrl(urlArg: string | undefined): string {\n if (urlArg) return `${urlArg}/api/v1`\n const configured = getPlatformUrl()\n if (configured) return `${configured}/api/v1`\n return getRegistryUrl()\n}\n\nexport function registerLoginCommand(program: Command): void {\n program\n .command('login')\n .description('Authenticate with the Agentver registry')\n .argument('[url]', 'Platform URL')\n .option('--token <key>', 'API key for CI/CD authentication')\n .action(async (url: string | undefined, options: { token?: string }) => {\n if (url) {\n writeConfig({ ...readConfig(), platformUrl: url })\n }\n\n if (options.token) {\n saveCredentials({ apiKey: options.token })\n const target = url ?? getPlatformUrl()\n\n if (isJSONMode()) {\n outputSuccess<LoginResult>({\n user: { id: '', email: '', name: '' },\n })\n return\n }\n\n console.log(chalk.green('Saved API key. You are now authenticated.'))\n if (target) {\n console.log(chalk.dim(`Connected to ${target}`))\n }\n return\n }\n\n if (!(await checkOnline())) {\n if (isJSONMode()) {\n outputError('OFFLINE', 'Unable to reach the Agentver registry')\n process.exit(1)\n }\n showOfflineError()\n process.exit(1)\n }\n\n if (isJSONMode()) {\n outputError(\n 'INTERACTIVE_REQUIRED',\n 'OAuth login requires an interactive terminal. Use --token for non-interactive authentication.'\n )\n process.exit(1)\n }\n\n const baseUrl = resolveBaseUrl(url)\n const apiUrl = resolveApiUrl(url)\n const codeVerifier = generateCodeVerifier()\n const codeChallenge = generateCodeChallenge(codeVerifier)\n const state = generateState()\n\n const spinner = createSpinner('Starting authentication...').start()\n\n let callbackServer: Awaited<ReturnType<typeof startCallbackServer>> | undefined\n\n const cleanup = (): void => {\n callbackServer?.close()\n }\n\n process.on('SIGINT', () => {\n cleanup()\n spinner.fail('Authentication cancelled.')\n process.exit(1)\n })\n\n try {\n callbackServer = await startCallbackServer(state)\n const { port } = callbackServer\n const redirectUri = `http://localhost:${port}/callback`\n\n const authUrl =\n `${baseUrl}/auth/cli` +\n `?code_challenge=${encodeURIComponent(codeChallenge)}` +\n `&state=${encodeURIComponent(state)}` +\n `&redirect_uri=${encodeURIComponent(redirectUri)}`\n\n spinner.text = 'Opening browser for authentication...'\n console.log(chalk.dim(`\\n If the browser doesn't open, visit:\\n ${authUrl}\\n`))\n\n await open(authUrl)\n\n spinner.text = 'Waiting for authentication in browser...'\n\n const { code } = await Promise.race([\n callbackServer.waitForCallback(),\n new Promise<never>((_resolve, reject) => {\n setTimeout(() => {\n reject(new Error('Authentication timed out after 120 seconds'))\n }, AUTH_TIMEOUT_MS)\n }),\n ])\n\n spinner.text = 'Exchanging authorisation code for token...'\n\n const tokenResponse = await exchangeCodeForToken(apiUrl, code, codeVerifier, redirectUri)\n\n saveCredentials({ token: tokenResponse.access_token })\n spinner.succeed('Authenticated successfully.')\n\n const connectedUrl = url ?? getPlatformUrl()\n if (connectedUrl) {\n console.log(chalk.dim(`Connected to ${connectedUrl}`))\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n spinner.fail(`Authentication failed: ${message}`)\n process.exit(1)\n } finally {\n cleanup()\n }\n })\n}\n","import { getCredentials } from './auth'\nimport { fetchWithRetry } from '../utils/retry'\n\nconst DEFAULT_REGISTRY = 'https://app.agentver.com/api/v1'\nconst REQUEST_TIMEOUT_MS = 30_000\n\nexport { RequestTimeoutError as RegistryTimeoutError } from '../utils/retry'\n\ntype RequestOptions = {\n method?: string\n body?: unknown\n headers?: Record<string, string>\n}\n\nexport function getRegistryUrl(): string {\n return process.env.AGENTVER_REGISTRY ?? DEFAULT_REGISTRY\n}\n\nexport async function registryFetch<T>(path: string, options: RequestOptions = {}): Promise<T> {\n const credentials = await getCredentials()\n const url = `${getRegistryUrl()}${path}`\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n ...options.headers,\n }\n\n if (credentials?.token) {\n headers.Authorization = `Bearer ${credentials.token}`\n } else if (credentials?.apiKey) {\n headers['X-API-Key'] = credentials.apiKey\n }\n\n return fetchWithRetry<T>({\n label: 'Registry',\n timeoutMs: REQUEST_TIMEOUT_MS,\n buildRequest: () => ({\n url,\n method: options.method ?? 'GET',\n headers,\n body: options.body ? JSON.stringify(options.body) : undefined,\n }),\n onAuthExpired: () => {\n throw new Error('Authentication expired. Run `agentver login` to re-authenticate.')\n },\n })\n}\n","import chalk from 'chalk'\nimport { getRegistryUrl } from '../registry/client'\n\nconst ONLINE_CHECK_TIMEOUT_MS = 3_000\n\nexport async function checkOnline(): Promise<boolean> {\n const registryUrl = getRegistryUrl()\n const healthUrl = `${registryUrl}/health`\n\n try {\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), ONLINE_CHECK_TIMEOUT_MS)\n\n const response = await fetch(healthUrl, {\n method: 'HEAD',\n signal: controller.signal,\n })\n\n clearTimeout(timeoutId)\n return response.ok\n } catch {\n return false\n }\n}\n\nexport function showOfflineError(): void {\n console.error(\n chalk.red('Unable to reach the Agentver registry.') +\n ' Please check your internet connection.\\n'\n )\n console.error(\n chalk.dim(\n `If you're behind a proxy, set the HTTPS_PROXY environment variable.\\n` +\n `If the registry is down, try again later.\\n\\n` +\n `Some commands work offline: list, info (cached packages only)`\n )\n )\n}\n","import type { LogoutResult } from '@agentver/shared'\nimport chalk from 'chalk'\nimport type { Command } from 'commander'\nimport { isJSONMode, outputSuccess } from '../output.js'\nimport { clearCredentials, isAuthenticated } from '../registry/auth.js'\nimport { getPlatformUrl, readConfig, writeConfig } from '../registry/config.js'\n\nexport function registerLogoutCommand(program: Command): void {\n program\n .command('logout')\n .description('Log out from the Agentver registry')\n .action(async () => {\n if (!(await isAuthenticated())) {\n if (isJSONMode()) {\n outputSuccess<LogoutResult>({ cleared: true })\n return\n }\n console.log(chalk.dim('You are not currently logged in.'))\n return\n }\n\n const platformUrl = getPlatformUrl()\n\n clearCredentials()\n\n if (platformUrl) {\n const config = readConfig()\n delete config.platformUrl\n writeConfig(config)\n }\n\n if (isJSONMode()) {\n outputSuccess<LogoutResult>({ cleared: true })\n return\n }\n\n if (platformUrl) {\n console.log(`${chalk.green('Logged out successfully.')} Disconnected from ${platformUrl}`)\n } else {\n console.log(\n `${chalk.green('Logged out successfully.')} Run \\`agentver login\\` to sign in again.`\n )\n }\n })\n}\n","import chalk from 'chalk'\nimport type { Command } from 'commander'\nimport { isJSONMode, outputError, outputSuccess } from '../output.js'\nimport { readManifest, writeManifest } from '../storage/manifest'\n\nexport function registerPinCommand(program: Command): void {\n program\n .command('pin <name>')\n .description('Pin a package to skip it during updates')\n .action((name: string) => {\n const jsonMode = isJSONMode()\n const projectRoot = process.cwd()\n const manifest = readManifest(projectRoot)\n const pkg = manifest.packages[name]\n\n if (!pkg) {\n if (jsonMode) {\n outputError('NOT_FOUND', `Package \"${name}\" is not installed.`)\n } else {\n console.error(chalk.red(`Package \"${name}\" is not installed.`))\n }\n process.exit(1)\n }\n\n pkg.pinned = true\n writeManifest(projectRoot, manifest)\n\n if (jsonMode) {\n outputSuccess({ name, pinned: true })\n return\n }\n\n console.log(\n chalk.green(`Pinned ${name}`) + chalk.dim(' — this package will be skipped during updates')\n )\n })\n}\n\nexport function registerUnpinCommand(program: Command): void {\n program\n .command('unpin <name>')\n .description('Unpin a package so it is included in updates')\n .action((name: string) => {\n const jsonMode = isJSONMode()\n const projectRoot = process.cwd()\n const manifest = readManifest(projectRoot)\n const pkg = manifest.packages[name]\n\n if (!pkg) {\n if (jsonMode) {\n outputError('NOT_FOUND', `Package \"${name}\" is not installed.`)\n } else {\n console.error(chalk.red(`Package \"${name}\" is not installed.`))\n }\n process.exit(1)\n }\n\n delete pkg.pinned\n writeManifest(projectRoot, manifest)\n\n if (jsonMode) {\n outputSuccess({ name, pinned: false })\n return\n }\n\n console.log(\n chalk.green(`Unpinned ${name}`) + chalk.dim(' — this package will be included in updates')\n )\n })\n}\n","import { existsSync, readFileSync } from 'node:fs'\nimport { basename, join, resolve } from 'node:path'\nimport chalk from 'chalk'\nimport type { Command } from 'commander'\nimport ora from 'ora'\nimport { readFilesFromDirectory } from '../git/fetcher.js'\nimport type { GitSource } from '../git/types.js'\nimport { platformFetch } from '../registry/platform.js'\nimport { scanFiles } from '../security/index.js'\n\ntype PublishOptions = {\n version?: string\n dryRun?: boolean\n skipAudit?: boolean\n json?: boolean\n}\n\ntype PublishResponse = {\n version: string\n commitSha: string\n}\n\ntype SkillFrontmatter = {\n name: string\n description: string\n version: string\n}\n\nconst SEMVER_REGEX = /^\\d+\\.\\d+\\.\\d+(-[\\w.]+)?$/\n\n/**\n * Parse YAML-like frontmatter from a SKILL.md file.\n * Intentionally simple — handles the common key: value format.\n */\nfunction parseFrontmatter(content: string): SkillFrontmatter | null {\n const fmMatch = content.match(/^---\\n([\\s\\S]*?)\\n---/)\n if (!fmMatch?.[1]) return null\n\n const lines = fmMatch[1].split('\\n')\n const data: Record<string, string> = {}\n\n for (const line of lines) {\n const colonIdx = line.indexOf(':')\n if (colonIdx === -1) continue\n const key = line.slice(0, colonIdx).trim()\n const value = line.slice(colonIdx + 1).trim()\n if (key && value) {\n data[key] = value\n }\n }\n\n if (!data.name || !data.description || !data.version) {\n return null\n }\n\n return {\n name: data.name,\n description: data.description,\n version: data.version,\n }\n}\n\n/**\n * Detect the org/namespace from the skill directory context.\n * Uses the directory structure or manifest to determine the namespace.\n */\nfunction detectNamespace(skillDir: string): { org: string; name: string } | null {\n const skillMdPath = join(skillDir, 'SKILL.md')\n if (!existsSync(skillMdPath)) return null\n\n const content = readFileSync(skillMdPath, 'utf-8')\n const fm = parseFrontmatter(content)\n if (!fm) return null\n\n // Try to extract org from directory structure (e.g. .agentver/skills/org/name)\n const parts = skillDir.split('/')\n const skillsIdx = parts.lastIndexOf('skills')\n if (skillsIdx >= 0 && parts.length > skillsIdx + 2) {\n return { org: parts[skillsIdx + 1]!, name: fm.name }\n }\n\n // Fall back to using the parent directory as org\n const parentDir = basename(resolve(skillDir, '..'))\n return { org: parentDir, name: fm.name }\n}\n\nexport function registerPublishCommand(program: Command): void {\n program\n .command('publish [path]')\n .description('Publish a skill to the registry')\n .option('--version <semver>', 'Version to publish (uses frontmatter version if omitted)')\n .option('--dry-run', 'Validate without publishing')\n .option('--skip-audit', 'Skip security scan')\n .option('--json', 'Output as JSON')\n .action(async (pathArg: string | undefined, options: PublishOptions) => {\n const skillDir = pathArg ? resolve(process.cwd(), pathArg) : process.cwd()\n\n if (!existsSync(join(skillDir, 'SKILL.md'))) {\n process.stderr.write(\n chalk.red(`No SKILL.md found in ${skillDir}. Cannot publish without a skill manifest.\\n`)\n )\n process.exit(1)\n }\n\n const spinner = ora('Reading skill metadata...').start()\n\n try {\n // Parse frontmatter\n const skillMdContent = readFileSync(join(skillDir, 'SKILL.md'), 'utf-8')\n const frontmatter = parseFrontmatter(skillMdContent)\n\n if (!frontmatter) {\n spinner.fail(\n 'Invalid SKILL.md frontmatter. Ensure name, description, and version are set.'\n )\n process.exit(1)\n }\n\n const version = options.version ?? frontmatter.version\n if (!SEMVER_REGEX.test(version)) {\n spinner.fail(`Invalid version \"${version}\". Must be valid semver (e.g. 1.0.0).`)\n process.exit(1)\n }\n\n const namespace = detectNamespace(skillDir)\n if (!namespace) {\n spinner.fail(\n 'Could not determine skill namespace. Check SKILL.md and directory structure.'\n )\n process.exit(1)\n }\n\n // Read all files\n spinner.text = 'Reading skill files...'\n const localFiles = await readFilesFromDirectory(skillDir)\n\n if (localFiles.length === 0) {\n spinner.fail('No files found in skill directory.')\n process.exit(1)\n }\n\n // Security audit\n if (!options.skipAudit) {\n spinner.text = 'Running security audit...'\n\n // Create a minimal GitSource for the scanner\n const scanSource: GitSource = {\n host: 'generic',\n owner: namespace.org,\n repo: namespace.name,\n path: '',\n ref: 'local',\n }\n\n const scanResult = await scanFiles(localFiles, scanSource, {\n skipAudit: false,\n })\n\n if (scanResult.verdict === 'BLOCK') {\n spinner.fail('Security audit failed. Fix the issues before publishing.')\n for (const finding of scanResult.findings) {\n process.stderr.write(\n ` ${chalk.red('BLOCK')} ${finding.file}:${String(finding.line ?? '?')} — ${finding.message}\\n`\n )\n }\n process.exit(1)\n }\n\n if (scanResult.verdict === 'WARN') {\n spinner.warn('Security audit warnings found:')\n for (const finding of scanResult.findings) {\n process.stderr.write(\n ` ${chalk.yellow('WARN')} ${finding.file}:${String(finding.line ?? '?')} — ${finding.message}\\n`\n )\n }\n spinner.start('Continuing...')\n }\n }\n\n const filesToPublish = localFiles.map((f) => ({\n path: f.path,\n content: f.content,\n }))\n\n if (options.dryRun) {\n spinner.stop()\n\n if (options.json) {\n console.log(\n JSON.stringify(\n {\n dryRun: true,\n skill: `@${namespace.org}/${namespace.name}`,\n version,\n files: filesToPublish.map((f) => f.path),\n frontmatter,\n },\n null,\n 2\n )\n )\n } else {\n process.stdout.write(\n chalk.yellow('[dry-run]') +\n ` Would publish ${chalk.green(frontmatter.name)}@${chalk.cyan(version)}\\n`\n )\n process.stdout.write(chalk.dim(` Namespace: @${namespace.org}/${namespace.name}\\n`))\n process.stdout.write(\n chalk.dim(\n ` Files (${filesToPublish.length}): ${filesToPublish.map((f) => f.path).join(', ')}\\n`\n )\n )\n }\n return\n }\n\n spinner.text = `Publishing ${frontmatter.name}@${version}...`\n\n const result = await platformFetch<PublishResponse>(\n `/skills/@${namespace.org}/${namespace.name}/publish`,\n {\n method: 'POST',\n body: {\n files: filesToPublish,\n version,\n },\n }\n )\n\n if (options.json) {\n console.log(\n JSON.stringify(\n {\n skill: `@${namespace.org}/${namespace.name}`,\n version: result.version,\n commitSha: result.commitSha,\n },\n null,\n 2\n )\n )\n } else {\n spinner.succeed(\n `Published ${chalk.green(frontmatter.name)}@${chalk.cyan(result.version)} ${chalk.dim(`(${result.commitSha.slice(0, 7)})`)}`\n )\n }\n } catch (error) {\n spinner.fail(`Failed to publish: ${error instanceof Error ? error.message : String(error)}`)\n process.exit(1)\n }\n })\n}\n","import { existsSync, lstatSync, rmSync } from 'node:fs'\nimport { join } from 'node:path'\nimport { type AgentId, getSkillPlacementPath } from '@agentver/agent-definitions'\nimport type { RemoveResult } from '@agentver/shared'\nimport chalk from 'chalk'\nimport type { Command } from 'commander'\nimport { createSpinner, isJSONMode, outputError, outputSuccess } from '../output.js'\nimport { reportRemoval } from '../registry/reporter.js'\nimport {\n getCanonicalSkillPath,\n isSymlinkedInstall,\n removeAgentSymlinks,\n removeCanonicalDirectory,\n} from '../storage/canonical'\nimport { readLockfile, writeLockfile } from '../storage/lockfile'\nimport { readManifest, writeManifest } from '../storage/manifest'\n\nexport function registerRemoveCommand(program: Command): void {\n program\n .command('remove <name>')\n .alias('uninstall')\n .description('Remove an installed package')\n .option('--dry-run', 'Show what would be removed without making changes')\n .action(async (name: string, options: { dryRun?: boolean }) => {\n const jsonMode = isJSONMode()\n const projectRoot = process.cwd()\n const manifest = readManifest(projectRoot)\n\n const pkg = manifest.packages[name]\n if (!pkg) {\n if (jsonMode) {\n outputError('NOT_FOUND', `Package \"${name}\" is not installed.`)\n process.exit(1)\n }\n console.error(chalk.red(`Package \"${name}\" is not installed.`))\n process.exit(1)\n }\n\n const shortName = name.split('/').pop()!\n const hasCanonical = isSymlinkedInstall(projectRoot, shortName)\n\n const removedPaths: string[] = []\n\n if (hasCanonical) {\n const canonicalPath = getCanonicalSkillPath(projectRoot, shortName, 'project')\n removedPaths.push(canonicalPath)\n for (const agentId of pkg.agents) {\n const placementPath = getSkillPlacementPath(agentId as AgentId, shortName, 'project')\n if (placementPath) {\n removedPaths.push(join(projectRoot, placementPath))\n }\n }\n } else {\n for (const agentId of pkg.agents) {\n const placementPath = getSkillPlacementPath(agentId as AgentId, shortName, 'project')\n if (!placementPath) continue\n const fullPath = join(projectRoot, placementPath)\n if (existsSync(fullPath)) {\n removedPaths.push(fullPath)\n }\n }\n }\n\n if (options.dryRun) {\n if (jsonMode) {\n outputSuccess<RemoveResult>({\n name,\n removed: false,\n paths: removedPaths,\n })\n return\n }\n\n console.log(`${chalk.yellow('[dry-run]')} Would remove ${chalk.green(name)}`)\n\n if (hasCanonical) {\n const canonicalPath = getCanonicalSkillPath(projectRoot, shortName, 'project')\n console.log(chalk.dim(' Canonical path to remove:'))\n console.log(chalk.dim(` ${canonicalPath}`))\n console.log(chalk.dim(' Agent symlinks to remove:'))\n for (const agentId of pkg.agents) {\n const placementPath = getSkillPlacementPath(agentId as AgentId, shortName, 'project')\n if (placementPath) {\n console.log(chalk.dim(` ${join(projectRoot, placementPath)}`))\n }\n }\n } else {\n const pathsToRemove = removedPaths.filter((p) => existsSync(p))\n if (pathsToRemove.length > 0) {\n console.log(chalk.dim(' Paths to remove:'))\n for (const p of pathsToRemove) {\n console.log(chalk.dim(` ${p}`))\n }\n }\n }\n\n console.log(chalk.dim(' Would update manifest and lockfile'))\n return\n }\n\n const spinner = createSpinner(`Removing ${name}...`).start()\n\n if (hasCanonical) {\n removeAgentSymlinks(projectRoot, shortName, pkg.agents, 'project')\n removeCanonicalDirectory(projectRoot, shortName, 'project')\n } else {\n for (const agentId of pkg.agents) {\n const placementPath = getSkillPlacementPath(agentId as AgentId, shortName, 'project')\n if (!placementPath) continue\n\n const fullPath = join(projectRoot, placementPath)\n if (existsSync(fullPath) || isSymlinkPath(fullPath)) {\n rmSync(fullPath, { recursive: true, force: true })\n }\n }\n }\n\n delete manifest.packages[name]\n writeManifest(projectRoot, manifest)\n\n const lockfile = readLockfile(projectRoot)\n delete lockfile.packages[name]\n writeLockfile(projectRoot, lockfile)\n\n reportRemoval(name)\n\n if (jsonMode) {\n outputSuccess<RemoveResult>({\n name,\n removed: true,\n paths: removedPaths,\n })\n } else {\n spinner.succeed(`Removed ${chalk.green(name)}`)\n }\n })\n}\n\nfunction isSymlinkPath(filePath: string): boolean {\n try {\n return lstatSync(filePath).isSymbolicLink()\n } catch {\n return false\n }\n}\n","import { existsSync, readFileSync } from 'node:fs'\nimport { basename, join, resolve } from 'node:path'\nimport chalk from 'chalk'\nimport type { Command } from 'commander'\nimport ora from 'ora'\nimport { readFilesFromDirectory } from '../git/fetcher.js'\nimport { platformFetch } from '../registry/platform.js'\nimport { readLockfile, writeLockfile } from '../storage/lockfile.js'\nimport { readManifest } from '../storage/manifest.js'\n\ntype SaveOptions = {\n path?: string\n dryRun?: boolean\n json?: boolean\n}\n\ntype SaveResponse = {\n commitSha: string\n}\n\n/**\n * Detect a skill name from the current directory by looking for a SKILL.md\n * frontmatter `name:` field, or falling back to the directory basename.\n */\nfunction detectSkillName(skillDir: string): string | null {\n const skillMdPath = join(skillDir, 'SKILL.md')\n if (!existsSync(skillMdPath)) {\n return null\n }\n\n const content = readFileSync(skillMdPath, 'utf-8')\n const nameMatch = content.match(/^name:\\s*(.+)$/m)\n return nameMatch?.[1]?.trim() ?? basename(skillDir)\n}\n\n/**\n * Resolve the skill directory and name from options or the current directory.\n */\nfunction resolveSkillContext(options: SaveOptions): { skillDir: string; skillName: string } | null {\n const skillDir = options.path ? resolve(process.cwd(), options.path) : process.cwd()\n\n if (!existsSync(skillDir)) {\n return null\n }\n\n const skillName = detectSkillName(skillDir)\n if (!skillName) {\n return null\n }\n\n return { skillDir, skillName }\n}\n\n/**\n * Find the org/namespace for a skill by checking the manifest source.\n */\nfunction findNamespace(\n projectRoot: string,\n skillName: string\n): { org: string; name: string } | null {\n const manifest = readManifest(projectRoot)\n const entry = manifest.packages[skillName]\n\n if (!entry || entry.source.type !== 'git') {\n return null\n }\n\n // Source URI format: host/org/repo or just org from platform\n const parts = entry.source.uri.split('/')\n // The org is typically the second segment (host/org/repo)\n const org = parts.length >= 2 ? parts[parts.length - 2] : parts[0]\n if (!org) return null\n\n return { org, name: skillName }\n}\n\nexport function registerSaveCommand(program: Command): void {\n program\n .command('save [message]')\n .description('Commit local skill changes to the platform')\n .option('--path <path>', 'Path to skill directory')\n .option('--dry-run', 'Show what would be saved without committing')\n .option('--json', 'Output as JSON')\n .action(async (message: string | undefined, options: SaveOptions) => {\n const context = resolveSkillContext(options)\n\n if (!context) {\n const target = options.path ?? process.cwd()\n process.stderr.write(\n chalk.red(`No SKILL.md found in ${target}. Run this from a skill directory.\\n`)\n )\n process.exit(1)\n }\n\n const { skillDir, skillName } = context\n const projectRoot = process.cwd()\n const namespace = findNamespace(projectRoot, skillName)\n\n if (!namespace) {\n process.stderr.write(\n chalk.red(\n `Skill \"${skillName}\" not found in manifest. Install it first or check the directory.\\n`\n )\n )\n process.exit(1)\n }\n\n const spinner = ora('Reading local files...').start()\n\n try {\n const localFiles = await readFilesFromDirectory(skillDir)\n\n if (localFiles.length === 0) {\n spinner.fail('No files found in skill directory.')\n process.exit(1)\n }\n\n const filesToSave = localFiles.map((f) => ({\n path: f.path,\n content: f.content,\n }))\n\n const commitMessage = message ?? `Update skill: ${skillName}`\n\n if (options.dryRun) {\n spinner.stop()\n\n if (options.json) {\n console.log(\n JSON.stringify(\n {\n dryRun: true,\n skill: `@${namespace.org}/${namespace.name}`,\n message: commitMessage,\n files: filesToSave.map((f) => f.path),\n },\n null,\n 2\n )\n )\n } else {\n process.stdout.write(\n chalk.yellow('[dry-run]') +\n ` Would save ${chalk.green(skillName)} to @${namespace.org}/${namespace.name}\\n`\n )\n process.stdout.write(chalk.dim(` Message: ${commitMessage}\\n`))\n process.stdout.write(\n chalk.dim(` Files: ${filesToSave.map((f) => f.path).join(', ')}\\n`)\n )\n }\n return\n }\n\n spinner.text = `Saving ${filesToSave.length} file(s) to platform...`\n\n const result = await platformFetch<SaveResponse>(\n `/skills/@${namespace.org}/${namespace.name}/save`,\n {\n method: 'POST',\n body: {\n message: commitMessage,\n files: filesToSave,\n },\n }\n )\n\n // Update the lockfile with the new commit SHA\n const lockfile = readLockfile(projectRoot)\n const lockEntry = lockfile.packages[skillName]\n if (lockEntry?.source.type === 'git') {\n lockEntry.source.commit = result.commitSha\n writeLockfile(projectRoot, lockfile)\n }\n\n if (options.json) {\n console.log(\n JSON.stringify(\n {\n skill: `@${namespace.org}/${namespace.name}`,\n commitSha: result.commitSha,\n files: filesToSave.map((f) => f.path),\n },\n null,\n 2\n )\n )\n } else {\n spinner.succeed(\n `Saved ${chalk.green(skillName)} ${chalk.dim(`(${result.commitSha.slice(0, 7)})`)}`\n )\n }\n } catch (error) {\n spinner.fail(`Failed to save: ${error instanceof Error ? error.message : String(error)}`)\n process.exit(1)\n }\n })\n}\n","import { readFileSync } from 'node:fs'\nimport { homedir } from 'node:os'\nimport {\n detectGlobalAgents,\n detectInstalledAgents,\n scanForSkillFiles,\n scanGlobalSkillFiles,\n} from '@agentver/agent-definitions'\nimport type { ScanResult } from '@agentver/shared'\nimport { validateSkillMd } from '@agentver/shared'\nimport chalk from 'chalk'\nimport type { Command } from 'commander'\nimport { isJSONMode, outputSuccess } from '../output'\nimport { readManifest } from '../storage/manifest.js'\n\nexport function registerScanCommand(program: Command): void {\n program\n .command('scan [path]')\n .description('Scan directory for agent configs and skills')\n .action(async (path?: string) => {\n const jsonMode = isJSONMode()\n const targetPath = path ?? process.cwd()\n\n const projectAgents = detectInstalledAgents(targetPath)\n const globalAgents = detectGlobalAgents(homedir())\n\n // Merge: project agents first, then global agents not already detected\n const seenIds = new Set(projectAgents.map((a) => a.id))\n const agents = [...projectAgents, ...globalAgents.filter((a) => !seenIds.has(a.id))]\n\n // Merge project + global skill files, deduplicating by path\n const projectFiles = scanForSkillFiles(targetPath)\n const globalFiles = scanGlobalSkillFiles(homedir())\n const seenPaths = new Set(projectFiles.map((f) => f.path))\n const files = [...projectFiles, ...globalFiles.filter((f) => !seenPaths.has(f.path))]\n\n if (jsonMode) {\n const result: ScanResult = {\n agents: agents.map((a) => ({\n id: a.id,\n name: a.name,\n paths: [a.configPath],\n })),\n skills: files.map((f) => ({\n name: f.name,\n path: f.path,\n type: f.detectedType,\n })),\n }\n outputSuccess(result)\n return\n }\n\n console.log(chalk.bold('\\nDetected agents:\\n'))\n\n if (agents.length === 0) {\n console.log(chalk.dim(' No agents detected.'))\n } else {\n for (const agent of agents) {\n console.log(` ${chalk.green(agent.name)} ${chalk.dim(agent.configPath)}`)\n }\n }\n\n console.log(chalk.bold('\\nDiscovered files:\\n'))\n\n if (files.length === 0) {\n console.log(chalk.dim(' No skill or config files found.'))\n } else {\n for (const file of files) {\n const typeLabel = chalk.dim(`[${file.detectedType}]`)\n const agentLabel = chalk.cyan(`(${file.agentId})`)\n console.log(` ${typeLabel} ${agentLabel} ${file.name} ${chalk.dim(file.path)}`)\n }\n }\n\n // Validate SKILL.md files against the Agent Skills spec\n const skillFiles = files.filter((f) => f.detectedType === 'SKILL')\n if (skillFiles.length > 0) {\n console.log(chalk.bold('\\nSkill spec validation:\\n'))\n\n for (const file of skillFiles) {\n let content: string\n try {\n content = readFileSync(file.path, 'utf-8')\n } catch {\n console.log(` ${chalk.red('\\u2717')} ${file.name} ${chalk.dim('Could not read file')}`)\n continue\n }\n\n const result = validateSkillMd(content)\n\n if (result.valid && result.specCompliant) {\n console.log(\n ` ${chalk.green('\\u2713')} ${file.name} ${chalk.green('Agent Skills spec compliant')}`\n )\n } else if (result.valid && !result.specCompliant) {\n console.log(\n ` ${chalk.yellow('\\u2713')} ${file.name} ${chalk.yellow('Valid (Agentver extended)')}`\n )\n } else {\n console.log(` ${chalk.red('\\u2717')} ${file.name} ${chalk.red('Invalid')}`)\n for (const error of result.errors) {\n console.log(` ${chalk.red(`\\u2514 ${error}`)}`)\n }\n }\n\n if (result.warnings.length > 0) {\n for (const warning of result.warnings) {\n console.log(` ${chalk.yellow(`\\u26A0 ${warning}`)}`)\n }\n }\n\n if (result.agentverExtensions.length > 0) {\n console.log(\n ` ${chalk.dim(`Agentver extensions: ${result.agentverExtensions.join(', ')}`)}`\n )\n }\n }\n }\n\n const manifest = readManifest(targetPath)\n const manifestEntries = Object.entries(manifest.packages)\n\n if (manifestEntries.length > 0) {\n console.log(chalk.bold(`\\nInstalled skills (${manifestEntries.length}):\\n`))\n\n for (const [name, pkg] of manifestEntries) {\n const source = pkg.source\n const agentList = `[${pkg.agents.join(', ')}]`\n\n if (source.type === 'git') {\n const sourcePath = source.path ? `${source.uri}/${source.path}` : source.uri\n const ref = `@${source.ref}`\n const commit = `(${source.commit.slice(0, 7)})`\n console.log(\n ` ${chalk.green(name.padEnd(18))} ${chalk.dim(sourcePath.padEnd(40))} ${chalk.cyan(ref.padEnd(10))} ${chalk.dim(commit)} ${chalk.dim(agentList)}`\n )\n } else {\n const sourceLabel = `${source.hostname} (well-known)`\n console.log(\n ` ${chalk.green(name.padEnd(18))} ${chalk.dim(sourceLabel.padEnd(40))} ${chalk.dim('[well-known]').padEnd(10)} ${chalk.dim(agentList)}`\n )\n }\n }\n }\n\n console.log()\n })\n}\n","import chalk from 'chalk'\nimport type { Command } from 'commander'\nimport ora from 'ora'\nimport { registryFetch } from '../registry/client'\nimport { isConnected } from '../registry/config'\nimport { type SkillsShResult, searchSkillsSh, toGitInstallSource } from '../registry/skills-sh'\nimport { fetchWellKnownIndex } from '../wellknown/index.js'\nimport type { WellKnownIndexEntry } from '../wellknown/types.js'\n\ntype PlatformSearchOrganisation = {\n slug: string\n name: string\n}\n\ntype PlatformSearchCategory = {\n id: string\n name: string\n slug: string\n icon: string | null\n}\n\ntype PlatformSearchResult = {\n id: string\n name: string\n slug: string\n description: string | null\n type: string\n tags: string[]\n compatibilityAgents: string[]\n starCount: number\n installCount: number\n organisation: PlatformSearchOrganisation\n categories: PlatformSearchCategory[]\n}\n\ntype PlatformSearchResponse = {\n results: PlatformSearchResult[]\n total: number\n limit: number\n offset: number\n}\n\ntype SearchSource = 'platform' | 'community' | 'well-known' | 'all'\n\nfunction formatInstallCount(count: number): string {\n if (count >= 1_000_000) {\n return `${(count / 1_000_000).toFixed(1)}M`\n }\n if (count >= 1_000) {\n return `${(count / 1_000).toFixed(1)}K`\n }\n return String(count)\n}\n\nfunction renderPlatformResults(results: PlatformSearchResult[], total: number): void {\n if (results.length === 0) return\n\n process.stdout.write(chalk.bold(`\\nPlatform results (${total}):\\n\\n`))\n\n for (const result of results) {\n const desc = result.description ? chalk.dim(` — ${result.description}`) : ''\n const stars = result.starCount > 0 ? chalk.yellow(` ★ ${result.starCount}`) : ''\n const installs =\n result.installCount > 0 ? chalk.cyan(` ↓ ${formatInstallCount(result.installCount)}`) : ''\n const cats =\n result.categories.length > 0\n ? chalk.dim(` [${result.categories.map((c) => c.name).join(', ')}]`)\n : ''\n\n process.stdout.write(` ${chalk.green(result.slug)}${stars}${installs}${cats}${desc}\\n`)\n }\n\n process.stdout.write('\\n')\n}\n\nfunction renderCommunityResults(results: SkillsShResult[]): void {\n if (results.length === 0) return\n\n process.stdout.write(chalk.bold(`\\nSkills from skills.sh:\\n\\n`))\n\n for (const result of results) {\n const nameCol = chalk.green(result.name)\n const sourceCol = chalk.dim(`(${result.source})`)\n const installCol = chalk.cyan(`↓ ${formatInstallCount(result.installCount)}`)\n\n process.stdout.write(` ${nameCol} ${sourceCol} ${installCol}\\n`)\n\n if (result.description) {\n process.stdout.write(` ${chalk.dim(result.description)}\\n`)\n }\n\n process.stdout.write('\\n')\n }\n\n process.stdout.write(\n chalk.dim(' Install with: ') +\n chalk.white('agentver install github.com/{source}/{name}') +\n '\\n\\n'\n )\n}\n\nfunction renderWellKnownResults(hostname: string, skills: WellKnownIndexEntry[]): void {\n if (skills.length === 0) return\n\n process.stdout.write(chalk.bold(`\\nSkills from ${hostname}:\\n\\n`))\n\n for (const skill of skills) {\n process.stdout.write(` ${chalk.green(skill.name)} ${chalk.dim(`— ${skill.description}`)}\\n`)\n process.stdout.write(\n ` ${chalk.dim('Install:')} ${chalk.white(`agentver install ${hostname}/${skill.name}`)}\\n`\n )\n process.stdout.write('\\n')\n }\n}\n\nfunction renderNoResults(query: string): void {\n process.stdout.write(chalk.dim(`No results for \"${query}\"\\n`))\n}\n\nexport function registerSearchCommand(program: Command): void {\n program\n .command('search <query>')\n .description('Search for skills across registries')\n .option('--type <type>', 'Filter by type (skill, agent, plugin, script, prompt)')\n .option('--category <category>', 'Filter by category slug (e.g. testing, devops)')\n .option(\n '--source <source>',\n 'Search source: platform, community (skills.sh), well-known (domain), or all'\n )\n .action(\n async (query: string, options: { type?: string; category?: string; source?: string }) => {\n const connected = await isConnected()\n\n const requestedSource = (options.source as SearchSource | undefined) ?? undefined\n let source: SearchSource\n\n if (requestedSource) {\n if (!['platform', 'community', 'well-known', 'all'].includes(requestedSource)) {\n process.stderr.write(\n chalk.red(\n `Invalid source \"${requestedSource}\". Use: platform, community, well-known, or all\\n`\n )\n )\n process.exit(1)\n }\n source = requestedSource as SearchSource\n\n if (source === 'platform' && !connected) {\n process.stderr.write(\n chalk.red('Not connected to a platform. Run `agentver login <url>` to connect.\\n')\n )\n process.exit(1)\n }\n } else {\n source = connected ? 'platform' : 'community'\n }\n\n // Well-known search is a separate flow — query is treated as a domain name\n if (source === 'well-known') {\n const spinner = ora(`Fetching skills from ${query}...`).start()\n\n try {\n const baseUrl = query.startsWith('https://') ? query : `https://${query}`\n const hostname = new URL(baseUrl).hostname\n const index = await fetchWellKnownIndex(baseUrl)\n\n spinner.stop()\n\n renderWellKnownResults(hostname, index.skills)\n } catch (error) {\n spinner.fail(\n `Well-known search failed: ${error instanceof Error ? error.message : String(error)}`\n )\n process.exit(1)\n }\n return\n }\n\n const spinner = ora('Searching...').start()\n\n try {\n let platformResults: PlatformSearchResult[] = []\n let platformTotal = 0\n let communityResults: SkillsShResult[] = []\n\n const searchPlatform = source === 'platform' || source === 'all'\n const searchCommunity = source === 'community' || source === 'all'\n\n const promises: Promise<void>[] = []\n\n if (searchPlatform && connected) {\n promises.push(\n (async () => {\n const params = new URLSearchParams({ q: query })\n if (options.type) params.set('type', options.type.toUpperCase())\n if (options.category) params.set('category', options.category)\n\n const data = await registryFetch<PlatformSearchResponse>(\n `/search?${params.toString()}`\n )\n platformResults = data.results\n platformTotal = data.total\n })()\n )\n }\n\n if (searchCommunity) {\n promises.push(\n (async () => {\n communityResults = await searchSkillsSh(query, 10)\n })()\n )\n }\n\n await Promise.all(promises)\n\n spinner.stop()\n\n const hasResults = platformResults.length > 0 || communityResults.length > 0\n\n if (!hasResults) {\n renderNoResults(query)\n return\n }\n\n if (platformResults.length > 0) {\n renderPlatformResults(platformResults, platformTotal)\n }\n\n if (communityResults.length > 0) {\n renderCommunityResults(communityResults)\n }\n\n // Show install hint for community results\n if (communityResults.length > 0) {\n const example = communityResults[0]!\n process.stdout.write(\n chalk.dim(' Example: ') +\n chalk.white(`agentver install ${toGitInstallSource(example)}`) +\n '\\n'\n )\n }\n } catch (error) {\n spinner.fail(`Search failed: ${error instanceof Error ? error.message : String(error)}`)\n process.exit(1)\n }\n }\n )\n}\n","import { z } from 'zod'\n\nconst SKILLS_SH_API = 'https://skills.sh/api/search'\nconst SKILLS_SH_TIMEOUT_MS = 5_000\n\nconst skillsShSkillSchema = z.object({\n id: z.string(),\n skillId: z.string(),\n name: z.string(),\n installs: z.number(),\n source: z.string(),\n})\n\nconst skillsShResponseSchema = z.object({\n query: z.string(),\n searchType: z.string(),\n skills: z.array(skillsShSkillSchema),\n count: z.number(),\n duration_ms: z.number(),\n})\n\nexport type SkillsShSkill = z.infer<typeof skillsShSkillSchema>\n\nexport type SkillsShResult = {\n id: string\n name: string\n description: string\n installCount: number\n source: string\n url: string\n}\n\nfunction toResult(skill: SkillsShSkill): SkillsShResult {\n return {\n id: skill.id,\n name: skill.name,\n description: '',\n installCount: skill.installs,\n source: skill.source,\n url: `https://skills.sh/${skill.id}`,\n }\n}\n\n/**\n * Build the install-friendly git source from a skills.sh result.\n * Maps `owner/repo` + skill name to `github.com/{owner}/{repo}/{name}`.\n */\nexport function toGitInstallSource(result: SkillsShResult): string {\n return `github.com/${result.source}/${result.name}`\n}\n\n/**\n * Search the skills.sh public API.\n * Returns an empty array on any failure — never throws.\n */\nexport async function searchSkillsSh(query: string, limit?: number): Promise<SkillsShResult[]> {\n const params = new URLSearchParams({ q: query })\n if (limit !== undefined) {\n params.set('limit', String(limit))\n }\n\n const url = `${SKILLS_SH_API}?${params.toString()}`\n\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), SKILLS_SH_TIMEOUT_MS)\n\n try {\n const response = await fetch(url, {\n method: 'GET',\n signal: controller.signal,\n headers: {\n Accept: 'application/json',\n },\n })\n\n clearTimeout(timeoutId)\n\n if (!response.ok) {\n return []\n }\n\n const raw: unknown = await response.json()\n const parsed = skillsShResponseSchema.safeParse(raw)\n\n if (!parsed.success) {\n return []\n }\n\n return parsed.data.skills.map(toResult)\n } catch {\n clearTimeout(timeoutId)\n return []\n }\n}\n","import type { ManifestV2Package, StatusResult } from '@agentver/shared'\nimport chalk from 'chalk'\nimport type { Command } from 'commander'\nimport { readFilesFromDirectory } from '../git/fetcher.js'\nimport { resolveRef } from '../git/index.js'\nimport type { GitSource as CliGitSource } from '../git/types.js'\nimport { createSpinner, isJSONMode, outputSuccess } from '../output'\nimport { resolveReadPath } from '../storage/canonical.js'\nimport { computeSha256FromFiles } from '../storage/integrity.js'\nimport { readLockfile } from '../storage/lockfile.js'\nimport { readManifest } from '../storage/manifest.js'\n\ntype StatusCategory = 'up-to-date' | 'modified' | 'upstream' | 'both' | 'unknown'\n\ntype PackageStatus = {\n name: string\n category: StatusCategory\n sourceUri: string\n ref: string\n commit: string\n upstreamCommit?: string\n agents: string[]\n pinned?: boolean\n error?: string\n}\n\ntype StatusOutput = {\n packages: PackageStatus[]\n total: number\n modified: number\n upstream: number\n upToDate: number\n unknown: number\n}\n\nconst STATUS_SYMBOLS: Record<StatusCategory, string> = {\n 'up-to-date': chalk.green('✓'),\n modified: chalk.yellow('M'),\n upstream: chalk.cyan('U'),\n both: chalk.red('MU'),\n unknown: chalk.dim('?'),\n}\n\nfunction parseManifestUri(uri: string): CliGitSource | null {\n const parts = uri.split('/')\n if (parts.length < 3) return null\n\n return {\n host: parts[0] as CliGitSource['host'],\n owner: parts[1]!,\n repo: parts[2]!,\n path: parts.slice(3).join('/'),\n ref: 'HEAD',\n }\n}\n\nasync function readLocalFiles(\n projectRoot: string,\n packageName: string,\n agents: string[]\n): Promise<Array<{ path: string; content: string }>> {\n // Try canonical path first, fall back to agent-specific paths\n const readPath = resolveReadPath(projectRoot, packageName, agents)\n if (readPath) {\n const files = await readFilesFromDirectory(readPath)\n return files.map((f) => ({ path: f.path, content: f.content }))\n }\n\n return []\n}\n\nasync function checkPackageStatus(\n projectRoot: string,\n name: string,\n manifestEntry: ManifestV2Package,\n lockfileIntegrity: string | undefined,\n offline: boolean\n): Promise<PackageStatus> {\n const { source, agents, pinned } = manifestEntry\n\n // Well-known sources: only check local modification (no git upstream)\n if (source.type === 'well-known') {\n let locallyModified = false\n\n try {\n const localFiles = await readLocalFiles(projectRoot, name, agents)\n if (lockfileIntegrity && localFiles.length > 0) {\n const localIntegrity = computeSha256FromFiles(localFiles)\n locallyModified = localIntegrity !== lockfileIntegrity\n }\n } catch {\n locallyModified = false\n }\n\n return {\n name,\n category: locallyModified ? 'modified' : 'up-to-date',\n sourceUri: source.hostname,\n ref: 'well-known',\n commit: '',\n agents,\n pinned: pinned || undefined,\n }\n }\n\n if (source.uri === 'unknown') {\n return {\n name,\n category: 'unknown',\n sourceUri: source.uri,\n ref: source.ref,\n commit: source.commit,\n agents,\n pinned: pinned || undefined,\n }\n }\n\n let locallyModified = false\n let upstreamChanged = false\n let upstreamCommit: string | undefined\n\n try {\n const localFiles = await readLocalFiles(projectRoot, name, agents)\n\n if (lockfileIntegrity && localFiles.length > 0) {\n const localIntegrity = computeSha256FromFiles(localFiles)\n locallyModified = localIntegrity !== lockfileIntegrity\n }\n } catch {\n locallyModified = false\n }\n\n if (!offline) {\n try {\n const cliSource = parseManifestUri(source.uri)\n if (cliSource) {\n cliSource.ref = source.ref\n const resolved = await resolveRef(cliSource)\n upstreamCommit = resolved.commitSha\n\n if (resolved.commitSha !== source.commit) {\n upstreamChanged = true\n }\n }\n } catch {\n // Network failure — skip upstream check silently\n }\n }\n\n let category: StatusCategory = 'up-to-date'\n if (locallyModified && upstreamChanged) {\n category = 'both'\n } else if (locallyModified) {\n category = 'modified'\n } else if (upstreamChanged) {\n category = 'upstream'\n }\n\n return {\n name,\n category,\n sourceUri: source.uri,\n ref: source.ref,\n commit: source.commit,\n upstreamCommit: upstreamChanged ? upstreamCommit : undefined,\n agents,\n pinned: pinned || undefined,\n }\n}\n\nfunction formatStatusLine(status: PackageStatus): string {\n const symbol = STATUS_SYMBOLS[status.category]\n const padding = status.category === 'both' ? '' : ' '\n\n if (status.category === 'unknown') {\n return ` ${symbol} ${chalk.white(status.name)} ${chalk.dim('unknown source')}`\n }\n\n const shortCommit = status.commit.slice(0, 7)\n const upstream = status.upstreamCommit\n ? ` ${chalk.dim('→')} ${chalk.cyan(`upstream: ${status.upstreamCommit.slice(0, 7)}`)}`\n : ''\n\n const pinned = status.pinned ? chalk.yellow(' [pinned]') : ''\n\n return ` ${symbol}${padding} ${chalk.white(status.name)}${pinned} ${chalk.dim(status.sourceUri)} ${chalk.cyan(`@${status.ref}`)} ${chalk.dim(`(${shortCommit})`)}${upstream}`\n}\n\nfunction buildStatusOutput(statuses: PackageStatus[]): StatusOutput {\n return {\n packages: statuses,\n total: statuses.length,\n modified: statuses.filter((s) => s.category === 'modified' || s.category === 'both').length,\n upstream: statuses.filter((s) => s.category === 'upstream' || s.category === 'both').length,\n upToDate: statuses.filter((s) => s.category === 'up-to-date').length,\n unknown: statuses.filter((s) => s.category === 'unknown').length,\n }\n}\n\nfunction toStatusResult(output: StatusOutput): StatusResult {\n return {\n packages: output.packages.map((p) => ({\n name: p.name,\n status: p.category,\n modified: p.category === 'modified' || p.category === 'both',\n upstream: p.category === 'upstream' || p.category === 'both',\n pinned: p.pinned || undefined,\n })),\n summary: {\n total: output.total,\n upToDate: output.upToDate,\n modified: output.modified,\n upstream: output.upstream,\n unknown: output.unknown,\n },\n }\n}\n\nexport function registerStatusCommand(program: Command): void {\n program\n .command('status')\n .description('Show status of installed skills (upstream changes, local modifications)')\n .option('--offline', 'Skip upstream checks')\n .option('--json', 'Output as JSON')\n .action(async (options: { offline?: boolean; json?: boolean }) => {\n const jsonMode = isJSONMode() || options.json === true\n const projectRoot = process.cwd()\n const manifest = readManifest(projectRoot)\n const lockfile = readLockfile(projectRoot)\n const entries = Object.entries(manifest.packages)\n\n if (entries.length === 0) {\n if (jsonMode) {\n outputSuccess(toStatusResult(buildStatusOutput([])))\n } else {\n console.log(chalk.dim('No packages installed.'))\n }\n return\n }\n\n const spinner = createSpinner('Checking package status...').start()\n\n const statuses: PackageStatus[] = []\n\n for (const [name, pkg] of entries) {\n spinner.text = `Checking ${name}...`\n\n const lockfileEntry = lockfile.packages[name]\n const status = await checkPackageStatus(\n projectRoot,\n name,\n pkg,\n lockfileEntry?.integrity,\n options.offline ?? false\n )\n statuses.push(status)\n }\n\n spinner.stop()\n\n if (jsonMode) {\n outputSuccess(toStatusResult(buildStatusOutput(statuses)))\n return\n }\n\n console.log(chalk.bold(`\\nInstalled skills (${statuses.length}):\\n`))\n\n for (const status of statuses) {\n console.log(formatStatusLine(status))\n }\n\n console.log()\n })\n}\n","import { existsSync } from 'node:fs'\nimport { join } from 'node:path'\nimport { type AgentId, getSkillPlacementPath } from '@agentver/agent-definitions'\nimport type { ManifestV2Package, ProposeResult } from '@agentver/shared'\nimport chalk from 'chalk'\nimport type { Command } from 'commander'\nimport { readFilesFromDirectory } from '../git/fetcher.js'\nimport { createSpinner, isJSONMode, outputError, outputSuccess } from '../output.js'\nimport { getCredentials } from '../registry/auth.js'\nimport { getPlatformUrl } from '../registry/config.js'\nimport { computeSha256FromFiles } from '../storage/integrity.js'\nimport { readLockfile } from '../storage/lockfile.js'\nimport { readManifest } from '../storage/manifest.js'\n\nconst HTTP_TIMEOUT_MS = 15_000\n\ntype SuggestionFile = {\n path: string\n content: string\n}\n\ntype SuggestionRequest = {\n title: string\n description?: string\n files: SuggestionFile[]\n}\n\ntype SuggestionResponse = {\n id: string\n title: string\n url?: string\n}\n\ntype SuggestionOutcome = {\n package: string\n success: boolean\n result?: ProposeResult\n error?: string\n}\n\nasync function readLocalFiles(\n projectRoot: string,\n packageName: string,\n agents: string[]\n): Promise<SuggestionFile[]> {\n for (const agentId of agents) {\n const placementPath = getSkillPlacementPath(agentId as AgentId, packageName, 'project')\n if (!placementPath) continue\n\n const fullPath = join(projectRoot, placementPath)\n if (!existsSync(fullPath)) continue\n\n const files = await readFilesFromDirectory(fullPath)\n return files.map((f) => ({ path: f.path, content: f.content }))\n }\n\n return []\n}\n\nasync function postToPlatform<T>(path: string, body: unknown): Promise<T> {\n const platformUrl = getPlatformUrl()\n if (!platformUrl) {\n throw new Error('Not connected to a platform. Run `agentver login <url>` first.')\n }\n\n const creds = await getCredentials()\n if (!creds?.token && !creds?.apiKey) {\n throw new Error('Not connected to a platform. Run `agentver login <url>` first.')\n }\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'User-Agent': 'agentver-cli',\n }\n\n if (creds.token) {\n headers.Authorization = `Bearer ${creds.token}`\n } else if (creds.apiKey) {\n headers['X-API-Key'] = creds.apiKey\n }\n\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), HTTP_TIMEOUT_MS)\n\n try {\n const url = `${platformUrl}/api/v1${path}`\n const response = await fetch(url, {\n method: 'POST',\n headers,\n body: JSON.stringify(body),\n signal: controller.signal,\n })\n clearTimeout(timeoutId)\n\n if (!response.ok) {\n const errorBody = await response.text().catch(() => 'Unknown error')\n throw new Error(`Platform returned ${response.status}: ${errorBody}`)\n }\n\n return (await response.json()) as T\n } catch (error) {\n clearTimeout(timeoutId)\n if (error instanceof Error && error.name === 'AbortError') {\n throw new Error('Platform request timed out')\n }\n throw error\n }\n}\n\nfunction buildEndpoint(manifestEntry: ManifestV2Package, packageName: string): string {\n if (manifestEntry.source.type !== 'git') return ''\n const orgSlug = manifestEntry.source.uri.split('/')[1] ?? ''\n return `/skills/@${orgSlug}/${packageName}/suggestions`\n}\n\nasync function submitSuggestion(\n projectRoot: string,\n packageName: string,\n manifestEntry: ManifestV2Package,\n title: string,\n description?: string\n): Promise<{ localFiles: SuggestionFile[]; result: SuggestionResponse }> {\n const localFiles = await readLocalFiles(projectRoot, packageName, manifestEntry.agents)\n\n if (localFiles.length === 0) {\n throw new Error(`No local files found for \"${packageName}\".`)\n }\n\n const endpoint = buildEndpoint(manifestEntry, packageName)\n\n const requestBody: SuggestionRequest = {\n title,\n description,\n files: localFiles,\n }\n\n const result = await postToPlatform<SuggestionResponse>(endpoint, requestBody)\n return { localFiles, result }\n}\n\nexport function registerSuggestCommand(program: Command): void {\n program\n .command('suggest <title>')\n .alias('propose')\n .description('Create a suggestion from local modifications (requires platform connection)')\n .option('-d, --description <text>', 'Suggestion description')\n .option('--name <name>', 'Target a specific modified package by name')\n .option('--dry-run', 'Show what would be suggested without submitting')\n .action(\n async (title: string, options: { description?: string; name?: string; dryRun?: boolean }) => {\n const json = isJSONMode()\n const platformUrl = getPlatformUrl()\n const creds = await getCredentials()\n\n if (!options.dryRun && (!platformUrl || (!creds?.token && !creds?.apiKey))) {\n if (json) {\n outputError(\n 'AUTH_REQUIRED',\n 'Not connected to a platform. Run `agentver login <url>` first.'\n )\n process.exit(1)\n }\n console.error(chalk.red('Not connected to a platform. Run `agentver login <url>` first.'))\n process.exit(1)\n }\n\n const projectRoot = process.cwd()\n const manifest = readManifest(projectRoot)\n const lockfile = readLockfile(projectRoot)\n\n const modifiedPackages: string[] = []\n\n for (const [name, manifestEntry] of Object.entries(manifest.packages)) {\n const lockfileEntry = lockfile.packages[name]\n if (!lockfileEntry) continue\n\n const { agents } = manifestEntry\n const localFiles = await readLocalFiles(projectRoot, name, agents)\n if (localFiles.length === 0) continue\n\n const currentIntegrity = computeSha256FromFiles(localFiles)\n if (currentIntegrity !== lockfileEntry.integrity) {\n modifiedPackages.push(name)\n }\n }\n\n if (modifiedPackages.length === 0) {\n if (json) {\n outputError('NO_CHANGES', 'No modified packages detected.')\n process.exit(1)\n }\n console.log(chalk.dim('No modified packages detected.'))\n return\n }\n\n const targets = options.name\n ? modifiedPackages.filter((n) => n === options.name)\n : modifiedPackages\n\n if (targets.length === 0 && options.name) {\n const message = `Package \"${options.name}\" is not in the modified list. Modified: ${modifiedPackages.join(', ')}`\n if (json) {\n outputError('NOT_FOUND', message)\n process.exit(1)\n }\n console.error(chalk.red(message))\n process.exit(1)\n }\n\n const unsupportedTargets = targets.filter(\n (name) => manifest.packages[name]?.source.type === 'well-known'\n )\n\n if (unsupportedTargets.length > 0) {\n for (const name of unsupportedTargets) {\n const source = manifest.packages[name]!.source\n if (json) {\n outputError(\n 'UNSUPPORTED_SOURCE',\n `Package \"${name}\" was installed from a well-known source. Suggestions are not supported.`\n )\n } else {\n console.error(\n chalk.red(\n `Package \"${name}\" was installed from a well-known source (${source.type === 'well-known' ? source.hostname : 'unknown'}).`\n )\n )\n console.error(chalk.dim('Suggestions are not supported for well-known sources.'))\n }\n }\n }\n\n const validTargets = targets.filter((n) => !unsupportedTargets.includes(n))\n\n if (validTargets.length === 0) {\n process.exit(1)\n }\n\n if (options.dryRun) {\n const dryRunResults = []\n\n for (const targetName of validTargets) {\n const manifestEntry = manifest.packages[targetName]!\n const localFiles = await readLocalFiles(projectRoot, targetName, manifestEntry.agents)\n const endpoint = `/api/v1${buildEndpoint(manifestEntry, targetName)}`\n\n dryRunResults.push({\n package: targetName,\n title,\n description: options.description,\n files: localFiles.map((f) => ({\n path: f.path,\n contentLength: f.content.length,\n })),\n endpoint,\n })\n }\n\n if (json) {\n outputSuccess(dryRunResults)\n } else {\n console.log(chalk.bold('\\nDry run — suggestion preview:\\n'))\n for (const entry of dryRunResults) {\n console.log(` ${chalk.dim('Package:')} ${entry.package}`)\n console.log(` ${chalk.dim('Title:')} ${entry.title}`)\n if (entry.description) {\n console.log(` ${chalk.dim('Desc:')} ${entry.description}`)\n }\n console.log(` ${chalk.dim('Files:')}`)\n for (const f of entry.files) {\n console.log(` ${chalk.cyan(f.path)} (${f.contentLength} bytes)`)\n }\n console.log(` ${chalk.dim('Endpoint:')} ${entry.endpoint}`)\n console.log()\n }\n console.log(\n chalk.dim(\n `${dryRunResults.length} package${dryRunResults.length === 1 ? '' : 's'} would get suggestions.`\n )\n )\n }\n return\n }\n\n const outcomes: SuggestionOutcome[] = []\n\n for (const targetName of validTargets) {\n const manifestEntry = manifest.packages[targetName]!\n const spinner = createSpinner(`Creating suggestion for ${targetName}...`).start()\n\n try {\n const { result } = await submitSuggestion(\n projectRoot,\n targetName,\n manifestEntry,\n title,\n options.description\n )\n\n const proposeResult: ProposeResult = {\n proposalId: result.id,\n title: result.title ?? title,\n url: result.url ?? '',\n }\n\n outcomes.push({ package: targetName, success: true, result: proposeResult })\n\n if (!json) {\n spinner.succeed(\n `Created suggestion for ${chalk.bold(targetName)}: ${chalk.bold(proposeResult.title)}`\n )\n if (result.url) {\n console.log(chalk.dim(` ${result.url}`))\n }\n } else {\n spinner.stop()\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n outcomes.push({ package: targetName, success: false, error: message })\n\n if (!json) {\n spinner.fail(`Failed to create suggestion for ${chalk.bold(targetName)}: ${message}`)\n } else {\n spinner.stop()\n }\n }\n }\n\n const succeeded = outcomes.filter((o) => o.success)\n const failed = outcomes.filter((o) => !o.success)\n\n if (json) {\n if (validTargets.length === 1) {\n const outcome = outcomes[0]!\n if (outcome.success) {\n outputSuccess<ProposeResult>(outcome.result!)\n } else {\n outputError('SUGGEST_FAILED', outcome.error!)\n process.exit(1)\n }\n } else {\n outputSuccess(outcomes)\n }\n } else if (validTargets.length > 1) {\n console.log()\n console.log(\n chalk.bold(\n `Created ${succeeded.length} suggestion${succeeded.length === 1 ? '' : 's'}` +\n (failed.length > 0 ? ` (${failed.length} failed)` : '')\n )\n )\n }\n\n if (failed.length > 0 && succeeded.length === 0) {\n process.exit(1)\n }\n }\n )\n}\n","import type { ProposalsResult } from '@agentver/shared'\nimport chalk from 'chalk'\nimport type { Command } from 'commander'\nimport { createSpinner, isJSONMode, outputError, outputSuccess } from '../output.js'\nimport { getCredentials } from '../registry/auth.js'\nimport { getPlatformUrl } from '../registry/config.js'\n\nconst HTTP_TIMEOUT_MS = 15_000\n\ntype SuggestionStatus = 'OPEN' | 'IN_REVIEW' | 'APPROVED' | 'MERGED' | 'REJECTED' | 'CLOSED'\n\ntype Suggestion = {\n id: string\n title: string\n packageSlug: string\n status: SuggestionStatus\n author: string\n createdAt: string\n}\n\ntype SuggestionsResponse = {\n suggestions: Suggestion[]\n}\n\nasync function getFromPlatform<T>(path: string): Promise<T> {\n const platformUrl = getPlatformUrl()\n if (!platformUrl) {\n throw new Error('Not connected to a platform. Run `agentver login <url>` first.')\n }\n\n const creds = await getCredentials()\n if (!creds?.token && !creds?.apiKey) {\n throw new Error('Not connected to a platform. Run `agentver login <url>` first.')\n }\n\n const headers: Record<string, string> = {\n Accept: 'application/json',\n 'User-Agent': 'agentver-cli',\n }\n\n if (creds.token) {\n headers.Authorization = `Bearer ${creds.token}`\n } else if (creds.apiKey) {\n headers['X-API-Key'] = creds.apiKey\n }\n\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), HTTP_TIMEOUT_MS)\n\n try {\n const url = `${platformUrl}/api/v1${path}`\n const response = await fetch(url, {\n method: 'GET',\n headers,\n signal: controller.signal,\n })\n clearTimeout(timeoutId)\n\n if (!response.ok) {\n const errorBody = await response.text().catch(() => 'Unknown error')\n throw new Error(`Platform returned ${response.status}: ${errorBody}`)\n }\n\n return (await response.json()) as T\n } catch (error) {\n clearTimeout(timeoutId)\n if (error instanceof Error && error.name === 'AbortError') {\n throw new Error('Platform request timed out')\n }\n throw error\n }\n}\n\nfunction formatDate(isoDate: string): string {\n try {\n const date = new Date(isoDate)\n const year = date.getFullYear()\n const month = String(date.getMonth() + 1).padStart(2, '0')\n const day = String(date.getDate()).padStart(2, '0')\n return `${year}-${month}-${day}`\n } catch {\n return isoDate\n }\n}\n\nconst STATUS_COLOURS: Record<SuggestionStatus, (text: string) => string> = {\n OPEN: chalk.green,\n IN_REVIEW: chalk.yellow,\n APPROVED: chalk.blue,\n MERGED: chalk.magenta,\n REJECTED: chalk.red,\n CLOSED: chalk.dim,\n}\n\nfunction formatSuggestionRow(\n suggestion: Suggestion,\n idWidth: number,\n titleWidth: number,\n slugWidth: number,\n authorWidth: number\n): string {\n const id = chalk.dim(`#${suggestion.id}`.padEnd(idWidth + 1))\n const title = suggestion.title.padEnd(titleWidth)\n const slug = chalk.cyan(suggestion.packageSlug.padEnd(slugWidth))\n const statusFn = STATUS_COLOURS[suggestion.status] ?? chalk.dim\n const status = statusFn(suggestion.status.padEnd(11))\n const author = chalk.dim(suggestion.author.padEnd(authorWidth))\n const date = chalk.dim(formatDate(suggestion.createdAt))\n\n return ` ${id} ${title} ${slug} ${status} ${author} ${date}`\n}\n\nexport function registerSuggestionsCommand(program: Command): void {\n program\n .command('suggestions [name]')\n .alias('proposals')\n .description('List suggestions for a skill (requires platform connection)')\n .option('-s, --status <status>', 'Filter by status (open, closed, merged, all)', 'open')\n .action(async (name: string | undefined, options: { status: string }) => {\n const json = isJSONMode()\n const platformUrl = getPlatformUrl()\n const creds = await getCredentials()\n\n if (!platformUrl || (!creds?.token && !creds?.apiKey)) {\n if (json) {\n outputError(\n 'AUTH_REQUIRED',\n 'Not connected to a platform. Run `agentver login <url>` first.'\n )\n process.exit(1)\n }\n console.error(chalk.red('Not connected to a platform. Run `agentver login <url>` first.'))\n process.exit(1)\n }\n\n const spinner = createSpinner('Fetching suggestions...').start()\n\n try {\n const queryParams = new URLSearchParams()\n if (name) {\n queryParams.set('package', name)\n }\n\n const statusFilter = options.status.toUpperCase()\n if (statusFilter !== 'ALL') {\n queryParams.set('status', statusFilter)\n }\n\n const queryString = queryParams.toString()\n const queryPath = `/proposals${queryString ? `?${queryString}` : ''}`\n const { suggestions } = await getFromPlatform<SuggestionsResponse>(queryPath)\n\n spinner.stop()\n\n if (json) {\n outputSuccess<ProposalsResult>({\n proposals: suggestions.map((s) => ({\n id: s.id,\n title: s.title,\n status: s.status,\n author: s.author,\n packageName: s.packageSlug,\n createdAt: s.createdAt,\n })),\n })\n return\n }\n\n if (suggestions.length === 0) {\n const filterLabel = statusFilter === 'ALL' ? '' : ` ${options.status}`\n console.log(chalk.dim(`No${filterLabel} suggestions found.`))\n return\n }\n\n const idWidth = Math.max(...suggestions.map((s) => `#${s.id}`.length))\n const titleWidth = Math.max(...suggestions.map((s) => s.title.length))\n const slugWidth = Math.max(...suggestions.map((s) => s.packageSlug.length))\n const authorWidth = Math.max(...suggestions.map((s) => s.author.length))\n\n const heading =\n statusFilter === 'ALL'\n ? `Suggestions (${suggestions.length})`\n : `${options.status.charAt(0).toUpperCase() + options.status.slice(1)} suggestions (${suggestions.length})`\n\n console.log(chalk.bold(`\\n${heading}:\\n`))\n\n for (const suggestion of suggestions) {\n console.log(formatSuggestionRow(suggestion, idWidth, titleWidth, slugWidth, authorWidth))\n }\n\n console.log()\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n spinner.fail(`Failed to fetch suggestions: ${message}`)\n if (json) {\n outputError('FETCH_FAILED', message)\n }\n process.exit(1)\n }\n })\n}\n","import { createHash } from 'node:crypto'\nimport { hostname } from 'node:os'\nimport type { SyncResult } from '@agentver/shared'\nimport chalk from 'chalk'\nimport type { Command } from 'commander'\nimport { createSpinner, isJSONMode, outputError, outputSuccess } from '../output.js'\nimport { getCredentials } from '../registry/auth.js'\nimport { getPlatformUrl } from '../registry/config.js'\nimport { readManifest } from '../storage/manifest.js'\n\nconst SYNC_TIMEOUT_MS = 30_000\n\ntype SyncGitSource = {\n type: 'git'\n uri: string\n path: string\n ref: string\n commit: string\n}\n\ntype SyncWellKnownSource = {\n type: 'well-known'\n baseUrl: string\n hostname: string\n skillName: string\n}\n\ntype SyncPackageEntry = {\n source: SyncGitSource | SyncWellKnownSource\n agents: string[]\n modified: boolean\n}\n\ntype SyncResponse = {\n synced: number\n removed: number\n}\n\nfunction getMachineId(): string {\n return createHash('sha256').update(hostname()).digest('hex')\n}\n\nexport function registerSyncCommand(program: Command): void {\n program\n .command('sync')\n .description('Push local installation state to platform (requires platform connection)')\n .action(async () => {\n const platformUrl = getPlatformUrl()\n if (!platformUrl) {\n if (isJSONMode()) {\n outputError(\n 'AUTH_REQUIRED',\n 'Not connected to a platform. Run `agentver login <url>` first.'\n )\n process.exit(1)\n }\n console.error(\n chalk.red('Not connected to a platform.') +\n ' Run ' +\n chalk.cyan('`agentver login <url>`') +\n ' first.'\n )\n process.exit(1)\n }\n\n const creds = await getCredentials()\n if (!creds?.token && !creds?.apiKey) {\n if (isJSONMode()) {\n outputError(\n 'AUTH_REQUIRED',\n 'Not connected to a platform. Run `agentver login <url>` first.'\n )\n process.exit(1)\n }\n console.error(\n chalk.red('Not connected to a platform.') +\n ' Run ' +\n chalk.cyan('`agentver login <url>`') +\n ' first.'\n )\n process.exit(1)\n }\n\n const projectRoot = process.cwd()\n const manifest = readManifest(projectRoot)\n const packageEntries = Object.entries(manifest.packages)\n\n const spinner = createSpinner('Syncing installation state to platform...').start()\n\n const packageNames = packageEntries.map(([name]) => name)\n const packages: Record<string, SyncPackageEntry> = {}\n\n for (const [name, pkg] of packageEntries) {\n const source: SyncGitSource | SyncWellKnownSource =\n pkg.source.type === 'git'\n ? {\n type: 'git',\n uri: pkg.source.uri,\n path: pkg.source.path,\n ref: pkg.source.ref,\n commit: pkg.source.commit,\n }\n : {\n type: 'well-known',\n baseUrl: pkg.source.baseUrl,\n hostname: pkg.source.hostname,\n skillName: pkg.source.skillName,\n }\n\n packages[name] = {\n source,\n agents: pkg.agents,\n modified: pkg.modified,\n }\n }\n\n const machineId = getMachineId()\n\n const authHeaders: Record<string, string> = {}\n if (creds.token) {\n authHeaders.Authorization = `Bearer ${creds.token}`\n } else if (creds.apiKey) {\n authHeaders['X-API-Key'] = creds.apiKey\n }\n\n try {\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), SYNC_TIMEOUT_MS)\n\n const response = await fetch(`${platformUrl}/api/v1/installations/sync`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...authHeaders,\n },\n body: JSON.stringify({\n machineId,\n packages,\n }),\n signal: controller.signal,\n })\n\n clearTimeout(timeoutId)\n\n if (!response.ok) {\n const errorText = await response.text().catch(() => 'Unknown error')\n if (isJSONMode()) {\n spinner.stop()\n outputError('SYNC_FAILED', `Sync failed (${response.status}): ${errorText}`)\n } else {\n spinner.fail(`Sync failed (${response.status}): ${errorText}`)\n }\n process.exit(1)\n }\n\n const result = (await response.json()) as SyncResponse\n\n if (isJSONMode()) {\n outputSuccess<SyncResult>({\n synced: result.synced,\n machineId,\n packages: packageNames,\n })\n return\n }\n\n spinner.succeed(\n `Synced ${chalk.green(String(result.synced))} skill${result.synced === 1 ? '' : 's'} to platform` +\n (result.removed > 0 ? chalk.dim(` (${result.removed} removed)`) : '')\n )\n } catch (error) {\n if (error instanceof DOMException && error.name === 'AbortError') {\n if (isJSONMode()) {\n spinner.stop()\n outputError('TIMEOUT', 'Sync timed out. The platform may be experiencing issues.')\n } else {\n spinner.fail('Sync timed out. The platform may be experiencing issues.')\n }\n } else {\n if (isJSONMode()) {\n spinner.stop()\n outputError('SYNC_FAILED', error instanceof Error ? error.message : String(error))\n } else {\n spinner.fail(`Sync failed: ${error instanceof Error ? error.message : String(error)}`)\n }\n }\n process.exit(1)\n }\n })\n}\n","import { join } from 'node:path'\nimport type { AgentId } from '@agentver/agent-definitions'\nimport { getSkillPlacementPath } from '@agentver/agent-definitions'\nimport type { UpdateResult } from '@agentver/shared'\nimport chalk from 'chalk'\nimport type { Command } from 'commander'\nimport ora from 'ora'\nimport prompts from 'prompts'\nimport { readFilesFromDirectory } from '../git/fetcher.js'\nimport { fetchFiles, resolveRef } from '../git/index.js'\nimport type { GitSource as CliGitSource, ResolvedRef } from '../git/types.js'\nimport { createSpinner, isJSONMode, outputError, outputSuccess } from '../output.js'\nimport { resolveReadPath } from '../storage/canonical.js'\nimport { computeSha256FromFiles } from '../storage/integrity'\nimport { readLockfile } from '../storage/lockfile'\nimport { readManifest } from '../storage/manifest'\nimport { applyPatch, generatePatch, removePatch, savePatch } from '../storage/patches.js'\nimport { type BackupState, cleanupBackup, createBackup, restoreBackup } from '../utils/backup'\nimport { installPackage } from './install'\n\ntype UpdateInfo = {\n name: string\n currentCommit: string\n latestCommit: string\n ref: string\n sourceUri: string\n sourcePath: string\n locallyModified: boolean\n}\n\ntype UpdateAction = 'replace' | 'patch' | 'skip'\n\nfunction parseUriToCliSource(\n uri: string,\n path: string,\n ref: string,\n commit?: string\n): CliGitSource | null {\n const parts = uri.split('/')\n if (parts.length < 3) return null\n\n return {\n host: parts[0] as CliGitSource['host'],\n owner: parts[1]!,\n repo: parts[2]!,\n path,\n ref,\n commit,\n }\n}\n\nasync function checkLocalModifications(\n projectRoot: string,\n packageName: string,\n agents: string[]\n): Promise<boolean> {\n const lockfile = readLockfile(projectRoot)\n const lockEntry = lockfile.packages[packageName]\n if (!lockEntry) return false\n\n const shortName = packageName.split('/').pop()!\n\n const readPath = resolveReadPath(projectRoot, shortName, agents)\n if (readPath) {\n try {\n const localFiles = await readFilesFromDirectory(readPath)\n if (localFiles.length === 0) return false\n\n const localIntegrity = computeSha256FromFiles(\n localFiles.map((f) => ({ path: f.path, content: f.content }))\n )\n\n return localIntegrity !== lockEntry.integrity\n } catch {\n return false\n }\n }\n\n return false\n}\n\nasync function promptUpdateAction(packageName: string): Promise<UpdateAction> {\n const { action } = await prompts({\n type: 'select',\n name: 'action',\n message: `\"${packageName}\" has local modifications. What would you like to do?`,\n choices: [\n { title: 'Replace — discard local changes, apply upstream', value: 'replace' },\n { title: 'Patch — save local changes, apply upstream, reapply patch', value: 'patch' },\n { title: 'Skip — skip this package', value: 'skip' },\n ],\n initial: 1,\n })\n\n return (action as UpdateAction) ?? 'skip'\n}\n\nasync function handlePatchUpdate(\n update: UpdateInfo,\n projectRoot: string,\n agents: string[],\n spinner: ReturnType<typeof ora>\n): Promise<{ commitSha: string } | null> {\n const lockfile = readLockfile(projectRoot)\n const lockEntry = lockfile.packages[update.name]\n if (!lockEntry) return null\n\n const shortName = update.name.split('/').pop()!\n\n spinner.text = `Fetching original files for ${update.name} at locked commit...`\n\n const lockedSource = parseUriToCliSource(\n update.sourceUri,\n update.sourcePath,\n update.ref,\n update.currentCommit\n )\n if (!lockedSource) return null\n\n const lockedResolved: ResolvedRef = {\n source: lockedSource,\n commitSha: update.currentCommit,\n }\n\n let baseFiles: Array<{ path: string; content: string }>\n try {\n const fetchResult = await fetchFiles(lockedResolved)\n baseFiles = fetchResult.files.map((f) => ({ path: f.path, content: f.content }))\n } catch (error) {\n spinner.warn(\n `Could not fetch original files for ${update.name}: ${error instanceof Error ? error.message : String(error)}`\n )\n return null\n }\n\n const localFileArrays: Array<{ path: string; content: string }> = []\n const readPath = resolveReadPath(projectRoot, shortName, agents)\n if (readPath) {\n try {\n const files = await readFilesFromDirectory(readPath)\n localFileArrays.push(...files.map((f) => ({ path: f.path, content: f.content })))\n } catch {\n // Best-effort read\n }\n }\n\n spinner.text = `Generating patch for ${update.name}...`\n\n const patchContent = generatePatch(baseFiles, localFileArrays, update.name)\n\n if (!patchContent || patchContent.trim() === '') {\n spinner.info(\n `No meaningful differences found for ${update.name}, proceeding with standard update.`\n )\n return null\n }\n\n const patchPath = savePatch(projectRoot, update.name, patchContent)\n spinner.text = `Patch saved to ${patchPath}`\n\n spinner.text = `Applying upstream update for ${update.name}...`\n\n const sourceUrl = update.sourcePath\n ? `${update.sourceUri}/${update.sourcePath}@${update.ref}`\n : `${update.sourceUri}@${update.ref}`\n\n const agentId = agents[0]\n const result = await installPackage(sourceUrl, { agent: agentId })\n\n spinner.text = `Reapplying local patch for ${update.name}...`\n\n const applyResult = applyPatch(projectRoot, patchContent)\n\n if (applyResult.applied) {\n removePatch(projectRoot, update.name)\n spinner.succeed(`${chalk.green(update.name)}: updated and local patch reapplied successfully`)\n } else {\n spinner.warn(\n `${chalk.yellow(update.name)}: updated but patch had conflicts in: ${applyResult.conflicts.join(', ')}`\n )\n console.log(chalk.dim(` Patch saved at: ${patchPath}`))\n console.log(chalk.dim(' Review the patch file and apply remaining changes manually.'))\n }\n\n return { commitSha: result.commitSha }\n}\n\nexport function registerUpdateCommand(program: Command): void {\n program\n .command('update [name]')\n .description('Update installed skills to their latest upstream version')\n .option('--dry-run', 'Show what would be updated without making changes')\n .action(async (name: string | undefined, options: { dryRun?: boolean }) => {\n const jsonMode = isJSONMode()\n const projectRoot = process.cwd()\n const manifest = readManifest(projectRoot)\n const packages = name ? { [name]: manifest.packages[name] } : manifest.packages\n\n const packageNames = Object.keys(packages).filter((n) => packages[n])\n\n if (packageNames.length === 0) {\n if (jsonMode) {\n outputSuccess<UpdateResult>({ updated: [], skipped: [] })\n return\n }\n console.log(\n chalk.dim(name ? `Package \"${name}\" is not installed.` : 'No packages installed.')\n )\n return\n }\n\n const pinnedNames: string[] = []\n const updatable = packageNames.filter((n) => {\n const pkg = packages[n]\n if (!pkg) return false\n if (pkg.pinned === true) {\n pinnedNames.push(n)\n return false\n }\n return pkg.source.type === 'git' && pkg.source.uri !== 'unknown'\n })\n\n if (pinnedNames.length > 0 && !jsonMode) {\n for (const pinnedName of pinnedNames) {\n console.log(chalk.dim(`Skipping ${pinnedName} (pinned)`))\n }\n }\n\n if (updatable.length === 0) {\n if (jsonMode) {\n outputSuccess<UpdateResult>({\n updated: [],\n skipped: [\n ...pinnedNames.map((n) => ({ name: n, reason: 'pinned' })),\n ...packageNames\n .filter((n) => !pinnedNames.includes(n))\n .map((n) => ({ name: n, reason: 'No known Git source' })),\n ],\n })\n return\n }\n if (pinnedNames.length === 0) {\n console.log(\n chalk.dim(\n 'No packages with known Git sources. Reinstall packages using Git source URLs to enable updates.'\n )\n )\n }\n return\n }\n\n const spinner = createSpinner('Checking for upstream changes...').start()\n\n try {\n const updates: UpdateInfo[] = []\n\n for (const pkgName of updatable) {\n const pkg = packages[pkgName]!\n if (pkg.source.type !== 'git') continue\n\n const { uri, path, ref, commit: currentCommit } = pkg.source\n\n const cliSource = parseUriToCliSource(uri, path, ref)\n if (!cliSource) continue\n\n try {\n const resolved = await resolveRef(cliSource)\n\n if (resolved.commitSha !== currentCommit) {\n const locallyModified = await checkLocalModifications(\n projectRoot,\n pkgName,\n pkg.agents\n )\n\n updates.push({\n name: pkgName,\n currentCommit,\n latestCommit: resolved.commitSha,\n ref,\n sourceUri: uri,\n sourcePath: path,\n locallyModified,\n })\n }\n } catch {\n spinner.warn(`Could not check upstream for ${pkgName}`)\n }\n }\n\n spinner.stop()\n\n if (updates.length === 0) {\n if (jsonMode) {\n outputSuccess<UpdateResult>({ updated: [], skipped: [] })\n return\n }\n console.log(chalk.green('All packages are up to date.'))\n return\n }\n\n if (!jsonMode) {\n console.log(chalk.bold(`\\nUpstream changes available (${updates.length}):\\n`))\n\n for (const update of updates) {\n const modifiedIndicator = update.locallyModified\n ? ` ${chalk.yellow('\\u26a0 locally modified')}`\n : ''\n console.log(\n ` ${chalk.green(update.name)}: ${chalk.dim(update.currentCommit.slice(0, 7))} \\u2192 ${chalk.cyan(update.latestCommit.slice(0, 7))} ${chalk.dim(`(${update.ref})`)}${modifiedIndicator}`\n )\n }\n\n console.log()\n }\n\n if (options.dryRun) {\n if (jsonMode) {\n outputSuccess<UpdateResult>({\n updated: [],\n skipped: updates.map((u) => ({ name: u.name, reason: 'dry-run' })),\n })\n return\n }\n console.log(`${chalk.yellow('[dry-run]')} No changes made.`)\n return\n }\n\n if (!jsonMode) {\n const { confirmed } = await prompts({\n type: 'confirm',\n name: 'confirmed',\n message: `Update ${updates.length} package(s)?`,\n initial: true,\n })\n\n if (!confirmed) {\n console.log(chalk.dim('Update cancelled.'))\n return\n }\n }\n\n const jsonUpdated: UpdateResult['updated'] = []\n const jsonSkipped: UpdateResult['skipped'] = []\n const results: Array<{ name: string; from: string; to: string; patched?: boolean }> = []\n const failures: Array<{ name: string; error: string }> = []\n const skipped: string[] = []\n\n for (const update of updates) {\n const installedPkg = manifest.packages[update.name]\n const agents = installedPkg?.agents ?? []\n const agentId = agents[0]\n\n if (update.locallyModified) {\n let action: UpdateAction\n\n if (jsonMode) {\n action = 'replace'\n } else {\n action = await promptUpdateAction(update.name)\n }\n\n if (action === 'skip') {\n skipped.push(update.name)\n jsonSkipped.push({ name: update.name, reason: 'User skipped (locally modified)' })\n continue\n }\n\n if (action === 'patch') {\n const updateSpinner = ora(`Processing patch update for ${update.name}...`).start()\n\n try {\n const patchResult = await handlePatchUpdate(\n update,\n projectRoot,\n agents,\n updateSpinner\n )\n\n if (patchResult) {\n results.push({\n name: update.name,\n from: update.currentCommit.slice(0, 7),\n to: patchResult.commitSha.slice(0, 7),\n patched: true,\n })\n jsonUpdated.push({\n name: update.name,\n fromRef: update.currentCommit.slice(0, 7),\n toRef: patchResult.commitSha.slice(0, 7),\n strategy: 'patch',\n })\n continue\n }\n } catch (error) {\n updateSpinner.fail(\n `Patch update failed for ${update.name}: ${error instanceof Error ? error.message : String(error)}`\n )\n failures.push({\n name: update.name,\n error: error instanceof Error ? error.message : String(error),\n })\n jsonSkipped.push({\n name: update.name,\n reason: `Patch failed: ${error instanceof Error ? error.message : String(error)}`,\n })\n continue\n }\n }\n }\n\n const shortName = update.name.split('/').pop()!\n const skillDir =\n resolveReadPath(projectRoot, shortName, agents) ??\n (agentId\n ? join(\n projectRoot,\n getSkillPlacementPath(agentId as AgentId, shortName, 'project') ?? ''\n )\n : null)\n\n let backup: BackupState | null = null\n\n try {\n backup = createBackup(update.name, projectRoot, skillDir)\n\n const sourceUrl = update.sourcePath\n ? `${update.sourceUri}/${update.sourcePath}@${update.ref}`\n : `${update.sourceUri}@${update.ref}`\n\n const result = await installPackage(sourceUrl, { agent: agentId })\n\n cleanupBackup(backup)\n\n results.push({\n name: update.name,\n from: update.currentCommit.slice(0, 7),\n to: result.commitSha.slice(0, 7),\n })\n jsonUpdated.push({\n name: update.name,\n fromRef: update.currentCommit.slice(0, 7),\n toRef: result.commitSha.slice(0, 7),\n strategy: 'replace',\n })\n } catch (error) {\n if (backup) {\n try {\n restoreBackup(backup)\n cleanupBackup(backup)\n } catch {\n // Best-effort restore\n }\n }\n\n failures.push({\n name: update.name,\n error: error instanceof Error ? error.message : String(error),\n })\n jsonSkipped.push({\n name: update.name,\n reason: `Failed: ${error instanceof Error ? error.message : String(error)}`,\n })\n }\n }\n\n if (jsonMode) {\n outputSuccess<UpdateResult>({\n updated: jsonUpdated,\n skipped: [...pinnedNames.map((n) => ({ name: n, reason: 'pinned' })), ...jsonSkipped],\n })\n return\n }\n\n console.log(chalk.bold('\\nUpdate summary:\\n'))\n\n for (const result of results) {\n const patchNote = result.patched ? chalk.dim(' (patch reapplied)') : ''\n console.log(\n ` ${chalk.green('\\u2713')} ${result.name}: ${chalk.dim(result.from)} \\u2192 ${chalk.cyan(result.to)}${patchNote}`\n )\n }\n\n for (const skippedName of skipped) {\n console.log(` ${chalk.dim('\\u2013')} ${skippedName}: ${chalk.dim('skipped')}`)\n }\n\n for (const failure of failures) {\n console.log(` ${chalk.red('\\u2717')} ${failure.name}: ${failure.error}`)\n }\n\n if (failures.length > 0) {\n console.log(chalk.dim('\\nFailed packages were rolled back to their previous versions.'))\n }\n\n console.log()\n } catch (error) {\n if (jsonMode) {\n outputError('UPDATE_FAILED', error instanceof Error ? error.message : String(error))\n process.exit(1)\n }\n spinner.fail(\n `Update check failed: ${error instanceof Error ? error.message : String(error)}`\n )\n process.exit(1)\n }\n })\n}\n","import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs'\nimport { join } from 'node:path'\n\nconst PATCHES_DIR = '.agentver/patches'\nconst CONTEXT_LINES = 3\n\ntype FileEntry = { path: string; content: string }\n\ntype PatchHunk = {\n oldStart: number\n oldCount: number\n newStart: number\n newCount: number\n lines: string[]\n}\n\ntype FilePatch = {\n filePath: string\n hunks: PatchHunk[]\n}\n\ntype ApplyResult = {\n applied: boolean\n conflicts: string[]\n}\n\nfunction getPatchPath(projectRoot: string, packageName: string): string {\n return join(projectRoot, PATCHES_DIR, `${packageName}.patch`)\n}\n\nexport function savePatch(projectRoot: string, packageName: string, patchContent: string): string {\n const patchPath = getPatchPath(projectRoot, packageName)\n const dir = join(projectRoot, PATCHES_DIR)\n\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true })\n }\n\n writeFileSync(patchPath, patchContent, 'utf-8')\n return patchPath\n}\n\nexport function removePatch(projectRoot: string, packageName: string): void {\n const patchPath = getPatchPath(projectRoot, packageName)\n\n if (existsSync(patchPath)) {\n rmSync(patchPath)\n }\n}\n\nexport function generatePatch(\n baseFiles: FileEntry[],\n localFiles: FileEntry[],\n packageName: string\n): string {\n const baseMap = new Map(baseFiles.map((f) => [f.path, f.content]))\n const localMap = new Map(localFiles.map((f) => [f.path, f.content]))\n\n const allPaths = new Set([...baseMap.keys(), ...localMap.keys()])\n const sortedPaths = [...allPaths].sort()\n\n const output: string[] = []\n\n for (const filePath of sortedPaths) {\n const baseContent = baseMap.get(filePath)\n const localContent = localMap.get(filePath)\n\n if (baseContent === localContent) continue\n\n const baseLines = baseContent !== undefined ? baseContent.split('\\n') : []\n const localLines = localContent !== undefined ? localContent.split('\\n') : []\n\n const prefix = `${packageName}/`\n const aPath = baseContent !== undefined ? `a/${prefix}${filePath}` : '/dev/null'\n const bPath = localContent !== undefined ? `b/${prefix}${filePath}` : '/dev/null'\n\n const hunks = computeHunks(baseLines, localLines)\n if (hunks.length === 0) continue\n\n output.push(`--- ${aPath}`)\n output.push(`+++ ${bPath}`)\n\n for (const hunk of hunks) {\n output.push(`@@ -${hunk.oldStart},${hunk.oldCount} +${hunk.newStart},${hunk.newCount} @@`)\n output.push(...hunk.lines)\n }\n }\n\n if (output.length === 0) return ''\n\n return `${output.join('\\n')}\\n`\n}\n\nexport function applyPatch(projectRoot: string, patchContent: string): ApplyResult {\n const filePatches = parsePatch(patchContent)\n const conflicts: string[] = []\n\n for (const filePatch of filePatches) {\n const success = applyFilePatch(projectRoot, filePatch)\n if (!success) {\n conflicts.push(filePatch.filePath)\n }\n }\n\n return {\n applied: conflicts.length === 0,\n conflicts,\n }\n}\n\nfunction applyFilePatch(projectRoot: string, filePatch: FilePatch): boolean {\n const fullPath = join(projectRoot, filePatch.filePath)\n\n const hasOnlyAdditions = filePatch.hunks.every((h) =>\n h.lines.every((l) => l.startsWith('+') || l.startsWith(' '))\n )\n const hasOnlyDeletions = filePatch.hunks.every((h) =>\n h.lines.every((l) => l.startsWith('-') || l.startsWith(' '))\n )\n\n if (hasOnlyAdditions && !existsSync(fullPath)) {\n const content = filePatch.hunks\n .flatMap((h) => h.lines.filter((l) => l.startsWith('+')).map((l) => l.slice(1)))\n .join('\\n')\n\n const dir = join(fullPath, '..')\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true })\n }\n writeFileSync(fullPath, content, 'utf-8')\n return true\n }\n\n if (hasOnlyDeletions && existsSync(fullPath)) {\n rmSync(fullPath)\n return true\n }\n\n if (!existsSync(fullPath)) {\n return false\n }\n\n const currentContent = readFileSync(fullPath, 'utf-8')\n const currentLines = currentContent.split('\\n')\n let offset = 0\n\n for (const hunk of filePatch.hunks) {\n const result = applyHunk(currentLines, hunk, offset)\n if (!result.success) {\n return false\n }\n offset = result.offset\n }\n\n writeFileSync(fullPath, currentLines.join('\\n'), 'utf-8')\n return true\n}\n\nfunction applyHunk(\n lines: string[],\n hunk: PatchHunk,\n offset: number\n): { success: boolean; offset: number } {\n const oldLines = hunk.lines\n .filter((l) => l.startsWith(' ') || l.startsWith('-'))\n .map((l) => l.slice(1))\n\n const newLines = hunk.lines\n .filter((l) => l.startsWith(' ') || l.startsWith('+'))\n .map((l) => l.slice(1))\n\n const targetStart = hunk.oldStart - 1 + offset\n const searchRadius = CONTEXT_LINES\n const searchStart = Math.max(0, targetStart - searchRadius)\n const searchEnd = Math.min(lines.length, targetStart + oldLines.length + searchRadius)\n\n let matchPos = -1\n for (let i = searchStart; i <= searchEnd - oldLines.length; i++) {\n let matches = true\n for (let j = 0; j < oldLines.length; j++) {\n if (lines[i + j] !== oldLines[j]) {\n matches = false\n break\n }\n }\n if (matches) {\n matchPos = i\n break\n }\n }\n\n if (matchPos === -1) {\n return { success: false, offset }\n }\n\n lines.splice(matchPos, oldLines.length, ...newLines)\n\n return {\n success: true,\n offset: offset + (newLines.length - oldLines.length),\n }\n}\n\nfunction parsePatch(patchContent: string): FilePatch[] {\n const lines = patchContent.split('\\n')\n const filePatches: FilePatch[] = []\n\n let currentFile: FilePatch | null = null\n let i = 0\n\n while (i < lines.length) {\n const line = lines[i]!\n\n if (line.startsWith('--- ')) {\n const nextLine = lines[i + 1]\n if (nextLine?.startsWith('+++ ')) {\n const bPath = nextLine.slice(4)\n const filePath = extractFilePath(bPath)\n\n if (filePath) {\n currentFile = { filePath, hunks: [] }\n filePatches.push(currentFile)\n }\n i += 2\n continue\n }\n }\n\n if (line.startsWith('@@ ') && currentFile) {\n const hunkHeader = parseHunkHeader(line)\n if (hunkHeader) {\n const hunk: PatchHunk = { ...hunkHeader, lines: [] }\n\n i++\n while (i < lines.length) {\n const hunkLine = lines[i]!\n if (\n hunkLine.startsWith('--- ') ||\n hunkLine.startsWith('@@ ') ||\n (hunkLine === '' && i === lines.length - 1)\n ) {\n break\n }\n if (hunkLine.startsWith(' ') || hunkLine.startsWith('+') || hunkLine.startsWith('-')) {\n hunk.lines.push(hunkLine)\n }\n i++\n }\n\n currentFile.hunks.push(hunk)\n continue\n }\n }\n\n i++\n }\n\n return filePatches\n}\n\nfunction extractFilePath(bPath: string): string | null {\n if (bPath === '/dev/null') return null\n\n if (bPath.startsWith('b/')) {\n const withoutPrefix = bPath.slice(2)\n const slashIdx = withoutPrefix.indexOf('/')\n if (slashIdx !== -1) {\n return withoutPrefix.slice(slashIdx + 1)\n }\n return withoutPrefix\n }\n\n return bPath\n}\n\nfunction parseHunkHeader(\n line: string\n): { oldStart: number; oldCount: number; newStart: number; newCount: number } | null {\n const match = line.match(/^@@ -(\\d+),(\\d+) \\+(\\d+),(\\d+) @@/)\n if (!match) return null\n\n return {\n oldStart: Number.parseInt(match[1]!, 10),\n oldCount: Number.parseInt(match[2]!, 10),\n newStart: Number.parseInt(match[3]!, 10),\n newCount: Number.parseInt(match[4]!, 10),\n }\n}\n\n// --- Unified diff generation ---\n\ntype EditOp = {\n type: 'equal' | 'insert' | 'delete'\n oldIdx: number\n newIdx: number\n}\n\nfunction computeHunks(oldLines: string[], newLines: string[]): PatchHunk[] {\n const editOps = myersDiff(oldLines, newLines)\n\n const changeGroups: Array<{ start: number; end: number }> = []\n let groupStart = -1\n\n for (let i = 0; i < editOps.length; i++) {\n if (editOps[i]!.type !== 'equal') {\n if (groupStart === -1) groupStart = i\n } else if (groupStart !== -1) {\n changeGroups.push({ start: groupStart, end: i })\n groupStart = -1\n }\n }\n if (groupStart !== -1) {\n changeGroups.push({ start: groupStart, end: editOps.length })\n }\n\n if (changeGroups.length === 0) return []\n\n const mergedGroups = mergeCloseGroups(changeGroups, CONTEXT_LINES * 2)\n const hunks: PatchHunk[] = []\n\n for (const group of mergedGroups) {\n const firstChange = editOps[group.start]!\n const lastChange = editOps[group.end - 1]!\n\n const ctxOldStart = Math.max(0, firstChange.oldIdx - CONTEXT_LINES)\n const ctxNewStart = Math.max(0, firstChange.newIdx - CONTEXT_LINES)\n\n const lastOldIdx = lastChange.type === 'insert' ? lastChange.oldIdx : lastChange.oldIdx + 1\n const lastNewIdx = lastChange.type === 'delete' ? lastChange.newIdx : lastChange.newIdx + 1\n\n const ctxOldEnd = Math.min(oldLines.length, lastOldIdx + CONTEXT_LINES)\n const ctxNewEnd = Math.min(newLines.length, lastNewIdx + CONTEXT_LINES)\n\n const hunkLines: string[] = []\n let oldCount = 0\n let newCount = 0\n\n let oi = ctxOldStart\n let ni = ctxNewStart\n while (oi < firstChange.oldIdx && ni < firstChange.newIdx) {\n hunkLines.push(` ${oldLines[oi]!}`)\n oldCount++\n newCount++\n oi++\n ni++\n }\n\n for (let i = group.start; i < group.end; i++) {\n const op = editOps[i]!\n if (op.type === 'equal') {\n hunkLines.push(` ${oldLines[op.oldIdx]!}`)\n oldCount++\n newCount++\n } else if (op.type === 'delete') {\n hunkLines.push(`-${oldLines[op.oldIdx]!}`)\n oldCount++\n } else {\n hunkLines.push(`+${newLines[op.newIdx]!}`)\n newCount++\n }\n }\n\n const lastOp = editOps[group.end - 1]!\n let trailOi = lastOp.type === 'delete' ? lastOp.oldIdx + 1 : lastOp.oldIdx\n let trailNi = lastOp.type === 'insert' ? lastOp.newIdx + 1 : lastOp.newIdx\n if (lastOp.type === 'equal') {\n trailOi = lastOp.oldIdx + 1\n trailNi = lastOp.newIdx + 1\n }\n\n while (trailOi < ctxOldEnd && trailNi < ctxNewEnd) {\n hunkLines.push(` ${oldLines[trailOi]!}`)\n oldCount++\n newCount++\n trailOi++\n trailNi++\n }\n\n hunks.push({\n oldStart: ctxOldStart + 1,\n oldCount,\n newStart: ctxNewStart + 1,\n newCount,\n lines: hunkLines,\n })\n }\n\n return hunks\n}\n\nfunction mergeCloseGroups(\n groups: Array<{ start: number; end: number }>,\n threshold: number\n): Array<{ start: number; end: number }> {\n if (groups.length === 0) return []\n\n const merged = [{ ...groups[0]! }]\n\n for (let i = 1; i < groups.length; i++) {\n const prev = merged[merged.length - 1]!\n const current = groups[i]!\n const gap = current.start - prev.end\n\n if (gap <= threshold) {\n prev.end = current.end\n } else {\n merged.push({ ...current })\n }\n }\n\n return merged\n}\n\nfunction myersDiff(oldLines: string[], newLines: string[]): EditOp[] {\n const oldLen = oldLines.length\n const newLen = newLines.length\n\n if (oldLen === 0 && newLen === 0) return []\n\n if (oldLen === 0) {\n return newLines.map((_, i) => ({\n type: 'insert' as const,\n oldIdx: 0,\n newIdx: i,\n }))\n }\n\n if (newLen === 0) {\n return oldLines.map((_, i) => ({\n type: 'delete' as const,\n oldIdx: i,\n newIdx: 0,\n }))\n }\n\n const max = oldLen + newLen\n const vSize = 2 * max + 1\n const v = new Int32Array(vSize).fill(0)\n const trace: Int32Array[] = []\n\n const idx = (k: number) => k + max\n\n v[idx(1)] = 0\n\n for (let d = 0; d <= max; d++) {\n trace.push(new Int32Array(v))\n\n for (let k = -d; k <= d; k += 2) {\n let x: number\n if (k === -d || (k !== d && v[idx(k - 1)]! < v[idx(k + 1)]!)) {\n x = v[idx(k + 1)]!\n } else {\n x = v[idx(k - 1)]! + 1\n }\n\n let y = x - k\n\n while (x < oldLen && y < newLen && oldLines[x] === newLines[y]) {\n x++\n y++\n }\n\n v[idx(k)] = x\n\n if (x >= oldLen && y >= newLen) {\n return backtrackMyers(trace, oldLines, newLines, d, max)\n }\n }\n }\n\n return []\n}\n\nfunction backtrackMyers(\n trace: Int32Array[],\n oldLines: string[],\n newLines: string[],\n finalD: number,\n max: number\n): EditOp[] {\n const idx = (k: number) => k + max\n let x = oldLines.length\n let y = newLines.length\n const edits: EditOp[] = []\n\n for (let d = finalD; d > 0; d--) {\n const prev = trace[d - 1]!\n const k = x - y\n\n let prevK: number\n if (k === -d || (k !== d && prev[idx(k - 1)]! < prev[idx(k + 1)]!)) {\n prevK = k + 1\n } else {\n prevK = k - 1\n }\n\n const prevX = prev[idx(prevK)]!\n const prevY = prevX - prevK\n\n while (x > prevX && y > prevY) {\n x--\n y--\n edits.unshift({ type: 'equal', oldIdx: x, newIdx: y })\n }\n\n if (x > prevX) {\n x--\n edits.unshift({ type: 'delete', oldIdx: x, newIdx: y })\n } else if (y > prevY) {\n y--\n edits.unshift({ type: 'insert', oldIdx: x, newIdx: y })\n }\n }\n\n while (x > 0 && y > 0) {\n x--\n y--\n edits.unshift({ type: 'equal', oldIdx: x, newIdx: y })\n }\n\n return edits\n}\n","import { cpSync, existsSync, mkdirSync, mkdtempSync, rmSync } from 'node:fs'\nimport { tmpdir } from 'node:os'\nimport { join } from 'node:path'\nimport type { LockfileV2, ManifestV2 } from '@agentver/shared'\nimport { readLockfile, writeLockfile } from '../storage/lockfile'\nimport { readManifest, writeManifest } from '../storage/manifest'\n\ntype ManifestEntry = ManifestV2['packages'][string]\ntype LockfileEntry = LockfileV2['packages'][string]\n\nexport type BackupState = {\n packageName: string\n projectRoot: string\n tempDir: string\n skillDir: string | null\n manifestEntry: ManifestEntry | null\n lockfileEntry: LockfileEntry | null\n}\n\nexport function createBackup(\n packageName: string,\n projectRoot: string,\n skillDir: string | null\n): BackupState {\n const tempDir = mkdtempSync(join(tmpdir(), 'agentver-backup-'))\n\n const manifest = readManifest(projectRoot)\n const manifestEntry = manifest.packages[packageName] ?? null\n\n const lockfile = readLockfile(projectRoot)\n const lockfileEntry = lockfile.packages[packageName] ?? null\n\n if (skillDir && existsSync(skillDir)) {\n const backupSkillDir = join(tempDir, 'files')\n mkdirSync(backupSkillDir, { recursive: true })\n cpSync(skillDir, backupSkillDir, { recursive: true })\n }\n\n return {\n packageName,\n projectRoot,\n tempDir,\n skillDir,\n manifestEntry,\n lockfileEntry,\n }\n}\n\nexport function restoreBackup(backup: BackupState): void {\n // Restore skill files from backup\n if (backup.skillDir) {\n const backupSkillDir = join(backup.tempDir, 'files')\n\n if (existsSync(backupSkillDir)) {\n // Remove any partially-written new files\n if (existsSync(backup.skillDir)) {\n rmSync(backup.skillDir, { recursive: true, force: true })\n }\n\n mkdirSync(backup.skillDir, { recursive: true })\n cpSync(backupSkillDir, backup.skillDir, { recursive: true })\n }\n }\n\n // Restore manifest entry\n const manifest = readManifest(backup.projectRoot)\n\n if (backup.manifestEntry) {\n manifest.packages[backup.packageName] = backup.manifestEntry\n } else {\n delete manifest.packages[backup.packageName]\n }\n\n writeManifest(backup.projectRoot, manifest)\n\n // Restore lockfile entry\n const lockfile = readLockfile(backup.projectRoot)\n\n if (backup.lockfileEntry) {\n lockfile.packages[backup.packageName] = backup.lockfileEntry\n } else {\n delete lockfile.packages[backup.packageName]\n }\n\n writeLockfile(backup.projectRoot, lockfile)\n}\n\nexport function cleanupBackup(backup: BackupState): void {\n if (existsSync(backup.tempDir)) {\n rmSync(backup.tempDir, { recursive: true, force: true })\n }\n}\n","import { execFile } from 'node:child_process'\nimport { createRequire } from 'node:module'\nimport { dirname, join } from 'node:path'\nimport { fileURLToPath } from 'node:url'\nimport { promisify } from 'node:util'\nimport chalk from 'chalk'\nimport type { Command } from 'commander'\nimport { createSpinner, isJSONMode, outputError, outputSuccess } from '../output.js'\n\nconst execFileAsync = promisify(execFile)\nconst PACKAGE_NAME = '@agentver/cli'\n\ntype PackageManager = 'bun' | 'npm' | 'pnpm' | 'yarn'\n\ntype UpgradeResult = {\n previous: string\n latest: string\n packageManager: PackageManager\n}\n\nfunction getCurrentVersion(): string {\n const __dirname = dirname(fileURLToPath(import.meta.url))\n const require = createRequire(import.meta.url)\n const pkg = require(join(__dirname, '..', 'package.json')) as { version: string }\n return pkg.version\n}\n\nasync function getLatestVersion(): Promise<string> {\n const response = await fetch(`https://registry.npmjs.org/${PACKAGE_NAME}/latest`)\n if (!response.ok) {\n throw new Error(`Failed to check for updates: ${response.statusText}`)\n }\n const data = (await response.json()) as { version: string }\n return data.version\n}\n\nasync function detectPackageManager(): Promise<PackageManager> {\n const managers: PackageManager[] = ['bun', 'pnpm', 'yarn', 'npm']\n\n for (const pm of managers) {\n try {\n const { stdout } = await execFileAsync(pm, ['--version'], { timeout: 5000 })\n if (stdout.trim()) {\n const { stdout: listOut } = await execFileAsync(\n pm,\n pm === 'npm' ? ['list', '-g', PACKAGE_NAME, '--depth=0'] : ['pm', 'ls', '-g'],\n { timeout: 10000 }\n ).catch(() => ({ stdout: '' }))\n\n if (listOut.includes('agentver')) {\n return pm\n }\n }\n } catch {\n continue\n }\n }\n\n return 'npm'\n}\n\nfunction getInstallArgs(pm: PackageManager): string[] {\n switch (pm) {\n case 'bun':\n return ['install', '-g', `${PACKAGE_NAME}@latest`]\n case 'pnpm':\n return ['add', '-g', `${PACKAGE_NAME}@latest`]\n case 'yarn':\n return ['global', 'add', `${PACKAGE_NAME}@latest`]\n case 'npm':\n return ['install', '-g', `${PACKAGE_NAME}@latest`]\n }\n}\n\nexport function registerUpgradeCommand(program: Command): void {\n program\n .command('upgrade')\n .alias('self-update')\n .description('Upgrade Agentver CLI to the latest version')\n .action(async () => {\n const json = isJSONMode()\n const spinner = createSpinner('Checking for updates…')\n spinner.start()\n\n try {\n const currentVersion = getCurrentVersion()\n const latestVersion = await getLatestVersion()\n\n if (currentVersion === latestVersion) {\n if (json) {\n outputSuccess({ current: currentVersion, latest: latestVersion, upToDate: true })\n } else {\n spinner.succeed(`Already on the latest version ${chalk.green(`v${currentVersion}`)}`)\n }\n return\n }\n\n spinner.text = `Upgrading ${chalk.dim(`v${currentVersion}`)} → ${chalk.green(`v${latestVersion}`)}…`\n\n const pm = await detectPackageManager()\n const args = getInstallArgs(pm)\n\n await execFileAsync(pm, args, { timeout: 60000 })\n\n if (json) {\n const result: UpgradeResult = {\n previous: currentVersion,\n latest: latestVersion,\n packageManager: pm,\n }\n outputSuccess(result)\n } else {\n spinner.succeed(\n `Upgraded ${chalk.green(`v${currentVersion}`)} → ${chalk.green(`v${latestVersion}`)} via ${pm}`\n )\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n if (json) {\n outputError('UPGRADE_FAILED', message)\n process.exit(1)\n } else {\n spinner.fail(`Upgrade failed: ${message}`)\n process.exit(1)\n }\n }\n })\n}\n","import type { ManifestV2Package } from '@agentver/shared'\nimport chalk from 'chalk'\nimport type { Command } from 'commander'\nimport type ora from 'ora'\nimport { readFilesFromDirectory } from '../git/fetcher.js'\nimport type { GitSource } from '../git/types.js'\nimport { createSpinner, isJSONMode, outputError, outputSuccess } from '../output'\nimport { registryFetch } from '../registry/client.js'\nimport { SCAN_RULES, scanFiles } from '../security/index.js'\nimport type { ScanResult } from '../security/types.js'\nimport { getCanonicalSkillPath } from '../storage/canonical.js'\nimport { computeSha256FromFiles } from '../storage/integrity.js'\nimport { readLockfile } from '../storage/lockfile.js'\nimport { readManifest } from '../storage/manifest.js'\n\ntype VerifyOptions = {\n json?: boolean\n strict?: boolean\n}\n\ntype VerificationApiResponse = {\n isVerified: boolean\n publisherVerified: boolean\n publisherName: string\n publisherSlug: string\n authorVerified: boolean\n latestVersion: string | null\n sha256: string | null\n}\n\ntype VerifyResult = {\n skillName: string\n publisherVerified: boolean\n publisherSlug: string\n integrityPassed: boolean\n securityPassed: boolean\n securityRuleCount: number\n securityIssueCount: number\n overallPassed: boolean\n}\n\nconst FALLBACK_SOURCE: GitSource = {\n host: 'github.com',\n owner: 'local',\n repo: 'verify',\n path: '',\n ref: 'HEAD',\n}\n\nfunction buildSourceFromManifest(pkg: ManifestV2Package | undefined): GitSource {\n if (!pkg || pkg.source.type !== 'git') {\n return FALLBACK_SOURCE\n }\n\n const { source } = pkg\n const parts = source.uri.split('/')\n return {\n host: (parts[0] ?? 'github.com') as GitSource['host'],\n owner: parts[1] ?? 'unknown',\n repo: parts[2] ?? 'unknown',\n path: source.path,\n ref: source.ref,\n commit: source.commit,\n }\n}\n\nfunction parseSkillName(name: string): { org: string; skill: string } | null {\n // Supports @org/skill-name or org/skill-name\n const cleaned = name.startsWith('@') ? name.slice(1) : name\n const parts = cleaned.split('/')\n if (parts.length !== 2 || !parts[0] || !parts[1]) {\n return null\n }\n return { org: parts[0], skill: parts[1] }\n}\n\nasync function runSecurityScan(\n dirPath: string,\n source: GitSource,\n strict: boolean\n): Promise<{ passed: boolean; ruleCount: number; issueCount: number; result: ScanResult | null }> {\n try {\n const files = await readFilesFromDirectory(dirPath)\n\n if (files.length === 0) {\n return { passed: true, ruleCount: 0, issueCount: 0, result: null }\n }\n\n const result = await scanFiles(files, source, { skipAudit: false })\n const issueCount = result.findings.length\n\n let passed: boolean\n if (strict) {\n passed = result.verdict === 'PASS'\n } else {\n passed = result.verdict === 'PASS' || result.verdict === 'WARN'\n }\n\n // Count rules (each unique pattern ID in the scanner)\n const ruleCount = SCAN_RULES.length\n\n return { passed, ruleCount, issueCount, result }\n } catch {\n return { passed: false, ruleCount: 0, issueCount: 0, result: null }\n }\n}\n\nexport function registerVerifyCommand(program: Command): void {\n program\n .command('verify [name]')\n .description('Verify a skill — checks publisher, integrity, and security')\n .option('--strict', 'Fail on WARN verdicts, not just BLOCK')\n .action(async (name: string | undefined, options: VerifyOptions) => {\n const jsonMode = isJSONMode()\n const projectRoot = process.cwd()\n const strict = options.strict ?? false\n\n // Determine skill name — from argument or manifest\n let skillName: string\n if (name) {\n skillName = name\n } else {\n const manifest = readManifest(projectRoot)\n const packageNames = Object.keys(manifest.packages)\n if (packageNames.length === 0) {\n if (jsonMode) {\n outputError('NO_SKILL', 'No skill name provided and no packages installed')\n return\n }\n process.stderr.write(chalk.red('No skill name provided and no packages installed.\\n'))\n process.stderr.write(chalk.dim('Usage: agentver verify @org/skill-name\\n'))\n process.exitCode = 1\n return\n }\n if (packageNames.length === 1) {\n skillName = packageNames[0]!\n } else {\n if (jsonMode) {\n outputError(\n 'AMBIGUOUS_SKILL',\n `Multiple packages installed. Specify one: ${packageNames.join(', ')}`\n )\n return\n }\n process.stderr.write(\n chalk.red('Multiple packages installed. Please specify which to verify:\\n')\n )\n for (const pkg of packageNames) {\n process.stderr.write(` ${chalk.cyan(pkg)}\\n`)\n }\n process.exitCode = 1\n return\n }\n }\n\n const parsed = parseSkillName(skillName)\n if (!parsed) {\n if (jsonMode) {\n outputError(\n 'INVALID_NAME',\n `Invalid skill name \"${skillName}\". Expected format: @org/skill-name`\n )\n return\n }\n process.stderr.write(\n chalk.red(`Invalid skill name \"${skillName}\". Expected format: @org/skill-name\\n`)\n )\n process.exitCode = 1\n return\n }\n\n if (!jsonMode) {\n process.stderr.write(`\\n${chalk.bold(`Verifying @${parsed.org}/${parsed.skill}...`)}\\n\\n`)\n }\n\n // 1. Publisher verification — fetch from platform\n const publisherSpinner = createSpinner('Checking publisher verification...')\n publisherSpinner.start()\n\n let publisherVerified = false\n let publisherSlug = parsed.org\n\n try {\n const verifyData = await registryFetch<VerificationApiResponse>(\n `/skills/${parsed.org}/${parsed.skill}/verify`\n )\n publisherVerified = verifyData.publisherVerified\n publisherSlug = verifyData.publisherSlug\n\n if (!jsonMode) {\n if (publisherVerified) {\n ;(publisherSpinner as ReturnType<typeof ora>).succeed(\n `Publisher verified (@${publisherSlug})`\n )\n } else {\n ;(publisherSpinner as ReturnType<typeof ora>).fail(\n `Publisher not verified (@${publisherSlug})`\n )\n }\n } else {\n publisherSpinner.stop()\n }\n } catch (error) {\n if (!jsonMode) {\n const message = error instanceof Error ? error.message : String(error)\n ;(publisherSpinner as ReturnType<typeof ora>).warn(\n `Could not check publisher: ${message}`\n )\n } else {\n publisherSpinner.stop()\n }\n }\n\n // 2. Integrity check — compare local files against lockfile\n const integritySpinner = createSpinner('Checking integrity...')\n integritySpinner.start()\n\n let integrityPassed = false\n\n try {\n const manifest = readManifest(projectRoot)\n const lockfile = readLockfile(projectRoot)\n const pkg = manifest.packages[skillName]\n const lockPkg = lockfile.packages[skillName]\n\n if (pkg && lockPkg?.integrity) {\n const canonicalPath = getCanonicalSkillPath(projectRoot, skillName, 'project')\n const files = await readFilesFromDirectory(canonicalPath)\n\n if (files.length > 0) {\n const localHash = computeSha256FromFiles(files)\n integrityPassed = localHash === lockPkg.integrity\n }\n } else if (!pkg) {\n // Skill not installed locally — skip integrity (not a failure)\n integrityPassed = true\n }\n\n if (!jsonMode) {\n if (integrityPassed) {\n ;(integritySpinner as ReturnType<typeof ora>).succeed(\n 'Integrity check passed (SHA256 match)'\n )\n } else {\n ;(integritySpinner as ReturnType<typeof ora>).fail(\n 'Integrity check failed (SHA256 mismatch)'\n )\n }\n } else {\n integritySpinner.stop()\n }\n } catch {\n integrityPassed = false\n if (!jsonMode) {\n ;(integritySpinner as ReturnType<typeof ora>).warn(\n 'Integrity check skipped (skill not installed locally)'\n )\n integrityPassed = true // Not a failure if not installed\n } else {\n integritySpinner.stop()\n integrityPassed = true\n }\n }\n\n // 3. Security audit\n const securitySpinner = createSpinner('Running security audit...')\n securitySpinner.start()\n\n let securityPassed = true\n let securityRuleCount = 0\n let securityIssueCount = 0\n\n try {\n const manifest = readManifest(projectRoot)\n const pkg = manifest.packages[skillName]\n\n if (pkg) {\n const canonicalPath = getCanonicalSkillPath(projectRoot, skillName, 'project')\n const source = buildSourceFromManifest(pkg)\n const scanResult = await runSecurityScan(canonicalPath, source, strict)\n\n securityPassed = scanResult.passed\n securityRuleCount = scanResult.ruleCount\n securityIssueCount = scanResult.issueCount\n }\n\n if (!jsonMode) {\n if (securityPassed) {\n ;(securitySpinner as ReturnType<typeof ora>).succeed(\n `Security audit passed (${securityRuleCount} rules, ${securityIssueCount} issues)`\n )\n } else {\n ;(securitySpinner as ReturnType<typeof ora>).fail(\n `Security audit failed (${securityRuleCount} rules, ${securityIssueCount} issues)`\n )\n }\n } else {\n securitySpinner.stop()\n }\n } catch {\n securityPassed = false\n if (!jsonMode) {\n ;(securitySpinner as ReturnType<typeof ora>).warn('Security audit could not run')\n } else {\n securitySpinner.stop()\n }\n }\n\n // Summary\n const overallPassed = publisherVerified && integrityPassed && securityPassed\n\n const result: VerifyResult = {\n skillName,\n publisherVerified,\n publisherSlug,\n integrityPassed,\n securityPassed,\n securityRuleCount,\n securityIssueCount,\n overallPassed,\n }\n\n if (jsonMode) {\n outputSuccess(result)\n return\n }\n\n process.stderr.write('\\n')\n\n if (overallPassed) {\n process.stderr.write(chalk.green.bold('Skill is verified and safe to use.\\n'))\n } else {\n process.stderr.write(chalk.red.bold('Skill verification failed.\\n'))\n process.exitCode = 1\n }\n })\n}\n","import { existsSync, readFileSync } from 'node:fs'\nimport { basename, join } from 'node:path'\nimport chalk from 'chalk'\nimport type { Command } from 'commander'\nimport ora from 'ora'\nimport { platformFetch } from '../registry/platform.js'\nimport { readLockfile } from '../storage/lockfile.js'\nimport { readManifest } from '../storage/manifest.js'\n\ntype VersionInfo = {\n name: string\n tag: string\n commitSha: string\n message: string\n}\n\ntype VersionCreateResponse = {\n tag: string\n commitSha: string\n}\n\ntype VersionListOptions = {\n json?: boolean\n}\n\ntype VersionCreateOptions = {\n notes?: string\n json?: boolean\n}\n\nconst SEMVER_REGEX = /^\\d+\\.\\d+\\.\\d+(-[\\w.]+)?$/\n\n/**\n * Resolve the skill identity from the current directory and manifest.\n */\nfunction resolveSkillIdentity(): { org: string; name: string } | null {\n const cwd = process.cwd()\n const skillMdPath = join(cwd, 'SKILL.md')\n\n let skillName: string | null = null\n\n if (existsSync(skillMdPath)) {\n const content = readFileSync(skillMdPath, 'utf-8')\n const nameMatch = content.match(/^name:\\s*(.+)$/m)\n skillName = nameMatch?.[1]?.trim() ?? basename(cwd)\n }\n\n if (!skillName) {\n skillName = basename(cwd)\n }\n\n const manifest = readManifest(cwd)\n const entry = manifest.packages[skillName]\n\n if (entry?.source.type === 'git') {\n const parts = entry.source.uri.split('/')\n const org = parts.length >= 2 ? parts[parts.length - 2] : parts[0]\n if (org) {\n return { org, name: skillName }\n }\n }\n\n // Fallback: directory structure\n const pathParts = cwd.split('/')\n const skillsIdx = pathParts.lastIndexOf('skills')\n if (skillsIdx >= 0 && pathParts.length > skillsIdx + 2) {\n return { org: pathParts[skillsIdx + 1]!, name: skillName }\n }\n\n return null\n}\n\nexport function registerVersionCommand(program: Command): void {\n const version = program.command('version').description('Manage skill versions (tags)')\n\n // --- version create <semver> ---\n version\n .command('create <semver>')\n .description('Create a version tag for the current skill')\n .option('--notes <text>', 'Release notes')\n .option('--json', 'Output as JSON')\n .action(async (semver: string, options: VersionCreateOptions) => {\n if (!SEMVER_REGEX.test(semver)) {\n process.stderr.write(\n chalk.red(`Invalid semver \"${semver}\". Expected format: 1.0.0 or 1.0.0-beta.1\\n`)\n )\n process.exit(1)\n }\n\n const identity = resolveSkillIdentity()\n if (!identity) {\n process.stderr.write(\n chalk.red('Could not determine skill identity. Run this from a skill directory.\\n')\n )\n process.exit(1)\n }\n\n // Get the current commit SHA from lockfile\n const lockfile = readLockfile(process.cwd())\n const lockEntry = lockfile.packages[identity.name]\n const commitSha = lockEntry?.source.type === 'git' ? lockEntry.source.commit : undefined\n\n if (!commitSha || commitSha === 'unknown') {\n process.stderr.write(chalk.red('No commit SHA found in lockfile. Save changes first.\\n'))\n process.exit(1)\n }\n\n const spinner = ora(`Creating version ${semver}...`).start()\n\n try {\n const result = await platformFetch<VersionCreateResponse>(\n `/skills/@${identity.org}/${identity.name}/versions`,\n {\n method: 'POST',\n body: {\n version: semver,\n notes: options.notes,\n commitSha,\n },\n }\n )\n\n if (options.json) {\n spinner.stop()\n console.log(\n JSON.stringify(\n {\n skill: `@${identity.org}/${identity.name}`,\n version: semver,\n tag: result.tag,\n commitSha: result.commitSha,\n },\n null,\n 2\n )\n )\n } else {\n spinner.succeed(\n `Version ${chalk.cyan(semver)} created ${chalk.dim(`(${result.commitSha.slice(0, 7)})`)}`\n )\n }\n } catch (error) {\n spinner.fail(\n `Failed to create version: ${error instanceof Error ? error.message : String(error)}`\n )\n process.exit(1)\n }\n })\n\n // --- version list ---\n version\n .command('list')\n .description('List versions for the current skill')\n .option('--json', 'Output as JSON')\n .action(async (options: VersionListOptions) => {\n const identity = resolveSkillIdentity()\n if (!identity) {\n process.stderr.write(\n chalk.red('Could not determine skill identity. Run this from a skill directory.\\n')\n )\n process.exit(1)\n }\n\n const spinner = ora('Fetching versions...').start()\n\n try {\n const versions = await platformFetch<VersionInfo[]>(\n `/skills/@${identity.org}/${identity.name}/versions`\n )\n\n spinner.stop()\n\n if (options.json) {\n console.log(JSON.stringify({ versions }, null, 2))\n return\n }\n\n if (versions.length === 0) {\n process.stdout.write(chalk.dim('No versions found.\\n'))\n return\n }\n\n process.stdout.write(chalk.bold(`\\nVersions for @${identity.org}/${identity.name}:\\n\\n`))\n\n for (const v of versions) {\n process.stdout.write(\n ` ${chalk.cyan(v.name)} ${chalk.dim(`(${v.commitSha.slice(0, 7)})`)} ${chalk.dim(v.message)}\\n`\n )\n }\n\n process.stdout.write('\\n')\n } catch (error) {\n spinner.fail(\n `Failed to list versions: ${error instanceof Error ? error.message : String(error)}`\n )\n process.exit(1)\n }\n })\n}\n","import type { WhoamiResult } from '@agentver/shared'\nimport chalk from 'chalk'\nimport type { Command } from 'commander'\nimport { isJSONMode, outputSuccess } from '../output.js'\nimport { getCredentials } from '../registry/auth.js'\nimport { getPlatformUrl } from '../registry/config.js'\nimport { platformFetchSilent } from '../registry/platform.js'\n\ntype MeResponse = {\n id: string\n email: string\n name: string\n organisations: Array<{ slug: string; name: string; role: string }>\n}\n\nexport function registerWhoamiCommand(program: Command): void {\n program\n .command('whoami')\n .description('Show authentication state')\n .action(async () => {\n const credentials = await getCredentials()\n\n if (!credentials?.token && !credentials?.apiKey) {\n if (isJSONMode()) {\n outputSuccess<WhoamiResult>({ authenticated: false })\n return\n }\n console.log(chalk.dim('Not authenticated. Run `agentver login` to sign in.'))\n return\n }\n\n if (!isJSONMode()) {\n if (credentials.apiKey) {\n const prefix = credentials.apiKey.slice(0, 8)\n console.log(`Authenticated via API key: ${chalk.green(`${prefix}...`)}`)\n } else {\n console.log(chalk.green('Authenticated via OAuth.'))\n }\n }\n\n const platformUrl = getPlatformUrl()\n\n if (!platformUrl) {\n if (isJSONMode()) {\n outputSuccess<WhoamiResult>({ authenticated: true })\n return\n }\n console.log(chalk.dim('Platform: not connected (run `agentver login <url>` to connect)'))\n return\n }\n\n if (!isJSONMode()) {\n console.log(`Platform: ${chalk.cyan(platformUrl)}`)\n }\n\n const me = await platformFetchSilent<MeResponse>('/me')\n\n if (isJSONMode()) {\n const result: WhoamiResult = {\n authenticated: true,\n platform: platformUrl,\n }\n if (me) {\n result.user = { id: me.id, email: me.email, name: me.name }\n if (me.organisations.length > 0) {\n result.organisation = me.organisations.map((o) => o.slug).join(', ')\n }\n }\n outputSuccess(result)\n return\n }\n\n if (!me) return\n\n console.log(`User: ${me.email}`)\n\n if (me.organisations.length > 0) {\n const orgSlugs = me.organisations.map((o) => o.slug).join(', ')\n console.log(`Organisations: ${orgSlugs}`)\n }\n })\n}\n"],"mappings":"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","names":["createRequire","dirname","join","fileURLToPath","chalk","readFileSync","existsSync","join","z","z","z","join","formattedArgs","z","z","join","pkg","existsSync","existsSync","mkdirSync","readFileSync","renameSync","writeFileSync","join","join","migrateV1ToV2","pkg","existsSync","readFileSync","mkdirSync","writeFileSync","renameSync","readFileSync","program","join","chalk","join","existsSync","mkdirSync","readdirSync","readFileSync","statSync","writeFileSync","homedir","dirname","join","join","homedir","existsSync","dirname","mkdirSync","writeFileSync","readdirSync","readFileSync","statSync","logger","join","chalk","existsSync","mkdirSync","readFileSync","writeFileSync","homedir","join","existsSync","mkdirSync","readFileSync","writeFileSync","homedir","join","join","homedir","existsSync","readFileSync","mkdirSync","writeFileSync","existsSync","mkdirSync","readdirSync","homedir","dirname","join","chalk","logger","homedir","join","existsSync","dirname","mkdirSync","readdirSync","pkg","program","join","chalk","existsSync","readFileSync","homedir","join","chalk","join","homedir","existsSync","readFileSync","chalk","program","chalk","formatValue","chalk","program","chalk","logger","i","j","chalk","program","existsSync","lstatSync","readFileSync","readlinkSync","dirname","join","chalk","MANIFEST_DIR","MANIFEST_FILE","LOCKFILE_FILE","join","existsSync","readFileSync","lstatSync","pkg","readlinkSync","dirname","chalk","program","existsSync","readFileSync","basename","join","chalk","ora","resolve","join","existsSync","readFileSync","basename","program","chalk","ora","readFileSync","join","chalk","formatBytes","program","pkg","chalk","join","readFileSync","existsSync","mkdirSync","writeFileSync","join","chalk","chalk","mkdirSync","writeFileSync","join","program","existsSync","existsSync","mkdirSync","readFileSync","writeFileSync","homedir","dirname","join","relative","chalk","prompts","createHash","createHash","z","hostname","hostname","chalk","prompts","installPath","homedir","join","existsSync","mkdirSync","readFileSync","writeFileSync","relative","canonicalPath","dirname","program","chalk","program","chalk","pkg","hostname","existsSync","readFileSync","basename","join","chalk","ora","resolveSkillIdentity","entry","join","existsSync","readFileSync","basename","program","chalk","ora","createHash","URL","chalk","REQUEST_TIMEOUT_MS","chalk","chalk","createHash","resolve","URL","program","chalk","chalk","program","chalk","chalk","program","pkg","chalk","existsSync","readFileSync","basename","join","resolve","chalk","ora","parseFrontmatter","join","existsSync","readFileSync","basename","resolve","program","chalk","ora","existsSync","lstatSync","rmSync","join","chalk","program","pkg","chalk","join","existsSync","rmSync","lstatSync","existsSync","readFileSync","basename","join","resolve","chalk","ora","join","existsSync","readFileSync","basename","resolve","program","chalk","ora","readFileSync","homedir","chalk","program","homedir","chalk","readFileSync","pkg","chalk","ora","z","chalk","hostname","program","spinner","ora","chalk","chalk","parseManifestUri","readLocalFiles","locallyModified","program","pkg","existsSync","join","chalk","HTTP_TIMEOUT_MS","readLocalFiles","join","existsSync","program","chalk","chalk","HTTP_TIMEOUT_MS","formatDate","chalk","program","createHash","hostname","chalk","getMachineId","createHash","hostname","program","chalk","pkg","join","chalk","ora","prompts","existsSync","mkdirSync","readFileSync","rmSync","writeFileSync","join","CONTEXT_LINES","computeHunks","existsSync","mkdirSync","rmSync","tmpdir","join","join","tmpdir","existsSync","mkdirSync","rmSync","prompts","chalk","program","pkg","ora","join","execFile","dirname","join","promisify","chalk","execFileAsync","promisify","execFile","__dirname","dirname","require","pkg","join","program","chalk","chalk","FALLBACK_SOURCE","buildSourceFromManifest","pkg","program","chalk","existsSync","readFileSync","basename","join","chalk","ora","SEMVER_REGEX","resolveSkillIdentity","join","existsSync","readFileSync","basename","program","chalk","ora","chalk","program","chalk","dirname","fileURLToPath","require","createRequire","join","chalk"]}
|
|
1
|
+
{"version":3,"sources":["../bin/agentver.ts","../src/commands/adopt.ts","../../agent-definitions/src/agents/definitions.ts","../../agent-definitions/src/config-composer.ts","../../agent-definitions/src/config-translator.ts","../../agent-definitions/src/scanner.ts","../src/output.ts","../src/storage/integrity.ts","../src/storage/lockfile.ts","../../shared/src/cli-output.ts","../../shared/src/schemas.ts","../../shared/src/constants.ts","../../shared/src/errors.ts","../../../node_modules/.bun/tslog@4.10.2/node_modules/tslog/esm/urlToObj.js","../../../node_modules/.bun/tslog@4.10.2/node_modules/tslog/esm/prettyLogStyles.js","../../../node_modules/.bun/tslog@4.10.2/node_modules/tslog/esm/formatTemplate.js","../../../node_modules/.bun/tslog@4.10.2/node_modules/tslog/esm/formatNumberAddZeros.js","../../../node_modules/.bun/tslog@4.10.2/node_modules/tslog/esm/internal/metaFormatting.js","../../../node_modules/.bun/tslog@4.10.2/node_modules/tslog/esm/internal/stackTrace.js","../../../node_modules/.bun/tslog@4.10.2/node_modules/tslog/esm/internal/errorUtils.js","../../../node_modules/.bun/tslog@4.10.2/node_modules/tslog/esm/internal/jsonStringifyRecursive.js","../../../node_modules/.bun/tslog@4.10.2/node_modules/tslog/esm/internal/util.inspect.polyfill.js","../../../node_modules/.bun/tslog@4.10.2/node_modules/tslog/esm/internal/environment.js","../../../node_modules/.bun/tslog@4.10.2/node_modules/tslog/esm/BaseLogger.js","../../../node_modules/.bun/tslog@4.10.2/node_modules/tslog/esm/index.js","../../shared/src/logger.ts","../../shared/src/skill-spec.ts","../../shared/src/validation.ts","../src/storage/serialise.ts","../src/storage/manifest.ts","../src/commands/audit.ts","../src/git/fetcher.ts","../src/git/cache.ts","../src/security/file-policy.ts","../src/security/patterns.ts","../src/security/reporter.ts","../src/registry/config.ts","../src/registry/auth.ts","../src/security/scanner.ts","../src/storage/canonical.ts","../src/commands/completion.ts","../src/commands/config.ts","../src/commands/diff.ts","../src/git/resolver.ts","../src/commands/doctor.ts","../src/commands/draft.ts","../src/utils/retry.ts","../src/registry/platform.ts","../src/commands/info.ts","../src/commands/init.ts","../src/commands/install.ts","../src/registry/reporter.ts","../src/wellknown/resolver.ts","../src/commands/list.ts","../src/commands/log.ts","../src/commands/login.ts","../src/registry/client.ts","../src/utils/network.ts","../src/commands/logout.ts","../src/commands/pin.ts","../src/commands/publish.ts","../src/commands/remove.ts","../src/commands/save.ts","../src/commands/scan.ts","../src/commands/search.ts","../src/registry/skills-sh.ts","../src/commands/status.ts","../src/commands/suggest.ts","../src/commands/suggestions.ts","../src/commands/sync.ts","../src/commands/update.ts","../src/storage/patches.ts","../src/utils/backup.ts","../src/commands/upgrade.ts","../src/commands/verify.ts","../src/commands/version.ts","../src/commands/whoami.ts"],"sourcesContent":["import { createRequire } from 'node:module'\nimport { dirname, join } from 'node:path'\nimport { fileURLToPath } from 'node:url'\nimport { Command } from 'commander'\nimport chalk from 'chalk'\nimport updateNotifier from 'update-notifier'\nimport { registerAdoptCommand } from '../src/commands/adopt'\nimport { registerAuditCommand } from '../src/commands/audit'\nimport { registerCompletionCommand } from '../src/commands/completion'\nimport { registerConfigCommand } from '../src/commands/config'\nimport { registerDiffCommand } from '../src/commands/diff'\nimport { registerDoctorCommand } from '../src/commands/doctor'\nimport { registerDraftCommand } from '../src/commands/draft'\nimport { registerInfoCommand } from '../src/commands/info'\nimport { registerInitCommand } from '../src/commands/init'\nimport { registerInstallCommand } from '../src/commands/install'\nimport { registerListCommand } from '../src/commands/list'\nimport { registerLogCommand } from '../src/commands/log'\nimport { registerLoginCommand } from '../src/commands/login'\nimport { registerLogoutCommand } from '../src/commands/logout'\nimport { registerPinCommand, registerUnpinCommand } from '../src/commands/pin'\nimport { registerPublishCommand } from '../src/commands/publish'\nimport { registerRemoveCommand } from '../src/commands/remove'\nimport { registerSaveCommand } from '../src/commands/save'\nimport { registerScanCommand } from '../src/commands/scan'\nimport { registerSearchCommand } from '../src/commands/search'\nimport { registerStatusCommand } from '../src/commands/status'\nimport { registerSuggestCommand } from '../src/commands/suggest'\nimport { registerSuggestionsCommand } from '../src/commands/suggestions'\nimport { registerSyncCommand } from '../src/commands/sync'\nimport { registerUpdateCommand } from '../src/commands/update'\nimport { registerUpgradeCommand } from '../src/commands/upgrade'\nimport { registerVerifyCommand } from '../src/commands/verify'\nimport { registerVersionCommand } from '../src/commands/version'\nimport { registerWhoamiCommand } from '../src/commands/whoami'\n\nconst __dirname = dirname(fileURLToPath(import.meta.url))\nconst require = createRequire(import.meta.url)\nconst pkg = require(join(__dirname, '..', 'package.json')) as { name: string; version: string }\nupdateNotifier({ pkg }).notify({\n message: `Update available: {currentVersion} → {latestVersion}\\nRun ${chalk.cyan('agentver upgrade')} to update`,\n})\n\nconst program = new Command()\n\nprogram\n .name('agentver')\n .description('Agent skill registry — store, version, and distribute AI agent skills')\n .version(pkg.version)\n .option('--json', 'Output results as structured JSON')\n\nregisterAdoptCommand(program)\nregisterAuditCommand(program)\nregisterCompletionCommand(program)\nregisterConfigCommand(program)\nregisterDiffCommand(program)\nregisterDoctorCommand(program)\nregisterDraftCommand(program)\nregisterInfoCommand(program)\nregisterInitCommand(program)\nregisterInstallCommand(program)\nregisterListCommand(program)\nregisterLogCommand(program)\nregisterLoginCommand(program)\nregisterLogoutCommand(program)\nregisterPinCommand(program)\nregisterPublishCommand(program)\nregisterRemoveCommand(program)\nregisterSaveCommand(program)\nregisterScanCommand(program)\nregisterSearchCommand(program)\nregisterStatusCommand(program)\nregisterSuggestCommand(program)\nregisterSuggestionsCommand(program)\nregisterSyncCommand(program)\nregisterUnpinCommand(program)\nregisterUpdateCommand(program)\nregisterUpgradeCommand(program)\nregisterVerifyCommand(program)\nregisterVersionCommand(program)\nregisterWhoamiCommand(program)\n\nprogram.parse()\n","import { readFileSync } from 'node:fs'\nimport { homedir } from 'node:os'\nimport { dirname } from 'node:path'\nimport type { ScannedFile } from '@agentver/agent-definitions'\nimport { scanForSkillFiles, scanGlobalSkillFiles } from '@agentver/agent-definitions'\nimport type { AdoptResult, GitSource } from '@agentver/shared'\nimport chalk from 'chalk'\nimport type { Command } from 'commander'\nimport { createSpinner, isJSONMode, outputError, outputSuccess } from '../output.js'\nimport { computeSha256FromBuffer } from '../storage/integrity'\nimport { readLockfile, writeLockfile } from '../storage/lockfile'\nimport { readManifest, writeManifest } from '../storage/manifest'\n\nexport type AdoptOptions = {\n global?: boolean\n name?: string\n dryRun?: boolean\n}\n\ntype AdoptedEntry = {\n name: string\n path: string\n type: string\n agents: string[]\n}\n\ntype SkippedEntry = {\n name: string\n path: string\n reason: string\n}\n\ntype DeduplicatedFile = {\n path: string\n name: string\n detectedType: ScannedFile['detectedType']\n agents: string[]\n}\n\nfunction deduplicateByPath(files: ScannedFile[]): DeduplicatedFile[] {\n const byPath = new Map<string, DeduplicatedFile>()\n\n for (const file of files) {\n const existing = byPath.get(file.path)\n if (existing) {\n if (!existing.agents.includes(file.agentId)) {\n existing.agents.push(file.agentId)\n }\n } else {\n byPath.set(file.path, {\n path: file.path,\n name: file.name,\n detectedType: file.detectedType,\n agents: [file.agentId],\n })\n }\n }\n\n return [...byPath.values()]\n}\n\nfunction computeFileIntegrity(filePath: string): string {\n try {\n const content = readFileSync(filePath, 'utf-8')\n return computeSha256FromBuffer(content)\n } catch {\n return computeSha256FromBuffer('')\n }\n}\n\nfunction computeDirectoryIntegrity(entryFilePath: string): string {\n // For adopted skills, compute integrity from the entry file\n // (the SKILL.md or config file that was discovered)\n return computeFileIntegrity(entryFilePath)\n}\n\nexport async function adoptSkills(path: string | undefined, options: AdoptOptions): Promise<void> {\n const jsonMode = isJSONMode()\n const spinner = createSpinner('Scanning for skills...').start()\n\n try {\n const targetPath = path ?? process.cwd()\n const projectRoot = process.cwd()\n const home = homedir()\n\n // Collect scanned files\n const projectFiles = scanForSkillFiles(targetPath)\n const seenPaths = new Set(projectFiles.map((f) => f.path))\n\n let allFiles: ScannedFile[] = [...projectFiles]\n\n if (options.global) {\n const globalFiles = scanGlobalSkillFiles(home)\n for (const gf of globalFiles) {\n if (!seenPaths.has(gf.path)) {\n allFiles.push(gf)\n seenPaths.add(gf.path)\n }\n }\n }\n\n // Filter by name if --name provided\n if (options.name) {\n allFiles = allFiles.filter((f) => f.name === options.name)\n if (allFiles.length === 0) {\n if (jsonMode) {\n outputError('NOT_FOUND', `No skill found matching name \"${options.name}\"`)\n process.exit(1)\n }\n spinner.fail(`No skill found matching name \"${options.name}\"`)\n process.exit(1)\n }\n }\n\n if (allFiles.length === 0) {\n if (jsonMode) {\n outputSuccess<AdoptResult>({ adopted: [], skipped: [] }, [\n 'No skills or configs found to adopt.',\n ])\n return\n }\n spinner.warn('No skills or configs found to adopt.')\n return\n }\n\n // Deduplicate files by path, merging agents for the same file\n const deduped = deduplicateByPath(allFiles)\n\n const manifest = readManifest(projectRoot)\n const lockfile = readLockfile(projectRoot)\n const adopted: AdoptedEntry[] = []\n const skipped: SkippedEntry[] = []\n\n for (const file of deduped) {\n // Check if already in manifest\n if (manifest.packages[file.name]) {\n skipped.push({\n name: file.name,\n path: file.path,\n reason: 'Already managed by Agentver',\n })\n continue\n }\n\n const integrity = computeDirectoryIntegrity(file.path)\n const sourcePath = file.detectedType === 'AGENT_CONFIG' ? file.path : dirname(file.path)\n\n const source: GitSource = {\n type: 'git',\n uri: 'local',\n path: sourcePath,\n ref: 'local',\n commit: 'adopted',\n }\n\n if (!options.dryRun) {\n manifest.packages[file.name] = {\n source,\n agents: file.agents,\n installedAt: new Date().toISOString(),\n modified: false,\n }\n\n lockfile.packages[file.name] = {\n source,\n integrity,\n agents: file.agents,\n }\n }\n\n adopted.push({\n name: file.name,\n path: file.path,\n type: file.detectedType,\n agents: file.agents,\n })\n }\n\n // Write manifest and lockfile\n if (!options.dryRun && adopted.length > 0) {\n writeManifest(projectRoot, manifest)\n writeLockfile(projectRoot, lockfile)\n }\n\n // Output results\n if (jsonMode) {\n outputSuccess<AdoptResult>({ adopted, skipped })\n return\n }\n\n spinner.stop()\n\n if (options.dryRun) {\n process.stdout.write(chalk.yellow('\\n[dry-run] ') + chalk.dim('No changes written.\\n'))\n }\n\n if (adopted.length > 0) {\n process.stdout.write(chalk.bold('\\nAdopted:\\n'))\n for (const entry of adopted) {\n const typeLabel = entry.type === 'AGENT_CONFIG' ? chalk.dim(', config') : ''\n const agentList = entry.agents.join(', ')\n process.stdout.write(\n ` ${chalk.green('\\u2713')} ${chalk.green(entry.name.padEnd(16))} ${chalk.dim(entry.path.padEnd(45))} ${chalk.cyan(`(${agentList}${typeLabel})`)}\\n`\n )\n }\n }\n\n if (skipped.length > 0) {\n process.stdout.write(chalk.bold('\\nSkipped:\\n'))\n for (const entry of skipped) {\n process.stdout.write(\n ` ${chalk.dim('\\u2013')} ${entry.name.padEnd(16)} ${chalk.dim(entry.reason)}\\n`\n )\n }\n }\n\n const summary = `\\nAdopted ${adopted.length} skill${adopted.length === 1 ? '' : 's'}, skipped ${skipped.length}.\\n`\n process.stdout.write(chalk.dim(summary))\n } catch (error) {\n if (jsonMode) {\n outputError('ADOPT_FAILED', error instanceof Error ? error.message : String(error))\n process.exit(1)\n }\n spinner.fail(`Failed to adopt: ${error instanceof Error ? error.message : String(error)}`)\n process.exit(1)\n }\n}\n\nexport function registerAdoptCommand(program: Command): void {\n program\n .command('adopt [path]')\n .description('Adopt existing skills and configs into Agentver management')\n .option('--global', 'Also scan global paths (~/.claude/skills, etc.)')\n .option('--name <name>', 'Adopt a specific skill by name')\n .option('--dry-run', 'Show what would be adopted without making changes')\n .action(async (path: string | undefined, options: AdoptOptions) => {\n await adoptSkills(path, options)\n })\n}\n","import type { AgentDefinition } from '../types'\n\nexport const AGENT_DEFINITIONS: AgentDefinition[] = [\n // --- Chat and IDE agents ---\n {\n id: 'claude-code',\n name: 'Claude Code',\n projectSkillPath: '.claude/skills',\n globalSkillPath: '~/.claude/skills',\n configFiles: ['CLAUDE.md'],\n configDirs: ['.claude'],\n category: 'agent-specific',\n },\n {\n id: 'claude-cowork',\n name: 'Claude Cowork',\n projectSkillPath: '.claude/skills',\n globalSkillPath: '~/.claude/skills',\n configFiles: ['CLAUDE.md'],\n configDirs: ['.claude'],\n category: 'agent-specific',\n },\n {\n id: 'cursor',\n name: 'Cursor',\n projectSkillPath: '.cursor/skills',\n globalSkillPath: '~/.cursor/skills',\n configFiles: ['.cursorrules'],\n configDirs: ['.cursor'],\n category: 'agent-specific',\n },\n {\n id: 'codex',\n name: 'OpenAI Codex',\n projectSkillPath: '.agents/skills',\n globalSkillPath: '~/.codex/skills',\n configFiles: ['AGENTS.md'],\n configDirs: ['.codex', '.agents'],\n category: 'agent-specific',\n },\n {\n id: 'opencode',\n name: 'OpenCode',\n projectSkillPath: '.opencode/skills',\n globalSkillPath: '~/.config/opencode/skills',\n configFiles: [],\n configDirs: ['.opencode', '.config/opencode'],\n category: 'agent-specific',\n },\n {\n id: 'copilot',\n name: 'GitHub Copilot',\n projectSkillPath: '.github/skills',\n globalSkillPath: '~/.copilot/skills',\n configFiles: ['.github/copilot-instructions.md'],\n configDirs: [],\n category: 'agent-specific',\n aliases: ['github-copilot'],\n },\n {\n id: 'windsurf',\n name: 'Windsurf',\n projectSkillPath: '.windsurf/skills',\n globalSkillPath: '~/.codeium/windsurf/skills',\n configFiles: ['.windsurfrules'],\n configDirs: ['.windsurf'],\n category: 'agent-specific',\n },\n {\n id: 'gemini-cli',\n name: 'Gemini CLI',\n projectSkillPath: '.gemini/skills',\n globalSkillPath: '~/.gemini/skills',\n configFiles: ['GEMINI.md'],\n configDirs: ['.gemini'],\n category: 'agent-specific',\n aliases: ['gemini'],\n },\n {\n id: 'roo',\n name: 'Roo Code',\n projectSkillPath: '.roo/skills',\n globalSkillPath: '~/.roo/skills',\n configFiles: ['.roo/rules'],\n configDirs: ['.roo'],\n category: 'agent-specific',\n aliases: ['roo-code'],\n },\n {\n id: 'goose',\n name: 'Goose',\n projectSkillPath: '.goose/skills',\n globalSkillPath: '~/.config/goose/skills',\n configFiles: [],\n configDirs: ['.goose'],\n category: 'agent-specific',\n },\n {\n id: 'junie',\n name: 'JetBrains Junie',\n projectSkillPath: '.junie/skills',\n globalSkillPath: '~/.junie/skills',\n configFiles: ['.junie/guidelines.md'],\n configDirs: ['.junie'],\n category: 'agent-specific',\n },\n {\n id: 'aider',\n name: 'Aider',\n projectSkillPath: '.aider/skills',\n globalSkillPath: '~/.aider/skills',\n configFiles: ['.aider.conf.yml'],\n configDirs: ['.aider'],\n category: 'agent-specific',\n },\n\n // --- Universal agents ---\n {\n id: 'amp',\n name: 'Amp',\n projectSkillPath: '.agents/skills',\n globalSkillPath: '~/.config/agents/skills',\n configFiles: [],\n configDirs: [],\n category: 'universal',\n },\n {\n id: 'cline',\n name: 'Cline',\n projectSkillPath: '.agents/skills',\n globalSkillPath: '~/.agents/skills',\n configFiles: [],\n configDirs: ['.clinerules'],\n category: 'universal',\n },\n {\n id: 'kimi-cli',\n name: 'Kimi Code CLI',\n projectSkillPath: '.agents/skills',\n globalSkillPath: '~/.config/agents/skills',\n configFiles: [],\n configDirs: ['.kimi'],\n category: 'universal',\n },\n {\n id: 'replit',\n name: 'Replit',\n projectSkillPath: '.agents/skills',\n globalSkillPath: '~/.config/agents/skills',\n configFiles: ['.replit'],\n configDirs: [],\n category: 'universal',\n },\n {\n id: 'universal',\n name: 'Universal',\n projectSkillPath: '.agents/skills',\n globalSkillPath: '~/.config/agents/skills',\n configFiles: [],\n configDirs: [],\n category: 'universal',\n },\n\n // --- Agent-specific (simple pattern) ---\n {\n id: 'adal',\n name: 'AdaL',\n projectSkillPath: '.adal/skills',\n globalSkillPath: '~/.adal/skills',\n configFiles: [],\n configDirs: ['.adal'],\n category: 'agent-specific',\n },\n {\n id: 'augment',\n name: 'Augment',\n projectSkillPath: '.augment/skills',\n globalSkillPath: '~/.augment/skills',\n configFiles: [],\n configDirs: ['.augment'],\n category: 'agent-specific',\n },\n {\n id: 'codebuddy',\n name: 'CodeBuddy',\n projectSkillPath: '.codebuddy/skills',\n globalSkillPath: '~/.codebuddy/skills',\n configFiles: [],\n configDirs: ['.codebuddy'],\n category: 'agent-specific',\n },\n {\n id: 'command-code',\n name: 'Command Code',\n projectSkillPath: '.commandcode/skills',\n globalSkillPath: '~/.commandcode/skills',\n configFiles: [],\n configDirs: ['.commandcode'],\n category: 'agent-specific',\n },\n {\n id: 'continue',\n name: 'Continue',\n projectSkillPath: '.continue/skills',\n globalSkillPath: '~/.continue/skills',\n configFiles: [],\n configDirs: ['.continue'],\n category: 'agent-specific',\n },\n {\n id: 'crush',\n name: 'Crush',\n projectSkillPath: '.crush/skills',\n globalSkillPath: '~/.config/crush/skills',\n configFiles: [],\n configDirs: ['.crush'],\n category: 'agent-specific',\n },\n {\n id: 'iflow-cli',\n name: 'iFlow CLI',\n projectSkillPath: '.iflow/skills',\n globalSkillPath: '~/.iflow/skills',\n configFiles: [],\n configDirs: ['.iflow'],\n category: 'agent-specific',\n },\n {\n id: 'kilo',\n name: 'Kilo Code',\n projectSkillPath: '.kilocode/skills',\n globalSkillPath: '~/.kilocode/skills',\n configFiles: [],\n configDirs: ['.kilocode'],\n category: 'agent-specific',\n },\n {\n id: 'kiro-cli',\n name: 'Kiro CLI',\n projectSkillPath: '.kiro/skills',\n globalSkillPath: '~/.kiro/skills',\n configFiles: [],\n configDirs: ['.kiro'],\n category: 'agent-specific',\n },\n {\n id: 'kode',\n name: 'Kode',\n projectSkillPath: '.kode/skills',\n globalSkillPath: '~/.kode/skills',\n configFiles: [],\n configDirs: ['.kode'],\n category: 'agent-specific',\n },\n {\n id: 'mcpjam',\n name: 'MCPJam',\n projectSkillPath: '.mcpjam/skills',\n globalSkillPath: '~/.mcpjam/skills',\n configFiles: [],\n configDirs: ['.mcpjam'],\n category: 'agent-specific',\n },\n {\n id: 'mistral-vibe',\n name: 'Mistral Vibe',\n projectSkillPath: '.vibe/skills',\n globalSkillPath: '~/.vibe/skills',\n configFiles: [],\n configDirs: ['.vibe'],\n category: 'agent-specific',\n },\n {\n id: 'mux',\n name: 'Mux',\n projectSkillPath: '.mux/skills',\n globalSkillPath: '~/.mux/skills',\n configFiles: [],\n configDirs: ['.mux'],\n category: 'agent-specific',\n },\n {\n id: 'neovate',\n name: 'Neovate',\n projectSkillPath: '.neovate/skills',\n globalSkillPath: '~/.neovate/skills',\n configFiles: [],\n configDirs: ['.neovate'],\n category: 'agent-specific',\n },\n {\n id: 'openhands',\n name: 'OpenHands',\n projectSkillPath: '.openhands/skills',\n globalSkillPath: '~/.openhands/skills',\n configFiles: [],\n configDirs: ['.openhands'],\n category: 'agent-specific',\n },\n {\n id: 'pochi',\n name: 'Pochi',\n projectSkillPath: '.pochi/skills',\n globalSkillPath: '~/.pochi/skills',\n configFiles: [],\n configDirs: ['.pochi'],\n category: 'agent-specific',\n },\n {\n id: 'qoder',\n name: 'Qoder',\n projectSkillPath: '.qoder/skills',\n globalSkillPath: '~/.qoder/skills',\n configFiles: [],\n configDirs: ['.qoder'],\n category: 'agent-specific',\n },\n {\n id: 'qwen-code',\n name: 'Qwen Code',\n projectSkillPath: '.qwen/skills',\n globalSkillPath: '~/.qwen/skills',\n configFiles: [],\n configDirs: ['.qwen'],\n category: 'agent-specific',\n },\n {\n id: 'trae',\n name: 'Trae',\n projectSkillPath: '.trae/skills',\n globalSkillPath: '~/.trae/skills',\n configFiles: [],\n configDirs: ['.trae'],\n category: 'agent-specific',\n },\n {\n id: 'trae-cn',\n name: 'Trae CN',\n projectSkillPath: '.trae/skills',\n globalSkillPath: '~/.trae-cn/skills',\n configFiles: [],\n configDirs: ['.trae-cn'],\n category: 'agent-specific',\n },\n {\n id: 'zencoder',\n name: 'Zencoder',\n projectSkillPath: '.zencoder/skills',\n globalSkillPath: '~/.zencoder/skills',\n configFiles: [],\n configDirs: ['.zencoder'],\n category: 'agent-specific',\n },\n\n // --- Agent-specific (unusual paths) ---\n {\n id: 'antigravity',\n name: 'Antigravity',\n projectSkillPath: '.agent/skills',\n globalSkillPath: '~/.gemini/antigravity/skills',\n configFiles: [],\n configDirs: ['.gemini/antigravity'],\n category: 'agent-specific',\n },\n {\n id: 'cortex',\n name: 'Cortex Code',\n projectSkillPath: '.cortex/skills',\n globalSkillPath: '~/.snowflake/cortex/skills',\n configFiles: [],\n configDirs: ['.cortex'],\n category: 'agent-specific',\n },\n {\n id: 'droid',\n name: 'Droid',\n projectSkillPath: '.factory/skills',\n globalSkillPath: '~/.factory/skills',\n configFiles: [],\n configDirs: ['.factory'],\n category: 'agent-specific',\n },\n {\n id: 'openclaw',\n name: 'OpenClaw',\n projectSkillPath: 'skills',\n globalSkillPath: '~/.openclaw/skills',\n configFiles: [],\n configDirs: ['.openclaw'],\n category: 'agent-specific',\n },\n {\n id: 'pi',\n name: 'Pi',\n projectSkillPath: '.pi/skills',\n globalSkillPath: '~/.pi/agent/skills',\n configFiles: [],\n configDirs: ['.pi'],\n category: 'agent-specific',\n },\n]\n\nexport const AGENT_MAP = new Map(AGENT_DEFINITIONS.map((a) => [a.id, a]))\n","export type ComposableConfig = {\n packageName: string\n content: string\n sections?: string[]\n order: number\n}\n\nexport type ComposedResult = {\n content: string\n sources: string[]\n}\n\nconst SECTION_MARKER_PREFIX = '## From:'\nconst SECTION_MARKER_REGEX = /^## From: .+$/m\nconst SECTION_MARKER_REGEX_GLOBAL = /^## From: .+$/gm\n\n/**\n * Compose multiple agent configs into a single layered config.\n * Lower order = base config, higher order = overlay.\n * Identical lines from base configs are removed when they also appear in an overlay.\n */\nexport function composeConfigs(configs: ComposableConfig[]): ComposedResult {\n if (configs.length === 0) {\n return { content: '', sources: [] }\n }\n\n if (configs.length === 1) {\n const config = configs[0]!\n return {\n content: `${SECTION_MARKER_PREFIX} ${config.packageName}\\n\\n${config.content.trim()}`,\n sources: [config.packageName],\n }\n }\n\n const sorted = [...configs].sort((a, b) => a.order - b.order)\n\n // Collect lines from each config, tracking which overlay lines should override base lines\n const overlayLines = new Set<string>()\n for (const config of sorted.slice(1)) {\n for (const line of config.content.split('\\n')) {\n const trimmed = line.trim()\n if (trimmed.length > 0) {\n overlayLines.add(trimmed)\n }\n }\n }\n\n const sections: string[] = []\n\n for (const config of sorted) {\n const isBase = config === sorted[0]\n let lines = config.content.split('\\n')\n\n if (isBase) {\n // Remove lines from base that are duplicated in overlays\n lines = lines.filter((line) => {\n const trimmed = line.trim()\n if (trimmed.length === 0) return true\n return !overlayLines.has(trimmed)\n })\n }\n\n const body = lines.join('\\n').trim()\n if (body.length > 0) {\n sections.push(`${SECTION_MARKER_PREFIX} ${config.packageName}\\n\\n${body}`)\n }\n }\n\n return {\n content: sections.join('\\n\\n'),\n sources: sorted.map((c) => c.packageName),\n }\n}\n\n/**\n * Check whether a config file was produced by composition (contains section markers).\n */\nexport function isComposedConfig(content: string): boolean {\n return SECTION_MARKER_REGEX.test(content)\n}\n\n/**\n * Parse an existing composed config back into its constituent sections.\n */\nexport function parseComposedSections(\n content: string\n): Array<{ packageName: string; content: string }> {\n const parts = content.split(SECTION_MARKER_REGEX_GLOBAL)\n const markers = content.match(SECTION_MARKER_REGEX_GLOBAL) ?? []\n\n const sections: Array<{ packageName: string; content: string }> = []\n\n for (let i = 0; i < markers.length; i++) {\n const marker = markers[i]!\n const packageName = marker.replace(`${SECTION_MARKER_PREFIX} `, '').trim()\n const body = (parts[i + 1] ?? '').trim()\n\n if (packageName && body.length > 0) {\n sections.push({ packageName, content: body })\n }\n }\n\n return sections\n}\n","import { AGENT_MAP } from './agents/definitions'\nimport type { AgentId } from './types'\n\nexport type TranslatedConfig = {\n agentId: AgentId\n filePath: string\n content: string\n}\n\ntype ConfigTranslator = {\n agentId: AgentId\n filePath: string | ((name: string) => string)\n transform: (content: string, name: string) => string\n}\n\nconst markdownPassthrough = (content: string, _name: string) => content\n\nconst CONFIG_TRANSLATORS: ConfigTranslator[] = [\n {\n agentId: 'claude-code',\n filePath: 'CLAUDE.md',\n transform: markdownPassthrough,\n },\n {\n agentId: 'claude-cowork',\n filePath: 'CLAUDE.md',\n transform: markdownPassthrough,\n },\n {\n agentId: 'cursor',\n filePath: '.cursorrules',\n transform: markdownPassthrough,\n },\n {\n agentId: 'codex',\n filePath: 'AGENTS.md',\n transform: markdownPassthrough,\n },\n {\n agentId: 'windsurf',\n filePath: '.windsurfrules',\n transform: markdownPassthrough,\n },\n {\n agentId: 'copilot',\n filePath: '.github/copilot-instructions.md',\n transform: markdownPassthrough,\n },\n {\n agentId: 'gemini-cli',\n filePath: 'GEMINI.md',\n transform: markdownPassthrough,\n },\n {\n agentId: 'roo',\n filePath: (name: string) => `.roo/rules/${name}.md`,\n transform: markdownPassthrough,\n },\n {\n agentId: 'goose',\n filePath: '.goose/config.yaml',\n transform: (content: string, _name: string) => {\n const escaped = content.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"')\n return `instructions: \"${escaped}\"\\n`\n },\n },\n {\n agentId: 'junie',\n filePath: '.junie/guidelines.md',\n transform: markdownPassthrough,\n },\n {\n agentId: 'aider',\n filePath: '.aider.conf.yml',\n transform: (_content: string, _name: string) => {\n return `read:\\n - AGENTS.md\\n`\n },\n },\n // Agents with specific config formats\n {\n agentId: 'cline',\n filePath: (name: string) => `.clinerules/${name}.md`,\n transform: markdownPassthrough,\n },\n {\n agentId: 'continue',\n filePath: '.continue/config.yaml',\n transform: markdownPassthrough,\n },\n {\n agentId: 'replit',\n filePath: '.replit',\n transform: markdownPassthrough,\n },\n]\n\n/**\n * Default fallback: for agents without a specific translator, write\n * markdown content to AGENTS.md (the universal convention).\n */\nfunction getDefaultFilePath(agentId: AgentId, name: string): string {\n const agent = AGENT_MAP.get(agentId)\n if (!agent) return `${name}.md`\n\n // Universal agents use the AGENTS.md convention\n if (agent.category === 'universal') return 'AGENTS.md'\n\n // Agent-specific without a translator — use AGENTS.md in their config dir\n const primaryDir = agent.configDirs[0]\n return primaryDir ? `${primaryDir}/AGENTS.md` : 'AGENTS.md'\n}\n\nexport function translateConfig(\n content: string,\n name: string,\n targetAgents: AgentId[]\n): TranslatedConfig[] {\n return targetAgents.map((agentId) => {\n const translator = CONFIG_TRANSLATORS.find((t) => t.agentId === agentId)\n\n if (translator) {\n const filePath =\n typeof translator.filePath === 'function' ? translator.filePath(name) : translator.filePath\n return {\n agentId,\n filePath,\n content: translator.transform(content, name),\n }\n }\n\n // Default fallback: markdown passthrough\n return {\n agentId,\n filePath: getDefaultFilePath(agentId, name),\n content: markdownPassthrough(content, name),\n }\n })\n}\n\nexport function getConfigFilePath(agentId: AgentId, name: string): string | null {\n const translator = CONFIG_TRANSLATORS.find((t) => t.agentId === agentId)\n if (translator) {\n return typeof translator.filePath === 'function'\n ? translator.filePath(name)\n : translator.filePath\n }\n // Fallback for agents without explicit translators\n return getDefaultFilePath(agentId, name)\n}\n","import { existsSync, readdirSync, statSync } from 'node:fs'\nimport { join } from 'node:path'\nimport { AGENT_DEFINITIONS } from './agents/definitions'\nimport type { AgentId } from './types'\n\nexport type DetectedFileType = 'SKILL' | 'AGENT_CONFIG' | 'PLUGIN' | 'SCRIPT' | 'PROMPT'\n\nexport type DetectedAgent = {\n id: AgentId\n name: string\n configPath: string\n}\n\nexport type ScannedFile = {\n path: string\n agentId: AgentId\n type: 'skill' | 'config' | 'rules'\n detectedType: DetectedFileType\n name: string\n}\n\n/** Agents that should never be auto-detected — only via explicit --agent flag */\nconst NEVER_AUTO_DETECT: ReadonlySet<AgentId> = new Set(['universal'])\n\nexport function detectInstalledAgents(directory: string): DetectedAgent[] {\n const detected: DetectedAgent[] = []\n\n for (const agent of AGENT_DEFINITIONS) {\n if (NEVER_AUTO_DETECT.has(agent.id)) continue\n\n for (const configDir of agent.configDirs) {\n const fullPath = join(directory, configDir)\n if (existsSync(fullPath) && statSync(fullPath).isDirectory()) {\n detected.push({\n id: agent.id,\n name: agent.name,\n configPath: fullPath,\n })\n break\n }\n }\n\n for (const configFile of agent.configFiles) {\n const fullPath = join(directory, configFile)\n if (existsSync(fullPath) && statSync(fullPath).isFile()) {\n const alreadyDetected = detected.some((d) => d.id === agent.id)\n if (!alreadyDetected) {\n detected.push({\n id: agent.id,\n name: agent.name,\n configPath: fullPath,\n })\n }\n break\n }\n }\n }\n\n return detected\n}\n\n/**\n * Detect agents installed globally by checking home directory config paths.\n * Checks both project-style and global paths, deduplicating results.\n */\nexport function detectGlobalAgents(homeDir: string): DetectedAgent[] {\n const detected: DetectedAgent[] = []\n const seen = new Set<AgentId>()\n\n for (const agent of AGENT_DEFINITIONS) {\n if (NEVER_AUTO_DETECT.has(agent.id)) continue\n if (seen.has(agent.id)) continue\n\n // Check global config dirs (e.g. ~/.claude, ~/.cursor)\n for (const configDir of agent.configDirs) {\n const fullPath = join(homeDir, configDir)\n if (existsSync(fullPath) && statSync(fullPath).isDirectory()) {\n detected.push({\n id: agent.id,\n name: agent.name,\n configPath: fullPath,\n })\n seen.add(agent.id)\n break\n }\n }\n\n if (seen.has(agent.id)) continue\n\n // Check global skill path (e.g. ~/.claude/skills)\n const globalSkillPath = agent.globalSkillPath.replace(/^~/, homeDir)\n if (existsSync(globalSkillPath) && statSync(globalSkillPath).isDirectory()) {\n detected.push({\n id: agent.id,\n name: agent.name,\n configPath: globalSkillPath,\n })\n seen.add(agent.id)\n }\n }\n\n return detected\n}\n\nexport function scanForSkillFiles(directory: string): ScannedFile[] {\n const files: ScannedFile[] = []\n\n for (const agent of AGENT_DEFINITIONS) {\n const skillDir = join(directory, agent.projectSkillPath)\n scanSkillDirectory(skillDir, agent.id, files)\n\n for (const configFile of agent.configFiles) {\n const fullPath = join(directory, configFile)\n if (existsSync(fullPath) && statSync(fullPath).isFile()) {\n files.push({\n path: fullPath,\n agentId: agent.id,\n type: 'config',\n detectedType: 'AGENT_CONFIG',\n name: configFile,\n })\n }\n }\n }\n\n return files\n}\n\n/**\n * Scan global skill directories for all detected agents.\n * Checks paths like ~/.claude/skills/, ~/.cursor/skills/, etc.\n */\nexport function scanGlobalSkillFiles(homeDir: string): ScannedFile[] {\n const files: ScannedFile[] = []\n const seenPaths = new Set<string>()\n\n for (const agent of AGENT_DEFINITIONS) {\n if (NEVER_AUTO_DETECT.has(agent.id)) continue\n\n // Check global skill path (e.g. ~/.claude/skills)\n const globalSkillPath = agent.globalSkillPath.replace(/^~/, homeDir)\n scanSkillDirectory(globalSkillPath, agent.id, files, seenPaths)\n\n // Check global config files (e.g. ~/.claude/CLAUDE.md)\n for (const configFile of agent.configFiles) {\n const fullPath = join(homeDir, configFile)\n if (seenPaths.has(fullPath)) continue\n if (existsSync(fullPath) && statSync(fullPath).isFile()) {\n files.push({\n path: fullPath,\n agentId: agent.id,\n type: 'config',\n detectedType: 'AGENT_CONFIG',\n name: configFile,\n })\n seenPaths.add(fullPath)\n }\n }\n\n // Also check config files inside global config dirs (e.g. ~/.codex/AGENTS.md)\n for (const configDir of agent.configDirs) {\n const dirPath = join(homeDir, configDir)\n if (!existsSync(dirPath) || !statSync(dirPath).isDirectory()) continue\n\n for (const configFile of agent.configFiles) {\n const baseName = configFile.split('/').pop() ?? configFile\n const fullPath = join(dirPath, baseName)\n if (seenPaths.has(fullPath)) continue\n if (existsSync(fullPath) && statSync(fullPath).isFile()) {\n files.push({\n path: fullPath,\n agentId: agent.id,\n type: 'config',\n detectedType: 'AGENT_CONFIG',\n name: `${configDir}/${baseName}`,\n })\n seenPaths.add(fullPath)\n }\n }\n }\n }\n\n return files\n}\n\nfunction scanSkillDirectory(\n skillDir: string,\n agentId: AgentId,\n files: ScannedFile[],\n seenPaths?: Set<string>\n): void {\n if (!existsSync(skillDir) || !statSync(skillDir).isDirectory()) return\n\n const entries = readdirSync(skillDir, { withFileTypes: true })\n for (const entry of entries) {\n if (entry.isDirectory()) {\n // Check for SKILL.md inside subdirectory\n const skillMd = join(skillDir, entry.name, 'SKILL.md')\n if (existsSync(skillMd)) {\n if (seenPaths?.has(skillMd)) continue\n files.push({\n path: skillMd,\n agentId,\n type: 'skill',\n detectedType: 'SKILL',\n name: entry.name,\n })\n seenPaths?.add(skillMd)\n }\n // Also check for any .md files in the subdirectory (standalone skills)\n try {\n const subEntries = readdirSync(join(skillDir, entry.name), { withFileTypes: true })\n for (const subEntry of subEntries) {\n if (subEntry.isFile() && subEntry.name.endsWith('.md') && subEntry.name !== 'SKILL.md') {\n const filePath = join(skillDir, entry.name, subEntry.name)\n if (seenPaths?.has(filePath)) continue\n files.push({\n path: filePath,\n agentId,\n type: 'skill',\n detectedType: inferDetectedType(subEntry.name),\n name: `${entry.name}/${subEntry.name.replace(/\\.md$/, '')}`,\n })\n seenPaths?.add(filePath)\n }\n }\n } catch {\n // Permission denied or other read error\n }\n } else if (entry.name.endsWith('.md')) {\n const filePath = join(skillDir, entry.name)\n if (seenPaths?.has(filePath)) continue\n files.push({\n path: filePath,\n agentId,\n type: 'skill',\n detectedType: inferDetectedType(entry.name),\n name: entry.name.replace(/\\.md$/, ''),\n })\n seenPaths?.add(filePath)\n }\n }\n}\n\nexport function inferDetectedType(fileName: string): DetectedFileType {\n const lower = fileName.toLowerCase()\n\n if (lower === 'skill.md') return 'SKILL'\n if (lower === 'prompt.md') return 'PROMPT'\n if (lower === 'plugin.json') return 'PLUGIN'\n if (lower === 'script.json') return 'SCRIPT'\n\n // Agent config files\n const agentConfigPatterns = [\n 'claude.md',\n 'agents.md',\n 'gemini.md',\n '.cursorrules',\n '.windsurfrules',\n 'copilot-instructions.md',\n 'guidelines.md',\n '.aider.conf.yml',\n 'config.yaml',\n '.clinerules',\n '.replit',\n ]\n if (agentConfigPatterns.some((p) => lower.endsWith(p))) return 'AGENT_CONFIG'\n\n // Default to SKILL for .md files in skill directories\n return 'SKILL'\n}\n\nexport function getSkillPlacementPath(\n agentId: AgentId,\n skillName: string,\n scope: 'project' | 'global'\n): string | null {\n const agent = AGENT_DEFINITIONS.find((a) => a.id === agentId)\n if (!agent) return null\n\n const basePath = scope === 'project' ? agent.projectSkillPath : agent.globalSkillPath\n return join(basePath, skillName)\n}\n","import type { CLIOutput } from '@agentver/shared'\nimport ora from 'ora'\n\ntype Spinner = ReturnType<typeof ora>\n\nexport type SpinnerLike = {\n start: () => SpinnerLike\n succeed: (text?: string) => SpinnerLike\n fail: (text?: string) => SpinnerLike\n warn: (text?: string) => SpinnerLike\n info: (text?: string) => SpinnerLike\n stop: () => SpinnerLike\n text: string\n}\n\nconst noopSpinner: SpinnerLike = {\n start() {\n return this\n },\n succeed() {\n return this\n },\n fail() {\n return this\n },\n warn() {\n return this\n },\n info() {\n return this\n },\n stop() {\n return this\n },\n text: '',\n}\n\n/**\n * Check if JSON output mode is active.\n * Reads from process.argv directly since this may be called\n * before Commander parses options.\n */\nexport function isJSONMode(): boolean {\n return process.argv.includes('--json')\n}\n\n/**\n * Output a successful result as JSON to stdout.\n */\nexport function outputSuccess<T>(data: T, warnings?: string[]): void {\n const output: CLIOutput<T> = { success: true, data }\n if (warnings && warnings.length > 0) {\n output.warnings = warnings\n }\n process.stdout.write(`${JSON.stringify(output)}\\n`)\n}\n\n/**\n * Output an error as JSON to stdout.\n */\nexport function outputError(code: string, message: string): void {\n const output: CLIOutput<never> = {\n success: false,\n error: { code, message },\n }\n process.stdout.write(`${JSON.stringify(output)}\\n`)\n}\n\n/**\n * Create an ora spinner that is silent in JSON mode.\n * Returns a no-op spinner interface when --json is active.\n */\nexport function createSpinner(text: string): Spinner | SpinnerLike {\n if (isJSONMode()) {\n return { ...noopSpinner, text }\n }\n return ora(text)\n}\n","import { createHash } from 'node:crypto'\n\nexport function computeSha256FromBuffer(content: Buffer | string): string {\n const hash = createHash('sha256').update(content).digest('base64')\n return `sha256-${hash}`\n}\n\nexport function computeSha256FromFiles(files: Array<{ path: string; content: string }>): string {\n const sorted = [...files].sort((a, b) => a.path.localeCompare(b.path))\n const combined = sorted.map((f) => `${f.path}\\0${f.content}`).join('\\0')\n return computeSha256FromBuffer(combined)\n}\n","import { existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from 'node:fs'\nimport { join } from 'node:path'\nimport type { LockfileV2 } from '@agentver/shared'\nimport { lockfileAnySchema } from '@agentver/shared'\nimport { serialiseDeterministic } from './serialise'\n\nconst LOCKFILE_DIR = '.agentver'\nconst LOCKFILE_FILE = 'lockfile.json'\n\nconst EMPTY_LOCKFILE: LockfileV2 = { version: 2, packages: {} }\n\nfunction getLockfilePath(projectRoot: string): string {\n return join(projectRoot, LOCKFILE_DIR, LOCKFILE_FILE)\n}\n\nfunction migrateV1ToV2(v1: {\n version: 1\n packages: Record<\n string,\n { version: string; resolved: string; integrity: string; agents: string[] }\n >\n}): LockfileV2 {\n const packages: LockfileV2['packages'] = {}\n\n for (const [name, pkg] of Object.entries(v1.packages)) {\n packages[name] = {\n source: {\n type: 'git',\n uri: 'unknown',\n path: '',\n ref: 'unknown',\n commit: 'unknown',\n },\n integrity: pkg.integrity,\n agents: pkg.agents,\n }\n }\n\n return { version: 2, packages }\n}\n\nexport function readLockfile(projectRoot: string): LockfileV2 {\n const lockfilePath = getLockfilePath(projectRoot)\n\n if (!existsSync(lockfilePath)) {\n return EMPTY_LOCKFILE\n }\n\n const raw = readFileSync(lockfilePath, 'utf-8')\n\n let parsed: unknown\n try {\n parsed = JSON.parse(raw)\n } catch {\n return EMPTY_LOCKFILE\n }\n\n const result = lockfileAnySchema.safeParse(parsed)\n if (!result.success) {\n return EMPTY_LOCKFILE\n }\n\n if (result.data.version === 1) {\n const migrated = migrateV1ToV2(result.data)\n writeLockfile(projectRoot, migrated)\n return migrated\n }\n\n return result.data\n}\n\nexport function writeLockfile(projectRoot: string, lockfile: LockfileV2): void {\n const dir = join(projectRoot, LOCKFILE_DIR)\n\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true })\n }\n\n const filePath = getLockfilePath(projectRoot)\n const tmpPath = `${filePath}.tmp`\n writeFileSync(tmpPath, serialiseDeterministic(lockfile))\n renameSync(tmpPath, filePath)\n}\n","import { z } from 'zod'\nimport { manifestV2PackageSchema } from './schemas'\n\n// --- CLI output envelope ---\n\nexport const cliErrorSchema = z.object({\n code: z.string(),\n message: z.string(),\n})\n\nexport type CLIError = z.infer<typeof cliErrorSchema>\n\nexport function createCLIOutputSchema<T extends z.ZodType>(dataSchema: T) {\n return z.object({\n success: z.boolean(),\n data: dataSchema.optional(),\n error: cliErrorSchema.optional(),\n warnings: z.array(z.string()).optional(),\n })\n}\n\nexport type CLIOutput<T> = {\n success: boolean\n data?: T\n error?: CLIError\n warnings?: string[]\n}\n\n// --- Per-command result schemas ---\n\nexport const loginResultSchema = z.object({\n user: z.object({\n id: z.string(),\n email: z.string(),\n name: z.string(),\n }),\n})\n\nexport type LoginResult = z.infer<typeof loginResultSchema>\n\nexport const logoutResultSchema = z.object({\n cleared: z.boolean(),\n})\n\nexport type LogoutResult = z.infer<typeof logoutResultSchema>\n\nexport const whoamiResultSchema = z.object({\n authenticated: z.boolean(),\n user: z\n .object({\n id: z.string(),\n email: z.string(),\n name: z.string(),\n })\n .optional(),\n platform: z.string().optional(),\n organisation: z.string().optional(),\n})\n\nexport type WhoamiResult = z.infer<typeof whoamiResultSchema>\n\nexport const installResultSchema = z.object({\n name: z.string(),\n source: z.object({\n type: z.string(),\n uri: z.string().optional(),\n baseUrl: z.string().optional(),\n }),\n agents: z.array(z.string()),\n path: z.string(),\n scope: z.string(),\n audit: z.object({\n passed: z.boolean(),\n findings: z.number(),\n blockers: z.number(),\n }),\n})\n\nexport type InstallResult = z.infer<typeof installResultSchema>\n\nexport const removeResultSchema = z.object({\n name: z.string(),\n removed: z.boolean(),\n paths: z.array(z.string()),\n})\n\nexport type RemoveResult = z.infer<typeof removeResultSchema>\n\nexport const updateResultSchema = z.object({\n updated: z.array(\n z.object({\n name: z.string(),\n fromRef: z.string(),\n toRef: z.string(),\n strategy: z.string(),\n })\n ),\n skipped: z.array(\n z.object({\n name: z.string(),\n reason: z.string(),\n })\n ),\n})\n\nexport type UpdateResult = z.infer<typeof updateResultSchema>\n\nexport const listResultSchema = z.object({\n packages: z.record(z.string(), manifestV2PackageSchema),\n})\n\nexport type ListResult = z.infer<typeof listResultSchema>\n\nexport const searchResultSchema = z.object({\n results: z.array(\n z.object({\n name: z.string(),\n description: z.string(),\n type: z.string(),\n source: z.string(),\n url: z.string().optional(),\n })\n ),\n})\n\nexport type SearchResult = z.infer<typeof searchResultSchema>\n\nexport const auditResultSchema = z.object({\n target: z.string(),\n passed: z.boolean(),\n findings: z.array(\n z.object({\n rule: z.string(),\n severity: z.string(),\n file: z.string(),\n line: z.number(),\n evidence: z.string(),\n })\n ),\n})\n\nexport type AuditResult = z.infer<typeof auditResultSchema>\n\nexport const scanResultSchema = z.object({\n agents: z.array(\n z.object({\n id: z.string(),\n name: z.string(),\n paths: z.array(z.string()),\n })\n ),\n skills: z.array(\n z.object({\n name: z.string(),\n path: z.string(),\n type: z.string(),\n })\n ),\n})\n\nexport type ScanResult = z.infer<typeof scanResultSchema>\n\nexport const statusResultSchema = z.object({\n packages: z.array(\n z.object({\n name: z.string(),\n status: z.string(),\n modified: z.boolean(),\n upstream: z.boolean(),\n pinned: z.boolean().optional(),\n })\n ),\n summary: z.object({\n total: z.number(),\n upToDate: z.number(),\n modified: z.number(),\n upstream: z.number(),\n unknown: z.number(),\n }),\n})\n\nexport type StatusResult = z.infer<typeof statusResultSchema>\n\nexport const diffResultSchema = z.object({\n name: z.string(),\n hunks: z.array(\n z.object({\n file: z.string(),\n additions: z.number(),\n deletions: z.number(),\n content: z.string(),\n })\n ),\n})\n\nexport type DiffResult = z.infer<typeof diffResultSchema>\n\nexport const proposeResultSchema = z.object({\n proposalId: z.string(),\n title: z.string(),\n url: z.string(),\n})\n\nexport type ProposeResult = z.infer<typeof proposeResultSchema>\n\nexport const proposalsResultSchema = z.object({\n proposals: z.array(\n z.object({\n id: z.string(),\n title: z.string(),\n status: z.string(),\n author: z.string(),\n packageName: z.string(),\n createdAt: z.string(),\n })\n ),\n})\n\nexport type ProposalsResult = z.infer<typeof proposalsResultSchema>\n\nexport const syncResultSchema = z.object({\n synced: z.number(),\n machineId: z.string(),\n packages: z.array(z.string()),\n})\n\nexport type SyncResult = z.infer<typeof syncResultSchema>\n\nexport const initResultSchema = z.object({\n name: z.string(),\n type: z.string(),\n path: z.string(),\n files: z.array(z.string()),\n})\n\nexport type InitResult = z.infer<typeof initResultSchema>\n\nexport const adoptResultSchema = z.object({\n adopted: z.array(\n z.object({\n name: z.string(),\n path: z.string(),\n type: z.string(),\n agents: z.array(z.string()),\n })\n ),\n skipped: z.array(\n z.object({\n name: z.string(),\n path: z.string(),\n reason: z.string(),\n })\n ),\n})\n\nexport type AdoptResult = z.infer<typeof adoptResultSchema>\n\nexport const infoResultSchema = z.object({\n name: z.string(),\n source: z.object({\n type: z.string(),\n uri: z.string().optional(),\n ref: z.string().optional(),\n commit: z.string().optional(),\n hostname: z.string().optional(),\n }),\n agents: z.array(z.string()),\n installedAt: z.string(),\n modified: z.boolean(),\n integrity: z.string().optional(),\n files: z.object({\n count: z.number(),\n totalSize: z.number(),\n }),\n skill: z\n .object({\n title: z.string(),\n description: z.string(),\n })\n .optional(),\n})\n\nexport type InfoResult = z.infer<typeof infoResultSchema>\n\nexport const doctorCheckSchema = z.object({\n name: z.string(),\n status: z.enum(['pass', 'fail', 'warn']),\n message: z.string(),\n})\n\nexport type DoctorCheck = z.infer<typeof doctorCheckSchema>\n\nexport const doctorResultSchema = z.object({\n checks: z.array(doctorCheckSchema),\n passed: z.number(),\n failed: z.number(),\n warnings: z.number(),\n})\n\nexport type DoctorResult = z.infer<typeof doctorResultSchema>\n","import { z } from 'zod'\nimport { PACKAGE_TYPES, type PackageType } from './constants'\n\n// Canonical list lives in @agentver/agent-definitions/types.ts — kept in sync manually.\n// Not imported directly to avoid pulling node:fs into client bundles via the agent-definitions barrel export.\nconst AGENT_IDS_FOR_SCHEMA = [\n 'adal',\n 'aider',\n 'amp',\n 'antigravity',\n 'augment',\n 'claude-code',\n 'claude-cowork',\n 'cline',\n 'codebuddy',\n 'codex',\n 'command-code',\n 'continue',\n 'copilot',\n 'cortex',\n 'crush',\n 'cursor',\n 'droid',\n 'gemini-cli',\n 'goose',\n 'iflow-cli',\n 'junie',\n 'kilo',\n 'kimi-cli',\n 'kiro-cli',\n 'kode',\n 'mcpjam',\n 'mistral-vibe',\n 'mux',\n 'neovate',\n 'openclaw',\n 'opencode',\n 'openhands',\n 'pi',\n 'pochi',\n 'qoder',\n 'qwen-code',\n 'replit',\n 'roo',\n 'trae',\n 'trae-cn',\n 'universal',\n 'windsurf',\n 'zencoder',\n] as const\n\nconst agentIdEnum = z.enum(AGENT_IDS_FOR_SCHEMA)\n\nexport const skillMetadataSchema = z.object({\n name: z.string().min(1).max(100),\n description: z.string().max(500).optional(),\n version: z.string().regex(/^\\d+\\.\\d+\\.\\d+(-[\\w.]+)?$/, 'Must be valid semver'),\n type: z.enum(PACKAGE_TYPES),\n tags: z.array(z.string().max(50)).max(20).default([]),\n agents: z.array(agentIdEnum).default([]),\n})\n\nexport type SkillMetadata = z.infer<typeof skillMetadataSchema>\n\nconst installedPackageSchema = z.object({\n name: z.string(),\n version: z.string(),\n agents: z.array(z.string()).default([]),\n installedAt: z.string().datetime(),\n})\n\nexport const manifestSchema = z.object({\n version: z.literal(1),\n packages: z.record(z.string(), installedPackageSchema),\n})\n\nexport type Manifest = z.infer<typeof manifestSchema>\n\nconst lockedPackageSchema = z.object({\n version: z.string(),\n resolved: z.string().url(),\n integrity: z.string().regex(/^sha256-/),\n agents: z.array(z.string()),\n})\n\nexport const lockfileSchema = z.object({\n version: z.literal(1),\n packages: z.record(z.string(), lockedPackageSchema),\n})\n\nexport type Lockfile = z.infer<typeof lockfileSchema>\n\n// --- v2 schemas ---\n\nexport const gitSourceSchema = z.object({\n type: z.literal('git'),\n uri: z.string().min(1),\n path: z.string(),\n ref: z.string().min(1),\n commit: z.string().min(7),\n})\n\nexport type GitSource = z.infer<typeof gitSourceSchema>\n\nexport const wellKnownSourceSchema = z.object({\n type: z.literal('well-known'),\n baseUrl: z.string().min(1),\n hostname: z.string().min(1),\n skillName: z.string().min(1),\n})\n\nexport type WellKnownSource = z.infer<typeof wellKnownSourceSchema>\n\nexport const packageSourceSchema = z.discriminatedUnion('type', [\n gitSourceSchema,\n wellKnownSourceSchema,\n])\n\nexport type PackageSource = z.infer<typeof packageSourceSchema>\n\nexport const manifestV2PackageSchema = z.object({\n source: packageSourceSchema,\n agents: z.array(z.string()).default([]),\n installedAt: z.string().datetime(),\n modified: z.boolean().default(false),\n pinned: z.boolean().optional(),\n})\n\nexport type ManifestV2Package = z.infer<typeof manifestV2PackageSchema>\n\nexport const manifestV2Schema = z.object({\n version: z.literal(2),\n packages: z.record(z.string(), manifestV2PackageSchema),\n})\n\nexport type ManifestV2 = z.infer<typeof manifestV2Schema>\n\nexport const lockfileV2PackageSchema = z.object({\n source: packageSourceSchema,\n integrity: z.string().regex(/^sha256-/),\n agents: z.array(z.string()),\n})\n\nexport type LockfileV2Package = z.infer<typeof lockfileV2PackageSchema>\n\nexport const lockfileV2Schema = z.object({\n version: z.literal(2),\n packages: z.record(z.string(), lockfileV2PackageSchema),\n})\n\nexport type LockfileV2 = z.infer<typeof lockfileV2Schema>\n\nexport const manifestAnySchema = z.discriminatedUnion('version', [manifestSchema, manifestV2Schema])\n\nexport type ManifestAny = z.infer<typeof manifestAnySchema>\n\nexport const lockfileAnySchema = z.discriminatedUnion('version', [lockfileSchema, lockfileV2Schema])\n\nexport type LockfileAny = z.infer<typeof lockfileAnySchema>\n\n// --- Package structure ---\n\nexport const packageStructureSchema = z.object({\n type: z.enum(PACKAGE_TYPES),\n entryFile: z.string(),\n requiredFiles: z.array(z.string()).default([]),\n optionalDirs: z.array(z.string()).default([]),\n})\n\nexport type PackageStructure = z.infer<typeof packageStructureSchema>\n\nexport const PACKAGE_STRUCTURES: Record<PackageType, PackageStructure> = {\n SKILL: {\n type: 'SKILL',\n entryFile: 'SKILL.md',\n requiredFiles: ['SKILL.md'],\n optionalDirs: ['scripts', 'references', 'assets'],\n },\n AGENT_CONFIG: {\n type: 'AGENT_CONFIG',\n entryFile: 'CLAUDE.md',\n requiredFiles: [],\n optionalDirs: ['rules', 'hooks'],\n },\n PLUGIN: {\n type: 'PLUGIN',\n entryFile: 'plugin.json',\n requiredFiles: ['plugin.json'],\n optionalDirs: ['scripts', 'mcp'],\n },\n SCRIPT: {\n type: 'SCRIPT',\n entryFile: 'script.json',\n requiredFiles: ['script.json'],\n optionalDirs: ['src'],\n },\n PROMPT: {\n type: 'PROMPT',\n entryFile: 'PROMPT.md',\n requiredFiles: ['PROMPT.md'],\n optionalDirs: ['variants'],\n },\n}\n\n// --- Entry file schemas per package type ---\n\nexport const skillFrontmatterSchema = z.object({\n name: z.string().min(1),\n description: z.string().min(1),\n version: z\n .string()\n .regex(/^\\d+\\.\\d+\\.\\d+(-[\\w.]+)?$/)\n .optional(),\n license: z.string().optional(),\n compatibility: z.array(z.string()).optional(),\n metadata: z.record(z.string(), z.string()).optional(),\n 'allowed-tools': z.array(z.string()).optional(),\n})\n\nexport type SkillFrontmatter = z.infer<typeof skillFrontmatterSchema>\n\nexport const AGENT_CONFIG_FILES = [\n 'CLAUDE.md',\n 'AGENTS.md',\n '.cursorrules',\n '.windsurfrules',\n '.github/copilot-instructions.md',\n '.goose/config.yaml',\n '.roo/rules',\n '.cursor/rules',\n '.junie/guidelines.md',\n] as const\n\nexport type AgentConfigFile = (typeof AGENT_CONFIG_FILES)[number]\n\nexport const pluginManifestSchema = z.object({\n name: z.string().min(1),\n description: z.string().optional(),\n version: z\n .string()\n .regex(/^\\d+\\.\\d+\\.\\d+(-[\\w.]+)?$/)\n .optional(),\n tools: z\n .array(\n z.object({\n name: z.string(),\n description: z.string().optional(),\n command: z.string().optional(),\n })\n )\n .optional(),\n hooks: z.record(z.string(), z.string()).optional(),\n rules: z.array(z.string()).optional(),\n mcp: z\n .object({\n serverCommand: z.string(),\n args: z.array(z.string()).optional(),\n })\n .optional(),\n})\n\nexport type PluginManifest = z.infer<typeof pluginManifestSchema>\n\nexport const scriptManifestSchema = z.object({\n name: z.string().min(1),\n description: z.string().optional(),\n version: z\n .string()\n .regex(/^\\d+\\.\\d+\\.\\d+(-[\\w.]+)?$/)\n .optional(),\n runtime: z.enum(['node', 'bun', 'python', 'bash']),\n entryPoint: z.string().min(1),\n args: z.array(z.string()).optional(),\n})\n\nexport type ScriptManifest = z.infer<typeof scriptManifestSchema>\n\nexport const promptFrontmatterSchema = z.object({\n name: z.string().min(1),\n description: z.string().min(1),\n version: z\n .string()\n .regex(/^\\d+\\.\\d+\\.\\d+(-[\\w.]+)?$/)\n .optional(),\n category: z.string().optional(),\n variables: z\n .array(\n z.object({\n name: z.string(),\n description: z.string().optional(),\n required: z.boolean().optional(),\n default: z.string().optional(),\n })\n )\n .optional(),\n})\n\nexport type PromptFrontmatter = z.infer<typeof promptFrontmatterSchema>\n\n// --- File manifest ---\n\nexport const fileManifestEntrySchema = z.object({\n path: z.string(),\n size: z.number().int().nonnegative(),\n hash: z.string(),\n contentType: z.string().default('text/plain'),\n})\n\nexport type FileManifestEntry = z.infer<typeof fileManifestEntrySchema>\n\nexport const fileManifestSchema = z.object({\n files: z.array(fileManifestEntrySchema),\n totalSize: z.number().int().nonnegative(),\n entryFile: z.string(),\n packageType: z.enum(PACKAGE_TYPES),\n})\n\nexport type FileManifest = z.infer<typeof fileManifestSchema>\n\n// --- Agent config ---\n\nexport const agentConfigSchema = z.object({\n name: z.string().min(1),\n description: z.string().min(1),\n targetAgents: z.array(agentIdEnum).min(1),\n composable: z.boolean().default(false),\n baseConfig: z.string().optional(),\n sections: z.array(z.string()).optional(),\n})\n\nexport type AgentConfig = z.infer<typeof agentConfigSchema>\n","export const PACKAGE_TYPES = ['SKILL', 'AGENT_CONFIG', 'PLUGIN', 'SCRIPT', 'PROMPT'] as const\nexport type PackageType = (typeof PACKAGE_TYPES)[number]\n\nexport const VISIBILITY_LEVELS = ['PUBLIC', 'PRIVATE', 'TEAM'] as const\nexport type VisibilityLevel = (typeof VISIBILITY_LEVELS)[number]\n\nexport const WARNING_NO_LICENCE =\n 'No licence specified. Consider adding an SPDX licence identifier.'\n","export type AgentverErrorCode =\n | 'NOT_FOUND'\n | 'UNAUTHORISED'\n | 'FORBIDDEN'\n | 'CONFLICT'\n | 'VALIDATION_ERROR'\n | 'INTERNAL_ERROR'\n | 'RATE_LIMITED'\n | 'STORAGE_ERROR'\n | 'INTEGRITY_ERROR'\n\nexport class AgentverError extends Error {\n readonly code: AgentverErrorCode\n\n constructor(code: AgentverErrorCode, message: string) {\n super(message)\n this.name = 'AgentverError'\n this.code = code\n }\n}\n","export function urlToObject(url) {\n return {\n href: url.href,\n protocol: url.protocol,\n username: url.username,\n password: url.password,\n host: url.host,\n hostname: url.hostname,\n port: url.port,\n pathname: url.pathname,\n search: url.search,\n searchParams: [...url.searchParams].map(([key, value]) => ({ key, value })),\n hash: url.hash,\n origin: url.origin,\n };\n}\n","export const prettyLogStyles = {\n reset: [0, 0],\n bold: [1, 22],\n dim: [2, 22],\n italic: [3, 23],\n underline: [4, 24],\n overline: [53, 55],\n inverse: [7, 27],\n hidden: [8, 28],\n strikethrough: [9, 29],\n black: [30, 39],\n red: [31, 39],\n green: [32, 39],\n yellow: [33, 39],\n blue: [34, 39],\n magenta: [35, 39],\n cyan: [36, 39],\n white: [37, 39],\n blackBright: [90, 39],\n redBright: [91, 39],\n greenBright: [92, 39],\n yellowBright: [93, 39],\n blueBright: [94, 39],\n magentaBright: [95, 39],\n cyanBright: [96, 39],\n whiteBright: [97, 39],\n bgBlack: [40, 49],\n bgRed: [41, 49],\n bgGreen: [42, 49],\n bgYellow: [43, 49],\n bgBlue: [44, 49],\n bgMagenta: [45, 49],\n bgCyan: [46, 49],\n bgWhite: [47, 49],\n bgBlackBright: [100, 49],\n bgRedBright: [101, 49],\n bgGreenBright: [102, 49],\n bgYellowBright: [103, 49],\n bgBlueBright: [104, 49],\n bgMagentaBright: [105, 49],\n bgCyanBright: [106, 49],\n bgWhiteBright: [107, 49],\n};\n","import { prettyLogStyles } from \"./prettyLogStyles.js\";\nexport function formatTemplate(settings, template, values, hideUnsetPlaceholder = false) {\n const templateString = String(template);\n const ansiColorWrap = (placeholderValue, code) => `\\u001b[${code[0]}m${placeholderValue}\\u001b[${code[1]}m`;\n const styleWrap = (value, style) => {\n if (style != null && typeof style === \"string\") {\n return ansiColorWrap(value, prettyLogStyles[style]);\n }\n else if (style != null && Array.isArray(style)) {\n return style.reduce((prevValue, thisStyle) => styleWrap(prevValue, thisStyle), value);\n }\n else {\n if (style != null && style[value.trim()] != null) {\n return styleWrap(value, style[value.trim()]);\n }\n else if (style != null && style[\"*\"] != null) {\n return styleWrap(value, style[\"*\"]);\n }\n else {\n return value;\n }\n }\n };\n const defaultStyle = null;\n return templateString.replace(/{{(.+?)}}/g, (_, placeholder) => {\n const value = values[placeholder] != null ? String(values[placeholder]) : hideUnsetPlaceholder ? \"\" : _;\n return settings.stylePrettyLogs\n ? styleWrap(value, settings?.prettyLogStyles?.[placeholder] ?? defaultStyle) + ansiColorWrap(\"\", prettyLogStyles.reset)\n : value;\n });\n}\n","export function formatNumberAddZeros(value, digits = 2, addNumber = 0) {\n if (value != null && isNaN(value)) {\n return \"\";\n }\n value = value != null ? value + addNumber : value;\n return digits === 2\n ? value == null\n ? \"--\"\n : value < 10\n ? \"0\" + value\n : value.toString()\n : value == null\n ? \"---\"\n : value < 10\n ? \"00\" + value\n : value < 100\n ? \"0\" + value\n : value.toString();\n}\n","import { formatTemplate } from \"../formatTemplate.js\";\nimport { formatNumberAddZeros } from \"../formatNumberAddZeros.js\";\nexport function buildPrettyMeta(settings, meta) {\n if (meta == null) {\n return {\n text: \"\",\n template: settings.prettyLogTemplate,\n placeholders: {},\n };\n }\n let template = settings.prettyLogTemplate;\n const placeholderValues = {};\n if (template.includes(\"{{yyyy}}.{{mm}}.{{dd}} {{hh}}:{{MM}}:{{ss}}:{{ms}}\")) {\n template = template.replace(\"{{yyyy}}.{{mm}}.{{dd}} {{hh}}:{{MM}}:{{ss}}:{{ms}}\", \"{{dateIsoStr}}\");\n }\n else {\n if (settings.prettyLogTimeZone === \"UTC\") {\n placeholderValues[\"yyyy\"] = meta.date?.getUTCFullYear() ?? \"----\";\n placeholderValues[\"mm\"] = formatNumberAddZeros(meta.date?.getUTCMonth(), 2, 1);\n placeholderValues[\"dd\"] = formatNumberAddZeros(meta.date?.getUTCDate(), 2);\n placeholderValues[\"hh\"] = formatNumberAddZeros(meta.date?.getUTCHours(), 2);\n placeholderValues[\"MM\"] = formatNumberAddZeros(meta.date?.getUTCMinutes(), 2);\n placeholderValues[\"ss\"] = formatNumberAddZeros(meta.date?.getUTCSeconds(), 2);\n placeholderValues[\"ms\"] = formatNumberAddZeros(meta.date?.getUTCMilliseconds(), 3);\n }\n else {\n placeholderValues[\"yyyy\"] = meta.date?.getFullYear() ?? \"----\";\n placeholderValues[\"mm\"] = formatNumberAddZeros(meta.date?.getMonth(), 2, 1);\n placeholderValues[\"dd\"] = formatNumberAddZeros(meta.date?.getDate(), 2);\n placeholderValues[\"hh\"] = formatNumberAddZeros(meta.date?.getHours(), 2);\n placeholderValues[\"MM\"] = formatNumberAddZeros(meta.date?.getMinutes(), 2);\n placeholderValues[\"ss\"] = formatNumberAddZeros(meta.date?.getSeconds(), 2);\n placeholderValues[\"ms\"] = formatNumberAddZeros(meta.date?.getMilliseconds(), 3);\n }\n }\n const dateInSettingsTimeZone = settings.prettyLogTimeZone === \"UTC\" ? meta.date : meta.date != null ? new Date(meta.date.getTime() - meta.date.getTimezoneOffset() * 60000) : undefined;\n placeholderValues[\"rawIsoStr\"] = dateInSettingsTimeZone?.toISOString() ?? \"\";\n placeholderValues[\"dateIsoStr\"] = dateInSettingsTimeZone?.toISOString().replace(\"T\", \" \").replace(\"Z\", \"\") ?? \"\";\n placeholderValues[\"logLevelName\"] = meta.logLevelName;\n placeholderValues[\"fileNameWithLine\"] = meta.path?.fileNameWithLine ?? \"\";\n placeholderValues[\"filePathWithLine\"] = meta.path?.filePathWithLine ?? \"\";\n placeholderValues[\"fullFilePath\"] = meta.path?.fullFilePath ?? \"\";\n let parentNamesString = settings.parentNames?.join(settings.prettyErrorParentNamesSeparator);\n parentNamesString = parentNamesString != null && meta.name != null ? parentNamesString + settings.prettyErrorParentNamesSeparator : undefined;\n const combinedName = meta.name != null || parentNamesString != null ? `${parentNamesString ?? \"\"}${meta.name ?? \"\"}` : \"\";\n placeholderValues[\"name\"] = combinedName;\n placeholderValues[\"nameWithDelimiterPrefix\"] = combinedName.length > 0 ? settings.prettyErrorLoggerNameDelimiter + combinedName : \"\";\n placeholderValues[\"nameWithDelimiterSuffix\"] = combinedName.length > 0 ? combinedName + settings.prettyErrorLoggerNameDelimiter : \"\";\n if (settings.overwrite?.addPlaceholders != null) {\n settings.overwrite.addPlaceholders(meta, placeholderValues);\n }\n return {\n text: formatTemplate(settings, template, placeholderValues),\n template,\n placeholders: placeholderValues,\n };\n}\n","const DEFAULT_IGNORE_PATTERNS = [\n /(?:^|[\\\\/])node_modules[\\\\/].*tslog/i,\n /(?:^|[\\\\/])deps[\\\\/].*tslog/i,\n /tslog[\\\\/]+src[\\\\/]+internal[\\\\/]/i,\n /tslog[\\\\/]+src[\\\\/]BaseLogger/i,\n /tslog[\\\\/]+src[\\\\/]index/i,\n];\nexport function splitStackLines(error) {\n const stack = typeof error?.stack === \"string\" ? error.stack : undefined;\n if (stack == null || stack.length === 0) {\n return [];\n }\n return stack.split(\"\\n\").map((line) => line.trimEnd());\n}\nexport function sanitizeStackLines(lines) {\n return lines.filter((line) => line.length > 0 && !/^\\s*Error\\b/.test(line));\n}\nexport function toStackFrames(lines, parseLine) {\n const frames = [];\n for (const line of lines) {\n const frame = parseLine(line);\n if (frame != null) {\n frames.push(frame);\n }\n }\n return frames;\n}\nexport function findFirstExternalFrameIndex(frames, ignorePatterns = DEFAULT_IGNORE_PATTERNS) {\n for (let index = 0; index < frames.length; index += 1) {\n const frame = frames[index];\n const filePathCandidate = frame.filePath ?? \"\";\n const fullPathCandidate = frame.fullFilePath ?? \"\";\n if (!ignorePatterns.some((pattern) => pattern.test(filePathCandidate) || pattern.test(fullPathCandidate))) {\n return index;\n }\n }\n return 0;\n}\nexport function getFrameAt(frames, index) {\n if (index < 0 || index >= frames.length) {\n return undefined;\n }\n return frames[index];\n}\nexport function getCleanStackLines(error) {\n return sanitizeStackLines(splitStackLines(error));\n}\nexport function buildStackTrace(error, parseLine) {\n return toStackFrames(getCleanStackLines(error), parseLine);\n}\nexport function isIgnorableFrame(frame, ignorePatterns) {\n const filePathCandidate = frame.filePath ?? \"\";\n const fullPathCandidate = frame.fullFilePath ?? \"\";\n return ignorePatterns.some((pattern) => pattern.test(filePathCandidate) || pattern.test(fullPathCandidate));\n}\nexport function clampIndex(index, maxExclusive) {\n if (index < 0) {\n return 0;\n }\n if (index >= maxExclusive) {\n return Math.max(0, maxExclusive - 1);\n }\n return index;\n}\nexport function pickCallerStackFrame(error, parseLine, options = {}) {\n const lines = getCleanStackLines(error);\n const frames = toStackFrames(lines, parseLine);\n if (frames.length === 0) {\n return undefined;\n }\n const ignorePatterns = options.ignorePatterns ?? DEFAULT_IGNORE_PATTERNS;\n const autoIndex = findFirstExternalFrameIndex(frames, ignorePatterns);\n const resolvedIndex = options.stackDepthLevel != null ? options.stackDepthLevel : autoIndex;\n return getFrameAt(frames, clampIndex(resolvedIndex, frames.length));\n}\nexport function getDefaultIgnorePatterns() {\n return [...DEFAULT_IGNORE_PATTERNS];\n}\n","import { buildStackTrace } from \"./stackTrace.js\";\nconst DEFAULT_CAUSE_DEPTH = 5;\nexport function collectErrorCauses(error, options = {}) {\n const maxDepth = options.maxDepth ?? DEFAULT_CAUSE_DEPTH;\n const causes = [];\n const visited = new Set();\n let current = error;\n let depth = 0;\n while (current != null && depth < maxDepth) {\n const cause = current?.cause;\n if (cause == null || visited.has(cause)) {\n break;\n }\n visited.add(cause);\n causes.push(toError(cause));\n current = cause;\n depth += 1;\n }\n return causes;\n}\nexport function toError(value) {\n if (value instanceof Error) {\n return value;\n }\n const error = new Error(typeof value === \"string\" ? value : JSON.stringify(value));\n if (typeof value === \"object\" && value != null) {\n Object.assign(error, value);\n }\n return error;\n}\nexport function toErrorObject(error, parseLine) {\n return {\n nativeError: error,\n name: error.name ?? \"Error\",\n message: error.message ?? \"\",\n stack: buildStackTrace(error, parseLine),\n };\n}\n","export function jsonStringifyRecursive(obj) {\n const cache = new Set();\n return JSON.stringify(obj, (key, value) => {\n if (typeof value === \"object\" && value !== null) {\n if (cache.has(value)) {\n return \"[Circular]\";\n }\n cache.add(value);\n }\n if (typeof value === \"bigint\") {\n return `${value}`;\n }\n if (typeof value === \"undefined\") {\n return \"[undefined]\";\n }\n return value;\n });\n}\n","import { prettyLogStyles } from \"../prettyLogStyles.js\";\nimport { jsonStringifyRecursive } from \"./jsonStringifyRecursive.js\";\nexport function inspect(obj, opts) {\n const ctx = {\n seen: [],\n stylize: stylizeNoColor,\n };\n if (opts != null) {\n _extend(ctx, opts);\n }\n if (isUndefined(ctx.showHidden))\n ctx.showHidden = false;\n if (isUndefined(ctx.depth))\n ctx.depth = 2;\n if (isUndefined(ctx.colors))\n ctx.colors = true;\n if (isUndefined(ctx.customInspect))\n ctx.customInspect = true;\n if (ctx.colors)\n ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\ninspect.colors = prettyLogStyles;\ninspect.styles = {\n special: \"cyan\",\n number: \"yellow\",\n boolean: \"yellow\",\n undefined: \"grey\",\n null: \"bold\",\n string: \"green\",\n date: \"magenta\",\n regexp: \"red\",\n};\nfunction isBoolean(arg) {\n return typeof arg === \"boolean\";\n}\nfunction isUndefined(arg) {\n return arg === undefined;\n}\nfunction stylizeNoColor(str) {\n return str;\n}\nfunction stylizeWithColor(str, styleType) {\n const style = inspect.styles[styleType];\n if (style != null && inspect?.colors?.[style]?.[0] != null && inspect?.colors?.[style]?.[1] != null) {\n return \"\\u001b[\" + inspect.colors[style][0] + \"m\" + str + \"\\u001b[\" + inspect.colors[style][1] + \"m\";\n }\n else {\n return str;\n }\n}\nfunction isFunction(arg) {\n return typeof arg === \"function\";\n}\nfunction isString(arg) {\n return typeof arg === \"string\";\n}\nfunction isNumber(arg) {\n return typeof arg === \"number\";\n}\nfunction isNull(arg) {\n return arg === null;\n}\nfunction hasOwn(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\nfunction isRegExp(re) {\n return isObject(re) && objectToString(re) === \"[object RegExp]\";\n}\nfunction isObject(arg) {\n return typeof arg === \"object\" && arg !== null;\n}\nfunction isError(e) {\n return isObject(e) && (objectToString(e) === \"[object Error]\" || e instanceof Error);\n}\nfunction isDate(d) {\n return isObject(d) && objectToString(d) === \"[object Date]\";\n}\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\nfunction arrayToHash(array) {\n const hash = {};\n array.forEach((val) => {\n hash[val] = true;\n });\n return hash;\n}\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n const output = [];\n for (let i = 0, l = value.length; i < l; ++i) {\n if (hasOwn(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, String(i), true));\n }\n else {\n output.push(\"\");\n }\n }\n keys.forEach((key) => {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, key, true));\n }\n });\n return output;\n}\nfunction formatError(value) {\n return \"[\" + Error.prototype.toString.call(value) + \"]\";\n}\nexport function formatValue(ctx, value, recurseTimes = 0) {\n if (ctx.customInspect &&\n value != null &&\n isFunction(value) &&\n value?.inspect !== inspect &&\n !(value?.constructor && value?.constructor.prototype === value)) {\n if (typeof value.inspect !== \"function\" && value.toString != null) {\n return value.toString();\n }\n let ret = value?.inspect(recurseTimes, ctx);\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n const primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n let keys = Object.keys(value);\n const visibleKeys = arrayToHash(keys);\n try {\n if (ctx.showHidden && Object.getOwnPropertyNames) {\n keys = Object.getOwnPropertyNames(value);\n }\n }\n catch {\n }\n if (isError(value) && (keys.indexOf(\"message\") >= 0 || keys.indexOf(\"description\") >= 0)) {\n return formatError(value);\n }\n if (keys.length === 0) {\n if (isFunction(ctx.stylize)) {\n if (isFunction(value)) {\n const name = value.name ? \": \" + value.name : \"\";\n return ctx.stylize(\"[Function\" + name + \"]\", \"special\");\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), \"regexp\");\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toISOString.call(value), \"date\");\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n else {\n return value;\n }\n }\n let base = \"\";\n let array = false;\n let braces = [\"{\\n\", \"\\n}\"];\n if (Array.isArray(value)) {\n array = true;\n braces = [\"[\\n\", \"\\n]\"];\n }\n if (isFunction(value)) {\n const n = value.name ? \": \" + value.name : \"\";\n base = \" [Function\" + n + \"]\";\n }\n if (isRegExp(value)) {\n base = \" \" + RegExp.prototype.toString.call(value);\n }\n if (isDate(value)) {\n base = \" \" + Date.prototype.toUTCString.call(value);\n }\n if (isError(value)) {\n base = \" \" + formatError(value);\n }\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), \"regexp\");\n }\n else {\n return ctx.stylize(\"[Object]\", \"special\");\n }\n }\n ctx.seen.push(value);\n let output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n }\n else {\n output = keys.map((key) => {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n ctx.seen.pop();\n return reduceToSingleString(output, base, braces);\n}\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n let name, str;\n let desc = { value: void 0 };\n try {\n desc.value = value[key];\n }\n catch {\n }\n try {\n if (Object.getOwnPropertyDescriptor) {\n desc = Object.getOwnPropertyDescriptor(value, key) || desc;\n }\n }\n catch {\n }\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize(\"[Getter/Setter]\", \"special\");\n }\n else {\n str = ctx.stylize(\"[Getter]\", \"special\");\n }\n }\n else {\n if (desc.set) {\n str = ctx.stylize(\"[Setter]\", \"special\");\n }\n }\n if (!hasOwn(visibleKeys, key)) {\n name = \"[\" + key + \"]\";\n }\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, undefined);\n }\n else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n if (str.indexOf(\"\\n\") > -1) {\n if (array) {\n str = str\n .split(\"\\n\")\n .map((line) => {\n return \" \" + line;\n })\n .join(\"\\n\")\n .substr(2);\n }\n else {\n str =\n \"\\n\" +\n str\n .split(\"\\n\")\n .map((line) => {\n return \" \" + line;\n })\n .join(\"\\n\");\n }\n }\n }\n else {\n str = ctx.stylize(\"[Circular]\", \"special\");\n }\n }\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify(\"\" + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.substr(1, name.length - 2);\n name = ctx.stylize(name, \"name\");\n }\n else {\n name = name\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, \"\\\\'\")\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, \"string\");\n }\n }\n return name + \": \" + str;\n}\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value))\n return ctx.stylize(\"undefined\", \"undefined\");\n if (isString(value)) {\n const simple = \"'\" + JSON.stringify(value).replace(/^\"|\"$/g, \"\").replace(/'/g, \"\\\\'\").replace(/\\\\\"/g, \"\\\\'\") + \"'\";\n return ctx.stylize(simple, \"string\");\n }\n if (isNumber(value))\n return ctx.stylize(\"\" + value, \"number\");\n if (isBoolean(value))\n return ctx.stylize(\"\" + value, \"boolean\");\n if (isNull(value))\n return ctx.stylize(\"null\", \"null\");\n}\nfunction reduceToSingleString(output, base, braces) {\n return braces[0] + (base === \"\" ? \"\" : base + \"\\n\") + \" \" + output.join(\",\\n \") + \" \" + braces[1];\n}\nfunction _extend(origin, add) {\n const typedOrigin = { ...origin };\n if (!add || !isObject(add))\n return origin;\n const clonedAdd = { ...add };\n const keys = Object.keys(add);\n let i = keys.length;\n while (i--) {\n typedOrigin[keys[i]] = clonedAdd[keys[i]];\n }\n return typedOrigin;\n}\nexport function formatWithOptions(inspectOptions, ...args) {\n const ctx = {\n seen: [],\n stylize: stylizeNoColor,\n };\n if (inspectOptions != null) {\n _extend(ctx, inspectOptions);\n }\n const first = args[0];\n let a = 0;\n let str = \"\";\n let join = \"\";\n if (typeof first === \"string\") {\n if (args.length === 1) {\n return first;\n }\n let tempStr;\n let lastPos = 0;\n for (let i = 0; i < first.length - 1; i++) {\n if (first.charCodeAt(i) === 37) {\n const nextChar = first.charCodeAt(++i);\n if (a + 1 !== args.length) {\n switch (nextChar) {\n case 115: {\n const tempArg = args[++a];\n if (typeof tempArg === \"number\") {\n tempStr = formatPrimitive(ctx, tempArg);\n }\n else if (typeof tempArg === \"bigint\") {\n tempStr = formatPrimitive(ctx, tempArg);\n }\n else if (typeof tempArg !== \"object\" || tempArg === null) {\n tempStr = String(tempArg);\n }\n else {\n tempStr = inspect(tempArg, {\n ...inspectOptions,\n compact: 3,\n colors: false,\n depth: 0,\n });\n }\n break;\n }\n case 106:\n tempStr = jsonStringifyRecursive(args[++a]);\n break;\n case 100: {\n const tempNum = args[++a];\n if (typeof tempNum === \"bigint\") {\n tempStr = formatPrimitive(ctx, tempNum);\n }\n else if (typeof tempNum === \"symbol\") {\n tempStr = \"NaN\";\n }\n else {\n tempStr = formatPrimitive(ctx, tempNum);\n }\n break;\n }\n case 79:\n tempStr = inspect(args[++a], inspectOptions);\n break;\n case 111:\n tempStr = inspect(args[++a], {\n ...inspectOptions,\n showHidden: true,\n showProxy: true,\n depth: 4,\n });\n break;\n case 105: {\n const tempInteger = args[++a];\n if (typeof tempInteger === \"bigint\") {\n tempStr = formatPrimitive(ctx, tempInteger);\n }\n else if (typeof tempInteger === \"symbol\") {\n tempStr = \"NaN\";\n }\n else {\n tempStr = formatPrimitive(ctx, parseInt(tempStr));\n }\n break;\n }\n case 102: {\n const tempFloat = args[++a];\n if (typeof tempFloat === \"symbol\") {\n tempStr = \"NaN\";\n }\n else {\n tempStr = formatPrimitive(ctx, parseInt(tempFloat));\n }\n break;\n }\n case 99:\n a += 1;\n tempStr = \"\";\n break;\n case 37:\n str += first.slice(lastPos, i);\n lastPos = i + 1;\n continue;\n default:\n continue;\n }\n if (lastPos !== i - 1) {\n str += first.slice(lastPos, i - 1);\n }\n str += tempStr;\n lastPos = i + 1;\n }\n else if (nextChar === 37) {\n str += first.slice(lastPos, i);\n lastPos = i + 1;\n }\n }\n }\n if (lastPos !== 0) {\n a++;\n join = \" \";\n if (lastPos < first.length) {\n str += first.slice(lastPos);\n }\n }\n }\n while (a < args.length) {\n const value = args[a];\n str += join;\n str += typeof value !== \"string\" ? inspect(value, inspectOptions) : value;\n join = \" \";\n a++;\n }\n return str;\n}\n","export function safeGetCwd() {\n try {\n const nodeProcess = globalThis?.process;\n if (typeof nodeProcess?.cwd === \"function\") {\n return nodeProcess.cwd();\n }\n }\n catch {\n }\n try {\n const deno = globalThis?.[\"Deno\"];\n if (typeof deno?.cwd === \"function\") {\n return deno.cwd();\n }\n }\n catch {\n }\n return undefined;\n}\nexport function isBrowserEnvironment() {\n return typeof window !== \"undefined\" && typeof document !== \"undefined\";\n}\nexport function consoleSupportsCssStyling() {\n if (!isBrowserEnvironment()) {\n return false;\n }\n const navigatorObj = globalThis?.navigator;\n const userAgent = navigatorObj?.userAgent ?? \"\";\n if (/firefox/i.test(userAgent)) {\n return true;\n }\n const windowObj = globalThis;\n if (windowObj?.CSS?.supports?.(\"color\", \"#000\")) {\n return true;\n }\n return /safari/i.test(userAgent) && !/chrome/i.test(userAgent);\n}\n","import { urlToObject } from \"./urlToObj.js\";\nimport { buildPrettyMeta } from \"./internal/metaFormatting.js\";\nimport { toError, collectErrorCauses } from \"./internal/errorUtils.js\";\nimport { formatTemplate } from \"./formatTemplate.js\";\nimport { formatWithOptions } from \"./internal/util.inspect.polyfill.js\";\nimport { buildStackTrace, findFirstExternalFrameIndex, clampIndex, getDefaultIgnorePatterns } from \"./internal/stackTrace.js\";\nimport { safeGetCwd, consoleSupportsCssStyling, isBrowserEnvironment } from \"./internal/environment.js\";\nimport { jsonStringifyRecursive } from \"./internal/jsonStringifyRecursive.js\";\nexport function createLoggerEnvironment() {\n const runtimeInfo = detectRuntimeInfo();\n const meta = createRuntimeMeta(runtimeInfo);\n const usesBrowserStack = runtimeInfo.name === \"browser\" || runtimeInfo.name === \"worker\";\n const callerIgnorePatterns = usesBrowserStack\n ? [...getDefaultIgnorePatterns(), /node_modules[\\\\/].*tslog/i]\n : [...getDefaultIgnorePatterns(), /node:(?:internal|vm)/i, /\\binternal[\\\\/]/i];\n let cachedCwd;\n const environment = {\n getMeta(logLevelId, logLevelName, stackDepthLevel, hideLogPositionForPerformance, name, parentNames) {\n return Object.assign({}, meta, {\n name,\n parentNames,\n date: new Date(),\n logLevelId,\n logLevelName,\n path: !hideLogPositionForPerformance ? environment.getCallerStackFrame(stackDepthLevel) : undefined,\n });\n },\n getCallerStackFrame(stackDepthLevel, error = new Error()) {\n const frames = buildStackTrace(error, (line) => parseStackLine(line));\n if (frames.length === 0) {\n return {};\n }\n const autoIndex = findFirstExternalFrameIndex(frames, callerIgnorePatterns);\n const useManualIndex = Number.isFinite(stackDepthLevel) && stackDepthLevel >= 0;\n const resolvedIndex = useManualIndex ? clampIndex(stackDepthLevel, frames.length) : clampIndex(autoIndex, frames.length);\n return frames[resolvedIndex] ?? {};\n },\n getErrorTrace(error) {\n return buildStackTrace(error, (line) => parseStackLine(line));\n },\n isError(value) {\n return isNativeError(value);\n },\n isBuffer(value) {\n return typeof Buffer !== \"undefined\" && typeof Buffer.isBuffer === \"function\" ? Buffer.isBuffer(value) : false;\n },\n prettyFormatLogObj(maskedArgs, settings) {\n return maskedArgs.reduce((result, arg) => {\n if (environment.isError(arg)) {\n result.errors.push(environment.prettyFormatErrorObj(arg, settings));\n }\n else {\n result.args.push(arg);\n }\n return result;\n }, { args: [], errors: [] });\n },\n prettyFormatErrorObj(error, settings) {\n const stackLines = formatStackFrames(environment.getErrorTrace(error), settings);\n const causeSections = collectErrorCauses(error).map((cause, index) => {\n const header = `Caused by (${index + 1}): ${cause.name ?? \"Error\"}${cause.message ? `: ${cause.message}` : \"\"}`;\n const frames = formatStackFrames(buildStackTrace(cause, (line) => parseStackLine(line)), settings);\n return [header, ...frames].join(\"\\n\");\n });\n const placeholderValuesError = {\n errorName: ` ${error.name} `,\n errorMessage: formatErrorMessage(error),\n errorStack: [...stackLines, ...causeSections].join(\"\\n\"),\n };\n return formatTemplate(settings, settings.prettyErrorTemplate, placeholderValuesError);\n },\n transportFormatted(logMetaMarkup, logArgs, logErrors, logMeta, settings) {\n const prettyLogs = settings.stylePrettyLogs !== false;\n const logErrorsStr = (logErrors.length > 0 && logArgs.length > 0 ? \"\\n\" : \"\") + logErrors.join(\"\\n\");\n const sanitizedMetaMarkup = stripAnsi(logMetaMarkup);\n const metaMarkupForText = prettyLogs ? logMetaMarkup : sanitizedMetaMarkup;\n if (shouldUseCss(prettyLogs)) {\n settings.prettyInspectOptions.colors = false;\n const formattedArgs = formatWithOptionsSafe(settings.prettyInspectOptions, logArgs);\n const cssMeta = logMeta != null ? buildCssMetaOutput(settings, logMeta) : { text: sanitizedMetaMarkup, styles: [] };\n const hasCssMeta = cssMeta.text.length > 0 && cssMeta.styles.length > 0;\n const metaOutput = hasCssMeta ? cssMeta.text : sanitizedMetaMarkup;\n const output = metaOutput + formattedArgs + logErrorsStr;\n if (hasCssMeta) {\n console.log(output, ...cssMeta.styles);\n }\n else {\n console.log(output);\n }\n return;\n }\n settings.prettyInspectOptions.colors = prettyLogs;\n const formattedArgs = formatWithOptionsSafe(settings.prettyInspectOptions, logArgs);\n console.log(metaMarkupForText + formattedArgs + logErrorsStr);\n },\n transportJSON(json) {\n console.log(jsonStringifyRecursive(json));\n },\n };\n if (getNodeEnv() === \"test\") {\n environment.__resetWorkingDirectoryCacheForTests = () => {\n cachedCwd = undefined;\n };\n }\n return environment;\n function parseStackLine(line) {\n return usesBrowserStack ? parseBrowserStackLine(line) : parseServerStackLine(line);\n }\n function parseServerStackLine(rawLine) {\n if (typeof rawLine !== \"string\" || rawLine.length === 0) {\n return undefined;\n }\n const trimmedLine = rawLine.trim();\n if (!trimmedLine.includes(\" at \") && !trimmedLine.startsWith(\"at \")) {\n return undefined;\n }\n const line = trimmedLine.replace(/^at\\s+/, \"\");\n let method;\n let location = line;\n const methodMatch = line.match(/^(.*?)\\s+\\((.*)\\)$/);\n if (methodMatch) {\n method = methodMatch[1];\n location = methodMatch[2];\n }\n const sanitizedLocation = location.replace(/^\\(/, \"\").replace(/\\)$/, \"\");\n const withoutQuery = sanitizedLocation.replace(/\\?.*$/, \"\");\n let fileLine;\n let fileColumn;\n let filePathCandidate = withoutQuery;\n const segments = withoutQuery.split(\":\");\n if (segments.length >= 3 && /^\\d+$/.test(segments[segments.length - 1] ?? \"\")) {\n fileColumn = segments.pop();\n fileLine = segments.pop();\n filePathCandidate = segments.join(\":\");\n }\n else if (segments.length >= 2 && /^\\d+$/.test(segments[segments.length - 1] ?? \"\")) {\n fileLine = segments.pop();\n filePathCandidate = segments.join(\":\");\n }\n let normalizedPath = filePathCandidate.replace(/^file:\\/\\//, \"\");\n const cwd = getWorkingDirectory();\n if (cwd != null && normalizedPath.startsWith(cwd)) {\n normalizedPath = normalizedPath.slice(cwd.length);\n normalizedPath = normalizedPath.replace(/^[\\\\/]/, \"\");\n }\n if (normalizedPath.length === 0) {\n normalizedPath = filePathCandidate;\n }\n const normalizedPathWithoutLine = normalizeFilePath(normalizedPath);\n const effectivePath = normalizedPathWithoutLine.length > 0 ? normalizedPathWithoutLine : normalizedPath;\n const pathSegments = effectivePath.split(/\\\\|\\//);\n const fileName = pathSegments[pathSegments.length - 1];\n const fileNameWithLine = fileName && fileLine ? `${fileName}:${fileLine}` : undefined;\n const filePathWithLine = effectivePath && fileLine ? `${effectivePath}:${fileLine}` : undefined;\n return {\n fullFilePath: sanitizedLocation,\n fileName,\n fileNameWithLine,\n fileColumn,\n fileLine,\n filePath: effectivePath,\n filePathWithLine,\n method,\n };\n }\n function parseBrowserStackLine(line) {\n const href = globalThis.location?.origin;\n if (line == null) {\n return undefined;\n }\n const match = line.match(BROWSER_PATH_REGEX);\n if (!match) {\n return undefined;\n }\n const filePath = match[1]?.replace(/\\?.*$/, \"\");\n if (filePath == null) {\n return undefined;\n }\n const pathParts = filePath.split(\"/\");\n const fileLine = match[2];\n const fileColumn = match[3];\n const fileName = pathParts[pathParts.length - 1];\n return {\n fullFilePath: href ? `${href}${filePath}` : filePath,\n fileName,\n fileNameWithLine: fileName && fileLine ? `${fileName}:${fileLine}` : undefined,\n fileColumn,\n fileLine,\n filePath,\n filePathWithLine: fileLine ? `${filePath}:${fileLine}` : undefined,\n method: undefined,\n };\n }\n function formatStackFrames(frames, settings) {\n return frames.map((stackFrame) => formatTemplate(settings, settings.prettyErrorStackTemplate, { ...stackFrame }, true));\n }\n function formatErrorMessage(error) {\n return Object.getOwnPropertyNames(error)\n .filter((key) => key !== \"stack\" && key !== \"cause\")\n .reduce((result, key) => {\n const value = error[key];\n if (typeof value === \"function\") {\n return result;\n }\n result.push(String(value));\n return result;\n }, [])\n .join(\", \");\n }\n function shouldUseCss(prettyLogs) {\n return prettyLogs && (runtimeInfo.name === \"browser\" || runtimeInfo.name === \"worker\") && consoleSupportsCssStyling();\n }\n function stripAnsi(value) {\n return value.replace(ANSI_REGEX, \"\");\n }\n function buildCssMetaOutput(settings, metaValue) {\n if (metaValue == null) {\n return { text: \"\", styles: [] };\n }\n const { template, placeholders } = buildPrettyMeta(settings, metaValue);\n const parts = [];\n const styles = [];\n let lastIndex = 0;\n const placeholderRegex = /{{(.+?)}}/g;\n let match;\n while ((match = placeholderRegex.exec(template)) != null) {\n if (match.index > lastIndex) {\n parts.push(template.slice(lastIndex, match.index));\n }\n const key = match[1];\n const rawValue = placeholders[key] != null ? String(placeholders[key]) : \"\";\n const tokens = collectStyleTokens(settings.prettyLogStyles?.[key], rawValue);\n const css = tokensToCss(tokens);\n if (css.length > 0) {\n parts.push(`%c${rawValue}%c`);\n styles.push(css, \"\");\n }\n else {\n parts.push(rawValue);\n }\n lastIndex = placeholderRegex.lastIndex;\n }\n if (lastIndex < template.length) {\n parts.push(template.slice(lastIndex));\n }\n return {\n text: parts.join(\"\"),\n styles,\n };\n }\n function collectStyleTokens(style, value) {\n if (style == null) {\n return [];\n }\n if (typeof style === \"string\") {\n return [style];\n }\n if (Array.isArray(style)) {\n return style.flatMap((token) => collectStyleTokens(token, value));\n }\n if (typeof style === \"object\") {\n const normalizedValue = value.trim();\n const nextStyle = style[normalizedValue] ?? style[\"*\"];\n if (nextStyle == null) {\n return [];\n }\n return collectStyleTokens(nextStyle, value);\n }\n return [];\n }\n function tokensToCss(tokens) {\n const seen = new Set();\n const cssParts = [];\n for (const token of tokens) {\n const css = styleTokenToCss(token);\n if (css != null && css.length > 0 && !seen.has(css)) {\n seen.add(css);\n cssParts.push(css);\n }\n }\n return cssParts.join(\"; \");\n }\n function styleTokenToCss(token) {\n const color = COLOR_TOKENS[token];\n if (color != null) {\n return `color: ${color}`;\n }\n const background = BACKGROUND_TOKENS[token];\n if (background != null) {\n return `background-color: ${background}`;\n }\n switch (token) {\n case \"bold\":\n return \"font-weight: bold\";\n case \"dim\":\n return \"opacity: 0.75\";\n case \"italic\":\n return \"font-style: italic\";\n case \"underline\":\n return \"text-decoration: underline\";\n case \"overline\":\n return \"text-decoration: overline\";\n case \"inverse\":\n return \"filter: invert(1)\";\n case \"hidden\":\n return \"visibility: hidden\";\n case \"strikethrough\":\n return \"text-decoration: line-through\";\n default:\n return undefined;\n }\n }\n function getWorkingDirectory() {\n if (cachedCwd === undefined) {\n cachedCwd = safeGetCwd() ?? null;\n }\n return cachedCwd ?? undefined;\n }\n function shouldCaptureHostname() {\n return runtimeInfo.name === \"node\" || runtimeInfo.name === \"deno\" || runtimeInfo.name === \"bun\";\n }\n function shouldCaptureRuntimeVersion() {\n return runtimeInfo.name === \"node\" || runtimeInfo.name === \"deno\" || runtimeInfo.name === \"bun\";\n }\n function createRuntimeMeta(info) {\n if (info.name === \"browser\" || info.name === \"worker\") {\n return {\n runtime: info.name,\n browser: info.userAgent,\n };\n }\n const metaStatic = {\n runtime: info.name,\n };\n if (shouldCaptureRuntimeVersion()) {\n metaStatic.runtimeVersion = info.version ?? \"unknown\";\n }\n if (shouldCaptureHostname()) {\n metaStatic.hostname = info.hostname ?? \"unknown\";\n }\n return metaStatic;\n }\n function formatWithOptionsSafe(options, args) {\n try {\n return formatWithOptions(options, ...args);\n }\n catch {\n return args.map(stringifyFallback).join(\" \");\n }\n }\n function stringifyFallback(value) {\n if (typeof value === \"string\") {\n return value;\n }\n try {\n return JSON.stringify(value);\n }\n catch {\n return String(value);\n }\n }\n function normalizeFilePath(value) {\n if (typeof value !== \"string\" || value.length === 0) {\n return value;\n }\n const replaced = value.replace(/\\\\+/g, \"\\\\\").replace(/\\\\/g, \"/\");\n const hasRootDoubleSlash = replaced.startsWith(\"//\");\n const hasLeadingSlash = replaced.startsWith(\"/\") && !hasRootDoubleSlash;\n const driveMatch = replaced.match(/^[A-Za-z]:/);\n const drivePrefix = driveMatch ? driveMatch[0] : \"\";\n const withoutDrive = drivePrefix ? replaced.slice(drivePrefix.length) : replaced;\n const segments = withoutDrive.split(\"/\");\n const normalizedSegments = [];\n for (const segment of segments) {\n if (segment === \"\" || segment === \".\") {\n continue;\n }\n if (segment === \"..\") {\n if (normalizedSegments.length > 0) {\n normalizedSegments.pop();\n }\n continue;\n }\n normalizedSegments.push(segment);\n }\n let normalized = normalizedSegments.join(\"/\");\n if (hasRootDoubleSlash) {\n normalized = `//${normalized}`;\n }\n else if (hasLeadingSlash) {\n normalized = `/${normalized}`;\n }\n else if (drivePrefix !== \"\") {\n normalized = `${drivePrefix}${normalized.length > 0 ? `/${normalized}` : \"\"}`;\n }\n if (normalized.length === 0) {\n return value;\n }\n return normalized;\n }\n function detectRuntimeInfo() {\n if (isBrowserEnvironment()) {\n const navigatorObj = globalThis.navigator;\n return {\n name: \"browser\",\n userAgent: navigatorObj?.userAgent,\n };\n }\n const globalScope = globalThis;\n if (typeof globalScope.importScripts === \"function\") {\n return {\n name: \"worker\",\n userAgent: globalScope.navigator?.userAgent,\n };\n }\n const globalAny = globalThis;\n if (globalAny.Bun != null) {\n const bunVersion = globalAny.Bun.version;\n return {\n name: \"bun\",\n version: bunVersion != null ? `bun/${bunVersion}` : undefined,\n hostname: getEnvironmentHostname(globalAny.process, globalAny.Deno, globalAny.Bun, globalAny.location),\n };\n }\n if (globalAny.Deno != null) {\n const denoHostname = resolveDenoHostname(globalAny.Deno);\n const denoVersion = globalAny.Deno?.version?.deno;\n return {\n name: \"deno\",\n version: denoVersion != null ? `deno/${denoVersion}` : undefined,\n hostname: denoHostname ?? getEnvironmentHostname(globalAny.process, globalAny.Deno, globalAny.Bun, globalAny.location),\n };\n }\n if (globalAny.process?.versions?.node != null || globalAny.process?.version != null) {\n return {\n name: \"node\",\n version: globalAny.process?.versions?.node ?? globalAny.process?.version,\n hostname: getEnvironmentHostname(globalAny.process, globalAny.Deno, globalAny.Bun, globalAny.location),\n };\n }\n if (globalAny.process != null) {\n return {\n name: \"node\",\n version: \"unknown\",\n hostname: getEnvironmentHostname(globalAny.process, globalAny.Deno, globalAny.Bun, globalAny.location),\n };\n }\n return {\n name: \"unknown\",\n };\n }\n function getEnvironmentHostname(nodeProcess, deno, bun, location) {\n const processHostname = nodeProcess?.env?.HOSTNAME ?? nodeProcess?.env?.HOST ?? nodeProcess?.env?.COMPUTERNAME;\n if (processHostname != null && processHostname.length > 0) {\n return processHostname;\n }\n const bunHostname = bun?.env?.HOSTNAME ?? bun?.env?.HOST ?? bun?.env?.COMPUTERNAME;\n if (bunHostname != null && bunHostname.length > 0) {\n return bunHostname;\n }\n try {\n const denoEnvGet = deno?.env?.get;\n if (typeof denoEnvGet === \"function\") {\n const value = denoEnvGet(\"HOSTNAME\");\n if (value != null && value.length > 0) {\n return value;\n }\n }\n }\n catch {\n }\n if (location?.hostname != null && location.hostname.length > 0) {\n return location.hostname;\n }\n return undefined;\n }\n function resolveDenoHostname(deno) {\n try {\n if (typeof deno?.hostname === \"function\") {\n const value = deno.hostname();\n if (value != null && value.length > 0) {\n return value;\n }\n }\n }\n catch {\n }\n const locationHostname = globalThis.location?.hostname;\n if (locationHostname != null && locationHostname.length > 0) {\n return locationHostname;\n }\n return undefined;\n }\n function getNodeEnv() {\n const globalProcess = globalThis?.process;\n return globalProcess?.env?.NODE_ENV;\n }\n function isNativeError(value) {\n if (value instanceof Error) {\n return true;\n }\n if (value != null && typeof value === \"object\") {\n const objectTag = Object.prototype.toString.call(value);\n if (/\\[object .*Error\\]/.test(objectTag)) {\n return true;\n }\n const name = value.name;\n if (typeof name === \"string\" && name.endsWith(\"Error\")) {\n return true;\n }\n }\n return false;\n }\n}\nconst ANSI_REGEX = /\\u001b\\[[0-9;]*m/g;\nconst COLOR_TOKENS = {\n black: \"#000000\",\n red: \"#ef5350\",\n green: \"#66bb6a\",\n yellow: \"#fdd835\",\n blue: \"#42a5f5\",\n magenta: \"#ab47bc\",\n cyan: \"#26c6da\",\n white: \"#fafafa\",\n blackBright: \"#424242\",\n redBright: \"#ff7043\",\n greenBright: \"#81c784\",\n yellowBright: \"#ffe082\",\n blueBright: \"#64b5f6\",\n magentaBright: \"#ce93d8\",\n cyanBright: \"#4dd0e1\",\n whiteBright: \"#ffffff\",\n};\nconst BACKGROUND_TOKENS = {\n bgBlack: \"#000000\",\n bgRed: \"#ef5350\",\n bgGreen: \"#66bb6a\",\n bgYellow: \"#fdd835\",\n bgBlue: \"#42a5f5\",\n bgMagenta: \"#ab47bc\",\n bgCyan: \"#26c6da\",\n bgWhite: \"#fafafa\",\n bgBlackBright: \"#424242\",\n bgRedBright: \"#ff7043\",\n bgGreenBright: \"#81c784\",\n bgYellowBright: \"#ffe082\",\n bgBlueBright: \"#64b5f6\",\n bgMagentaBright: \"#ce93d8\",\n bgCyanBright: \"#4dd0e1\",\n bgWhiteBright: \"#ffffff\",\n};\nconst BROWSER_PATH_REGEX = /(?:(?:file|https?|global code|[^@]+)@)?(?:file:)?((?:\\/[^:/]+){2,})(?::(\\d+))?(?::(\\d+))?/;\nconst runtime = createLoggerEnvironment();\nexport const loggerEnvironment = runtime;\nexport * from \"./interfaces.js\";\nexport class BaseLogger {\n constructor(settings, logObj, stackDepthLevel = Number.NaN) {\n this.logObj = logObj;\n this.stackDepthLevel = stackDepthLevel;\n this.runtime = runtime;\n this.maxErrorCauseDepth = 5;\n this.settings = {\n type: settings?.type ?? \"pretty\",\n name: settings?.name,\n parentNames: settings?.parentNames,\n minLevel: settings?.minLevel ?? 0,\n argumentsArrayName: settings?.argumentsArrayName,\n hideLogPositionForProduction: settings?.hideLogPositionForProduction ?? false,\n prettyLogTemplate: settings?.prettyLogTemplate ??\n \"{{yyyy}}.{{mm}}.{{dd}} {{hh}}:{{MM}}:{{ss}}:{{ms}}\\t{{logLevelName}}\\t{{filePathWithLine}}{{nameWithDelimiterPrefix}}\\t\",\n prettyErrorTemplate: settings?.prettyErrorTemplate ?? \"\\n{{errorName}} {{errorMessage}}\\nerror stack:\\n{{errorStack}}\",\n prettyErrorStackTemplate: settings?.prettyErrorStackTemplate ?? \" • {{fileName}}\\t{{method}}\\n\\t{{filePathWithLine}}\",\n prettyErrorParentNamesSeparator: settings?.prettyErrorParentNamesSeparator ?? \":\",\n prettyErrorLoggerNameDelimiter: settings?.prettyErrorLoggerNameDelimiter ?? \"\\t\",\n stylePrettyLogs: settings?.stylePrettyLogs ?? true,\n prettyLogTimeZone: settings?.prettyLogTimeZone ?? \"UTC\",\n prettyLogStyles: settings?.prettyLogStyles ?? {\n logLevelName: {\n \"*\": [\"bold\", \"black\", \"bgWhiteBright\", \"dim\"],\n SILLY: [\"bold\", \"white\"],\n TRACE: [\"bold\", \"whiteBright\"],\n DEBUG: [\"bold\", \"green\"],\n INFO: [\"bold\", \"blue\"],\n WARN: [\"bold\", \"yellow\"],\n ERROR: [\"bold\", \"red\"],\n FATAL: [\"bold\", \"redBright\"],\n },\n dateIsoStr: \"white\",\n filePathWithLine: \"white\",\n name: [\"white\", \"bold\"],\n nameWithDelimiterPrefix: [\"white\", \"bold\"],\n nameWithDelimiterSuffix: [\"white\", \"bold\"],\n errorName: [\"bold\", \"bgRedBright\", \"whiteBright\"],\n fileName: [\"yellow\"],\n fileNameWithLine: \"white\",\n },\n prettyInspectOptions: settings?.prettyInspectOptions ?? {\n colors: true,\n compact: false,\n depth: Infinity,\n },\n metaProperty: settings?.metaProperty ?? \"_meta\",\n maskPlaceholder: settings?.maskPlaceholder ?? \"[***]\",\n maskValuesOfKeys: settings?.maskValuesOfKeys ?? [\"password\"],\n maskValuesOfKeysCaseInsensitive: settings?.maskValuesOfKeysCaseInsensitive ?? false,\n maskValuesRegEx: settings?.maskValuesRegEx,\n prefix: [...(settings?.prefix ?? [])],\n attachedTransports: [...(settings?.attachedTransports ?? [])],\n overwrite: {\n mask: settings?.overwrite?.mask,\n toLogObj: settings?.overwrite?.toLogObj,\n addMeta: settings?.overwrite?.addMeta,\n addPlaceholders: settings?.overwrite?.addPlaceholders,\n formatMeta: settings?.overwrite?.formatMeta,\n formatLogObj: settings?.overwrite?.formatLogObj,\n transportFormatted: settings?.overwrite?.transportFormatted,\n transportJSON: settings?.overwrite?.transportJSON,\n },\n };\n this.captureStackForMeta = this._shouldCaptureStack();\n }\n log(logLevelId, logLevelName, ...args) {\n if (logLevelId < this.settings.minLevel) {\n return;\n }\n const resolvedArgs = this._resolveLogArguments(args);\n const logArgs = [...this.settings.prefix, ...resolvedArgs];\n const maskedArgs = this.settings.overwrite?.mask != null\n ? this.settings.overwrite?.mask(logArgs)\n : this.settings.maskValuesOfKeys != null && this.settings.maskValuesOfKeys.length > 0\n ? this._mask(logArgs)\n : logArgs;\n const thisLogObj = this.logObj != null ? this._recursiveCloneAndExecuteFunctions(this.logObj) : undefined;\n const logObj = this.settings.overwrite?.toLogObj != null ? this.settings.overwrite?.toLogObj(maskedArgs, thisLogObj) : this._toLogObj(maskedArgs, thisLogObj);\n const logObjWithMeta = this.settings.overwrite?.addMeta != null\n ? this.settings.overwrite?.addMeta(logObj, logLevelId, logLevelName)\n : this._addMetaToLogObj(logObj, logLevelId, logLevelName);\n const logMeta = logObjWithMeta?.[this.settings.metaProperty];\n let logMetaMarkup;\n let logArgsAndErrorsMarkup = undefined;\n if (this.settings.overwrite?.formatMeta != null) {\n logMetaMarkup = this.settings.overwrite?.formatMeta(logObjWithMeta?.[this.settings.metaProperty]);\n }\n if (this.settings.overwrite?.formatLogObj != null) {\n logArgsAndErrorsMarkup = this.settings.overwrite?.formatLogObj(maskedArgs, this.settings);\n }\n if (this.settings.type === \"pretty\") {\n logMetaMarkup = logMetaMarkup ?? this._prettyFormatLogObjMeta(logObjWithMeta?.[this.settings.metaProperty]);\n logArgsAndErrorsMarkup = logArgsAndErrorsMarkup ?? runtime.prettyFormatLogObj(maskedArgs, this.settings);\n }\n if (logMetaMarkup != null && logArgsAndErrorsMarkup != null) {\n if (this.settings.overwrite?.transportFormatted != null) {\n const transport = this.settings.overwrite.transportFormatted;\n const declaredParams = transport.length;\n if (declaredParams < 4) {\n transport(logMetaMarkup, logArgsAndErrorsMarkup.args, logArgsAndErrorsMarkup.errors);\n }\n else if (declaredParams === 4) {\n transport(logMetaMarkup, logArgsAndErrorsMarkup.args, logArgsAndErrorsMarkup.errors, logMeta);\n }\n else {\n transport(logMetaMarkup, logArgsAndErrorsMarkup.args, logArgsAndErrorsMarkup.errors, logMeta, this.settings);\n }\n }\n else {\n runtime.transportFormatted(logMetaMarkup, logArgsAndErrorsMarkup.args, logArgsAndErrorsMarkup.errors, logMeta, this.settings);\n }\n }\n else {\n if (this.settings.overwrite?.transportJSON != null) {\n this.settings.overwrite.transportJSON(logObjWithMeta);\n }\n else if (this.settings.type !== \"hidden\") {\n runtime.transportJSON(logObjWithMeta);\n }\n }\n if (this.settings.attachedTransports != null && this.settings.attachedTransports.length > 0) {\n this.settings.attachedTransports.forEach((transportLogger) => {\n transportLogger(logObjWithMeta);\n });\n }\n return logObjWithMeta;\n }\n attachTransport(transportLogger) {\n this.settings.attachedTransports.push(transportLogger);\n }\n getSubLogger(settings, logObj) {\n const subLoggerSettings = {\n ...this.settings,\n ...settings,\n parentNames: this.settings?.parentNames != null && this.settings?.name != null\n ? [...this.settings.parentNames, this.settings.name]\n : this.settings?.name != null\n ? [this.settings.name]\n : undefined,\n prefix: [...this.settings.prefix, ...(settings?.prefix ?? [])],\n };\n const subLogger = new this.constructor(subLoggerSettings, logObj ?? this.logObj, this.stackDepthLevel);\n return subLogger;\n }\n _mask(args) {\n const maskKeys = this._getMaskKeys();\n return args?.map((arg) => {\n return this._recursiveCloneAndMaskValuesOfKeys(arg, maskKeys);\n });\n }\n _getMaskKeys() {\n const maskKeys = this.settings.maskValuesOfKeys ?? [];\n const signature = maskKeys.map(String).join(\"|\");\n if (this.settings.maskValuesOfKeysCaseInsensitive === true) {\n if (this.maskKeysCache?.source === maskKeys && this.maskKeysCache.caseInsensitive === true && this.maskKeysCache.signature === signature) {\n return this.maskKeysCache.normalized;\n }\n const normalized = maskKeys.map((key) => (typeof key === \"string\" ? key.toLowerCase() : String(key).toLowerCase()));\n this.maskKeysCache = {\n source: maskKeys,\n caseInsensitive: true,\n normalized,\n signature,\n };\n return normalized;\n }\n this.maskKeysCache = {\n source: maskKeys,\n caseInsensitive: false,\n normalized: maskKeys,\n signature,\n };\n return maskKeys;\n }\n _resolveLogArguments(args) {\n if (args.length === 1 && typeof args[0] === \"function\") {\n const candidate = args[0];\n if (candidate.length === 0) {\n const result = candidate();\n return Array.isArray(result) ? result : [result];\n }\n }\n return args;\n }\n _recursiveCloneAndMaskValuesOfKeys(source, keys, seen = []) {\n if (seen.includes(source)) {\n return { ...source };\n }\n if (typeof source === \"object\" && source !== null) {\n seen.push(source);\n }\n if (runtime.isError(source) || runtime.isBuffer(source)) {\n return source;\n }\n else if (source instanceof Map) {\n return new Map(source);\n }\n else if (source instanceof Set) {\n return new Set(source);\n }\n else if (Array.isArray(source)) {\n return source.map((item) => this._recursiveCloneAndMaskValuesOfKeys(item, keys, seen));\n }\n else if (source instanceof Date) {\n return new Date(source.getTime());\n }\n else if (source instanceof URL) {\n return urlToObject(source);\n }\n else if (source !== null && typeof source === \"object\") {\n const baseObject = runtime.isError(source) ? this._cloneError(source) : Object.create(Object.getPrototypeOf(source));\n return Object.getOwnPropertyNames(source).reduce((o, prop) => {\n const lookupKey = this.settings?.maskValuesOfKeysCaseInsensitive !== true\n ? prop\n : typeof prop === \"string\"\n ? prop.toLowerCase()\n : String(prop).toLowerCase();\n o[prop] = keys.includes(lookupKey)\n ? this.settings.maskPlaceholder\n : (() => {\n try {\n return this._recursiveCloneAndMaskValuesOfKeys(source[prop], keys, seen);\n }\n catch {\n return null;\n }\n })();\n return o;\n }, baseObject);\n }\n else {\n if (typeof source === \"string\") {\n let modifiedSource = source;\n for (const regEx of this.settings?.maskValuesRegEx || []) {\n modifiedSource = modifiedSource.replace(regEx, this.settings?.maskPlaceholder || \"\");\n }\n return modifiedSource;\n }\n return source;\n }\n }\n _recursiveCloneAndExecuteFunctions(source, seen = []) {\n if (this.isObjectOrArray(source) && seen.includes(source)) {\n return this.shallowCopy(source);\n }\n if (this.isObjectOrArray(source)) {\n seen.push(source);\n }\n if (Array.isArray(source)) {\n return source.map((item) => this._recursiveCloneAndExecuteFunctions(item, seen));\n }\n else if (source instanceof Date) {\n return new Date(source.getTime());\n }\n else if (this.isObject(source)) {\n return Object.getOwnPropertyNames(source).reduce((o, prop) => {\n const descriptor = Object.getOwnPropertyDescriptor(source, prop);\n if (descriptor) {\n Object.defineProperty(o, prop, descriptor);\n const value = source[prop];\n o[prop] = typeof value === \"function\" ? value() : this._recursiveCloneAndExecuteFunctions(value, seen);\n }\n return o;\n }, Object.create(Object.getPrototypeOf(source)));\n }\n else {\n return source;\n }\n }\n isObjectOrArray(value) {\n return typeof value === \"object\" && value !== null;\n }\n isObject(value) {\n return typeof value === \"object\" && !Array.isArray(value) && value !== null;\n }\n shallowCopy(source) {\n if (Array.isArray(source)) {\n return [...source];\n }\n else {\n return { ...source };\n }\n }\n _toLogObj(args, clonedLogObj = {}) {\n args = args?.map((arg) => (runtime.isError(arg) ? this._toErrorObject(arg) : arg));\n if (this.settings.argumentsArrayName == null) {\n if (args.length === 1 && !Array.isArray(args[0]) && runtime.isBuffer(args[0]) !== true && !(args[0] instanceof Date)) {\n clonedLogObj = typeof args[0] === \"object\" && args[0] != null ? { ...args[0], ...clonedLogObj } : { 0: args[0], ...clonedLogObj };\n }\n else {\n clonedLogObj = { ...clonedLogObj, ...args };\n }\n }\n else {\n clonedLogObj = {\n ...clonedLogObj,\n [this.settings.argumentsArrayName]: args,\n };\n }\n return clonedLogObj;\n }\n _cloneError(error) {\n const cloned = new error.constructor();\n Object.getOwnPropertyNames(error).forEach((key) => {\n cloned[key] = error[key];\n });\n return cloned;\n }\n _toErrorObject(error, depth = 0, seen = new Set()) {\n if (!seen.has(error)) {\n seen.add(error);\n }\n const errorObject = {\n nativeError: error,\n name: error.name ?? \"Error\",\n message: error.message,\n stack: runtime.getErrorTrace(error),\n };\n if (depth >= this.maxErrorCauseDepth) {\n return errorObject;\n }\n const causeValue = error.cause;\n if (causeValue != null) {\n const normalizedCause = toError(causeValue);\n if (!seen.has(normalizedCause)) {\n errorObject.cause = this._toErrorObject(normalizedCause, depth + 1, seen);\n }\n }\n return errorObject;\n }\n _addMetaToLogObj(logObj, logLevelId, logLevelName) {\n return {\n ...logObj,\n [this.settings.metaProperty]: runtime.getMeta(logLevelId, logLevelName, this.stackDepthLevel, !this.captureStackForMeta, this.settings.name, this.settings.parentNames),\n };\n }\n _shouldCaptureStack() {\n if (this.settings.hideLogPositionForProduction) {\n return false;\n }\n if (this.settings.type === \"json\") {\n return true;\n }\n const template = this.settings.prettyLogTemplate ?? \"\";\n const stackPlaceholders = /{{\\s*(file(Name|Path|Line|PathWithLine|NameWithLine)|fullFilePath)\\s*}}/;\n if (stackPlaceholders.test(template)) {\n return true;\n }\n return false;\n }\n _prettyFormatLogObjMeta(logObjMeta) {\n return buildPrettyMeta(this.settings, logObjMeta).text;\n }\n}\n","import { BaseLogger } from \"./BaseLogger.js\";\nexport * from \"./interfaces.js\";\nexport * from \"./BaseLogger.js\";\nexport class Logger extends BaseLogger {\n constructor(settings, logObj) {\n const isBrowser = typeof window !== \"undefined\" && typeof document !== \"undefined\";\n const normalizedSettings = { ...(settings ?? {}) };\n if (isBrowser) {\n normalizedSettings.stylePrettyLogs = settings?.stylePrettyLogs ?? true;\n }\n super(normalizedSettings, logObj, Number.NaN);\n }\n log(logLevelId, logLevelName, ...args) {\n return super.log(logLevelId, logLevelName, ...args);\n }\n silly(...args) {\n return super.log(0, \"SILLY\", ...args);\n }\n trace(...args) {\n return super.log(1, \"TRACE\", ...args);\n }\n debug(...args) {\n return super.log(2, \"DEBUG\", ...args);\n }\n info(...args) {\n return super.log(3, \"INFO\", ...args);\n }\n warn(...args) {\n return super.log(4, \"WARN\", ...args);\n }\n error(...args) {\n return super.log(5, \"ERROR\", ...args);\n }\n fatal(...args) {\n return super.log(6, \"FATAL\", ...args);\n }\n getSubLogger(settings, logObj) {\n return super.getSubLogger(settings, logObj);\n }\n}\n","import { Logger } from 'tslog'\n\nexport function createLogger(name: string, minLevel?: number): Logger<unknown> {\n return new Logger({\n name,\n minLevel: minLevel ?? (process.env.NODE_ENV === 'production' ? 3 : 0),\n prettyLogTemplate: '{{dateIsoStr}} {{logLevelName}} [{{name}}] ',\n })\n}\n","import { z } from 'zod'\nimport { WARNING_NO_LICENCE } from './constants'\nimport { parseFrontmatter } from './validation'\n\n// --- Agent Skills spec name validation ---\n\nconst SKILL_NAME_REGEX = /^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/\nconst CONSECUTIVE_HYPHENS_REGEX = /--/\n\n/**\n * Validates a skill name against the agentskills.io spec:\n * - 1-64 characters\n * - Lowercase alphanumeric and hyphens only\n * - Must not start or end with a hyphen\n * - Must not contain consecutive hyphens\n */\nfunction isValidSkillName(name: string): boolean {\n if (name.length < 1 || name.length > 64) return false\n if (!SKILL_NAME_REGEX.test(name)) return false\n if (CONSECUTIVE_HYPHENS_REGEX.test(name)) return false\n return true\n}\n\n// --- Agent Skills spec schema (agentskills.io standard) ---\n\n/**\n * The official Agent Skills spec frontmatter fields.\n * Any valid agentskills.io SKILL.md should pass this schema.\n *\n * @see https://agentskills.io/specification\n */\nexport const agentSkillsSpecSchema = z.object({\n name: z.string().min(1).max(64).refine(isValidSkillName, {\n message:\n 'Name must be 1-64 lowercase alphanumeric characters and hyphens. Must not start/end with a hyphen or contain consecutive hyphens.',\n }),\n description: z.string().min(1).max(1024),\n license: z.string().optional(),\n compatibility: z.string().max(500).optional(),\n metadata: z.record(z.string(), z.string()).optional(),\n 'allowed-tools': z\n .union([z.string(), z.array(z.string())])\n .optional()\n .transform((val) => {\n if (typeof val === 'string') return val.split(/\\s+/).filter(Boolean)\n return val\n }),\n})\n\nexport type AgentSkillsSpec = z.infer<typeof agentSkillsSpecSchema>\n\n// --- Agentver extended fields (strict superset) ---\n\n/**\n * Agentver extends the Agent Skills spec with additional fields\n * for richer registry features: version pinning, triggers,\n * dependency management, and conflict resolution.\n */\nexport const agentverSkillSchema = agentSkillsSpecSchema.extend({\n /** Agentver requires semver for registry publishing */\n version: z\n .string()\n .regex(/^\\d+\\.\\d+\\.\\d+(-[\\w.]+)?$/, 'Must be valid semver')\n .optional(),\n /** Agent compatibility — which agents this skill is designed for */\n 'agentver-compatibility': z\n .object({\n agents: z.array(z.string()).optional(),\n })\n .optional(),\n /** Trigger keywords — when agents should activate this skill */\n triggers: z.array(z.string()).optional(),\n /** Extend another skill by name */\n extends: z.string().optional(),\n /** Skills this one depends on */\n dependsOn: z.array(z.string()).optional(),\n /** Skills that conflict with this one */\n conflictsWith: z.array(z.string()).optional(),\n})\n\nexport type AgentverSkill = z.infer<typeof agentverSkillSchema>\n\n// --- Validation result types ---\n\nexport type SkillValidationResult = {\n valid: boolean\n errors: string[]\n warnings: string[]\n specCompliant: boolean\n agentverExtensions: string[]\n data?: AgentverSkill\n body?: string\n}\n\n// --- Parsing and validation functions ---\n\nconst AGENTVER_EXTENSION_FIELDS = [\n 'version',\n 'agentver-compatibility',\n 'triggers',\n 'extends',\n 'dependsOn',\n 'conflictsWith',\n] as const\n\n/**\n * Parse SKILL.md content and extract typed frontmatter + body.\n * Returns the full Agentver skill data (superset of Agent Skills spec).\n */\nexport function parseSkillFrontmatter(content: string): {\n frontmatter: AgentverSkill\n body: string\n} {\n const { rawData, body, hasFrontmatter } = parseFrontmatter(content)\n\n if (!hasFrontmatter) {\n throw new Error('No YAML frontmatter found. Expected content delimited by --- markers.')\n }\n\n const parsed = agentverSkillSchema.safeParse(rawData)\n\n if (!parsed.success) {\n const messages = parsed.error.issues.map((issue) => {\n const path = issue.path.join('.')\n return path ? `${path}: ${issue.message}` : issue.message\n })\n throw new Error(`Invalid SKILL.md frontmatter:\\n${messages.join('\\n')}`)\n }\n\n return { frontmatter: parsed.data, body }\n}\n\n/**\n * Validate a SKILL.md file against both the Agent Skills spec\n * and Agentver extensions. Returns detailed validation info.\n */\nexport function validateSkillMd(content: string): SkillValidationResult {\n const errors: string[] = []\n const warnings: string[] = []\n const agentverExtensions: string[] = []\n\n const { rawData, body, hasFrontmatter } = parseFrontmatter(content)\n\n if (!hasFrontmatter) {\n return {\n valid: false,\n errors: ['No YAML frontmatter found. Expected content delimited by --- markers.'],\n warnings: [],\n specCompliant: false,\n agentverExtensions: [],\n body,\n }\n }\n\n // Check which Agentver extension fields are present\n for (const field of AGENTVER_EXTENSION_FIELDS) {\n if (field in rawData && rawData[field] !== undefined) {\n agentverExtensions.push(field)\n }\n }\n\n // Validate against the full Agentver schema (superset)\n const agentverParsed = agentverSkillSchema.safeParse(rawData)\n\n if (!agentverParsed.success) {\n const zodErrors = agentverParsed.error.issues.map((issue) => {\n const path = issue.path.join('.')\n return path ? `${path}: ${issue.message}` : issue.message\n })\n return {\n valid: false,\n errors: zodErrors,\n warnings: [],\n specCompliant: false,\n agentverExtensions,\n body,\n }\n }\n\n // Check spec compliance (required fields present with correct constraints)\n const specCompliant = isAgentSkillsSpecCompliant(content)\n\n // Warnings for missing optional fields that improve discoverability\n if (!agentverParsed.data.license) {\n warnings.push(WARNING_NO_LICENCE)\n }\n\n if (!body || body.trim().length === 0) {\n warnings.push('SKILL.md body is empty. Add instructions for agents to follow.')\n }\n\n if (agentverParsed.data.description && agentverParsed.data.description.length < 20) {\n warnings.push(\n 'Description is very short. Include what the skill does and when to use it for better discoverability.'\n )\n }\n\n return {\n valid: true,\n errors,\n warnings,\n specCompliant,\n agentverExtensions,\n data: agentverParsed.data,\n body,\n }\n}\n\n/**\n * Check whether a SKILL.md file is fully compliant with the\n * agentskills.io spec (ignoring Agentver extensions).\n */\nexport function isAgentSkillsSpecCompliant(content: string): boolean {\n const { rawData, hasFrontmatter } = parseFrontmatter(content)\n\n if (!hasFrontmatter) return false\n\n // Extract only spec-defined fields for validation\n const specFields: Record<string, unknown> = {}\n const specFieldNames = [\n 'name',\n 'description',\n 'license',\n 'compatibility',\n 'metadata',\n 'allowed-tools',\n ]\n\n for (const key of specFieldNames) {\n if (key in rawData) {\n specFields[key] = rawData[key]\n }\n }\n\n const parsed = agentSkillsSpecSchema.safeParse(specFields)\n return parsed.success\n}\n\n/**\n * Validate a skill name against the agentskills.io naming rules.\n * Useful for validating names independently of full SKILL.md parsing.\n */\nexport function validateSkillName(name: string): { valid: boolean; error?: string } {\n if (name.length < 1) {\n return { valid: false, error: 'Name must not be empty.' }\n }\n if (name.length > 64) {\n return { valid: false, error: `Name must be at most 64 characters (got ${name.length}).` }\n }\n if (name !== name.toLowerCase()) {\n return { valid: false, error: 'Name must be lowercase.' }\n }\n if (name.startsWith('-') || name.endsWith('-')) {\n return { valid: false, error: 'Name must not start or end with a hyphen.' }\n }\n if (CONSECUTIVE_HYPHENS_REGEX.test(name)) {\n return { valid: false, error: 'Name must not contain consecutive hyphens.' }\n }\n if (!SKILL_NAME_REGEX.test(name)) {\n return {\n valid: false,\n error: 'Name must contain only lowercase alphanumeric characters and hyphens.',\n }\n }\n return { valid: true }\n}\n","import { type SkillFrontmatter, skillFrontmatterSchema } from './schemas'\nimport { WARNING_NO_LICENCE } from './constants'\n\n// --- Frontmatter validation result ---\n\nexport type FrontmatterValidationResult = {\n valid: boolean\n errors: string[]\n warnings: string[]\n data?: SkillFrontmatter\n body?: string\n}\n\nexport type SpecComplianceLevel = 'compliant' | 'partial' | 'none'\n\n// --- Simple YAML frontmatter parser (no external dependency) ---\n\nconst FRONTMATTER_REGEX = /^---\\r?\\n([\\s\\S]*?)\\r?\\n---/\n\n/**\n * Parse a simple YAML key-value block.\n * Supports: strings, arrays (inline `[a, b]` and multiline `- item`),\n * and records (`key: value` nested under a parent).\n */\nfunction parseSimpleYaml(yaml: string): Record<string, unknown> {\n const result: Record<string, unknown> = {}\n const lines = yaml.split(/\\r?\\n/)\n\n let currentKey: string | null = null\n let currentArray: string[] | null = null\n let currentRecord: Record<string, string> | null = null\n\n for (const line of lines) {\n // Skip empty lines and comments\n if (line.trim() === '' || line.trim().startsWith('#')) {\n continue\n }\n\n // Array item continuation (e.g. ` - value`)\n const arrayItemMatch = line.match(/^\\s+-\\s+(.+)$/)\n if (arrayItemMatch && currentKey && currentArray) {\n currentArray.push(arrayItemMatch[1]!.trim().replace(/^['\"]|['\"]$/g, ''))\n continue\n }\n\n // Record item continuation (e.g. ` subkey: value`)\n const recordItemMatch = line.match(/^\\s+(\\S+):\\s+(.+)$/)\n if (recordItemMatch && currentKey && currentRecord) {\n currentRecord[recordItemMatch[1]!] = recordItemMatch[2]!.trim().replace(/^['\"]|['\"]$/g, '')\n continue\n }\n\n // If we were collecting an array or record, flush it\n if (currentKey && currentArray) {\n result[currentKey] = currentArray\n currentArray = null\n currentKey = null\n }\n if (currentKey && currentRecord) {\n result[currentKey] = currentRecord\n currentRecord = null\n currentKey = null\n }\n\n // Top-level key: value\n const kvMatch = line.match(/^([a-zA-Z_-]+):\\s*(.*)$/)\n if (!kvMatch) continue\n\n const key = kvMatch[1]!\n const rawValue = kvMatch[2]!.trim()\n\n // Empty value — could be start of array or record block\n if (rawValue === '') {\n currentKey = key\n currentArray = []\n currentRecord = {}\n continue\n }\n\n // Inline array: [a, b, c]\n const inlineArrayMatch = rawValue.match(/^\\[(.+)\\]$/)\n if (inlineArrayMatch) {\n result[key] = inlineArrayMatch[1]!.split(',').map((s) => s.trim().replace(/^['\"]|['\"]$/g, ''))\n continue\n }\n\n // Boolean\n if (rawValue === 'true' || rawValue === 'false') {\n result[key] = rawValue === 'true'\n continue\n }\n\n // Number\n if (/^\\d+(\\.\\d+)?$/.test(rawValue)) {\n result[key] = Number(rawValue)\n continue\n }\n\n // String (strip quotes if present)\n result[key] = rawValue.replace(/^['\"]|['\"]$/g, '')\n }\n\n // Flush any trailing collection\n if (currentKey && currentArray && currentArray.length > 0) {\n result[currentKey] = currentArray\n } else if (currentKey && currentRecord && Object.keys(currentRecord).length > 0) {\n result[currentKey] = currentRecord\n }\n\n return result\n}\n\n/**\n * Extract YAML frontmatter and markdown body from a SKILL.md string.\n */\nexport function parseFrontmatter(content: string): {\n rawData: Record<string, unknown>\n body: string\n hasFrontmatter: boolean\n} {\n const match = content.match(FRONTMATTER_REGEX)\n\n if (!match) {\n return { rawData: {}, body: content.trim(), hasFrontmatter: false }\n }\n\n const yamlBlock = match[1] ?? ''\n const afterFrontmatter = content.slice(match[0].length)\n\n return {\n rawData: parseSimpleYaml(yamlBlock),\n body: afterFrontmatter.trim(),\n hasFrontmatter: true,\n }\n}\n\n/**\n * Validate a SKILL.md file's frontmatter against the spec.\n *\n * Returns structured validation info including compliance level,\n * errors, warnings, and parsed data.\n */\nexport function validateSkillFrontmatter(content: string): FrontmatterValidationResult {\n const errors: string[] = []\n const warnings: string[] = []\n\n const { rawData, body, hasFrontmatter } = parseFrontmatter(content)\n\n if (!hasFrontmatter) {\n return {\n valid: false,\n errors: ['No YAML frontmatter found. Expected content delimited by --- markers.'],\n warnings: [],\n body,\n }\n }\n\n const parsed = skillFrontmatterSchema.safeParse(rawData)\n\n if (!parsed.success) {\n const zodErrors = parsed.error.issues.map((issue) => {\n const path = issue.path.join('.')\n return path ? `${path}: ${issue.message}` : issue.message\n })\n return {\n valid: false,\n errors: zodErrors,\n warnings: [],\n body,\n }\n }\n\n // Valid but check for optional fields that improve discoverability\n if (!parsed.data.license) {\n warnings.push(WARNING_NO_LICENCE)\n }\n\n if (!parsed.data.compatibility || parsed.data.compatibility.length === 0) {\n warnings.push(\n 'No compatibility agents listed. Consider adding agents like claude-code, cursor, etc.'\n )\n }\n\n if (!parsed.data['allowed-tools'] || parsed.data['allowed-tools'].length === 0) {\n warnings.push('No allowed-tools specified. Consider listing tools this skill requires.')\n }\n\n return {\n valid: true,\n errors,\n warnings,\n data: parsed.data,\n body,\n }\n}\n\n/**\n * Determine the spec compliance level from a validation result.\n */\nexport function getSpecComplianceLevel(content: string): SpecComplianceLevel {\n const { hasFrontmatter, rawData } = parseFrontmatter(content)\n\n if (!hasFrontmatter) {\n return 'none'\n }\n\n const parsed = skillFrontmatterSchema.safeParse(rawData)\n\n if (!parsed.success) {\n // Has frontmatter but doesn't fully validate\n return 'partial'\n }\n\n return 'compliant'\n}\n","/**\n * Deterministic JSON serialiser for merge-friendly Git output.\n *\n * - Deep-sorts all object keys alphabetically\n * - Sorts arrays of strings alphabetically\n * - Preserves order of arrays containing non-string elements\n * - 2-space indentation with trailing newline\n */\n\nfunction sortDeep(value: unknown): unknown {\n if (value === null || value === undefined) {\n return value\n }\n\n if (Array.isArray(value)) {\n // Sort arrays of strings alphabetically; leave other arrays in order\n const allStrings = value.length > 0 && value.every((item) => typeof item === 'string')\n\n if (allStrings) {\n return [...(value as string[])].sort()\n }\n\n return value.map(sortDeep)\n }\n\n if (typeof value === 'object') {\n const sorted: Record<string, unknown> = {}\n const keys = Object.keys(value as Record<string, unknown>).sort()\n\n for (const key of keys) {\n sorted[key] = sortDeep((value as Record<string, unknown>)[key])\n }\n\n return sorted\n }\n\n return value\n}\n\nexport function serialiseDeterministic(data: unknown): string {\n const sorted = sortDeep(data)\n return `${JSON.stringify(sorted, null, 2)}\\n`\n}\n","import { existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from 'node:fs'\nimport { join } from 'node:path'\nimport type { ManifestV2 } from '@agentver/shared'\nimport { manifestAnySchema } from '@agentver/shared'\nimport { serialiseDeterministic } from './serialise'\n\nconst MANIFEST_DIR = '.agentver'\nconst MANIFEST_FILE = 'manifest.json'\n\nconst EMPTY_MANIFEST: ManifestV2 = { version: 2, packages: {} }\n\nfunction getManifestPath(projectRoot: string): string {\n return join(projectRoot, MANIFEST_DIR, MANIFEST_FILE)\n}\n\nfunction migrateV1ToV2(v1: {\n version: 1\n packages: Record<string, { name: string; version: string; agents: string[]; installedAt: string }>\n}): ManifestV2 {\n const packages: ManifestV2['packages'] = {}\n\n for (const [name, pkg] of Object.entries(v1.packages)) {\n packages[name] = {\n source: {\n type: 'git',\n uri: 'unknown',\n path: '',\n ref: 'unknown',\n commit: 'unknown',\n },\n agents: pkg.agents,\n installedAt: pkg.installedAt,\n modified: false,\n }\n }\n\n return { version: 2, packages }\n}\n\nexport function readManifest(projectRoot: string): ManifestV2 {\n const manifestPath = getManifestPath(projectRoot)\n\n if (!existsSync(manifestPath)) {\n return EMPTY_MANIFEST\n }\n\n const raw = readFileSync(manifestPath, 'utf-8')\n\n let parsed: unknown\n try {\n parsed = JSON.parse(raw)\n } catch {\n return EMPTY_MANIFEST\n }\n\n const result = manifestAnySchema.safeParse(parsed)\n if (!result.success) {\n return EMPTY_MANIFEST\n }\n\n if (result.data.version === 1) {\n const migrated = migrateV1ToV2(result.data)\n writeManifest(projectRoot, migrated)\n return migrated\n }\n\n return result.data\n}\n\nexport function writeManifest(projectRoot: string, manifest: ManifestV2): void {\n const dir = join(projectRoot, MANIFEST_DIR)\n\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true })\n }\n\n const filePath = getManifestPath(projectRoot)\n const tmpPath = `${filePath}.tmp`\n writeFileSync(tmpPath, serialiseDeterministic(manifest))\n renameSync(tmpPath, filePath)\n}\n","import { join } from 'node:path'\nimport type { AuditResult, ManifestV2Package } from '@agentver/shared'\nimport chalk from 'chalk'\nimport type { Command } from 'commander'\nimport type ora from 'ora'\nimport { readFilesFromDirectory } from '../git/fetcher.js'\nimport type { GitSource } from '../git/types.js'\nimport { createSpinner, isJSONMode, outputError, outputSuccess } from '../output'\nimport type { ScanResult as SecurityScanResult } from '../security/index.js'\nimport { renderScanResult, scanFiles } from '../security/index.js'\nimport { getCanonicalSkillPath } from '../storage/canonical.js'\nimport { readManifest } from '../storage/manifest.js'\n\ntype AuditOptions = {\n path?: string\n}\n\nconst FALLBACK_SOURCE: GitSource = {\n host: 'github.com',\n owner: 'local',\n repo: 'audit',\n path: '',\n ref: 'HEAD',\n}\n\n/**\n * Builds a placeholder GitSource for locally-installed packages.\n * The scanner uses the source to check trusted patterns; for local\n * audits we provide the manifest's URI when available.\n */\nfunction buildSourceFromManifest(pkg: ManifestV2Package | undefined): GitSource {\n if (!pkg || pkg.source.type !== 'git') {\n return FALLBACK_SOURCE\n }\n\n const { source } = pkg\n const parts = source.uri.split('/')\n return {\n host: (parts[0] ?? 'github.com') as GitSource['host'],\n owner: parts[1] ?? 'unknown',\n repo: parts[2] ?? 'unknown',\n path: source.path,\n ref: source.ref,\n commit: source.commit,\n }\n}\n\nasync function auditDirectory(\n dirPath: string,\n label: string,\n source: GitSource\n): Promise<SecurityScanResult | null> {\n const jsonMode = isJSONMode()\n const spinner = createSpinner(`Scanning ${label}...`).start()\n\n try {\n const files = await readFilesFromDirectory(dirPath)\n\n if (files.length === 0) {\n if (jsonMode) {\n return null\n }\n spinner.warn(`No files found at ${dirPath}`)\n return null\n }\n\n const result = await scanFiles(files, source, { skipAudit: false })\n\n if (!jsonMode) {\n renderScanResult(result, spinner as ReturnType<typeof ora>)\n } else {\n spinner.stop()\n }\n\n return result\n } catch (error) {\n const message = `Failed to scan ${label}: ${error instanceof Error ? error.message : String(error)}`\n if (jsonMode) {\n outputError('AUDIT_FAILED', message)\n process.exit(1)\n }\n spinner.fail(message)\n return null\n }\n}\n\nexport function registerAuditCommand(program: Command): void {\n program\n .command('audit [name]')\n .description('Run a security scan on installed skills or an arbitrary directory')\n .option('--path <path>', 'Scan an arbitrary directory instead of installed skills')\n .action(async (name: string | undefined, options: AuditOptions) => {\n const jsonMode = isJSONMode()\n const projectRoot = process.cwd()\n\n // Scan arbitrary directory\n if (options.path) {\n const targetPath = join(projectRoot, options.path)\n const source: GitSource = {\n host: 'github.com',\n owner: 'local',\n repo: 'audit',\n path: '',\n ref: 'HEAD',\n }\n\n const scanResult = await auditDirectory(targetPath, options.path, source)\n\n if (jsonMode) {\n const passed =\n !scanResult || scanResult.verdict === 'PASS' || scanResult.verdict === 'WARN'\n const auditResult: AuditResult = {\n target: options.path,\n passed,\n findings: (scanResult?.findings ?? []).map((f) => ({\n rule: f.category,\n severity: f.severity,\n file: f.file,\n line: f.line ?? 0,\n evidence: f.evidence ?? '',\n })),\n }\n outputSuccess(auditResult)\n }\n return\n }\n\n const manifest = readManifest(projectRoot)\n const packageNames = name\n ? [name].filter((n) => manifest.packages[n])\n : Object.keys(manifest.packages)\n\n if (packageNames.length === 0) {\n if (jsonMode) {\n const auditResult: AuditResult = {\n target: name ?? projectRoot,\n passed: true,\n findings: [],\n }\n outputSuccess(auditResult)\n return\n }\n if (name) {\n console.log(chalk.dim(`Package \"${name}\" is not installed.`))\n } else {\n console.log(chalk.dim('No packages installed. Use --path to scan a directory.'))\n }\n return\n }\n\n if (!jsonMode) {\n console.log(\n chalk.bold(\n `\\nAuditing ${packageNames.length} package${packageNames.length === 1 ? '' : 's'}...\\n`\n )\n )\n }\n\n const allFindings: AuditResult['findings'] = []\n let allPassed = true\n\n for (const pkgName of packageNames) {\n const pkg = manifest.packages[pkgName]\n const canonicalPath = getCanonicalSkillPath(projectRoot, pkgName, 'project')\n const source = buildSourceFromManifest(pkg)\n\n const scanResult = await auditDirectory(canonicalPath, pkgName, source)\n\n if (jsonMode && scanResult) {\n if (scanResult.verdict === 'BLOCK') {\n allPassed = false\n }\n for (const f of scanResult.findings) {\n allFindings.push({\n rule: f.category,\n severity: f.severity,\n file: f.file,\n line: f.line ?? 0,\n evidence: f.evidence ?? '',\n })\n }\n }\n }\n\n if (jsonMode) {\n const auditResult: AuditResult = {\n target: name ?? projectRoot,\n passed: allPassed,\n findings: allFindings,\n }\n outputSuccess(auditResult)\n }\n })\n}\n","import { execFile } from 'node:child_process'\nimport { randomUUID } from 'node:crypto'\nimport type { Dirent } from 'node:fs'\nimport { mkdir, readdir, readFile, rm, stat, writeFile } from 'node:fs/promises'\nimport { tmpdir } from 'node:os'\nimport { join } from 'node:path'\nimport { promisify } from 'node:util'\nimport { AgentverError, createLogger } from '@agentver/shared'\nimport { cacheFiles, getCachedFiles } from './cache.js'\nimport type { FetchedFile, FetchResult, FetchStrategy, GitSource, ResolvedRef } from './types.js'\n\nconst logger = createLogger('git:fetcher')\n\nconst execFileAsync = promisify(execFile)\n\nconst GIT_TIMEOUT_MS = 60_000\nconst HTTP_TIMEOUT_MS = 15_000\nconst MAX_FILE_SIZE_BYTES = 5 * 1024 * 1024\n\nconst STRATEGIES: Array<{\n name: FetchStrategy\n fn: (resolved: ResolvedRef) => Promise<FetchedFile[]>\n}> = [\n { name: 'api', fn: fetchViaApi },\n { name: 'archive', fn: fetchViaArchive },\n { name: 'sparse-checkout', fn: fetchViaSparseCheckout },\n { name: 'clone', fn: fetchViaClone },\n]\n\nexport async function fetchFiles(resolved: ResolvedRef): Promise<FetchResult> {\n const cached = getCachedFiles(resolved.source, resolved.commitSha)\n if (cached) {\n logger.info('Using cached files')\n return { files: cached, commitSha: resolved.commitSha, source: resolved.source }\n }\n\n for (const strategy of STRATEGIES) {\n logger.info(`Trying fetch strategy: ${strategy.name}`)\n\n try {\n const files = await strategy.fn(resolved)\n cacheFiles(resolved.source, resolved.commitSha, files)\n return { files, commitSha: resolved.commitSha, source: resolved.source }\n } catch (error) {\n logger.warn(`Strategy \"${strategy.name}\" failed: ${String(error)}`)\n }\n }\n\n throw new AgentverError(\n 'INTERNAL_ERROR',\n `All fetch strategies exhausted for ${resolved.source.host}/${resolved.source.owner}/${resolved.source.repo}`\n )\n}\n\nexport function buildRepoUrl(source: GitSource): string {\n return `https://${source.host}/${source.owner}/${source.repo}.git`\n}\n\nexport async function execGit(args: string[], cwd?: string): Promise<string> {\n try {\n const { stdout } = await execFileAsync('git', args, {\n cwd,\n timeout: GIT_TIMEOUT_MS,\n maxBuffer: 50 * 1024 * 1024,\n })\n return stdout\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n throw new AgentverError(\n 'INTERNAL_ERROR',\n `Git command failed: git ${args.join(' ')} — ${message}`\n )\n }\n}\n\nexport async function readFilesFromDirectory(\n dirPath: string,\n basePath = ''\n): Promise<FetchedFile[]> {\n const files: FetchedFile[] = []\n\n let entries: Dirent[]\n try {\n entries = await readdir(dirPath, { withFileTypes: true })\n } catch (error) {\n if (isEnoent(error)) return []\n throw error\n }\n\n for (const entry of entries) {\n const name = String(entry.name)\n if (name === '.git') continue\n\n const fullPath = join(dirPath, name)\n const relativePath = basePath ? `${basePath}/${name}` : name\n\n if (entry.isDirectory()) {\n const nested = await readFilesFromDirectory(fullPath, relativePath)\n files.push(...nested)\n continue\n }\n\n if (!entry.isFile()) continue\n\n try {\n const fileStat = await stat(fullPath)\n if (fileStat.size > MAX_FILE_SIZE_BYTES) {\n logger.debug(`Skipping large file (${fileStat.size} bytes): ${relativePath}`)\n continue\n }\n\n const content = await readFile(fullPath, 'utf-8')\n files.push({ path: relativePath, content, size: fileStat.size })\n } catch (error) {\n if (isEnoent(error)) continue\n logger.warn(`Failed to read file ${relativePath}: ${String(error)}`)\n }\n }\n\n return files\n}\n\n// --- Strategy implementations ---\n\nasync function fetchViaApi(resolved: ResolvedRef): Promise<FetchedFile[]> {\n const { source, commitSha } = resolved\n\n if (source.host === 'github.com') {\n return fetchGitHubApi(source, commitSha)\n }\n\n if (source.host === 'gitlab.com') {\n return fetchGitLabApi(source, commitSha)\n }\n\n throw new AgentverError('INTERNAL_ERROR', `API fetch not supported for host: ${source.host}`)\n}\n\nasync function fetchGitHubApi(source: GitSource, commitSha: string): Promise<FetchedFile[]> {\n const path = source.path || ''\n const url = `https://api.github.com/repos/${source.owner}/${source.repo}/contents/${path}?ref=${commitSha}`\n\n const response = await gitHubFetch(url)\n\n if (!response.ok) {\n throw new AgentverError('INTERNAL_ERROR', `GitHub contents API returned ${response.status}`)\n }\n\n const data: unknown = await response.json()\n\n // Single file response\n if (!Array.isArray(data)) {\n const file = data as GitHubContentFile\n if (file.type !== 'file' || !file.content) {\n throw new AgentverError('INTERNAL_ERROR', 'Unexpected GitHub API response for single file')\n }\n\n const content = Buffer.from(file.content, 'base64').toString('utf-8')\n return [{ path: file.name, content, size: file.size }]\n }\n\n // Directory response — recursively fetch files\n const items = data as GitHubContentItem[]\n const files: FetchedFile[] = []\n\n for (const item of items) {\n if (item.type === 'dir') {\n const subSource: GitSource = { ...source, path: item.path }\n const subFiles = await fetchGitHubApi(subSource, commitSha)\n for (const subFile of subFiles) {\n files.push({ ...subFile, path: `${item.name}/${subFile.path}` })\n }\n continue\n }\n\n if (item.type !== 'file') continue\n\n // Files <= 1MB can be fetched via contents API directly\n if (item.size <= 1_000_000 && item.download_url) {\n const fileResponse = await gitHubFetch(\n `https://api.github.com/repos/${source.owner}/${source.repo}/contents/${item.path}?ref=${commitSha}`\n )\n if (fileResponse.ok) {\n const fileData = (await fileResponse.json()) as GitHubContentFile\n if (fileData.content) {\n const content = Buffer.from(fileData.content, 'base64').toString('utf-8')\n const relativePath = source.path ? item.path.slice(source.path.length + 1) : item.path\n files.push({ path: relativePath, content, size: item.size })\n continue\n }\n }\n }\n\n // Large files — use Git Blobs API\n if (item.sha) {\n const blobUrl = `https://api.github.com/repos/${source.owner}/${source.repo}/git/blobs/${item.sha}`\n const blobResponse = await gitHubFetch(blobUrl)\n if (blobResponse.ok) {\n const blobData = (await blobResponse.json()) as {\n content: string\n encoding: string\n size: number\n }\n if (blobData.size > MAX_FILE_SIZE_BYTES) {\n logger.debug(`Skipping large file via blob (${blobData.size} bytes): ${item.path}`)\n continue\n }\n const content =\n blobData.encoding === 'base64'\n ? Buffer.from(blobData.content, 'base64').toString('utf-8')\n : blobData.content\n const relativePath = source.path ? item.path.slice(source.path.length + 1) : item.path\n files.push({ path: relativePath, content, size: blobData.size })\n }\n }\n }\n\n return files\n}\n\nasync function fetchGitLabApi(source: GitSource, commitSha: string): Promise<FetchedFile[]> {\n const projectId = encodeURIComponent(`${source.owner}/${source.repo}`)\n const path = source.path || ''\n const treeUrl = `https://gitlab.com/api/v4/projects/${projectId}/repository/tree?path=${encodeURIComponent(path)}&ref=${commitSha}&recursive=true&per_page=100`\n\n const headers: Record<string, string> = { 'User-Agent': 'agentver-cli' }\n const token = process.env.GITLAB_TOKEN\n if (token) {\n headers['PRIVATE-TOKEN'] = token\n }\n\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), HTTP_TIMEOUT_MS)\n\n try {\n const response = await fetch(treeUrl, { headers, signal: controller.signal })\n clearTimeout(timeoutId)\n\n if (!response.ok) {\n throw new AgentverError('INTERNAL_ERROR', `GitLab tree API returned ${response.status}`)\n }\n\n const tree = (await response.json()) as GitLabTreeItem[]\n const files: FetchedFile[] = []\n\n for (const item of tree) {\n if (item.type !== 'blob') continue\n\n const filePath = encodeURIComponent(item.path)\n const fileUrl = `https://gitlab.com/api/v4/projects/${projectId}/repository/files/${filePath}/raw?ref=${commitSha}`\n\n const fileController = new AbortController()\n const fileTimeoutId = setTimeout(() => fileController.abort(), HTTP_TIMEOUT_MS)\n\n try {\n const fileResponse = await fetch(fileUrl, { headers, signal: fileController.signal })\n clearTimeout(fileTimeoutId)\n\n if (!fileResponse.ok) {\n logger.warn(`Failed to fetch GitLab file ${item.path}: ${fileResponse.status}`)\n continue\n }\n\n const content = await fileResponse.text()\n if (content.length > MAX_FILE_SIZE_BYTES) {\n logger.debug(`Skipping large file (${content.length} bytes): ${item.path}`)\n continue\n }\n\n const relativePath = path ? item.path.slice(path.length + 1) : item.path\n files.push({ path: relativePath, content, size: content.length })\n } catch (error) {\n clearTimeout(fileTimeoutId)\n logger.warn(`Failed to fetch GitLab file ${item.path}: ${String(error)}`)\n }\n }\n\n return files\n } catch (error) {\n clearTimeout(timeoutId)\n if (error instanceof AgentverError) throw error\n throw new AgentverError('INTERNAL_ERROR', `GitLab API fetch failed: ${String(error)}`)\n }\n}\n\nasync function fetchViaArchive(resolved: ResolvedRef): Promise<FetchedFile[]> {\n const { source, commitSha } = resolved\n\n if (source.host === 'github.com') {\n return fetchGitHubArchive(source, commitSha)\n }\n\n if (source.host === 'gitlab.com') {\n return fetchGitLabArchive(source, commitSha)\n }\n\n // Generic hosts — try git archive command\n return fetchGitArchiveCommand(source, commitSha)\n}\n\nasync function fetchGitHubArchive(source: GitSource, commitSha: string): Promise<FetchedFile[]> {\n const url = `https://api.github.com/repos/${source.owner}/${source.repo}/tarball/${commitSha}`\n const tempDir = join(tmpdir(), `agentver-archive-${randomUUID()}`)\n\n try {\n await mkdir(tempDir, { recursive: true })\n\n const headers: Record<string, string> = {\n Accept: 'application/vnd.github.v3+json',\n 'User-Agent': 'agentver-cli',\n }\n\n const token = process.env.GITHUB_TOKEN\n if (token) {\n headers.Authorization = `Bearer ${token}`\n }\n\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), GIT_TIMEOUT_MS)\n\n const response = await fetch(url, { headers, signal: controller.signal, redirect: 'follow' })\n clearTimeout(timeoutId)\n\n if (!response.ok) {\n throw new AgentverError('INTERNAL_ERROR', `GitHub tarball API returned ${response.status}`)\n }\n\n const tarballPath = join(tempDir, 'archive.tar.gz')\n const buffer = Buffer.from(await response.arrayBuffer())\n await writeFile(tarballPath, buffer)\n\n const extractDir = join(tempDir, 'extracted')\n await mkdir(extractDir, { recursive: true })\n\n await execFileAsync('tar', ['xzf', tarballPath, '-C', extractDir, '--strip-components=1'], {\n timeout: GIT_TIMEOUT_MS,\n })\n\n const readFrom = source.path ? join(extractDir, source.path) : extractDir\n return await readFilesFromDirectory(readFrom)\n } finally {\n await rm(tempDir, { recursive: true, force: true }).catch(() => {})\n }\n}\n\nasync function fetchGitLabArchive(source: GitSource, commitSha: string): Promise<FetchedFile[]> {\n const projectId = encodeURIComponent(`${source.owner}/${source.repo}`)\n const url = `https://gitlab.com/api/v4/projects/${projectId}/repository/archive.tar.gz?sha=${commitSha}`\n const tempDir = join(tmpdir(), `agentver-archive-${randomUUID()}`)\n\n try {\n await mkdir(tempDir, { recursive: true })\n\n const headers: Record<string, string> = { 'User-Agent': 'agentver-cli' }\n const token = process.env.GITLAB_TOKEN\n if (token) {\n headers['PRIVATE-TOKEN'] = token\n }\n\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), GIT_TIMEOUT_MS)\n\n const response = await fetch(url, { headers, signal: controller.signal, redirect: 'follow' })\n clearTimeout(timeoutId)\n\n if (!response.ok) {\n throw new AgentverError('INTERNAL_ERROR', `GitLab archive API returned ${response.status}`)\n }\n\n const tarballPath = join(tempDir, 'archive.tar.gz')\n const buffer = Buffer.from(await response.arrayBuffer())\n await writeFile(tarballPath, buffer)\n\n const extractDir = join(tempDir, 'extracted')\n await mkdir(extractDir, { recursive: true })\n\n await execFileAsync('tar', ['xzf', tarballPath, '-C', extractDir, '--strip-components=1'], {\n timeout: GIT_TIMEOUT_MS,\n })\n\n const readFrom = source.path ? join(extractDir, source.path) : extractDir\n return await readFilesFromDirectory(readFrom)\n } finally {\n await rm(tempDir, { recursive: true, force: true }).catch(() => {})\n }\n}\n\nasync function fetchGitArchiveCommand(\n source: GitSource,\n commitSha: string\n): Promise<FetchedFile[]> {\n const repoUrl = buildRepoUrl(source)\n const tempDir = join(tmpdir(), `agentver-archive-${randomUUID()}`)\n\n try {\n await mkdir(tempDir, { recursive: true })\n\n const args = ['archive', `--remote=${repoUrl}`, commitSha]\n if (source.path) {\n args.push('--', source.path)\n }\n\n const tarOutput = await execGit(args)\n const tarPath = join(tempDir, 'archive.tar')\n await writeFile(tarPath, tarOutput)\n\n const extractDir = join(tempDir, 'extracted')\n await mkdir(extractDir, { recursive: true })\n\n await execFileAsync('tar', ['xf', tarPath, '-C', extractDir], { timeout: GIT_TIMEOUT_MS })\n\n const readFrom = source.path ? join(extractDir, source.path) : extractDir\n return await readFilesFromDirectory(readFrom)\n } finally {\n await rm(tempDir, { recursive: true, force: true }).catch(() => {})\n }\n}\n\nasync function fetchViaSparseCheckout(resolved: ResolvedRef): Promise<FetchedFile[]> {\n const { source, commitSha } = resolved\n const repoUrl = buildRepoUrl(source)\n const tempDir = join(tmpdir(), `agentver-sparse-${randomUUID()}`)\n\n try {\n await mkdir(tempDir, { recursive: true })\n\n await execGit([\n 'clone',\n '--no-checkout',\n '--depth',\n '1',\n '--filter=blob:none',\n repoUrl,\n tempDir,\n ])\n await execGit(['sparse-checkout', 'set', source.path || '.'], tempDir)\n await execGit(['checkout', commitSha], tempDir)\n\n const readFrom = source.path ? join(tempDir, source.path) : tempDir\n return await readFilesFromDirectory(readFrom)\n } finally {\n await rm(tempDir, { recursive: true, force: true }).catch(() => {})\n }\n}\n\nasync function fetchViaClone(resolved: ResolvedRef): Promise<FetchedFile[]> {\n const { source, commitSha } = resolved\n const repoUrl = buildRepoUrl(source)\n const tempDir = join(tmpdir(), `agentver-clone-${randomUUID()}`)\n\n try {\n await mkdir(tempDir, { recursive: true })\n\n await execGit(['clone', '--depth', '1', repoUrl, tempDir])\n await execGit(['fetch', '--depth', '1', 'origin', commitSha], tempDir)\n await execGit(['checkout', commitSha], tempDir)\n\n const readFrom = source.path ? join(tempDir, source.path) : tempDir\n return await readFilesFromDirectory(readFrom)\n } finally {\n await rm(tempDir, { recursive: true, force: true }).catch(() => {})\n }\n}\n\nasync function gitHubFetch(url: string): Promise<Response> {\n const headers: Record<string, string> = {\n Accept: 'application/vnd.github.v3+json',\n 'User-Agent': 'agentver-cli',\n }\n\n const token = process.env.GITHUB_TOKEN\n if (token) {\n headers.Authorization = `Bearer ${token}`\n }\n\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), HTTP_TIMEOUT_MS)\n\n try {\n const response = await fetch(url, { headers, signal: controller.signal })\n clearTimeout(timeoutId)\n return response\n } catch (error) {\n clearTimeout(timeoutId)\n throw error\n }\n}\n\nfunction isEnoent(error: unknown): boolean {\n return (\n typeof error === 'object' &&\n error !== null &&\n 'code' in error &&\n (error as { code: string }).code === 'ENOENT'\n )\n}\n\n// --- GitHub API types ---\n\ntype GitHubContentItem = {\n name: string\n path: string\n sha: string\n size: number\n type: 'file' | 'dir' | 'symlink' | 'submodule'\n download_url: string | null\n}\n\ntype GitHubContentFile = {\n name: string\n path: string\n sha: string\n size: number\n type: 'file'\n content: string\n encoding: string\n}\n\n// --- GitLab API types ---\n\ntype GitLabTreeItem = {\n id: string\n name: string\n type: 'tree' | 'blob'\n path: string\n mode: string\n}\n","import type { Dirent } from 'node:fs'\nimport { existsSync, mkdirSync, readdirSync, readFileSync, statSync, writeFileSync } from 'node:fs'\nimport { homedir } from 'node:os'\nimport { dirname, join } from 'node:path'\nimport { createLogger } from '@agentver/shared'\nimport type { FetchedFile, GitSource } from './types.js'\n\nconst logger = createLogger('git:cache')\n\nexport function getCacheDir(): string {\n return join(homedir(), '.agentver', 'cache')\n}\n\nexport function getRepoCacheDir(source: GitSource): string {\n return join(getCacheDir(), source.host, source.owner, source.repo)\n}\n\nexport function getCachedFiles(source: GitSource, commitSha: string): FetchedFile[] | null {\n const commitDir = join(getRepoCacheDir(source), 'commits', commitSha)\n const basePath = source.path || '.'\n\n const targetDir = basePath === '.' ? commitDir : join(commitDir, basePath)\n\n if (!existsSync(targetDir)) return null\n\n try {\n const files = readCachedFilesSync(targetDir)\n if (files.length === 0) return null\n return files\n } catch (error) {\n logger.debug(`Cache read failed for ${commitSha}: ${String(error)}`)\n return null\n }\n}\n\nexport function cacheFiles(source: GitSource, commitSha: string, files: FetchedFile[]): void {\n const commitDir = join(getRepoCacheDir(source), 'commits', commitSha)\n const basePath = source.path || '.'\n\n try {\n for (const file of files) {\n const filePath =\n basePath === '.' ? join(commitDir, file.path) : join(commitDir, basePath, file.path)\n const dir = dirname(filePath)\n\n mkdirSync(dir, { recursive: true })\n writeFileSync(filePath, file.content)\n }\n } catch (error) {\n logger.warn(`Failed to cache files: ${String(error)}`)\n }\n}\n\n// --- Helpers ---\n\nfunction readCachedFilesSync(dirPath: string, basePath = ''): FetchedFile[] {\n const files: FetchedFile[] = []\n\n let entries: Dirent[]\n try {\n entries = readdirSync(dirPath, { withFileTypes: true })\n } catch {\n return []\n }\n\n for (const entry of entries) {\n const name = String(entry.name)\n if (name === '.git') continue\n\n const fullPath = join(dirPath, name)\n const relativePath = basePath ? `${basePath}/${name}` : name\n\n if (entry.isDirectory()) {\n files.push(...readCachedFilesSync(fullPath, relativePath))\n continue\n }\n\n if (!entry.isFile()) continue\n\n try {\n const content = readFileSync(fullPath, 'utf-8')\n const fileStat = statSync(fullPath)\n files.push({ path: relativePath, content, size: fileStat.size })\n } catch {\n // Skip unreadable files\n }\n }\n\n return files\n}\n","import { basename, extname } from 'node:path'\nimport type { FetchedFile } from '../git/types.js'\nimport type { ScanFinding } from './types.js'\n\nconst EXECUTABLE_EXTENSIONS = new Set([\n '.exe',\n '.sh',\n '.bat',\n '.cmd',\n '.ps1',\n '.dll',\n '.so',\n '.dylib',\n])\n\nconst PRIVATE_KEY_EXTENSIONS = new Set(['.pem', '.key', '.p12', '.pfx'])\n\nconst DANGEROUS_DOTFILES = new Set([\n '.env',\n '.env.local',\n '.env.production',\n '.env.staging',\n '.env.development',\n '.bashrc',\n '.zshrc',\n '.profile',\n '.gitconfig',\n])\n\nconst CREDENTIAL_FILE_PATHS = new Set([\n '.aws/credentials',\n '.ssh/id_rsa',\n '.ssh/id_ed25519',\n '.kube/config',\n])\n\nconst MAX_INDIVIDUAL_FILE_BYTES = 1_024 * 1_024 // 1MB\nconst MAX_TOTAL_PACKAGE_BYTES = 10 * 1_024 * 1_024 // 10MB\n\n/**\n * Checks whether file content is likely binary by scanning for null bytes\n * or non-UTF-8 sequences in the first 8KB.\n */\nfunction isBinaryContent(content: string): boolean {\n const sample = content.slice(0, 8192)\n for (let i = 0; i < sample.length; i++) {\n if (sample.charCodeAt(i) === 0) {\n return true\n }\n }\n return false\n}\n\n/**\n * Runs file-level policy checks on all fetched files.\n * Returns findings for binary files, executable extensions,\n * dangerous dotfiles, and size violations.\n */\nexport function checkFilePolicy(files: FetchedFile[]): ScanFinding[] {\n const findings: ScanFinding[] = []\n let totalSize = 0\n\n for (const file of files) {\n const fileName = basename(file.path)\n const ext = extname(file.path).toLowerCase()\n totalSize += file.size\n\n // Binary detection\n if (isBinaryContent(file.content)) {\n findings.push({\n severity: 'HIGH',\n category: 'BINARY_FILE',\n file: file.path,\n message: 'Binary file detected — may contain hidden executable code',\n })\n }\n\n // Executable extensions\n if (EXECUTABLE_EXTENSIONS.has(ext)) {\n findings.push({\n severity: 'HIGH',\n category: 'DISALLOWED_FILE_TYPE',\n file: file.path,\n message: `Executable file extension detected (${ext})`,\n })\n }\n\n // Private key file extensions\n if (PRIVATE_KEY_EXTENSIONS.has(ext)) {\n findings.push({\n severity: 'HIGH',\n category: 'CREDENTIAL_FILE',\n file: file.path,\n message: `Private key file extension detected (${ext}) — may contain cryptographic secrets`,\n })\n }\n\n // Dangerous dotfiles\n if (DANGEROUS_DOTFILES.has(fileName)) {\n findings.push({\n severity: 'CRITICAL',\n category: 'DISALLOWED_FILE_TYPE',\n file: file.path,\n message: `Dangerous dotfile detected (${fileName}) — may modify environment or expose secrets`,\n })\n }\n\n // Credential file paths\n const credPaths = Array.from(CREDENTIAL_FILE_PATHS)\n for (let i = 0; i < credPaths.length; i++) {\n const credPath = credPaths[i]!\n if (file.path.endsWith(credPath) || file.path.includes(`/${credPath}`)) {\n findings.push({\n severity: 'CRITICAL',\n category: 'CREDENTIAL_FILE',\n file: file.path,\n message: `Credential configuration file detected (${credPath})`,\n })\n break\n }\n }\n\n // .npmrc with _authToken\n if (fileName === '.npmrc') {\n if (file.content.includes('_authToken')) {\n findings.push({\n severity: 'CRITICAL',\n category: 'CREDENTIAL_FILE',\n file: file.path,\n message: 'NPM auth token detected in .npmrc',\n })\n }\n }\n\n // Individual file size\n if (file.size > MAX_INDIVIDUAL_FILE_BYTES) {\n findings.push({\n severity: 'LOW',\n category: 'EXCESSIVE_SIZE',\n file: file.path,\n message: `File exceeds 1MB (${formatBytes(file.size)})`,\n })\n }\n }\n\n // Total package size\n if (totalSize > MAX_TOTAL_PACKAGE_BYTES) {\n findings.push({\n severity: 'MEDIUM',\n category: 'EXCESSIVE_SIZE',\n file: '(package total)',\n message: `Total package size exceeds 10MB (${formatBytes(totalSize)})`,\n })\n }\n\n return findings\n}\n\n/**\n * Returns true if the file content appears to be binary.\n * Exposed for the scanner to skip pattern matching on binary files.\n */\nexport { isBinaryContent }\n\nfunction formatBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes}B`\n if (bytes < 1_024 * 1_024) return `${(bytes / 1_024).toFixed(1)}KB`\n return `${(bytes / (1_024 * 1_024)).toFixed(1)}MB`\n}\n","import type { ScanRule } from './types.js'\n\nexport const SCAN_RULES: ScanRule[] = [\n // --- DANGEROUS_COMMAND (HIGH) ---\n {\n id: 'DC001',\n category: 'DANGEROUS_COMMAND',\n severity: 'HIGH',\n pattern: /\\brm\\s+-rf\\b/,\n message: 'Recursive force delete detected (rm -rf)',\n },\n {\n id: 'DC002',\n category: 'DANGEROUS_COMMAND',\n severity: 'HIGH',\n pattern: /\\bsudo\\s+/,\n message: 'Elevated privilege command detected (sudo)',\n },\n {\n id: 'DC003',\n category: 'DANGEROUS_COMMAND',\n severity: 'HIGH',\n pattern: /\\bchmod\\s+777\\b/,\n message: 'World-writable permission detected (chmod 777)',\n },\n {\n id: 'DC004',\n category: 'DANGEROUS_COMMAND',\n severity: 'HIGH',\n pattern: /\\bcurl\\b.*\\|.*\\bbash\\b/,\n message: 'Piped remote script execution detected (curl | bash)',\n },\n {\n id: 'DC005',\n category: 'DANGEROUS_COMMAND',\n severity: 'HIGH',\n pattern: /\\beval\\s*\\(/,\n message: 'Dynamic code evaluation detected (eval())',\n },\n {\n id: 'DC006',\n category: 'DANGEROUS_COMMAND',\n severity: 'HIGH',\n pattern: /\\bexec\\s*\\(/,\n message: 'Process execution detected (exec())',\n },\n {\n id: 'DC007',\n category: 'DANGEROUS_COMMAND',\n severity: 'HIGH',\n pattern: /\\bsystem\\s*\\(/,\n message: 'System command execution detected (system())',\n },\n\n // --- DATA_EXFILTRATION (CRITICAL) ---\n {\n id: 'DE001',\n category: 'DATA_EXFILTRATION',\n severity: 'CRITICAL',\n pattern: /\\bcurl\\b.*-X\\s*POST\\b/,\n message: 'Outbound POST request via curl detected',\n },\n {\n id: 'DE002',\n category: 'DATA_EXFILTRATION',\n severity: 'CRITICAL',\n pattern: /\\bfetch\\s*\\([^)]*body\\s*:/,\n message: 'Outbound fetch with body payload detected',\n },\n {\n id: 'DE003',\n category: 'DATA_EXFILTRATION',\n severity: 'CRITICAL',\n pattern: /\\bwebhook\\.site\\b/,\n message: 'Known data exfiltration domain detected (webhook.site)',\n },\n {\n id: 'DE004',\n category: 'DATA_EXFILTRATION',\n severity: 'CRITICAL',\n pattern: /\\bngrok\\b/,\n message: 'Tunnelling service detected (ngrok)',\n },\n {\n id: 'DE005',\n category: 'DATA_EXFILTRATION',\n severity: 'CRITICAL',\n pattern: /\\brequestbin\\b/i,\n message: 'Known data exfiltration service detected (requestbin)',\n },\n\n // --- OBFUSCATED_CODE (HIGH) ---\n {\n id: 'OC001',\n category: 'OBFUSCATED_CODE',\n severity: 'HIGH',\n pattern: /[A-Za-z0-9+/=]{200,}/,\n message: 'Long base64-like string detected (>200 characters)',\n },\n {\n id: 'OC002',\n category: 'OBFUSCATED_CODE',\n severity: 'HIGH',\n pattern: /(\\\\x[0-9a-fA-F]{2}){10,}/,\n message: 'Hex escape chain detected (>10 sequences)',\n },\n {\n id: 'OC003',\n category: 'OBFUSCATED_CODE',\n severity: 'HIGH',\n pattern: /String\\.fromCharCode\\s*\\([^)]*,/,\n message: 'Character code construction chain detected (String.fromCharCode)',\n },\n {\n id: 'OC004',\n category: 'OBFUSCATED_CODE',\n severity: 'MEDIUM',\n pattern: /\\\\u00[0-9a-fA-F]{2}/,\n message: 'Unicode escape sequence detected — potential code obfuscation',\n },\n {\n id: 'OC005',\n category: 'OBFUSCATED_CODE',\n severity: 'MEDIUM',\n pattern: /\\batob\\s*\\(/,\n message: 'Base64 decode detected (atob()) — potential obfuscated payload',\n },\n {\n id: 'OC006',\n category: 'OBFUSCATED_CODE',\n severity: 'MEDIUM',\n pattern: /\\bbtoa\\s*\\(/,\n message: 'Base64 encode detected (btoa()) — potential data exfiltration encoding',\n },\n\n // --- SUSPICIOUS_URL (MEDIUM) ---\n {\n id: 'SU001',\n category: 'SUSPICIOUS_URL',\n severity: 'MEDIUM',\n pattern: /\\bpastebin\\.com\\b/,\n message: 'Suspicious URL detected (pastebin.com)',\n },\n {\n id: 'SU002',\n category: 'SUSPICIOUS_URL',\n severity: 'MEDIUM',\n pattern: /\\bdiscord\\.com\\/api\\/webhooks\\b/,\n message: 'Discord webhook URL detected',\n },\n {\n id: 'SU003',\n category: 'SUSPICIOUS_URL',\n severity: 'MEDIUM',\n pattern: /\\bbit\\.ly\\//,\n message: 'URL shortener detected (bit.ly)',\n },\n {\n id: 'SU004',\n category: 'SUSPICIOUS_URL',\n severity: 'MEDIUM',\n pattern: /\\bt\\.ly\\//,\n message: 'URL shortener detected (t.ly)',\n },\n\n // --- DATA_EXFILTRATION: process.env (HIGH) ---\n {\n id: 'DE006',\n category: 'DATA_EXFILTRATION',\n severity: 'HIGH',\n pattern: /\\bprocess\\.env\\.[A-Z_]{2,}\\b/,\n message: 'Environment variable access detected (process.env.VAR)',\n },\n {\n id: 'DE007',\n category: 'DATA_EXFILTRATION',\n severity: 'HIGH',\n pattern: /\\bprocess\\.env\\s*\\[/,\n message: 'Dynamic environment variable access detected (process.env[...])',\n },\n {\n id: 'DE008',\n category: 'DATA_EXFILTRATION',\n severity: 'HIGH',\n pattern: /\\bprocess\\s*\\[\\s*['\"]env['\"]\\s*\\]/,\n message: \"Obfuscated environment variable access detected (process['env'])\",\n },\n\n // --- DATA_EXFILTRATION: wget (HIGH) ---\n {\n id: 'DE009',\n category: 'DATA_EXFILTRATION',\n severity: 'HIGH',\n pattern: /\\bwget\\s/,\n message: 'File download via wget detected',\n },\n {\n id: 'DE010',\n category: 'DATA_EXFILTRATION',\n severity: 'HIGH',\n pattern: /\\bwget\\s*\\(/,\n message: 'Programmatic wget invocation detected',\n },\n\n // --- DATA_EXFILTRATION: nc/netcat (CRITICAL) ---\n {\n id: 'DE011',\n category: 'DATA_EXFILTRATION',\n severity: 'CRITICAL',\n pattern: /\\bnc\\b/,\n message: 'Netcat usage detected (nc) — potential reverse shell or data exfiltration',\n },\n {\n id: 'DE012',\n category: 'DATA_EXFILTRATION',\n severity: 'CRITICAL',\n pattern: /\\bnetcat\\b/,\n message: 'Netcat usage detected — potential reverse shell or data exfiltration',\n },\n {\n id: 'DE013',\n category: 'DATA_EXFILTRATION',\n severity: 'CRITICAL',\n pattern: /\\bncat\\b/,\n message: 'Ncat usage detected — potential reverse shell or data exfiltration',\n },\n\n // --- DATA_EXFILTRATION: DNS exfiltration (HIGH) ---\n {\n id: 'DE014',\n category: 'DATA_EXFILTRATION',\n severity: 'HIGH',\n pattern: /\\bnslookup\\s/,\n message: 'DNS lookup detected (nslookup) — potential DNS exfiltration',\n },\n {\n id: 'DE015',\n category: 'DATA_EXFILTRATION',\n severity: 'HIGH',\n pattern: /\\bdig\\s/,\n message: 'DNS query detected (dig) — potential DNS exfiltration',\n },\n {\n id: 'DE016',\n category: 'DATA_EXFILTRATION',\n severity: 'HIGH',\n pattern: /\\bhost\\s/,\n message: 'DNS resolution detected (host) — potential DNS exfiltration',\n },\n\n // --- DANGEROUS_COMMAND: child_process (CRITICAL) ---\n {\n id: 'DC008',\n category: 'DANGEROUS_COMMAND',\n severity: 'CRITICAL',\n pattern: /\\brequire\\s*\\(\\s*['\"`]child_process['\"`]\\s*\\)/,\n message: 'Child process module import detected (require child_process)',\n },\n {\n id: 'DC009',\n category: 'DANGEROUS_COMMAND',\n severity: 'CRITICAL',\n pattern: /\\bfrom\\s+['\"]child_process['\"]/,\n message: 'Child process module import detected (from child_process)',\n },\n {\n id: 'DC010',\n category: 'DANGEROUS_COMMAND',\n severity: 'CRITICAL',\n pattern: /\\bspawn\\s*\\(/,\n message: 'Process spawn detected (spawn())',\n },\n {\n id: 'DC011',\n category: 'DANGEROUS_COMMAND',\n severity: 'CRITICAL',\n pattern: /\\bexecSync\\s*\\(/,\n message: 'Synchronous command execution detected (execSync())',\n },\n {\n id: 'DC012',\n category: 'DANGEROUS_COMMAND',\n severity: 'CRITICAL',\n pattern: /\\bexecFile\\s*\\(/,\n message: 'File execution detected (execFile())',\n },\n {\n id: 'DC013',\n category: 'DANGEROUS_COMMAND',\n severity: 'CRITICAL',\n pattern: /\\bfork\\s*\\(/,\n message: 'Process fork detected (fork())',\n },\n\n // --- DANGEROUS_COMMAND: Function constructor (HIGH) ---\n {\n id: 'DC014',\n category: 'DANGEROUS_COMMAND',\n severity: 'HIGH',\n pattern: /\\bnew\\s+Function\\s*\\(/,\n message: 'Function constructor detected (new Function()) — dynamic code execution',\n },\n {\n id: 'DC015',\n category: 'DANGEROUS_COMMAND',\n severity: 'HIGH',\n pattern: /\\bFunction\\s*\\(/,\n message: 'Function constructor invocation detected (Function()) — dynamic code execution',\n },\n\n // --- CREDENTIAL_EXPOSURE (HIGH) ---\n {\n id: 'CE001',\n category: 'CREDENTIAL_EXPOSURE',\n severity: 'HIGH',\n pattern: /\\bsk-[a-zA-Z0-9]{20,}\\b/,\n message: 'Potential OpenAI/Stripe API key detected (sk-...)',\n },\n {\n id: 'CE002',\n category: 'CREDENTIAL_EXPOSURE',\n severity: 'HIGH',\n pattern: /\\bAKIA[A-Z0-9]{16}\\b/,\n message: 'AWS access key ID detected (AKIA...)',\n },\n {\n id: 'CE003',\n category: 'CREDENTIAL_EXPOSURE',\n severity: 'HIGH',\n pattern: /\\bghp_[a-zA-Z0-9]{36}\\b/,\n message: 'GitHub personal access token detected (ghp_...)',\n },\n {\n id: 'CE004',\n category: 'CREDENTIAL_EXPOSURE',\n severity: 'HIGH',\n pattern: /\\bpassword\\s*=\\s*['\"][^'\"]+['\"]/i,\n message: 'Hardcoded password assignment detected',\n },\n {\n id: 'CE005',\n category: 'CREDENTIAL_EXPOSURE',\n severity: 'HIGH',\n pattern: /\\bgithub_pat_[a-zA-Z0-9_]{20,}\\b/,\n message: 'GitHub fine-grained personal access token detected (github_pat_...)',\n },\n {\n id: 'CE006',\n category: 'CREDENTIAL_EXPOSURE',\n severity: 'HIGH',\n pattern: /[\"']private_key[\"']\\s*:\\s*[\"']-----BEGIN/,\n message: 'GCP service account private key detected',\n },\n\n // --- CREDENTIAL_EXPOSURE: generic token/secret assignments (HIGH) ---\n {\n id: 'CE007',\n category: 'CREDENTIAL_EXPOSURE',\n severity: 'HIGH',\n pattern: /\\btoken\\s*=\\s*['\"]/,\n message: 'Hardcoded token assignment detected',\n },\n {\n id: 'CE008',\n category: 'CREDENTIAL_EXPOSURE',\n severity: 'HIGH',\n pattern: /\\bapi_key\\s*=\\s*['\"]/,\n message: 'Hardcoded API key assignment detected (api_key)',\n },\n {\n id: 'CE009',\n category: 'CREDENTIAL_EXPOSURE',\n severity: 'HIGH',\n pattern: /\\bapiKey\\s*=\\s*['\"]/,\n message: 'Hardcoded API key assignment detected (apiKey)',\n },\n {\n id: 'CE010',\n category: 'CREDENTIAL_EXPOSURE',\n severity: 'HIGH',\n pattern: /\\bsecret\\s*=\\s*['\"]/,\n message: 'Hardcoded secret assignment detected',\n },\n\n // --- CREDENTIAL_EXPOSURE: GCP service account key (CRITICAL) ---\n {\n id: 'CE011',\n category: 'CREDENTIAL_EXPOSURE',\n severity: 'CRITICAL',\n pattern: /\"type\"\\s*:\\s*\"service_account\"/,\n message: 'GCP service account key file detected',\n },\n\n // --- CREDENTIAL_EXPOSURE: Slack token (CRITICAL) ---\n {\n id: 'CE012',\n category: 'CREDENTIAL_EXPOSURE',\n severity: 'CRITICAL',\n pattern: /xox[bpras]-[a-zA-Z0-9-]+/,\n message: 'Slack token detected (xox[bpras]-...)',\n },\n\n // --- CREDENTIAL_FILE: path-based credential detection (CRITICAL) ---\n {\n id: 'CF001',\n category: 'CREDENTIAL_FILE',\n severity: 'CRITICAL',\n pattern: /\\.aws\\/credentials/,\n message: 'AWS credentials file detected',\n },\n {\n id: 'CF002',\n category: 'CREDENTIAL_FILE',\n severity: 'CRITICAL',\n pattern: /\\.ssh\\/id_rsa/,\n message: 'SSH private key file reference detected (id_rsa)',\n },\n {\n id: 'CF003',\n category: 'CREDENTIAL_FILE',\n severity: 'CRITICAL',\n pattern: /\\.ssh\\/id_ed25519/,\n message: 'SSH private key file reference detected (id_ed25519)',\n },\n {\n id: 'CF004',\n category: 'CREDENTIAL_FILE',\n severity: 'CRITICAL',\n pattern: /\\.kube\\/config/,\n message: 'Kubernetes config file reference detected',\n },\n {\n id: 'CF005',\n category: 'CREDENTIAL_FILE',\n severity: 'CRITICAL',\n pattern: /\\.npmrc\\b.*_authToken/,\n message: 'NPM auth token in .npmrc detected',\n },\n\n // --- PROMPT_INJECTION (MEDIUM) ---\n {\n id: 'PI001',\n category: 'PROMPT_INJECTION',\n severity: 'MEDIUM',\n pattern: /\\bignore\\s+previous\\s+instructions\\b/i,\n message: 'Prompt injection pattern detected (ignore previous instructions)',\n },\n {\n id: 'PI002',\n category: 'PROMPT_INJECTION',\n severity: 'MEDIUM',\n pattern: /\\byou\\s+are\\s+now\\b/i,\n message: 'Prompt injection pattern detected (you are now)',\n },\n {\n id: 'PI003',\n category: 'PROMPT_INJECTION',\n severity: 'MEDIUM',\n pattern: /\\bdisregard\\s+all\\s+prior\\b/i,\n message: 'Prompt injection pattern detected (disregard all prior)',\n },\n {\n id: 'PI004',\n category: 'PROMPT_INJECTION',\n severity: 'MEDIUM',\n pattern: /\\bforget\\s+your\\s+instructions\\b/i,\n message: 'Prompt injection pattern detected (forget your instructions)',\n },\n\n // --- REMOTE_CODE_EXECUTION (CRITICAL) ---\n {\n id: 'RCE001',\n category: 'REMOTE_CODE_EXECUTION',\n severity: 'CRITICAL',\n pattern: /\\bimport\\s*\\(\\s*['\"`]https?:/,\n message: 'Dynamic remote import detected (import() with URL)',\n },\n {\n id: 'RCE002',\n category: 'REMOTE_CODE_EXECUTION',\n severity: 'CRITICAL',\n pattern: /\\brequire\\s*\\(\\s*['\"`]https?:/,\n message: 'Remote require detected (require() with URL)',\n },\n {\n id: 'RCE003',\n category: 'REMOTE_CODE_EXECUTION',\n severity: 'CRITICAL',\n pattern: /\\beval\\s*\\(\\s*.*\\bfetch\\s*\\(/,\n message: 'Remote code execution detected (eval(fetch()))',\n },\n]\n","import chalk from 'chalk'\nimport type ora from 'ora'\nimport type { ScanFinding, ScanResult, ScanSeverity } from './types.js'\n\nconst SEVERITY_COLOURS: Record<ScanSeverity, (text: string) => string> = {\n CRITICAL: chalk.red.bold,\n HIGH: chalk.red,\n MEDIUM: chalk.yellow,\n LOW: chalk.dim,\n INFO: chalk.dim,\n}\n\nconst SEVERITY_LABELS: Record<ScanSeverity, string> = {\n CRITICAL: 'CRITICAL',\n HIGH: 'HIGH',\n MEDIUM: 'MEDIUM',\n LOW: 'LOW',\n INFO: 'INFO',\n}\n\n/**\n * Groups findings by severity, then by file path.\n */\nfunction groupFindings(findings: ScanFinding[]): Map<ScanSeverity, Map<string, ScanFinding[]>> {\n const grouped = new Map<ScanSeverity, Map<string, ScanFinding[]>>()\n\n for (const finding of findings) {\n let severityMap = grouped.get(finding.severity)\n if (!severityMap) {\n severityMap = new Map<string, ScanFinding[]>()\n grouped.set(finding.severity, severityMap)\n }\n\n let fileFindings = severityMap.get(finding.file)\n if (!fileFindings) {\n fileFindings = []\n severityMap.set(finding.file, fileFindings)\n }\n\n fileFindings.push(finding)\n }\n\n return grouped\n}\n\n/**\n * Renders scan results to the terminal via the provided spinner.\n *\n * - BLOCK findings are shown in red with file, line, and evidence\n * - WARN findings are shown in yellow\n * - PASS shows a green tick with a single line\n */\nexport function renderScanResult(result: ScanResult, spinner: ReturnType<typeof ora>): void {\n if (result.verdict === 'PASS' && result.findings.length === 0) {\n spinner.succeed(chalk.green('Security scan passed') + chalk.dim(` (${result.duration}ms)`))\n return\n }\n\n // Stop the spinner before printing detailed output\n spinner.stop()\n\n const grouped = groupFindings(result.findings)\n const severityOrder: ScanSeverity[] = ['CRITICAL', 'HIGH', 'MEDIUM', 'LOW', 'INFO']\n\n console.log()\n console.log(\n chalk.bold('Security scan results') +\n chalk.dim(\n ` (${result.findings.length} finding${result.findings.length === 1 ? '' : 's'}, ${result.duration}ms)`\n )\n )\n console.log()\n\n for (const severity of severityOrder) {\n const fileMap = grouped.get(severity)\n if (!fileMap) continue\n\n const colour = SEVERITY_COLOURS[severity]\n const label = SEVERITY_LABELS[severity]\n\n console.log(colour(` ${label}`))\n\n for (const [filePath, findings] of fileMap) {\n console.log(chalk.dim(` ${filePath}`))\n\n for (const finding of findings) {\n const lineRef = finding.line ? chalk.dim(`:${finding.line}`) : ''\n console.log(` ${colour('\\u2716')} ${finding.message}${lineRef}`)\n\n if (finding.evidence) {\n const truncated =\n finding.evidence.length > 120\n ? `${finding.evidence.slice(0, 120)}...`\n : finding.evidence\n console.log(chalk.dim(` ${truncated}`))\n }\n }\n }\n\n console.log()\n }\n\n if (result.verdict === 'BLOCK') {\n console.log(\n chalk.red.bold(' Scan verdict: BLOCK') +\n chalk.red(' — install aborted due to security findings')\n )\n console.log(chalk.dim(' Use --skip-audit to bypass the security scan'))\n } else if (result.verdict === 'WARN') {\n console.log(\n chalk.yellow.bold(' Scan verdict: WARN') +\n chalk.yellow(' — potential security concerns detected')\n )\n }\n\n console.log()\n}\n","import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs'\nimport { homedir } from 'node:os'\nimport { join } from 'node:path'\nimport type { ScanSeverity } from '../security/types.js'\nimport { getCredentials } from './auth.js'\n\nexport type AuditConfig = {\n enabled?: boolean\n blockSeverity?: ScanSeverity\n trustedSources?: string[]\n}\n\nexport type AgentverConfig = {\n platformUrl?: string\n defaultOrg?: string\n telemetry?: boolean\n audit?: AuditConfig\n}\n\nconst CONFIG_DIR = join(homedir(), '.agentver')\nconst CONFIG_PATH = join(CONFIG_DIR, 'config.json')\n\nexport function getConfigPath(): string {\n return CONFIG_PATH\n}\n\nexport function readConfig(): AgentverConfig {\n if (!existsSync(CONFIG_PATH)) {\n return {}\n }\n\n try {\n const raw = readFileSync(CONFIG_PATH, 'utf-8')\n return JSON.parse(raw) as AgentverConfig\n } catch {\n return {}\n }\n}\n\nexport function writeConfig(config: AgentverConfig): void {\n if (!existsSync(CONFIG_DIR)) {\n mkdirSync(CONFIG_DIR, { recursive: true })\n }\n\n writeFileSync(CONFIG_PATH, JSON.stringify(config, null, 2), { mode: 0o600 })\n}\n\nexport function getPlatformUrl(): string | null {\n return readConfig().platformUrl ?? null\n}\n\nexport async function isConnected(): Promise<boolean> {\n const url = getPlatformUrl()\n if (!url) return false\n\n const creds = await getCredentials()\n return !!(creds?.token ?? creds?.apiKey)\n}\n","import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs'\nimport { homedir } from 'node:os'\nimport { join } from 'node:path'\n\ntype Credentials = {\n token?: string\n apiKey?: string\n}\n\nfunction getCredentialsPath(): string {\n return join(homedir(), '.agentver', 'credentials.json')\n}\n\nexport async function getCredentials(): Promise<Credentials | null> {\n const credPath = getCredentialsPath()\n\n if (!existsSync(credPath)) {\n return null\n }\n\n const raw = readFileSync(credPath, 'utf-8')\n\n try {\n return JSON.parse(raw) as Credentials\n } catch {\n return null\n }\n}\n\nexport function saveCredentials(credentials: Credentials): void {\n const credPath = getCredentialsPath()\n const dir = join(homedir(), '.agentver')\n\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true })\n }\n\n writeFileSync(credPath, JSON.stringify(credentials, null, 2), { mode: 0o600 })\n}\n\nexport function clearCredentials(): void {\n const credPath = getCredentialsPath()\n if (existsSync(credPath)) {\n writeFileSync(credPath, '{}', { mode: 0o600 })\n }\n}\n\nexport async function isAuthenticated(): Promise<boolean> {\n const creds = await getCredentials()\n return !!(creds?.token ?? creds?.apiKey)\n}\n","import type { FetchedFile, GitSource } from '../git/types.js'\nimport { readConfig } from '../registry/config.js'\nimport { checkFilePolicy, isBinaryContent } from './file-policy.js'\nimport { SCAN_RULES } from './patterns.js'\nimport type { ScanFinding, ScanOptions, ScanResult, ScanSeverity, ScanVerdict } from './types.js'\n\nconst SEVERITY_ORDER: Record<ScanSeverity, number> = {\n CRITICAL: 4,\n HIGH: 3,\n MEDIUM: 2,\n LOW: 1,\n INFO: 0,\n}\n\n/**\n * Checks whether a given source URI matches any trusted source patterns\n * from the user's config. Trusted sources skip scanning entirely.\n */\nfunction isTrustedSource(sourceUri: string, trustedPatterns: string[]): boolean {\n for (const pattern of trustedPatterns) {\n // Convert glob-style pattern to a regex\n // e.g. 'github.com/anthropics/*' → /^github\\.com\\/anthropics\\/[^/]+$/\n const escaped = pattern.replace(/[.+^${}()|[\\]\\\\]/g, '\\\\$&').replace(/\\*/g, '[^/]+')\n const regex = new RegExp(`^${escaped}$`)\n\n if (regex.test(sourceUri)) {\n return true\n }\n }\n return false\n}\n\n/**\n * Runs pattern matching against each line of text files.\n * Returns findings with file, line number, and evidence.\n */\nfunction scanPatterns(files: FetchedFile[]): ScanFinding[] {\n const findings: ScanFinding[] = []\n\n for (const file of files) {\n if (isBinaryContent(file.content)) {\n continue\n }\n\n const lines = file.content.split('\\n')\n\n for (let lineIdx = 0; lineIdx < lines.length; lineIdx++) {\n const line = lines[lineIdx]!\n\n for (const rule of SCAN_RULES) {\n if (rule.pattern.test(line)) {\n // Trim evidence to a reasonable length\n const evidence = line.trim().slice(0, 200)\n\n findings.push({\n severity: rule.severity,\n category: rule.category,\n file: file.path,\n line: lineIdx + 1,\n message: rule.message,\n evidence: evidence.length > 0 ? evidence : undefined,\n })\n }\n }\n }\n }\n\n return findings\n}\n\n/**\n * Determines the overall verdict from the highest-severity finding.\n * CRITICAL or HIGH -> BLOCK, MEDIUM -> WARN, otherwise PASS.\n */\nfunction determineVerdict(\n findings: ScanFinding[],\n blockSeverity: ScanSeverity = 'HIGH'\n): ScanVerdict {\n if (findings.length === 0) {\n return 'PASS'\n }\n\n const blockThreshold = SEVERITY_ORDER[blockSeverity]\n\n let highestSeverity = 0\n for (const finding of findings) {\n const level = SEVERITY_ORDER[finding.severity]\n if (level > highestSeverity) {\n highestSeverity = level\n }\n }\n\n if (highestSeverity >= blockThreshold) {\n return 'BLOCK'\n }\n\n if (highestSeverity >= SEVERITY_ORDER.MEDIUM) {\n return 'WARN'\n }\n\n return 'PASS'\n}\n\n/**\n * Main security scanner orchestrator.\n *\n * Runs file policy checks on all files, then pattern matching on\n * text files. Aggregates findings and determines a verdict.\n *\n * Checks trusted sources — if the source matches a trusted pattern,\n * scanning is skipped and an immediate PASS is returned.\n */\nexport async function scanFiles(\n files: FetchedFile[],\n source: GitSource,\n options: ScanOptions\n): Promise<ScanResult> {\n const startTime = performance.now()\n\n if (options.skipAudit) {\n return {\n verdict: 'PASS',\n findings: [],\n scannedAt: new Date().toISOString(),\n duration: 0,\n provider: 'built-in',\n }\n }\n\n const config = readConfig()\n const auditConfig = config.audit\n\n // Check if audit is disabled globally\n if (auditConfig?.enabled === false) {\n return {\n verdict: 'PASS',\n findings: [],\n scannedAt: new Date().toISOString(),\n duration: 0,\n provider: 'built-in',\n }\n }\n\n // Check trusted sources\n const sourceUri = `${source.host}/${source.owner}/${source.repo}`\n if (auditConfig?.trustedSources && isTrustedSource(sourceUri, auditConfig.trustedSources)) {\n return {\n verdict: 'PASS',\n findings: [],\n scannedAt: new Date().toISOString(),\n duration: 0,\n provider: 'built-in',\n }\n }\n\n // Run file policy checks\n const policyFindings = checkFilePolicy(files)\n\n // Run pattern matching on text files\n const patternFindings = scanPatterns(files)\n\n // Aggregate all findings\n const allFindings = [...policyFindings, ...patternFindings]\n\n // Sort by severity (highest first), then by file\n allFindings.sort((a, b) => {\n const severityDiff = SEVERITY_ORDER[b.severity] - SEVERITY_ORDER[a.severity]\n if (severityDiff !== 0) return severityDiff\n return a.file.localeCompare(b.file)\n })\n\n const blockSeverity = auditConfig?.blockSeverity ?? 'HIGH'\n const verdict = determineVerdict(allFindings, blockSeverity)\n const duration = Math.round(performance.now() - startTime)\n\n return {\n verdict,\n findings: allFindings,\n scannedAt: new Date().toISOString(),\n duration,\n provider: 'built-in',\n }\n}\n","import {\n existsSync,\n lstatSync,\n mkdirSync,\n readdirSync,\n readlinkSync,\n rmSync,\n symlinkSync,\n} from 'node:fs'\nimport { homedir } from 'node:os'\nimport { dirname, join, relative } from 'node:path'\nimport { type AgentId, getSkillPlacementPath } from '@agentver/agent-definitions'\nimport { createLogger } from '@agentver/shared'\nimport chalk from 'chalk'\n\nconst logger = createLogger('canonical')\n\nconst CANONICAL_DIR = '.agents/skills'\n\n/**\n * Returns the canonical path where skill files are stored once.\n * For project scope: `<projectRoot>/.agents/skills/<name>`\n * For global scope: `~/.agents/skills/<name>`\n */\nexport function getCanonicalSkillPath(\n projectRoot: string,\n name: string,\n scope: 'project' | 'global'\n): string {\n if (scope === 'global') {\n const home = homedir()\n return join(home, CANONICAL_DIR, name)\n }\n return join(projectRoot, CANONICAL_DIR, name)\n}\n\n/**\n * Checks whether a package is using the canonical symlinked install pattern.\n * Returns true if the canonical directory exists for this skill.\n */\nexport function isSymlinkedInstall(\n projectRoot: string,\n name: string,\n scope: 'project' | 'global' = 'project'\n): boolean {\n const canonicalPath = getCanonicalSkillPath(projectRoot, name, scope)\n return existsSync(canonicalPath) && lstatSync(canonicalPath).isDirectory()\n}\n\n/**\n * Creates symlinks from each agent's skill directory to the canonical path.\n * Uses relative symlinks so the project remains portable.\n * Falls back to a warning if symlink creation fails (e.g. Windows without elevated permissions).\n */\nexport function createAgentSymlinks(\n projectRoot: string,\n name: string,\n agents: string[],\n scope: 'project' | 'global'\n): void {\n const canonicalPath = getCanonicalSkillPath(projectRoot, name, scope)\n\n for (const agentId of agents) {\n const placementPath = getSkillPlacementPath(agentId as AgentId, name, scope)\n if (!placementPath) continue\n\n const agentSkillPath =\n scope === 'global' ? placementPath.replace('~', homedir()) : join(projectRoot, placementPath)\n\n // If this path already exists (file, directory, or symlink), remove it first\n if (existsSync(agentSkillPath) || isSymlink(agentSkillPath)) {\n rmSync(agentSkillPath, { recursive: true, force: true })\n }\n\n // Ensure the parent directory exists\n const parentDir = dirname(agentSkillPath)\n if (!existsSync(parentDir)) {\n mkdirSync(parentDir, { recursive: true })\n }\n\n // Compute relative symlink target\n const relativeTarget = relative(parentDir, canonicalPath)\n\n try {\n symlinkSync(relativeTarget, agentSkillPath)\n } catch (error) {\n // Symlink failed — likely Windows without elevated permissions\n // Log a warning but don't fail the install; the canonical directory\n // still has the files so the install isn't broken\n logger.warn(`Could not create symlink at ${agentSkillPath}: ${String(error)}`)\n console.log(\n chalk.yellow(' Warning:') +\n ` Could not create symlink for ${agentId}. ` +\n chalk.dim('Files are available at the canonical path.')\n )\n }\n }\n}\n\n/**\n * Removes symlinks from each agent's skill directory for a given package.\n * Also cleans up empty parent directories.\n */\nexport function removeAgentSymlinks(\n projectRoot: string,\n name: string,\n agents: string[],\n scope: 'project' | 'global'\n): void {\n for (const agentId of agents) {\n const placementPath = getSkillPlacementPath(agentId as AgentId, name, scope)\n if (!placementPath) continue\n\n const agentSkillPath =\n scope === 'global' ? placementPath.replace('~', homedir()) : join(projectRoot, placementPath)\n\n if (existsSync(agentSkillPath) || isSymlink(agentSkillPath)) {\n rmSync(agentSkillPath, { recursive: true, force: true })\n }\n\n // Clean up empty parent directories\n cleanupEmptyParents(dirname(agentSkillPath), projectRoot)\n }\n}\n\n/**\n * Removes the canonical skill directory.\n */\nexport function removeCanonicalDirectory(\n projectRoot: string,\n name: string,\n scope: 'project' | 'global'\n): void {\n const canonicalPath = getCanonicalSkillPath(projectRoot, name, scope)\n\n if (existsSync(canonicalPath)) {\n rmSync(canonicalPath, { recursive: true, force: true })\n }\n\n // Clean up empty parent directories\n cleanupEmptyParents(dirname(canonicalPath), projectRoot)\n}\n\n/**\n * Resolves the best path to read files from for a given package.\n * Returns the canonical path if it exists, otherwise falls back to\n * the first agent-specific path that exists (backwards compatibility).\n */\nexport function resolveReadPath(\n projectRoot: string,\n packageName: string,\n agents: string[],\n scope: 'project' | 'global' = 'project'\n): string | null {\n // Try canonical path first\n const canonicalPath = getCanonicalSkillPath(projectRoot, packageName, scope)\n if (existsSync(canonicalPath) && lstatSync(canonicalPath).isDirectory()) {\n return canonicalPath\n }\n\n // Fall back to agent-specific paths (pre-canonical installs)\n for (const agentId of agents) {\n const placementPath = getSkillPlacementPath(agentId as AgentId, packageName, scope)\n if (!placementPath) continue\n\n const fullPath =\n scope === 'global' ? placementPath.replace('~', homedir()) : join(projectRoot, placementPath)\n\n if (existsSync(fullPath)) {\n // If it's a symlink, resolve to the canonical directory\n if (isSymlink(fullPath)) {\n const target = readlinkSync(fullPath)\n const resolvedTarget = join(dirname(fullPath), target)\n if (existsSync(resolvedTarget)) {\n return resolvedTarget\n }\n }\n return fullPath\n }\n }\n\n return null\n}\n\n/**\n * Checks if a path is a symlink (even if broken).\n */\nfunction isSymlink(filePath: string): boolean {\n try {\n const stats = lstatSync(filePath)\n return stats.isSymbolicLink()\n } catch {\n return false\n }\n}\n\n/**\n * Removes empty parent directories up to (but not including) the stop directory.\n */\nfunction cleanupEmptyParents(dirPath: string, stopAt: string): void {\n let current = dirPath\n\n while (current !== stopAt && current.startsWith(stopAt)) {\n try {\n const entries = readdirSync(current)\n if (entries.length === 0) {\n rmSync(current, { recursive: true, force: true })\n current = dirname(current)\n } else {\n break\n }\n } catch {\n break\n }\n }\n}\n","import { appendFileSync, existsSync, readFileSync } from 'node:fs'\nimport { homedir } from 'node:os'\nimport { join } from 'node:path'\nimport chalk from 'chalk'\nimport type { Command } from 'commander'\nimport { isJSONMode, outputError, outputSuccess } from '../output'\n\ntype CompletionOptions = {\n install?: boolean\n}\n\nconst TOP_LEVEL_COMMANDS = [\n 'adopt',\n 'audit',\n 'completion',\n 'config',\n 'diff',\n 'doctor',\n 'draft',\n 'info',\n 'init',\n 'install',\n 'list',\n 'log',\n 'login',\n 'logout',\n 'publish',\n 'remove',\n 'save',\n 'scan',\n 'search',\n 'status',\n 'suggest',\n 'suggestions',\n 'sync',\n 'update',\n 'upgrade',\n 'verify',\n 'version',\n 'whoami',\n]\n\nconst SUBCOMMANDS: Record<string, string[]> = {\n draft: ['create', 'list', 'switch', 'publish', 'discard'],\n version: ['create', 'list'],\n config: ['list', 'get', 'set', 'unset', 'path'],\n completion: ['bash', 'zsh', 'fish'],\n}\n\nconst COMMON_FLAGS = ['--json', '--global', '--dry-run', '--help']\n\nfunction generateBashScript(): string {\n const subcmdCases = Object.entries(SUBCOMMANDS)\n .map(\n ([cmd, subs]) =>\n ` ${cmd})\\n COMPREPLY=( $(compgen -W \"${subs.join(' ')}\" -- \"$cur\") )\\n return 0\\n ;;`\n )\n .join('\\n')\n\n return `# agentver bash completion\n_agentver() {\n local cur prev commands\n COMPREPLY=()\n cur=\"\\${COMP_WORDS[COMP_CWORD]}\"\n prev=\"\\${COMP_WORDS[COMP_CWORD-1]}\"\n commands=\"${TOP_LEVEL_COMMANDS.join(' ')}\"\n\n if [[ \"$COMP_CWORD\" -eq 1 ]]; then\n COMPREPLY=( $(compgen -W \"$commands\" -- \"$cur\") )\n return 0\n fi\n\n if [[ \"$cur\" == -* ]]; then\n COMPREPLY=( $(compgen -W \"${COMMON_FLAGS.join(' ')}\" -- \"$cur\") )\n return 0\n fi\n\n case \"$prev\" in\n${subcmdCases}\n esac\n\n return 0\n}\n\ncomplete -F _agentver agentver\n`\n}\n\nfunction generateZshScript(): string {\n const subcmdCases = Object.entries(SUBCOMMANDS)\n .map(\n ([cmd, subs]) =>\n ` ${cmd})\\n _values 'subcommand' ${subs.map((s) => `'${s}'`).join(' ')}\\n ;;`\n )\n .join('\\n')\n\n return `# agentver zsh completion\n_agentver() {\n local -a commands\n commands=(\n${TOP_LEVEL_COMMANDS.map((c) => ` '${c}'`).join('\\n')}\n )\n\n _arguments -C \\\n '--json[Output results as structured JSON]' \\\n '--global[Apply globally]' \\\n '--dry-run[Preview changes without applying]' \\\n '--help[Show help]' \\\n '1:command:->cmd' \\\n '*::arg:->args'\n\n case \"$state\" in\n cmd)\n _describe 'command' commands\n ;;\n args)\n case \"\\${words[1]}\" in\n${subcmdCases}\n esac\n ;;\n esac\n}\n\ncompdef _agentver agentver\n`\n}\n\nfunction generateFishScript(): string {\n const topLevelCompletions = TOP_LEVEL_COMMANDS.map(\n (cmd) => `complete -c agentver -n '__fish_use_subcommand' -a '${cmd}'`\n ).join('\\n')\n\n const subcmdCompletions = Object.entries(SUBCOMMANDS)\n .flatMap(([cmd, subs]) =>\n subs.map((sub) => `complete -c agentver -n '__fish_seen_subcommand_from ${cmd}' -a '${sub}'`)\n )\n .join('\\n')\n\n const flagCompletions = [\n \"complete -c agentver -l json -d 'Output results as structured JSON'\",\n \"complete -c agentver -l global -d 'Apply globally'\",\n \"complete -c agentver -l dry-run -d 'Preview changes without applying'\",\n \"complete -c agentver -l help -d 'Show help'\",\n ].join('\\n')\n\n return `# agentver fish completion\n${topLevelCompletions}\n${subcmdCompletions}\n${flagCompletions}\n`\n}\n\ntype Shell = 'bash' | 'zsh' | 'fish'\n\nconst SHELL_GENERATORS: Record<Shell, () => string> = {\n bash: generateBashScript,\n zsh: generateZshScript,\n fish: generateFishScript,\n}\n\nconst RC_PATHS: Record<Shell, string> = {\n bash: join(homedir(), '.bashrc'),\n zsh: join(homedir(), '.zshrc'),\n fish: join(homedir(), '.config', 'fish', 'config.fish'),\n}\n\nconst EVAL_LINES: Record<Shell, string> = {\n bash: 'eval \"$(agentver completion bash)\"',\n zsh: 'eval \"$(agentver completion zsh)\"',\n fish: 'agentver completion fish | source',\n}\n\nfunction installCompletion(shell: Shell): void {\n const rcPath = RC_PATHS[shell]\n const evalLine = EVAL_LINES[shell]\n\n if (existsSync(rcPath)) {\n const content = readFileSync(rcPath, 'utf-8')\n if (content.includes(evalLine)) {\n process.stdout.write(chalk.dim(`Completion already installed in ${rcPath}\\n`))\n return\n }\n }\n\n appendFileSync(rcPath, `\\n# agentver shell completion\\n${evalLine}\\n`)\n process.stdout.write(\n chalk.green(`Completion installed in ${rcPath}\\n`) +\n chalk.dim('Restart your shell or run: ') +\n chalk.cyan(`source ${rcPath}`) +\n '\\n'\n )\n}\n\nexport function registerCompletionCommand(program: Command): void {\n program\n .command('completion <shell>')\n .description('Generate shell completion scripts (bash, zsh, fish)')\n .option('--install', 'Install the completion script to your shell RC file')\n .action((shell: string, options: CompletionOptions) => {\n const jsonMode = isJSONMode()\n\n if (!['bash', 'zsh', 'fish'].includes(shell)) {\n if (jsonMode) {\n outputError('INVALID_SHELL', `Unsupported shell \"${shell}\". Supported: bash, zsh, fish`)\n process.exit(1)\n }\n process.stderr.write(\n chalk.red(`Unsupported shell \"${shell}\". Supported: bash, zsh, fish\\n`)\n )\n process.exit(1)\n }\n\n const validShell = shell as Shell\n const script = SHELL_GENERATORS[validShell]()\n\n if (options.install) {\n if (jsonMode) {\n installCompletion(validShell)\n outputSuccess({ shell: validShell, installed: true, rcPath: RC_PATHS[validShell] })\n return\n }\n installCompletion(validShell)\n return\n }\n\n if (jsonMode) {\n outputSuccess({ shell: validShell, script })\n return\n }\n\n process.stdout.write(script)\n })\n}\n","import chalk from 'chalk'\nimport type { Command } from 'commander'\nimport { isJSONMode, outputError, outputSuccess } from '../output.js'\nimport { type AgentverConfig, getConfigPath, readConfig, writeConfig } from '../registry/config.js'\n\nconst KNOWN_KEYS = ['platformUrl', 'defaultOrg', 'telemetry'] as const\ntype KnownKey = (typeof KNOWN_KEYS)[number]\n\nfunction isKnownKey(key: string): key is KnownKey {\n return (KNOWN_KEYS as readonly string[]).includes(key)\n}\n\nfunction formatValue(value: unknown): string {\n if (value === undefined || value === null) return ''\n if (typeof value === 'object') return JSON.stringify(value)\n return String(value)\n}\n\nfunction validateKey(key: string): key is KnownKey {\n if (!isKnownKey(key)) {\n if (isJSONMode()) {\n outputError('INVALID_KEY', `Unknown config key: ${key}. Valid keys: ${KNOWN_KEYS.join(', ')}`)\n } else {\n console.error(chalk.red(`Unknown config key: ${key}. Valid keys: ${KNOWN_KEYS.join(', ')}`))\n }\n return false\n }\n return true\n}\n\nfunction validateValue(key: KnownKey, value: string): { valid: boolean; parsed?: unknown } {\n switch (key) {\n case 'telemetry': {\n if (value !== 'true' && value !== 'false') {\n if (isJSONMode()) {\n outputError('INVALID_VALUE', 'telemetry must be true or false')\n } else {\n console.error(chalk.red('telemetry must be true or false'))\n }\n return { valid: false }\n }\n return { valid: true, parsed: value === 'true' }\n }\n case 'platformUrl': {\n if (!value.startsWith('https://')) {\n if (isJSONMode()) {\n outputError('INVALID_VALUE', 'platformUrl must start with https://')\n } else {\n console.error(chalk.red('platformUrl must start with https://'))\n }\n return { valid: false }\n }\n return { valid: true, parsed: value }\n }\n default:\n return { valid: true, parsed: value }\n }\n}\n\nexport function registerConfigCommand(program: Command): void {\n const configCmd = program.command('config').description('Manage CLI configuration')\n\n configCmd\n .command('list')\n .description('Show all config values')\n .option('--json', 'Output as JSON')\n .action(() => {\n const config = readConfig()\n const jsonMode = isJSONMode()\n\n if (jsonMode) {\n outputSuccess(config)\n return\n }\n\n const entries = Object.entries(config)\n\n if (entries.length === 0) {\n console.log(chalk.dim('No configuration set.'))\n return\n }\n\n console.log(chalk.bold('\\nConfiguration:\\n'))\n\n for (const [key, value] of entries) {\n console.log(` ${chalk.green(key)} = ${chalk.cyan(formatValue(value))}`)\n }\n\n console.log()\n })\n\n configCmd\n .command('get')\n .description('Get a config value')\n .argument('<key>', 'Config key to read')\n .option('--json', 'Output as JSON')\n .action((key: string) => {\n const jsonMode = isJSONMode()\n\n if (!validateKey(key)) {\n process.exit(1)\n }\n\n const config = readConfig()\n const value = config[key as KnownKey]\n\n if (jsonMode) {\n outputSuccess({ key, value: value ?? null })\n return\n }\n\n if (value === undefined) {\n process.exit(0)\n }\n\n console.log(formatValue(value))\n })\n\n configCmd\n .command('set')\n .description('Set a config value')\n .argument('<key>', 'Config key to set')\n .argument('<value>', 'Value to set')\n .option('--json', 'Output as JSON')\n .action((key: string, value: string) => {\n const jsonMode = isJSONMode()\n\n if (!validateKey(key)) {\n process.exit(1)\n }\n\n const validation = validateValue(key, value)\n\n if (!validation.valid) {\n process.exit(1)\n }\n\n const config = readConfig()\n const updated: AgentverConfig = { ...config, [key]: validation.parsed }\n writeConfig(updated)\n\n if (jsonMode) {\n outputSuccess({ key, value: validation.parsed })\n return\n }\n\n console.log(chalk.green(`Set ${key} = ${formatValue(validation.parsed)}`))\n })\n\n configCmd\n .command('unset')\n .description('Remove a config key')\n .argument('<key>', 'Config key to remove')\n .option('--json', 'Output as JSON')\n .action((key: string) => {\n const jsonMode = isJSONMode()\n\n if (!validateKey(key)) {\n process.exit(1)\n }\n\n const config = readConfig()\n delete config[key as KnownKey]\n writeConfig(config)\n\n if (jsonMode) {\n outputSuccess({ key, removed: true })\n return\n }\n\n console.log(chalk.green(`Removed ${key}`))\n })\n\n configCmd\n .command('path')\n .description('Print the config file path')\n .action(() => {\n console.log(getConfigPath())\n })\n}\n","import type { DiffResult } from '@agentver/shared'\nimport chalk from 'chalk'\nimport type { Command } from 'commander'\nimport { readFilesFromDirectory } from '../git/fetcher.js'\nimport { fetchFiles } from '../git/index.js'\nimport type { GitSource as CliGitSource, ResolvedRef } from '../git/types.js'\nimport { createSpinner, isJSONMode, outputError, outputSuccess } from '../output'\nimport { resolveReadPath } from '../storage/canonical.js'\nimport { readLockfile } from '../storage/lockfile.js'\nimport { readManifest } from '../storage/manifest.js'\n\nconst CONTEXT_LINES = 3\n\ntype DiffHunk = {\n oldStart: number\n oldCount: number\n newStart: number\n newCount: number\n lines: string[]\n}\n\ntype FileDiff = {\n path: string\n type: 'added' | 'removed' | 'modified'\n hunks: DiffHunk[]\n}\n\nfunction parseManifestUri(uri: string): CliGitSource | null {\n const parts = uri.split('/')\n if (parts.length < 3) return null\n\n return {\n host: parts[0] as CliGitSource['host'],\n owner: parts[1]!,\n repo: parts[2]!,\n path: parts.slice(3).join('/'),\n ref: 'HEAD',\n }\n}\n\nasync function readLocalFiles(\n projectRoot: string,\n packageName: string,\n agents: string[]\n): Promise<Array<{ path: string; content: string }>> {\n // Try canonical path first, fall back to agent-specific paths\n const readPath = resolveReadPath(projectRoot, packageName, agents)\n if (readPath) {\n const files = await readFilesFromDirectory(readPath)\n return files.map((f) => ({ path: f.path, content: f.content }))\n }\n\n return []\n}\n\nfunction computeHunks(oldLines: string[], newLines: string[]): DiffHunk[] {\n const lcs = computeLcs(oldLines, newLines)\n const changes = buildChangeList(oldLines, newLines, lcs)\n\n if (changes.length === 0) return []\n\n return groupIntoHunks(changes)\n}\n\nfunction computeLcs(a: string[], b: string[]): Array<[number, number]> {\n const m = a.length\n const n = b.length\n const dp: number[][] = Array.from({ length: m + 1 }, () => Array(n + 1).fill(0) as number[])\n\n for (let i = 1; i <= m; i++) {\n for (let j = 1; j <= n; j++) {\n if (a[i - 1] === b[j - 1]) {\n dp[i]![j] = dp[i - 1]![j - 1]! + 1\n } else {\n dp[i]![j] = Math.max(dp[i - 1]![j]!, dp[i]![j - 1]!)\n }\n }\n }\n\n const result: Array<[number, number]> = []\n let i = m\n let j = n\n while (i > 0 && j > 0) {\n if (a[i - 1] === b[j - 1]) {\n result.unshift([i - 1, j - 1])\n i--\n j--\n } else if (dp[i - 1]![j]! >= dp[i]![j - 1]!) {\n i--\n } else {\n j--\n }\n }\n\n return result\n}\n\ntype Change = {\n type: 'context' | 'add' | 'remove'\n oldIndex: number\n newIndex: number\n line: string\n}\n\nfunction buildChangeList(\n oldLines: string[],\n newLines: string[],\n lcs: Array<[number, number]>\n): Change[] {\n const changes: Change[] = []\n let oldIdx = 0\n let newIdx = 0\n\n for (const [lcsOld, lcsNew] of lcs) {\n while (oldIdx < lcsOld) {\n changes.push({ type: 'remove', oldIndex: oldIdx, newIndex: newIdx, line: oldLines[oldIdx]! })\n oldIdx++\n }\n while (newIdx < lcsNew) {\n changes.push({ type: 'add', oldIndex: oldIdx, newIndex: newIdx, line: newLines[newIdx]! })\n newIdx++\n }\n changes.push({ type: 'context', oldIndex: oldIdx, newIndex: newIdx, line: oldLines[oldIdx]! })\n oldIdx++\n newIdx++\n }\n\n while (oldIdx < oldLines.length) {\n changes.push({ type: 'remove', oldIndex: oldIdx, newIndex: newIdx, line: oldLines[oldIdx]! })\n oldIdx++\n }\n while (newIdx < newLines.length) {\n changes.push({ type: 'add', oldIndex: oldIdx, newIndex: newIdx, line: newLines[newIdx]! })\n newIdx++\n }\n\n return changes\n}\n\nfunction groupIntoHunks(changes: Change[]): DiffHunk[] {\n const diffIndices: number[] = []\n for (let i = 0; i < changes.length; i++) {\n if (changes[i]!.type !== 'context') {\n diffIndices.push(i)\n }\n }\n\n if (diffIndices.length === 0) return []\n\n const hunks: DiffHunk[] = []\n let hunkStart = 0\n let groupStart = diffIndices[0]!\n\n for (let d = 0; d < diffIndices.length; d++) {\n const nextDiffIdx = diffIndices[d + 1]\n const currentDiffIdx = diffIndices[d]!\n\n const gapToNext = nextDiffIdx !== undefined ? nextDiffIdx - currentDiffIdx - 1 : Infinity\n\n if (gapToNext > CONTEXT_LINES * 2) {\n const contextBefore = Math.max(0, groupStart - CONTEXT_LINES)\n const contextAfter = Math.min(changes.length - 1, currentDiffIdx + CONTEXT_LINES)\n\n const hunkChanges = changes.slice(contextBefore, contextAfter + 1)\n const hunk = buildHunk(hunkChanges, contextBefore, changes)\n hunks.push(hunk)\n\n hunkStart = d + 1\n groupStart = nextDiffIdx ?? groupStart\n }\n }\n\n if (hunkStart <= diffIndices.length - 1) {\n const lastDiffIdx = diffIndices[diffIndices.length - 1]!\n const contextBefore = Math.max(0, groupStart - CONTEXT_LINES)\n const contextAfter = Math.min(changes.length - 1, lastDiffIdx + CONTEXT_LINES)\n\n const hunkChanges = changes.slice(contextBefore, contextAfter + 1)\n const hunk = buildHunk(hunkChanges, contextBefore, changes)\n hunks.push(hunk)\n }\n\n return hunks\n}\n\nfunction buildHunk(hunkChanges: Change[], startIdx: number, allChanges: Change[]): DiffHunk {\n let oldStart = 1\n let newStart = 1\n\n const firstChange = hunkChanges[0] ?? allChanges[startIdx]\n if (firstChange) {\n oldStart = firstChange.oldIndex + 1\n newStart = firstChange.newIndex + 1\n }\n\n let oldCount = 0\n let newCount = 0\n const lines: string[] = []\n\n for (const change of hunkChanges) {\n switch (change.type) {\n case 'context':\n lines.push(` ${change.line}`)\n oldCount++\n newCount++\n break\n case 'remove':\n lines.push(`-${change.line}`)\n oldCount++\n break\n case 'add':\n lines.push(`+${change.line}`)\n newCount++\n break\n }\n }\n\n return { oldStart, oldCount, newStart, newCount, lines }\n}\n\nfunction diffFiles(\n upstreamFiles: Map<string, string>,\n localFiles: Map<string, string>\n): FileDiff[] {\n const diffs: FileDiff[] = []\n const allPaths = new Set([...upstreamFiles.keys(), ...localFiles.keys()])\n\n for (const path of [...allPaths].sort()) {\n const upstreamContent = upstreamFiles.get(path)\n const localContent = localFiles.get(path)\n\n if (upstreamContent === undefined && localContent !== undefined) {\n const newLines = localContent.split('\\n')\n const hunks = computeHunks([], newLines)\n if (hunks.length > 0) {\n diffs.push({ path, type: 'added', hunks })\n }\n continue\n }\n\n if (upstreamContent !== undefined && localContent === undefined) {\n const oldLines = upstreamContent.split('\\n')\n const hunks = computeHunks(oldLines, [])\n if (hunks.length > 0) {\n diffs.push({ path, type: 'removed', hunks })\n }\n continue\n }\n\n if (\n upstreamContent !== undefined &&\n localContent !== undefined &&\n upstreamContent !== localContent\n ) {\n const oldLines = upstreamContent.split('\\n')\n const newLines = localContent.split('\\n')\n const hunks = computeHunks(oldLines, newLines)\n if (hunks.length > 0) {\n diffs.push({ path, type: 'modified', hunks })\n }\n }\n }\n\n return diffs\n}\n\nfunction formatDiff(diffs: FileDiff[]): string {\n const output: string[] = []\n\n for (const diff of diffs) {\n output.push(chalk.bold(`--- a/${diff.path}`))\n output.push(chalk.bold(`+++ b/${diff.path}`))\n\n for (const hunk of diff.hunks) {\n output.push(\n chalk.cyan(`@@ -${hunk.oldStart},${hunk.oldCount} +${hunk.newStart},${hunk.newCount} @@`)\n )\n\n for (const line of hunk.lines) {\n if (line.startsWith('+')) {\n output.push(chalk.green(line))\n } else if (line.startsWith('-')) {\n output.push(chalk.red(line))\n } else {\n output.push(line)\n }\n }\n }\n\n output.push('')\n }\n\n return output.join('\\n')\n}\n\nexport function registerDiffCommand(program: Command): void {\n program\n .command('diff <name>')\n .description('Show diff between local and upstream version of a skill')\n .action(async (name: string) => {\n const jsonMode = isJSONMode()\n const projectRoot = process.cwd()\n const manifest = readManifest(projectRoot)\n const lockfile = readLockfile(projectRoot)\n\n const manifestEntry = manifest.packages[name]\n if (!manifestEntry) {\n if (jsonMode) {\n outputError('NOT_INSTALLED', `Package \"${name}\" is not installed.`)\n process.exit(1)\n }\n console.error(chalk.red(`Package \"${name}\" is not installed.`))\n process.exit(1)\n }\n\n const { source, agents } = manifestEntry\n\n if (source.type === 'well-known') {\n if (jsonMode) {\n outputError('WELL_KNOWN_UNSUPPORTED', `Diff is not yet supported for well-known sources.`)\n process.exit(1)\n }\n console.error(\n chalk.red(\n `Package \"${name}\" was installed from a well-known source (${source.hostname}).`\n )\n )\n console.error(chalk.dim('Diff is not yet supported for well-known sources.'))\n process.exit(1)\n }\n\n if (source.uri === 'unknown') {\n if (jsonMode) {\n outputError(\n 'UNKNOWN_SOURCE',\n `Package \"${name}\" was migrated from v1 and has no known Git source.`\n )\n process.exit(1)\n }\n console.error(\n chalk.red(`Package \"${name}\" was migrated from v1 and has no known Git source.`)\n )\n console.error(\n chalk.dim('Reinstall it using a Git source URL to enable diff:\\n') +\n chalk.dim(` agentver remove ${name}\\n`) +\n chalk.dim(` agentver install <git-source>`)\n )\n process.exit(1)\n }\n\n const spinner = createSpinner('Fetching upstream files...').start()\n\n try {\n const cliSource = parseManifestUri(source.uri)\n if (!cliSource) {\n const message = `Could not parse source URI: ${source.uri}`\n if (jsonMode) {\n outputError('INVALID_SOURCE_URI', message)\n process.exit(1)\n }\n spinner.fail(message)\n process.exit(1)\n }\n\n cliSource.ref = source.ref\n cliSource.commit = source.commit\n const lockfileEntry = lockfile.packages[name]\n const lockfileSource = lockfileEntry?.source\n const commitSha =\n (lockfileSource?.type === 'git' ? lockfileSource.commit : undefined) ?? source.commit\n\n const resolved: ResolvedRef = {\n source: { ...cliSource, path: source.path },\n commitSha,\n }\n\n const fetchResult = await fetchFiles(resolved)\n spinner.text = 'Comparing files...'\n\n const localFiles = await readLocalFiles(projectRoot, name, agents)\n\n const upstreamMap = new Map<string, string>()\n for (const file of fetchResult.files) {\n upstreamMap.set(file.path, file.content)\n }\n\n const localMap = new Map<string, string>()\n for (const file of localFiles) {\n localMap.set(file.path, file.content)\n }\n\n const diffs = diffFiles(upstreamMap, localMap)\n spinner.stop()\n\n if (jsonMode) {\n const diffResult: DiffResult = {\n name,\n hunks: diffs.flatMap((d) =>\n d.hunks.map((h) => ({\n file: d.path,\n additions: h.lines.filter((l) => l.startsWith('+')).length,\n deletions: h.lines.filter((l) => l.startsWith('-')).length,\n content: h.lines.join('\\n'),\n }))\n ),\n }\n outputSuccess(diffResult)\n return\n }\n\n if (diffs.length === 0) {\n console.log(chalk.green('No differences found.'))\n return\n }\n\n console.log(formatDiff(diffs))\n } catch (error) {\n const message = `Failed to generate diff: ${error instanceof Error ? error.message : String(error)}`\n if (jsonMode) {\n outputError('DIFF_FAILED', message)\n process.exit(1)\n }\n spinner.fail(message)\n process.exit(1)\n }\n })\n}\n","import { AgentverError, createLogger } from '@agentver/shared'\nimport { buildRepoUrl, execGit } from './fetcher.js'\nimport type { GitHost, GitSource, ResolvedRef } from './types.js'\n\nconst logger = createLogger('git:resolver')\n\nconst KNOWN_HOSTS: GitHost[] = ['github.com', 'gitlab.com', 'bitbucket.org']\nconst RESOLVE_TIMEOUT_MS = 15_000\n\nexport function parseGitSource(source: string): GitSource {\n let cleaned = source.trim()\n\n if (cleaned.startsWith('https://')) {\n cleaned = cleaned.slice(8)\n }\n\n if (cleaned.startsWith('http://')) {\n cleaned = cleaned.slice(7)\n }\n\n // Extract commit SHA if specified with #\n let commit: string | undefined\n const hashIndex = cleaned.indexOf('#')\n if (hashIndex !== -1) {\n commit = cleaned.slice(hashIndex + 1)\n cleaned = cleaned.slice(0, hashIndex)\n if (!commit) {\n throw new AgentverError('VALIDATION_ERROR', 'Empty commit SHA after # separator')\n }\n }\n\n // Extract ref if specified with @\n let ref = 'HEAD'\n const atIndex = cleaned.indexOf('@')\n if (atIndex !== -1) {\n ref = cleaned.slice(atIndex + 1)\n cleaned = cleaned.slice(0, atIndex)\n if (!ref) {\n throw new AgentverError('VALIDATION_ERROR', 'Empty ref after @ separator')\n }\n }\n\n // Cannot have both # and @\n if (commit && ref !== 'HEAD') {\n throw new AgentverError(\n 'VALIDATION_ERROR',\n 'Cannot specify both a commit SHA (#) and a ref (@) — use one or the other'\n )\n }\n\n const segments = cleaned.split('/').filter(Boolean)\n\n if (segments.length < 3) {\n throw new AgentverError(\n 'VALIDATION_ERROR',\n `Invalid git source \"${source}\" — expected format: host/owner/repo[/path][@ref|#commit]`\n )\n }\n\n const hostRaw = segments[0]!\n const owner = segments[1]!\n const repo = segments[2]!\n const pathParts = segments.slice(3)\n const host: GitHost = KNOWN_HOSTS.includes(hostRaw as GitHost) ? (hostRaw as GitHost) : 'generic'\n\n return {\n host,\n owner,\n repo,\n path: pathParts.join('/'),\n ref: commit ? 'HEAD' : ref,\n commit,\n }\n}\n\nexport async function resolveRef(source: GitSource): Promise<ResolvedRef> {\n if (source.commit) {\n return { source, commitSha: source.commit }\n }\n\n logger.debug(`Resolving ref \"${source.ref}\" for ${source.host}/${source.owner}/${source.repo}`)\n\n if (source.host === 'github.com') {\n return resolveGitHubRef(source)\n }\n\n if (source.host === 'gitlab.com') {\n return resolveGitLabRef(source)\n }\n\n return resolveViaGitLsRemote(source)\n}\n\nasync function resolveGitHubRef(source: GitSource): Promise<ResolvedRef> {\n const url = `https://api.github.com/repos/${source.owner}/${source.repo}/commits/${encodeURIComponent(source.ref)}`\n\n const headers: Record<string, string> = {\n Accept: 'application/vnd.github.v3+json',\n 'User-Agent': 'agentver-cli',\n }\n\n const token = process.env.GITHUB_TOKEN\n if (token) {\n headers.Authorization = `Bearer ${token}`\n }\n\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), RESOLVE_TIMEOUT_MS)\n\n try {\n const response = await fetch(url, { headers, signal: controller.signal })\n clearTimeout(timeoutId)\n\n if (response.status === 403) {\n const remaining = response.headers.get('X-RateLimit-Remaining')\n if (remaining === '0') {\n const resetEpoch = response.headers.get('X-RateLimit-Reset')\n const resetAt = resetEpoch ? new Date(Number(resetEpoch) * 1000).toISOString() : 'unknown'\n throw new AgentverError(\n 'RATE_LIMITED',\n `GitHub API rate limit exceeded. Resets at ${resetAt}. Set GITHUB_TOKEN to increase your limit.`\n )\n }\n }\n\n if (response.status === 404 || response.status === 422) {\n throw new AgentverError(\n 'NOT_FOUND',\n `Could not resolve ref \"${source.ref}\" for ${source.owner}/${source.repo} on GitHub`\n )\n }\n\n if (!response.ok) {\n throw new AgentverError(\n 'INTERNAL_ERROR',\n `GitHub API returned ${response.status} whilst resolving ref \"${source.ref}\"`\n )\n }\n\n const data = (await response.json()) as { sha: string }\n return { source, commitSha: data.sha }\n } catch (error) {\n clearTimeout(timeoutId)\n\n if (error instanceof AgentverError) throw error\n\n if (error instanceof DOMException && error.name === 'AbortError') {\n throw new AgentverError(\n 'INTERNAL_ERROR',\n `Timed out resolving ref \"${source.ref}\" from GitHub API`\n )\n }\n\n logger.warn(`GitHub API failed, falling back to git ls-remote: ${String(error)}`)\n return resolveViaGitLsRemote(source)\n }\n}\n\nasync function resolveGitLabRef(source: GitSource): Promise<ResolvedRef> {\n const projectId = encodeURIComponent(`${source.owner}/${source.repo}`)\n const url = `https://gitlab.com/api/v4/projects/${projectId}/repository/commits/${encodeURIComponent(source.ref)}`\n\n const headers: Record<string, string> = {\n 'User-Agent': 'agentver-cli',\n }\n\n const token = process.env.GITLAB_TOKEN\n if (token) {\n headers['PRIVATE-TOKEN'] = token\n }\n\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), RESOLVE_TIMEOUT_MS)\n\n try {\n const response = await fetch(url, { headers, signal: controller.signal })\n clearTimeout(timeoutId)\n\n if (response.status === 404) {\n throw new AgentverError(\n 'NOT_FOUND',\n `Could not resolve ref \"${source.ref}\" for ${source.owner}/${source.repo} on GitLab`\n )\n }\n\n if (!response.ok) {\n throw new AgentverError(\n 'INTERNAL_ERROR',\n `GitLab API returned ${response.status} whilst resolving ref \"${source.ref}\"`\n )\n }\n\n const data = (await response.json()) as { id: string }\n return { source, commitSha: data.id }\n } catch (error) {\n clearTimeout(timeoutId)\n\n if (error instanceof AgentverError) throw error\n\n if (error instanceof DOMException && error.name === 'AbortError') {\n throw new AgentverError(\n 'INTERNAL_ERROR',\n `Timed out resolving ref \"${source.ref}\" from GitLab API`\n )\n }\n\n logger.warn(`GitLab API failed, falling back to git ls-remote: ${String(error)}`)\n return resolveViaGitLsRemote(source)\n }\n}\n\nasync function resolveViaGitLsRemote(source: GitSource): Promise<ResolvedRef> {\n const repoUrl = buildRepoUrl(source)\n\n try {\n const output = await execGit(['ls-remote', repoUrl, source.ref])\n const lines = output.trim().split('\\n')\n\n for (const line of lines) {\n const [sha, _refName] = line.split('\\t')\n if (sha && sha.length >= 40) {\n return { source, commitSha: sha }\n }\n }\n\n // If ref is HEAD and we got nothing, try without ref argument\n if (source.ref === 'HEAD') {\n const headOutput = await execGit(['ls-remote', repoUrl, 'HEAD'])\n const headLine = headOutput.trim().split('\\n')[0]\n if (headLine) {\n const [sha] = headLine.split('\\t')\n if (sha && sha.length >= 40) {\n return { source, commitSha: sha }\n }\n }\n }\n\n throw new AgentverError(\n 'NOT_FOUND',\n `Could not resolve ref \"${source.ref}\" for ${source.owner}/${source.repo} via git ls-remote`\n )\n } catch (error) {\n if (error instanceof AgentverError) throw error\n\n throw new AgentverError(\n 'NOT_FOUND',\n `Failed to resolve ref \"${source.ref}\" for ${source.owner}/${source.repo}: ${String(error)}`\n )\n }\n}\n","import { execSync } from 'node:child_process'\nimport { existsSync, lstatSync, readFileSync, readlinkSync } from 'node:fs'\nimport { dirname, join } from 'node:path'\nimport { type AgentId, getSkillPlacementPath } from '@agentver/agent-definitions'\nimport {\n type DoctorCheck,\n type DoctorResult,\n manifestAnySchema,\n lockfileAnySchema,\n} from '@agentver/shared'\nimport chalk from 'chalk'\nimport type { Command } from 'commander'\nimport { isJSONMode, outputSuccess } from '../output'\nimport { getCredentials } from '../registry/auth.js'\nimport { getPlatformUrl } from '../registry/config.js'\nimport { getCanonicalSkillPath } from '../storage/canonical.js'\nimport { readLockfile } from '../storage/lockfile.js'\nimport { readManifest } from '../storage/manifest.js'\n\ntype CheckStatus = DoctorCheck['status']\n\nconst MANIFEST_DIR = '.agentver'\nconst MANIFEST_FILE = 'manifest.json'\nconst LOCKFILE_FILE = 'lockfile.json'\nconst NETWORK_TIMEOUT_MS = 3000\nconst MIN_NODE_VERSION = 20\n\nfunction check(name: string, status: CheckStatus, message: string): DoctorCheck {\n return { name, status, message }\n}\n\nfunction checkManifestIntegrity(projectRoot: string): DoctorCheck {\n const manifestPath = join(projectRoot, MANIFEST_DIR, MANIFEST_FILE)\n\n if (!existsSync(manifestPath)) {\n return check('manifest-integrity', 'warn', 'Manifest file not found (no skills installed yet)')\n }\n\n let raw: string\n try {\n raw = readFileSync(manifestPath, 'utf-8')\n } catch {\n return check('manifest-integrity', 'fail', 'Cannot read manifest file')\n }\n\n let parsed: unknown\n try {\n parsed = JSON.parse(raw)\n } catch {\n return check('manifest-integrity', 'fail', 'Manifest contains invalid JSON')\n }\n\n const result = manifestAnySchema.safeParse(parsed)\n if (!result.success) {\n return check('manifest-integrity', 'fail', 'Manifest does not match expected schema')\n }\n\n return check('manifest-integrity', 'pass', 'Manifest is valid')\n}\n\nfunction checkLockfileIntegrity(projectRoot: string): DoctorCheck {\n const lockfilePath = join(projectRoot, MANIFEST_DIR, LOCKFILE_FILE)\n\n if (!existsSync(lockfilePath)) {\n return check('lockfile-integrity', 'warn', 'Lockfile not found (no skills installed yet)')\n }\n\n let raw: string\n try {\n raw = readFileSync(lockfilePath, 'utf-8')\n } catch {\n return check('lockfile-integrity', 'fail', 'Cannot read lockfile')\n }\n\n let parsed: unknown\n try {\n parsed = JSON.parse(raw)\n } catch {\n return check('lockfile-integrity', 'fail', 'Lockfile contains invalid JSON')\n }\n\n const result = lockfileAnySchema.safeParse(parsed)\n if (!result.success) {\n return check('lockfile-integrity', 'fail', 'Lockfile does not match expected schema')\n }\n\n return check('lockfile-integrity', 'pass', 'Lockfile is valid')\n}\n\nfunction checkManifestLockfileSync(projectRoot: string): DoctorCheck {\n const manifest = readManifest(projectRoot)\n const lockfile = readLockfile(projectRoot)\n\n const manifestNames = new Set(Object.keys(manifest.packages))\n const lockfileNames = new Set(Object.keys(lockfile.packages))\n\n if (manifestNames.size === 0 && lockfileNames.size === 0) {\n return check('manifest-lockfile-sync', 'pass', 'Manifest and lockfile are in sync (both empty)')\n }\n\n const inManifestOnly: string[] = []\n const inLockfileOnly: string[] = []\n\n for (const name of manifestNames) {\n if (!lockfileNames.has(name)) {\n inManifestOnly.push(name)\n }\n }\n\n for (const name of lockfileNames) {\n if (!manifestNames.has(name)) {\n inLockfileOnly.push(name)\n }\n }\n\n if (inManifestOnly.length > 0 || inLockfileOnly.length > 0) {\n const parts: string[] = []\n if (inManifestOnly.length > 0) {\n parts.push(`in manifest but not lockfile: ${inManifestOnly.join(', ')}`)\n }\n if (inLockfileOnly.length > 0) {\n parts.push(`in lockfile but not manifest: ${inLockfileOnly.join(', ')}`)\n }\n return check('manifest-lockfile-sync', 'fail', `Out of sync — ${parts.join('; ')}`)\n }\n\n return check('manifest-lockfile-sync', 'pass', 'Manifest and lockfile are in sync')\n}\n\nfunction checkSkillFilesExist(projectRoot: string): DoctorCheck {\n const manifest = readManifest(projectRoot)\n const entries = Object.keys(manifest.packages)\n\n if (entries.length === 0) {\n return check('skill-files-exist', 'pass', 'No packages installed')\n }\n\n const missing: string[] = []\n\n for (const name of entries) {\n const canonicalPath = getCanonicalSkillPath(projectRoot, name, 'project')\n if (!existsSync(canonicalPath) || !lstatSync(canonicalPath).isDirectory()) {\n missing.push(name)\n }\n }\n\n if (missing.length > 0) {\n return check('skill-files-exist', 'fail', `Missing skill directories: ${missing.join(', ')}`)\n }\n\n return check('skill-files-exist', 'pass', `All ${entries.length} skill directories present`)\n}\n\nfunction checkSymlinksValid(projectRoot: string): DoctorCheck {\n const manifest = readManifest(projectRoot)\n const entries = Object.entries(manifest.packages)\n\n if (entries.length === 0) {\n return check('symlinks-valid', 'pass', 'No packages installed')\n }\n\n const broken: string[] = []\n\n for (const [name, pkg] of entries) {\n for (const agentId of pkg.agents) {\n const placementPath = getSkillPlacementPath(agentId as AgentId, name, 'project')\n if (!placementPath) continue\n\n const agentSkillPath = join(projectRoot, placementPath)\n\n if (!existsSync(agentSkillPath)) {\n broken.push(`${name}/${agentId}`)\n continue\n }\n\n try {\n const stats = lstatSync(agentSkillPath)\n if (stats.isSymbolicLink()) {\n const target = readlinkSync(agentSkillPath)\n const resolvedTarget = join(dirname(agentSkillPath), target)\n if (!existsSync(resolvedTarget)) {\n broken.push(`${name}/${agentId} (broken symlink)`)\n }\n }\n } catch {\n broken.push(`${name}/${agentId} (unreadable)`)\n }\n }\n }\n\n if (broken.length > 0) {\n return check('symlinks-valid', 'fail', `Invalid symlinks: ${broken.join(', ')}`)\n }\n\n const totalLinks = entries.reduce((sum, [, pkg]) => sum + pkg.agents.length, 0)\n return check('symlinks-valid', 'pass', `All ${totalLinks} symlinks valid`)\n}\n\nasync function checkAuthentication(): Promise<DoctorCheck> {\n const creds = await getCredentials()\n const hasCredentials = !!(creds?.token ?? creds?.apiKey)\n\n if (!hasCredentials) {\n return check('authentication', 'warn', 'No credentials configured (run agentver login)')\n }\n\n const platformUrl = getPlatformUrl()\n if (!platformUrl) {\n return check('authentication', 'warn', 'Credentials present but no platform URL configured')\n }\n\n try {\n const controller = new AbortController()\n const timeout = setTimeout(() => controller.abort(), NETWORK_TIMEOUT_MS)\n\n const response = await fetch(`${platformUrl}/health`, {\n signal: controller.signal,\n })\n\n clearTimeout(timeout)\n\n if (response.ok) {\n return check('authentication', 'pass', 'Authenticated and platform reachable')\n }\n\n return check(\n 'authentication',\n 'warn',\n `Platform returned status ${String(response.status)} (offline mode available)`\n )\n } catch {\n return check('authentication', 'warn', 'Platform unreachable (offline mode available)')\n }\n}\n\nfunction checkGitAvailable(): DoctorCheck {\n try {\n execSync('git --version', { stdio: 'pipe' })\n return check('git-available', 'pass', 'Git is available')\n } catch {\n return check('git-available', 'fail', 'Git is not installed or not on PATH')\n }\n}\n\nfunction checkNodeVersion(): DoctorCheck {\n const major = parseInt(process.versions.node.split('.')[0] ?? '0', 10)\n\n if (major >= MIN_NODE_VERSION) {\n return check(\n 'node-version',\n 'pass',\n `Node ${process.versions.node} (>= ${String(MIN_NODE_VERSION)})`\n )\n }\n\n return check(\n 'node-version',\n 'fail',\n `Node ${process.versions.node} is below minimum ${String(MIN_NODE_VERSION)}`\n )\n}\n\nfunction formatCheck(result: DoctorCheck): string {\n switch (result.status) {\n case 'pass':\n return ` ${chalk.green('✓')} ${result.message}`\n case 'fail':\n return ` ${chalk.red('✗')} ${result.message}`\n case 'warn':\n return ` ${chalk.yellow('⚠')} ${result.message}`\n }\n}\n\nexport function registerDoctorCommand(program: Command): void {\n program\n .command('doctor')\n .description('Run health checks to diagnose common issues')\n .option('--json', 'Output as JSON')\n .action(async (options: { json?: boolean }) => {\n const jsonMode = isJSONMode() || options.json === true\n const projectRoot = process.cwd()\n\n const checks: DoctorCheck[] = []\n\n checks.push(checkManifestIntegrity(projectRoot))\n checks.push(checkLockfileIntegrity(projectRoot))\n checks.push(checkManifestLockfileSync(projectRoot))\n checks.push(checkSkillFilesExist(projectRoot))\n checks.push(checkSymlinksValid(projectRoot))\n checks.push(await checkAuthentication())\n checks.push(checkGitAvailable())\n checks.push(checkNodeVersion())\n\n const passed = checks.filter((c) => c.status === 'pass').length\n const failed = checks.filter((c) => c.status === 'fail').length\n const warnings = checks.filter((c) => c.status === 'warn').length\n\n if (jsonMode) {\n const result: DoctorResult = { checks, passed, failed, warnings }\n outputSuccess(result)\n process.exit(failed > 0 ? 1 : 0)\n return\n }\n\n console.log(chalk.bold('\\nHealth checks:\\n'))\n\n for (const result of checks) {\n console.log(formatCheck(result))\n }\n\n console.log()\n console.log(\n chalk.dim(\n `${chalk.green(String(passed))} passed, ${chalk.red(String(failed))} failed, ${chalk.yellow(String(warnings))} warnings`\n )\n )\n console.log()\n\n process.exit(failed > 0 ? 1 : 0)\n })\n}\n","import { existsSync, readFileSync } from 'node:fs'\nimport { basename, join } from 'node:path'\nimport chalk from 'chalk'\nimport type { Command } from 'commander'\nimport ora from 'ora'\nimport { platformFetch } from '../registry/platform.js'\nimport { readLockfile, writeLockfile } from '../storage/lockfile.js'\nimport { readManifest } from '../storage/manifest.js'\n\ntype DraftInfo = {\n name: string\n branchName: string\n latestCommitId: string\n latestMessage: string\n}\n\ntype DraftCreateResponse = {\n name: string\n branchName: string\n}\n\ntype DraftActionResponse = {\n commitSha?: string\n}\n\ntype DraftListOptions = {\n json?: boolean\n}\n\n/**\n * Resolve the skill name and namespace from the current directory or manifest.\n */\nfunction resolveSkillIdentity(): { org: string; name: string } | null {\n const cwd = process.cwd()\n const skillMdPath = join(cwd, 'SKILL.md')\n\n let skillName: string | null = null\n\n if (existsSync(skillMdPath)) {\n const content = readFileSync(skillMdPath, 'utf-8')\n const nameMatch = content.match(/^name:\\s*(.+)$/m)\n skillName = nameMatch?.[1]?.trim() ?? basename(cwd)\n }\n\n if (!skillName) {\n skillName = basename(cwd)\n }\n\n const manifest = readManifest(cwd)\n const entry = manifest.packages[skillName]\n\n if (entry?.source.type === 'git') {\n const parts = entry.source.uri.split('/')\n const org = parts.length >= 2 ? parts[parts.length - 2] : parts[0]\n if (org) {\n return { org, name: skillName }\n }\n }\n\n // Fallback: try directory structure\n const pathParts = cwd.split('/')\n const skillsIdx = pathParts.lastIndexOf('skills')\n if (skillsIdx >= 0 && pathParts.length > skillsIdx + 2) {\n return { org: pathParts[skillsIdx + 1]!, name: skillName }\n }\n\n return null\n}\n\nexport function registerDraftCommand(program: Command): void {\n const draft = program.command('draft').description('Manage skill drafts (branches)')\n\n // --- draft create <name> ---\n draft\n .command('create <name>')\n .description('Create a draft branch for the current skill')\n .option('--json', 'Output as JSON')\n .action(async (name: string, options: DraftListOptions) => {\n const identity = resolveSkillIdentity()\n if (!identity) {\n process.stderr.write(\n chalk.red('Could not determine skill identity. Run this from a skill directory.\\n')\n )\n process.exit(1)\n }\n\n const spinner = ora(`Creating draft \"${name}\"...`).start()\n\n try {\n const result = await platformFetch<DraftCreateResponse>(\n `/skills/@${identity.org}/${identity.name}/drafts`,\n {\n method: 'POST',\n body: { name },\n }\n )\n\n if (options.json) {\n spinner.stop()\n console.log(JSON.stringify(result, null, 2))\n } else {\n spinner.succeed(\n `Draft ${chalk.green(result.name)} created on branch ${chalk.cyan(result.branchName)}`\n )\n }\n } catch (error) {\n spinner.fail(\n `Failed to create draft: ${error instanceof Error ? error.message : String(error)}`\n )\n process.exit(1)\n }\n })\n\n // --- draft list ---\n draft\n .command('list')\n .description('List open drafts for the current skill')\n .option('--json', 'Output as JSON')\n .action(async (options: DraftListOptions) => {\n const identity = resolveSkillIdentity()\n if (!identity) {\n process.stderr.write(\n chalk.red('Could not determine skill identity. Run this from a skill directory.\\n')\n )\n process.exit(1)\n }\n\n const spinner = ora('Fetching drafts...').start()\n\n try {\n const drafts = await platformFetch<DraftInfo[]>(\n `/skills/@${identity.org}/${identity.name}/drafts`\n )\n\n spinner.stop()\n\n if (options.json) {\n console.log(JSON.stringify({ drafts }, null, 2))\n return\n }\n\n if (drafts.length === 0) {\n process.stdout.write(chalk.dim('No open drafts.\\n'))\n return\n }\n\n process.stdout.write(chalk.bold(`\\nDrafts for @${identity.org}/${identity.name}:\\n\\n`))\n\n for (const d of drafts) {\n process.stdout.write(\n ` ${chalk.green(d.name)} ${chalk.dim(`(${d.latestCommitId.slice(0, 7)})`)} ${chalk.dim(d.latestMessage)}\\n`\n )\n }\n\n process.stdout.write('\\n')\n } catch (error) {\n spinner.fail(\n `Failed to list drafts: ${error instanceof Error ? error.message : String(error)}`\n )\n process.exit(1)\n }\n })\n\n // --- draft switch <name> ---\n draft\n .command('switch <name>')\n .description('Switch to a draft branch (updates lockfile ref)')\n .option('--json', 'Output as JSON')\n .action(async (name: string, options: DraftListOptions) => {\n const identity = resolveSkillIdentity()\n if (!identity) {\n process.stderr.write(\n chalk.red('Could not determine skill identity. Run this from a skill directory.\\n')\n )\n process.exit(1)\n }\n\n const projectRoot = process.cwd()\n const lockfile = readLockfile(projectRoot)\n const lockEntry = lockfile.packages[identity.name]\n\n if (!lockEntry) {\n process.stderr.write(chalk.red(`Skill \"${identity.name}\" not found in lockfile.\\n`))\n process.exit(1)\n }\n\n if (lockEntry.source.type === 'git') {\n lockEntry.source.ref = `draft/${identity.name}/${name}`\n writeLockfile(projectRoot, lockfile)\n }\n\n if (options.json) {\n console.log(\n JSON.stringify(\n {\n skill: `@${identity.org}/${identity.name}`,\n draft: name,\n ref: `draft/${identity.name}/${name}`,\n },\n null,\n 2\n )\n )\n } else {\n process.stdout.write(\n `Switched to draft ${chalk.green(name)} ${chalk.dim(`(ref: draft/${identity.name}/${name})`)}\\n`\n )\n }\n })\n\n // --- draft publish ---\n draft\n .command('publish')\n .description('Merge current draft to main')\n .option('--json', 'Output as JSON')\n .action(async (options: DraftListOptions) => {\n const identity = resolveSkillIdentity()\n if (!identity) {\n process.stderr.write(\n chalk.red('Could not determine skill identity. Run this from a skill directory.\\n')\n )\n process.exit(1)\n }\n\n // Determine current draft from lockfile ref\n const projectRoot = process.cwd()\n const lockfile = readLockfile(projectRoot)\n const lockEntry = lockfile.packages[identity.name]\n\n if (!lockEntry || lockEntry.source.type !== 'git') {\n process.stderr.write(chalk.red('Skill not found in lockfile.\\n'))\n process.exit(1)\n }\n\n const currentRef = lockEntry.source.ref\n if (!currentRef.startsWith('draft/')) {\n process.stderr.write(chalk.red(`Not on a draft branch. Current ref: ${currentRef}\\n`))\n process.exit(1)\n }\n\n const spinner = ora('Merging draft to main...').start()\n\n try {\n const result = await platformFetch<DraftActionResponse>(\n `/skills/@${identity.org}/${identity.name}/drafts`,\n {\n method: 'POST',\n body: { action: 'merge', branchName: currentRef },\n }\n )\n\n // Update lockfile back to main\n lockEntry.source.ref = 'main'\n if (result.commitSha) {\n lockEntry.source.commit = result.commitSha\n }\n writeLockfile(projectRoot, lockfile)\n\n if (options.json) {\n spinner.stop()\n console.log(\n JSON.stringify(\n {\n merged: true,\n commitSha: result.commitSha,\n ref: 'main',\n },\n null,\n 2\n )\n )\n } else {\n spinner.succeed(\n `Draft merged to main ${result.commitSha ? chalk.dim(`(${result.commitSha.slice(0, 7)})`) : ''}`\n )\n }\n } catch (error) {\n spinner.fail(\n `Failed to merge draft: ${error instanceof Error ? error.message : String(error)}`\n )\n process.exit(1)\n }\n })\n\n // --- draft discard ---\n draft\n .command('discard')\n .description('Delete the current draft branch')\n .option('--json', 'Output as JSON')\n .action(async (options: DraftListOptions) => {\n const identity = resolveSkillIdentity()\n if (!identity) {\n process.stderr.write(\n chalk.red('Could not determine skill identity. Run this from a skill directory.\\n')\n )\n process.exit(1)\n }\n\n const projectRoot = process.cwd()\n const lockfile = readLockfile(projectRoot)\n const lockEntry = lockfile.packages[identity.name]\n\n if (!lockEntry || lockEntry.source.type !== 'git') {\n process.stderr.write(chalk.red('Skill not found in lockfile.\\n'))\n process.exit(1)\n }\n\n const currentRef = lockEntry.source.ref\n if (!currentRef.startsWith('draft/')) {\n process.stderr.write(chalk.red(`Not on a draft branch. Current ref: ${currentRef}\\n`))\n process.exit(1)\n }\n\n const spinner = ora('Discarding draft...').start()\n\n try {\n await platformFetch<DraftActionResponse>(\n `/skills/@${identity.org}/${identity.name}/drafts`,\n {\n method: 'POST',\n body: { action: 'delete', branchName: currentRef },\n }\n )\n\n // Reset lockfile ref to main\n lockEntry.source.ref = 'main'\n writeLockfile(projectRoot, lockfile)\n\n if (options.json) {\n spinner.stop()\n console.log(\n JSON.stringify(\n {\n discarded: true,\n previousRef: currentRef,\n ref: 'main',\n },\n null,\n 2\n )\n )\n } else {\n spinner.succeed(`Draft discarded. Switched back to ${chalk.cyan('main')}.`)\n }\n } catch (error) {\n spinner.fail(\n `Failed to discard draft: ${error instanceof Error ? error.message : String(error)}`\n )\n process.exit(1)\n }\n })\n}\n","const MAX_RETRY_ATTEMPTS = 3\nconst RETRY_BASE_DELAY_MS = 1_000\n\ntype RequestConfig = {\n url: string\n method?: string\n headers: Record<string, string>\n body?: string\n}\n\nexport type RetryOptions = {\n label: string\n timeoutMs: number\n buildRequest: () => RequestConfig\n onAuthExpired: () => never\n}\n\nexport class RequestTimeoutError extends Error {\n constructor(label: string) {\n super(`${label} request timed out. The service may be experiencing issues.`)\n this.name = 'RequestTimeoutError'\n }\n}\n\nfunction isRetryable(error: unknown, response?: Response): boolean {\n if (error instanceof RequestTimeoutError) return false\n if (error instanceof DOMException && error.name === 'AbortError') return false\n\n if (!response) return true\n\n return response.status >= 500\n}\n\nfunction delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n\nfunction isAuthExpired(status: number): boolean {\n return status === 401\n}\n\nexport async function fetchWithRetry<T>(options: RetryOptions): Promise<T> {\n let lastError: unknown\n let lastResponse: Response | undefined\n\n for (let attempt = 1; attempt <= MAX_RETRY_ATTEMPTS; attempt++) {\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), options.timeoutMs)\n\n try {\n const config = options.buildRequest()\n\n const response = await fetch(config.url, {\n method: config.method ?? 'GET',\n headers: config.headers,\n body: config.body,\n signal: controller.signal,\n })\n\n clearTimeout(timeoutId)\n\n if (response.ok) {\n return response.json() as Promise<T>\n }\n\n if (isAuthExpired(response.status)) {\n options.onAuthExpired()\n }\n\n lastResponse = response\n lastError = new Error(\n `${options.label} error (${response.status}): ${await response.text().catch(() => 'Unknown error')}`\n )\n\n if (!isRetryable(undefined, response)) {\n throw lastError\n }\n } catch (error) {\n clearTimeout(timeoutId)\n\n if (error instanceof DOMException && error.name === 'AbortError') {\n throw new RequestTimeoutError(options.label)\n }\n\n lastError = error\n lastResponse = undefined\n\n if (!isRetryable(error)) {\n throw error\n }\n }\n\n if (attempt < MAX_RETRY_ATTEMPTS) {\n const retryDelay = RETRY_BASE_DELAY_MS * 2 ** (attempt - 1)\n process.stderr.write(\n `${options.label} request failed (attempt ${attempt}/${MAX_RETRY_ATTEMPTS}), retrying in ${retryDelay / 1_000}s...\\n`\n )\n await delay(retryDelay)\n }\n }\n\n if (lastResponse && !lastResponse.ok) {\n throw lastError\n }\n\n throw lastError\n}\n","import { AgentverError } from '@agentver/shared'\nimport { getCredentials } from './auth.js'\nimport { getPlatformUrl } from './config.js'\nimport { fetchWithRetry } from '../utils/retry'\n\nconst REQUEST_TIMEOUT_MS = 30_000\nconst HEALTH_CHECK_TIMEOUT_MS = 10_000\n\nexport type PlatformRequestOptions = {\n method?: string\n body?: unknown\n timeout?: number\n}\n\nexport async function platformFetch<T>(\n path: string,\n options: PlatformRequestOptions = {}\n): Promise<T> {\n const platformUrl = getPlatformUrl()\n if (!platformUrl) {\n throw new AgentverError(\n 'UNAUTHORISED',\n 'No platform URL configured. Run `agentver login <url>` to connect.'\n )\n }\n\n const credentials = await getCredentials()\n if (!credentials?.token && !credentials?.apiKey) {\n throw new AgentverError('UNAUTHORISED', 'Not authenticated. Run `agentver login` to sign in.')\n }\n\n const url = `${platformUrl}/api/v1${path}`\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n }\n\n if (credentials.token) {\n headers.Authorization = `Bearer ${credentials.token}`\n } else if (credentials.apiKey) {\n headers['X-API-Key'] = credentials.apiKey\n }\n\n return fetchWithRetry<T>({\n label: 'Platform',\n timeoutMs: options.timeout ?? REQUEST_TIMEOUT_MS,\n buildRequest: () => ({\n url,\n method: options.method ?? 'GET',\n headers,\n body: options.body ? JSON.stringify(options.body) : undefined,\n }),\n onAuthExpired: () => {\n throw new AgentverError(\n 'UNAUTHORISED',\n 'Authentication expired. Run `agentver login` to re-authenticate.'\n )\n },\n })\n}\n\nexport async function platformFetchSilent<T>(\n path: string,\n options: PlatformRequestOptions = {}\n): Promise<T | null> {\n try {\n return await platformFetch<T>(path, options)\n } catch {\n return null\n }\n}\n\nexport async function isPlatformAvailable(): Promise<boolean> {\n const platformUrl = getPlatformUrl()\n if (!platformUrl) return false\n\n const url = `${platformUrl}/api/v1/health`\n\n try {\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), HEALTH_CHECK_TIMEOUT_MS)\n\n const response = await fetch(url, {\n method: 'HEAD',\n signal: controller.signal,\n })\n\n clearTimeout(timeoutId)\n return response.ok\n } catch {\n return false\n }\n}\n","import { readFileSync } from 'node:fs'\nimport { join } from 'node:path'\nimport type { InfoResult } from '@agentver/shared'\nimport { parseSkillFrontmatter } from '@agentver/shared'\nimport chalk from 'chalk'\nimport type { Command } from 'commander'\nimport { readFilesFromDirectory } from '../git/fetcher.js'\nimport { createSpinner, isJSONMode, outputError, outputSuccess } from '../output.js'\nimport { resolveReadPath } from '../storage/canonical.js'\nimport { computeSha256FromFiles } from '../storage/integrity.js'\nimport { readLockfile } from '../storage/lockfile.js'\nimport { readManifest } from '../storage/manifest.js'\n\nfunction formatBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`\n}\n\nexport function registerInfoCommand(program: Command): void {\n program\n .command('info <name>')\n .description('Show detailed information about an installed package')\n .option('--json', 'Output as JSON')\n .action(async (name: string, options: { json?: boolean }) => {\n const jsonMode = isJSONMode() || options.json === true\n const projectRoot = process.cwd()\n const manifest = readManifest(projectRoot)\n\n const pkg = manifest.packages[name]\n if (!pkg) {\n if (jsonMode) {\n outputError('NOT_FOUND', `Package \"${name}\" is not installed.`)\n process.exit(1)\n }\n console.error(chalk.red(`Package \"${name}\" is not installed.`))\n process.exit(1)\n }\n\n const spinner = createSpinner('Reading package information...').start()\n\n const lockfile = readLockfile(projectRoot)\n const lockfileEntry = lockfile.packages[name]\n const shortName = name.split('/').pop()!\n\n let fileCount = 0\n let totalSize = 0\n let locallyModified = false\n let skillTitle: string | undefined\n let skillDescription: string | undefined\n\n const readPath = resolveReadPath(projectRoot, shortName, pkg.agents)\n\n if (readPath) {\n try {\n const files = await readFilesFromDirectory(readPath)\n fileCount = files.length\n totalSize = files.reduce((sum, f) => sum + f.size, 0)\n\n if (lockfileEntry?.integrity && files.length > 0) {\n const localIntegrity = computeSha256FromFiles(files)\n locallyModified = localIntegrity !== lockfileEntry.integrity\n }\n\n const skillMdPath = join(readPath, 'SKILL.md')\n try {\n const skillMdContent = readFileSync(skillMdPath, 'utf-8')\n const { frontmatter } = parseSkillFrontmatter(skillMdContent)\n skillTitle = frontmatter.name\n skillDescription = frontmatter.description\n } catch {\n // No SKILL.md or invalid frontmatter — skip silently\n }\n } catch {\n // Unable to read files — continue with zero counts\n }\n }\n\n const sourceInfo =\n pkg.source.type === 'git'\n ? {\n type: 'git' as const,\n uri: pkg.source.uri,\n ref: pkg.source.ref,\n commit: pkg.source.commit,\n }\n : { type: 'well-known' as const, hostname: pkg.source.hostname }\n\n const result: InfoResult = {\n name,\n source: sourceInfo,\n agents: pkg.agents,\n installedAt: pkg.installedAt,\n modified: locallyModified,\n integrity: lockfileEntry?.integrity,\n files: {\n count: fileCount,\n totalSize,\n },\n skill:\n skillTitle && skillDescription\n ? { title: skillTitle, description: skillDescription }\n : undefined,\n }\n\n if (jsonMode) {\n spinner.stop()\n outputSuccess<InfoResult>(result)\n return\n }\n\n spinner.stop()\n\n console.log()\n console.log(chalk.bold(name))\n console.log()\n\n if (pkg.source.type === 'git') {\n console.log(` ${chalk.dim('Source:')} ${pkg.source.uri}`)\n console.log(` ${chalk.dim('Ref:')} ${chalk.cyan(pkg.source.ref)}`)\n console.log(` ${chalk.dim('Commit:')} ${chalk.dim(pkg.source.commit.slice(0, 7))}`)\n } else {\n console.log(\n ` ${chalk.dim('Source:')} ${pkg.source.hostname} ${chalk.dim('[well-known]')}`\n )\n }\n\n console.log(\n ` ${chalk.dim('Agents:')} ${pkg.agents.length > 0 ? pkg.agents.join(', ') : chalk.dim('none')}`\n )\n console.log(` ${chalk.dim('Installed:')} ${pkg.installedAt}`)\n console.log(\n ` ${chalk.dim('Modified:')} ${locallyModified ? chalk.yellow('yes') : chalk.green('no')}`\n )\n\n if (lockfileEntry?.integrity) {\n console.log(` ${chalk.dim('Integrity:')} ${lockfileEntry.integrity}`)\n }\n\n console.log(\n ` ${chalk.dim('Files:')} ${fileCount} file${fileCount !== 1 ? 's' : ''} (${formatBytes(totalSize)})`\n )\n\n if (skillTitle) {\n console.log()\n console.log(` ${chalk.dim('Skill:')} ${skillTitle}`)\n if (skillDescription) {\n console.log(` ${chalk.dim('Description:')} ${skillDescription}`)\n }\n }\n\n console.log()\n })\n}\n","import { existsSync, mkdirSync, writeFileSync } from 'node:fs'\nimport { join } from 'node:path'\nimport type { InitResult } from '@agentver/shared'\nimport chalk from 'chalk'\nimport type { Command } from 'commander'\nimport prompts from 'prompts'\nimport { isJSONMode, outputError, outputSuccess } from '../output.js'\n\n// ---------------------------------------------------------------------------\n// Token budget helpers\n// ---------------------------------------------------------------------------\n\nconst TOKEN_BUDGET = 5000\n\n/** Rough token estimate: ~4 characters per token. */\nfunction estimateTokens(content: string): number {\n return Math.ceil(content.length / 4)\n}\n\n/** Warn (informational only) if content exceeds the recommended budget. */\nfunction warnIfOverBudget(filePath: string, content: string): void {\n const tokens = estimateTokens(content)\n if (tokens > TOKEN_BUDGET) {\n console.log(\n chalk.yellow(`\\n Warning: ${filePath} is ~${tokens} tokens (recommended < ${TOKEN_BUDGET}).`)\n )\n console.log(\n chalk.yellow(' Move detailed content to docs/ or examples/ for progressive disclosure.')\n )\n }\n}\n\n// ---------------------------------------------------------------------------\n// Templates\n// ---------------------------------------------------------------------------\n\nconst SKILL_TEMPLATE = `---\nname: {{name}}\ndescription: {{description}}\nversion: 0.1.0\nauthor: {{author}}\ncompatibility:\n agents:\n - claude-code\n - cursor\n - windsurf\ntriggers:\n - \"Use when the user asks about...\"\n - \"Use when working with...\"\n---\n\n<!-- Keep this file under 5000 tokens. Use docs/ and examples/ for detailed content. -->\n\n# {{name}}\n\n{{description}}\n\n## When to use\n\n- Trigger condition 1\n- Trigger condition 2\n\n## Instructions\n\nStep-by-step instructions for the AI agent.\n\n1. First, do this\n2. Then, do that\n3. Finally, verify the result\n\n## Examples\n\n### Example 1: Basic usage\n\n\\`\\`\\`\nDescribe a typical interaction\n\\`\\`\\`\n`\n\nconst AGENT_CONFIG_TEMPLATE = `# {{name}}\n\n<!-- [section:overview] -->\n\n{{description}}\n\n## Project Overview\n\n<!-- Describe the project, its purpose, and key architecture decisions -->\n\n<!-- [/section:overview] -->\n\n<!-- [section:tech-stack] -->\n\n## Tech Stack\n\n<!-- List frameworks, languages, and key dependencies -->\n\n<!-- [/section:tech-stack] -->\n\n<!-- [section:standards] -->\n\n## Code Standards\n\n<!-- Define naming conventions, file structure, and coding patterns -->\n\n## Forbidden Patterns\n\n<!-- List anti-patterns, deprecated approaches, and things to avoid -->\n\n<!-- [/section:standards] -->\n\n<!-- [section:testing] -->\n\n## Testing Requirements\n\n<!-- Define testing strategy, coverage expectations, and testing patterns -->\n\n<!-- [/section:testing] -->\n\n<!-- [section:workflow] -->\n\n## PR Conventions\n\n<!-- Define PR title format, review process, and merge requirements -->\n\n<!-- [/section:workflow] -->\n`\n\nconst PLUGIN_TEMPLATE = `{\n \"name\": \"{{name}}\",\n \"description\": \"{{description}}\",\n \"version\": \"1.0.0\",\n \"tools\": [],\n \"hooks\": {},\n \"rules\": []\n}\n`\n\nconst SCRIPT_TEMPLATE = `{\n \"name\": \"{{name}}\",\n \"description\": \"{{description}}\",\n \"version\": \"1.0.0\",\n \"runtime\": \"node\",\n \"entryPoint\": \"src/index.ts\",\n \"args\": []\n}\n`\n\nconst PROMPT_TEMPLATE = `---\nname: {{name}}\ndescription: {{description}}\nversion: 0.1.0\nauthor: {{author}}\nvariables:\n - name: topic\n description: \"The subject to focus on\"\n required: true\n default: \"\"\n - name: tone\n description: \"The desired tone (e.g. formal, casual, technical)\"\n required: false\n default: \"neutral\"\n---\n\n# {{name}}\n\n{{description}}\n\n## Prompt\n\n<!-- Write the prompt content below. Use \\${variable_name} for variable substitution. -->\n\nYou are an expert on \\${topic}. Respond in a \\${tone} tone.\n\n## Notes\n\n<!-- Additional context or guidance for prompt usage. -->\n`\n\nconst SCRIPT_ENTRY_TEMPLATE = `#!/usr/bin/env node\n// {{name}} — entry point\n`\n\nconst AGENTVERIGNORE_CONTENT = `node_modules/\n.git/\n.DS_Store\n*.log\n.env*\n`\n\nconst EXAMPLES_README = `# Examples\n\nAdd example files here. These are loaded on demand by the agent when it needs\nmore context about how to use the skill.\n\nEach file should demonstrate a single use case or scenario.\n`\n\nconst DOCS_README = `# Documentation\n\nAdd detailed documentation here. Reference these files from SKILL.md when the\nagent needs deeper context.\n\nKeep SKILL.md concise (< 5000 tokens) and offload detailed explanations,\nreference material, and edge-case handling into this directory.\n`\n\nconst EXAMPLE_SKILL_TEMPLATE = `---\nname: example-skill\ndescription: A starter skill demonstrating best practices\nversion: 0.1.0\nauthor: Your Name\ncompatibility:\n agents:\n - claude-code\n - cursor\n - windsurf\ntriggers:\n - \"Use when the user asks about example patterns\"\n - \"Use when scaffolding a new skill\"\n---\n\n<!-- Keep this file under 5000 tokens. Use docs/ and examples/ for detailed content. -->\n\n# Example Skill\n\nA starter skill that demonstrates the recommended structure and conventions.\n\n## When to use\n\n- When creating a new skill for the first time\n- When reviewing best practices for skill authoring\n\n## Instructions\n\n1. Read the frontmatter to understand metadata and triggers\n2. Follow the progressive disclosure pattern: keep this file concise\n3. Place detailed docs in \\`docs/\\` and usage examples in \\`examples/\\`\n\n## Examples\n\n### Example 1: Basic usage\n\n\\`\\`\\`\nUser: \"Help me scaffold a new skill\"\nAgent: Reads this skill, follows the structure, creates a new SKILL.md\n\\`\\`\\`\n`\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction buildReadme(name: string, description: string): string {\n return `# ${name}\n\n${description}\n\n## Structure\n\n\\`\\`\\`\nskills/ — Agent skills (SKILL.md files)\nconfigs/ — Agent configurations (CLAUDE.md, .cursorrules, etc.)\nprompts/ — Reusable prompt templates (PROMPT.md files)\n\\`\\`\\`\n\n## Install\n\n\\`\\`\\`bash\nagentver install github.com/YOUR_ORG/YOUR_REPO@main\n\\`\\`\\`\n`\n}\n\nfunction createGitkeep(dirPath: string): void {\n mkdirSync(dirPath, { recursive: true })\n writeFileSync(join(dirPath, '.gitkeep'), '', 'utf-8')\n}\n\n// ---------------------------------------------------------------------------\n// Command registration\n// ---------------------------------------------------------------------------\n\nexport function registerInitCommand(program: Command): void {\n program\n .command('init')\n .description('Scaffold a new package')\n .option('--type <type>', 'Package type: skill, agent, plugin, script, prompt', 'skill')\n .option('--repo', 'Scaffold in a Git-repo-friendly structure')\n .option('--name <name>', 'Package name (required in JSON mode)')\n .option('--description <desc>', 'Package description')\n .action(\n async (options: { type: string; repo?: boolean; name?: string; description?: string }) => {\n let packageName: string\n let description: string\n let author = ''\n\n if (isJSONMode()) {\n if (!options.name) {\n outputError('VALIDATION_ERROR', 'Name is required in JSON mode (use --name flag)')\n process.exit(1)\n }\n packageName = options.name\n description = options.description ?? ''\n } else if (options.name) {\n packageName = options.name\n description = options.description ?? ''\n\n if (options.type === 'skill' || options.type === 'prompt') {\n const authorResponse = await prompts({\n type: 'text',\n name: 'author',\n message: 'Author:',\n })\n author = (authorResponse.author as string) ?? ''\n }\n } else {\n const promptQuestions: prompts.PromptObject[] = [\n {\n type: 'text',\n name: 'name',\n message: 'Package name:',\n validate: (value: string) => (value.length > 0 ? true : 'Name is required'),\n },\n {\n type: 'text',\n name: 'description',\n message: 'Description:',\n },\n ]\n\n if (options.type === 'skill' || options.type === 'prompt') {\n promptQuestions.push({\n type: 'text',\n name: 'author',\n message: 'Author:',\n })\n }\n\n const response = await prompts(promptQuestions)\n\n if (!response.name) return\n\n packageName = response.name as string\n description = (response.description as string) ?? ''\n author = (response.author as string) ?? ''\n }\n\n const dir = join(process.cwd(), packageName)\n\n if (existsSync(dir)) {\n if (isJSONMode()) {\n outputError('ALREADY_EXISTS', `Directory \"${packageName}\" already exists.`)\n process.exit(1)\n }\n console.error(chalk.red(`Directory \"${packageName}\" already exists.`))\n process.exit(1)\n }\n\n mkdirSync(dir, { recursive: true })\n\n const applyReplacements = (tmpl: string) =>\n tmpl\n .replace(/\\{\\{name\\}\\}/g, packageName)\n .replace(/\\{\\{description\\}\\}/g, description)\n .replace(/\\{\\{author\\}\\}/g, author)\n\n let fileName: string\n const createdFiles: string[] = []\n\n switch (options.type) {\n case 'skill': {\n fileName = 'SKILL.md'\n const content = applyReplacements(SKILL_TEMPLATE)\n writeFileSync(join(dir, fileName), content, 'utf-8')\n createdFiles.push(fileName)\n if (!options.repo) {\n mkdirSync(join(dir, 'examples'), { recursive: true })\n writeFileSync(join(dir, 'examples', 'README.md'), EXAMPLES_README, 'utf-8')\n createdFiles.push('examples/README.md')\n mkdirSync(join(dir, 'docs'), { recursive: true })\n writeFileSync(join(dir, 'docs', 'README.md'), DOCS_README, 'utf-8')\n createdFiles.push('docs/README.md')\n }\n if (!isJSONMode()) {\n warnIfOverBudget(fileName, content)\n }\n break\n }\n\n case 'agent': {\n fileName = 'CLAUDE.md'\n const content = applyReplacements(AGENT_CONFIG_TEMPLATE)\n writeFileSync(join(dir, fileName), content, 'utf-8')\n createdFiles.push(fileName)\n if (!options.repo) {\n mkdirSync(join(dir, 'rules'), { recursive: true })\n }\n break\n }\n\n case 'plugin': {\n fileName = 'plugin.json'\n writeFileSync(join(dir, fileName), applyReplacements(PLUGIN_TEMPLATE), 'utf-8')\n createdFiles.push(fileName)\n if (!options.repo) {\n mkdirSync(join(dir, 'scripts'), { recursive: true })\n }\n break\n }\n\n case 'script': {\n fileName = 'script.json'\n writeFileSync(join(dir, fileName), applyReplacements(SCRIPT_TEMPLATE), 'utf-8')\n createdFiles.push(fileName)\n mkdirSync(join(dir, 'src'), { recursive: true })\n writeFileSync(\n join(dir, 'src', 'index.ts'),\n applyReplacements(SCRIPT_ENTRY_TEMPLATE),\n 'utf-8'\n )\n createdFiles.push('src/index.ts')\n break\n }\n\n case 'prompt': {\n fileName = 'PROMPT.md'\n const content = applyReplacements(PROMPT_TEMPLATE)\n writeFileSync(join(dir, fileName), content, 'utf-8')\n createdFiles.push(fileName)\n if (!options.repo) {\n mkdirSync(join(dir, 'variants'), { recursive: true })\n }\n if (!isJSONMode()) {\n warnIfOverBudget(fileName, content)\n }\n break\n }\n\n default: {\n if (isJSONMode()) {\n outputError('VALIDATION_ERROR', `Unknown package type: \"${options.type}\"`)\n process.exit(1)\n }\n console.error(chalk.red(`Unknown package type: \"${options.type}\"`))\n process.exit(1)\n }\n }\n\n if (options.repo) {\n const skillsDir = join(dir, 'skills', 'example-skill')\n mkdirSync(skillsDir, { recursive: true })\n writeFileSync(join(skillsDir, 'SKILL.md'), EXAMPLE_SKILL_TEMPLATE, 'utf-8')\n createdFiles.push('skills/example-skill/SKILL.md')\n mkdirSync(join(skillsDir, 'examples'), { recursive: true })\n writeFileSync(join(skillsDir, 'examples', 'README.md'), EXAMPLES_README, 'utf-8')\n createdFiles.push('skills/example-skill/examples/README.md')\n mkdirSync(join(skillsDir, 'docs'), { recursive: true })\n writeFileSync(join(skillsDir, 'docs', 'README.md'), DOCS_README, 'utf-8')\n createdFiles.push('skills/example-skill/docs/README.md')\n\n createGitkeep(join(dir, 'configs'))\n createdFiles.push('configs/.gitkeep')\n createGitkeep(join(dir, 'prompts'))\n createdFiles.push('prompts/.gitkeep')\n\n writeFileSync(join(dir, 'README.md'), buildReadme(packageName, description), 'utf-8')\n createdFiles.push('README.md')\n writeFileSync(join(dir, '.agentverignore'), AGENTVERIGNORE_CONTENT, 'utf-8')\n createdFiles.push('.agentverignore')\n }\n\n if (isJSONMode()) {\n outputSuccess<InitResult>({\n name: packageName,\n type: options.type,\n path: dir,\n files: createdFiles,\n })\n return\n }\n\n console.log(chalk.green(`\\nCreated ${fileName} in ./${packageName}/`))\n\n if (options.repo) {\n console.log(chalk.dim('Repo structure created with skills/, configs/, prompts/'))\n console.log(\n chalk.dim(`Install with: agentver install github.com/YOUR_ORG/YOUR_REPO@main`)\n )\n } else {\n console.log(chalk.dim(`Edit the file, then run: agentver publish ./${packageName}`))\n }\n }\n )\n}\n","import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs'\nimport { homedir } from 'node:os'\nimport { dirname, join, relative, resolve } from 'node:path'\nimport {\n composeConfigs,\n detectInstalledAgents,\n getConfigFilePath,\n isComposedConfig,\n parseComposedSections,\n} from '@agentver/agent-definitions'\nimport type { InstallResult as InstallResultJSON } from '@agentver/shared'\nimport { AgentverError, type GitSource, type WellKnownSource } from '@agentver/shared'\nimport chalk from 'chalk'\nimport type { Command } from 'commander'\nimport type ora from 'ora'\nimport prompts from 'prompts'\nimport { fetchFiles, parseGitSource, resolveRef } from '../git/index.js'\nimport type { FetchedFile } from '../git/types.js'\nimport {\n createSpinner,\n isJSONMode,\n outputError,\n outputSuccess,\n type SpinnerLike,\n} from '../output.js'\nimport { getCredentials } from '../registry/auth.js'\nimport { readConfig } from '../registry/config.js'\nimport { reportInstallation } from '../registry/reporter.js'\nimport { renderScanResult, scanFiles } from '../security/index.js'\nimport type { ScanResult as SecurityScanResult } from '../security/types.js'\nimport { createAgentSymlinks, getCanonicalSkillPath } from '../storage/canonical'\nimport { computeSha256FromFiles } from '../storage/integrity'\nimport { readLockfile, writeLockfile } from '../storage/lockfile'\nimport { readManifest, writeManifest } from '../storage/manifest'\nimport {\n fetchWellKnownIndex,\n fetchWellKnownSkill,\n looksLikeWellKnownUrl,\n parseWellKnownSource,\n} from '../wellknown/index.js'\n\nexport type InstallOptions = {\n agent?: string\n global?: boolean\n dryRun?: boolean\n path?: string\n detect?: boolean\n skipAudit?: boolean\n}\n\nexport type InstallResult = {\n name: string\n ref: string\n commitSha: string\n agents: string[]\n}\n\ntype ResolveResponse = {\n gitUri: string\n gitPath: string\n gitRef: string\n}\n\nfunction buildAuditData(scanResult?: SecurityScanResult): InstallResultJSON['audit'] {\n if (!scanResult) {\n return { passed: true, findings: 0, blockers: 0 }\n }\n const blockers = scanResult.findings.filter(\n (f) => f.severity === 'CRITICAL' || f.severity === 'HIGH'\n ).length\n return {\n passed: scanResult.verdict !== 'BLOCK',\n findings: scanResult.findings.length,\n blockers,\n }\n}\n\nfunction looksLikeGitUrl(source: string): boolean {\n const cleaned = source\n .replace(/^https?:\\/\\//, '')\n .split('@')[0]!\n .split('#')[0]!\n const segments = cleaned.split('/').filter(Boolean)\n return segments.length >= 3 && segments[0]!.includes('.')\n}\n\nasync function fetchFromPlatform<T>(platformUrl: string, path: string): Promise<T> {\n const credentials = await getCredentials()\n\n const headers: Record<string, string> = { 'Content-Type': 'application/json' }\n if (credentials?.token) {\n headers.Authorization = `Bearer ${credentials.token}`\n } else if (credentials?.apiKey) {\n headers['X-API-Key'] = credentials.apiKey\n }\n\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), 10_000)\n\n try {\n const response = await fetch(`${platformUrl}/api/v1${path}`, {\n headers,\n signal: controller.signal,\n })\n clearTimeout(timeoutId)\n\n if (!response.ok) {\n throw new AgentverError('NOT_FOUND', `Platform could not resolve \"${path}\"`)\n }\n\n return response.json() as Promise<T>\n } catch (error) {\n clearTimeout(timeoutId)\n if (error instanceof AgentverError) throw error\n throw new AgentverError('INTERNAL_ERROR', `Platform request failed: ${String(error)}`)\n }\n}\n\nasync function resolveSource(source: string): Promise<string> {\n if (looksLikeGitUrl(source)) {\n return source\n }\n\n const [namePart, ref] = source.split('@')\n\n const config = readConfig()\n if (!config.platformUrl) {\n throw new AgentverError(\n 'VALIDATION_ERROR',\n `\"${source}\" doesn't look like a Git URL. Connect to a platform to resolve short names:\\n agentver login <platform-url>`\n )\n }\n\n const resolved = await fetchFromPlatform<ResolveResponse>(\n config.platformUrl,\n `/resolve?name=${encodeURIComponent(namePart!)}`\n )\n\n let fullSource = `${resolved.gitUri}/${resolved.gitPath}`\n if (ref) {\n fullSource += `@${ref}`\n } else if (resolved.gitRef) {\n fullSource += `@${resolved.gitRef}`\n }\n\n return fullSource\n}\n\nasync function installFromWellKnown(\n source: string,\n options: InstallOptions\n): Promise<InstallResult> {\n const jsonMode = isJSONMode()\n const spinner = createSpinner(`Resolving well-known source: ${source}`).start()\n\n try {\n const { baseUrl, skillName } = parseWellKnownSource(source)\n const hostname = new URL(baseUrl).hostname\n\n spinner.text = `Fetching well-known index from ${hostname}...`\n const index = await fetchWellKnownIndex(baseUrl)\n\n let selectedEntry = index.skills[0]!\n\n if (skillName) {\n const found = index.skills.find((s) => s.name === skillName)\n if (!found) {\n const available = index.skills.map((s) => s.name).join(', ')\n if (jsonMode) {\n outputError(\n 'NOT_FOUND',\n `Skill \"${skillName}\" not found at ${hostname}. Available: ${available}`\n )\n process.exit(1)\n }\n spinner.fail(`Skill \"${skillName}\" not found at ${hostname}. Available: ${available}`)\n process.exit(1)\n }\n selectedEntry = found\n } else if (index.skills.length > 1) {\n if (jsonMode) {\n outputError(\n 'AMBIGUOUS_SKILL',\n `Multiple skills available at ${hostname}: ${index.skills.map((s) => s.name).join(', ')}. Specify a skill name.`\n )\n process.exit(1)\n }\n spinner.stop()\n process.stdout.write(chalk.bold(`\\nMultiple skills available at ${hostname}:\\n\\n`))\n for (const skill of index.skills) {\n process.stdout.write(\n ` ${chalk.green(skill.name)} ${chalk.dim(`— ${skill.description}`)}\\n`\n )\n }\n process.stdout.write(\n `\\n${chalk.dim('Specify a skill:')} ${chalk.white(`agentver install ${hostname}/<skill-name>`)}\\n`\n )\n process.exit(1)\n }\n\n spinner.text = `Fetching files for ${selectedEntry.name} from ${hostname}...`\n const fetchResult = await fetchWellKnownSkill(baseUrl, selectedEntry)\n\n if (fetchResult.files.length === 0) {\n if (jsonMode) {\n outputError(\n 'NO_FILES',\n `No files fetched for skill \"${selectedEntry.name}\" from ${hostname}`\n )\n process.exit(1)\n }\n spinner.fail(`No files fetched for skill \"${selectedEntry.name}\" from ${hostname}`)\n process.exit(1)\n }\n\n const integrity = computeSha256FromFiles(fetchResult.files)\n\n const projectRoot = process.cwd()\n let agents: string[] = []\n const scope = options.global ? 'global' : 'project'\n\n if (options.path) {\n await installToCustomPath(selectedEntry.name, fetchResult.files, options, spinner)\n agents = options.agent ? [options.agent] : []\n } else {\n if (options.detect === false && !options.agent) {\n if (jsonMode) {\n outputError(\n 'VALIDATION_ERROR',\n 'Use --agent to specify a target agent when --no-detect is enabled'\n )\n process.exit(1)\n }\n spinner.fail('Use --agent to specify a target agent when --no-detect is enabled')\n process.exit(1)\n }\n\n agents = options.agent\n ? [options.agent]\n : options.detect === false\n ? []\n : detectInstalledAgents(projectRoot).map((a) => a.id)\n\n if (agents.length === 0) {\n if (jsonMode) {\n outputSuccess<InstallResultJSON>(\n {\n name: selectedEntry.name,\n source: { type: 'well-known', baseUrl },\n agents: [],\n path: '',\n scope,\n audit: buildAuditData(),\n },\n ['No agents detected. Use --agent to specify one.']\n )\n } else {\n spinner.warn('No agents detected. Use --agent to specify one.')\n }\n return { name: selectedEntry.name, ref: 'well-known', commitSha: '', agents: [] }\n }\n\n const packageType = detectPackageType(fetchResult.files)\n\n if (packageType === 'AGENT_CONFIG') {\n await installAgentConfig(selectedEntry.name, fetchResult.files, agents, options, spinner)\n } else {\n await installStandardPackage(\n selectedEntry.name,\n fetchResult.files,\n agents,\n options,\n spinner\n )\n }\n }\n\n if (options.dryRun) {\n if (jsonMode) {\n const installPath = options.path\n ? resolve(projectRoot, options.path)\n : getCanonicalSkillPath(projectRoot, selectedEntry.name, scope)\n outputSuccess<InstallResultJSON>({\n name: selectedEntry.name,\n source: { type: 'well-known', baseUrl },\n agents,\n path: installPath,\n scope,\n audit: buildAuditData(),\n })\n }\n return { name: selectedEntry.name, ref: 'well-known', commitSha: '', agents }\n }\n\n const wellKnownSourceRecord: WellKnownSource = {\n type: 'well-known',\n baseUrl,\n hostname,\n skillName: selectedEntry.name,\n }\n\n const manifest = readManifest(projectRoot)\n manifest.packages[selectedEntry.name] = {\n source: wellKnownSourceRecord,\n agents,\n installedAt: new Date().toISOString(),\n modified: false,\n }\n writeManifest(projectRoot, manifest)\n\n const lockfile = readLockfile(projectRoot)\n lockfile.packages[selectedEntry.name] = {\n source: wellKnownSourceRecord,\n integrity,\n agents,\n }\n writeLockfile(projectRoot, lockfile)\n\n const target = options.path ?? agents.join(', ')\n\n if (jsonMode) {\n const installPath = options.path\n ? resolve(projectRoot, options.path)\n : getCanonicalSkillPath(projectRoot, selectedEntry.name, scope)\n outputSuccess<InstallResultJSON>({\n name: selectedEntry.name,\n source: { type: 'well-known', baseUrl },\n agents,\n path: installPath,\n scope,\n audit: buildAuditData(),\n })\n } else {\n spinner.succeed(\n `Installed ${chalk.green(selectedEntry.name)} from ${chalk.dim(hostname)} ${chalk.dim('(well-known)')} to ${target}`\n )\n }\n\n return { name: selectedEntry.name, ref: 'well-known', commitSha: '', agents }\n } catch (error) {\n if (jsonMode) {\n outputError('INSTALL_FAILED', error instanceof Error ? error.message : String(error))\n process.exit(1)\n }\n spinner.fail(`Failed to install: ${error instanceof Error ? error.message : String(error)}`)\n process.exit(1)\n }\n}\n\nexport async function installPackage(\n source: string,\n options: InstallOptions\n): Promise<InstallResult> {\n if (looksLikeWellKnownUrl(source)) {\n return installFromWellKnown(source, options)\n }\n\n const jsonMode = isJSONMode()\n const spinner = createSpinner(`Parsing source: ${source}`).start()\n\n try {\n const resolvedSource = await resolveSource(source)\n const gitSource = parseGitSource(resolvedSource)\n const shortName = deriveSkillName(gitSource)\n\n spinner.text = `Resolving ${gitSource.owner}/${gitSource.repo}@${gitSource.ref}`\n const resolved = await resolveRef(gitSource)\n\n spinner.text = `Fetching files from ${gitSource.host}/${gitSource.owner}/${gitSource.repo}`\n const result = await fetchFiles(resolved)\n\n if (result.files.length === 0) {\n if (jsonMode) {\n outputError('NO_FILES', `No files found at ${formatSource(gitSource)}`)\n process.exit(1)\n }\n spinner.fail(`No files found at ${formatSource(gitSource)}`)\n process.exit(1)\n }\n\n let securityScanResult: SecurityScanResult | undefined\n\n if (!options.skipAudit) {\n spinner.text = 'Running security scan...'\n const scanResult = await scanFiles(result.files, gitSource, {\n skipAudit: options.skipAudit,\n })\n securityScanResult = scanResult\n\n if (scanResult.verdict === 'BLOCK') {\n if (jsonMode) {\n outputError(\n 'SECURITY_BLOCK',\n `Security scan blocked installation: ${scanResult.findings.length} finding(s)`\n )\n process.exit(1)\n }\n renderScanResult(scanResult, spinner as ReturnType<typeof ora>)\n process.exit(1)\n }\n\n if (scanResult.verdict === 'WARN') {\n if (jsonMode) {\n // In JSON mode, proceed with warnings (no interactive prompt)\n } else {\n renderScanResult(scanResult, spinner as ReturnType<typeof ora>)\n const { proceed } = await prompts({\n type: 'confirm',\n name: 'proceed',\n message: 'Continue with installation despite warnings?',\n initial: false,\n })\n\n if (!proceed) {\n console.log(chalk.dim('Installation cancelled.'))\n process.exit(0)\n }\n\n spinner.start('Continuing installation...')\n }\n } else {\n if (!jsonMode) {\n spinner.succeed(chalk.green('Security scan passed'))\n spinner.start('Installing...')\n }\n }\n }\n\n const integrity = computeSha256FromFiles(result.files)\n\n const projectRoot = process.cwd()\n const scope = options.global ? 'global' : 'project'\n const gitUri = `${gitSource.host}/${gitSource.owner}/${gitSource.repo}`\n let agents: string[] = []\n\n if (options.path) {\n await installToCustomPath(shortName, result.files, options, spinner)\n agents = options.agent ? [options.agent] : []\n } else {\n if (options.detect === false && !options.agent) {\n if (jsonMode) {\n outputError(\n 'VALIDATION_ERROR',\n 'Use --agent to specify a target agent when --no-detect is enabled'\n )\n process.exit(1)\n }\n spinner.fail('Use --agent to specify a target agent when --no-detect is enabled')\n process.exit(1)\n }\n\n agents = options.agent\n ? [options.agent]\n : options.detect === false\n ? []\n : detectInstalledAgents(projectRoot).map((a) => a.id)\n\n if (agents.length === 0) {\n if (jsonMode) {\n outputSuccess<InstallResultJSON>(\n {\n name: shortName,\n source: { type: 'git', uri: gitUri },\n agents: [],\n path: '',\n scope,\n audit: buildAuditData(securityScanResult),\n },\n ['No agents detected. Use --agent to specify one.']\n )\n } else {\n spinner.warn('No agents detected. Use --agent to specify one.')\n }\n return { name: shortName, ref: gitSource.ref, commitSha: resolved.commitSha, agents: [] }\n }\n\n const packageType = detectPackageType(result.files)\n\n if (packageType === 'AGENT_CONFIG') {\n await installAgentConfig(shortName, result.files, agents, options, spinner)\n } else {\n await installStandardPackage(shortName, result.files, agents, options, spinner)\n }\n }\n\n if (options.dryRun) {\n if (jsonMode) {\n const installPath = options.path\n ? resolve(projectRoot, options.path)\n : getCanonicalSkillPath(projectRoot, shortName, scope)\n outputSuccess<InstallResultJSON>({\n name: shortName,\n source: { type: 'git', uri: gitUri },\n agents,\n path: installPath,\n scope,\n audit: buildAuditData(securityScanResult),\n })\n }\n return { name: shortName, ref: gitSource.ref, commitSha: resolved.commitSha, agents }\n }\n\n const gitSourceRecord: GitSource = {\n type: 'git',\n uri: gitUri,\n path: gitSource.path,\n ref: gitSource.ref,\n commit: resolved.commitSha,\n }\n\n const manifest = readManifest(projectRoot)\n manifest.packages[shortName] = {\n source: gitSourceRecord,\n agents,\n installedAt: new Date().toISOString(),\n modified: false,\n }\n writeManifest(projectRoot, manifest)\n\n const lockfile = readLockfile(projectRoot)\n lockfile.packages[shortName] = {\n source: gitSourceRecord,\n integrity,\n agents,\n }\n writeLockfile(projectRoot, lockfile)\n\n reportInstallation(shortName, gitSourceRecord, agents, resolved.commitSha)\n\n const target = options.path ?? agents.join(', ')\n const installPath = options.path\n ? resolve(projectRoot, options.path)\n : getCanonicalSkillPath(projectRoot, shortName, scope)\n\n const warnings: string[] = []\n if (securityScanResult?.verdict === 'WARN') {\n warnings.push(`Security scan passed with ${securityScanResult.findings.length} warning(s)`)\n }\n\n if (jsonMode) {\n outputSuccess<InstallResultJSON>(\n {\n name: shortName,\n source: { type: 'git', uri: gitUri },\n agents,\n path: installPath,\n scope,\n audit: buildAuditData(securityScanResult),\n },\n warnings.length > 0 ? warnings : undefined\n )\n } else {\n spinner.succeed(\n `Installed ${chalk.green(shortName)} from ${chalk.dim(formatSource(gitSource))} ${chalk.cyan(`@${gitSource.ref}`)} ${chalk.dim(`(${resolved.commitSha.slice(0, 7)})`)} to ${target}`\n )\n }\n\n return { name: shortName, ref: gitSource.ref, commitSha: resolved.commitSha, agents }\n } catch (error) {\n if (jsonMode) {\n outputError('INSTALL_FAILED', error instanceof Error ? error.message : String(error))\n process.exit(1)\n }\n spinner.fail(`Failed to install: ${error instanceof Error ? error.message : String(error)}`)\n process.exit(1)\n }\n}\n\nfunction deriveSkillName(source: { path: string; repo: string }): string {\n if (source.path) {\n const parts = source.path.split('/').filter(Boolean)\n return parts[parts.length - 1] ?? source.repo\n }\n return source.repo\n}\n\nfunction formatSource(source: { host: string; owner: string; repo: string; path: string }): string {\n const base = `${source.host}/${source.owner}/${source.repo}`\n return source.path ? `${base}/${source.path}` : base\n}\n\nfunction detectPackageType(files: FetchedFile[]): string {\n const filenames = new Set(files.map((f) => f.path))\n\n if (filenames.has('SKILL.md')) return 'SKILL'\n if (filenames.has('plugin.json')) return 'PLUGIN'\n if (filenames.has('script.json')) return 'SCRIPT'\n if (filenames.has('PROMPT.md')) return 'PROMPT'\n\n const configFiles = [\n 'CLAUDE.md',\n 'AGENTS.md',\n '.cursorrules',\n '.windsurfrules',\n '.github/copilot-instructions.md',\n '.junie/guidelines.md',\n ]\n for (const cf of configFiles) {\n if (filenames.has(cf)) return 'AGENT_CONFIG'\n }\n\n return 'SKILL'\n}\n\nasync function installAgentConfig(\n name: string,\n files: FetchedFile[],\n agents: string[],\n options: InstallOptions,\n spinner: ReturnType<typeof ora> | SpinnerLike\n): Promise<void> {\n const projectRoot = process.cwd()\n\n if (options.dryRun) {\n spinner.info(\n `${chalk.yellow('[dry-run]')} Would install agent config ${chalk.green(name)} to ${agents.join(', ')}`\n )\n return\n }\n\n spinner.text = `Installing agent config to ${agents.length} agent(s)...`\n\n const contentFile = files.find(\n (f) =>\n f.path === 'CLAUDE.md' ||\n f.path === 'AGENTS.md' ||\n f.path === '.cursorrules' ||\n f.path === '.windsurfrules' ||\n f.path.endsWith('.md')\n )\n\n if (!contentFile) {\n spinner.fail('No config content file found in package')\n process.exit(1)\n }\n\n const configContent = contentFile.content\n\n for (const agentId of agents) {\n const configPath = getConfigFilePath(agentId as Parameters<typeof getConfigFilePath>[0], name)\n if (!configPath) continue\n\n const fullConfigPath = options.global\n ? configPath.replace('~', homedir())\n : join(projectRoot, configPath)\n\n const configDir = join(fullConfigPath, '..')\n if (!existsSync(configDir)) {\n mkdirSync(configDir, { recursive: true })\n }\n\n let finalContent = configContent\n if (existsSync(fullConfigPath)) {\n const existingContent = readFileSync(fullConfigPath, 'utf-8')\n\n if (isComposedConfig(existingContent)) {\n const existingSections = parseComposedSections(existingContent)\n const alreadyPresent = existingSections.some((s) => s.packageName === name)\n\n if (!alreadyPresent) {\n const allConfigs = [\n ...existingSections.map((s, idx) => ({\n packageName: s.packageName,\n content: s.content,\n order: idx,\n })),\n {\n packageName: name,\n content: contentFile.content,\n order: existingSections.length,\n },\n ]\n const composed = composeConfigs(allConfigs)\n finalContent = composed.content\n }\n }\n }\n\n writeFileSync(fullConfigPath, finalContent, 'utf-8')\n }\n}\n\nasync function installToCustomPath(\n name: string,\n files: FetchedFile[],\n options: InstallOptions,\n spinner: ReturnType<typeof ora> | SpinnerLike\n): Promise<void> {\n const targetPath = resolve(process.cwd(), options.path!)\n\n if (options.dryRun) {\n spinner.info(\n `${chalk.yellow('[dry-run]')} Would install ${chalk.green(name)} to ${chalk.dim(targetPath)}`\n )\n console.log(chalk.dim(` Files: ${files.map((f) => f.path).join(', ')}`))\n return\n }\n\n spinner.text = `Installing to ${targetPath}...`\n\n if (!existsSync(targetPath)) {\n mkdirSync(targetPath, { recursive: true })\n }\n\n for (const file of files) {\n const resolvedFilePath = resolve(targetPath, file.path)\n const relativePath = relative(targetPath, resolvedFilePath)\n if (relativePath.startsWith('..') || resolve(resolvedFilePath) !== resolvedFilePath) {\n continue\n }\n\n const dir = join(resolvedFilePath, '..')\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true })\n }\n writeFileSync(resolvedFilePath, file.content, 'utf-8')\n }\n}\n\nasync function installStandardPackage(\n name: string,\n files: FetchedFile[],\n agents: string[],\n options: InstallOptions,\n spinner: ReturnType<typeof ora> | SpinnerLike\n): Promise<void> {\n const projectRoot = process.cwd()\n const scope = options.global ? 'global' : 'project'\n\n if (options.dryRun) {\n const canonicalPath = getCanonicalSkillPath(projectRoot, name, scope)\n spinner.info(\n `${chalk.yellow('[dry-run]')} Would install ${chalk.green(name)} to ${chalk.dim(canonicalPath)}`\n )\n console.log(chalk.dim(` Files: ${files.map((f) => f.path).join(', ')}`))\n console.log(chalk.dim(` Symlinks: ${agents.join(', ')}`))\n return\n }\n\n spinner.text = `Installing to canonical path and symlinking to ${agents.length} agent(s)...`\n\n // Step 1: Write files to canonical directory\n const canonicalPath = getCanonicalSkillPath(projectRoot, name, scope)\n\n if (!existsSync(canonicalPath)) {\n mkdirSync(canonicalPath, { recursive: true })\n }\n\n for (const file of files) {\n const resolvedFilePath = resolve(canonicalPath, file.path)\n const relativePath = relative(canonicalPath, resolvedFilePath)\n if (relativePath.startsWith('..') || resolve(resolvedFilePath) !== resolvedFilePath) {\n continue\n }\n\n const dir = dirname(resolvedFilePath)\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true })\n }\n writeFileSync(resolvedFilePath, file.content, 'utf-8')\n }\n\n // Step 2: Create symlinks from each agent's skill path to the canonical directory\n createAgentSymlinks(projectRoot, name, agents, scope)\n}\n\nexport function registerInstallCommand(program: Command): void {\n program\n .command('install <source>')\n .description('Install a skill from a Git repository or well-known domain')\n .option('--agent <agent>', 'Target specific agent')\n .option('--global', 'Install globally')\n .option('--dry-run', 'Show what would be installed without making changes')\n .option('--path <path>', 'Override placement path (relative to cwd or absolute)')\n .option('--no-detect', 'Skip agent auto-detection (requires --agent)')\n .option('--skip-audit', 'Skip the security scan')\n .action(async (source: string, options: InstallOptions) => {\n await installPackage(source, options)\n })\n}\n","import { createHash } from 'node:crypto'\nimport { hostname } from 'node:os'\nimport type { GitSource } from '@agentver/shared'\nimport { getCredentials } from './auth.js'\nimport { getPlatformUrl } from './config.js'\n\nconst REPORT_TIMEOUT_MS = 5_000\n\nfunction getMachineId(): string {\n return createHash('sha256').update(hostname()).digest('hex')\n}\n\nasync function getAuthHeaders(): Promise<Record<string, string> | null> {\n const creds = await getCredentials()\n if (!creds) return null\n\n if (creds.token) {\n return { Authorization: `Bearer ${creds.token}` }\n }\n\n if (creds.apiKey) {\n return { 'X-API-Key': creds.apiKey }\n }\n\n return null\n}\n\nexport function reportInstallation(\n packageName: string,\n source: GitSource,\n agents: string[],\n commitSha: string\n): void {\n const platformUrl = getPlatformUrl()\n if (!platformUrl) return\n\n void (async () => {\n try {\n const authHeaders = await getAuthHeaders()\n if (!authHeaders) return\n\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), REPORT_TIMEOUT_MS)\n\n await fetch(`${platformUrl}/api/v1/installations`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...authHeaders,\n },\n body: JSON.stringify({\n packageSlug: packageName,\n source: {\n uri: source.uri,\n path: source.path,\n ref: source.ref,\n commit: commitSha,\n },\n agents,\n machineId: getMachineId(),\n modified: false,\n }),\n signal: controller.signal,\n })\n\n clearTimeout(timeoutId)\n } catch {\n // Silent — fire-and-forget\n }\n })()\n}\n\nexport function reportRemoval(packageName: string): void {\n const platformUrl = getPlatformUrl()\n if (!platformUrl) return\n\n void (async () => {\n try {\n const authHeaders = await getAuthHeaders()\n if (!authHeaders) return\n\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), REPORT_TIMEOUT_MS)\n\n await fetch(`${platformUrl}/api/v1/installations/${encodeURIComponent(packageName)}`, {\n method: 'DELETE',\n headers: authHeaders,\n signal: controller.signal,\n })\n\n clearTimeout(timeoutId)\n } catch {\n // Silent — fire-and-forget\n }\n })()\n}\n","import { AgentverError } from '@agentver/shared'\nimport { z } from 'zod'\nimport type { WellKnownFetchResult, WellKnownIndex, WellKnownIndexEntry } from './types.js'\n\nconst EXCLUDED_HOSTS = new Set(['github.com', 'gitlab.com', 'bitbucket.org'])\n\nconst INDEX_TIMEOUT_MS = 10_000\nconst FILE_TIMEOUT_MS = 5_000\n\nconst wellKnownIndexSchema = z.object({\n skills: z\n .array(\n z.object({\n name: z\n .string()\n .min(1)\n .max(64)\n .regex(/^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/),\n description: z.string().min(1).max(1024),\n files: z.array(z.string().min(1)).min(1),\n })\n )\n .min(1),\n})\n\n/**\n * Determines whether the given source string looks like a well-known URL\n * (i.e. a bare domain or domain/skill-name) rather than a git URL or short name.\n */\nexport function looksLikeWellKnownUrl(source: string): boolean {\n const cleaned = source.replace(/^https?:\\/\\//, '').replace(/\\/$/, '')\n const segments = cleaned.split('/').filter(Boolean)\n\n if (segments.length === 0 || segments.length > 2) {\n return false\n }\n\n const host = segments[0]!\n\n // Must contain a dot (it's a domain)\n if (!host.includes('.')) {\n return false\n }\n\n // Exclude known git hosts\n if (EXCLUDED_HOSTS.has(host.toLowerCase())) {\n return false\n }\n\n // Must NOT end with .git\n if (cleaned.endsWith('.git')) {\n return false\n }\n\n return true\n}\n\n/**\n * Parses a well-known source string into a baseUrl and optional skill name.\n *\n * - `example.com` -> `{ baseUrl: 'https://example.com' }`\n * - `example.com/my-skill` -> `{ baseUrl: 'https://example.com', skillName: 'my-skill' }`\n * - `https://example.com/my-skill` -> same\n */\nexport function parseWellKnownSource(source: string): {\n baseUrl: string\n skillName?: string\n} {\n const cleaned = source.replace(/^https?:\\/\\//, '').replace(/\\/$/, '')\n const segments = cleaned.split('/').filter(Boolean)\n\n const host = segments[0]!\n const baseUrl = `https://${host}`\n\n if (segments.length >= 2) {\n return { baseUrl, skillName: segments[1] }\n }\n\n return { baseUrl }\n}\n\n/**\n * Fetches and validates the well-known skills index from a domain.\n * Always uses HTTPS (auto-upgrades http).\n */\nexport async function fetchWellKnownIndex(baseUrl: string): Promise<WellKnownIndex> {\n const httpsUrl = baseUrl.replace(/^http:\\/\\//, 'https://')\n const indexUrl = `${httpsUrl}/.well-known/skills/index.json`\n\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), INDEX_TIMEOUT_MS)\n\n let response: Response\n try {\n response = await fetch(indexUrl, {\n signal: controller.signal,\n headers: { Accept: 'application/json' },\n })\n clearTimeout(timeoutId)\n } catch (error) {\n clearTimeout(timeoutId)\n throw new AgentverError(\n 'INTERNAL_ERROR',\n `Failed to fetch well-known index from ${indexUrl}: ${String(error)}`\n )\n }\n\n if (!response.ok) {\n throw new AgentverError(\n 'NOT_FOUND',\n `No well-known skills index found at ${indexUrl} (HTTP ${String(response.status)})`\n )\n }\n\n const raw: unknown = await response.json()\n const result = wellKnownIndexSchema.safeParse(raw)\n\n if (!result.success) {\n throw new AgentverError(\n 'VALIDATION_ERROR',\n `Invalid well-known skills index at ${indexUrl}: ${result.error.message}`\n )\n }\n\n return result.data\n}\n\n/**\n * Validates a file path for path traversal attacks.\n * Rejects paths containing `..`, leading `/` or `\\`.\n */\nfunction validateFilePath(filePath: string): boolean {\n if (filePath.includes('..')) return false\n if (filePath.startsWith('/')) return false\n if (filePath.startsWith('\\\\')) return false\n if (filePath.includes('\\\\')) return false\n return true\n}\n\n/**\n * Fetches all files for a single well-known skill entry.\n */\nexport async function fetchWellKnownSkill(\n baseUrl: string,\n entry: WellKnownIndexEntry\n): Promise<WellKnownFetchResult> {\n const httpsUrl = baseUrl.replace(/^http:\\/\\//, 'https://')\n const hostname = new URL(httpsUrl).hostname\n const files: Array<{ path: string; content: string; size: number }> = []\n\n for (const filePath of entry.files) {\n if (!validateFilePath(filePath)) {\n throw new AgentverError(\n 'VALIDATION_ERROR',\n `Unsafe file path in well-known skill \"${entry.name}\": ${filePath}`\n )\n }\n\n const fileUrl = `${httpsUrl}/.well-known/skills/${entry.name}/${filePath}`\n\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), FILE_TIMEOUT_MS)\n\n let response: Response\n try {\n response = await fetch(fileUrl, { signal: controller.signal })\n clearTimeout(timeoutId)\n } catch (error) {\n clearTimeout(timeoutId)\n throw new AgentverError(\n 'INTERNAL_ERROR',\n `Failed to fetch file ${filePath} from ${fileUrl}: ${String(error)}`\n )\n }\n\n if (!response.ok) {\n throw new AgentverError(\n 'NOT_FOUND',\n `File not found: ${fileUrl} (HTTP ${String(response.status)})`\n )\n }\n\n const content = await response.text()\n files.push({\n path: filePath,\n content,\n size: Buffer.byteLength(content, 'utf-8'),\n })\n }\n\n return {\n name: entry.name,\n description: entry.description,\n files,\n sourceUrl: `${httpsUrl}/.well-known/skills/${entry.name}`,\n hostname,\n }\n}\n","import type { ListResult } from '@agentver/shared'\nimport chalk from 'chalk'\nimport type { Command } from 'commander'\nimport { isJSONMode, outputSuccess } from '../output.js'\nimport { readManifest } from '../storage/manifest'\n\nexport function registerListCommand(program: Command): void {\n program\n .command('list')\n .description('Show installed packages')\n .option('--json', 'Output as JSON')\n .action(() => {\n const jsonMode = isJSONMode()\n const manifest = readManifest(process.cwd())\n const entries = Object.entries(manifest.packages)\n\n if (jsonMode) {\n outputSuccess<ListResult>({ packages: manifest.packages })\n return\n }\n\n if (entries.length === 0) {\n console.log(chalk.dim('No packages installed.'))\n return\n }\n\n console.log(chalk.bold(`\\nInstalled packages (${entries.length}):\\n`))\n\n for (const [name, pkg] of entries) {\n const agents = pkg.agents.length > 0 ? chalk.dim(` [${pkg.agents.join(', ')}]`) : ''\n const pinned = pkg.pinned === true ? chalk.yellow(' [pinned]') : ''\n\n if (pkg.source.type === 'git') {\n const ref = pkg.source.ref\n const commit = pkg.source.commit.slice(0, 7)\n console.log(\n ` ${chalk.green(name)}@${chalk.cyan(ref)} ${chalk.dim(`(${commit})`)}${pinned}${agents}`\n )\n } else {\n const hostname = pkg.source.hostname\n console.log(\n ` ${chalk.green(name)} ${chalk.dim(`(${hostname})`)} ${chalk.dim('[well-known]')}${pinned}${agents}`\n )\n }\n }\n\n console.log()\n })\n}\n","import { existsSync, readFileSync } from 'node:fs'\nimport { basename, join } from 'node:path'\nimport chalk from 'chalk'\nimport type { Command } from 'commander'\nimport ora from 'ora'\nimport { platformFetch } from '../registry/platform.js'\nimport { readManifest } from '../storage/manifest.js'\n\ntype CommitEntry = {\n sha: string\n message: string\n author: { name: string; email: string; date: string }\n createdAt: string\n}\n\ntype LogOptions = {\n limit?: string\n json?: boolean\n}\n\n/**\n * Resolve the skill identity from a name argument or the current directory.\n */\nfunction resolveSkillIdentity(nameArg?: string): { org: string; name: string } | null {\n const cwd = process.cwd()\n const manifest = readManifest(cwd)\n\n // If a name was provided, look it up in the manifest\n if (nameArg) {\n const entry = manifest.packages[nameArg]\n if (entry?.source.type === 'git') {\n const parts = entry.source.uri.split('/')\n const org = parts.length >= 2 ? parts[parts.length - 2] : parts[0]\n if (org) {\n return { org, name: nameArg }\n }\n }\n return null\n }\n\n // No name provided — detect from current directory\n const skillMdPath = join(cwd, 'SKILL.md')\n let skillName: string | null = null\n\n if (existsSync(skillMdPath)) {\n const content = readFileSync(skillMdPath, 'utf-8')\n const nameMatch = content.match(/^name:\\s*(.+)$/m)\n skillName = nameMatch?.[1]?.trim() ?? basename(cwd)\n }\n\n if (!skillName) {\n skillName = basename(cwd)\n }\n\n const entry = manifest.packages[skillName]\n if (entry?.source.type === 'git') {\n const parts = entry.source.uri.split('/')\n const org = parts.length >= 2 ? parts[parts.length - 2] : parts[0]\n if (org) {\n return { org, name: skillName }\n }\n }\n\n // Fallback: directory structure\n const pathParts = cwd.split('/')\n const skillsIdx = pathParts.lastIndexOf('skills')\n if (skillsIdx >= 0 && pathParts.length > skillsIdx + 2) {\n return { org: pathParts[skillsIdx + 1]!, name: skillName }\n }\n\n return null\n}\n\nfunction formatDate(dateStr: string): string {\n try {\n const date = new Date(dateStr)\n return date.toLocaleDateString('en-GB', {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n })\n } catch {\n return dateStr\n }\n}\n\nexport function registerLogCommand(program: Command): void {\n program\n .command('log [name]')\n .description('Show commit history for a skill')\n .option('--limit <n>', 'Number of entries to show', '20')\n .option('--json', 'Output as JSON')\n .action(async (nameArg: string | undefined, options: LogOptions) => {\n const identity = resolveSkillIdentity(nameArg)\n\n if (!identity) {\n const target = nameArg ?? 'current directory'\n process.stderr.write(\n chalk.red(\n `Could not determine skill identity for \"${target}\". Provide a skill name or run from a skill directory.\\n`\n )\n )\n process.exit(1)\n }\n\n const limit = Number.parseInt(options.limit ?? '20', 10)\n if (Number.isNaN(limit) || limit < 1) {\n process.stderr.write(chalk.red('Limit must be a positive number.\\n'))\n process.exit(1)\n }\n\n const spinner = ora('Fetching history...').start()\n\n try {\n const params = new URLSearchParams({ limit: String(limit) })\n const commits = await platformFetch<CommitEntry[]>(\n `/skills/@${identity.org}/${identity.name}/history?${params.toString()}`\n )\n\n spinner.stop()\n\n if (options.json) {\n console.log(JSON.stringify({ commits }, null, 2))\n return\n }\n\n if (commits.length === 0) {\n process.stdout.write(chalk.dim('No commits found.\\n'))\n return\n }\n\n process.stdout.write(chalk.bold(`\\nHistory for @${identity.org}/${identity.name}:\\n\\n`))\n\n for (const commit of commits) {\n const shortSha = commit.sha.slice(0, 7)\n const date = formatDate(commit.author.date || commit.createdAt)\n const firstLine = commit.message.split('\\n')[0] ?? commit.message\n\n process.stdout.write(\n ` ${chalk.yellow(shortSha)} ${chalk.dim('|')} ${chalk.dim(date)} ${chalk.dim('|')} ${firstLine}\\n`\n )\n }\n\n process.stdout.write('\\n')\n } catch (error) {\n spinner.fail(\n `Failed to fetch history: ${error instanceof Error ? error.message : String(error)}`\n )\n process.exit(1)\n }\n })\n}\n","import { createHash, randomBytes } from 'node:crypto'\nimport { createServer } from 'node:http'\nimport { URL } from 'node:url'\nimport type { LoginResult } from '@agentver/shared'\nimport chalk from 'chalk'\nimport type { Command } from 'commander'\nimport open from 'open'\nimport { createSpinner, isJSONMode, outputError, outputSuccess } from '../output.js'\nimport { saveCredentials } from '../registry/auth.js'\nimport { getRegistryUrl } from '../registry/client.js'\nimport { getPlatformUrl, readConfig, writeConfig } from '../registry/config.js'\nimport { checkOnline, showOfflineError } from '../utils/network.js'\n\nconst AUTH_TIMEOUT_MS = 120_000\n\nfunction generateCodeVerifier(): string {\n return randomBytes(32).toString('base64url')\n}\n\nfunction generateCodeChallenge(verifier: string): string {\n return createHash('sha256').update(verifier).digest('base64url')\n}\n\nfunction generateState(): string {\n return randomBytes(16).toString('hex')\n}\n\ntype TokenResponse = {\n access_token: string\n token_type: string\n}\n\ntype CallbackResult = {\n code: string\n returnedState: string\n}\n\nfunction startCallbackServer(expectedState: string): Promise<{\n port: number\n waitForCallback: () => Promise<CallbackResult>\n close: () => void\n}> {\n return new Promise((resolve, reject) => {\n let callbackResolve: (result: CallbackResult) => void\n let callbackReject: (error: Error) => void\n\n const callbackPromise = new Promise<CallbackResult>((res, rej) => {\n callbackResolve = res\n callbackReject = rej\n })\n\n const server = createServer((req, res) => {\n if (!req.url?.startsWith('/callback')) {\n res.writeHead(404, { 'Content-Type': 'text/plain' })\n res.end('Not found')\n return\n }\n\n const url = new URL(req.url, `http://localhost`)\n const code = url.searchParams.get('code')\n const returnedState = url.searchParams.get('state')\n const error = url.searchParams.get('error')\n\n if (error) {\n res.writeHead(200, { 'Content-Type': 'text/html' })\n res.end(authResultPage(false, `Authentication failed: ${error}`))\n callbackReject(new Error(`Authentication failed: ${error}`))\n return\n }\n\n if (!code || !returnedState) {\n res.writeHead(400, { 'Content-Type': 'text/html' })\n res.end(authResultPage(false, 'Missing code or state parameter.'))\n callbackReject(new Error('Missing code or state parameter in callback'))\n return\n }\n\n if (returnedState !== expectedState) {\n res.writeHead(400, { 'Content-Type': 'text/html' })\n res.end(authResultPage(false, 'State mismatch — possible CSRF attack.'))\n callbackReject(new Error('State mismatch — possible CSRF attack'))\n return\n }\n\n res.writeHead(200, { 'Content-Type': 'text/html' })\n res.end(authResultPage(true, 'Authentication successful! You can close this tab.'))\n callbackResolve({ code, returnedState })\n })\n\n server.on('error', (err) => {\n reject(new Error(`Failed to start callback server: ${err.message}`))\n })\n\n server.listen(0, '127.0.0.1', () => {\n const address = server.address()\n if (!address || typeof address === 'string') {\n reject(new Error('Failed to determine callback server port'))\n return\n }\n\n resolve({\n port: address.port,\n waitForCallback: () => callbackPromise,\n close: () => {\n server.closeAllConnections()\n server.close()\n },\n })\n })\n })\n}\n\nfunction authResultPage(success: boolean, message: string): string {\n const colour = success ? '#22c55e' : '#ef4444'\n const icon = success ? '✓' : '✗'\n return `<!DOCTYPE html>\n<html>\n<head><title>Agentver CLI</title></head>\n<body style=\"font-family:system-ui,sans-serif;display:flex;justify-content:center;align-items:center;height:100vh;margin:0;background:#0a0a0a;color:#fafafa;\">\n <div style=\"text-align:center;\">\n <div style=\"font-size:3rem;color:${colour};\">${icon}</div>\n <p style=\"font-size:1.1rem;margin-top:1rem;\">${message}</p>\n </div>\n</body>\n</html>`\n}\n\nasync function exchangeCodeForToken(\n registryUrl: string,\n code: string,\n codeVerifier: string,\n redirectUri: string\n): Promise<TokenResponse> {\n const tokenUrl = `${registryUrl.replace('/api/v1', '')}/auth/token`\n\n const response = await fetch(tokenUrl, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n grant_type: 'authorization_code',\n code,\n code_verifier: codeVerifier,\n redirect_uri: redirectUri,\n }),\n })\n\n if (!response.ok) {\n const errorBody = await response.text().catch(() => 'Unknown error')\n throw new Error(`Token exchange failed (${response.status}): ${errorBody}`)\n }\n\n return response.json() as Promise<TokenResponse>\n}\n\nfunction resolveBaseUrl(urlArg: string | undefined): string {\n if (urlArg) return urlArg\n const configured = getPlatformUrl()\n if (configured) return configured\n return getRegistryUrl().replace('/api/v1', '')\n}\n\nfunction resolveApiUrl(urlArg: string | undefined): string {\n if (urlArg) return `${urlArg}/api/v1`\n const configured = getPlatformUrl()\n if (configured) return `${configured}/api/v1`\n return getRegistryUrl()\n}\n\nexport function registerLoginCommand(program: Command): void {\n program\n .command('login')\n .description('Authenticate with the Agentver registry')\n .argument('[url]', 'Platform URL')\n .option('--token <key>', 'API key for CI/CD authentication')\n .action(async (url: string | undefined, options: { token?: string }) => {\n if (url) {\n writeConfig({ ...readConfig(), platformUrl: url })\n }\n\n if (options.token) {\n saveCredentials({ apiKey: options.token })\n const target = url ?? getPlatformUrl()\n\n if (isJSONMode()) {\n outputSuccess<LoginResult>({\n user: { id: '', email: '', name: '' },\n })\n return\n }\n\n console.log(chalk.green('Saved API key. You are now authenticated.'))\n if (target) {\n console.log(chalk.dim(`Connected to ${target}`))\n }\n return\n }\n\n if (!(await checkOnline())) {\n if (isJSONMode()) {\n outputError('OFFLINE', 'Unable to reach the Agentver registry')\n process.exit(1)\n }\n showOfflineError()\n process.exit(1)\n }\n\n if (isJSONMode()) {\n outputError(\n 'INTERACTIVE_REQUIRED',\n 'OAuth login requires an interactive terminal. Use --token for non-interactive authentication.'\n )\n process.exit(1)\n }\n\n const baseUrl = resolveBaseUrl(url)\n const apiUrl = resolveApiUrl(url)\n const codeVerifier = generateCodeVerifier()\n const codeChallenge = generateCodeChallenge(codeVerifier)\n const state = generateState()\n\n const spinner = createSpinner('Starting authentication...').start()\n\n let callbackServer: Awaited<ReturnType<typeof startCallbackServer>> | undefined\n\n const cleanup = (): void => {\n callbackServer?.close()\n }\n\n process.on('SIGINT', () => {\n cleanup()\n spinner.fail('Authentication cancelled.')\n process.exit(1)\n })\n\n try {\n callbackServer = await startCallbackServer(state)\n const { port } = callbackServer\n const redirectUri = `http://localhost:${port}/callback`\n\n const authUrl =\n `${baseUrl}/auth/cli` +\n `?code_challenge=${encodeURIComponent(codeChallenge)}` +\n `&state=${encodeURIComponent(state)}` +\n `&redirect_uri=${encodeURIComponent(redirectUri)}`\n\n spinner.text = 'Opening browser for authentication...'\n console.log(chalk.dim(`\\n If the browser doesn't open, visit:\\n ${authUrl}\\n`))\n\n await open(authUrl)\n\n spinner.text = 'Waiting for authentication in browser...'\n\n let authTimeout: ReturnType<typeof setTimeout> | undefined\n const { code } = await Promise.race([\n callbackServer.waitForCallback(),\n new Promise<never>((_resolve, reject) => {\n authTimeout = setTimeout(() => {\n reject(new Error('Authentication timed out after 120 seconds'))\n }, AUTH_TIMEOUT_MS)\n }),\n ])\n clearTimeout(authTimeout)\n\n spinner.text = 'Exchanging authorisation code for token...'\n\n const tokenResponse = await exchangeCodeForToken(apiUrl, code, codeVerifier, redirectUri)\n\n saveCredentials({ token: tokenResponse.access_token })\n spinner.succeed('Authenticated successfully.')\n\n const connectedUrl = url ?? getPlatformUrl()\n if (connectedUrl) {\n console.log(chalk.dim(`Connected to ${connectedUrl}`))\n }\n\n process.exit(0)\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n spinner.fail(`Authentication failed: ${message}`)\n process.exit(1)\n } finally {\n cleanup()\n }\n })\n}\n","import { getCredentials } from './auth'\nimport { fetchWithRetry } from '../utils/retry'\n\nconst DEFAULT_REGISTRY = 'https://app.agentver.com/api/v1'\nconst REQUEST_TIMEOUT_MS = 30_000\n\nexport { RequestTimeoutError as RegistryTimeoutError } from '../utils/retry'\n\ntype RequestOptions = {\n method?: string\n body?: unknown\n headers?: Record<string, string>\n}\n\nexport function getRegistryUrl(): string {\n return process.env.AGENTVER_REGISTRY ?? DEFAULT_REGISTRY\n}\n\nexport async function registryFetch<T>(path: string, options: RequestOptions = {}): Promise<T> {\n const credentials = await getCredentials()\n const url = `${getRegistryUrl()}${path}`\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n ...options.headers,\n }\n\n if (credentials?.token) {\n headers.Authorization = `Bearer ${credentials.token}`\n } else if (credentials?.apiKey) {\n headers['X-API-Key'] = credentials.apiKey\n }\n\n return fetchWithRetry<T>({\n label: 'Registry',\n timeoutMs: REQUEST_TIMEOUT_MS,\n buildRequest: () => ({\n url,\n method: options.method ?? 'GET',\n headers,\n body: options.body ? JSON.stringify(options.body) : undefined,\n }),\n onAuthExpired: () => {\n throw new Error('Authentication expired. Run `agentver login` to re-authenticate.')\n },\n })\n}\n","import chalk from 'chalk'\nimport { getRegistryUrl } from '../registry/client'\n\nconst ONLINE_CHECK_TIMEOUT_MS = 3_000\n\nexport async function checkOnline(): Promise<boolean> {\n const registryUrl = getRegistryUrl()\n const healthUrl = `${registryUrl}/health`\n\n try {\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), ONLINE_CHECK_TIMEOUT_MS)\n\n const response = await fetch(healthUrl, {\n method: 'HEAD',\n signal: controller.signal,\n })\n\n clearTimeout(timeoutId)\n return response.ok\n } catch {\n return false\n }\n}\n\nexport function showOfflineError(): void {\n console.error(\n chalk.red('Unable to reach the Agentver registry.') +\n ' Please check your internet connection.\\n'\n )\n console.error(\n chalk.dim(\n `If you're behind a proxy, set the HTTPS_PROXY environment variable.\\n` +\n `If the registry is down, try again later.\\n\\n` +\n `Some commands work offline: list, info (cached packages only)`\n )\n )\n}\n","import type { LogoutResult } from '@agentver/shared'\nimport chalk from 'chalk'\nimport type { Command } from 'commander'\nimport { isJSONMode, outputSuccess } from '../output.js'\nimport { clearCredentials, isAuthenticated } from '../registry/auth.js'\nimport { getPlatformUrl, readConfig, writeConfig } from '../registry/config.js'\n\nexport function registerLogoutCommand(program: Command): void {\n program\n .command('logout')\n .description('Log out from the Agentver registry')\n .action(async () => {\n if (!(await isAuthenticated())) {\n if (isJSONMode()) {\n outputSuccess<LogoutResult>({ cleared: true })\n return\n }\n console.log(chalk.dim('You are not currently logged in.'))\n return\n }\n\n const platformUrl = getPlatformUrl()\n\n clearCredentials()\n\n if (platformUrl) {\n const config = readConfig()\n delete config.platformUrl\n writeConfig(config)\n }\n\n if (isJSONMode()) {\n outputSuccess<LogoutResult>({ cleared: true })\n return\n }\n\n if (platformUrl) {\n console.log(`${chalk.green('Logged out successfully.')} Disconnected from ${platformUrl}`)\n } else {\n console.log(\n `${chalk.green('Logged out successfully.')} Run \\`agentver login\\` to sign in again.`\n )\n }\n })\n}\n","import chalk from 'chalk'\nimport type { Command } from 'commander'\nimport { isJSONMode, outputError, outputSuccess } from '../output.js'\nimport { readManifest, writeManifest } from '../storage/manifest'\n\nexport function registerPinCommand(program: Command): void {\n program\n .command('pin <name>')\n .description('Pin a package to skip it during updates')\n .action((name: string) => {\n const jsonMode = isJSONMode()\n const projectRoot = process.cwd()\n const manifest = readManifest(projectRoot)\n const pkg = manifest.packages[name]\n\n if (!pkg) {\n if (jsonMode) {\n outputError('NOT_FOUND', `Package \"${name}\" is not installed.`)\n } else {\n console.error(chalk.red(`Package \"${name}\" is not installed.`))\n }\n process.exit(1)\n }\n\n pkg.pinned = true\n writeManifest(projectRoot, manifest)\n\n if (jsonMode) {\n outputSuccess({ name, pinned: true })\n return\n }\n\n console.log(\n chalk.green(`Pinned ${name}`) + chalk.dim(' — this package will be skipped during updates')\n )\n })\n}\n\nexport function registerUnpinCommand(program: Command): void {\n program\n .command('unpin <name>')\n .description('Unpin a package so it is included in updates')\n .action((name: string) => {\n const jsonMode = isJSONMode()\n const projectRoot = process.cwd()\n const manifest = readManifest(projectRoot)\n const pkg = manifest.packages[name]\n\n if (!pkg) {\n if (jsonMode) {\n outputError('NOT_FOUND', `Package \"${name}\" is not installed.`)\n } else {\n console.error(chalk.red(`Package \"${name}\" is not installed.`))\n }\n process.exit(1)\n }\n\n delete pkg.pinned\n writeManifest(projectRoot, manifest)\n\n if (jsonMode) {\n outputSuccess({ name, pinned: false })\n return\n }\n\n console.log(\n chalk.green(`Unpinned ${name}`) + chalk.dim(' — this package will be included in updates')\n )\n })\n}\n","import { existsSync, readFileSync } from 'node:fs'\nimport { basename, join, resolve } from 'node:path'\nimport chalk from 'chalk'\nimport type { Command } from 'commander'\nimport ora from 'ora'\nimport { readFilesFromDirectory } from '../git/fetcher.js'\nimport type { GitSource } from '../git/types.js'\nimport { platformFetch } from '../registry/platform.js'\nimport { scanFiles } from '../security/index.js'\n\ntype PublishOptions = {\n version?: string\n dryRun?: boolean\n skipAudit?: boolean\n json?: boolean\n}\n\ntype PublishResponse = {\n version: string\n commitSha: string\n}\n\ntype SkillFrontmatter = {\n name: string\n description: string\n version: string\n}\n\nconst SEMVER_REGEX = /^\\d+\\.\\d+\\.\\d+(-[\\w.]+)?$/\n\n/**\n * Parse YAML-like frontmatter from a SKILL.md file.\n * Intentionally simple — handles the common key: value format.\n */\nfunction parseFrontmatter(content: string): SkillFrontmatter | null {\n const fmMatch = content.match(/^---\\n([\\s\\S]*?)\\n---/)\n if (!fmMatch?.[1]) return null\n\n const lines = fmMatch[1].split('\\n')\n const data: Record<string, string> = {}\n\n for (const line of lines) {\n const colonIdx = line.indexOf(':')\n if (colonIdx === -1) continue\n const key = line.slice(0, colonIdx).trim()\n const value = line.slice(colonIdx + 1).trim()\n if (key && value) {\n data[key] = value\n }\n }\n\n if (!data.name || !data.description || !data.version) {\n return null\n }\n\n return {\n name: data.name,\n description: data.description,\n version: data.version,\n }\n}\n\n/**\n * Detect the org/namespace from the skill directory context.\n * Uses the directory structure or manifest to determine the namespace.\n */\nfunction detectNamespace(skillDir: string): { org: string; name: string } | null {\n const skillMdPath = join(skillDir, 'SKILL.md')\n if (!existsSync(skillMdPath)) return null\n\n const content = readFileSync(skillMdPath, 'utf-8')\n const fm = parseFrontmatter(content)\n if (!fm) return null\n\n // Try to extract org from directory structure (e.g. .agentver/skills/org/name)\n const parts = skillDir.split('/')\n const skillsIdx = parts.lastIndexOf('skills')\n if (skillsIdx >= 0 && parts.length > skillsIdx + 2) {\n return { org: parts[skillsIdx + 1]!, name: fm.name }\n }\n\n // Fall back to using the parent directory as org\n const parentDir = basename(resolve(skillDir, '..'))\n return { org: parentDir, name: fm.name }\n}\n\nexport function registerPublishCommand(program: Command): void {\n program\n .command('publish [path]')\n .description('Publish a skill to the registry')\n .option('--version <semver>', 'Version to publish (uses frontmatter version if omitted)')\n .option('--dry-run', 'Validate without publishing')\n .option('--skip-audit', 'Skip security scan')\n .option('--json', 'Output as JSON')\n .action(async (pathArg: string | undefined, options: PublishOptions) => {\n const skillDir = pathArg ? resolve(process.cwd(), pathArg) : process.cwd()\n\n if (!existsSync(join(skillDir, 'SKILL.md'))) {\n process.stderr.write(\n chalk.red(`No SKILL.md found in ${skillDir}. Cannot publish without a skill manifest.\\n`)\n )\n process.exit(1)\n }\n\n const spinner = ora('Reading skill metadata...').start()\n\n try {\n // Parse frontmatter\n const skillMdContent = readFileSync(join(skillDir, 'SKILL.md'), 'utf-8')\n const frontmatter = parseFrontmatter(skillMdContent)\n\n if (!frontmatter) {\n spinner.fail(\n 'Invalid SKILL.md frontmatter. Ensure name, description, and version are set.'\n )\n process.exit(1)\n }\n\n const version = options.version ?? frontmatter.version\n if (!SEMVER_REGEX.test(version)) {\n spinner.fail(`Invalid version \"${version}\". Must be valid semver (e.g. 1.0.0).`)\n process.exit(1)\n }\n\n const namespace = detectNamespace(skillDir)\n if (!namespace) {\n spinner.fail(\n 'Could not determine skill namespace. Check SKILL.md and directory structure.'\n )\n process.exit(1)\n }\n\n // Read all files\n spinner.text = 'Reading skill files...'\n const localFiles = await readFilesFromDirectory(skillDir)\n\n if (localFiles.length === 0) {\n spinner.fail('No files found in skill directory.')\n process.exit(1)\n }\n\n // Security audit\n if (!options.skipAudit) {\n spinner.text = 'Running security audit...'\n\n // Create a minimal GitSource for the scanner\n const scanSource: GitSource = {\n host: 'generic',\n owner: namespace.org,\n repo: namespace.name,\n path: '',\n ref: 'local',\n }\n\n const scanResult = await scanFiles(localFiles, scanSource, {\n skipAudit: false,\n })\n\n if (scanResult.verdict === 'BLOCK') {\n spinner.fail('Security audit failed. Fix the issues before publishing.')\n for (const finding of scanResult.findings) {\n process.stderr.write(\n ` ${chalk.red('BLOCK')} ${finding.file}:${String(finding.line ?? '?')} — ${finding.message}\\n`\n )\n }\n process.exit(1)\n }\n\n if (scanResult.verdict === 'WARN') {\n spinner.warn('Security audit warnings found:')\n for (const finding of scanResult.findings) {\n process.stderr.write(\n ` ${chalk.yellow('WARN')} ${finding.file}:${String(finding.line ?? '?')} — ${finding.message}\\n`\n )\n }\n spinner.start('Continuing...')\n }\n }\n\n const filesToPublish = localFiles.map((f) => ({\n path: f.path,\n content: f.content,\n }))\n\n if (options.dryRun) {\n spinner.stop()\n\n if (options.json) {\n console.log(\n JSON.stringify(\n {\n dryRun: true,\n skill: `@${namespace.org}/${namespace.name}`,\n version,\n files: filesToPublish.map((f) => f.path),\n frontmatter,\n },\n null,\n 2\n )\n )\n } else {\n process.stdout.write(\n chalk.yellow('[dry-run]') +\n ` Would publish ${chalk.green(frontmatter.name)}@${chalk.cyan(version)}\\n`\n )\n process.stdout.write(chalk.dim(` Namespace: @${namespace.org}/${namespace.name}\\n`))\n process.stdout.write(\n chalk.dim(\n ` Files (${filesToPublish.length}): ${filesToPublish.map((f) => f.path).join(', ')}\\n`\n )\n )\n }\n return\n }\n\n spinner.text = `Publishing ${frontmatter.name}@${version}...`\n\n const result = await platformFetch<PublishResponse>(\n `/skills/@${namespace.org}/${namespace.name}/publish`,\n {\n method: 'POST',\n body: {\n files: filesToPublish,\n version,\n },\n }\n )\n\n if (options.json) {\n console.log(\n JSON.stringify(\n {\n skill: `@${namespace.org}/${namespace.name}`,\n version: result.version,\n commitSha: result.commitSha,\n },\n null,\n 2\n )\n )\n } else {\n spinner.succeed(\n `Published ${chalk.green(frontmatter.name)}@${chalk.cyan(result.version)} ${chalk.dim(`(${result.commitSha.slice(0, 7)})`)}`\n )\n }\n } catch (error) {\n spinner.fail(`Failed to publish: ${error instanceof Error ? error.message : String(error)}`)\n process.exit(1)\n }\n })\n}\n","import { existsSync, lstatSync, rmSync } from 'node:fs'\nimport { join } from 'node:path'\nimport { type AgentId, getSkillPlacementPath } from '@agentver/agent-definitions'\nimport type { RemoveResult } from '@agentver/shared'\nimport chalk from 'chalk'\nimport type { Command } from 'commander'\nimport { createSpinner, isJSONMode, outputError, outputSuccess } from '../output.js'\nimport { reportRemoval } from '../registry/reporter.js'\nimport {\n getCanonicalSkillPath,\n isSymlinkedInstall,\n removeAgentSymlinks,\n removeCanonicalDirectory,\n} from '../storage/canonical'\nimport { readLockfile, writeLockfile } from '../storage/lockfile'\nimport { readManifest, writeManifest } from '../storage/manifest'\n\nexport function registerRemoveCommand(program: Command): void {\n program\n .command('remove <name>')\n .alias('uninstall')\n .description('Remove an installed package')\n .option('--dry-run', 'Show what would be removed without making changes')\n .action(async (name: string, options: { dryRun?: boolean }) => {\n const jsonMode = isJSONMode()\n const projectRoot = process.cwd()\n const manifest = readManifest(projectRoot)\n\n const pkg = manifest.packages[name]\n if (!pkg) {\n if (jsonMode) {\n outputError('NOT_FOUND', `Package \"${name}\" is not installed.`)\n process.exit(1)\n }\n console.error(chalk.red(`Package \"${name}\" is not installed.`))\n process.exit(1)\n }\n\n const shortName = name.split('/').pop()!\n const hasCanonical = isSymlinkedInstall(projectRoot, shortName)\n\n const removedPaths: string[] = []\n\n if (hasCanonical) {\n const canonicalPath = getCanonicalSkillPath(projectRoot, shortName, 'project')\n removedPaths.push(canonicalPath)\n for (const agentId of pkg.agents) {\n const placementPath = getSkillPlacementPath(agentId as AgentId, shortName, 'project')\n if (placementPath) {\n removedPaths.push(join(projectRoot, placementPath))\n }\n }\n } else {\n for (const agentId of pkg.agents) {\n const placementPath = getSkillPlacementPath(agentId as AgentId, shortName, 'project')\n if (!placementPath) continue\n const fullPath = join(projectRoot, placementPath)\n if (existsSync(fullPath)) {\n removedPaths.push(fullPath)\n }\n }\n }\n\n if (options.dryRun) {\n if (jsonMode) {\n outputSuccess<RemoveResult>({\n name,\n removed: false,\n paths: removedPaths,\n })\n return\n }\n\n console.log(`${chalk.yellow('[dry-run]')} Would remove ${chalk.green(name)}`)\n\n if (hasCanonical) {\n const canonicalPath = getCanonicalSkillPath(projectRoot, shortName, 'project')\n console.log(chalk.dim(' Canonical path to remove:'))\n console.log(chalk.dim(` ${canonicalPath}`))\n console.log(chalk.dim(' Agent symlinks to remove:'))\n for (const agentId of pkg.agents) {\n const placementPath = getSkillPlacementPath(agentId as AgentId, shortName, 'project')\n if (placementPath) {\n console.log(chalk.dim(` ${join(projectRoot, placementPath)}`))\n }\n }\n } else {\n const pathsToRemove = removedPaths.filter((p) => existsSync(p))\n if (pathsToRemove.length > 0) {\n console.log(chalk.dim(' Paths to remove:'))\n for (const p of pathsToRemove) {\n console.log(chalk.dim(` ${p}`))\n }\n }\n }\n\n console.log(chalk.dim(' Would update manifest and lockfile'))\n return\n }\n\n const spinner = createSpinner(`Removing ${name}...`).start()\n\n if (hasCanonical) {\n removeAgentSymlinks(projectRoot, shortName, pkg.agents, 'project')\n removeCanonicalDirectory(projectRoot, shortName, 'project')\n } else {\n for (const agentId of pkg.agents) {\n const placementPath = getSkillPlacementPath(agentId as AgentId, shortName, 'project')\n if (!placementPath) continue\n\n const fullPath = join(projectRoot, placementPath)\n if (existsSync(fullPath) || isSymlinkPath(fullPath)) {\n rmSync(fullPath, { recursive: true, force: true })\n }\n }\n }\n\n delete manifest.packages[name]\n writeManifest(projectRoot, manifest)\n\n const lockfile = readLockfile(projectRoot)\n delete lockfile.packages[name]\n writeLockfile(projectRoot, lockfile)\n\n reportRemoval(name)\n\n if (jsonMode) {\n outputSuccess<RemoveResult>({\n name,\n removed: true,\n paths: removedPaths,\n })\n } else {\n spinner.succeed(`Removed ${chalk.green(name)}`)\n }\n })\n}\n\nfunction isSymlinkPath(filePath: string): boolean {\n try {\n return lstatSync(filePath).isSymbolicLink()\n } catch {\n return false\n }\n}\n","import { existsSync, readFileSync } from 'node:fs'\nimport { basename, join, resolve } from 'node:path'\nimport chalk from 'chalk'\nimport type { Command } from 'commander'\nimport ora from 'ora'\nimport { readFilesFromDirectory } from '../git/fetcher.js'\nimport { platformFetch } from '../registry/platform.js'\nimport { readLockfile, writeLockfile } from '../storage/lockfile.js'\nimport { readManifest } from '../storage/manifest.js'\n\ntype SaveOptions = {\n path?: string\n dryRun?: boolean\n json?: boolean\n}\n\ntype SaveResponse = {\n commitSha: string\n}\n\n/**\n * Detect a skill name from the current directory by looking for a SKILL.md\n * frontmatter `name:` field, or falling back to the directory basename.\n */\nfunction detectSkillName(skillDir: string): string | null {\n const skillMdPath = join(skillDir, 'SKILL.md')\n if (!existsSync(skillMdPath)) {\n return null\n }\n\n const content = readFileSync(skillMdPath, 'utf-8')\n const nameMatch = content.match(/^name:\\s*(.+)$/m)\n return nameMatch?.[1]?.trim() ?? basename(skillDir)\n}\n\n/**\n * Resolve the skill directory and name from options or the current directory.\n */\nfunction resolveSkillContext(options: SaveOptions): { skillDir: string; skillName: string } | null {\n const skillDir = options.path ? resolve(process.cwd(), options.path) : process.cwd()\n\n if (!existsSync(skillDir)) {\n return null\n }\n\n const skillName = detectSkillName(skillDir)\n if (!skillName) {\n return null\n }\n\n return { skillDir, skillName }\n}\n\n/**\n * Find the org/namespace for a skill by checking the manifest source.\n */\nfunction findNamespace(\n projectRoot: string,\n skillName: string\n): { org: string; name: string } | null {\n const manifest = readManifest(projectRoot)\n const entry = manifest.packages[skillName]\n\n if (!entry || entry.source.type !== 'git') {\n return null\n }\n\n // Source URI format: host/org/repo or just org from platform\n const parts = entry.source.uri.split('/')\n // The org is typically the second segment (host/org/repo)\n const org = parts.length >= 2 ? parts[parts.length - 2] : parts[0]\n if (!org) return null\n\n return { org, name: skillName }\n}\n\nexport function registerSaveCommand(program: Command): void {\n program\n .command('save [message]')\n .description('Commit local skill changes to the platform')\n .option('--path <path>', 'Path to skill directory')\n .option('--dry-run', 'Show what would be saved without committing')\n .option('--json', 'Output as JSON')\n .action(async (message: string | undefined, options: SaveOptions) => {\n const context = resolveSkillContext(options)\n\n if (!context) {\n const target = options.path ?? process.cwd()\n process.stderr.write(\n chalk.red(`No SKILL.md found in ${target}. Run this from a skill directory.\\n`)\n )\n process.exit(1)\n }\n\n const { skillDir, skillName } = context\n const projectRoot = process.cwd()\n const namespace = findNamespace(projectRoot, skillName)\n\n if (!namespace) {\n process.stderr.write(\n chalk.red(\n `Skill \"${skillName}\" not found in manifest. Install it first or check the directory.\\n`\n )\n )\n process.exit(1)\n }\n\n const spinner = ora('Reading local files...').start()\n\n try {\n const localFiles = await readFilesFromDirectory(skillDir)\n\n if (localFiles.length === 0) {\n spinner.fail('No files found in skill directory.')\n process.exit(1)\n }\n\n const filesToSave = localFiles.map((f) => ({\n path: f.path,\n content: f.content,\n }))\n\n const commitMessage = message ?? `Update skill: ${skillName}`\n\n if (options.dryRun) {\n spinner.stop()\n\n if (options.json) {\n console.log(\n JSON.stringify(\n {\n dryRun: true,\n skill: `@${namespace.org}/${namespace.name}`,\n message: commitMessage,\n files: filesToSave.map((f) => f.path),\n },\n null,\n 2\n )\n )\n } else {\n process.stdout.write(\n chalk.yellow('[dry-run]') +\n ` Would save ${chalk.green(skillName)} to @${namespace.org}/${namespace.name}\\n`\n )\n process.stdout.write(chalk.dim(` Message: ${commitMessage}\\n`))\n process.stdout.write(\n chalk.dim(` Files: ${filesToSave.map((f) => f.path).join(', ')}\\n`)\n )\n }\n return\n }\n\n spinner.text = `Saving ${filesToSave.length} file(s) to platform...`\n\n const result = await platformFetch<SaveResponse>(\n `/skills/@${namespace.org}/${namespace.name}/save`,\n {\n method: 'POST',\n body: {\n message: commitMessage,\n files: filesToSave,\n },\n }\n )\n\n // Update the lockfile with the new commit SHA\n const lockfile = readLockfile(projectRoot)\n const lockEntry = lockfile.packages[skillName]\n if (lockEntry?.source.type === 'git') {\n lockEntry.source.commit = result.commitSha\n writeLockfile(projectRoot, lockfile)\n }\n\n if (options.json) {\n console.log(\n JSON.stringify(\n {\n skill: `@${namespace.org}/${namespace.name}`,\n commitSha: result.commitSha,\n files: filesToSave.map((f) => f.path),\n },\n null,\n 2\n )\n )\n } else {\n spinner.succeed(\n `Saved ${chalk.green(skillName)} ${chalk.dim(`(${result.commitSha.slice(0, 7)})`)}`\n )\n }\n } catch (error) {\n spinner.fail(`Failed to save: ${error instanceof Error ? error.message : String(error)}`)\n process.exit(1)\n }\n })\n}\n","import { readFileSync } from 'node:fs'\nimport { homedir } from 'node:os'\nimport {\n detectGlobalAgents,\n detectInstalledAgents,\n scanForSkillFiles,\n scanGlobalSkillFiles,\n} from '@agentver/agent-definitions'\nimport type { ScanResult } from '@agentver/shared'\nimport { validateSkillMd } from '@agentver/shared'\nimport chalk from 'chalk'\nimport type { Command } from 'commander'\nimport { isJSONMode, outputSuccess } from '../output'\nimport { readManifest } from '../storage/manifest.js'\n\nexport function registerScanCommand(program: Command): void {\n program\n .command('scan [path]')\n .description('Scan directory for agent configs and skills')\n .action(async (path?: string) => {\n const jsonMode = isJSONMode()\n const targetPath = path ?? process.cwd()\n\n const projectAgents = detectInstalledAgents(targetPath)\n const globalAgents = detectGlobalAgents(homedir())\n\n // Merge: project agents first, then global agents not already detected\n const seenIds = new Set(projectAgents.map((a) => a.id))\n const agents = [...projectAgents, ...globalAgents.filter((a) => !seenIds.has(a.id))]\n\n // Merge project + global skill files, deduplicating by path\n const projectFiles = scanForSkillFiles(targetPath)\n const globalFiles = scanGlobalSkillFiles(homedir())\n const seenPaths = new Set(projectFiles.map((f) => f.path))\n const files = [...projectFiles, ...globalFiles.filter((f) => !seenPaths.has(f.path))]\n\n if (jsonMode) {\n const result: ScanResult = {\n agents: agents.map((a) => ({\n id: a.id,\n name: a.name,\n paths: [a.configPath],\n })),\n skills: files.map((f) => ({\n name: f.name,\n path: f.path,\n type: f.detectedType,\n })),\n }\n outputSuccess(result)\n return\n }\n\n console.log(chalk.bold('\\nDetected agents:\\n'))\n\n if (agents.length === 0) {\n console.log(chalk.dim(' No agents detected.'))\n } else {\n for (const agent of agents) {\n console.log(` ${chalk.green(agent.name)} ${chalk.dim(agent.configPath)}`)\n }\n }\n\n console.log(chalk.bold('\\nDiscovered files:\\n'))\n\n if (files.length === 0) {\n console.log(chalk.dim(' No skill or config files found.'))\n } else {\n for (const file of files) {\n const typeLabel = chalk.dim(`[${file.detectedType}]`)\n const agentLabel = chalk.cyan(`(${file.agentId})`)\n console.log(` ${typeLabel} ${agentLabel} ${file.name} ${chalk.dim(file.path)}`)\n }\n }\n\n // Validate SKILL.md files against the Agent Skills spec\n const skillFiles = files.filter((f) => f.detectedType === 'SKILL')\n if (skillFiles.length > 0) {\n console.log(chalk.bold('\\nSkill spec validation:\\n'))\n\n for (const file of skillFiles) {\n let content: string\n try {\n content = readFileSync(file.path, 'utf-8')\n } catch {\n console.log(` ${chalk.red('\\u2717')} ${file.name} ${chalk.dim('Could not read file')}`)\n continue\n }\n\n const result = validateSkillMd(content)\n\n if (result.valid && result.specCompliant) {\n console.log(\n ` ${chalk.green('\\u2713')} ${file.name} ${chalk.green('Agent Skills spec compliant')}`\n )\n } else if (result.valid && !result.specCompliant) {\n console.log(\n ` ${chalk.yellow('\\u2713')} ${file.name} ${chalk.yellow('Valid (Agentver extended)')}`\n )\n } else {\n console.log(` ${chalk.red('\\u2717')} ${file.name} ${chalk.red('Invalid')}`)\n for (const error of result.errors) {\n console.log(` ${chalk.red(`\\u2514 ${error}`)}`)\n }\n }\n\n if (result.warnings.length > 0) {\n for (const warning of result.warnings) {\n console.log(` ${chalk.yellow(`\\u26A0 ${warning}`)}`)\n }\n }\n\n if (result.agentverExtensions.length > 0) {\n console.log(\n ` ${chalk.dim(`Agentver extensions: ${result.agentverExtensions.join(', ')}`)}`\n )\n }\n }\n }\n\n const manifest = readManifest(targetPath)\n const manifestEntries = Object.entries(manifest.packages)\n\n if (manifestEntries.length > 0) {\n console.log(chalk.bold(`\\nInstalled skills (${manifestEntries.length}):\\n`))\n\n for (const [name, pkg] of manifestEntries) {\n const source = pkg.source\n const agentList = `[${pkg.agents.join(', ')}]`\n\n if (source.type === 'git') {\n const sourcePath = source.path ? `${source.uri}/${source.path}` : source.uri\n const ref = `@${source.ref}`\n const commit = `(${source.commit.slice(0, 7)})`\n console.log(\n ` ${chalk.green(name.padEnd(18))} ${chalk.dim(sourcePath.padEnd(40))} ${chalk.cyan(ref.padEnd(10))} ${chalk.dim(commit)} ${chalk.dim(agentList)}`\n )\n } else {\n const sourceLabel = `${source.hostname} (well-known)`\n console.log(\n ` ${chalk.green(name.padEnd(18))} ${chalk.dim(sourceLabel.padEnd(40))} ${chalk.dim('[well-known]').padEnd(10)} ${chalk.dim(agentList)}`\n )\n }\n }\n }\n\n console.log()\n })\n}\n","import chalk from 'chalk'\nimport type { Command } from 'commander'\nimport ora from 'ora'\nimport { registryFetch } from '../registry/client'\nimport { isConnected } from '../registry/config'\nimport { type SkillsShResult, searchSkillsSh, toGitInstallSource } from '../registry/skills-sh'\nimport { fetchWellKnownIndex } from '../wellknown/index.js'\nimport type { WellKnownIndexEntry } from '../wellknown/types.js'\n\ntype PlatformSearchOrganisation = {\n slug: string\n name: string\n}\n\ntype PlatformSearchCategory = {\n id: string\n name: string\n slug: string\n icon: string | null\n}\n\ntype PlatformSearchResult = {\n id: string\n name: string\n slug: string\n description: string | null\n type: string\n tags: string[]\n compatibilityAgents: string[]\n starCount: number\n installCount: number\n organisation: PlatformSearchOrganisation\n categories: PlatformSearchCategory[]\n}\n\ntype PlatformSearchResponse = {\n results: PlatformSearchResult[]\n total: number\n limit: number\n offset: number\n}\n\ntype SearchSource = 'platform' | 'community' | 'well-known' | 'all'\n\nfunction formatInstallCount(count: number): string {\n if (count >= 1_000_000) {\n return `${(count / 1_000_000).toFixed(1)}M`\n }\n if (count >= 1_000) {\n return `${(count / 1_000).toFixed(1)}K`\n }\n return String(count)\n}\n\nfunction renderPlatformResults(results: PlatformSearchResult[], total: number): void {\n if (results.length === 0) return\n\n process.stdout.write(chalk.bold(`\\nPlatform results (${total}):\\n\\n`))\n\n for (const result of results) {\n const desc = result.description ? chalk.dim(` — ${result.description}`) : ''\n const stars = result.starCount > 0 ? chalk.yellow(` ★ ${result.starCount}`) : ''\n const installs =\n result.installCount > 0 ? chalk.cyan(` ↓ ${formatInstallCount(result.installCount)}`) : ''\n const cats =\n result.categories.length > 0\n ? chalk.dim(` [${result.categories.map((c) => c.name).join(', ')}]`)\n : ''\n\n process.stdout.write(` ${chalk.green(result.slug)}${stars}${installs}${cats}${desc}\\n`)\n }\n\n process.stdout.write('\\n')\n}\n\nfunction renderCommunityResults(results: SkillsShResult[]): void {\n if (results.length === 0) return\n\n process.stdout.write(chalk.bold(`\\nSkills from skills.sh:\\n\\n`))\n\n for (const result of results) {\n const nameCol = chalk.green(result.name)\n const sourceCol = chalk.dim(`(${result.source})`)\n const installCol = chalk.cyan(`↓ ${formatInstallCount(result.installCount)}`)\n\n process.stdout.write(` ${nameCol} ${sourceCol} ${installCol}\\n`)\n\n if (result.description) {\n process.stdout.write(` ${chalk.dim(result.description)}\\n`)\n }\n\n process.stdout.write('\\n')\n }\n\n process.stdout.write(\n chalk.dim(' Install with: ') +\n chalk.white('agentver install github.com/{source}/{name}') +\n '\\n\\n'\n )\n}\n\nfunction renderWellKnownResults(hostname: string, skills: WellKnownIndexEntry[]): void {\n if (skills.length === 0) return\n\n process.stdout.write(chalk.bold(`\\nSkills from ${hostname}:\\n\\n`))\n\n for (const skill of skills) {\n process.stdout.write(` ${chalk.green(skill.name)} ${chalk.dim(`— ${skill.description}`)}\\n`)\n process.stdout.write(\n ` ${chalk.dim('Install:')} ${chalk.white(`agentver install ${hostname}/${skill.name}`)}\\n`\n )\n process.stdout.write('\\n')\n }\n}\n\nfunction renderNoResults(query: string): void {\n process.stdout.write(chalk.dim(`No results for \"${query}\"\\n`))\n}\n\nexport function registerSearchCommand(program: Command): void {\n program\n .command('search <query>')\n .description('Search for skills across registries')\n .option('--type <type>', 'Filter by type (skill, agent, plugin, script, prompt)')\n .option('--category <category>', 'Filter by category slug (e.g. testing, devops)')\n .option(\n '--source <source>',\n 'Search source: platform, community (skills.sh), well-known (domain), or all'\n )\n .action(\n async (query: string, options: { type?: string; category?: string; source?: string }) => {\n const connected = await isConnected()\n\n const requestedSource = (options.source as SearchSource | undefined) ?? undefined\n let source: SearchSource\n\n if (requestedSource) {\n if (!['platform', 'community', 'well-known', 'all'].includes(requestedSource)) {\n process.stderr.write(\n chalk.red(\n `Invalid source \"${requestedSource}\". Use: platform, community, well-known, or all\\n`\n )\n )\n process.exit(1)\n }\n source = requestedSource as SearchSource\n\n if (source === 'platform' && !connected) {\n process.stderr.write(\n chalk.red('Not connected to a platform. Run `agentver login <url>` to connect.\\n')\n )\n process.exit(1)\n }\n } else {\n source = connected ? 'platform' : 'community'\n }\n\n // Well-known search is a separate flow — query is treated as a domain name\n if (source === 'well-known') {\n const spinner = ora(`Fetching skills from ${query}...`).start()\n\n try {\n const baseUrl = query.startsWith('https://') ? query : `https://${query}`\n const hostname = new URL(baseUrl).hostname\n const index = await fetchWellKnownIndex(baseUrl)\n\n spinner.stop()\n\n renderWellKnownResults(hostname, index.skills)\n } catch (error) {\n spinner.fail(\n `Well-known search failed: ${error instanceof Error ? error.message : String(error)}`\n )\n process.exit(1)\n }\n return\n }\n\n const spinner = ora('Searching...').start()\n\n try {\n let platformResults: PlatformSearchResult[] = []\n let platformTotal = 0\n let communityResults: SkillsShResult[] = []\n\n const searchPlatform = source === 'platform' || source === 'all'\n const searchCommunity = source === 'community' || source === 'all'\n\n const promises: Promise<void>[] = []\n\n if (searchPlatform && connected) {\n promises.push(\n (async () => {\n const params = new URLSearchParams({ q: query })\n if (options.type) params.set('type', options.type.toUpperCase())\n if (options.category) params.set('category', options.category)\n\n const data = await registryFetch<PlatformSearchResponse>(\n `/search?${params.toString()}`\n )\n platformResults = data.results\n platformTotal = data.total\n })()\n )\n }\n\n if (searchCommunity) {\n promises.push(\n (async () => {\n communityResults = await searchSkillsSh(query, 10)\n })()\n )\n }\n\n await Promise.all(promises)\n\n spinner.stop()\n\n const hasResults = platformResults.length > 0 || communityResults.length > 0\n\n if (!hasResults) {\n renderNoResults(query)\n return\n }\n\n if (platformResults.length > 0) {\n renderPlatformResults(platformResults, platformTotal)\n }\n\n if (communityResults.length > 0) {\n renderCommunityResults(communityResults)\n }\n\n // Show install hint for community results\n if (communityResults.length > 0) {\n const example = communityResults[0]!\n process.stdout.write(\n chalk.dim(' Example: ') +\n chalk.white(`agentver install ${toGitInstallSource(example)}`) +\n '\\n'\n )\n }\n } catch (error) {\n spinner.fail(`Search failed: ${error instanceof Error ? error.message : String(error)}`)\n process.exit(1)\n }\n }\n )\n}\n","import { z } from 'zod'\n\nconst SKILLS_SH_API = 'https://skills.sh/api/search'\nconst SKILLS_SH_TIMEOUT_MS = 5_000\n\nconst skillsShSkillSchema = z.object({\n id: z.string(),\n skillId: z.string(),\n name: z.string(),\n installs: z.number(),\n source: z.string(),\n})\n\nconst skillsShResponseSchema = z.object({\n query: z.string(),\n searchType: z.string(),\n skills: z.array(skillsShSkillSchema),\n count: z.number(),\n duration_ms: z.number(),\n})\n\nexport type SkillsShSkill = z.infer<typeof skillsShSkillSchema>\n\nexport type SkillsShResult = {\n id: string\n name: string\n description: string\n installCount: number\n source: string\n url: string\n}\n\nfunction toResult(skill: SkillsShSkill): SkillsShResult {\n return {\n id: skill.id,\n name: skill.name,\n description: '',\n installCount: skill.installs,\n source: skill.source,\n url: `https://skills.sh/${skill.id}`,\n }\n}\n\n/**\n * Build the install-friendly git source from a skills.sh result.\n * Maps `owner/repo` + skill name to `github.com/{owner}/{repo}/{name}`.\n */\nexport function toGitInstallSource(result: SkillsShResult): string {\n return `github.com/${result.source}/${result.name}`\n}\n\n/**\n * Search the skills.sh public API.\n * Returns an empty array on any failure — never throws.\n */\nexport async function searchSkillsSh(query: string, limit?: number): Promise<SkillsShResult[]> {\n const params = new URLSearchParams({ q: query })\n if (limit !== undefined) {\n params.set('limit', String(limit))\n }\n\n const url = `${SKILLS_SH_API}?${params.toString()}`\n\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), SKILLS_SH_TIMEOUT_MS)\n\n try {\n const response = await fetch(url, {\n method: 'GET',\n signal: controller.signal,\n headers: {\n Accept: 'application/json',\n },\n })\n\n clearTimeout(timeoutId)\n\n if (!response.ok) {\n return []\n }\n\n const raw: unknown = await response.json()\n const parsed = skillsShResponseSchema.safeParse(raw)\n\n if (!parsed.success) {\n return []\n }\n\n return parsed.data.skills.map(toResult)\n } catch {\n clearTimeout(timeoutId)\n return []\n }\n}\n","import type { ManifestV2Package, StatusResult } from '@agentver/shared'\nimport chalk from 'chalk'\nimport type { Command } from 'commander'\nimport { readFilesFromDirectory } from '../git/fetcher.js'\nimport { resolveRef } from '../git/index.js'\nimport type { GitSource as CliGitSource } from '../git/types.js'\nimport { createSpinner, isJSONMode, outputSuccess } from '../output'\nimport { resolveReadPath } from '../storage/canonical.js'\nimport { computeSha256FromFiles } from '../storage/integrity.js'\nimport { readLockfile } from '../storage/lockfile.js'\nimport { readManifest } from '../storage/manifest.js'\n\ntype StatusCategory = 'up-to-date' | 'modified' | 'upstream' | 'both' | 'unknown'\n\ntype PackageStatus = {\n name: string\n category: StatusCategory\n sourceUri: string\n ref: string\n commit: string\n upstreamCommit?: string\n agents: string[]\n pinned?: boolean\n error?: string\n}\n\ntype StatusOutput = {\n packages: PackageStatus[]\n total: number\n modified: number\n upstream: number\n upToDate: number\n unknown: number\n}\n\nconst STATUS_SYMBOLS: Record<StatusCategory, string> = {\n 'up-to-date': chalk.green('✓'),\n modified: chalk.yellow('M'),\n upstream: chalk.cyan('U'),\n both: chalk.red('MU'),\n unknown: chalk.dim('?'),\n}\n\nfunction parseManifestUri(uri: string): CliGitSource | null {\n const parts = uri.split('/')\n if (parts.length < 3) return null\n\n return {\n host: parts[0] as CliGitSource['host'],\n owner: parts[1]!,\n repo: parts[2]!,\n path: parts.slice(3).join('/'),\n ref: 'HEAD',\n }\n}\n\nasync function readLocalFiles(\n projectRoot: string,\n packageName: string,\n agents: string[]\n): Promise<Array<{ path: string; content: string }>> {\n // Try canonical path first, fall back to agent-specific paths\n const readPath = resolveReadPath(projectRoot, packageName, agents)\n if (readPath) {\n const files = await readFilesFromDirectory(readPath)\n return files.map((f) => ({ path: f.path, content: f.content }))\n }\n\n return []\n}\n\nasync function checkPackageStatus(\n projectRoot: string,\n name: string,\n manifestEntry: ManifestV2Package,\n lockfileIntegrity: string | undefined,\n offline: boolean\n): Promise<PackageStatus> {\n const { source, agents, pinned } = manifestEntry\n\n // Well-known sources: only check local modification (no git upstream)\n if (source.type === 'well-known') {\n let locallyModified = false\n\n try {\n const localFiles = await readLocalFiles(projectRoot, name, agents)\n if (lockfileIntegrity && localFiles.length > 0) {\n const localIntegrity = computeSha256FromFiles(localFiles)\n locallyModified = localIntegrity !== lockfileIntegrity\n }\n } catch {\n locallyModified = false\n }\n\n return {\n name,\n category: locallyModified ? 'modified' : 'up-to-date',\n sourceUri: source.hostname,\n ref: 'well-known',\n commit: '',\n agents,\n pinned: pinned || undefined,\n }\n }\n\n if (source.uri === 'unknown') {\n return {\n name,\n category: 'unknown',\n sourceUri: source.uri,\n ref: source.ref,\n commit: source.commit,\n agents,\n pinned: pinned || undefined,\n }\n }\n\n let locallyModified = false\n let upstreamChanged = false\n let upstreamCommit: string | undefined\n\n try {\n const localFiles = await readLocalFiles(projectRoot, name, agents)\n\n if (lockfileIntegrity && localFiles.length > 0) {\n const localIntegrity = computeSha256FromFiles(localFiles)\n locallyModified = localIntegrity !== lockfileIntegrity\n }\n } catch {\n locallyModified = false\n }\n\n if (!offline) {\n try {\n const cliSource = parseManifestUri(source.uri)\n if (cliSource) {\n cliSource.ref = source.ref\n const resolved = await resolveRef(cliSource)\n upstreamCommit = resolved.commitSha\n\n if (resolved.commitSha !== source.commit) {\n upstreamChanged = true\n }\n }\n } catch {\n // Network failure — skip upstream check silently\n }\n }\n\n let category: StatusCategory = 'up-to-date'\n if (locallyModified && upstreamChanged) {\n category = 'both'\n } else if (locallyModified) {\n category = 'modified'\n } else if (upstreamChanged) {\n category = 'upstream'\n }\n\n return {\n name,\n category,\n sourceUri: source.uri,\n ref: source.ref,\n commit: source.commit,\n upstreamCommit: upstreamChanged ? upstreamCommit : undefined,\n agents,\n pinned: pinned || undefined,\n }\n}\n\nfunction formatStatusLine(status: PackageStatus): string {\n const symbol = STATUS_SYMBOLS[status.category]\n const padding = status.category === 'both' ? '' : ' '\n\n if (status.category === 'unknown') {\n return ` ${symbol} ${chalk.white(status.name)} ${chalk.dim('unknown source')}`\n }\n\n const shortCommit = status.commit.slice(0, 7)\n const upstream = status.upstreamCommit\n ? ` ${chalk.dim('→')} ${chalk.cyan(`upstream: ${status.upstreamCommit.slice(0, 7)}`)}`\n : ''\n\n const pinned = status.pinned ? chalk.yellow(' [pinned]') : ''\n\n return ` ${symbol}${padding} ${chalk.white(status.name)}${pinned} ${chalk.dim(status.sourceUri)} ${chalk.cyan(`@${status.ref}`)} ${chalk.dim(`(${shortCommit})`)}${upstream}`\n}\n\nfunction buildStatusOutput(statuses: PackageStatus[]): StatusOutput {\n return {\n packages: statuses,\n total: statuses.length,\n modified: statuses.filter((s) => s.category === 'modified' || s.category === 'both').length,\n upstream: statuses.filter((s) => s.category === 'upstream' || s.category === 'both').length,\n upToDate: statuses.filter((s) => s.category === 'up-to-date').length,\n unknown: statuses.filter((s) => s.category === 'unknown').length,\n }\n}\n\nfunction toStatusResult(output: StatusOutput): StatusResult {\n return {\n packages: output.packages.map((p) => ({\n name: p.name,\n status: p.category,\n modified: p.category === 'modified' || p.category === 'both',\n upstream: p.category === 'upstream' || p.category === 'both',\n pinned: p.pinned || undefined,\n })),\n summary: {\n total: output.total,\n upToDate: output.upToDate,\n modified: output.modified,\n upstream: output.upstream,\n unknown: output.unknown,\n },\n }\n}\n\nexport function registerStatusCommand(program: Command): void {\n program\n .command('status')\n .description('Show status of installed skills (upstream changes, local modifications)')\n .option('--offline', 'Skip upstream checks')\n .option('--json', 'Output as JSON')\n .action(async (options: { offline?: boolean; json?: boolean }) => {\n const jsonMode = isJSONMode() || options.json === true\n const projectRoot = process.cwd()\n const manifest = readManifest(projectRoot)\n const lockfile = readLockfile(projectRoot)\n const entries = Object.entries(manifest.packages)\n\n if (entries.length === 0) {\n if (jsonMode) {\n outputSuccess(toStatusResult(buildStatusOutput([])))\n } else {\n console.log(chalk.dim('No packages installed.'))\n }\n return\n }\n\n const spinner = createSpinner('Checking package status...').start()\n\n const statuses: PackageStatus[] = []\n\n for (const [name, pkg] of entries) {\n spinner.text = `Checking ${name}...`\n\n const lockfileEntry = lockfile.packages[name]\n const status = await checkPackageStatus(\n projectRoot,\n name,\n pkg,\n lockfileEntry?.integrity,\n options.offline ?? false\n )\n statuses.push(status)\n }\n\n spinner.stop()\n\n if (jsonMode) {\n outputSuccess(toStatusResult(buildStatusOutput(statuses)))\n return\n }\n\n console.log(chalk.bold(`\\nInstalled skills (${statuses.length}):\\n`))\n\n for (const status of statuses) {\n console.log(formatStatusLine(status))\n }\n\n console.log()\n })\n}\n","import { existsSync } from 'node:fs'\nimport { join } from 'node:path'\nimport { type AgentId, getSkillPlacementPath } from '@agentver/agent-definitions'\nimport type { ManifestV2Package, ProposeResult } from '@agentver/shared'\nimport chalk from 'chalk'\nimport type { Command } from 'commander'\nimport { readFilesFromDirectory } from '../git/fetcher.js'\nimport { createSpinner, isJSONMode, outputError, outputSuccess } from '../output.js'\nimport { getCredentials } from '../registry/auth.js'\nimport { getPlatformUrl } from '../registry/config.js'\nimport { computeSha256FromFiles } from '../storage/integrity.js'\nimport { readLockfile } from '../storage/lockfile.js'\nimport { readManifest } from '../storage/manifest.js'\n\nconst HTTP_TIMEOUT_MS = 15_000\n\ntype SuggestionFile = {\n path: string\n content: string\n}\n\ntype SuggestionRequest = {\n title: string\n description?: string\n files: SuggestionFile[]\n}\n\ntype SuggestionResponse = {\n id: string\n title: string\n url?: string\n}\n\ntype SuggestionOutcome = {\n package: string\n success: boolean\n result?: ProposeResult\n error?: string\n}\n\nasync function readLocalFiles(\n projectRoot: string,\n packageName: string,\n agents: string[]\n): Promise<SuggestionFile[]> {\n for (const agentId of agents) {\n const placementPath = getSkillPlacementPath(agentId as AgentId, packageName, 'project')\n if (!placementPath) continue\n\n const fullPath = join(projectRoot, placementPath)\n if (!existsSync(fullPath)) continue\n\n const files = await readFilesFromDirectory(fullPath)\n return files.map((f) => ({ path: f.path, content: f.content }))\n }\n\n return []\n}\n\nasync function postToPlatform<T>(path: string, body: unknown): Promise<T> {\n const platformUrl = getPlatformUrl()\n if (!platformUrl) {\n throw new Error('Not connected to a platform. Run `agentver login <url>` first.')\n }\n\n const creds = await getCredentials()\n if (!creds?.token && !creds?.apiKey) {\n throw new Error('Not connected to a platform. Run `agentver login <url>` first.')\n }\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'User-Agent': 'agentver-cli',\n }\n\n if (creds.token) {\n headers.Authorization = `Bearer ${creds.token}`\n } else if (creds.apiKey) {\n headers['X-API-Key'] = creds.apiKey\n }\n\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), HTTP_TIMEOUT_MS)\n\n try {\n const url = `${platformUrl}/api/v1${path}`\n const response = await fetch(url, {\n method: 'POST',\n headers,\n body: JSON.stringify(body),\n signal: controller.signal,\n })\n clearTimeout(timeoutId)\n\n if (!response.ok) {\n const errorBody = await response.text().catch(() => 'Unknown error')\n throw new Error(`Platform returned ${response.status}: ${errorBody}`)\n }\n\n return (await response.json()) as T\n } catch (error) {\n clearTimeout(timeoutId)\n if (error instanceof Error && error.name === 'AbortError') {\n throw new Error('Platform request timed out')\n }\n throw error\n }\n}\n\nfunction buildEndpoint(manifestEntry: ManifestV2Package, packageName: string): string {\n if (manifestEntry.source.type !== 'git') return ''\n const orgSlug = manifestEntry.source.uri.split('/')[1] ?? ''\n return `/skills/@${orgSlug}/${packageName}/suggestions`\n}\n\nasync function submitSuggestion(\n projectRoot: string,\n packageName: string,\n manifestEntry: ManifestV2Package,\n title: string,\n description?: string\n): Promise<{ localFiles: SuggestionFile[]; result: SuggestionResponse }> {\n const localFiles = await readLocalFiles(projectRoot, packageName, manifestEntry.agents)\n\n if (localFiles.length === 0) {\n throw new Error(`No local files found for \"${packageName}\".`)\n }\n\n const endpoint = buildEndpoint(manifestEntry, packageName)\n\n const requestBody: SuggestionRequest = {\n title,\n description,\n files: localFiles,\n }\n\n const result = await postToPlatform<SuggestionResponse>(endpoint, requestBody)\n return { localFiles, result }\n}\n\nexport function registerSuggestCommand(program: Command): void {\n program\n .command('suggest <title>')\n .alias('propose')\n .description('Create a suggestion from local modifications (requires platform connection)')\n .option('-d, --description <text>', 'Suggestion description')\n .option('--name <name>', 'Target a specific modified package by name')\n .option('--dry-run', 'Show what would be suggested without submitting')\n .action(\n async (title: string, options: { description?: string; name?: string; dryRun?: boolean }) => {\n const json = isJSONMode()\n const platformUrl = getPlatformUrl()\n const creds = await getCredentials()\n\n if (!options.dryRun && (!platformUrl || (!creds?.token && !creds?.apiKey))) {\n if (json) {\n outputError(\n 'AUTH_REQUIRED',\n 'Not connected to a platform. Run `agentver login <url>` first.'\n )\n process.exit(1)\n }\n console.error(chalk.red('Not connected to a platform. Run `agentver login <url>` first.'))\n process.exit(1)\n }\n\n const projectRoot = process.cwd()\n const manifest = readManifest(projectRoot)\n const lockfile = readLockfile(projectRoot)\n\n const modifiedPackages: string[] = []\n\n for (const [name, manifestEntry] of Object.entries(manifest.packages)) {\n const lockfileEntry = lockfile.packages[name]\n if (!lockfileEntry) continue\n\n const { agents } = manifestEntry\n const localFiles = await readLocalFiles(projectRoot, name, agents)\n if (localFiles.length === 0) continue\n\n const currentIntegrity = computeSha256FromFiles(localFiles)\n if (currentIntegrity !== lockfileEntry.integrity) {\n modifiedPackages.push(name)\n }\n }\n\n if (modifiedPackages.length === 0) {\n if (json) {\n outputError('NO_CHANGES', 'No modified packages detected.')\n process.exit(1)\n }\n console.log(chalk.dim('No modified packages detected.'))\n return\n }\n\n const targets = options.name\n ? modifiedPackages.filter((n) => n === options.name)\n : modifiedPackages\n\n if (targets.length === 0 && options.name) {\n const message = `Package \"${options.name}\" is not in the modified list. Modified: ${modifiedPackages.join(', ')}`\n if (json) {\n outputError('NOT_FOUND', message)\n process.exit(1)\n }\n console.error(chalk.red(message))\n process.exit(1)\n }\n\n const unsupportedTargets = targets.filter(\n (name) => manifest.packages[name]?.source.type === 'well-known'\n )\n\n if (unsupportedTargets.length > 0) {\n for (const name of unsupportedTargets) {\n const source = manifest.packages[name]!.source\n if (json) {\n outputError(\n 'UNSUPPORTED_SOURCE',\n `Package \"${name}\" was installed from a well-known source. Suggestions are not supported.`\n )\n } else {\n console.error(\n chalk.red(\n `Package \"${name}\" was installed from a well-known source (${source.type === 'well-known' ? source.hostname : 'unknown'}).`\n )\n )\n console.error(chalk.dim('Suggestions are not supported for well-known sources.'))\n }\n }\n }\n\n const validTargets = targets.filter((n) => !unsupportedTargets.includes(n))\n\n if (validTargets.length === 0) {\n process.exit(1)\n }\n\n if (options.dryRun) {\n const dryRunResults = []\n\n for (const targetName of validTargets) {\n const manifestEntry = manifest.packages[targetName]!\n const localFiles = await readLocalFiles(projectRoot, targetName, manifestEntry.agents)\n const endpoint = `/api/v1${buildEndpoint(manifestEntry, targetName)}`\n\n dryRunResults.push({\n package: targetName,\n title,\n description: options.description,\n files: localFiles.map((f) => ({\n path: f.path,\n contentLength: f.content.length,\n })),\n endpoint,\n })\n }\n\n if (json) {\n outputSuccess(dryRunResults)\n } else {\n console.log(chalk.bold('\\nDry run — suggestion preview:\\n'))\n for (const entry of dryRunResults) {\n console.log(` ${chalk.dim('Package:')} ${entry.package}`)\n console.log(` ${chalk.dim('Title:')} ${entry.title}`)\n if (entry.description) {\n console.log(` ${chalk.dim('Desc:')} ${entry.description}`)\n }\n console.log(` ${chalk.dim('Files:')}`)\n for (const f of entry.files) {\n console.log(` ${chalk.cyan(f.path)} (${f.contentLength} bytes)`)\n }\n console.log(` ${chalk.dim('Endpoint:')} ${entry.endpoint}`)\n console.log()\n }\n console.log(\n chalk.dim(\n `${dryRunResults.length} package${dryRunResults.length === 1 ? '' : 's'} would get suggestions.`\n )\n )\n }\n return\n }\n\n const outcomes: SuggestionOutcome[] = []\n\n for (const targetName of validTargets) {\n const manifestEntry = manifest.packages[targetName]!\n const spinner = createSpinner(`Creating suggestion for ${targetName}...`).start()\n\n try {\n const { result } = await submitSuggestion(\n projectRoot,\n targetName,\n manifestEntry,\n title,\n options.description\n )\n\n const proposeResult: ProposeResult = {\n proposalId: result.id,\n title: result.title ?? title,\n url: result.url ?? '',\n }\n\n outcomes.push({ package: targetName, success: true, result: proposeResult })\n\n if (!json) {\n spinner.succeed(\n `Created suggestion for ${chalk.bold(targetName)}: ${chalk.bold(proposeResult.title)}`\n )\n if (result.url) {\n console.log(chalk.dim(` ${result.url}`))\n }\n } else {\n spinner.stop()\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n outcomes.push({ package: targetName, success: false, error: message })\n\n if (!json) {\n spinner.fail(`Failed to create suggestion for ${chalk.bold(targetName)}: ${message}`)\n } else {\n spinner.stop()\n }\n }\n }\n\n const succeeded = outcomes.filter((o) => o.success)\n const failed = outcomes.filter((o) => !o.success)\n\n if (json) {\n if (validTargets.length === 1) {\n const outcome = outcomes[0]!\n if (outcome.success) {\n outputSuccess<ProposeResult>(outcome.result!)\n } else {\n outputError('SUGGEST_FAILED', outcome.error!)\n process.exit(1)\n }\n } else {\n outputSuccess(outcomes)\n }\n } else if (validTargets.length > 1) {\n console.log()\n console.log(\n chalk.bold(\n `Created ${succeeded.length} suggestion${succeeded.length === 1 ? '' : 's'}` +\n (failed.length > 0 ? ` (${failed.length} failed)` : '')\n )\n )\n }\n\n if (failed.length > 0 && succeeded.length === 0) {\n process.exit(1)\n }\n }\n )\n}\n","import type { ProposalsResult } from '@agentver/shared'\nimport chalk from 'chalk'\nimport type { Command } from 'commander'\nimport { createSpinner, isJSONMode, outputError, outputSuccess } from '../output.js'\nimport { getCredentials } from '../registry/auth.js'\nimport { getPlatformUrl } from '../registry/config.js'\n\nconst HTTP_TIMEOUT_MS = 15_000\n\ntype SuggestionStatus = 'OPEN' | 'IN_REVIEW' | 'APPROVED' | 'MERGED' | 'REJECTED' | 'CLOSED'\n\ntype Suggestion = {\n id: string\n title: string\n packageSlug: string\n status: SuggestionStatus\n author: string\n createdAt: string\n}\n\ntype SuggestionsResponse = {\n suggestions: Suggestion[]\n}\n\nasync function getFromPlatform<T>(path: string): Promise<T> {\n const platformUrl = getPlatformUrl()\n if (!platformUrl) {\n throw new Error('Not connected to a platform. Run `agentver login <url>` first.')\n }\n\n const creds = await getCredentials()\n if (!creds?.token && !creds?.apiKey) {\n throw new Error('Not connected to a platform. Run `agentver login <url>` first.')\n }\n\n const headers: Record<string, string> = {\n Accept: 'application/json',\n 'User-Agent': 'agentver-cli',\n }\n\n if (creds.token) {\n headers.Authorization = `Bearer ${creds.token}`\n } else if (creds.apiKey) {\n headers['X-API-Key'] = creds.apiKey\n }\n\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), HTTP_TIMEOUT_MS)\n\n try {\n const url = `${platformUrl}/api/v1${path}`\n const response = await fetch(url, {\n method: 'GET',\n headers,\n signal: controller.signal,\n })\n clearTimeout(timeoutId)\n\n if (!response.ok) {\n const errorBody = await response.text().catch(() => 'Unknown error')\n throw new Error(`Platform returned ${response.status}: ${errorBody}`)\n }\n\n return (await response.json()) as T\n } catch (error) {\n clearTimeout(timeoutId)\n if (error instanceof Error && error.name === 'AbortError') {\n throw new Error('Platform request timed out')\n }\n throw error\n }\n}\n\nfunction formatDate(isoDate: string): string {\n try {\n const date = new Date(isoDate)\n const year = date.getFullYear()\n const month = String(date.getMonth() + 1).padStart(2, '0')\n const day = String(date.getDate()).padStart(2, '0')\n return `${year}-${month}-${day}`\n } catch {\n return isoDate\n }\n}\n\nconst STATUS_COLOURS: Record<SuggestionStatus, (text: string) => string> = {\n OPEN: chalk.green,\n IN_REVIEW: chalk.yellow,\n APPROVED: chalk.blue,\n MERGED: chalk.magenta,\n REJECTED: chalk.red,\n CLOSED: chalk.dim,\n}\n\nfunction formatSuggestionRow(\n suggestion: Suggestion,\n idWidth: number,\n titleWidth: number,\n slugWidth: number,\n authorWidth: number\n): string {\n const id = chalk.dim(`#${suggestion.id}`.padEnd(idWidth + 1))\n const title = suggestion.title.padEnd(titleWidth)\n const slug = chalk.cyan(suggestion.packageSlug.padEnd(slugWidth))\n const statusFn = STATUS_COLOURS[suggestion.status] ?? chalk.dim\n const status = statusFn(suggestion.status.padEnd(11))\n const author = chalk.dim(suggestion.author.padEnd(authorWidth))\n const date = chalk.dim(formatDate(suggestion.createdAt))\n\n return ` ${id} ${title} ${slug} ${status} ${author} ${date}`\n}\n\nexport function registerSuggestionsCommand(program: Command): void {\n program\n .command('suggestions [name]')\n .alias('proposals')\n .description('List suggestions for a skill (requires platform connection)')\n .option('-s, --status <status>', 'Filter by status (open, closed, merged, all)', 'open')\n .action(async (name: string | undefined, options: { status: string }) => {\n const json = isJSONMode()\n const platformUrl = getPlatformUrl()\n const creds = await getCredentials()\n\n if (!platformUrl || (!creds?.token && !creds?.apiKey)) {\n if (json) {\n outputError(\n 'AUTH_REQUIRED',\n 'Not connected to a platform. Run `agentver login <url>` first.'\n )\n process.exit(1)\n }\n console.error(chalk.red('Not connected to a platform. Run `agentver login <url>` first.'))\n process.exit(1)\n }\n\n const spinner = createSpinner('Fetching suggestions...').start()\n\n try {\n const queryParams = new URLSearchParams()\n if (name) {\n queryParams.set('package', name)\n }\n\n const statusFilter = options.status.toUpperCase()\n if (statusFilter !== 'ALL') {\n queryParams.set('status', statusFilter)\n }\n\n const queryString = queryParams.toString()\n const queryPath = `/proposals${queryString ? `?${queryString}` : ''}`\n const { suggestions } = await getFromPlatform<SuggestionsResponse>(queryPath)\n\n spinner.stop()\n\n if (json) {\n outputSuccess<ProposalsResult>({\n proposals: suggestions.map((s) => ({\n id: s.id,\n title: s.title,\n status: s.status,\n author: s.author,\n packageName: s.packageSlug,\n createdAt: s.createdAt,\n })),\n })\n return\n }\n\n if (suggestions.length === 0) {\n const filterLabel = statusFilter === 'ALL' ? '' : ` ${options.status}`\n console.log(chalk.dim(`No${filterLabel} suggestions found.`))\n return\n }\n\n const idWidth = Math.max(...suggestions.map((s) => `#${s.id}`.length))\n const titleWidth = Math.max(...suggestions.map((s) => s.title.length))\n const slugWidth = Math.max(...suggestions.map((s) => s.packageSlug.length))\n const authorWidth = Math.max(...suggestions.map((s) => s.author.length))\n\n const heading =\n statusFilter === 'ALL'\n ? `Suggestions (${suggestions.length})`\n : `${options.status.charAt(0).toUpperCase() + options.status.slice(1)} suggestions (${suggestions.length})`\n\n console.log(chalk.bold(`\\n${heading}:\\n`))\n\n for (const suggestion of suggestions) {\n console.log(formatSuggestionRow(suggestion, idWidth, titleWidth, slugWidth, authorWidth))\n }\n\n console.log()\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n spinner.fail(`Failed to fetch suggestions: ${message}`)\n if (json) {\n outputError('FETCH_FAILED', message)\n }\n process.exit(1)\n }\n })\n}\n","import { createHash } from 'node:crypto'\nimport { hostname } from 'node:os'\nimport type { SyncResult } from '@agentver/shared'\nimport chalk from 'chalk'\nimport type { Command } from 'commander'\nimport { createSpinner, isJSONMode, outputError, outputSuccess } from '../output.js'\nimport { getCredentials } from '../registry/auth.js'\nimport { getPlatformUrl } from '../registry/config.js'\nimport { readManifest } from '../storage/manifest.js'\n\nconst SYNC_TIMEOUT_MS = 30_000\n\ntype SyncGitSource = {\n type: 'git'\n uri: string\n path: string\n ref: string\n commit: string\n}\n\ntype SyncWellKnownSource = {\n type: 'well-known'\n baseUrl: string\n hostname: string\n skillName: string\n}\n\ntype SyncPackageEntry = {\n source: SyncGitSource | SyncWellKnownSource\n agents: string[]\n modified: boolean\n}\n\ntype SyncResponse = {\n synced: number\n removed: number\n}\n\nfunction getMachineId(): string {\n return createHash('sha256').update(hostname()).digest('hex')\n}\n\nexport function registerSyncCommand(program: Command): void {\n program\n .command('sync')\n .description('Push local installation state to platform (requires platform connection)')\n .action(async () => {\n const platformUrl = getPlatformUrl()\n if (!platformUrl) {\n if (isJSONMode()) {\n outputError(\n 'AUTH_REQUIRED',\n 'Not connected to a platform. Run `agentver login <url>` first.'\n )\n process.exit(1)\n }\n console.error(\n chalk.red('Not connected to a platform.') +\n ' Run ' +\n chalk.cyan('`agentver login <url>`') +\n ' first.'\n )\n process.exit(1)\n }\n\n const creds = await getCredentials()\n if (!creds?.token && !creds?.apiKey) {\n if (isJSONMode()) {\n outputError(\n 'AUTH_REQUIRED',\n 'Not connected to a platform. Run `agentver login <url>` first.'\n )\n process.exit(1)\n }\n console.error(\n chalk.red('Not connected to a platform.') +\n ' Run ' +\n chalk.cyan('`agentver login <url>`') +\n ' first.'\n )\n process.exit(1)\n }\n\n const projectRoot = process.cwd()\n const manifest = readManifest(projectRoot)\n const packageEntries = Object.entries(manifest.packages)\n\n const spinner = createSpinner('Syncing installation state to platform...').start()\n\n const packageNames = packageEntries.map(([name]) => name)\n const packages: Record<string, SyncPackageEntry> = {}\n\n for (const [name, pkg] of packageEntries) {\n const source: SyncGitSource | SyncWellKnownSource =\n pkg.source.type === 'git'\n ? {\n type: 'git',\n uri: pkg.source.uri,\n path: pkg.source.path,\n ref: pkg.source.ref,\n commit: pkg.source.commit,\n }\n : {\n type: 'well-known',\n baseUrl: pkg.source.baseUrl,\n hostname: pkg.source.hostname,\n skillName: pkg.source.skillName,\n }\n\n packages[name] = {\n source,\n agents: pkg.agents,\n modified: pkg.modified,\n }\n }\n\n const machineId = getMachineId()\n\n const authHeaders: Record<string, string> = {}\n if (creds.token) {\n authHeaders.Authorization = `Bearer ${creds.token}`\n } else if (creds.apiKey) {\n authHeaders['X-API-Key'] = creds.apiKey\n }\n\n try {\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), SYNC_TIMEOUT_MS)\n\n const response = await fetch(`${platformUrl}/api/v1/installations/sync`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...authHeaders,\n },\n body: JSON.stringify({\n machineId,\n packages,\n }),\n signal: controller.signal,\n })\n\n clearTimeout(timeoutId)\n\n if (!response.ok) {\n const errorText = await response.text().catch(() => 'Unknown error')\n if (isJSONMode()) {\n spinner.stop()\n outputError('SYNC_FAILED', `Sync failed (${response.status}): ${errorText}`)\n } else {\n spinner.fail(`Sync failed (${response.status}): ${errorText}`)\n }\n process.exit(1)\n }\n\n const result = (await response.json()) as SyncResponse\n\n if (isJSONMode()) {\n outputSuccess<SyncResult>({\n synced: result.synced,\n machineId,\n packages: packageNames,\n })\n return\n }\n\n spinner.succeed(\n `Synced ${chalk.green(String(result.synced))} skill${result.synced === 1 ? '' : 's'} to platform` +\n (result.removed > 0 ? chalk.dim(` (${result.removed} removed)`) : '')\n )\n } catch (error) {\n if (error instanceof DOMException && error.name === 'AbortError') {\n if (isJSONMode()) {\n spinner.stop()\n outputError('TIMEOUT', 'Sync timed out. The platform may be experiencing issues.')\n } else {\n spinner.fail('Sync timed out. The platform may be experiencing issues.')\n }\n } else {\n if (isJSONMode()) {\n spinner.stop()\n outputError('SYNC_FAILED', error instanceof Error ? error.message : String(error))\n } else {\n spinner.fail(`Sync failed: ${error instanceof Error ? error.message : String(error)}`)\n }\n }\n process.exit(1)\n }\n })\n}\n","import { join } from 'node:path'\nimport type { AgentId } from '@agentver/agent-definitions'\nimport { getSkillPlacementPath } from '@agentver/agent-definitions'\nimport type { UpdateResult } from '@agentver/shared'\nimport chalk from 'chalk'\nimport type { Command } from 'commander'\nimport ora from 'ora'\nimport prompts from 'prompts'\nimport { readFilesFromDirectory } from '../git/fetcher.js'\nimport { fetchFiles, resolveRef } from '../git/index.js'\nimport type { GitSource as CliGitSource, ResolvedRef } from '../git/types.js'\nimport { createSpinner, isJSONMode, outputError, outputSuccess } from '../output.js'\nimport { resolveReadPath } from '../storage/canonical.js'\nimport { computeSha256FromFiles } from '../storage/integrity'\nimport { readLockfile } from '../storage/lockfile'\nimport { readManifest } from '../storage/manifest'\nimport { applyPatch, generatePatch, removePatch, savePatch } from '../storage/patches.js'\nimport { type BackupState, cleanupBackup, createBackup, restoreBackup } from '../utils/backup'\nimport { installPackage } from './install'\n\ntype UpdateInfo = {\n name: string\n currentCommit: string\n latestCommit: string\n ref: string\n sourceUri: string\n sourcePath: string\n locallyModified: boolean\n}\n\ntype UpdateAction = 'replace' | 'patch' | 'skip'\n\nfunction parseUriToCliSource(\n uri: string,\n path: string,\n ref: string,\n commit?: string\n): CliGitSource | null {\n const parts = uri.split('/')\n if (parts.length < 3) return null\n\n return {\n host: parts[0] as CliGitSource['host'],\n owner: parts[1]!,\n repo: parts[2]!,\n path,\n ref,\n commit,\n }\n}\n\nasync function checkLocalModifications(\n projectRoot: string,\n packageName: string,\n agents: string[]\n): Promise<boolean> {\n const lockfile = readLockfile(projectRoot)\n const lockEntry = lockfile.packages[packageName]\n if (!lockEntry) return false\n\n const shortName = packageName.split('/').pop()!\n\n const readPath = resolveReadPath(projectRoot, shortName, agents)\n if (readPath) {\n try {\n const localFiles = await readFilesFromDirectory(readPath)\n if (localFiles.length === 0) return false\n\n const localIntegrity = computeSha256FromFiles(\n localFiles.map((f) => ({ path: f.path, content: f.content }))\n )\n\n return localIntegrity !== lockEntry.integrity\n } catch {\n return false\n }\n }\n\n return false\n}\n\nasync function promptUpdateAction(packageName: string): Promise<UpdateAction> {\n const { action } = await prompts({\n type: 'select',\n name: 'action',\n message: `\"${packageName}\" has local modifications. What would you like to do?`,\n choices: [\n { title: 'Replace — discard local changes, apply upstream', value: 'replace' },\n { title: 'Patch — save local changes, apply upstream, reapply patch', value: 'patch' },\n { title: 'Skip — skip this package', value: 'skip' },\n ],\n initial: 1,\n })\n\n return (action as UpdateAction) ?? 'skip'\n}\n\nasync function handlePatchUpdate(\n update: UpdateInfo,\n projectRoot: string,\n agents: string[],\n spinner: ReturnType<typeof ora>\n): Promise<{ commitSha: string } | null> {\n const lockfile = readLockfile(projectRoot)\n const lockEntry = lockfile.packages[update.name]\n if (!lockEntry) return null\n\n const shortName = update.name.split('/').pop()!\n\n spinner.text = `Fetching original files for ${update.name} at locked commit...`\n\n const lockedSource = parseUriToCliSource(\n update.sourceUri,\n update.sourcePath,\n update.ref,\n update.currentCommit\n )\n if (!lockedSource) return null\n\n const lockedResolved: ResolvedRef = {\n source: lockedSource,\n commitSha: update.currentCommit,\n }\n\n let baseFiles: Array<{ path: string; content: string }>\n try {\n const fetchResult = await fetchFiles(lockedResolved)\n baseFiles = fetchResult.files.map((f) => ({ path: f.path, content: f.content }))\n } catch (error) {\n spinner.warn(\n `Could not fetch original files for ${update.name}: ${error instanceof Error ? error.message : String(error)}`\n )\n return null\n }\n\n const localFileArrays: Array<{ path: string; content: string }> = []\n const readPath = resolveReadPath(projectRoot, shortName, agents)\n if (readPath) {\n try {\n const files = await readFilesFromDirectory(readPath)\n localFileArrays.push(...files.map((f) => ({ path: f.path, content: f.content })))\n } catch {\n // Best-effort read\n }\n }\n\n spinner.text = `Generating patch for ${update.name}...`\n\n const patchContent = generatePatch(baseFiles, localFileArrays, update.name)\n\n if (!patchContent || patchContent.trim() === '') {\n spinner.info(\n `No meaningful differences found for ${update.name}, proceeding with standard update.`\n )\n return null\n }\n\n const patchPath = savePatch(projectRoot, update.name, patchContent)\n spinner.text = `Patch saved to ${patchPath}`\n\n spinner.text = `Applying upstream update for ${update.name}...`\n\n const sourceUrl = update.sourcePath\n ? `${update.sourceUri}/${update.sourcePath}@${update.ref}`\n : `${update.sourceUri}@${update.ref}`\n\n const agentId = agents[0]\n const result = await installPackage(sourceUrl, { agent: agentId })\n\n spinner.text = `Reapplying local patch for ${update.name}...`\n\n const applyResult = applyPatch(projectRoot, patchContent)\n\n if (applyResult.applied) {\n removePatch(projectRoot, update.name)\n spinner.succeed(`${chalk.green(update.name)}: updated and local patch reapplied successfully`)\n } else {\n spinner.warn(\n `${chalk.yellow(update.name)}: updated but patch had conflicts in: ${applyResult.conflicts.join(', ')}`\n )\n console.log(chalk.dim(` Patch saved at: ${patchPath}`))\n console.log(chalk.dim(' Review the patch file and apply remaining changes manually.'))\n }\n\n return { commitSha: result.commitSha }\n}\n\nexport function registerUpdateCommand(program: Command): void {\n program\n .command('update [name]')\n .description('Update installed skills to their latest upstream version')\n .option('--dry-run', 'Show what would be updated without making changes')\n .action(async (name: string | undefined, options: { dryRun?: boolean }) => {\n const jsonMode = isJSONMode()\n const projectRoot = process.cwd()\n const manifest = readManifest(projectRoot)\n const packages = name ? { [name]: manifest.packages[name] } : manifest.packages\n\n const packageNames = Object.keys(packages).filter((n) => packages[n])\n\n if (packageNames.length === 0) {\n if (jsonMode) {\n outputSuccess<UpdateResult>({ updated: [], skipped: [] })\n return\n }\n console.log(\n chalk.dim(name ? `Package \"${name}\" is not installed.` : 'No packages installed.')\n )\n return\n }\n\n const pinnedNames: string[] = []\n const updatable = packageNames.filter((n) => {\n const pkg = packages[n]\n if (!pkg) return false\n if (pkg.pinned === true) {\n pinnedNames.push(n)\n return false\n }\n return pkg.source.type === 'git' && pkg.source.uri !== 'unknown'\n })\n\n if (pinnedNames.length > 0 && !jsonMode) {\n for (const pinnedName of pinnedNames) {\n console.log(chalk.dim(`Skipping ${pinnedName} (pinned)`))\n }\n }\n\n if (updatable.length === 0) {\n if (jsonMode) {\n outputSuccess<UpdateResult>({\n updated: [],\n skipped: [\n ...pinnedNames.map((n) => ({ name: n, reason: 'pinned' })),\n ...packageNames\n .filter((n) => !pinnedNames.includes(n))\n .map((n) => ({ name: n, reason: 'No known Git source' })),\n ],\n })\n return\n }\n if (pinnedNames.length === 0) {\n console.log(\n chalk.dim(\n 'No packages with known Git sources. Reinstall packages using Git source URLs to enable updates.'\n )\n )\n }\n return\n }\n\n const spinner = createSpinner('Checking for upstream changes...').start()\n\n try {\n const updates: UpdateInfo[] = []\n\n for (const pkgName of updatable) {\n const pkg = packages[pkgName]!\n if (pkg.source.type !== 'git') continue\n\n const { uri, path, ref, commit: currentCommit } = pkg.source\n\n const cliSource = parseUriToCliSource(uri, path, ref)\n if (!cliSource) continue\n\n try {\n const resolved = await resolveRef(cliSource)\n\n if (resolved.commitSha !== currentCommit) {\n const locallyModified = await checkLocalModifications(\n projectRoot,\n pkgName,\n pkg.agents\n )\n\n updates.push({\n name: pkgName,\n currentCommit,\n latestCommit: resolved.commitSha,\n ref,\n sourceUri: uri,\n sourcePath: path,\n locallyModified,\n })\n }\n } catch {\n spinner.warn(`Could not check upstream for ${pkgName}`)\n }\n }\n\n spinner.stop()\n\n if (updates.length === 0) {\n if (jsonMode) {\n outputSuccess<UpdateResult>({ updated: [], skipped: [] })\n return\n }\n console.log(chalk.green('All packages are up to date.'))\n return\n }\n\n if (!jsonMode) {\n console.log(chalk.bold(`\\nUpstream changes available (${updates.length}):\\n`))\n\n for (const update of updates) {\n const modifiedIndicator = update.locallyModified\n ? ` ${chalk.yellow('\\u26a0 locally modified')}`\n : ''\n console.log(\n ` ${chalk.green(update.name)}: ${chalk.dim(update.currentCommit.slice(0, 7))} \\u2192 ${chalk.cyan(update.latestCommit.slice(0, 7))} ${chalk.dim(`(${update.ref})`)}${modifiedIndicator}`\n )\n }\n\n console.log()\n }\n\n if (options.dryRun) {\n if (jsonMode) {\n outputSuccess<UpdateResult>({\n updated: [],\n skipped: updates.map((u) => ({ name: u.name, reason: 'dry-run' })),\n })\n return\n }\n console.log(`${chalk.yellow('[dry-run]')} No changes made.`)\n return\n }\n\n if (!jsonMode) {\n const { confirmed } = await prompts({\n type: 'confirm',\n name: 'confirmed',\n message: `Update ${updates.length} package(s)?`,\n initial: true,\n })\n\n if (!confirmed) {\n console.log(chalk.dim('Update cancelled.'))\n return\n }\n }\n\n const jsonUpdated: UpdateResult['updated'] = []\n const jsonSkipped: UpdateResult['skipped'] = []\n const results: Array<{ name: string; from: string; to: string; patched?: boolean }> = []\n const failures: Array<{ name: string; error: string }> = []\n const skipped: string[] = []\n\n for (const update of updates) {\n const installedPkg = manifest.packages[update.name]\n const agents = installedPkg?.agents ?? []\n const agentId = agents[0]\n\n if (update.locallyModified) {\n let action: UpdateAction\n\n if (jsonMode) {\n action = 'replace'\n } else {\n action = await promptUpdateAction(update.name)\n }\n\n if (action === 'skip') {\n skipped.push(update.name)\n jsonSkipped.push({ name: update.name, reason: 'User skipped (locally modified)' })\n continue\n }\n\n if (action === 'patch') {\n const updateSpinner = ora(`Processing patch update for ${update.name}...`).start()\n\n try {\n const patchResult = await handlePatchUpdate(\n update,\n projectRoot,\n agents,\n updateSpinner\n )\n\n if (patchResult) {\n results.push({\n name: update.name,\n from: update.currentCommit.slice(0, 7),\n to: patchResult.commitSha.slice(0, 7),\n patched: true,\n })\n jsonUpdated.push({\n name: update.name,\n fromRef: update.currentCommit.slice(0, 7),\n toRef: patchResult.commitSha.slice(0, 7),\n strategy: 'patch',\n })\n continue\n }\n } catch (error) {\n updateSpinner.fail(\n `Patch update failed for ${update.name}: ${error instanceof Error ? error.message : String(error)}`\n )\n failures.push({\n name: update.name,\n error: error instanceof Error ? error.message : String(error),\n })\n jsonSkipped.push({\n name: update.name,\n reason: `Patch failed: ${error instanceof Error ? error.message : String(error)}`,\n })\n continue\n }\n }\n }\n\n const shortName = update.name.split('/').pop()!\n const skillDir =\n resolveReadPath(projectRoot, shortName, agents) ??\n (agentId\n ? join(\n projectRoot,\n getSkillPlacementPath(agentId as AgentId, shortName, 'project') ?? ''\n )\n : null)\n\n let backup: BackupState | null = null\n\n try {\n backup = createBackup(update.name, projectRoot, skillDir)\n\n const sourceUrl = update.sourcePath\n ? `${update.sourceUri}/${update.sourcePath}@${update.ref}`\n : `${update.sourceUri}@${update.ref}`\n\n const result = await installPackage(sourceUrl, { agent: agentId })\n\n cleanupBackup(backup)\n\n results.push({\n name: update.name,\n from: update.currentCommit.slice(0, 7),\n to: result.commitSha.slice(0, 7),\n })\n jsonUpdated.push({\n name: update.name,\n fromRef: update.currentCommit.slice(0, 7),\n toRef: result.commitSha.slice(0, 7),\n strategy: 'replace',\n })\n } catch (error) {\n if (backup) {\n try {\n restoreBackup(backup)\n cleanupBackup(backup)\n } catch {\n // Best-effort restore\n }\n }\n\n failures.push({\n name: update.name,\n error: error instanceof Error ? error.message : String(error),\n })\n jsonSkipped.push({\n name: update.name,\n reason: `Failed: ${error instanceof Error ? error.message : String(error)}`,\n })\n }\n }\n\n if (jsonMode) {\n outputSuccess<UpdateResult>({\n updated: jsonUpdated,\n skipped: [...pinnedNames.map((n) => ({ name: n, reason: 'pinned' })), ...jsonSkipped],\n })\n return\n }\n\n console.log(chalk.bold('\\nUpdate summary:\\n'))\n\n for (const result of results) {\n const patchNote = result.patched ? chalk.dim(' (patch reapplied)') : ''\n console.log(\n ` ${chalk.green('\\u2713')} ${result.name}: ${chalk.dim(result.from)} \\u2192 ${chalk.cyan(result.to)}${patchNote}`\n )\n }\n\n for (const skippedName of skipped) {\n console.log(` ${chalk.dim('\\u2013')} ${skippedName}: ${chalk.dim('skipped')}`)\n }\n\n for (const failure of failures) {\n console.log(` ${chalk.red('\\u2717')} ${failure.name}: ${failure.error}`)\n }\n\n if (failures.length > 0) {\n console.log(chalk.dim('\\nFailed packages were rolled back to their previous versions.'))\n }\n\n console.log()\n } catch (error) {\n if (jsonMode) {\n outputError('UPDATE_FAILED', error instanceof Error ? error.message : String(error))\n process.exit(1)\n }\n spinner.fail(\n `Update check failed: ${error instanceof Error ? error.message : String(error)}`\n )\n process.exit(1)\n }\n })\n}\n","import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs'\nimport { join } from 'node:path'\n\nconst PATCHES_DIR = '.agentver/patches'\nconst CONTEXT_LINES = 3\n\ntype FileEntry = { path: string; content: string }\n\ntype PatchHunk = {\n oldStart: number\n oldCount: number\n newStart: number\n newCount: number\n lines: string[]\n}\n\ntype FilePatch = {\n filePath: string\n hunks: PatchHunk[]\n}\n\ntype ApplyResult = {\n applied: boolean\n conflicts: string[]\n}\n\nfunction getPatchPath(projectRoot: string, packageName: string): string {\n return join(projectRoot, PATCHES_DIR, `${packageName}.patch`)\n}\n\nexport function savePatch(projectRoot: string, packageName: string, patchContent: string): string {\n const patchPath = getPatchPath(projectRoot, packageName)\n const dir = join(projectRoot, PATCHES_DIR)\n\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true })\n }\n\n writeFileSync(patchPath, patchContent, 'utf-8')\n return patchPath\n}\n\nexport function removePatch(projectRoot: string, packageName: string): void {\n const patchPath = getPatchPath(projectRoot, packageName)\n\n if (existsSync(patchPath)) {\n rmSync(patchPath)\n }\n}\n\nexport function generatePatch(\n baseFiles: FileEntry[],\n localFiles: FileEntry[],\n packageName: string\n): string {\n const baseMap = new Map(baseFiles.map((f) => [f.path, f.content]))\n const localMap = new Map(localFiles.map((f) => [f.path, f.content]))\n\n const allPaths = new Set([...baseMap.keys(), ...localMap.keys()])\n const sortedPaths = [...allPaths].sort()\n\n const output: string[] = []\n\n for (const filePath of sortedPaths) {\n const baseContent = baseMap.get(filePath)\n const localContent = localMap.get(filePath)\n\n if (baseContent === localContent) continue\n\n const baseLines = baseContent !== undefined ? baseContent.split('\\n') : []\n const localLines = localContent !== undefined ? localContent.split('\\n') : []\n\n const prefix = `${packageName}/`\n const aPath = baseContent !== undefined ? `a/${prefix}${filePath}` : '/dev/null'\n const bPath = localContent !== undefined ? `b/${prefix}${filePath}` : '/dev/null'\n\n const hunks = computeHunks(baseLines, localLines)\n if (hunks.length === 0) continue\n\n output.push(`--- ${aPath}`)\n output.push(`+++ ${bPath}`)\n\n for (const hunk of hunks) {\n output.push(`@@ -${hunk.oldStart},${hunk.oldCount} +${hunk.newStart},${hunk.newCount} @@`)\n output.push(...hunk.lines)\n }\n }\n\n if (output.length === 0) return ''\n\n return `${output.join('\\n')}\\n`\n}\n\nexport function applyPatch(projectRoot: string, patchContent: string): ApplyResult {\n const filePatches = parsePatch(patchContent)\n const conflicts: string[] = []\n\n for (const filePatch of filePatches) {\n const success = applyFilePatch(projectRoot, filePatch)\n if (!success) {\n conflicts.push(filePatch.filePath)\n }\n }\n\n return {\n applied: conflicts.length === 0,\n conflicts,\n }\n}\n\nfunction applyFilePatch(projectRoot: string, filePatch: FilePatch): boolean {\n const fullPath = join(projectRoot, filePatch.filePath)\n\n const hasOnlyAdditions = filePatch.hunks.every((h) =>\n h.lines.every((l) => l.startsWith('+') || l.startsWith(' '))\n )\n const hasOnlyDeletions = filePatch.hunks.every((h) =>\n h.lines.every((l) => l.startsWith('-') || l.startsWith(' '))\n )\n\n if (hasOnlyAdditions && !existsSync(fullPath)) {\n const content = filePatch.hunks\n .flatMap((h) => h.lines.filter((l) => l.startsWith('+')).map((l) => l.slice(1)))\n .join('\\n')\n\n const dir = join(fullPath, '..')\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true })\n }\n writeFileSync(fullPath, content, 'utf-8')\n return true\n }\n\n if (hasOnlyDeletions && existsSync(fullPath)) {\n rmSync(fullPath)\n return true\n }\n\n if (!existsSync(fullPath)) {\n return false\n }\n\n const currentContent = readFileSync(fullPath, 'utf-8')\n const currentLines = currentContent.split('\\n')\n let offset = 0\n\n for (const hunk of filePatch.hunks) {\n const result = applyHunk(currentLines, hunk, offset)\n if (!result.success) {\n return false\n }\n offset = result.offset\n }\n\n writeFileSync(fullPath, currentLines.join('\\n'), 'utf-8')\n return true\n}\n\nfunction applyHunk(\n lines: string[],\n hunk: PatchHunk,\n offset: number\n): { success: boolean; offset: number } {\n const oldLines = hunk.lines\n .filter((l) => l.startsWith(' ') || l.startsWith('-'))\n .map((l) => l.slice(1))\n\n const newLines = hunk.lines\n .filter((l) => l.startsWith(' ') || l.startsWith('+'))\n .map((l) => l.slice(1))\n\n const targetStart = hunk.oldStart - 1 + offset\n const searchRadius = CONTEXT_LINES\n const searchStart = Math.max(0, targetStart - searchRadius)\n const searchEnd = Math.min(lines.length, targetStart + oldLines.length + searchRadius)\n\n let matchPos = -1\n for (let i = searchStart; i <= searchEnd - oldLines.length; i++) {\n let matches = true\n for (let j = 0; j < oldLines.length; j++) {\n if (lines[i + j] !== oldLines[j]) {\n matches = false\n break\n }\n }\n if (matches) {\n matchPos = i\n break\n }\n }\n\n if (matchPos === -1) {\n return { success: false, offset }\n }\n\n lines.splice(matchPos, oldLines.length, ...newLines)\n\n return {\n success: true,\n offset: offset + (newLines.length - oldLines.length),\n }\n}\n\nfunction parsePatch(patchContent: string): FilePatch[] {\n const lines = patchContent.split('\\n')\n const filePatches: FilePatch[] = []\n\n let currentFile: FilePatch | null = null\n let i = 0\n\n while (i < lines.length) {\n const line = lines[i]!\n\n if (line.startsWith('--- ')) {\n const nextLine = lines[i + 1]\n if (nextLine?.startsWith('+++ ')) {\n const bPath = nextLine.slice(4)\n const filePath = extractFilePath(bPath)\n\n if (filePath) {\n currentFile = { filePath, hunks: [] }\n filePatches.push(currentFile)\n }\n i += 2\n continue\n }\n }\n\n if (line.startsWith('@@ ') && currentFile) {\n const hunkHeader = parseHunkHeader(line)\n if (hunkHeader) {\n const hunk: PatchHunk = { ...hunkHeader, lines: [] }\n\n i++\n while (i < lines.length) {\n const hunkLine = lines[i]!\n if (\n hunkLine.startsWith('--- ') ||\n hunkLine.startsWith('@@ ') ||\n (hunkLine === '' && i === lines.length - 1)\n ) {\n break\n }\n if (hunkLine.startsWith(' ') || hunkLine.startsWith('+') || hunkLine.startsWith('-')) {\n hunk.lines.push(hunkLine)\n }\n i++\n }\n\n currentFile.hunks.push(hunk)\n continue\n }\n }\n\n i++\n }\n\n return filePatches\n}\n\nfunction extractFilePath(bPath: string): string | null {\n if (bPath === '/dev/null') return null\n\n if (bPath.startsWith('b/')) {\n const withoutPrefix = bPath.slice(2)\n const slashIdx = withoutPrefix.indexOf('/')\n if (slashIdx !== -1) {\n return withoutPrefix.slice(slashIdx + 1)\n }\n return withoutPrefix\n }\n\n return bPath\n}\n\nfunction parseHunkHeader(\n line: string\n): { oldStart: number; oldCount: number; newStart: number; newCount: number } | null {\n const match = line.match(/^@@ -(\\d+),(\\d+) \\+(\\d+),(\\d+) @@/)\n if (!match) return null\n\n return {\n oldStart: Number.parseInt(match[1]!, 10),\n oldCount: Number.parseInt(match[2]!, 10),\n newStart: Number.parseInt(match[3]!, 10),\n newCount: Number.parseInt(match[4]!, 10),\n }\n}\n\n// --- Unified diff generation ---\n\ntype EditOp = {\n type: 'equal' | 'insert' | 'delete'\n oldIdx: number\n newIdx: number\n}\n\nfunction computeHunks(oldLines: string[], newLines: string[]): PatchHunk[] {\n const editOps = myersDiff(oldLines, newLines)\n\n const changeGroups: Array<{ start: number; end: number }> = []\n let groupStart = -1\n\n for (let i = 0; i < editOps.length; i++) {\n if (editOps[i]!.type !== 'equal') {\n if (groupStart === -1) groupStart = i\n } else if (groupStart !== -1) {\n changeGroups.push({ start: groupStart, end: i })\n groupStart = -1\n }\n }\n if (groupStart !== -1) {\n changeGroups.push({ start: groupStart, end: editOps.length })\n }\n\n if (changeGroups.length === 0) return []\n\n const mergedGroups = mergeCloseGroups(changeGroups, CONTEXT_LINES * 2)\n const hunks: PatchHunk[] = []\n\n for (const group of mergedGroups) {\n const firstChange = editOps[group.start]!\n const lastChange = editOps[group.end - 1]!\n\n const ctxOldStart = Math.max(0, firstChange.oldIdx - CONTEXT_LINES)\n const ctxNewStart = Math.max(0, firstChange.newIdx - CONTEXT_LINES)\n\n const lastOldIdx = lastChange.type === 'insert' ? lastChange.oldIdx : lastChange.oldIdx + 1\n const lastNewIdx = lastChange.type === 'delete' ? lastChange.newIdx : lastChange.newIdx + 1\n\n const ctxOldEnd = Math.min(oldLines.length, lastOldIdx + CONTEXT_LINES)\n const ctxNewEnd = Math.min(newLines.length, lastNewIdx + CONTEXT_LINES)\n\n const hunkLines: string[] = []\n let oldCount = 0\n let newCount = 0\n\n let oi = ctxOldStart\n let ni = ctxNewStart\n while (oi < firstChange.oldIdx && ni < firstChange.newIdx) {\n hunkLines.push(` ${oldLines[oi]!}`)\n oldCount++\n newCount++\n oi++\n ni++\n }\n\n for (let i = group.start; i < group.end; i++) {\n const op = editOps[i]!\n if (op.type === 'equal') {\n hunkLines.push(` ${oldLines[op.oldIdx]!}`)\n oldCount++\n newCount++\n } else if (op.type === 'delete') {\n hunkLines.push(`-${oldLines[op.oldIdx]!}`)\n oldCount++\n } else {\n hunkLines.push(`+${newLines[op.newIdx]!}`)\n newCount++\n }\n }\n\n const lastOp = editOps[group.end - 1]!\n let trailOi = lastOp.type === 'delete' ? lastOp.oldIdx + 1 : lastOp.oldIdx\n let trailNi = lastOp.type === 'insert' ? lastOp.newIdx + 1 : lastOp.newIdx\n if (lastOp.type === 'equal') {\n trailOi = lastOp.oldIdx + 1\n trailNi = lastOp.newIdx + 1\n }\n\n while (trailOi < ctxOldEnd && trailNi < ctxNewEnd) {\n hunkLines.push(` ${oldLines[trailOi]!}`)\n oldCount++\n newCount++\n trailOi++\n trailNi++\n }\n\n hunks.push({\n oldStart: ctxOldStart + 1,\n oldCount,\n newStart: ctxNewStart + 1,\n newCount,\n lines: hunkLines,\n })\n }\n\n return hunks\n}\n\nfunction mergeCloseGroups(\n groups: Array<{ start: number; end: number }>,\n threshold: number\n): Array<{ start: number; end: number }> {\n if (groups.length === 0) return []\n\n const merged = [{ ...groups[0]! }]\n\n for (let i = 1; i < groups.length; i++) {\n const prev = merged[merged.length - 1]!\n const current = groups[i]!\n const gap = current.start - prev.end\n\n if (gap <= threshold) {\n prev.end = current.end\n } else {\n merged.push({ ...current })\n }\n }\n\n return merged\n}\n\nfunction myersDiff(oldLines: string[], newLines: string[]): EditOp[] {\n const oldLen = oldLines.length\n const newLen = newLines.length\n\n if (oldLen === 0 && newLen === 0) return []\n\n if (oldLen === 0) {\n return newLines.map((_, i) => ({\n type: 'insert' as const,\n oldIdx: 0,\n newIdx: i,\n }))\n }\n\n if (newLen === 0) {\n return oldLines.map((_, i) => ({\n type: 'delete' as const,\n oldIdx: i,\n newIdx: 0,\n }))\n }\n\n const max = oldLen + newLen\n const vSize = 2 * max + 1\n const v = new Int32Array(vSize).fill(0)\n const trace: Int32Array[] = []\n\n const idx = (k: number) => k + max\n\n v[idx(1)] = 0\n\n for (let d = 0; d <= max; d++) {\n trace.push(new Int32Array(v))\n\n for (let k = -d; k <= d; k += 2) {\n let x: number\n if (k === -d || (k !== d && v[idx(k - 1)]! < v[idx(k + 1)]!)) {\n x = v[idx(k + 1)]!\n } else {\n x = v[idx(k - 1)]! + 1\n }\n\n let y = x - k\n\n while (x < oldLen && y < newLen && oldLines[x] === newLines[y]) {\n x++\n y++\n }\n\n v[idx(k)] = x\n\n if (x >= oldLen && y >= newLen) {\n return backtrackMyers(trace, oldLines, newLines, d, max)\n }\n }\n }\n\n return []\n}\n\nfunction backtrackMyers(\n trace: Int32Array[],\n oldLines: string[],\n newLines: string[],\n finalD: number,\n max: number\n): EditOp[] {\n const idx = (k: number) => k + max\n let x = oldLines.length\n let y = newLines.length\n const edits: EditOp[] = []\n\n for (let d = finalD; d > 0; d--) {\n const prev = trace[d - 1]!\n const k = x - y\n\n let prevK: number\n if (k === -d || (k !== d && prev[idx(k - 1)]! < prev[idx(k + 1)]!)) {\n prevK = k + 1\n } else {\n prevK = k - 1\n }\n\n const prevX = prev[idx(prevK)]!\n const prevY = prevX - prevK\n\n while (x > prevX && y > prevY) {\n x--\n y--\n edits.unshift({ type: 'equal', oldIdx: x, newIdx: y })\n }\n\n if (x > prevX) {\n x--\n edits.unshift({ type: 'delete', oldIdx: x, newIdx: y })\n } else if (y > prevY) {\n y--\n edits.unshift({ type: 'insert', oldIdx: x, newIdx: y })\n }\n }\n\n while (x > 0 && y > 0) {\n x--\n y--\n edits.unshift({ type: 'equal', oldIdx: x, newIdx: y })\n }\n\n return edits\n}\n","import { cpSync, existsSync, mkdirSync, mkdtempSync, rmSync } from 'node:fs'\nimport { tmpdir } from 'node:os'\nimport { join } from 'node:path'\nimport type { LockfileV2, ManifestV2 } from '@agentver/shared'\nimport { readLockfile, writeLockfile } from '../storage/lockfile'\nimport { readManifest, writeManifest } from '../storage/manifest'\n\ntype ManifestEntry = ManifestV2['packages'][string]\ntype LockfileEntry = LockfileV2['packages'][string]\n\nexport type BackupState = {\n packageName: string\n projectRoot: string\n tempDir: string\n skillDir: string | null\n manifestEntry: ManifestEntry | null\n lockfileEntry: LockfileEntry | null\n}\n\nexport function createBackup(\n packageName: string,\n projectRoot: string,\n skillDir: string | null\n): BackupState {\n const tempDir = mkdtempSync(join(tmpdir(), 'agentver-backup-'))\n\n const manifest = readManifest(projectRoot)\n const manifestEntry = manifest.packages[packageName] ?? null\n\n const lockfile = readLockfile(projectRoot)\n const lockfileEntry = lockfile.packages[packageName] ?? null\n\n if (skillDir && existsSync(skillDir)) {\n const backupSkillDir = join(tempDir, 'files')\n mkdirSync(backupSkillDir, { recursive: true })\n cpSync(skillDir, backupSkillDir, { recursive: true })\n }\n\n return {\n packageName,\n projectRoot,\n tempDir,\n skillDir,\n manifestEntry,\n lockfileEntry,\n }\n}\n\nexport function restoreBackup(backup: BackupState): void {\n // Restore skill files from backup\n if (backup.skillDir) {\n const backupSkillDir = join(backup.tempDir, 'files')\n\n if (existsSync(backupSkillDir)) {\n // Remove any partially-written new files\n if (existsSync(backup.skillDir)) {\n rmSync(backup.skillDir, { recursive: true, force: true })\n }\n\n mkdirSync(backup.skillDir, { recursive: true })\n cpSync(backupSkillDir, backup.skillDir, { recursive: true })\n }\n }\n\n // Restore manifest entry\n const manifest = readManifest(backup.projectRoot)\n\n if (backup.manifestEntry) {\n manifest.packages[backup.packageName] = backup.manifestEntry\n } else {\n delete manifest.packages[backup.packageName]\n }\n\n writeManifest(backup.projectRoot, manifest)\n\n // Restore lockfile entry\n const lockfile = readLockfile(backup.projectRoot)\n\n if (backup.lockfileEntry) {\n lockfile.packages[backup.packageName] = backup.lockfileEntry\n } else {\n delete lockfile.packages[backup.packageName]\n }\n\n writeLockfile(backup.projectRoot, lockfile)\n}\n\nexport function cleanupBackup(backup: BackupState): void {\n if (existsSync(backup.tempDir)) {\n rmSync(backup.tempDir, { recursive: true, force: true })\n }\n}\n","import { execFile } from 'node:child_process'\nimport { createRequire } from 'node:module'\nimport { dirname, join } from 'node:path'\nimport { fileURLToPath } from 'node:url'\nimport { promisify } from 'node:util'\nimport chalk from 'chalk'\nimport type { Command } from 'commander'\nimport { createSpinner, isJSONMode, outputError, outputSuccess } from '../output.js'\n\nconst execFileAsync = promisify(execFile)\nconst PACKAGE_NAME = '@agentver/cli'\n\ntype PackageManager = 'bun' | 'npm' | 'pnpm' | 'yarn'\n\ntype UpgradeResult = {\n previous: string\n latest: string\n packageManager: PackageManager\n}\n\nfunction getCurrentVersion(): string {\n const __dirname = dirname(fileURLToPath(import.meta.url))\n const require = createRequire(import.meta.url)\n const pkg = require(join(__dirname, '..', 'package.json')) as { version: string }\n return pkg.version\n}\n\nasync function getLatestVersion(): Promise<string> {\n const response = await fetch(`https://registry.npmjs.org/${PACKAGE_NAME}/latest`)\n if (!response.ok) {\n throw new Error(`Failed to check for updates: ${response.statusText}`)\n }\n const data = (await response.json()) as { version: string }\n return data.version\n}\n\nasync function detectPackageManager(): Promise<PackageManager> {\n const managers: PackageManager[] = ['bun', 'pnpm', 'yarn', 'npm']\n\n for (const pm of managers) {\n try {\n const { stdout } = await execFileAsync(pm, ['--version'], { timeout: 5000 })\n if (stdout.trim()) {\n const { stdout: listOut } = await execFileAsync(\n pm,\n pm === 'npm' ? ['list', '-g', PACKAGE_NAME, '--depth=0'] : ['pm', 'ls', '-g'],\n { timeout: 10000 }\n ).catch(() => ({ stdout: '' }))\n\n if (listOut.includes('agentver')) {\n return pm\n }\n }\n } catch {\n continue\n }\n }\n\n return 'npm'\n}\n\nfunction getInstallArgs(pm: PackageManager): string[] {\n switch (pm) {\n case 'bun':\n return ['install', '-g', `${PACKAGE_NAME}@latest`]\n case 'pnpm':\n return ['add', '-g', `${PACKAGE_NAME}@latest`]\n case 'yarn':\n return ['global', 'add', `${PACKAGE_NAME}@latest`]\n case 'npm':\n return ['install', '-g', `${PACKAGE_NAME}@latest`]\n }\n}\n\nexport function registerUpgradeCommand(program: Command): void {\n program\n .command('upgrade')\n .alias('self-update')\n .description('Upgrade Agentver CLI to the latest version')\n .action(async () => {\n const json = isJSONMode()\n const spinner = createSpinner('Checking for updates…')\n spinner.start()\n\n try {\n const currentVersion = getCurrentVersion()\n const latestVersion = await getLatestVersion()\n\n if (currentVersion === latestVersion) {\n if (json) {\n outputSuccess({ current: currentVersion, latest: latestVersion, upToDate: true })\n } else {\n spinner.succeed(`Already on the latest version ${chalk.green(`v${currentVersion}`)}`)\n }\n return\n }\n\n spinner.text = `Upgrading ${chalk.dim(`v${currentVersion}`)} → ${chalk.green(`v${latestVersion}`)}…`\n\n const pm = await detectPackageManager()\n const args = getInstallArgs(pm)\n\n await execFileAsync(pm, args, { timeout: 60000 })\n\n if (json) {\n const result: UpgradeResult = {\n previous: currentVersion,\n latest: latestVersion,\n packageManager: pm,\n }\n outputSuccess(result)\n } else {\n spinner.succeed(\n `Upgraded ${chalk.green(`v${currentVersion}`)} → ${chalk.green(`v${latestVersion}`)} via ${pm}`\n )\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n if (json) {\n outputError('UPGRADE_FAILED', message)\n process.exit(1)\n } else {\n spinner.fail(`Upgrade failed: ${message}`)\n process.exit(1)\n }\n }\n })\n}\n","import type { ManifestV2Package } from '@agentver/shared'\nimport chalk from 'chalk'\nimport type { Command } from 'commander'\nimport type ora from 'ora'\nimport { readFilesFromDirectory } from '../git/fetcher.js'\nimport type { GitSource } from '../git/types.js'\nimport { createSpinner, isJSONMode, outputError, outputSuccess } from '../output'\nimport { registryFetch } from '../registry/client.js'\nimport { SCAN_RULES, scanFiles } from '../security/index.js'\nimport type { ScanResult } from '../security/types.js'\nimport { getCanonicalSkillPath } from '../storage/canonical.js'\nimport { computeSha256FromFiles } from '../storage/integrity.js'\nimport { readLockfile } from '../storage/lockfile.js'\nimport { readManifest } from '../storage/manifest.js'\n\ntype VerifyOptions = {\n json?: boolean\n strict?: boolean\n}\n\ntype VerificationApiResponse = {\n isVerified: boolean\n publisherVerified: boolean\n publisherName: string\n publisherSlug: string\n authorVerified: boolean\n latestVersion: string | null\n sha256: string | null\n}\n\ntype VerifyResult = {\n skillName: string\n publisherVerified: boolean\n publisherSlug: string\n integrityPassed: boolean\n securityPassed: boolean\n securityRuleCount: number\n securityIssueCount: number\n overallPassed: boolean\n}\n\nconst FALLBACK_SOURCE: GitSource = {\n host: 'github.com',\n owner: 'local',\n repo: 'verify',\n path: '',\n ref: 'HEAD',\n}\n\nfunction buildSourceFromManifest(pkg: ManifestV2Package | undefined): GitSource {\n if (!pkg || pkg.source.type !== 'git') {\n return FALLBACK_SOURCE\n }\n\n const { source } = pkg\n const parts = source.uri.split('/')\n return {\n host: (parts[0] ?? 'github.com') as GitSource['host'],\n owner: parts[1] ?? 'unknown',\n repo: parts[2] ?? 'unknown',\n path: source.path,\n ref: source.ref,\n commit: source.commit,\n }\n}\n\nfunction parseSkillName(name: string): { org: string; skill: string } | null {\n // Supports @org/skill-name or org/skill-name\n const cleaned = name.startsWith('@') ? name.slice(1) : name\n const parts = cleaned.split('/')\n if (parts.length !== 2 || !parts[0] || !parts[1]) {\n return null\n }\n return { org: parts[0], skill: parts[1] }\n}\n\nasync function runSecurityScan(\n dirPath: string,\n source: GitSource,\n strict: boolean\n): Promise<{ passed: boolean; ruleCount: number; issueCount: number; result: ScanResult | null }> {\n try {\n const files = await readFilesFromDirectory(dirPath)\n\n if (files.length === 0) {\n return { passed: true, ruleCount: 0, issueCount: 0, result: null }\n }\n\n const result = await scanFiles(files, source, { skipAudit: false })\n const issueCount = result.findings.length\n\n let passed: boolean\n if (strict) {\n passed = result.verdict === 'PASS'\n } else {\n passed = result.verdict === 'PASS' || result.verdict === 'WARN'\n }\n\n // Count rules (each unique pattern ID in the scanner)\n const ruleCount = SCAN_RULES.length\n\n return { passed, ruleCount, issueCount, result }\n } catch {\n return { passed: false, ruleCount: 0, issueCount: 0, result: null }\n }\n}\n\nexport function registerVerifyCommand(program: Command): void {\n program\n .command('verify [name]')\n .description('Verify a skill — checks publisher, integrity, and security')\n .option('--strict', 'Fail on WARN verdicts, not just BLOCK')\n .action(async (name: string | undefined, options: VerifyOptions) => {\n const jsonMode = isJSONMode()\n const projectRoot = process.cwd()\n const strict = options.strict ?? false\n\n // Determine skill name — from argument or manifest\n let skillName: string\n if (name) {\n skillName = name\n } else {\n const manifest = readManifest(projectRoot)\n const packageNames = Object.keys(manifest.packages)\n if (packageNames.length === 0) {\n if (jsonMode) {\n outputError('NO_SKILL', 'No skill name provided and no packages installed')\n return\n }\n process.stderr.write(chalk.red('No skill name provided and no packages installed.\\n'))\n process.stderr.write(chalk.dim('Usage: agentver verify @org/skill-name\\n'))\n process.exitCode = 1\n return\n }\n if (packageNames.length === 1) {\n skillName = packageNames[0]!\n } else {\n if (jsonMode) {\n outputError(\n 'AMBIGUOUS_SKILL',\n `Multiple packages installed. Specify one: ${packageNames.join(', ')}`\n )\n return\n }\n process.stderr.write(\n chalk.red('Multiple packages installed. Please specify which to verify:\\n')\n )\n for (const pkg of packageNames) {\n process.stderr.write(` ${chalk.cyan(pkg)}\\n`)\n }\n process.exitCode = 1\n return\n }\n }\n\n const parsed = parseSkillName(skillName)\n if (!parsed) {\n if (jsonMode) {\n outputError(\n 'INVALID_NAME',\n `Invalid skill name \"${skillName}\". Expected format: @org/skill-name`\n )\n return\n }\n process.stderr.write(\n chalk.red(`Invalid skill name \"${skillName}\". Expected format: @org/skill-name\\n`)\n )\n process.exitCode = 1\n return\n }\n\n if (!jsonMode) {\n process.stderr.write(`\\n${chalk.bold(`Verifying @${parsed.org}/${parsed.skill}...`)}\\n\\n`)\n }\n\n // 1. Publisher verification — fetch from platform\n const publisherSpinner = createSpinner('Checking publisher verification...')\n publisherSpinner.start()\n\n let publisherVerified = false\n let publisherSlug = parsed.org\n\n try {\n const verifyData = await registryFetch<VerificationApiResponse>(\n `/skills/${parsed.org}/${parsed.skill}/verify`\n )\n publisherVerified = verifyData.publisherVerified\n publisherSlug = verifyData.publisherSlug\n\n if (!jsonMode) {\n if (publisherVerified) {\n ;(publisherSpinner as ReturnType<typeof ora>).succeed(\n `Publisher verified (@${publisherSlug})`\n )\n } else {\n ;(publisherSpinner as ReturnType<typeof ora>).fail(\n `Publisher not verified (@${publisherSlug})`\n )\n }\n } else {\n publisherSpinner.stop()\n }\n } catch (error) {\n if (!jsonMode) {\n const message = error instanceof Error ? error.message : String(error)\n ;(publisherSpinner as ReturnType<typeof ora>).warn(\n `Could not check publisher: ${message}`\n )\n } else {\n publisherSpinner.stop()\n }\n }\n\n // 2. Integrity check — compare local files against lockfile\n const integritySpinner = createSpinner('Checking integrity...')\n integritySpinner.start()\n\n let integrityPassed = false\n\n try {\n const manifest = readManifest(projectRoot)\n const lockfile = readLockfile(projectRoot)\n const pkg = manifest.packages[skillName]\n const lockPkg = lockfile.packages[skillName]\n\n if (pkg && lockPkg?.integrity) {\n const canonicalPath = getCanonicalSkillPath(projectRoot, skillName, 'project')\n const files = await readFilesFromDirectory(canonicalPath)\n\n if (files.length > 0) {\n const localHash = computeSha256FromFiles(files)\n integrityPassed = localHash === lockPkg.integrity\n }\n } else if (!pkg) {\n // Skill not installed locally — skip integrity (not a failure)\n integrityPassed = true\n }\n\n if (!jsonMode) {\n if (integrityPassed) {\n ;(integritySpinner as ReturnType<typeof ora>).succeed(\n 'Integrity check passed (SHA256 match)'\n )\n } else {\n ;(integritySpinner as ReturnType<typeof ora>).fail(\n 'Integrity check failed (SHA256 mismatch)'\n )\n }\n } else {\n integritySpinner.stop()\n }\n } catch {\n integrityPassed = false\n if (!jsonMode) {\n ;(integritySpinner as ReturnType<typeof ora>).warn(\n 'Integrity check skipped (skill not installed locally)'\n )\n integrityPassed = true // Not a failure if not installed\n } else {\n integritySpinner.stop()\n integrityPassed = true\n }\n }\n\n // 3. Security audit\n const securitySpinner = createSpinner('Running security audit...')\n securitySpinner.start()\n\n let securityPassed = true\n let securityRuleCount = 0\n let securityIssueCount = 0\n\n try {\n const manifest = readManifest(projectRoot)\n const pkg = manifest.packages[skillName]\n\n if (pkg) {\n const canonicalPath = getCanonicalSkillPath(projectRoot, skillName, 'project')\n const source = buildSourceFromManifest(pkg)\n const scanResult = await runSecurityScan(canonicalPath, source, strict)\n\n securityPassed = scanResult.passed\n securityRuleCount = scanResult.ruleCount\n securityIssueCount = scanResult.issueCount\n }\n\n if (!jsonMode) {\n if (securityPassed) {\n ;(securitySpinner as ReturnType<typeof ora>).succeed(\n `Security audit passed (${securityRuleCount} rules, ${securityIssueCount} issues)`\n )\n } else {\n ;(securitySpinner as ReturnType<typeof ora>).fail(\n `Security audit failed (${securityRuleCount} rules, ${securityIssueCount} issues)`\n )\n }\n } else {\n securitySpinner.stop()\n }\n } catch {\n securityPassed = false\n if (!jsonMode) {\n ;(securitySpinner as ReturnType<typeof ora>).warn('Security audit could not run')\n } else {\n securitySpinner.stop()\n }\n }\n\n // Summary\n const overallPassed = publisherVerified && integrityPassed && securityPassed\n\n const result: VerifyResult = {\n skillName,\n publisherVerified,\n publisherSlug,\n integrityPassed,\n securityPassed,\n securityRuleCount,\n securityIssueCount,\n overallPassed,\n }\n\n if (jsonMode) {\n outputSuccess(result)\n return\n }\n\n process.stderr.write('\\n')\n\n if (overallPassed) {\n process.stderr.write(chalk.green.bold('Skill is verified and safe to use.\\n'))\n } else {\n process.stderr.write(chalk.red.bold('Skill verification failed.\\n'))\n process.exitCode = 1\n }\n })\n}\n","import { existsSync, readFileSync } from 'node:fs'\nimport { basename, join } from 'node:path'\nimport chalk from 'chalk'\nimport type { Command } from 'commander'\nimport ora from 'ora'\nimport { platformFetch } from '../registry/platform.js'\nimport { readLockfile } from '../storage/lockfile.js'\nimport { readManifest } from '../storage/manifest.js'\n\ntype VersionInfo = {\n name: string\n tag: string\n commitSha: string\n message: string\n}\n\ntype VersionCreateResponse = {\n tag: string\n commitSha: string\n}\n\ntype VersionListOptions = {\n json?: boolean\n}\n\ntype VersionCreateOptions = {\n notes?: string\n json?: boolean\n}\n\nconst SEMVER_REGEX = /^\\d+\\.\\d+\\.\\d+(-[\\w.]+)?$/\n\n/**\n * Resolve the skill identity from the current directory and manifest.\n */\nfunction resolveSkillIdentity(): { org: string; name: string } | null {\n const cwd = process.cwd()\n const skillMdPath = join(cwd, 'SKILL.md')\n\n let skillName: string | null = null\n\n if (existsSync(skillMdPath)) {\n const content = readFileSync(skillMdPath, 'utf-8')\n const nameMatch = content.match(/^name:\\s*(.+)$/m)\n skillName = nameMatch?.[1]?.trim() ?? basename(cwd)\n }\n\n if (!skillName) {\n skillName = basename(cwd)\n }\n\n const manifest = readManifest(cwd)\n const entry = manifest.packages[skillName]\n\n if (entry?.source.type === 'git') {\n const parts = entry.source.uri.split('/')\n const org = parts.length >= 2 ? parts[parts.length - 2] : parts[0]\n if (org) {\n return { org, name: skillName }\n }\n }\n\n // Fallback: directory structure\n const pathParts = cwd.split('/')\n const skillsIdx = pathParts.lastIndexOf('skills')\n if (skillsIdx >= 0 && pathParts.length > skillsIdx + 2) {\n return { org: pathParts[skillsIdx + 1]!, name: skillName }\n }\n\n return null\n}\n\nexport function registerVersionCommand(program: Command): void {\n const version = program.command('version').description('Manage skill versions (tags)')\n\n // --- version create <semver> ---\n version\n .command('create <semver>')\n .description('Create a version tag for the current skill')\n .option('--notes <text>', 'Release notes')\n .option('--json', 'Output as JSON')\n .action(async (semver: string, options: VersionCreateOptions) => {\n if (!SEMVER_REGEX.test(semver)) {\n process.stderr.write(\n chalk.red(`Invalid semver \"${semver}\". Expected format: 1.0.0 or 1.0.0-beta.1\\n`)\n )\n process.exit(1)\n }\n\n const identity = resolveSkillIdentity()\n if (!identity) {\n process.stderr.write(\n chalk.red('Could not determine skill identity. Run this from a skill directory.\\n')\n )\n process.exit(1)\n }\n\n // Get the current commit SHA from lockfile\n const lockfile = readLockfile(process.cwd())\n const lockEntry = lockfile.packages[identity.name]\n const commitSha = lockEntry?.source.type === 'git' ? lockEntry.source.commit : undefined\n\n if (!commitSha || commitSha === 'unknown') {\n process.stderr.write(chalk.red('No commit SHA found in lockfile. Save changes first.\\n'))\n process.exit(1)\n }\n\n const spinner = ora(`Creating version ${semver}...`).start()\n\n try {\n const result = await platformFetch<VersionCreateResponse>(\n `/skills/@${identity.org}/${identity.name}/versions`,\n {\n method: 'POST',\n body: {\n version: semver,\n notes: options.notes,\n commitSha,\n },\n }\n )\n\n if (options.json) {\n spinner.stop()\n console.log(\n JSON.stringify(\n {\n skill: `@${identity.org}/${identity.name}`,\n version: semver,\n tag: result.tag,\n commitSha: result.commitSha,\n },\n null,\n 2\n )\n )\n } else {\n spinner.succeed(\n `Version ${chalk.cyan(semver)} created ${chalk.dim(`(${result.commitSha.slice(0, 7)})`)}`\n )\n }\n } catch (error) {\n spinner.fail(\n `Failed to create version: ${error instanceof Error ? error.message : String(error)}`\n )\n process.exit(1)\n }\n })\n\n // --- version list ---\n version\n .command('list')\n .description('List versions for the current skill')\n .option('--json', 'Output as JSON')\n .action(async (options: VersionListOptions) => {\n const identity = resolveSkillIdentity()\n if (!identity) {\n process.stderr.write(\n chalk.red('Could not determine skill identity. Run this from a skill directory.\\n')\n )\n process.exit(1)\n }\n\n const spinner = ora('Fetching versions...').start()\n\n try {\n const versions = await platformFetch<VersionInfo[]>(\n `/skills/@${identity.org}/${identity.name}/versions`\n )\n\n spinner.stop()\n\n if (options.json) {\n console.log(JSON.stringify({ versions }, null, 2))\n return\n }\n\n if (versions.length === 0) {\n process.stdout.write(chalk.dim('No versions found.\\n'))\n return\n }\n\n process.stdout.write(chalk.bold(`\\nVersions for @${identity.org}/${identity.name}:\\n\\n`))\n\n for (const v of versions) {\n process.stdout.write(\n ` ${chalk.cyan(v.name)} ${chalk.dim(`(${v.commitSha.slice(0, 7)})`)} ${chalk.dim(v.message)}\\n`\n )\n }\n\n process.stdout.write('\\n')\n } catch (error) {\n spinner.fail(\n `Failed to list versions: ${error instanceof Error ? error.message : String(error)}`\n )\n process.exit(1)\n }\n })\n}\n","import type { WhoamiResult } from '@agentver/shared'\nimport chalk from 'chalk'\nimport type { Command } from 'commander'\nimport { isJSONMode, outputSuccess } from '../output.js'\nimport { getCredentials } from '../registry/auth.js'\nimport { getPlatformUrl } from '../registry/config.js'\nimport { platformFetchSilent } from '../registry/platform.js'\n\ntype MeResponse = {\n id: string\n email: string\n name: string\n organisations: Array<{ slug: string; name: string; role: string }>\n}\n\nexport function registerWhoamiCommand(program: Command): void {\n program\n .command('whoami')\n .description('Show authentication state')\n .action(async () => {\n const credentials = await getCredentials()\n\n if (!credentials?.token && !credentials?.apiKey) {\n if (isJSONMode()) {\n outputSuccess<WhoamiResult>({ authenticated: false })\n return\n }\n console.log(chalk.dim('Not authenticated. Run `agentver login` to sign in.'))\n return\n }\n\n if (!isJSONMode()) {\n if (credentials.apiKey) {\n const prefix = credentials.apiKey.slice(0, 8)\n console.log(`Authenticated via API key: ${chalk.green(`${prefix}...`)}`)\n } else {\n console.log(chalk.green('Authenticated via OAuth.'))\n }\n }\n\n const platformUrl = getPlatformUrl()\n\n if (!platformUrl) {\n if (isJSONMode()) {\n outputSuccess<WhoamiResult>({ authenticated: true })\n return\n }\n console.log(chalk.dim('Platform: not connected (run `agentver login <url>` to connect)'))\n return\n }\n\n if (!isJSONMode()) {\n console.log(`Platform: ${chalk.cyan(platformUrl)}`)\n }\n\n const me = await platformFetchSilent<MeResponse>('/me')\n\n if (isJSONMode()) {\n const result: WhoamiResult = {\n authenticated: true,\n platform: platformUrl,\n }\n if (me) {\n result.user = { id: me.id, email: me.email, name: me.name }\n if (me.organisations.length > 0) {\n result.organisation = me.organisations.map((o) => o.slug).join(', ')\n }\n }\n outputSuccess(result)\n return\n }\n\n if (!me) return\n\n console.log(`User: ${me.email}`)\n\n if (me.organisations.length > 0) {\n const orgSlugs = me.organisations.map((o) => o.slug).join(', ')\n console.log(`Organisations: ${orgSlugs}`)\n }\n })\n}\n"],"mappings":"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","names":["createRequire","dirname","join","fileURLToPath","chalk","readFileSync","existsSync","join","z","z","z","join","formattedArgs","z","z","join","pkg","existsSync","existsSync","mkdirSync","readFileSync","renameSync","writeFileSync","join","join","migrateV1ToV2","pkg","existsSync","readFileSync","mkdirSync","writeFileSync","renameSync","readFileSync","program","join","chalk","join","existsSync","mkdirSync","readdirSync","readFileSync","statSync","writeFileSync","homedir","dirname","join","join","homedir","existsSync","dirname","mkdirSync","writeFileSync","readdirSync","readFileSync","statSync","logger","join","chalk","existsSync","mkdirSync","readFileSync","writeFileSync","homedir","join","existsSync","mkdirSync","readFileSync","writeFileSync","homedir","join","join","homedir","existsSync","readFileSync","mkdirSync","writeFileSync","existsSync","mkdirSync","readdirSync","homedir","dirname","join","chalk","logger","homedir","join","existsSync","dirname","mkdirSync","readdirSync","pkg","program","join","chalk","existsSync","readFileSync","homedir","join","chalk","join","homedir","existsSync","readFileSync","chalk","program","chalk","formatValue","chalk","program","chalk","logger","i","j","chalk","program","existsSync","lstatSync","readFileSync","readlinkSync","dirname","join","chalk","MANIFEST_DIR","MANIFEST_FILE","LOCKFILE_FILE","join","existsSync","readFileSync","lstatSync","pkg","readlinkSync","dirname","chalk","program","existsSync","readFileSync","basename","join","chalk","ora","resolve","join","existsSync","readFileSync","basename","program","chalk","ora","readFileSync","join","chalk","formatBytes","program","pkg","chalk","join","readFileSync","existsSync","mkdirSync","writeFileSync","join","chalk","chalk","mkdirSync","writeFileSync","join","program","existsSync","existsSync","mkdirSync","readFileSync","writeFileSync","homedir","dirname","join","relative","chalk","prompts","createHash","createHash","z","hostname","hostname","chalk","prompts","installPath","homedir","join","existsSync","mkdirSync","readFileSync","writeFileSync","relative","canonicalPath","dirname","program","chalk","program","chalk","pkg","hostname","existsSync","readFileSync","basename","join","chalk","ora","resolveSkillIdentity","entry","join","existsSync","readFileSync","basename","program","chalk","ora","createHash","URL","chalk","REQUEST_TIMEOUT_MS","chalk","chalk","createHash","resolve","URL","program","chalk","chalk","program","chalk","chalk","program","pkg","chalk","existsSync","readFileSync","basename","join","resolve","chalk","ora","parseFrontmatter","join","existsSync","readFileSync","basename","resolve","program","chalk","ora","existsSync","lstatSync","rmSync","join","chalk","program","pkg","chalk","join","existsSync","rmSync","lstatSync","existsSync","readFileSync","basename","join","resolve","chalk","ora","join","existsSync","readFileSync","basename","resolve","program","chalk","ora","readFileSync","homedir","chalk","program","homedir","chalk","readFileSync","pkg","chalk","ora","z","chalk","hostname","program","spinner","ora","chalk","chalk","parseManifestUri","readLocalFiles","locallyModified","program","pkg","existsSync","join","chalk","HTTP_TIMEOUT_MS","readLocalFiles","join","existsSync","program","chalk","chalk","HTTP_TIMEOUT_MS","formatDate","chalk","program","createHash","hostname","chalk","getMachineId","createHash","hostname","program","chalk","pkg","join","chalk","ora","prompts","existsSync","mkdirSync","readFileSync","rmSync","writeFileSync","join","CONTEXT_LINES","computeHunks","existsSync","mkdirSync","rmSync","tmpdir","join","join","tmpdir","existsSync","mkdirSync","rmSync","prompts","chalk","program","pkg","ora","join","execFile","dirname","join","promisify","chalk","execFileAsync","promisify","execFile","__dirname","dirname","require","pkg","join","program","chalk","chalk","FALLBACK_SOURCE","buildSourceFromManifest","pkg","program","chalk","existsSync","readFileSync","basename","join","chalk","ora","SEMVER_REGEX","resolveSkillIdentity","join","existsSync","readFileSync","basename","program","chalk","ora","chalk","program","chalk","dirname","fileURLToPath","require","createRequire","join","chalk"]}
|