@kb-labs/quality-entry 2.109.0 β 2.111.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/cli/commands/build-order.d.ts +1 -3
- package/dist/cli/commands/build-order.js +4 -4
- package/dist/cli/commands/build-order.js.map +1 -1
- package/dist/cli/commands/check-builds.js +2 -5
- package/dist/cli/commands/check-builds.js.map +1 -1
- package/dist/cli/commands/check-layers.d.ts +1 -3
- package/dist/cli/commands/check-layers.js +3 -3
- package/dist/cli/commands/check-layers.js.map +1 -1
- package/dist/cli/commands/check-tests.js +2 -6
- package/dist/cli/commands/check-tests.js.map +1 -1
- package/dist/cli/commands/check-types.js +2 -6
- package/dist/cli/commands/check-types.js.map +1 -1
- package/dist/cli/commands/context.d.ts +1 -3
- package/dist/cli/commands/context.js +5 -5
- package/dist/cli/commands/context.js.map +1 -1
- package/dist/cli/commands/coupling.d.ts +1 -3
- package/dist/cli/commands/coupling.js +2 -2
- package/dist/cli/commands/coupling.js.map +1 -1
- package/dist/cli/commands/cycles.d.ts +3 -1
- package/dist/cli/commands/cycles.js +1 -4
- package/dist/cli/commands/cycles.js.map +1 -1
- package/dist/cli/commands/dead-code.d.ts +1 -3
- package/dist/cli/commands/dead-code.js +4 -4
- package/dist/cli/commands/dead-code.js.map +1 -1
- package/dist/cli/commands/fix-deps.js +3 -3
- package/dist/cli/commands/fix-deps.js.map +1 -1
- package/dist/cli/commands/gate.d.ts +1 -3
- package/dist/cli/commands/gate.js +3 -3
- package/dist/cli/commands/gate.js.map +1 -1
- package/dist/cli/commands/health.d.ts +1 -3
- package/dist/cli/commands/health.js +2 -2
- package/dist/cli/commands/health.js.map +1 -1
- package/dist/cli/commands/history.d.ts +1 -3
- package/dist/cli/commands/history.js +3 -3
- package/dist/cli/commands/history.js.map +1 -1
- package/dist/cli/commands/index.d.ts +1 -0
- package/dist/cli/commands/index.js +32 -46
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/snapshot.d.ts +1 -3
- package/dist/cli/commands/snapshot.js +1 -1
- package/dist/cli/commands/snapshot.js.map +1 -1
- package/dist/cli/commands/stats.d.ts +1 -3
- package/dist/cli/commands/stats.js +2 -2
- package/dist/cli/commands/stats.js.map +1 -1
- package/dist/cli/commands/visualize.d.ts +4 -9
- package/dist/cli/commands/visualize.js +1 -1
- package/dist/cli/commands/visualize.js.map +1 -1
- package/dist/widgets/mf-manifest.json +12 -12
- package/dist/widgets/mf-stats.json +16 -16
- package/dist/widgets/remoteEntry.js +2 -2
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/cli/commands/build-order.ts","../../../src/cli/commands/check-builds.ts","../../../src/cli/commands/check-tests.ts","../../../src/cli/commands/check-types.ts","../../../src/cli/commands/check-layers.ts","../../../src/cli/commands/coupling.ts","../../../src/cli/commands/cycles.ts","../../../src/cli/commands/dead-code.ts","../../../src/cli/commands/fix-deps.ts","../../../src/cli/commands/health.ts","../../../src/cli/commands/history.ts","../../../src/cli/commands/snapshot.ts","../../../src/cli/commands/stats.ts","../../../src/cli/commands/visualize.ts"],"names":["defineCommand","CACHE_KEYS","summaryItems","useConfig","defaultQualityConfig","health","analyzeLayering","analyzeTypes","analyzeCoupling","runKnip","calculateHealth","QualitySnapshotStore","buildDependencyGraph","outputStats"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * quality:build-order - Calculate build order and dependency layers\n *\n * Uses topological sort to determine correct build order.\n * Shows build layers where each layer can build in parallel.\n */\n\nimport { defineCommand, useConfig, type CLIInput, type PluginContextV3 } from '@kb-labs/sdk';\nimport { analyzeBuildOrder } from '@kb-labs/quality-core';\nimport { defaultQualityConfig, type QualityPluginConfig } from '@kb-labs/quality-contracts';\nimport type { BuildOrderFlags } from './flags.js';\n\nexport default defineCommand<unknown, CLIInput<BuildOrderFlags>, { exitCode: number }>({\n id: 'quality:build-order',\n description: 'Calculate build order using topological sort',\n\n handler: {\n async execute(ctx: PluginContextV3, input: CLIInput<BuildOrderFlags>): Promise<{ exitCode: number }> {\n const { flags } = input;\n const config = await useConfig<QualityPluginConfig>();\n const cfg = config ?? defaultQualityConfig;\n const cwd = ctx.cwd ?? process.cwd();\n\n const result = analyzeBuildOrder({\n rootDir: cwd,\n layerMap: cfg.layers,\n filterPackage: flags.package,\n });\n\n if (result.hasCircular) {\n if (flags.json) {\n ctx.ui?.json?.({ ...result, ok: false });\n } else {\n ctx.ui?.error?.(`Circular dependencies detected β build order cannot be fully determined`, {\n sections: result.circular.map((cycle, i) => ({\n header: `Cycle ${i + 1}`,\n items: cycle,\n })),\n });\n }\n return { exitCode: 1 };\n }\n\n if (flags.json) {\n ctx.ui?.json?.(result);\n return { exitCode: 0 };\n }\n\n if (flags.script) {\n for (let i = 0; i < result.layers.length; i++) {\n const layer = result.layers[i];\n if (!layer) continue;\n ctx.ui?.success?.(`# Layer ${i + 1}`, { sections: [{ header: '', items: layer.map(p => `pnpm --filter \"${p}\" run build`) }] });\n }\n return { exitCode: 0 };\n }\n\n const sections = flags.layers\n ? result.layers.map((layer, i) => ({\n header: `Layer ${i + 1} β ${layer.length} package(s) (parallel)`,\n items: layer,\n }))\n : [{ header: 'Build order', items: result.sorted.map((p, i) => `${i + 1}. ${p}`) }];\n\n sections.push({\n header: 'Summary',\n items: [`${result.packageCount} packages in ${result.layerCount} layers`],\n });\n\n ctx.ui?.success?.(flags.package ? `Build order for ${flags.package}` : 'Monorepo build order', { sections });\n return { exitCode: 0 };\n },\n },\n});\n\n","/**\n * quality:check-builds - Check build status across monorepo\n *\n * Analyzes build status including:\n * - Build failures with error messages\n * - Stale builds (dist/ older than src/)\n * - Build duration tracking\n */\n\nimport { defineCommand, type PluginContextV3 } from '@kb-labs/sdk';\nimport type { BuildCheckResult } from '@kb-labs/quality-contracts';\nimport { CACHE_KEYS } from '@kb-labs/quality-contracts';\nimport { checkBuilds } from '@kb-labs/quality-core/builds';\nimport type { CheckBuildsFlags } from './flags.js';\n\n// Input type with backward compatibility\ntype CheckBuildsInput = CheckBuildsFlags & { argv?: string[] };\n\ntype CheckBuildsCommandResult = {\n exitCode: number;\n result?: BuildCheckResult;\n meta?: Record<string, unknown>;\n};\n\nexport default defineCommand({\n id: 'quality:check-builds',\n description: 'Check build status across monorepo',\n\n handler: {\n async execute(\n ctx: PluginContextV3,\n input: CheckBuildsInput\n ): Promise<CheckBuildsCommandResult> {\n const { ui, platform } = ctx;\n\n // V3: Flags may come wrapped in input.flags or passed directly\n const flags = ('flags' in input && typeof (input as { flags?: unknown }).flags === 'object' && (input as { flags?: unknown }).flags !== null)\n ? (input as { flags: CheckBuildsInput }).flags\n : input;\n\n // Check cache unless refresh requested\n const cacheKey = `${CACHE_KEYS.BUILDS}:${flags.package || 'all'}`;\n\n if (!flags.refresh) {\n const cached = await platform.cache.get<BuildCheckResult>(cacheKey);\n if (cached) {\n outputBuildCheck({ ...cached, cached: true }, flags, ui);\n return { exitCode: cached.failing > 0 ? 1 : 0, result: cached };\n }\n }\n\n // Run build check\n const result = await checkBuilds(ctx.cwd, {\n packageFilter: flags.package,\n timeout: flags.timeout ? Number(flags.timeout) : 30000,\n });\n\n // Cache results for 10 minutes\n await platform.cache.set(cacheKey, result, 10 * 60 * 1000);\n\n // Track analytics\n await platform.analytics.track('quality:check-builds', {\n totalPackages: result.totalPackages,\n passing: result.passing,\n failing: result.failing,\n staleBuilds: result.staleBuilds.length,\n duration: result.duration,\n packageSpecific: !!flags.package,\n });\n\n // Output results\n outputBuildCheck({ ...result, cached: false }, flags, ui);\n\n return {\n exitCode: result.failing > 0 ? 1 : 0,\n result,\n };\n },\n },\n});\n\n/**\n * Output build check results\n */\nfunction outputBuildCheck(\n result: BuildCheckResult & { cached?: boolean },\n flags: Record<string, unknown>,\n ui: PluginContextV3['ui']\n) {\n if (flags.json) {\n ui?.json?.(result);\n return;\n }\n\n // Build sections\n const sections: Array<{ header: string; items: string[] }> = [];\n\n // Status section\n const statusIcon = result.failing === 0 ? 'β
' : 'β';\n const statusText = result.failing === 0 ? 'All builds passing' : 'Build failures detected';\n const statusItems = [\n `${statusIcon} ${statusText}`,\n `Passing: ${result.passing} package(s)`,\n result.failing > 0 ? `Failing: ${result.failing} package(s)` : null,\n ].filter(Boolean) as string[];\n\n sections.push({ header: 'Build Status', items: statusItems });\n\n // Failed packages\n if (result.failures.length > 0) {\n const failureItems: string[] = [];\n for (const failure of result.failures.slice(0, 5)) {\n failureItems.push(`β’ ${failure.package}`);\n // Show first line of error\n const firstLine = failure.error.split('\\n')[0];\n failureItems.push(` ${firstLine?.substring(0, 80) || 'Build failed'}`);\n }\n\n if (result.failures.length > 5) {\n failureItems.push(`... and ${result.failures.length - 5} more failures`);\n }\n\n sections.push({ header: 'β Failed Packages', items: failureItems });\n }\n\n // Stale builds\n if (result.staleBuilds.length > 0) {\n const staleItems = result.staleBuilds.slice(0, 5).map((s) => `β’ ${s.package}`);\n\n if (result.staleBuilds.length > 5) {\n staleItems.push(`... and ${result.staleBuilds.length - 5} more`);\n }\n\n sections.push({\n header: 'β οΈ Stale Builds (dist/ older than src/)',\n items: staleItems,\n });\n }\n\n // Summary\n const summaryItems = [\n `Total packages: ${result.totalPackages}`,\n `Duration: ${(result.duration / 1000).toFixed(1)}s`,\n result.cached ? 'πΎ Cached (use --refresh to recheck)' : 'π Fresh check',\n ];\n\n sections.push({ header: 'Summary', items: summaryItems });\n\n const title =\n result.failing === 0\n ? 'β
All Builds Passing'\n : `β ${result.failing} Build Failure(s) Detected`;\n\n ui?.success?.('Build check completed', {\n title,\n sections,\n });\n}\n","/**\n * quality:check-tests - Test execution and coverage tracking\n *\n * Runs tests across monorepo packages and collects coverage statistics.\n */\n\nimport { defineCommand, type PluginContextV3 } from '@kb-labs/sdk';\nimport { runTests } from '@kb-labs/quality-core/tests';\nimport { CACHE_KEYS, type TestRunResult } from '@kb-labs/quality-contracts';\nimport { type CheckTestsFlags } from './flags.js';\n\n// Input type with backward compatibility\ntype CheckTestsInput = CheckTestsFlags & { argv?: string[] };\n\ntype CheckTestsCommandResult = {\n exitCode: number;\n result?: TestRunResult;\n meta?: Record<string, unknown>;\n};\n\nexport default defineCommand({\n id: 'quality:check-tests',\n description: 'Run tests and track coverage across monorepo',\n\n handler: {\n async execute(\n ctx: PluginContextV3,\n input: CheckTestsInput\n ): Promise<CheckTestsCommandResult> {\n const { ui, platform } = ctx;\n\n // V3: Flags may come wrapped in input.flags or passed directly\n const flags = ('flags' in input && typeof (input as { flags?: unknown }).flags === 'object' && (input as { flags?: unknown }).flags !== null)\n ? (input as { flags: CheckTestsInput }).flags\n : input;\n\n const cacheKey = `${CACHE_KEYS.TESTS}:${flags.package || 'all'}`;\n\n // Check cache unless refresh requested\n if (!flags.refresh) {\n const cached = await platform.cache.get<TestRunResult>(cacheKey);\n if (cached) {\n outputTestResults({ ...cached, cached: true }, flags, ui);\n return { exitCode: cached.failing > 0 ? 1 : 0, result: cached };\n }\n }\n\n // Run tests\n const result = await runTests(ctx.cwd, {\n packageFilter: flags.package,\n timeout: flags.timeout ? Number(flags.timeout) : 60000,\n withCoverage: flags['with-coverage'],\n coverageOnly: flags['coverage-only'],\n });\n\n // Cache result (5 min TTL - tests are slower)\n await platform.cache.set(cacheKey, result, 5 * 60 * 1000);\n\n // Track analytics\n await platform.analytics.track('quality:check-tests', {\n packageFilter: flags.package || 'all',\n totalPackages: result.totalPackages,\n passing: result.passing,\n failing: result.failing,\n withCoverage: flags['with-coverage'],\n cached: false,\n });\n\n // Output results\n outputTestResults({ ...result, cached: false }, flags, ui);\n\n return {\n exitCode: result.failing > 0 ? 1 : 0,\n result,\n meta: { cached: false },\n };\n },\n },\n});\n\n/**\n * Output test results\n */\nfunction outputTestResults(\n result: TestRunResult & { cached: boolean },\n flags: CheckTestsInput,\n ui: PluginContextV3['ui']\n): void {\n if (flags.json) {\n ui?.json?.(result);\n return;\n }\n\n // Build sections\n const sections: Array<{ header: string; items: string[] }> = [];\n\n // Status section\n const statusIcon = result.failing === 0 ? 'β
' : 'β';\n const statusText = result.failing === 0 ? 'All tests passing' : 'Test failures detected';\n const statusItems = [\n `${statusIcon} ${statusText}`,\n `Total packages: ${result.totalPackages}`,\n `Passing: ${result.passing}`,\n result.failing > 0 ? `Failing: ${result.failing}` : null,\n result.skipped > 0 ? `Skipped: ${result.skipped} (no test script)` : null,\n ].filter(Boolean) as string[];\n\n sections.push({ header: 'Test Status', items: statusItems });\n\n // Test summary\n if (result.summary.totalTests > 0) {\n const summaryItems = [\n `Total tests: ${result.summary.totalTests}`,\n `Passed: ${result.summary.passedTests}`,\n result.summary.failedTests > 0 ? `Failed: ${result.summary.failedTests}` : null,\n ].filter(Boolean) as string[];\n\n sections.push({ header: 'Test Summary', items: summaryItems });\n }\n\n // Failed packages\n if (result.failures.length > 0) {\n const failureItems: string[] = [];\n for (const failure of result.failures.slice(0, 5)) {\n failureItems.push(`β ${failure.package}`);\n if (failure.failedTests && failure.totalTests) {\n failureItems.push(` ${failure.failedTests}/${failure.totalTests} tests failed`);\n }\n // Show first line of error\n const firstLine = failure.error.split('\\n')[0];\n failureItems.push(` ${firstLine?.substring(0, 80) || 'Test failed'}`);\n }\n\n if (result.failures.length > 5) {\n failureItems.push(`... and ${result.failures.length - 5} more failures`);\n }\n\n sections.push({ header: 'Failed Packages', items: failureItems });\n }\n\n // Coverage section (if available)\n if (result.coverage.packages.length > 0) {\n const coverageItems: string[] = [];\n coverageItems.push(`Average coverage: ${result.coverage.avgCoverage.toFixed(1)}%`);\n coverageItems.push('');\n\n const topPackages = result.coverage.packages\n .sort((a, b) => b.lines - a.lines)\n .slice(0, 5);\n\n for (const pkg of topPackages) {\n coverageItems.push(`${pkg.name}`);\n coverageItems.push(\n ` Lines: ${pkg.lines.toFixed(1)}% | Statements: ${pkg.statements.toFixed(1)}% | Functions: ${pkg.functions.toFixed(1)}% | Branches: ${pkg.branches.toFixed(1)}%`\n );\n }\n\n if (result.coverage.packages.length > 5) {\n coverageItems.push(`... and ${result.coverage.packages.length - 5} more packages`);\n }\n\n sections.push({ header: 'Coverage', items: coverageItems });\n }\n\n // Summary\n const summaryItems = [\n `Duration: ${(result.duration / 1000).toFixed(1)}s`,\n result.cached ? 'πΎ Cached (use --refresh to re-run)' : 'π Fresh run',\n ];\n\n sections.push({ header: 'Summary', items: summaryItems });\n\n const title =\n result.failing === 0\n ? 'β
All Tests Passed'\n : `β ${result.failing} Package(s) with Test Failures`;\n\n ui?.success?.('Test run completed', {\n title,\n sections,\n });\n}\n","/**\n * quality:check-types - TypeScript type safety analysis\n *\n * Analyzes TypeScript type errors, warnings, and coverage across monorepo.\n * Uses TypeScript Compiler API for semantic analysis.\n */\n\nimport { defineCommand, type PluginContextV3 } from '@kb-labs/sdk';\nimport { analyzeTypes } from '@kb-labs/quality-core/types';\nimport { CACHE_KEYS, type TypeAnalysisResult } from '@kb-labs/quality-contracts';\nimport { type CheckTypesFlags } from './flags.js';\n\n// Input type with backward compatibility\ntype CheckTypesInput = CheckTypesFlags & { argv?: string[] };\n\ntype CheckTypesCommandResult = {\n exitCode: number;\n result?: TypeAnalysisResult;\n meta?: Record<string, unknown>;\n};\n\nexport default defineCommand({\n id: 'quality:check-types',\n description: 'Analyze TypeScript type safety across monorepo',\n\n handler: {\n async execute(\n ctx: PluginContextV3,\n input: CheckTypesInput\n ): Promise<CheckTypesCommandResult> {\n const { ui, platform } = ctx;\n\n // V3: Flags may come wrapped in input.flags or passed directly\n const flags = ('flags' in input && typeof (input as { flags?: unknown }).flags === 'object' && (input as { flags?: unknown }).flags !== null)\n ? (input as { flags: CheckTypesInput }).flags\n : input;\n\n const cacheKey = `${CACHE_KEYS.TYPE_ANALYSIS}:${flags.package || 'all'}`;\n\n // Check cache unless refresh requested\n if (!flags.refresh) {\n const cached = await platform.cache.get<TypeAnalysisResult>(cacheKey);\n if (cached) {\n outputTypeAnalysis({ ...cached, cached: true }, flags, ui);\n return { exitCode: cached.totalErrors > 0 ? 1 : 0, result: cached };\n }\n }\n\n // Run type analysis\n const result = await analyzeTypes(ctx.cwd, {\n packageFilter: flags.package,\n errorsOnly: flags['errors-only'],\n });\n\n // Cache result (10 min TTL)\n await platform.cache.set(cacheKey, result, 10 * 60 * 1000);\n\n // Track analytics\n await platform.analytics.track('quality:check-types', {\n packageFilter: flags.package || 'all',\n totalPackages: result.totalPackages,\n totalErrors: result.totalErrors,\n avgCoverage: result.avgCoverage,\n cached: false,\n });\n\n // Output results\n outputTypeAnalysis({ ...result, cached: false }, flags, ui);\n\n return {\n exitCode: result.totalErrors > 0 ? 1 : 0,\n result,\n meta: { cached: false },\n };\n },\n },\n});\n\n/**\n * Output type analysis results\n */\nfunction outputTypeAnalysis(\n result: TypeAnalysisResult & { cached: boolean },\n flags: CheckTypesInput,\n ui: PluginContextV3['ui']\n): void {\n if (flags.json) {\n ui?.json?.(result);\n return;\n }\n\n const errorsOnly = flags['errors-only'] || false;\n\n // Build sections\n const sections: Array<{ header: string; items: string[] }> = [];\n\n // Status section\n const statusIcon = result.totalErrors === 0 ? 'β
' : 'β';\n const statusText =\n result.totalErrors === 0 ? 'All packages passed type checks' : 'Type errors detected';\n const statusItems = [\n `${statusIcon} ${statusText}`,\n `Analyzed: ${result.totalPackages} package(s)`,\n `Errors: ${result.totalErrors}`,\n `Warnings: ${result.totalWarnings}`,\n `Avg Coverage: ${result.avgCoverage.toFixed(1)}%`,\n ];\n\n sections.push({ header: 'Type Safety Status', items: statusItems });\n\n // Packages with errors\n if (result.packagesWithErrors > 0) {\n const errorItems: string[] = [];\n const packagesToShow = result.packages\n .filter((pkg) => !errorsOnly || pkg.errors > 0)\n .slice(0, 10);\n\n for (const pkg of packagesToShow) {\n const status = pkg.errors > 0 ? 'β' : 'β
';\n errorItems.push(`${status} ${pkg.name}`);\n\n const details = [\n pkg.errors > 0 ? `${pkg.errors} error(s)` : null,\n pkg.warnings > 0 ? `${pkg.warnings} warning(s)` : null,\n `${pkg.coverage.toFixed(1)}% coverage`,\n pkg.anyCount > 0 ? `${pkg.anyCount} any` : null,\n pkg.tsIgnoreCount > 0 ? `${pkg.tsIgnoreCount} @ts-ignore` : null,\n ]\n .filter(Boolean)\n .join(', ');\n\n errorItems.push(` ${details}`);\n }\n\n if (result.packages.length > 10) {\n errorItems.push(`... and ${result.packages.length - 10} more packages`);\n }\n\n sections.push({\n header: `Packages with Type Errors (${result.packagesWithErrors})`,\n items: errorItems,\n });\n }\n\n // Coverage distribution\n const excellent = result.packages.filter((p) => p.coverage >= 90).length;\n const good = result.packages.filter((p) => p.coverage >= 70 && p.coverage < 90).length;\n const poor = result.packages.filter((p) => p.coverage < 70).length;\n\n if (result.packages.length > 0) {\n const coverageItems = [\n `β
Excellent (β₯90%): ${excellent} package(s)`,\n `β οΈ Good (70-90%): ${good} package(s)`,\n poor > 0 ? `β Poor (<70%): ${poor} package(s)` : null,\n ].filter(Boolean) as string[];\n\n sections.push({ header: 'Type Coverage Distribution', items: coverageItems });\n }\n\n // Summary\n const summaryItems = [\n `Total packages: ${result.totalPackages}`,\n `Duration: ${(result.duration / 1000).toFixed(1)}s`,\n result.cached ? 'πΎ Cached (use --refresh to recheck)' : 'π Fresh analysis',\n ];\n\n sections.push({ header: 'Summary', items: summaryItems });\n\n const title =\n result.totalErrors === 0\n ? 'β
All Type Checks Passed'\n : `β ${result.packagesWithErrors} Package(s) with Type Errors`;\n\n ui?.success?.('Type analysis completed', {\n title,\n sections,\n });\n}\n","import {\n defineCommand,\n useConfig,\n type CLIInput,\n type PluginContextV3,\n} from '@kb-labs/sdk';\nimport { analyzeLayering } from '@kb-labs/quality-core';\nimport { type QualityPluginConfig, type LayeringViolation } from '@kb-labs/quality-contracts';\nimport type { CheckLayersFlags } from './flags.js';\n\nexport default defineCommand<unknown, CLIInput<CheckLayersFlags>, { exitCode: number }>({\n id: 'quality:check-layers',\n description: 'Detect layering violations (lower layer importing higher layer)',\n\n handler: {\n async execute(ctx: PluginContextV3, input: CLIInput<CheckLayersFlags>): Promise<{ exitCode: number }> {\n const { flags } = input;\n const config = await useConfig<QualityPluginConfig>();\n const cwd = ctx.cwd ?? process.cwd();\n\n const report = await analyzeLayering({\n rootDir: cwd,\n layerMap: config?.layers,\n });\n\n const filtered = flags.package\n ? {\n ...report,\n violations: report.violations.filter((v: LayeringViolation) => v.fromPackage.includes(flags.package!)),\n totalViolations: report.violations.filter((v: LayeringViolation) => v.fromPackage.includes(flags.package!)).length,\n }\n : report;\n\n if (flags.json) {\n ctx.ui?.json?.(filtered);\n return { exitCode: filtered.totalViolations > 0 ? 1 : 0 };\n }\n\n if (filtered.totalViolations === 0) {\n ctx.ui?.success?.('No layering violations found');\n return { exitCode: 0 };\n }\n\n const byPackage = new Map<string, typeof filtered.violations>();\n for (const v of filtered.violations) {\n const list = byPackage.get(v.fromPackage) ?? [];\n list.push(v);\n byPackage.set(v.fromPackage, list);\n }\n\n const sections = [...byPackage.entries()].map(([pkg, vs]) => ({\n header: `${pkg} (Layer ${vs[0]?.fromLayer})`,\n items: vs.map((v: LayeringViolation) => `β ${v.toPackage} (Layer ${v.toLayer}) ${v.importSpecifier}`),\n }));\n\n ctx.ui?.error?.(`${filtered.totalViolations} layering violation(s) in ${filtered.affectedPackages.length} package(s)`, { sections });\n return { exitCode: 1 };\n },\n },\n});\n","import {\n defineCommand,\n useConfig,\n type CLIInput,\n type PluginContextV3,\n} from '@kb-labs/sdk';\nimport { analyzeCoupling } from '@kb-labs/quality-core';\nimport { type QualityPluginConfig } from '@kb-labs/quality-contracts';\nimport type { CouplingFlags } from './flags.js';\n\nexport default defineCommand<unknown, CLIInput<CouplingFlags>, { exitCode: number }>({\n id: 'quality:coupling',\n description: 'Show coupling metrics per package (afferent/efferent/instability)',\n\n handler: {\n async execute(ctx: PluginContextV3, input: CLIInput<CouplingFlags>): Promise<{ exitCode: number }> {\n const { flags } = input;\n const config = await useConfig<QualityPluginConfig>();\n const cwd = ctx.cwd ?? process.cwd();\n\n const report = analyzeCoupling({ rootDir: cwd, layerMap: config?.layers, topN: flags.top });\n\n if (flags.json) {\n ctx.ui?.json?.(report);\n return { exitCode: 0 };\n }\n\n const sorted =\n flags.sort === 'coupled'\n ? [...report.packages].sort((a, b) => b.afferent + b.efferent - (a.afferent + a.efferent))\n : [...report.packages].sort((a, b) => b.instability - a.instability);\n\n const top = sorted.slice(0, flags.top ?? 10);\n const threshold = config?.thresholds?.instability ?? 0.85;\n\n const items = top.map(p => {\n const warn = p.instability > threshold ? ' β unstable' : '';\n return `${p.name} Ca: ${p.afferent} Ce: ${p.efferent} I: ${p.instability.toFixed(2)}${warn}`;\n });\n\n ctx.ui?.success?.(`Coupling β avg instability: ${report.avgInstability.toFixed(2)}`, {\n sections: [{ header: `Top ${top.length} by instability`, items }],\n });\n\n return { exitCode: 0 };\n },\n },\n});\n","/**\n * quality:cycles - Detect circular dependencies\n *\n * Uses DFS to find all circular dependency chains in the monorepo.\n */\n\nimport { defineCommand, type PluginContextV3 } from '@kb-labs/sdk';\nimport {\n buildDependencyGraph,\n findCircularDependencies,\n} from '@kb-labs/quality-core/graph';\n\ntype CyclesFlags = {\n json?: boolean;\n argv?: string[];\n};\n\ntype CyclesInput = CyclesFlags & { argv?: string[] };\n\ntype CyclesCommandResult = {\n exitCode: number;\n cycles?: string[][];\n};\n\nexport default defineCommand({\n id: 'quality:cycles',\n description: 'Detect circular dependencies in monorepo',\n\n handler: {\n async execute(ctx: PluginContextV3, input: CyclesInput): Promise<CyclesCommandResult> {\n const { ui } = ctx;\n\n // V3: Flags may come wrapped in input.flags or passed directly\n const flags = ('flags' in input && typeof (input as { flags?: unknown }).flags === 'object' && (input as { flags?: unknown }).flags !== null)\n ? (input as { flags: CyclesInput }).flags\n : input;\n\n // Build dependency graph\n const graph = buildDependencyGraph(ctx.cwd);\n\n // Find circular dependencies\n const cycles = findCircularDependencies(graph);\n\n // Output results\n outputCycles(cycles, flags, ui);\n\n return {\n exitCode: cycles.length > 0 ? 1 : 0,\n cycles,\n };\n },\n },\n});\n\n/**\n * Output circular dependencies\n */\nfunction outputCycles(cycles: string[][], flags: Record<string, unknown>, ui: PluginContextV3['ui']) {\n if (flags.json) {\n ui?.json?.({ cycles, count: cycles.length });\n return;\n }\n\n if (cycles.length === 0) {\n ui?.success?.('No circular dependencies found', {\n title: 'β
Circular Dependencies Check',\n sections: [\n {\n header: 'Result',\n items: ['β
No circular dependencies detected'],\n },\n ],\n });\n return;\n }\n\n // Build sections\n const sections: Array<{ header: string; items: string[] }> = [];\n\n // Summary\n sections.push({\n header: 'Summary',\n items: [\n `β οΈ Found ${cycles.length} circular dependency chain(s)`,\n 'These must be broken to enable clean builds',\n ],\n });\n\n // Show each cycle\n for (let i = 0; i < cycles.length; i++) {\n const cycle = cycles[i];\n if (!cycle) {continue;}\n const cycleItems: string[] = [];\n\n for (let j = 0; j < cycle.length; j++) {\n const pkg = cycle[j];\n if (j === cycle.length - 1) {\n cycleItems.push(` ${j + 1}. ${pkg}`);\n const firstPkg = cycle[0];\n cycleItems.push(` ${j + 2}. ${firstPkg ?? '?'} β¬
circular!`);\n } else {\n cycleItems.push(` ${j + 1}. ${pkg}`);\n }\n }\n\n sections.push({\n header: `Cycle ${i + 1} (${cycle.length} packages)`,\n items: cycleItems,\n });\n }\n\n // Recommendations\n sections.push({\n header: 'Recommendations',\n items: [\n '1. Extract shared code into a new package',\n '2. Move one dependency to devDependencies',\n '3. Refactor to remove bidirectional dependencies',\n '4. Use dependency injection patterns',\n ],\n });\n\n ui?.error?.('Circular dependencies detected', {\n title: `β οΈ Circular Dependencies Detected (${cycles.length})`,\n sections,\n });\n}\n","import {\n defineCommand,\n useConfig,\n type CLIInput,\n type PluginContextV3,\n} from '@kb-labs/sdk';\nimport { runKnip } from '@kb-labs/quality-core';\nimport { defaultQualityConfig, type QualityPluginConfig } from '@kb-labs/quality-contracts';\nimport type { DeadCodeFlags } from './flags.js';\n\nexport default defineCommand<unknown, CLIInput<DeadCodeFlags>, { exitCode: number }>({\n id: 'quality:dead-code',\n description: 'Detect unused files, exports, and deps via knip',\n\n handler: {\n async execute(ctx: PluginContextV3, input: CLIInput<DeadCodeFlags>): Promise<{ exitCode: number }> {\n const { flags } = input;\n const config = await useConfig<QualityPluginConfig>();\n const cwd = ctx.cwd ?? process.cwd();\n const cfg = config ?? defaultQualityConfig;\n\n if (!cfg.knip.enabled) {\n ctx.ui?.success?.('knip is disabled in config (knip.enabled = false)');\n return { exitCode: 0 };\n }\n\n const report = await runKnip({ shell: ctx.api.shell, rootDir: cwd });\n\n if (flags.json) {\n ctx.ui?.json?.(report);\n return { exitCode: report.totalIssues > 0 ? 1 : 0 };\n }\n\n if (report.totalIssues === 0) {\n ctx.ui?.success?.('No dead code detected');\n return { exitCode: 0 };\n }\n\n const sections: Array<{ header: string; items: string[] }> = [];\n\n if (report.unusedFiles.length > 0) {\n sections.push({\n header: `Unused files (${report.unusedFiles.length})`,\n items: report.unusedFiles,\n });\n }\n\n if (report.unusedExports.length > 0) {\n sections.push({\n header: `Unused exports (${report.unusedExports.length})`,\n items: report.unusedExports.map(e => `${e.file} ${e.symbol}`),\n });\n }\n\n if (report.unusedDependencies.length > 0) {\n sections.push({\n header: `Unused dependencies (${report.unusedDependencies.length})`,\n items: report.unusedDependencies.map(d => `${d.package} in ${d.workspace}`),\n });\n }\n\n if (report.unlistedDependencies.length > 0) {\n sections.push({\n header: `Unlisted dependencies (${report.unlistedDependencies.length})`,\n items: report.unlistedDependencies.map(d => `${d.package} in ${d.workspace}`),\n });\n }\n\n ctx.ui?.error?.(`${report.totalIssues} dead code issue(s) found`, { sections });\n return { exitCode: 1 };\n },\n },\n});\n","/**\n * quality:fix-deps - Dependency auto-fixer\n *\n * Automatically fixes dependency issues:\n * - Remove unused dependencies\n * - Add missing workspace dependencies\n * - Align duplicate dependency versions\n *\n * Supports --dry-run via intent() for previewing changes without applying\n */\n\nimport { defineCommand, validationError, type PluginContextV3, useLoader, type CLIInput } from '@kb-labs/sdk';\nimport type { UIFacade } from '@kb-labs/sdk';\nimport type { FixDepsFlags } from './flags.js';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\n/** Minimal package.json structure used by fix-deps */\ninterface PackageJson {\n name?: string;\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n}\n\n/** Parsed package entry */\ninterface PackageEntry {\n name: string;\n path: string;\n json: PackageJson;\n}\n\ninterface FixResult {\n packagesScanned: number;\n removedDeps: Array<{ package: string; dep: string }>;\n addedDeps: Array<{ package: string; dep: string; version: string }>;\n alignedDeps: Array<{ dep: string; from: string; to: string; packages: string[] }>;\n}\n\ntype FixDepsCommandResult = {\n exitCode: number;\n result?: FixResult;\n meta?: Record<string, unknown>;\n};\n\nexport default defineCommand({\n id: 'quality:fix-deps',\n description: 'Auto-fix dependency issues',\n\n handler: {\n async intent(_ctx: PluginContextV3, input: CLIInput<FixDepsFlags>) {\n const flags = input.flags;\n const removeUnused = flags['remove-unused'] || flags.all;\n const addMissing = flags['add-missing'] || flags.all;\n const alignVersions = flags['align-versions'] || flags.all;\n\n const packages = findPackages(_ctx.cwd);\n const preview = await runAnalysis(packages, { removeUnused, addMissing, alignVersions, dryRun: true });\n\n const operations = [\n ...preview.alignedDeps.map(a => ({\n type: 'update' as const,\n resource: 'dependency',\n details: { dep: a.dep, from: a.from, to: a.to, packages: a.packages },\n })),\n ...preview.addedDeps.map(a => ({\n type: 'create' as const,\n resource: 'dependency',\n details: { package: a.package, dep: a.dep, version: a.version },\n })),\n ...preview.removedDeps.map(r => ({\n type: 'delete' as const,\n resource: 'dependency',\n details: { package: r.package, dep: r.dep },\n })),\n ];\n\n const total = operations.length;\n return {\n summary: total > 0\n ? `Fix ${total} dependency issue(s) across ${preview.packagesScanned} packages`\n : `No dependency issues found in ${preview.packagesScanned} packages`,\n operations,\n };\n },\n\n async execute(ctx: PluginContextV3, input: CLIInput<FixDepsFlags>): Promise<FixDepsCommandResult> {\n const { ui, platform } = ctx;\n const flags = input.flags;\n const removeUnused = flags['remove-unused'] || flags.all;\n const addMissing = flags['add-missing'] || flags.all;\n const alignVersions = flags['align-versions'] || flags.all;\n const showStats = flags.stats;\n\n if (showStats) {\n const stats = await getDependencyStats(ctx.cwd);\n outputStats(stats, flags, ui);\n return { exitCode: 0 };\n }\n\n if (!removeUnused && !addMissing && !alignVersions) {\n validationError(ctx, 'No fix options specified', 'Use --remove-unused, --add-missing, --align-versions, or --all', flags.json);\n return { exitCode: 1 };\n }\n\n const loader = useLoader('Scanning packages...');\n loader.start();\n\n const packages = findPackages(ctx.cwd);\n loader.update({ text: `Scanned ${packages.length} packages` });\n\n const result = await runAnalysis(packages, { removeUnused, addMissing, alignVersions, dryRun: false });\n\n loader.succeed('Dependency analysis completed');\n\n await platform.analytics.track('quality:fix-deps', {\n dryRun: false,\n packagesScanned: result.packagesScanned,\n removedCount: result.removedDeps.length,\n addedCount: result.addedDeps.length,\n alignedCount: result.alignedDeps.length,\n });\n\n outputResults({ ...result, dryRun: false }, flags, ui);\n\n return { exitCode: 0, result };\n },\n },\n});\n\nasync function runAnalysis(\n packages: PackageEntry[],\n opts: { removeUnused?: boolean | null; addMissing?: boolean | null; alignVersions?: boolean | null; dryRun: boolean },\n): Promise<FixResult & { packagesScanned: number }> {\n const result: FixResult & { packagesScanned: number } = {\n packagesScanned: packages.length,\n removedDeps: [],\n addedDeps: [],\n alignedDeps: [],\n };\n\n if (opts.alignVersions) {\n result.alignedDeps = await alignDuplicateVersions(packages, opts.dryRun);\n }\n if (opts.addMissing) {\n result.addedDeps = await addMissingWorkspaceDeps(packages, opts.dryRun);\n }\n if (opts.removeUnused) {\n result.removedDeps = await removeUnusedDeps(packages, opts.dryRun);\n }\n\n return result;\n}\n\n/**\n * Find all packages in the monorepo\n */\nfunction findPackages(rootDir: string): PackageEntry[] {\n const packages: PackageEntry[] = [];\n\n if (!fs.existsSync(rootDir)) {\n return packages;\n }\n\n const entries = fs.readdirSync(rootDir, { withFileTypes: true });\n\n for (const entry of entries) {\n if (!entry.isDirectory() || !entry.name.startsWith('kb-labs-')) {continue;}\n\n const repoPath = path.join(rootDir, entry.name);\n const packagesDir = path.join(repoPath, 'packages');\n\n if (!fs.existsSync(packagesDir)) {continue;}\n\n const packageDirs = fs.readdirSync(packagesDir, { withFileTypes: true });\n\n for (const pkgDir of packageDirs) {\n if (!pkgDir.isDirectory()) {continue;}\n\n const packageJsonPath = path.join(packagesDir, pkgDir.name, 'package.json');\n\n if (fs.existsSync(packageJsonPath)) {\n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));\n packages.push({\n name: packageJson.name || pkgDir.name,\n path: packageJsonPath,\n json: packageJson,\n });\n }\n }\n }\n\n return packages;\n}\n\n/**\n * Get dependency statistics\n */\ninterface DependencyStats {\n totalPackages: number;\n totalDeps: number;\n duplicates: number;\n topUsed: Array<{ name: string; count: number }>;\n}\n\nasync function getDependencyStats(rootDir: string): Promise<DependencyStats> {\n const packages = findPackages(rootDir);\n const allDeps = new Map<string, Set<string>>();\n\n for (const pkg of packages) {\n const deps = {\n ...pkg.json.dependencies,\n ...pkg.json.devDependencies,\n };\n\n for (const [dep, version] of Object.entries(deps)) {\n if (!allDeps.has(dep)) {\n allDeps.set(dep, new Set());\n }\n allDeps.get(dep)!.add(version as string);\n }\n }\n\n const duplicates = Array.from(allDeps.entries())\n .filter(([_, versions]) => versions.size > 1)\n .filter(([dep]) => !dep.startsWith('@kb-labs/'));\n\n const topUsed = Array.from(allDeps.entries())\n .map(([name, versions]) => ({ name, count: versions.size > 1 ? versions.size : 1 }))\n .sort((a, b) => b.count - a.count)\n .slice(0, 10);\n\n return {\n totalPackages: packages.length,\n totalDeps: allDeps.size,\n duplicates: duplicates.length,\n topUsed,\n };\n}\n\n/**\n * Align duplicate dependency versions to most common version\n */\nasync function alignDuplicateVersions(\n packages: PackageEntry[],\n dryRun: boolean\n): Promise<Array<{ dep: string; from: string; to: string; packages: string[] }>> {\n const aligned: Array<{ dep: string; from: string; to: string; packages: string[] }> = [];\n\n const depVersions = new Map<string, Map<string, Set<string>>>();\n\n for (const pkg of packages) {\n const deps = {\n ...pkg.json.dependencies,\n ...pkg.json.devDependencies,\n };\n\n for (const [dep, version] of Object.entries(deps)) {\n if (dep.startsWith('@kb-labs/')) {continue;}\n\n if (!depVersions.has(dep)) {\n depVersions.set(dep, new Map());\n }\n\n const versions = depVersions.get(dep)!;\n if (!versions.has(version as string)) {\n versions.set(version as string, new Set());\n }\n versions.get(version as string)!.add(pkg.name);\n }\n }\n\n for (const [dep, versions] of depVersions.entries()) {\n if (versions.size <= 1) {continue;}\n\n const versionCounts = Array.from(versions.entries()).map(([ver, pkgs]) => ({\n version: ver,\n count: pkgs.size,\n packages: Array.from(pkgs),\n }));\n\n versionCounts.sort((a, b) => b.count - a.count);\n const targetVersion = versionCounts[0]?.version;\n if (!targetVersion) {continue;}\n\n for (const { version, packages: pkgNames } of versionCounts.slice(1)) {\n aligned.push({ dep, from: version, to: targetVersion, packages: pkgNames });\n\n if (!dryRun) {\n for (const pkgName of pkgNames) {\n const pkg = packages.find(p => p.name === pkgName);\n if (!pkg) {continue;}\n\n if (pkg.json.dependencies?.[dep]) {\n pkg.json.dependencies[dep] = targetVersion;\n }\n if (pkg.json.devDependencies?.[dep]) {\n pkg.json.devDependencies[dep] = targetVersion;\n }\n\n fs.writeFileSync(pkg.path, JSON.stringify(pkg.json, null, 2) + '\\n');\n }\n }\n }\n }\n\n return aligned;\n}\n\n/**\n * Add missing workspace dependencies\n */\nasync function addMissingWorkspaceDeps(\n packages: PackageEntry[],\n dryRun: boolean\n): Promise<Array<{ package: string; dep: string; version: string }>> {\n const added: Array<{ package: string; dep: string; version: string }> = [];\n\n const workspacePackages = new Map<string, string>();\n for (const pkg of packages) {\n if (pkg.name.startsWith('@kb-labs/')) {\n workspacePackages.set(pkg.name, 'workspace:*');\n }\n }\n\n for (const pkg of packages) {\n const packageDir = path.dirname(pkg.path);\n const srcDir = path.join(packageDir, 'src');\n\n if (!fs.existsSync(srcDir)) {continue;}\n\n const imports = scanImports(srcDir);\n const currentDeps = {\n ...pkg.json.dependencies,\n ...pkg.json.devDependencies,\n };\n\n for (const imp of imports) {\n if (imp.startsWith('@kb-labs/') && workspacePackages.has(imp) && !currentDeps[imp]) {\n added.push({ package: pkg.name, dep: imp, version: 'workspace:*' });\n\n if (!dryRun) {\n if (!pkg.json.dependencies) {\n pkg.json.dependencies = {};\n }\n pkg.json.dependencies[imp] = 'workspace:*';\n fs.writeFileSync(pkg.path, JSON.stringify(pkg.json, null, 2) + '\\n');\n }\n }\n }\n }\n\n return added;\n}\n\n/**\n * Remove unused dependencies\n */\nasync function removeUnusedDeps(\n packages: PackageEntry[],\n dryRun: boolean\n): Promise<Array<{ package: string; dep: string }>> {\n const removed: Array<{ package: string; dep: string }> = [];\n\n for (const pkg of packages) {\n const packageDir = path.dirname(pkg.path);\n const srcDir = path.join(packageDir, 'src');\n\n if (!fs.existsSync(srcDir)) {continue;}\n\n const imports = new Set(scanImports(srcDir));\n\n const deps = {\n ...pkg.json.dependencies,\n ...pkg.json.devDependencies,\n };\n\n for (const dep of Object.keys(deps)) {\n if (isProtectedDep(dep)) {continue;}\n\n if (!imports.has(dep)) {\n removed.push({ package: pkg.name, dep });\n\n if (!dryRun) {\n delete pkg.json.dependencies?.[dep];\n delete pkg.json.devDependencies?.[dep];\n fs.writeFileSync(pkg.path, JSON.stringify(pkg.json, null, 2) + '\\n');\n }\n }\n }\n }\n\n return removed;\n}\n\n/**\n * Scan directory for imports\n */\nfunction scanImports(dir: string): string[] {\n const imports: string[] = [];\n\n function walk(currentDir: string) {\n const entries = fs.readdirSync(currentDir, { withFileTypes: true });\n\n for (const entry of entries) {\n const fullPath = path.join(currentDir, entry.name);\n\n if (entry.isDirectory()) {\n walk(fullPath);\n } else if (entry.isFile() && /\\.(ts|tsx|js|jsx)$/.test(entry.name)) {\n const content = fs.readFileSync(fullPath, 'utf-8');\n\n const importRegex = /(?:import|require)\\s*\\(?['\"]([^'\"]+)['\"]\\)?/g;\n let match;\n while ((match = importRegex.exec(content)) !== null) {\n const imp = match[1];\n if (!imp) {continue;}\n const pkgName = imp.startsWith('@') ? imp.split('/').slice(0, 2).join('/') : imp.split('/')[0];\n if (pkgName) {\n imports.push(pkgName);\n }\n }\n }\n }\n }\n\n walk(dir);\n return Array.from(new Set(imports));\n}\n\n/**\n * Check if dependency is protected (build tools, etc.)\n */\nfunction isProtectedDep(dep: string): boolean {\n const protectedDeps = [\n 'typescript', 'tsup', 'esbuild', 'vite', 'rollup', 'rimraf',\n 'vitest', 'jest', 'playwright', 'eslint', 'prettier',\n ];\n\n return protectedDeps.some(p => dep === p || dep.startsWith(`${p}-`) || dep.startsWith(`@${p}/`));\n}\n\n/**\n * Output dependency statistics\n */\nfunction outputStats(stats: DependencyStats, flags: FixDepsFlags, ui: UIFacade | undefined) {\n if (flags.json) {\n ui?.json?.(stats);\n return;\n }\n\n const sections: Array<{ header: string; items: string[] }> = [];\n\n sections.push({\n header: 'Overview',\n items: [\n `Total Packages: ${stats.totalPackages}`,\n `Total Dependencies: ${stats.totalDeps}`,\n `Duplicate Versions: ${stats.duplicates}`,\n ],\n });\n\n if (stats.topUsed.length > 0) {\n sections.push({\n header: 'Top 10 Most Used',\n items: stats.topUsed.map((d) => `${d.name} (${d.count} packages)`),\n });\n }\n\n ui?.success?.('Dependency statistics', {\n title: 'Dependency Statistics',\n sections,\n });\n}\n\n/**\n * Output fix results\n */\nfunction outputResults(result: FixResult & { dryRun: boolean }, flags: FixDepsFlags, ui: UIFacade | undefined) {\n if (flags.json) {\n ui?.json?.(result);\n return;\n }\n\n const sections: Array<{ header: string; items: string[] }> = [];\n\n sections.push({\n header: 'Summary',\n items: [`Packages Scanned: ${result.packagesScanned}`],\n });\n\n if (result.alignedDeps.length > 0) {\n const items = result.alignedDeps\n .slice(0, 10)\n .map(a => `${a.dep}: ${a.from} β ${a.to} (${a.packages.length} packages)`);\n if (result.alignedDeps.length > 10) {\n items.push(`... and ${result.alignedDeps.length - 10} more`);\n }\n sections.push({ header: 'Aligned Versions', items });\n }\n\n if (result.addedDeps.length > 0) {\n const items = result.addedDeps.slice(0, 10).map(a => `${a.package}: +${a.dep}`);\n if (result.addedDeps.length > 10) {\n items.push(`... and ${result.addedDeps.length - 10} more`);\n }\n sections.push({ header: 'Added Dependencies', items });\n }\n\n if (result.removedDeps.length > 0) {\n const items = result.removedDeps.slice(0, 10).map(r => `${r.package}: -${r.dep}`);\n if (result.removedDeps.length > 10) {\n items.push(`... and ${result.removedDeps.length - 10} more`);\n }\n sections.push({ header: 'Removed Dependencies', items });\n }\n\n if (result.alignedDeps.length === 0 && result.addedDeps.length === 0 && result.removedDeps.length === 0) {\n sections.push({ header: 'Result', items: ['No issues found!'] });\n }\n\n ui?.success?.('Dependency fix completed', {\n title: 'Dependency Fix Complete',\n sections,\n });\n}\n","import {\n defineCommand,\n useConfig,\n type CLIInput,\n type PluginContextV3,\n} from '@kb-labs/sdk';\nimport {\n analyzeLayering,\n analyzeCoupling,\n runKnip,\n analyzeTypes,\n calculateHealth,\n} from '@kb-labs/quality-core';\nimport { CACHE_KEYS, CACHE_TTLS, defaultQualityConfig, type QualityPluginConfig, type HealthScore, type KnipReport } from '@kb-labs/quality-contracts';\nimport type { HealthFlags } from './flags.js';\n\nexport default defineCommand<unknown, CLIInput<HealthFlags>, { exitCode: number }>({\n id: 'quality:health',\n description: 'Multidimensional health score: architecture, TypeScript, dead code, dependencies',\n\n handler: {\n async execute(ctx: PluginContextV3, input: CLIInput<HealthFlags>): Promise<{ exitCode: number }> {\n const { flags } = input;\n const config = await useConfig<QualityPluginConfig>();\n const cwd = ctx.cwd ?? process.cwd();\n const cfg = config ?? defaultQualityConfig;\n\n const cached = await ctx.platform.cache.get(CACHE_KEYS.HEALTH);\n if (cached && !flags.refresh) {\n const health = cached as HealthScore;\n outputHealth(health, flags, ctx);\n return { exitCode: health.score < cfg.thresholds.health ? 1 : 0 };\n }\n\n const [layering, types] = await Promise.all([\n analyzeLayering({ rootDir: cwd, layerMap: cfg.layers }),\n analyzeTypes(cwd),\n ]);\n\n const coupling = analyzeCoupling({ rootDir: cwd, layerMap: cfg.layers });\n\n let knip: KnipReport = { unusedFiles: [], unusedExports: [], unusedDependencies: [], unlistedDependencies: [], totalIssues: 0 };\n if (cfg.knip.enabled) {\n knip = await runKnip({ shell: ctx.api.shell, rootDir: cwd });\n }\n\n const health = calculateHealth({\n layering,\n coupling,\n types,\n knip,\n totalPackages: coupling.packages.length,\n avgTestCoverage: null,\n thresholds: cfg.thresholds,\n });\n\n await ctx.platform.cache.set(CACHE_KEYS.HEALTH, health, CACHE_TTLS.FAST);\n\n outputHealth(health, flags, ctx);\n return { exitCode: health.score < cfg.thresholds.health ? 1 : 0 };\n },\n },\n});\n\nfunction outputHealth(health: Awaited<ReturnType<typeof calculateHealth>>, flags: { json?: boolean; detailed?: boolean }, ctx: PluginContextV3) {\n if (flags.json) {\n ctx.ui?.json?.(health);\n return;\n }\n\n const dimItems = Object.entries(health.dimensions).map(([key, dim]) => {\n const details = dim.details.length > 0 ? `: ${dim.details.join(', ')}` : '';\n return `${key} ${dim.score}/100 (${dim.grade})${details}`;\n });\n\n ctx.ui?.success?.(`Health score: ${health.score}/100 (${health.grade})`, {\n sections: [{ header: 'Dimensions', items: dimItems }],\n });\n}\n","import {\n defineCommand,\n useConfig,\n type CLIInput,\n type PluginContextV3,\n} from '@kb-labs/sdk';\nimport { QualitySnapshotStore } from '@kb-labs/quality-core';\nimport { defaultQualityConfig, type QualityPluginConfig } from '@kb-labs/quality-contracts';\nimport type { HistoryFlags } from './flags.js';\n\nexport default defineCommand<unknown, CLIInput<HistoryFlags>, { exitCode: number }>({\n id: 'quality:history',\n description: 'Show quality snapshot history and trends',\n\n handler: {\n async execute(ctx: PluginContextV3, input: CLIInput<HistoryFlags>): Promise<{ exitCode: number }> {\n const { flags } = input;\n const config = await useConfig<QualityPluginConfig>();\n const cwd = ctx.cwd ?? process.cwd();\n\n const store = new QualitySnapshotStore(cwd, config?.maxSnapshots ?? defaultQualityConfig.maxSnapshots);\n const { snapshots, delta, latest } = store.history();\n\n if (snapshots.length === 0) {\n ctx.ui?.success?.('No snapshots yet. Run `kb quality snapshot` first.');\n return { exitCode: 0 };\n }\n\n const limit = flags.limit ?? 10;\n const recent = snapshots.slice(-limit).reverse();\n\n if (flags.json) {\n ctx.ui?.json?.({ snapshots: recent, delta, latest });\n return { exitCode: 0 };\n }\n\n const items = recent.map(s => {\n const date = new Date(s.timestamp).toLocaleString();\n const branch = s.git.branch ? ` [${s.git.branch}]` : '';\n return `${date}${branch} β ${s.score}/100 (${s.grade}) violations: ${s.counters.layeringViolations} any: ${s.counters.anyCount}`;\n });\n\n const sections: Array<{ header: string; items: string[] }> = [\n { header: `Last ${recent.length} snapshots`, items },\n ];\n\n if (delta) {\n const sign = (n: number) => (n > 0 ? `+${n}` : `${n}`);\n sections.push({\n header: 'Delta vs previous snapshot',\n items: [\n `Score: ${sign(delta.score)}`,\n `Layering violations: ${sign(delta.layeringViolations)}`,\n `Any count: ${sign(delta.anyCount)}`,\n `Unused files: ${sign(delta.unusedFiles)}`,\n `Avg instability: ${sign(delta.avgInstability)}`,\n ],\n });\n }\n\n ctx.ui?.success?.(`Quality history (${recent.length} snapshots)`, { sections });\n return { exitCode: 0 };\n },\n },\n});\n","import {\n defineCommand,\n useConfig,\n type CLIInput,\n type PluginContextV3,\n} from '@kb-labs/sdk';\nimport {\n analyzeLayering,\n analyzeCoupling,\n runKnip,\n analyzeTypes,\n QualitySnapshotStore,\n} from '@kb-labs/quality-core';\nimport { calculateHealth } from '@kb-labs/quality-core';\nimport { defaultQualityConfig, type QualityPluginConfig, type KnipReport } from '@kb-labs/quality-contracts';\nimport type { SnapshotFlags } from './flags.js';\nimport type { ShellAPI } from '@kb-labs/sdk';\n\nasync function captureGit(shell: ShellAPI, cwd: string) {\n try {\n const [c, b, m] = await Promise.all([\n shell.exec('git', ['rev-parse', '--short', 'HEAD'], { cwd, throwOnError: false }),\n shell.exec('git', ['rev-parse', '--abbrev-ref', 'HEAD'], { cwd, throwOnError: false }),\n shell.exec('git', ['log', '-1', '--format=%s'], { cwd, throwOnError: false }),\n ]);\n if (!c.ok) return undefined;\n return { commit: c.stdout.trim(), branch: b.stdout.trim() || 'HEAD', message: m.stdout.trim() };\n } catch {\n return undefined;\n }\n}\n\nexport default defineCommand<unknown, CLIInput<SnapshotFlags>, { exitCode: number }>({\n id: 'quality:snapshot',\n description: 'Collect all quality metrics and save a snapshot for trend tracking',\n\n handler: {\n async intent(_ctx: PluginContextV3, _input: CLIInput<SnapshotFlags>) {\n return {\n summary: 'Collect all quality metrics and save snapshot for trend tracking',\n operations: [\n { type: 'create' as const, resource: 'file', details: { path: '.kb/quality/snapshots/<timestamp>.json' } },\n ],\n };\n },\n\n async execute(ctx: PluginContextV3, input: CLIInput<SnapshotFlags>): Promise<{ exitCode: number }> {\n const { flags } = input;\n const config = await useConfig<QualityPluginConfig>();\n const cwd = ctx.cwd ?? process.cwd();\n const cfg = config ?? defaultQualityConfig;\n\n ctx.ui?.success?.('Collecting quality metricsβ¦');\n\n const [layering, coupling, types, git] = await Promise.all([\n analyzeLayering({ rootDir: cwd, layerMap: cfg.layers }),\n Promise.resolve(analyzeCoupling({ rootDir: cwd, layerMap: cfg.layers })),\n analyzeTypes(cwd),\n captureGit(ctx.api.shell, cwd),\n ]);\n\n let knip: KnipReport = { unusedFiles: [], unusedExports: [], unusedDependencies: [], unlistedDependencies: [], totalIssues: 0 };\n if (cfg.knip.enabled) {\n knip = await runKnip({ shell: ctx.api.shell, rootDir: cwd });\n }\n\n const totalPackages = coupling.packages.length;\n const health = calculateHealth({\n layering,\n coupling,\n types,\n knip,\n totalPackages,\n avgTestCoverage: null,\n thresholds: cfg.thresholds,\n });\n\n const store = new QualitySnapshotStore(cwd, cfg.maxSnapshots);\n const snap = store.save({\n score: health.score,\n grade: health.grade,\n dimensions: health.dimensions,\n counters: {\n layeringViolations: layering.totalViolations,\n avgInstability: coupling.avgInstability,\n anyCount: types.packages.reduce((s: number, p: { anyCount: number }) => s + p.anyCount, 0),\n tsIgnoreCount: types.packages.reduce((s: number, p: { tsIgnoreCount: number }) => s + p.tsIgnoreCount, 0),\n unusedFiles: knip.unusedFiles.length,\n unusedDeps: knip.unusedDependencies.length,\n },\n git: git ?? { commit: '', branch: '', message: '' },\n });\n\n if (flags.json) {\n ctx.ui?.json?.(snap);\n } else {\n ctx.ui?.success?.(`Snapshot saved: score ${snap.score}/100 (${snap.grade})`, {\n sections: [{\n header: 'Dimensions',\n items: Object.entries(snap.dimensions).map(\n ([k, d]) => `${k} ${d.score}/100 (${d.grade})`\n ),\n }],\n });\n }\n\n return { exitCode: 0 };\n },\n },\n});\n","import {\n defineCommand,\n type CLIInput,\n type PluginContextV3,\n} from '@kb-labs/sdk';\nimport { calculateStats } from '@kb-labs/quality-core';\nimport type { StatsFlags } from './flags.js';\n\nexport default defineCommand<unknown, CLIInput<StatsFlags>, { exitCode: number }>({\n id: 'quality:stats',\n description: 'Monorepo statistics: packages, lines of code, size',\n\n handler: {\n async execute(ctx: PluginContextV3, input: CLIInput<StatsFlags>): Promise<{ exitCode: number }> {\n const { flags } = input;\n const cwd = ctx.cwd ?? process.cwd();\n\n const stats = await calculateStats(cwd);\n\n if (flags.json) {\n ctx.ui?.json?.(stats);\n return { exitCode: 0 };\n }\n\n ctx.ui?.success?.('Monorepo statistics', {\n sections: [{\n header: 'Overview',\n items: [\n `Packages: ${stats.packages}`,\n `Lines of code: ${stats.loc.toLocaleString()}`,\n `Size: ${stats.sizeFormatted}`,\n ],\n }],\n });\n\n return { exitCode: 0 };\n },\n },\n});\n","/**\n * quality:visualize - Visualize dependency graph\n *\n * Shows dependency graph in various formats:\n * - Tree view for specific package\n * - DOT format for graphviz\n * - Statistics about the graph\n */\n\nimport { defineCommand, type PluginContextV3 } from '@kb-labs/sdk';\nimport type { UIFacade } from '@kb-labs/sdk';\nimport {\n buildDependencyGraph,\n getReverseDependencies,\n getImpactAnalysis,\n type DependencyGraph,\n} from '@kb-labs/quality-core/graph';\n\ntype VisualizeFlags = {\n package?: string;\n tree?: boolean;\n dot?: boolean;\n stats?: boolean;\n reverse?: boolean;\n impact?: boolean;\n json?: boolean;\n argv?: string[];\n};\n\ntype VisualizeInput = VisualizeFlags & { argv?: string[] };\n\ntype VisualizeCommandResult = {\n exitCode: number;\n graph?: DependencyGraph;\n};\n\nexport default defineCommand({\n id: 'quality:visualize',\n description: 'Visualize dependency graph',\n\n handler: {\n async execute(ctx: PluginContextV3, input: VisualizeInput): Promise<VisualizeCommandResult> {\n const { ui } = ctx;\n\n // V3: Flags may come wrapped in input.flags or passed directly\n const flags = ('flags' in input && typeof (input as { flags?: unknown }).flags === 'object' && (input as { flags?: unknown }).flags !== null)\n ? (input as { flags: VisualizeInput }).flags\n : input;\n\n // Build dependency graph\n const graph = buildDependencyGraph(ctx.cwd);\n\n // Handle different output modes\n if (flags.dot) {\n outputDot(graph, flags, ui);\n } else if (flags.tree && flags.package) {\n outputTree(graph, flags.package, flags, ui);\n } else if (flags.reverse && flags.package) {\n outputReverse(graph, flags.package, flags, ui);\n } else if (flags.impact && flags.package) {\n outputImpact(graph, flags.package, flags, ui);\n } else if (flags.stats) {\n outputStats(graph, flags, ui);\n } else {\n // Default: show stats\n outputStats(graph, flags, ui);\n }\n\n return { exitCode: 0 };\n },\n },\n});\n\n/**\n * Output dependency tree for a package\n */\nfunction outputTree(graph: DependencyGraph, packageName: string, flags: VisualizeFlags, ui: UIFacade | undefined) {\n const { nodes } = graph;\n const node = nodes.get(packageName);\n\n if (!node) {\n ui?.error?.(`Package not found: ${packageName}`);\n return;\n }\n\n const sections: Array<{ header: string; items: string[] }> = [];\n\n // Build tree recursively\n const visited = new Set<string>();\n const treeItems: string[] = [];\n\n function buildTree(pkg: string, depth: number, prefix: string) {\n if (visited.has(pkg)) {\n treeItems.push(`${prefix}${pkg} (circular)`);\n return;\n }\n visited.add(pkg);\n\n const pkgNode = nodes.get(pkg);\n if (!pkgNode) {return;}\n\n treeItems.push(`${prefix}${pkg}`);\n\n const deps = Array.from(pkgNode.deps);\n for (let i = 0; i < deps.length; i++) {\n const dep = deps[i];\n if (!dep) {continue;}\n const isLast = i === deps.length - 1;\n const newPrefix = prefix + (isLast ? ' ββ ' : ' ββ ');\n buildTree(dep, depth + 1, newPrefix);\n }\n }\n\n buildTree(packageName, 0, '');\n\n sections.push({\n header: 'Dependency Tree',\n items: treeItems,\n });\n\n ui?.success?.('Dependency tree generated', {\n title: `π¦ Dependency Tree for ${packageName}`,\n sections,\n });\n}\n\n/**\n * Output reverse dependencies (who depends on this package)\n */\nfunction outputReverse(graph: DependencyGraph, packageName: string, flags: VisualizeFlags, ui: UIFacade | undefined) {\n const reverseDeps = getReverseDependencies(graph, packageName);\n\n if (flags.json) {\n ui?.json?.({ package: packageName, reverseDependencies: Array.from(reverseDeps) });\n return;\n }\n\n const sections: Array<{ header: string; items: string[] }> = [];\n\n if (reverseDeps.size === 0) {\n sections.push({\n header: 'Result',\n items: ['No packages depend on this package'],\n });\n } else {\n sections.push({\n header: `Packages that depend on ${packageName}`,\n items: Array.from(reverseDeps).map(dep => `β’ ${dep}`),\n });\n }\n\n ui?.success?.('Reverse dependencies found', {\n title: `β¬
οΈ Reverse Dependencies for ${packageName}`,\n sections,\n });\n}\n\n/**\n * Output impact analysis (all packages affected by changes)\n */\nfunction outputImpact(graph: DependencyGraph, packageName: string, flags: VisualizeFlags, ui: UIFacade | undefined) {\n const affected = getImpactAnalysis(graph, packageName);\n\n if (flags.json) {\n ui?.json?.({ package: packageName, affectedPackages: Array.from(affected) });\n return;\n }\n\n const sections: Array<{ header: string; items: string[] }> = [];\n\n if (affected.size === 0) {\n sections.push({\n header: 'Result',\n items: ['No other packages affected by changes to this package'],\n });\n } else {\n sections.push({\n header: `Impact Analysis for ${packageName}`,\n items: [\n `Changes to this package will affect ${affected.size} other packages:`,\n '',\n ...Array.from(affected).map(dep => `β’ ${dep}`),\n ],\n });\n\n sections.push({\n header: 'Recommendations',\n items: [\n 'π§ͺ Run tests in affected packages',\n 'π¨ Rebuild affected packages',\n 'π Update documentation if API changed',\n ],\n });\n }\n\n ui?.success?.('Impact analysis completed', {\n title: `π₯ Impact Analysis for ${packageName}`,\n sections,\n });\n}\n\n/**\n * Output dependency graph statistics\n */\nfunction outputStats(graph: DependencyGraph, flags: VisualizeFlags, ui: UIFacade | undefined) {\n const { nodes } = graph;\n\n // Calculate statistics\n let totalDeps = 0;\n let maxDeps = 0;\n let maxDepsPackage = '';\n const depCounts = new Map<number, number>();\n\n for (const [name, node] of nodes) {\n const depCount = node.deps.size;\n totalDeps += depCount;\n\n if (depCount > maxDeps) {\n maxDeps = depCount;\n maxDepsPackage = name;\n }\n\n depCounts.set(depCount, (depCounts.get(depCount) ?? 0) + 1);\n }\n\n const avgDeps = nodes.size > 0 ? (totalDeps / nodes.size).toFixed(2) : '0';\n\n if (flags.json) {\n ui?.json?.({\n totalPackages: nodes.size,\n totalDependencies: totalDeps,\n averageDependencies: Number.parseFloat(avgDeps),\n maxDependencies: maxDeps,\n maxDependenciesPackage: maxDepsPackage,\n });\n return;\n }\n\n const sections: Array<{ header: string; items: string[] }> = [];\n\n sections.push({\n header: 'Graph Statistics',\n items: [\n `Total packages: ${nodes.size}`,\n `Total dependencies: ${totalDeps}`,\n `Average dependencies per package: ${avgDeps}`,\n `Max dependencies: ${maxDeps} (${maxDepsPackage})`,\n ],\n });\n\n // Dependency distribution\n const distributionItems: string[] = [];\n const sortedCounts = Array.from(depCounts.entries()).sort((a, b) => a[0] - b[0]);\n for (const [count, packages] of sortedCounts) {\n const bar = 'β'.repeat(Math.min(packages, 20));\n distributionItems.push(`${count} deps: ${bar} ${packages} packages`);\n }\n\n sections.push({\n header: 'Dependency Distribution',\n items: distributionItems,\n });\n\n ui?.success?.('Graph statistics calculated', {\n title: 'π Dependency Graph Statistics',\n sections,\n });\n}\n\n/**\n * Output DOT format for graphviz\n */\nfunction outputDot(graph: DependencyGraph, flags: VisualizeFlags, ui: UIFacade | undefined) {\n const { nodes } = graph;\n\n const lines: string[] = [];\n lines.push('digraph dependencies {');\n lines.push(' rankdir=LR;');\n lines.push(' node [shape=box];');\n lines.push('');\n\n for (const [name, node] of nodes) {\n for (const dep of node.deps) {\n const safeName = name.replace(/[@\\/]/g, '_');\n const safeDep = dep.replace(/[@\\/]/g, '_');\n lines.push(` \"${safeName}\" -> \"${safeDep}\";`);\n }\n }\n\n lines.push('}');\n\n if (flags.json) {\n ui?.json?.({ dot: lines.join('\\n') });\n } else {\n for (const line of lines) {\n ui?.write?.(line);\n }\n ui?.write?.('');\n ui?.write?.('# Save to file and visualize with:');\n ui?.write?.('# dot -Tpng dependencies.dot -o dependencies.png');\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/cli/commands/build-order.ts","../../../src/cli/commands/check-builds.ts","../../../src/cli/commands/check-tests.ts","../../../src/cli/commands/check-types.ts","../../../src/cli/commands/check-layers.ts","../../../src/cli/commands/coupling.ts","../../../src/cli/commands/cycles.ts","../../../src/cli/commands/dead-code.ts","../../../src/cli/commands/fix-deps.ts","../../../src/cli/commands/health.ts","../../../src/cli/commands/history.ts","../../../src/cli/commands/snapshot.ts","../../../src/cli/commands/stats.ts","../../../src/cli/commands/visualize.ts"],"names":["defineCommand","CACHE_KEYS","summaryItems","useConfig","defaultQualityConfig","health","analyzeLayering","analyzeTypes","analyzeCoupling","runKnip","calculateHealth","QualitySnapshotStore","buildDependencyGraph","outputStats"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * quality:build-order - Calculate build order and dependency layers\n *\n * Uses topological sort to determine correct build order.\n * Shows build layers where each layer can build in parallel.\n */\n\nimport { defineCommand, useConfig, type CLIInput, type PluginContextV3 , type CommandResult} from '@kb-labs/sdk';\nimport { analyzeBuildOrder } from '@kb-labs/quality-core';\nimport { defaultQualityConfig, type QualityPluginConfig } from '@kb-labs/quality-contracts';\nimport type { BuildOrderFlags } from './flags.js';\n\nexport default defineCommand<unknown, CLIInput<BuildOrderFlags>, unknown>({\n id: 'quality:build-order',\n description: 'Calculate build order using topological sort',\n\n handler: {\n async execute(ctx: PluginContextV3, input: CLIInput<BuildOrderFlags>): Promise<CommandResult> {\n const { flags } = input;\n const config = await useConfig<QualityPluginConfig>();\n const cfg = config ?? defaultQualityConfig;\n const cwd = ctx.cwd ?? process.cwd();\n\n const result = analyzeBuildOrder({\n rootDir: cwd,\n layerMap: cfg.layers,\n filterPackage: flags.package,\n });\n\n if (result.hasCircular) {\n if (flags.json) {\n ctx.ui?.json?.({ ...result, ok: false });\n } else {\n ctx.ui?.error?.(`Circular dependencies detected β build order cannot be fully determined`, {\n sections: result.circular.map((cycle, i) => ({\n header: `Cycle ${i + 1}`,\n items: cycle,\n })),\n });\n }\n return { ok: false, error: 'Command failed' };\n }\n\n if (flags.json) {\n ctx.ui?.json?.(result);\n return { ok: true };\n }\n\n if (flags.script) {\n for (let i = 0; i < result.layers.length; i++) {\n const layer = result.layers[i];\n if (!layer) continue;\n ctx.ui?.success?.(`# Layer ${i + 1}`, { sections: [{ header: '', items: layer.map(p => `pnpm --filter \"${p}\" run build`) }] });\n }\n return { ok: true };\n }\n\n const sections = flags.layers\n ? result.layers.map((layer, i) => ({\n header: `Layer ${i + 1} β ${layer.length} package(s) (parallel)`,\n items: layer,\n }))\n : [{ header: 'Build order', items: result.sorted.map((p, i) => `${i + 1}. ${p}`) }];\n\n sections.push({\n header: 'Summary',\n items: [`${result.packageCount} packages in ${result.layerCount} layers`],\n });\n\n ctx.ui?.success?.(flags.package ? `Build order for ${flags.package}` : 'Monorepo build order', { sections });\n return { ok: true };\n },\n },\n});\n","/**\n * quality:check-builds - Check build status across monorepo\n *\n * Analyzes build status including:\n * - Build failures with error messages\n * - Stale builds (dist/ older than src/)\n * - Build duration tracking\n */\n\nimport { defineCommand, type PluginContextV3, type CommandResult } from '@kb-labs/sdk';\nimport type { BuildCheckResult } from '@kb-labs/quality-contracts';\nimport { CACHE_KEYS } from '@kb-labs/quality-contracts';\nimport { checkBuilds } from '@kb-labs/quality-core/builds';\nimport type { CheckBuildsFlags } from './flags.js';\n\n// Input type with backward compatibility\ntype CheckBuildsInput = CheckBuildsFlags & { argv?: string[] };\n\nexport default defineCommand({\n id: 'quality:check-builds',\n description: 'Check build status across monorepo',\n\n handler: {\n async execute(\n ctx: PluginContextV3,\n input: CheckBuildsInput\n ): Promise<CommandResult<BuildCheckResult>> {\n const { ui, platform } = ctx;\n\n // V3: Flags may come wrapped in input.flags or passed directly\n const flags = ('flags' in input && typeof (input as { flags?: unknown }).flags === 'object' && (input as { flags?: unknown }).flags !== null)\n ? (input as { flags: CheckBuildsInput }).flags\n : input;\n\n // Check cache unless refresh requested\n const cacheKey = `${CACHE_KEYS.BUILDS}:${flags.package || 'all'}`;\n\n if (!flags.refresh) {\n const cached = await platform.cache.get<BuildCheckResult>(cacheKey);\n if (cached) {\n outputBuildCheck({ ...cached, cached: true }, flags, ui);\n return cached.failing > 0\n ? { ok: false, error: 'Build failures found', result: cached }\n : { ok: true, result: cached };\n }\n }\n\n // Run build check\n const result = await checkBuilds(ctx.cwd, {\n packageFilter: flags.package,\n timeout: flags.timeout ? Number(flags.timeout) : 30000,\n });\n\n // Cache results for 10 minutes\n await platform.cache.set(cacheKey, result, 10 * 60 * 1000);\n\n // Track analytics\n await platform.analytics.track('quality:check-builds', {\n totalPackages: result.totalPackages,\n passing: result.passing,\n failing: result.failing,\n staleBuilds: result.staleBuilds.length,\n duration: result.duration,\n packageSpecific: !!flags.package,\n });\n\n // Output results\n outputBuildCheck({ ...result, cached: false }, flags, ui);\n\n return result.failing > 0\n ? { ok: false, error: 'Build failures found', result }\n : { ok: true, result };\n },\n },\n});\n\n/**\n * Output build check results\n */\nfunction outputBuildCheck(\n result: BuildCheckResult & { cached?: boolean },\n flags: Record<string, unknown>,\n ui: PluginContextV3['ui']\n) {\n if (flags.json) {\n ui?.json?.(result);\n return;\n }\n\n // Build sections\n const sections: Array<{ header: string; items: string[] }> = [];\n\n // Status section\n const statusIcon = result.failing === 0 ? 'β
' : 'β';\n const statusText = result.failing === 0 ? 'All builds passing' : 'Build failures detected';\n const statusItems = [\n `${statusIcon} ${statusText}`,\n `Passing: ${result.passing} package(s)`,\n result.failing > 0 ? `Failing: ${result.failing} package(s)` : null,\n ].filter(Boolean) as string[];\n\n sections.push({ header: 'Build Status', items: statusItems });\n\n // Failed packages\n if (result.failures.length > 0) {\n const failureItems: string[] = [];\n for (const failure of result.failures.slice(0, 5)) {\n failureItems.push(`β’ ${failure.package}`);\n // Show first line of error\n const firstLine = failure.error.split('\\n')[0];\n failureItems.push(` ${firstLine?.substring(0, 80) || 'Build failed'}`);\n }\n\n if (result.failures.length > 5) {\n failureItems.push(`... and ${result.failures.length - 5} more failures`);\n }\n\n sections.push({ header: 'β Failed Packages', items: failureItems });\n }\n\n // Stale builds\n if (result.staleBuilds.length > 0) {\n const staleItems = result.staleBuilds.slice(0, 5).map((s) => `β’ ${s.package}`);\n\n if (result.staleBuilds.length > 5) {\n staleItems.push(`... and ${result.staleBuilds.length - 5} more`);\n }\n\n sections.push({\n header: 'β οΈ Stale Builds (dist/ older than src/)',\n items: staleItems,\n });\n }\n\n // Summary\n const summaryItems = [\n `Total packages: ${result.totalPackages}`,\n `Duration: ${(result.duration / 1000).toFixed(1)}s`,\n result.cached ? 'πΎ Cached (use --refresh to recheck)' : 'π Fresh check',\n ];\n\n sections.push({ header: 'Summary', items: summaryItems });\n\n const title =\n result.failing === 0\n ? 'β
All Builds Passing'\n : `β ${result.failing} Build Failure(s) Detected`;\n\n ui?.success?.('Build check completed', {\n title,\n sections,\n });\n}\n","/**\n * quality:check-tests - Test execution and coverage tracking\n *\n * Runs tests across monorepo packages and collects coverage statistics.\n */\n\nimport { defineCommand, type PluginContextV3, type CommandResult } from '@kb-labs/sdk';\nimport { runTests } from '@kb-labs/quality-core/tests';\nimport { CACHE_KEYS, type TestRunResult } from '@kb-labs/quality-contracts';\nimport { type CheckTestsFlags } from './flags.js';\n\n// Input type with backward compatibility\ntype CheckTestsInput = CheckTestsFlags & { argv?: string[] };\n\nexport default defineCommand({\n id: 'quality:check-tests',\n description: 'Run tests and track coverage across monorepo',\n\n handler: {\n async execute(\n ctx: PluginContextV3,\n input: CheckTestsInput\n ): Promise<CommandResult<TestRunResult>> {\n const { ui, platform } = ctx;\n\n // V3: Flags may come wrapped in input.flags or passed directly\n const flags = ('flags' in input && typeof (input as { flags?: unknown }).flags === 'object' && (input as { flags?: unknown }).flags !== null)\n ? (input as { flags: CheckTestsInput }).flags\n : input;\n\n const cacheKey = `${CACHE_KEYS.TESTS}:${flags.package || 'all'}`;\n\n // Check cache unless refresh requested\n if (!flags.refresh) {\n const cached = await platform.cache.get<TestRunResult>(cacheKey);\n if (cached) {\n outputTestResults({ ...cached, cached: true }, flags, ui);\n return cached.failing > 0\n ? { ok: false, error: 'Test failures found', result: cached }\n : { ok: true, result: cached };\n }\n }\n\n // Run tests\n const result = await runTests(ctx.cwd, {\n packageFilter: flags.package,\n timeout: flags.timeout ? Number(flags.timeout) : 60000,\n withCoverage: flags['with-coverage'],\n coverageOnly: flags['coverage-only'],\n });\n\n // Cache result (5 min TTL - tests are slower)\n await platform.cache.set(cacheKey, result, 5 * 60 * 1000);\n\n // Track analytics\n await platform.analytics.track('quality:check-tests', {\n packageFilter: flags.package || 'all',\n totalPackages: result.totalPackages,\n passing: result.passing,\n failing: result.failing,\n withCoverage: flags['with-coverage'],\n cached: false,\n });\n\n // Output results\n outputTestResults({ ...result, cached: false }, flags, ui);\n\n return result.failing > 0\n ? { ok: false, error: 'Test failures found', result, meta: { cached: false } }\n : { ok: true, result, meta: { cached: false } };\n },\n },\n});\n\n/**\n * Output test results\n */\nfunction outputTestResults(\n result: TestRunResult & { cached: boolean },\n flags: CheckTestsInput,\n ui: PluginContextV3['ui']\n): void {\n if (flags.json) {\n ui?.json?.(result);\n return;\n }\n\n // Build sections\n const sections: Array<{ header: string; items: string[] }> = [];\n\n // Status section\n const statusIcon = result.failing === 0 ? 'β
' : 'β';\n const statusText = result.failing === 0 ? 'All tests passing' : 'Test failures detected';\n const statusItems = [\n `${statusIcon} ${statusText}`,\n `Total packages: ${result.totalPackages}`,\n `Passing: ${result.passing}`,\n result.failing > 0 ? `Failing: ${result.failing}` : null,\n result.skipped > 0 ? `Skipped: ${result.skipped} (no test script)` : null,\n ].filter(Boolean) as string[];\n\n sections.push({ header: 'Test Status', items: statusItems });\n\n // Test summary\n if (result.summary.totalTests > 0) {\n const summaryItems = [\n `Total tests: ${result.summary.totalTests}`,\n `Passed: ${result.summary.passedTests}`,\n result.summary.failedTests > 0 ? `Failed: ${result.summary.failedTests}` : null,\n ].filter(Boolean) as string[];\n\n sections.push({ header: 'Test Summary', items: summaryItems });\n }\n\n // Failed packages\n if (result.failures.length > 0) {\n const failureItems: string[] = [];\n for (const failure of result.failures.slice(0, 5)) {\n failureItems.push(`β ${failure.package}`);\n if (failure.failedTests && failure.totalTests) {\n failureItems.push(` ${failure.failedTests}/${failure.totalTests} tests failed`);\n }\n // Show first line of error\n const firstLine = failure.error.split('\\n')[0];\n failureItems.push(` ${firstLine?.substring(0, 80) || 'Test failed'}`);\n }\n\n if (result.failures.length > 5) {\n failureItems.push(`... and ${result.failures.length - 5} more failures`);\n }\n\n sections.push({ header: 'Failed Packages', items: failureItems });\n }\n\n // Coverage section (if available)\n if (result.coverage.packages.length > 0) {\n const coverageItems: string[] = [];\n coverageItems.push(`Average coverage: ${result.coverage.avgCoverage.toFixed(1)}%`);\n coverageItems.push('');\n\n const topPackages = result.coverage.packages\n .sort((a, b) => b.lines - a.lines)\n .slice(0, 5);\n\n for (const pkg of topPackages) {\n coverageItems.push(`${pkg.name}`);\n coverageItems.push(\n ` Lines: ${pkg.lines.toFixed(1)}% | Statements: ${pkg.statements.toFixed(1)}% | Functions: ${pkg.functions.toFixed(1)}% | Branches: ${pkg.branches.toFixed(1)}%`\n );\n }\n\n if (result.coverage.packages.length > 5) {\n coverageItems.push(`... and ${result.coverage.packages.length - 5} more packages`);\n }\n\n sections.push({ header: 'Coverage', items: coverageItems });\n }\n\n // Summary\n const summaryItems = [\n `Duration: ${(result.duration / 1000).toFixed(1)}s`,\n result.cached ? 'πΎ Cached (use --refresh to re-run)' : 'π Fresh run',\n ];\n\n sections.push({ header: 'Summary', items: summaryItems });\n\n const title =\n result.failing === 0\n ? 'β
All Tests Passed'\n : `β ${result.failing} Package(s) with Test Failures`;\n\n ui?.success?.('Test run completed', {\n title,\n sections,\n });\n}\n","/**\n * quality:check-types - TypeScript type safety analysis\n *\n * Analyzes TypeScript type errors, warnings, and coverage across monorepo.\n * Uses TypeScript Compiler API for semantic analysis.\n */\n\nimport { defineCommand, type PluginContextV3, type CommandResult } from '@kb-labs/sdk';\nimport { analyzeTypes } from '@kb-labs/quality-core/types';\nimport { CACHE_KEYS, type TypeAnalysisResult } from '@kb-labs/quality-contracts';\nimport { type CheckTypesFlags } from './flags.js';\n\n// Input type with backward compatibility\ntype CheckTypesInput = CheckTypesFlags & { argv?: string[] };\n\nexport default defineCommand({\n id: 'quality:check-types',\n description: 'Analyze TypeScript type safety across monorepo',\n\n handler: {\n async execute(\n ctx: PluginContextV3,\n input: CheckTypesInput\n ): Promise<CommandResult<TypeAnalysisResult>> {\n const { ui, platform } = ctx;\n\n // V3: Flags may come wrapped in input.flags or passed directly\n const flags = ('flags' in input && typeof (input as { flags?: unknown }).flags === 'object' && (input as { flags?: unknown }).flags !== null)\n ? (input as { flags: CheckTypesInput }).flags\n : input;\n\n const cacheKey = `${CACHE_KEYS.TYPE_ANALYSIS}:${flags.package || 'all'}`;\n\n // Check cache unless refresh requested\n if (!flags.refresh) {\n const cached = await platform.cache.get<TypeAnalysisResult>(cacheKey);\n if (cached) {\n outputTypeAnalysis({ ...cached, cached: true }, flags, ui);\n return cached.totalErrors > 0\n ? { ok: false, error: 'Type errors found', result: cached }\n : { ok: true, result: cached };\n }\n }\n\n // Run type analysis\n const result = await analyzeTypes(ctx.cwd, {\n packageFilter: flags.package,\n errorsOnly: flags['errors-only'],\n });\n\n // Cache result (10 min TTL)\n await platform.cache.set(cacheKey, result, 10 * 60 * 1000);\n\n // Track analytics\n await platform.analytics.track('quality:check-types', {\n packageFilter: flags.package || 'all',\n totalPackages: result.totalPackages,\n totalErrors: result.totalErrors,\n avgCoverage: result.avgCoverage,\n cached: false,\n });\n\n // Output results\n outputTypeAnalysis({ ...result, cached: false }, flags, ui);\n\n return result.totalErrors > 0\n ? { ok: false, error: 'Type errors found', result, meta: { cached: false } }\n : { ok: true, result, meta: { cached: false } };\n },\n },\n});\n\n/**\n * Output type analysis results\n */\nfunction outputTypeAnalysis(\n result: TypeAnalysisResult & { cached: boolean },\n flags: CheckTypesInput,\n ui: PluginContextV3['ui']\n): void {\n if (flags.json) {\n ui?.json?.(result);\n return;\n }\n\n const errorsOnly = flags['errors-only'] || false;\n\n // Build sections\n const sections: Array<{ header: string; items: string[] }> = [];\n\n // Status section\n const statusIcon = result.totalErrors === 0 ? 'β
' : 'β';\n const statusText =\n result.totalErrors === 0 ? 'All packages passed type checks' : 'Type errors detected';\n const statusItems = [\n `${statusIcon} ${statusText}`,\n `Analyzed: ${result.totalPackages} package(s)`,\n `Errors: ${result.totalErrors}`,\n `Warnings: ${result.totalWarnings}`,\n `Avg Coverage: ${result.avgCoverage.toFixed(1)}%`,\n ];\n\n sections.push({ header: 'Type Safety Status', items: statusItems });\n\n // Packages with errors\n if (result.packagesWithErrors > 0) {\n const errorItems: string[] = [];\n const packagesToShow = result.packages\n .filter((pkg) => !errorsOnly || pkg.errors > 0)\n .slice(0, 10);\n\n for (const pkg of packagesToShow) {\n const status = pkg.errors > 0 ? 'β' : 'β
';\n errorItems.push(`${status} ${pkg.name}`);\n\n const details = [\n pkg.errors > 0 ? `${pkg.errors} error(s)` : null,\n pkg.warnings > 0 ? `${pkg.warnings} warning(s)` : null,\n `${pkg.coverage.toFixed(1)}% coverage`,\n pkg.anyCount > 0 ? `${pkg.anyCount} any` : null,\n pkg.tsIgnoreCount > 0 ? `${pkg.tsIgnoreCount} @ts-ignore` : null,\n ]\n .filter(Boolean)\n .join(', ');\n\n errorItems.push(` ${details}`);\n }\n\n if (result.packages.length > 10) {\n errorItems.push(`... and ${result.packages.length - 10} more packages`);\n }\n\n sections.push({\n header: `Packages with Type Errors (${result.packagesWithErrors})`,\n items: errorItems,\n });\n }\n\n // Coverage distribution\n const excellent = result.packages.filter((p) => p.coverage >= 90).length;\n const good = result.packages.filter((p) => p.coverage >= 70 && p.coverage < 90).length;\n const poor = result.packages.filter((p) => p.coverage < 70).length;\n\n if (result.packages.length > 0) {\n const coverageItems = [\n `β
Excellent (β₯90%): ${excellent} package(s)`,\n `β οΈ Good (70-90%): ${good} package(s)`,\n poor > 0 ? `β Poor (<70%): ${poor} package(s)` : null,\n ].filter(Boolean) as string[];\n\n sections.push({ header: 'Type Coverage Distribution', items: coverageItems });\n }\n\n // Summary\n const summaryItems = [\n `Total packages: ${result.totalPackages}`,\n `Duration: ${(result.duration / 1000).toFixed(1)}s`,\n result.cached ? 'πΎ Cached (use --refresh to recheck)' : 'π Fresh analysis',\n ];\n\n sections.push({ header: 'Summary', items: summaryItems });\n\n const title =\n result.totalErrors === 0\n ? 'β
All Type Checks Passed'\n : `β ${result.packagesWithErrors} Package(s) with Type Errors`;\n\n ui?.success?.('Type analysis completed', {\n title,\n sections,\n });\n}\n","import {\n defineCommand,\n useConfig,\n type CLIInput,\n type PluginContextV3,\n type CommandResult,\n} from '@kb-labs/sdk';\nimport { analyzeLayering } from '@kb-labs/quality-core';\nimport { type QualityPluginConfig, type LayeringViolation } from '@kb-labs/quality-contracts';\nimport type { CheckLayersFlags } from './flags.js';\n\nexport default defineCommand<unknown, CLIInput<CheckLayersFlags>, unknown>({\n id: 'quality:check-layers',\n description: 'Detect layering violations (lower layer importing higher layer)',\n\n handler: {\n async execute(ctx: PluginContextV3, input: CLIInput<CheckLayersFlags>): Promise<CommandResult> {\n const { flags } = input;\n const config = await useConfig<QualityPluginConfig>();\n const cwd = ctx.cwd ?? process.cwd();\n\n const report = await analyzeLayering({\n rootDir: cwd,\n layerMap: config?.layers,\n });\n\n const filtered = flags.package\n ? {\n ...report,\n violations: report.violations.filter((v: LayeringViolation) => v.fromPackage.includes(flags.package!)),\n totalViolations: report.violations.filter((v: LayeringViolation) => v.fromPackage.includes(flags.package!)).length,\n }\n : report;\n\n if (flags.json) {\n ctx.ui?.json?.(filtered);\n return filtered.totalViolations > 0\n ? { ok: false, error: 'Layer violations found', result: filtered }\n : { ok: true, result: filtered };\n }\n\n if (filtered.totalViolations === 0) {\n ctx.ui?.success?.('No layering violations found');\n return { ok: true };\n }\n\n const byPackage = new Map<string, typeof filtered.violations>();\n for (const v of filtered.violations) {\n const list = byPackage.get(v.fromPackage) ?? [];\n list.push(v);\n byPackage.set(v.fromPackage, list);\n }\n\n const sections = [...byPackage.entries()].map(([pkg, vs]) => ({\n header: `${pkg} (Layer ${vs[0]?.fromLayer})`,\n items: vs.map((v: LayeringViolation) => `β ${v.toPackage} (Layer ${v.toLayer}) ${v.importSpecifier}`),\n }));\n\n ctx.ui?.error?.(`${filtered.totalViolations} layering violation(s) in ${filtered.affectedPackages.length} package(s)`, { sections });\n return { ok: false, error: 'Command failed' };\n },\n },\n});\n","import {\n defineCommand,\n useConfig,\n type CLIInput,\n type PluginContextV3,\n type CommandResult,\n} from '@kb-labs/sdk';\nimport { analyzeCoupling } from '@kb-labs/quality-core';\nimport { type QualityPluginConfig } from '@kb-labs/quality-contracts';\nimport type { CouplingFlags } from './flags.js';\n\nexport default defineCommand<unknown, CLIInput<CouplingFlags>, unknown>({\n id: 'quality:coupling',\n description: 'Show coupling metrics per package (afferent/efferent/instability)',\n\n handler: {\n async execute(ctx: PluginContextV3, input: CLIInput<CouplingFlags>): Promise<CommandResult> {\n const { flags } = input;\n const config = await useConfig<QualityPluginConfig>();\n const cwd = ctx.cwd ?? process.cwd();\n\n const report = analyzeCoupling({ rootDir: cwd, layerMap: config?.layers, topN: flags.top });\n\n if (flags.json) {\n ctx.ui?.json?.(report);\n return { ok: true };\n }\n\n const sorted =\n flags.sort === 'coupled'\n ? [...report.packages].sort((a, b) => b.afferent + b.efferent - (a.afferent + a.efferent))\n : [...report.packages].sort((a, b) => b.instability - a.instability);\n\n const top = sorted.slice(0, flags.top ?? 10);\n const threshold = config?.thresholds?.instability ?? 0.85;\n\n const items = top.map(p => {\n const warn = p.instability > threshold ? ' β unstable' : '';\n return `${p.name} Ca: ${p.afferent} Ce: ${p.efferent} I: ${p.instability.toFixed(2)}${warn}`;\n });\n\n ctx.ui?.success?.(`Coupling β avg instability: ${report.avgInstability.toFixed(2)}`, {\n sections: [{ header: `Top ${top.length} by instability`, items }],\n });\n\n return { ok: true };\n },\n },\n});\n","/**\n * quality:cycles - Detect circular dependencies\n *\n * Uses DFS to find all circular dependency chains in the monorepo.\n */\n\nimport { defineCommand, type PluginContextV3, type CommandResult } from '@kb-labs/sdk';\nimport {\n buildDependencyGraph,\n findCircularDependencies,\n} from '@kb-labs/quality-core/graph';\n\ntype CyclesFlags = {\n json?: boolean;\n argv?: string[];\n};\n\ntype CyclesInput = CyclesFlags & { argv?: string[] };\n\nexport default defineCommand({\n id: 'quality:cycles',\n description: 'Detect circular dependencies in monorepo',\n\n handler: {\n async execute(ctx: PluginContextV3, input: CyclesInput): Promise<CommandResult<{ cycles: string[][] }>> {\n const { ui } = ctx;\n\n // V3: Flags may come wrapped in input.flags or passed directly\n const flags = ('flags' in input && typeof (input as { flags?: unknown }).flags === 'object' && (input as { flags?: unknown }).flags !== null)\n ? (input as { flags: CyclesInput }).flags\n : input;\n\n // Build dependency graph\n const graph = buildDependencyGraph(ctx.cwd);\n\n // Find circular dependencies\n const cycles = findCircularDependencies(graph);\n\n // Output results\n outputCycles(cycles, flags, ui);\n\n return cycles.length > 0\n ? { ok: false, error: 'Circular dependencies found', result: { cycles } }\n : { ok: true, result: { cycles } };\n },\n },\n});\n\n/**\n * Output circular dependencies\n */\nfunction outputCycles(cycles: string[][], flags: Record<string, unknown>, ui: PluginContextV3['ui']) {\n if (flags.json) {\n ui?.json?.({ cycles, count: cycles.length });\n return;\n }\n\n if (cycles.length === 0) {\n ui?.success?.('No circular dependencies found', {\n title: 'β
Circular Dependencies Check',\n sections: [\n {\n header: 'Result',\n items: ['β
No circular dependencies detected'],\n },\n ],\n });\n return;\n }\n\n // Build sections\n const sections: Array<{ header: string; items: string[] }> = [];\n\n // Summary\n sections.push({\n header: 'Summary',\n items: [\n `β οΈ Found ${cycles.length} circular dependency chain(s)`,\n 'These must be broken to enable clean builds',\n ],\n });\n\n // Show each cycle\n for (let i = 0; i < cycles.length; i++) {\n const cycle = cycles[i];\n if (!cycle) {continue;}\n const cycleItems: string[] = [];\n\n for (let j = 0; j < cycle.length; j++) {\n const pkg = cycle[j];\n if (j === cycle.length - 1) {\n cycleItems.push(` ${j + 1}. ${pkg}`);\n const firstPkg = cycle[0];\n cycleItems.push(` ${j + 2}. ${firstPkg ?? '?'} β¬
circular!`);\n } else {\n cycleItems.push(` ${j + 1}. ${pkg}`);\n }\n }\n\n sections.push({\n header: `Cycle ${i + 1} (${cycle.length} packages)`,\n items: cycleItems,\n });\n }\n\n // Recommendations\n sections.push({\n header: 'Recommendations',\n items: [\n '1. Extract shared code into a new package',\n '2. Move one dependency to devDependencies',\n '3. Refactor to remove bidirectional dependencies',\n '4. Use dependency injection patterns',\n ],\n });\n\n ui?.error?.('Circular dependencies detected', {\n title: `β οΈ Circular Dependencies Detected (${cycles.length})`,\n sections,\n });\n}\n","import {\n defineCommand,\n useConfig,\n type CLIInput,\n type PluginContextV3,\n type CommandResult,\n} from '@kb-labs/sdk';\nimport { runKnip } from '@kb-labs/quality-core';\nimport { defaultQualityConfig, type QualityPluginConfig } from '@kb-labs/quality-contracts';\nimport type { DeadCodeFlags } from './flags.js';\n\nexport default defineCommand<unknown, CLIInput<DeadCodeFlags>, unknown>({\n id: 'quality:dead-code',\n description: 'Detect unused files, exports, and deps via knip',\n\n handler: {\n async execute(ctx: PluginContextV3, input: CLIInput<DeadCodeFlags>): Promise<CommandResult> {\n const { flags } = input;\n const config = await useConfig<QualityPluginConfig>();\n const cwd = ctx.cwd ?? process.cwd();\n const cfg = config ?? defaultQualityConfig;\n\n if (!cfg.knip.enabled) {\n ctx.ui?.success?.('knip is disabled in config (knip.enabled = false)');\n return { ok: true };\n }\n\n const report = await runKnip({ shell: ctx.api.shell, rootDir: cwd });\n\n if (flags.json) {\n ctx.ui?.json?.(report);\n return report.totalIssues > 0\n ? { ok: false, error: 'Dead code found', result: report }\n : { ok: true, result: report };\n }\n\n if (report.totalIssues === 0) {\n ctx.ui?.success?.('No dead code detected');\n return { ok: true };\n }\n\n const sections: Array<{ header: string; items: string[] }> = [];\n\n if (report.unusedFiles.length > 0) {\n sections.push({\n header: `Unused files (${report.unusedFiles.length})`,\n items: report.unusedFiles,\n });\n }\n\n if (report.unusedExports.length > 0) {\n sections.push({\n header: `Unused exports (${report.unusedExports.length})`,\n items: report.unusedExports.map(e => `${e.file} ${e.symbol}`),\n });\n }\n\n if (report.unusedDependencies.length > 0) {\n sections.push({\n header: `Unused dependencies (${report.unusedDependencies.length})`,\n items: report.unusedDependencies.map(d => `${d.package} in ${d.workspace}`),\n });\n }\n\n if (report.unlistedDependencies.length > 0) {\n sections.push({\n header: `Unlisted dependencies (${report.unlistedDependencies.length})`,\n items: report.unlistedDependencies.map(d => `${d.package} in ${d.workspace}`),\n });\n }\n\n ctx.ui?.error?.(`${report.totalIssues} dead code issue(s) found`, { sections });\n return { ok: false, error: 'Command failed' };\n },\n },\n});\n","/**\n * quality:fix-deps - Dependency auto-fixer\n *\n * Automatically fixes dependency issues:\n * - Remove unused dependencies\n * - Add missing workspace dependencies\n * - Align duplicate dependency versions\n *\n * Supports --dry-run via intent() for previewing changes without applying\n */\n\nimport { defineCommand, validationError, type PluginContextV3, useLoader, type CLIInput, type CommandResult } from '@kb-labs/sdk';\nimport type { UIFacade } from '@kb-labs/sdk';\nimport type { FixDepsFlags } from './flags.js';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\n/** Minimal package.json structure used by fix-deps */\ninterface PackageJson {\n name?: string;\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n}\n\n/** Parsed package entry */\ninterface PackageEntry {\n name: string;\n path: string;\n json: PackageJson;\n}\n\ninterface FixResult {\n packagesScanned: number;\n removedDeps: Array<{ package: string; dep: string }>;\n addedDeps: Array<{ package: string; dep: string; version: string }>;\n alignedDeps: Array<{ dep: string; from: string; to: string; packages: string[] }>;\n}\n\nexport default defineCommand({\n id: 'quality:fix-deps',\n description: 'Auto-fix dependency issues',\n\n handler: {\n async intent(_ctx: PluginContextV3, input: CLIInput<FixDepsFlags>) {\n const flags = input.flags;\n const removeUnused = flags['remove-unused'] || flags.all;\n const addMissing = flags['add-missing'] || flags.all;\n const alignVersions = flags['align-versions'] || flags.all;\n\n const packages = findPackages(_ctx.cwd);\n const preview = await runAnalysis(packages, { removeUnused, addMissing, alignVersions, dryRun: true });\n\n const operations = [\n ...preview.alignedDeps.map(a => ({\n type: 'update' as const,\n resource: 'dependency',\n details: { dep: a.dep, from: a.from, to: a.to, packages: a.packages },\n })),\n ...preview.addedDeps.map(a => ({\n type: 'create' as const,\n resource: 'dependency',\n details: { package: a.package, dep: a.dep, version: a.version },\n })),\n ...preview.removedDeps.map(r => ({\n type: 'delete' as const,\n resource: 'dependency',\n details: { package: r.package, dep: r.dep },\n })),\n ];\n\n const total = operations.length;\n return {\n summary: total > 0\n ? `Fix ${total} dependency issue(s) across ${preview.packagesScanned} packages`\n : `No dependency issues found in ${preview.packagesScanned} packages`,\n operations,\n };\n },\n\n async execute(ctx: PluginContextV3, input: CLIInput<FixDepsFlags>): Promise<CommandResult<FixResult>> {\n const { ui, platform } = ctx;\n const flags = input.flags;\n const removeUnused = flags['remove-unused'] || flags.all;\n const addMissing = flags['add-missing'] || flags.all;\n const alignVersions = flags['align-versions'] || flags.all;\n const showStats = flags.stats;\n\n if (showStats) {\n const stats = await getDependencyStats(ctx.cwd);\n outputStats(stats, flags, ui);\n return { ok: true };\n }\n\n if (!removeUnused && !addMissing && !alignVersions) {\n validationError(ctx, 'No fix options specified', 'Use --remove-unused, --add-missing, --align-versions, or --all', flags.json);\n return { ok: false, error: 'Command failed' };\n }\n\n const loader = useLoader('Scanning packages...');\n loader.start();\n\n const packages = findPackages(ctx.cwd);\n loader.update({ text: `Scanned ${packages.length} packages` });\n\n const result = await runAnalysis(packages, { removeUnused, addMissing, alignVersions, dryRun: false });\n\n loader.succeed('Dependency analysis completed');\n\n await platform.analytics.track('quality:fix-deps', {\n dryRun: false,\n packagesScanned: result.packagesScanned,\n removedCount: result.removedDeps.length,\n addedCount: result.addedDeps.length,\n alignedCount: result.alignedDeps.length,\n });\n\n outputResults({ ...result, dryRun: false }, flags, ui);\n\n return { ok: true, result };\n },\n },\n});\n\nasync function runAnalysis(\n packages: PackageEntry[],\n opts: { removeUnused?: boolean | null; addMissing?: boolean | null; alignVersions?: boolean | null; dryRun: boolean },\n): Promise<FixResult & { packagesScanned: number }> {\n const result: FixResult & { packagesScanned: number } = {\n packagesScanned: packages.length,\n removedDeps: [],\n addedDeps: [],\n alignedDeps: [],\n };\n\n if (opts.alignVersions) {\n result.alignedDeps = await alignDuplicateVersions(packages, opts.dryRun);\n }\n if (opts.addMissing) {\n result.addedDeps = await addMissingWorkspaceDeps(packages, opts.dryRun);\n }\n if (opts.removeUnused) {\n result.removedDeps = await removeUnusedDeps(packages, opts.dryRun);\n }\n\n return result;\n}\n\n/**\n * Find all packages in the monorepo\n */\nfunction findPackages(rootDir: string): PackageEntry[] {\n const packages: PackageEntry[] = [];\n\n if (!fs.existsSync(rootDir)) {\n return packages;\n }\n\n const entries = fs.readdirSync(rootDir, { withFileTypes: true });\n\n for (const entry of entries) {\n if (!entry.isDirectory() || !entry.name.startsWith('kb-labs-')) {continue;}\n\n const repoPath = path.join(rootDir, entry.name);\n const packagesDir = path.join(repoPath, 'packages');\n\n if (!fs.existsSync(packagesDir)) {continue;}\n\n const packageDirs = fs.readdirSync(packagesDir, { withFileTypes: true });\n\n for (const pkgDir of packageDirs) {\n if (!pkgDir.isDirectory()) {continue;}\n\n const packageJsonPath = path.join(packagesDir, pkgDir.name, 'package.json');\n\n if (fs.existsSync(packageJsonPath)) {\n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));\n packages.push({\n name: packageJson.name || pkgDir.name,\n path: packageJsonPath,\n json: packageJson,\n });\n }\n }\n }\n\n return packages;\n}\n\n/**\n * Get dependency statistics\n */\ninterface DependencyStats {\n totalPackages: number;\n totalDeps: number;\n duplicates: number;\n topUsed: Array<{ name: string; count: number }>;\n}\n\nasync function getDependencyStats(rootDir: string): Promise<DependencyStats> {\n const packages = findPackages(rootDir);\n const allDeps = new Map<string, Set<string>>();\n\n for (const pkg of packages) {\n const deps = {\n ...pkg.json.dependencies,\n ...pkg.json.devDependencies,\n };\n\n for (const [dep, version] of Object.entries(deps)) {\n if (!allDeps.has(dep)) {\n allDeps.set(dep, new Set());\n }\n allDeps.get(dep)!.add(version as string);\n }\n }\n\n const duplicates = Array.from(allDeps.entries())\n .filter(([_, versions]) => versions.size > 1)\n .filter(([dep]) => !dep.startsWith('@kb-labs/'));\n\n const topUsed = Array.from(allDeps.entries())\n .map(([name, versions]) => ({ name, count: versions.size > 1 ? versions.size : 1 }))\n .sort((a, b) => b.count - a.count)\n .slice(0, 10);\n\n return {\n totalPackages: packages.length,\n totalDeps: allDeps.size,\n duplicates: duplicates.length,\n topUsed,\n };\n}\n\n/**\n * Align duplicate dependency versions to most common version\n */\nasync function alignDuplicateVersions(\n packages: PackageEntry[],\n dryRun: boolean\n): Promise<Array<{ dep: string; from: string; to: string; packages: string[] }>> {\n const aligned: Array<{ dep: string; from: string; to: string; packages: string[] }> = [];\n\n const depVersions = new Map<string, Map<string, Set<string>>>();\n\n for (const pkg of packages) {\n const deps = {\n ...pkg.json.dependencies,\n ...pkg.json.devDependencies,\n };\n\n for (const [dep, version] of Object.entries(deps)) {\n if (dep.startsWith('@kb-labs/')) {continue;}\n\n if (!depVersions.has(dep)) {\n depVersions.set(dep, new Map());\n }\n\n const versions = depVersions.get(dep)!;\n if (!versions.has(version as string)) {\n versions.set(version as string, new Set());\n }\n versions.get(version as string)!.add(pkg.name);\n }\n }\n\n for (const [dep, versions] of depVersions.entries()) {\n if (versions.size <= 1) {continue;}\n\n const versionCounts = Array.from(versions.entries()).map(([ver, pkgs]) => ({\n version: ver,\n count: pkgs.size,\n packages: Array.from(pkgs),\n }));\n\n versionCounts.sort((a, b) => b.count - a.count);\n const targetVersion = versionCounts[0]?.version;\n if (!targetVersion) {continue;}\n\n for (const { version, packages: pkgNames } of versionCounts.slice(1)) {\n aligned.push({ dep, from: version, to: targetVersion, packages: pkgNames });\n\n if (!dryRun) {\n for (const pkgName of pkgNames) {\n const pkg = packages.find(p => p.name === pkgName);\n if (!pkg) {continue;}\n\n if (pkg.json.dependencies?.[dep]) {\n pkg.json.dependencies[dep] = targetVersion;\n }\n if (pkg.json.devDependencies?.[dep]) {\n pkg.json.devDependencies[dep] = targetVersion;\n }\n\n fs.writeFileSync(pkg.path, JSON.stringify(pkg.json, null, 2) + '\\n');\n }\n }\n }\n }\n\n return aligned;\n}\n\n/**\n * Add missing workspace dependencies\n */\nasync function addMissingWorkspaceDeps(\n packages: PackageEntry[],\n dryRun: boolean\n): Promise<Array<{ package: string; dep: string; version: string }>> {\n const added: Array<{ package: string; dep: string; version: string }> = [];\n\n const workspacePackages = new Map<string, string>();\n for (const pkg of packages) {\n if (pkg.name.startsWith('@kb-labs/')) {\n workspacePackages.set(pkg.name, 'workspace:*');\n }\n }\n\n for (const pkg of packages) {\n const packageDir = path.dirname(pkg.path);\n const srcDir = path.join(packageDir, 'src');\n\n if (!fs.existsSync(srcDir)) {continue;}\n\n const imports = scanImports(srcDir);\n const currentDeps = {\n ...pkg.json.dependencies,\n ...pkg.json.devDependencies,\n };\n\n for (const imp of imports) {\n if (imp.startsWith('@kb-labs/') && workspacePackages.has(imp) && !currentDeps[imp]) {\n added.push({ package: pkg.name, dep: imp, version: 'workspace:*' });\n\n if (!dryRun) {\n if (!pkg.json.dependencies) {\n pkg.json.dependencies = {};\n }\n pkg.json.dependencies[imp] = 'workspace:*';\n fs.writeFileSync(pkg.path, JSON.stringify(pkg.json, null, 2) + '\\n');\n }\n }\n }\n }\n\n return added;\n}\n\n/**\n * Remove unused dependencies\n */\nasync function removeUnusedDeps(\n packages: PackageEntry[],\n dryRun: boolean\n): Promise<Array<{ package: string; dep: string }>> {\n const removed: Array<{ package: string; dep: string }> = [];\n\n for (const pkg of packages) {\n const packageDir = path.dirname(pkg.path);\n const srcDir = path.join(packageDir, 'src');\n\n if (!fs.existsSync(srcDir)) {continue;}\n\n const imports = new Set(scanImports(srcDir));\n\n const deps = {\n ...pkg.json.dependencies,\n ...pkg.json.devDependencies,\n };\n\n for (const dep of Object.keys(deps)) {\n if (isProtectedDep(dep)) {continue;}\n\n if (!imports.has(dep)) {\n removed.push({ package: pkg.name, dep });\n\n if (!dryRun) {\n delete pkg.json.dependencies?.[dep];\n delete pkg.json.devDependencies?.[dep];\n fs.writeFileSync(pkg.path, JSON.stringify(pkg.json, null, 2) + '\\n');\n }\n }\n }\n }\n\n return removed;\n}\n\n/**\n * Scan directory for imports\n */\nfunction scanImports(dir: string): string[] {\n const imports: string[] = [];\n\n function walk(currentDir: string) {\n const entries = fs.readdirSync(currentDir, { withFileTypes: true });\n\n for (const entry of entries) {\n const fullPath = path.join(currentDir, entry.name);\n\n if (entry.isDirectory()) {\n walk(fullPath);\n } else if (entry.isFile() && /\\.(ts|tsx|js|jsx)$/.test(entry.name)) {\n const content = fs.readFileSync(fullPath, 'utf-8');\n\n const importRegex = /(?:import|require)\\s*\\(?['\"]([^'\"]+)['\"]\\)?/g;\n let match;\n while ((match = importRegex.exec(content)) !== null) {\n const imp = match[1];\n if (!imp) {continue;}\n const pkgName = imp.startsWith('@') ? imp.split('/').slice(0, 2).join('/') : imp.split('/')[0];\n if (pkgName) {\n imports.push(pkgName);\n }\n }\n }\n }\n }\n\n walk(dir);\n return Array.from(new Set(imports));\n}\n\n/**\n * Check if dependency is protected (build tools, etc.)\n */\nfunction isProtectedDep(dep: string): boolean {\n const protectedDeps = [\n 'typescript', 'tsup', 'esbuild', 'vite', 'rollup', 'rimraf',\n 'vitest', 'jest', 'playwright', 'eslint', 'prettier',\n ];\n\n return protectedDeps.some(p => dep === p || dep.startsWith(`${p}-`) || dep.startsWith(`@${p}/`));\n}\n\n/**\n * Output dependency statistics\n */\nfunction outputStats(stats: DependencyStats, flags: FixDepsFlags, ui: UIFacade | undefined) {\n if (flags.json) {\n ui?.json?.(stats);\n return;\n }\n\n const sections: Array<{ header: string; items: string[] }> = [];\n\n sections.push({\n header: 'Overview',\n items: [\n `Total Packages: ${stats.totalPackages}`,\n `Total Dependencies: ${stats.totalDeps}`,\n `Duplicate Versions: ${stats.duplicates}`,\n ],\n });\n\n if (stats.topUsed.length > 0) {\n sections.push({\n header: 'Top 10 Most Used',\n items: stats.topUsed.map((d) => `${d.name} (${d.count} packages)`),\n });\n }\n\n ui?.success?.('Dependency statistics', {\n title: 'Dependency Statistics',\n sections,\n });\n}\n\n/**\n * Output fix results\n */\nfunction outputResults(result: FixResult & { dryRun: boolean }, flags: FixDepsFlags, ui: UIFacade | undefined) {\n if (flags.json) {\n ui?.json?.(result);\n return;\n }\n\n const sections: Array<{ header: string; items: string[] }> = [];\n\n sections.push({\n header: 'Summary',\n items: [`Packages Scanned: ${result.packagesScanned}`],\n });\n\n if (result.alignedDeps.length > 0) {\n const items = result.alignedDeps\n .slice(0, 10)\n .map(a => `${a.dep}: ${a.from} β ${a.to} (${a.packages.length} packages)`);\n if (result.alignedDeps.length > 10) {\n items.push(`... and ${result.alignedDeps.length - 10} more`);\n }\n sections.push({ header: 'Aligned Versions', items });\n }\n\n if (result.addedDeps.length > 0) {\n const items = result.addedDeps.slice(0, 10).map(a => `${a.package}: +${a.dep}`);\n if (result.addedDeps.length > 10) {\n items.push(`... and ${result.addedDeps.length - 10} more`);\n }\n sections.push({ header: 'Added Dependencies', items });\n }\n\n if (result.removedDeps.length > 0) {\n const items = result.removedDeps.slice(0, 10).map(r => `${r.package}: -${r.dep}`);\n if (result.removedDeps.length > 10) {\n items.push(`... and ${result.removedDeps.length - 10} more`);\n }\n sections.push({ header: 'Removed Dependencies', items });\n }\n\n if (result.alignedDeps.length === 0 && result.addedDeps.length === 0 && result.removedDeps.length === 0) {\n sections.push({ header: 'Result', items: ['No issues found!'] });\n }\n\n ui?.success?.('Dependency fix completed', {\n title: 'Dependency Fix Complete',\n sections,\n });\n}\n","import {\n defineCommand,\n useConfig,\n type CLIInput,\n type PluginContextV3,\n type CommandResult,\n} from '@kb-labs/sdk';\nimport {\n analyzeLayering,\n analyzeCoupling,\n runKnip,\n analyzeTypes,\n calculateHealth,\n} from '@kb-labs/quality-core';\nimport { CACHE_KEYS, CACHE_TTLS, defaultQualityConfig, type QualityPluginConfig, type HealthScore, type KnipReport } from '@kb-labs/quality-contracts';\nimport type { HealthFlags } from './flags.js';\n\nexport default defineCommand<unknown, CLIInput<HealthFlags>, unknown>({\n id: 'quality:health',\n description: 'Multidimensional health score: architecture, TypeScript, dead code, dependencies',\n\n handler: {\n async execute(ctx: PluginContextV3, input: CLIInput<HealthFlags>): Promise<CommandResult> {\n const { flags } = input;\n const config = await useConfig<QualityPluginConfig>();\n const cwd = ctx.cwd ?? process.cwd();\n const cfg = config ?? defaultQualityConfig;\n\n const cached = await ctx.platform.cache.get(CACHE_KEYS.HEALTH);\n if (cached && !flags.refresh) {\n const health = cached as HealthScore;\n outputHealth(health, flags, ctx);\n return health.score < cfg.thresholds.health\n ? { ok: false, error: 'Health score is below threshold', result: health }\n : { ok: true, result: health };\n }\n\n const [layering, types] = await Promise.all([\n analyzeLayering({ rootDir: cwd, layerMap: cfg.layers }),\n analyzeTypes(cwd),\n ]);\n\n const coupling = analyzeCoupling({ rootDir: cwd, layerMap: cfg.layers });\n\n let knip: KnipReport = { unusedFiles: [], unusedExports: [], unusedDependencies: [], unlistedDependencies: [], totalIssues: 0 };\n if (cfg.knip.enabled) {\n knip = await runKnip({ shell: ctx.api.shell, rootDir: cwd });\n }\n\n const health = calculateHealth({\n layering,\n coupling,\n types,\n knip,\n totalPackages: coupling.packages.length,\n avgTestCoverage: null,\n thresholds: cfg.thresholds,\n });\n\n await ctx.platform.cache.set(CACHE_KEYS.HEALTH, health, CACHE_TTLS.FAST);\n\n outputHealth(health, flags, ctx);\n return health.score < cfg.thresholds.health\n ? { ok: false, error: 'Health score is below threshold', result: health }\n : { ok: true, result: health };\n },\n },\n});\n\nfunction outputHealth(health: Awaited<ReturnType<typeof calculateHealth>>, flags: { json?: boolean; detailed?: boolean }, ctx: PluginContextV3) {\n if (flags.json) {\n ctx.ui?.json?.(health);\n return;\n }\n\n const dimItems = Object.entries(health.dimensions).map(([key, dim]) => {\n const details = dim.details.length > 0 ? `: ${dim.details.join(', ')}` : '';\n return `${key} ${dim.score}/100 (${dim.grade})${details}`;\n });\n\n ctx.ui?.success?.(`Health score: ${health.score}/100 (${health.grade})`, {\n sections: [{ header: 'Dimensions', items: dimItems }],\n });\n}\n","import {\n defineCommand,\n useConfig,\n type CLIInput,\n type PluginContextV3,\n type CommandResult,\n} from '@kb-labs/sdk';\nimport { QualitySnapshotStore } from '@kb-labs/quality-core';\nimport { defaultQualityConfig, type QualityPluginConfig } from '@kb-labs/quality-contracts';\nimport type { HistoryFlags } from './flags.js';\n\nexport default defineCommand<unknown, CLIInput<HistoryFlags>, unknown>({\n id: 'quality:history',\n description: 'Show quality snapshot history and trends',\n\n handler: {\n async execute(ctx: PluginContextV3, input: CLIInput<HistoryFlags>): Promise<CommandResult> {\n const { flags } = input;\n const config = await useConfig<QualityPluginConfig>();\n const cwd = ctx.cwd ?? process.cwd();\n\n const store = new QualitySnapshotStore(cwd, config?.maxSnapshots ?? defaultQualityConfig.maxSnapshots);\n const { snapshots, delta, latest } = store.history();\n\n if (snapshots.length === 0) {\n ctx.ui?.success?.('No snapshots yet. Run `kb quality snapshot` first.');\n return { ok: true };\n }\n\n const limit = flags.limit ?? 10;\n const recent = snapshots.slice(-limit).reverse();\n\n if (flags.json) {\n ctx.ui?.json?.({ snapshots: recent, delta, latest });\n return { ok: true };\n }\n\n const items = recent.map(s => {\n const date = new Date(s.timestamp).toLocaleString();\n const branch = s.git.branch ? ` [${s.git.branch}]` : '';\n return `${date}${branch} β ${s.score}/100 (${s.grade}) violations: ${s.counters.layeringViolations} any: ${s.counters.anyCount}`;\n });\n\n const sections: Array<{ header: string; items: string[] }> = [\n { header: `Last ${recent.length} snapshots`, items },\n ];\n\n if (delta) {\n const sign = (n: number) => (n > 0 ? `+${n}` : `${n}`);\n sections.push({\n header: 'Delta vs previous snapshot',\n items: [\n `Score: ${sign(delta.score)}`,\n `Layering violations: ${sign(delta.layeringViolations)}`,\n `Any count: ${sign(delta.anyCount)}`,\n `Unused files: ${sign(delta.unusedFiles)}`,\n `Avg instability: ${sign(delta.avgInstability)}`,\n ],\n });\n }\n\n ctx.ui?.success?.(`Quality history (${recent.length} snapshots)`, { sections });\n return { ok: true };\n },\n },\n});\n","import {\n defineCommand,\n useConfig,\n type CLIInput,\n type PluginContextV3,\n type CommandResult,\n} from '@kb-labs/sdk';\nimport {\n analyzeLayering,\n analyzeCoupling,\n runKnip,\n analyzeTypes,\n QualitySnapshotStore,\n} from '@kb-labs/quality-core';\nimport { calculateHealth } from '@kb-labs/quality-core';\nimport { defaultQualityConfig, type QualityPluginConfig, type KnipReport } from '@kb-labs/quality-contracts';\nimport type { SnapshotFlags } from './flags.js';\nimport type { ShellAPI } from '@kb-labs/sdk';\n\nasync function captureGit(shell: ShellAPI, cwd: string) {\n try {\n const [c, b, m] = await Promise.all([\n shell.exec('git', ['rev-parse', '--short', 'HEAD'], { cwd, throwOnError: false }),\n shell.exec('git', ['rev-parse', '--abbrev-ref', 'HEAD'], { cwd, throwOnError: false }),\n shell.exec('git', ['log', '-1', '--format=%s'], { cwd, throwOnError: false }),\n ]);\n if (!c.ok) return undefined;\n return { commit: c.stdout.trim(), branch: b.stdout.trim() || 'HEAD', message: m.stdout.trim() };\n } catch {\n return undefined;\n }\n}\n\nexport default defineCommand<unknown, CLIInput<SnapshotFlags>, unknown>({\n id: 'quality:snapshot',\n description: 'Collect all quality metrics and save a snapshot for trend tracking',\n\n handler: {\n async intent(_ctx: PluginContextV3, _input: CLIInput<SnapshotFlags>) {\n return {\n summary: 'Collect all quality metrics and save snapshot for trend tracking',\n operations: [\n { type: 'create' as const, resource: 'file', details: { path: '.kb/quality/snapshots/<timestamp>.json' } },\n ],\n };\n },\n\n async execute(ctx: PluginContextV3, input: CLIInput<SnapshotFlags>): Promise<CommandResult> {\n const { flags } = input;\n const config = await useConfig<QualityPluginConfig>();\n const cwd = ctx.cwd ?? process.cwd();\n const cfg = config ?? defaultQualityConfig;\n\n ctx.ui?.success?.('Collecting quality metricsβ¦');\n\n const [layering, coupling, types, git] = await Promise.all([\n analyzeLayering({ rootDir: cwd, layerMap: cfg.layers }),\n Promise.resolve(analyzeCoupling({ rootDir: cwd, layerMap: cfg.layers })),\n analyzeTypes(cwd),\n captureGit(ctx.api.shell, cwd),\n ]);\n\n let knip: KnipReport = { unusedFiles: [], unusedExports: [], unusedDependencies: [], unlistedDependencies: [], totalIssues: 0 };\n if (cfg.knip.enabled) {\n knip = await runKnip({ shell: ctx.api.shell, rootDir: cwd });\n }\n\n const totalPackages = coupling.packages.length;\n const health = calculateHealth({\n layering,\n coupling,\n types,\n knip,\n totalPackages,\n avgTestCoverage: null,\n thresholds: cfg.thresholds,\n });\n\n const store = new QualitySnapshotStore(cwd, cfg.maxSnapshots);\n const snap = store.save({\n score: health.score,\n grade: health.grade,\n dimensions: health.dimensions,\n counters: {\n layeringViolations: layering.totalViolations,\n avgInstability: coupling.avgInstability,\n anyCount: types.packages.reduce((s: number, p: { anyCount: number }) => s + p.anyCount, 0),\n tsIgnoreCount: types.packages.reduce((s: number, p: { tsIgnoreCount: number }) => s + p.tsIgnoreCount, 0),\n unusedFiles: knip.unusedFiles.length,\n unusedDeps: knip.unusedDependencies.length,\n },\n git: git ?? { commit: '', branch: '', message: '' },\n });\n\n if (flags.json) {\n ctx.ui?.json?.(snap);\n } else {\n ctx.ui?.success?.(`Snapshot saved: score ${snap.score}/100 (${snap.grade})`, {\n sections: [{\n header: 'Dimensions',\n items: Object.entries(snap.dimensions).map(\n ([k, d]) => `${k} ${d.score}/100 (${d.grade})`\n ),\n }],\n });\n }\n\n return { ok: true };\n },\n },\n});\n","import {\n defineCommand,\n type CLIInput,\n type PluginContextV3,\n type CommandResult,\n} from '@kb-labs/sdk';\nimport { calculateStats } from '@kb-labs/quality-core';\nimport type { StatsFlags } from './flags.js';\n\nexport default defineCommand<unknown, CLIInput<StatsFlags>, unknown>({\n id: 'quality:stats',\n description: 'Monorepo statistics: packages, lines of code, size',\n\n handler: {\n async execute(ctx: PluginContextV3, input: CLIInput<StatsFlags>): Promise<CommandResult> {\n const { flags } = input;\n const cwd = ctx.cwd ?? process.cwd();\n\n const stats = await calculateStats(cwd);\n\n if (flags.json) {\n ctx.ui?.json?.(stats);\n return { ok: true };\n }\n\n ctx.ui?.success?.('Monorepo statistics', {\n sections: [{\n header: 'Overview',\n items: [\n `Packages: ${stats.packages}`,\n `Lines of code: ${stats.loc.toLocaleString()}`,\n `Size: ${stats.sizeFormatted}`,\n ],\n }],\n });\n\n return { ok: true };\n },\n },\n});\n","/**\n * quality:visualize - Visualize dependency graph\n *\n * Shows dependency graph in various formats:\n * - Tree view for specific package\n * - DOT format for graphviz\n * - Statistics about the graph\n */\n\nimport { defineCommand, type PluginContextV3, type CommandResult } from '@kb-labs/sdk';\nimport type { UIFacade } from '@kb-labs/sdk';\nimport {\n buildDependencyGraph,\n getReverseDependencies,\n getImpactAnalysis,\n type DependencyGraph,\n} from '@kb-labs/quality-core/graph';\n\ntype VisualizeFlags = {\n package?: string;\n tree?: boolean;\n dot?: boolean;\n stats?: boolean;\n reverse?: boolean;\n impact?: boolean;\n json?: boolean;\n argv?: string[];\n};\n\ntype VisualizeInput = VisualizeFlags & { argv?: string[] };\n\nexport default defineCommand({\n id: 'quality:visualize',\n description: 'Visualize dependency graph',\n\n handler: {\n async execute(ctx: PluginContextV3, input: VisualizeInput): Promise<CommandResult<{ graph: DependencyGraph }>> {\n const { ui } = ctx;\n\n // V3: Flags may come wrapped in input.flags or passed directly\n const flags = ('flags' in input && typeof (input as { flags?: unknown }).flags === 'object' && (input as { flags?: unknown }).flags !== null)\n ? (input as { flags: VisualizeInput }).flags\n : input;\n\n // Build dependency graph\n const graph = buildDependencyGraph(ctx.cwd);\n\n // Handle different output modes\n if (flags.dot) {\n outputDot(graph, flags, ui);\n } else if (flags.tree && flags.package) {\n outputTree(graph, flags.package, flags, ui);\n } else if (flags.reverse && flags.package) {\n outputReverse(graph, flags.package, flags, ui);\n } else if (flags.impact && flags.package) {\n outputImpact(graph, flags.package, flags, ui);\n } else if (flags.stats) {\n outputStats(graph, flags, ui);\n } else {\n // Default: show stats\n outputStats(graph, flags, ui);\n }\n\n return { ok: true, result: { graph } };\n },\n },\n});\n\n/**\n * Output dependency tree for a package\n */\nfunction outputTree(graph: DependencyGraph, packageName: string, flags: VisualizeFlags, ui: UIFacade | undefined) {\n const { nodes } = graph;\n const node = nodes.get(packageName);\n\n if (!node) {\n ui?.error?.(`Package not found: ${packageName}`);\n return;\n }\n\n const sections: Array<{ header: string; items: string[] }> = [];\n\n // Build tree recursively\n const visited = new Set<string>();\n const treeItems: string[] = [];\n\n function buildTree(pkg: string, depth: number, prefix: string) {\n if (visited.has(pkg)) {\n treeItems.push(`${prefix}${pkg} (circular)`);\n return;\n }\n visited.add(pkg);\n\n const pkgNode = nodes.get(pkg);\n if (!pkgNode) {return;}\n\n treeItems.push(`${prefix}${pkg}`);\n\n const deps = Array.from(pkgNode.deps);\n for (let i = 0; i < deps.length; i++) {\n const dep = deps[i];\n if (!dep) {continue;}\n const isLast = i === deps.length - 1;\n const newPrefix = prefix + (isLast ? ' ββ ' : ' ββ ');\n buildTree(dep, depth + 1, newPrefix);\n }\n }\n\n buildTree(packageName, 0, '');\n\n sections.push({\n header: 'Dependency Tree',\n items: treeItems,\n });\n\n ui?.success?.('Dependency tree generated', {\n title: `π¦ Dependency Tree for ${packageName}`,\n sections,\n });\n}\n\n/**\n * Output reverse dependencies (who depends on this package)\n */\nfunction outputReverse(graph: DependencyGraph, packageName: string, flags: VisualizeFlags, ui: UIFacade | undefined) {\n const reverseDeps = getReverseDependencies(graph, packageName);\n\n if (flags.json) {\n ui?.json?.({ package: packageName, reverseDependencies: Array.from(reverseDeps) });\n return;\n }\n\n const sections: Array<{ header: string; items: string[] }> = [];\n\n if (reverseDeps.size === 0) {\n sections.push({\n header: 'Result',\n items: ['No packages depend on this package'],\n });\n } else {\n sections.push({\n header: `Packages that depend on ${packageName}`,\n items: Array.from(reverseDeps).map(dep => `β’ ${dep}`),\n });\n }\n\n ui?.success?.('Reverse dependencies found', {\n title: `β¬
οΈ Reverse Dependencies for ${packageName}`,\n sections,\n });\n}\n\n/**\n * Output impact analysis (all packages affected by changes)\n */\nfunction outputImpact(graph: DependencyGraph, packageName: string, flags: VisualizeFlags, ui: UIFacade | undefined) {\n const affected = getImpactAnalysis(graph, packageName);\n\n if (flags.json) {\n ui?.json?.({ package: packageName, affectedPackages: Array.from(affected) });\n return;\n }\n\n const sections: Array<{ header: string; items: string[] }> = [];\n\n if (affected.size === 0) {\n sections.push({\n header: 'Result',\n items: ['No other packages affected by changes to this package'],\n });\n } else {\n sections.push({\n header: `Impact Analysis for ${packageName}`,\n items: [\n `Changes to this package will affect ${affected.size} other packages:`,\n '',\n ...Array.from(affected).map(dep => `β’ ${dep}`),\n ],\n });\n\n sections.push({\n header: 'Recommendations',\n items: [\n 'π§ͺ Run tests in affected packages',\n 'π¨ Rebuild affected packages',\n 'π Update documentation if API changed',\n ],\n });\n }\n\n ui?.success?.('Impact analysis completed', {\n title: `π₯ Impact Analysis for ${packageName}`,\n sections,\n });\n}\n\n/**\n * Output dependency graph statistics\n */\nfunction outputStats(graph: DependencyGraph, flags: VisualizeFlags, ui: UIFacade | undefined) {\n const { nodes } = graph;\n\n // Calculate statistics\n let totalDeps = 0;\n let maxDeps = 0;\n let maxDepsPackage = '';\n const depCounts = new Map<number, number>();\n\n for (const [name, node] of nodes) {\n const depCount = node.deps.size;\n totalDeps += depCount;\n\n if (depCount > maxDeps) {\n maxDeps = depCount;\n maxDepsPackage = name;\n }\n\n depCounts.set(depCount, (depCounts.get(depCount) ?? 0) + 1);\n }\n\n const avgDeps = nodes.size > 0 ? (totalDeps / nodes.size).toFixed(2) : '0';\n\n if (flags.json) {\n ui?.json?.({\n totalPackages: nodes.size,\n totalDependencies: totalDeps,\n averageDependencies: Number.parseFloat(avgDeps),\n maxDependencies: maxDeps,\n maxDependenciesPackage: maxDepsPackage,\n });\n return;\n }\n\n const sections: Array<{ header: string; items: string[] }> = [];\n\n sections.push({\n header: 'Graph Statistics',\n items: [\n `Total packages: ${nodes.size}`,\n `Total dependencies: ${totalDeps}`,\n `Average dependencies per package: ${avgDeps}`,\n `Max dependencies: ${maxDeps} (${maxDepsPackage})`,\n ],\n });\n\n // Dependency distribution\n const distributionItems: string[] = [];\n const sortedCounts = Array.from(depCounts.entries()).sort((a, b) => a[0] - b[0]);\n for (const [count, packages] of sortedCounts) {\n const bar = 'β'.repeat(Math.min(packages, 20));\n distributionItems.push(`${count} deps: ${bar} ${packages} packages`);\n }\n\n sections.push({\n header: 'Dependency Distribution',\n items: distributionItems,\n });\n\n ui?.success?.('Graph statistics calculated', {\n title: 'π Dependency Graph Statistics',\n sections,\n });\n}\n\n/**\n * Output DOT format for graphviz\n */\nfunction outputDot(graph: DependencyGraph, flags: VisualizeFlags, ui: UIFacade | undefined) {\n const { nodes } = graph;\n\n const lines: string[] = [];\n lines.push('digraph dependencies {');\n lines.push(' rankdir=LR;');\n lines.push(' node [shape=box];');\n lines.push('');\n\n for (const [name, node] of nodes) {\n for (const dep of node.deps) {\n const safeName = name.replace(/[@\\/]/g, '_');\n const safeDep = dep.replace(/[@\\/]/g, '_');\n lines.push(` \"${safeName}\" -> \"${safeDep}\";`);\n }\n }\n\n lines.push('}');\n\n if (flags.json) {\n ui?.json?.({ dot: lines.join('\\n') });\n } else {\n for (const line of lines) {\n ui?.write?.(line);\n }\n ui?.write?.('');\n ui?.write?.('# Save to file and visualize with:');\n ui?.write?.('# dot -Tpng dependencies.dot -o dependencies.png');\n }\n}\n"]}
|
|
@@ -2,8 +2,6 @@ import * as _kb_labs_shared_command_kit from '@kb-labs/shared-command-kit';
|
|
|
2
2
|
import { CLIInput } from '@kb-labs/sdk';
|
|
3
3
|
import { SnapshotFlags } from './flags.js';
|
|
4
4
|
|
|
5
|
-
declare const _default: _kb_labs_shared_command_kit.CommandHandlerV3<unknown, CLIInput<SnapshotFlags>,
|
|
6
|
-
exitCode: number;
|
|
7
|
-
}>;
|
|
5
|
+
declare const _default: _kb_labs_shared_command_kit.CommandHandlerV3<unknown, CLIInput<SnapshotFlags>, unknown>;
|
|
8
6
|
|
|
9
7
|
export { _default as default };
|