@kb-labs/cli-commands 2.96.0 → 2.100.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 +180 -3
- package/dist/index.js.map +1 -1
- package/package.json +22 -22
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/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"]}
|
|
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/config/show.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 * config:show — print the effective (merged) platform config with per-field\n * provenance (platform / project / both / ignored).\n *\n * See ADR-0012 (config field scope) and ADR-0013 (installer-config-placement)\n * for why the project's `.kb/kb.config.jsonc` is often near-empty in prod\n * installs: the platform root holds the full installer-owned config, the\n * project root holds only a pointer + mergeable overrides.\n */\n\nimport { defineSystemCommand, type CommandResult } from '@kb-labs/shared-command-kit';\nimport { loadPlatformConfig } from '@kb-labs/core-runtime';\nimport { generateExamples } from '../../../utils/generate-examples';\nimport { getContextCwd } from '@kb-labs/shared-cli-ui';\n\n// ── Redaction ────────────────────────────────────────────────────────────────\n\n/** Field-name pattern used to redact sensitive values from output. */\nconst SENSITIVE_FIELD_PATTERN = /key|secret|token|password|jwt|credential/i;\n\nfunction isSensitiveField(dottedField: string): boolean {\n return dottedField.split('.').some((segment) => SENSITIVE_FIELD_PATTERN.test(segment));\n}\n\nconst REDACTED = '***REDACTED***';\n\n// ── Row model ────────────────────────────────────────────────────────────────\n\ntype ConfigFieldSource = 'platform' | 'project' | 'both' | 'ignored';\n\ntype ConfigRow = {\n source: ConfigFieldSource;\n field: string;\n value: unknown;\n};\n\n/** Recursively flattens an object into dotted-path leaves. Arrays are kept as leaves. */\nfunction flatten(prefix: string, value: unknown, out: Array<{ field: string; value: unknown }>): void {\n if (value !== null && typeof value === 'object' && !Array.isArray(value)) {\n const entries = Object.entries(value as Record<string, unknown>);\n if (entries.length === 0) {\n out.push({ field: prefix, value: {} });\n return;\n }\n for (const [key, nested] of entries) {\n flatten(prefix ? `${prefix}.${key}` : key, nested, out);\n }\n return;\n }\n out.push({ field: prefix, value });\n}\n\n/**\n * Redacts a leaf value based on its dotted field name. `flatten` stops\n * recursing at arrays (they're kept as a single leaf for display), so a leaf\n * value can still be an array/object containing further nested keys — e.g.\n * `adapterOptions.llm.tierMapping` is an array-of-objects whose entries may\n * carry per-entry credentials. Walk into arrays and nested objects so a\n * sensitive key anywhere inside a leaf's value is still redacted, not just\n * when the sensitive segment is part of the leaf's own dotted path.\n */\nfunction redactLeaf(field: string, value: unknown): unknown {\n if (isSensitiveField(field)) {\n return REDACTED;\n }\n return redactNested(field, value);\n}\n\nfunction redactNested(fieldPath: string, value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map((item) => redactNested(fieldPath, item));\n }\n if (value !== null && typeof value === 'object') {\n const out: Record<string, unknown> = {};\n for (const [key, nested] of Object.entries(value as Record<string, unknown>)) {\n const childPath = fieldPath ? `${fieldPath}.${key}` : key;\n out[key] = isSensitiveField(childPath) ? REDACTED : redactNested(childPath, nested);\n }\n return out;\n }\n return value;\n}\n\n// Top-level fields covered by the platform<->project merge policy (ADR-0012).\nconst PLATFORM_SCOPE_FIELDS = new Set(['platform', 'adapters', 'adapterOptions', 'core', 'execution']);\n\nfunction buildRows(\n result: Awaited<ReturnType<typeof loadPlatformConfig>>,\n): ConfigRow[] {\n const rows: ConfigRow[] = [];\n const fieldSources = result.sources.fields ?? {};\n const defaultOtherSource: ConfigFieldSource = result.sameLocation ? 'both' : 'project';\n\n // 1. Fields governed by the platform<->project merge policy. In\n // `sameLocation` mode (monorepo/dev — platformRoot === projectRoot) a\n // single physical file plays both roles, so loadPlatformConfig's merge\n // is a no-op and reports every resolved field as 'platform' (there is\n // no second layer to merge against — see config-loader.ts's samePath\n // branch). Editing that one file IS editing both \"platform\" and\n // \"project\" at once, so labeling it 'platform' here would misleadingly\n // suggest the project layer has no say over it. Report 'both' instead,\n // consistent with how section 3 already treats sameLocation fields.\n const platformConfig = result.platformConfig as unknown as Record<string, unknown>;\n for (const [topField, rawSource] of Object.entries(fieldSources)) {\n const value = platformConfig[topField];\n if (value === undefined) {\n continue;\n }\n const source: ConfigFieldSource = result.sameLocation ? 'both' : rawSource;\n const leaves: Array<{ field: string; value: unknown }> = [];\n flatten(topField, value, leaves);\n for (const leaf of leaves) {\n rows.push({ source, field: leaf.field, value: redactLeaf(leaf.field, leaf.value) });\n }\n }\n\n // 2. Fields the project tried to override that were rejected as platform-only.\n // The value shown is the platform's winning value (project's attempt was dropped).\n for (const ignoredField of result.sources.ignoredProjectFields ?? []) {\n const value = platformConfig[ignoredField];\n const leaves: Array<{ field: string; value: unknown }> = [];\n flatten(ignoredField, value, leaves);\n for (const leaf of leaves) {\n rows.push({ source: 'ignored', field: leaf.field, value: redactLeaf(leaf.field, leaf.value) });\n }\n }\n\n // 3. Other top-level product config fields (e.g. `services`, `plugins`) that\n // live outside the PlatformConfig merge policy. These have no\n // CONFIG_FIELD_SCOPE entry, so loadPlatformConfig never merges them —\n // `effectiveConfig` only reflects the *project* file. A field the\n // installer wrote into the platform-owned config (ADR-0013) but the\n // project file never mentions would otherwise be invisible. Union both\n // raw layers so platform-only product sections still show up, with the\n // project's value winning when both declare the same field (matching\n // the \"mergeable, project overrides platform\" default policy).\n const rawPlatformConfig = (result.rawPlatformConfig ?? {}) as Record<string, unknown>;\n const effectiveConfig = (result.effectiveConfig ?? {}) as Record<string, unknown>;\n const otherTopFields = new Set([...Object.keys(rawPlatformConfig), ...Object.keys(effectiveConfig)]);\n for (const topField of otherTopFields) {\n if (PLATFORM_SCOPE_FIELDS.has(topField)) {\n continue;\n }\n const hasPlatform = rawPlatformConfig[topField] !== undefined;\n const hasProject = effectiveConfig[topField] !== undefined;\n\n let source: ConfigFieldSource;\n let value: unknown;\n if (result.sameLocation) {\n source = 'both';\n value = hasProject ? effectiveConfig[topField] : rawPlatformConfig[topField];\n } else if (hasPlatform && hasProject) {\n source = 'both';\n value = effectiveConfig[topField];\n } else if (hasProject) {\n source = defaultOtherSource;\n value = effectiveConfig[topField];\n } else {\n source = 'platform';\n value = rawPlatformConfig[topField];\n }\n\n const leaves: Array<{ field: string; value: unknown }> = [];\n flatten(topField, value, leaves);\n for (const leaf of leaves) {\n rows.push({ source, field: leaf.field, value: redactLeaf(leaf.field, leaf.value) });\n }\n }\n\n rows.sort((a, b) => (a.source === b.source ? a.field.localeCompare(b.field) : a.source.localeCompare(b.source)));\n return rows;\n}\n\nfunction formatValue(value: unknown): string {\n if (typeof value === 'string') {\n return value;\n }\n return JSON.stringify(value);\n}\n\n// ── Command ──────────────────────────────────────────────────────────────────\n\ntype ConfigShowFlags = {\n json: { type: 'boolean'; description?: string };\n};\n\ntype ConfigShowResult = CommandResult & {\n rows?: ConfigRow[];\n sameLocation?: boolean;\n platformRoot?: string;\n projectRoot?: string;\n};\n\nexport const configShow = defineSystemCommand<ConfigShowFlags, ConfigShowResult>({\n name: 'show',\n description: 'Show the effective (merged) platform config with per-field provenance',\n longDescription:\n 'Resolves the fully-merged platform config (platform root + project overrides) and ' +\n 'prints each field alongside where it came from: platform, project, both, or ignored ' +\n '(a project attempt to override a platform-only field). Sensitive values ' +\n '(keys, secrets, tokens, passwords, credentials) are always redacted.',\n category: 'config',\n aliases: [],\n examples: generateExamples('config show', 'kb', [\n { flags: {} },\n { flags: { json: true } },\n ]),\n flags: {\n json: { type: 'boolean', description: 'Output machine-readable JSON' },\n },\n analytics: {\n command: 'config.show',\n startEvent: 'CONFIG_SHOW_STARTED',\n finishEvent: 'CONFIG_SHOW_FINISHED',\n },\n async handler(ctx) {\n const cwd = getContextCwd(ctx);\n const result = await loadPlatformConfig({ startDir: cwd, loadEnvFile: false });\n const rows = buildRows(result);\n\n return {\n ok: true,\n status: 'success' as const,\n rows,\n sameLocation: result.sameLocation,\n platformRoot: result.platformRoot,\n projectRoot: result.projectRoot,\n };\n },\n formatter(result, ctx, flags) {\n const rows = result.rows ?? [];\n\n if (flags.json) {\n ctx.ui?.json?.({\n sameLocation: result.sameLocation,\n platformRoot: result.platformRoot,\n projectRoot: result.projectRoot,\n fields: rows,\n });\n return;\n }\n\n if (rows.length === 0) {\n ctx.ui.success('Effective Config', {\n sections: [{ header: 'Config', items: ['No config fields resolved.'] }],\n });\n return;\n }\n\n const fieldWidth = Math.max(...rows.map((r) => r.field.length), 'FIELD'.length);\n const sourceWidth = Math.max(...rows.map((r) => r.source.length), 'SOURCE'.length);\n\n const lines = [\n `${'SOURCE'.padEnd(sourceWidth)} ${'FIELD'.padEnd(fieldWidth)} VALUE`,\n ...rows.map(\n (r) => `${r.source.padEnd(sourceWidth)} ${r.field.padEnd(fieldWidth)} ${formatValue(r.value)}`,\n ),\n ];\n\n if (result.sameLocation) {\n lines.push('', '(sameLocation: platform and project resolve to the same file — merge is a no-op)');\n }\n\n ctx.ui.success('Effective Config', {\n sections: [{ header: 'Config', items: lines }],\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 { 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';\nimport { configShow } from './config';\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/**\n * Config Commands Group\n *\n * Inspect the effective (merged) platform config with per-field provenance.\n * See ADR-0012 (field scope policy) and ADR-0013 (installer-config-placement).\n */\nexport const configGroup = defineSystemCommandGroup('config', 'Config inspection commands', [\n configShow,\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 configGroup,\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 registry.registerGroup(configGroup);\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"]}
|