@kb-labs/cli-commands 2.93.0 → 2.96.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/trie-router.ts","../src/registry/archetype-flags.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/registry/availability.ts","../src/registry/register.ts","../src/commands/system/registry-diagnostics.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/webhook/webhook-provision.ts","../src/commands/system/webhook/webhook-list.ts","../src/commands/system/webhook/webhook-revoke.ts","../src/commands/system/groups.ts","../src/commands/system/completion.ts","../src/utils/shutdown.ts","../src/utils/register.ts","../src/presentation/group-help.ts","../src/presentation/global-help.ts","../src/presentation/product-help.ts","../src/presentation/manifest-help.ts","../src/presentation/registry-help.ts","../src/presentation/schema-generator.ts","../src/index.ts"],"names":["req","version","fs","parseYaml","exports","totalTime","sourceCounts","path","defineSystemCommand","platform","createRegistry","__filename","__dirname","existsSync","log","registry","pathToFileURL","fsAccess","fsReadFile","diag","getContextCwd","registeredCommands","result","CredentialsManager","createHash","script","discoverManifests","safeColors","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 (path-based, ADR-0015)\n */\n\nimport { z } from 'zod';\nimport type { CommandManifest } from './types';\n\nconst semverPattern = /^[\\^~]?[\\d]+\\.[\\d]+(\\.[\\d]+)?(-[\\w\\.-]+)?(\\+[\\w\\.-]+)?$/;\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) => !(data.choices && data.type !== 'string'),\n { message: 'Choices are only allowed for string type flags' }\n);\n\nconst EngineSchema = z.object({\n node: z.string().optional(),\n kbCli: z.string().optional(),\n module: z.enum(['esm', 'cjs']).optional(),\n}).optional();\n\nexport const CommandManifestSchema = z.object({\n manifestVersion: z.literal('1.0'),\n segments: z.array(z.string().min(1)).min(1),\n id: z.string().min(1),\n group: z.string().min(1),\n subgroup: z.string().optional(),\n aliases: z.array(z.string()).optional(),\n category: z.string().optional(),\n describe: z.string().min(1),\n longDescription: z.string().optional(),\n requires: z.array(z.string()).optional(),\n flags: z.array(FlagDefinitionSchema).optional(),\n examples: z.array(z.string()).optional(),\n loader: z.any(),\n package: z.string().optional(),\n engine: EngineSchema,\n permissions: z.array(z.string()).optional(),\n telemetry: z.enum(['opt-in', 'off']).optional(),\n manifestV2: z.any().optional(),\n pkgRoot: z.string().optional(),\n _synthetic: z.boolean().optional(),\n operationType: z.enum(['read', 'mutate', 'execute', 'analyze']).optional(),\n}).refine(\n (data) => {\n if (data.requires) {\n for (const req of data.requires) {\n if (req.includes('@')) {\n const parts = req.split('@');\n if (parts.length === 2) {\n const version = parts[1];\n if (\n version &&\n !semverPattern.test(version) &&\n !version.startsWith('^') &&\n !version.startsWith('~') &&\n !version.match(/^[\\^~>=<]?[\\d\\.]+/)\n ) {\n return false;\n }\n }\n }\n }\n }\n return true;\n },\n { message: 'requires entries must use valid semver ranges' }\n);\n\nexport function validateManifest(manifest: unknown): { success: true; data: CommandManifest } | { success: false; error: z.ZodError } {\n const result = CommandManifestSchema.safeParse(manifest);\n if (result.success) {\n return { success: true, data: result.data as CommandManifest };\n }\n return { success: false, error: result.error };\n}\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 as CommandManifest);\n } else {\n errors.push(\n new z.ZodError(\n result.error.issues.map((issue) => ({ ...issue, path: [`[${i}]`, ...issue.path] }))\n )\n );\n }\n }\n\n return errors.length === 0\n ? { success: true, data: validated }\n : { success: false, errors };\n}\n\n/**\n * Normalize manifest: ensure id/group/subgroup are derived from segments,\n * and package name is set.\n */\nexport function normalizeManifest(manifest: CommandManifest, packageName: string): CommandManifest {\n const segs = manifest.segments;\n return {\n ...manifest,\n id: segs[segs.length - 1] ?? '',\n group: segs[0] ?? '',\n subgroup: segs.length >= 3 ? segs[1] : undefined,\n package: manifest.package ?? packageName,\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';\nimport { computeManifestIntegrity } from '@kb-labs/core-discovery';\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';\n\n// Bump this when discovery logic changes to force cache invalidation across all users.\n// Last bump: added discoverWorkspace(projectRoot) for prod-mode two-root discovery.\nconst DISCOVERY_VERSION = 2;\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 // All discovery logs go to stderr — never stdout — so they don't pollute --json output\n const prefix = level === 'error' ? '✗' : level === 'warn' ? '⚠' : level === 'info' ? 'ℹ' : '🔍';\n\n if (fields) {\n console.error(`${prefix} [discover] ${message}`, fields);\n } else {\n console.error(`${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/**\n * Thrown by loadManifest when a file is a valid manifest of a non-plugin\n * schema (e.g. kb.service/1). Discovery should skip these silently — they\n * are not errors, just a different manifest type.\n */\nclass NonPluginManifestError extends Error {\n readonly schema: string;\n constructor(pkgName: string, schema: string) {\n super(`${pkgName} uses manifest schema \"${schema}\", not kb.plugin/3 — skipping`);\n this.name = 'NonPluginManifestError';\n this.schema = schema;\n }\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 unavailableId = `manifest:${short}`;\n const manifest: CommandManifest = {\n manifestVersion: '1.0',\n segments: [group, unavailableId],\n id: unavailableId,\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/**\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 */\n// eslint-disable-next-line sonarjs/cognitive-complexity\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// 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') {\n throw new Error(`No manifest export found in ${pkgName}`);\n }\n const schema = (rawManifest as Record<string, unknown>).schema;\n if (schema !== 'kb.plugin/3') {\n throw new NonPluginManifestError(pkgName, typeof schema === 'string' ? schema : String(schema ?? 'unknown'));\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 segments = cmd.path.trim().split(/\\s+/).filter(Boolean);\n const commandId = segments[segments.length - 1] ?? namespace;\n const commandManifest: CommandManifest = {\n manifestVersion: '1.0' as const,\n segments: segments as readonly string[],\n id: commandId,\n group: segments[0] ?? namespace,\n subgroup: segments.length >= 3 ? segments[1] : undefined,\n category: cmd.category,\n describe: cmd.describe || '',\n longDescription: cmd.longDescription,\n aliases: cmd.aliases,\n flags: cmd.flags,\n examples: cmd.examples,\n loader: createManifestV3Loader(cmd.path),\n package: pkgName,\n operationType: cmd.operationType,\n };\n commandManifest.manifestV2 = manifest;\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)\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 */\nexport async 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 */\n// eslint-disable-next-line sonarjs/cognitive-complexity\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 const key = m.segments.join('/');\n if (ids.has(key)) {\n throw new Error(`Duplicate command ID \"${m.id}\" in package ${pkgName}`);\n }\n ids.add(key);\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 // Non-plugin manifest (e.g. kb.service/1) — not an error, just skip.\n if (err instanceof NonPluginManifestError) {\n log('debug', `[plugins] ${pkgName} skipped: ${err.message}`);\n return null;\n }\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 // eslint-disable-next-line sonarjs/cognitive-complexity\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\n // Non-plugin manifest (e.g. kb.service/1) — not an error, just skip.\n if (err instanceof NonPluginManifestError) {\n log('debug', `[plugins] ${pkgName} skipped: ${err.message}`);\n return null;\n }\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: (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 */\n// eslint-disable-next-line sonarjs/cognitive-complexity\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 */\n// eslint-disable-next-line sonarjs/cognitive-complexity\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 if ((cache.discoveryVersion ?? 0) !== DISCOVERY_VERSION) {\n log('debug', `Cache invalidated: discovery logic changed (${cache.discoveryVersion ?? 0} → ${DISCOVERY_VERSION})`);\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 the cache entry for a package is stale.\n *\n * Strategy: mtime as fast path, content hash as confirmation.\n * - mtime unchanged → not stale (1 stat call, typical case)\n * - mtime changed → verify hash (1 readFile + sha256, only on actual changes)\n * - hash changed → stale (plugin was rebuilt)\n * - hash unchanged → not stale (mtime changed but content identical, e.g. touch)\n *\n * This correctly handles content-addressed build tools that may not update mtime,\n * as well as the common case where mtime and content change together on rebuild.\n */\nasync function isPackageCacheStale(entry: PackageCacheEntry): 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 manifestMtimeChanged = false;\n try {\n const manifestStat = await fs.stat(manifestFsPath);\n manifestMtimeChanged = manifestStat.mtimeMs !== entry.manifestMtime;\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 (manifestMtimeChanged) {\n try {\n const currentHash = await computeManifestIntegrity(manifestFsPath);\n if (currentHash !== entry.manifestHash) {\n log('debug', `Package cache invalidated: manifest content changed for ${entry.result.packageName}`);\n return true;\n }\n } catch (error: unknown) {\n log('debug', `Package cache hash check 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 */\n// eslint-disable-next-line sonarjs/cognitive-complexity\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 computeManifestIntegrity(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 discoveryVersion: DISCOVERY_VERSION,\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 */\n// eslint-disable-next-line sonarjs/cognitive-complexity\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\n log('debug', `[plugins][cache] hit age=${cacheAge}ms ttl=${ttlMs}ms`);\n\n let staleCount = 0;\n for (const entry of Object.values(cached.packages) as PackageCacheEntry[]) {\n const stale = await isPackageCacheStale(entry);\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 (err: unknown) {\n const msg = err instanceof Error ? err.message : String(err);\n const isMissingYaml = msg.includes('ENOENT') || msg.includes('no such file');\n if (isMissingYaml) {\n log('debug', `[plugins][discover] no pnpm-workspace.yaml at projectRoot=${roots.projectRoot} — skipping project workspace scan`);\n } else {\n log('warn', JSON.stringify({\n code: 'PROJECT_WORKSPACE_DISCOVERY_FAILED',\n projectRoot: roots.projectRoot,\n error: msg,\n hint: 'Project workspace plugins may be missing from CLI discovery',\n }));\n }\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 return m.group === namespace;\n });\n });\n}\n","/**\n * @kb-labs/cli-commands/registry/trie-router\n * Path-based trie router for CLI command resolution.\n *\n * Replaces the flat-map InMemoryRegistry + backtracking resolveCommand().\n * Two trie instances: systemTrie (always first) + pluginTrie (plugins).\n *\n * Key guarantees:\n * - O(depth) resolution — no backtracking\n * - No collisions: same last-segment in different paths are distinct nodes\n * - \"did you mean?\" via Levenshtein ≤ 2 + findDeep shorthand detection\n * - Tab completion via complete()\n */\n\nimport type { RegisteredCommand } from './types';\nimport type { Command as SystemCommand, CommandGroup as SystemGroup } from '@kb-labs/shared-command-kit';\n\nexport type { SystemCommand, SystemGroup };\n\n// ─── Route result ─────────────────────────────────────────────────────────────\n\nexport type RouteResult =\n | { type: 'system-cmd'; cmd: SystemCommand; rest: string[] }\n | { type: 'system-group'; group: SystemGroup; rest: string[] }\n | { type: 'command'; command: RegisteredCommand; rest: string[] }\n | { type: 'group'; segments: string[]; describe?: string; childKeys: string[] }\n | { type: 'ambiguous'; input: string[]; candidates: string[] }\n | { type: 'not-found'; input: string[]; suggestions: string[] };\n\n// ─── Diagnostics ──────────────────────────────────────────────────────────────\n\nexport interface RegistryDiagnostics {\n systemCommandCount: number;\n systemGroupCount: number;\n pluginCommandCount: number;\n partialLoad: boolean;\n}\n\n// ─── Trie internals ───────────────────────────────────────────────────────────\n\ninterface TrieNode {\n children: Map<string, TrieNode>;\n command?: RegisteredCommand;\n systemCommand?: SystemCommand;\n systemGroup?: SystemGroup;\n groupDescribe?: string;\n /** packageName of the first plugin to register a command under this top-level group. */\n ownerPackage?: string;\n}\n\nfunction makeNode(): TrieNode {\n return { children: new Map() };\n}\n\n// ─── Levenshtein distance (edit distance) ─────────────────────────────────────\n\nexport function levenshtein(a: string, b: string): number {\n const m = a.length;\n const n = b.length;\n const dp: number[][] = Array.from({ length: m + 1 }, (_, i) =>\n Array.from({ length: n + 1 }, (__, j) => (i === 0 ? j : j === 0 ? i : 0))\n );\n for (let i = 1; i <= m; i++) {\n for (let j = 1; j <= n; j++) {\n if (a[i - 1] === b[j - 1]) {\n dp[i]![j] = dp[i - 1]![j - 1]!;\n } else {\n dp[i]![j] = 1 + Math.min(dp[i - 1]![j]!, dp[i]![j - 1]!, dp[i - 1]![j - 1]!);\n }\n }\n }\n return dp[m]![n]!;\n}\n\n// ─── DFS to find commands whose path ends with targetSegments ─────────────────\n\nfunction findDeep(\n node: TrieNode,\n targetSegments: string[],\n prefix: string[]\n): string[] {\n const results: string[] = [];\n\n function dfs(current: TrieNode, path: string[]): void {\n if (current.command) {\n // Check if path ends with targetSegments\n if (targetSegments.length <= path.length) {\n const tail = path.slice(path.length - targetSegments.length);\n const matches = tail.every((seg, i) => seg === targetSegments[i]);\n if (matches) {\n results.push(path.join(' '));\n }\n }\n }\n for (const [key, child] of current.children) {\n dfs(child, [...path, key]);\n }\n }\n\n dfs(node, [...prefix]);\n return results;\n}\n\n// ─── TrieRouter ───────────────────────────────────────────────────────────────\n\nexport class TrieRouter {\n private readonly root: TrieNode = makeNode();\n\n /**\n * Insert a plugin command into the trie.\n *\n * Enforces 1-manifest-1-namespace: the first packageName to register any command\n * under a top-level group becomes the owner. Subsequent packages with a different\n * packageName are rejected (collides: true) — the caller is responsible for warning\n * and marking the command as shadowed.\n *\n * Returns { collides: false } on success, or { collides: true, ownerPackage } on conflict.\n */\n insertCommand(\n segments: readonly string[],\n cmd: RegisteredCommand,\n ): { collides: false } | { collides: true; ownerPackage: string | undefined } {\n if (segments.length === 0) {\n return { collides: false }; // empty path guarded upstream\n }\n\n const incoming = cmd.packageName ?? '__unknown__';\n\n // Ownership check on the top-level group node\n const topSeg = segments[0]!;\n if (!this.root.children.has(topSeg)) {\n this.root.children.set(topSeg, makeNode());\n }\n const groupNode = this.root.children.get(topSeg)!;\n\n if (groupNode.ownerPackage === undefined) {\n groupNode.ownerPackage = incoming;\n } else if (groupNode.ownerPackage !== incoming) {\n return { collides: true, ownerPackage: groupNode.ownerPackage };\n }\n\n // Walk/create remaining nodes and store the command\n let node = groupNode;\n for (const seg of segments.slice(1)) {\n if (!node.children.has(seg)) {\n node.children.set(seg, makeNode());\n }\n node = node.children.get(seg)!;\n }\n node.command = cmd;\n return { collides: false };\n }\n\n insertSystemCommand(cmd: SystemCommand): void {\n const segments = [cmd.name];\n let node = this.root;\n for (const seg of segments) {\n if (!node.children.has(seg)) {\n node.children.set(seg, makeNode());\n }\n node = node.children.get(seg)!;\n }\n node.systemCommand = cmd;\n\n for (const alias of cmd.aliases ?? []) {\n let aliasNode = this.root;\n if (!aliasNode.children.has(alias)) {\n aliasNode.children.set(alias, makeNode());\n }\n aliasNode = aliasNode.children.get(alias)!;\n aliasNode.systemCommand = cmd;\n }\n }\n\n insertSystemGroup(group: SystemGroup): void {\n let groupNode = this.root;\n if (!groupNode.children.has(group.name)) {\n groupNode.children.set(group.name, makeNode());\n }\n groupNode = groupNode.children.get(group.name)!;\n groupNode.systemGroup = group;\n groupNode.groupDescribe = group.describe;\n\n for (const cmd of group.commands) {\n let cmdNode = groupNode;\n if (!cmdNode.children.has(cmd.name)) {\n cmdNode.children.set(cmd.name, makeNode());\n }\n cmdNode = cmdNode.children.get(cmd.name)!;\n cmdNode.systemCommand = cmd;\n\n for (const alias of cmd.aliases ?? []) {\n let aliasNode = groupNode;\n if (!aliasNode.children.has(alias)) {\n aliasNode.children.set(alias, makeNode());\n }\n aliasNode = aliasNode.children.get(alias)!;\n aliasNode.systemCommand = cmd;\n }\n }\n\n for (const sub of group.subgroups ?? []) {\n let subNode = groupNode;\n if (!subNode.children.has(sub.name)) {\n subNode.children.set(sub.name, makeNode());\n }\n subNode = subNode.children.get(sub.name)!;\n subNode.systemGroup = sub;\n subNode.groupDescribe = sub.describe;\n\n for (const cmd of sub.commands) {\n let cmdNode = subNode;\n if (!cmdNode.children.has(cmd.name)) {\n cmdNode.children.set(cmd.name, makeNode());\n }\n cmdNode = cmdNode.children.get(cmd.name)!;\n cmdNode.systemCommand = cmd;\n }\n }\n }\n\n getGroupDescribe(segments: string[]): string | undefined {\n let node = this.root;\n for (const seg of segments) {\n const child = node.children.get(seg);\n if (!child) { return undefined; }\n node = child;\n }\n return node.groupDescribe;\n }\n\n setGroupDescribe(segments: string[], describe: string): void {\n let node = this.root;\n for (const seg of segments) {\n if (!node.children.has(seg)) {\n node.children.set(seg, makeNode());\n }\n node = node.children.get(seg)!;\n }\n if (!node.groupDescribe) {\n node.groupDescribe = describe;\n }\n }\n\n resolve(tokens: string[]): RouteResult {\n if (tokens.length === 0) {\n return {\n type: 'group',\n segments: [],\n childKeys: [...this.root.children.keys()],\n };\n }\n\n let node = this.root;\n let i = 0;\n\n while (i < tokens.length) {\n const tok = tokens[i]!;\n const child = node.children.get(tok);\n\n if (!child) {\n // Token not found — run \"did you mean?\" logic\n return this._notFound(node, tokens, i);\n }\n\n node = child;\n i++;\n\n // If we hit a command node and there are more tokens → positional args\n if (node.command && i < tokens.length) {\n return { type: 'command', command: node.command, rest: tokens.slice(i) };\n }\n if (node.systemCommand && i < tokens.length) {\n return { type: 'system-cmd', cmd: node.systemCommand, rest: tokens.slice(i) };\n }\n }\n\n // Consumed all tokens — check what's at current node\n if (node.command) {\n return { type: 'command', command: node.command, rest: [] };\n }\n if (node.systemCommand) {\n return { type: 'system-cmd', cmd: node.systemCommand, rest: [] };\n }\n if (node.systemGroup) {\n return { type: 'system-group', group: node.systemGroup, rest: [] };\n }\n if (node.children.size > 0 || node.groupDescribe !== undefined) {\n const segs = tokens.slice(0, i);\n return {\n type: 'group',\n segments: segs,\n describe: node.groupDescribe,\n childKeys: [...node.children.keys()],\n };\n }\n\n return { type: 'not-found', input: tokens, suggestions: [] };\n }\n\n complete(tokens: string[]): string[] {\n if (tokens.length === 0) {\n return [...this.root.children.keys()];\n }\n\n let node = this.root;\n\n // Walk through all tokens except the last (which may be partial)\n for (let i = 0; i < tokens.length - 1; i++) {\n const child = node.children.get(tokens[i]!);\n if (!child) { return []; }\n node = child;\n }\n\n const partial = tokens[tokens.length - 1] ?? '';\n const results: string[] = [];\n const prefix = tokens.slice(0, tokens.length - 1);\n\n for (const [key] of node.children) {\n if (key.startsWith(partial)) {\n results.push([...prefix, key].join(' '));\n }\n }\n\n return results;\n }\n\n /**\n * List all leaf plugin commands under a given node path.\n */\n listUnder(segments: string[]): RegisteredCommand[] {\n let node = this.root;\n for (const seg of segments) {\n const child = node.children.get(seg);\n if (!child) { return []; }\n node = child;\n }\n const results: RegisteredCommand[] = [];\n this._collectCommands(node, results);\n return results;\n }\n\n /**\n * Get exact command at path.\n */\n getAt(segments: string[]): RegisteredCommand | null {\n let node = this.root;\n for (const seg of segments) {\n const child = node.children.get(seg);\n if (!child) { return null; }\n node = child;\n }\n return node.command ?? null;\n }\n\n /**\n * List top-level system groups and standalone system commands (depth=1 nodes).\n */\n listSystemTopLevel(): Array<{ name: string; describe: string; isGroup: boolean }> {\n const results: Array<{ name: string; describe: string; isGroup: boolean }> = [];\n for (const [name, node] of this.root.children) {\n if (node.systemGroup) {\n results.push({ name, describe: node.systemGroup.describe, isGroup: true });\n } else if (node.systemCommand) {\n results.push({ name, describe: node.systemCommand.describe, isGroup: false });\n }\n }\n return results;\n }\n\n /**\n * Collect all plugin commands reachable from node.\n */\n listAll(): RegisteredCommand[] {\n const results: RegisteredCommand[] = [];\n this._collectCommands(this.root, results);\n return results;\n }\n\n private _collectCommands(node: TrieNode, out: RegisteredCommand[]): void {\n if (node.command) { out.push(node.command); }\n for (const child of node.children.values()) {\n this._collectCommands(child, out);\n }\n }\n\n private _notFound(node: TrieNode, tokens: string[], failIdx: number): RouteResult {\n const failToken = tokens[failIdx]!;\n const prefix = tokens.slice(0, failIdx);\n const siblings = [...node.children.keys()];\n\n // 1. Fuzzy match on siblings (Levenshtein ≤ 2)\n const fuzzy = siblings\n .map((s) => ({ s, d: levenshtein(failToken, s) }))\n .filter(({ d }) => d <= 2)\n .sort((a, b) => a.d - b.d)\n .map(({ s }) => [...prefix, s, ...tokens.slice(failIdx + 1)].join(' '));\n\n if (fuzzy.length === 1) {\n return { type: 'not-found', input: tokens, suggestions: fuzzy };\n }\n if (fuzzy.length > 1) {\n return { type: 'ambiguous', input: tokens, candidates: fuzzy };\n }\n\n // 2. findDeep — shorthand: e.g. \"clickup create\" → all paths ending in \"create\"\n const remaining = tokens.slice(failIdx);\n const deep = findDeep(node, remaining, prefix);\n\n if (deep.length === 0) {\n return { type: 'not-found', input: tokens, suggestions: [] };\n }\n if (deep.length === 1) {\n return { type: 'not-found', input: tokens, suggestions: deep };\n }\n return { type: 'ambiguous', input: tokens, candidates: deep };\n }\n}\n","import type { FlagDefinition } from './types.js';\n\n// ─── Standard flags per archetype ────────────────────────────────────────────\n\nconst outputFlag: FlagDefinition = { name: 'output', type: 'string', choices: ['json', 'table', 'csv'], description: 'Output format' };\nconst dryRunFlag: FlagDefinition = { name: 'dry-run', type: 'boolean', description: 'Show what would happen without executing' };\nconst yesFlag: FlagDefinition = { name: 'yes', type: 'boolean', alias: 'y', description: 'Skip confirmation prompts' };\nconst waitFlag: FlagDefinition = { name: 'wait', type: 'boolean', description: 'Block until execution completes' };\nconst watchFlag: FlagDefinition = { name: 'watch', type: 'boolean', description: 'Stream events as NDJSON' };\nconst timeoutFlag: FlagDefinition = { name: 'timeout', type: 'string', description: 'Max wait time (e.g. 30s, 5m)' };\nconst limitFlag: FlagDefinition = { name: 'limit', type: 'number', description: 'Max results to return' };\nconst offsetFlag: FlagDefinition = { name: 'offset', type: 'number', description: 'Offset for pagination' };\nconst formatFlag: FlagDefinition = { name: 'format', type: 'string', choices: ['json', 'text', 'md'], description: 'Output format' };\nconst streamFlag: FlagDefinition = { name: 'stream', type: 'boolean', description: 'Stream output progressively' };\n\n/** Injected into every command that declares operationType — visible in --help */\nexport const schemaFlag: FlagDefinition = {\n name: 'schema',\n type: 'boolean',\n description: 'Output JSON Schema for this command (flags, types, examples)',\n};\n\nexport const ARCHETYPE_FLAGS: Record<string, FlagDefinition[]> = {\n read: [outputFlag, limitFlag, offsetFlag],\n mutate: [outputFlag, dryRunFlag, yesFlag],\n execute: [outputFlag, waitFlag, watchFlag, timeoutFlag, yesFlag],\n analyze: [outputFlag, formatFlag, streamFlag],\n};\n\n/**\n * Returns archetype flags that are not already declared by the plugin author.\n * Existing flags always win — the archetype never overwrites.\n */\nexport function getArchetypeFlags(\n operationType: string,\n existing: FlagDefinition[] = [],\n): FlagDefinition[] {\n const toInject = ARCHETYPE_FLAGS[operationType] ?? [];\n const existingNames = new Set(existing.map(f => f.name));\n return toInject.filter(f => !existingNames.has(f.name));\n}\n","/**\n * @kb-labs/cli-commands/registry/service\n * TrieBackedRegistry — path-based CLI command registry (ADR-0015, ADR-0018)\n *\n * Replaces InMemoryRegistry + all legacy flat-map methods.\n * System commands (in-process) always take priority over plugin commands.\n * Plugin namespace ownership: 1 manifest = 1 namespace (ADR-0018).\n */\n\nimport type { ILogger } from '@kb-labs/core-platform';\nimport type { RegisteredCommand } from './types';\nimport {\n TrieRouter,\n type RouteResult,\n type RegistryDiagnostics,\n} from './trie-router';\nimport type { Command as SystemCommand, CommandGroup as SystemGroup } from '@kb-labs/shared-command-kit';\nimport { getArchetypeFlags, schemaFlag } from './archetype-flags.js';\n\n// ─── Validation ───────────────────────────────────────────────────────────────\n\n/** Top-level path segments reserved by the platform runtime. */\nconst RESERVED_NAMESPACES = new Set(['__complete', '__internal']);\n\n/** Maximum allowed path depth for plugin commands. */\nconst MAX_PATH_DEPTH = 6;\n\nfunction validateSegments(segs: readonly string[]): string | null {\n if (segs.length === 0) { return 'empty path — segments must not be empty'; }\n if (segs.length > MAX_PATH_DEPTH) { return `path too deep: ${segs.length} segments (max ${MAX_PATH_DEPTH})`; }\n if (RESERVED_NAMESPACES.has(segs[0]!)) { return `\"${segs[0]}\" is a reserved namespace`; }\n return null;\n}\n\n// ─── Noop logger fallback ─────────────────────────────────────────────────────\n\nconst noopLogger: ILogger = {\n debug: () => {},\n info: () => {},\n warn: () => {},\n error: () => {},\n child: () => noopLogger,\n} as unknown as ILogger;\n\n// ─── Registry ─────────────────────────────────────────────────────────────────\n\nexport class TrieBackedRegistry {\n private readonly systemRouter = new TrieRouter();\n private readonly pluginRouter = new TrieRouter();\n private partial = false;\n private logger: ILogger = noopLogger;\n\n // ─── Logger ────────────────────────────────────────────────────────────────\n\n setLogger(logger: ILogger): void {\n this.logger = logger;\n }\n\n // ─── Registration ──────────────────────────────────────────────────────────\n\n register(cmd: SystemCommand): void {\n this.systemRouter.insertSystemCommand(cmd);\n }\n\n registerGroup(group: SystemGroup): void {\n this.systemRouter.insertSystemGroup(group);\n // Register group meta for the group path itself\n if (group.subgroups) {\n for (const sub of group.subgroups) {\n this.systemRouter.setGroupDescribe([group.name, sub.name], sub.describe ?? '');\n }\n }\n }\n\n registerManifest(cmd: RegisteredCommand): void {\n if (cmd.manifest._synthetic) { return; }\n\n const segs = cmd.manifest.segments;\n const pkg = cmd.packageName ?? 'unknown';\n\n // ── Validation ───────────────────────────────────────────────────────────\n const validationError = validateSegments(segs);\n if (validationError) {\n this.logger.warn(`[registry] Plugin \"${pkg}\" skipped: ${validationError} (path: \"${segs.join(' ')}\")`);\n cmd.shadowed = true;\n return;\n }\n\n // ── System collision — system always wins ─────────────────────────────────\n const sysResult = this.systemRouter.resolve([...segs]);\n if (sysResult.type === 'system-cmd' || sysResult.type === 'system-group') {\n this.logger.warn(`[registry] Plugin \"${pkg}\" tried to register \"${segs.join(' ')}\" but it collides with a system command. Command will be shadowed.`);\n cmd.shadowed = true;\n return;\n }\n\n // ── Archetype flag injection (opt-in via operationType) ───────────────────\n if (cmd.manifest.operationType) {\n const injected = getArchetypeFlags(cmd.manifest.operationType, cmd.manifest.flags ?? []);\n if (injected.length > 0) {\n cmd.manifest.flags = [...(cmd.manifest.flags ?? []), ...injected];\n }\n }\n\n // ── --schema flag (all commands with operationType) ───────────────────────\n if (cmd.manifest.operationType && !cmd.manifest.flags?.some(f => f.name === 'schema')) {\n cmd.manifest.flags = [...(cmd.manifest.flags ?? []), schemaFlag];\n }\n\n // ── Namespace ownership — 1 manifest = 1 namespace (ADR-0018) ─────────────\n const result = this.pluginRouter.insertCommand(segs, cmd);\n if (result.collides) {\n this.logger.warn(\n `[registry] Plugin \"${pkg}\" tried to register \"${segs.join(' ')}\" ` +\n `but namespace \"${segs[0]!}\" is owned by \"${result.ownerPackage ?? 'unknown'}\". ` +\n `Command will be shadowed.`\n );\n cmd.shadowed = true;\n return;\n }\n\n // ── Aliases ───────────────────────────────────────────────────────────────\n for (const alias of cmd.manifest.aliases ?? []) {\n const aliasSegs = alias.trim().split(/\\s+/).filter(Boolean);\n if (aliasSegs.length === 0) { continue; }\n\n const aliasValidationError = validateSegments(aliasSegs);\n if (aliasValidationError) {\n this.logger.warn(`[registry] Plugin \"${pkg}\" alias \"${alias}\" skipped: ${aliasValidationError}`);\n continue;\n }\n\n const aliasSysResult = this.systemRouter.resolve([...aliasSegs]);\n if (aliasSysResult.type === 'system-cmd' || aliasSysResult.type === 'system-group') {\n this.logger.warn(`[registry] Plugin \"${pkg}\" alias \"${alias}\" collides with a system command and will be skipped.`);\n continue;\n }\n\n const aliasResult = this.pluginRouter.insertCommand(aliasSegs, cmd);\n if (aliasResult.collides) {\n this.logger.warn(\n `[registry] Plugin \"${pkg}\" alias \"${alias}\" conflicts with namespace ` +\n `\"${aliasSegs[0]!}\" owned by \"${aliasResult.ownerPackage ?? 'unknown'}\". Alias skipped.`\n );\n }\n }\n\n // ── groupMeta from ManifestV3 declarations ────────────────────────────────\n const v3 = cmd.manifest.manifestV2;\n if (v3?.cli?.groupMeta) {\n for (const meta of v3.cli.groupMeta) {\n const metaSegs = meta.path.trim().split(/\\s+/).filter(Boolean);\n this.pluginRouter.setGroupDescribe(metaSegs, meta.describe);\n }\n }\n }\n\n // ─── Resolution ────────────────────────────────────────────────────────────\n\n resolve(tokens: string[]): RouteResult {\n if (tokens.length > 0) {\n const sysResult = this.systemRouter.resolve(tokens);\n if (sysResult.type !== 'not-found') {\n return sysResult;\n }\n }\n return this.pluginRouter.resolve(tokens);\n }\n\n // ─── Tab completion ─────────────────────────────────────────────────────────\n\n complete(tokens: string[]): string[] {\n const sysCompletions = this.systemRouter.complete(tokens);\n const pluginCompletions = this.pluginRouter.complete(tokens);\n return [...new Set([...sysCompletions, ...pluginCompletions])];\n }\n\n // ─── Query ──────────────────────────────────────────────────────────────────\n\n listSystemTopLevel(): Array<{ name: string; describe: string; isGroup: boolean }> {\n return this.systemRouter.listSystemTopLevel();\n }\n\n getPluginGroupDescribe(segments: string[]): string | undefined {\n return this.pluginRouter.getGroupDescribe(segments);\n }\n\n listCommands(): RegisteredCommand[] {\n return this.pluginRouter.listAll();\n }\n\n listCommandsUnder(segments: string[]): RegisteredCommand[] {\n return this.pluginRouter.listUnder(segments);\n }\n\n getCommandAt(segments: string[]): RegisteredCommand | null {\n return this.pluginRouter.getAt(segments);\n }\n\n // ─── Partial loading state ─────────────────────────────────────────────────\n\n markPartial(v: boolean): void {\n this.partial = v;\n }\n\n isPartial(): boolean {\n return this.partial;\n }\n\n // ─── Diagnostics ──────────────────────────────────────────────────────────\n\n getDiagnostics(): RegistryDiagnostics {\n return {\n systemCommandCount: this.systemRouter.listAll().length,\n systemGroupCount: 0,\n pluginCommandCount: this.pluginRouter.listAll().length,\n partialLoad: this.partial,\n };\n }\n}\n\nexport function createRegistry(): TrieBackedRegistry {\n return new TrieBackedRegistry();\n}\n\n/** Global registry singleton — populated by bootstrap before any command runs. */\nexport const registry = new TrieBackedRegistry();\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 ctx.ui?.json?.(jsonOutput);\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-trace tool.\n *\n * Base mode (`kb diag`): environment, cache, marketplace overview with\n * per-command unavailability and load failures.\n * Trace mode (`kb diag --command X`): five-stage pipeline trace explaining exactly\n * why a specific command is (or isn't) visible.\n */\n\nimport { defineSystemCommand } from '@kb-labs/shared-command-kit';\nimport { generateExamples } from '../../utils/generate-examples';\nimport { registry } from '../../registry/service';\nimport { discoverManifests, resetInProcCache, loadConfig } from '../../registry/discover';\nimport { preflightManifests } from '../../registry/register';\nimport { validateManifests } from '../../registry/schema';\nimport { readMarketplaceLock, DiagnosticCollector } from '@kb-labs/core-discovery';\nimport type { MarketplaceEntry } from '@kb-labs/core-discovery';\nimport type { DiscoveryResult } from '../../registry/types';\nimport type { ManifestV3 } from '@kb-labs/plugin-contracts';\nimport { access as fsAccess, readFile as fsReadFile } from 'node:fs/promises';\nimport path from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport { getContextCwd, safeColors, safeSymbols } from '@kb-labs/shared-cli-ui';\n\n// ── Types ──────────────────────────────────────────────────────────────────────\n\ntype DiagDetails = {\n category: string;\n status: 'ok' | 'warning' | 'error';\n message: string;\n code?: string;\n remediation?: 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\n/** One stage in the command trace pipeline. */\ntype TraceStage = {\n stage: 'context' | 'registry' | 'discovery' | 'lock' | 'filesystem';\n status: 'ok' | 'warning' | 'error' | 'info';\n code: string;\n message: string;\n remediation?: string;\n details?: Record<string, unknown>;\n};\n\n/** Full result returned from runTrace(). */\ntype CommandTraceResult = {\n ok: boolean;\n command: string;\n stages: TraceStage[];\n verdict: { rootCause: string; remediation?: string };\n};\n\n/** Mutable context passed through (and enriched by) each stage. */\ntype TraceCtx = {\n cwd: string;\n segments: string[];\n platformRoot?: string;\n projectRoot?: string;\n registryOk?: boolean; // set by runRegistryStage when command is confirmed available\n discoveryResult?: DiscoveryResult;\n lockEntry?: [string, MarketplaceEntry];\n};\n\n/** Structured error returned by tryLoadManifestForTrace. */\ntype ManifestLoadError = {\n message: string;\n code: 'NO_EXPORT' | 'WRONG_SCHEMA' | 'VALIDATION_FAILED' | 'LOAD_ERROR';\n foundSchema?: string;\n validationErrors?: Array<{ field: string; message: string }>;\n};\n\ntype DiagFlags = {\n json: { type: 'boolean'; description?: string };\n command: { type: 'string'; description?: string };\n};\n\n// ── Helpers ────────────────────────────────────────────────────────────────────\n\n/** Map a trace stage to a ChainItem for ctx.ui.chain(). */\nfunction stageToChainItem(stage: TraceStage) {\n const statusMap = {\n ok: 'success',\n error: 'error',\n warning: 'warning',\n info: 'info',\n } as const;\n const sections = [\n { items: [stage.message] as string[] },\n ...(stage.remediation ? [{ header: 'Fix', items: [stage.remediation] as string[] }] : []),\n ];\n return {\n title: stage.stage,\n status: statusMap[stage.status],\n summary: { code: stage.code } as Record<string, string | number | boolean>,\n sections,\n };\n}\n\n/** Try to load a manifest and return a structured error — or null if it loads cleanly. */\nasync function tryLoadManifestForTrace(\n manifestPath: string,\n pkgName: string,\n): Promise<ManifestLoadError | null> {\n try {\n const mod = await import(pathToFileURL(manifestPath).href) as { manifest?: unknown; default?: unknown };\n const raw = mod.manifest ?? mod.default;\n\n if (!raw || typeof raw !== 'object') {\n return {\n code: 'NO_EXPORT',\n message: 'No manifest export — add: export { manifest } or export default manifest',\n };\n }\n\n const schema = (raw as Record<string, unknown>).schema;\n if (schema !== 'kb.plugin/3') {\n return {\n code: 'WRONG_SCHEMA',\n foundSchema: String(schema ?? 'undefined'),\n message: `schema must be \"kb.plugin/3\", found \"${String(schema ?? 'undefined')}\"`,\n };\n }\n\n const cliCmds = (raw as ManifestV3).cli?.commands ?? [];\n if (!Array.isArray(cliCmds) || cliCmds.length === 0) {\n return {\n code: 'VALIDATION_FAILED',\n message: 'cli.commands is empty — no commands to register',\n validationErrors: [{ field: 'cli.commands', message: 'Must contain at least one command' }],\n };\n }\n\n // Minimal mapping to CommandManifest for Zod validation\n const mapped = cliCmds.map(cmd => {\n const segments = (cmd.path ?? '').trim().split(/\\s+/).filter(Boolean);\n return {\n manifestVersion: '1.0' as const,\n segments,\n id: segments[segments.length - 1] ?? 'unknown',\n group: segments[0] ?? 'unknown',\n describe: cmd.describe ?? '',\n loader: async () => { throw new Error('trace-only'); },\n flags: cmd.flags,\n aliases: cmd.aliases,\n operationType: cmd.operationType,\n package: pkgName,\n };\n });\n\n const result = validateManifests(mapped);\n if (!result.success) {\n const errors = result.errors.flatMap(e =>\n e.issues.map(i => ({ field: i.path.join('.') || '(root)', message: i.message }))\n );\n return {\n code: 'VALIDATION_FAILED',\n message: `${errors.length} validation error(s)`,\n validationErrors: errors,\n };\n }\n return null; // manifest actually loads fine — synthetic was a transient failure\n } catch (err) {\n return {\n code: 'LOAD_ERROR',\n message: err instanceof Error ? err.message : String(err),\n };\n }\n}\n\n\n/** True if a discovery result belongs to the top-level command segment. */\nfunction matchesTopSegment(result: DiscoveryResult, topSegment: string): boolean {\n if (result.manifests.some(m => m.group === topSegment)) { return true; }\n const last = result.packageName.split('/').pop() ?? '';\n return last.replace(/-entry$|-cli$/, '') === topSegment;\n}\n\n/** Find the marketplace.lock entry for a given command's top segment. */\nfunction findLockEntry(\n installed: Record<string, MarketplaceEntry>,\n topSegment: string,\n): [string, MarketplaceEntry] | undefined {\n return Object.entries(installed).find(([key]) => {\n const last = key.split('/').pop() ?? '';\n return last.replace(/-entry$|-cli$/, '') === topSegment || last === topSegment;\n });\n}\n\n// ── Stage runners ──────────────────────────────────────────────────────────────\n\nasync function runContextStage(ctx: TraceCtx): Promise<TraceStage> {\n return {\n stage: 'context',\n status: 'info',\n code: 'CONTEXT',\n message: `cwd=${ctx.cwd} KB_PLATFORM_ROOT=${ctx.platformRoot ?? '(not set)'} KB_PROJECT_ROOT=${ctx.projectRoot ?? '(not set)'}`,\n details: {\n cwd: ctx.cwd,\n platformRoot: ctx.platformRoot ?? null,\n projectRoot: ctx.projectRoot ?? null,\n execPath: process.execPath,\n },\n };\n}\n\nasync function runRegistryStage(\n ctx: TraceCtx,\n): Promise<TraceStage & { enrich?: Partial<TraceCtx> }> {\n const result = registry.resolve(ctx.segments);\n\n if (result.type === 'command') {\n const cmd = result.command;\n if (cmd.shadowed) {\n const owner = registry.listCommands()\n .find(c => c.manifest.segments[0] === ctx.segments[0] && !c.shadowed)\n ?.packageName;\n return {\n stage: 'registry', status: 'warning', code: 'SHADOWED_BY',\n message: `Command found but shadowed by ${owner ?? 'another package'}`,\n details: { ownerPackage: owner ?? null, shadowedPackage: cmd.packageName ?? null },\n };\n }\n if (!cmd.available) {\n return {\n stage: 'registry', status: 'error', code: 'REQUIRES_MISSING',\n message: cmd.unavailableReason ?? 'Command unavailable',\n remediation: cmd.hint,\n details: { package: cmd.packageName ?? null, source: cmd.source },\n };\n }\n return {\n stage: 'registry', status: 'ok', code: 'REGISTRY_OK',\n message: `Command registered and available`,\n details: { package: cmd.packageName ?? null, source: cmd.source },\n enrich: { registryOk: true },\n };\n }\n\n if (result.type === 'group') {\n return {\n stage: 'registry', status: 'warning', code: 'GROUP_EXISTS_LEAF_MISSING',\n message: `Group \"${ctx.segments[0]}\" exists but leaf \"${ctx.segments.slice(1).join(' ')}\" not found`,\n details: { availableChildren: result.childKeys },\n };\n }\n\n // not-found — also check if a command with this path is registered but shadowed\n const shadowedMatch = registry.listCommands()\n .find(c => c.manifest.segments.join(' ') === ctx.segments.join(' ') && c.shadowed);\n if (shadowedMatch) {\n const owner = registry.listCommands()\n .find(c => c.manifest.segments[0] === ctx.segments[0] && !c.shadowed)\n ?.packageName;\n return {\n stage: 'registry', status: 'warning', code: 'SHADOWED_BY',\n message: `Command is shadowed by ${owner ?? 'another package'}`,\n details: { ownerPackage: owner ?? null, shadowedPackage: shadowedMatch.packageName ?? null },\n };\n }\n\n return {\n stage: 'registry', status: 'info', code: 'REGISTRY_NOT_FOUND',\n message: 'Command not in registry',\n };\n}\n\n// eslint-disable-next-line sonarjs/cognitive-complexity\nasync function runDiscoveryStage(\n ctx: TraceCtx,\n): Promise<TraceStage & { enrich?: Partial<TraceCtx> }> {\n resetInProcCache();\n const opts = { platformRoot: ctx.platformRoot, projectRoot: ctx.projectRoot };\n const discovered = await discoverManifests(ctx.cwd, true, opts);\n\n const [topSegment] = ctx.segments;\n const result = discovered.find(r => matchesTopSegment(r, topSegment ?? ''));\n\n if (!result) {\n const { block: blocklist = [] } = await loadConfig(ctx.cwd);\n const blocked = blocklist.some(b => b === topSegment || b.includes(`/${topSegment ?? ''}`));\n if (blocked) {\n return {\n stage: 'discovery', status: 'error', code: 'PLUGIN_BLOCKLISTED',\n message: `Plugin \"${topSegment}\" is in plugins.block in .kb/kb.config.json`,\n remediation: 'Remove it from plugins.block in .kb/kb.config.json',\n };\n }\n return {\n stage: 'discovery', status: 'info', code: 'NOT_IN_DISCOVERY',\n message: `No package found for group \"${topSegment}\" in workspace or node_modules`,\n };\n }\n\n // Synthetic manifest = manifest failed to load\n if (result.manifests.every(m => m._synthetic)) {\n const distPath = path.join(result.pkgRoot, 'dist');\n const distExists = await fsAccess(distPath).then(() => true).catch(() => false);\n\n const loadErr = await tryLoadManifestForTrace(result.manifestPath, result.packageName);\n\n const stageCode =\n loadErr?.code === 'WRONG_SCHEMA' ? 'WRONG_SCHEMA' :\n loadErr?.code === 'VALIDATION_FAILED' ? 'MANIFEST_VALIDATION_FAILED' :\n 'MANIFEST_LOAD_FAILED';\n\n return {\n stage: 'discovery', status: 'error', code: stageCode,\n message: loadErr ? loadErr.message : 'Manifest failed to load (timeout or import error)',\n remediation: !distExists\n ? `pnpm --filter ${result.packageName} build`\n : 'Fix the error in your manifest.ts',\n details: {\n manifestPath: result.manifestPath,\n distExists,\n error: loadErr?.message ?? null,\n foundSchema: loadErr?.foundSchema ?? null,\n validationErrors: loadErr?.validationErrors ?? null,\n },\n enrich: { discoveryResult: result },\n };\n }\n\n // Non-synthetic — run structural preflight\n const { skipped } = preflightManifests([result]);\n if (skipped.length > 0) {\n return {\n stage: 'discovery', status: 'error', code: 'MANIFEST_STRUCT_INVALID',\n message: `Manifest loaded but ${skipped.length} command(s) failed structural validation`,\n remediation: 'Fix the errors in your manifest.ts',\n details: {\n failures: skipped.map(s => ({ command: s.id, reason: s.reason })),\n },\n };\n }\n\n // Check if our specific command path is defined\n const commandPath = ctx.segments.join(' ');\n const found = result.manifests\n .filter(m => !m._synthetic)\n .find(m => m.segments.join(' ') === commandPath);\n\n if (!found) {\n const availablePaths = result.manifests\n .filter(m => !m._synthetic)\n .map(m => m.segments.join(' '))\n .sort();\n return {\n stage: 'discovery', status: 'warning', code: 'COMMAND_PATH_MISSING',\n message: `Package found but command path \"${commandPath}\" is not defined in manifest`,\n remediation: `Check command path in manifest.ts. Available (${availablePaths.length}): ${availablePaths.slice(0, 5).join(', ')}${availablePaths.length > 5 ? ` … and ${availablePaths.length - 5} more` : ''}`,\n details: { availablePaths, packageName: result.packageName },\n };\n }\n\n return {\n stage: 'discovery', status: 'ok', code: 'MANIFEST_OK',\n message: `Manifest loaded and command \"${commandPath}\" is defined`,\n details: { manifestPath: result.manifestPath, packageName: result.packageName },\n enrich: { discoveryResult: result },\n };\n}\n\nasync function runLockStage(\n ctx: TraceCtx,\n): Promise<TraceStage & { enrich?: Partial<TraceCtx> }> {\n const collector = new DiagnosticCollector();\n const lock = await readMarketplaceLock(ctx.cwd, collector);\n\n if (!lock) {\n // Registry already confirmed the command — no lock is fine for workspace plugins\n const status = ctx.registryOk ? 'info' : 'warning';\n return {\n stage: 'lock', status, code: 'NO_LOCK',\n message: ctx.registryOk\n ? 'No marketplace.lock — plugin is available from workspace (normal in dev mode)'\n : 'No marketplace.lock found — plugin may not be installed',\n };\n }\n\n const [topSegment] = ctx.segments;\n const entry = findLockEntry(lock.installed, topSegment ?? '');\n\n if (!entry) {\n // Command already confirmed available from registry — not being in the lock is fine\n if (ctx.registryOk) {\n return {\n stage: 'lock', status: 'info', code: 'NOT_IN_MARKETPLACE',\n message: `\"${topSegment}\" is not installed via marketplace — it runs from the workspace (normal in dev mode)`,\n };\n }\n return {\n stage: 'lock', status: 'warning', code: 'NOT_IN_LOCK',\n message: `\"${topSegment}\" not found in marketplace.lock`,\n remediation: `kb marketplace install ${topSegment}`,\n };\n }\n\n const [key, data] = entry;\n if (data.enabled === false) {\n return {\n stage: 'lock', status: 'error', code: 'PLUGIN_DISABLED',\n message: `Package \"${key}\" is installed but disabled`,\n remediation: `kb marketplace plugins enable ${key}`,\n details: { key, version: data.version },\n };\n }\n\n return {\n stage: 'lock', status: 'ok', code: 'PLUGIN_ENABLED',\n message: `\"${key}\" is installed and enabled`,\n details: { key, version: data.version, resolvedPath: data.resolvedPath },\n enrich: { lockEntry: entry },\n };\n}\n\nasync function runFilesystemStage(\n ctx: TraceCtx,\n): Promise<TraceStage> {\n if (!ctx.lockEntry) {\n return {\n stage: 'filesystem', status: 'info', code: 'FS_SKIP',\n message: 'Skipped — no lock entry to verify',\n };\n }\n\n const [, data] = ctx.lockEntry;\n if (!data.resolvedPath) {\n return {\n stage: 'filesystem', status: 'info', code: 'FS_NO_PATH',\n message: 'Lock entry has no resolvedPath to check',\n };\n }\n\n try {\n await fsAccess(data.resolvedPath);\n return {\n stage: 'filesystem', status: 'ok', code: 'PATH_EXISTS',\n message: `Package path exists at ${data.resolvedPath}`,\n };\n } catch {\n return {\n stage: 'filesystem', status: 'error', code: 'PATH_MISSING',\n message: `Package path does not exist: ${data.resolvedPath}`,\n remediation: 'pnpm install',\n details: { resolvedPath: data.resolvedPath },\n };\n }\n}\n\n// ── Orchestrator ───────────────────────────────────────────────────────────────\n\nconst STAGE_RUNNERS = [\n runContextStage,\n runRegistryStage,\n runDiscoveryStage,\n runLockStage,\n runFilesystemStage,\n];\n\nasync function runTrace(ctx: TraceCtx): Promise<CommandTraceResult> {\n const stages: TraceStage[] = [];\n\n for (const run of STAGE_RUNNERS) {\n const { enrich, ...stage } = await run(ctx) as TraceStage & { enrich?: Partial<TraceCtx> };\n stages.push(stage);\n if (enrich) { Object.assign(ctx, enrich); }\n }\n\n const failing =\n stages.find(s => s.status === 'error') ??\n stages.find(s => s.status === 'warning');\n\n return {\n ok: !stages.some(s => s.status === 'error' || s.status === 'warning'),\n command: ctx.segments.join(' '),\n stages,\n verdict: failing\n ? { rootCause: failing.code, remediation: failing.remediation }\n : { rootCause: 'NONE' },\n };\n}\n\n// ── Command ────────────────────────────────────────────────────────────────────\n\nexport const diag = defineSystemCommand<DiagFlags, DiagResult | CommandTraceResult>({\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 { flags: { command: 'workflow run' } },\n ]),\n flags: {\n json: { type: 'boolean', description: 'Output in JSON format' },\n command: { type: 'string', description: 'Trace a specific command through the discovery pipeline (e.g. \"workflow run\")' },\n },\n analytics: {\n command: 'diag',\n startEvent: 'DIAG_STARTED',\n finishEvent: 'DIAG_FINISHED',\n },\n // eslint-disable-next-line sonarjs/cognitive-complexity\n async handler(ctx, _argv, flags) {\n const cwd = getContextCwd(ctx);\n const platformRoot = process.env.KB_PLATFORM_ROOT;\n const projectRoot = process.env.KB_PROJECT_ROOT;\n\n // ── Trace mode ─────────────────────────────────────────────────────────────\n if (flags.command) {\n const segments = (flags.command as string).trim().split(/\\s+/).filter(Boolean);\n const traceCtx: TraceCtx = { cwd, segments, platformRoot, projectRoot };\n return runTrace(traceCtx);\n }\n\n // ── Base mode ──────────────────────────────────────────────────────────────\n const diagnostics: DiagDetails[] = [];\n\n // 1. Environment\n diagnostics.push({\n category: 'environment',\n status: 'ok',\n message: `Node ${process.version}, CLI ${process.env.CLI_VERSION ?? '0.1.0'}, ${process.platform}/${process.arch}`,\n details: {\n nodeVersion: process.version,\n cliVersion: process.env.CLI_VERSION ?? '0.1.0',\n platform: process.platform,\n arch: process.arch,\n },\n });\n\n // 2. Plugin discovery\n let discovered: DiscoveryResult[] = [];\n try {\n discovered = await discoverManifests(cwd, false, { platformRoot, projectRoot });\n const allCommands = registry.listCommands();\n const enabled = allCommands.filter(m => m.available && !m.shadowed).length;\n const disabled = allCommands.filter(m => !m.available && !m.shadowed).length;\n const shadowed = allCommands.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: { packages: discovered.length, enabled, disabled, shadowed, totalCommands: allCommands.length },\n });\n\n // Per-command unavailability breakdown\n for (const cmd of allCommands.filter(m => !m.available && !m.shadowed)) {\n diagnostics.push({\n category: 'unavailable-command',\n status: 'warning',\n message: `${cmd.manifest.segments.join(' ')}: ${cmd.unavailableReason ?? 'unavailable'}`,\n code: 'REQUIRES_MISSING',\n remediation: cmd.hint,\n details: { source: cmd.source, package: cmd.packageName ?? null },\n });\n }\n\n // Synthetic manifest failures\n for (const result of discovered) {\n for (const manifest of result.manifests) {\n if (manifest._synthetic) {\n diagnostics.push({\n category: 'manifest-load-failure',\n status: 'error',\n message: `${result.packageName}: manifest failed to load`,\n code: 'MANIFEST_LOAD_FAILED',\n remediation: `pnpm --filter ${result.packageName} build`,\n details: { source: result.source, manifestPath: result.manifestPath },\n });\n }\n }\n }\n } catch (err) {\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\n try {\n const cachePath = path.join(cwd, '.kb', 'cache', 'cli-manifests.json');\n const cacheExists = await fsAccess(cachePath).then(() => true).catch(() => false);\n if (cacheExists) {\n const cache = JSON.parse(await fsReadFile(cachePath, 'utf8')) as { timestamp?: number; packages?: Record<string, unknown> };\n const ageHours = Math.floor((Date.now() - (cache.timestamp ?? 0)) / (1000 * 60 * 60));\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: { exists: true, ageHours, packages: Object.keys(cache.packages ?? {}).length },\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) {\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 — also surface DiagnosticCollector events\n try {\n const collector = new DiagnosticCollector();\n const lock = await readMarketplaceLock(cwd, collector);\n\n for (const event of collector.getEvents()) {\n if (event.severity === 'error' || event.severity === 'warning') {\n diagnostics.push({\n category: 'lock-event',\n status: event.severity === 'error' ? 'error' : 'warning',\n message: event.message,\n code: event.code,\n remediation: event.remediation,\n details: event.context as Record<string, unknown> | undefined,\n });\n }\n }\n\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) {\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\n try {\n const cliVersion = process.env.CLI_VERSION ?? '0.1.0';\n const versionIssues: Array<{ plugin: string; required: string; current: string }> = [];\n for (const cmd of registry.listCommands()) {\n const required = cmd.manifest.engine?.kbCli;\n if (required) {\n const requiredMajor = parseInt(required.replace('^', '').split('.')[0] ?? '0', 10);\n const currentMajor = parseInt(cliVersion.split('.')[0] ?? '0', 10);\n if (!isNaN(requiredMajor) && !isNaN(currentMajor) && currentMajor < requiredMajor) {\n versionIssues.push({ plugin: cmd.manifest.package ?? cmd.manifest.group, required, current: cliVersion });\n }\n }\n }\n diagnostics.push({\n category: 'versions',\n status: versionIssues.length > 0 ? 'warning' : 'ok',\n message: versionIssues.length > 0\n ? `${versionIssues.length} plugin(s) require newer CLI version`\n : 'All plugins compatible with current CLI version',\n details: { issues: versionIssues },\n });\n } catch (err) {\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: DiagSummary = {\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 { ok: summary.errors === 0, diagnostics, summary };\n },\n\n // eslint-disable-next-line sonarjs/cognitive-complexity\n formatter(result, ctx, flags) {\n if (flags.json) {\n ctx.ui?.json?.(result);\n return;\n }\n\n // ── Trace mode output ──────────────────────────────────────────────────────\n if ('stages' in result) {\n const trace = result as CommandTraceResult;\n const verdictStatus = trace.ok ? 'success' : 'error' as const;\n const verdictMsg = trace.ok\n ? 'Command is fully operational'\n : `Root cause: ${trace.verdict.rootCause}`;\n\n ctx.ui.chain([\n ...trace.stages.map(stageToChainItem),\n {\n title: 'verdict',\n status: verdictStatus,\n summary: { rootCause: trace.verdict.rootCause } as Record<string, string | number | boolean>,\n sections: [\n { items: [verdictMsg] as string[] },\n ...(trace.verdict.remediation ? [{ header: 'Fix', items: [trace.verdict.remediation] as string[] }] : []),\n ],\n },\n ]);\n return;\n }\n\n // ── Base mode output ───────────────────────────────────────────────────────\n const base = result as DiagResult;\n const hasErrors = base.summary.errors > 0;\n const hasWarnings = base.summary.warnings > 0;\n\n const summaryItems = [\n `${safeColors.bold('Total Checks')}: ${base.summary.total}`,\n `${safeColors.success('OK')}: ${base.summary.ok}`,\n `${safeColors.warning('Warnings')}: ${base.summary.warnings}`,\n `${safeColors.error('Errors')}: ${base.summary.errors}`,\n ];\n\n const diagItems: string[] = [];\n for (const diag of base.diagnostics) {\n const icon = diag.status === 'ok' ? safeSymbols.success\n : diag.status === 'warning' ? safeSymbols.warning\n : safeSymbols.error;\n const colorize = diag.status === 'ok' ? safeColors.success\n : diag.status === 'warning' ? safeColors.warning\n : safeColors.error;\n\n diagItems.push(`${icon} ${colorize(safeColors.bold(diag.category))}: ${diag.message}`);\n\n if (diag.remediation) {\n diagItems.push(` ${safeColors.muted(`→ Fix: ${diag.remediation}`)}`);\n }\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(` ${safeColors.warning(`→ ${issue.plugin}: requires ${issue.required}, found ${issue.current}`)}`);\n }\n }\n }\n\n const nextSteps: string[] = [];\n if (hasErrors) { nextSteps.push(`kb marketplace doctor ${safeColors.muted('Diagnose plugin issues')}`); }\n if (hasWarnings) { nextSteps.push(`kb marketplace list ${safeColors.muted('List all plugins')}`); }\n nextSteps.push(`kb diag --command <name> ${safeColors.muted('Trace a specific command')}`);\n\n const sections = [\n { header: 'Summary', items: summaryItems },\n { header: 'Details', items: diagItems },\n { header: 'Next Steps', items: nextSteps },\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 * @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\n// eslint-disable-next-line sonarjs/cognitive-complexity\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 (ADR-0015)\n *\n * Key changes vs old version:\n * - canonicalKey = segments.join(':') — includes full path, no subgroup collision\n * - checkNamespaceCollision removed — Trie guarantees structural uniqueness\n * - CommandRegistry replaced with TrieBackedRegistry\n */\n\nimport type { CommandManifest, DiscoveryResult, RegisteredCommand } from './types';\nimport type { TrieBackedRegistry } from './service';\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\n// ─── Manifest structural validation ──────────────────────────────────────────\n\nfunction validateManifestStructure(manifest: CommandManifest): void {\n if (manifest.manifestVersion !== '1.0') {\n throw new Error(\n `Unsupported manifestVersion \"${manifest.manifestVersion}\" in ${manifest.segments?.join(' ') ?? manifest.id} (expected \"1.0\")`\n );\n }\n if (!Array.isArray(manifest.segments) || manifest.segments.length === 0) {\n throw new Error(`Missing or empty segments in manifest ${manifest.id}`);\n }\n if (!manifest.describe) {\n throw new Error(`Missing describe in manifest ${manifest.segments.join(' ')}`);\n }\n if (!manifest.loader && !manifest.manifestV2) {\n throw new Error(`Command ${manifest.segments.join(' ')} must have either loader or manifestV2`);\n }\n if (manifest.flags) {\n for (const flag of manifest.flags) {\n if (!flag.name || !flag.type) {\n throw new Error(`Invalid flag in ${manifest.segments.join(' ')}: missing name or type`);\n }\n if (flag.alias && flag.alias.length !== 1) {\n throw new Error(`Flag \"${flag.name}\" in ${manifest.segments.join(' ')}: alias must be a single character`);\n }\n if (flag.choices && flag.type !== 'string') {\n throw new Error(\n `Flag \"${flag.name}\" in ${manifest.segments.join(' ')}: choices only allowed for string type`\n );\n }\n }\n }\n}\n\n// ─── Source priority ──────────────────────────────────────────────────────────\n\nconst SOURCE_PRIORITY: Record<string, number> = {\n builtin: 4,\n workspace: 3,\n linked: 2,\n node_modules: 1,\n};\n\nfunction getSourcePriority(source: string): number {\n return SOURCE_PRIORITY[source] ?? 0;\n}\n\n// ─── Preflight ────────────────────────────────────────────────────────────────\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 id = manifest?.segments?.join(' ') ?? manifest?.id ?? result.packageName ?? 'unknown';\n skipped.push({ id, source: result.source, reason });\n log.warn(`Preflight skipped manifest ${id}: ${reason}`);\n if (logLevel === 'debug') {\n process.stderr.write(`[debug][preflight] skipped ${id} (${result.source}): ${reason}\\n`);\n }\n }\n }\n\n if (allowed.length > 0) {\n valid.push({ ...result, manifests: allowed });\n }\n }\n\n return { valid, skipped };\n}\n\n// ─── Registration ─────────────────────────────────────────────────────────────\n\n// eslint-disable-next-line sonarjs/cognitive-complexity\nexport async function registerManifests(\n discoveryResults: DiscoveryResult[],\n registry: TrieBackedRegistry,\n options: RegisterManifestsOptions & { logger?: ILogger } = {}\n): Promise<ManifestRegistrationResult> {\n const log = options.logger ?? platform.logger;\n const registered: RegisteredCommand[] = [];\n const skipped: SkippedManifest[] = [];\n // canonicalKey → first registered command (for shadowing logic)\n const globalIds = 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 return getSourcePriority(b.source) - getSourcePriority(a.source);\n });\n\n for (const result of sorted) {\n for (const manifest of result.manifests) {\n const manifestId = manifest.segments?.join(' ') ?? manifest.id ?? 'unknown';\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 availability = checkRequires(manifest, {\n cwd: options.cwd ?? result.pkgRoot,\n });\n\n const cmd: RegisteredCommand = {\n manifest,\n v3Manifest: manifest.manifestV2,\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 // Lifecycle hooks (init / register / dispose)\n try {\n const manifestModule = await import(result.manifestPath);\n\n if (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 (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 (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 ${manifestId}: ${hookMsg}`);\n }\n\n // Canonical key is the full path — unique by construction in the trie\n const canonicalKey = manifest.segments.join(':');\n const existing = globalIds.get(canonicalKey);\n\n if (existing) {\n // Same path from two sources — apply shadowing by priority\n if (existing.source === result.source && existing.source === 'workspace') {\n collisions++;\n throw new Error(\n `Command path collision: \"${manifestId}\" exported by multiple workspace packages.`\n );\n }\n const existPri = getSourcePriority(existing.source);\n const curPri = getSourcePriority(result.source);\n\n if (curPri > existPri) {\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 if (!cmd.shadowed) {\n registry.registerManifest(cmd);\n registered.push(cmd);\n }\n } catch (error: unknown) {\n errors++;\n const reason = error instanceof Error ? error.message : String(error);\n skipped.push({ id: manifestId, source: result.source, reason });\n log.error(`Skipped manifest ${manifestId} (${result.source}): ${reason}`);\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 { registered, skipped, collisions, errors };\n}\n\n// ─── Dispose ──────────────────────────────────────────────────────────────────\n\nexport async function disposeAllPlugins(\n registry: TrieBackedRegistry,\n logger?: ILogger\n): Promise<void> {\n const log = logger ?? platform.logger;\n const manifests = registry.listCommands();\n const disposePromises: Promise<void>[] = [];\n\n for (const cmd of manifests) {\n const disposeHook = cmd._disposeHook;\n if (typeof disposeHook === 'function') {\n disposePromises.push(\n Promise.resolve(disposeHook()).catch((err: unknown) => {\n log.warn(`Dispose hook failed for ${cmd.manifest.segments.join(' ')}: ${err instanceof Error ? err.message : String(err)}`);\n })\n );\n }\n }\n\n await Promise.allSettled(disposePromises);\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 * 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 registeredCommands = registry.listCommands();\n\n ctx.platform?.logger?.info('Generating CLI reference', {\n commands: registeredCommands.length,\n output: outputPath,\n });\n\n // Group commands by top-level group\n const groups = new Map<string, typeof registeredCommands>();\n for (const cmd of registeredCommands) {\n const group = cmd.manifest.group || 'other';\n if (!groups.has(group)) {\n groups.set(group, []);\n }\n groups.get(group)!.push(cmd);\n }\n\n const commands = registeredCommands;\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) =>\n a.manifest.segments.join(' ').localeCompare(b.manifest.segments.join(' '))\n );\n\n lines.push(`## ${groupName}\\n`);\n\n for (const cmd of cmds) {\n const displayPath = cmd.manifest.segments.join(' ');\n lines.push(`### \\`kb ${displayPath}\\`\\n`);\n lines.push(`${cmd.manifest.describe || 'No description'}\\n`);\n\n if (cmd.manifest.longDescription) {\n lines.push(`${cmd.manifest.longDescription}\\n`);\n }\n\n if (cmd.manifest.flags && cmd.manifest.flags.length > 0) {\n lines.push('**Flags:**\\n');\n for (const flag of cmd.manifest.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.manifest.examples && cmd.manifest.examples.length > 0) {\n lines.push('**Examples:**\\n');\n lines.push('```bash');\n for (const example of cmd.manifest.examples) {\n lines.push(example);\n }\n lines.push('```\\n');\n }\n\n if (cmd.manifest.aliases && cmd.manifest.aliases.length > 0) {\n lines.push(`**Aliases:** ${cmd.manifest.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 */\n// eslint-disable-next-line sonarjs/cognitive-complexity\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 // eslint-disable-next-line sonarjs/cognitive-complexity\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 // Fetch profile (handle, namespaceId) via /auth/me\n let handle: string | undefined;\n let namespaceId: string | undefined;\n try {\n const meRes = await fetch(`${gatewayUrl}/auth/me`, {\n headers: { Authorization: `Bearer ${tokenData.accessToken}` },\n });\n if (meRes.ok) {\n const profile = await meRes.json() as { handle?: string; namespaceId?: string };\n handle = profile.handle;\n namespaceId = profile.namespaceId;\n }\n } catch {\n // /auth/me failure is non-fatal — credentials still saved without profile\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 handle,\n namespaceId,\n });\n\n if (flags.json) {\n ctx.ui?.json({\n ok: true,\n gatewayUrl,\n expiresIn: tokenData.expiresIn,\n ...(handle ? { handle } : {}),\n });\n } else {\n ctx.ui?.write?.(`Authenticated with Gateway at ${gatewayUrl}\\n`);\n if (handle) { ctx.ui?.write?.(`Handle: ${handle}\\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 // eslint-disable-next-line sonarjs/cognitive-complexity\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 // eslint-disable-next-line sonarjs/cognitive-complexity\n formatter(result, ctx, flags) {\n if (flags.json) {\n ctx.ui?.json?.(result.sync ?? result);\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 * kb webhook provision — Provision (or rotate) a webhook secret.\n *\n * Calls POST /api/v1/webhooks/provision and prints the URL + secret once.\n * The secret is shown only here — it cannot be recovered after this call.\n */\n\nimport { defineSystemCommand, type CommandResult } from '@kb-labs/shared-command-kit';\nimport { CredentialsManager } from '@kb-labs/cli-runtime/gateway';\n\ntype ProvisionFlags = {\n plugin: { type: 'string'; description: string };\n event: { type: 'string'; description: string };\n instance: { type: 'string'; description: string };\n json: { type: 'boolean'; description: string };\n};\n\ntype ProvisionResult = CommandResult & {\n url?: string;\n rotated?: boolean;\n};\n\nexport const webhookProvision = defineSystemCommand<ProvisionFlags, ProvisionResult>({\n name: 'provision',\n description: 'Provision (or rotate) a webhook secret',\n longDescription:\n 'Generates a new webhook secret for a plugin+event combination and registers it with the Gateway. ' +\n 'On first call: creates the secret. On subsequent calls: rotates it (old secret valid for 24h). ' +\n 'The secret is shown once — save it immediately.',\n category: 'webhook',\n examples: [\n 'kb webhook provision --plugin @kb-labs/rollout --event alert',\n 'kb webhook provision --plugin @kb-labs/rollout --event alert --instance prod',\n 'kb webhook provision --plugin @kb-labs/rollout --event alert --json',\n ],\n flags: {\n plugin: { type: 'string', description: 'Plugin ID (e.g. @kb-labs/rollout)' },\n event: { type: 'string', description: 'Webhook event name declared in the plugin manifest' },\n instance: { type: 'string', description: 'Instance ID for multi-instance webhooks (optional)' },\n json: { type: 'boolean', description: 'Output in JSON format' },\n },\n async handler(ctx, _argv, flags) {\n const pluginId = flags.plugin;\n const event = flags.event;\n\n if (!pluginId) {\n const msg = '--plugin is required';\n if (flags.json) { ctx.ui?.json({ ok: false, error: msg }); } else { ctx.ui?.error?.(msg); }\n return { ok: false, error: msg };\n }\n if (!event) {\n const msg = '--event is required';\n if (flags.json) { ctx.ui?.json({ ok: false, error: msg }); } else { ctx.ui?.error?.(msg); }\n return { ok: false, error: msg };\n }\n\n const credentialsManager = new CredentialsManager();\n const credentials = await credentialsManager.load();\n\n if (!credentials) {\n const msg = 'Not authenticated. Run \"kb auth login\" first.';\n if (flags.json) { ctx.ui?.json({ ok: false, error: msg }); } else { ctx.ui?.error?.(msg); }\n return { ok: false, error: msg };\n }\n\n const url = `${credentials.gatewayUrl}/api/v1/webhooks/provision`;\n let response: Response;\n try {\n response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${credentials.accessToken}`,\n },\n body: JSON.stringify({\n pluginId,\n event,\n ...(flags.instance ? { instanceId: flags.instance } : {}),\n }),\n });\n } catch (err) {\n const msg = `Cannot reach Gateway at ${credentials.gatewayUrl}: ${err instanceof Error ? err.message : String(err)}`;\n if (flags.json) { ctx.ui?.json({ ok: false, error: msg }); } else { ctx.ui?.error?.(msg); }\n return { ok: false, error: msg };\n }\n\n if (!response.ok) {\n const body = await response.text().catch(() => '');\n let detail = '';\n try { detail = JSON.parse(body)?.message ?? body; } catch { detail = body; }\n const msg = `Provision failed (HTTP ${response.status})${detail ? ': ' + detail : ''}`;\n if (flags.json) { ctx.ui?.json({ ok: false, error: msg }); } else { ctx.ui?.error?.(msg); }\n return { ok: false, error: msg };\n }\n\n const data = await response.json() as { url: string; secret: string; rotated: boolean };\n\n if (flags.json) {\n ctx.ui?.json({ ok: true, url: data.url, secret: data.secret, rotated: data.rotated });\n } else {\n ctx.ui?.write?.(data.rotated ? '⟳ Secret rotated (old secret valid for 24h grace period)\\n' : '✓ Webhook provisioned\\n');\n ctx.ui?.write?.(`URL: ${data.url}\\n`);\n ctx.ui?.write?.(`Secret: ${data.secret}\\n`);\n ctx.ui?.write?.('\\n⚠ Save the secret now — it will not be shown again.\\n');\n }\n\n return { ok: true, url: data.url, rotated: data.rotated };\n },\n});\n","/**\n * kb webhook list — List declared webhook endpoints.\n *\n * Calls GET /api/v1/webhooks and shows all available webhook declarations,\n * with provisioned status for each.\n */\n\nimport { defineSystemCommand, type CommandResult } from '@kb-labs/shared-command-kit';\nimport { CredentialsManager } from '@kb-labs/cli-runtime/gateway';\n\ntype ListFlags = {\n plugin: { type: 'string'; description: string };\n json: { type: 'boolean'; description: string };\n};\n\ntype WebhookEntry = {\n pluginId: string;\n event: string;\n multi: boolean;\n provisioned: boolean;\n};\n\ntype ListResult = CommandResult & {\n webhooks?: WebhookEntry[];\n};\n\nexport const webhookList = defineSystemCommand<ListFlags, ListResult>({\n name: 'list',\n description: 'List declared webhook endpoints',\n longDescription:\n 'Lists all webhook endpoints declared in installed plugin manifests. ' +\n 'Shows provisioned status (whether a secret has been set) for each endpoint.',\n category: 'webhook',\n examples: [\n 'kb webhook list',\n 'kb webhook list --plugin @kb-labs/rollout',\n 'kb webhook list --json',\n ],\n flags: {\n plugin: { type: 'string', description: 'Filter by plugin ID' },\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 const msg = 'Not authenticated. Run \"kb auth login\" first.';\n if (flags.json) { ctx.ui?.json({ ok: false, error: msg }); } else { ctx.ui?.error?.(msg); }\n return { ok: false, error: msg };\n }\n\n const qs = flags.plugin ? `?pluginId=${encodeURIComponent(flags.plugin)}` : '';\n const url = `${credentials.gatewayUrl}/api/v1/webhooks${qs}`;\n\n let response: Response;\n try {\n response = await fetch(url, {\n headers: { Authorization: `Bearer ${credentials.accessToken}` },\n });\n } catch (err) {\n const msg = `Cannot reach Gateway at ${credentials.gatewayUrl}: ${err instanceof Error ? err.message : String(err)}`;\n if (flags.json) { ctx.ui?.json({ ok: false, error: msg }); } else { ctx.ui?.error?.(msg); }\n return { ok: false, error: msg };\n }\n\n if (!response.ok) {\n const body = await response.text().catch(() => '');\n const msg = `List failed (HTTP ${response.status}): ${body}`;\n if (flags.json) { ctx.ui?.json({ ok: false, error: msg }); } else { ctx.ui?.error?.(msg); }\n return { ok: false, error: msg };\n }\n\n const data = await response.json() as { webhooks: WebhookEntry[] };\n const webhooks = data.webhooks ?? [];\n\n if (flags.json) {\n ctx.ui?.json({ ok: true, webhooks });\n } else {\n if (webhooks.length === 0) {\n ctx.ui?.write?.('No webhook endpoints found.\\n');\n } else {\n // Column widths\n const pluginWidth = Math.max(6, ...webhooks.map((w) => w.pluginId.length));\n const eventWidth = Math.max(5, ...webhooks.map((w) => w.event.length));\n\n // Header\n ctx.ui?.write?.(\n `${'PLUGIN'.padEnd(pluginWidth)} ${'EVENT'.padEnd(eventWidth)} MULTI PROVISIONED\\n`,\n );\n ctx.ui?.write?.(`${'─'.repeat(pluginWidth)} ${'─'.repeat(eventWidth)} ───── ───────────\\n`);\n\n for (const w of webhooks) {\n ctx.ui?.write?.(\n `${w.pluginId.padEnd(pluginWidth)} ${w.event.padEnd(eventWidth)} ${w.multi ? 'yes ' : 'no '} ${w.provisioned ? 'yes' : 'no'}\\n`,\n );\n }\n ctx.ui?.write?.(`\\n${webhooks.length} webhook(s)\\n`);\n }\n }\n\n return { ok: true, webhooks };\n },\n});\n","/**\n * kb webhook revoke — Revoke a provisioned webhook secret.\n *\n * Calls DELETE /api/v1/webhooks/:pluginId/:event[/:instanceId].\n * After revocation, incoming deliveries with the old secret are rejected immediately.\n */\n\nimport { defineSystemCommand, type CommandResult } from '@kb-labs/shared-command-kit';\nimport { CredentialsManager } from '@kb-labs/cli-runtime/gateway';\n\ntype RevokeFlags = {\n plugin: { type: 'string'; description: string };\n event: { type: 'string'; description: string };\n instance: { type: 'string'; description: string };\n json: { type: 'boolean'; description: string };\n};\n\ntype RevokeResult = CommandResult;\n\nexport const webhookRevoke = defineSystemCommand<RevokeFlags, RevokeResult>({\n name: 'revoke',\n description: 'Revoke a provisioned webhook secret',\n longDescription:\n 'Deletes the webhook secret for a plugin+event combination. ' +\n 'Any subsequent deliveries with the old secret are immediately rejected (no grace period). ' +\n 'Use \"kb webhook provision\" to create a new secret afterwards.',\n category: 'webhook',\n examples: [\n 'kb webhook revoke --plugin @kb-labs/rollout --event alert',\n 'kb webhook revoke --plugin @kb-labs/rollout --event alert --instance prod',\n 'kb webhook revoke --plugin @kb-labs/rollout --event alert --json',\n ],\n flags: {\n plugin: { type: 'string', description: 'Plugin ID (e.g. @kb-labs/rollout)' },\n event: { type: 'string', description: 'Webhook event name' },\n instance: { type: 'string', description: 'Instance ID for multi-instance webhooks (optional)' },\n json: { type: 'boolean', description: 'Output in JSON format' },\n },\n async handler(ctx, _argv, flags) {\n const pluginId = flags.plugin;\n const event = flags.event;\n\n if (!pluginId) {\n const msg = '--plugin is required';\n if (flags.json) { ctx.ui?.json({ ok: false, error: msg }); } else { ctx.ui?.error?.(msg); }\n return { ok: false, error: msg };\n }\n if (!event) {\n const msg = '--event is required';\n if (flags.json) { ctx.ui?.json({ ok: false, error: msg }); } else { ctx.ui?.error?.(msg); }\n return { ok: false, error: msg };\n }\n\n const credentialsManager = new CredentialsManager();\n const credentials = await credentialsManager.load();\n\n if (!credentials) {\n const msg = 'Not authenticated. Run \"kb auth login\" first.';\n if (flags.json) { ctx.ui?.json({ ok: false, error: msg }); } else { ctx.ui?.error?.(msg); }\n return { ok: false, error: msg };\n }\n\n // Build path: encode each segment to handle scoped package names (@org/pkg)\n const segments = [\n encodeURIComponent(pluginId),\n encodeURIComponent(event),\n ...(flags.instance ? [encodeURIComponent(flags.instance)] : []),\n ].join('/');\n const url = `${credentials.gatewayUrl}/api/v1/webhooks/${segments}`;\n\n let response: Response;\n try {\n response = await fetch(url, {\n method: 'DELETE',\n headers: { Authorization: `Bearer ${credentials.accessToken}` },\n });\n } catch (err) {\n const msg = `Cannot reach Gateway at ${credentials.gatewayUrl}: ${err instanceof Error ? err.message : String(err)}`;\n if (flags.json) { ctx.ui?.json({ ok: false, error: msg }); } else { ctx.ui?.error?.(msg); }\n return { ok: false, error: msg };\n }\n\n // 204 = revoked, 404 = not found (idempotent — treat as ok)\n if (!response.ok && response.status !== 404) {\n const body = await response.text().catch(() => '');\n const msg = `Revoke failed (HTTP ${response.status}): ${body}`;\n if (flags.json) { ctx.ui?.json({ ok: false, error: msg }); } else { ctx.ui?.error?.(msg); }\n return { ok: false, error: msg };\n }\n\n const label = flags.instance\n ? `${pluginId}/${event}/${flags.instance}`\n : `${pluginId}/${event}`;\n\n if (flags.json) {\n ctx.ui?.json({ ok: true, revoked: label });\n } else {\n ctx.ui?.write?.(`✓ Webhook revoked: ${label}\\n`);\n }\n\n return { ok: true };\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 { 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';\nimport { webhookProvision, webhookList, webhookRevoke } from './webhook';\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 * 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/**\n * Webhook Commands Group\n *\n * Manage webhook secrets for plugin event endpoints.\n */\nexport const webhookGroup = defineSystemCommandGroup('webhook', 'Webhook management commands', [\n webhookProvision,\n webhookList,\n webhookRevoke,\n]);\n","/**\n * kb completion bash|zsh|fish — print shell completion script\n * kb completion install — bake static completions into shell profile (instant Tab)\n */\n\nimport { defineSystemCommand, type CommandResult } from '@kb-labs/shared-command-kit';\nimport { promises as fs } from 'node:fs';\nimport { createHash } from 'node:crypto';\nimport os from 'node:os';\nimport path from 'node:path';\nimport type { TrieBackedRegistry } from '../../registry/service';\n\ntype CompletionResult = CommandResult & { ok: boolean; status: string; script: string; shell: string };\ntype InstallResult = CommandResult & { ok: boolean; status: string; shell: string; profilePath: string; alreadyInstalled: boolean; aliasInstalled: boolean };\n\nconst MARKER = '# kb completion';\nconst ALIAS_MARKER = '# kb alias';\nconst STATIC_FILE = path.join(os.homedir(), '.config', 'kb', 'completion.zsh');\n\n// ─── Dynamic scripts (fallback) ───────────────────────────────────────────────\n\nfunction dynamicScript(shell: string): string | null {\n switch (shell) {\n case 'bash': return [\n '_kb_completion() {',\n ' local words cur',\n ' cur=\"${COMP_WORDS[COMP_CWORD]}\"',\n ' words=\"${COMP_WORDS[*]:1:$((COMP_CWORD - 1))}\"',\n ' COMPREPLY=($(kb __complete $words \"$cur\" 2>/dev/null))',\n ' return 0',\n '}',\n 'complete -o nospace -F _kb_completion kb',\n ].join('\\n');\n\n case 'zsh': return [\n '#compdef kb',\n '_kb_completion() {',\n ' local completions',\n ' completions=($(kb __complete ${words[2,-1]} 2>/dev/null))',\n ' compadd -a completions',\n '}',\n 'compdef _kb_completion kb',\n ].join('\\n');\n\n case 'fish': return [\n 'function __kb_complete',\n ' set -l tokens (commandline -opc)',\n ' kb __complete $tokens[2..] (commandline -ct) 2>/dev/null',\n 'end',\n 'complete -c kb -f -a \"(__kb_complete)\"',\n ].join('\\n');\n\n default: return null;\n }\n}\n\n// ─── Static zsh script generator ─────────────────────────────────────────────\n\nfunction buildStaticZsh(tree: Map<string, Map<string, string[]>>): string {\n const lines: string[] = ['#compdef kb', '_kb() {'];\n\n // Level 1\n const l1 = [...tree.keys()];\n lines.push(` if [[ $CURRENT -eq 2 ]]; then`);\n lines.push(` compadd -- ${l1.join(' ')}`);\n lines.push(` return`);\n lines.push(` fi`);\n\n // Level 2\n lines.push(` if [[ $CURRENT -eq 3 ]]; then`);\n lines.push(` case $words[2] in`);\n for (const [cmd, subMap] of tree) {\n const subs = [...subMap.keys()];\n if (subs.length > 0) {\n lines.push(` ${cmd}) compadd -- ${subs.join(' ')} ;;`);\n }\n }\n lines.push(` esac`);\n lines.push(` return`);\n lines.push(` fi`);\n\n // Level 3\n lines.push(` if [[ $CURRENT -eq 4 ]]; then`);\n lines.push(` case \"$words[2] $words[3]\" in`);\n for (const [cmd, subMap] of tree) {\n for (const [sub, leaves] of subMap) {\n if (leaves.length > 0) {\n // strip the \"cmd sub \" prefix from leaf names to get the last segment\n const bare = leaves.map(l => l.split(' ').pop() ?? l);\n lines.push(` \"${cmd} ${sub}\") compadd -- ${bare.join(' ')} ;;`);\n }\n }\n }\n lines.push(` esac`);\n lines.push(` return`);\n lines.push(` fi`);\n\n lines.push(`}`, `compdef _kb kb`);\n\n // Hook into pnpm completion for 'pnpm kb ...' without breaking regular pnpm tab\n lines.push(``, `# pnpm kb — same completions, shifted by 1 position`);\n lines.push(`_kb_pnpm_wrap() {`);\n lines.push(` if [[ \\${words[2]-} == kb ]]; then`);\n lines.push(` local CURRENT=$((CURRENT - 1))`);\n lines.push(` local -a words=(\"kb\" \"\\${words[3,-1]}\")`);\n lines.push(` [[ $CURRENT -lt 1 ]] && CURRENT=1`);\n lines.push(` _kb`);\n lines.push(` return 0`);\n lines.push(` fi`);\n lines.push(` (( $+functions[_pnpm_orig] )) && { _pnpm_orig; return; }`);\n lines.push(` return 1`);\n lines.push(`}`);\n lines.push(`if (( $+functions[_pnpm] )) && ! (( $+functions[_pnpm_orig] )); then`);\n lines.push(` functions[_pnpm_orig]=$functions[_pnpm]`);\n lines.push(` _pnpm() { _kb_pnpm_wrap; }`);\n lines.push(`else`);\n lines.push(` compdef _kb_pnpm_wrap pnpm`);\n lines.push(`fi`);\n\n return lines.join('\\n');\n}\n\nasync function collectTree(registry: TrieBackedRegistry): Promise<Map<string, Map<string, string[]>>> {\n const tree = new Map<string, Map<string, string[]>>();\n const l1 = registry.complete(['']);\n for (const cmd of l1) {\n const subMap = new Map<string, string[]>();\n const l2 = registry.complete([cmd, '']);\n for (const full2 of l2) {\n const sub = full2.split(' ').pop() ?? full2;\n const l3 = registry.complete([cmd, sub, '']);\n subMap.set(sub, l3);\n }\n tree.set(cmd, subMap);\n }\n return tree;\n}\n\n// ─── Shell helpers ────────────────────────────────────────────────────────────\n\nfunction detectShell(): string {\n const name = path.basename(process.env['SHELL'] ?? '');\n return ['bash', 'zsh', 'fish'].includes(name) ? name : 'zsh';\n}\n\nfunction profilePath(shell: string): string {\n const home = os.homedir();\n if (shell === 'bash') { return path.join(home, '.bashrc'); }\n if (shell === 'fish') { return path.join(home, '.config', 'fish', 'config.fish'); }\n return path.join(home, '.zshrc');\n}\n\nfunction profileLine(shell: string): string {\n if (shell === 'zsh') { return `${MARKER}\\n[ -f \"${STATIC_FILE}\" ] && source \"${STATIC_FILE}\"`; }\n if (shell === 'fish') { return `${MARKER}\\ntest -f \"${STATIC_FILE}\" && source \"${STATIC_FILE}\"`; }\n // bash: fall back to dynamic since static file is zsh-specific\n return `${MARKER}\\ncommand -v kb &>/dev/null && eval \"$(kb completion bash 2>/dev/null)\" || true`;\n}\n\nfunction aliasLine(shell: string): string {\n if (shell === 'fish') {\n return [\n ALIAS_MARKER,\n `alias kb='pnpm --silent kb'`,\n `function pnpm`,\n ` if test \"$argv[1]\" = \"kb\"`,\n ` command pnpm --silent $argv`,\n ` else`,\n ` command pnpm $argv`,\n ` end`,\n `end`,\n ].join('\\n');\n }\n return [\n ALIAS_MARKER,\n `alias kb='pnpm --silent kb'`,\n `pnpm() { if [[ \"$1\" == \"kb\" ]]; then command pnpm --silent \"$@\"; else command pnpm \"$@\"; fi }`,\n ].join('\\n');\n}\n\n// ─── Auto-update ──────────────────────────────────────────────────────────────\n\nfunction commandsHash(registry: TrieBackedRegistry): string {\n const keys = registry.complete(['']).sort().join(',');\n return createHash('sha256').update(keys).digest('hex').slice(0, 12);\n}\n\nfunction hashFromFile(content: string): string | null {\n const m = content.match(/^# hash: ([a-f0-9]+)/m);\n return m?.[1] ?? null;\n}\n\nexport async function autoUpdateCompletion(registry: TrieBackedRegistry): Promise<void> {\n // Only update if the static file exists (user opted in via `completion install`)\n try { await fs.access(STATIC_FILE); } catch { return; }\n\n const current = commandsHash(registry);\n let existing = '';\n try { existing = await fs.readFile(STATIC_FILE, 'utf8'); } catch { return; }\n\n if (hashFromFile(existing) === current) { return; } // nothing changed\n\n const tree = await collectTree(registry);\n const script = `# hash: ${current}\\n` + buildStaticZsh(tree);\n await fs.writeFile(STATIC_FILE, script, 'utf8');\n}\n\n// ─── Command factory ──────────────────────────────────────────────────────────\n\nexport function createCompletionCommand(registry: TrieBackedRegistry) {\n return defineSystemCommand({\n name: 'completion',\n description: 'Generate or install shell completion',\n longDescription:\n 'Print a shell completion script or bake a static one into your shell profile.\\n\\n' +\n 'Usage:\\n' +\n ' kb completion install # auto-detect shell, write static file, add to profile\\n' +\n ' kb completion zsh # print dynamic zsh script\\n' +\n ' kb completion bash # print dynamic bash script\\n' +\n ' kb completion fish # print dynamic fish script',\n flags: {},\n\n async handler(_ctx, argv) {\n const arg = argv[0];\n\n // ── install ────────────────────────────────────────────────────────────\n if (!arg || arg === 'install') {\n const shell = argv[1] ?? detectShell();\n\n // For zsh: generate static file\n if (shell === 'zsh') {\n const tree = await collectTree(registry);\n const hash = commandsHash(registry);\n const script = `# hash: ${hash}\\n` + buildStaticZsh(tree);\n await fs.mkdir(path.dirname(STATIC_FILE), { recursive: true });\n await fs.writeFile(STATIC_FILE, script, 'utf8');\n }\n\n // Ensure profile sources it\n const rcPath = profilePath(shell);\n let existing = '';\n try { existing = await fs.readFile(rcPath, 'utf8'); } catch { /* first time */ }\n\n const alreadyInstalled = existing.includes(MARKER);\n if (!alreadyInstalled) {\n await fs.appendFile(rcPath, `\\n${profileLine(shell)}\\n`);\n } else if (shell === 'zsh') {\n // Static file already updated — profile line unchanged, just updated the file\n }\n\n const aliasAlreadyInstalled = existing.includes(ALIAS_MARKER);\n if (!aliasAlreadyInstalled) {\n await fs.appendFile(rcPath, `\\n${aliasLine(shell)}\\n`);\n }\n\n return { ok: true, status: 'success', shell, profilePath: rcPath, alreadyInstalled, aliasInstalled: !aliasAlreadyInstalled } as InstallResult;\n }\n\n // ── print dynamic script ───────────────────────────────────────────────\n const script = dynamicScript(arg);\n if (!script) { throw new Error(`Unsupported shell: ${arg}. Supported: bash, zsh, fish`); }\n return { ok: true, status: 'success', script, shell: arg } as CompletionResult;\n },\n\n formatter(result) {\n if ('script' in result) {\n process.stdout.write(result.script + '\\n');\n return;\n }\n const r = result as InstallResult;\n if (r.shell === 'zsh') {\n process.stdout.write(`✓ Static completions → ${STATIC_FILE}\\n`);\n }\n if (r.alreadyInstalled) {\n process.stdout.write(`Profile already configured: ${r.profilePath}\\n`);\n } else {\n process.stdout.write(`✓ Added to ${r.profilePath}\\n`);\n }\n if (r.aliasInstalled) {\n process.stdout.write(`✓ Alias kb='pnpm --silent kb' added\\n`);\n }\n process.stdout.write(`Run: source ${r.profilePath}\\n`);\n },\n });\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 registryGroup,\n docsGroup,\n logsGroup,\n authGroup,\n platformGroup,\n webhookGroup,\n} from \"../commands/system/groups\";\nimport { createCompletionCommand, autoUpdateCompletion } from \"../commands/system/completion\";\nimport { diag } from \"../commands/system/diag\";\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\n// eslint-disable-next-line sonarjs/cognitive-complexity\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.setLogger(log);\n registry.markPartial(true);\n registeredCommands.length = 0;\n\n // Register system command groups (migrated commands)\n registry.registerGroup(infoGroup);\n registry.registerGroup(registryGroup);\n registry.registerGroup(docsGroup);\n registry.registerGroup(logsGroup);\n registry.registerGroup(authGroup);\n registry.registerGroup(platformGroup);\n registry.registerGroup(webhookGroup);\n\n // Standalone system commands\n registry.register(createCompletionCommand(registry));\n registry.register(diag);\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 // Regenerate static shell completions if command set changed — cheap check (<1ms typical)\n await autoUpdateCompletion(registry).catch(() => { /* best-effort, never fail startup */ });\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 { sideBorderBox, type SectionContent, safeColors, TimingTracker } from \"@kb-labs/shared-cli-ui\";\nimport type { RegisteredCommand } from \"./shared\";\n\nexport interface GroupHelpOptions {\n /** Full path of the group (e.g. ['marketplace', 'plugins']) */\n segments: string[];\n describe?: string;\n /** Direct child key names shown in group listing */\n childKeys: string[];\n /** Full plugin commands available under this path (for detailed listing) */\n commands?: RegisteredCommand[];\n}\n\nexport function renderGroupHelp(opts: GroupHelpOptions): string {\n const tracker = new TimingTracker();\n const groupName = opts.segments.join(' ');\n const sections: SectionContent[] = [];\n\n if (opts.commands && opts.commands.length > 0) {\n // Detailed listing with descriptions\n const available = opts.commands.filter((c) => c.available && !c.shadowed);\n const unavailable = opts.commands.filter((c) => !c.available || c.shadowed);\n\n const maxLength = Math.max(\n ...opts.commands.map((c) => c.manifest.segments.join(' ').length),\n 20,\n );\n\n if (available.length > 0) {\n const items = available\n .sort((a, b) => a.manifest.segments.join(' ').localeCompare(b.manifest.segments.join(' ')))\n .map((cmd) => {\n const displayPath = cmd.manifest.segments.join(' ');\n return `${safeColors.primary(displayPath.padEnd(maxLength))} ${safeColors.muted(cmd.manifest.describe)}`;\n });\n sections.push({ header: 'Commands', items });\n }\n\n if (unavailable.length > 0) {\n const items = unavailable.map((cmd) => {\n const displayPath = cmd.manifest.segments.join(' ');\n let line = `${safeColors.muted(displayPath.padEnd(maxLength))} ${safeColors.muted(cmd.manifest.describe)}`;\n if (cmd.unavailableReason) {\n line += `\\n ${safeColors.muted(`Reason: ${cmd.unavailableReason}`)}`;\n }\n return line;\n });\n sections.push({ header: 'Unavailable', items });\n }\n } else {\n // Compact listing — just child keys\n const sorted = [...opts.childKeys].sort();\n sections.push({\n header: 'Available',\n items: sorted.map((k) => safeColors.primary(` ${k}`)),\n });\n }\n\n sections.push({\n items: [safeColors.muted(`kb ${groupName} <command> --help`)],\n });\n\n return sideBorderBox({\n title: groupName,\n sections,\n status: 'success',\n timing: tracker.total(),\n });\n}\n","import { colors } from \"./shared\";\nimport { sideBorderBox, type SectionContent } from \"@kb-labs/shared-cli-ui\";\nimport type { TrieBackedRegistry } from \"../registry/service\";\n\nfunction truncate(s: string, max: number): string {\n if (s.length <= max) { return s; }\n return s.slice(0, max - 1) + '…';\n}\n\nexport function renderGlobalHelp(registry: TrieBackedRegistry): string {\n const cols = (typeof process !== 'undefined' && process.stdout?.columns) || 80;\n const sections: SectionContent[] = [];\n\n // System commands (auth, completion, docs, info, logs, platform, registry)\n const systemEntries = registry.listSystemTopLevel().sort((a, b) => a.name.localeCompare(b.name));\n if (systemEntries.length > 0) {\n const nameLen = Math.max(...systemEntries.map((e) => e.name.length), 8);\n const items = systemEntries.map(({ name, describe }) =>\n `${colors.cyan(name.padEnd(nameLen))} ${colors.dim(describe)}`\n );\n sections.push({ header: 'Commands', items });\n }\n\n // Plugin groups — unique first segments with describe from groupMeta\n const allCommands = registry.listCommands();\n const groupNames = [...new Set(allCommands.map((c) => c.manifest.group))].sort();\n\n if (groupNames.length > 0) {\n const nameLen = Math.max(...groupNames.map((g) => g.length), 8);\n\n const entries = groupNames.map((name) => ({\n name,\n describe: registry.getPluginGroupDescribe([name]) ?? '',\n }));\n\n // Use 2-column layout only if terminal is wide enough for readable descriptions\n const GAP = 4;\n const minDescLen = 24;\n const twoColMinWidth = (nameLen + 2 + minDescLen) * 2 + GAP + 4;\n const useTwoCols = cols >= twoColMinWidth;\n\n let items: string[];\n if (useTwoCols) {\n const descMax = Math.max(minDescLen, Math.floor((cols - 4 - (nameLen + 2) * 2 - GAP) / 2));\n const half = Math.ceil(entries.length / 2);\n const left = entries.slice(0, half);\n const right = entries.slice(half);\n items = left.map((l, i) => {\n const r = right[i];\n const lName = colors.cyan(l.name.padEnd(nameLen));\n const lDesc = l.describe\n ? colors.dim(truncate(l.describe, descMax).padEnd(descMax))\n : ' '.repeat(descMax);\n if (!r) { return `${lName} ${lDesc.trimEnd()}`; }\n const rName = colors.cyan(r.name.padEnd(nameLen));\n const rDesc = r.describe ? colors.dim(truncate(r.describe, descMax)) : '';\n return `${lName} ${lDesc} ${' '.repeat(GAP - 2)}${rName} ${rDesc}`;\n });\n } else {\n const descMax = Math.max(24, cols - 4 - nameLen - 2);\n items = entries.map(({ name, describe }) => {\n const n = colors.cyan(name.padEnd(nameLen));\n return describe ? `${n} ${colors.dim(truncate(describe, descMax))}` : n;\n });\n }\n\n sections.push({ header: 'Plugins', items });\n }\n\n sections.push({ items: [`kb ${colors.dim('<command> [subcommand] [flags]')} ${colors.dim('·')} ${colors.dim('kb <command> --help for details')}`] });\n\n return sideBorderBox({ title: 'KB Labs CLI', sections, status: 'info' });\n}\n\nexport function renderPluginsHelp(registry: TrieBackedRegistry): string {\n const commands = registry.listCommandsUnder(['marketplace']);\n\n const sections: SectionContent[] = [];\n\n if (commands.length > 0) {\n const maxLength = Math.max(...commands.map((c) => c.manifest.segments.join(' ').length), 20);\n const items = commands\n .filter((c) => c.available && !c.shadowed)\n .sort((a, b) => a.manifest.segments.join(' ').localeCompare(b.manifest.segments.join(' ')))\n .map((cmd) => {\n const displayPath = cmd.manifest.segments.join(' ');\n return `${colors.cyan(displayPath.padEnd(maxLength))} ${colors.dim(cmd.manifest.describe)}`;\n });\n sections.push({ header: 'Plugin Management', items });\n }\n\n sections.push({\n items: [colors.dim(\"kb marketplace <command> --help\")],\n });\n\n return sideBorderBox({ title: '🧩 Plugin Management', sections, status: 'info' });\n}\n","import {\n colors,\n type RegisteredCommand,\n} from \"./shared\";\nimport { sideBorderBox, type SectionContent } from \"@kb-labs/shared-cli-ui\";\n\nconst BOX_OVERHEAD = 3;\nconst PREFIX_LEN = 2;\nconst GAP_LEN = 2;\n\nfunction truncateDesc(desc: string, maxLength: number): string {\n const cols = (typeof process !== 'undefined' && process.stdout?.columns) || 80;\n const avail = cols - BOX_OVERHEAD - PREFIX_LEN - maxLength - GAP_LEN;\n if (avail < 10 || desc.length <= avail) {return desc;}\n return desc.slice(0, avail - 1) + '…';\n}\n\n// eslint-disable-next-line sonarjs/cognitive-complexity\nexport function renderProductHelp(\n groupName: string,\n commands: RegisteredCommand[],\n): string {\n const sections: SectionContent[] = [];\n\n const availableMap = new Map<string, RegisteredCommand>();\n const unavailableMap = new Map<string, RegisteredCommand>();\n\n for (const cmd of commands) {\n const key = cmd.manifest.segments.join(' ');\n if (cmd.available && !cmd.shadowed) {\n if (!availableMap.has(key)) {\n availableMap.set(key, cmd);\n }\n } else if (!unavailableMap.has(key)) {\n unavailableMap.set(key, cmd);\n }\n }\n\n const available = Array.from(availableMap.values());\n const unavailable = Array.from(unavailableMap.values()).sort((a, b) =>\n a.manifest.segments.join(' ').localeCompare(b.manifest.segments.join(' '))\n );\n\n const hasUnavailable = unavailable.length > 0;\n\n const displayPath = (cmd: RegisteredCommand): string =>\n cmd.manifest.segments.join(' ');\n\n const maxLength = Math.max(\n ...[...available, ...unavailable].map((c) => displayPath(c).length),\n 20,\n );\n\n const hasCategories = available.some((c) => c.manifest.category);\n const prefix = hasUnavailable ? `${colors.green(\"✓\")} ` : \" \";\n\n if (hasCategories) {\n const categoryOrder: string[] = [];\n const categoryMap = new Map<string, RegisteredCommand[]>();\n for (const cmd of available) {\n const cat = cmd.manifest.category ?? \"\";\n if (!categoryMap.has(cat)) {\n categoryOrder.push(cat);\n categoryMap.set(cat, []);\n }\n categoryMap.get(cat)!.push(cmd);\n }\n\n for (const cat of categoryOrder) {\n const cmds = categoryMap\n .get(cat)!\n .sort((a, b) => displayPath(a).localeCompare(displayPath(b)));\n const items: string[] = cmds.map((cmd) => {\n const paddedPath = displayPath(cmd).padEnd(maxLength);\n return `${prefix}${colors.cyan(paddedPath)} ${colors.dim(truncateDesc(cmd.manifest.describe, maxLength))}`;\n });\n sections.push({ header: cat || \"Commands\", items });\n }\n } else {\n const availableItems: string[] = [...available]\n .sort((a, b) => displayPath(a).localeCompare(displayPath(b)))\n .map((cmd) => {\n const paddedPath = displayPath(cmd).padEnd(maxLength);\n return `${prefix}${colors.cyan(paddedPath)} ${colors.dim(cmd.manifest.describe)}`;\n });\n sections.push({ header: \"Commands\", items: availableItems });\n }\n\n if (hasUnavailable) {\n const unavailableItems: string[] = [];\n for (const cmd of unavailable) {\n const paddedPath = displayPath(cmd).padEnd(maxLength);\n unavailableItems.push(`${colors.red(\"✗\")} ${colors.dim(paddedPath)} ${colors.dim(cmd.manifest.describe)}`);\n if (cmd.unavailableReason) {\n unavailableItems.push(` ${colors.red(`Reason: ${cmd.unavailableReason}`)}`);\n }\n if (cmd.hint) {\n unavailableItems.push(` ${colors.yellow(`Hint: ${cmd.hint}`)}`);\n }\n }\n sections.push({ header: \"Unavailable\", items: unavailableItems });\n }\n\n sections.push({\n items: [colors.dim(`kb ${groupName} <command> --help`)],\n });\n\n return sideBorderBox({\n title: groupName,\n sections,\n status: \"info\",\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","import type { CommandManifest, FlagDefinition } from '../registry/types.js';\n\ntype JsonSchemaProperty = {\n type: string;\n description?: string;\n default?: unknown;\n enum?: string[];\n items?: { type: string };\n};\n\nfunction flagToProperty(flag: FlagDefinition): JsonSchemaProperty {\n const prop: JsonSchemaProperty = {\n type: flag.type === 'array' ? 'array' : flag.type,\n description: flag.description ?? flag.describe,\n };\n if (flag.default !== undefined) { prop.default = flag.default; }\n if (flag.choices?.length) { prop.enum = flag.choices; }\n if (flag.type === 'array') { prop.items = { type: 'string' }; }\n return prop;\n}\n\n/**\n * Generates a JSON Schema object from a CommandManifest.\n * Used by the --schema flag interception in bootstrap.\n */\nexport function generateCommandSchema(manifest: CommandManifest): object {\n const properties: Record<string, JsonSchemaProperty> = {};\n const required: string[] = [];\n\n for (const flag of manifest.flags ?? []) {\n properties[flag.name] = flagToProperty(flag);\n if (flag.required) { required.push(flag.name); }\n }\n\n return {\n $schema: 'https://json-schema.org/draft/2020-12/schema',\n title: manifest.segments.join(' '),\n description: manifest.describe,\n ...(manifest.operationType ? { operationType: manifest.operationType } : {}),\n type: 'object',\n properties,\n ...(required.length ? { required } : {}),\n examples: manifest.examples ?? [],\n };\n}\n","/**\n * @kb-labs/cli-commands\n * Public surface: types, registry, TrieBackedRegistry, registerBuiltinCommands.\n * This package does not handle parsing argv/logging/exit.\n */\nexport * from \"./registry/types\";\nexport {\n registry,\n createRegistry,\n TrieBackedRegistry,\n} from \"./registry/service\";\nexport type {\n SystemCommand,\n SystemGroup,\n RouteResult,\n RegistryDiagnostics,\n} from \"./registry/trie-router\";\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\";\nexport { createCompletionCommand } from \"./commands/system/completion\";\n\n// Logs commands (agent-first log viewing and analysis)\nexport { logsDiagnose, logsContext, logsSummarize, logsQuery, logsSearch, logsGet, logsStats } from \"./commands/system/logs\";\n\nexport { generateCommandSchema } from \"./presentation/schema-generator\";\n"]}