@kb-labs/cli-commands 2.93.0 → 2.94.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/path.ts","../src/registry/schema.ts","../src/registry/discover.ts","../src/registry/service.ts","../src/utils/generate-examples.ts","../src/commands/system/hello.ts","../src/commands/system/version.ts","../src/commands/system/health.ts","../src/commands/system/diag.ts","../src/commands/system/registry-diagnostics.ts","../src/registry/plugins-state.ts","../src/builtins/plugins-cache-clear.ts","../src/commands/system/docs-generate-cli-reference.ts","../src/commands/system/logs/logs-utils.ts","../src/commands/system/logs/logs-diagnose.ts","../src/commands/system/logs/logs-context.ts","../src/commands/system/logs/logs-summarize.ts","../src/commands/system/logs/logs-query.ts","../src/commands/system/logs/logs-search.ts","../src/commands/system/logs/logs-get.ts","../src/commands/system/logs/logs-stats.ts","../src/commands/system/auth/auth-login.ts","../src/commands/system/auth/auth-logout.ts","../src/commands/system/auth/auth-status.ts","../src/commands/system/auth/auth-create-service-account.ts","../src/commands/system/platform/sync.ts","../src/commands/system/groups.ts","../src/registry/availability.ts","../src/registry/register.ts","../src/utils/shutdown.ts","../src/utils/register.ts","../src/presentation/group-help.ts","../src/presentation/shared.ts","../src/presentation/global-help.ts","../src/presentation/product-help.ts","../src/presentation/manifest-help.ts","../src/presentation/registry-help.ts","../src/index.ts"],"names":["req","version","fs","parseYaml","exports","totalTime","sourceCounts","cmd","defineSystemCommand","platform","path","diag","getContextCwd","registry","createRegistry","result","log","CredentialsManager","__filename","__dirname","existsSync","discoverManifests","safeColors","marketplaceGroup","sideBorderBox","TimingTracker"],"mappings":"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","file":"index.js","sourcesContent":["export { toPosixPath } from \"@kb-labs/shared-cli-ui\";\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","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","/**\n * Generate command examples\n * Simple helper to format command examples for CLI commands\n */\n\nexport interface ExampleCase {\n flags: Record<string, unknown>;\n description?: string;\n}\n\nexport function generateExamples(\n commandName: string,\n productName: string,\n cases: ExampleCase[]\n): string[] {\n return cases.map(c => {\n const flagsStr = Object.entries(c.flags)\n .map(([k, v]) => {\n if (typeof v === 'boolean') {\n return v ? `--${k}` : '';\n }\n return `--${k}=${v}`;\n })\n .filter(Boolean)\n .join(' ');\n\n const cmd = `${productName} ${commandName}${flagsStr ? ' ' + flagsStr : ''}`;\n return c.description ? `${cmd} # ${c.description}` : cmd;\n });\n}\n","import { defineSystemCommand, type CommandResult } from '@kb-labs/shared-command-kit';\nimport { generateExamples } from '../../utils/generate-examples.js';\n\ntype HelloFlags = {\n json: { type: 'boolean'; description?: string };\n};\n\ntype HelloResult = CommandResult & {\n message: string;\n};\n\nexport const hello = defineSystemCommand<HelloFlags, HelloResult>({\n name: 'hello',\n description: 'Print Hello World',\n longDescription: 'Prints \"Hello World\" — a simple smoke-test for CLI functionality',\n category: 'info',\n examples: generateExamples('hello', 'kb', [\n { flags: {} },\n ]),\n flags: {\n json: { type: 'boolean', description: 'Output in JSON format' },\n },\n analytics: {\n command: 'hello',\n startEvent: 'HELLO_STARTED',\n finishEvent: 'HELLO_FINISHED',\n },\n async handler(ctx, _argv, flags) {\n const message = 'Hello World';\n\n ctx.platform?.logger?.info('Hello command executed');\n\n if (!flags.json) {\n ctx.ui?.write(`${message}\\n`);\n } else {\n ctx.ui?.json({ message, status: 'ready' });\n }\n\n return { ok: true, message };\n },\n});\n","import { defineSystemCommand, type CommandResult } from '@kb-labs/shared-command-kit';\nimport { generateExamples } from '../../utils/generate-examples';\n\ntype VersionFlags = {\n json: { type: 'boolean'; description?: string };\n};\n\ntype VersionResult = CommandResult & {\n version: string;\n nodeVersion: string;\n platform: string;\n};\n\nexport const version = defineSystemCommand<VersionFlags, VersionResult>({\n name: 'version',\n description: 'Show CLI version',\n longDescription: 'Displays the current version of the KB Labs CLI',\n category: 'info',\n // Also accessible as `kb version` (short form without group prefix)\n aliases: ['version'],\n examples: generateExamples('version', 'kb', [\n { flags: {} },\n ]),\n flags: {\n json: { type: 'boolean', description: 'Output in JSON format' },\n },\n analytics: {\n command: 'version',\n startEvent: 'VERSION_STARTED',\n finishEvent: 'VERSION_FINISHED',\n },\n async handler(ctx, argv, flags) {\n const cliCtx = ctx.hostContext?.host === 'cli' ? ctx.hostContext : undefined;\n const cliVersion = cliCtx?.cliVersion ?? process.env.CLI_VERSION ?? '0.0.0';\n const nodeVersion = process.version;\n const platform = `${process.platform} ${process.arch}`;\n\n ctx.platform?.logger?.info('Version command executed', {\n version: cliVersion,\n nodeVersion,\n platform\n });\n\n // Output via ctx.ui (pure PluginContextV3)\n if (!flags.json) {\n ctx.ui?.write(`KB Labs CLI v${cliVersion}\\n`);\n ctx.ui?.write(`Node: ${nodeVersion}\\n`);\n ctx.ui?.write(`Platform: ${platform}\\n`);\n } else {\n ctx.ui?.json({\n version: cliVersion,\n nodeVersion,\n platform,\n });\n }\n\n return {\n ok: true,\n version: cliVersion,\n nodeVersion,\n platform,\n };\n },\n});\n","import { createRegistry } from '@kb-labs/core-registry';\nimport { generateExamples } from '../../utils/generate-examples';\nimport { defineSystemCommand, type CommandResult } from '@kb-labs/shared-command-kit';\n\ntype HealthFlags = {\n json: { type: 'boolean'; description?: string };\n};\n\ntype HealthSnapshot = {\n status: string;\n version: { kbLabs?: string; cli?: string; rest?: string; git?: { sha: string; dirty?: boolean } };\n registry: { total: number; withRest: number; withStudio: number; errors: number; generatedAt: string; expiresAt?: string; partial?: boolean; stale?: boolean };\n uptimeSec: number;\n};\n\ntype HealthResult = CommandResult & {\n healthStatus: 'healthy' | 'degraded' | 'unhealthy';\n snapshot?: HealthSnapshot;\n};\n\nexport const health = defineSystemCommand<HealthFlags, HealthResult>({\n name: 'health',\n description: 'Report overall CLI health snapshot',\n longDescription: 'Shows the kb.health/1 snapshot shared with REST and Studio.',\n category: 'info',\n // Also accessible as `kb health` (short form without group prefix)\n aliases: ['health'],\n examples: generateExamples('health', 'kb', [\n { flags: {} },\n { flags: { json: true } },\n ]),\n flags: {\n json: { type: 'boolean', description: 'Output in JSON format' },\n },\n analytics: {\n command: 'health',\n startEvent: 'HEALTH_STARTED',\n finishEvent: 'HEALTH_FINISHED',\n },\n async handler(ctx, _argv, _flags) {\n const cliApi = await createRegistry({\n cache: { ttlMs: 5000 },\n });\n\n try {\n ctx.platform?.logger?.info('Health check started');\n\n const snapshot = await cliApi.getSystemHealth({\n uptimeSec: process.uptime(),\n version: { rest: 'n/a' },\n meta: { source: 'cli' },\n });\n\n ctx.platform?.logger?.info('Health check completed', { status: snapshot.status });\n\n return {\n ok: snapshot.status === 'healthy',\n status: snapshot.status === 'healthy' ? 'success' as const : 'warning' as const,\n healthStatus: (snapshot.status as HealthResult['healthStatus']) || 'unhealthy',\n snapshot: snapshot as HealthSnapshot,\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n ctx.platform?.logger?.error('Health check failed', error instanceof Error ? error : undefined, { error: message });\n\n return {\n ok: false,\n status: 'error' as const,\n healthStatus: 'degraded' as const,\n error: message,\n };\n } finally {\n await cliApi.dispose();\n }\n },\n // eslint-disable-next-line sonarjs/cognitive-complexity -- Complex health status formatting with nested conditions for different health states\n formatter(result, ctx, flags) {\n // Auto-handle JSON mode\n if (flags.json) {\n const jsonOutput = result.snapshot || {\n schema: 'kb.health/1',\n status: result.healthStatus,\n error: result.error,\n };\n console.log(JSON.stringify(jsonOutput, null, 2));\n } else {\n if (result.error) {\n ctx.ui.error('System Health', {\n sections: [\n {\n header: 'Status',\n items: [`Status: ${result.healthStatus}`, `Error: ${result.error}`],\n },\n ],\n });\n } else if (result.snapshot) {\n const snapshot = result.snapshot;\n const gitInfo = snapshot.version.git\n ? `${snapshot.version.git.sha}${snapshot.version.git.dirty ? ' (dirty)' : ''}`\n : 'n/a';\n\n const sections = [\n {\n header: 'Status',\n items: [\n `Status: ${result.healthStatus}`,\n `KB Labs: ${snapshot.version.kbLabs}`,\n `CLI: ${ctx.hostContext?.host === 'cli' ? ctx.hostContext.cliVersion : process.env.CLI_VERSION ?? '0.0.0'}`,\n `REST: ${snapshot.version.rest}`,\n `Git: ${gitInfo}`,\n ],\n },\n {\n header: 'Registry',\n items: [\n `Plugins: ${snapshot.registry.total} total (rest ${snapshot.registry.withRest}, studio ${snapshot.registry.withStudio})`,\n `Errors: ${snapshot.registry.errors}`,\n `Generated: ${snapshot.registry.generatedAt}`,\n `Expires: ${snapshot.registry.expiresAt ?? 'n/a'}`,\n `Partial: ${snapshot.registry.partial ? 'yes' : 'no'}`,\n `Stale: ${snapshot.registry.stale ? 'yes' : 'no'}`,\n ],\n },\n {\n header: 'System',\n items: [`Uptime: ${snapshot.uptimeSec}s`],\n },\n ];\n\n if (result.healthStatus === 'healthy') {\n ctx.ui.success('System Health', { sections });\n } else {\n ctx.ui.warn('System Health', { sections });\n }\n }\n }\n },\n});\n\n","/**\n * diag command - Unified diagnostics command combining all system checks\n */\n\nimport { defineSystemCommand } from '@kb-labs/shared-command-kit';\nimport { generateExamples } from '../../utils/generate-examples';\nimport { registry } from '../../registry/service';\nimport { discoverManifests } from '../../registry/discover';\nimport { readMarketplaceLock, DiagnosticCollector } from '@kb-labs/core-discovery';\nimport { promises as fs } from 'node:fs';\nimport path from 'node:path';\nimport { getContextCwd, safeColors, safeSymbols } from '@kb-labs/shared-cli-ui';\n\ntype DiagDetails = {\n category: string;\n status: 'ok' | 'warning' | 'error';\n message: string;\n details?: Record<string, unknown>;\n};\n\ntype DiagSummary = {\n total: number;\n ok: number;\n warnings: number;\n errors: number;\n};\n\ntype DiagResult = {\n ok: boolean;\n diagnostics: DiagDetails[];\n summary: DiagSummary;\n};\n\ntype DiagFlags = {\n json: { type: 'boolean'; description?: string };\n};\n\nexport const diag = defineSystemCommand<DiagFlags, DiagResult>({\n name: 'diag',\n description: 'Comprehensive system diagnostics (plugins, cache, environment, versions)',\n category: 'info',\n examples: generateExamples('diag', 'kb', [\n { flags: {} },\n { flags: { json: true } },\n ]),\n flags: {\n json: { type: 'boolean', description: 'Output in JSON format' },\n },\n analytics: {\n command: 'diag',\n startEvent: 'DIAG_STARTED',\n finishEvent: 'DIAG_FINISHED',\n },\n // eslint-disable-next-line sonarjs/cognitive-complexity -- Comprehensive diagnostic checks across multiple system components\n async handler(ctx, _argv, _flags) {\n const cwd = getContextCwd(ctx);\n const diagnostics: Array<{\n category: string;\n status: 'ok' | 'warning' | 'error';\n message: string;\n details?: Record<string, unknown>;\n }> = [];\n\n // 1. Environment check\n const nodeVersion = process.version;\n const cliVersion = process.env.CLI_VERSION || process.env.CLI_VERSION || '0.1.0';\n const platform = process.platform;\n const arch = process.arch;\n\n diagnostics.push({\n category: 'environment',\n status: 'ok',\n message: `Node ${nodeVersion}, CLI ${cliVersion}, ${platform}/${arch}`,\n details: { nodeVersion, cliVersion, platform, arch },\n });\n\n \n // 2. Plugin discovery check — respect KB_PLATFORM_ROOT so that in\n // installed mode (platform installed separately from project) we scan\n // the platform's node_modules, not the user's project. KB_PROJECT_ROOT\n // anchors project-scope plugin discovery under .kb/plugins/.\n try {\n const platformRoot = process.env.KB_PLATFORM_ROOT;\n const projectRoot = process.env.KB_PROJECT_ROOT;\n const discovered = await discoverManifests(cwd, false, { platformRoot, projectRoot });\n const manifests = registry.listManifests();\n \n const enabled = manifests.filter(m => m.available && !m.shadowed).length;\n const disabled = manifests.filter(m => !m.available).length;\n const shadowed = manifests.filter(m => m.shadowed).length;\n \n diagnostics.push({\n category: 'marketplace',\n status: disabled > 0 ? 'warning' : 'ok',\n message: `Found ${discovered.length} packages, ${enabled} enabled, ${disabled} unavailable, ${shadowed} shadowed`,\n details: {\n packages: discovered.length,\n enabled,\n disabled,\n shadowed,\n totalCommands: manifests.length,\n },\n });\n } catch (err: unknown) {\n const errMsg = err instanceof Error ? err.message : String(err);\n diagnostics.push({\n category: 'marketplace',\n status: 'error',\n message: `Discovery failed: ${errMsg}`,\n details: { error: errMsg },\n });\n }\n\n // 3. Cache check\n try {\n const cachePath = path.join(cwd, '.kb', 'cache', 'cli-manifests.json');\n const cacheExists = await fs.access(cachePath).then(() => true).catch(() => false);\n \n if (cacheExists) {\n const cache = JSON.parse(await fs.readFile(cachePath, 'utf8'));\n const age = Date.now() - (cache.timestamp || 0);\n const ageHours = Math.floor(age / (1000 * 60 * 60));\n \n diagnostics.push({\n category: 'cache',\n status: 'ok',\n message: `Cache exists, ${ageHours}h old, ${Object.keys(cache.packages || {}).length} packages cached`,\n details: {\n exists: true,\n ageHours,\n packages: Object.keys(cache.packages || {}).length,\n },\n });\n } else {\n diagnostics.push({\n category: 'cache',\n status: 'ok',\n message: 'No cache found (will be created on next discovery)',\n details: { exists: false },\n });\n }\n } catch (err: unknown) {\n const errMsg = err instanceof Error ? err.message : String(err);\n diagnostics.push({\n category: 'cache',\n status: 'warning',\n message: `Cache check failed: ${errMsg}`,\n details: { error: errMsg },\n });\n }\n\n // 4. Marketplace lock check\n try {\n const lock = await readMarketplaceLock(cwd, new DiagnosticCollector());\n if (lock) {\n const entries = Object.entries(lock.installed);\n const enabledCount = entries.filter(([, e]) => e.enabled !== false).length;\n const disabledCount = entries.length - enabledCount;\n diagnostics.push({\n category: 'marketplace-lock',\n status: 'ok',\n message: `${entries.length} installed (${enabledCount} enabled, ${disabledCount} disabled)`,\n details: { total: entries.length, enabled: enabledCount, disabled: disabledCount },\n });\n } else {\n diagnostics.push({\n category: 'marketplace-lock',\n status: 'warning',\n message: 'No marketplace.lock found — no plugins installed via marketplace',\n });\n }\n } catch (err: unknown) {\n const errMsg = err instanceof Error ? err.message : String(err);\n diagnostics.push({\n category: 'marketplace-lock',\n status: 'error',\n message: `Marketplace lock check failed: ${errMsg}`,\n details: { error: errMsg },\n });\n }\n\n // 5. Version compatibility check\n const versionIssues: Array<{ plugin: string; required: string; current: string }> = [];\n \n try {\n const manifests = registry.listManifests();\n for (const cmd of manifests) {\n const required = cmd.manifest.engine?.kbCli;\n if (required) {\n const requiredParts = required.replace('^', '').split('.');\n const currentParts = cliVersion.split('.');\n if (requiredParts[0] && currentParts[0]) {\n const requiredMajor = parseInt(requiredParts[0], 10);\n const currentMajor = parseInt(currentParts[0], 10);\n \n if (!isNaN(requiredMajor) && !isNaN(currentMajor) && currentMajor < requiredMajor) {\n versionIssues.push({\n plugin: cmd.manifest.package || cmd.manifest.group,\n required,\n current: cliVersion,\n });\n }\n }\n }\n }\n \n if (versionIssues.length > 0) {\n diagnostics.push({\n category: 'versions',\n status: 'warning',\n message: `${versionIssues.length} plugin(s) require newer CLI version`,\n details: { issues: versionIssues },\n });\n } else {\n diagnostics.push({\n category: 'versions',\n status: 'ok',\n message: 'All plugins compatible with current CLI version',\n details: { issues: [] },\n });\n }\n } catch (err: unknown) {\n const errMsg = err instanceof Error ? err.message : String(err);\n diagnostics.push({\n category: 'versions',\n status: 'error',\n message: `Version check failed: ${errMsg}`,\n details: { error: errMsg },\n });\n }\n\n const summary = {\n total: diagnostics.length,\n ok: diagnostics.filter((d) => d.status === 'ok').length,\n warnings: diagnostics.filter((d) => d.status === 'warning').length,\n errors: diagnostics.filter((d) => d.status === 'error').length,\n };\n\n ctx.platform?.logger?.info('Diag command completed', summary);\n\n // Return typed data\n return {\n ok: summary.errors === 0,\n diagnostics,\n summary,\n };\n },\n // eslint-disable-next-line sonarjs/cognitive-complexity -- Complex formatting logic for diagnostic output with multiple display modes\n formatter(result, ctx, flags) {\n // Auto-handle JSON mode\n if (flags.json) {\n console.log(JSON.stringify(result, null, 2));\n } else {\n // Build UI from result data\n const hasErrors = result.summary.errors > 0;\n const hasWarnings = result.summary.warnings > 0;\n\n // Summary items\n const summaryItems = [\n `${safeColors.bold('Total Checks')}: ${result.summary.total}`,\n `${safeColors.success('OK')}: ${result.summary.ok}`,\n `${safeColors.warning('Warnings')}: ${result.summary.warnings}`,\n `${safeColors.error('Errors')}: ${result.summary.errors}`,\n ];\n\n // Diagnostics details\n const diagItems: string[] = [];\n for (const diag of result.diagnostics) {\n const icon =\n diag.status === 'ok'\n ? safeSymbols.success\n : diag.status === 'warning'\n ? safeSymbols.warning\n : safeSymbols.error;\n const colorize =\n diag.status === 'ok'\n ? safeColors.success\n : diag.status === 'warning'\n ? safeColors.warning\n : safeColors.error;\n\n diagItems.push(`${icon} ${colorize(safeColors.bold(diag.category))}: ${diag.message}`);\n\n if (diag.status === 'warning' && Array.isArray(diag.details?.issues)) {\n for (const issue of diag.details.issues as Array<{ plugin: string; required: string; current: string }>) {\n diagItems.push(\n ` ${safeColors.warning(`→ ${issue.plugin}: requires ${issue.required}, found ${issue.current}`)}`,\n );\n }\n }\n }\n\n // Next steps\n const nextSteps: string[] = [];\n if (hasErrors) {\n nextSteps.push(`kb marketplace doctor ${safeColors.muted('Diagnose plugin issues')}`);\n }\n if (hasWarnings) {\n nextSteps.push(`kb marketplace list ${safeColors.muted('List all plugins')}`);\n }\n nextSteps.push(`kb diagnose ${safeColors.muted('Quick environment check')}`);\n\n // Output using ctx.ui based on status\n const sections = [\n {\n header: 'Summary',\n items: summaryItems,\n },\n {\n header: 'Details',\n items: diagItems,\n },\n {\n header: 'Next Steps',\n items: nextSteps,\n },\n ];\n\n if (hasErrors) {\n ctx.ui.error('System Diagnostics', { sections });\n } else if (hasWarnings) {\n ctx.ui.warn('System Diagnostics', { sections });\n } else {\n ctx.ui.success('System Diagnostics', { sections });\n }\n }\n },\n});\n\n","/**\n * registry:diagnostics command - Show detailed registry diagnostic report\n *\n * Runs a fresh discovery cycle and displays all diagnostic events\n * grouped by plugin, with severity, codes, and remediation hints.\n */\n\nimport { defineSystemCommand, type CommandResult } from '@kb-labs/shared-command-kit';\nimport { getContextCwd } from '@kb-labs/shared-cli-ui';\nimport {\n createRegistry,\n formatDiagnosticReport,\n type DiagnosticReport,\n} from '@kb-labs/core-registry';\n\ntype DiagnosticsFlags = {\n json: { type: 'boolean'; description?: string };\n refresh: { type: 'boolean'; description?: string };\n};\n\ntype DiagnosticsResult = CommandResult & {\n report: DiagnosticReport;\n};\n\nexport const registryDiagnostics = defineSystemCommand<DiagnosticsFlags, DiagnosticsResult>({\n name: 'diagnostics',\n description: 'Show registry diagnostic report',\n category: 'registry',\n examples: [],\n flags: {\n json: { type: 'boolean', description: 'Output in JSON format' },\n refresh: { type: 'boolean', description: 'Force fresh discovery (ignore cache)' },\n },\n analytics: {\n command: 'registry:diagnostics',\n startEvent: 'REGISTRY_DIAGNOSTICS_STARTED',\n finishEvent: 'REGISTRY_DIAGNOSTICS_FINISHED',\n },\n async handler(ctx, _argv, flags) {\n const cwd = getContextCwd(ctx);\n\n const registry = await createRegistry({ root: cwd });\n\n if (flags.refresh) {\n await registry.refresh();\n }\n\n const report = registry.getDiagnostics();\n\n await registry.dispose();\n\n return { ok: report.summary.errors === 0, report };\n },\n formatter(result, ctx, flags) {\n if (flags.json) {\n ctx.ui.info(JSON.stringify(result.report, null, 2));\n return;\n }\n\n const text = formatDiagnosticReport(result.report);\n ctx.ui.info(text);\n\n if (result.report.summary.errors > 0) {\n ctx.ui.error(`${result.report.summary.errors} error(s) found — see details above`);\n } else if (result.report.summary.warnings > 0) {\n ctx.ui.warn(`${result.report.summary.warnings} warning(s) — no blockers`);\n } else {\n ctx.ui.success('Registry is healthy — no issues found');\n }\n },\n});\n","/**\n * @kb-labs/cli-commands/registry\n * Plugin state management - read/write .kb/plugins.json\n */\n\nimport { promises as fs } from 'node:fs';\nimport path from 'node:path';\nimport { createHash } from 'node:crypto';\nimport { resetInProcCache } from './discover';\n\nexport interface PluginState {\n enabled: string[]; // Package names that are explicitly enabled\n disabled: string[]; // Package names that are explicitly disabled\n linked: string[]; // Linked plugin paths (for local dev)\n permissions: Record<string, string[]>; // Package -> permissions granted\n integrity: Record<string, string>; // Package -> SRI hash\n crashes: Record<string, number>; // Package -> crash count (for quarantine)\n lastUpdated: number;\n}\n\nconst DEFAULT_STATE: PluginState = {\n enabled: [],\n disabled: [],\n linked: [],\n permissions: {},\n integrity: {},\n crashes: {},\n lastUpdated: Date.now(),\n};\n\n/**\n * Get path to plugins.json\n */\nexport function getPluginsStatePath(cwd: string): string {\n return path.join(cwd, '.kb', 'plugins.json');\n}\n\n/**\n * Load plugin state from .kb/plugins.json\n */\nexport async function loadPluginsState(cwd: string): Promise<PluginState> {\n const statePath = getPluginsStatePath(cwd);\n \n try {\n const content = await fs.readFile(statePath, 'utf8');\n const state = JSON.parse(content) as Partial<PluginState>;\n \n // Merge with defaults\n return {\n ...DEFAULT_STATE,\n ...state,\n enabled: state.enabled || [],\n disabled: state.disabled || [],\n linked: state.linked || [],\n permissions: state.permissions || {},\n integrity: state.integrity || {},\n crashes: state.crashes || {},\n };\n } catch {\n // File doesn't exist, return defaults\n return { ...DEFAULT_STATE };\n }\n}\n\n/**\n * Save plugin state to .kb/plugins.json\n */\nexport async function savePluginsState(cwd: string, state: PluginState): Promise<void> {\n const statePath = getPluginsStatePath(cwd);\n const dir = path.dirname(statePath);\n \n await fs.mkdir(dir, { recursive: true });\n \n state.lastUpdated = Date.now();\n \n await fs.writeFile(statePath, JSON.stringify(state, null, 2), 'utf8');\n}\n\n/**\n * Check if plugin is enabled\n */\nexport function isPluginEnabled(state: PluginState, packageName: string, defaultEnabled: boolean = false): boolean {\n if (state.disabled.includes(packageName)) {\n return false;\n }\n if (state.enabled.includes(packageName)) {\n return true;\n }\n return defaultEnabled;\n}\n\n/**\n * Enable a plugin\n */\nexport async function enablePlugin(cwd: string, packageName: string): Promise<void> {\n const state = await loadPluginsState(cwd);\n \n if (!state.enabled.includes(packageName)) {\n state.enabled.push(packageName);\n }\n \n // Remove from disabled if present\n state.disabled = state.disabled.filter(p => p !== packageName);\n \n await savePluginsState(cwd, state);\n}\n\n/**\n * Disable a plugin\n */\nexport async function disablePlugin(cwd: string, packageName: string): Promise<void> {\n const state = await loadPluginsState(cwd);\n \n if (!state.disabled.includes(packageName)) {\n state.disabled.push(packageName);\n }\n \n // Remove from enabled if present\n state.enabled = state.enabled.filter(p => p !== packageName);\n \n await savePluginsState(cwd, state);\n}\n\n/**\n * Link a local plugin\n */\nexport async function linkPlugin(cwd: string, pluginPath: string): Promise<void> {\n const state = await loadPluginsState(cwd);\n const absPath = path.resolve(cwd, pluginPath);\n \n if (!state.linked.includes(absPath)) {\n state.linked.push(absPath);\n }\n \n await savePluginsState(cwd, state);\n}\n\n/**\n * Unlink a plugin\n */\nexport async function unlinkPlugin(cwd: string, pluginPath: string): Promise<void> {\n const state = await loadPluginsState(cwd);\n const absPath = path.resolve(cwd, pluginPath);\n \n state.linked = state.linked.filter(p => p !== absPath);\n \n await savePluginsState(cwd, state);\n}\n\n/**\n * Grant permissions to a plugin\n */\nexport async function grantPermissions(cwd: string, packageName: string, permissions: string[]): Promise<void> {\n const state = await loadPluginsState(cwd);\n \n if (!state.permissions[packageName]) {\n state.permissions[packageName] = [];\n }\n \n for (const perm of permissions) {\n if (!state.permissions[packageName].includes(perm)) {\n state.permissions[packageName].push(perm);\n }\n }\n \n await savePluginsState(cwd, state);\n}\n\n/**\n * Record a plugin crash (for quarantine)\n */\nexport async function recordCrash(cwd: string, packageName: string): Promise<void> {\n const state = await loadPluginsState(cwd);\n \n state.crashes[packageName] = (state.crashes[packageName] || 0) + 1;\n \n // Auto-disable if crashes exceed threshold\n const CRASH_THRESHOLD = 3;\n if (state.crashes[packageName] >= CRASH_THRESHOLD && !state.disabled.includes(packageName)) {\n state.disabled.push(packageName);\n }\n \n await savePluginsState(cwd, state);\n}\n\n/**\n * Compute SRI hash for a package\n */\nexport async function computePackageIntegrity(pkgRoot: string): Promise<string> {\n try {\n const pkgJsonPath = path.join(pkgRoot, 'package.json');\n const content = await fs.readFile(pkgJsonPath, 'utf8');\n const hash = createHash('sha256').update(content).digest('base64');\n return `sha256-${hash}`;\n } catch {\n return '';\n }\n}\n\n/**\n * Clear plugin cache\n */\nexport async function clearCache(cwd: string, options?: { deep?: boolean }): Promise<{ files: string[]; modules?: string[] }> {\n const cleared: string[] = [];\n\n // 1. Clear .kb/cache/ manifest/plugin files\n const cacheDir = path.join(cwd, '.kb', 'cache');\n try {\n const entries = await fs.readdir(cacheDir);\n for (const entry of entries) {\n if (entry.includes('manifest') || entry.includes('plugin')) {\n const entryPath = path.join(cacheDir, entry);\n await fs.unlink(entryPath);\n cleared.push(entry);\n }\n }\n } catch {\n // Cache dir doesn't exist\n }\n\n // 2. Clear .kb/marketplace.manifests.json (marketplace manifest cache)\n const manifestsCachePath = path.join(cwd, '.kb', 'marketplace.manifests.json');\n try {\n await fs.unlink(manifestsCachePath);\n cleared.push('marketplace.manifests.json');\n } catch {\n // File doesn't exist\n }\n\n // 3. Clear .kb/cache/cli-manifests.json (CLI discovery cache)\n const cliManifestsPath = path.join(cwd, '.kb', 'cache', 'cli-manifests.json');\n try {\n await fs.unlink(cliManifestsPath);\n if (!cleared.includes('cli-manifests.json')) {\n cleared.push('cli-manifests.json');\n }\n } catch {\n // File doesn't exist\n }\n\n // 4. Reset in-process discovery cache so the next discoverManifests() call in\n // the same process performs a fresh scan instead of serving stale results.\n resetInProcCache();\n\n // 5. Deep clearing: clear Node.js module cache for dynamic imports\n const modulesCleared: string[] = [];\n if (options?.deep) {\n try {\n const cache = require.cache;\n for (const key in cache) {\n if (key.includes('plugin') || key.includes('manifest') || key.includes('@kb-labs')) {\n delete cache[key];\n modulesCleared.push(key);\n }\n }\n } catch {\n // Module cache clearing failed (ESM context)\n }\n }\n\n return {\n files: cleared,\n ...(options?.deep ? { modules: modulesCleared } : {}),\n };\n}\n\n","import { defineSystemCommand, type CommandResult } from '@kb-labs/shared-command-kit';\nimport { clearCache } from '../registry/plugins-state';\nimport { getContextCwd } from '@kb-labs/shared-cli-ui';\n\ntype PluginsCacheClearFlags = {\n deep: { type: 'boolean'; description?: string };\n json: { type: 'boolean'; description?: string };\n};\n\ntype PluginsCacheClearResult = CommandResult & {\n action?: string;\n files?: string[];\n modules?: string[];\n count?: number;\n modulesCount?: number;\n};\n\nexport const pluginsCacheClear = defineSystemCommand<PluginsCacheClearFlags, PluginsCacheClearResult>({\n name: 'clear-cache',\n description: 'Clear CLI plugin discovery cache',\n category: 'marketplace',\n examples: ['kb marketplace clear-cache', 'kb marketplace clear-cache --deep'],\n flags: {\n deep: { type: 'boolean', description: 'Also clear Node.js module cache' },\n json: { type: 'boolean', description: 'Output in JSON format' },\n },\n analytics: {\n command: 'marketplace:clear-cache',\n startEvent: 'MARKETPLACE_CACHE_CLEAR_STARTED',\n finishEvent: 'MARKETPLACE_CACHE_CLEAR_FINISHED',\n },\n async handler(ctx, _argv, flags) {\n const deep = flags.deep;\n const cwd = getContextCwd(ctx);\n const result = await clearCache(cwd, { deep });\n\n ctx.platform?.logger?.info('Cache cleared', {\n filesCount: result.files.length,\n modulesCount: result.modules?.length || 0,\n deep,\n });\n\n // Output handling\n if (flags.json) {\n const jsonResult = {\n ok: true,\n action: 'cache:clear',\n files: result.files,\n modules: result.modules,\n count: result.files.length,\n modulesCount: result.modules?.length || 0,\n };\n console.log(JSON.stringify(jsonResult, null, 2));\n return jsonResult;\n }\n\n // Build structured output\n const files = result.files ?? [];\n const modules = result.modules ?? [];\n\n const sections: Array<{ header?: string; items: string[] }> = [];\n\n // Cache files section\n if (files.length > 0) {\n sections.push({\n header: 'Cache Files',\n items: files.map((f) => `✓ ${f}`),\n });\n } else {\n sections.push({\n items: ['No cache files found'],\n });\n }\n\n // Modules section (if deep mode)\n if (deep && modules.length > 0) {\n sections.push({\n header: 'Node Modules',\n items: [`Cleared ${modules.length} module(s) from cache`],\n });\n }\n\n // Summary section\n sections.push({\n header: 'Summary',\n items: [`Removed ${files.length} file(s)${deep ? ` and ${modules.length} module(s)` : ''}`],\n });\n\n ctx.ui.success('', {\n title: '🗑️ Cache Management',\n sections,\n });\n\n return {\n ok: true,\n action: 'cache:clear',\n files: result.files,\n modules: result.modules,\n count: result.files.length,\n modulesCount: result.modules?.length || 0,\n };\n },\n});\n","/**\n * docs:generate-cli-reference command - Generate CLI reference documentation\n */\n\nimport { defineSystemCommand, type CommandResult } from '@kb-labs/shared-command-kit';\nimport type { SectionContent } from '@kb-labs/shared-cli-ui';\nimport { generateExamples } from '../../utils/generate-examples';\nimport { registry } from '../../registry/service';\nimport { promises as fs } from 'node:fs';\nimport path from 'node:path';\nimport { getContextCwd } from '@kb-labs/shared-cli-ui';\n\ntype GenerateCliReferenceFlags = {\n output: { type: 'string'; description?: string };\n json: { type: 'boolean'; description?: string };\n};\n\ntype DocsGenerateResult = CommandResult & {\n message: string;\n sections: SectionContent[];\n json: { output: string; commands: number; groups: number; size: number };\n};\n\nexport const docsGenerateCliReference = defineSystemCommand<GenerateCliReferenceFlags, DocsGenerateResult>({\n name: 'generate-cli-reference',\n description: 'Generate CLI reference documentation from command registry',\n category: 'docs',\n examples: generateExamples('generate-cli-reference', 'docs', [\n { flags: {} },\n { flags: { output: './docs/CLI-REFERENCE.md' } },\n ]),\n flags: {\n output: { type: 'string', description: 'Output file path (default: CLI-REFERENCE.md)' },\n json: { type: 'boolean', description: 'Output in JSON format' },\n },\n analytics: {\n command: 'docs:generate-cli-reference',\n startEvent: 'DOCS_GENERATE_CLI_REFERENCE_STARTED',\n finishEvent: 'DOCS_GENERATE_CLI_REFERENCE_FINISHED',\n },\n // eslint-disable-next-line sonarjs/cognitive-complexity -- Complex markdown generation with nested loops for product groups, commands, and formatting\n async handler(ctx, argv, flags) {\n const cwd = getContextCwd(ctx);\n const outputPath = flags.output || path.join(cwd, 'CLI-REFERENCE.md');\n\n\n // Get all commands from registry\n const commands = registry.list();\n const productGroups = registry.listProductGroups();\n\n ctx.platform?.logger?.info('Generating CLI reference', {\n commands: commands.length,\n products: productGroups.length,\n output: outputPath,\n });\n\n // Group commands by category/group\n const groups = new Map<string, typeof commands>();\n for (const cmd of commands) {\n const group = cmd.category || 'other';\n if (!groups.has(group)) {\n groups.set(group, []);\n }\n groups.get(group)!.push(cmd);\n }\n\n\n // Generate markdown\n const lines: string[] = [];\n lines.push('# KB Labs CLI Reference\\n');\n lines.push(`Generated: ${new Date().toISOString()}\\n`);\n lines.push(`Total Commands: ${commands.length}\\n`);\n lines.push('---\\n');\n\n // Table of contents\n lines.push('## Table of Contents\\n');\n const sortedGroups = Array.from(groups.keys()).sort();\n for (const groupName of sortedGroups) {\n const cmds = groups.get(groupName)!;\n lines.push(`- [${groupName}](#${groupName.toLowerCase()}) (${cmds.length} commands)`);\n }\n lines.push('\\n---\\n');\n\n // Generate sections for each group\n for (const groupName of sortedGroups) {\n const cmds = groups.get(groupName)!.sort((a, b) => a.name.localeCompare(b.name));\n\n lines.push(`## ${groupName}\\n`);\n\n for (const cmd of cmds) {\n lines.push(`### \\`kb ${cmd.name}\\`\\n`);\n lines.push(`${cmd.describe || 'No description'}\\n`);\n\n if (cmd.longDescription) {\n lines.push(`${cmd.longDescription}\\n`);\n }\n\n if (cmd.flags && cmd.flags.length > 0) {\n lines.push('**Flags:**\\n');\n for (const flag of cmd.flags) {\n const alias = flag.alias ? ` (-${flag.alias})` : '';\n const required = flag.required ? ' **(required)**' : '';\n const defaultVal = flag.default !== undefined ? ` (default: \\`${flag.default}\\`)` : '';\n const choices = flag.choices ? ` (choices: ${flag.choices.map(c => `\\`${c}\\``).join(', ')})` : '';\n lines.push(`- \\`--${flag.name}\\`${alias}: ${flag.description || 'No description'}${required}${defaultVal}${choices}`);\n }\n lines.push('');\n }\n\n if (cmd.examples && cmd.examples.length > 0) {\n lines.push('**Examples:**\\n');\n lines.push('```bash');\n for (const example of cmd.examples) {\n lines.push(example);\n }\n lines.push('```\\n');\n }\n\n if (cmd.aliases && cmd.aliases.length > 0) {\n lines.push(`**Aliases:** ${cmd.aliases.map(a => `\\`${a}\\``).join(', ')}\\n`);\n }\n\n lines.push('---\\n');\n }\n }\n\n\n // Write to file\n const content = lines.join('\\n');\n await fs.writeFile(outputPath, content, 'utf-8');\n\n ctx.platform?.logger?.info('CLI reference generated', {\n path: outputPath,\n size: content.length,\n });\n\n const message = `CLI reference generated: ${outputPath}`;\n const sections = [\n {\n header: 'Summary',\n items: [\n `Commands: ${commands.length}`,\n `Groups: ${groups.size}`,\n `Output: ${outputPath}`,\n `Size: ${(content.length / 1024).toFixed(2)} KB`,\n ],\n },\n {\n header: 'Next Steps',\n items: [\n `cat ${outputPath}`,\n 'git add CLI-REFERENCE.md',\n 'git commit -m \"docs: update CLI reference\"',\n ],\n },\n ];\n\n return {\n ok: true,\n status: 'success',\n message,\n sections,\n json: {\n output: outputPath,\n commands: commands.length,\n groups: groups.size,\n size: content.length,\n },\n };\n },\n formatter(result, ctx, flags) {\n if (flags.json) {\n console.log(JSON.stringify(result.json, null, 2));\n } else {\n ctx.ui.success('CLI Reference Generator', { sections: result.sections });\n }\n },\n});\n","/**\n * @module logs-utils\n * Shared utilities for log CLI commands.\n * Parsing, formatting, correlation, diagnostics.\n */\n\nimport type { LogRecord, ILogReader } from '@kb-labs/core-platform';\n\n// ─── Relative Time Parsing ──────────────────────────────────────────────────\n\nconst TIME_UNITS: Record<string, number> = {\n s: 1_000,\n m: 60_000,\n min: 60_000,\n h: 3_600_000,\n d: 86_400_000,\n w: 604_800_000,\n};\n\n/**\n * Parse relative time string to absolute timestamp.\n * Supports: \"30s\", \"5m\", \"2h\", \"1d\", \"1w\", ISO dates, epoch ms.\n *\n * @returns timestamp in milliseconds\n */\nexport function parseRelativeTime(input: string): number {\n // Try relative format: \"1h\", \"30m\", \"2d\"\n const match = input.match(/^(\\d+)(s|m|min|h|d|w)$/);\n if (match) {\n const value = parseInt(match[1]!, 10);\n const unit = match[2]!;\n const ms = TIME_UNITS[unit];\n if (ms) {\n return Date.now() - value * ms;\n }\n }\n\n // Try epoch milliseconds\n const asNumber = Number(input);\n if (!isNaN(asNumber) && asNumber > 1_000_000_000_000) {\n return asNumber;\n }\n\n // Try ISO date string\n const date = new Date(input);\n if (!isNaN(date.getTime())) {\n return date.getTime();\n }\n\n throw new Error(\n `Invalid time format: \"${input}\". Use relative (1h, 30m, 2d) or ISO date.`,\n );\n}\n\n// ─── Log Formatting ─────────────────────────────────────────────────────────\n\n/** Map Pino numeric level to string (matches REST API) */\nfunction mapPinoLevel(level: unknown): string {\n if (typeof level === 'string') {return level;}\n if (typeof level !== 'number') {return 'info';}\n if (level <= 10) {return 'trace';}\n if (level <= 20) {return 'debug';}\n if (level <= 30) {return 'info';}\n if (level <= 40) {return 'warn';}\n if (level <= 50) {return 'error';}\n return 'fatal';\n}\n\nconst LEVEL_COLORS: Record<string, string> = {\n trace: '\\x1b[90m', // gray\n debug: '\\x1b[36m', // cyan\n info: '\\x1b[32m', // green\n warn: '\\x1b[33m', // yellow\n error: '\\x1b[31m', // red\n fatal: '\\x1b[35m', // magenta\n};\nconst RESET = '\\x1b[0m';\n\n/**\n * Format a LogRecord for human-readable CLI output.\n * [10:23:45] ERROR [rest] Connection refused to localhost:6333\n */\nexport function formatLogLine(record: LogRecord): string {\n const pinoLevel = record.fields.level;\n const level = typeof pinoLevel === 'number' ? mapPinoLevel(pinoLevel) : record.level;\n const time = new Date(record.timestamp).toISOString().slice(11, 19); // HH:mm:ss\n const levelPad = level.toUpperCase().padEnd(5);\n const color = LEVEL_COLORS[level] ?? '';\n const source = record.source ? ` [${record.source}]` : '';\n const msg = typeof record.message === 'string' ? record.message : JSON.stringify(record.message);\n\n return `${color}[${time}] ${levelPad}${RESET}${source} ${msg}`;\n}\n\n/**\n * Format a LogRecord for JSON output (clean ISO dates, flat structure).\n */\nexport function formatLogJson(record: LogRecord): object {\n const pinoLevel = record.fields.level;\n const level = typeof pinoLevel === 'number' ? mapPinoLevel(pinoLevel) : record.level;\n const msg = typeof record.message === 'string' ? record.message : JSON.stringify(record.message);\n const { level: _level, time: _time, ...restFields } = record.fields;\n\n return {\n id: record.id,\n time: new Date(record.timestamp).toISOString(),\n level,\n msg,\n source: record.source,\n ...restFields,\n };\n}\n\n// ─── Correlation ────────────────────────────────────────────────────────────\n\nexport interface CorrelationKeys {\n requestId?: string;\n traceId?: string;\n executionId?: string;\n sessionId?: string;\n}\n\n/** Extract correlation keys from LogRecord.fields (matches REST API pattern) */\nexport function extractCorrelationKeys(record: LogRecord): CorrelationKeys {\n return {\n requestId: (record.fields.requestId ?? record.fields.reqId) as string | undefined,\n traceId: record.fields.traceId as string | undefined,\n executionId: record.fields.executionId as string | undefined,\n sessionId: record.fields.sessionId as string | undefined,\n };\n}\n\n/**\n * Find logs related to the target log by correlation keys.\n * Strategy (from REST API):\n * 1. Query ±windowMs around target timestamp\n * 2. Match by any shared correlation key\n * 3. Fallback: same source in time window\n */\nexport async function findRelatedLogs(\n reader: ILogReader,\n target: LogRecord,\n windowMs: number = 60_000,\n): Promise<LogRecord[]> {\n const keys = extractCorrelationKeys(target);\n\n // Strategy 1: correlation keys\n if (keys.requestId || keys.traceId || keys.executionId) {\n const result = await reader.query(\n { from: target.timestamp - windowMs, to: target.timestamp + windowMs },\n { limit: 1000 },\n );\n\n const related = result.logs.filter((log) => {\n if (log.id === target.id) {return false;}\n const logKeys = extractCorrelationKeys(log);\n return (\n (keys.requestId && logKeys.requestId === keys.requestId) ||\n (keys.traceId && logKeys.traceId === keys.traceId) ||\n (keys.executionId && logKeys.executionId === keys.executionId) ||\n (keys.sessionId && logKeys.sessionId === keys.sessionId)\n );\n });\n\n if (related.length > 0) {\n return related.sort((a, b) => a.timestamp - b.timestamp);\n }\n }\n\n // Strategy 2: fallback to same source + time window\n const result = await reader.query(\n { source: target.source, from: target.timestamp - windowMs, to: target.timestamp + windowMs },\n { limit: 50 },\n );\n\n return result.logs\n .filter((log) => log.id !== target.id)\n .sort((a, b) => a.timestamp - b.timestamp);\n}\n\n// ─── Diagnostics ────────────────────────────────────────────────────────────\n\nexport interface TopError {\n message: string;\n count: number;\n source: string;\n firstSeen: string;\n lastSeen: string;\n}\n\nexport interface SourceBreakdown {\n errors: number;\n warnings: number;\n}\n\nexport interface LogDiagnostics {\n total: number;\n errors: number;\n warnings: number;\n sources: string[];\n topErrors: TopError[];\n bySource: Record<string, SourceBreakdown>;\n recentErrors: object[];\n}\n\n/**\n * Compute diagnostic statistics from a set of logs.\n * Used by `logs diagnose` for the structured report.\n */\nexport function computeLogStats(logs: LogRecord[]): LogDiagnostics {\n const bySource: Record<string, SourceBreakdown> = {};\n const errorMessages = new Map<string, { count: number; source: string; firstSeen: number; lastSeen: number }>();\n let errors = 0;\n let warnings = 0;\n\n for (const log of logs) {\n const level = typeof log.fields.level === 'number' ? mapPinoLevel(log.fields.level) : log.level;\n const source = log.source || 'unknown';\n\n if (!bySource[source]) {\n bySource[source] = { errors: 0, warnings: 0 };\n }\n\n if (level === 'error' || level === 'fatal') {\n errors++;\n bySource[source]!.errors++;\n\n const msg = typeof log.message === 'string' ? log.message : JSON.stringify(log.message);\n const existing = errorMessages.get(msg);\n if (existing) {\n existing.count++;\n if (log.timestamp < existing.firstSeen) {existing.firstSeen = log.timestamp;}\n if (log.timestamp > existing.lastSeen) {existing.lastSeen = log.timestamp;}\n } else {\n errorMessages.set(msg, { count: 1, source, firstSeen: log.timestamp, lastSeen: log.timestamp });\n }\n } else if (level === 'warn') {\n warnings++;\n bySource[source]!.warnings++;\n }\n }\n\n const topErrors: TopError[] = Array.from(errorMessages.entries())\n .map(([message, data]) => ({\n message,\n count: data.count,\n source: data.source,\n firstSeen: new Date(data.firstSeen).toISOString(),\n lastSeen: new Date(data.lastSeen).toISOString(),\n }))\n .sort((a, b) => b.count - a.count)\n .slice(0, 10);\n\n // Get last 10 error logs\n const recentErrors = logs\n .filter((l) => {\n const level = typeof l.fields.level === 'number' ? mapPinoLevel(l.fields.level) : l.level;\n return level === 'error' || level === 'fatal';\n })\n .slice(-10)\n .map(formatLogJson);\n\n return {\n total: logs.length,\n errors,\n warnings,\n sources: Object.keys(bySource),\n topErrors,\n bySource,\n recentErrors,\n };\n}\n","/**\n * logs diagnose — \"What went wrong?\" Automated error analysis.\n * Agent-first command: single call gives a full diagnostic report.\n */\n\nimport { defineSystemCommand, type CommandResult } from '@kb-labs/shared-command-kit';\nimport { generateExamples } from '../../../utils/generate-examples';\nimport { platform } from '@kb-labs/core-runtime';\nimport { parseRelativeTime, computeLogStats, formatLogLine } from './logs-utils';\nimport type { TopError, SourceBreakdown } from './logs-utils';\nimport type { LogQuery, LogRecord } from '@kb-labs/core-platform';\n\ntype Flags = {\n from: { type: 'string'; description?: string };\n source: { type: 'string'; description?: string };\n json: { type: 'boolean'; description?: string };\n};\n\ninterface DiagnoseResult extends CommandResult {\n period?: { from: string; to: string };\n summary?: { total: number; errors: number; warnings: number; sources: string[] };\n topErrors?: TopError[];\n bySource?: Record<string, SourceBreakdown>;\n recentErrors?: object[];\n _raw?: LogRecord[];\n}\n\nexport const logsDiagnose = defineSystemCommand<Flags, DiagnoseResult>({\n name: 'diagnose',\n description: 'Analyze recent errors and warnings (agent-friendly diagnostic report)',\n category: 'logs',\n examples: generateExamples('logs diagnose', 'kb', [\n { flags: { json: true }, description: 'Full diagnostic in JSON' },\n { flags: { from: '\"30m\"', source: 'rest' }, description: 'REST errors in last 30m' },\n ]),\n flags: {\n from: { type: 'string', description: 'Time period (default: \"1h\"). Relative: 1h, 30m, 2d' },\n source: { type: 'string', description: 'Filter by source (rest, workflow, cli)' },\n json: { type: 'boolean', description: 'Output in JSON format' },\n },\n async handler(_ctx, _argv, flags) {\n const reader = platform.logs;\n if (!reader) {\n return { ok: false, error: 'Log reader not available. Ensure platform is initialized.' };\n }\n\n const fromTs = flags.from ? parseRelativeTime(flags.from) : Date.now() - 3_600_000;\n const toTs = Date.now();\n\n const query: LogQuery = {\n from: fromTs,\n to: toTs,\n };\n if (flags.source) {query.source = flags.source;}\n\n // Fetch all logs in period (up to 5000 for analysis)\n const result = await reader.query(query, { limit: 5000, sortOrder: 'desc' });\n const diagnostics = computeLogStats(result.logs);\n\n return {\n ok: true,\n period: {\n from: new Date(fromTs).toISOString(),\n to: new Date(toTs).toISOString(),\n },\n summary: {\n total: diagnostics.total,\n errors: diagnostics.errors,\n warnings: diagnostics.warnings,\n sources: diagnostics.sources,\n },\n topErrors: diagnostics.topErrors,\n bySource: diagnostics.bySource,\n recentErrors: diagnostics.recentErrors,\n _raw: result.logs,\n };\n },\n \n formatter(result, ctx, flags) {\n if (flags.json) {\n const { _raw, ...jsonResult } = result;\n ctx.ui.json(jsonResult);\n return;\n }\n\n if (!result.ok) {\n ctx.ui.error('Log Diagnose', { sections: [{ header: 'Error', items: [result.error ?? 'Unknown'] }] });\n return;\n }\n\n const { summary, topErrors, bySource, period } = result;\n\n // Summary\n const summaryItems = [\n `Period: ${period?.from ?? '?'} to ${period?.to ?? '?'}`,\n `Total logs: ${summary?.total ?? 0}`,\n `Errors: ${summary?.errors ?? 0}`,\n `Warnings: ${summary?.warnings ?? 0}`,\n `Sources: ${summary?.sources.join(', ') || 'none'}`,\n ];\n\n const sections: Array<{ header: string; items: string[] }> = [\n { header: 'Summary', items: summaryItems },\n ];\n\n // Top errors\n if ((topErrors?.length ?? 0) > 0) {\n sections.push({\n header: 'Top Errors',\n items: (topErrors ?? []).slice(0, 5).map(\n (e, i) => `${i + 1}. \"${e.message}\" (${e.count}x) [${e.source}]`,\n ),\n });\n }\n\n // By source\n const sourceItems: string[] = [];\n for (const [src, breakdown] of Object.entries(bySource ?? {})) {\n if (breakdown.errors > 0 || breakdown.warnings > 0) {\n sourceItems.push(`${src}: ${breakdown.errors} errors, ${breakdown.warnings} warnings`);\n }\n }\n if (sourceItems.length > 0) {\n sections.push({ header: 'By Source', items: sourceItems });\n }\n\n if ((summary?.errors ?? 0) === 0 && (summary?.warnings ?? 0) === 0) {\n ctx.ui.success('Log Diagnosis', { sections });\n } else if ((summary?.errors ?? 0) > 0) {\n ctx.ui.error('Log Diagnosis', { sections });\n } else {\n ctx.ui.warn('Log Diagnosis', { sections });\n }\n\n // Recent errors\n const raw = result._raw ?? [];\n const errorLogs = raw\n .filter((l) => l.level === 'error' || l.level === 'fatal')\n .slice(0, 5);\n\n if (errorLogs.length > 0) {\n ctx.ui.write('\\nRecent Errors:\\n');\n for (const log of errorLogs) {\n ctx.ui.write(' ' + formatLogLine(log) + '\\n');\n }\n }\n },\n});\n","/**\n * logs context — Show full timeline for an execution/trace/request.\n * Agent-first: \"What happened in this workflow run?\"\n */\n\nimport { defineSystemCommand, type CommandResult } from '@kb-labs/shared-command-kit';\nimport { generateExamples } from '../../../utils/generate-examples';\nimport { platform } from '@kb-labs/core-runtime';\nimport { formatLogLine, formatLogJson, extractCorrelationKeys } from './logs-utils';\nimport type { LogRecord } from '@kb-labs/core-platform';\n\ntype Flags = {\n 'execution-id': { type: 'string'; description?: string };\n 'trace-id': { type: 'string'; description?: string };\n 'request-id': { type: 'string'; description?: string };\n limit: { type: 'number'; description?: string };\n json: { type: 'boolean'; description?: string };\n};\n\nexport const logsContext = defineSystemCommand<Flags, CommandResult>({\n name: 'context',\n description: 'Show full timeline for an execution, trace, or request',\n category: 'logs',\n examples: generateExamples('logs context', 'kb', [\n { flags: { 'execution-id': '\"exec-abc123\"', json: true }, description: 'Workflow execution timeline' },\n { flags: { 'trace-id': '\"trace-xyz\"' }, description: 'Distributed trace timeline' },\n ]),\n flags: {\n 'execution-id': { type: 'string', description: 'Filter by execution ID' },\n 'trace-id': { type: 'string', description: 'Filter by trace ID' },\n 'request-id': { type: 'string', description: 'Filter by request ID' },\n limit: { type: 'number', description: 'Max records (default: 200)' },\n json: { type: 'boolean', description: 'Output in JSON format' },\n },\n async handler(_ctx, _argv, flags) {\n const reader = platform.logs;\n if (!reader) {\n return { ok: false, error: 'Log reader not available. Ensure platform is initialized.' };\n }\n\n const executionId = flags['execution-id'];\n const traceId = flags['trace-id'];\n const requestId = flags['request-id'];\n\n if (!executionId && !traceId && !requestId) {\n return {\n ok: false,\n error: 'At least one correlation key required: --execution-id, --trace-id, or --request-id',\n };\n }\n\n // Fetch a broad set of recent logs (last 24h, up to 5000)\n const maxLogs = flags.limit ?? 200;\n const result = await reader.query(\n { from: Date.now() - 86_400_000 },\n { limit: 5000, sortOrder: 'asc' },\n );\n\n // Filter by correlation key in memory\n const matched = result.logs.filter((log) => {\n const keys = extractCorrelationKeys(log);\n if (executionId && keys.executionId === executionId) {return true;}\n if (traceId && keys.traceId === traceId) {return true;}\n if (requestId && keys.requestId === requestId) {return true;}\n return false;\n }).slice(0, maxLogs);\n\n // Compute timeline metadata\n const firstTs = matched.length > 0 ? matched[0]!.timestamp : 0;\n const lastTs = matched.length > 0 ? matched[matched.length - 1]!.timestamp : 0;\n\n const levelCounts: Record<string, number> = {};\n const sourceCounts: Record<string, number> = {};\n for (const log of matched) {\n levelCounts[log.level] = (levelCounts[log.level] || 0) + 1;\n sourceCounts[log.source] = (sourceCounts[log.source] || 0) + 1;\n }\n\n return {\n ok: true,\n correlationKey: executionId ? { executionId } : traceId ? { traceId } : { requestId },\n timeline: {\n total: matched.length,\n from: firstTs ? new Date(firstTs).toISOString() : null,\n to: lastTs ? new Date(lastTs).toISOString() : null,\n durationMs: lastTs - firstTs,\n },\n byLevel: levelCounts,\n bySource: sourceCounts,\n logs: matched.map(formatLogJson),\n _raw: matched,\n };\n },\n formatter(result, ctx, flags) {\n type LogContextResult = CommandResult & {\n correlationKey?: Record<string, unknown>;\n timeline?: { total: number; from: string | null; to: string | null; durationMs: number };\n byLevel?: Record<string, number>;\n bySource?: Record<string, number>;\n logs?: unknown[];\n _raw?: LogRecord[];\n };\n\n const data = result as LogContextResult;\n\n if (flags.json) {\n const { _raw: _ignored, ...jsonResult } = data;\n ctx.ui.json(jsonResult);\n return;\n }\n\n if (!result.ok) {\n ctx.ui.error('Log Context', { sections: [{ header: 'Error', items: [result.error ?? 'Unknown'] }] });\n return;\n }\n\n const { timeline, correlationKey, byLevel } = data;\n const raw = data._raw ?? [];\n\n // Header\n const keyStr = correlationKey ? Object.entries(correlationKey).map(([k, v]) => `${k}=${v}`).join(', ') : '';\n const durationStr = timeline && timeline.durationMs > 0 ? `${timeline.durationMs}ms` : 'instant';\n\n ctx.ui.success('Execution Context', {\n sections: [{\n header: `${keyStr}`,\n items: [\n `Total events: ${timeline?.total ?? 0}`,\n `Duration: ${durationStr}`,\n `Time: ${timeline?.from ?? 'N/A'} → ${timeline?.to ?? 'N/A'}`,\n `Levels: ${byLevel ? Object.entries(byLevel).map(([k, v]) => `${k}=${v}`).join(', ') : ''}`,\n ],\n }],\n });\n\n // Timeline\n if (raw.length > 0) {\n ctx.ui.write('\\nTimeline:\\n');\n for (const log of raw) {\n ctx.ui.write(' ' + formatLogLine(log) + '\\n');\n }\n } else {\n ctx.ui.write('\\nNo logs found for this correlation key.\\n');\n }\n },\n});\n","/**\n * logs summarize — AI-powered log analysis.\n * Agent-first: ask a natural-language question about logs.\n */\n\nimport { defineSystemCommand, type CommandResult } from '@kb-labs/shared-command-kit';\nimport { generateExamples } from '../../../utils/generate-examples';\nimport { platform } from '@kb-labs/core-runtime';\nimport { parseRelativeTime, computeLogStats } from './logs-utils';\nimport type { LogQuery, LogRecord, LogLevel } from '@kb-labs/core-platform';\n\ninterface LogSummarizeResult extends CommandResult {\n question?: string;\n summary?: string | null;\n llmUsed?: boolean;\n stats?: {\n total: number;\n errors: number;\n warnings: number;\n sources: string[];\n topErrors: { message: string; count: number; source: string }[];\n };\n}\n\ntype Flags = {\n from: { type: 'string'; description?: string };\n to: { type: 'string'; description?: string };\n level: { type: 'string'; description?: string };\n source: { type: 'string'; description?: string };\n json: { type: 'boolean'; description?: string };\n};\n\n/**\n * Build LLM prompt for log summarization (matches REST API pattern).\n */\nfunction buildPrompt(question: string, logs: LogRecord[], stats: ReturnType<typeof computeLogStats>): string {\n let prompt = `You are analyzing application logs. User question: \"${question}\"\\n\\n`;\n\n prompt += `Statistics:\\n`;\n prompt += `Total logs: ${stats.total}\\n`;\n prompt += `Errors: ${stats.errors}\\n`;\n prompt += `Warnings: ${stats.warnings}\\n`;\n prompt += `Sources: ${stats.sources.join(', ')}\\n`;\n\n if (stats.topErrors.length > 0) {\n prompt += `\\nTop Errors:\\n`;\n for (const [idx, err] of stats.topErrors.slice(0, 5).entries()) {\n prompt += `${idx + 1}. \"${err.message}\" (${err.count} occurrences) [${err.source}]\\n`;\n }\n }\n\n // Add recent log entries (limit to 100)\n const recent = logs.slice(-100);\n prompt += `\\nLog Entries (${recent.length} most recent):\\n`;\n for (const log of recent) {\n const time = new Date(log.timestamp).toISOString();\n const msg = typeof log.message === 'string' ? log.message : JSON.stringify(log.message);\n prompt += `[${time}] ${log.level.toUpperCase()} [${log.source}]: ${msg}\\n`;\n\n if (log.fields.err && (log.fields.err as { stack?: string }).stack) {\n const stack = String((log.fields.err as { stack?: string }).stack).split('\\n').slice(0, 3).join('\\n ');\n prompt += ` stack: ${stack}\\n`;\n }\n }\n\n prompt += `\\nInstructions:\\n`;\n prompt += `Provide a clear, concise summary answering the user's question. Focus on:\\n`;\n prompt += `1. What happened (timeline of events)\\n`;\n prompt += `2. Root causes if errors are present\\n`;\n prompt += `3. Patterns or trends\\n`;\n prompt += `4. Actionable recommendations if applicable\\n`;\n prompt += `Keep under 300 words. Plain text, no markdown.\\n`;\n\n return prompt;\n}\n\n/**\n * Generate fallback summary without LLM.\n */\nfunction fallbackSummary(stats: ReturnType<typeof computeLogStats>): string {\n let summary = `Log Summary (statistical, LLM unavailable)\\n\\n`;\n summary += `Total: ${stats.total} logs (${stats.errors} errors, ${stats.warnings} warnings)\\n`;\n\n if (stats.sources.length > 0) {\n summary += `\\nBy Source:\\n`;\n for (const [source, breakdown] of Object.entries(stats.bySource)) {\n summary += ` ${source}: ${breakdown.errors} errors, ${breakdown.warnings} warnings\\n`;\n }\n }\n\n if (stats.topErrors.length > 0) {\n summary += `\\nTop Errors:\\n`;\n for (const [idx, err] of stats.topErrors.slice(0, 5).entries()) {\n summary += ` ${idx + 1}. \"${err.message}\" (${err.count}x) [${err.source}]\\n`;\n }\n }\n\n return summary;\n}\n\nexport const logsSummarize = defineSystemCommand<Flags, LogSummarizeResult>({\n name: 'summarize',\n description: 'AI-powered log analysis — ask a question about your logs',\n category: 'logs',\n examples: generateExamples('logs summarize', 'kb', [\n { flags: { json: true }, description: '\"What errors happened in the last hour?\"' },\n { flags: { from: '\"30m\"', source: 'rest' }, description: '\"Why is the REST API failing?\"' },\n ]),\n flags: {\n from: { type: 'string', description: 'Start time (default: \"1h\"). Relative: 1h, 30m, 2d' },\n to: { type: 'string', description: 'End time' },\n level: { type: 'string', description: 'Filter by level' },\n source: { type: 'string', description: 'Filter by source' },\n json: { type: 'boolean', description: 'Output in JSON format' },\n },\n async handler(_ctx, argv, flags) {\n const reader = platform.logs;\n if (!reader) {\n return { ok: false, error: 'Log reader not available. Ensure platform is initialized.' };\n }\n\n const question = argv[0] || 'What happened recently? Summarize errors and notable events.';\n\n const fromTs = flags.from ? parseRelativeTime(flags.from) : Date.now() - 3_600_000;\n const query: LogQuery = { from: fromTs };\n if (flags.to) {query.to = parseRelativeTime(flags.to);}\n if (flags.level) {query.level = flags.level as LogLevel;}\n if (flags.source) {query.source = flags.source;}\n\n const result = await reader.query(query, { limit: 1000, sortOrder: 'desc' });\n const stats = computeLogStats(result.logs);\n\n // Try AI summarization\n let aiSummary: string | null = null;\n let llmUsed = false;\n\n if (platform.llm) {\n try {\n const prompt = buildPrompt(question, result.logs, stats);\n const response = await platform.llm.complete(prompt, {\n temperature: 0.7,\n maxTokens: 1000,\n systemPrompt: 'You are a technical log analysis assistant. Provide clear, actionable insights based on application logs.',\n });\n aiSummary = response.content.trim();\n llmUsed = true;\n } catch {\n // Graceful fallback\n aiSummary = fallbackSummary(stats);\n }\n } else {\n aiSummary = fallbackSummary(stats);\n }\n\n return {\n ok: true,\n question,\n summary: aiSummary,\n llmUsed,\n stats: {\n total: stats.total,\n errors: stats.errors,\n warnings: stats.warnings,\n sources: stats.sources,\n topErrors: stats.topErrors,\n },\n };\n },\n formatter(result, ctx, flags) {\n if (flags.json) {\n ctx.ui.json(result);\n return;\n }\n\n if (!result.ok) {\n ctx.ui.error('Log Summarize', { sections: [{ header: 'Error', items: [result.error ?? 'Unknown'] }] });\n return;\n }\n\n ctx.ui.write(`Question: ${result.question}\\n`);\n ctx.ui.write(`${result.llmUsed ? '(AI-powered)' : '(Statistical fallback)'}\\n\\n`);\n ctx.ui.write((result.summary ?? '') + '\\n');\n },\n});\n","/**\n * logs query — Query logs with filters and pagination\n */\n\nimport { defineSystemCommand, type CommandResult } from '@kb-labs/shared-command-kit';\nimport { generateExamples } from '../../../utils/generate-examples';\nimport { platform } from '@kb-labs/core-runtime';\nimport type { LogQuery, LogRecord, LogLevel } from '@kb-labs/core-platform';\nimport { parseRelativeTime, formatLogLine, formatLogJson } from './logs-utils';\n\ninterface LogQueryResult extends CommandResult {\n logs?: ReturnType<typeof formatLogJson>[];\n total?: number;\n hasMore?: boolean;\n source?: string;\n _raw?: LogRecord[];\n}\n\ntype Flags = {\n level: { type: 'string'; description?: string };\n source: { type: 'string'; description?: string };\n from: { type: 'string'; description?: string };\n to: { type: 'string'; description?: string };\n limit: { type: 'number'; description?: string };\n offset: { type: 'number'; description?: string };\n json: { type: 'boolean'; description?: string };\n};\n\nexport const logsQuery = defineSystemCommand<Flags, LogQueryResult>({\n name: 'query',\n description: 'Query logs with filters (level, source, time range)',\n category: 'logs',\n examples: generateExamples('logs query', 'kb', [\n { flags: { level: 'error', limit: 10 }, description: 'Last 10 errors' },\n { flags: { from: '\"1h\"', json: true }, description: 'Last hour in JSON' },\n { flags: { source: 'rest', level: 'warn' }, description: 'Warnings from REST API' },\n ]),\n flags: {\n level: { type: 'string', description: 'Filter by level (trace/debug/info/warn/error/fatal)' },\n source: { type: 'string', description: 'Filter by source (rest, workflow, cli, etc.)' },\n from: { type: 'string', description: 'Start time (relative: 1h, 30m, 2d or ISO date)' },\n to: { type: 'string', description: 'End time (relative or ISO date)' },\n limit: { type: 'number', description: 'Max records (default: 50)' },\n offset: { type: 'number', description: 'Skip N records for pagination' },\n json: { type: 'boolean', description: 'Output in JSON format' },\n },\n async handler(_ctx, _argv, flags) {\n const reader = platform.logs;\n if (!reader) {\n return { ok: false, error: 'Log reader not available. Ensure platform is initialized.' };\n }\n\n const query: LogQuery = {};\n if (flags.level) {query.level = flags.level as LogLevel;}\n if (flags.source) {query.source = flags.source;}\n if (flags.from) {query.from = parseRelativeTime(flags.from);}\n if (flags.to) {query.to = parseRelativeTime(flags.to);}\n\n const result = await reader.query(query, {\n limit: flags.limit ?? 50,\n offset: flags.offset ?? 0,\n sortOrder: 'desc',\n });\n\n return {\n ok: true,\n logs: result.logs.map(formatLogJson),\n total: result.total,\n hasMore: result.hasMore,\n source: result.source,\n _raw: result.logs, // kept for formatter\n };\n },\n formatter(result, ctx, flags) {\n if (flags.json) {\n const { _raw, ...jsonResult } = result;\n ctx.ui.json(jsonResult);\n return;\n }\n\n if (!result.ok) {\n ctx.ui.error('Log Query', { sections: [{ header: 'Error', items: [result.error ?? 'Unknown'] }] });\n return;\n }\n\n const raw = result._raw;\n if (!raw || raw.length === 0) {\n ctx.ui.write('No logs found matching criteria.\\n');\n return;\n }\n\n for (const record of raw) {\n ctx.ui.write(formatLogLine(record) + '\\n');\n }\n\n ctx.ui.write(`\\n--- ${raw.length} of ${result.total} logs (source: ${result.source}) ---\\n`);\n },\n});\n","/**\n * logs search — Full-text search across logs (FTS5)\n */\n\nimport { defineSystemCommand, type CommandResult } from '@kb-labs/shared-command-kit';\nimport { generateExamples } from '../../../utils/generate-examples';\nimport { platform } from '@kb-labs/core-runtime';\nimport type { LogRecord } from '@kb-labs/core-platform';\nimport { formatLogLine, formatLogJson } from './logs-utils';\n\ntype Flags = {\n limit: { type: 'number'; description?: string };\n offset: { type: 'number'; description?: string };\n json: { type: 'boolean'; description?: string };\n};\n\ninterface LogSearchResult extends CommandResult {\n _raw?: LogRecord[];\n query?: string;\n logs?: object[];\n total?: number;\n hasMore?: boolean;\n}\n\nexport const logsSearch = defineSystemCommand<Flags, LogSearchResult>({\n name: 'search',\n description: 'Full-text search across logs',\n category: 'logs',\n examples: generateExamples('logs search', 'kb', [\n { flags: {}, description: '\"authentication failed\"' },\n { flags: { json: true, limit: 20 }, description: '\"connection refused\"' },\n ]),\n flags: {\n limit: { type: 'number', description: 'Max records (default: 50)' },\n offset: { type: 'number', description: 'Skip N records for pagination' },\n json: { type: 'boolean', description: 'Output in JSON format' },\n },\n async handler(_ctx, argv, flags) {\n const reader = platform.logs;\n if (!reader) {\n return { ok: false, error: 'Log reader not available. Ensure platform is initialized.' };\n }\n\n const searchText = argv[0];\n if (!searchText) {\n return { ok: false, error: 'Search text required. Usage: kb logs search \"your query\"' };\n }\n\n const caps = reader.getCapabilities();\n if (!caps.hasSearch) {\n return { ok: false, error: 'Full-text search not available. Ensure SQLite persistence is enabled.' };\n }\n\n const result = await reader.search(searchText, {\n limit: flags.limit ?? 50,\n offset: flags.offset ?? 0,\n });\n\n return {\n ok: true,\n query: searchText,\n logs: result.logs.map(formatLogJson),\n total: result.total,\n hasMore: result.hasMore,\n _raw: result.logs,\n };\n },\n formatter(result, ctx, flags) {\n if (flags.json) {\n const { _raw, ...jsonResult } = result;\n ctx.ui.json(jsonResult);\n return;\n }\n\n if (!result.ok) {\n ctx.ui.error('Log Search', { sections: [{ header: 'Error', items: [result.error ?? 'Unknown'] }] });\n return;\n }\n\n const raw = result._raw;\n if (!raw || raw.length === 0) {\n ctx.ui.write(`No logs found matching \"${result.query}\".\\n`);\n return;\n }\n\n ctx.ui.write(`Search results for \"${result.query}\":\\n\\n`);\n for (const record of raw) {\n ctx.ui.write(formatLogLine(record) + '\\n');\n }\n\n ctx.ui.write(`\\n--- ${raw.length} of ${result.total} matches ---\\n`);\n },\n});\n","/**\n * logs get — Get single log by ID with optional related logs\n */\n\nimport { defineSystemCommand, type CommandResult } from '@kb-labs/shared-command-kit';\nimport { generateExamples } from '../../../utils/generate-examples';\nimport { platform } from '@kb-labs/core-runtime';\nimport type { LogRecord } from '@kb-labs/core-platform';\nimport { formatLogLine, formatLogJson, findRelatedLogs, extractCorrelationKeys, type CorrelationKeys } from './logs-utils';\n\ntype Flags = {\n related: { type: 'boolean'; description?: string };\n json: { type: 'boolean'; description?: string };\n};\n\ninterface RelatedLogEntry {\n time: string;\n level: string;\n source: string;\n msg: string;\n}\n\ninterface LogGetResult extends CommandResult {\n _rawLog?: LogRecord;\n _rawRelated?: RelatedLogEntry[];\n log?: Record<string, unknown>;\n correlationKeys?: CorrelationKeys;\n related?: RelatedLogEntry[];\n}\n\nexport const logsGet = defineSystemCommand<Flags, LogGetResult>({\n name: 'get',\n description: 'Get single log by ID (with optional related logs)',\n category: 'logs',\n examples: generateExamples('logs get', 'kb', [\n { flags: {}, description: '<log-id>' },\n { flags: { related: true, json: true }, description: '<log-id>' },\n ]),\n flags: {\n related: { type: 'boolean', description: 'Include related logs (same trace/execution/request)' },\n json: { type: 'boolean', description: 'Output in JSON format' },\n },\n async handler(_ctx, argv, flags) {\n const reader = platform.logs;\n if (!reader) {\n return { ok: false, error: 'Log reader not available. Ensure platform is initialized.' };\n }\n\n const id = argv[0];\n if (!id) {\n return { ok: false, error: 'Log ID required. Usage: kb logs get <id>' };\n }\n\n const log = await reader.getById(id);\n if (!log) {\n return { ok: false, error: `Log not found: ${id}` };\n }\n\n let related: RelatedLogEntry[] | undefined;\n if (flags.related) {\n const relatedLogs = await findRelatedLogs(reader, log);\n related = relatedLogs.map(formatLogJson) as RelatedLogEntry[];\n }\n\n return {\n ok: true,\n log: formatLogJson(log) as Record<string, unknown>,\n correlationKeys: extractCorrelationKeys(log),\n related,\n _rawLog: log,\n _rawRelated: flags.related ? related : undefined,\n };\n },\n formatter(result, ctx, flags) {\n if (flags.json) {\n const { _rawLog, _rawRelated, ...jsonResult } = result;\n ctx.ui.json(jsonResult);\n return;\n }\n\n if (!result.ok) {\n ctx.ui.error('Log Get', { sections: [{ header: 'Error', items: [result.error ?? 'Unknown'] }] });\n return;\n }\n\n const rawLog = result._rawLog;\n const logJson = result.log;\n const keys = result.correlationKeys;\n\n if (!rawLog || !logJson || !keys) {\n return;\n }\n\n // Detailed view of the log\n ctx.ui.write(formatLogLine(rawLog) + '\\n\\n');\n\n const details = [\n `ID: ${logJson['id']}`,\n `Time: ${logJson['time']}`,\n `Level: ${logJson['level']}`,\n `Source: ${logJson['source']}`,\n ];\n\n if (keys.traceId) {details.push(`Trace ID: ${keys.traceId}`);}\n if (keys.executionId) {details.push(`Execution ID: ${keys.executionId}`);}\n if (keys.requestId) {details.push(`Request ID: ${keys.requestId}`);}\n if (keys.sessionId) {details.push(`Session ID: ${keys.sessionId}`);}\n\n // Show fields\n const fieldsToShow = { ...rawLog.fields };\n delete fieldsToShow['level'];\n delete fieldsToShow['time'];\n delete fieldsToShow['traceId'];\n delete fieldsToShow['executionId'];\n delete fieldsToShow['requestId'];\n delete fieldsToShow['reqId'];\n delete fieldsToShow['sessionId'];\n\n if (Object.keys(fieldsToShow).length > 0) {\n details.push(`Fields: ${JSON.stringify(fieldsToShow, null, 2)}`);\n }\n\n ctx.ui.success('Log Detail', { sections: [{ header: 'Info', items: details }] });\n\n // Related logs\n const { related } = result;\n if (related && related.length > 0) {\n ctx.ui.write(`\\nRelated Logs (${related.length}):\\n`);\n for (const r of related) {\n ctx.ui.write(` ${r.time} ${r.level.toUpperCase().padEnd(5)} [${r.source}] ${r.msg}\\n`);\n }\n }\n },\n});\n","/**\n * logs stats — Show log storage statistics and capabilities\n */\n\nimport { defineSystemCommand, type CommandResult } from '@kb-labs/shared-command-kit';\nimport { generateExamples } from '../../../utils/generate-examples';\nimport { platform } from '@kb-labs/core-runtime';\n\ntype Flags = {\n json: { type: 'boolean'; description?: string };\n};\n\ninterface LogCapabilities {\n hasBuffer: boolean;\n hasPersistence: boolean;\n hasSearch: boolean;\n hasStreaming: boolean;\n}\n\ninterface LogBufferStats {\n size: number;\n maxSize: number;\n oldest: string | null;\n newest: string | null;\n}\n\ninterface LogPersistenceStats {\n totalLogs: number;\n oldest: string | null;\n newest: string | null;\n sizeBytes: number;\n sizeMB: number;\n}\n\ntype Result = CommandResult & {\n capabilities?: LogCapabilities;\n buffer?: LogBufferStats;\n persistence?: LogPersistenceStats;\n};\n\nexport const logsStats = defineSystemCommand<Flags, Result>({\n name: 'stats',\n description: 'Show log storage statistics and capabilities',\n category: 'logs',\n examples: generateExamples('logs stats', 'kb', [\n { flags: {} },\n { flags: { json: true } },\n ]),\n flags: {\n json: { type: 'boolean', description: 'Output in JSON format' },\n },\n async handler() {\n const reader = platform.logs;\n if (!reader) {\n return { ok: false, error: 'Log reader not available. Ensure platform is initialized.' };\n }\n\n const stats = await reader.getStats();\n const caps = reader.getCapabilities();\n\n return {\n ok: true,\n capabilities: caps,\n buffer: stats.buffer ? {\n size: stats.buffer.size,\n maxSize: stats.buffer.maxSize,\n oldest: stats.buffer.oldestTimestamp ? new Date(stats.buffer.oldestTimestamp).toISOString() : null,\n newest: stats.buffer.newestTimestamp ? new Date(stats.buffer.newestTimestamp).toISOString() : null,\n } : undefined,\n persistence: stats.persistence ? {\n totalLogs: stats.persistence.totalLogs,\n oldest: stats.persistence.oldestTimestamp ? new Date(stats.persistence.oldestTimestamp).toISOString() : null,\n newest: stats.persistence.newestTimestamp ? new Date(stats.persistence.newestTimestamp).toISOString() : null,\n sizeBytes: stats.persistence.sizeBytes,\n sizeMB: Math.round(stats.persistence.sizeBytes / 1024 / 1024 * 100) / 100,\n } : undefined,\n };\n },\n formatter(result, ctx, flags) {\n if (flags.json) {\n ctx.ui.json(result);\n return;\n }\n\n if (!result.ok) {\n ctx.ui.error('Log Stats', { sections: [{ header: 'Error', items: [result.error ?? 'Unknown error'] }] });\n return;\n }\n\n const sections: Array<{ header: string; items: string[] }> = [];\n\n const caps = result.capabilities;\n if (caps) {\n sections.push({\n header: 'Capabilities',\n items: [\n `Ring Buffer: ${caps.hasBuffer ? 'yes' : 'no'}`,\n `Persistence (SQLite): ${caps.hasPersistence ? 'yes' : 'no'}`,\n `Full-Text Search: ${caps.hasSearch ? 'yes' : 'no'}`,\n `Real-Time Streaming: ${caps.hasStreaming ? 'yes' : 'no'}`,\n ],\n });\n }\n\n const buf = result.buffer;\n if (buf) {\n sections.push({\n header: 'Ring Buffer',\n items: [\n `Size: ${buf.size} / ${buf.maxSize}`,\n `Oldest: ${buf.oldest ?? 'empty'}`,\n `Newest: ${buf.newest ?? 'empty'}`,\n ],\n });\n }\n\n const pers = result.persistence;\n if (pers) {\n sections.push({\n header: 'Persistent Storage',\n items: [\n `Total Logs: ${pers.totalLogs}`,\n `Size: ${pers.sizeMB} MB`,\n `Oldest: ${pers.oldest ?? 'empty'}`,\n `Newest: ${pers.newest ?? 'empty'}`,\n ],\n });\n }\n\n ctx.ui.success('Log Storage Statistics', { sections });\n },\n});\n","/**\n * kb auth login — Authenticate CLI with Gateway.\n *\n * Prompts for Gateway URL + Client ID + Client Secret,\n * exchanges credentials for JWT token pair via POST /auth/token,\n * saves to ~/.kb/credentials.json (chmod 600).\n */\n\nimport { defineSystemCommand, type CommandResult } from '@kb-labs/shared-command-kit';\nimport { CredentialsManager } from '@kb-labs/cli-runtime/gateway';\n\ntype LoginFlags = {\n 'gateway-url': { type: 'string'; description: string };\n 'client-id': { type: 'string'; description: string };\n 'client-secret': { type: 'string'; description: string };\n json: { type: 'boolean'; description: string };\n};\n\ntype LoginResult = CommandResult & {\n gatewayUrl: string;\n expiresIn: number;\n};\n\nexport const authLogin = defineSystemCommand<LoginFlags, LoginResult>({\n name: 'login',\n description: 'Authenticate CLI with Gateway',\n longDescription:\n 'Exchange client credentials for JWT tokens and save to ~/.kb/credentials.json. ' +\n 'Tokens auto-refresh on expiry. Use \"kb auth create-service-account\" to create credentials first.',\n category: 'auth',\n examples: [\n 'kb auth login --gateway-url http://localhost:4000 --client-id clt_xxx --client-secret cs_xxx',\n 'kb auth login --gateway-url https://gateway.example.com --client-id clt_xxx --client-secret cs_xxx --json',\n ],\n flags: {\n 'gateway-url': { type: 'string', description: 'Gateway server URL (e.g. http://localhost:4000)' },\n 'client-id': { type: 'string', description: 'Client ID from service account registration' },\n 'client-secret': { type: 'string', description: 'Client Secret from service account registration' },\n json: { type: 'boolean', description: 'Output in JSON format' },\n },\n async handler(ctx, _argv, flags) {\n const gatewayUrl = flags['gateway-url'];\n const clientId = flags['client-id'];\n const clientSecret = flags['client-secret'];\n\n if (!gatewayUrl || !clientId || !clientSecret) {\n const msg = 'All flags required: --gateway-url, --client-id, --client-secret';\n if (flags.json) {\n ctx.ui?.json({ ok: false, error: msg });\n } else {\n ctx.ui?.error?.(msg);\n }\n return { ok: false, error: msg, gatewayUrl: '', expiresIn: 0 };\n }\n\n // Exchange credentials for tokens\n const tokenUrl = `${gatewayUrl}/auth/token`;\n let tokenResponse: Response;\n try {\n tokenResponse = await fetch(tokenUrl, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ clientId, clientSecret }),\n });\n } catch (err) {\n const msg = `Cannot reach Gateway at ${gatewayUrl}: ${err instanceof Error ? err.message : String(err)}`;\n if (flags.json) {\n ctx.ui?.json({ ok: false, error: msg });\n } else {\n ctx.ui?.error?.(msg);\n }\n return { ok: false, error: msg, gatewayUrl, expiresIn: 0 };\n }\n\n if (!tokenResponse.ok) {\n const body = await tokenResponse.text().catch(() => '');\n const msg = `Authentication failed (HTTP ${tokenResponse.status}): ${body}`;\n if (flags.json) {\n ctx.ui?.json({ ok: false, error: msg });\n } else {\n ctx.ui?.error?.(msg);\n }\n return { ok: false, error: msg, gatewayUrl, expiresIn: 0 };\n }\n\n const tokenData = await tokenResponse.json() as {\n accessToken: string;\n refreshToken: string;\n expiresIn: number;\n };\n\n // Save credentials\n const credentialsManager = new CredentialsManager();\n const expiresAt = Date.now() + tokenData.expiresIn * 1000;\n\n await credentialsManager.save({\n gatewayUrl,\n accessToken: tokenData.accessToken,\n refreshToken: tokenData.refreshToken,\n expiresAt,\n });\n\n if (flags.json) {\n ctx.ui?.json({\n ok: true,\n gatewayUrl,\n expiresIn: tokenData.expiresIn,\n });\n } else {\n ctx.ui?.write?.(`Authenticated with Gateway at ${gatewayUrl}\\n`);\n ctx.ui?.write?.(`Token expires in ${Math.floor(tokenData.expiresIn / 60)} minutes (auto-refresh enabled).\\n`);\n }\n\n return { ok: true, gatewayUrl, expiresIn: tokenData.expiresIn };\n },\n});\n","/**\n * kb auth logout — Remove stored Gateway credentials.\n */\n\nimport { defineSystemCommand, type CommandResult } from '@kb-labs/shared-command-kit';\nimport { CredentialsManager } from '@kb-labs/cli-runtime/gateway';\n\ntype LogoutFlags = {\n json: { type: 'boolean'; description: string };\n};\n\nexport const authLogout = defineSystemCommand<LogoutFlags, CommandResult>({\n name: 'logout',\n description: 'Remove stored Gateway credentials',\n longDescription: 'Deletes ~/.kb/credentials.json. CLI will no longer be able to reach Gateway until re-login.',\n category: 'auth',\n examples: [\n 'kb auth logout',\n 'kb auth logout --json',\n ],\n flags: {\n json: { type: 'boolean', description: 'Output in JSON format' },\n },\n async handler(ctx, _argv, flags) {\n const credentialsManager = new CredentialsManager();\n const existing = await credentialsManager.load();\n\n if (!existing) {\n if (flags.json) {\n ctx.ui?.json({ ok: true, message: 'No credentials found — already logged out.' });\n } else {\n ctx.ui?.write?.('No credentials found — already logged out.\\n');\n }\n return { ok: true };\n }\n\n await credentialsManager.clear();\n\n if (flags.json) {\n ctx.ui?.json({ ok: true, message: 'Logged out. Credentials removed.' });\n } else {\n ctx.ui?.write?.('Logged out. Credentials removed.\\n');\n }\n\n return { ok: true };\n },\n});\n","/**\n * kb auth status — Show current Gateway authentication status.\n */\n\nimport { defineSystemCommand, type CommandResult } from '@kb-labs/shared-command-kit';\nimport { CredentialsManager } from '@kb-labs/cli-runtime/gateway';\n\ntype StatusFlags = {\n json: { type: 'boolean'; description: string };\n};\n\ntype StatusResult = CommandResult & {\n authenticated: boolean;\n gatewayUrl?: string;\n tokenExpired?: boolean;\n expiresAt?: string;\n};\n\nexport const authStatus = defineSystemCommand<StatusFlags, StatusResult>({\n name: 'status',\n description: 'Show Gateway authentication status',\n longDescription: 'Displays current credentials, token expiry, and Gateway URL. Optionally pings the Gateway to verify connectivity.',\n category: 'auth',\n examples: [\n 'kb auth status',\n 'kb auth status --json',\n ],\n flags: {\n json: { type: 'boolean', description: 'Output in JSON format' },\n },\n async handler(ctx, _argv, flags) {\n const credentialsManager = new CredentialsManager();\n const credentials = await credentialsManager.load();\n\n if (!credentials) {\n if (flags.json) {\n ctx.ui?.json({ ok: true, authenticated: false });\n } else {\n ctx.ui?.write?.('Not authenticated. Run \"kb auth login\" to configure Gateway connection.\\n');\n }\n return { ok: true, authenticated: false };\n }\n\n const expired = credentialsManager.isExpired(credentials);\n const expiresAt = new Date(credentials.expiresAt).toISOString();\n const timeLeft = credentials.expiresAt - Date.now();\n const minutesLeft = Math.max(0, Math.floor(timeLeft / 60000));\n\n if (flags.json) {\n ctx.ui?.json({\n ok: true,\n authenticated: true,\n gatewayUrl: credentials.gatewayUrl,\n tokenExpired: expired,\n expiresAt,\n minutesLeft,\n });\n } else {\n ctx.ui?.write?.(`Gateway: ${credentials.gatewayUrl}\\n`);\n if (expired) {\n ctx.ui?.write?.(`Token: expired (will auto-refresh on next request)\\n`);\n } else {\n ctx.ui?.write?.(`Token: valid (expires in ${minutesLeft} min)\\n`);\n }\n }\n\n return {\n ok: true,\n authenticated: true,\n gatewayUrl: credentials.gatewayUrl,\n tokenExpired: expired,\n expiresAt,\n };\n },\n});\n","/**\n * kb auth create-service-account — Register a new service account with Gateway.\n *\n * Calls POST /auth/register to create clientId + clientSecret.\n * These are printed to stdout and should be saved securely.\n */\n\nimport { defineSystemCommand, type CommandResult } from '@kb-labs/shared-command-kit';\n\ntype CreateSAFlags = {\n 'gateway-url': { type: 'string'; description: string };\n name: { type: 'string'; description: string };\n 'namespace-id': { type: 'string'; description: string };\n json: { type: 'boolean'; description: string };\n};\n\ntype CreateSAResult = CommandResult & {\n clientId?: string;\n clientSecret?: string;\n hostId?: string;\n};\n\nexport const authCreateServiceAccount = defineSystemCommand<CreateSAFlags, CreateSAResult>({\n name: 'create-service-account',\n description: 'Register a new service account with Gateway',\n longDescription:\n 'Creates a new client registration in Gateway and returns clientId + clientSecret. ' +\n 'Use these credentials with \"kb auth login\" to authenticate.',\n category: 'auth',\n examples: [\n 'kb auth create-service-account --gateway-url http://localhost:4000 --name my-cli --namespace-id default',\n 'kb auth create-service-account --gateway-url http://localhost:4000 --name ci-agent --namespace-id default --json',\n ],\n flags: {\n 'gateway-url': { type: 'string', description: 'Gateway server URL' },\n name: { type: 'string', description: 'Service account name (1-64 chars)' },\n 'namespace-id': { type: 'string', description: 'Namespace ID (1-64 chars)' },\n json: { type: 'boolean', description: 'Output in JSON format' },\n },\n async handler(ctx, _argv, flags) {\n const gatewayUrl = flags['gateway-url'];\n const name = flags.name;\n const namespaceId = flags['namespace-id'];\n\n if (!gatewayUrl || !name || !namespaceId) {\n const msg = 'All flags required: --gateway-url, --name, --namespace-id';\n if (flags.json) {\n ctx.ui?.json({ ok: false, error: msg });\n } else {\n ctx.ui?.error?.(msg);\n }\n return { ok: false, error: msg };\n }\n\n let response: Response;\n try {\n response = await fetch(`${gatewayUrl}/auth/register`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ name, namespaceId }),\n });\n } catch (err) {\n const msg = `Cannot reach Gateway at ${gatewayUrl}: ${err instanceof Error ? err.message : String(err)}`;\n if (flags.json) {\n ctx.ui?.json({ ok: false, error: msg });\n } else {\n ctx.ui?.error?.(msg);\n }\n return { ok: false, error: msg };\n }\n\n if (!response.ok) {\n const body = await response.text().catch(() => '');\n const msg = `Registration failed (HTTP ${response.status}): ${body}`;\n if (flags.json) {\n ctx.ui?.json({ ok: false, error: msg });\n } else {\n ctx.ui?.error?.(msg);\n }\n return { ok: false, error: msg };\n }\n\n const data = await response.json() as {\n clientId: string;\n clientSecret: string;\n hostId: string;\n };\n\n if (flags.json) {\n ctx.ui?.json({\n ok: true,\n clientId: data.clientId,\n clientSecret: data.clientSecret,\n hostId: data.hostId,\n });\n } else {\n ctx.ui?.write?.('Service account created successfully.\\n\\n');\n ctx.ui?.write?.(` Client ID: ${data.clientId}\\n`);\n ctx.ui?.write?.(` Client Secret: ${data.clientSecret}\\n`);\n ctx.ui?.write?.(` Host ID: ${data.hostId}\\n\\n`);\n ctx.ui?.write?.('Save these credentials securely — the secret is shown only once.\\n\\n');\n ctx.ui?.write?.('To authenticate:\\n');\n ctx.ui?.write?.(` kb auth login --gateway-url ${gatewayUrl} --client-id ${data.clientId} --client-secret ${data.clientSecret}\\n`);\n }\n\n return { ok: true, clientId: data.clientId, clientSecret: data.clientSecret, hostId: data.hostId };\n },\n});\n","/**\n * platform:sync — reconcile filesystem with .kb/marketplace.lock.\n *\n * Behaves as a provisioning step:\n * - dev / monorepo → validate mode (no installs)\n * - prod / Docker → reconcile mode (installs missing marketplace entries)\n * - auto → detect from workspace layout\n */\n\nimport { defineSystemCommand, type CommandResult } from '@kb-labs/shared-command-kit';\nimport { platformSync, type PlatformSyncMode, type PlatformSyncResult } from '@kb-labs/core-runtime';\nimport { generateExamples } from '../../../utils/generate-examples';\nimport { getContextCwd } from '@kb-labs/shared-cli-ui';\n\ntype PlatformSyncFlags = {\n json: { type: 'boolean'; description?: string };\n mode: { type: 'string'; description?: string };\n 'dry-run': { type: 'boolean'; description?: string };\n root: { type: 'string'; description?: string };\n};\n\ntype PlatformSyncCommandResult = CommandResult & {\n sync?: PlatformSyncResult;\n};\n\nfunction isMode(value: string | undefined): value is PlatformSyncMode {\n return value === 'validate' || value === 'reconcile' || value === 'auto';\n}\n\nexport const platformSyncCommand = defineSystemCommand<PlatformSyncFlags, PlatformSyncCommandResult>({\n name: 'provision',\n description: 'Reconcile .kb/marketplace.lock with installed adapters & plugins',\n longDescription:\n 'Reads .kb/marketplace.lock as the declarative source of truth for which adapters ' +\n 'and plugins this installation needs, and makes the filesystem match. ' +\n 'In monorepo/dev mode it only validates. In prod/Docker build mode it installs ' +\n 'missing marketplace packages via pnpm.',\n category: 'platform',\n examples: generateExamples('platform provision', 'kb', [\n { flags: {} },\n { flags: { mode: 'validate' } },\n { flags: { mode: 'reconcile', json: true } },\n { flags: { 'dry-run': true } },\n ]),\n flags: {\n json: { type: 'boolean', description: 'Output machine-readable JSON' },\n mode: {\n type: 'string',\n description: 'Sync mode: validate | reconcile | auto (default: auto)',\n },\n 'dry-run': {\n type: 'boolean',\n description: 'Never install, fail on drift',\n },\n root: {\n type: 'string',\n description: 'Workspace root (default: current working directory)',\n },\n },\n analytics: {\n command: 'platform.sync',\n startEvent: 'PLATFORM_SYNC_STARTED',\n finishEvent: 'PLATFORM_SYNC_FINISHED',\n },\n async handler(ctx, _argv, flags) {\n const cwd = getContextCwd(ctx);\n const root = (flags.root as string | undefined) ?? cwd;\n const modeFlag = flags.mode as string | undefined;\n const mode: PlatformSyncMode = isMode(modeFlag) ? modeFlag : 'auto';\n const dryRun = Boolean(flags['dry-run']);\n\n const logger = ctx.platform?.logger;\n logger?.info('platform sync started', { root, mode, dryRun });\n\n const result = await platformSync({\n root,\n mode,\n dryRun,\n logger,\n });\n\n logger?.info('platform sync finished', {\n ok: result.ok,\n mode: result.mode,\n checked: result.checked,\n missing: result.missing.length,\n mismatched: result.mismatched.length,\n installed: result.installed.length,\n errors: result.errors.length,\n });\n\n return {\n ok: result.ok,\n status: result.ok ? ('success' as const) : ('error' as const),\n sync: result,\n };\n },\n formatter(result, ctx, flags) {\n if (flags.json) {\n console.log(JSON.stringify(result.sync ?? result, null, 2));\n return;\n }\n\n const sync = result.sync;\n if (!sync) {\n ctx.ui.error('Platform Sync', {\n sections: [{ header: 'Error', items: [result.error ?? 'Unknown error'] }],\n });\n return;\n }\n\n const summary: string[] = [\n `Mode: ${sync.mode}${sync.mode !== (flags.mode as string | undefined) && flags.mode !== 'auto' ? ' (auto-detected)' : ''}`,\n `Checked: ${sync.checked}`,\n ];\n if (sync.lockMissing) {\n summary.push('Lock: not found (nothing to reconcile)');\n }\n if (sync.installed.length) {\n summary.push(`Installed: ${sync.installed.length}`);\n }\n if (sync.missing.length) {\n summary.push(`Missing: ${sync.missing.length}`);\n }\n if (sync.mismatched.length) {\n summary.push(`Integrity mismatch: ${sync.mismatched.length}`);\n }\n if (sync.errors.length) {\n summary.push(`Errors: ${sync.errors.length}`);\n }\n\n const sections: Array<{ header: string; items: string[] }> = [\n { header: 'Summary', items: summary },\n ];\n\n if (sync.installed.length) {\n sections.push({\n header: 'Installed',\n items: sync.installed.map((id) => `• ${id}`),\n });\n }\n if (sync.missing.length) {\n sections.push({\n header: 'Missing',\n items: sync.missing.map((id) => `• ${id}`),\n });\n }\n if (sync.mismatched.length) {\n sections.push({\n header: 'Integrity mismatch',\n items: sync.mismatched.map((id) => `• ${id}`),\n });\n }\n if (sync.errors.length) {\n sections.push({\n header: 'Errors',\n items: sync.errors.map((e) => `• ${e.packageId}: ${e.message}`),\n });\n }\n\n const nextSteps: string[] = [];\n if (!sync.ok) {\n if (sync.missing.length && sync.mode === 'validate') {\n nextSteps.push('kb platform provision --mode reconcile Install missing packages');\n }\n if (sync.mismatched.length) {\n nextSteps.push('kb marketplace install <pkg> Re-install mismatched packages');\n }\n }\n if (nextSteps.length) {\n sections.push({ header: 'Next Steps', items: nextSteps });\n }\n\n if (sync.ok) {\n ctx.ui.success('Platform Sync', { sections });\n } else {\n ctx.ui.error('Platform Sync', { sections });\n }\n },\n});\n","/**\n * System command groups - Organized categories for system commands\n *\n * NOTE: Marketplace commands have been migrated to the @kb-labs/marketplace-cli plugin.\n * They are now registered via ManifestV3 with subgroup support, not as system commands.\n */\n\nimport { defineSystemCommandGroup } from '@kb-labs/shared-command-kit';\nimport { hello } from './hello';\nimport { version } from './version';\nimport { health } from './health';\nimport { diag } from './diag';\nimport { registryDiagnostics } from './registry-diagnostics';\nimport { pluginsCacheClear } from '../../builtins/plugins-cache-clear';\nimport { docsGenerateCliReference } from './docs-generate-cli-reference';\nimport { logsDiagnose, logsContext, logsSummarize, logsQuery, logsSearch, logsGet, logsStats } from './logs';\nimport { authLogin, authLogout, authStatus, authCreateServiceAccount } from './auth';\nimport { platformSyncCommand } from './platform/sync';\n\n/**\n * Info Commands Group\n */\nexport const infoGroup = defineSystemCommandGroup('info', 'System information commands', [\n hello,\n version,\n health,\n diag,\n]);\n\n/**\n * Marketplace Commands Group\n */\nexport const marketplaceGroup = defineSystemCommandGroup('marketplace', 'Marketplace management commands', [\n pluginsCacheClear,\n]);\n\n/**\n * Docs Commands Group\n */\nexport const docsGroup = defineSystemCommandGroup('docs', 'Documentation generation commands', [\n docsGenerateCliReference,\n]);\n\n/**\n * Logs Commands Group\n */\nexport const logsGroup = defineSystemCommandGroup('logs', 'Log viewing and analysis commands', [\n logsDiagnose,\n logsContext,\n logsSummarize,\n logsQuery,\n logsSearch,\n logsGet,\n logsStats,\n]);\n\n/**\n * Registry Commands Group\n */\nexport const registryGroup = defineSystemCommandGroup('registry', 'Entity registry commands', [\n registryDiagnostics,\n]);\n\n/**\n * Auth Commands Group\n */\nexport const authGroup = defineSystemCommandGroup('auth', 'Gateway authentication commands', [\n authLogin,\n authLogout,\n authStatus,\n authCreateServiceAccount,\n]);\n\n/**\n * Platform Commands Group\n *\n * Lifecycle commands for the platform itself: provisioning, validation,\n * and (in the future) info/doctor. These are distinct from:\n * - `kb marketplace` — user-facing install/discovery\n * - `kb dev` — local service management\n */\nexport const platformGroup = defineSystemCommandGroup('platform', 'Platform lifecycle commands', [\n platformSyncCommand,\n]);\n","/**\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 * 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 { platform } from '@kb-labs/core-runtime';\n\nconst log = platform.logger.child({ module: 'cli:shutdown' });\n\ntype ShutdownHook = () => void | Promise<void>;\n\nconst hooks = new Set<ShutdownHook>();\nlet signalsBound = false;\nlet exiting = false;\n\nfunction bindSignals(): void {\n if (signalsBound) {\n return;\n }\n signalsBound = true;\n\n const handler = async (signal: NodeJS.Signals): Promise<void> => {\n if (exiting) {\n return;\n }\n exiting = true;\n for (const hook of Array.from(hooks)) {\n try {\n await hook();\n } catch (error) {\n log.warn(`Shutdown hook failed: ${error instanceof Error ? error.message : String(error)}`);\n }\n }\n const exitCode = signal === 'SIGINT' ? 0 : 0;\n process.exit(exitCode);\n };\n\n ['SIGINT', 'SIGTERM'].forEach(signal => {\n process.once(signal as NodeJS.Signals, handler);\n });\n}\n\nexport function registerShutdownHook(hook: ShutdownHook): () => void {\n hooks.add(hook);\n bindSignals();\n return () => {\n hooks.delete(hook);\n };\n}\n","import { registry } from \"../registry/service\";\nimport type { RegisteredCommand } from \"../registry/types\";\nimport {\n infoGroup,\n marketplaceGroup,\n registryGroup,\n docsGroup,\n logsGroup,\n authGroup,\n platformGroup,\n} from \"../commands/system/groups\";\nimport { registerManifests, disposeAllPlugins, preflightManifests } from \"../registry/register\";\nimport { registerShutdownHook } from \"./shutdown\";\nimport { getContextCwd } from \"@kb-labs/shared-cli-ui\";\nimport type { ILogger } from \"@kb-labs/core-platform\";\nimport { platform } from \"@kb-labs/core-runtime\";\n\nlet _registered = false;\nconst registeredCommands: unknown[] = [];\n\nexport interface RegisterBuiltinCommandsInput {\n cwd?: string;\n env?: NodeJS.ProcessEnv;\n logger?: ILogger;\n /**\n * Where the KB Labs platform is installed (parent of\n * `node_modules/@kb-labs/*`). Forwarded to `discoverManifests` so that\n * plugin discovery scans the platform `node_modules` regardless of where\n * the CLI is invoked from. When omitted, falls back to `cwd` — this keeps\n * dev-mode behavior unchanged.\n */\n platformRoot?: string;\n /**\n * The user's project root (directory containing `.kb/kb.config.{json,jsonc}`).\n * Discovery uses this to pick up project-scope plugins from\n * `<projectRoot>/.kb/plugins/` and to invalidate the cache when the\n * project's `marketplace.lock` changes. When omitted, falls back to `cwd`.\n */\n projectRoot?: string;\n}\n\nexport async function registerBuiltinCommands(\n input: RegisterBuiltinCommandsInput = {},\n) {\n const log = input.logger ?? platform.logger;\n\n if (_registered) {\n return;\n }\n _registered = true;\n registry.markPartial(true);\n registeredCommands.length = 0;\n\n // Register system command groups (migrated commands)\n registry.registerGroup(infoGroup);\n registry.registerGroup(marketplaceGroup);\n registry.registerGroup(registryGroup);\n registry.registerGroup(docsGroup);\n registry.registerGroup(logsGroup);\n registry.registerGroup(authGroup);\n registry.registerGroup(platformGroup);\n\n try {\n const cwd = getContextCwd({ cwd: input.cwd });\n const env = input.env ?? process.env;\n const noCache =\n process.argv.includes(\"--no-cache\") || env.KB_PLUGIN_NO_CACHE === \"1\";\n const { discoverManifests } = await import('../registry/discover');\n const discovered = await discoverManifests(cwd, noCache, {\n platformRoot: input.platformRoot,\n projectRoot: input.projectRoot,\n });\n\n if (discovered.length > 0) {\n log.info(`Discovered ${discovered.length} packages with CLI manifests`);\n const { valid: readyToRegister, skipped: preflightSkipped } = preflightManifests(discovered, log);\n\n if (preflightSkipped.length > 0) {\n log.warn(`Preflight skipped ${preflightSkipped.length} manifest(s) during validation`);\n for (const skipped of preflightSkipped) {\n log.warn(` • ${skipped.id} [${skipped.source}] → ${skipped.reason}`);\n }\n }\n\n if (readyToRegister.length === 0) {\n log.error('All discovered manifests were skipped during preflight validation');\n registry.markPartial(true);\n _registered = false;\n return;\n }\n\n const result = await registerManifests(readyToRegister, registry, {\n cwd,\n logger: log,\n });\n if (result.registered.length > 0) {\n log.info(`Registered ${result.registered.length} commands from manifests`);\n registeredCommands.push(...result.registered);\n }\n if (result.skipped.length > 0) {\n for (const skipped of result.skipped) {\n log.error(`Skipped manifest ${skipped.id} from ${skipped.source}: ${skipped.reason}`);\n }\n }\n if (result.skipped.length > 0 || preflightSkipped.length > 0) {\n registry.markPartial(true);\n } else {\n registry.markPartial(false);\n }\n } else {\n registry.markPartial(false);\n }\n\n } catch (err: unknown) {\n log.warn(`Discovery failed: ${err instanceof Error ? err.message : String(err)}`);\n registry.markPartial(true);\n _registered = false;\n return;\n }\n\n registerShutdownHook(async () => {\n await disposeAllPlugins(registry, log);\n });\n}\n\nexport function checkSelfUpdateNotices(registered: RegisteredCommand[]): void {\n const currentCliVersion = process.env.CLI_VERSION || '0.1.0';\n \n for (const cmd of registered) {\n const required = cmd.manifest.engine?.kbCli;\n if (!required || !currentCliVersion) {continue;}\n \n if (required.startsWith('^')) {\n const requiredVersion = required.replace('^', '').trim();\n const requiredMajor = parseInt(requiredVersion.split('.')[0] || '0');\n const currentMajor = parseInt(currentCliVersion.split('.')[0] || '0');\n \n if (currentMajor < requiredMajor) {\n console.warn(`[kb-cli] Plugin ${cmd.manifest.package || cmd.manifest.group} requires kb-cli ${required}, found ${currentCliVersion}`);\n console.warn(`[kb-cli] → Upgrade CLI: pnpm -w update @kb-labs/cli`);\n }\n }\n }\n}\n","import { type CommandGroup } from \"./shared\";\nimport { sideBorderBox, type SectionContent, safeColors, TimingTracker } from \"@kb-labs/shared-cli-ui\";\n\nexport function renderGroupHelp(group: CommandGroup): string {\n const tracker = new TimingTracker();\n\n const sortedCommands = [...group.commands].sort((a, b) =>\n a.name.localeCompare(b.name),\n );\n\n const sections: SectionContent[] = [];\n\n // Summary section\n sections.push({\n items: [\n `${safeColors.bold('Description')}: ${group.describe}`,\n `${safeColors.bold('Commands')}: ${sortedCommands.length}`,\n ],\n });\n\n // Commands section\n // Convert command IDs to user-friendly format (replace all colons with spaces for display)\n const commandDisplayNames = sortedCommands.map((cmd) => {\n // Replace all colons with spaces for display (e.g., \"agent:trace:stats\" -> \"agent trace stats\")\n return cmd.name.replace(/:/g, ' ');\n });\n const maxNameLength = Math.max(...commandDisplayNames.map((name) => name.length));\n const commandItems: string[] = [];\n\n for (let i = 0; i < sortedCommands.length; i++) {\n const cmd = sortedCommands[i];\n const displayName = commandDisplayNames[i];\n if (!cmd || !displayName) {continue;}\n\n const paddedName = displayName.padEnd(maxNameLength);\n const description = cmd.describe || \"No description\";\n commandItems.push(`${safeColors.primary(paddedName)} ${safeColors.muted(description)}`);\n\n if (cmd.examples && cmd.examples.length > 0) {\n for (const example of cmd.examples.slice(0, 2)) {\n commandItems.push(` ${safeColors.muted(example)}`);\n }\n }\n }\n\n sections.push({\n header: 'Available commands',\n items: commandItems,\n });\n\n // Help section\n sections.push({\n header: 'Next Steps',\n items: [\n `kb ${group.name} <command> --help ${safeColors.muted('Get help for a specific command')}`,\n ],\n });\n\n return sideBorderBox({\n title: `📦 ${group.name}`,\n sections,\n status: 'success',\n timing: tracker.total(),\n });\n}\n\n","import { colors } from \"@kb-labs/cli-runtime\";\nimport { box, formatTiming, TimingTracker } from \"@kb-labs/shared-cli-ui\";\n\nimport type { Command, CommandGroup } from \"../registry/legacy-types\";\nimport type { RegisteredCommand } from \"../registry/types\";\nimport type { ProductGroup } from \"../registry/service\";\n\nexport {\n colors,\n box,\n formatTiming,\n TimingTracker,\n};\n\nexport type { Command, CommandGroup, RegisteredCommand, ProductGroup };\n\nexport function collectManifestVersions(\n commands: RegisteredCommand[],\n): string[] {\n const versions = new Set<string>();\n\n for (const cmd of commands) {\n const schema = cmd.manifest.manifestV2?.schema;\n if (typeof schema === \"string\") {\n const tail = schema.split(\"/\").pop() ?? schema;\n const match = tail.match(/\\d+/);\n versions.add(match ? `v${match[0]}` : tail);\n } else {\n versions.add(\"v2\");\n }\n }\n\n return Array.from(versions).sort();\n}\n\n","import {\n colors,\n TimingTracker,\n type Command,\n type CommandGroup,\n type ProductGroup,\n} from \"./shared\";\nimport { sideBorderBox, type SectionContent } from \"@kb-labs/shared-cli-ui\";\n\nexport function renderGlobalHelp(\n groups: ProductGroup[],\n standalone: Command[],\n): string {\n const lines: string[] = [];\n\n lines.push(\n colors.cyan(colors.bold(\"KB Labs CLI\")) +\n \" - Project management and automation tool\",\n );\n lines.push(\"\");\n lines.push(colors.bold(\"Usage:\") + \" kb [command] [options]\");\n lines.push(\"\");\n\n if (groups.length > 0) {\n lines.push(colors.bold(\"Product Commands:\"));\n lines.push(\"\");\n\n for (const group of groups.sort((a, b) => a.name.localeCompare(b.name))) {\n lines.push(\n ` ${colors.cyan(group.name.padEnd(12))} ${colors.dim(\n group.describe ?? \"\",\n )}`,\n );\n }\n lines.push(\"\");\n }\n\n if (standalone.length > 0) {\n lines.push(colors.bold(\"System Commands:\"));\n lines.push(\"\");\n\n for (const cmd of standalone.sort((a, b) => a.name.localeCompare(b.name))) {\n lines.push(\n ` ${colors.cyan(cmd.name.padEnd(12))} ${colors.dim(cmd.describe)}`,\n );\n }\n lines.push(\"\");\n }\n\n lines.push(colors.bold(\"Global Options:\"));\n lines.push(\"\");\n lines.push(\n ` ${colors.cyan(\"--help\".padEnd(12))} ${colors.dim(\"Show help information\")}`,\n );\n lines.push(\n ` ${colors.cyan(\"--version\".padEnd(12))} ${colors.dim(\"Show CLI version\")}`,\n );\n lines.push(\n ` ${colors.cyan(\"--json\".padEnd(12))} ${colors.dim(\"Output in JSON format\")}`,\n );\n lines.push(\n ` ${colors.cyan(\"--quiet\".padEnd(12))} ${colors.dim(\"Suppress detailed output\")}`,\n );\n lines.push(\"\");\n lines.push(\n colors.dim(\n \"Use 'kb <group> --help' to see commands for a specific product.\",\n ),\n );\n\n return lines.join(\"\\n\");\n}\n\nexport function renderGlobalHelpNew(registry: {\n listProductGroups(): ProductGroup[];\n list(): Command[];\n listGroups?(): CommandGroup[];\n}): string {\n const products = registry.listProductGroups();\n const systemGroups = registry.listGroups?.() || [];\n\n // Get all command names and aliases from groups to exclude them from standalone\n const commandsInGroups = new Set<string>();\n for (const group of systemGroups) {\n for (const cmd of group.commands) {\n commandsInGroups.add(cmd.name);\n // Also add all aliases\n for (const alias of cmd.aliases || []) {\n commandsInGroups.add(alias);\n }\n }\n }\n\n // Filter standalone commands - exclude commands that are already in groups\n const standalone = registry\n .list()\n .filter((cmd: Command) => {\n // Exclude commands that are in groups\n if (commandsInGroups.has(cmd.name)) {\n return false;\n }\n // Keep only system commands without category or with category === \"system\"\n return (!cmd.category || cmd.category === \"system\");\n });\n\n const sections: SectionContent[] = [];\n\n // Products section - simplified format: name (count)\n if (products.length > 0) {\n const maxProductNameLength = Math.max(\n ...products.map((p) => p.name.length),\n 12,\n );\n\n const productItems = products\n .sort((a, b) => a.name.localeCompare(b.name))\n .map((product) => {\n const availableCount = product.commands.filter(\n (c) => c.available && !c.shadowed,\n ).length;\n const badge = colors.green(`(${availableCount})`);\n\n return `${colors.cyan(\n product.name.padEnd(maxProductNameLength),\n )} ${badge}`;\n });\n\n sections.push({\n header: \"Products\",\n items: productItems,\n });\n }\n\n // System Commands section - compact format: group name (count)\n if (systemGroups.length > 0) {\n const maxGroupNameLength = Math.max(\n ...systemGroups.map((g) => g.name.length),\n 20,\n );\n\n const groupItems = systemGroups\n .sort((a, b) => a.name.localeCompare(b.name))\n .map((group) => {\n const commandCount = group.commands.length;\n const badge = colors.green(`(${commandCount})`);\n\n return `${colors.cyan(group.name.padEnd(maxGroupNameLength))} ${badge}`;\n });\n\n sections.push({\n header: \"System Commands\",\n items: groupItems,\n });\n }\n\n // Other Commands section - only show if there are standalone commands\n if (standalone.length > 0) {\n const maxCommandNameLength = Math.max(\n ...standalone.map((c) => c.name.length),\n 12,\n );\n\n const standaloneItems = standalone\n .sort((a, b) => a.name.localeCompare(b.name))\n .map((cmd) =>\n `${colors.cyan(cmd.name.padEnd(maxCommandNameLength))} ${colors.dim(\n cmd.describe,\n )}`\n );\n\n sections.push({\n header: \"Other Commands\",\n items: standaloneItems,\n });\n }\n\n // Global Options section\n const globalOptions = [\n { name: \"--help\", desc: \"Show help information\" },\n { name: \"--version\", desc: \"Show CLI version\" },\n { name: \"--json\", desc: \"Output in JSON format\" },\n { name: \"--quiet\", desc: \"Suppress detailed output\" },\n ];\n\n const maxOptionNameLength = Math.max(\n ...globalOptions.map((o) => o.name.length),\n 12,\n );\n\n const optionItems = globalOptions.map((option) =>\n `${colors.cyan(option.name.padEnd(maxOptionNameLength))} ${colors.dim(\n option.desc,\n )}`\n );\n\n sections.push({\n header: \"Global Options\",\n items: optionItems,\n });\n\n // Next Steps section\n const nextStepsItems: string[] = [];\n\n const firstProduct = products[0];\n if (firstProduct) {\n nextStepsItems.push(\n `${colors.cyan(\n `kb ${firstProduct.name} --help`,\n )} ${colors.dim(\"Explore product commands\")}`,\n );\n }\n\n const marketplaceGroup = systemGroups.find((g: CommandGroup) => g.name === \"marketplace\");\n if (marketplaceGroup) {\n nextStepsItems.push(\n `${colors.cyan(\"kb marketplace\")} ${colors.dim(\"Open marketplace commands\")}`,\n );\n }\n\n nextStepsItems.push(\"\");\n nextStepsItems.push(\n colors.dim(\"Use 'kb <product> --help' or 'kb <group> --help' to see commands for a specific product or group.\"),\n );\n\n sections.push({\n header: \"Next Steps\",\n items: nextStepsItems,\n });\n\n return sideBorderBox({\n title: \"KB Labs CLI\",\n sections,\n status: \"info\",\n });\n}\n\nexport function renderPluginsHelp(registry: {\n list(): Command[];\n}): string {\n const tracker = new TimingTracker();\n\n const _pluginCommands = registry\n .list()\n .filter(\n (cmd) =>\n cmd.name?.startsWith(\"marketplace:\") || cmd.category === \"system\",\n );\n\n const sections: SectionContent[] = [];\n\n // Plugin Management Commands section\n const commandMap: Record<string, string> = {\n \"marketplace:install\": \"Install package(s) from marketplace\",\n \"marketplace:update\": \"Update package(s) from marketplace\",\n \"marketplace:list\": \"List all discovered plugins\",\n \"marketplace:enable\": \"Enable a plugin\",\n \"marketplace:disable\": \"Disable a plugin\",\n \"marketplace:link\": \"Link a local plugin for development\",\n \"marketplace:unlink\": \"Unlink a local plugin\",\n \"marketplace:doctor\": \"Diagnose plugin issues\",\n \"marketplace:scaffold\": \"Generate a new plugin template\",\n \"marketplace:clear-cache\": \"Clear plugin discovery cache\",\n };\n\n const maxLength = Math.max(\n ...Object.keys(commandMap).map((c) => c.length),\n 20,\n );\n\n const commandItems = Object.entries(commandMap).map(([cmdName, desc]) =>\n `${colors.cyan(cmdName.padEnd(maxLength))} ${colors.dim(desc)}`\n );\n\n sections.push({\n header: \"Plugin Management Commands\",\n items: commandItems,\n });\n\n // Examples section\n const examples = [\n `kb marketplace list ${colors.dim(\"List all plugins\")}`,\n `kb marketplace enable @kb-labs/devlink-cli ${colors.dim(\"Enable a plugin\")}`,\n `kb marketplace doctor ${colors.dim(\"Diagnose plugin issues\")}`,\n `kb marketplace scaffold my-plugin ${colors.dim(\"Generate plugin template\")}`,\n ];\n\n sections.push({\n header: \"Examples\",\n items: examples.map(ex => colors.dim(ex)),\n });\n\n // Next steps\n sections.push({\n header: \"Next Steps\",\n items: [colors.dim(\"Use 'kb marketplace <command> --help' for detailed help\")],\n });\n\n return sideBorderBox({\n title: \"🧩 Plugin Management\",\n sections,\n status: \"info\",\n timing: tracker.total(),\n });\n}\n","import {\n colors,\n collectManifestVersions,\n TimingTracker,\n type RegisteredCommand,\n} from \"./shared\";\nimport { sideBorderBox, type SectionContent } from \"@kb-labs/shared-cli-ui\";\n\nexport function renderProductHelp(\n groupName: string,\n commands: RegisteredCommand[],\n): string {\n const tracker = new TimingTracker();\n const sections: SectionContent[] = [];\n\n const manifestVersions = collectManifestVersions(commands);\n if (manifestVersions.length > 0) {\n sections.push({\n header: \"Manifest\",\n items: [colors.cyan(manifestVersions.join(\" + \"))],\n });\n }\n\n const availableMap = new Map<string, RegisteredCommand>();\n const unavailableMap = new Map<string, RegisteredCommand>();\n\n for (const cmd of commands) {\n if (cmd.available && !cmd.shadowed) {\n if (!availableMap.has(cmd.manifest.id)) {\n availableMap.set(cmd.manifest.id, cmd);\n }\n } else if (!unavailableMap.has(cmd.manifest.id)) {\n unavailableMap.set(cmd.manifest.id, cmd);\n }\n }\n\n const available = Array.from(availableMap.values()).sort((a, b) =>\n a.manifest.id.localeCompare(b.manifest.id),\n );\n const unavailable = Array.from(unavailableMap.values()).sort((a, b) =>\n a.manifest.id.localeCompare(b.manifest.id),\n );\n\n // Calculate max length based on display format (with spaces instead of colons)\n const maxLength = Math.max(\n ...[...available, ...unavailable].map((c) => c.manifest.id.replace(/:/g, ' ').length),\n 20,\n );\n\n // Available commands section\n const availableItems: string[] = [];\n for (const cmd of available) {\n const status = colors.green(\"✓\");\n // Convert command ID to user-friendly format (replace : with space for display)\n const displayId = cmd.manifest.id.replace(/:/g, ' ');\n const paddedId = displayId.padEnd(maxLength);\n availableItems.push(\n `${status} ${colors.cyan(paddedId)} ${colors.dim(\n cmd.manifest.describe,\n )}`,\n );\n\n if (cmd.manifest.examples && cmd.manifest.examples.length > 0) {\n for (const example of cmd.manifest.examples.slice(0, 2) as string[]) {\n availableItems.push(` ${colors.dim(example)}`);\n }\n }\n }\n\n sections.push({\n header: \"Available Commands\",\n items: availableItems,\n });\n\n // Unavailable commands section (if any)\n if (unavailable.length > 0) {\n const unavailableItems: string[] = [];\n for (const cmd of unavailable) {\n const status = colors.red(\"✗\");\n // Convert command ID to user-friendly format (replace : with space for display)\n const displayId = cmd.manifest.id.replace(/:/g, ' ');\n const paddedId = displayId.padEnd(maxLength);\n unavailableItems.push(\n `${status} ${colors.dim(paddedId)} ${colors.dim(\n cmd.manifest.describe,\n )}`,\n );\n\n if (cmd.unavailableReason) {\n unavailableItems.push(\n ` ${colors.red(`Reason: ${cmd.unavailableReason}`)}`,\n );\n }\n if (cmd.hint) {\n unavailableItems.push(` ${colors.yellow(`Hint: ${cmd.hint}`)}`);\n }\n }\n\n sections.push({\n header: \"Unavailable\",\n items: unavailableItems,\n });\n }\n\n // Next Steps section\n const uniqueCommands = new Map<string, RegisteredCommand>();\n for (const cmd of available) {\n if (!uniqueCommands.has(cmd.manifest.id)) {\n uniqueCommands.set(cmd.manifest.id, cmd);\n }\n }\n\n const nextStepsItems = Array.from(uniqueCommands.values())\n .slice(0, 3)\n .map((cmd) => {\n // Convert command ID to user-friendly format (replace : with space for display)\n const displayId = cmd.manifest.id.replace(/:/g, ' ');\n return `${colors.cyan(`kb ${displayId}`)} ${colors.dim(\n cmd.manifest.describe,\n )}`;\n });\n\n if (nextStepsItems.length === 0) {\n nextStepsItems.push(colors.dim(\"No available commands in this product\"));\n } else {\n nextStepsItems.push(\"\");\n nextStepsItems.push(\n colors.dim(\n `Use 'kb ${groupName} <command> --help' for detailed help`,\n ),\n );\n }\n\n nextStepsItems.push(\"\");\n nextStepsItems.push(\n colors.dim(\"Use 'kb --help' to see all products and system commands.\"),\n );\n\n sections.push({\n header: \"Next Steps\",\n items: nextStepsItems,\n });\n\n return sideBorderBox({\n title: groupName,\n sections,\n status: \"info\",\n timing: tracker.total(),\n });\n}\n\n","import {\n TimingTracker,\n type RegisteredCommand,\n} from \"./shared\";\nimport { formatCommandHelp } from \"@kb-labs/shared-cli-ui\";\n\nexport function renderManifestCommandHelp(\n registered: RegisteredCommand,\n): string {\n const _tracker = new TimingTracker();\n const manifest = registered.manifest;\n\n // Map manifest flags to formatCommandHelp format\n const flags = manifest.flags?.map(flag => ({\n name: flag.name,\n alias: flag.alias,\n description: flag.describe ?? flag.description,\n required: flag.required,\n }));\n\n // Use new modern formatCommandHelp utility\n return formatCommandHelp({\n title: manifest.id,\n description: manifest.describe,\n longDescription: manifest.longDescription,\n examples: manifest.examples,\n flags,\n aliases: manifest.aliases,\n });\n}\n\n","import {\n colors,\n type RegisteredCommand,\n} from \"./shared\";\n\ninterface RenderHelpOptions {\n json: boolean;\n onlyAvailable: boolean;\n version?: string;\n}\n\nexport function renderHelp(\n commands: RegisteredCommand[],\n options: RenderHelpOptions,\n): string | Record<string, unknown> {\n const grouped = groupCommands(commands, options.onlyAvailable);\n\n if (options.json) {\n return {\n version: options.version ?? \"1.0.0\",\n generatedAt: new Date().toISOString(),\n groups: grouped.map((group) => ({\n name: group.name,\n describe: group.describe,\n commands: group.commands.map((cmd) => ({\n id: cmd.manifest.id,\n describe: cmd.manifest.describe,\n group: cmd.manifest.group,\n aliases: cmd.manifest.aliases ?? [],\n available: cmd.available && !cmd.shadowed,\n source: cmd.source,\n shadowed: cmd.shadowed ?? false,\n reason: cmd.unavailableReason,\n hint: cmd.hint,\n })),\n })),\n };\n }\n\n const lines: string[] = [];\n lines.push(colors.bold(\"KB Labs CLI\"));\n lines.push(\"\");\n\n for (const group of grouped) {\n lines.push(colors.bold(group.name));\n for (const cmd of group.commands) {\n // Convert command ID to user-friendly format (replace : with space for display)\n const displayId = cmd.manifest.id.replace(/:/g, ' ');\n lines.push(\n ` ${colors.cyan(displayId)} ${colors.dim(\n cmd.manifest.describe ?? \"\",\n )}`,\n );\n }\n lines.push(\"\");\n }\n\n return lines.join(\"\\n\");\n}\n\nfunction groupCommands(\n commands: RegisteredCommand[],\n onlyAvailable: boolean,\n) {\n const groups = new Map<\n string,\n { name: string; describe?: string; commands: RegisteredCommand[] }\n >();\n\n for (const cmd of commands) {\n const shouldInclude =\n !onlyAvailable || (cmd.available && !cmd.shadowed);\n if (!shouldInclude) {\n continue;\n }\n\n const groupName = cmd.manifest.group ?? \"system\";\n if (!groups.has(groupName)) {\n groups.set(groupName, {\n name: groupName,\n describe: cmd.manifest.group,\n commands: [],\n });\n }\n groups.get(groupName)!.commands.push(cmd);\n }\n\n for (const group of groups.values()) {\n group.commands.sort((a, b) =>\n a.manifest.id.localeCompare(b.manifest.id),\n );\n }\n\n return Array.from(groups.values()).sort((a, b) =>\n a.name.localeCompare(b.name),\n );\n}\n\n","/**\n * @kb-labs/cli-commands\n * Public surface: types, registry, findCommand, registerBuiltinCommands.\n * This package does not handle parsing argv/logging/exit.\n */\nexport * from \"./registry/types\";\nexport {\n registry,\n findCommand,\n findCommandWithType,\n type ProductGroup,\n type CommandType,\n type CommandLookupResult,\n} from \"./registry/service\";\nexport { registerBuiltinCommands } from \"./utils/register\";\nexport * from \"./utils/help-generator\";\nexport { generateExamples, type ExampleCase } from \"./utils/generate-examples\";\nexport { TimingTracker } from \"@kb-labs/shared-cli-ui\";\nexport { discoverManifestsByNamespace, discoverManifests } from \"./registry/discover\";\nexport { hello } from \"./commands/system/hello\";\nexport { health } from \"./commands/system/health\";\nexport { version } from \"./commands/system/version\";\n\n// Logs commands (agent-first log viewing and analysis)\nexport { logsDiagnose, logsContext, logsSummarize, logsQuery, logsSearch, logsGet, logsStats } from \"./commands/system/logs\";\n"]}
1
+ {"version":3,"sources":["../src/utils/path.ts","../src/registry/schema.ts","../src/registry/discover.ts","../src/registry/service.ts","../src/utils/generate-examples.ts","../src/commands/system/hello.ts","../src/commands/system/version.ts","../src/commands/system/health.ts","../src/commands/system/diag.ts","../src/commands/system/registry-diagnostics.ts","../src/registry/plugins-state.ts","../src/builtins/plugins-cache-clear.ts","../src/commands/system/docs-generate-cli-reference.ts","../src/commands/system/logs/logs-utils.ts","../src/commands/system/logs/logs-diagnose.ts","../src/commands/system/logs/logs-context.ts","../src/commands/system/logs/logs-summarize.ts","../src/commands/system/logs/logs-query.ts","../src/commands/system/logs/logs-search.ts","../src/commands/system/logs/logs-get.ts","../src/commands/system/logs/logs-stats.ts","../src/commands/system/auth/auth-login.ts","../src/commands/system/auth/auth-logout.ts","../src/commands/system/auth/auth-status.ts","../src/commands/system/auth/auth-create-service-account.ts","../src/commands/system/platform/sync.ts","../src/commands/system/groups.ts","../src/registry/availability.ts","../src/registry/register.ts","../src/utils/shutdown.ts","../src/utils/register.ts","../src/presentation/group-help.ts","../src/presentation/shared.ts","../src/presentation/global-help.ts","../src/presentation/product-help.ts","../src/presentation/manifest-help.ts","../src/presentation/registry-help.ts","../src/index.ts"],"names":["req","version","fs","parseYaml","exports","totalTime","sourceCounts","cmd","defineSystemCommand","platform","path","diag","getContextCwd","registry","createRegistry","result","log","CredentialsManager","__filename","__dirname","existsSync","discoverManifests","safeColors","marketplaceGroup","sideBorderBox","TimingTracker"],"mappings":"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","file":"index.js","sourcesContent":["export { toPosixPath } from \"@kb-labs/shared-cli-ui\";\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, project wins — workspace packages override the installed platform.\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 === 'project' ? existing : result;\n const loser = existing.scope === 'project' ? result : existing;\n log('debug', JSON.stringify({\n code: 'DISCOVERY_SCOPE_OVERRIDE',\n packageName: result.packageName,\n projectPath: winner.pkgRoot,\n platformPath: loser.pkgRoot,\n message: 'Package exists in both platform and project scopes — project 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 // Project workspace — scan pnpm-workspace.yaml at projectRoot when it differs\n // from platformRoot (prod mode). Results are tagged as scope='project' so\n // deduplicateManifests applies project-wins precedence over platform packages.\n let projectWorkspace: DiscoveryResult[] = [];\n if (roots.projectRoot !== roots.platformRoot) {\n try {\n const pwStart = Date.now();\n const raw = await discoverWorkspace(roots.projectRoot);\n projectWorkspace = raw.map(r => ({ ...r, scope: 'project' as const }));\n timings.projectWorkspace = Date.now() - pwStart;\n if (projectWorkspace.length > 0) {\n log('info', `Discovered ${projectWorkspace.length} project workspace packages with CLI manifests`);\n }\n } catch {\n // No pnpm-workspace.yaml in projectRoot — skip silently\n }\n }\n\n // Deduplicate (same package from multiple sources/scopes collapses to one,\n // project wins on cross-scope collisions — see deduplicateManifests).\n const dedupStart = Date.now();\n const results = deduplicateManifests([...workspace, ...installed, ...projectLocal, ...projectWorkspace]);\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","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","/**\n * Generate command examples\n * Simple helper to format command examples for CLI commands\n */\n\nexport interface ExampleCase {\n flags: Record<string, unknown>;\n description?: string;\n}\n\nexport function generateExamples(\n commandName: string,\n productName: string,\n cases: ExampleCase[]\n): string[] {\n return cases.map(c => {\n const flagsStr = Object.entries(c.flags)\n .map(([k, v]) => {\n if (typeof v === 'boolean') {\n return v ? `--${k}` : '';\n }\n return `--${k}=${v}`;\n })\n .filter(Boolean)\n .join(' ');\n\n const cmd = `${productName} ${commandName}${flagsStr ? ' ' + flagsStr : ''}`;\n return c.description ? `${cmd} # ${c.description}` : cmd;\n });\n}\n","import { defineSystemCommand, type CommandResult } from '@kb-labs/shared-command-kit';\nimport { generateExamples } from '../../utils/generate-examples.js';\n\ntype HelloFlags = {\n json: { type: 'boolean'; description?: string };\n};\n\ntype HelloResult = CommandResult & {\n message: string;\n};\n\nexport const hello = defineSystemCommand<HelloFlags, HelloResult>({\n name: 'hello',\n description: 'Print Hello World',\n longDescription: 'Prints \"Hello World\" — a simple smoke-test for CLI functionality',\n category: 'info',\n examples: generateExamples('hello', 'kb', [\n { flags: {} },\n ]),\n flags: {\n json: { type: 'boolean', description: 'Output in JSON format' },\n },\n analytics: {\n command: 'hello',\n startEvent: 'HELLO_STARTED',\n finishEvent: 'HELLO_FINISHED',\n },\n async handler(ctx, _argv, flags) {\n const message = 'Hello World';\n\n ctx.platform?.logger?.info('Hello command executed');\n\n if (!flags.json) {\n ctx.ui?.write(`${message}\\n`);\n } else {\n ctx.ui?.json({ message, status: 'ready' });\n }\n\n return { ok: true, message };\n },\n});\n","import { defineSystemCommand, type CommandResult } from '@kb-labs/shared-command-kit';\nimport { generateExamples } from '../../utils/generate-examples';\n\ntype VersionFlags = {\n json: { type: 'boolean'; description?: string };\n};\n\ntype VersionResult = CommandResult & {\n version: string;\n nodeVersion: string;\n platform: string;\n};\n\nexport const version = defineSystemCommand<VersionFlags, VersionResult>({\n name: 'version',\n description: 'Show CLI version',\n longDescription: 'Displays the current version of the KB Labs CLI',\n category: 'info',\n // Also accessible as `kb version` (short form without group prefix)\n aliases: ['version'],\n examples: generateExamples('version', 'kb', [\n { flags: {} },\n ]),\n flags: {\n json: { type: 'boolean', description: 'Output in JSON format' },\n },\n analytics: {\n command: 'version',\n startEvent: 'VERSION_STARTED',\n finishEvent: 'VERSION_FINISHED',\n },\n async handler(ctx, argv, flags) {\n const cliCtx = ctx.hostContext?.host === 'cli' ? ctx.hostContext : undefined;\n const cliVersion = cliCtx?.cliVersion ?? process.env.CLI_VERSION ?? '0.0.0';\n const nodeVersion = process.version;\n const platform = `${process.platform} ${process.arch}`;\n\n ctx.platform?.logger?.info('Version command executed', {\n version: cliVersion,\n nodeVersion,\n platform\n });\n\n // Output via ctx.ui (pure PluginContextV3)\n if (!flags.json) {\n ctx.ui?.write(`KB Labs CLI v${cliVersion}\\n`);\n ctx.ui?.write(`Node: ${nodeVersion}\\n`);\n ctx.ui?.write(`Platform: ${platform}\\n`);\n } else {\n ctx.ui?.json({\n version: cliVersion,\n nodeVersion,\n platform,\n });\n }\n\n return {\n ok: true,\n version: cliVersion,\n nodeVersion,\n platform,\n };\n },\n});\n","import { createRegistry } from '@kb-labs/core-registry';\nimport { generateExamples } from '../../utils/generate-examples';\nimport { defineSystemCommand, type CommandResult } from '@kb-labs/shared-command-kit';\n\ntype HealthFlags = {\n json: { type: 'boolean'; description?: string };\n};\n\ntype HealthSnapshot = {\n status: string;\n version: { kbLabs?: string; cli?: string; rest?: string; git?: { sha: string; dirty?: boolean } };\n registry: { total: number; withRest: number; withStudio: number; errors: number; generatedAt: string; expiresAt?: string; partial?: boolean; stale?: boolean };\n uptimeSec: number;\n};\n\ntype HealthResult = CommandResult & {\n healthStatus: 'healthy' | 'degraded' | 'unhealthy';\n snapshot?: HealthSnapshot;\n};\n\nexport const health = defineSystemCommand<HealthFlags, HealthResult>({\n name: 'health',\n description: 'Report overall CLI health snapshot',\n longDescription: 'Shows the kb.health/1 snapshot shared with REST and Studio.',\n category: 'info',\n // Also accessible as `kb health` (short form without group prefix)\n aliases: ['health'],\n examples: generateExamples('health', 'kb', [\n { flags: {} },\n { flags: { json: true } },\n ]),\n flags: {\n json: { type: 'boolean', description: 'Output in JSON format' },\n },\n analytics: {\n command: 'health',\n startEvent: 'HEALTH_STARTED',\n finishEvent: 'HEALTH_FINISHED',\n },\n async handler(ctx, _argv, _flags) {\n const cliApi = await createRegistry({\n cache: { ttlMs: 5000 },\n });\n\n try {\n ctx.platform?.logger?.info('Health check started');\n\n const snapshot = await cliApi.getSystemHealth({\n uptimeSec: process.uptime(),\n version: { rest: 'n/a' },\n meta: { source: 'cli' },\n });\n\n ctx.platform?.logger?.info('Health check completed', { status: snapshot.status });\n\n return {\n ok: snapshot.status === 'healthy',\n status: snapshot.status === 'healthy' ? 'success' as const : 'warning' as const,\n healthStatus: (snapshot.status as HealthResult['healthStatus']) || 'unhealthy',\n snapshot: snapshot as HealthSnapshot,\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n ctx.platform?.logger?.error('Health check failed', error instanceof Error ? error : undefined, { error: message });\n\n return {\n ok: false,\n status: 'error' as const,\n healthStatus: 'degraded' as const,\n error: message,\n };\n } finally {\n await cliApi.dispose();\n }\n },\n // eslint-disable-next-line sonarjs/cognitive-complexity -- Complex health status formatting with nested conditions for different health states\n formatter(result, ctx, flags) {\n // Auto-handle JSON mode\n if (flags.json) {\n const jsonOutput = result.snapshot || {\n schema: 'kb.health/1',\n status: result.healthStatus,\n error: result.error,\n };\n console.log(JSON.stringify(jsonOutput, null, 2));\n } else {\n if (result.error) {\n ctx.ui.error('System Health', {\n sections: [\n {\n header: 'Status',\n items: [`Status: ${result.healthStatus}`, `Error: ${result.error}`],\n },\n ],\n });\n } else if (result.snapshot) {\n const snapshot = result.snapshot;\n const gitInfo = snapshot.version.git\n ? `${snapshot.version.git.sha}${snapshot.version.git.dirty ? ' (dirty)' : ''}`\n : 'n/a';\n\n const sections = [\n {\n header: 'Status',\n items: [\n `Status: ${result.healthStatus}`,\n `KB Labs: ${snapshot.version.kbLabs}`,\n `CLI: ${ctx.hostContext?.host === 'cli' ? ctx.hostContext.cliVersion : process.env.CLI_VERSION ?? '0.0.0'}`,\n `REST: ${snapshot.version.rest}`,\n `Git: ${gitInfo}`,\n ],\n },\n {\n header: 'Registry',\n items: [\n `Plugins: ${snapshot.registry.total} total (rest ${snapshot.registry.withRest}, studio ${snapshot.registry.withStudio})`,\n `Errors: ${snapshot.registry.errors}`,\n `Generated: ${snapshot.registry.generatedAt}`,\n `Expires: ${snapshot.registry.expiresAt ?? 'n/a'}`,\n `Partial: ${snapshot.registry.partial ? 'yes' : 'no'}`,\n `Stale: ${snapshot.registry.stale ? 'yes' : 'no'}`,\n ],\n },\n {\n header: 'System',\n items: [`Uptime: ${snapshot.uptimeSec}s`],\n },\n ];\n\n if (result.healthStatus === 'healthy') {\n ctx.ui.success('System Health', { sections });\n } else {\n ctx.ui.warn('System Health', { sections });\n }\n }\n }\n },\n});\n\n","/**\n * diag command - Unified diagnostics command combining all system checks\n */\n\nimport { defineSystemCommand } from '@kb-labs/shared-command-kit';\nimport { generateExamples } from '../../utils/generate-examples';\nimport { registry } from '../../registry/service';\nimport { discoverManifests } from '../../registry/discover';\nimport { readMarketplaceLock, DiagnosticCollector } from '@kb-labs/core-discovery';\nimport { promises as fs } from 'node:fs';\nimport path from 'node:path';\nimport { getContextCwd, safeColors, safeSymbols } from '@kb-labs/shared-cli-ui';\n\ntype DiagDetails = {\n category: string;\n status: 'ok' | 'warning' | 'error';\n message: string;\n details?: Record<string, unknown>;\n};\n\ntype DiagSummary = {\n total: number;\n ok: number;\n warnings: number;\n errors: number;\n};\n\ntype DiagResult = {\n ok: boolean;\n diagnostics: DiagDetails[];\n summary: DiagSummary;\n};\n\ntype DiagFlags = {\n json: { type: 'boolean'; description?: string };\n};\n\nexport const diag = defineSystemCommand<DiagFlags, DiagResult>({\n name: 'diag',\n description: 'Comprehensive system diagnostics (plugins, cache, environment, versions)',\n category: 'info',\n examples: generateExamples('diag', 'kb', [\n { flags: {} },\n { flags: { json: true } },\n ]),\n flags: {\n json: { type: 'boolean', description: 'Output in JSON format' },\n },\n analytics: {\n command: 'diag',\n startEvent: 'DIAG_STARTED',\n finishEvent: 'DIAG_FINISHED',\n },\n // eslint-disable-next-line sonarjs/cognitive-complexity -- Comprehensive diagnostic checks across multiple system components\n async handler(ctx, _argv, _flags) {\n const cwd = getContextCwd(ctx);\n const diagnostics: Array<{\n category: string;\n status: 'ok' | 'warning' | 'error';\n message: string;\n details?: Record<string, unknown>;\n }> = [];\n\n // 1. Environment check\n const nodeVersion = process.version;\n const cliVersion = process.env.CLI_VERSION || process.env.CLI_VERSION || '0.1.0';\n const platform = process.platform;\n const arch = process.arch;\n\n diagnostics.push({\n category: 'environment',\n status: 'ok',\n message: `Node ${nodeVersion}, CLI ${cliVersion}, ${platform}/${arch}`,\n details: { nodeVersion, cliVersion, platform, arch },\n });\n\n \n // 2. Plugin discovery check — respect KB_PLATFORM_ROOT so that in\n // installed mode (platform installed separately from project) we scan\n // the platform's node_modules, not the user's project. KB_PROJECT_ROOT\n // anchors project-scope plugin discovery under .kb/plugins/.\n try {\n const platformRoot = process.env.KB_PLATFORM_ROOT;\n const projectRoot = process.env.KB_PROJECT_ROOT;\n const discovered = await discoverManifests(cwd, false, { platformRoot, projectRoot });\n const manifests = registry.listManifests();\n \n const enabled = manifests.filter(m => m.available && !m.shadowed).length;\n const disabled = manifests.filter(m => !m.available).length;\n const shadowed = manifests.filter(m => m.shadowed).length;\n \n diagnostics.push({\n category: 'marketplace',\n status: disabled > 0 ? 'warning' : 'ok',\n message: `Found ${discovered.length} packages, ${enabled} enabled, ${disabled} unavailable, ${shadowed} shadowed`,\n details: {\n packages: discovered.length,\n enabled,\n disabled,\n shadowed,\n totalCommands: manifests.length,\n },\n });\n } catch (err: unknown) {\n const errMsg = err instanceof Error ? err.message : String(err);\n diagnostics.push({\n category: 'marketplace',\n status: 'error',\n message: `Discovery failed: ${errMsg}`,\n details: { error: errMsg },\n });\n }\n\n // 3. Cache check\n try {\n const cachePath = path.join(cwd, '.kb', 'cache', 'cli-manifests.json');\n const cacheExists = await fs.access(cachePath).then(() => true).catch(() => false);\n \n if (cacheExists) {\n const cache = JSON.parse(await fs.readFile(cachePath, 'utf8'));\n const age = Date.now() - (cache.timestamp || 0);\n const ageHours = Math.floor(age / (1000 * 60 * 60));\n \n diagnostics.push({\n category: 'cache',\n status: 'ok',\n message: `Cache exists, ${ageHours}h old, ${Object.keys(cache.packages || {}).length} packages cached`,\n details: {\n exists: true,\n ageHours,\n packages: Object.keys(cache.packages || {}).length,\n },\n });\n } else {\n diagnostics.push({\n category: 'cache',\n status: 'ok',\n message: 'No cache found (will be created on next discovery)',\n details: { exists: false },\n });\n }\n } catch (err: unknown) {\n const errMsg = err instanceof Error ? err.message : String(err);\n diagnostics.push({\n category: 'cache',\n status: 'warning',\n message: `Cache check failed: ${errMsg}`,\n details: { error: errMsg },\n });\n }\n\n // 4. Marketplace lock check\n try {\n const lock = await readMarketplaceLock(cwd, new DiagnosticCollector());\n if (lock) {\n const entries = Object.entries(lock.installed);\n const enabledCount = entries.filter(([, e]) => e.enabled !== false).length;\n const disabledCount = entries.length - enabledCount;\n diagnostics.push({\n category: 'marketplace-lock',\n status: 'ok',\n message: `${entries.length} installed (${enabledCount} enabled, ${disabledCount} disabled)`,\n details: { total: entries.length, enabled: enabledCount, disabled: disabledCount },\n });\n } else {\n diagnostics.push({\n category: 'marketplace-lock',\n status: 'warning',\n message: 'No marketplace.lock found — no plugins installed via marketplace',\n });\n }\n } catch (err: unknown) {\n const errMsg = err instanceof Error ? err.message : String(err);\n diagnostics.push({\n category: 'marketplace-lock',\n status: 'error',\n message: `Marketplace lock check failed: ${errMsg}`,\n details: { error: errMsg },\n });\n }\n\n // 5. Version compatibility check\n const versionIssues: Array<{ plugin: string; required: string; current: string }> = [];\n \n try {\n const manifests = registry.listManifests();\n for (const cmd of manifests) {\n const required = cmd.manifest.engine?.kbCli;\n if (required) {\n const requiredParts = required.replace('^', '').split('.');\n const currentParts = cliVersion.split('.');\n if (requiredParts[0] && currentParts[0]) {\n const requiredMajor = parseInt(requiredParts[0], 10);\n const currentMajor = parseInt(currentParts[0], 10);\n \n if (!isNaN(requiredMajor) && !isNaN(currentMajor) && currentMajor < requiredMajor) {\n versionIssues.push({\n plugin: cmd.manifest.package || cmd.manifest.group,\n required,\n current: cliVersion,\n });\n }\n }\n }\n }\n \n if (versionIssues.length > 0) {\n diagnostics.push({\n category: 'versions',\n status: 'warning',\n message: `${versionIssues.length} plugin(s) require newer CLI version`,\n details: { issues: versionIssues },\n });\n } else {\n diagnostics.push({\n category: 'versions',\n status: 'ok',\n message: 'All plugins compatible with current CLI version',\n details: { issues: [] },\n });\n }\n } catch (err: unknown) {\n const errMsg = err instanceof Error ? err.message : String(err);\n diagnostics.push({\n category: 'versions',\n status: 'error',\n message: `Version check failed: ${errMsg}`,\n details: { error: errMsg },\n });\n }\n\n const summary = {\n total: diagnostics.length,\n ok: diagnostics.filter((d) => d.status === 'ok').length,\n warnings: diagnostics.filter((d) => d.status === 'warning').length,\n errors: diagnostics.filter((d) => d.status === 'error').length,\n };\n\n ctx.platform?.logger?.info('Diag command completed', summary);\n\n // Return typed data\n return {\n ok: summary.errors === 0,\n diagnostics,\n summary,\n };\n },\n // eslint-disable-next-line sonarjs/cognitive-complexity -- Complex formatting logic for diagnostic output with multiple display modes\n formatter(result, ctx, flags) {\n // Auto-handle JSON mode\n if (flags.json) {\n console.log(JSON.stringify(result, null, 2));\n } else {\n // Build UI from result data\n const hasErrors = result.summary.errors > 0;\n const hasWarnings = result.summary.warnings > 0;\n\n // Summary items\n const summaryItems = [\n `${safeColors.bold('Total Checks')}: ${result.summary.total}`,\n `${safeColors.success('OK')}: ${result.summary.ok}`,\n `${safeColors.warning('Warnings')}: ${result.summary.warnings}`,\n `${safeColors.error('Errors')}: ${result.summary.errors}`,\n ];\n\n // Diagnostics details\n const diagItems: string[] = [];\n for (const diag of result.diagnostics) {\n const icon =\n diag.status === 'ok'\n ? safeSymbols.success\n : diag.status === 'warning'\n ? safeSymbols.warning\n : safeSymbols.error;\n const colorize =\n diag.status === 'ok'\n ? safeColors.success\n : diag.status === 'warning'\n ? safeColors.warning\n : safeColors.error;\n\n diagItems.push(`${icon} ${colorize(safeColors.bold(diag.category))}: ${diag.message}`);\n\n if (diag.status === 'warning' && Array.isArray(diag.details?.issues)) {\n for (const issue of diag.details.issues as Array<{ plugin: string; required: string; current: string }>) {\n diagItems.push(\n ` ${safeColors.warning(`→ ${issue.plugin}: requires ${issue.required}, found ${issue.current}`)}`,\n );\n }\n }\n }\n\n // Next steps\n const nextSteps: string[] = [];\n if (hasErrors) {\n nextSteps.push(`kb marketplace doctor ${safeColors.muted('Diagnose plugin issues')}`);\n }\n if (hasWarnings) {\n nextSteps.push(`kb marketplace list ${safeColors.muted('List all plugins')}`);\n }\n nextSteps.push(`kb diagnose ${safeColors.muted('Quick environment check')}`);\n\n // Output using ctx.ui based on status\n const sections = [\n {\n header: 'Summary',\n items: summaryItems,\n },\n {\n header: 'Details',\n items: diagItems,\n },\n {\n header: 'Next Steps',\n items: nextSteps,\n },\n ];\n\n if (hasErrors) {\n ctx.ui.error('System Diagnostics', { sections });\n } else if (hasWarnings) {\n ctx.ui.warn('System Diagnostics', { sections });\n } else {\n ctx.ui.success('System Diagnostics', { sections });\n }\n }\n },\n});\n\n","/**\n * registry:diagnostics command - Show detailed registry diagnostic report\n *\n * Runs a fresh discovery cycle and displays all diagnostic events\n * grouped by plugin, with severity, codes, and remediation hints.\n */\n\nimport { defineSystemCommand, type CommandResult } from '@kb-labs/shared-command-kit';\nimport { getContextCwd } from '@kb-labs/shared-cli-ui';\nimport {\n createRegistry,\n formatDiagnosticReport,\n type DiagnosticReport,\n} from '@kb-labs/core-registry';\n\ntype DiagnosticsFlags = {\n json: { type: 'boolean'; description?: string };\n refresh: { type: 'boolean'; description?: string };\n};\n\ntype DiagnosticsResult = CommandResult & {\n report: DiagnosticReport;\n};\n\nexport const registryDiagnostics = defineSystemCommand<DiagnosticsFlags, DiagnosticsResult>({\n name: 'diagnostics',\n description: 'Show registry diagnostic report',\n category: 'registry',\n examples: [],\n flags: {\n json: { type: 'boolean', description: 'Output in JSON format' },\n refresh: { type: 'boolean', description: 'Force fresh discovery (ignore cache)' },\n },\n analytics: {\n command: 'registry:diagnostics',\n startEvent: 'REGISTRY_DIAGNOSTICS_STARTED',\n finishEvent: 'REGISTRY_DIAGNOSTICS_FINISHED',\n },\n async handler(ctx, _argv, flags) {\n const cwd = getContextCwd(ctx);\n\n const registry = await createRegistry({ root: cwd });\n\n if (flags.refresh) {\n await registry.refresh();\n }\n\n const report = registry.getDiagnostics();\n\n await registry.dispose();\n\n return { ok: report.summary.errors === 0, report };\n },\n formatter(result, ctx, flags) {\n if (flags.json) {\n ctx.ui.info(JSON.stringify(result.report, null, 2));\n return;\n }\n\n const text = formatDiagnosticReport(result.report);\n ctx.ui.info(text);\n\n if (result.report.summary.errors > 0) {\n ctx.ui.error(`${result.report.summary.errors} error(s) found — see details above`);\n } else if (result.report.summary.warnings > 0) {\n ctx.ui.warn(`${result.report.summary.warnings} warning(s) — no blockers`);\n } else {\n ctx.ui.success('Registry is healthy — no issues found');\n }\n },\n});\n","/**\n * @kb-labs/cli-commands/registry\n * Plugin state management - read/write .kb/plugins.json\n */\n\nimport { promises as fs } from 'node:fs';\nimport path from 'node:path';\nimport { createHash } from 'node:crypto';\nimport { resetInProcCache } from './discover';\n\nexport interface PluginState {\n enabled: string[]; // Package names that are explicitly enabled\n disabled: string[]; // Package names that are explicitly disabled\n linked: string[]; // Linked plugin paths (for local dev)\n permissions: Record<string, string[]>; // Package -> permissions granted\n integrity: Record<string, string>; // Package -> SRI hash\n crashes: Record<string, number>; // Package -> crash count (for quarantine)\n lastUpdated: number;\n}\n\nconst DEFAULT_STATE: PluginState = {\n enabled: [],\n disabled: [],\n linked: [],\n permissions: {},\n integrity: {},\n crashes: {},\n lastUpdated: Date.now(),\n};\n\n/**\n * Get path to plugins.json\n */\nexport function getPluginsStatePath(cwd: string): string {\n return path.join(cwd, '.kb', 'plugins.json');\n}\n\n/**\n * Load plugin state from .kb/plugins.json\n */\nexport async function loadPluginsState(cwd: string): Promise<PluginState> {\n const statePath = getPluginsStatePath(cwd);\n \n try {\n const content = await fs.readFile(statePath, 'utf8');\n const state = JSON.parse(content) as Partial<PluginState>;\n \n // Merge with defaults\n return {\n ...DEFAULT_STATE,\n ...state,\n enabled: state.enabled || [],\n disabled: state.disabled || [],\n linked: state.linked || [],\n permissions: state.permissions || {},\n integrity: state.integrity || {},\n crashes: state.crashes || {},\n };\n } catch {\n // File doesn't exist, return defaults\n return { ...DEFAULT_STATE };\n }\n}\n\n/**\n * Save plugin state to .kb/plugins.json\n */\nexport async function savePluginsState(cwd: string, state: PluginState): Promise<void> {\n const statePath = getPluginsStatePath(cwd);\n const dir = path.dirname(statePath);\n \n await fs.mkdir(dir, { recursive: true });\n \n state.lastUpdated = Date.now();\n \n await fs.writeFile(statePath, JSON.stringify(state, null, 2), 'utf8');\n}\n\n/**\n * Check if plugin is enabled\n */\nexport function isPluginEnabled(state: PluginState, packageName: string, defaultEnabled: boolean = false): boolean {\n if (state.disabled.includes(packageName)) {\n return false;\n }\n if (state.enabled.includes(packageName)) {\n return true;\n }\n return defaultEnabled;\n}\n\n/**\n * Enable a plugin\n */\nexport async function enablePlugin(cwd: string, packageName: string): Promise<void> {\n const state = await loadPluginsState(cwd);\n \n if (!state.enabled.includes(packageName)) {\n state.enabled.push(packageName);\n }\n \n // Remove from disabled if present\n state.disabled = state.disabled.filter(p => p !== packageName);\n \n await savePluginsState(cwd, state);\n}\n\n/**\n * Disable a plugin\n */\nexport async function disablePlugin(cwd: string, packageName: string): Promise<void> {\n const state = await loadPluginsState(cwd);\n \n if (!state.disabled.includes(packageName)) {\n state.disabled.push(packageName);\n }\n \n // Remove from enabled if present\n state.enabled = state.enabled.filter(p => p !== packageName);\n \n await savePluginsState(cwd, state);\n}\n\n/**\n * Link a local plugin\n */\nexport async function linkPlugin(cwd: string, pluginPath: string): Promise<void> {\n const state = await loadPluginsState(cwd);\n const absPath = path.resolve(cwd, pluginPath);\n \n if (!state.linked.includes(absPath)) {\n state.linked.push(absPath);\n }\n \n await savePluginsState(cwd, state);\n}\n\n/**\n * Unlink a plugin\n */\nexport async function unlinkPlugin(cwd: string, pluginPath: string): Promise<void> {\n const state = await loadPluginsState(cwd);\n const absPath = path.resolve(cwd, pluginPath);\n \n state.linked = state.linked.filter(p => p !== absPath);\n \n await savePluginsState(cwd, state);\n}\n\n/**\n * Grant permissions to a plugin\n */\nexport async function grantPermissions(cwd: string, packageName: string, permissions: string[]): Promise<void> {\n const state = await loadPluginsState(cwd);\n \n if (!state.permissions[packageName]) {\n state.permissions[packageName] = [];\n }\n \n for (const perm of permissions) {\n if (!state.permissions[packageName].includes(perm)) {\n state.permissions[packageName].push(perm);\n }\n }\n \n await savePluginsState(cwd, state);\n}\n\n/**\n * Record a plugin crash (for quarantine)\n */\nexport async function recordCrash(cwd: string, packageName: string): Promise<void> {\n const state = await loadPluginsState(cwd);\n \n state.crashes[packageName] = (state.crashes[packageName] || 0) + 1;\n \n // Auto-disable if crashes exceed threshold\n const CRASH_THRESHOLD = 3;\n if (state.crashes[packageName] >= CRASH_THRESHOLD && !state.disabled.includes(packageName)) {\n state.disabled.push(packageName);\n }\n \n await savePluginsState(cwd, state);\n}\n\n/**\n * Compute SRI hash for a package\n */\nexport async function computePackageIntegrity(pkgRoot: string): Promise<string> {\n try {\n const pkgJsonPath = path.join(pkgRoot, 'package.json');\n const content = await fs.readFile(pkgJsonPath, 'utf8');\n const hash = createHash('sha256').update(content).digest('base64');\n return `sha256-${hash}`;\n } catch {\n return '';\n }\n}\n\n/**\n * Clear plugin cache\n */\nexport async function clearCache(cwd: string, options?: { deep?: boolean }): Promise<{ files: string[]; modules?: string[] }> {\n const cleared: string[] = [];\n\n // 1. Clear .kb/cache/ manifest/plugin files\n const cacheDir = path.join(cwd, '.kb', 'cache');\n try {\n const entries = await fs.readdir(cacheDir);\n for (const entry of entries) {\n if (entry.includes('manifest') || entry.includes('plugin')) {\n const entryPath = path.join(cacheDir, entry);\n await fs.unlink(entryPath);\n cleared.push(entry);\n }\n }\n } catch {\n // Cache dir doesn't exist\n }\n\n // 2. Clear .kb/marketplace.manifests.json (marketplace manifest cache)\n const manifestsCachePath = path.join(cwd, '.kb', 'marketplace.manifests.json');\n try {\n await fs.unlink(manifestsCachePath);\n cleared.push('marketplace.manifests.json');\n } catch {\n // File doesn't exist\n }\n\n // 3. Clear .kb/cache/cli-manifests.json (CLI discovery cache)\n const cliManifestsPath = path.join(cwd, '.kb', 'cache', 'cli-manifests.json');\n try {\n await fs.unlink(cliManifestsPath);\n if (!cleared.includes('cli-manifests.json')) {\n cleared.push('cli-manifests.json');\n }\n } catch {\n // File doesn't exist\n }\n\n // 4. Reset in-process discovery cache so the next discoverManifests() call in\n // the same process performs a fresh scan instead of serving stale results.\n resetInProcCache();\n\n // 5. Deep clearing: clear Node.js module cache for dynamic imports\n const modulesCleared: string[] = [];\n if (options?.deep) {\n try {\n const cache = require.cache;\n for (const key in cache) {\n if (key.includes('plugin') || key.includes('manifest') || key.includes('@kb-labs')) {\n delete cache[key];\n modulesCleared.push(key);\n }\n }\n } catch {\n // Module cache clearing failed (ESM context)\n }\n }\n\n return {\n files: cleared,\n ...(options?.deep ? { modules: modulesCleared } : {}),\n };\n}\n\n","import { defineSystemCommand, type CommandResult } from '@kb-labs/shared-command-kit';\nimport { clearCache } from '../registry/plugins-state';\nimport { getContextCwd } from '@kb-labs/shared-cli-ui';\n\ntype PluginsCacheClearFlags = {\n deep: { type: 'boolean'; description?: string };\n json: { type: 'boolean'; description?: string };\n};\n\ntype PluginsCacheClearResult = CommandResult & {\n action?: string;\n files?: string[];\n modules?: string[];\n count?: number;\n modulesCount?: number;\n};\n\nexport const pluginsCacheClear = defineSystemCommand<PluginsCacheClearFlags, PluginsCacheClearResult>({\n name: 'clear-cache',\n description: 'Clear CLI plugin discovery cache',\n category: 'marketplace',\n examples: ['kb marketplace clear-cache', 'kb marketplace clear-cache --deep'],\n flags: {\n deep: { type: 'boolean', description: 'Also clear Node.js module cache' },\n json: { type: 'boolean', description: 'Output in JSON format' },\n },\n analytics: {\n command: 'marketplace:clear-cache',\n startEvent: 'MARKETPLACE_CACHE_CLEAR_STARTED',\n finishEvent: 'MARKETPLACE_CACHE_CLEAR_FINISHED',\n },\n async handler(ctx, _argv, flags) {\n const deep = flags.deep;\n const cwd = getContextCwd(ctx);\n const result = await clearCache(cwd, { deep });\n\n ctx.platform?.logger?.info('Cache cleared', {\n filesCount: result.files.length,\n modulesCount: result.modules?.length || 0,\n deep,\n });\n\n // Output handling\n if (flags.json) {\n const jsonResult = {\n ok: true,\n action: 'cache:clear',\n files: result.files,\n modules: result.modules,\n count: result.files.length,\n modulesCount: result.modules?.length || 0,\n };\n console.log(JSON.stringify(jsonResult, null, 2));\n return jsonResult;\n }\n\n // Build structured output\n const files = result.files ?? [];\n const modules = result.modules ?? [];\n\n const sections: Array<{ header?: string; items: string[] }> = [];\n\n // Cache files section\n if (files.length > 0) {\n sections.push({\n header: 'Cache Files',\n items: files.map((f) => `✓ ${f}`),\n });\n } else {\n sections.push({\n items: ['No cache files found'],\n });\n }\n\n // Modules section (if deep mode)\n if (deep && modules.length > 0) {\n sections.push({\n header: 'Node Modules',\n items: [`Cleared ${modules.length} module(s) from cache`],\n });\n }\n\n // Summary section\n sections.push({\n header: 'Summary',\n items: [`Removed ${files.length} file(s)${deep ? ` and ${modules.length} module(s)` : ''}`],\n });\n\n ctx.ui.success('', {\n title: '🗑️ Cache Management',\n sections,\n });\n\n return {\n ok: true,\n action: 'cache:clear',\n files: result.files,\n modules: result.modules,\n count: result.files.length,\n modulesCount: result.modules?.length || 0,\n };\n },\n});\n","/**\n * docs:generate-cli-reference command - Generate CLI reference documentation\n */\n\nimport { defineSystemCommand, type CommandResult } from '@kb-labs/shared-command-kit';\nimport type { SectionContent } from '@kb-labs/shared-cli-ui';\nimport { generateExamples } from '../../utils/generate-examples';\nimport { registry } from '../../registry/service';\nimport { promises as fs } from 'node:fs';\nimport path from 'node:path';\nimport { getContextCwd } from '@kb-labs/shared-cli-ui';\n\ntype GenerateCliReferenceFlags = {\n output: { type: 'string'; description?: string };\n json: { type: 'boolean'; description?: string };\n};\n\ntype DocsGenerateResult = CommandResult & {\n message: string;\n sections: SectionContent[];\n json: { output: string; commands: number; groups: number; size: number };\n};\n\nexport const docsGenerateCliReference = defineSystemCommand<GenerateCliReferenceFlags, DocsGenerateResult>({\n name: 'generate-cli-reference',\n description: 'Generate CLI reference documentation from command registry',\n category: 'docs',\n examples: generateExamples('generate-cli-reference', 'docs', [\n { flags: {} },\n { flags: { output: './docs/CLI-REFERENCE.md' } },\n ]),\n flags: {\n output: { type: 'string', description: 'Output file path (default: CLI-REFERENCE.md)' },\n json: { type: 'boolean', description: 'Output in JSON format' },\n },\n analytics: {\n command: 'docs:generate-cli-reference',\n startEvent: 'DOCS_GENERATE_CLI_REFERENCE_STARTED',\n finishEvent: 'DOCS_GENERATE_CLI_REFERENCE_FINISHED',\n },\n // eslint-disable-next-line sonarjs/cognitive-complexity -- Complex markdown generation with nested loops for product groups, commands, and formatting\n async handler(ctx, argv, flags) {\n const cwd = getContextCwd(ctx);\n const outputPath = flags.output || path.join(cwd, 'CLI-REFERENCE.md');\n\n\n // Get all commands from registry\n const commands = registry.list();\n const productGroups = registry.listProductGroups();\n\n ctx.platform?.logger?.info('Generating CLI reference', {\n commands: commands.length,\n products: productGroups.length,\n output: outputPath,\n });\n\n // Group commands by category/group\n const groups = new Map<string, typeof commands>();\n for (const cmd of commands) {\n const group = cmd.category || 'other';\n if (!groups.has(group)) {\n groups.set(group, []);\n }\n groups.get(group)!.push(cmd);\n }\n\n\n // Generate markdown\n const lines: string[] = [];\n lines.push('# KB Labs CLI Reference\\n');\n lines.push(`Generated: ${new Date().toISOString()}\\n`);\n lines.push(`Total Commands: ${commands.length}\\n`);\n lines.push('---\\n');\n\n // Table of contents\n lines.push('## Table of Contents\\n');\n const sortedGroups = Array.from(groups.keys()).sort();\n for (const groupName of sortedGroups) {\n const cmds = groups.get(groupName)!;\n lines.push(`- [${groupName}](#${groupName.toLowerCase()}) (${cmds.length} commands)`);\n }\n lines.push('\\n---\\n');\n\n // Generate sections for each group\n for (const groupName of sortedGroups) {\n const cmds = groups.get(groupName)!.sort((a, b) => a.name.localeCompare(b.name));\n\n lines.push(`## ${groupName}\\n`);\n\n for (const cmd of cmds) {\n lines.push(`### \\`kb ${cmd.name}\\`\\n`);\n lines.push(`${cmd.describe || 'No description'}\\n`);\n\n if (cmd.longDescription) {\n lines.push(`${cmd.longDescription}\\n`);\n }\n\n if (cmd.flags && cmd.flags.length > 0) {\n lines.push('**Flags:**\\n');\n for (const flag of cmd.flags) {\n const alias = flag.alias ? ` (-${flag.alias})` : '';\n const required = flag.required ? ' **(required)**' : '';\n const defaultVal = flag.default !== undefined ? ` (default: \\`${flag.default}\\`)` : '';\n const choices = flag.choices ? ` (choices: ${flag.choices.map(c => `\\`${c}\\``).join(', ')})` : '';\n lines.push(`- \\`--${flag.name}\\`${alias}: ${flag.description || 'No description'}${required}${defaultVal}${choices}`);\n }\n lines.push('');\n }\n\n if (cmd.examples && cmd.examples.length > 0) {\n lines.push('**Examples:**\\n');\n lines.push('```bash');\n for (const example of cmd.examples) {\n lines.push(example);\n }\n lines.push('```\\n');\n }\n\n if (cmd.aliases && cmd.aliases.length > 0) {\n lines.push(`**Aliases:** ${cmd.aliases.map(a => `\\`${a}\\``).join(', ')}\\n`);\n }\n\n lines.push('---\\n');\n }\n }\n\n\n // Write to file\n const content = lines.join('\\n');\n await fs.writeFile(outputPath, content, 'utf-8');\n\n ctx.platform?.logger?.info('CLI reference generated', {\n path: outputPath,\n size: content.length,\n });\n\n const message = `CLI reference generated: ${outputPath}`;\n const sections = [\n {\n header: 'Summary',\n items: [\n `Commands: ${commands.length}`,\n `Groups: ${groups.size}`,\n `Output: ${outputPath}`,\n `Size: ${(content.length / 1024).toFixed(2)} KB`,\n ],\n },\n {\n header: 'Next Steps',\n items: [\n `cat ${outputPath}`,\n 'git add CLI-REFERENCE.md',\n 'git commit -m \"docs: update CLI reference\"',\n ],\n },\n ];\n\n return {\n ok: true,\n status: 'success',\n message,\n sections,\n json: {\n output: outputPath,\n commands: commands.length,\n groups: groups.size,\n size: content.length,\n },\n };\n },\n formatter(result, ctx, flags) {\n if (flags.json) {\n console.log(JSON.stringify(result.json, null, 2));\n } else {\n ctx.ui.success('CLI Reference Generator', { sections: result.sections });\n }\n },\n});\n","/**\n * @module logs-utils\n * Shared utilities for log CLI commands.\n * Parsing, formatting, correlation, diagnostics.\n */\n\nimport type { LogRecord, ILogReader } from '@kb-labs/core-platform';\n\n// ─── Relative Time Parsing ──────────────────────────────────────────────────\n\nconst TIME_UNITS: Record<string, number> = {\n s: 1_000,\n m: 60_000,\n min: 60_000,\n h: 3_600_000,\n d: 86_400_000,\n w: 604_800_000,\n};\n\n/**\n * Parse relative time string to absolute timestamp.\n * Supports: \"30s\", \"5m\", \"2h\", \"1d\", \"1w\", ISO dates, epoch ms.\n *\n * @returns timestamp in milliseconds\n */\nexport function parseRelativeTime(input: string): number {\n // Try relative format: \"1h\", \"30m\", \"2d\"\n const match = input.match(/^(\\d+)(s|m|min|h|d|w)$/);\n if (match) {\n const value = parseInt(match[1]!, 10);\n const unit = match[2]!;\n const ms = TIME_UNITS[unit];\n if (ms) {\n return Date.now() - value * ms;\n }\n }\n\n // Try epoch milliseconds\n const asNumber = Number(input);\n if (!isNaN(asNumber) && asNumber > 1_000_000_000_000) {\n return asNumber;\n }\n\n // Try ISO date string\n const date = new Date(input);\n if (!isNaN(date.getTime())) {\n return date.getTime();\n }\n\n throw new Error(\n `Invalid time format: \"${input}\". Use relative (1h, 30m, 2d) or ISO date.`,\n );\n}\n\n// ─── Log Formatting ─────────────────────────────────────────────────────────\n\n/** Map Pino numeric level to string (matches REST API) */\nfunction mapPinoLevel(level: unknown): string {\n if (typeof level === 'string') {return level;}\n if (typeof level !== 'number') {return 'info';}\n if (level <= 10) {return 'trace';}\n if (level <= 20) {return 'debug';}\n if (level <= 30) {return 'info';}\n if (level <= 40) {return 'warn';}\n if (level <= 50) {return 'error';}\n return 'fatal';\n}\n\nconst LEVEL_COLORS: Record<string, string> = {\n trace: '\\x1b[90m', // gray\n debug: '\\x1b[36m', // cyan\n info: '\\x1b[32m', // green\n warn: '\\x1b[33m', // yellow\n error: '\\x1b[31m', // red\n fatal: '\\x1b[35m', // magenta\n};\nconst RESET = '\\x1b[0m';\n\n/**\n * Format a LogRecord for human-readable CLI output.\n * [10:23:45] ERROR [rest] Connection refused to localhost:6333\n */\nexport function formatLogLine(record: LogRecord): string {\n const pinoLevel = record.fields.level;\n const level = typeof pinoLevel === 'number' ? mapPinoLevel(pinoLevel) : record.level;\n const time = new Date(record.timestamp).toISOString().slice(11, 19); // HH:mm:ss\n const levelPad = level.toUpperCase().padEnd(5);\n const color = LEVEL_COLORS[level] ?? '';\n const source = record.source ? ` [${record.source}]` : '';\n const msg = typeof record.message === 'string' ? record.message : JSON.stringify(record.message);\n\n return `${color}[${time}] ${levelPad}${RESET}${source} ${msg}`;\n}\n\n/**\n * Format a LogRecord for JSON output (clean ISO dates, flat structure).\n */\nexport function formatLogJson(record: LogRecord): object {\n const pinoLevel = record.fields.level;\n const level = typeof pinoLevel === 'number' ? mapPinoLevel(pinoLevel) : record.level;\n const msg = typeof record.message === 'string' ? record.message : JSON.stringify(record.message);\n const { level: _level, time: _time, ...restFields } = record.fields;\n\n return {\n id: record.id,\n time: new Date(record.timestamp).toISOString(),\n level,\n msg,\n source: record.source,\n ...restFields,\n };\n}\n\n// ─── Correlation ────────────────────────────────────────────────────────────\n\nexport interface CorrelationKeys {\n requestId?: string;\n traceId?: string;\n executionId?: string;\n sessionId?: string;\n}\n\n/** Extract correlation keys from LogRecord.fields (matches REST API pattern) */\nexport function extractCorrelationKeys(record: LogRecord): CorrelationKeys {\n return {\n requestId: (record.fields.requestId ?? record.fields.reqId) as string | undefined,\n traceId: record.fields.traceId as string | undefined,\n executionId: record.fields.executionId as string | undefined,\n sessionId: record.fields.sessionId as string | undefined,\n };\n}\n\n/**\n * Find logs related to the target log by correlation keys.\n * Strategy (from REST API):\n * 1. Query ±windowMs around target timestamp\n * 2. Match by any shared correlation key\n * 3. Fallback: same source in time window\n */\nexport async function findRelatedLogs(\n reader: ILogReader,\n target: LogRecord,\n windowMs: number = 60_000,\n): Promise<LogRecord[]> {\n const keys = extractCorrelationKeys(target);\n\n // Strategy 1: correlation keys\n if (keys.requestId || keys.traceId || keys.executionId) {\n const result = await reader.query(\n { from: target.timestamp - windowMs, to: target.timestamp + windowMs },\n { limit: 1000 },\n );\n\n const related = result.logs.filter((log) => {\n if (log.id === target.id) {return false;}\n const logKeys = extractCorrelationKeys(log);\n return (\n (keys.requestId && logKeys.requestId === keys.requestId) ||\n (keys.traceId && logKeys.traceId === keys.traceId) ||\n (keys.executionId && logKeys.executionId === keys.executionId) ||\n (keys.sessionId && logKeys.sessionId === keys.sessionId)\n );\n });\n\n if (related.length > 0) {\n return related.sort((a, b) => a.timestamp - b.timestamp);\n }\n }\n\n // Strategy 2: fallback to same source + time window\n const result = await reader.query(\n { source: target.source, from: target.timestamp - windowMs, to: target.timestamp + windowMs },\n { limit: 50 },\n );\n\n return result.logs\n .filter((log) => log.id !== target.id)\n .sort((a, b) => a.timestamp - b.timestamp);\n}\n\n// ─── Diagnostics ────────────────────────────────────────────────────────────\n\nexport interface TopError {\n message: string;\n count: number;\n source: string;\n firstSeen: string;\n lastSeen: string;\n}\n\nexport interface SourceBreakdown {\n errors: number;\n warnings: number;\n}\n\nexport interface LogDiagnostics {\n total: number;\n errors: number;\n warnings: number;\n sources: string[];\n topErrors: TopError[];\n bySource: Record<string, SourceBreakdown>;\n recentErrors: object[];\n}\n\n/**\n * Compute diagnostic statistics from a set of logs.\n * Used by `logs diagnose` for the structured report.\n */\nexport function computeLogStats(logs: LogRecord[]): LogDiagnostics {\n const bySource: Record<string, SourceBreakdown> = {};\n const errorMessages = new Map<string, { count: number; source: string; firstSeen: number; lastSeen: number }>();\n let errors = 0;\n let warnings = 0;\n\n for (const log of logs) {\n const level = typeof log.fields.level === 'number' ? mapPinoLevel(log.fields.level) : log.level;\n const source = log.source || 'unknown';\n\n if (!bySource[source]) {\n bySource[source] = { errors: 0, warnings: 0 };\n }\n\n if (level === 'error' || level === 'fatal') {\n errors++;\n bySource[source]!.errors++;\n\n const msg = typeof log.message === 'string' ? log.message : JSON.stringify(log.message);\n const existing = errorMessages.get(msg);\n if (existing) {\n existing.count++;\n if (log.timestamp < existing.firstSeen) {existing.firstSeen = log.timestamp;}\n if (log.timestamp > existing.lastSeen) {existing.lastSeen = log.timestamp;}\n } else {\n errorMessages.set(msg, { count: 1, source, firstSeen: log.timestamp, lastSeen: log.timestamp });\n }\n } else if (level === 'warn') {\n warnings++;\n bySource[source]!.warnings++;\n }\n }\n\n const topErrors: TopError[] = Array.from(errorMessages.entries())\n .map(([message, data]) => ({\n message,\n count: data.count,\n source: data.source,\n firstSeen: new Date(data.firstSeen).toISOString(),\n lastSeen: new Date(data.lastSeen).toISOString(),\n }))\n .sort((a, b) => b.count - a.count)\n .slice(0, 10);\n\n // Get last 10 error logs\n const recentErrors = logs\n .filter((l) => {\n const level = typeof l.fields.level === 'number' ? mapPinoLevel(l.fields.level) : l.level;\n return level === 'error' || level === 'fatal';\n })\n .slice(-10)\n .map(formatLogJson);\n\n return {\n total: logs.length,\n errors,\n warnings,\n sources: Object.keys(bySource),\n topErrors,\n bySource,\n recentErrors,\n };\n}\n","/**\n * logs diagnose — \"What went wrong?\" Automated error analysis.\n * Agent-first command: single call gives a full diagnostic report.\n */\n\nimport { defineSystemCommand, type CommandResult } from '@kb-labs/shared-command-kit';\nimport { generateExamples } from '../../../utils/generate-examples';\nimport { platform } from '@kb-labs/core-runtime';\nimport { parseRelativeTime, computeLogStats, formatLogLine } from './logs-utils';\nimport type { TopError, SourceBreakdown } from './logs-utils';\nimport type { LogQuery, LogRecord } from '@kb-labs/core-platform';\n\ntype Flags = {\n from: { type: 'string'; description?: string };\n source: { type: 'string'; description?: string };\n json: { type: 'boolean'; description?: string };\n};\n\ninterface DiagnoseResult extends CommandResult {\n period?: { from: string; to: string };\n summary?: { total: number; errors: number; warnings: number; sources: string[] };\n topErrors?: TopError[];\n bySource?: Record<string, SourceBreakdown>;\n recentErrors?: object[];\n _raw?: LogRecord[];\n}\n\nexport const logsDiagnose = defineSystemCommand<Flags, DiagnoseResult>({\n name: 'diagnose',\n description: 'Analyze recent errors and warnings (agent-friendly diagnostic report)',\n category: 'logs',\n examples: generateExamples('logs diagnose', 'kb', [\n { flags: { json: true }, description: 'Full diagnostic in JSON' },\n { flags: { from: '\"30m\"', source: 'rest' }, description: 'REST errors in last 30m' },\n ]),\n flags: {\n from: { type: 'string', description: 'Time period (default: \"1h\"). Relative: 1h, 30m, 2d' },\n source: { type: 'string', description: 'Filter by source (rest, workflow, cli)' },\n json: { type: 'boolean', description: 'Output in JSON format' },\n },\n async handler(_ctx, _argv, flags) {\n const reader = platform.logs;\n if (!reader) {\n return { ok: false, error: 'Log reader not available. Ensure platform is initialized.' };\n }\n\n const fromTs = flags.from ? parseRelativeTime(flags.from) : Date.now() - 3_600_000;\n const toTs = Date.now();\n\n const query: LogQuery = {\n from: fromTs,\n to: toTs,\n };\n if (flags.source) {query.source = flags.source;}\n\n // Fetch all logs in period (up to 5000 for analysis)\n const result = await reader.query(query, { limit: 5000, sortOrder: 'desc' });\n const diagnostics = computeLogStats(result.logs);\n\n return {\n ok: true,\n period: {\n from: new Date(fromTs).toISOString(),\n to: new Date(toTs).toISOString(),\n },\n summary: {\n total: diagnostics.total,\n errors: diagnostics.errors,\n warnings: diagnostics.warnings,\n sources: diagnostics.sources,\n },\n topErrors: diagnostics.topErrors,\n bySource: diagnostics.bySource,\n recentErrors: diagnostics.recentErrors,\n _raw: result.logs,\n };\n },\n \n formatter(result, ctx, flags) {\n if (flags.json) {\n const { _raw, ...jsonResult } = result;\n ctx.ui.json(jsonResult);\n return;\n }\n\n if (!result.ok) {\n ctx.ui.error('Log Diagnose', { sections: [{ header: 'Error', items: [result.error ?? 'Unknown'] }] });\n return;\n }\n\n const { summary, topErrors, bySource, period } = result;\n\n // Summary\n const summaryItems = [\n `Period: ${period?.from ?? '?'} to ${period?.to ?? '?'}`,\n `Total logs: ${summary?.total ?? 0}`,\n `Errors: ${summary?.errors ?? 0}`,\n `Warnings: ${summary?.warnings ?? 0}`,\n `Sources: ${summary?.sources.join(', ') || 'none'}`,\n ];\n\n const sections: Array<{ header: string; items: string[] }> = [\n { header: 'Summary', items: summaryItems },\n ];\n\n // Top errors\n if ((topErrors?.length ?? 0) > 0) {\n sections.push({\n header: 'Top Errors',\n items: (topErrors ?? []).slice(0, 5).map(\n (e, i) => `${i + 1}. \"${e.message}\" (${e.count}x) [${e.source}]`,\n ),\n });\n }\n\n // By source\n const sourceItems: string[] = [];\n for (const [src, breakdown] of Object.entries(bySource ?? {})) {\n if (breakdown.errors > 0 || breakdown.warnings > 0) {\n sourceItems.push(`${src}: ${breakdown.errors} errors, ${breakdown.warnings} warnings`);\n }\n }\n if (sourceItems.length > 0) {\n sections.push({ header: 'By Source', items: sourceItems });\n }\n\n if ((summary?.errors ?? 0) === 0 && (summary?.warnings ?? 0) === 0) {\n ctx.ui.success('Log Diagnosis', { sections });\n } else if ((summary?.errors ?? 0) > 0) {\n ctx.ui.error('Log Diagnosis', { sections });\n } else {\n ctx.ui.warn('Log Diagnosis', { sections });\n }\n\n // Recent errors\n const raw = result._raw ?? [];\n const errorLogs = raw\n .filter((l) => l.level === 'error' || l.level === 'fatal')\n .slice(0, 5);\n\n if (errorLogs.length > 0) {\n ctx.ui.write('\\nRecent Errors:\\n');\n for (const log of errorLogs) {\n ctx.ui.write(' ' + formatLogLine(log) + '\\n');\n }\n }\n },\n});\n","/**\n * logs context — Show full timeline for an execution/trace/request.\n * Agent-first: \"What happened in this workflow run?\"\n */\n\nimport { defineSystemCommand, type CommandResult } from '@kb-labs/shared-command-kit';\nimport { generateExamples } from '../../../utils/generate-examples';\nimport { platform } from '@kb-labs/core-runtime';\nimport { formatLogLine, formatLogJson, extractCorrelationKeys } from './logs-utils';\nimport type { LogRecord } from '@kb-labs/core-platform';\n\ntype Flags = {\n 'execution-id': { type: 'string'; description?: string };\n 'trace-id': { type: 'string'; description?: string };\n 'request-id': { type: 'string'; description?: string };\n limit: { type: 'number'; description?: string };\n json: { type: 'boolean'; description?: string };\n};\n\nexport const logsContext = defineSystemCommand<Flags, CommandResult>({\n name: 'context',\n description: 'Show full timeline for an execution, trace, or request',\n category: 'logs',\n examples: generateExamples('logs context', 'kb', [\n { flags: { 'execution-id': '\"exec-abc123\"', json: true }, description: 'Workflow execution timeline' },\n { flags: { 'trace-id': '\"trace-xyz\"' }, description: 'Distributed trace timeline' },\n ]),\n flags: {\n 'execution-id': { type: 'string', description: 'Filter by execution ID' },\n 'trace-id': { type: 'string', description: 'Filter by trace ID' },\n 'request-id': { type: 'string', description: 'Filter by request ID' },\n limit: { type: 'number', description: 'Max records (default: 200)' },\n json: { type: 'boolean', description: 'Output in JSON format' },\n },\n async handler(_ctx, _argv, flags) {\n const reader = platform.logs;\n if (!reader) {\n return { ok: false, error: 'Log reader not available. Ensure platform is initialized.' };\n }\n\n const executionId = flags['execution-id'];\n const traceId = flags['trace-id'];\n const requestId = flags['request-id'];\n\n if (!executionId && !traceId && !requestId) {\n return {\n ok: false,\n error: 'At least one correlation key required: --execution-id, --trace-id, or --request-id',\n };\n }\n\n // Fetch a broad set of recent logs (last 24h, up to 5000)\n const maxLogs = flags.limit ?? 200;\n const result = await reader.query(\n { from: Date.now() - 86_400_000 },\n { limit: 5000, sortOrder: 'asc' },\n );\n\n // Filter by correlation key in memory\n const matched = result.logs.filter((log) => {\n const keys = extractCorrelationKeys(log);\n if (executionId && keys.executionId === executionId) {return true;}\n if (traceId && keys.traceId === traceId) {return true;}\n if (requestId && keys.requestId === requestId) {return true;}\n return false;\n }).slice(0, maxLogs);\n\n // Compute timeline metadata\n const firstTs = matched.length > 0 ? matched[0]!.timestamp : 0;\n const lastTs = matched.length > 0 ? matched[matched.length - 1]!.timestamp : 0;\n\n const levelCounts: Record<string, number> = {};\n const sourceCounts: Record<string, number> = {};\n for (const log of matched) {\n levelCounts[log.level] = (levelCounts[log.level] || 0) + 1;\n sourceCounts[log.source] = (sourceCounts[log.source] || 0) + 1;\n }\n\n return {\n ok: true,\n correlationKey: executionId ? { executionId } : traceId ? { traceId } : { requestId },\n timeline: {\n total: matched.length,\n from: firstTs ? new Date(firstTs).toISOString() : null,\n to: lastTs ? new Date(lastTs).toISOString() : null,\n durationMs: lastTs - firstTs,\n },\n byLevel: levelCounts,\n bySource: sourceCounts,\n logs: matched.map(formatLogJson),\n _raw: matched,\n };\n },\n formatter(result, ctx, flags) {\n type LogContextResult = CommandResult & {\n correlationKey?: Record<string, unknown>;\n timeline?: { total: number; from: string | null; to: string | null; durationMs: number };\n byLevel?: Record<string, number>;\n bySource?: Record<string, number>;\n logs?: unknown[];\n _raw?: LogRecord[];\n };\n\n const data = result as LogContextResult;\n\n if (flags.json) {\n const { _raw: _ignored, ...jsonResult } = data;\n ctx.ui.json(jsonResult);\n return;\n }\n\n if (!result.ok) {\n ctx.ui.error('Log Context', { sections: [{ header: 'Error', items: [result.error ?? 'Unknown'] }] });\n return;\n }\n\n const { timeline, correlationKey, byLevel } = data;\n const raw = data._raw ?? [];\n\n // Header\n const keyStr = correlationKey ? Object.entries(correlationKey).map(([k, v]) => `${k}=${v}`).join(', ') : '';\n const durationStr = timeline && timeline.durationMs > 0 ? `${timeline.durationMs}ms` : 'instant';\n\n ctx.ui.success('Execution Context', {\n sections: [{\n header: `${keyStr}`,\n items: [\n `Total events: ${timeline?.total ?? 0}`,\n `Duration: ${durationStr}`,\n `Time: ${timeline?.from ?? 'N/A'} → ${timeline?.to ?? 'N/A'}`,\n `Levels: ${byLevel ? Object.entries(byLevel).map(([k, v]) => `${k}=${v}`).join(', ') : ''}`,\n ],\n }],\n });\n\n // Timeline\n if (raw.length > 0) {\n ctx.ui.write('\\nTimeline:\\n');\n for (const log of raw) {\n ctx.ui.write(' ' + formatLogLine(log) + '\\n');\n }\n } else {\n ctx.ui.write('\\nNo logs found for this correlation key.\\n');\n }\n },\n});\n","/**\n * logs summarize — AI-powered log analysis.\n * Agent-first: ask a natural-language question about logs.\n */\n\nimport { defineSystemCommand, type CommandResult } from '@kb-labs/shared-command-kit';\nimport { generateExamples } from '../../../utils/generate-examples';\nimport { platform } from '@kb-labs/core-runtime';\nimport { parseRelativeTime, computeLogStats } from './logs-utils';\nimport type { LogQuery, LogRecord, LogLevel } from '@kb-labs/core-platform';\n\ninterface LogSummarizeResult extends CommandResult {\n question?: string;\n summary?: string | null;\n llmUsed?: boolean;\n stats?: {\n total: number;\n errors: number;\n warnings: number;\n sources: string[];\n topErrors: { message: string; count: number; source: string }[];\n };\n}\n\ntype Flags = {\n from: { type: 'string'; description?: string };\n to: { type: 'string'; description?: string };\n level: { type: 'string'; description?: string };\n source: { type: 'string'; description?: string };\n json: { type: 'boolean'; description?: string };\n};\n\n/**\n * Build LLM prompt for log summarization (matches REST API pattern).\n */\nfunction buildPrompt(question: string, logs: LogRecord[], stats: ReturnType<typeof computeLogStats>): string {\n let prompt = `You are analyzing application logs. User question: \"${question}\"\\n\\n`;\n\n prompt += `Statistics:\\n`;\n prompt += `Total logs: ${stats.total}\\n`;\n prompt += `Errors: ${stats.errors}\\n`;\n prompt += `Warnings: ${stats.warnings}\\n`;\n prompt += `Sources: ${stats.sources.join(', ')}\\n`;\n\n if (stats.topErrors.length > 0) {\n prompt += `\\nTop Errors:\\n`;\n for (const [idx, err] of stats.topErrors.slice(0, 5).entries()) {\n prompt += `${idx + 1}. \"${err.message}\" (${err.count} occurrences) [${err.source}]\\n`;\n }\n }\n\n // Add recent log entries (limit to 100)\n const recent = logs.slice(-100);\n prompt += `\\nLog Entries (${recent.length} most recent):\\n`;\n for (const log of recent) {\n const time = new Date(log.timestamp).toISOString();\n const msg = typeof log.message === 'string' ? log.message : JSON.stringify(log.message);\n prompt += `[${time}] ${log.level.toUpperCase()} [${log.source}]: ${msg}\\n`;\n\n if (log.fields.err && (log.fields.err as { stack?: string }).stack) {\n const stack = String((log.fields.err as { stack?: string }).stack).split('\\n').slice(0, 3).join('\\n ');\n prompt += ` stack: ${stack}\\n`;\n }\n }\n\n prompt += `\\nInstructions:\\n`;\n prompt += `Provide a clear, concise summary answering the user's question. Focus on:\\n`;\n prompt += `1. What happened (timeline of events)\\n`;\n prompt += `2. Root causes if errors are present\\n`;\n prompt += `3. Patterns or trends\\n`;\n prompt += `4. Actionable recommendations if applicable\\n`;\n prompt += `Keep under 300 words. Plain text, no markdown.\\n`;\n\n return prompt;\n}\n\n/**\n * Generate fallback summary without LLM.\n */\nfunction fallbackSummary(stats: ReturnType<typeof computeLogStats>): string {\n let summary = `Log Summary (statistical, LLM unavailable)\\n\\n`;\n summary += `Total: ${stats.total} logs (${stats.errors} errors, ${stats.warnings} warnings)\\n`;\n\n if (stats.sources.length > 0) {\n summary += `\\nBy Source:\\n`;\n for (const [source, breakdown] of Object.entries(stats.bySource)) {\n summary += ` ${source}: ${breakdown.errors} errors, ${breakdown.warnings} warnings\\n`;\n }\n }\n\n if (stats.topErrors.length > 0) {\n summary += `\\nTop Errors:\\n`;\n for (const [idx, err] of stats.topErrors.slice(0, 5).entries()) {\n summary += ` ${idx + 1}. \"${err.message}\" (${err.count}x) [${err.source}]\\n`;\n }\n }\n\n return summary;\n}\n\nexport const logsSummarize = defineSystemCommand<Flags, LogSummarizeResult>({\n name: 'summarize',\n description: 'AI-powered log analysis — ask a question about your logs',\n category: 'logs',\n examples: generateExamples('logs summarize', 'kb', [\n { flags: { json: true }, description: '\"What errors happened in the last hour?\"' },\n { flags: { from: '\"30m\"', source: 'rest' }, description: '\"Why is the REST API failing?\"' },\n ]),\n flags: {\n from: { type: 'string', description: 'Start time (default: \"1h\"). Relative: 1h, 30m, 2d' },\n to: { type: 'string', description: 'End time' },\n level: { type: 'string', description: 'Filter by level' },\n source: { type: 'string', description: 'Filter by source' },\n json: { type: 'boolean', description: 'Output in JSON format' },\n },\n async handler(_ctx, argv, flags) {\n const reader = platform.logs;\n if (!reader) {\n return { ok: false, error: 'Log reader not available. Ensure platform is initialized.' };\n }\n\n const question = argv[0] || 'What happened recently? Summarize errors and notable events.';\n\n const fromTs = flags.from ? parseRelativeTime(flags.from) : Date.now() - 3_600_000;\n const query: LogQuery = { from: fromTs };\n if (flags.to) {query.to = parseRelativeTime(flags.to);}\n if (flags.level) {query.level = flags.level as LogLevel;}\n if (flags.source) {query.source = flags.source;}\n\n const result = await reader.query(query, { limit: 1000, sortOrder: 'desc' });\n const stats = computeLogStats(result.logs);\n\n // Try AI summarization\n let aiSummary: string | null = null;\n let llmUsed = false;\n\n if (platform.llm) {\n try {\n const prompt = buildPrompt(question, result.logs, stats);\n const response = await platform.llm.complete(prompt, {\n temperature: 0.7,\n maxTokens: 1000,\n systemPrompt: 'You are a technical log analysis assistant. Provide clear, actionable insights based on application logs.',\n });\n aiSummary = response.content.trim();\n llmUsed = true;\n } catch {\n // Graceful fallback\n aiSummary = fallbackSummary(stats);\n }\n } else {\n aiSummary = fallbackSummary(stats);\n }\n\n return {\n ok: true,\n question,\n summary: aiSummary,\n llmUsed,\n stats: {\n total: stats.total,\n errors: stats.errors,\n warnings: stats.warnings,\n sources: stats.sources,\n topErrors: stats.topErrors,\n },\n };\n },\n formatter(result, ctx, flags) {\n if (flags.json) {\n ctx.ui.json(result);\n return;\n }\n\n if (!result.ok) {\n ctx.ui.error('Log Summarize', { sections: [{ header: 'Error', items: [result.error ?? 'Unknown'] }] });\n return;\n }\n\n ctx.ui.write(`Question: ${result.question}\\n`);\n ctx.ui.write(`${result.llmUsed ? '(AI-powered)' : '(Statistical fallback)'}\\n\\n`);\n ctx.ui.write((result.summary ?? '') + '\\n');\n },\n});\n","/**\n * logs query — Query logs with filters and pagination\n */\n\nimport { defineSystemCommand, type CommandResult } from '@kb-labs/shared-command-kit';\nimport { generateExamples } from '../../../utils/generate-examples';\nimport { platform } from '@kb-labs/core-runtime';\nimport type { LogQuery, LogRecord, LogLevel } from '@kb-labs/core-platform';\nimport { parseRelativeTime, formatLogLine, formatLogJson } from './logs-utils';\n\ninterface LogQueryResult extends CommandResult {\n logs?: ReturnType<typeof formatLogJson>[];\n total?: number;\n hasMore?: boolean;\n source?: string;\n _raw?: LogRecord[];\n}\n\ntype Flags = {\n level: { type: 'string'; description?: string };\n source: { type: 'string'; description?: string };\n from: { type: 'string'; description?: string };\n to: { type: 'string'; description?: string };\n limit: { type: 'number'; description?: string };\n offset: { type: 'number'; description?: string };\n json: { type: 'boolean'; description?: string };\n};\n\nexport const logsQuery = defineSystemCommand<Flags, LogQueryResult>({\n name: 'query',\n description: 'Query logs with filters (level, source, time range)',\n category: 'logs',\n examples: generateExamples('logs query', 'kb', [\n { flags: { level: 'error', limit: 10 }, description: 'Last 10 errors' },\n { flags: { from: '\"1h\"', json: true }, description: 'Last hour in JSON' },\n { flags: { source: 'rest', level: 'warn' }, description: 'Warnings from REST API' },\n ]),\n flags: {\n level: { type: 'string', description: 'Filter by level (trace/debug/info/warn/error/fatal)' },\n source: { type: 'string', description: 'Filter by source (rest, workflow, cli, etc.)' },\n from: { type: 'string', description: 'Start time (relative: 1h, 30m, 2d or ISO date)' },\n to: { type: 'string', description: 'End time (relative or ISO date)' },\n limit: { type: 'number', description: 'Max records (default: 50)' },\n offset: { type: 'number', description: 'Skip N records for pagination' },\n json: { type: 'boolean', description: 'Output in JSON format' },\n },\n async handler(_ctx, _argv, flags) {\n const reader = platform.logs;\n if (!reader) {\n return { ok: false, error: 'Log reader not available. Ensure platform is initialized.' };\n }\n\n const query: LogQuery = {};\n if (flags.level) {query.level = flags.level as LogLevel;}\n if (flags.source) {query.source = flags.source;}\n if (flags.from) {query.from = parseRelativeTime(flags.from);}\n if (flags.to) {query.to = parseRelativeTime(flags.to);}\n\n const result = await reader.query(query, {\n limit: flags.limit ?? 50,\n offset: flags.offset ?? 0,\n sortOrder: 'desc',\n });\n\n return {\n ok: true,\n logs: result.logs.map(formatLogJson),\n total: result.total,\n hasMore: result.hasMore,\n source: result.source,\n _raw: result.logs, // kept for formatter\n };\n },\n formatter(result, ctx, flags) {\n if (flags.json) {\n const { _raw, ...jsonResult } = result;\n ctx.ui.json(jsonResult);\n return;\n }\n\n if (!result.ok) {\n ctx.ui.error('Log Query', { sections: [{ header: 'Error', items: [result.error ?? 'Unknown'] }] });\n return;\n }\n\n const raw = result._raw;\n if (!raw || raw.length === 0) {\n ctx.ui.write('No logs found matching criteria.\\n');\n return;\n }\n\n for (const record of raw) {\n ctx.ui.write(formatLogLine(record) + '\\n');\n }\n\n ctx.ui.write(`\\n--- ${raw.length} of ${result.total} logs (source: ${result.source}) ---\\n`);\n },\n});\n","/**\n * logs search — Full-text search across logs (FTS5)\n */\n\nimport { defineSystemCommand, type CommandResult } from '@kb-labs/shared-command-kit';\nimport { generateExamples } from '../../../utils/generate-examples';\nimport { platform } from '@kb-labs/core-runtime';\nimport type { LogRecord } from '@kb-labs/core-platform';\nimport { formatLogLine, formatLogJson } from './logs-utils';\n\ntype Flags = {\n limit: { type: 'number'; description?: string };\n offset: { type: 'number'; description?: string };\n json: { type: 'boolean'; description?: string };\n};\n\ninterface LogSearchResult extends CommandResult {\n _raw?: LogRecord[];\n query?: string;\n logs?: object[];\n total?: number;\n hasMore?: boolean;\n}\n\nexport const logsSearch = defineSystemCommand<Flags, LogSearchResult>({\n name: 'search',\n description: 'Full-text search across logs',\n category: 'logs',\n examples: generateExamples('logs search', 'kb', [\n { flags: {}, description: '\"authentication failed\"' },\n { flags: { json: true, limit: 20 }, description: '\"connection refused\"' },\n ]),\n flags: {\n limit: { type: 'number', description: 'Max records (default: 50)' },\n offset: { type: 'number', description: 'Skip N records for pagination' },\n json: { type: 'boolean', description: 'Output in JSON format' },\n },\n async handler(_ctx, argv, flags) {\n const reader = platform.logs;\n if (!reader) {\n return { ok: false, error: 'Log reader not available. Ensure platform is initialized.' };\n }\n\n const searchText = argv[0];\n if (!searchText) {\n return { ok: false, error: 'Search text required. Usage: kb logs search \"your query\"' };\n }\n\n const caps = reader.getCapabilities();\n if (!caps.hasSearch) {\n return { ok: false, error: 'Full-text search not available. Ensure SQLite persistence is enabled.' };\n }\n\n const result = await reader.search(searchText, {\n limit: flags.limit ?? 50,\n offset: flags.offset ?? 0,\n });\n\n return {\n ok: true,\n query: searchText,\n logs: result.logs.map(formatLogJson),\n total: result.total,\n hasMore: result.hasMore,\n _raw: result.logs,\n };\n },\n formatter(result, ctx, flags) {\n if (flags.json) {\n const { _raw, ...jsonResult } = result;\n ctx.ui.json(jsonResult);\n return;\n }\n\n if (!result.ok) {\n ctx.ui.error('Log Search', { sections: [{ header: 'Error', items: [result.error ?? 'Unknown'] }] });\n return;\n }\n\n const raw = result._raw;\n if (!raw || raw.length === 0) {\n ctx.ui.write(`No logs found matching \"${result.query}\".\\n`);\n return;\n }\n\n ctx.ui.write(`Search results for \"${result.query}\":\\n\\n`);\n for (const record of raw) {\n ctx.ui.write(formatLogLine(record) + '\\n');\n }\n\n ctx.ui.write(`\\n--- ${raw.length} of ${result.total} matches ---\\n`);\n },\n});\n","/**\n * logs get — Get single log by ID with optional related logs\n */\n\nimport { defineSystemCommand, type CommandResult } from '@kb-labs/shared-command-kit';\nimport { generateExamples } from '../../../utils/generate-examples';\nimport { platform } from '@kb-labs/core-runtime';\nimport type { LogRecord } from '@kb-labs/core-platform';\nimport { formatLogLine, formatLogJson, findRelatedLogs, extractCorrelationKeys, type CorrelationKeys } from './logs-utils';\n\ntype Flags = {\n related: { type: 'boolean'; description?: string };\n json: { type: 'boolean'; description?: string };\n};\n\ninterface RelatedLogEntry {\n time: string;\n level: string;\n source: string;\n msg: string;\n}\n\ninterface LogGetResult extends CommandResult {\n _rawLog?: LogRecord;\n _rawRelated?: RelatedLogEntry[];\n log?: Record<string, unknown>;\n correlationKeys?: CorrelationKeys;\n related?: RelatedLogEntry[];\n}\n\nexport const logsGet = defineSystemCommand<Flags, LogGetResult>({\n name: 'get',\n description: 'Get single log by ID (with optional related logs)',\n category: 'logs',\n examples: generateExamples('logs get', 'kb', [\n { flags: {}, description: '<log-id>' },\n { flags: { related: true, json: true }, description: '<log-id>' },\n ]),\n flags: {\n related: { type: 'boolean', description: 'Include related logs (same trace/execution/request)' },\n json: { type: 'boolean', description: 'Output in JSON format' },\n },\n async handler(_ctx, argv, flags) {\n const reader = platform.logs;\n if (!reader) {\n return { ok: false, error: 'Log reader not available. Ensure platform is initialized.' };\n }\n\n const id = argv[0];\n if (!id) {\n return { ok: false, error: 'Log ID required. Usage: kb logs get <id>' };\n }\n\n const log = await reader.getById(id);\n if (!log) {\n return { ok: false, error: `Log not found: ${id}` };\n }\n\n let related: RelatedLogEntry[] | undefined;\n if (flags.related) {\n const relatedLogs = await findRelatedLogs(reader, log);\n related = relatedLogs.map(formatLogJson) as RelatedLogEntry[];\n }\n\n return {\n ok: true,\n log: formatLogJson(log) as Record<string, unknown>,\n correlationKeys: extractCorrelationKeys(log),\n related,\n _rawLog: log,\n _rawRelated: flags.related ? related : undefined,\n };\n },\n formatter(result, ctx, flags) {\n if (flags.json) {\n const { _rawLog, _rawRelated, ...jsonResult } = result;\n ctx.ui.json(jsonResult);\n return;\n }\n\n if (!result.ok) {\n ctx.ui.error('Log Get', { sections: [{ header: 'Error', items: [result.error ?? 'Unknown'] }] });\n return;\n }\n\n const rawLog = result._rawLog;\n const logJson = result.log;\n const keys = result.correlationKeys;\n\n if (!rawLog || !logJson || !keys) {\n return;\n }\n\n // Detailed view of the log\n ctx.ui.write(formatLogLine(rawLog) + '\\n\\n');\n\n const details = [\n `ID: ${logJson['id']}`,\n `Time: ${logJson['time']}`,\n `Level: ${logJson['level']}`,\n `Source: ${logJson['source']}`,\n ];\n\n if (keys.traceId) {details.push(`Trace ID: ${keys.traceId}`);}\n if (keys.executionId) {details.push(`Execution ID: ${keys.executionId}`);}\n if (keys.requestId) {details.push(`Request ID: ${keys.requestId}`);}\n if (keys.sessionId) {details.push(`Session ID: ${keys.sessionId}`);}\n\n // Show fields\n const fieldsToShow = { ...rawLog.fields };\n delete fieldsToShow['level'];\n delete fieldsToShow['time'];\n delete fieldsToShow['traceId'];\n delete fieldsToShow['executionId'];\n delete fieldsToShow['requestId'];\n delete fieldsToShow['reqId'];\n delete fieldsToShow['sessionId'];\n\n if (Object.keys(fieldsToShow).length > 0) {\n details.push(`Fields: ${JSON.stringify(fieldsToShow, null, 2)}`);\n }\n\n ctx.ui.success('Log Detail', { sections: [{ header: 'Info', items: details }] });\n\n // Related logs\n const { related } = result;\n if (related && related.length > 0) {\n ctx.ui.write(`\\nRelated Logs (${related.length}):\\n`);\n for (const r of related) {\n ctx.ui.write(` ${r.time} ${r.level.toUpperCase().padEnd(5)} [${r.source}] ${r.msg}\\n`);\n }\n }\n },\n});\n","/**\n * logs stats — Show log storage statistics and capabilities\n */\n\nimport { defineSystemCommand, type CommandResult } from '@kb-labs/shared-command-kit';\nimport { generateExamples } from '../../../utils/generate-examples';\nimport { platform } from '@kb-labs/core-runtime';\n\ntype Flags = {\n json: { type: 'boolean'; description?: string };\n};\n\ninterface LogCapabilities {\n hasBuffer: boolean;\n hasPersistence: boolean;\n hasSearch: boolean;\n hasStreaming: boolean;\n}\n\ninterface LogBufferStats {\n size: number;\n maxSize: number;\n oldest: string | null;\n newest: string | null;\n}\n\ninterface LogPersistenceStats {\n totalLogs: number;\n oldest: string | null;\n newest: string | null;\n sizeBytes: number;\n sizeMB: number;\n}\n\ntype Result = CommandResult & {\n capabilities?: LogCapabilities;\n buffer?: LogBufferStats;\n persistence?: LogPersistenceStats;\n};\n\nexport const logsStats = defineSystemCommand<Flags, Result>({\n name: 'stats',\n description: 'Show log storage statistics and capabilities',\n category: 'logs',\n examples: generateExamples('logs stats', 'kb', [\n { flags: {} },\n { flags: { json: true } },\n ]),\n flags: {\n json: { type: 'boolean', description: 'Output in JSON format' },\n },\n async handler() {\n const reader = platform.logs;\n if (!reader) {\n return { ok: false, error: 'Log reader not available. Ensure platform is initialized.' };\n }\n\n const stats = await reader.getStats();\n const caps = reader.getCapabilities();\n\n return {\n ok: true,\n capabilities: caps,\n buffer: stats.buffer ? {\n size: stats.buffer.size,\n maxSize: stats.buffer.maxSize,\n oldest: stats.buffer.oldestTimestamp ? new Date(stats.buffer.oldestTimestamp).toISOString() : null,\n newest: stats.buffer.newestTimestamp ? new Date(stats.buffer.newestTimestamp).toISOString() : null,\n } : undefined,\n persistence: stats.persistence ? {\n totalLogs: stats.persistence.totalLogs,\n oldest: stats.persistence.oldestTimestamp ? new Date(stats.persistence.oldestTimestamp).toISOString() : null,\n newest: stats.persistence.newestTimestamp ? new Date(stats.persistence.newestTimestamp).toISOString() : null,\n sizeBytes: stats.persistence.sizeBytes,\n sizeMB: Math.round(stats.persistence.sizeBytes / 1024 / 1024 * 100) / 100,\n } : undefined,\n };\n },\n formatter(result, ctx, flags) {\n if (flags.json) {\n ctx.ui.json(result);\n return;\n }\n\n if (!result.ok) {\n ctx.ui.error('Log Stats', { sections: [{ header: 'Error', items: [result.error ?? 'Unknown error'] }] });\n return;\n }\n\n const sections: Array<{ header: string; items: string[] }> = [];\n\n const caps = result.capabilities;\n if (caps) {\n sections.push({\n header: 'Capabilities',\n items: [\n `Ring Buffer: ${caps.hasBuffer ? 'yes' : 'no'}`,\n `Persistence (SQLite): ${caps.hasPersistence ? 'yes' : 'no'}`,\n `Full-Text Search: ${caps.hasSearch ? 'yes' : 'no'}`,\n `Real-Time Streaming: ${caps.hasStreaming ? 'yes' : 'no'}`,\n ],\n });\n }\n\n const buf = result.buffer;\n if (buf) {\n sections.push({\n header: 'Ring Buffer',\n items: [\n `Size: ${buf.size} / ${buf.maxSize}`,\n `Oldest: ${buf.oldest ?? 'empty'}`,\n `Newest: ${buf.newest ?? 'empty'}`,\n ],\n });\n }\n\n const pers = result.persistence;\n if (pers) {\n sections.push({\n header: 'Persistent Storage',\n items: [\n `Total Logs: ${pers.totalLogs}`,\n `Size: ${pers.sizeMB} MB`,\n `Oldest: ${pers.oldest ?? 'empty'}`,\n `Newest: ${pers.newest ?? 'empty'}`,\n ],\n });\n }\n\n ctx.ui.success('Log Storage Statistics', { sections });\n },\n});\n","/**\n * kb auth login — Authenticate CLI with Gateway.\n *\n * Prompts for Gateway URL + Client ID + Client Secret,\n * exchanges credentials for JWT token pair via POST /auth/token,\n * saves to ~/.kb/credentials.json (chmod 600).\n */\n\nimport { defineSystemCommand, type CommandResult } from '@kb-labs/shared-command-kit';\nimport { CredentialsManager } from '@kb-labs/cli-runtime/gateway';\n\ntype LoginFlags = {\n 'gateway-url': { type: 'string'; description: string };\n 'client-id': { type: 'string'; description: string };\n 'client-secret': { type: 'string'; description: string };\n json: { type: 'boolean'; description: string };\n};\n\ntype LoginResult = CommandResult & {\n gatewayUrl: string;\n expiresIn: number;\n};\n\nexport const authLogin = defineSystemCommand<LoginFlags, LoginResult>({\n name: 'login',\n description: 'Authenticate CLI with Gateway',\n longDescription:\n 'Exchange client credentials for JWT tokens and save to ~/.kb/credentials.json. ' +\n 'Tokens auto-refresh on expiry. Use \"kb auth create-service-account\" to create credentials first.',\n category: 'auth',\n examples: [\n 'kb auth login --gateway-url http://localhost:4000 --client-id clt_xxx --client-secret cs_xxx',\n 'kb auth login --gateway-url https://gateway.example.com --client-id clt_xxx --client-secret cs_xxx --json',\n ],\n flags: {\n 'gateway-url': { type: 'string', description: 'Gateway server URL (e.g. http://localhost:4000)' },\n 'client-id': { type: 'string', description: 'Client ID from service account registration' },\n 'client-secret': { type: 'string', description: 'Client Secret from service account registration' },\n json: { type: 'boolean', description: 'Output in JSON format' },\n },\n async handler(ctx, _argv, flags) {\n const gatewayUrl = flags['gateway-url'];\n const clientId = flags['client-id'];\n const clientSecret = flags['client-secret'];\n\n if (!gatewayUrl || !clientId || !clientSecret) {\n const msg = 'All flags required: --gateway-url, --client-id, --client-secret';\n if (flags.json) {\n ctx.ui?.json({ ok: false, error: msg });\n } else {\n ctx.ui?.error?.(msg);\n }\n return { ok: false, error: msg, gatewayUrl: '', expiresIn: 0 };\n }\n\n // Exchange credentials for tokens\n const tokenUrl = `${gatewayUrl}/auth/token`;\n let tokenResponse: Response;\n try {\n tokenResponse = await fetch(tokenUrl, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ clientId, clientSecret }),\n });\n } catch (err) {\n const msg = `Cannot reach Gateway at ${gatewayUrl}: ${err instanceof Error ? err.message : String(err)}`;\n if (flags.json) {\n ctx.ui?.json({ ok: false, error: msg });\n } else {\n ctx.ui?.error?.(msg);\n }\n return { ok: false, error: msg, gatewayUrl, expiresIn: 0 };\n }\n\n if (!tokenResponse.ok) {\n const body = await tokenResponse.text().catch(() => '');\n const msg = `Authentication failed (HTTP ${tokenResponse.status}): ${body}`;\n if (flags.json) {\n ctx.ui?.json({ ok: false, error: msg });\n } else {\n ctx.ui?.error?.(msg);\n }\n return { ok: false, error: msg, gatewayUrl, expiresIn: 0 };\n }\n\n const tokenData = await tokenResponse.json() as {\n accessToken: string;\n refreshToken: string;\n expiresIn: number;\n };\n\n // Save credentials\n const credentialsManager = new CredentialsManager();\n const expiresAt = Date.now() + tokenData.expiresIn * 1000;\n\n await credentialsManager.save({\n gatewayUrl,\n accessToken: tokenData.accessToken,\n refreshToken: tokenData.refreshToken,\n expiresAt,\n });\n\n if (flags.json) {\n ctx.ui?.json({\n ok: true,\n gatewayUrl,\n expiresIn: tokenData.expiresIn,\n });\n } else {\n ctx.ui?.write?.(`Authenticated with Gateway at ${gatewayUrl}\\n`);\n ctx.ui?.write?.(`Token expires in ${Math.floor(tokenData.expiresIn / 60)} minutes (auto-refresh enabled).\\n`);\n }\n\n return { ok: true, gatewayUrl, expiresIn: tokenData.expiresIn };\n },\n});\n","/**\n * kb auth logout — Remove stored Gateway credentials.\n */\n\nimport { defineSystemCommand, type CommandResult } from '@kb-labs/shared-command-kit';\nimport { CredentialsManager } from '@kb-labs/cli-runtime/gateway';\n\ntype LogoutFlags = {\n json: { type: 'boolean'; description: string };\n};\n\nexport const authLogout = defineSystemCommand<LogoutFlags, CommandResult>({\n name: 'logout',\n description: 'Remove stored Gateway credentials',\n longDescription: 'Deletes ~/.kb/credentials.json. CLI will no longer be able to reach Gateway until re-login.',\n category: 'auth',\n examples: [\n 'kb auth logout',\n 'kb auth logout --json',\n ],\n flags: {\n json: { type: 'boolean', description: 'Output in JSON format' },\n },\n async handler(ctx, _argv, flags) {\n const credentialsManager = new CredentialsManager();\n const existing = await credentialsManager.load();\n\n if (!existing) {\n if (flags.json) {\n ctx.ui?.json({ ok: true, message: 'No credentials found — already logged out.' });\n } else {\n ctx.ui?.write?.('No credentials found — already logged out.\\n');\n }\n return { ok: true };\n }\n\n await credentialsManager.clear();\n\n if (flags.json) {\n ctx.ui?.json({ ok: true, message: 'Logged out. Credentials removed.' });\n } else {\n ctx.ui?.write?.('Logged out. Credentials removed.\\n');\n }\n\n return { ok: true };\n },\n});\n","/**\n * kb auth status — Show current Gateway authentication status.\n */\n\nimport { defineSystemCommand, type CommandResult } from '@kb-labs/shared-command-kit';\nimport { CredentialsManager } from '@kb-labs/cli-runtime/gateway';\n\ntype StatusFlags = {\n json: { type: 'boolean'; description: string };\n};\n\ntype StatusResult = CommandResult & {\n authenticated: boolean;\n gatewayUrl?: string;\n tokenExpired?: boolean;\n expiresAt?: string;\n};\n\nexport const authStatus = defineSystemCommand<StatusFlags, StatusResult>({\n name: 'status',\n description: 'Show Gateway authentication status',\n longDescription: 'Displays current credentials, token expiry, and Gateway URL. Optionally pings the Gateway to verify connectivity.',\n category: 'auth',\n examples: [\n 'kb auth status',\n 'kb auth status --json',\n ],\n flags: {\n json: { type: 'boolean', description: 'Output in JSON format' },\n },\n async handler(ctx, _argv, flags) {\n const credentialsManager = new CredentialsManager();\n const credentials = await credentialsManager.load();\n\n if (!credentials) {\n if (flags.json) {\n ctx.ui?.json({ ok: true, authenticated: false });\n } else {\n ctx.ui?.write?.('Not authenticated. Run \"kb auth login\" to configure Gateway connection.\\n');\n }\n return { ok: true, authenticated: false };\n }\n\n const expired = credentialsManager.isExpired(credentials);\n const expiresAt = new Date(credentials.expiresAt).toISOString();\n const timeLeft = credentials.expiresAt - Date.now();\n const minutesLeft = Math.max(0, Math.floor(timeLeft / 60000));\n\n if (flags.json) {\n ctx.ui?.json({\n ok: true,\n authenticated: true,\n gatewayUrl: credentials.gatewayUrl,\n tokenExpired: expired,\n expiresAt,\n minutesLeft,\n });\n } else {\n ctx.ui?.write?.(`Gateway: ${credentials.gatewayUrl}\\n`);\n if (expired) {\n ctx.ui?.write?.(`Token: expired (will auto-refresh on next request)\\n`);\n } else {\n ctx.ui?.write?.(`Token: valid (expires in ${minutesLeft} min)\\n`);\n }\n }\n\n return {\n ok: true,\n authenticated: true,\n gatewayUrl: credentials.gatewayUrl,\n tokenExpired: expired,\n expiresAt,\n };\n },\n});\n","/**\n * kb auth create-service-account — Register a new service account with Gateway.\n *\n * Calls POST /auth/register to create clientId + clientSecret.\n * These are printed to stdout and should be saved securely.\n */\n\nimport { defineSystemCommand, type CommandResult } from '@kb-labs/shared-command-kit';\n\ntype CreateSAFlags = {\n 'gateway-url': { type: 'string'; description: string };\n name: { type: 'string'; description: string };\n 'namespace-id': { type: 'string'; description: string };\n json: { type: 'boolean'; description: string };\n};\n\ntype CreateSAResult = CommandResult & {\n clientId?: string;\n clientSecret?: string;\n hostId?: string;\n};\n\nexport const authCreateServiceAccount = defineSystemCommand<CreateSAFlags, CreateSAResult>({\n name: 'create-service-account',\n description: 'Register a new service account with Gateway',\n longDescription:\n 'Creates a new client registration in Gateway and returns clientId + clientSecret. ' +\n 'Use these credentials with \"kb auth login\" to authenticate.',\n category: 'auth',\n examples: [\n 'kb auth create-service-account --gateway-url http://localhost:4000 --name my-cli --namespace-id default',\n 'kb auth create-service-account --gateway-url http://localhost:4000 --name ci-agent --namespace-id default --json',\n ],\n flags: {\n 'gateway-url': { type: 'string', description: 'Gateway server URL' },\n name: { type: 'string', description: 'Service account name (1-64 chars)' },\n 'namespace-id': { type: 'string', description: 'Namespace ID (1-64 chars)' },\n json: { type: 'boolean', description: 'Output in JSON format' },\n },\n async handler(ctx, _argv, flags) {\n const gatewayUrl = flags['gateway-url'];\n const name = flags.name;\n const namespaceId = flags['namespace-id'];\n\n if (!gatewayUrl || !name || !namespaceId) {\n const msg = 'All flags required: --gateway-url, --name, --namespace-id';\n if (flags.json) {\n ctx.ui?.json({ ok: false, error: msg });\n } else {\n ctx.ui?.error?.(msg);\n }\n return { ok: false, error: msg };\n }\n\n let response: Response;\n try {\n response = await fetch(`${gatewayUrl}/auth/register`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ name, namespaceId }),\n });\n } catch (err) {\n const msg = `Cannot reach Gateway at ${gatewayUrl}: ${err instanceof Error ? err.message : String(err)}`;\n if (flags.json) {\n ctx.ui?.json({ ok: false, error: msg });\n } else {\n ctx.ui?.error?.(msg);\n }\n return { ok: false, error: msg };\n }\n\n if (!response.ok) {\n const body = await response.text().catch(() => '');\n const msg = `Registration failed (HTTP ${response.status}): ${body}`;\n if (flags.json) {\n ctx.ui?.json({ ok: false, error: msg });\n } else {\n ctx.ui?.error?.(msg);\n }\n return { ok: false, error: msg };\n }\n\n const data = await response.json() as {\n clientId: string;\n clientSecret: string;\n hostId: string;\n };\n\n if (flags.json) {\n ctx.ui?.json({\n ok: true,\n clientId: data.clientId,\n clientSecret: data.clientSecret,\n hostId: data.hostId,\n });\n } else {\n ctx.ui?.write?.('Service account created successfully.\\n\\n');\n ctx.ui?.write?.(` Client ID: ${data.clientId}\\n`);\n ctx.ui?.write?.(` Client Secret: ${data.clientSecret}\\n`);\n ctx.ui?.write?.(` Host ID: ${data.hostId}\\n\\n`);\n ctx.ui?.write?.('Save these credentials securely — the secret is shown only once.\\n\\n');\n ctx.ui?.write?.('To authenticate:\\n');\n ctx.ui?.write?.(` kb auth login --gateway-url ${gatewayUrl} --client-id ${data.clientId} --client-secret ${data.clientSecret}\\n`);\n }\n\n return { ok: true, clientId: data.clientId, clientSecret: data.clientSecret, hostId: data.hostId };\n },\n});\n","/**\n * platform:sync — reconcile filesystem with .kb/marketplace.lock.\n *\n * Behaves as a provisioning step:\n * - dev / monorepo → validate mode (no installs)\n * - prod / Docker → reconcile mode (installs missing marketplace entries)\n * - auto → detect from workspace layout\n */\n\nimport { defineSystemCommand, type CommandResult } from '@kb-labs/shared-command-kit';\nimport { platformSync, type PlatformSyncMode, type PlatformSyncResult } from '@kb-labs/core-runtime';\nimport { generateExamples } from '../../../utils/generate-examples';\nimport { getContextCwd } from '@kb-labs/shared-cli-ui';\n\ntype PlatformSyncFlags = {\n json: { type: 'boolean'; description?: string };\n mode: { type: 'string'; description?: string };\n 'dry-run': { type: 'boolean'; description?: string };\n root: { type: 'string'; description?: string };\n};\n\ntype PlatformSyncCommandResult = CommandResult & {\n sync?: PlatformSyncResult;\n};\n\nfunction isMode(value: string | undefined): value is PlatformSyncMode {\n return value === 'validate' || value === 'reconcile' || value === 'auto';\n}\n\nexport const platformSyncCommand = defineSystemCommand<PlatformSyncFlags, PlatformSyncCommandResult>({\n name: 'provision',\n description: 'Reconcile .kb/marketplace.lock with installed adapters & plugins',\n longDescription:\n 'Reads .kb/marketplace.lock as the declarative source of truth for which adapters ' +\n 'and plugins this installation needs, and makes the filesystem match. ' +\n 'In monorepo/dev mode it only validates. In prod/Docker build mode it installs ' +\n 'missing marketplace packages via pnpm.',\n category: 'platform',\n examples: generateExamples('platform provision', 'kb', [\n { flags: {} },\n { flags: { mode: 'validate' } },\n { flags: { mode: 'reconcile', json: true } },\n { flags: { 'dry-run': true } },\n ]),\n flags: {\n json: { type: 'boolean', description: 'Output machine-readable JSON' },\n mode: {\n type: 'string',\n description: 'Sync mode: validate | reconcile | auto (default: auto)',\n },\n 'dry-run': {\n type: 'boolean',\n description: 'Never install, fail on drift',\n },\n root: {\n type: 'string',\n description: 'Workspace root (default: current working directory)',\n },\n },\n analytics: {\n command: 'platform.sync',\n startEvent: 'PLATFORM_SYNC_STARTED',\n finishEvent: 'PLATFORM_SYNC_FINISHED',\n },\n async handler(ctx, _argv, flags) {\n const cwd = getContextCwd(ctx);\n const root = (flags.root as string | undefined) ?? cwd;\n const modeFlag = flags.mode as string | undefined;\n const mode: PlatformSyncMode = isMode(modeFlag) ? modeFlag : 'auto';\n const dryRun = Boolean(flags['dry-run']);\n\n const logger = ctx.platform?.logger;\n logger?.info('platform sync started', { root, mode, dryRun });\n\n const result = await platformSync({\n root,\n mode,\n dryRun,\n logger,\n });\n\n logger?.info('platform sync finished', {\n ok: result.ok,\n mode: result.mode,\n checked: result.checked,\n missing: result.missing.length,\n mismatched: result.mismatched.length,\n installed: result.installed.length,\n errors: result.errors.length,\n });\n\n return {\n ok: result.ok,\n status: result.ok ? ('success' as const) : ('error' as const),\n sync: result,\n };\n },\n formatter(result, ctx, flags) {\n if (flags.json) {\n console.log(JSON.stringify(result.sync ?? result, null, 2));\n return;\n }\n\n const sync = result.sync;\n if (!sync) {\n ctx.ui.error('Platform Sync', {\n sections: [{ header: 'Error', items: [result.error ?? 'Unknown error'] }],\n });\n return;\n }\n\n const summary: string[] = [\n `Mode: ${sync.mode}${sync.mode !== (flags.mode as string | undefined) && flags.mode !== 'auto' ? ' (auto-detected)' : ''}`,\n `Checked: ${sync.checked}`,\n ];\n if (sync.lockMissing) {\n summary.push('Lock: not found (nothing to reconcile)');\n }\n if (sync.installed.length) {\n summary.push(`Installed: ${sync.installed.length}`);\n }\n if (sync.missing.length) {\n summary.push(`Missing: ${sync.missing.length}`);\n }\n if (sync.mismatched.length) {\n summary.push(`Integrity mismatch: ${sync.mismatched.length}`);\n }\n if (sync.errors.length) {\n summary.push(`Errors: ${sync.errors.length}`);\n }\n\n const sections: Array<{ header: string; items: string[] }> = [\n { header: 'Summary', items: summary },\n ];\n\n if (sync.installed.length) {\n sections.push({\n header: 'Installed',\n items: sync.installed.map((id) => `• ${id}`),\n });\n }\n if (sync.missing.length) {\n sections.push({\n header: 'Missing',\n items: sync.missing.map((id) => `• ${id}`),\n });\n }\n if (sync.mismatched.length) {\n sections.push({\n header: 'Integrity mismatch',\n items: sync.mismatched.map((id) => `• ${id}`),\n });\n }\n if (sync.errors.length) {\n sections.push({\n header: 'Errors',\n items: sync.errors.map((e) => `• ${e.packageId}: ${e.message}`),\n });\n }\n\n const nextSteps: string[] = [];\n if (!sync.ok) {\n if (sync.missing.length && sync.mode === 'validate') {\n nextSteps.push('kb platform provision --mode reconcile Install missing packages');\n }\n if (sync.mismatched.length) {\n nextSteps.push('kb marketplace install <pkg> Re-install mismatched packages');\n }\n }\n if (nextSteps.length) {\n sections.push({ header: 'Next Steps', items: nextSteps });\n }\n\n if (sync.ok) {\n ctx.ui.success('Platform Sync', { sections });\n } else {\n ctx.ui.error('Platform Sync', { sections });\n }\n },\n});\n","/**\n * System command groups - Organized categories for system commands\n *\n * NOTE: Marketplace commands have been migrated to the @kb-labs/marketplace-cli plugin.\n * They are now registered via ManifestV3 with subgroup support, not as system commands.\n */\n\nimport { defineSystemCommandGroup } from '@kb-labs/shared-command-kit';\nimport { hello } from './hello';\nimport { version } from './version';\nimport { health } from './health';\nimport { diag } from './diag';\nimport { registryDiagnostics } from './registry-diagnostics';\nimport { pluginsCacheClear } from '../../builtins/plugins-cache-clear';\nimport { docsGenerateCliReference } from './docs-generate-cli-reference';\nimport { logsDiagnose, logsContext, logsSummarize, logsQuery, logsSearch, logsGet, logsStats } from './logs';\nimport { authLogin, authLogout, authStatus, authCreateServiceAccount } from './auth';\nimport { platformSyncCommand } from './platform/sync';\n\n/**\n * Info Commands Group\n */\nexport const infoGroup = defineSystemCommandGroup('info', 'System information commands', [\n hello,\n version,\n health,\n diag,\n]);\n\n/**\n * Marketplace Commands Group\n */\nexport const marketplaceGroup = defineSystemCommandGroup('marketplace', 'Marketplace management commands', [\n pluginsCacheClear,\n]);\n\n/**\n * Docs Commands Group\n */\nexport const docsGroup = defineSystemCommandGroup('docs', 'Documentation generation commands', [\n docsGenerateCliReference,\n]);\n\n/**\n * Logs Commands Group\n */\nexport const logsGroup = defineSystemCommandGroup('logs', 'Log viewing and analysis commands', [\n logsDiagnose,\n logsContext,\n logsSummarize,\n logsQuery,\n logsSearch,\n logsGet,\n logsStats,\n]);\n\n/**\n * Registry Commands Group\n */\nexport const registryGroup = defineSystemCommandGroup('registry', 'Entity registry commands', [\n registryDiagnostics,\n]);\n\n/**\n * Auth Commands Group\n */\nexport const authGroup = defineSystemCommandGroup('auth', 'Gateway authentication commands', [\n authLogin,\n authLogout,\n authStatus,\n authCreateServiceAccount,\n]);\n\n/**\n * Platform Commands Group\n *\n * Lifecycle commands for the platform itself: provisioning, validation,\n * and (in the future) info/doctor. These are distinct from:\n * - `kb marketplace` — user-facing install/discovery\n * - `kb dev` — local service management\n */\nexport const platformGroup = defineSystemCommandGroup('platform', 'Platform lifecycle commands', [\n platformSyncCommand,\n]);\n","/**\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 * 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 { platform } from '@kb-labs/core-runtime';\n\nconst log = platform.logger.child({ module: 'cli:shutdown' });\n\ntype ShutdownHook = () => void | Promise<void>;\n\nconst hooks = new Set<ShutdownHook>();\nlet signalsBound = false;\nlet exiting = false;\n\nfunction bindSignals(): void {\n if (signalsBound) {\n return;\n }\n signalsBound = true;\n\n const handler = async (signal: NodeJS.Signals): Promise<void> => {\n if (exiting) {\n return;\n }\n exiting = true;\n for (const hook of Array.from(hooks)) {\n try {\n await hook();\n } catch (error) {\n log.warn(`Shutdown hook failed: ${error instanceof Error ? error.message : String(error)}`);\n }\n }\n const exitCode = signal === 'SIGINT' ? 0 : 0;\n process.exit(exitCode);\n };\n\n ['SIGINT', 'SIGTERM'].forEach(signal => {\n process.once(signal as NodeJS.Signals, handler);\n });\n}\n\nexport function registerShutdownHook(hook: ShutdownHook): () => void {\n hooks.add(hook);\n bindSignals();\n return () => {\n hooks.delete(hook);\n };\n}\n","import { registry } from \"../registry/service\";\nimport type { RegisteredCommand } from \"../registry/types\";\nimport {\n infoGroup,\n marketplaceGroup,\n registryGroup,\n docsGroup,\n logsGroup,\n authGroup,\n platformGroup,\n} from \"../commands/system/groups\";\nimport { registerManifests, disposeAllPlugins, preflightManifests } from \"../registry/register\";\nimport { registerShutdownHook } from \"./shutdown\";\nimport { getContextCwd } from \"@kb-labs/shared-cli-ui\";\nimport type { ILogger } from \"@kb-labs/core-platform\";\nimport { platform } from \"@kb-labs/core-runtime\";\n\nlet _registered = false;\nconst registeredCommands: unknown[] = [];\n\nexport interface RegisterBuiltinCommandsInput {\n cwd?: string;\n env?: NodeJS.ProcessEnv;\n logger?: ILogger;\n /**\n * Where the KB Labs platform is installed (parent of\n * `node_modules/@kb-labs/*`). Forwarded to `discoverManifests` so that\n * plugin discovery scans the platform `node_modules` regardless of where\n * the CLI is invoked from. When omitted, falls back to `cwd` — this keeps\n * dev-mode behavior unchanged.\n */\n platformRoot?: string;\n /**\n * The user's project root (directory containing `.kb/kb.config.{json,jsonc}`).\n * Discovery uses this to pick up project-scope plugins from\n * `<projectRoot>/.kb/plugins/` and to invalidate the cache when the\n * project's `marketplace.lock` changes. When omitted, falls back to `cwd`.\n */\n projectRoot?: string;\n}\n\nexport async function registerBuiltinCommands(\n input: RegisterBuiltinCommandsInput = {},\n) {\n const log = input.logger ?? platform.logger;\n\n if (_registered) {\n return;\n }\n _registered = true;\n registry.markPartial(true);\n registeredCommands.length = 0;\n\n // Register system command groups (migrated commands)\n registry.registerGroup(infoGroup);\n registry.registerGroup(marketplaceGroup);\n registry.registerGroup(registryGroup);\n registry.registerGroup(docsGroup);\n registry.registerGroup(logsGroup);\n registry.registerGroup(authGroup);\n registry.registerGroup(platformGroup);\n\n try {\n const cwd = getContextCwd({ cwd: input.cwd });\n const env = input.env ?? process.env;\n const noCache =\n process.argv.includes(\"--no-cache\") || env.KB_PLUGIN_NO_CACHE === \"1\";\n const { discoverManifests } = await import('../registry/discover');\n const discovered = await discoverManifests(cwd, noCache, {\n platformRoot: input.platformRoot,\n projectRoot: input.projectRoot,\n });\n\n if (discovered.length > 0) {\n log.info(`Discovered ${discovered.length} packages with CLI manifests`);\n const { valid: readyToRegister, skipped: preflightSkipped } = preflightManifests(discovered, log);\n\n if (preflightSkipped.length > 0) {\n log.warn(`Preflight skipped ${preflightSkipped.length} manifest(s) during validation`);\n for (const skipped of preflightSkipped) {\n log.warn(` • ${skipped.id} [${skipped.source}] → ${skipped.reason}`);\n }\n }\n\n if (readyToRegister.length === 0) {\n log.error('All discovered manifests were skipped during preflight validation');\n registry.markPartial(true);\n _registered = false;\n return;\n }\n\n const result = await registerManifests(readyToRegister, registry, {\n cwd,\n logger: log,\n });\n if (result.registered.length > 0) {\n log.info(`Registered ${result.registered.length} commands from manifests`);\n registeredCommands.push(...result.registered);\n }\n if (result.skipped.length > 0) {\n for (const skipped of result.skipped) {\n log.error(`Skipped manifest ${skipped.id} from ${skipped.source}: ${skipped.reason}`);\n }\n }\n if (result.skipped.length > 0 || preflightSkipped.length > 0) {\n registry.markPartial(true);\n } else {\n registry.markPartial(false);\n }\n } else {\n registry.markPartial(false);\n }\n\n } catch (err: unknown) {\n log.warn(`Discovery failed: ${err instanceof Error ? err.message : String(err)}`);\n registry.markPartial(true);\n _registered = false;\n return;\n }\n\n registerShutdownHook(async () => {\n await disposeAllPlugins(registry, log);\n });\n}\n\nexport function checkSelfUpdateNotices(registered: RegisteredCommand[]): void {\n const currentCliVersion = process.env.CLI_VERSION || '0.1.0';\n \n for (const cmd of registered) {\n const required = cmd.manifest.engine?.kbCli;\n if (!required || !currentCliVersion) {continue;}\n \n if (required.startsWith('^')) {\n const requiredVersion = required.replace('^', '').trim();\n const requiredMajor = parseInt(requiredVersion.split('.')[0] || '0');\n const currentMajor = parseInt(currentCliVersion.split('.')[0] || '0');\n \n if (currentMajor < requiredMajor) {\n console.warn(`[kb-cli] Plugin ${cmd.manifest.package || cmd.manifest.group} requires kb-cli ${required}, found ${currentCliVersion}`);\n console.warn(`[kb-cli] → Upgrade CLI: pnpm -w update @kb-labs/cli`);\n }\n }\n }\n}\n","import { type CommandGroup } from \"./shared\";\nimport { sideBorderBox, type SectionContent, safeColors, TimingTracker } from \"@kb-labs/shared-cli-ui\";\n\nexport function renderGroupHelp(group: CommandGroup): string {\n const tracker = new TimingTracker();\n\n const sortedCommands = [...group.commands].sort((a, b) =>\n a.name.localeCompare(b.name),\n );\n\n const sections: SectionContent[] = [];\n\n // Summary section\n sections.push({\n items: [\n `${safeColors.bold('Description')}: ${group.describe}`,\n `${safeColors.bold('Commands')}: ${sortedCommands.length}`,\n ],\n });\n\n // Commands section\n // Convert command IDs to user-friendly format (replace all colons with spaces for display)\n const commandDisplayNames = sortedCommands.map((cmd) => {\n // Replace all colons with spaces for display (e.g., \"agent:trace:stats\" -> \"agent trace stats\")\n return cmd.name.replace(/:/g, ' ');\n });\n const maxNameLength = Math.max(...commandDisplayNames.map((name) => name.length));\n const commandItems: string[] = [];\n\n for (let i = 0; i < sortedCommands.length; i++) {\n const cmd = sortedCommands[i];\n const displayName = commandDisplayNames[i];\n if (!cmd || !displayName) {continue;}\n\n const paddedName = displayName.padEnd(maxNameLength);\n const description = cmd.describe || \"No description\";\n commandItems.push(`${safeColors.primary(paddedName)} ${safeColors.muted(description)}`);\n\n if (cmd.examples && cmd.examples.length > 0) {\n for (const example of cmd.examples.slice(0, 2)) {\n commandItems.push(` ${safeColors.muted(example)}`);\n }\n }\n }\n\n sections.push({\n header: 'Available commands',\n items: commandItems,\n });\n\n // Help section\n sections.push({\n header: 'Next Steps',\n items: [\n `kb ${group.name} <command> --help ${safeColors.muted('Get help for a specific command')}`,\n ],\n });\n\n return sideBorderBox({\n title: `📦 ${group.name}`,\n sections,\n status: 'success',\n timing: tracker.total(),\n });\n}\n\n","import { colors } from \"@kb-labs/cli-runtime\";\nimport { box, formatTiming, TimingTracker } from \"@kb-labs/shared-cli-ui\";\n\nimport type { Command, CommandGroup } from \"../registry/legacy-types\";\nimport type { RegisteredCommand } from \"../registry/types\";\nimport type { ProductGroup } from \"../registry/service\";\n\nexport {\n colors,\n box,\n formatTiming,\n TimingTracker,\n};\n\nexport type { Command, CommandGroup, RegisteredCommand, ProductGroup };\n\nexport function collectManifestVersions(\n commands: RegisteredCommand[],\n): string[] {\n const versions = new Set<string>();\n\n for (const cmd of commands) {\n const schema = cmd.manifest.manifestV2?.schema;\n if (typeof schema === \"string\") {\n const tail = schema.split(\"/\").pop() ?? schema;\n const match = tail.match(/\\d+/);\n versions.add(match ? `v${match[0]}` : tail);\n } else {\n versions.add(\"v2\");\n }\n }\n\n return Array.from(versions).sort();\n}\n\n","import {\n colors,\n TimingTracker,\n type Command,\n type CommandGroup,\n type ProductGroup,\n} from \"./shared\";\nimport { sideBorderBox, type SectionContent } from \"@kb-labs/shared-cli-ui\";\n\nexport function renderGlobalHelp(\n groups: ProductGroup[],\n standalone: Command[],\n): string {\n const lines: string[] = [];\n\n lines.push(\n colors.cyan(colors.bold(\"KB Labs CLI\")) +\n \" - Project management and automation tool\",\n );\n lines.push(\"\");\n lines.push(colors.bold(\"Usage:\") + \" kb [command] [options]\");\n lines.push(\"\");\n\n if (groups.length > 0) {\n lines.push(colors.bold(\"Product Commands:\"));\n lines.push(\"\");\n\n for (const group of groups.sort((a, b) => a.name.localeCompare(b.name))) {\n lines.push(\n ` ${colors.cyan(group.name.padEnd(12))} ${colors.dim(\n group.describe ?? \"\",\n )}`,\n );\n }\n lines.push(\"\");\n }\n\n if (standalone.length > 0) {\n lines.push(colors.bold(\"System Commands:\"));\n lines.push(\"\");\n\n for (const cmd of standalone.sort((a, b) => a.name.localeCompare(b.name))) {\n lines.push(\n ` ${colors.cyan(cmd.name.padEnd(12))} ${colors.dim(cmd.describe)}`,\n );\n }\n lines.push(\"\");\n }\n\n lines.push(colors.bold(\"Global Options:\"));\n lines.push(\"\");\n lines.push(\n ` ${colors.cyan(\"--help\".padEnd(12))} ${colors.dim(\"Show help information\")}`,\n );\n lines.push(\n ` ${colors.cyan(\"--version\".padEnd(12))} ${colors.dim(\"Show CLI version\")}`,\n );\n lines.push(\n ` ${colors.cyan(\"--json\".padEnd(12))} ${colors.dim(\"Output in JSON format\")}`,\n );\n lines.push(\n ` ${colors.cyan(\"--quiet\".padEnd(12))} ${colors.dim(\"Suppress detailed output\")}`,\n );\n lines.push(\"\");\n lines.push(\n colors.dim(\n \"Use 'kb <group> --help' to see commands for a specific product.\",\n ),\n );\n\n return lines.join(\"\\n\");\n}\n\nexport function renderGlobalHelpNew(registry: {\n listProductGroups(): ProductGroup[];\n list(): Command[];\n listGroups?(): CommandGroup[];\n}): string {\n const products = registry.listProductGroups();\n const systemGroups = registry.listGroups?.() || [];\n\n // Get all command names and aliases from groups to exclude them from standalone\n const commandsInGroups = new Set<string>();\n for (const group of systemGroups) {\n for (const cmd of group.commands) {\n commandsInGroups.add(cmd.name);\n // Also add all aliases\n for (const alias of cmd.aliases || []) {\n commandsInGroups.add(alias);\n }\n }\n }\n\n // Filter standalone commands - exclude commands that are already in groups\n const standalone = registry\n .list()\n .filter((cmd: Command) => {\n // Exclude commands that are in groups\n if (commandsInGroups.has(cmd.name)) {\n return false;\n }\n // Keep only system commands without category or with category === \"system\"\n return (!cmd.category || cmd.category === \"system\");\n });\n\n const sections: SectionContent[] = [];\n\n // Products section - simplified format: name (count)\n if (products.length > 0) {\n const maxProductNameLength = Math.max(\n ...products.map((p) => p.name.length),\n 12,\n );\n\n const productItems = products\n .sort((a, b) => a.name.localeCompare(b.name))\n .map((product) => {\n const availableCount = product.commands.filter(\n (c) => c.available && !c.shadowed,\n ).length;\n const badge = colors.green(`(${availableCount})`);\n\n return `${colors.cyan(\n product.name.padEnd(maxProductNameLength),\n )} ${badge}`;\n });\n\n sections.push({\n header: \"Products\",\n items: productItems,\n });\n }\n\n // System Commands section - compact format: group name (count)\n if (systemGroups.length > 0) {\n const maxGroupNameLength = Math.max(\n ...systemGroups.map((g) => g.name.length),\n 20,\n );\n\n const groupItems = systemGroups\n .sort((a, b) => a.name.localeCompare(b.name))\n .map((group) => {\n const commandCount = group.commands.length;\n const badge = colors.green(`(${commandCount})`);\n\n return `${colors.cyan(group.name.padEnd(maxGroupNameLength))} ${badge}`;\n });\n\n sections.push({\n header: \"System Commands\",\n items: groupItems,\n });\n }\n\n // Other Commands section - only show if there are standalone commands\n if (standalone.length > 0) {\n const maxCommandNameLength = Math.max(\n ...standalone.map((c) => c.name.length),\n 12,\n );\n\n const standaloneItems = standalone\n .sort((a, b) => a.name.localeCompare(b.name))\n .map((cmd) =>\n `${colors.cyan(cmd.name.padEnd(maxCommandNameLength))} ${colors.dim(\n cmd.describe,\n )}`\n );\n\n sections.push({\n header: \"Other Commands\",\n items: standaloneItems,\n });\n }\n\n // Global Options section\n const globalOptions = [\n { name: \"--help\", desc: \"Show help information\" },\n { name: \"--version\", desc: \"Show CLI version\" },\n { name: \"--json\", desc: \"Output in JSON format\" },\n { name: \"--quiet\", desc: \"Suppress detailed output\" },\n ];\n\n const maxOptionNameLength = Math.max(\n ...globalOptions.map((o) => o.name.length),\n 12,\n );\n\n const optionItems = globalOptions.map((option) =>\n `${colors.cyan(option.name.padEnd(maxOptionNameLength))} ${colors.dim(\n option.desc,\n )}`\n );\n\n sections.push({\n header: \"Global Options\",\n items: optionItems,\n });\n\n // Next Steps section\n const nextStepsItems: string[] = [];\n\n const firstProduct = products[0];\n if (firstProduct) {\n nextStepsItems.push(\n `${colors.cyan(\n `kb ${firstProduct.name} --help`,\n )} ${colors.dim(\"Explore product commands\")}`,\n );\n }\n\n const marketplaceGroup = systemGroups.find((g: CommandGroup) => g.name === \"marketplace\");\n if (marketplaceGroup) {\n nextStepsItems.push(\n `${colors.cyan(\"kb marketplace\")} ${colors.dim(\"Open marketplace commands\")}`,\n );\n }\n\n nextStepsItems.push(\"\");\n nextStepsItems.push(\n colors.dim(\"Use 'kb <product> --help' or 'kb <group> --help' to see commands for a specific product or group.\"),\n );\n\n sections.push({\n header: \"Next Steps\",\n items: nextStepsItems,\n });\n\n return sideBorderBox({\n title: \"KB Labs CLI\",\n sections,\n status: \"info\",\n });\n}\n\nexport function renderPluginsHelp(registry: {\n list(): Command[];\n}): string {\n const tracker = new TimingTracker();\n\n const _pluginCommands = registry\n .list()\n .filter(\n (cmd) =>\n cmd.name?.startsWith(\"marketplace:\") || cmd.category === \"system\",\n );\n\n const sections: SectionContent[] = [];\n\n // Plugin Management Commands section\n const commandMap: Record<string, string> = {\n \"marketplace:install\": \"Install package(s) from marketplace\",\n \"marketplace:update\": \"Update package(s) from marketplace\",\n \"marketplace:list\": \"List all discovered plugins\",\n \"marketplace:enable\": \"Enable a plugin\",\n \"marketplace:disable\": \"Disable a plugin\",\n \"marketplace:link\": \"Link a local plugin for development\",\n \"marketplace:unlink\": \"Unlink a local plugin\",\n \"marketplace:doctor\": \"Diagnose plugin issues\",\n \"marketplace:scaffold\": \"Generate a new plugin template\",\n \"marketplace:clear-cache\": \"Clear plugin discovery cache\",\n };\n\n const maxLength = Math.max(\n ...Object.keys(commandMap).map((c) => c.length),\n 20,\n );\n\n const commandItems = Object.entries(commandMap).map(([cmdName, desc]) =>\n `${colors.cyan(cmdName.padEnd(maxLength))} ${colors.dim(desc)}`\n );\n\n sections.push({\n header: \"Plugin Management Commands\",\n items: commandItems,\n });\n\n // Examples section\n const examples = [\n `kb marketplace list ${colors.dim(\"List all plugins\")}`,\n `kb marketplace enable @kb-labs/devlink-cli ${colors.dim(\"Enable a plugin\")}`,\n `kb marketplace doctor ${colors.dim(\"Diagnose plugin issues\")}`,\n `kb marketplace scaffold my-plugin ${colors.dim(\"Generate plugin template\")}`,\n ];\n\n sections.push({\n header: \"Examples\",\n items: examples.map(ex => colors.dim(ex)),\n });\n\n // Next steps\n sections.push({\n header: \"Next Steps\",\n items: [colors.dim(\"Use 'kb marketplace <command> --help' for detailed help\")],\n });\n\n return sideBorderBox({\n title: \"🧩 Plugin Management\",\n sections,\n status: \"info\",\n timing: tracker.total(),\n });\n}\n","import {\n colors,\n collectManifestVersions,\n TimingTracker,\n type RegisteredCommand,\n} from \"./shared\";\nimport { sideBorderBox, type SectionContent } from \"@kb-labs/shared-cli-ui\";\n\nexport function renderProductHelp(\n groupName: string,\n commands: RegisteredCommand[],\n): string {\n const tracker = new TimingTracker();\n const sections: SectionContent[] = [];\n\n const manifestVersions = collectManifestVersions(commands);\n if (manifestVersions.length > 0) {\n sections.push({\n header: \"Manifest\",\n items: [colors.cyan(manifestVersions.join(\" + \"))],\n });\n }\n\n const availableMap = new Map<string, RegisteredCommand>();\n const unavailableMap = new Map<string, RegisteredCommand>();\n\n for (const cmd of commands) {\n if (cmd.available && !cmd.shadowed) {\n if (!availableMap.has(cmd.manifest.id)) {\n availableMap.set(cmd.manifest.id, cmd);\n }\n } else if (!unavailableMap.has(cmd.manifest.id)) {\n unavailableMap.set(cmd.manifest.id, cmd);\n }\n }\n\n const available = Array.from(availableMap.values()).sort((a, b) =>\n a.manifest.id.localeCompare(b.manifest.id),\n );\n const unavailable = Array.from(unavailableMap.values()).sort((a, b) =>\n a.manifest.id.localeCompare(b.manifest.id),\n );\n\n // Calculate max length based on display format (with spaces instead of colons)\n const maxLength = Math.max(\n ...[...available, ...unavailable].map((c) => c.manifest.id.replace(/:/g, ' ').length),\n 20,\n );\n\n // Available commands section\n const availableItems: string[] = [];\n for (const cmd of available) {\n const status = colors.green(\"✓\");\n // Convert command ID to user-friendly format (replace : with space for display)\n const displayId = cmd.manifest.id.replace(/:/g, ' ');\n const paddedId = displayId.padEnd(maxLength);\n availableItems.push(\n `${status} ${colors.cyan(paddedId)} ${colors.dim(\n cmd.manifest.describe,\n )}`,\n );\n\n if (cmd.manifest.examples && cmd.manifest.examples.length > 0) {\n for (const example of cmd.manifest.examples.slice(0, 2) as string[]) {\n availableItems.push(` ${colors.dim(example)}`);\n }\n }\n }\n\n sections.push({\n header: \"Available Commands\",\n items: availableItems,\n });\n\n // Unavailable commands section (if any)\n if (unavailable.length > 0) {\n const unavailableItems: string[] = [];\n for (const cmd of unavailable) {\n const status = colors.red(\"✗\");\n // Convert command ID to user-friendly format (replace : with space for display)\n const displayId = cmd.manifest.id.replace(/:/g, ' ');\n const paddedId = displayId.padEnd(maxLength);\n unavailableItems.push(\n `${status} ${colors.dim(paddedId)} ${colors.dim(\n cmd.manifest.describe,\n )}`,\n );\n\n if (cmd.unavailableReason) {\n unavailableItems.push(\n ` ${colors.red(`Reason: ${cmd.unavailableReason}`)}`,\n );\n }\n if (cmd.hint) {\n unavailableItems.push(` ${colors.yellow(`Hint: ${cmd.hint}`)}`);\n }\n }\n\n sections.push({\n header: \"Unavailable\",\n items: unavailableItems,\n });\n }\n\n // Next Steps section\n const uniqueCommands = new Map<string, RegisteredCommand>();\n for (const cmd of available) {\n if (!uniqueCommands.has(cmd.manifest.id)) {\n uniqueCommands.set(cmd.manifest.id, cmd);\n }\n }\n\n const nextStepsItems = Array.from(uniqueCommands.values())\n .slice(0, 3)\n .map((cmd) => {\n // Convert command ID to user-friendly format (replace : with space for display)\n const displayId = cmd.manifest.id.replace(/:/g, ' ');\n return `${colors.cyan(`kb ${displayId}`)} ${colors.dim(\n cmd.manifest.describe,\n )}`;\n });\n\n if (nextStepsItems.length === 0) {\n nextStepsItems.push(colors.dim(\"No available commands in this product\"));\n } else {\n nextStepsItems.push(\"\");\n nextStepsItems.push(\n colors.dim(\n `Use 'kb ${groupName} <command> --help' for detailed help`,\n ),\n );\n }\n\n nextStepsItems.push(\"\");\n nextStepsItems.push(\n colors.dim(\"Use 'kb --help' to see all products and system commands.\"),\n );\n\n sections.push({\n header: \"Next Steps\",\n items: nextStepsItems,\n });\n\n return sideBorderBox({\n title: groupName,\n sections,\n status: \"info\",\n timing: tracker.total(),\n });\n}\n\n","import {\n TimingTracker,\n type RegisteredCommand,\n} from \"./shared\";\nimport { formatCommandHelp } from \"@kb-labs/shared-cli-ui\";\n\nexport function renderManifestCommandHelp(\n registered: RegisteredCommand,\n): string {\n const _tracker = new TimingTracker();\n const manifest = registered.manifest;\n\n // Map manifest flags to formatCommandHelp format\n const flags = manifest.flags?.map(flag => ({\n name: flag.name,\n alias: flag.alias,\n description: flag.describe ?? flag.description,\n required: flag.required,\n }));\n\n // Use new modern formatCommandHelp utility\n return formatCommandHelp({\n title: manifest.id,\n description: manifest.describe,\n longDescription: manifest.longDescription,\n examples: manifest.examples,\n flags,\n aliases: manifest.aliases,\n });\n}\n\n","import {\n colors,\n type RegisteredCommand,\n} from \"./shared\";\n\ninterface RenderHelpOptions {\n json: boolean;\n onlyAvailable: boolean;\n version?: string;\n}\n\nexport function renderHelp(\n commands: RegisteredCommand[],\n options: RenderHelpOptions,\n): string | Record<string, unknown> {\n const grouped = groupCommands(commands, options.onlyAvailable);\n\n if (options.json) {\n return {\n version: options.version ?? \"1.0.0\",\n generatedAt: new Date().toISOString(),\n groups: grouped.map((group) => ({\n name: group.name,\n describe: group.describe,\n commands: group.commands.map((cmd) => ({\n id: cmd.manifest.id,\n describe: cmd.manifest.describe,\n group: cmd.manifest.group,\n aliases: cmd.manifest.aliases ?? [],\n available: cmd.available && !cmd.shadowed,\n source: cmd.source,\n shadowed: cmd.shadowed ?? false,\n reason: cmd.unavailableReason,\n hint: cmd.hint,\n })),\n })),\n };\n }\n\n const lines: string[] = [];\n lines.push(colors.bold(\"KB Labs CLI\"));\n lines.push(\"\");\n\n for (const group of grouped) {\n lines.push(colors.bold(group.name));\n for (const cmd of group.commands) {\n // Convert command ID to user-friendly format (replace : with space for display)\n const displayId = cmd.manifest.id.replace(/:/g, ' ');\n lines.push(\n ` ${colors.cyan(displayId)} ${colors.dim(\n cmd.manifest.describe ?? \"\",\n )}`,\n );\n }\n lines.push(\"\");\n }\n\n return lines.join(\"\\n\");\n}\n\nfunction groupCommands(\n commands: RegisteredCommand[],\n onlyAvailable: boolean,\n) {\n const groups = new Map<\n string,\n { name: string; describe?: string; commands: RegisteredCommand[] }\n >();\n\n for (const cmd of commands) {\n const shouldInclude =\n !onlyAvailable || (cmd.available && !cmd.shadowed);\n if (!shouldInclude) {\n continue;\n }\n\n const groupName = cmd.manifest.group ?? \"system\";\n if (!groups.has(groupName)) {\n groups.set(groupName, {\n name: groupName,\n describe: cmd.manifest.group,\n commands: [],\n });\n }\n groups.get(groupName)!.commands.push(cmd);\n }\n\n for (const group of groups.values()) {\n group.commands.sort((a, b) =>\n a.manifest.id.localeCompare(b.manifest.id),\n );\n }\n\n return Array.from(groups.values()).sort((a, b) =>\n a.name.localeCompare(b.name),\n );\n}\n\n","/**\n * @kb-labs/cli-commands\n * Public surface: types, registry, findCommand, registerBuiltinCommands.\n * This package does not handle parsing argv/logging/exit.\n */\nexport * from \"./registry/types\";\nexport {\n registry,\n findCommand,\n findCommandWithType,\n type ProductGroup,\n type CommandType,\n type CommandLookupResult,\n} from \"./registry/service\";\nexport { registerBuiltinCommands } from \"./utils/register\";\nexport * from \"./utils/help-generator\";\nexport { generateExamples, type ExampleCase } from \"./utils/generate-examples\";\nexport { TimingTracker } from \"@kb-labs/shared-cli-ui\";\nexport { discoverManifestsByNamespace, discoverManifests } from \"./registry/discover\";\nexport { hello } from \"./commands/system/hello\";\nexport { health } from \"./commands/system/health\";\nexport { version } from \"./commands/system/version\";\n\n// Logs commands (agent-first log viewing and analysis)\nexport { logsDiagnose, logsContext, logsSummarize, logsQuery, logsSearch, logsGet, logsStats } from \"./commands/system/logs\";\n"]}