@kb-labs/cli-commands 2.88.0 → 2.93.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/{discover-Cz7X5bQp.d.ts → discover-D_Is1Qqq.d.ts} +13 -10
- package/dist/index.d.ts +2 -2
- package/dist/index.js +136 -116
- package/dist/index.js.map +1 -1
- package/dist/registry/index.d.ts +5 -6
- package/dist/registry/index.js +85 -68
- package/dist/registry/index.js.map +1 -1
- package/package.json +22 -22
|
@@ -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","cmd"],"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 * Compute hash of `<root>/.kb/marketplace.lock` for cache invalidation.\n *\n * Each scope (platform, project) has its own lock — the discovery cache\n * tracks both, and a change in either invalidates the cache. The lock is\n * the source of truth for installed/linked plugins, so when it changes\n * (via `kb marketplace plugins link`, `install`, `uninstall`, or\n * `kb scaffold plugin` auto-registering a freshly scaffolded plugin), the\n * CLI cache must be rebuilt so new commands become visible on next invocation.\n */\nasync function computeMarketplaceLockHashAt(root: string): Promise<string> {\n const lockPath = path.join(root, '.kb', 'marketplace.lock');\n try {\n const content = await fs.readFile(lockPath, '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. `scope` is platform because\n // `discoverWorkspace` scans pnpm-workspace packages (monorepo dev mode);\n // project-local plugins live under `.kb/plugins/` and are discovered by\n // `discoverProjectLocalPlugins` below.\n return loadManifestsForPackages(packageInfos, 'workspace', 'platform');\n}\n\n/**\n * Discover plugins scaffolded into `<projectRoot>/.kb/plugins/<name>/packages/*-entry/`.\n *\n * These are the bread-and-butter of project-scoped installs: a user runs\n * `kb scaffold run plugin demo` inside their project, then `kb marketplace\n * plugins link --scope project ./.kb/plugins/demo/packages/demo-entry`.\n * Their manifests must be picked up even when the project has no\n * `pnpm-workspace.yaml` (installed mode), so this pass is independent from\n * `discoverWorkspace`.\n */\nasync function discoverProjectLocalPlugins(projectRoot: string): Promise<DiscoveryResult[]> {\n const pattern = path.join('.kb', 'plugins', '*', 'packages', '*-entry', PACKAGE_JSON);\n const files = await glob(pattern, {\n cwd: projectRoot,\n absolute: false,\n ignore: ['**/node_modules/**'],\n });\n const packageInfos: Array<{ pkgRoot: string; pkg: any; manifestPath: string }> = [];\n for (const pkgFile of files) {\n const pkgRoot = path.dirname(path.join(projectRoot, pkgFile));\n const pkg = await readPackageJson(path.join(projectRoot, pkgFile));\n if (!pkg) { continue; }\n const manifestInfo = await findManifestPath(pkgRoot, pkg);\n if (manifestInfo.path) {\n packageInfos.push({ pkgRoot, pkg, manifestPath: manifestInfo.path });\n }\n }\n // Project-local plugins use the `linked` source — same as dev-linked\n // packages in node_modules — and carry project scope.\n return loadManifestsForPackages(packageInfos, 'linked', 'project');\n}\n\n/**\n * Shared loader used by workspace and project-local discovery. Loads all\n * manifests in parallel with timeout protection and surfaces synthetic\n * \"unavailable\" manifests on load failure.\n */\nasync function loadManifestsForPackages(\n packageInfos: Array<{ pkgRoot: string; pkg: any; manifestPath: string }>,\n source: DiscoveryResult['source'],\n scope: DiscoveryResult['scope'],\n): Promise<DiscoveryResult[]> {\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,\n scope,\n packageName: pkg.name,\n manifestPath: toPosixPath(manifestPath),\n pkgRoot: toPosixPath(pkgRoot),\n } satisfies DiscoveryResult;\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 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,\n scope,\n packageName: pkg.name,\n manifestPath: toPosixPath(manifestPath),\n pkgRoot: toPosixPath(pkgRoot),\n } satisfies DiscoveryResult;\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 // Current-package fallback fires in installed mode when the user's\n // project itself exposes a manifest. That maps to the project scope.\n scope: 'project',\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 // node_modules discovery runs at the platform root. In dev mode\n // platformRoot === projectRoot so either label is correct; we use\n // platform to reflect where the manifest physically lives.\n scope: 'platform' as const,\n packageName: pkg.name,\n manifestPath: toPosixPath(manifestPath),\n pkgRoot: toPosixPath(pkgRoot),\n } satisfies DiscoveryResult;\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 scope: 'platform' as const,\n packageName: pkg.name,\n manifestPath: toPosixPath(manifestPath),\n pkgRoot: toPosixPath(pkgRoot),\n } satisfies DiscoveryResult;\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 > builtin\n const priority: Record<string, number> = {\n workspace: 3,\n linked: 2,\n node_modules: 1,\n builtin: 0,\n };\n\n for (const result of all) {\n const existing = byPackageName.get(result.packageName);\n if (!existing) {\n byPackageName.set(result.packageName, result);\n continue;\n }\n\n // Cross-scope collision: if the two results point to the same physical\n // directory (dev mode, where `.kb/plugins/...` is matched by both\n // pnpm-workspace and `discoverProjectLocalPlugins`), prefer the project\n // entry — it carries the more precise scope annotation. If the paths\n // differ, that's a real collision and platform always wins (ADR-0012),\n // with a warning so the user can see it in --debug logs.\n if (existing.scope !== result.scope) {\n if (existing.pkgRoot === result.pkgRoot) {\n const projectEntry = existing.scope === 'project' ? existing : result;\n byPackageName.set(result.packageName, projectEntry);\n continue;\n }\n const winner = existing.scope === 'platform' ? existing : result;\n const loser = existing.scope === 'platform' ? result : existing;\n log('warn', JSON.stringify({\n code: 'DISCOVERY_SCOPE_COLLISION',\n packageName: result.packageName,\n platformPath: winner.pkgRoot,\n projectPath: loser.pkgRoot,\n message: 'Package exists in both platform and project scopes — platform wins.',\n }));\n byPackageName.set(result.packageName, winner);\n continue;\n }\n\n // Same scope: keep the higher-priority source.\n const existingPriority = priority[existing.source] ?? 0;\n const newPriority = priority[result.source] ?? 0;\n if (newPriority > existingPriority) {\n byPackageName.set(result.packageName, result);\n }\n }\n\n return Array.from(byPackageName.values());\n}\n\n/**\n * Load cache file. `roots` is matched against the cached `platformRoot` /\n * `projectRoot` — if they drifted (e.g. the user moved the project or\n * KB_PLATFORM_ROOT changed) the cache is considered invalid. This is\n * cheaper than recomputing all manifests blindly and avoids serving stale\n * results from a previous workspace layout.\n */\nasync function loadCache(\n cwd: string,\n roots: { platformRoot: string; projectRoot: string },\n): 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 // Invalidate cache if recorded roots drifted. This covers scenarios like\n // moving the project, renaming the platform dir, or switching scopes.\n if (cache.platformRoot && cache.platformRoot !== roots.platformRoot) {\n log('debug', `Cache invalidated: platformRoot changed (${cache.platformRoot} → ${roots.platformRoot})`);\n return null;\n }\n if (cache.projectRoot && cache.projectRoot !== roots.projectRoot) {\n log('debug', `Cache invalidated: projectRoot changed (${cache.projectRoot} → ${roots.projectRoot})`);\n return null;\n }\n\n // Check marketplace lock hashes — source of truth for installed/linked\n // plugins. Both scopes are tracked; a change in either invalidates.\n const currentPlatformLockHash = await computeMarketplaceLockHashAt(roots.platformRoot);\n if (\n currentPlatformLockHash &&\n cache.platformMarketplaceLockHash &&\n cache.platformMarketplaceLockHash !== currentPlatformLockHash\n ) {\n log('debug', `Cache invalidated: ${roots.platformRoot}/.kb/marketplace.lock changed`);\n return null;\n }\n\n if (roots.projectRoot !== roots.platformRoot) {\n const currentProjectLockHash = await computeMarketplaceLockHashAt(roots.projectRoot);\n if (\n currentProjectLockHash &&\n cache.projectMarketplaceLockHash &&\n cache.projectMarketplaceLockHash !== currentProjectLockHash\n ) {\n log('debug', `Cache invalidated: ${roots.projectRoot}/.kb/marketplace.lock changed`);\n return null;\n }\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 *\n * The cache lives in the project root — that's where CLI invocations happen\n * and where per-project invalidation hashes belong. `platformRoot` is stored\n * alongside `projectRoot` so the next run can recompute both marketplace-lock\n * hashes, even when the platform root is outside cwd (installed mode).\n */\nasync function saveCache(\n cwd: string,\n results: DiscoveryResult[],\n roots: { platformRoot: string; projectRoot: string },\n): 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 const platformMarketplaceLockHash = await computeMarketplaceLockHashAt(roots.platformRoot);\n const projectMarketplaceLockHash = roots.projectRoot !== roots.platformRoot\n ? await computeMarketplaceLockHashAt(roots.projectRoot)\n : '';\n\n if (lockfileHash) { stateHasher.update(lockfileHash); }\n if (configHash) { stateHasher.update(configHash); }\n if (pluginsStateHash) { stateHasher.update(pluginsStateHash); }\n if (platformMarketplaceLockHash) { stateHasher.update(platformMarketplaceLockHash); }\n if (projectMarketplaceLockHash) { stateHasher.update(projectMarketplaceLockHash); }\n stateHasher.update(roots.platformRoot);\n stateHasher.update(roots.projectRoot);\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 platformMarketplaceLockHash: platformMarketplaceLockHash || undefined,\n projectMarketplaceLockHash: projectMarketplaceLockHash || undefined,\n platformRoot: roots.platformRoot,\n projectRoot: roots.projectRoot,\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; projectRoot?: string } = {},\n): Promise<DiscoveryResult[]> {\n const startTime = Date.now();\n const timings: Record<string, number> = {};\n const platformRoot = options.platformRoot ?? cwd;\n const projectRoot = options.projectRoot ?? cwd;\n const roots = { platformRoot, projectRoot };\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, roots);\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 // Platform discovery — workspace packages (dev mode) or node_modules\n // (installed mode). Always scanned at `platformRoot`.\n let workspace: DiscoveryResult[] = [];\n try {\n const wsStart = Date.now();\n workspace = await discoverWorkspace(platformRoot);\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 const nmStart = Date.now();\n const installed = await discoverNodeModules(platformRoot);\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 // Project-local plugins (`.kb/plugins/<name>/packages/*-entry/`). Runs\n // unconditionally against projectRoot so installed and dev modes behave\n // identically. In dev mode projectRoot === platformRoot and the same\n // files may also surface through `discoverWorkspace` (via pnpm-workspace\n // globs); `deduplicateManifests` collapses the duplicates.\n const plStart = Date.now();\n const projectLocal = await discoverProjectLocalPlugins(projectRoot);\n timings.projectLocal = Date.now() - plStart;\n if (projectLocal.length > 0) {\n log('info', `Discovered ${projectLocal.length} project-local plugins`);\n }\n\n // Deduplicate (same package from multiple sources/scopes collapses to one,\n // platform wins on cross-scope collisions — see deduplicateManifests).\n const dedupStart = Date.now();\n const results = deduplicateManifests([...workspace, ...installed, ...projectLocal]);\n timings.deduplicate = Date.now() - dedupStart;\n\n // Save cache\n const saveStart = Date.now();\n await saveCache(cwd, results, roots);\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 logLevel = getLogLevel();\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 if (logLevel === 'debug') {\n process.stderr.write(`[debug][preflight] skipped ${manifestId} (${result.source}): ${reason}\\n`);\n }\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 // Use canonical key (group:id) for collision detection so that\n // agent:run and workflow:run are treated as distinct commands.\n const canonicalKey = manifest.group ? `${manifest.group}:${manifest.id}` : manifest.id;\n const existing = globalIds.get(canonicalKey);\n if (existing) {\n const collision = checkCollision(manifest, existing, result.source, namespace);\n if (collision.shouldShadow) {\n existing.shadowed = true;\n globalIds.set(canonicalKey, cmd);\n if (logLevel === 'info' || logLevel === 'debug') {\n log.info(`${canonicalKey} from ${result.source} shadows ${existing.source} version`);\n }\n } else {\n cmd.shadowed = true;\n if (logLevel === 'info' || logLevel === 'debug') {\n log.info(`${canonicalKey} from ${result.source} shadowed by ${existing.source} version`);\n }\n }\n } else {\n globalIds.set(canonicalKey, 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 throw new Error(`Command ${registered.manifest.id} should be executed via plugin-executor, not via legacy run() path.`);\n },\n };\n}\n\n/**\n * Build canonical ID for a plugin command manifest.\n *\n * Format:\n * - 3-part: \"group:subgroup:id\" (e.g., \"marketplace:plugins:list\")\n * - 2-part: \"group:id\" (e.g., \"marketplace:list\")\n * - bare: \"id\" (fallback when no group)\n */\nfunction buildCanonicalId(manifest: RegisteredCommand['manifest']): string {\n const { id, group, subgroup } = manifest;\n if (group && subgroup) {\n return `${group}:${subgroup}:${id}`;\n }\n if (group) {\n return `${group}:${id}`;\n }\n return id;\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 // System commands (in-process): key = any registered name/alias\n private systemCommands = new Map<string, Command>();\n // Plugin commands: key = canonicalId only\n private pluginByCanonical = new Map<string, RegisteredCommand>();\n // Alias → canonicalId: covers all user-input variants that resolve to a plugin\n private pluginAliases = new Map<string, string>();\n\n // Legacy unified collection for backward compatibility (display/get)\n private byName = new Map<string, Command | CommandGroup>();\n private groups = new Map<string, CommandGroup>();\n // manifests: any key → RegisteredCommand (for listing/lookup; still stores multi-key for compat)\n private manifests = new Map<string, RegisteredCommand>();\n private partial = false;\n\n // ─── System command registration ────────────────────────────────────────\n\n register(cmd: Command): void {\n this.systemCommands.set(cmd.name, cmd);\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 this.systemCommands.set(cmd.name, cmd);\n const fullName = `${group.name} ${cmd.name}`;\n this.systemCommands.set(fullName, cmd);\n this.byName.set(fullName, cmd);\n for (const alias of cmd.aliases || []) {\n this.systemCommands.set(alias, cmd);\n this.byName.set(alias, cmd);\n }\n }\n\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 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 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 // ─── Plugin command registration ────────────────────────────────────────\n\n registerManifest(cmd: RegisteredCommand): void {\n const canonicalId = buildCanonicalId(cmd.manifest);\n\n // System commands ALWAYS win — check all variants of canonical\n const collisionKey = this._findSystemCollision(cmd.manifest, canonicalId);\n if (collisionKey) {\n console.warn(`[registry] Plugin command \"${canonicalId}\" collides with system command \"${collisionKey}\". System command takes priority.`);\n cmd.shadowed = true;\n }\n\n // Check alias 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 // Always store in manifests for listing (even shadowed)\n this.pluginByCanonical.set(canonicalId, cmd);\n this.manifests.set(canonicalId, cmd);\n this.manifests.set(cmd.manifest.id, cmd);\n\n if (cmd.shadowed) {\n return; // Don't register aliases or byName for shadowed commands\n }\n\n // Register all alias variants → canonicalId\n this._registerPluginAliases(cmd, canonicalId, collisionAliases);\n\n // Register in byName for display/get\n const commandAdapter = manifestToCommand(cmd);\n this.byName.set(canonicalId, commandAdapter);\n\n // Also register space-separated variants for legacy .get() calls\n const spaceCanonical = canonicalId.replace(/:/g, ' ');\n this.byName.set(spaceCanonical, commandAdapter);\n\n // Synthetic subgroups for help display\n this._registerSyntheticGroups(cmd, commandAdapter);\n }\n\n /**\n * Check whether any system command already owns the canonical id or its parts.\n * Returns the colliding key if found, null otherwise.\n */\n private _findSystemCollision(manifest: RegisteredCommand['manifest'], canonicalId: string): string | null {\n // Check canonical id (e.g. \"workflow:health\")\n if (this.systemCommands.has(canonicalId)) {return canonicalId;}\n // Check space variant of canonical (e.g. \"workflow health\")\n const space = canonicalId.replace(/:/g, ' ');\n if (this.systemCommands.has(space)) {return space;}\n // NOTE: bare manifest.id (e.g. \"health\") is NOT checked — a plugin command\n // like workflow:health should not collide with system command info:health\n // just because both have bare id \"health\".\n return null;\n }\n\n /**\n * Register all lookup aliases for a plugin command.\n *\n * Priority (what beats what) is handled in resolveToCanonical at query time.\n * Here we just build the mapping.\n *\n * Aliases registered:\n * - canonicalId itself (\"marketplace:plugins:list\")\n * - bare id (\"list\") ← low priority, may clash\n * - 2-part shorthand (\"marketplace:list\", \"marketplace list\")\n * - manifest.aliases[] (user-defined aliases, except collisions)\n */\n private _registerPluginAliases(\n cmd: RegisteredCommand,\n canonicalId: string,\n collisionAliases: Set<string>,\n ): void {\n const { id, group, subgroup } = cmd.manifest;\n\n const register = (key: string) => {\n if (!this.systemCommands.has(key) && !this.systemCommands.has(key.replace(/:/g, ' '))) {\n // Don't overwrite a more-specific canonical alias with a shorter one\n if (!this.pluginAliases.has(key)) {\n this.pluginAliases.set(key, canonicalId);\n this.manifests.set(key, cmd);\n }\n }\n };\n\n // Canonical itself\n this.pluginAliases.set(canonicalId, canonicalId);\n const spaceCanonical = canonicalId.replace(/:/g, ' ');\n this.pluginAliases.set(spaceCanonical, canonicalId);\n this.manifests.set(spaceCanonical, cmd);\n\n if (group && subgroup) {\n // 3-part: also register 2-part shorthand \"group:id\" and \"group id\" as fallback aliases\n const twoPartColon = `${group}:${id}`;\n const twoPartSpace = `${group} ${id}`;\n register(twoPartColon);\n register(twoPartSpace);\n this.manifests.set(twoPartColon, cmd);\n this.manifests.set(twoPartSpace, cmd);\n\n // Full group paths\n const fullPath = `${group} ${subgroup} ${id}`;\n this.pluginAliases.set(fullPath, canonicalId);\n this.manifests.set(fullPath, cmd);\n\n // Subgroup group key for get() lookup\n const colonPath = `${group}:${subgroup}:${id}`;\n this.pluginAliases.set(colonPath, canonicalId);\n this.manifests.set(colonPath, cmd);\n } else if (group) {\n const colonName = `${group}:${id}`;\n const spaceName = `${group} ${id}`;\n this.pluginAliases.set(colonName, canonicalId);\n this.pluginAliases.set(spaceName, canonicalId);\n this.manifests.set(colonName, cmd);\n this.manifests.set(spaceName, cmd);\n }\n\n // Bare id (lowest priority — only if no collision)\n register(id);\n\n // User-defined manifest aliases\n for (const alias of cmd.manifest.aliases || []) {\n if (!collisionAliases.has(alias)) {\n register(alias);\n }\n }\n }\n\n /**\n * Register synthetic subgroups for help display.\n */\n private _registerSyntheticGroups(cmd: RegisteredCommand, commandAdapter: Command): void {\n const { id, group, subgroup } = cmd.manifest;\n\n if (group && subgroup) {\n const subgroupKey = `${group} ${subgroup}`;\n if (!this.groups.has(subgroupKey)) {\n this.groups.set(subgroupKey, {\n name: subgroupKey,\n describe: 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\n // Also register 2-part in byName for display\n const twoPartSpace = `${group} ${id}`;\n if (!this.byName.has(twoPartSpace)) {\n this.byName.set(twoPartSpace, commandAdapter);\n }\n const twoPartColon = `${group}:${id}`;\n if (!this.byName.has(twoPartColon)) {\n this.byName.set(twoPartColon, commandAdapter);\n }\n\n // Full space path for byName\n const fullPath = `${group} ${subgroup} ${id}`;\n this.byName.set(fullPath, commandAdapter);\n } else if (group) {\n const fullName = `${group} ${id}`;\n const colonName = `${group}:${id}`;\n this.byName.set(fullName, commandAdapter);\n this.byName.set(colonName, commandAdapter);\n }\n }\n\n // ─── Resolution ──────────────────────────────────────────────────────────\n\n /**\n * Resolve any user input to its canonical plugin ID.\n *\n * Returns canonicalId if found in plugin aliases, undefined otherwise.\n */\n private resolveToCanonical(input: string): string | undefined {\n // Direct canonical match\n if (this.pluginAliases.has(input)) {\n return this.pluginAliases.get(input);\n }\n // Try with colon↔space conversion\n const converted = input.includes(':') ? input.replace(/:/g, ' ') : input.replace(/ /g, ':');\n if (this.pluginAliases.has(converted)) {\n return this.pluginAliases.get(converted);\n }\n return undefined;\n }\n\n // ─── Public API ──────────────────────────────────────────────────────────\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.pluginByCanonical.values()) {\n unique.add(cmd);\n }\n return Array.from(unique);\n }\n\n has(name: string): boolean {\n return this.byName.has(name) || this.pluginAliases.has(name);\n }\n\n /**\n * Get command with type information for secure routing.\n *\n * System commands ALWAYS win — checked first before any plugin lookup.\n * Returns type='system' for system commands (in-process execution).\n * Returns type='plugin' for plugin commands (subprocess execution).\n */\n getWithType(nameOrPath: string | string[]): CommandLookupResult | undefined {\n const normalized = typeof nameOrPath === 'string' ? nameOrPath : nameOrPath.join(' ');\n\n // ── 1. System commands always win ──────────────────────────────────────\n if (this.systemCommands.has(normalized)) {\n return { cmd: this.systemCommands.get(normalized)!, type: 'system' };\n }\n // Try colon variant for system commands\n const colonVariant = normalized.replace(/ /g, ':');\n if (this.systemCommands.has(colonVariant)) {\n return { cmd: this.systemCommands.get(colonVariant)!, type: 'system' };\n }\n // Check groups (always system)\n if (this.groups.has(normalized)) {\n return { cmd: this.groups.get(normalized)!, type: 'system' };\n }\n\n // ── 2. Plugin lookup via canonical resolution ──────────────────────────\n const canonicalId = this.resolveToCanonical(normalized);\n if (canonicalId) {\n const pluginCmd = this.pluginByCanonical.get(canonicalId);\n if (pluginCmd && !pluginCmd.shadowed) {\n const cmd = this.byName.get(canonicalId) ?? this.byName.get(normalized);\n if (cmd) {\n return { cmd, type: 'plugin' };\n }\n }\n }\n\n // ── 3. Fallback: legacy byName lookup (handles edge cases) ─────────────\n const cmd = this.get(nameOrPath);\n if (!cmd) {return undefined;}\n\n if ('commands' in cmd) {\n return { cmd, type: 'system' };\n }\n\n // Determine if it's a system or plugin command\n if (this.systemCommands.has(normalized) || this.systemCommands.has(colonVariant)) {\n return { cmd, type: 'system' };\n }\n\n // Check via manifest\n const manifestCmd = this.getManifestCommand(normalized);\n if (manifestCmd && !manifestCmd.shadowed) {\n return { cmd, type: 'plugin' };\n }\n\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 spaceKey = nameOrPath.replace(/:/g, ' ');\n if (this.byName.has(spaceKey)) {\n return this.byName.get(spaceKey);\n }\n // Try parts[0] group + rest for 2-part colon\n const parts = nameOrPath.split(':');\n if (parts.length === 2) {\n const spaceKey2 = parts.join(' ');\n if (this.byName.has(spaceKey2)) {\n return this.byName.get(spaceKey2);\n }\n }\n }\n }\n\n const key = Array.isArray(nameOrPath) ? nameOrPath.join(' ') : nameOrPath;\n if (this.byName.has(key)) {\n return this.byName.get(key);\n }\n\n if (Array.isArray(nameOrPath) && nameOrPath.length === 1 && nameOrPath[0]?.includes(':')) {\n if (this.byName.has(nameOrPath[0])) {\n return this.byName.get(nameOrPath[0]);\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 if (Array.isArray(nameOrPath) && nameOrPath.length >= 2) {\n const [groupPrefix, ...cmdParts] = nameOrPath;\n const cmdName = cmdParts.join(' ');\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 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 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 // Try canonical resolution\n const canonicalId = this.resolveToCanonical(idOrAlias);\n if (canonicalId) {\n return this.pluginByCanonical.get(canonicalId);\n }\n\n for (const cmd of this.pluginByCanonical.values()) {\n if (cmd.manifest.aliases?.includes(idOrAlias)) {\n return cmd;\n }\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 *\n * System commands ALWAYS take priority over plugin commands.\n */\nexport function findCommandWithType(nameOrPath: string | string[]): CommandLookupResult | undefined {\n return registry.getWithType(nameOrPath);\n}\n"]}
|
|
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","exports","totalTime","sourceCounts","log","registry","cmd"],"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: unknown) {\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: unknown) {\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 instanceof Error ? 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, CommandModule, 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<CommandModule> {\n return async (): Promise<CommandModule> => {\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: unknown): CommandManifest {\n const rawMsg = (error instanceof Error ? 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 // 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 _synthetic: true,\n };\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 * Compute hash of `<root>/.kb/marketplace.lock` for cache invalidation.\n *\n * Each scope (platform, project) has its own lock — the discovery cache\n * tracks both, and a change in either invalidates the cache. The lock is\n * the source of truth for installed/linked plugins, so when it changes\n * (via `kb marketplace plugins link`, `install`, `uninstall`, or\n * `kb scaffold plugin` auto-registering a freshly scaffolded plugin), the\n * CLI cache must be rebuilt so new commands become visible on next invocation.\n */\nasync function computeMarketplaceLockHashAt(root: string): Promise<string> {\n const lockPath = path.join(root, '.kb', 'marketplace.lock');\n try {\n const content = await fs.readFile(lockPath, '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 as string)) {\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 as string}`);\n return true;\n }\n }\n }\n } catch (error: unknown) {\n log('debug', `[plugins][cache] Workspace scan skipped: ${error instanceof Error ? 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: unknown) {\n if (err instanceof Error && 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// 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// 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 modTyped = mod as { manifest?: unknown; default?: unknown };\n const rawManifest = modTyped.manifest || modTyped.default;\n if (!rawManifest || typeof rawManifest !== 'object' || (rawManifest as Record<string, unknown>).schema !== 'kb.plugin/3') {\n throw new Error(`Unsupported manifest format in ${pkgName}. Only kb.plugin/3 schema is supported.`);\n }\n const manifest = rawManifest as ManifestV3;\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) => {\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 as unknown as Record<string, unknown>).aliases as string[] | undefined,\n flags: cmd.flags,\n examples: cmd.examples,\n loader: createManifestV3Loader(commandId),\n package: pkgName,\n namespace: cmd.group || namespace,\n };\n commandManifest.manifestV2 = manifest; // Keep for backward compat with service.ts\n commandManifest.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<Record<string, unknown> | null> {\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: Record<string, unknown>): Promise<{ path: string | null; deprecated: boolean }> {\n const kb = pkg.kb as Record<string, unknown> | undefined;\n if (kb?.manifest) {\n const manifestPath = path.join(pkgRoot, kb.manifest as string);\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 const exports = pkg.exports as Record<string, unknown> | undefined;\n if (exports?.['./kb/commands']) {\n const exportPath = exports['./kb/commands'] as string | Record<string, string>;\n const manifestPath = typeof exportPath === 'string' ? exportPath : (exportPath as Record<string, string>).default || (exportPath as Record<string, string>).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: Record<string, unknown>): boolean {\n if (!pkg) {return false;}\n \n // Explicit flag\n if ((pkg.kb as Record<string, unknown>)?.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: Record<string, unknown>, 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. `scope` is platform because\n // `discoverWorkspace` scans pnpm-workspace packages (monorepo dev mode);\n // project-local plugins live under `.kb/plugins/` and are discovered by\n // `discoverProjectLocalPlugins` below.\n return loadManifestsForPackages(packageInfos, 'workspace', 'platform');\n}\n\n/**\n * Discover plugins scaffolded into `<projectRoot>/.kb/plugins/<name>/packages/*-entry/`.\n *\n * These are the bread-and-butter of project-scoped installs: a user runs\n * `kb scaffold run plugin demo` inside their project, then `kb marketplace\n * plugins link --scope project ./.kb/plugins/demo/packages/demo-entry`.\n * Their manifests must be picked up even when the project has no\n * `pnpm-workspace.yaml` (installed mode), so this pass is independent from\n * `discoverWorkspace`.\n */\nasync function discoverProjectLocalPlugins(projectRoot: string): Promise<DiscoveryResult[]> {\n const pattern = path.join('.kb', 'plugins', '*', 'packages', '*-entry', PACKAGE_JSON);\n const files = await glob(pattern, {\n cwd: projectRoot,\n absolute: false,\n ignore: ['**/node_modules/**'],\n });\n const packageInfos: Array<{ pkgRoot: string; pkg: Record<string, unknown>; manifestPath: string }> = [];\n for (const pkgFile of files) {\n const pkgRoot = path.dirname(path.join(projectRoot, pkgFile));\n const pkg = await readPackageJson(path.join(projectRoot, pkgFile));\n if (!pkg) { continue; }\n const manifestInfo = await findManifestPath(pkgRoot, pkg);\n if (manifestInfo.path) {\n packageInfos.push({ pkgRoot, pkg, manifestPath: manifestInfo.path });\n }\n }\n // Project-local plugins use the `linked` source — same as dev-linked\n // packages in node_modules — and carry project scope.\n return loadManifestsForPackages(packageInfos, 'linked', 'project');\n}\n\n/**\n * Shared loader used by workspace and project-local discovery. Loads all\n * manifests in parallel with timeout protection and surfaces synthetic\n * \"unavailable\" manifests on load failure.\n */\nasync function loadManifestsForPackages(\n packageInfos: Array<{ pkgRoot: string; pkg: Record<string, unknown>; manifestPath: string }>,\n source: DiscoveryResult['source'],\n scope: DiscoveryResult['scope'],\n): Promise<DiscoveryResult[]> {\n const loadPromises = packageInfos.map(async ({ pkgRoot, pkg, manifestPath }) => {\n const pkgName = pkg.name as string;\n const pkgStart = Date.now();\n try {\n const manifests = await loadManifestWithTimeout(manifestPath, pkgName, pkgRoot);\n const pkgTime = Date.now() - pkgStart;\n\n if (pkgTime > 30) {\n log('debug', `[plugins][perf] ${pkgName} manifest parse: ${pkgTime}ms (budget: 30ms)`);\n }\n\n if (manifests.length > 0) {\n validateUniqueIds(manifests, pkgName);\n return {\n manifests,\n source,\n scope,\n packageName: pkgName,\n manifestPath: toPosixPath(manifestPath),\n pkgRoot: toPosixPath(pkgRoot),\n } satisfies DiscoveryResult;\n }\n return null;\n } catch (err: unknown) {\n const pkgTime = Date.now() - pkgStart;\n log('debug', `[plugins][perf] ${pkgName} failed after ${pkgTime}ms`);\n const errMsg = err instanceof Error ? err.message : String(err);\n const errCode = (err as { code?: string }).code ?? 'UNKNOWN';\n\n log('warn', JSON.stringify({\n code: 'DISCOVERY_MANIFEST_LOAD_FAIL',\n packageName: pkgName,\n manifestPath: toPosixPath(manifestPath),\n errorCode: errCode,\n errorMessage: errMsg,\n hint: errMsg.includes('Cannot find package')\n ? 'Run: kb devlink apply && pnpm -w build'\n : 'Check manifest syntax and dependencies',\n }));\n const synthetic = createUnavailableManifest(pkgName, err);\n return {\n manifests: [synthetic],\n source,\n scope,\n packageName: pkgName,\n manifestPath: toPosixPath(manifestPath),\n pkgRoot: toPosixPath(pkgRoot),\n } satisfies DiscoveryResult;\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 const pkgName = pkg.name as string;\n\n const manifestInfo = await findManifestPath(cwd, pkg);\n if (manifestInfo.path) {\n if (manifestInfo.deprecated) {\n log('warn', `[DEPRECATED] ${pkgName} 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, pkgName, cwd);\n if (manifests.length > 0) {\n validateUniqueIds(manifests, pkgName);\n return {\n manifests,\n source: 'workspace',\n // Current-package fallback fires in installed mode when the user's\n // project itself exposes a manifest. That maps to the project scope.\n scope: 'project',\n packageName: pkgName,\n manifestPath: toPosixPath(manifestInfo.path),\n pkgRoot: toPosixPath(cwd),\n };\n }\n }\n } catch (err: unknown) {\n log('debug', `No CLI manifest in current package: ${err instanceof Error ? err.message : String(err)}`);\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: Record<string, unknown>, 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: Record<string, unknown> | null = null;\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 const scopedPkgName = pkg.name as string | undefined;\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 (scopedPkgName?.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(scopedPkgName ?? '')) {\n log('debug', `Plugin ${scopedPkgName} blocked by config`);\n return;\n }\n\n // Must be allowlisted OR in linked list\n const isAllowlisted = config.allow?.includes(scopedPkgName ?? '') || config.linked?.includes(scopedPkgName ?? '');\n if (!isAllowlisted) {\n log('debug', `Plugin ${scopedPkgName} 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] ${scopedPkgName} 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(scopedPkgName ?? '');\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 unscopedPkgName = pkg.name as string | undefined;\n const isPlugin = isPluginPackage(pkg);\n\n if (isPlugin) {\n // 3rd-party: check allowlist/blocklist\n if (config.block?.includes(unscopedPkgName ?? '')) {\n log('debug', `Plugin ${unscopedPkgName} blocked by config`);\n return;\n }\n\n const isAllowlisted = config.allow?.includes(unscopedPkgName ?? '') || config.linked?.includes(unscopedPkgName ?? '');\n if (!isAllowlisted) {\n log('debug', `Plugin ${unscopedPkgName} 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] ${unscopedPkgName} 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(unscopedPkgName ?? '');\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 const pkgName = pkg.name as string;\n try {\n const manifests = await loadManifestWithTimeout(manifestPath, pkgName, pkgRoot);\n if (manifests.length > 0) {\n validateUniqueIds(manifests, pkgName);\n return {\n manifests,\n source: (isLinked ? 'linked' : 'node_modules') as 'node_modules' | 'linked',\n // node_modules discovery runs at the platform root. In dev mode\n // platformRoot === projectRoot so either label is correct; we use\n // platform to reflect where the manifest physically lives.\n scope: 'platform' as const,\n packageName: pkgName,\n manifestPath: toPosixPath(manifestPath),\n pkgRoot: toPosixPath(pkgRoot),\n } satisfies DiscoveryResult;\n }\n return null;\n } catch (err: unknown) {\n const errMsg = err instanceof Error ? err.message : String(err);\n const errCode = (err as { code?: string }).code ?? 'UNKNOWN';\n log('warn', JSON.stringify({\n code: 'DISCOVERY_MANIFEST_LOAD_FAIL',\n packageName: pkgName,\n manifestPath: toPosixPath(manifestPath),\n errorCode: errCode,\n errorMessage: errMsg,\n hint: errMsg.includes('Cannot find package')\n ? 'Run: kb devlink apply && pnpm -w build'\n : 'Check manifest syntax and dependencies'\n }));\n const synthetic = createUnavailableManifest(pkgName, err);\n return {\n manifests: [synthetic],\n source: (isLinked ? 'linked' : 'node_modules') as 'node_modules' | 'linked',\n scope: 'platform' as const,\n packageName: pkgName,\n manifestPath: toPosixPath(manifestPath),\n pkgRoot: toPosixPath(pkgRoot),\n } satisfies DiscoveryResult;\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: unknown) {\n // node_modules doesn't exist or can't read\n log('debug', `Could not scan node_modules: ${err instanceof Error ? err.message : String(err)}`);\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 > builtin\n const priority: Record<string, number> = {\n workspace: 3,\n linked: 2,\n node_modules: 1,\n builtin: 0,\n };\n\n for (const result of all) {\n const existing = byPackageName.get(result.packageName);\n if (!existing) {\n byPackageName.set(result.packageName, result);\n continue;\n }\n\n // Cross-scope collision: if the two results point to the same physical\n // directory (dev mode, where `.kb/plugins/...` is matched by both\n // pnpm-workspace and `discoverProjectLocalPlugins`), prefer the project\n // entry — it carries the more precise scope annotation. If the paths\n // differ, that's a real collision and platform always wins (ADR-0012),\n // with a warning so the user can see it in --debug logs.\n if (existing.scope !== result.scope) {\n if (existing.pkgRoot === result.pkgRoot) {\n const projectEntry = existing.scope === 'project' ? existing : result;\n byPackageName.set(result.packageName, projectEntry);\n continue;\n }\n const winner = existing.scope === 'platform' ? existing : result;\n const loser = existing.scope === 'platform' ? result : existing;\n log('warn', JSON.stringify({\n code: 'DISCOVERY_SCOPE_COLLISION',\n packageName: result.packageName,\n platformPath: winner.pkgRoot,\n projectPath: loser.pkgRoot,\n message: 'Package exists in both platform and project scopes — platform wins.',\n }));\n byPackageName.set(result.packageName, winner);\n continue;\n }\n\n // Same scope: keep the higher-priority source.\n const existingPriority = priority[existing.source] ?? 0;\n const newPriority = priority[result.source] ?? 0;\n if (newPriority > existingPriority) {\n byPackageName.set(result.packageName, result);\n }\n }\n\n return Array.from(byPackageName.values());\n}\n\n/**\n * Load cache file. `roots` is matched against the cached `platformRoot` /\n * `projectRoot` — if they drifted (e.g. the user moved the project or\n * KB_PLATFORM_ROOT changed) the cache is considered invalid. This is\n * cheaper than recomputing all manifests blindly and avoids serving stale\n * results from a previous workspace layout.\n */\nasync function loadCache(\n cwd: string,\n roots: { platformRoot: string; projectRoot: string },\n): 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 Partial<CacheFile> & { mtimes?: unknown; results?: unknown };\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 // Invalidate cache if recorded roots drifted. This covers scenarios like\n // moving the project, renaming the platform dir, or switching scopes.\n if (cache.platformRoot && cache.platformRoot !== roots.platformRoot) {\n log('debug', `Cache invalidated: platformRoot changed (${cache.platformRoot} → ${roots.platformRoot})`);\n return null;\n }\n if (cache.projectRoot && cache.projectRoot !== roots.projectRoot) {\n log('debug', `Cache invalidated: projectRoot changed (${cache.projectRoot} → ${roots.projectRoot})`);\n return null;\n }\n\n // Check marketplace lock hashes — source of truth for installed/linked\n // plugins. Both scopes are tracked; a change in either invalidates.\n const currentPlatformLockHash = await computeMarketplaceLockHashAt(roots.platformRoot);\n if (\n currentPlatformLockHash &&\n cache.platformMarketplaceLockHash &&\n cache.platformMarketplaceLockHash !== currentPlatformLockHash\n ) {\n log('debug', `Cache invalidated: ${roots.platformRoot}/.kb/marketplace.lock changed`);\n return null;\n }\n\n if (roots.projectRoot !== roots.platformRoot) {\n const currentProjectLockHash = await computeMarketplaceLockHashAt(roots.projectRoot);\n if (\n currentProjectLockHash &&\n cache.projectMarketplaceLockHash &&\n cache.projectMarketplaceLockHash !== currentProjectLockHash\n ) {\n log('debug', `Cache invalidated: ${roots.projectRoot}/.kb/marketplace.lock changed`);\n return null;\n }\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: unknown) {\n log('debug', `Package cache invalidated: missing package.json for ${entry.result.packageName} (${error instanceof Error ? 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: unknown) {\n log('debug', `Package cache invalidated: manifest deleted for ${entry.result.packageName} (${error instanceof Error ? 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: unknown) {\n log('debug', `Package cache hash validation failed for ${entry.result.packageName}: ${error instanceof Error ? error.message : 'unknown'}`);\n return true;\n }\n }\n\n return false;\n}\n\n/**\n * Save cache file with per-package structure.\n *\n * The cache lives in the project root — that's where CLI invocations happen\n * and where per-project invalidation hashes belong. `platformRoot` is stored\n * alongside `projectRoot` so the next run can recompute both marketplace-lock\n * hashes, even when the platform root is outside cwd (installed mode).\n */\nasync function saveCache(\n cwd: string,\n results: DiscoveryResult[],\n roots: { platformRoot: string; projectRoot: string },\n): 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._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 as string | undefined) || '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: unknown) {\n log('debug', `Failed to cache package ${result.packageName}: ${err instanceof Error ? err.message : String(err)}`);\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 const platformMarketplaceLockHash = await computeMarketplaceLockHashAt(roots.platformRoot);\n const projectMarketplaceLockHash = roots.projectRoot !== roots.platformRoot\n ? await computeMarketplaceLockHashAt(roots.projectRoot)\n : '';\n\n if (lockfileHash) { stateHasher.update(lockfileHash); }\n if (configHash) { stateHasher.update(configHash); }\n if (pluginsStateHash) { stateHasher.update(pluginsStateHash); }\n if (platformMarketplaceLockHash) { stateHasher.update(platformMarketplaceLockHash); }\n if (projectMarketplaceLockHash) { stateHasher.update(projectMarketplaceLockHash); }\n stateHasher.update(roots.platformRoot);\n stateHasher.update(roots.projectRoot);\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 platformMarketplaceLockHash: platformMarketplaceLockHash || undefined,\n projectMarketplaceLockHash: projectMarketplaceLockHash || undefined,\n platformRoot: roots.platformRoot,\n projectRoot: roots.projectRoot,\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: unknown) {\n log('debug', `Failed to save cache: ${err instanceof Error ? err.message : String(err)}`);\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; projectRoot?: string } = {},\n): Promise<DiscoveryResult[]> {\n const startTime = Date.now();\n const timings: Record<string, number> = {};\n const platformRoot = options.platformRoot ?? cwd;\n const projectRoot = options.projectRoot ?? cwd;\n const roots = { platformRoot, projectRoot };\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, roots);\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 // Platform discovery — workspace packages (dev mode) or node_modules\n // (installed mode). Always scanned at `platformRoot`.\n let workspace: DiscoveryResult[] = [];\n try {\n const wsStart = Date.now();\n workspace = await discoverWorkspace(platformRoot);\n timings.workspace = Date.now() - wsStart;\n log('info', `Discovered ${workspace.length} workspace packages with CLI manifests`);\n } catch (_err: unknown) {\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 const nmStart = Date.now();\n const installed = await discoverNodeModules(platformRoot);\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 // Project-local plugins (`.kb/plugins/<name>/packages/*-entry/`). Runs\n // unconditionally against projectRoot so installed and dev modes behave\n // identically. In dev mode projectRoot === platformRoot and the same\n // files may also surface through `discoverWorkspace` (via pnpm-workspace\n // globs); `deduplicateManifests` collapses the duplicates.\n const plStart = Date.now();\n const projectLocal = await discoverProjectLocalPlugins(projectRoot);\n timings.projectLocal = Date.now() - plStart;\n if (projectLocal.length > 0) {\n log('info', `Discovered ${projectLocal.length} project-local plugins`);\n }\n\n // Deduplicate (same package from multiple sources/scopes collapses to one,\n // platform wins on cross-scope collisions — see deduplicateManifests).\n const dedupStart = Date.now();\n const results = deduplicateManifests([...workspace, ...installed, ...projectLocal]);\n timings.deduplicate = Date.now() - dedupStart;\n\n // Save cache\n const saveStart = Date.now();\n await saveCache(cwd, results, roots);\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, FlagDefinition, RegisteredCommand } from './types';\nimport type { CommandRegistry } from './legacy-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: FlagDefinition, 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: CommandManifest): 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 logLevel = getLogLevel();\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: unknown) {\n const reason = error instanceof Error ? 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 if (logLevel === 'debug') {\n process.stderr.write(`[debug][preflight] skipped ${manifestId} (${result.source}): ${reason}\\n`);\n }\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: CommandRegistry,\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: unknown) {\n throw new Error(`Validation failed: ${err instanceof Error ? err.message : String(err)}`);\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.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._disposeHook = manifestModule.dispose as () => Promise<void>;\n }\n } catch (hookError: unknown) {\n const hookMsg = hookError instanceof Error ? hookError.message : String(hookError);\n log.debug(`Lifecycle hooks unavailable for ${manifest.id}: ${hookMsg}`);\n }\n\n // Use canonical key (group:id) for collision detection so that\n // agent:run and workflow:run are treated as distinct commands.\n const canonicalKey = manifest.group ? `${manifest.group}:${manifest.id}` : manifest.id;\n const existing = globalIds.get(canonicalKey);\n if (existing) {\n const collision = checkCollision(manifest, existing, result.source, namespace);\n if (collision.shouldShadow) {\n existing.shadowed = true;\n globalIds.set(canonicalKey, cmd);\n if (logLevel === 'info' || logLevel === 'debug') {\n log.info(`${canonicalKey} from ${result.source} shadows ${existing.source} version`);\n }\n } else {\n cmd.shadowed = true;\n if (logLevel === 'info' || logLevel === 'debug') {\n log.info(`${canonicalKey} from ${result.source} shadowed by ${existing.source} version`);\n }\n }\n } else {\n globalIds.set(canonicalKey, 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: unknown) {\n errors++;\n const reason = error instanceof Error ? 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: CommandRegistry, 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._disposeHook;\n if (disposeHook && typeof disposeHook === 'function') {\n disposePromises.push(\n Promise.resolve(disposeHook()).catch((err: unknown) => {\n const errMsg = err instanceof Error ? err.message : String(err);\n log.warn(`Dispose hook failed for ${cmd.manifest.id}: ${errMsg}`);\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: Record<string, unknown>,\n argv: string[],\n flags: Record<string, unknown>,\n): Promise<number> {\n if (!cmd.available) {\n const presenter = ctx.presenter as { json?: (data: unknown) => void } | undefined;\n if (presenter?.json) {\n 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 throw new Error(`Command ${registered.manifest.id} should be executed via plugin-executor, not via legacy run() path.`);\n },\n };\n}\n\n/**\n * Build canonical ID for a plugin command manifest.\n *\n * Format:\n * - 3-part: \"group:subgroup:id\" (e.g., \"marketplace:plugins:list\")\n * - 2-part: \"group:id\" (e.g., \"marketplace:list\")\n * - bare: \"id\" (fallback when no group)\n */\nfunction buildCanonicalId(manifest: RegisteredCommand['manifest']): string {\n const { id, group, subgroup } = manifest;\n if (group && subgroup) {\n return `${group}:${subgroup}:${id}`;\n }\n if (group) {\n return `${group}:${id}`;\n }\n return id;\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 // System commands (in-process): key = any registered name/alias\n private systemCommands = new Map<string, Command>();\n // Plugin commands: key = canonicalId only\n private pluginByCanonical = new Map<string, RegisteredCommand>();\n // Alias → canonicalId: covers all user-input variants that resolve to a plugin\n private pluginAliases = new Map<string, string>();\n\n // Legacy unified collection for backward compatibility (display/get)\n private byName = new Map<string, Command | CommandGroup>();\n private groups = new Map<string, CommandGroup>();\n // manifests: any key → RegisteredCommand (for listing/lookup; still stores multi-key for compat)\n private manifests = new Map<string, RegisteredCommand>();\n private partial = false;\n\n // ─── System command registration ────────────────────────────────────────\n\n register(cmd: Command): void {\n this.systemCommands.set(cmd.name, cmd);\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 this.systemCommands.set(cmd.name, cmd);\n const fullName = `${group.name} ${cmd.name}`;\n this.systemCommands.set(fullName, cmd);\n this.byName.set(fullName, cmd);\n for (const alias of cmd.aliases || []) {\n this.systemCommands.set(alias, cmd);\n this.byName.set(alias, cmd);\n }\n }\n\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 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 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 // ─── Plugin command registration ────────────────────────────────────────\n\n registerManifest(cmd: RegisteredCommand): void {\n const canonicalId = buildCanonicalId(cmd.manifest);\n\n // System commands ALWAYS win — check all variants of canonical\n const collisionKey = this._findSystemCollision(cmd.manifest, canonicalId);\n if (collisionKey) {\n console.warn(`[registry] Plugin command \"${canonicalId}\" collides with system command \"${collisionKey}\". System command takes priority.`);\n cmd.shadowed = true;\n }\n\n // Check alias 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 // Always store in manifests for listing (even shadowed)\n this.pluginByCanonical.set(canonicalId, cmd);\n this.manifests.set(canonicalId, cmd);\n this.manifests.set(cmd.manifest.id, cmd);\n\n if (cmd.shadowed) {\n return; // Don't register aliases or byName for shadowed commands\n }\n\n // Register all alias variants → canonicalId\n this._registerPluginAliases(cmd, canonicalId, collisionAliases);\n\n // Register in byName for display/get\n const commandAdapter = manifestToCommand(cmd);\n this.byName.set(canonicalId, commandAdapter);\n\n // Also register space-separated variants for legacy .get() calls\n const spaceCanonical = canonicalId.replace(/:/g, ' ');\n this.byName.set(spaceCanonical, commandAdapter);\n\n // Synthetic subgroups for help display\n this._registerSyntheticGroups(cmd, commandAdapter);\n }\n\n /**\n * Check whether any system command already owns the canonical id or its parts.\n * Returns the colliding key if found, null otherwise.\n */\n private _findSystemCollision(manifest: RegisteredCommand['manifest'], canonicalId: string): string | null {\n // Check canonical id (e.g. \"workflow:health\")\n if (this.systemCommands.has(canonicalId)) {return canonicalId;}\n // Check space variant of canonical (e.g. \"workflow health\")\n const space = canonicalId.replace(/:/g, ' ');\n if (this.systemCommands.has(space)) {return space;}\n // NOTE: bare manifest.id (e.g. \"health\") is NOT checked — a plugin command\n // like workflow:health should not collide with system command info:health\n // just because both have bare id \"health\".\n return null;\n }\n\n /**\n * Register all lookup aliases for a plugin command.\n *\n * Priority (what beats what) is handled in resolveToCanonical at query time.\n * Here we just build the mapping.\n *\n * Aliases registered:\n * - canonicalId itself (\"marketplace:plugins:list\")\n * - bare id (\"list\") ← low priority, may clash\n * - 2-part shorthand (\"marketplace:list\", \"marketplace list\")\n * - manifest.aliases[] (user-defined aliases, except collisions)\n */\n private _registerPluginAliases(\n cmd: RegisteredCommand,\n canonicalId: string,\n collisionAliases: Set<string>,\n ): void {\n const { id, group, subgroup } = cmd.manifest;\n\n const register = (key: string) => {\n if (!this.systemCommands.has(key) && !this.systemCommands.has(key.replace(/:/g, ' '))) {\n // Don't overwrite a more-specific canonical alias with a shorter one\n if (!this.pluginAliases.has(key)) {\n this.pluginAliases.set(key, canonicalId);\n this.manifests.set(key, cmd);\n }\n }\n };\n\n // Canonical itself\n this.pluginAliases.set(canonicalId, canonicalId);\n const spaceCanonical = canonicalId.replace(/:/g, ' ');\n this.pluginAliases.set(spaceCanonical, canonicalId);\n this.manifests.set(spaceCanonical, cmd);\n\n if (group && subgroup) {\n // 3-part: also register 2-part shorthand \"group:id\" and \"group id\" as fallback aliases\n const twoPartColon = `${group}:${id}`;\n const twoPartSpace = `${group} ${id}`;\n register(twoPartColon);\n register(twoPartSpace);\n this.manifests.set(twoPartColon, cmd);\n this.manifests.set(twoPartSpace, cmd);\n\n // Full group paths\n const fullPath = `${group} ${subgroup} ${id}`;\n this.pluginAliases.set(fullPath, canonicalId);\n this.manifests.set(fullPath, cmd);\n\n // Subgroup group key for get() lookup\n const colonPath = `${group}:${subgroup}:${id}`;\n this.pluginAliases.set(colonPath, canonicalId);\n this.manifests.set(colonPath, cmd);\n } else if (group) {\n const colonName = `${group}:${id}`;\n const spaceName = `${group} ${id}`;\n this.pluginAliases.set(colonName, canonicalId);\n this.pluginAliases.set(spaceName, canonicalId);\n this.manifests.set(colonName, cmd);\n this.manifests.set(spaceName, cmd);\n }\n\n // Bare id (lowest priority — only if no collision)\n register(id);\n\n // User-defined manifest aliases\n for (const alias of cmd.manifest.aliases || []) {\n if (!collisionAliases.has(alias)) {\n register(alias);\n }\n }\n }\n\n /**\n * Register synthetic subgroups for help display.\n */\n private _registerSyntheticGroups(cmd: RegisteredCommand, commandAdapter: Command): void {\n const { id, group, subgroup } = cmd.manifest;\n\n if (group && subgroup) {\n const subgroupKey = `${group} ${subgroup}`;\n if (!this.groups.has(subgroupKey)) {\n this.groups.set(subgroupKey, {\n name: subgroupKey,\n describe: 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\n // Also register 2-part in byName for display\n const twoPartSpace = `${group} ${id}`;\n if (!this.byName.has(twoPartSpace)) {\n this.byName.set(twoPartSpace, commandAdapter);\n }\n const twoPartColon = `${group}:${id}`;\n if (!this.byName.has(twoPartColon)) {\n this.byName.set(twoPartColon, commandAdapter);\n }\n\n // Full space path for byName\n const fullPath = `${group} ${subgroup} ${id}`;\n this.byName.set(fullPath, commandAdapter);\n } else if (group) {\n const fullName = `${group} ${id}`;\n const colonName = `${group}:${id}`;\n this.byName.set(fullName, commandAdapter);\n this.byName.set(colonName, commandAdapter);\n }\n }\n\n // ─── Resolution ──────────────────────────────────────────────────────────\n\n /**\n * Resolve any user input to its canonical plugin ID.\n *\n * Returns canonicalId if found in plugin aliases, undefined otherwise.\n */\n private resolveToCanonical(input: string): string | undefined {\n // Direct canonical match\n if (this.pluginAliases.has(input)) {\n return this.pluginAliases.get(input);\n }\n // Try with colon↔space conversion\n const converted = input.includes(':') ? input.replace(/:/g, ' ') : input.replace(/ /g, ':');\n if (this.pluginAliases.has(converted)) {\n return this.pluginAliases.get(converted);\n }\n return undefined;\n }\n\n // ─── Public API ──────────────────────────────────────────────────────────\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.pluginByCanonical.values()) {\n unique.add(cmd);\n }\n return Array.from(unique);\n }\n\n has(name: string): boolean {\n return this.byName.has(name) || this.pluginAliases.has(name);\n }\n\n /**\n * Get command with type information for secure routing.\n *\n * System commands ALWAYS win — checked first before any plugin lookup.\n * Returns type='system' for system commands (in-process execution).\n * Returns type='plugin' for plugin commands (subprocess execution).\n */\n getWithType(nameOrPath: string | string[]): CommandLookupResult | undefined {\n const normalized = typeof nameOrPath === 'string' ? nameOrPath : nameOrPath.join(' ');\n\n // ── 1. System commands always win ──────────────────────────────────────\n if (this.systemCommands.has(normalized)) {\n return { cmd: this.systemCommands.get(normalized)!, type: 'system' };\n }\n // Try colon variant for system commands\n const colonVariant = normalized.replace(/ /g, ':');\n if (this.systemCommands.has(colonVariant)) {\n return { cmd: this.systemCommands.get(colonVariant)!, type: 'system' };\n }\n // Check groups (always system)\n if (this.groups.has(normalized)) {\n return { cmd: this.groups.get(normalized)!, type: 'system' };\n }\n\n // ── 2. Plugin lookup via canonical resolution ──────────────────────────\n const canonicalId = this.resolveToCanonical(normalized);\n if (canonicalId) {\n const pluginCmd = this.pluginByCanonical.get(canonicalId);\n if (pluginCmd && !pluginCmd.shadowed) {\n const cmd = this.byName.get(canonicalId) ?? this.byName.get(normalized);\n if (cmd) {\n return { cmd, type: 'plugin' };\n }\n }\n }\n\n // ── 3. Fallback: legacy byName lookup (handles edge cases) ─────────────\n const cmd = this.get(nameOrPath);\n if (!cmd) {return undefined;}\n\n if ('commands' in cmd) {\n return { cmd, type: 'system' };\n }\n\n // Determine if it's a system or plugin command\n if (this.systemCommands.has(normalized) || this.systemCommands.has(colonVariant)) {\n return { cmd, type: 'system' };\n }\n\n // Check via manifest\n const manifestCmd = this.getManifestCommand(normalized);\n if (manifestCmd && !manifestCmd.shadowed) {\n return { cmd, type: 'plugin' };\n }\n\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 spaceKey = nameOrPath.replace(/:/g, ' ');\n if (this.byName.has(spaceKey)) {\n return this.byName.get(spaceKey);\n }\n // Try parts[0] group + rest for 2-part colon\n const parts = nameOrPath.split(':');\n if (parts.length === 2) {\n const spaceKey2 = parts.join(' ');\n if (this.byName.has(spaceKey2)) {\n return this.byName.get(spaceKey2);\n }\n }\n }\n }\n\n const key = Array.isArray(nameOrPath) ? nameOrPath.join(' ') : nameOrPath;\n if (this.byName.has(key)) {\n return this.byName.get(key);\n }\n\n if (Array.isArray(nameOrPath) && nameOrPath.length === 1 && nameOrPath[0]?.includes(':')) {\n if (this.byName.has(nameOrPath[0])) {\n return this.byName.get(nameOrPath[0]);\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 if (Array.isArray(nameOrPath) && nameOrPath.length >= 2) {\n const [groupPrefix, ...cmdParts] = nameOrPath;\n const cmdName = cmdParts.join(' ');\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 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 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 // Try canonical resolution\n const canonicalId = this.resolveToCanonical(idOrAlias);\n if (canonicalId) {\n return this.pluginByCanonical.get(canonicalId);\n }\n\n for (const cmd of this.pluginByCanonical.values()) {\n if (cmd.manifest.aliases?.includes(idOrAlias)) {\n return cmd;\n }\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 *\n * System commands ALWAYS take priority over plugin commands.\n */\nexport function findCommandWithType(nameOrPath: string | string[]): CommandLookupResult | undefined {\n return registry.getWithType(nameOrPath);\n}\n"]}
|