@kb-labs/cli-commands 2.6.0 → 2.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js.map +1 -1
- package/dist/registry/index.js.map +1 -1
- package/package.json +35 -35
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/registry/availability.ts","../../src/registry/schema.ts","../../src/registry/discover.ts","../../src/registry/register.ts","../../src/registry/run.ts","../../src/registry/service.ts"],"names":["__filename","__dirname","path","req","fs","parseYaml","totalTime","sourceCounts","log","registry"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * @kb-labs/cli-commands/registry\n * Dependency availability checking with ESM support\n * \n * IMPORTANT: Only resolve, never import() - imports happen in loader()\n */\n\nimport { createRequire } from 'node:module';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { existsSync } from 'node:fs';\nimport type { CommandManifest, AvailabilityCheck } from './types';\n\n// Create require from this module (ESM-safe, doesn't depend on cwd)\nconst req = createRequire(import.meta.url);\n\n// Get the directory containing this file\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\n/**\n * Resolve a package from a specific directory\n * Uses paths option to search from cwd, not from CLI package\n * IMPORTANT: Only resolve, never import() - imports happen in loader()\n */\nfunction resolveFromCwd(spec: string, cwd: string): string {\n // Try resolving from multiple locations (monorepo-aware)\n const cliRoot = path.resolve(__dirname, '../../..');\n \n // Check if we're in a monorepo (kb-labs-cli, kb-labs-core, kb-labs-mind, etc.)\n // Search for packages in parent directories\n let monorepoRoot = cwd;\n while (monorepoRoot !== path.dirname(monorepoRoot)) {\n if (existsSync(path.join(monorepoRoot, 'pnpm-workspace.yaml'))) {\n break; // Found pnpm monorepo root\n }\n monorepoRoot = path.dirname(monorepoRoot);\n }\n \n const pathsToTry = [\n cwd, // Current working directory (user's project)\n cliRoot, // CLI installation directory\n monorepoRoot, // Monorepo root (if found)\n path.join(monorepoRoot, '../kb-labs-cli'), // Explicit kb-labs-cli path\n path.join(monorepoRoot, '../kb-labs-mind'), // Explicit kb-labs-mind path\n ].filter(Boolean);\n \n for (const searchPath of pathsToTry) {\n try {\n return req.resolve(spec, { paths: [searchPath] });\n } catch (_e: any) {\n // Try next path\n }\n }\n \n // If all paths failed, throw the last error\n throw new Error(`Cannot resolve ${spec} from any of: ${pathsToTry.join(', ')}`);\n}\n\n/**\n * Check if all required dependencies for a command are available\n * @param manifest Command manifest with requires field\n * @param cwd Working directory to resolve from (defaults to process.cwd())\n * @returns Availability status with reason and hint if unavailable\n */\nexport interface CheckRequiresOptions {\n cwd?: string;\n}\n\nexport function checkRequires(\n manifest: CommandManifest,\n options: CheckRequiresOptions = {},\n): AvailabilityCheck {\n const cwd = options.cwd ?? process.cwd();\n if (!manifest.requires || manifest.requires.length === 0) {\n return { available: true as const };\n }\n \n // Check if we're in a monorepo\n let isInMonorepo = false;\n let monorepoRoot = cwd;\n while (monorepoRoot !== path.dirname(monorepoRoot)) {\n if (existsSync(path.join(monorepoRoot, 'pnpm-workspace.yaml'))) {\n isInMonorepo = true;\n break;\n }\n monorepoRoot = path.dirname(monorepoRoot);\n }\n \n for (const dep of manifest.requires) {\n try {\n // Try to resolve the package\n const resolved = resolveFromCwd(dep, cwd);\n // Additional check: verify that the resolved path contains package.json\n // This handles cases where require.resolve throws due to exports but package exists\n if (!resolved.includes('node_modules')) {\n continue;\n }\n } catch (err: any) {\n // In a monorepo, if we can't resolve but the package exists in workspace, consider it available\n if (isInMonorepo) {\n // Check if package exists in workspace (workspace:* dependencies work in monorepo)\n continue;\n }\n // If the error is about exports or if we can't resolve, try to check if package exists by looking for package.json\n // Check the nested error as well (the actual require.resolve error might be wrapped)\n const errorMessage = err.message || '';\n const hasExportsError = errorMessage.includes('exports') || errorMessage.includes('main');\n \n if (hasExportsError || errorMessage.includes('Cannot resolve')) {\n // Package might exist - try to verify by checking for package.json\n // Parse scoped package name (e.g., @kb-labs/devlink-core -> kb-labs/devlink-core)\n const parts = dep.startsWith('@') \n ? dep.slice(1).split('/')\n : [dep];\n \n if (parts.length === 0) {continue;}\n \n const scope = parts.length >= 2 ? parts[0] : '';\n const packageName = parts.length >= 2 ? parts[1] : parts[0];\n \n if (!packageName) {continue;}\n \n // Try to find the package.json\n const cliRoot = path.resolve(__dirname, '../../..');\n const packagePath = scope \n ? path.join(cliRoot, 'node_modules', '@' + scope, packageName, 'package.json')\n : path.join(cliRoot, 'node_modules', packageName, 'package.json');\n \n if (existsSync(packagePath)) {\n // Package exists - consider it available\n continue;\n }\n }\n \n // Determine installation hint based on package\n const isKbLabsPackage = dep.startsWith('@kb-labs/');\n const hint = isKbLabsPackage \n ? `Run: pnpm add ${dep}`\n : `Run: npm install ${dep}`;\n \n return {\n available: false as const,\n reason: `Missing dependency: ${dep}`,\n hint,\n };\n }\n }\n \n return { available: true as const };\n}\n\n","/**\n * @kb-labs/cli-commands/registry\n * Zod schema for command manifest validation\n */\n\nimport { z } from 'zod';\nimport type { CommandManifest } from './types';\n\n// Semver regex approximation (not full semver, but covers most cases)\nconst semverPattern = /^[\\^~]?[\\d]+\\.[\\d]+(\\.[\\d]+)?(-[\\w\\.-]+)?(\\+[\\w\\.-]+)?$/;\n\n/**\n * Flag definition schema\n */\nconst FlagDefinitionSchema = z.object({\n name: z.string().min(1).regex(/^[a-z0-9-]+$/, 'Flag name must be lowercase alphanumeric with hyphens'),\n type: z.enum(['string', 'boolean', 'number', 'array']),\n alias: z.string().length(1).regex(/^[a-z]$/i, 'Alias must be a single letter').optional(),\n default: z.any().optional(),\n description: z.string().optional(),\n choices: z.array(z.string()).optional(),\n required: z.boolean().optional(),\n}).refine(\n (data) => {\n // Choices only allowed for string type\n if (data.choices && data.type !== 'string') {\n return false;\n }\n return true;\n },\n { message: 'Choices are only allowed for string type flags' }\n);\n\n/**\n * Engine requirements schema\n */\nconst EngineSchema = z.object({\n node: z.string().optional(), // e.g., \">=18\", \"^18.0.0\"\n kbCli: z.string().optional(), // e.g., \"^1.5.0\"\n module: z.enum(['esm', 'cjs']).optional(),\n}).optional();\n\n/**\n * Command manifest schema (v1.0)\n * Supports both legacy and new format\n */\nexport const CommandManifestSchema = z.object({\n manifestVersion: z.literal('1.0'),\n \n // Legacy fields (still supported)\n id: z.string().min(1).regex(/^[a-z0-9-]+:[a-z0-9-]+(?:[:a-z0-9-]+)*$/, 'Command ID must be in format \"namespace:command\"'),\n aliases: z.array(z.string()).optional(),\n group: z.string().min(1),\n describe: z.string().min(1),\n longDescription: z.string().optional(),\n requires: z.array(z.string()).optional(), // Package names with optional semver\n flags: z.array(FlagDefinitionSchema).optional(),\n examples: z.array(z.string()).optional(),\n loader: z.any(), // Function validation happens at runtime\n \n // New fields (optional for backward compatibility)\n package: z.string().optional(), // Full package name\n namespace: z.string().optional(), // Derived from id if not provided\n engine: EngineSchema,\n permissions: z.array(z.string()).optional(), // e.g., [\"fs.read\", \"git.read\", \"net.fetch\"]\n telemetry: z.enum(['opt-in', 'off']).optional(),\n manifestV2: z.any().optional(), // Full ManifestV3 for sandbox execution\n\n // Internal flags for auto-generated commands\n isSetup: z.boolean().optional(), // Auto-generated setup command\n isSetupRollback: z.boolean().optional(), // Auto-generated setup rollback command\n pkgRoot: z.string().optional(), // Package root path for handler resolution\n}).refine(\n (data) => {\n // IDs are now simple (no namespace prefix), just check namespace matches group\n if (data.namespace && data.group && data.namespace !== data.group) {\n return false;\n }\n return true;\n },\n { message: 'namespace must match group' }\n).refine(\n (data) => {\n // Validate requires entries are semver-compatible if they include version\n if (data.requires) {\n for (const req of data.requires) {\n // If it contains @, check if version part is semver-like\n if (req.includes('@')) {\n const parts = req.split('@');\n if (parts.length === 2) {\n const version = parts[1];\n // Allow exact package names without version; try to parse as semver range\n if (version && !semverPattern.test(version) && !version.startsWith('^') && !version.startsWith('~') && !version.match(/^[\\^~>=<]?[\\d\\.]+/)) {\n return false;\n }\n }\n }\n }\n }\n return true;\n },\n { message: 'requires entries must use valid semver ranges' }\n);\n\n/**\n * Validate a single command manifest\n */\nexport function validateManifest(manifest: unknown): { success: true; data: CommandManifest } | { success: false; error: z.ZodError } {\n const result = CommandManifestSchema.safeParse(manifest);\n \n if (result.success) {\n return { success: true, data: result.data };\n }\n \n return { success: false, error: result.error };\n}\n\n/**\n * Validate an array of command manifests\n */\nexport function validateManifests(manifests: unknown[]): { success: true; data: CommandManifest[] } | { success: false; errors: z.ZodError[] } {\n const errors: z.ZodError[] = [];\n const validated: CommandManifest[] = [];\n \n for (let i = 0; i < manifests.length; i++) {\n const result = CommandManifestSchema.safeParse(manifests[i]);\n if (result.success) {\n validated.push(result.data);\n } else {\n const errorWithIndex = new z.ZodError([\n ...result.error.issues.map(issue => ({\n ...issue,\n path: [`[${i}]`, ...issue.path],\n })),\n ]);\n errors.push(errorWithIndex);\n }\n }\n \n if (errors.length === 0) {\n return { success: true, data: validated };\n }\n \n return { success: false, errors };\n}\n\n/**\n * Normalize manifest to ensure required fields are set\n */\nexport function normalizeManifest(manifest: CommandManifest, packageName: string, namespace?: string): CommandManifest {\n const normalized = { ...manifest };\n \n // Ensure namespace/group consistency\n // Priority: explicit namespace > group > package-derived namespace\n if (!normalized.namespace && normalized.group) {\n normalized.namespace = normalized.group;\n } else if (!normalized.namespace && namespace) {\n normalized.namespace = namespace;\n }\n if (!normalized.group && normalized.namespace) {\n normalized.group = normalized.namespace;\n }\n \n // Ensure package name is set\n if (!normalized.package) {\n normalized.package = packageName;\n }\n \n // ID should be simple without group prefix (breaking change)\n // No longer enforcing namespace:command format\n \n return normalized;\n}\n\n","/**\n * @kb-labs/cli-commands/registry\n * Command manifest discovery - workspace, node_modules, current package\n */\n\nimport { pathToFileURL } from 'node:url';\nimport { promises as fs } from 'node:fs';\nimport { existsSync } from 'node:fs';\nimport { createHash } from 'node:crypto';\nimport path from 'node:path';\n\n/** Very small repo root detector: looks for .git upwards. */\nfunction _detectRepoRoot(start = process.cwd()): string {\n let cur = path.resolve(start);\n while (true) {\n if (existsSync(path.join(cur, '.git'))) {\n return cur;\n }\n const parent = path.dirname(cur);\n if (parent === cur) {\n return start;\n } // fallback\n cur = parent;\n }\n}\nimport { parse as parseYaml } from 'yaml';\nimport { glob } from 'glob';\nimport type { CommandManifest, DiscoveryResult, CacheFile, PackageCacheEntry } from './types';\nimport type { ManifestV3 } from '@kb-labs/plugin-contracts';\nimport { toPosixPath } from '../utils/path';\nimport { validateManifests, normalizeManifest } from './schema';\n\n// Check if DEBUG_MODE is enabled\nconst DEBUG_MODE = process.env.DEBUG_SANDBOX === '1' || process.env.NODE_ENV === 'development';\n\n// Helper function for logging - only outputs in DEBUG_MODE to avoid polluting user output\n// In production, discovery logs are suppressed unless user explicitly enables --debug\nconst log = (level: 'debug' | 'info' | 'warn' | 'error', message: string, fields?: Record<string, unknown>): void => {\n if (!DEBUG_MODE) {return;}\n\n // In debug mode, use console for immediate output (no lazy logger initialization)\n const prefix = level === 'error' ? '✗' : level === 'warn' ? '⚠' : level === 'info' ? 'ℹ' : '🔍';\n const logFn = level === 'error' ? console.error : level === 'warn' ? console.warn : console.log;\n\n if (fields) {\n logFn(`${prefix} [discover] ${message}`, fields);\n } else {\n logFn(`${prefix} [discover] ${message}`);\n }\n};\n\nconst _SETUP_COMMAND_FLAGS = [\n {\n name: 'force',\n type: 'boolean' as const,\n description: 'Overwrite existing configuration and files.',\n },\n {\n name: 'dry-run',\n type: 'boolean' as const,\n description: 'Preview setup changes without writing to disk.',\n },\n {\n name: 'yes',\n type: 'boolean' as const,\n description: 'Auto-confirm modifications outside the .kb/ directory.',\n },\n {\n name: 'kb-only',\n type: 'boolean' as const,\n description: 'Restrict setup to .kb/ paths and skip project files.',\n },\n] satisfies Exclude<CommandManifest['flags'], undefined>;\n\n/**\n * Create loader stub for ManifestV3 commands.\n * Loader should never be executed directly – CLI adapters must handle execution.\n */\nfunction createManifestV3Loader(commandId: string): () => Promise<{ run: any }> {\n return async () => {\n throw new Error(\n `Loader should not be called for ManifestV3 command ${commandId}. Use plugin-adapter-cli executeCommand instead.`\n );\n };\n}\n\n// Setup rollback command removed — setup-engine eliminated from project\n\n/**\n * Ensure manifest has loader function (rehydrate after JSON serialization).\n */\nfunction ensureManifestLoader(manifest: CommandManifest): void {\n if (typeof manifest.loader !== 'function') {\n const commandId = manifest.id || manifest.group || 'unknown';\n log('debug', `[plugins][cache] Rehydrated loader for ${commandId}`);\n manifest.loader = createManifestV3Loader(commandId);\n }\n}\n\nexport const __test = {\n ensureManifestLoader,\n createManifestV3Loader,\n // resetInProcCache is exported directly (not via __test) since it's part of the public API\n};\n\n/** Create a synthetic manifest marking package as unavailable with actionable hint */\nfunction createUnavailableManifest(pkgName: string, error: any): CommandManifest {\n const rawMsg = (error?.message || String(error) || '').toString();\n // Try to extract missing module name from error\n let missing: string | null = null;\n const m1 = rawMsg.match(/Cannot find (?:module|package) '([^']+)'/);\n const m2 = rawMsg.match(/from ['\"]([^'\"]+)['\"]/);\n if (m1 && m1[1]) {missing = m1[1];}\n else if (m2 && m2[1] && m2[1].startsWith('@')) {missing = m2[1];}\n\n // Derive group from package name (e.g., @kb-labs/core-cli -> core)\n const seg = pkgName.includes('/') ? pkgName.split('/')[1] : pkgName;\n const group = (seg || pkgName).replace(/-cli$/,'');\n const short = seg || pkgName;\n\n const requires = missing ? [missing] : [];\n\n const manifest: CommandManifest = {\n manifestVersion: '1.0',\n id: `${group}:manifest:${short}`,\n group,\n describe: `Commands from ${pkgName} are unavailable` ,\n requires,\n loader: async () => {\n // Throw a descriptive error if someone tries to run it\n throw new Error(`Cannot load ${pkgName} CLI manifest. ${rawMsg}`);\n }\n } as any;\n // Mark as synthetic so saveCache can skip it — synthetic manifests must never\n // be persisted to disk because they represent transient load failures.\n // Caching them would make the error \"stick\" until the TTL expires even after\n // the underlying problem (missing build artifact, broken dep) is resolved.\n (manifest as any)._synthetic = true;\n return manifest;\n}\n\n// Constants\nconst PACKAGE_JSON = 'package.json';\nconst MANIFEST_LOAD_TIMEOUT = 1500; // 1.5 seconds\nconst IN_PROC_CACHE_TTL_MS = 60_000;\nconst DISK_CACHE_TTL_MS = 5 * 60_000;\n\nlet inProcDiscoveryCache: { timestamp: number; results: DiscoveryResult[] } | null = null;\n\n/**\n * Reset the in-process discovery cache.\n * Call this after clearing the disk cache so the next discoverManifests() call\n * in the same process performs a fresh scan rather than serving stale results.\n */\nexport function resetInProcCache(): void {\n inProcDiscoveryCache = null;\n}\n\n/**\n * Compute SHA256 hash of manifest file content\n */\nasync function computeManifestHash(manifestPath: string): Promise<string> {\n try {\n const content = await fs.readFile(manifestPath, 'utf8');\n return createHash('sha256').update(content).digest('hex');\n } catch {\n return 'unknown';\n }\n}\n\n/**\n * Compute hash of lockfile (pnpm-lock.yaml) for cache invalidation\n */\nasync function computeLockfileHash(cwd: string): Promise<string> {\n const lockfilePath = path.join(cwd, 'pnpm-lock.yaml');\n try {\n const content = await fs.readFile(lockfilePath, 'utf8');\n return createHash('sha256').update(content).digest('hex');\n } catch {\n return '';\n }\n}\n\n/**\n * Compute hash of kb.config.json for cache invalidation\n */\nasync function computeConfigHash(cwd: string): Promise<string> {\n const configPath = path.join(cwd, '.kb', 'kb.config.json');\n try {\n const content = await fs.readFile(configPath, 'utf8');\n return createHash('sha256').update(content).digest('hex');\n } catch {\n return '';\n }\n}\n\n/**\n * Compute hash of .kb/plugins.json for cache invalidation\n */\nasync function computePluginsStateHash(cwd: string): Promise<string> {\n const pluginsPath = path.join(cwd, '.kb', 'plugins.json');\n try {\n const content = await fs.readFile(pluginsPath, 'utf8');\n return createHash('sha256').update(content).digest('hex');\n } catch {\n return '';\n }\n}\n\n/**\n * Detect whether new workspace packages with manifests appeared since cache was written.\n * If so, cached results are considered stale to ensure new commands are registered.\n */\nasync function detectNewWorkspacePackages(\n cwd: string,\n cachedPackages: Record<string, PackageCacheEntry> | undefined\n): Promise<boolean> {\n if (!cachedPackages) {\n return true;\n }\n\n try {\n const workspaceYaml = path.join(cwd, 'pnpm-workspace.yaml');\n const content = await fs.readFile(workspaceYaml, 'utf8');\n const parsed = parseYaml(content) as { packages?: string[] };\n if (!Array.isArray(parsed.packages)) {\n return false;\n }\n\n const knownPackages = new Set(Object.keys(cachedPackages));\n\n for (const pattern of parsed.packages) {\n const pkgPattern = path.join(pattern, PACKAGE_JSON);\n const pkgFiles = await glob(pkgPattern, {\n cwd,\n absolute: false,\n ignore: ['.kb/**', 'node_modules/**', '**/node_modules/**'],\n });\n\n for (const pkgFile of pkgFiles) {\n const pkgRoot = path.dirname(path.join(cwd, pkgFile));\n const pkg = await readPackageJson(path.join(cwd, pkgFile));\n if (!pkg || !pkg.name) {\n continue;\n }\n\n if (knownPackages.has(pkg.name)) {\n continue;\n }\n\n const manifestInfo = await findManifestPath(pkgRoot, pkg);\n if (manifestInfo.path) {\n log('debug', `[plugins][cache] New workspace package detected: ${pkg.name}`);\n return true;\n }\n }\n }\n } catch (error: any) {\n log('debug', `[plugins][cache] Workspace scan skipped: ${error?.message || 'unknown error'}`);\n }\n\n return false;\n}\n\n/**\n * Load manifest with timeout protection\n */\nasync function loadManifestWithTimeout(manifestPath: string, pkgName: string, pkgRoot?: string): Promise<CommandManifest[]> {\n const timeout = new Promise<never>((_, reject) => {\n setTimeout(() => reject(new Error('Timeout')), MANIFEST_LOAD_TIMEOUT);\n });\n \n try {\n return await Promise.race([loadManifest(manifestPath, pkgName, pkgRoot), timeout]);\n } catch (err: any) {\n if (err.message === 'Timeout') {\n log('warn', `Timeout loading manifest from ${pkgName}`);\n return [];\n }\n throw err;\n }\n}\n\n/**\n * Prefer namespace from ManifestV3.id (e.g., '@kb-labs/release' -> 'release').\n * Fallback to package name heuristic if id is missing.\n */\nfunction getNamespaceFromManifest(manifestV2: ManifestV3 | undefined, packageName: string): string {\n const manifestId = manifestV2?.id;\n if (typeof manifestId === 'string' && manifestId.length > 0) {\n // take last segment after slash, drop leading '@'\n const seg = manifestId.split('/').pop() || manifestId;\n return seg.replace(/^@/, '');\n }\n // Fallback: derive from package name (last path segment without org scope)\n const parts = packageName.split('/');\n const last = parts[parts.length - 1] || packageName;\n return last.replace(/^@/, '');\n}\n\n/**\n * Derive namespace from package name (legacy fallback)\n */\nfunction deriveNamespace(packageName: string): string {\n const parts = packageName.split('/');\n const lastPart = parts[parts.length - 1] || packageName;\n return lastPart.replace(/^@/, '');\n}\n\n\n// TODO V3: V2 setup command manifest generators removed - V3 uses SetupSpec in manifest\n// function createSetupCommandManifest({\n// manifestV2,\n// namespace,\n// pkgName,\n// pkgRoot,\n// }: SetupCommandFactoryInput): CommandManifest {\n// const setupId = `${namespace}:setup`;\n// const describe =\n// manifestV2.setup?.describe ||\n// `Initialize ${manifestV2.display?.name || manifestV2.id || namespace}`;\n\n// const setupManifest: CommandManifest = {\n// manifestVersion: '1.0',\n// id: setupId,\n// group: namespace,\n// describe,\n// flags: SETUP_COMMAND_FLAGS,\n// examples: [\n// `kb ${namespace} setup`,\n// `kb ${namespace} setup --dry-run`,\n// ],\n// loader: () =>\n// loadSetupCommandModule({\n// manifestV2,\n// namespace,\n// pkgName,\n// pkgRoot,\n// }),\n// package: pkgName,\n// namespace,\n// };\n\n// (setupManifest as any).manifestV2 = manifestV2;\n// (setupManifest as any).pkgRoot = pkgRoot;\n// (setupManifest as any).isSetup = true;\n// return setupManifest;\n// }\n\n// function createSetupRollbackCommandManifest({\n// manifestV2,\n// namespace,\n// pkgName,\n// pkgRoot,\n// }: SetupCommandFactoryInput): CommandManifest {\n// const rollbackId = `${namespace}:setup:rollback`;\n// const describe = `Rollback setup changes for ${manifestV2.display?.name || manifestV2.id || namespace}`;\n\n// const rollbackManifest: CommandManifest = {\n// manifestVersion: '1.0',\n// id: rollbackId,\n// group: namespace,\n// describe,\n// flags: [\n// {\n// name: 'log',\n// type: 'string' as const,\n// description: 'Path to a setup change log JSON file.',\n// },\n// {\n// name: 'list',\n// type: 'boolean' as const,\n// description: 'List available setup change logs.',\n// },\n// {\n// name: 'yes',\n// type: 'boolean' as const,\n// alias: 'y',\n// description: 'Apply rollback without confirmation prompt.',\n// },\n// ],\n// examples: [\n// `kb ${namespace} setup:rollback --list`,\n// `kb ${namespace} setup:rollback --log .kb/logs/setup/${namespace}-<id>.json --yes`,\n// ],\n// loader: () =>\n// loadSetupRollbackCommandModule({\n// manifestV2,\n// namespace,\n// pkgName,\n// pkgRoot,\n// }),\n// package: pkgName,\n// namespace,\n// };\n\n// (rollbackManifest as any).manifestV2 = manifestV2;\n// (rollbackManifest as any).pkgRoot = pkgRoot;\n// (rollbackManifest as any).isSetupRollback = true;\n// return rollbackManifest;\n// }\n\n/**\n * Load manifest - tries ESM first, falls back to CJS\n * Validates and normalizes manifests according to schema\n */\nasync function loadManifest(manifestPath: string, pkgName: string, pkgRoot?: string): Promise<CommandManifest[]> {\n const fileUrl = pathToFileURL(manifestPath).href;\n const mod = await import(fileUrl);\n\n const manifest = (mod as any).manifest || (mod as any).default;\n if (!manifest || typeof manifest !== 'object' || manifest.schema !== 'kb.plugin/3') {\n throw new Error(`Unsupported manifest format in ${pkgName}. Only kb.plugin/3 schema is supported.`);\n }\n\n const namespace = getNamespaceFromManifest(manifest, pkgName);\n const manifestDir = path.dirname(manifestPath);\n const baseRoot = pkgRoot || manifestDir;\n const cliCommands = Array.isArray(manifest.cli?.commands)\n ? manifest.cli.commands\n : [];\n if (cliCommands.length === 0 && !manifest.setup) {\n log('warn', `ManifestV3 ${manifest.id || pkgName} has no CLI commands or setup entry`);\n }\n\n const commandManifests: CommandManifest[] = cliCommands.map((cmd: any) => {\n const commandId = cmd.id;\n const commandManifest: CommandManifest = {\n manifestVersion: '1.0' as const,\n id: commandId,\n group: cmd.group || namespace,\n subgroup: cmd.subgroup,\n describe: cmd.describe || '',\n longDescription: cmd.longDescription,\n aliases: cmd.aliases,\n flags: cmd.flags,\n examples: cmd.examples,\n loader: createManifestV3Loader(commandId),\n package: pkgName,\n namespace: cmd.group || namespace,\n };\n (commandManifest as any).manifestV2 = manifest; // Keep for backward compat with service.ts\n (commandManifest as any).pkgRoot = baseRoot;\n return commandManifest;\n });\n\n // TODO V3: V2 setup orchestrator removed - V3 uses SetupSpec in manifest\n // if (manifestV2.setup) {\n // // Ensure setup/rollback registered under a stable namespace taken from manifest id\n // const setupNamespace = getNamespaceFromManifest(manifestV2, pkgName);\n // const setupCommand = createSetupCommandManifest({\n // manifestV2,\n // namespace: setupNamespace,\n // pkgName,\n // pkgRoot: baseRoot,\n // });\n // commandManifests.push(setupCommand);\n\n // const rollbackCommand = createSetupRollbackCommandManifest({\n // manifestV2,\n // namespace: setupNamespace,\n // pkgName,\n // pkgRoot: baseRoot,\n // });\n // commandManifests.push(rollbackCommand);\n // }\n \n const validation = validateManifests(commandManifests);\n if (!validation.success) {\n const errorMessages = validation.errors.map(err => \n err.issues.map(issue => `${issue.path.join('.')}: ${issue.message}`).join(', ')\n ).join('; ');\n log('warn', `ManifestV3 validation warnings for ${pkgName}: ${errorMessages}`);\n }\n \n return (validation.success ? validation.data : commandManifests).map(m => \n normalizeManifest(m, pkgName, namespace)\n );\n}\n\n/**\n * Read and parse package.json\n */\nasync function readPackageJson(pkgPath: string): Promise<any> {\n try {\n const content = await fs.readFile(pkgPath, 'utf8');\n return JSON.parse(content);\n } catch {\n return null;\n }\n}\n\n/**\n * Load kb.config.json with plugins allowlist/blocklist\n */\nasync function loadConfig(cwd: string): Promise<{ allow?: string[]; block?: string[]; linked?: string[] }> {\n const configPath = path.join(cwd, '.kb', 'kb.config.json');\n try {\n const content = await fs.readFile(configPath, 'utf8');\n const config = JSON.parse(content);\n return {\n allow: config.plugins?.allow,\n block: config.plugins?.block,\n linked: config.plugins?.linked,\n };\n } catch {\n return {};\n }\n}\n\n/**\n * Find manifest path using conventional locations\n * Returns path and whether it's deprecated\n */\nasync function findManifestPath(pkgRoot: string, pkg: any): Promise<{ path: string | null; deprecated: boolean }> {\n if (pkg.kb?.manifest) {\n const manifestPath = path.join(pkgRoot, pkg.kb.manifest);\n try {\n await fs.access(manifestPath);\n return { path: manifestPath, deprecated: false };\n } catch {\n return { path: null, deprecated: false };\n }\n }\n\n if (pkg.exports?.['./kb/commands']) {\n const exportPath = pkg.exports['./kb/commands'];\n const manifestPath = typeof exportPath === 'string' ? exportPath : exportPath.default || exportPath.import;\n if (manifestPath) {\n const resolved = path.resolve(pkgRoot, manifestPath);\n try {\n await fs.access(resolved);\n return { path: resolved, deprecated: false };\n } catch {\n const withExt = resolved.endsWith('.js') ? resolved : `${resolved}.js`;\n try {\n await fs.access(withExt);\n return { path: withExt, deprecated: false };\n } catch {}\n }\n }\n }\n\n return { path: null, deprecated: false };\n}\n\n/**\n * Check if package is a plugin by keywords or kb.plugin flag\n */\nfunction isPluginPackage(pkg: any): boolean {\n if (!pkg) {return false;}\n \n // Explicit flag\n if (pkg.kb?.plugin === true) {return true;}\n \n // Keyword check\n const keywords = Array.isArray(pkg.keywords) ? pkg.keywords : [];\n return keywords.includes('kb-cli-plugin');\n}\n\n/**\n * Validate that command IDs and aliases are unique within a package\n */\nfunction validateUniqueIds(manifests: CommandManifest[], pkgName: string): void {\n const ids = new Set<string>();\n const aliases = new Set<string>();\n \n for (const m of manifests) {\n if (ids.has(m.id)) {\n throw new Error(`Duplicate command ID \"${m.id}\" in package ${pkgName}`);\n }\n ids.add(m.id);\n \n if (m.aliases) {\n for (const alias of m.aliases) {\n if (aliases.has(alias) || ids.has(alias)) {\n throw new Error(`Alias collision \"${alias}\" in package ${pkgName}`);\n }\n aliases.add(alias);\n }\n }\n }\n}\n\n/**\n * Discover commands from workspace packages with parallel loading\n */\nasync function discoverWorkspace(cwd: string): Promise<DiscoveryResult[]> {\n const workspaceYaml = path.join(cwd, 'pnpm-workspace.yaml');\n const content = await fs.readFile(workspaceYaml, 'utf8');\n const parsed = parseYaml(content) as { packages: string[] };\n \n if (!parsed.packages || !Array.isArray(parsed.packages)) {\n throw new Error('Invalid pnpm-workspace.yaml: missing packages array');\n }\n \n // First pass: collect all package info\n const packageInfos: Array<{pkgRoot: string, pkg: any, manifestPath: string}> = [];\n \n for (const pattern of parsed.packages) {\n const pkgPattern = path.join(pattern, PACKAGE_JSON);\n const pkgFiles = await glob(pkgPattern, { \n cwd, \n absolute: false,\n ignore: ['.kb/**', 'node_modules/**', '**/node_modules/**'] // Ignore .kb, node_modules\n });\n \n for (const pkgFile of pkgFiles) {\n const pkgRoot = path.dirname(path.join(cwd, pkgFile));\n const pkg = await readPackageJson(path.join(cwd, pkgFile));\n \n if (!pkg) {continue;}\n \n // Check if package has manifest (explicit or conventional)\n const manifestInfo = await findManifestPath(pkgRoot, pkg);\n if (manifestInfo.path) {\n if (manifestInfo.deprecated) {\n log('warn', `[DEPRECATED] ${pkg.name} uses legacy manifest path: ${manifestInfo.path}`);\n log('warn', ` → Migrate to exports[\"./kb/commands\"] or set kb.commandsManifest in package.json`);\n }\n packageInfos.push({ pkgRoot, pkg, manifestPath: manifestInfo.path });\n }\n }\n }\n \n // Second pass: load all manifests in parallel\n const loadPromises = packageInfos.map(async ({ pkgRoot, pkg, manifestPath }) => {\n const pkgStart = Date.now();\n try {\n const manifests = await loadManifestWithTimeout(manifestPath, pkg.name, pkgRoot);\n const pkgTime = Date.now() - pkgStart;\n \n if (pkgTime > 30) {\n log('debug', `[plugins][perf] ${pkg.name} manifest parse: ${pkgTime}ms (budget: 30ms)`);\n }\n \n if (manifests.length > 0) {\n validateUniqueIds(manifests, pkg.name);\n return {\n manifests,\n source: 'workspace' as const,\n packageName: pkg.name,\n manifestPath: toPosixPath(manifestPath),\n pkgRoot: toPosixPath(pkgRoot),\n };\n }\n return null;\n } catch (err: any) {\n const pkgTime = Date.now() - pkgStart;\n log('debug', `[plugins][perf] ${pkg.name} failed after ${pkgTime}ms`);\n \n // On failure, register a synthetic unavailable manifest so user sees the product with a hint\n log('warn', JSON.stringify({\n code: 'DISCOVERY_MANIFEST_LOAD_FAIL',\n packageName: pkg.name,\n manifestPath: toPosixPath(manifestPath),\n errorCode: err.code || 'UNKNOWN',\n errorMessage: err.message,\n hint: err.message.includes('Cannot find package') \n ? 'Run: kb devlink apply && pnpm -w build'\n : 'Check manifest syntax and dependencies'\n }));\n const synthetic = createUnavailableManifest(pkg.name, err);\n return {\n manifests: [synthetic],\n source: 'workspace' as const,\n packageName: pkg.name,\n manifestPath: toPosixPath(manifestPath),\n pkgRoot: toPosixPath(pkgRoot),\n };\n }\n });\n \n const settledResults = await Promise.allSettled(loadPromises);\n const results: DiscoveryResult[] = [];\n \n for (const settled of settledResults) {\n if (settled.status === 'fulfilled' && settled.value) {\n results.push(settled.value);\n }\n }\n \n return results;\n}\n\n/**\n * Discover commands from current package (fallback when no workspace)\n */\nasync function discoverCurrentPackage(cwd: string): Promise<DiscoveryResult | null> {\n try {\n const pkg = await readPackageJson(path.join(cwd, PACKAGE_JSON));\n if (!pkg) {return null;}\n \n const manifestInfo = await findManifestPath(cwd, pkg);\n if (manifestInfo.path) {\n if (manifestInfo.deprecated) {\n log('warn', `[DEPRECATED] ${pkg.name} uses legacy manifest path: ${manifestInfo.path}`);\n log('warn', ` → Migrate to exports[\"./kb/commands\"] or set kb.commandsManifest in package.json`);\n }\n const manifests = await loadManifestWithTimeout(manifestInfo.path, pkg.name, cwd);\n if (manifests.length > 0) {\n validateUniqueIds(manifests, pkg.name);\n return {\n manifests,\n source: 'workspace',\n packageName: pkg.name,\n manifestPath: toPosixPath(manifestInfo.path),\n pkgRoot: toPosixPath(cwd),\n };\n }\n }\n } catch (err: any) {\n log('debug', `No CLI manifest in current package: ${err.message}`);\n }\n return null;\n}\n\n/**\n * Discover commands from node_modules with keyword-based discovery\n * Scans all scopes, respects allowlist/blocklist, supports linked plugins\n */\nasync function discoverNodeModules(cwd: string): Promise<DiscoveryResult[]> {\n const nmDir = path.join(cwd, 'node_modules');\n const config = await loadConfig(cwd);\n \n try {\n const entries = await fs.readdir(nmDir, { withFileTypes: true });\n const packageInfos: Array<{pkgRoot: string, pkg: any, manifestPath: string, isLinked?: boolean}> = [];\n \n // First pass: collect all plugin packages\n const scanPromises: Promise<void>[] = [];\n \n for (const entry of entries) {\n if (!entry.isDirectory() && !entry.isSymbolicLink()) {continue;}\n\n const scanEntry = async () => {\n let pkgRoot: string;\n let pkg: any;\n\n if (entry.name.startsWith('@')) {\n // Scoped package: @scope/name\n const scopeDir = path.join(nmDir, entry.name);\n try {\n const scopedDirs = await fs.readdir(scopeDir, { withFileTypes: true });\n for (const scopedEntry of scopedDirs.filter(d => d.isDirectory() || d.isSymbolicLink())) {\n pkgRoot = path.join(scopeDir, scopedEntry.name);\n pkg = await readPackageJson(path.join(pkgRoot, PACKAGE_JSON));\n \n if (!pkg) {continue;}\n \n // Check if it's a plugin\n const isPlugin = isPluginPackage(pkg);\n \n // For @kb-labs/*, always include if has manifest\n // For others, require keyword/flag AND allowlist (unless explicitly blocked)\n if (pkg.name?.startsWith('@kb-labs/')) {\n const manifestInfo = await findManifestPath(pkgRoot, pkg);\n if (manifestInfo.path) {\n packageInfos.push({ pkgRoot, pkg, manifestPath: manifestInfo.path });\n }\n } else if (isPlugin) {\n // 3rd-party plugin: check allowlist/blocklist\n if (config.block?.includes(pkg.name)) {\n log('debug', `Plugin ${pkg.name} blocked by config`);\n return;\n }\n \n // Must be allowlisted OR in linked list\n const isAllowlisted = config.allow?.includes(pkg.name) || config.linked?.includes(pkg.name);\n if (!isAllowlisted) {\n log('debug', `Plugin ${pkg.name} skipped (not allowlisted). Add to kb-labs.config.json plugins.allow or enable via 'kb marketplace enable'`);\n return;\n }\n \n const manifestInfo = await findManifestPath(pkgRoot, pkg);\n if (manifestInfo.path) {\n if (manifestInfo.deprecated) {\n log('warn', `[DEPRECATED] ${pkg.name} uses legacy manifest path: ${manifestInfo.path}`);\n log('warn', ` → Migrate to exports[\"./kb/commands\"] or set kb.commandsManifest in package.json`);\n }\n const isLinked = config.linked?.includes(pkg.name);\n packageInfos.push({ pkgRoot, pkg, manifestPath: manifestInfo.path, isLinked });\n }\n }\n }\n } catch {\n // Scope dir doesn't exist or can't read\n }\n } else {\n // Unscoped package\n pkgRoot = path.join(nmDir, entry.name);\n pkg = await readPackageJson(path.join(pkgRoot, PACKAGE_JSON));\n \n if (!pkg) {return;}\n \n const isPlugin = isPluginPackage(pkg);\n \n if (isPlugin) {\n // 3rd-party: check allowlist/blocklist\n if (config.block?.includes(pkg.name)) {\n log('debug', `Plugin ${pkg.name} blocked by config`);\n return;\n }\n \n const isAllowlisted = config.allow?.includes(pkg.name) || config.linked?.includes(pkg.name);\n if (!isAllowlisted) {\n log('debug', `Plugin ${pkg.name} skipped (not allowlisted). Add to kb-labs.config.json plugins.allow or enable via 'kb marketplace enable'`);\n return;\n }\n \n const manifestInfo = await findManifestPath(pkgRoot, pkg);\n if (manifestInfo.path) {\n if (manifestInfo.deprecated) {\n log('warn', `[DEPRECATED] ${pkg.name} uses legacy manifest path: ${manifestInfo.path}`);\n log('warn', ` → Migrate to exports[\"./kb/commands\"] or set kb.commandsManifest in package.json`);\n }\n const isLinked = config.linked?.includes(pkg.name);\n packageInfos.push({ pkgRoot, pkg, manifestPath: manifestInfo.path, isLinked });\n }\n }\n }\n };\n \n scanPromises.push(scanEntry());\n }\n \n await Promise.allSettled(scanPromises);\n \n // Second pass: load all manifests in parallel\n const loadPromises = packageInfos.map(async ({ pkgRoot, pkg, manifestPath, isLinked }) => {\n try {\n const manifests = await loadManifestWithTimeout(manifestPath, pkg.name, pkgRoot);\n if (manifests.length > 0) {\n validateUniqueIds(manifests, pkg.name);\n return {\n manifests,\n source: (isLinked ? 'linked' : 'node_modules') as 'node_modules' | 'linked',\n packageName: pkg.name,\n manifestPath: toPosixPath(manifestPath),\n pkgRoot: toPosixPath(pkgRoot),\n };\n }\n return null;\n } catch (err: any) {\n log('warn', JSON.stringify({\n code: 'DISCOVERY_MANIFEST_LOAD_FAIL',\n packageName: pkg.name,\n manifestPath: toPosixPath(manifestPath),\n errorCode: err.code || 'UNKNOWN',\n errorMessage: err.message,\n hint: err.message.includes('Cannot find package') \n ? 'Run: kb devlink apply && pnpm -w build'\n : 'Check manifest syntax and dependencies'\n }));\n const synthetic = createUnavailableManifest(pkg.name, err);\n return {\n manifests: [synthetic],\n source: (isLinked ? 'linked' : 'node_modules') as 'node_modules' | 'linked',\n packageName: pkg.name,\n manifestPath: toPosixPath(manifestPath),\n pkgRoot: toPosixPath(pkgRoot),\n };\n }\n });\n \n const settledResults = await Promise.allSettled(loadPromises);\n const results: DiscoveryResult[] = [];\n \n for (const settled of settledResults) {\n if (settled.status === 'fulfilled' && settled.value) {\n results.push(settled.value);\n }\n }\n \n return results;\n } catch (err: any) {\n // node_modules doesn't exist or can't read\n log('debug', `Could not scan node_modules: ${err.message}`);\n return [];\n }\n}\n\n/**\n * Deduplicate manifests by priority: workspace > linked > node_modules\n * Also deduplicate by package path to avoid duplicate workspace packages\n */\nfunction deduplicateManifests(all: DiscoveryResult[]): DiscoveryResult[] {\n const byPackageName = new Map<string, DiscoveryResult>();\n \n // Priority order: workspace > linked > node_modules\n const priority: Record<string, number> = {\n workspace: 3,\n linked: 2,\n node_modules: 1,\n builtin: 0,\n };\n \n // First, deduplicate by package name (keeping only one version of each package)\n for (const result of all) {\n const existing = byPackageName.get(result.packageName);\n if (!existing) {\n byPackageName.set(result.packageName, result);\n } else {\n // Compare priority\n const existingPriority = priority[existing.source] || 0;\n const newPriority = priority[result.source] || 0;\n if (newPriority > existingPriority) {\n // Higher priority wins\n byPackageName.set(result.packageName, result);\n }\n }\n }\n \n return Array.from(byPackageName.values());\n}\n\n/**\n * Load cache file\n */\nasync function loadCache(cwd: string): Promise<CacheFile | null> {\n const cachePath = path.join(cwd, '.kb', 'cache', 'cli-manifests.json');\n \n try {\n const content = await fs.readFile(cachePath, 'utf8');\n const cache = JSON.parse(content) as any;\n \n // Handle old cache format (with mtimes and results)\n if (cache.mtimes && cache.results) {\n log('debug', 'Old cache format detected, ignoring');\n return null;\n }\n \n // Validate new cache format\n if (!cache.packages) {\n log('debug', 'Invalid cache format, ignoring');\n return null;\n }\n \n // Validate version compatibility\n if (cache.version !== process.version) {\n log('debug', 'Cache invalidated: Node version changed');\n return null;\n }\n \n const currentCliVersion = process.env.CLI_VERSION || '0.1.0';\n if (cache.cliVersion !== currentCliVersion) {\n log('debug', 'Cache invalidated: CLI version changed');\n return null;\n }\n \n // Check lockfile hash\n const currentLockfileHash = await computeLockfileHash(cwd);\n if (currentLockfileHash && cache.lockfileHash && cache.lockfileHash !== currentLockfileHash) {\n log('debug', 'Cache invalidated: lockfile changed');\n return null;\n }\n \n // Check config hash\n const currentConfigHash = await computeConfigHash(cwd);\n if (currentConfigHash && cache.configHash && cache.configHash !== currentConfigHash) {\n log('debug', 'Cache invalidated: kb-labs.config.json changed');\n return null;\n }\n \n // Check plugins state hash\n const currentPluginsStateHash = await computePluginsStateHash(cwd);\n if (currentPluginsStateHash && cache.pluginsStateHash && cache.pluginsStateHash !== currentPluginsStateHash) {\n log('debug', 'Cache invalidated: .kb/plugins.json changed');\n return null;\n }\n \n const parsedCache = cache as CacheFile;\n parsedCache.ttlMs = parsedCache.ttlMs ?? DISK_CACHE_TTL_MS;\n for (const entry of Object.values(parsedCache.packages) as PackageCacheEntry[]) {\n for (const manifest of entry.result.manifests) {\n ensureManifestLoader(manifest);\n }\n entry.cachedAt = entry.cachedAt ?? parsedCache.timestamp ?? Date.now();\n }\n \n return parsedCache;\n } catch {\n return null; // Cache doesn't exist or is corrupt\n }\n}\n\n/**\n * Check if cache is stale for a specific package (async to support hash validation)\n */\nasync function isPackageCacheStale(\n entry: PackageCacheEntry,\n options: { validateHash: boolean }\n): Promise<boolean> {\n const manifestFsPath = entry.manifestPath.split('/').join(path.sep);\n const pkgJsonPath = path.join(entry.result.pkgRoot.split('/').join(path.sep), PACKAGE_JSON);\n\n try {\n const pkgStat = await fs.stat(pkgJsonPath);\n if (pkgStat.mtimeMs !== entry.pkgJsonMtime) {\n log('debug', `Package cache invalidated: package.json changed for ${entry.result.packageName}`);\n return true;\n }\n } catch (error: any) {\n log('debug', `Package cache invalidated: missing package.json for ${entry.result.packageName} (${error?.message || 'unknown'})`);\n return true;\n }\n\n let manifestStat;\n try {\n manifestStat = await fs.stat(manifestFsPath);\n if (manifestStat.mtimeMs !== entry.manifestMtime) {\n log('debug', `Package cache invalidated: manifest mtime changed for ${entry.result.packageName}`);\n return true;\n }\n } catch (error: any) {\n log('debug', `Package cache invalidated: manifest deleted for ${entry.result.packageName} (${error?.message || 'unknown'})`);\n return true;\n }\n\n if (options.validateHash) {\n try {\n const currentHash = await computeManifestHash(manifestFsPath);\n if (currentHash !== entry.manifestHash) {\n log('debug', `Package cache invalidated: manifest hash changed for ${entry.result.packageName}`);\n return true;\n }\n } catch (error: any) {\n log('debug', `Package cache hash validation failed for ${entry.result.packageName}: ${error?.message || 'unknown'}`);\n return true;\n }\n }\n\n return false;\n}\n\n/**\n * Save cache file with per-package structure\n */\nasync function saveCache(cwd: string, results: DiscoveryResult[]): Promise<void> {\n const cachePath = path.join(cwd, '.kb', 'cache', 'cli-manifests.json');\n await fs.mkdir(path.dirname(cachePath), { recursive: true });\n \n const packages: Record<string, PackageCacheEntry> = {};\n const now = Date.now();\n const stateHasher = createHash('sha256');\n \n // Process each result into package cache entries\n for (const result of results) {\n // Skip results that contain only synthetic unavailable manifests.\n // Synthetic manifests represent transient load failures (missing build\n // artifacts, broken deps) and must not be persisted — caching them would\n // lock the error state until the TTL expires even after the root cause is\n // fixed.\n const allSynthetic = result.manifests.length > 0 &&\n result.manifests.every((m) => (m as any)._synthetic === true);\n if (allSynthetic) {\n log('debug', `[plugins][cache] Skipping synthetic unavailable manifest for ${result.packageName}`);\n continue;\n }\n\n try {\n const manifestHash = await computeManifestHash(result.manifestPath);\n \n // Get package.json mtime and version\n const pkgJsonPath = path.join(result.pkgRoot.split('/').join(path.sep), PACKAGE_JSON);\n const pkgStat = await fs.stat(pkgJsonPath);\n const pkg = await readPackageJson(pkgJsonPath);\n const version = pkg?.version || '0.1.0';\n \n // Get manifest mtime\n const manifestStat = await fs.stat(result.manifestPath.split('/').join(path.sep));\n \n const manifestsForCache = result.manifests.map(manifest => {\n const manifestCopy = { ...manifest } as Record<string, unknown>;\n delete manifestCopy.loader;\n return manifestCopy;\n });\n\n const resultForCache = {\n ...result,\n manifests: manifestsForCache as unknown as CommandManifest[],\n };\n\n packages[result.packageName] = {\n version,\n manifestHash,\n manifestPath: result.manifestPath,\n pkgJsonMtime: pkgStat.mtimeMs,\n manifestMtime: manifestStat.mtimeMs,\n cachedAt: now,\n result: resultForCache,\n };\n stateHasher.update(result.packageName);\n stateHasher.update(manifestHash);\n } catch (err: any) {\n log('debug', `Failed to cache package ${result.packageName}: ${err.message}`);\n }\n }\n \n // Compute hashes for invalidation triggers\n const lockfileHash = await computeLockfileHash(cwd);\n const configHash = await computeConfigHash(cwd);\n const pluginsStateHash = await computePluginsStateHash(cwd);\n\n if (lockfileHash) {\n stateHasher.update(lockfileHash);\n }\n if (configHash) {\n stateHasher.update(configHash);\n }\n if (pluginsStateHash) {\n stateHasher.update(pluginsStateHash);\n }\n \n const cache: CacheFile = {\n version: process.version,\n cliVersion: process.env.CLI_VERSION || '0.1.0',\n timestamp: now,\n ttlMs: DISK_CACHE_TTL_MS,\n stateHash: stateHasher.digest('hex'),\n lockfileHash: lockfileHash || undefined,\n configHash: configHash || undefined,\n pluginsStateHash: pluginsStateHash || undefined,\n packages,\n };\n \n try {\n // CRITICAL OOM FIX: Use compact JSON to avoid split('\\n') memory issues on large manifests (1.6MB+)\n await fs.writeFile(cachePath, JSON.stringify(cache), 'utf8');\n } catch (err: any) {\n log('debug', `Failed to save cache: ${err.message}`);\n }\n}\n\n/**\n * Main discovery function — discovers command manifests from workspace,\n * current package, and `node_modules`.\n *\n * @param cwd Project cwd. Used for workspace discovery (monorepo dev mode)\n * and for the disk cache location.\n * @param noCache Bypass both the in-process and disk caches.\n * @param options Extra options:\n * - `platformRoot`: When provided, `discoverNodeModules` scans\n * `<platformRoot>/node_modules` instead of `<cwd>/node_modules`. This is\n * required in installed mode, where the KB Labs platform lives in a\n * different directory from the user's project. In dev mode `platformRoot`\n * typically equals `cwd` and the two paths coincide.\n */\nexport async function discoverManifests(\n cwd: string,\n noCache = false,\n options: { platformRoot?: string } = {},\n): Promise<DiscoveryResult[]> {\n const startTime = Date.now();\n const timings: Record<string, number> = {};\n\n if (noCache) {\n inProcDiscoveryCache = null;\n } else if (inProcDiscoveryCache) {\n const age = Date.now() - inProcDiscoveryCache.timestamp;\n if (age < IN_PROC_CACHE_TTL_MS) {\n const cachedResults = inProcDiscoveryCache.results;\n const _sourceCounts = cachedResults.reduce((acc, r) => {\n acc[r.source] = (acc[r.source] || 0) + 1;\n return acc;\n }, {} as Record<string, number>);\n\n log('debug', `[plugins][discover] in-proc cache hit (${cachedResults.length} packages, age ${age}ms)`);\n return cachedResults;\n }\n }\n \n // Check cache first\n if (!noCache) {\n const cacheStart = Date.now();\n const cached = await loadCache(cwd);\n timings.cacheLoad = Date.now() - cacheStart;\n \n if (cached) {\n log('debug', 'Using cached manifests');\n // Filter out stale packages and return fresh ones\n const freshResults: DiscoveryResult[] = [];\n const cacheAge = Date.now() - cached.timestamp;\n const ttlMs = cached.ttlMs ?? DISK_CACHE_TTL_MS;\n const enforceHashValidation = cacheAge >= ttlMs;\n\n log('debug', `[plugins][cache] hit age=${cacheAge}ms ttl=${ttlMs}ms validateHash=${enforceHashValidation}`);\n\n let staleCount = 0;\n for (const entry of Object.values(cached.packages) as PackageCacheEntry[]) {\n const stale = await isPackageCacheStale(entry, { validateHash: enforceHashValidation });\n if (!stale) {\n freshResults.push(entry.result);\n } else {\n staleCount += 1;\n }\n }\n const hasNewWorkspacePackages = await detectNewWorkspacePackages(\n cwd,\n cached.packages,\n );\n\n if (staleCount === 0 && freshResults.length > 0 && !hasNewWorkspacePackages) {\n const totalTime = Date.now() - startTime;\n const sourceCounts = freshResults.reduce((acc, r) => {\n acc[r.source] = (acc[r.source] || 0) + 1;\n return acc;\n }, {} as Record<string, number>);\n \n log('info', `[plugins][discover] ${totalTime}ms (cached: ${Object.entries(sourceCounts).map(([s, c]) => `${s}:${c}`).join(', ')})`);\n inProcDiscoveryCache = { timestamp: Date.now(), results: freshResults };\n return freshResults;\n }\n\n if (hasNewWorkspacePackages) {\n log('debug', '[plugins][cache] invalidated: new workspace packages detected');\n }\n if (staleCount > 0) {\n log('debug', `[plugins][cache] invalidated: ${staleCount} stale package(s) detected`);\n }\n }\n }\n \n // Try workspace first\n let workspace: DiscoveryResult[] = [];\n try {\n const wsStart = Date.now();\n workspace = await discoverWorkspace(cwd);\n timings.workspace = Date.now() - wsStart;\n log('info', `Discovered ${workspace.length} workspace packages with CLI manifests`);\n } catch (_err: any) {\n // No pnpm-workspace.yaml - fallback to current package + node_modules\n log('info', 'No workspace file found, checking current package');\n \n const currentStart = Date.now();\n const currentPkg = await discoverCurrentPackage(cwd);\n timings.currentPackage = Date.now() - currentStart;\n \n if (currentPkg) {\n workspace = [currentPkg];\n log('info', `Discovered current package with CLI manifest: ${currentPkg.packageName}`);\n }\n }\n \n // Discover from node_modules. In installed mode the platform lives in a\n // different directory from the user's project, so we scan at platformRoot\n // when it's provided. In dev mode platformRoot === cwd and the behavior is\n // identical to the previous code path.\n const nmStart = Date.now();\n const nodeModulesRoot = options.platformRoot ?? cwd;\n const installed = await discoverNodeModules(nodeModulesRoot);\n timings.nodeModules = Date.now() - nmStart;\n if (installed.length > 0) {\n log('info', `Discovered ${installed.length} installed packages with CLI manifests`);\n }\n \n // Deduplicate\n const dedupStart = Date.now();\n const results = deduplicateManifests([...workspace, ...installed]);\n timings.deduplicate = Date.now() - dedupStart;\n \n // Save cache\n const saveStart = Date.now();\n await saveCache(cwd, results);\n timings.cacheSave = Date.now() - saveStart;\n \n // Log detailed timings\n const totalTime = Date.now() - startTime;\n const sourceCounts = results.reduce((acc, r) => {\n acc[r.source] = (acc[r.source] || 0) + 1;\n return acc;\n }, {} as Record<string, number>);\n \n const timingDetails = Object.entries(timings)\n .filter(([_, t]) => t > 0)\n .map(([k, v]) => `${k}:${v}ms`)\n .join(', ');\n \n log('info', `[plugins][discover] ${totalTime}ms (${Object.entries(sourceCounts).map(([s, c]) => `${s}:${c}`).join(', ')})${timingDetails ? ` | ${timingDetails}` : ''}`);\n \n // Performance budget warnings\n if (totalTime > 150) {\n log('warn', `[plugins][perf] Discovery took ${totalTime}ms (budget: 150ms)`);\n }\n \n inProcDiscoveryCache = { timestamp: Date.now(), results };\n return results;\n}\n\n/**\n * Lazy load manifests for a specific namespace\n * Only loads manifests from packages matching the namespace\n */\nexport async function discoverManifestsByNamespace(\n cwd: string,\n namespace: string,\n noCache = false\n): Promise<DiscoveryResult[]> {\n const allResults = await discoverManifests(cwd, noCache);\n \n // Filter by namespace\n return allResults.filter(result => {\n // Check if any manifest in this result matches the namespace\n return result.manifests.some(m => {\n const manifestNamespace = m.namespace || m.group;\n return manifestNamespace === namespace;\n });\n });\n}\n","/**\n * @kb-labs/cli-commands/registry\n * Manifest validation and registration with shadowing support\n */\n\nimport Ajv from 'ajv';\nimport type { CommandManifest, DiscoveryResult, RegisteredCommand } from './types';\nimport { checkRequires } from './availability';\nimport type { ILogger } from '@kb-labs/core-platform';\nimport { platform } from '@kb-labs/core-runtime';\nimport { getLogLevel } from '@kb-labs/cli-runtime';\n\nexport interface RegisterManifestsOptions {\n cwd?: string;\n}\n\nconst ajv = new Ajv();\n\n// Flag validation schema\nconst flagSchema = {\n type: 'object',\n required: ['name', 'type'],\n additionalProperties: false,\n properties: {\n name: { type: 'string' },\n type: { enum: ['string', 'boolean', 'number', 'array'] },\n alias: { type: 'string', pattern: '^[a-z]$' }, // single letter\n description: { type: 'string' },\n choices: { type: 'array', items: { type: 'string' } },\n required: { type: 'boolean' },\n default: {}, // must match type\n },\n};\n\n// Manifest schema with required manifestVersion\nconst manifestSchema = {\n type: 'object',\n required: ['manifestVersion', 'id', 'group', 'describe', 'loader'],\n additionalProperties: true,\n properties: {\n manifestVersion: { type: 'string', enum: ['1.0'] },\n id: { type: 'string', pattern: '^[a-z0-9-]+(?::[a-z0-9-]+)*$' }, // Simple or namespaced (colon-separated)\n aliases: { type: 'array', items: { type: 'string' } },\n group: { type: 'string' },\n describe: { type: 'string' },\n longDescription: { type: 'string' },\n requires: { type: 'array', items: { type: 'string' } },\n flags: { \n type: 'array', \n items: flagSchema \n },\n examples: { type: 'array', items: { type: 'string' } },\n },\n};\n\nconst validateManifest = ajv.compile(manifestSchema);\nconst validateFlag = ajv.compile(flagSchema);\n\n/**\n * Validate flag definition\n */\nfunction validateFlagDef(flag: any, manifestId: string): void {\n if (!validateFlag(flag)) {\n throw new Error(\n `Invalid flag \"${flag.name}\" in ${manifestId}: ${ajv.errorsText(validateFlag.errors)}`\n );\n }\n \n // Validate choices only for string type\n if (flag.choices && flag.type !== 'string') {\n throw new Error(`Flag \"${flag.name}\" in ${manifestId}: choices allowed only for string type`);\n }\n \n // Validate default matches type\n if (flag.default !== undefined) {\n const typeMatches = \n (flag.type === 'string' && typeof flag.default === 'string') ||\n (flag.type === 'boolean' && typeof flag.default === 'boolean') ||\n (flag.type === 'number' && typeof flag.default === 'number') ||\n (flag.type === 'array' && Array.isArray(flag.default));\n \n if (!typeMatches) {\n throw new Error(\n `Flag \"${flag.name}\" in ${manifestId}: default value type mismatch (expected ${flag.type})`\n );\n }\n }\n}\n\n/**\n * Validate single manifest\n */\nfunction validateManifestStructure(manifest: any): void {\n if (!validateManifest(manifest)) {\n throw new Error(`Invalid manifest ${manifest.id}: ${ajv.errorsText(validateManifest.errors)}`);\n }\n \n // Validate manifestVersion (now required)\n if (manifest.manifestVersion !== '1.0') {\n throw new Error(\n `Unsupported manifestVersion \"${manifest.manifestVersion}\" in ${manifest.id} (expected \"1.0\")`\n );\n }\n \n // Validate flags if present\n if (manifest.flags && Array.isArray(manifest.flags) && manifest.id) {\n for (const flag of manifest.flags) {\n if (flag && typeof flag === 'object' && flag.name) {\n validateFlagDef(flag, manifest.id as string);\n }\n }\n }\n}\n\n/**\n * Priority order for source resolution\n */\nconst SOURCE_PRIORITY: Record<string, number> = {\n builtin: 4,\n workspace: 3,\n linked: 2,\n node_modules: 1,\n};\n\n/**\n * Normalize command ID to ensure it follows namespace:command format\n */\nfunction normalizeCommandId(id: string, _namespace: string): string {\n // IDs are now simple (no namespace prefix) - return as-is\n return id;\n}\n\n/**\n * Generate whitespace aliases from command ID\n * Example: \"devlink:apply\" -> [\"devlink apply\"]\n */\nfunction generateWhitespaceAliases(id: string): string[] {\n if (!id.includes(':')) {\n return [];\n }\n // Replace colon with space\n return [id.replace(':', ' ')];\n}\n\n/**\n * Normalize aliases: ensure they're valid and add whitespace variants\n */\nfunction normalizeAliases(manifest: CommandManifest, logger?: ILogger): string[] {\n const log = logger ?? platform.logger;\n const aliases = new Set<string>();\n const _namespace = manifest.namespace || manifest.group;\n\n // Add existing aliases\n if (manifest.aliases) {\n for (const alias of manifest.aliases) {\n // Validate alias format (no spaces, no special chars except hyphens)\n if (!/^[a-z0-9-:]+$/i.test(alias)) {\n log.warn(`Invalid alias \"${alias}\" in ${manifest.id}: aliases must be alphanumeric with hyphens or colons`);\n continue;\n }\n aliases.add(alias);\n }\n }\n\n // Add whitespace alias for scoped commands\n const whitespaceAliases = generateWhitespaceAliases(manifest.id);\n for (const alias of whitespaceAliases) {\n aliases.add(alias);\n }\n\n return Array.from(aliases);\n}\n\n/**\n * Check for namespace collision (same namespace, different commands with same base name)\n */\nfunction checkNamespaceCollision(\n manifest: CommandManifest,\n existing: RegisteredCommand,\n namespace: string\n): void {\n // IDs are now simple (no colon prefix), check group instead\n const existingGroup = existing.manifest.group || '';\n const currentGroup = manifest.group || '';\n\n // If both are in the same group and have same command ID, that's a collision\n if (existingGroup === currentGroup && existingGroup === namespace && existing.manifest.id === manifest.id) {\n // Same group + same ID = collision\n throw new Error(\n `Command collision in group \"${namespace}\": \"${manifest.id}\" conflicts with existing \"${existing.manifest.id}\". ` +\n `Rename one of the commands to use a different ID (e.g., \"${manifest.id}2\" or use --alias to create a different alias).`\n );\n }\n}\n\n/**\n * Get priority for source\n */\nfunction getSourcePriority(source: string): number {\n return SOURCE_PRIORITY[source] || 0;\n}\n\n/**\n * Check collision with actionable error message\n */\nfunction checkCollision(\n manifest: CommandManifest,\n existing: RegisteredCommand,\n currentSource: string,\n namespace: string\n): { shouldShadow: boolean; message?: string } {\n const existingPriority = getSourcePriority(existing.source);\n const currentPriority = getSourcePriority(currentSource);\n \n // Same namespace collision (hard error)\n checkNamespaceCollision(manifest, existing, namespace);\n \n // If both are from workspace, that's a hard error\n if (currentSource === 'workspace' && existing.source === 'workspace') {\n throw new Error(\n `Command ID collision: \"${manifest.id}\" is exported by multiple workspace packages. ` +\n `This is not allowed. Please rename one of the commands to use a different ID.`\n );\n }\n \n // Higher priority wins\n if (currentPriority > existingPriority) {\n return { shouldShadow: true };\n } else if (currentPriority < existingPriority) {\n return { shouldShadow: false };\n }\n \n // Same priority - first wins (shouldn't happen with proper sorting)\n return { shouldShadow: false };\n}\n\nexport interface SkippedManifest {\n id: string;\n source: string;\n reason: string;\n}\n\nexport interface ManifestRegistrationResult {\n registered: RegisteredCommand[];\n skipped: SkippedManifest[];\n collisions: number;\n errors: number;\n}\n\nexport function preflightManifests(\n discoveryResults: DiscoveryResult[],\n logger?: ILogger\n): { valid: DiscoveryResult[]; skipped: SkippedManifest[] } {\n const log = logger ?? platform.logger;\n const valid: DiscoveryResult[] = [];\n const skipped: SkippedManifest[] = [];\n\n for (const result of discoveryResults) {\n const allowed: CommandManifest[] = [];\n\n for (const manifest of result.manifests) {\n try {\n validateManifestStructure(manifest);\n allowed.push(manifest);\n } catch (error: any) {\n const reason = error?.message ? String(error.message) : 'Validation failed';\n const manifestId = manifest?.id || manifest?.group || result.packageName || 'unknown';\n skipped.push({\n id: manifestId,\n source: result.source,\n reason,\n });\n log.warn(`Preflight skipped manifest ${manifestId}: ${reason}`);\n }\n }\n\n if (allowed.length > 0) {\n valid.push({\n ...result,\n manifests: allowed,\n });\n }\n }\n\n return { valid, skipped };\n}\n\n/**\n * Register manifests with shadowing and collision detection\n */\nexport async function registerManifests(\n discoveryResults: DiscoveryResult[],\n registry: any, // CommandRegistry interface\n options: RegisterManifestsOptions & { logger?: ILogger } = {}\n): Promise<ManifestRegistrationResult> {\n const log = options.logger ?? platform.logger;\n const registered: RegisteredCommand[] = [];\n const skipped: SkippedManifest[] = [];\n const globalIds = new Map<string, RegisteredCommand>();\n const globalAliases = new Map<string, RegisteredCommand>();\n const logLevel = getLogLevel();\n\n let collisions = 0;\n let errors = 0;\n\n const sorted = [...discoveryResults].sort((a, b) => {\n const priorityA = getSourcePriority(a.source);\n const priorityB = getSourcePriority(b.source);\n return priorityB - priorityA;\n });\n\n for (const result of sorted) {\n for (const manifest of result.manifests) {\n const manifestId = manifest.id || manifest.group || 'unknown';\n const namespace = manifest.namespace || manifest.group;\n\n try {\n try {\n validateManifestStructure(manifest);\n } catch (err: any) {\n throw new Error(`Validation failed: ${err.message}`);\n }\n\n const normalizedId = normalizeCommandId(manifest.id, namespace);\n if (normalizedId !== manifest.id) {\n log.warn(`Command ID \"${manifest.id}\" normalized to \"${normalizedId}\"`);\n manifest.id = normalizedId;\n }\n\n const normalizedAliases = normalizeAliases(manifest, log);\n if (normalizedAliases.length > 0) {\n manifest.aliases = normalizedAliases;\n }\n\n const availability = checkRequires(manifest, {\n cwd: options.cwd ?? result.pkgRoot,\n });\n\n const cmd: RegisteredCommand = {\n manifest,\n v3Manifest: (manifest as any).manifestV2, // Extract V3 manifest from legacy field\n available: availability.available,\n unavailableReason: availability.available ? undefined : availability.reason,\n hint: availability.available ? undefined : availability.hint,\n source: result.source,\n shadowed: false,\n pkgRoot: result.pkgRoot,\n packageName: result.packageName,\n };\n\n try {\n const manifestModule = await import(result.manifestPath);\n\n if (manifestModule.init && typeof manifestModule.init === 'function') {\n await manifestModule.init({\n cwd: result.pkgRoot,\n package: result.packageName,\n manifest: cmd.manifest,\n });\n }\n\n if (manifestModule.register && typeof manifestModule.register === 'function') {\n await manifestModule.register({\n registry,\n command: cmd,\n cwd: result.pkgRoot,\n package: result.packageName,\n });\n }\n\n if (manifestModule.dispose && typeof manifestModule.dispose === 'function') {\n (cmd as any)._disposeHook = manifestModule.dispose;\n }\n } catch (hookError: any) {\n log.debug(`Lifecycle hooks unavailable for ${manifest.id}: ${hookError.message}`);\n }\n\n const existing = globalIds.get(manifest.id);\n if (existing) {\n const collision = checkCollision(manifest, existing, result.source, namespace);\n if (collision.shouldShadow) {\n existing.shadowed = true;\n globalIds.set(manifest.id, cmd);\n if (logLevel === 'info' || logLevel === 'debug') {\n log.info(`${manifest.id} from ${result.source} shadows ${existing.source} version`);\n }\n } else {\n cmd.shadowed = true;\n if (logLevel === 'info' || logLevel === 'debug') {\n log.info(`${manifest.id} from ${result.source} shadowed by ${existing.source} version`);\n }\n }\n } else {\n globalIds.set(manifest.id, cmd);\n }\n\n const aliasesToCheck = manifest.aliases || [];\n for (const alias of aliasesToCheck) {\n const existingAlias = globalAliases.get(alias);\n if (existingAlias) {\n if (existingAlias.manifest.id === manifest.id) {\n continue;\n }\n\n const existingPriority = getSourcePriority(existingAlias.source);\n const currentPriority = getSourcePriority(result.source);\n\n if (currentPriority > existingPriority) {\n existingAlias.shadowed = true;\n globalAliases.set(alias, cmd);\n if (logLevel === 'info' || logLevel === 'debug') {\n log.info(`Alias \"${alias}\" from ${result.source} shadows ${existingAlias.source} version`);\n }\n } else if (currentPriority < existingPriority) {\n if (logLevel === 'info' || logLevel === 'debug') {\n log.info(`Alias \"${alias}\" from ${result.source} shadowed by ${existingAlias.source} version`);\n }\n continue;\n } else {\n collisions++;\n throw new Error(\n `Alias collision: \"${alias}\" used by both ${manifest.id} and ${existingAlias.manifest.id}. ` +\n `Rename one alias or use a different namespace.`\n );\n }\n }\n\n if (globalIds.has(alias)) {\n const conflictingCmd = globalIds.get(alias)!;\n const existingPriority = getSourcePriority(conflictingCmd.source);\n const currentPriority = getSourcePriority(result.source);\n\n if (currentPriority > existingPriority) {\n log.warn(`Alias \"${alias}\" conflicts with command ID \"${alias}\". Alias will shadow command.`);\n globalAliases.set(alias, cmd);\n } else {\n throw new Error(\n `Alias \"${alias}\" conflicts with existing command ID \"${alias}\". ` +\n `Rename the alias or use a different name.`\n );\n }\n } else {\n globalAliases.set(alias, cmd);\n }\n }\n\n if (!cmd.shadowed) {\n registry.registerManifest(cmd);\n }\n\n registered.push(cmd);\n } catch (error: any) {\n errors++;\n const reason = error?.message ? String(error.message) : String(error);\n skipped.push({\n id: manifestId,\n source: result.source,\n reason,\n });\n log.error(`Skipped manifest ${manifestId} (${result.source}): ${reason}`);\n continue;\n }\n }\n }\n\n if (skipped.length > 0) {\n log.warn(`Skipped ${skipped.length} manifest(s) during registration`);\n for (const skip of skipped) {\n log.warn(` • ${skip.id} [${skip.source}] → ${skip.reason}`);\n }\n }\n\n return {\n registered,\n skipped,\n collisions,\n errors,\n };\n}\n\n/**\n * Dispose all plugins by calling their dispose hooks\n */\nexport async function disposeAllPlugins(registry: any, logger?: ILogger): Promise<void> {\n const log = logger ?? platform.logger;\n const manifests = registry.listManifests();\n const disposePromises: Promise<void>[] = [];\n\n for (const cmd of manifests) {\n const disposeHook = (cmd as any)._disposeHook;\n if (disposeHook && typeof disposeHook === 'function') {\n disposePromises.push(\n Promise.resolve(disposeHook({\n registry,\n command: cmd,\n })).catch((err: any) => {\n log.warn(`Dispose hook failed for ${cmd.manifest.id}: ${err.message}`);\n })\n );\n }\n }\n\n await Promise.allSettled(disposePromises);\n}\n","import type { RegisteredCommand } from './types';\n\n/**\n * Execute a registered command.\n *\n * - Unavailable commands return exit code 2.\n * - Available commands are executed via manifest.loader().\n */\nexport async function runCommand(\n cmd: RegisteredCommand,\n ctx: any,\n argv: string[],\n flags: Record<string, any>,\n): Promise<number> {\n if (!cmd.available) {\n if (ctx.presenter?.json) {\n ctx.presenter.json({\n ok: false,\n available: false,\n command: cmd.manifest.id,\n reason: cmd.unavailableReason,\n hint: cmd.hint,\n });\n }\n return 2;\n }\n\n if (!cmd.manifest.loader) {\n return 1;\n }\n\n const implementation = await cmd.manifest.loader();\n const result = await implementation.run(ctx, argv, flags);\n\n return typeof result === 'number' ? result : 0;\n}\n","import type { Command, CommandGroup, CommandRegistry } from \"./legacy-types\";\nimport type { RegisteredCommand } from \"./types\";\n\n/**\n * Convert RegisteredCommand to Command adapter\n *\n * This is a minimal adapter - actual execution happens in bootstrap.ts via executePlugin().\n * The run() function here is never called for plugin commands.\n */\nfunction manifestToCommand(registered: RegisteredCommand): Command {\n return {\n name: registered.manifest.id,\n category: registered.manifest.group,\n describe: registered.manifest.describe,\n longDescription: registered.manifest.longDescription,\n aliases: registered.manifest.aliases || [],\n flags: registered.manifest.flags,\n examples: registered.manifest.examples,\n async run() {\n // This should never be called - plugin commands are executed via executePlugin() in bootstrap.ts\n throw new Error(`Command ${registered.manifest.id} should be executed via plugin-executor, not via legacy run() path.`);\n },\n };\n}\n\nexport interface ProductGroup {\n name: string;\n describe?: string;\n commands: RegisteredCommand[];\n}\n\nexport type CommandType = 'system' | 'plugin';\n\nexport interface CommandLookupResult {\n cmd: Command | CommandGroup;\n type: CommandType;\n}\n\nclass InMemoryRegistry implements CommandRegistry {\n // Separate collections for security isolation\n private systemCommands = new Map<string, Command>(); // System commands (in-process)\n private pluginCommands = new Map<string, RegisteredCommand>(); // Plugin commands (subprocess)\n\n // Legacy unified collection for backward compatibility\n private byName = new Map<string, Command | CommandGroup>();\n private groups = new Map<string, CommandGroup>();\n private manifests = new Map<string, RegisteredCommand>();\n private partial = false;\n\n register(cmd: Command): void {\n // Store in systemCommands for type checking\n this.systemCommands.set(cmd.name, cmd);\n\n // Also keep in byName for backward compatibility\n this.byName.set(cmd.name, cmd);\n for (const a of cmd.aliases || []) {\n this.systemCommands.set(a, cmd);\n this.byName.set(a, cmd);\n }\n }\n\n registerGroup(group: CommandGroup): void {\n this.groups.set(group.name, group);\n this.byName.set(group.name, group);\n\n for (const cmd of group.commands) {\n // Store each command from group in systemCommands\n this.systemCommands.set(cmd.name, cmd);\n\n const fullName = `${group.name} ${cmd.name}`;\n this.systemCommands.set(fullName, cmd);\n this.byName.set(fullName, cmd);\n\n for (const alias of cmd.aliases || []) {\n this.systemCommands.set(alias, cmd);\n this.byName.set(alias, cmd);\n }\n }\n\n // Register subgroups (e.g., marketplace → plugins, adapters)\n if (group.subgroups) {\n for (const sub of group.subgroups) {\n const subName = `${group.name} ${sub.name}`;\n this.groups.set(subName, sub);\n this.byName.set(subName, sub);\n\n for (const cmd of sub.commands) {\n const fullName = `${group.name} ${sub.name} ${cmd.name}`;\n this.systemCommands.set(fullName, cmd);\n this.byName.set(fullName, cmd);\n\n for (const alias of cmd.aliases || []) {\n this.systemCommands.set(alias, cmd);\n this.byName.set(alias, cmd);\n }\n }\n }\n }\n }\n\n registerManifest(cmd: RegisteredCommand): void {\n // Check for collision with system commands\n const cmdId = cmd.manifest.id;\n const hasCollision = this.systemCommands.has(cmdId);\n\n if (hasCollision) {\n console.warn(`[registry] Plugin command \"${cmdId}\" collides with system command. System command takes priority.`);\n // Mark plugin command as shadowed - it will NOT be executable\n cmd.shadowed = true;\n }\n\n // Check aliases for collisions\n const collisionAliases = new Set<string>();\n for (const alias of cmd.manifest.aliases || []) {\n if (this.systemCommands.has(alias)) {\n console.warn(`[registry] Plugin alias \"${alias}\" collides with system command. System command takes priority.`);\n collisionAliases.add(alias);\n }\n }\n\n // Store in pluginCommands (even if shadowed, for manifest listing)\n this.pluginCommands.set(cmdId, cmd);\n this.manifests.set(cmdId, cmd);\n\n // Only add to byName if NO collision with system commands\n // This ensures system commands always win in routing\n if (!hasCollision) {\n const commandAdapter = manifestToCommand(cmd);\n\n this.byName.set(cmdId, commandAdapter);\n this.byName.set(commandAdapter.name, commandAdapter);\n\n // Also register with space-separated format for multi-part commands\n // e.g., \"agent:trace:stats\" → \"agent trace stats\"\n if (cmdId.includes(':')) {\n const spaceSeparated = cmdId.replace(/:/g, ' ');\n this.byName.set(spaceSeparated, commandAdapter);\n }\n\n // Register with full group + command format for invocation\n if (cmd.manifest.group && cmd.manifest.subgroup) {\n // 3-part path: \"marketplace plugins list\"\n const fullPath = `${cmd.manifest.group} ${cmd.manifest.subgroup} ${cmd.manifest.id}`;\n const colonPath = `${cmd.manifest.group}:${cmd.manifest.subgroup}:${cmd.manifest.id}`;\n this.byName.set(fullPath, commandAdapter);\n this.byName.set(colonPath, commandAdapter);\n this.manifests.set(fullPath, cmd);\n this.manifests.set(colonPath, cmd);\n this.pluginCommands.set(fullPath, cmd);\n this.pluginCommands.set(colonPath, cmd);\n\n // Also register 2-part: \"marketplace list\" (without subgroup, for discoverability)\n const twoPartName = `${cmd.manifest.group} ${cmd.manifest.id}`;\n if (!this.byName.has(twoPartName)) {\n this.byName.set(twoPartName, commandAdapter);\n }\n\n // Synthetic subgroup for help display\n const subgroupKey = `${cmd.manifest.group} ${cmd.manifest.subgroup}`;\n if (!this.groups.has(subgroupKey)) {\n this.groups.set(subgroupKey, {\n name: subgroupKey,\n describe: cmd.manifest.subgroup,\n commands: [],\n });\n this.byName.set(subgroupKey, this.groups.get(subgroupKey)!);\n }\n (this.groups.get(subgroupKey)! as any).commands.push(commandAdapter);\n } else if (cmd.manifest.group) {\n const fullName = `${cmd.manifest.group} ${cmd.manifest.id}`;\n const colonName = `${cmd.manifest.group}:${cmd.manifest.id}`;\n this.byName.set(fullName, commandAdapter);\n this.byName.set(colonName, commandAdapter);\n this.manifests.set(fullName, cmd);\n this.manifests.set(colonName, cmd);\n this.pluginCommands.set(fullName, cmd);\n this.pluginCommands.set(colonName, cmd);\n }\n\n if (cmd.manifest.aliases) {\n for (const alias of cmd.manifest.aliases) {\n // Skip aliases that collide with system commands\n if (!collisionAliases.has(alias)) {\n this.byName.set(alias, commandAdapter);\n }\n }\n }\n }\n }\n\n markPartial(partial: boolean): void {\n this.partial = partial;\n }\n\n isPartial(): boolean {\n return this.partial;\n }\n\n getManifest(id: string): RegisteredCommand | undefined {\n return this.manifests.get(id);\n }\n\n listManifests(): RegisteredCommand[] {\n const unique = new Set<RegisteredCommand>();\n for (const cmd of this.manifests.values()) {\n unique.add(cmd);\n }\n return Array.from(unique);\n }\n\n has(name: string): boolean {\n return this.byName.has(name);\n }\n\n /**\n * Get command with type information for secure routing\n *\n * Returns type='system' for commands from registerGroup() - execute in-process\n * Returns type='plugin' for commands from registerManifest() - execute in subprocess\n *\n * This separation prevents malicious plugins from escaping the sandbox.\n */\n getWithType(nameOrPath: string | string[]): CommandLookupResult | undefined {\n const cmd = this.get(nameOrPath);\n if (!cmd) {\n return undefined;\n }\n\n // Groups are always system-level\n if ('commands' in cmd) {\n return { cmd, type: 'system' };\n }\n\n // Check if command is in systemCommands (registered via register() or registerGroup())\n const normalizedName = typeof nameOrPath === 'string' ? nameOrPath : nameOrPath.join(' ');\n\n // Try direct lookup\n if (this.systemCommands.has(normalizedName)) {\n return { cmd, type: 'system' };\n }\n\n // Try with colon-to-space conversion for system commands\n if (normalizedName.includes(':')) {\n const spaceVersion = normalizedName.replace(':', ' ');\n if (this.systemCommands.has(spaceVersion)) {\n return { cmd, type: 'system' };\n }\n }\n\n // Check if it's a plugin command (has manifest)\n const manifestCmd = this.getManifestCommand(normalizedName);\n if (manifestCmd) {\n return { cmd, type: 'plugin' };\n }\n\n // Default to system if found in byName but not categorized\n // This handles edge cases and ensures backward compatibility\n return { cmd, type: 'system' };\n }\n\n get(nameOrPath: string | string[]): Command | CommandGroup | undefined {\n if (typeof nameOrPath === \"string\") {\n if (this.byName.has(nameOrPath)) {\n return this.byName.get(nameOrPath);\n }\n if (nameOrPath.includes(\":\")) {\n const parts = nameOrPath.split(\":\");\n if (parts.length === 2) {\n const exactMatch = this.byName.get(nameOrPath);\n if (exactMatch) {\n return exactMatch;\n }\n\n const spaceKey = parts.join(\" \");\n if (this.byName.has(spaceKey)) {\n return this.byName.get(spaceKey);\n }\n }\n }\n }\n\n const key = Array.isArray(nameOrPath)\n ? nameOrPath.join(\" \")\n : nameOrPath;\n\n if (this.byName.has(key)) {\n return this.byName.get(key);\n }\n\n if (\n Array.isArray(nameOrPath) &&\n nameOrPath.length === 1 &&\n nameOrPath[0]?.includes(\":\")\n ) {\n if (this.byName.has(nameOrPath[0])) {\n return this.byName.get(nameOrPath[0]);\n }\n\n const [group, command] = nameOrPath[0].split(\":\");\n const legacyKey = `${group} ${command}`;\n if (this.byName.has(legacyKey)) {\n return this.byName.get(legacyKey);\n }\n }\n\n if (Array.isArray(nameOrPath)) {\n const dot = nameOrPath.join(\".\");\n if (this.byName.has(dot)) {\n return this.byName.get(dot);\n }\n }\n\n // Try to find command in groups by prefix (e.g., [\"system\", \"hello\"] -> \"system:info hello\")\n if (Array.isArray(nameOrPath) && nameOrPath.length >= 2) {\n const [groupPrefix, ...cmdParts] = nameOrPath;\n const cmdName = cmdParts.join(\" \");\n\n for (const group of this.groups.values()) {\n if (group.name === groupPrefix || group.name.startsWith(groupPrefix + ':')) {\n const fullName = `${group.name} ${cmdName}`;\n if (this.byName.has(fullName)) {\n return this.byName.get(fullName);\n }\n }\n }\n }\n\n return undefined;\n }\n\n list(): Command[] {\n const commands = new Set<Command>();\n for (const value of this.byName.values()) {\n if (\"run\" in value) {\n commands.add(value);\n }\n }\n return Array.from(commands);\n }\n\n listGroups(): CommandGroup[] {\n return Array.from(this.groups.values());\n }\n\n getGroupsByPrefix(prefix: string): CommandGroup[] {\n const result: CommandGroup[] = [];\n for (const group of this.groups.values()) {\n if (group.name === prefix || group.name.startsWith(prefix + ':')) {\n result.push(group);\n }\n }\n return result;\n }\n\n getCommandsByGroupPrefix(prefix: string): Command[] {\n const result: Command[] = [];\n for (const group of this.groups.values()) {\n if (group.name === prefix || group.name.startsWith(prefix + ':')) {\n result.push(...group.commands);\n }\n }\n return result;\n }\n\n listProductGroups(): ProductGroup[] {\n const groups = new Map<string, ProductGroup>();\n\n for (const cmd of this.listManifests()) {\n const groupName = cmd.manifest.group;\n if (!groups.has(groupName)) {\n groups.set(groupName, {\n name: groupName,\n describe: cmd.manifest.group,\n commands: [],\n });\n }\n groups.get(groupName)!.commands.push(cmd);\n }\n\n return Array.from(groups.values());\n }\n\n getCommandsByGroup(group: string): RegisteredCommand[] {\n return this.listManifests()\n .filter((cmd) => cmd.manifest.group === group)\n .sort((a, b) => a.manifest.id.localeCompare(b.manifest.id));\n }\n\n getManifestCommand(idOrAlias: string): RegisteredCommand | undefined {\n if (this.manifests.has(idOrAlias)) {\n return this.manifests.get(idOrAlias);\n }\n\n for (const cmd of this.manifests.values()) {\n if (cmd.manifest.aliases?.includes(idOrAlias)) {\n return cmd;\n }\n // Support both colon and space separators (e.g., \"agent:trace:stats\" or \"agent trace stats\")\n if (cmd.manifest.id.replace(/:/g, \" \") === idOrAlias) {\n return cmd;\n }\n }\n\n return undefined;\n }\n}\n\nexport const registry = new InMemoryRegistry();\n\nexport function findCommand(nameOrPath: string | string[]) {\n return registry.get(nameOrPath);\n}\n\n/**\n * Find command with type information for secure routing\n *\n * Use this in bootstrap.ts to determine execution path:\n * - type='system' → execute via cmd.run() in-process\n * - type='plugin' → execute via executePlugin() in plugin-executor\n */\nexport function findCommandWithType(nameOrPath: string | string[]): CommandLookupResult | undefined {\n return registry.getWithType(nameOrPath);\n}\n\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../../../../../Users/kirillbaranov/Desktop/kb-labs-workspace/cli/commands/src/registry/availability.ts","../../../../../../../Users/kirillbaranov/Desktop/kb-labs-workspace/cli/commands/src/registry/schema.ts","../../../../../../../Users/kirillbaranov/Desktop/kb-labs-workspace/cli/commands/src/registry/discover.ts","../../../../../../../Users/kirillbaranov/Desktop/kb-labs-workspace/cli/commands/src/registry/register.ts","../../../../../../../Users/kirillbaranov/Desktop/kb-labs-workspace/cli/commands/src/registry/run.ts","../../../../../../../Users/kirillbaranov/Desktop/kb-labs-workspace/cli/commands/src/registry/service.ts"],"names":["__filename","__dirname","path","req","fs","parseYaml","totalTime","sourceCounts","log","registry"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * @kb-labs/cli-commands/registry\n * Dependency availability checking with ESM support\n * \n * IMPORTANT: Only resolve, never import() - imports happen in loader()\n */\n\nimport { createRequire } from 'node:module';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { existsSync } from 'node:fs';\nimport type { CommandManifest, AvailabilityCheck } from './types';\n\n// Create require from this module (ESM-safe, doesn't depend on cwd)\nconst req = createRequire(import.meta.url);\n\n// Get the directory containing this file\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\n/**\n * Resolve a package from a specific directory\n * Uses paths option to search from cwd, not from CLI package\n * IMPORTANT: Only resolve, never import() - imports happen in loader()\n */\nfunction resolveFromCwd(spec: string, cwd: string): string {\n // Try resolving from multiple locations (monorepo-aware)\n const cliRoot = path.resolve(__dirname, '../../..');\n \n // Check if we're in a monorepo (kb-labs-cli, kb-labs-core, kb-labs-mind, etc.)\n // Search for packages in parent directories\n let monorepoRoot = cwd;\n while (monorepoRoot !== path.dirname(monorepoRoot)) {\n if (existsSync(path.join(monorepoRoot, 'pnpm-workspace.yaml'))) {\n break; // Found pnpm monorepo root\n }\n monorepoRoot = path.dirname(monorepoRoot);\n }\n \n const pathsToTry = [\n cwd, // Current working directory (user's project)\n cliRoot, // CLI installation directory\n monorepoRoot, // Monorepo root (if found)\n path.join(monorepoRoot, '../kb-labs-cli'), // Explicit kb-labs-cli path\n path.join(monorepoRoot, '../kb-labs-mind'), // Explicit kb-labs-mind path\n ].filter(Boolean);\n \n for (const searchPath of pathsToTry) {\n try {\n return req.resolve(spec, { paths: [searchPath] });\n } catch (_e: any) {\n // Try next path\n }\n }\n \n // If all paths failed, throw the last error\n throw new Error(`Cannot resolve ${spec} from any of: ${pathsToTry.join(', ')}`);\n}\n\n/**\n * Check if all required dependencies for a command are available\n * @param manifest Command manifest with requires field\n * @param cwd Working directory to resolve from (defaults to process.cwd())\n * @returns Availability status with reason and hint if unavailable\n */\nexport interface CheckRequiresOptions {\n cwd?: string;\n}\n\nexport function checkRequires(\n manifest: CommandManifest,\n options: CheckRequiresOptions = {},\n): AvailabilityCheck {\n const cwd = options.cwd ?? process.cwd();\n if (!manifest.requires || manifest.requires.length === 0) {\n return { available: true as const };\n }\n \n // Check if we're in a monorepo\n let isInMonorepo = false;\n let monorepoRoot = cwd;\n while (monorepoRoot !== path.dirname(monorepoRoot)) {\n if (existsSync(path.join(monorepoRoot, 'pnpm-workspace.yaml'))) {\n isInMonorepo = true;\n break;\n }\n monorepoRoot = path.dirname(monorepoRoot);\n }\n \n for (const dep of manifest.requires) {\n try {\n // Try to resolve the package\n const resolved = resolveFromCwd(dep, cwd);\n // Additional check: verify that the resolved path contains package.json\n // This handles cases where require.resolve throws due to exports but package exists\n if (!resolved.includes('node_modules')) {\n continue;\n }\n } catch (err: any) {\n // In a monorepo, if we can't resolve but the package exists in workspace, consider it available\n if (isInMonorepo) {\n // Check if package exists in workspace (workspace:* dependencies work in monorepo)\n continue;\n }\n // If the error is about exports or if we can't resolve, try to check if package exists by looking for package.json\n // Check the nested error as well (the actual require.resolve error might be wrapped)\n const errorMessage = err.message || '';\n const hasExportsError = errorMessage.includes('exports') || errorMessage.includes('main');\n \n if (hasExportsError || errorMessage.includes('Cannot resolve')) {\n // Package might exist - try to verify by checking for package.json\n // Parse scoped package name (e.g., @kb-labs/devlink-core -> kb-labs/devlink-core)\n const parts = dep.startsWith('@') \n ? dep.slice(1).split('/')\n : [dep];\n \n if (parts.length === 0) {continue;}\n \n const scope = parts.length >= 2 ? parts[0] : '';\n const packageName = parts.length >= 2 ? parts[1] : parts[0];\n \n if (!packageName) {continue;}\n \n // Try to find the package.json\n const cliRoot = path.resolve(__dirname, '../../..');\n const packagePath = scope \n ? path.join(cliRoot, 'node_modules', '@' + scope, packageName, 'package.json')\n : path.join(cliRoot, 'node_modules', packageName, 'package.json');\n \n if (existsSync(packagePath)) {\n // Package exists - consider it available\n continue;\n }\n }\n \n // Determine installation hint based on package\n const isKbLabsPackage = dep.startsWith('@kb-labs/');\n const hint = isKbLabsPackage \n ? `Run: pnpm add ${dep}`\n : `Run: npm install ${dep}`;\n \n return {\n available: false as const,\n reason: `Missing dependency: ${dep}`,\n hint,\n };\n }\n }\n \n return { available: true as const };\n}\n\n","/**\n * @kb-labs/cli-commands/registry\n * Zod schema for command manifest validation\n */\n\nimport { z } from 'zod';\nimport type { CommandManifest } from './types';\n\n// Semver regex approximation (not full semver, but covers most cases)\nconst semverPattern = /^[\\^~]?[\\d]+\\.[\\d]+(\\.[\\d]+)?(-[\\w\\.-]+)?(\\+[\\w\\.-]+)?$/;\n\n/**\n * Flag definition schema\n */\nconst FlagDefinitionSchema = z.object({\n name: z.string().min(1).regex(/^[a-z0-9-]+$/, 'Flag name must be lowercase alphanumeric with hyphens'),\n type: z.enum(['string', 'boolean', 'number', 'array']),\n alias: z.string().length(1).regex(/^[a-z]$/i, 'Alias must be a single letter').optional(),\n default: z.any().optional(),\n description: z.string().optional(),\n choices: z.array(z.string()).optional(),\n required: z.boolean().optional(),\n}).refine(\n (data) => {\n // Choices only allowed for string type\n if (data.choices && data.type !== 'string') {\n return false;\n }\n return true;\n },\n { message: 'Choices are only allowed for string type flags' }\n);\n\n/**\n * Engine requirements schema\n */\nconst EngineSchema = z.object({\n node: z.string().optional(), // e.g., \">=18\", \"^18.0.0\"\n kbCli: z.string().optional(), // e.g., \"^1.5.0\"\n module: z.enum(['esm', 'cjs']).optional(),\n}).optional();\n\n/**\n * Command manifest schema (v1.0)\n * Supports both legacy and new format\n */\nexport const CommandManifestSchema = z.object({\n manifestVersion: z.literal('1.0'),\n \n // Legacy fields (still supported)\n id: z.string().min(1).regex(/^[a-z0-9-]+:[a-z0-9-]+(?:[:a-z0-9-]+)*$/, 'Command ID must be in format \"namespace:command\"'),\n aliases: z.array(z.string()).optional(),\n group: z.string().min(1),\n describe: z.string().min(1),\n longDescription: z.string().optional(),\n requires: z.array(z.string()).optional(), // Package names with optional semver\n flags: z.array(FlagDefinitionSchema).optional(),\n examples: z.array(z.string()).optional(),\n loader: z.any(), // Function validation happens at runtime\n \n // New fields (optional for backward compatibility)\n package: z.string().optional(), // Full package name\n namespace: z.string().optional(), // Derived from id if not provided\n engine: EngineSchema,\n permissions: z.array(z.string()).optional(), // e.g., [\"fs.read\", \"git.read\", \"net.fetch\"]\n telemetry: z.enum(['opt-in', 'off']).optional(),\n manifestV2: z.any().optional(), // Full ManifestV3 for sandbox execution\n\n // Internal flags for auto-generated commands\n isSetup: z.boolean().optional(), // Auto-generated setup command\n isSetupRollback: z.boolean().optional(), // Auto-generated setup rollback command\n pkgRoot: z.string().optional(), // Package root path for handler resolution\n}).refine(\n (data) => {\n // IDs are now simple (no namespace prefix), just check namespace matches group\n if (data.namespace && data.group && data.namespace !== data.group) {\n return false;\n }\n return true;\n },\n { message: 'namespace must match group' }\n).refine(\n (data) => {\n // Validate requires entries are semver-compatible if they include version\n if (data.requires) {\n for (const req of data.requires) {\n // If it contains @, check if version part is semver-like\n if (req.includes('@')) {\n const parts = req.split('@');\n if (parts.length === 2) {\n const version = parts[1];\n // Allow exact package names without version; try to parse as semver range\n if (version && !semverPattern.test(version) && !version.startsWith('^') && !version.startsWith('~') && !version.match(/^[\\^~>=<]?[\\d\\.]+/)) {\n return false;\n }\n }\n }\n }\n }\n return true;\n },\n { message: 'requires entries must use valid semver ranges' }\n);\n\n/**\n * Validate a single command manifest\n */\nexport function validateManifest(manifest: unknown): { success: true; data: CommandManifest } | { success: false; error: z.ZodError } {\n const result = CommandManifestSchema.safeParse(manifest);\n \n if (result.success) {\n return { success: true, data: result.data };\n }\n \n return { success: false, error: result.error };\n}\n\n/**\n * Validate an array of command manifests\n */\nexport function validateManifests(manifests: unknown[]): { success: true; data: CommandManifest[] } | { success: false; errors: z.ZodError[] } {\n const errors: z.ZodError[] = [];\n const validated: CommandManifest[] = [];\n \n for (let i = 0; i < manifests.length; i++) {\n const result = CommandManifestSchema.safeParse(manifests[i]);\n if (result.success) {\n validated.push(result.data);\n } else {\n const errorWithIndex = new z.ZodError([\n ...result.error.issues.map(issue => ({\n ...issue,\n path: [`[${i}]`, ...issue.path],\n })),\n ]);\n errors.push(errorWithIndex);\n }\n }\n \n if (errors.length === 0) {\n return { success: true, data: validated };\n }\n \n return { success: false, errors };\n}\n\n/**\n * Normalize manifest to ensure required fields are set\n */\nexport function normalizeManifest(manifest: CommandManifest, packageName: string, namespace?: string): CommandManifest {\n const normalized = { ...manifest };\n \n // Ensure namespace/group consistency\n // Priority: explicit namespace > group > package-derived namespace\n if (!normalized.namespace && normalized.group) {\n normalized.namespace = normalized.group;\n } else if (!normalized.namespace && namespace) {\n normalized.namespace = namespace;\n }\n if (!normalized.group && normalized.namespace) {\n normalized.group = normalized.namespace;\n }\n \n // Ensure package name is set\n if (!normalized.package) {\n normalized.package = packageName;\n }\n \n // ID should be simple without group prefix (breaking change)\n // No longer enforcing namespace:command format\n \n return normalized;\n}\n\n","/**\n * @kb-labs/cli-commands/registry\n * Command manifest discovery - workspace, node_modules, current package\n */\n\nimport { pathToFileURL } from 'node:url';\nimport { promises as fs } from 'node:fs';\nimport { existsSync } from 'node:fs';\nimport { createHash } from 'node:crypto';\nimport path from 'node:path';\n\n/** Very small repo root detector: looks for .git upwards. */\nfunction _detectRepoRoot(start = process.cwd()): string {\n let cur = path.resolve(start);\n while (true) {\n if (existsSync(path.join(cur, '.git'))) {\n return cur;\n }\n const parent = path.dirname(cur);\n if (parent === cur) {\n return start;\n } // fallback\n cur = parent;\n }\n}\nimport { parse as parseYaml } from 'yaml';\nimport { glob } from 'glob';\nimport type { CommandManifest, DiscoveryResult, CacheFile, PackageCacheEntry } from './types';\nimport type { ManifestV3 } from '@kb-labs/plugin-contracts';\nimport { toPosixPath } from '../utils/path';\nimport { validateManifests, normalizeManifest } from './schema';\n\n// Check if DEBUG_MODE is enabled\nconst DEBUG_MODE = process.env.DEBUG_SANDBOX === '1' || process.env.NODE_ENV === 'development';\n\n// Helper function for logging - only outputs in DEBUG_MODE to avoid polluting user output\n// In production, discovery logs are suppressed unless user explicitly enables --debug\nconst log = (level: 'debug' | 'info' | 'warn' | 'error', message: string, fields?: Record<string, unknown>): void => {\n if (!DEBUG_MODE) {return;}\n\n // In debug mode, use console for immediate output (no lazy logger initialization)\n const prefix = level === 'error' ? '✗' : level === 'warn' ? '⚠' : level === 'info' ? 'ℹ' : '🔍';\n const logFn = level === 'error' ? console.error : level === 'warn' ? console.warn : console.log;\n\n if (fields) {\n logFn(`${prefix} [discover] ${message}`, fields);\n } else {\n logFn(`${prefix} [discover] ${message}`);\n }\n};\n\nconst _SETUP_COMMAND_FLAGS = [\n {\n name: 'force',\n type: 'boolean' as const,\n description: 'Overwrite existing configuration and files.',\n },\n {\n name: 'dry-run',\n type: 'boolean' as const,\n description: 'Preview setup changes without writing to disk.',\n },\n {\n name: 'yes',\n type: 'boolean' as const,\n description: 'Auto-confirm modifications outside the .kb/ directory.',\n },\n {\n name: 'kb-only',\n type: 'boolean' as const,\n description: 'Restrict setup to .kb/ paths and skip project files.',\n },\n] satisfies Exclude<CommandManifest['flags'], undefined>;\n\n/**\n * Create loader stub for ManifestV3 commands.\n * Loader should never be executed directly – CLI adapters must handle execution.\n */\nfunction createManifestV3Loader(commandId: string): () => Promise<{ run: any }> {\n return async () => {\n throw new Error(\n `Loader should not be called for ManifestV3 command ${commandId}. Use plugin-adapter-cli executeCommand instead.`\n );\n };\n}\n\n// Setup rollback command removed — setup-engine eliminated from project\n\n/**\n * Ensure manifest has loader function (rehydrate after JSON serialization).\n */\nfunction ensureManifestLoader(manifest: CommandManifest): void {\n if (typeof manifest.loader !== 'function') {\n const commandId = manifest.id || manifest.group || 'unknown';\n log('debug', `[plugins][cache] Rehydrated loader for ${commandId}`);\n manifest.loader = createManifestV3Loader(commandId);\n }\n}\n\nexport const __test = {\n ensureManifestLoader,\n createManifestV3Loader,\n // resetInProcCache is exported directly (not via __test) since it's part of the public API\n};\n\n/** Create a synthetic manifest marking package as unavailable with actionable hint */\nfunction createUnavailableManifest(pkgName: string, error: any): CommandManifest {\n const rawMsg = (error?.message || String(error) || '').toString();\n // Try to extract missing module name from error\n let missing: string | null = null;\n const m1 = rawMsg.match(/Cannot find (?:module|package) '([^']+)'/);\n const m2 = rawMsg.match(/from ['\"]([^'\"]+)['\"]/);\n if (m1 && m1[1]) {missing = m1[1];}\n else if (m2 && m2[1] && m2[1].startsWith('@')) {missing = m2[1];}\n\n // Derive group from package name (e.g., @kb-labs/core-cli -> core)\n const seg = pkgName.includes('/') ? pkgName.split('/')[1] : pkgName;\n const group = (seg || pkgName).replace(/-cli$/,'');\n const short = seg || pkgName;\n\n const requires = missing ? [missing] : [];\n\n const manifest: CommandManifest = {\n manifestVersion: '1.0',\n id: `${group}:manifest:${short}`,\n group,\n describe: `Commands from ${pkgName} are unavailable` ,\n requires,\n loader: async () => {\n // Throw a descriptive error if someone tries to run it\n throw new Error(`Cannot load ${pkgName} CLI manifest. ${rawMsg}`);\n }\n } as any;\n // Mark as synthetic so saveCache can skip it — synthetic manifests must never\n // be persisted to disk because they represent transient load failures.\n // Caching them would make the error \"stick\" until the TTL expires even after\n // the underlying problem (missing build artifact, broken dep) is resolved.\n (manifest as any)._synthetic = true;\n return manifest;\n}\n\n// Constants\nconst PACKAGE_JSON = 'package.json';\nconst MANIFEST_LOAD_TIMEOUT = 1500; // 1.5 seconds\nconst IN_PROC_CACHE_TTL_MS = 60_000;\nconst DISK_CACHE_TTL_MS = 5 * 60_000;\n\nlet inProcDiscoveryCache: { timestamp: number; results: DiscoveryResult[] } | null = null;\n\n/**\n * Reset the in-process discovery cache.\n * Call this after clearing the disk cache so the next discoverManifests() call\n * in the same process performs a fresh scan rather than serving stale results.\n */\nexport function resetInProcCache(): void {\n inProcDiscoveryCache = null;\n}\n\n/**\n * Compute SHA256 hash of manifest file content\n */\nasync function computeManifestHash(manifestPath: string): Promise<string> {\n try {\n const content = await fs.readFile(manifestPath, 'utf8');\n return createHash('sha256').update(content).digest('hex');\n } catch {\n return 'unknown';\n }\n}\n\n/**\n * Compute hash of lockfile (pnpm-lock.yaml) for cache invalidation\n */\nasync function computeLockfileHash(cwd: string): Promise<string> {\n const lockfilePath = path.join(cwd, 'pnpm-lock.yaml');\n try {\n const content = await fs.readFile(lockfilePath, 'utf8');\n return createHash('sha256').update(content).digest('hex');\n } catch {\n return '';\n }\n}\n\n/**\n * Compute hash of kb.config.json for cache invalidation\n */\nasync function computeConfigHash(cwd: string): Promise<string> {\n const configPath = path.join(cwd, '.kb', 'kb.config.json');\n try {\n const content = await fs.readFile(configPath, 'utf8');\n return createHash('sha256').update(content).digest('hex');\n } catch {\n return '';\n }\n}\n\n/**\n * Compute hash of .kb/plugins.json for cache invalidation\n */\nasync function computePluginsStateHash(cwd: string): Promise<string> {\n const pluginsPath = path.join(cwd, '.kb', 'plugins.json');\n try {\n const content = await fs.readFile(pluginsPath, 'utf8');\n return createHash('sha256').update(content).digest('hex');\n } catch {\n return '';\n }\n}\n\n/**\n * Detect whether new workspace packages with manifests appeared since cache was written.\n * If so, cached results are considered stale to ensure new commands are registered.\n */\nasync function detectNewWorkspacePackages(\n cwd: string,\n cachedPackages: Record<string, PackageCacheEntry> | undefined\n): Promise<boolean> {\n if (!cachedPackages) {\n return true;\n }\n\n try {\n const workspaceYaml = path.join(cwd, 'pnpm-workspace.yaml');\n const content = await fs.readFile(workspaceYaml, 'utf8');\n const parsed = parseYaml(content) as { packages?: string[] };\n if (!Array.isArray(parsed.packages)) {\n return false;\n }\n\n const knownPackages = new Set(Object.keys(cachedPackages));\n\n for (const pattern of parsed.packages) {\n const pkgPattern = path.join(pattern, PACKAGE_JSON);\n const pkgFiles = await glob(pkgPattern, {\n cwd,\n absolute: false,\n ignore: ['.kb/**', 'node_modules/**', '**/node_modules/**'],\n });\n\n for (const pkgFile of pkgFiles) {\n const pkgRoot = path.dirname(path.join(cwd, pkgFile));\n const pkg = await readPackageJson(path.join(cwd, pkgFile));\n if (!pkg || !pkg.name) {\n continue;\n }\n\n if (knownPackages.has(pkg.name)) {\n continue;\n }\n\n const manifestInfo = await findManifestPath(pkgRoot, pkg);\n if (manifestInfo.path) {\n log('debug', `[plugins][cache] New workspace package detected: ${pkg.name}`);\n return true;\n }\n }\n }\n } catch (error: any) {\n log('debug', `[plugins][cache] Workspace scan skipped: ${error?.message || 'unknown error'}`);\n }\n\n return false;\n}\n\n/**\n * Load manifest with timeout protection\n */\nasync function loadManifestWithTimeout(manifestPath: string, pkgName: string, pkgRoot?: string): Promise<CommandManifest[]> {\n const timeout = new Promise<never>((_, reject) => {\n setTimeout(() => reject(new Error('Timeout')), MANIFEST_LOAD_TIMEOUT);\n });\n \n try {\n return await Promise.race([loadManifest(manifestPath, pkgName, pkgRoot), timeout]);\n } catch (err: any) {\n if (err.message === 'Timeout') {\n log('warn', `Timeout loading manifest from ${pkgName}`);\n return [];\n }\n throw err;\n }\n}\n\n/**\n * Prefer namespace from ManifestV3.id (e.g., '@kb-labs/release' -> 'release').\n * Fallback to package name heuristic if id is missing.\n */\nfunction getNamespaceFromManifest(manifestV2: ManifestV3 | undefined, packageName: string): string {\n const manifestId = manifestV2?.id;\n if (typeof manifestId === 'string' && manifestId.length > 0) {\n // take last segment after slash, drop leading '@'\n const seg = manifestId.split('/').pop() || manifestId;\n return seg.replace(/^@/, '');\n }\n // Fallback: derive from package name (last path segment without org scope)\n const parts = packageName.split('/');\n const last = parts[parts.length - 1] || packageName;\n return last.replace(/^@/, '');\n}\n\n/**\n * Derive namespace from package name (legacy fallback)\n */\nfunction deriveNamespace(packageName: string): string {\n const parts = packageName.split('/');\n const lastPart = parts[parts.length - 1] || packageName;\n return lastPart.replace(/^@/, '');\n}\n\n\n// TODO V3: V2 setup command manifest generators removed - V3 uses SetupSpec in manifest\n// function createSetupCommandManifest({\n// manifestV2,\n// namespace,\n// pkgName,\n// pkgRoot,\n// }: SetupCommandFactoryInput): CommandManifest {\n// const setupId = `${namespace}:setup`;\n// const describe =\n// manifestV2.setup?.describe ||\n// `Initialize ${manifestV2.display?.name || manifestV2.id || namespace}`;\n\n// const setupManifest: CommandManifest = {\n// manifestVersion: '1.0',\n// id: setupId,\n// group: namespace,\n// describe,\n// flags: SETUP_COMMAND_FLAGS,\n// examples: [\n// `kb ${namespace} setup`,\n// `kb ${namespace} setup --dry-run`,\n// ],\n// loader: () =>\n// loadSetupCommandModule({\n// manifestV2,\n// namespace,\n// pkgName,\n// pkgRoot,\n// }),\n// package: pkgName,\n// namespace,\n// };\n\n// (setupManifest as any).manifestV2 = manifestV2;\n// (setupManifest as any).pkgRoot = pkgRoot;\n// (setupManifest as any).isSetup = true;\n// return setupManifest;\n// }\n\n// function createSetupRollbackCommandManifest({\n// manifestV2,\n// namespace,\n// pkgName,\n// pkgRoot,\n// }: SetupCommandFactoryInput): CommandManifest {\n// const rollbackId = `${namespace}:setup:rollback`;\n// const describe = `Rollback setup changes for ${manifestV2.display?.name || manifestV2.id || namespace}`;\n\n// const rollbackManifest: CommandManifest = {\n// manifestVersion: '1.0',\n// id: rollbackId,\n// group: namespace,\n// describe,\n// flags: [\n// {\n// name: 'log',\n// type: 'string' as const,\n// description: 'Path to a setup change log JSON file.',\n// },\n// {\n// name: 'list',\n// type: 'boolean' as const,\n// description: 'List available setup change logs.',\n// },\n// {\n// name: 'yes',\n// type: 'boolean' as const,\n// alias: 'y',\n// description: 'Apply rollback without confirmation prompt.',\n// },\n// ],\n// examples: [\n// `kb ${namespace} setup:rollback --list`,\n// `kb ${namespace} setup:rollback --log .kb/logs/setup/${namespace}-<id>.json --yes`,\n// ],\n// loader: () =>\n// loadSetupRollbackCommandModule({\n// manifestV2,\n// namespace,\n// pkgName,\n// pkgRoot,\n// }),\n// package: pkgName,\n// namespace,\n// };\n\n// (rollbackManifest as any).manifestV2 = manifestV2;\n// (rollbackManifest as any).pkgRoot = pkgRoot;\n// (rollbackManifest as any).isSetupRollback = true;\n// return rollbackManifest;\n// }\n\n/**\n * Load manifest - tries ESM first, falls back to CJS\n * Validates and normalizes manifests according to schema\n */\nasync function loadManifest(manifestPath: string, pkgName: string, pkgRoot?: string): Promise<CommandManifest[]> {\n const fileUrl = pathToFileURL(manifestPath).href;\n const mod = await import(fileUrl);\n\n const manifest = (mod as any).manifest || (mod as any).default;\n if (!manifest || typeof manifest !== 'object' || manifest.schema !== 'kb.plugin/3') {\n throw new Error(`Unsupported manifest format in ${pkgName}. Only kb.plugin/3 schema is supported.`);\n }\n\n const namespace = getNamespaceFromManifest(manifest, pkgName);\n const manifestDir = path.dirname(manifestPath);\n const baseRoot = pkgRoot || manifestDir;\n const cliCommands = Array.isArray(manifest.cli?.commands)\n ? manifest.cli.commands\n : [];\n if (cliCommands.length === 0 && !manifest.setup) {\n log('warn', `ManifestV3 ${manifest.id || pkgName} has no CLI commands or setup entry`);\n }\n\n const commandManifests: CommandManifest[] = cliCommands.map((cmd: any) => {\n const commandId = cmd.id;\n const commandManifest: CommandManifest = {\n manifestVersion: '1.0' as const,\n id: commandId,\n group: cmd.group || namespace,\n subgroup: cmd.subgroup,\n describe: cmd.describe || '',\n longDescription: cmd.longDescription,\n aliases: cmd.aliases,\n flags: cmd.flags,\n examples: cmd.examples,\n loader: createManifestV3Loader(commandId),\n package: pkgName,\n namespace: cmd.group || namespace,\n };\n (commandManifest as any).manifestV2 = manifest; // Keep for backward compat with service.ts\n (commandManifest as any).pkgRoot = baseRoot;\n return commandManifest;\n });\n\n // TODO V3: V2 setup orchestrator removed - V3 uses SetupSpec in manifest\n // if (manifestV2.setup) {\n // // Ensure setup/rollback registered under a stable namespace taken from manifest id\n // const setupNamespace = getNamespaceFromManifest(manifestV2, pkgName);\n // const setupCommand = createSetupCommandManifest({\n // manifestV2,\n // namespace: setupNamespace,\n // pkgName,\n // pkgRoot: baseRoot,\n // });\n // commandManifests.push(setupCommand);\n\n // const rollbackCommand = createSetupRollbackCommandManifest({\n // manifestV2,\n // namespace: setupNamespace,\n // pkgName,\n // pkgRoot: baseRoot,\n // });\n // commandManifests.push(rollbackCommand);\n // }\n \n const validation = validateManifests(commandManifests);\n if (!validation.success) {\n const errorMessages = validation.errors.map(err => \n err.issues.map(issue => `${issue.path.join('.')}: ${issue.message}`).join(', ')\n ).join('; ');\n log('warn', `ManifestV3 validation warnings for ${pkgName}: ${errorMessages}`);\n }\n \n return (validation.success ? validation.data : commandManifests).map(m => \n normalizeManifest(m, pkgName, namespace)\n );\n}\n\n/**\n * Read and parse package.json\n */\nasync function readPackageJson(pkgPath: string): Promise<any> {\n try {\n const content = await fs.readFile(pkgPath, 'utf8');\n return JSON.parse(content);\n } catch {\n return null;\n }\n}\n\n/**\n * Load kb.config.json with plugins allowlist/blocklist\n */\nasync function loadConfig(cwd: string): Promise<{ allow?: string[]; block?: string[]; linked?: string[] }> {\n const configPath = path.join(cwd, '.kb', 'kb.config.json');\n try {\n const content = await fs.readFile(configPath, 'utf8');\n const config = JSON.parse(content);\n return {\n allow: config.plugins?.allow,\n block: config.plugins?.block,\n linked: config.plugins?.linked,\n };\n } catch {\n return {};\n }\n}\n\n/**\n * Find manifest path using conventional locations\n * Returns path and whether it's deprecated\n */\nasync function findManifestPath(pkgRoot: string, pkg: any): Promise<{ path: string | null; deprecated: boolean }> {\n if (pkg.kb?.manifest) {\n const manifestPath = path.join(pkgRoot, pkg.kb.manifest);\n try {\n await fs.access(manifestPath);\n return { path: manifestPath, deprecated: false };\n } catch {\n return { path: null, deprecated: false };\n }\n }\n\n if (pkg.exports?.['./kb/commands']) {\n const exportPath = pkg.exports['./kb/commands'];\n const manifestPath = typeof exportPath === 'string' ? exportPath : exportPath.default || exportPath.import;\n if (manifestPath) {\n const resolved = path.resolve(pkgRoot, manifestPath);\n try {\n await fs.access(resolved);\n return { path: resolved, deprecated: false };\n } catch {\n const withExt = resolved.endsWith('.js') ? resolved : `${resolved}.js`;\n try {\n await fs.access(withExt);\n return { path: withExt, deprecated: false };\n } catch {}\n }\n }\n }\n\n return { path: null, deprecated: false };\n}\n\n/**\n * Check if package is a plugin by keywords or kb.plugin flag\n */\nfunction isPluginPackage(pkg: any): boolean {\n if (!pkg) {return false;}\n \n // Explicit flag\n if (pkg.kb?.plugin === true) {return true;}\n \n // Keyword check\n const keywords = Array.isArray(pkg.keywords) ? pkg.keywords : [];\n return keywords.includes('kb-cli-plugin');\n}\n\n/**\n * Validate that command IDs and aliases are unique within a package\n */\nfunction validateUniqueIds(manifests: CommandManifest[], pkgName: string): void {\n const ids = new Set<string>();\n const aliases = new Set<string>();\n \n for (const m of manifests) {\n if (ids.has(m.id)) {\n throw new Error(`Duplicate command ID \"${m.id}\" in package ${pkgName}`);\n }\n ids.add(m.id);\n \n if (m.aliases) {\n for (const alias of m.aliases) {\n if (aliases.has(alias) || ids.has(alias)) {\n throw new Error(`Alias collision \"${alias}\" in package ${pkgName}`);\n }\n aliases.add(alias);\n }\n }\n }\n}\n\n/**\n * Discover commands from workspace packages with parallel loading\n */\nasync function discoverWorkspace(cwd: string): Promise<DiscoveryResult[]> {\n const workspaceYaml = path.join(cwd, 'pnpm-workspace.yaml');\n const content = await fs.readFile(workspaceYaml, 'utf8');\n const parsed = parseYaml(content) as { packages: string[] };\n \n if (!parsed.packages || !Array.isArray(parsed.packages)) {\n throw new Error('Invalid pnpm-workspace.yaml: missing packages array');\n }\n \n // First pass: collect all package info\n const packageInfos: Array<{pkgRoot: string, pkg: any, manifestPath: string}> = [];\n \n for (const pattern of parsed.packages) {\n const pkgPattern = path.join(pattern, PACKAGE_JSON);\n const pkgFiles = await glob(pkgPattern, { \n cwd, \n absolute: false,\n ignore: ['.kb/**', 'node_modules/**', '**/node_modules/**'] // Ignore .kb, node_modules\n });\n \n for (const pkgFile of pkgFiles) {\n const pkgRoot = path.dirname(path.join(cwd, pkgFile));\n const pkg = await readPackageJson(path.join(cwd, pkgFile));\n \n if (!pkg) {continue;}\n \n // Check if package has manifest (explicit or conventional)\n const manifestInfo = await findManifestPath(pkgRoot, pkg);\n if (manifestInfo.path) {\n if (manifestInfo.deprecated) {\n log('warn', `[DEPRECATED] ${pkg.name} uses legacy manifest path: ${manifestInfo.path}`);\n log('warn', ` → Migrate to exports[\"./kb/commands\"] or set kb.commandsManifest in package.json`);\n }\n packageInfos.push({ pkgRoot, pkg, manifestPath: manifestInfo.path });\n }\n }\n }\n \n // Second pass: load all manifests in parallel\n const loadPromises = packageInfos.map(async ({ pkgRoot, pkg, manifestPath }) => {\n const pkgStart = Date.now();\n try {\n const manifests = await loadManifestWithTimeout(manifestPath, pkg.name, pkgRoot);\n const pkgTime = Date.now() - pkgStart;\n \n if (pkgTime > 30) {\n log('debug', `[plugins][perf] ${pkg.name} manifest parse: ${pkgTime}ms (budget: 30ms)`);\n }\n \n if (manifests.length > 0) {\n validateUniqueIds(manifests, pkg.name);\n return {\n manifests,\n source: 'workspace' as const,\n packageName: pkg.name,\n manifestPath: toPosixPath(manifestPath),\n pkgRoot: toPosixPath(pkgRoot),\n };\n }\n return null;\n } catch (err: any) {\n const pkgTime = Date.now() - pkgStart;\n log('debug', `[plugins][perf] ${pkg.name} failed after ${pkgTime}ms`);\n \n // On failure, register a synthetic unavailable manifest so user sees the product with a hint\n log('warn', JSON.stringify({\n code: 'DISCOVERY_MANIFEST_LOAD_FAIL',\n packageName: pkg.name,\n manifestPath: toPosixPath(manifestPath),\n errorCode: err.code || 'UNKNOWN',\n errorMessage: err.message,\n hint: err.message.includes('Cannot find package') \n ? 'Run: kb devlink apply && pnpm -w build'\n : 'Check manifest syntax and dependencies'\n }));\n const synthetic = createUnavailableManifest(pkg.name, err);\n return {\n manifests: [synthetic],\n source: 'workspace' as const,\n packageName: pkg.name,\n manifestPath: toPosixPath(manifestPath),\n pkgRoot: toPosixPath(pkgRoot),\n };\n }\n });\n \n const settledResults = await Promise.allSettled(loadPromises);\n const results: DiscoveryResult[] = [];\n \n for (const settled of settledResults) {\n if (settled.status === 'fulfilled' && settled.value) {\n results.push(settled.value);\n }\n }\n \n return results;\n}\n\n/**\n * Discover commands from current package (fallback when no workspace)\n */\nasync function discoverCurrentPackage(cwd: string): Promise<DiscoveryResult | null> {\n try {\n const pkg = await readPackageJson(path.join(cwd, PACKAGE_JSON));\n if (!pkg) {return null;}\n \n const manifestInfo = await findManifestPath(cwd, pkg);\n if (manifestInfo.path) {\n if (manifestInfo.deprecated) {\n log('warn', `[DEPRECATED] ${pkg.name} uses legacy manifest path: ${manifestInfo.path}`);\n log('warn', ` → Migrate to exports[\"./kb/commands\"] or set kb.commandsManifest in package.json`);\n }\n const manifests = await loadManifestWithTimeout(manifestInfo.path, pkg.name, cwd);\n if (manifests.length > 0) {\n validateUniqueIds(manifests, pkg.name);\n return {\n manifests,\n source: 'workspace',\n packageName: pkg.name,\n manifestPath: toPosixPath(manifestInfo.path),\n pkgRoot: toPosixPath(cwd),\n };\n }\n }\n } catch (err: any) {\n log('debug', `No CLI manifest in current package: ${err.message}`);\n }\n return null;\n}\n\n/**\n * Discover commands from node_modules with keyword-based discovery\n * Scans all scopes, respects allowlist/blocklist, supports linked plugins\n */\nasync function discoverNodeModules(cwd: string): Promise<DiscoveryResult[]> {\n const nmDir = path.join(cwd, 'node_modules');\n const config = await loadConfig(cwd);\n \n try {\n const entries = await fs.readdir(nmDir, { withFileTypes: true });\n const packageInfos: Array<{pkgRoot: string, pkg: any, manifestPath: string, isLinked?: boolean}> = [];\n \n // First pass: collect all plugin packages\n const scanPromises: Promise<void>[] = [];\n \n for (const entry of entries) {\n if (!entry.isDirectory() && !entry.isSymbolicLink()) {continue;}\n\n const scanEntry = async () => {\n let pkgRoot: string;\n let pkg: any;\n\n if (entry.name.startsWith('@')) {\n // Scoped package: @scope/name\n const scopeDir = path.join(nmDir, entry.name);\n try {\n const scopedDirs = await fs.readdir(scopeDir, { withFileTypes: true });\n for (const scopedEntry of scopedDirs.filter(d => d.isDirectory() || d.isSymbolicLink())) {\n pkgRoot = path.join(scopeDir, scopedEntry.name);\n pkg = await readPackageJson(path.join(pkgRoot, PACKAGE_JSON));\n \n if (!pkg) {continue;}\n \n // Check if it's a plugin\n const isPlugin = isPluginPackage(pkg);\n \n // For @kb-labs/*, always include if has manifest\n // For others, require keyword/flag AND allowlist (unless explicitly blocked)\n if (pkg.name?.startsWith('@kb-labs/')) {\n const manifestInfo = await findManifestPath(pkgRoot, pkg);\n if (manifestInfo.path) {\n packageInfos.push({ pkgRoot, pkg, manifestPath: manifestInfo.path });\n }\n } else if (isPlugin) {\n // 3rd-party plugin: check allowlist/blocklist\n if (config.block?.includes(pkg.name)) {\n log('debug', `Plugin ${pkg.name} blocked by config`);\n return;\n }\n \n // Must be allowlisted OR in linked list\n const isAllowlisted = config.allow?.includes(pkg.name) || config.linked?.includes(pkg.name);\n if (!isAllowlisted) {\n log('debug', `Plugin ${pkg.name} skipped (not allowlisted). Add to kb-labs.config.json plugins.allow or enable via 'kb marketplace enable'`);\n return;\n }\n \n const manifestInfo = await findManifestPath(pkgRoot, pkg);\n if (manifestInfo.path) {\n if (manifestInfo.deprecated) {\n log('warn', `[DEPRECATED] ${pkg.name} uses legacy manifest path: ${manifestInfo.path}`);\n log('warn', ` → Migrate to exports[\"./kb/commands\"] or set kb.commandsManifest in package.json`);\n }\n const isLinked = config.linked?.includes(pkg.name);\n packageInfos.push({ pkgRoot, pkg, manifestPath: manifestInfo.path, isLinked });\n }\n }\n }\n } catch {\n // Scope dir doesn't exist or can't read\n }\n } else {\n // Unscoped package\n pkgRoot = path.join(nmDir, entry.name);\n pkg = await readPackageJson(path.join(pkgRoot, PACKAGE_JSON));\n \n if (!pkg) {return;}\n \n const isPlugin = isPluginPackage(pkg);\n \n if (isPlugin) {\n // 3rd-party: check allowlist/blocklist\n if (config.block?.includes(pkg.name)) {\n log('debug', `Plugin ${pkg.name} blocked by config`);\n return;\n }\n \n const isAllowlisted = config.allow?.includes(pkg.name) || config.linked?.includes(pkg.name);\n if (!isAllowlisted) {\n log('debug', `Plugin ${pkg.name} skipped (not allowlisted). Add to kb-labs.config.json plugins.allow or enable via 'kb marketplace enable'`);\n return;\n }\n \n const manifestInfo = await findManifestPath(pkgRoot, pkg);\n if (manifestInfo.path) {\n if (manifestInfo.deprecated) {\n log('warn', `[DEPRECATED] ${pkg.name} uses legacy manifest path: ${manifestInfo.path}`);\n log('warn', ` → Migrate to exports[\"./kb/commands\"] or set kb.commandsManifest in package.json`);\n }\n const isLinked = config.linked?.includes(pkg.name);\n packageInfos.push({ pkgRoot, pkg, manifestPath: manifestInfo.path, isLinked });\n }\n }\n }\n };\n \n scanPromises.push(scanEntry());\n }\n \n await Promise.allSettled(scanPromises);\n \n // Second pass: load all manifests in parallel\n const loadPromises = packageInfos.map(async ({ pkgRoot, pkg, manifestPath, isLinked }) => {\n try {\n const manifests = await loadManifestWithTimeout(manifestPath, pkg.name, pkgRoot);\n if (manifests.length > 0) {\n validateUniqueIds(manifests, pkg.name);\n return {\n manifests,\n source: (isLinked ? 'linked' : 'node_modules') as 'node_modules' | 'linked',\n packageName: pkg.name,\n manifestPath: toPosixPath(manifestPath),\n pkgRoot: toPosixPath(pkgRoot),\n };\n }\n return null;\n } catch (err: any) {\n log('warn', JSON.stringify({\n code: 'DISCOVERY_MANIFEST_LOAD_FAIL',\n packageName: pkg.name,\n manifestPath: toPosixPath(manifestPath),\n errorCode: err.code || 'UNKNOWN',\n errorMessage: err.message,\n hint: err.message.includes('Cannot find package') \n ? 'Run: kb devlink apply && pnpm -w build'\n : 'Check manifest syntax and dependencies'\n }));\n const synthetic = createUnavailableManifest(pkg.name, err);\n return {\n manifests: [synthetic],\n source: (isLinked ? 'linked' : 'node_modules') as 'node_modules' | 'linked',\n packageName: pkg.name,\n manifestPath: toPosixPath(manifestPath),\n pkgRoot: toPosixPath(pkgRoot),\n };\n }\n });\n \n const settledResults = await Promise.allSettled(loadPromises);\n const results: DiscoveryResult[] = [];\n \n for (const settled of settledResults) {\n if (settled.status === 'fulfilled' && settled.value) {\n results.push(settled.value);\n }\n }\n \n return results;\n } catch (err: any) {\n // node_modules doesn't exist or can't read\n log('debug', `Could not scan node_modules: ${err.message}`);\n return [];\n }\n}\n\n/**\n * Deduplicate manifests by priority: workspace > linked > node_modules\n * Also deduplicate by package path to avoid duplicate workspace packages\n */\nfunction deduplicateManifests(all: DiscoveryResult[]): DiscoveryResult[] {\n const byPackageName = new Map<string, DiscoveryResult>();\n \n // Priority order: workspace > linked > node_modules\n const priority: Record<string, number> = {\n workspace: 3,\n linked: 2,\n node_modules: 1,\n builtin: 0,\n };\n \n // First, deduplicate by package name (keeping only one version of each package)\n for (const result of all) {\n const existing = byPackageName.get(result.packageName);\n if (!existing) {\n byPackageName.set(result.packageName, result);\n } else {\n // Compare priority\n const existingPriority = priority[existing.source] || 0;\n const newPriority = priority[result.source] || 0;\n if (newPriority > existingPriority) {\n // Higher priority wins\n byPackageName.set(result.packageName, result);\n }\n }\n }\n \n return Array.from(byPackageName.values());\n}\n\n/**\n * Load cache file\n */\nasync function loadCache(cwd: string): Promise<CacheFile | null> {\n const cachePath = path.join(cwd, '.kb', 'cache', 'cli-manifests.json');\n \n try {\n const content = await fs.readFile(cachePath, 'utf8');\n const cache = JSON.parse(content) as any;\n \n // Handle old cache format (with mtimes and results)\n if (cache.mtimes && cache.results) {\n log('debug', 'Old cache format detected, ignoring');\n return null;\n }\n \n // Validate new cache format\n if (!cache.packages) {\n log('debug', 'Invalid cache format, ignoring');\n return null;\n }\n \n // Validate version compatibility\n if (cache.version !== process.version) {\n log('debug', 'Cache invalidated: Node version changed');\n return null;\n }\n \n const currentCliVersion = process.env.CLI_VERSION || '0.1.0';\n if (cache.cliVersion !== currentCliVersion) {\n log('debug', 'Cache invalidated: CLI version changed');\n return null;\n }\n \n // Check lockfile hash\n const currentLockfileHash = await computeLockfileHash(cwd);\n if (currentLockfileHash && cache.lockfileHash && cache.lockfileHash !== currentLockfileHash) {\n log('debug', 'Cache invalidated: lockfile changed');\n return null;\n }\n \n // Check config hash\n const currentConfigHash = await computeConfigHash(cwd);\n if (currentConfigHash && cache.configHash && cache.configHash !== currentConfigHash) {\n log('debug', 'Cache invalidated: kb-labs.config.json changed');\n return null;\n }\n \n // Check plugins state hash\n const currentPluginsStateHash = await computePluginsStateHash(cwd);\n if (currentPluginsStateHash && cache.pluginsStateHash && cache.pluginsStateHash !== currentPluginsStateHash) {\n log('debug', 'Cache invalidated: .kb/plugins.json changed');\n return null;\n }\n \n const parsedCache = cache as CacheFile;\n parsedCache.ttlMs = parsedCache.ttlMs ?? DISK_CACHE_TTL_MS;\n for (const entry of Object.values(parsedCache.packages) as PackageCacheEntry[]) {\n for (const manifest of entry.result.manifests) {\n ensureManifestLoader(manifest);\n }\n entry.cachedAt = entry.cachedAt ?? parsedCache.timestamp ?? Date.now();\n }\n \n return parsedCache;\n } catch {\n return null; // Cache doesn't exist or is corrupt\n }\n}\n\n/**\n * Check if cache is stale for a specific package (async to support hash validation)\n */\nasync function isPackageCacheStale(\n entry: PackageCacheEntry,\n options: { validateHash: boolean }\n): Promise<boolean> {\n const manifestFsPath = entry.manifestPath.split('/').join(path.sep);\n const pkgJsonPath = path.join(entry.result.pkgRoot.split('/').join(path.sep), PACKAGE_JSON);\n\n try {\n const pkgStat = await fs.stat(pkgJsonPath);\n if (pkgStat.mtimeMs !== entry.pkgJsonMtime) {\n log('debug', `Package cache invalidated: package.json changed for ${entry.result.packageName}`);\n return true;\n }\n } catch (error: any) {\n log('debug', `Package cache invalidated: missing package.json for ${entry.result.packageName} (${error?.message || 'unknown'})`);\n return true;\n }\n\n let manifestStat;\n try {\n manifestStat = await fs.stat(manifestFsPath);\n if (manifestStat.mtimeMs !== entry.manifestMtime) {\n log('debug', `Package cache invalidated: manifest mtime changed for ${entry.result.packageName}`);\n return true;\n }\n } catch (error: any) {\n log('debug', `Package cache invalidated: manifest deleted for ${entry.result.packageName} (${error?.message || 'unknown'})`);\n return true;\n }\n\n if (options.validateHash) {\n try {\n const currentHash = await computeManifestHash(manifestFsPath);\n if (currentHash !== entry.manifestHash) {\n log('debug', `Package cache invalidated: manifest hash changed for ${entry.result.packageName}`);\n return true;\n }\n } catch (error: any) {\n log('debug', `Package cache hash validation failed for ${entry.result.packageName}: ${error?.message || 'unknown'}`);\n return true;\n }\n }\n\n return false;\n}\n\n/**\n * Save cache file with per-package structure\n */\nasync function saveCache(cwd: string, results: DiscoveryResult[]): Promise<void> {\n const cachePath = path.join(cwd, '.kb', 'cache', 'cli-manifests.json');\n await fs.mkdir(path.dirname(cachePath), { recursive: true });\n \n const packages: Record<string, PackageCacheEntry> = {};\n const now = Date.now();\n const stateHasher = createHash('sha256');\n \n // Process each result into package cache entries\n for (const result of results) {\n // Skip results that contain only synthetic unavailable manifests.\n // Synthetic manifests represent transient load failures (missing build\n // artifacts, broken deps) and must not be persisted — caching them would\n // lock the error state until the TTL expires even after the root cause is\n // fixed.\n const allSynthetic = result.manifests.length > 0 &&\n result.manifests.every((m) => (m as any)._synthetic === true);\n if (allSynthetic) {\n log('debug', `[plugins][cache] Skipping synthetic unavailable manifest for ${result.packageName}`);\n continue;\n }\n\n try {\n const manifestHash = await computeManifestHash(result.manifestPath);\n \n // Get package.json mtime and version\n const pkgJsonPath = path.join(result.pkgRoot.split('/').join(path.sep), PACKAGE_JSON);\n const pkgStat = await fs.stat(pkgJsonPath);\n const pkg = await readPackageJson(pkgJsonPath);\n const version = pkg?.version || '0.1.0';\n \n // Get manifest mtime\n const manifestStat = await fs.stat(result.manifestPath.split('/').join(path.sep));\n \n const manifestsForCache = result.manifests.map(manifest => {\n const manifestCopy = { ...manifest } as Record<string, unknown>;\n delete manifestCopy.loader;\n return manifestCopy;\n });\n\n const resultForCache = {\n ...result,\n manifests: manifestsForCache as unknown as CommandManifest[],\n };\n\n packages[result.packageName] = {\n version,\n manifestHash,\n manifestPath: result.manifestPath,\n pkgJsonMtime: pkgStat.mtimeMs,\n manifestMtime: manifestStat.mtimeMs,\n cachedAt: now,\n result: resultForCache,\n };\n stateHasher.update(result.packageName);\n stateHasher.update(manifestHash);\n } catch (err: any) {\n log('debug', `Failed to cache package ${result.packageName}: ${err.message}`);\n }\n }\n \n // Compute hashes for invalidation triggers\n const lockfileHash = await computeLockfileHash(cwd);\n const configHash = await computeConfigHash(cwd);\n const pluginsStateHash = await computePluginsStateHash(cwd);\n\n if (lockfileHash) {\n stateHasher.update(lockfileHash);\n }\n if (configHash) {\n stateHasher.update(configHash);\n }\n if (pluginsStateHash) {\n stateHasher.update(pluginsStateHash);\n }\n \n const cache: CacheFile = {\n version: process.version,\n cliVersion: process.env.CLI_VERSION || '0.1.0',\n timestamp: now,\n ttlMs: DISK_CACHE_TTL_MS,\n stateHash: stateHasher.digest('hex'),\n lockfileHash: lockfileHash || undefined,\n configHash: configHash || undefined,\n pluginsStateHash: pluginsStateHash || undefined,\n packages,\n };\n \n try {\n // CRITICAL OOM FIX: Use compact JSON to avoid split('\\n') memory issues on large manifests (1.6MB+)\n await fs.writeFile(cachePath, JSON.stringify(cache), 'utf8');\n } catch (err: any) {\n log('debug', `Failed to save cache: ${err.message}`);\n }\n}\n\n/**\n * Main discovery function — discovers command manifests from workspace,\n * current package, and `node_modules`.\n *\n * @param cwd Project cwd. Used for workspace discovery (monorepo dev mode)\n * and for the disk cache location.\n * @param noCache Bypass both the in-process and disk caches.\n * @param options Extra options:\n * - `platformRoot`: When provided, `discoverNodeModules` scans\n * `<platformRoot>/node_modules` instead of `<cwd>/node_modules`. This is\n * required in installed mode, where the KB Labs platform lives in a\n * different directory from the user's project. In dev mode `platformRoot`\n * typically equals `cwd` and the two paths coincide.\n */\nexport async function discoverManifests(\n cwd: string,\n noCache = false,\n options: { platformRoot?: string } = {},\n): Promise<DiscoveryResult[]> {\n const startTime = Date.now();\n const timings: Record<string, number> = {};\n\n if (noCache) {\n inProcDiscoveryCache = null;\n } else if (inProcDiscoveryCache) {\n const age = Date.now() - inProcDiscoveryCache.timestamp;\n if (age < IN_PROC_CACHE_TTL_MS) {\n const cachedResults = inProcDiscoveryCache.results;\n const _sourceCounts = cachedResults.reduce((acc, r) => {\n acc[r.source] = (acc[r.source] || 0) + 1;\n return acc;\n }, {} as Record<string, number>);\n\n log('debug', `[plugins][discover] in-proc cache hit (${cachedResults.length} packages, age ${age}ms)`);\n return cachedResults;\n }\n }\n \n // Check cache first\n if (!noCache) {\n const cacheStart = Date.now();\n const cached = await loadCache(cwd);\n timings.cacheLoad = Date.now() - cacheStart;\n \n if (cached) {\n log('debug', 'Using cached manifests');\n // Filter out stale packages and return fresh ones\n const freshResults: DiscoveryResult[] = [];\n const cacheAge = Date.now() - cached.timestamp;\n const ttlMs = cached.ttlMs ?? DISK_CACHE_TTL_MS;\n const enforceHashValidation = cacheAge >= ttlMs;\n\n log('debug', `[plugins][cache] hit age=${cacheAge}ms ttl=${ttlMs}ms validateHash=${enforceHashValidation}`);\n\n let staleCount = 0;\n for (const entry of Object.values(cached.packages) as PackageCacheEntry[]) {\n const stale = await isPackageCacheStale(entry, { validateHash: enforceHashValidation });\n if (!stale) {\n freshResults.push(entry.result);\n } else {\n staleCount += 1;\n }\n }\n const hasNewWorkspacePackages = await detectNewWorkspacePackages(\n cwd,\n cached.packages,\n );\n\n if (staleCount === 0 && freshResults.length > 0 && !hasNewWorkspacePackages) {\n const totalTime = Date.now() - startTime;\n const sourceCounts = freshResults.reduce((acc, r) => {\n acc[r.source] = (acc[r.source] || 0) + 1;\n return acc;\n }, {} as Record<string, number>);\n \n log('info', `[plugins][discover] ${totalTime}ms (cached: ${Object.entries(sourceCounts).map(([s, c]) => `${s}:${c}`).join(', ')})`);\n inProcDiscoveryCache = { timestamp: Date.now(), results: freshResults };\n return freshResults;\n }\n\n if (hasNewWorkspacePackages) {\n log('debug', '[plugins][cache] invalidated: new workspace packages detected');\n }\n if (staleCount > 0) {\n log('debug', `[plugins][cache] invalidated: ${staleCount} stale package(s) detected`);\n }\n }\n }\n \n // Try workspace first\n let workspace: DiscoveryResult[] = [];\n try {\n const wsStart = Date.now();\n workspace = await discoverWorkspace(cwd);\n timings.workspace = Date.now() - wsStart;\n log('info', `Discovered ${workspace.length} workspace packages with CLI manifests`);\n } catch (_err: any) {\n // No pnpm-workspace.yaml - fallback to current package + node_modules\n log('info', 'No workspace file found, checking current package');\n \n const currentStart = Date.now();\n const currentPkg = await discoverCurrentPackage(cwd);\n timings.currentPackage = Date.now() - currentStart;\n \n if (currentPkg) {\n workspace = [currentPkg];\n log('info', `Discovered current package with CLI manifest: ${currentPkg.packageName}`);\n }\n }\n \n // Discover from node_modules. In installed mode the platform lives in a\n // different directory from the user's project, so we scan at platformRoot\n // when it's provided. In dev mode platformRoot === cwd and the behavior is\n // identical to the previous code path.\n const nmStart = Date.now();\n const nodeModulesRoot = options.platformRoot ?? cwd;\n const installed = await discoverNodeModules(nodeModulesRoot);\n timings.nodeModules = Date.now() - nmStart;\n if (installed.length > 0) {\n log('info', `Discovered ${installed.length} installed packages with CLI manifests`);\n }\n \n // Deduplicate\n const dedupStart = Date.now();\n const results = deduplicateManifests([...workspace, ...installed]);\n timings.deduplicate = Date.now() - dedupStart;\n \n // Save cache\n const saveStart = Date.now();\n await saveCache(cwd, results);\n timings.cacheSave = Date.now() - saveStart;\n \n // Log detailed timings\n const totalTime = Date.now() - startTime;\n const sourceCounts = results.reduce((acc, r) => {\n acc[r.source] = (acc[r.source] || 0) + 1;\n return acc;\n }, {} as Record<string, number>);\n \n const timingDetails = Object.entries(timings)\n .filter(([_, t]) => t > 0)\n .map(([k, v]) => `${k}:${v}ms`)\n .join(', ');\n \n log('info', `[plugins][discover] ${totalTime}ms (${Object.entries(sourceCounts).map(([s, c]) => `${s}:${c}`).join(', ')})${timingDetails ? ` | ${timingDetails}` : ''}`);\n \n // Performance budget warnings\n if (totalTime > 150) {\n log('warn', `[plugins][perf] Discovery took ${totalTime}ms (budget: 150ms)`);\n }\n \n inProcDiscoveryCache = { timestamp: Date.now(), results };\n return results;\n}\n\n/**\n * Lazy load manifests for a specific namespace\n * Only loads manifests from packages matching the namespace\n */\nexport async function discoverManifestsByNamespace(\n cwd: string,\n namespace: string,\n noCache = false\n): Promise<DiscoveryResult[]> {\n const allResults = await discoverManifests(cwd, noCache);\n \n // Filter by namespace\n return allResults.filter(result => {\n // Check if any manifest in this result matches the namespace\n return result.manifests.some(m => {\n const manifestNamespace = m.namespace || m.group;\n return manifestNamespace === namespace;\n });\n });\n}\n","/**\n * @kb-labs/cli-commands/registry\n * Manifest validation and registration with shadowing support\n */\n\nimport Ajv from 'ajv';\nimport type { CommandManifest, DiscoveryResult, RegisteredCommand } from './types';\nimport { checkRequires } from './availability';\nimport type { ILogger } from '@kb-labs/core-platform';\nimport { platform } from '@kb-labs/core-runtime';\nimport { getLogLevel } from '@kb-labs/cli-runtime';\n\nexport interface RegisterManifestsOptions {\n cwd?: string;\n}\n\nconst ajv = new Ajv();\n\n// Flag validation schema\nconst flagSchema = {\n type: 'object',\n required: ['name', 'type'],\n additionalProperties: false,\n properties: {\n name: { type: 'string' },\n type: { enum: ['string', 'boolean', 'number', 'array'] },\n alias: { type: 'string', pattern: '^[a-z]$' }, // single letter\n description: { type: 'string' },\n choices: { type: 'array', items: { type: 'string' } },\n required: { type: 'boolean' },\n default: {}, // must match type\n },\n};\n\n// Manifest schema with required manifestVersion\nconst manifestSchema = {\n type: 'object',\n required: ['manifestVersion', 'id', 'group', 'describe', 'loader'],\n additionalProperties: true,\n properties: {\n manifestVersion: { type: 'string', enum: ['1.0'] },\n id: { type: 'string', pattern: '^[a-z0-9-]+(?::[a-z0-9-]+)*$' }, // Simple or namespaced (colon-separated)\n aliases: { type: 'array', items: { type: 'string' } },\n group: { type: 'string' },\n describe: { type: 'string' },\n longDescription: { type: 'string' },\n requires: { type: 'array', items: { type: 'string' } },\n flags: { \n type: 'array', \n items: flagSchema \n },\n examples: { type: 'array', items: { type: 'string' } },\n },\n};\n\nconst validateManifest = ajv.compile(manifestSchema);\nconst validateFlag = ajv.compile(flagSchema);\n\n/**\n * Validate flag definition\n */\nfunction validateFlagDef(flag: any, manifestId: string): void {\n if (!validateFlag(flag)) {\n throw new Error(\n `Invalid flag \"${flag.name}\" in ${manifestId}: ${ajv.errorsText(validateFlag.errors)}`\n );\n }\n \n // Validate choices only for string type\n if (flag.choices && flag.type !== 'string') {\n throw new Error(`Flag \"${flag.name}\" in ${manifestId}: choices allowed only for string type`);\n }\n \n // Validate default matches type\n if (flag.default !== undefined) {\n const typeMatches = \n (flag.type === 'string' && typeof flag.default === 'string') ||\n (flag.type === 'boolean' && typeof flag.default === 'boolean') ||\n (flag.type === 'number' && typeof flag.default === 'number') ||\n (flag.type === 'array' && Array.isArray(flag.default));\n \n if (!typeMatches) {\n throw new Error(\n `Flag \"${flag.name}\" in ${manifestId}: default value type mismatch (expected ${flag.type})`\n );\n }\n }\n}\n\n/**\n * Validate single manifest\n */\nfunction validateManifestStructure(manifest: any): void {\n if (!validateManifest(manifest)) {\n throw new Error(`Invalid manifest ${manifest.id}: ${ajv.errorsText(validateManifest.errors)}`);\n }\n \n // Validate manifestVersion (now required)\n if (manifest.manifestVersion !== '1.0') {\n throw new Error(\n `Unsupported manifestVersion \"${manifest.manifestVersion}\" in ${manifest.id} (expected \"1.0\")`\n );\n }\n \n // Validate flags if present\n if (manifest.flags && Array.isArray(manifest.flags) && manifest.id) {\n for (const flag of manifest.flags) {\n if (flag && typeof flag === 'object' && flag.name) {\n validateFlagDef(flag, manifest.id as string);\n }\n }\n }\n}\n\n/**\n * Priority order for source resolution\n */\nconst SOURCE_PRIORITY: Record<string, number> = {\n builtin: 4,\n workspace: 3,\n linked: 2,\n node_modules: 1,\n};\n\n/**\n * Normalize command ID to ensure it follows namespace:command format\n */\nfunction normalizeCommandId(id: string, _namespace: string): string {\n // IDs are now simple (no namespace prefix) - return as-is\n return id;\n}\n\n/**\n * Generate whitespace aliases from command ID\n * Example: \"devlink:apply\" -> [\"devlink apply\"]\n */\nfunction generateWhitespaceAliases(id: string): string[] {\n if (!id.includes(':')) {\n return [];\n }\n // Replace colon with space\n return [id.replace(':', ' ')];\n}\n\n/**\n * Normalize aliases: ensure they're valid and add whitespace variants\n */\nfunction normalizeAliases(manifest: CommandManifest, logger?: ILogger): string[] {\n const log = logger ?? platform.logger;\n const aliases = new Set<string>();\n const _namespace = manifest.namespace || manifest.group;\n\n // Add existing aliases\n if (manifest.aliases) {\n for (const alias of manifest.aliases) {\n // Validate alias format (no spaces, no special chars except hyphens)\n if (!/^[a-z0-9-:]+$/i.test(alias)) {\n log.warn(`Invalid alias \"${alias}\" in ${manifest.id}: aliases must be alphanumeric with hyphens or colons`);\n continue;\n }\n aliases.add(alias);\n }\n }\n\n // Add whitespace alias for scoped commands\n const whitespaceAliases = generateWhitespaceAliases(manifest.id);\n for (const alias of whitespaceAliases) {\n aliases.add(alias);\n }\n\n return Array.from(aliases);\n}\n\n/**\n * Check for namespace collision (same namespace, different commands with same base name)\n */\nfunction checkNamespaceCollision(\n manifest: CommandManifest,\n existing: RegisteredCommand,\n namespace: string\n): void {\n // IDs are now simple (no colon prefix), check group instead\n const existingGroup = existing.manifest.group || '';\n const currentGroup = manifest.group || '';\n\n // If both are in the same group and have same command ID, that's a collision\n if (existingGroup === currentGroup && existingGroup === namespace && existing.manifest.id === manifest.id) {\n // Same group + same ID = collision\n throw new Error(\n `Command collision in group \"${namespace}\": \"${manifest.id}\" conflicts with existing \"${existing.manifest.id}\". ` +\n `Rename one of the commands to use a different ID (e.g., \"${manifest.id}2\" or use --alias to create a different alias).`\n );\n }\n}\n\n/**\n * Get priority for source\n */\nfunction getSourcePriority(source: string): number {\n return SOURCE_PRIORITY[source] || 0;\n}\n\n/**\n * Check collision with actionable error message\n */\nfunction checkCollision(\n manifest: CommandManifest,\n existing: RegisteredCommand,\n currentSource: string,\n namespace: string\n): { shouldShadow: boolean; message?: string } {\n const existingPriority = getSourcePriority(existing.source);\n const currentPriority = getSourcePriority(currentSource);\n \n // Same namespace collision (hard error)\n checkNamespaceCollision(manifest, existing, namespace);\n \n // If both are from workspace, that's a hard error\n if (currentSource === 'workspace' && existing.source === 'workspace') {\n throw new Error(\n `Command ID collision: \"${manifest.id}\" is exported by multiple workspace packages. ` +\n `This is not allowed. Please rename one of the commands to use a different ID.`\n );\n }\n \n // Higher priority wins\n if (currentPriority > existingPriority) {\n return { shouldShadow: true };\n } else if (currentPriority < existingPriority) {\n return { shouldShadow: false };\n }\n \n // Same priority - first wins (shouldn't happen with proper sorting)\n return { shouldShadow: false };\n}\n\nexport interface SkippedManifest {\n id: string;\n source: string;\n reason: string;\n}\n\nexport interface ManifestRegistrationResult {\n registered: RegisteredCommand[];\n skipped: SkippedManifest[];\n collisions: number;\n errors: number;\n}\n\nexport function preflightManifests(\n discoveryResults: DiscoveryResult[],\n logger?: ILogger\n): { valid: DiscoveryResult[]; skipped: SkippedManifest[] } {\n const log = logger ?? platform.logger;\n const valid: DiscoveryResult[] = [];\n const skipped: SkippedManifest[] = [];\n\n for (const result of discoveryResults) {\n const allowed: CommandManifest[] = [];\n\n for (const manifest of result.manifests) {\n try {\n validateManifestStructure(manifest);\n allowed.push(manifest);\n } catch (error: any) {\n const reason = error?.message ? String(error.message) : 'Validation failed';\n const manifestId = manifest?.id || manifest?.group || result.packageName || 'unknown';\n skipped.push({\n id: manifestId,\n source: result.source,\n reason,\n });\n log.warn(`Preflight skipped manifest ${manifestId}: ${reason}`);\n }\n }\n\n if (allowed.length > 0) {\n valid.push({\n ...result,\n manifests: allowed,\n });\n }\n }\n\n return { valid, skipped };\n}\n\n/**\n * Register manifests with shadowing and collision detection\n */\nexport async function registerManifests(\n discoveryResults: DiscoveryResult[],\n registry: any, // CommandRegistry interface\n options: RegisterManifestsOptions & { logger?: ILogger } = {}\n): Promise<ManifestRegistrationResult> {\n const log = options.logger ?? platform.logger;\n const registered: RegisteredCommand[] = [];\n const skipped: SkippedManifest[] = [];\n const globalIds = new Map<string, RegisteredCommand>();\n const globalAliases = new Map<string, RegisteredCommand>();\n const logLevel = getLogLevel();\n\n let collisions = 0;\n let errors = 0;\n\n const sorted = [...discoveryResults].sort((a, b) => {\n const priorityA = getSourcePriority(a.source);\n const priorityB = getSourcePriority(b.source);\n return priorityB - priorityA;\n });\n\n for (const result of sorted) {\n for (const manifest of result.manifests) {\n const manifestId = manifest.id || manifest.group || 'unknown';\n const namespace = manifest.namespace || manifest.group;\n\n try {\n try {\n validateManifestStructure(manifest);\n } catch (err: any) {\n throw new Error(`Validation failed: ${err.message}`);\n }\n\n const normalizedId = normalizeCommandId(manifest.id, namespace);\n if (normalizedId !== manifest.id) {\n log.warn(`Command ID \"${manifest.id}\" normalized to \"${normalizedId}\"`);\n manifest.id = normalizedId;\n }\n\n const normalizedAliases = normalizeAliases(manifest, log);\n if (normalizedAliases.length > 0) {\n manifest.aliases = normalizedAliases;\n }\n\n const availability = checkRequires(manifest, {\n cwd: options.cwd ?? result.pkgRoot,\n });\n\n const cmd: RegisteredCommand = {\n manifest,\n v3Manifest: (manifest as any).manifestV2, // Extract V3 manifest from legacy field\n available: availability.available,\n unavailableReason: availability.available ? undefined : availability.reason,\n hint: availability.available ? undefined : availability.hint,\n source: result.source,\n shadowed: false,\n pkgRoot: result.pkgRoot,\n packageName: result.packageName,\n };\n\n try {\n const manifestModule = await import(result.manifestPath);\n\n if (manifestModule.init && typeof manifestModule.init === 'function') {\n await manifestModule.init({\n cwd: result.pkgRoot,\n package: result.packageName,\n manifest: cmd.manifest,\n });\n }\n\n if (manifestModule.register && typeof manifestModule.register === 'function') {\n await manifestModule.register({\n registry,\n command: cmd,\n cwd: result.pkgRoot,\n package: result.packageName,\n });\n }\n\n if (manifestModule.dispose && typeof manifestModule.dispose === 'function') {\n (cmd as any)._disposeHook = manifestModule.dispose;\n }\n } catch (hookError: any) {\n log.debug(`Lifecycle hooks unavailable for ${manifest.id}: ${hookError.message}`);\n }\n\n const existing = globalIds.get(manifest.id);\n if (existing) {\n const collision = checkCollision(manifest, existing, result.source, namespace);\n if (collision.shouldShadow) {\n existing.shadowed = true;\n globalIds.set(manifest.id, cmd);\n if (logLevel === 'info' || logLevel === 'debug') {\n log.info(`${manifest.id} from ${result.source} shadows ${existing.source} version`);\n }\n } else {\n cmd.shadowed = true;\n if (logLevel === 'info' || logLevel === 'debug') {\n log.info(`${manifest.id} from ${result.source} shadowed by ${existing.source} version`);\n }\n }\n } else {\n globalIds.set(manifest.id, cmd);\n }\n\n const aliasesToCheck = manifest.aliases || [];\n for (const alias of aliasesToCheck) {\n const existingAlias = globalAliases.get(alias);\n if (existingAlias) {\n if (existingAlias.manifest.id === manifest.id) {\n continue;\n }\n\n const existingPriority = getSourcePriority(existingAlias.source);\n const currentPriority = getSourcePriority(result.source);\n\n if (currentPriority > existingPriority) {\n existingAlias.shadowed = true;\n globalAliases.set(alias, cmd);\n if (logLevel === 'info' || logLevel === 'debug') {\n log.info(`Alias \"${alias}\" from ${result.source} shadows ${existingAlias.source} version`);\n }\n } else if (currentPriority < existingPriority) {\n if (logLevel === 'info' || logLevel === 'debug') {\n log.info(`Alias \"${alias}\" from ${result.source} shadowed by ${existingAlias.source} version`);\n }\n continue;\n } else {\n collisions++;\n throw new Error(\n `Alias collision: \"${alias}\" used by both ${manifest.id} and ${existingAlias.manifest.id}. ` +\n `Rename one alias or use a different namespace.`\n );\n }\n }\n\n if (globalIds.has(alias)) {\n const conflictingCmd = globalIds.get(alias)!;\n const existingPriority = getSourcePriority(conflictingCmd.source);\n const currentPriority = getSourcePriority(result.source);\n\n if (currentPriority > existingPriority) {\n log.warn(`Alias \"${alias}\" conflicts with command ID \"${alias}\". Alias will shadow command.`);\n globalAliases.set(alias, cmd);\n } else {\n throw new Error(\n `Alias \"${alias}\" conflicts with existing command ID \"${alias}\". ` +\n `Rename the alias or use a different name.`\n );\n }\n } else {\n globalAliases.set(alias, cmd);\n }\n }\n\n if (!cmd.shadowed) {\n registry.registerManifest(cmd);\n }\n\n registered.push(cmd);\n } catch (error: any) {\n errors++;\n const reason = error?.message ? String(error.message) : String(error);\n skipped.push({\n id: manifestId,\n source: result.source,\n reason,\n });\n log.error(`Skipped manifest ${manifestId} (${result.source}): ${reason}`);\n continue;\n }\n }\n }\n\n if (skipped.length > 0) {\n log.warn(`Skipped ${skipped.length} manifest(s) during registration`);\n for (const skip of skipped) {\n log.warn(` • ${skip.id} [${skip.source}] → ${skip.reason}`);\n }\n }\n\n return {\n registered,\n skipped,\n collisions,\n errors,\n };\n}\n\n/**\n * Dispose all plugins by calling their dispose hooks\n */\nexport async function disposeAllPlugins(registry: any, logger?: ILogger): Promise<void> {\n const log = logger ?? platform.logger;\n const manifests = registry.listManifests();\n const disposePromises: Promise<void>[] = [];\n\n for (const cmd of manifests) {\n const disposeHook = (cmd as any)._disposeHook;\n if (disposeHook && typeof disposeHook === 'function') {\n disposePromises.push(\n Promise.resolve(disposeHook({\n registry,\n command: cmd,\n })).catch((err: any) => {\n log.warn(`Dispose hook failed for ${cmd.manifest.id}: ${err.message}`);\n })\n );\n }\n }\n\n await Promise.allSettled(disposePromises);\n}\n","import type { RegisteredCommand } from './types';\n\n/**\n * Execute a registered command.\n *\n * - Unavailable commands return exit code 2.\n * - Available commands are executed via manifest.loader().\n */\nexport async function runCommand(\n cmd: RegisteredCommand,\n ctx: any,\n argv: string[],\n flags: Record<string, any>,\n): Promise<number> {\n if (!cmd.available) {\n if (ctx.presenter?.json) {\n ctx.presenter.json({\n ok: false,\n available: false,\n command: cmd.manifest.id,\n reason: cmd.unavailableReason,\n hint: cmd.hint,\n });\n }\n return 2;\n }\n\n if (!cmd.manifest.loader) {\n return 1;\n }\n\n const implementation = await cmd.manifest.loader();\n const result = await implementation.run(ctx, argv, flags);\n\n return typeof result === 'number' ? result : 0;\n}\n","import type { Command, CommandGroup, CommandRegistry } from \"./legacy-types\";\nimport type { RegisteredCommand } from \"./types\";\n\n/**\n * Convert RegisteredCommand to Command adapter\n *\n * This is a minimal adapter - actual execution happens in bootstrap.ts via executePlugin().\n * The run() function here is never called for plugin commands.\n */\nfunction manifestToCommand(registered: RegisteredCommand): Command {\n return {\n name: registered.manifest.id,\n category: registered.manifest.group,\n describe: registered.manifest.describe,\n longDescription: registered.manifest.longDescription,\n aliases: registered.manifest.aliases || [],\n flags: registered.manifest.flags,\n examples: registered.manifest.examples,\n async run() {\n // This should never be called - plugin commands are executed via executePlugin() in bootstrap.ts\n throw new Error(`Command ${registered.manifest.id} should be executed via plugin-executor, not via legacy run() path.`);\n },\n };\n}\n\nexport interface ProductGroup {\n name: string;\n describe?: string;\n commands: RegisteredCommand[];\n}\n\nexport type CommandType = 'system' | 'plugin';\n\nexport interface CommandLookupResult {\n cmd: Command | CommandGroup;\n type: CommandType;\n}\n\nclass InMemoryRegistry implements CommandRegistry {\n // Separate collections for security isolation\n private systemCommands = new Map<string, Command>(); // System commands (in-process)\n private pluginCommands = new Map<string, RegisteredCommand>(); // Plugin commands (subprocess)\n\n // Legacy unified collection for backward compatibility\n private byName = new Map<string, Command | CommandGroup>();\n private groups = new Map<string, CommandGroup>();\n private manifests = new Map<string, RegisteredCommand>();\n private partial = false;\n\n register(cmd: Command): void {\n // Store in systemCommands for type checking\n this.systemCommands.set(cmd.name, cmd);\n\n // Also keep in byName for backward compatibility\n this.byName.set(cmd.name, cmd);\n for (const a of cmd.aliases || []) {\n this.systemCommands.set(a, cmd);\n this.byName.set(a, cmd);\n }\n }\n\n registerGroup(group: CommandGroup): void {\n this.groups.set(group.name, group);\n this.byName.set(group.name, group);\n\n for (const cmd of group.commands) {\n // Store each command from group in systemCommands\n this.systemCommands.set(cmd.name, cmd);\n\n const fullName = `${group.name} ${cmd.name}`;\n this.systemCommands.set(fullName, cmd);\n this.byName.set(fullName, cmd);\n\n for (const alias of cmd.aliases || []) {\n this.systemCommands.set(alias, cmd);\n this.byName.set(alias, cmd);\n }\n }\n\n // Register subgroups (e.g., marketplace → plugins, adapters)\n if (group.subgroups) {\n for (const sub of group.subgroups) {\n const subName = `${group.name} ${sub.name}`;\n this.groups.set(subName, sub);\n this.byName.set(subName, sub);\n\n for (const cmd of sub.commands) {\n const fullName = `${group.name} ${sub.name} ${cmd.name}`;\n this.systemCommands.set(fullName, cmd);\n this.byName.set(fullName, cmd);\n\n for (const alias of cmd.aliases || []) {\n this.systemCommands.set(alias, cmd);\n this.byName.set(alias, cmd);\n }\n }\n }\n }\n }\n\n registerManifest(cmd: RegisteredCommand): void {\n // Check for collision with system commands\n const cmdId = cmd.manifest.id;\n const hasCollision = this.systemCommands.has(cmdId);\n\n if (hasCollision) {\n console.warn(`[registry] Plugin command \"${cmdId}\" collides with system command. System command takes priority.`);\n // Mark plugin command as shadowed - it will NOT be executable\n cmd.shadowed = true;\n }\n\n // Check aliases for collisions\n const collisionAliases = new Set<string>();\n for (const alias of cmd.manifest.aliases || []) {\n if (this.systemCommands.has(alias)) {\n console.warn(`[registry] Plugin alias \"${alias}\" collides with system command. System command takes priority.`);\n collisionAliases.add(alias);\n }\n }\n\n // Store in pluginCommands (even if shadowed, for manifest listing)\n this.pluginCommands.set(cmdId, cmd);\n this.manifests.set(cmdId, cmd);\n\n // Only add to byName if NO collision with system commands\n // This ensures system commands always win in routing\n if (!hasCollision) {\n const commandAdapter = manifestToCommand(cmd);\n\n this.byName.set(cmdId, commandAdapter);\n this.byName.set(commandAdapter.name, commandAdapter);\n\n // Also register with space-separated format for multi-part commands\n // e.g., \"agent:trace:stats\" → \"agent trace stats\"\n if (cmdId.includes(':')) {\n const spaceSeparated = cmdId.replace(/:/g, ' ');\n this.byName.set(spaceSeparated, commandAdapter);\n }\n\n // Register with full group + command format for invocation\n if (cmd.manifest.group && cmd.manifest.subgroup) {\n // 3-part path: \"marketplace plugins list\"\n const fullPath = `${cmd.manifest.group} ${cmd.manifest.subgroup} ${cmd.manifest.id}`;\n const colonPath = `${cmd.manifest.group}:${cmd.manifest.subgroup}:${cmd.manifest.id}`;\n this.byName.set(fullPath, commandAdapter);\n this.byName.set(colonPath, commandAdapter);\n this.manifests.set(fullPath, cmd);\n this.manifests.set(colonPath, cmd);\n this.pluginCommands.set(fullPath, cmd);\n this.pluginCommands.set(colonPath, cmd);\n\n // Also register 2-part: \"marketplace list\" (without subgroup, for discoverability)\n const twoPartName = `${cmd.manifest.group} ${cmd.manifest.id}`;\n if (!this.byName.has(twoPartName)) {\n this.byName.set(twoPartName, commandAdapter);\n }\n\n // Synthetic subgroup for help display\n const subgroupKey = `${cmd.manifest.group} ${cmd.manifest.subgroup}`;\n if (!this.groups.has(subgroupKey)) {\n this.groups.set(subgroupKey, {\n name: subgroupKey,\n describe: cmd.manifest.subgroup,\n commands: [],\n });\n this.byName.set(subgroupKey, this.groups.get(subgroupKey)!);\n }\n (this.groups.get(subgroupKey)! as any).commands.push(commandAdapter);\n } else if (cmd.manifest.group) {\n const fullName = `${cmd.manifest.group} ${cmd.manifest.id}`;\n const colonName = `${cmd.manifest.group}:${cmd.manifest.id}`;\n this.byName.set(fullName, commandAdapter);\n this.byName.set(colonName, commandAdapter);\n this.manifests.set(fullName, cmd);\n this.manifests.set(colonName, cmd);\n this.pluginCommands.set(fullName, cmd);\n this.pluginCommands.set(colonName, cmd);\n }\n\n if (cmd.manifest.aliases) {\n for (const alias of cmd.manifest.aliases) {\n // Skip aliases that collide with system commands\n if (!collisionAliases.has(alias)) {\n this.byName.set(alias, commandAdapter);\n }\n }\n }\n }\n }\n\n markPartial(partial: boolean): void {\n this.partial = partial;\n }\n\n isPartial(): boolean {\n return this.partial;\n }\n\n getManifest(id: string): RegisteredCommand | undefined {\n return this.manifests.get(id);\n }\n\n listManifests(): RegisteredCommand[] {\n const unique = new Set<RegisteredCommand>();\n for (const cmd of this.manifests.values()) {\n unique.add(cmd);\n }\n return Array.from(unique);\n }\n\n has(name: string): boolean {\n return this.byName.has(name);\n }\n\n /**\n * Get command with type information for secure routing\n *\n * Returns type='system' for commands from registerGroup() - execute in-process\n * Returns type='plugin' for commands from registerManifest() - execute in subprocess\n *\n * This separation prevents malicious plugins from escaping the sandbox.\n */\n getWithType(nameOrPath: string | string[]): CommandLookupResult | undefined {\n const cmd = this.get(nameOrPath);\n if (!cmd) {\n return undefined;\n }\n\n // Groups are always system-level\n if ('commands' in cmd) {\n return { cmd, type: 'system' };\n }\n\n // Check if command is in systemCommands (registered via register() or registerGroup())\n const normalizedName = typeof nameOrPath === 'string' ? nameOrPath : nameOrPath.join(' ');\n\n // Try direct lookup\n if (this.systemCommands.has(normalizedName)) {\n return { cmd, type: 'system' };\n }\n\n // Try with colon-to-space conversion for system commands\n if (normalizedName.includes(':')) {\n const spaceVersion = normalizedName.replace(':', ' ');\n if (this.systemCommands.has(spaceVersion)) {\n return { cmd, type: 'system' };\n }\n }\n\n // Check if it's a plugin command (has manifest)\n const manifestCmd = this.getManifestCommand(normalizedName);\n if (manifestCmd) {\n return { cmd, type: 'plugin' };\n }\n\n // Default to system if found in byName but not categorized\n // This handles edge cases and ensures backward compatibility\n return { cmd, type: 'system' };\n }\n\n get(nameOrPath: string | string[]): Command | CommandGroup | undefined {\n if (typeof nameOrPath === \"string\") {\n if (this.byName.has(nameOrPath)) {\n return this.byName.get(nameOrPath);\n }\n if (nameOrPath.includes(\":\")) {\n const parts = nameOrPath.split(\":\");\n if (parts.length === 2) {\n const exactMatch = this.byName.get(nameOrPath);\n if (exactMatch) {\n return exactMatch;\n }\n\n const spaceKey = parts.join(\" \");\n if (this.byName.has(spaceKey)) {\n return this.byName.get(spaceKey);\n }\n }\n }\n }\n\n const key = Array.isArray(nameOrPath)\n ? nameOrPath.join(\" \")\n : nameOrPath;\n\n if (this.byName.has(key)) {\n return this.byName.get(key);\n }\n\n if (\n Array.isArray(nameOrPath) &&\n nameOrPath.length === 1 &&\n nameOrPath[0]?.includes(\":\")\n ) {\n if (this.byName.has(nameOrPath[0])) {\n return this.byName.get(nameOrPath[0]);\n }\n\n const [group, command] = nameOrPath[0].split(\":\");\n const legacyKey = `${group} ${command}`;\n if (this.byName.has(legacyKey)) {\n return this.byName.get(legacyKey);\n }\n }\n\n if (Array.isArray(nameOrPath)) {\n const dot = nameOrPath.join(\".\");\n if (this.byName.has(dot)) {\n return this.byName.get(dot);\n }\n }\n\n // Try to find command in groups by prefix (e.g., [\"system\", \"hello\"] -> \"system:info hello\")\n if (Array.isArray(nameOrPath) && nameOrPath.length >= 2) {\n const [groupPrefix, ...cmdParts] = nameOrPath;\n const cmdName = cmdParts.join(\" \");\n\n for (const group of this.groups.values()) {\n if (group.name === groupPrefix || group.name.startsWith(groupPrefix + ':')) {\n const fullName = `${group.name} ${cmdName}`;\n if (this.byName.has(fullName)) {\n return this.byName.get(fullName);\n }\n }\n }\n }\n\n return undefined;\n }\n\n list(): Command[] {\n const commands = new Set<Command>();\n for (const value of this.byName.values()) {\n if (\"run\" in value) {\n commands.add(value);\n }\n }\n return Array.from(commands);\n }\n\n listGroups(): CommandGroup[] {\n return Array.from(this.groups.values());\n }\n\n getGroupsByPrefix(prefix: string): CommandGroup[] {\n const result: CommandGroup[] = [];\n for (const group of this.groups.values()) {\n if (group.name === prefix || group.name.startsWith(prefix + ':')) {\n result.push(group);\n }\n }\n return result;\n }\n\n getCommandsByGroupPrefix(prefix: string): Command[] {\n const result: Command[] = [];\n for (const group of this.groups.values()) {\n if (group.name === prefix || group.name.startsWith(prefix + ':')) {\n result.push(...group.commands);\n }\n }\n return result;\n }\n\n listProductGroups(): ProductGroup[] {\n const groups = new Map<string, ProductGroup>();\n\n for (const cmd of this.listManifests()) {\n const groupName = cmd.manifest.group;\n if (!groups.has(groupName)) {\n groups.set(groupName, {\n name: groupName,\n describe: cmd.manifest.group,\n commands: [],\n });\n }\n groups.get(groupName)!.commands.push(cmd);\n }\n\n return Array.from(groups.values());\n }\n\n getCommandsByGroup(group: string): RegisteredCommand[] {\n return this.listManifests()\n .filter((cmd) => cmd.manifest.group === group)\n .sort((a, b) => a.manifest.id.localeCompare(b.manifest.id));\n }\n\n getManifestCommand(idOrAlias: string): RegisteredCommand | undefined {\n if (this.manifests.has(idOrAlias)) {\n return this.manifests.get(idOrAlias);\n }\n\n for (const cmd of this.manifests.values()) {\n if (cmd.manifest.aliases?.includes(idOrAlias)) {\n return cmd;\n }\n // Support both colon and space separators (e.g., \"agent:trace:stats\" or \"agent trace stats\")\n if (cmd.manifest.id.replace(/:/g, \" \") === idOrAlias) {\n return cmd;\n }\n }\n\n return undefined;\n }\n}\n\nexport const registry = new InMemoryRegistry();\n\nexport function findCommand(nameOrPath: string | string[]) {\n return registry.get(nameOrPath);\n}\n\n/**\n * Find command with type information for secure routing\n *\n * Use this in bootstrap.ts to determine execution path:\n * - type='system' → execute via cmd.run() in-process\n * - type='plugin' → execute via executePlugin() in plugin-executor\n */\nexport function findCommandWithType(nameOrPath: string | string[]): CommandLookupResult | undefined {\n return registry.getWithType(nameOrPath);\n}\n\n"]}
|