@kb-labs/quality-entry 2.94.0 → 2.96.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/commands/build-order.d.ts +5 -12
- package/dist/cli/commands/build-order.js +45 -97
- package/dist/cli/commands/build-order.js.map +1 -1
- package/dist/cli/commands/check-layers.d.ts +9 -0
- package/dist/cli/commands/check-layers.js +48 -0
- package/dist/cli/commands/check-layers.js.map +1 -0
- package/dist/cli/commands/context.d.ts +9 -0
- package/dist/cli/commands/context.js +94 -0
- package/dist/cli/commands/context.js.map +1 -0
- package/dist/cli/commands/coupling.d.ts +9 -0
- package/dist/cli/commands/coupling.js +35 -0
- package/dist/cli/commands/coupling.js.map +1 -0
- package/dist/cli/commands/dead-code.d.ts +4 -5
- package/dist/cli/commands/dead-code.js +41 -197
- package/dist/cli/commands/dead-code.js.map +1 -1
- package/dist/cli/commands/fix-deps.d.ts +2 -5
- package/dist/cli/commands/fix-deps.js +74 -83
- package/dist/cli/commands/fix-deps.js.map +1 -1
- package/dist/cli/commands/flags.d.ts +115 -1
- package/dist/cli/commands/flags.js +46 -1
- package/dist/cli/commands/flags.js.map +1 -1
- package/dist/cli/commands/gate.d.ts +9 -0
- package/dist/cli/commands/gate.js +59 -0
- package/dist/cli/commands/gate.js.map +1 -0
- package/dist/cli/commands/health.d.ts +4 -5
- package/dist/cli/commands/health.js +42 -191
- package/dist/cli/commands/health.js.map +1 -1
- package/dist/cli/commands/history.d.ts +9 -0
- package/dist/cli/commands/history.js +55 -0
- package/dist/cli/commands/history.js.map +1 -0
- package/dist/cli/commands/index.d.ts +6 -2
- package/dist/cli/commands/index.js +411 -828
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/snapshot.d.ts +9 -0
- package/dist/cli/commands/snapshot.js +91 -0
- package/dist/cli/commands/snapshot.js.map +1 -0
- package/dist/cli/commands/stats.d.ts +4 -5
- package/dist/cli/commands/stats.js +17 -265
- package/dist/cli/commands/stats.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +198 -306
- package/dist/index.js.map +1 -1
- package/dist/manifest.d.ts +95 -82
- package/dist/manifest.js +198 -306
- package/dist/manifest.js.map +1 -1
- package/dist/rest/handlers/build-order-handler.d.ts +5 -13
- package/dist/rest/handlers/build-order-handler.js +14 -17
- package/dist/rest/handlers/build-order-handler.js.map +1 -1
- package/dist/rest/handlers/builds-handler.js +10 -6
- package/dist/rest/handlers/builds-handler.js.map +1 -1
- package/dist/rest/handlers/coupling-handler.d.ts +8 -0
- package/dist/rest/handlers/coupling-handler.js +28 -0
- package/dist/rest/handlers/coupling-handler.js.map +1 -0
- package/dist/rest/handlers/cycles-handler.js +16 -12
- package/dist/rest/handlers/cycles-handler.js.map +1 -1
- package/dist/rest/handlers/dependencies-handler.js +12 -8
- package/dist/rest/handlers/dependencies-handler.js.map +1 -1
- package/dist/rest/handlers/graph-handler.js +77 -73
- package/dist/rest/handlers/graph-handler.js.map +1 -1
- package/dist/rest/handlers/health-handler.d.ts +4 -11
- package/dist/rest/handlers/health-handler.js +35 -9
- package/dist/rest/handlers/health-handler.js.map +1 -1
- package/dist/rest/handlers/history-handler.d.ts +7 -0
- package/dist/rest/handlers/history-handler.js +21 -0
- package/dist/rest/handlers/history-handler.js.map +1 -0
- package/dist/rest/handlers/knip-handler.d.ts +8 -0
- package/dist/rest/handlers/knip-handler.js +31 -0
- package/dist/rest/handlers/knip-handler.js.map +1 -0
- package/dist/rest/handlers/layers-handler.d.ts +8 -0
- package/dist/rest/handlers/layers-handler.js +28 -0
- package/dist/rest/handlers/layers-handler.js.map +1 -0
- package/dist/rest/handlers/snapshot-handler.d.ts +7 -0
- package/dist/rest/handlers/snapshot-handler.js +67 -0
- package/dist/rest/handlers/snapshot-handler.js.map +1 -0
- package/dist/rest/handlers/stale-handler.js +13 -9
- package/dist/rest/handlers/stale-handler.js.map +1 -1
- package/dist/rest/handlers/stats-handler.d.ts +4 -9
- package/dist/rest/handlers/stats-handler.js +22 -18
- package/dist/rest/handlers/stats-handler.js.map +1 -1
- package/dist/rest/handlers/tests-handler.js +12 -8
- package/dist/rest/handlers/tests-handler.js.map +1 -1
- package/dist/rest/handlers/types-handler.js +10 -6
- package/dist/rest/handlers/types-handler.js.map +1 -1
- package/dist/widgets/117.js +24 -1
- package/dist/widgets/117.js.map +1 -1
- package/dist/widgets/370.js +1 -1
- package/dist/widgets/370.js.map +1 -1
- package/dist/widgets/62.js +97 -0
- package/dist/widgets/62.js.map +1 -0
- package/dist/widgets/__federation_expose_QualityOverview.js +1 -1
- package/dist/widgets/__federation_expose_QualityOverview.js.map +1 -1
- package/dist/widgets/mf-manifest.json +27 -27
- package/dist/widgets/mf-stats.json +27 -27
- package/dist/widgets/remoteEntry.js +2 -2
- package/dist/widgets/remoteEntry.js.map +1 -1
- package/package.json +9 -8
- package/dist/widgets/418.js +0 -39
- package/dist/widgets/418.js.map +0 -1
package/dist/manifest.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli/commands/flags.ts","../src/manifest.ts"],"names":[],"mappings":"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","file":"manifest.js","sourcesContent":["/**\n * Shared command flags definitions\n *\n * DRY pattern: Define flags once, use in both manifest and command handlers.\n */\n\n/**\n * Flags for quality:stats command\n */\nexport const statsFlags = {\n json: {\n type: 'boolean',\n description: 'Output JSON format',\n default: false,\n },\n md: {\n type: 'boolean',\n description: 'Output Markdown table',\n default: false,\n },\n health: {\n type: 'boolean',\n description: 'Show health score',\n default: false,\n },\n refresh: {\n type: 'boolean',\n description: 'Bypass cache and recalculate',\n default: false,\n },\n} as const;\n\n/** Parsed value type for StatsFlags */\nexport type StatsFlags = {\n json?: boolean;\n md?: boolean;\n health?: boolean;\n refresh?: boolean;\n};\n\n/**\n * Flags for quality:health command\n */\nexport const healthFlags = {\n json: {\n type: 'boolean',\n description: 'Output JSON format',\n default: false,\n },\n package: {\n type: 'string',\n description: 'Check health for specific package',\n alias: 'p',\n },\n detailed: {\n type: 'boolean',\n description: 'Show detailed breakdown',\n default: false,\n alias: 'd',\n },\n} as const;\n\n/** Parsed value type for HealthFlags */\nexport type HealthFlags = {\n json?: boolean;\n package?: string;\n detailed?: boolean;\n};\n\n/**\n * Flags for quality:fix-deps command\n */\nexport const fixDepsFlags = {\n 'dry-run': {\n type: 'boolean',\n description: 'Preview changes without applying them',\n default: false,\n },\n 'remove-unused': {\n type: 'boolean',\n description: 'Remove unused dependencies',\n default: false,\n },\n 'add-missing': {\n type: 'boolean',\n description: 'Add missing workspace dependencies',\n default: false,\n },\n 'align-versions': {\n type: 'boolean',\n description: 'Align duplicate dependency versions',\n default: false,\n },\n all: {\n type: 'boolean',\n description: 'Apply all fixes (remove-unused + add-missing + align-versions)',\n default: false,\n },\n stats: {\n type: 'boolean',\n description: 'Show dependency statistics',\n default: false,\n },\n json: {\n type: 'boolean',\n description: 'Output JSON format',\n default: false,\n },\n} as const;\n\n/** Parsed value type for FixDepsFlags */\nexport type FixDepsFlags = {\n 'dry-run'?: boolean;\n 'remove-unused'?: boolean;\n 'add-missing'?: boolean;\n 'align-versions'?: boolean;\n all?: boolean;\n stats?: boolean;\n json?: boolean;\n};\n\n/**\n * Flags for quality:run command\n */\nexport const runFlags = {\n script: {\n type: 'string',\n description: 'Script to run (build, test, type-check, lint)',\n required: true,\n },\n 'continue-on-error': {\n type: 'boolean',\n description: 'Continue even if packages fail',\n default: true,\n },\n parallel: {\n type: 'boolean',\n description: 'Run in parallel (respects dependencies)',\n default: false,\n },\n filter: {\n type: 'string',\n description: 'Filter packages by pattern (@kb-labs/*)',\n },\n json: {\n type: 'boolean',\n description: 'Output JSON format',\n default: false,\n },\n verbose: {\n type: 'boolean',\n description: 'Show full output for each package',\n default: false,\n alias: 'v',\n },\n} as const;\n\n/** Parsed value type for RunFlags */\nexport type RunFlags = {\n script?: string;\n 'continue-on-error'?: boolean;\n parallel?: boolean;\n filter?: string;\n json?: boolean;\n verbose?: boolean;\n};\n\n/**\n * Flags for quality:build-order command\n */\nexport const buildOrderFlags = {\n package: {\n type: 'string',\n description: 'Calculate build order for specific package',\n alias: 'p',\n },\n layers: {\n type: 'boolean',\n description: 'Show build layers (parallel groups)',\n default: false,\n },\n script: {\n type: 'boolean',\n description: 'Output as shell script',\n default: false,\n },\n json: {\n type: 'boolean',\n description: 'Output JSON format',\n default: false,\n },\n} as const;\n\n/** Parsed value type for BuildOrderFlags */\nexport type BuildOrderFlags = {\n package?: string;\n layers?: boolean;\n script?: boolean;\n json?: boolean;\n};\n\n/**\n * Flags for quality:cycles command\n */\nexport const cyclesFlags = {\n json: {\n type: 'boolean',\n description: 'Output JSON format',\n default: false,\n },\n} as const;\n\n/** Parsed value type for CyclesFlags */\nexport type CyclesFlags = {\n json?: boolean;\n};\n\n/**\n * Flags for quality:visualize command\n */\nexport const visualizeFlags = {\n package: {\n type: 'string',\n description: 'Focus on specific package',\n alias: 'p',\n },\n tree: {\n type: 'boolean',\n description: 'Show dependency tree',\n default: false,\n },\n dot: {\n type: 'boolean',\n description: 'Output DOT format for graphviz',\n default: false,\n },\n stats: {\n type: 'boolean',\n description: 'Show graph statistics',\n default: false,\n },\n reverse: {\n type: 'boolean',\n description: 'Show reverse dependencies (who depends on this)',\n default: false,\n },\n impact: {\n type: 'boolean',\n description: 'Show impact analysis (what will be affected)',\n default: false,\n },\n json: {\n type: 'boolean',\n description: 'Output JSON format',\n default: false,\n },\n} as const;\n\n/** Parsed value type for VisualizeFlags */\nexport type VisualizeFlags = {\n package?: string;\n tree?: boolean;\n dot?: boolean;\n stats?: boolean;\n reverse?: boolean;\n impact?: boolean;\n json?: boolean;\n};\n\n/**\n * Flags for quality:check-builds command\n */\nexport const checkBuildsFlags = {\n package: {\n type: 'string',\n description: 'Check builds for specific package',\n alias: 'p',\n },\n timeout: {\n type: 'number',\n description: 'Timeout per package in milliseconds',\n default: 30000,\n },\n json: {\n type: 'boolean',\n description: 'Output JSON format',\n default: false,\n },\n refresh: {\n type: 'boolean',\n description: 'Bypass cache and check fresh',\n default: false,\n },\n} as const;\n\n/** Parsed value type for CheckBuildsFlags */\nexport type CheckBuildsFlags = {\n package?: string;\n timeout?: number;\n json?: boolean;\n refresh?: boolean;\n};\n\n/**\n * Flags for quality:check-types command\n */\nexport const checkTypesFlags = {\n package: {\n type: 'string',\n description: 'Analyze types for specific package',\n alias: 'p',\n },\n 'errors-only': {\n type: 'boolean',\n description: 'Show only packages with errors',\n default: false,\n },\n json: {\n type: 'boolean',\n description: 'Output JSON format',\n default: false,\n },\n refresh: {\n type: 'boolean',\n description: 'Bypass cache and analyze fresh',\n default: false,\n },\n} as const;\n\n/** Parsed value type for CheckTypesFlags */\nexport type CheckTypesFlags = {\n package?: string;\n 'errors-only'?: boolean;\n json?: boolean;\n refresh?: boolean;\n};\n\n/**\n * Flags for quality:check-tests command\n */\nexport const checkTestsFlags = {\n package: {\n type: 'string',\n description: 'Run tests for specific package',\n alias: 'p',\n },\n timeout: {\n type: 'number',\n description: 'Timeout per package in milliseconds',\n default: 60000,\n },\n 'with-coverage': {\n type: 'boolean',\n description: 'Collect coverage statistics',\n default: false,\n },\n 'coverage-only': {\n type: 'boolean',\n description: 'Only show existing coverage (skip test execution)',\n default: false,\n },\n json: {\n type: 'boolean',\n description: 'Output JSON format',\n default: false,\n },\n refresh: {\n type: 'boolean',\n description: 'Bypass cache and run fresh',\n default: false,\n },\n} as const;\n\n/** Parsed value type for CheckTestsFlags */\nexport type CheckTestsFlags = {\n package?: string;\n timeout?: number;\n 'with-coverage'?: boolean;\n 'coverage-only'?: boolean;\n json?: boolean;\n refresh?: boolean;\n};\n\n/**\n * Flags for quality:dead-code command\n */\nexport const deadCodeFlags = {\n package: {\n type: 'string',\n description: 'Scan specific package only',\n alias: 'p',\n },\n json: {\n type: 'boolean',\n description: 'Output JSON format',\n default: false,\n },\n verbose: {\n type: 'boolean',\n description: 'Show entry points and alive reasons',\n default: false,\n alias: 'v',\n },\n 'auto-remove': {\n type: 'boolean',\n description: 'Remove dead files (creates backup first)',\n default: false,\n },\n 'dry-run': {\n type: 'boolean',\n description: 'Show what would be removed without actually deleting',\n default: false,\n },\n restore: {\n type: 'string',\n description: 'Restore files from backup ID',\n },\n 'list-backups': {\n type: 'boolean',\n description: 'List available backups',\n default: false,\n },\n refresh: {\n type: 'boolean',\n description: 'Bypass cache and rescan',\n default: false,\n },\n} as const;\n\n/** Parsed value type for DeadCodeFlags */\nexport type DeadCodeFlags = {\n package?: string;\n json?: boolean;\n verbose?: boolean;\n 'auto-remove'?: boolean;\n 'dry-run'?: boolean;\n restore?: string;\n 'list-backups'?: boolean;\n refresh?: boolean;\n};\n","/**\n * Quality Plugin Manifest V3\n *\n * Monorepo quality analysis and automated fixes\n */\n\nimport {\n combinePermissions,\n kbPlatformPreset,\n defineCommandFlags,\n} from '@kb-labs/sdk';\nimport {\n QUALITY_BASE_PATH,\n QUALITY_ROUTES,\n} from '@kb-labs/quality-contracts';\nimport {\n statsFlags,\n healthFlags,\n fixDepsFlags,\n buildOrderFlags,\n cyclesFlags,\n visualizeFlags,\n checkBuildsFlags,\n checkTypesFlags,\n checkTestsFlags,\n deadCodeFlags,\n} from './cli/commands/flags.js';\n\n/**\n * Build permissions using V3 combinePermissions builder pattern.\n * Quality plugin needs read/write access to entire monorepo for analysis and fixes.\n */\nconst pluginPermissions = combinePermissions()\n .with(kbPlatformPreset)\n .withFs({\n mode: 'readWrite',\n allow: ['**'], // Access to entire monorepo\n })\n .withPlatform({\n cache: ['quality:'], // Cache namespace prefix\n analytics: true, // Track command usage\n })\n .withQuotas({\n timeoutMs: 300000, // 5 minutes for long-running operations\n memoryMb: 1024, // 1GB memory\n })\n .build();\n\n/**\n * Heavy operations permissions (builds, types, tests)\n * These operations scan the entire monorepo and can take a long time\n */\nconst heavyOperationsPermissions = combinePermissions()\n .with(kbPlatformPreset)\n .withFs({\n mode: 'readWrite',\n allow: ['**'],\n })\n .withPlatform({\n cache: ['quality:'],\n analytics: true,\n })\n .withQuotas({\n timeoutMs: 600000, // 10 minutes for heavy operations\n memoryMb: 2048, // 2GB memory\n })\n .build();\n\nexport const manifest = {\n schema: 'kb.plugin/3',\n id: '@kb-labs/quality',\n version: '0.1.0',\n\n display: {\n name: 'Quality Tools',\n description: 'Monorepo quality analysis and automated fixes',\n tags: ['quality', 'monorepo', 'analysis', 'devtools'],\n },\n\n platform: {\n requires: ['storage', 'cache'],\n optional: ['analytics', 'logger'],\n },\n\n cli: {\n commands: [\n // ======================================================================\n // quality:stats - Monorepo statistics and health score\n // ======================================================================\n {\n id: 'stats',\n group: 'quality',\n describe: 'Get monorepo statistics and health score',\n longDescription:\n 'Analyzes monorepo structure, collects package statistics, dependency info, and calculates health score. ' +\n 'Results are cached for 5 minutes.',\n\n handler: './cli/commands/stats.js#default',\n handlerPath: './cli/commands/stats.js',\n\n flags: defineCommandFlags(statsFlags),\n\n examples: [\n 'kb quality:stats',\n 'kb quality:stats --health',\n 'kb quality:stats --json',\n 'kb quality:stats --md',\n ],\n\n permissions: pluginPermissions,\n },\n\n // ======================================================================\n // quality:health - Monorepo health check\n // ======================================================================\n {\n id: 'health',\n group: 'quality',\n describe: 'Check monorepo health score',\n longDescription:\n 'Analyzes monorepo health including dependency issues, structure problems, and build health. ' +\n 'Returns health score (0-100) with grade (A-F) and actionable recommendations.',\n\n handler: './cli/commands/health.js#default',\n handlerPath: './cli/commands/health.js',\n\n flags: defineCommandFlags(healthFlags),\n\n examples: [\n 'kb quality:health',\n 'kb quality:health --detailed',\n 'kb quality:health --package @kb-labs/core',\n 'kb quality:health --json',\n ],\n\n permissions: pluginPermissions,\n },\n\n // ======================================================================\n // quality:fix-deps - Dependency auto-fixer\n // ======================================================================\n {\n id: 'fix-deps',\n group: 'quality',\n describe: 'Auto-fix dependency issues',\n longDescription:\n 'Automatically fixes dependency issues including removing unused deps, adding missing workspace deps, ' +\n 'and aligning duplicate versions. Supports --dry-run for previewing changes.',\n\n handler: './cli/commands/fix-deps.js#default',\n handlerPath: './cli/commands/fix-deps.js',\n\n flags: defineCommandFlags(fixDepsFlags),\n\n examples: [\n 'kb quality:fix-deps --stats',\n 'kb quality:fix-deps --remove-unused --dry-run',\n 'kb quality:fix-deps --align-versions',\n 'kb quality:fix-deps --all --dry-run',\n ],\n\n permissions: pluginPermissions,\n },\n\n // ======================================================================\n // quality:build-order - Calculate build order with topological sort\n // ======================================================================\n {\n id: 'build-order',\n group: 'quality',\n describe: 'Calculate build order using topological sort',\n longDescription:\n 'Analyzes package dependencies and calculates correct build order using topological sort. ' +\n 'Shows build layers where each layer can be built in parallel. Detects circular dependencies.',\n\n handler: './cli/commands/build-order.js#default',\n handlerPath: './cli/commands/build-order.js',\n\n flags: defineCommandFlags(buildOrderFlags),\n\n examples: [\n 'kb quality:build-order',\n 'kb quality:build-order --layers',\n 'kb quality:build-order --package @kb-labs/core',\n 'kb quality:build-order --script > build.sh',\n ],\n\n permissions: pluginPermissions,\n },\n\n // ======================================================================\n // quality:cycles - Detect circular dependencies\n // ======================================================================\n {\n id: 'cycles',\n group: 'quality',\n describe: 'Detect circular dependencies',\n longDescription:\n 'Uses DFS to find all circular dependency chains in the monorepo. ' +\n 'Shows complete dependency cycles with recommendations for breaking them.',\n\n handler: './cli/commands/cycles.js#default',\n handlerPath: './cli/commands/cycles.js',\n\n flags: defineCommandFlags(cyclesFlags),\n\n examples: [\n 'kb quality:cycles',\n 'kb quality:cycles --json',\n ],\n\n permissions: pluginPermissions,\n },\n\n // ======================================================================\n // quality:visualize - Visualize dependency graph\n // ======================================================================\n {\n id: 'visualize',\n group: 'quality',\n describe: 'Visualize dependency graph',\n longDescription:\n 'Visualize monorepo dependency graph in various formats: tree view, DOT format for graphviz, ' +\n 'reverse dependencies (who depends on this), impact analysis (what will be affected by changes), ' +\n 'and comprehensive graph statistics.',\n\n handler: './cli/commands/visualize.js#default',\n handlerPath: './cli/commands/visualize.js',\n\n flags: defineCommandFlags(visualizeFlags),\n\n examples: [\n 'kb quality:visualize --stats',\n 'kb quality:visualize --tree --package @kb-labs/core',\n 'kb quality:visualize --reverse --package @kb-labs/sdk',\n 'kb quality:visualize --impact --package @kb-labs/core',\n 'kb quality:visualize --dot > deps.dot',\n ],\n\n permissions: pluginPermissions,\n },\n\n // ======================================================================\n // quality:check-builds - Check build status across monorepo\n // ======================================================================\n {\n id: 'check-builds',\n group: 'quality',\n describe: 'Check build status across monorepo',\n longDescription:\n 'Analyzes build status across all packages with build scripts. ' +\n 'Detects build failures with error messages and stale builds (dist/ older than src/). ' +\n 'Results are cached for 10 minutes.',\n\n handler: './cli/commands/check-builds.js#default',\n handlerPath: './cli/commands/check-builds.js',\n\n flags: defineCommandFlags(checkBuildsFlags),\n\n examples: [\n 'kb quality:check-builds',\n 'kb quality:check-builds --package @kb-labs/core',\n 'kb quality:check-builds --timeout 60000',\n 'kb quality:check-builds --json',\n 'kb quality:check-builds --refresh',\n ],\n\n permissions: heavyOperationsPermissions,\n },\n\n // ======================================================================\n // quality:check-types - TypeScript type safety analysis\n // ======================================================================\n {\n id: 'check-types',\n group: 'quality',\n describe: 'Analyze TypeScript type safety across monorepo',\n longDescription:\n 'Analyzes TypeScript type errors, warnings, and type coverage using TypeScript Compiler API. ' +\n 'Detects any usage, @ts-ignore comments, and calculates type coverage percentage. ' +\n 'Results are cached for 10 minutes.',\n\n handler: './cli/commands/check-types.js#default',\n handlerPath: './cli/commands/check-types.js',\n\n flags: defineCommandFlags(checkTypesFlags),\n\n examples: [\n 'kb quality:check-types',\n 'kb quality:check-types --package @kb-labs/core',\n 'kb quality:check-types --errors-only',\n 'kb quality:check-types --json',\n 'kb quality:check-types --refresh',\n ],\n\n permissions: heavyOperationsPermissions,\n },\n\n // ======================================================================\n // quality:check-tests - Test execution and coverage tracking\n // ======================================================================\n {\n id: 'check-tests',\n group: 'quality',\n describe: 'Run tests and track coverage across monorepo',\n longDescription:\n 'Runs tests across all packages with test scripts and collects coverage statistics. ' +\n 'Parses test output (vitest/jest) to extract test counts and reads coverage-summary.json. ' +\n 'Results are cached for 5 minutes.',\n\n handler: './cli/commands/check-tests.js#default',\n handlerPath: './cli/commands/check-tests.js',\n\n flags: defineCommandFlags(checkTestsFlags),\n\n examples: [\n 'kb quality:check-tests',\n 'kb quality:check-tests --package @kb-labs/core',\n 'kb quality:check-tests --with-coverage',\n 'kb quality:check-tests --coverage-only',\n 'kb quality:check-tests --timeout 120000',\n 'kb quality:check-tests --json',\n ],\n\n permissions: heavyOperationsPermissions,\n },\n\n // ======================================================================\n // quality:dead-code - Dead code file detection\n // ======================================================================\n {\n id: 'dead-code',\n group: 'quality',\n describe: 'Detect dead (unreachable) source files',\n longDescription:\n 'Analyzes import graph to find source files not reachable from any entry point ' +\n '(package.json, tsup.config.ts, manifest.ts). Supports automated removal with ' +\n 'backup and restore capabilities. Zero false positives by design.',\n\n handler: './cli/commands/dead-code.js#default',\n handlerPath: './cli/commands/dead-code.js',\n\n flags: defineCommandFlags(deadCodeFlags),\n\n examples: [\n 'kb quality:dead-code',\n 'kb quality:dead-code --package @kb-labs/core',\n 'kb quality:dead-code --auto-remove --dry-run',\n 'kb quality:dead-code --auto-remove',\n 'kb quality:dead-code --list-backups',\n 'kb quality:dead-code --restore 2026-02-15T10-30-00',\n 'kb quality:dead-code --json',\n ],\n\n permissions: pluginPermissions,\n },\n ],\n },\n\n // REST API routes\n rest: {\n basePath: QUALITY_BASE_PATH,\n routes: [\n // GET /stats\n {\n method: 'GET',\n path: QUALITY_ROUTES.STATS,\n handler: './rest/handlers/stats-handler.js#default',\n input: {\n zod: '@kb-labs/quality-contracts#StatsRequestSchema',\n },\n output: {\n zod: '@kb-labs/quality-contracts#StatsResponseSchema',\n },\n },\n // GET /health\n {\n method: 'GET',\n path: QUALITY_ROUTES.HEALTH,\n handler: './rest/handlers/health-handler.js#default',\n input: {\n zod: '@kb-labs/quality-contracts#HealthRequestSchema',\n },\n output: {\n zod: '@kb-labs/quality-contracts#HealthResponseSchema',\n },\n },\n // GET /dependencies\n {\n method: 'GET',\n path: QUALITY_ROUTES.DEPENDENCIES,\n handler: './rest/handlers/dependencies-handler.js#default',\n input: {\n zod: '@kb-labs/quality-contracts#DependenciesRequestSchema',\n },\n output: {\n zod: '@kb-labs/quality-contracts#DependenciesResponseSchema',\n },\n },\n // GET /build-order\n {\n method: 'GET',\n path: QUALITY_ROUTES.BUILD_ORDER,\n handler: './rest/handlers/build-order-handler.js#default',\n input: {\n zod: '@kb-labs/quality-contracts#BuildOrderRequestSchema',\n },\n output: {\n zod: '@kb-labs/quality-contracts#BuildOrderResponseSchema',\n },\n },\n // GET /cycles\n {\n method: 'GET',\n path: QUALITY_ROUTES.CYCLES,\n handler: './rest/handlers/cycles-handler.js#default',\n input: {\n zod: '@kb-labs/quality-contracts#CyclesRequestSchema',\n },\n output: {\n zod: '@kb-labs/quality-contracts#CyclesResponseSchema',\n },\n },\n // GET /graph\n {\n method: 'GET',\n path: QUALITY_ROUTES.GRAPH,\n handler: './rest/handlers/graph-handler.js#default',\n input: {\n zod: '@kb-labs/quality-contracts#GraphRequestSchema',\n },\n output: {\n zod: '@kb-labs/quality-contracts#GraphResponseSchema',\n },\n },\n // GET /stale\n {\n method: 'GET',\n path: QUALITY_ROUTES.STALE,\n handler: './rest/handlers/stale-handler.js#default',\n input: {\n zod: '@kb-labs/quality-contracts#StaleRequestSchema',\n },\n output: {\n zod: '@kb-labs/quality-contracts#StaleResponseSchema',\n },\n },\n // GET /builds\n {\n method: 'GET',\n path: QUALITY_ROUTES.BUILDS,\n handler: './rest/handlers/builds-handler.js#default',\n input: {\n zod: '@kb-labs/quality-contracts#BuildsRequestSchema',\n },\n output: {\n zod: '@kb-labs/quality-contracts#BuildsResponseSchema',\n },\n },\n // GET /types\n {\n method: 'GET',\n path: QUALITY_ROUTES.TYPES,\n handler: './rest/handlers/types-handler.js#default',\n input: {\n zod: '@kb-labs/quality-contracts#TypesRequestSchema',\n },\n output: {\n zod: '@kb-labs/quality-contracts#TypesResponseSchema',\n },\n },\n // GET /tests\n {\n method: 'GET',\n path: QUALITY_ROUTES.TESTS,\n handler: './rest/handlers/tests-handler.js#default',\n input: {\n zod: '@kb-labs/quality-contracts#TestsRequestSchema',\n },\n output: {\n zod: '@kb-labs/quality-contracts#TestsResponseSchema',\n },\n },\n ],\n },\n\n // Studio V2 — Module Federation pages\n studio: {\n version: 2 as const,\n remoteName: 'qualityPlugin',\n pages: [\n {\n id: 'quality.overview',\n title: 'Quality',\n icon: 'CheckCircleOutlined',\n route: '/p/quality',\n entry: './QualityOverview',\n order: 1,\n },\n ],\n menus: [\n {\n id: 'quality',\n label: 'Quality',\n icon: 'CheckCircleOutlined',\n target: 'quality.overview',\n order: 40,\n },\n ],\n },\n\n permissions: pluginPermissions,\n};\n\nexport default manifest;\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/cli/commands/flags.ts","../src/manifest.ts"],"names":[],"mappings":"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","file":"manifest.js","sourcesContent":["/**\n * Shared command flags definitions\n *\n * DRY pattern: Define flags once, use in both manifest and command handlers.\n */\n\n/**\n * Flags for quality:stats command\n */\nexport const statsFlags = {\n json: {\n type: 'boolean',\n description: 'Output JSON format',\n default: false,\n },\n md: {\n type: 'boolean',\n description: 'Output Markdown table',\n default: false,\n },\n health: {\n type: 'boolean',\n description: 'Show health score',\n default: false,\n },\n refresh: {\n type: 'boolean',\n description: 'Bypass cache and recalculate',\n default: false,\n },\n} as const;\n\n/** Parsed value type for StatsFlags */\nexport type StatsFlags = {\n json?: boolean;\n md?: boolean;\n health?: boolean;\n refresh?: boolean;\n};\n\n/**\n * Flags for quality:health command\n */\nexport const healthFlags = {\n json: {\n type: 'boolean',\n description: 'Output JSON format',\n default: false,\n },\n package: {\n type: 'string',\n description: 'Check health for specific package',\n alias: 'p',\n },\n detailed: {\n type: 'boolean',\n description: 'Show detailed breakdown',\n default: false,\n alias: 'd',\n },\n refresh: {\n type: 'boolean',\n description: 'Bypass cache and recompute',\n default: false,\n },\n} as const;\n\n/** Parsed value type for HealthFlags */\nexport type HealthFlags = {\n json?: boolean;\n package?: string;\n detailed?: boolean;\n refresh?: boolean;\n};\n\n/**\n * Flags for quality:fix-deps command\n */\nexport const fixDepsFlags = {\n 'dry-run': {\n type: 'boolean',\n description: 'Preview changes without applying them',\n default: false,\n },\n 'remove-unused': {\n type: 'boolean',\n description: 'Remove unused dependencies',\n default: false,\n },\n 'add-missing': {\n type: 'boolean',\n description: 'Add missing workspace dependencies',\n default: false,\n },\n 'align-versions': {\n type: 'boolean',\n description: 'Align duplicate dependency versions',\n default: false,\n },\n all: {\n type: 'boolean',\n description: 'Apply all fixes (remove-unused + add-missing + align-versions)',\n default: false,\n },\n stats: {\n type: 'boolean',\n description: 'Show dependency statistics',\n default: false,\n },\n json: {\n type: 'boolean',\n description: 'Output JSON format',\n default: false,\n },\n} as const;\n\n/** Parsed value type for FixDepsFlags */\nexport type FixDepsFlags = {\n 'dry-run'?: boolean;\n 'remove-unused'?: boolean;\n 'add-missing'?: boolean;\n 'align-versions'?: boolean;\n all?: boolean;\n stats?: boolean;\n json?: boolean;\n};\n\n/**\n * Flags for quality:run command\n */\nexport const runFlags = {\n script: {\n type: 'string',\n description: 'Script to run (build, test, type-check, lint)',\n required: true,\n },\n 'continue-on-error': {\n type: 'boolean',\n description: 'Continue even if packages fail',\n default: true,\n },\n parallel: {\n type: 'boolean',\n description: 'Run in parallel (respects dependencies)',\n default: false,\n },\n filter: {\n type: 'string',\n description: 'Filter packages by pattern (@kb-labs/*)',\n },\n json: {\n type: 'boolean',\n description: 'Output JSON format',\n default: false,\n },\n verbose: {\n type: 'boolean',\n description: 'Show full output for each package',\n default: false,\n alias: 'v',\n },\n} as const;\n\n/** Parsed value type for RunFlags */\nexport type RunFlags = {\n script?: string;\n 'continue-on-error'?: boolean;\n parallel?: boolean;\n filter?: string;\n json?: boolean;\n verbose?: boolean;\n};\n\n/**\n * Flags for quality:build-order command\n */\nexport const buildOrderFlags = {\n package: {\n type: 'string',\n description: 'Calculate build order for specific package',\n alias: 'p',\n },\n layers: {\n type: 'boolean',\n description: 'Show build layers (parallel groups)',\n default: false,\n },\n script: {\n type: 'boolean',\n description: 'Output as shell script',\n default: false,\n },\n json: {\n type: 'boolean',\n description: 'Output JSON format',\n default: false,\n },\n} as const;\n\n/** Parsed value type for BuildOrderFlags */\nexport type BuildOrderFlags = {\n package?: string;\n layers?: boolean;\n script?: boolean;\n json?: boolean;\n};\n\n/**\n * Flags for quality:cycles command\n */\nexport const cyclesFlags = {\n json: {\n type: 'boolean',\n description: 'Output JSON format',\n default: false,\n },\n} as const;\n\n/** Parsed value type for CyclesFlags */\nexport type CyclesFlags = {\n json?: boolean;\n};\n\n/**\n * Flags for quality:visualize command\n */\nexport const visualizeFlags = {\n package: {\n type: 'string',\n description: 'Focus on specific package',\n alias: 'p',\n },\n tree: {\n type: 'boolean',\n description: 'Show dependency tree',\n default: false,\n },\n dot: {\n type: 'boolean',\n description: 'Output DOT format for graphviz',\n default: false,\n },\n stats: {\n type: 'boolean',\n description: 'Show graph statistics',\n default: false,\n },\n reverse: {\n type: 'boolean',\n description: 'Show reverse dependencies (who depends on this)',\n default: false,\n },\n impact: {\n type: 'boolean',\n description: 'Show impact analysis (what will be affected)',\n default: false,\n },\n json: {\n type: 'boolean',\n description: 'Output JSON format',\n default: false,\n },\n} as const;\n\n/** Parsed value type for VisualizeFlags */\nexport type VisualizeFlags = {\n package?: string;\n tree?: boolean;\n dot?: boolean;\n stats?: boolean;\n reverse?: boolean;\n impact?: boolean;\n json?: boolean;\n};\n\n/**\n * Flags for quality:check-builds command\n */\nexport const checkBuildsFlags = {\n package: {\n type: 'string',\n description: 'Check builds for specific package',\n alias: 'p',\n },\n timeout: {\n type: 'number',\n description: 'Timeout per package in milliseconds',\n default: 30000,\n },\n json: {\n type: 'boolean',\n description: 'Output JSON format',\n default: false,\n },\n refresh: {\n type: 'boolean',\n description: 'Bypass cache and check fresh',\n default: false,\n },\n} as const;\n\n/** Parsed value type for CheckBuildsFlags */\nexport type CheckBuildsFlags = {\n package?: string;\n timeout?: number;\n json?: boolean;\n refresh?: boolean;\n};\n\n/**\n * Flags for quality:check-types command\n */\nexport const checkTypesFlags = {\n package: {\n type: 'string',\n description: 'Analyze types for specific package',\n alias: 'p',\n },\n 'errors-only': {\n type: 'boolean',\n description: 'Show only packages with errors',\n default: false,\n },\n json: {\n type: 'boolean',\n description: 'Output JSON format',\n default: false,\n },\n refresh: {\n type: 'boolean',\n description: 'Bypass cache and analyze fresh',\n default: false,\n },\n} as const;\n\n/** Parsed value type for CheckTypesFlags */\nexport type CheckTypesFlags = {\n package?: string;\n 'errors-only'?: boolean;\n json?: boolean;\n refresh?: boolean;\n};\n\n/**\n * Flags for quality:check-tests command\n */\nexport const checkTestsFlags = {\n package: {\n type: 'string',\n description: 'Run tests for specific package',\n alias: 'p',\n },\n timeout: {\n type: 'number',\n description: 'Timeout per package in milliseconds',\n default: 60000,\n },\n 'with-coverage': {\n type: 'boolean',\n description: 'Collect coverage statistics',\n default: false,\n },\n 'coverage-only': {\n type: 'boolean',\n description: 'Only show existing coverage (skip test execution)',\n default: false,\n },\n json: {\n type: 'boolean',\n description: 'Output JSON format',\n default: false,\n },\n refresh: {\n type: 'boolean',\n description: 'Bypass cache and run fresh',\n default: false,\n },\n} as const;\n\n/** Parsed value type for CheckTestsFlags */\nexport type CheckTestsFlags = {\n package?: string;\n timeout?: number;\n 'with-coverage'?: boolean;\n 'coverage-only'?: boolean;\n json?: boolean;\n refresh?: boolean;\n};\n\n/**\n * Flags for quality:check-layers command\n */\nexport const checkLayersFlags = {\n json: { type: 'boolean', description: 'Output JSON format', default: false },\n package: { type: 'string', description: 'Filter violations by package name', alias: 'p' },\n} as const;\n\nexport type CheckLayersFlags = { json?: boolean; package?: string };\n\n/**\n * Flags for quality:coupling command\n */\nexport const couplingFlags = {\n json: { type: 'boolean', description: 'Output JSON format', default: false },\n sort: { type: 'string', description: 'Sort by: instability | coupled', default: 'instability' },\n top: { type: 'number', description: 'Show top N packages', default: 10 },\n} as const;\n\nexport type CouplingFlags = { json?: boolean; sort?: string; top?: number };\n\n/**\n * Flags for quality:snapshot command\n */\nexport const snapshotFlags = {\n json: { type: 'boolean', description: 'Output JSON format', default: false },\n} as const;\n\nexport type SnapshotFlags = { json?: boolean };\n\n/**\n * Flags for quality:history command\n */\nexport const historyFlags = {\n json: { type: 'boolean', description: 'Output JSON format', default: false },\n limit: { type: 'number', description: 'Number of entries to show', default: 10 },\n} as const;\n\nexport type HistoryFlags = { json?: boolean; limit?: number };\n\n/**\n * Flags for quality:dead-code command\n */\nexport const deadCodeFlags = {\n package: {\n type: 'string',\n description: 'Scan specific package only',\n alias: 'p',\n },\n json: {\n type: 'boolean',\n description: 'Output JSON format',\n default: false,\n },\n verbose: {\n type: 'boolean',\n description: 'Show entry points and alive reasons',\n default: false,\n alias: 'v',\n },\n 'auto-remove': {\n type: 'boolean',\n description: 'Remove dead files (creates backup first)',\n default: false,\n },\n 'dry-run': {\n type: 'boolean',\n description: 'Show what would be removed without actually deleting',\n default: false,\n },\n restore: {\n type: 'string',\n description: 'Restore files from backup ID',\n },\n 'list-backups': {\n type: 'boolean',\n description: 'List available backups',\n default: false,\n },\n refresh: {\n type: 'boolean',\n description: 'Bypass cache and rescan',\n default: false,\n },\n} as const;\n\n/** Parsed value type for DeadCodeFlags */\nexport type DeadCodeFlags = {\n package?: string;\n json?: boolean;\n verbose?: boolean;\n 'auto-remove'?: boolean;\n 'dry-run'?: boolean;\n restore?: string;\n 'list-backups'?: boolean;\n refresh?: boolean;\n};\n\nexport const contextFlags = {\n package: {\n type: 'string',\n description: 'Package name to get context for',\n alias: 'p',\n },\n json: {\n type: 'boolean',\n description: 'Output JSON format',\n default: false,\n },\n} as const;\n\nexport type ContextFlags = {\n package?: string;\n json?: boolean;\n};\n\nexport const gateFlags = {\n json: {\n type: 'boolean',\n description: 'Output JSON format',\n default: false,\n },\n strict: {\n type: 'boolean',\n description: 'Fail even on pre-existing violations (not just new ones)',\n default: false,\n },\n} as const;\n\nexport type GateFlags = {\n json?: boolean;\n strict?: boolean;\n};\n","/**\n * Quality Plugin Manifest V3\n */\n\nimport {\n combinePermissions,\n kbPlatformPreset,\n defineCommandFlags,\n} from '@kb-labs/sdk';\nimport {\n QUALITY_BASE_PATH,\n QUALITY_ROUTES,\n} from '@kb-labs/quality-contracts';\nimport {\n statsFlags,\n healthFlags,\n fixDepsFlags,\n buildOrderFlags,\n cyclesFlags,\n visualizeFlags,\n checkBuildsFlags,\n checkTypesFlags,\n checkTestsFlags,\n deadCodeFlags,\n checkLayersFlags,\n couplingFlags,\n snapshotFlags,\n historyFlags,\n contextFlags,\n gateFlags,\n} from './cli/commands/flags.js';\n\nconst pluginPermissions = combinePermissions()\n .with(kbPlatformPreset)\n .withFs({ mode: 'readWrite', allow: ['**'] })\n .withShell({ allow: ['pnpm', 'git'] })\n .withPlatform({ cache: ['quality:'], analytics: true })\n .withQuotas({ timeoutMs: 300_000, memoryMb: 1024 })\n .build();\n\nconst heavyPermissions = combinePermissions()\n .with(kbPlatformPreset)\n .withFs({ mode: 'readWrite', allow: ['**'] })\n .withShell({ allow: ['pnpm', 'git'] })\n .withPlatform({ cache: ['quality:'], analytics: true })\n .withQuotas({ timeoutMs: 600_000, memoryMb: 2048 })\n .build();\n\nexport const manifest = {\n schema: 'kb.plugin/3',\n id: '@kb-labs/quality',\n version: '0.1.0',\n configSection: 'quality',\n\n display: {\n name: 'Quality',\n description: 'Code quality, architecture analysis, and trend tracking',\n tags: ['quality', 'architecture', 'coupling', 'monorepo'],\n },\n\n platform: {\n requires: ['storage', 'cache'],\n optional: ['analytics', 'logger'],\n },\n\n cli: {\n groupMeta: [\n { path: 'quality', describe: 'Code quality, architecture analysis, and trend tracking.' },\n { path: 'quality check', describe: 'Static analysis checks (layers, types, builds, tests)' },\n { path: 'quality fix', describe: 'Auto-fix quality issues' },\n ],\n commands: [\n // ── Overview ────────────────────────────────────────────────────────────\n {\n path: 'quality stats',\n category: 'Overview',\n operationType: 'read' as const,\n describe: 'Monorepo statistics',\n handler: './cli/commands/stats.js#default',\n flags: defineCommandFlags(statsFlags),\n examples: ['kb quality stats', 'kb quality stats --json'],\n permissions: pluginPermissions,\n },\n {\n path: 'quality health',\n category: 'Overview',\n operationType: 'analyze' as const,\n describe: 'Multidimensional health score (architecture, TypeScript, dead code, deps)',\n handler: './cli/commands/health.js#default',\n flags: defineCommandFlags(healthFlags),\n examples: ['kb quality health', 'kb quality health --json', 'kb quality health --detailed'],\n permissions: pluginPermissions,\n },\n {\n path: 'quality snapshot',\n category: 'Overview',\n operationType: 'mutate' as const,\n describe: 'Collect all metrics and save a snapshot for trend tracking',\n handler: './cli/commands/snapshot.js#default',\n flags: defineCommandFlags(snapshotFlags),\n examples: ['kb quality snapshot', 'kb quality snapshot --json'],\n permissions: pluginPermissions,\n },\n {\n path: 'quality history',\n category: 'Overview',\n operationType: 'read' as const,\n describe: 'Show quality snapshot history and delta trends',\n handler: './cli/commands/history.js#default',\n flags: defineCommandFlags(historyFlags),\n examples: ['kb quality history', 'kb quality history --json', 'kb quality history --limit 20'],\n permissions: pluginPermissions,\n },\n\n // ── Agent ────────────────────────────────────────────────────────────────\n {\n path: 'quality context',\n category: 'Agent',\n operationType: 'read' as const,\n describe: 'Package context for agents: layer, dependents, dependencies (fast, stateless)',\n handler: './cli/commands/context.js#default',\n flags: defineCommandFlags(contextFlags),\n examples: [\n 'kb quality context --package @kb-labs/sdk',\n 'kb quality context --package @kb-labs/sdk --json',\n 'kb quality context --json',\n ],\n permissions: pluginPermissions,\n },\n {\n path: 'quality gate',\n category: 'Agent',\n operationType: 'analyze' as const,\n describe: 'Architecture gate: fail if new layering violations introduced',\n handler: './cli/commands/gate.js#default',\n flags: defineCommandFlags(gateFlags),\n examples: [\n 'kb quality gate',\n 'kb quality gate --json',\n 'kb quality gate --strict',\n ],\n permissions: pluginPermissions,\n },\n\n // ── Architecture ─────────────────────────────────────────────────────────\n {\n path: 'quality check layers',\n category: 'Architecture',\n operationType: 'analyze' as const,\n describe: 'Detect layering violations (lower layer importing higher layer)',\n handler: './cli/commands/check-layers.js#default',\n flags: defineCommandFlags(checkLayersFlags),\n examples: ['kb quality check layers', 'kb quality check layers --json', 'kb quality check layers --package @kb-labs/plugins-qa'],\n permissions: pluginPermissions,\n },\n {\n path: 'quality coupling',\n category: 'Architecture',\n operationType: 'analyze' as const,\n describe: 'Show coupling metrics per package (Ca/Ce/instability)',\n handler: './cli/commands/coupling.js#default',\n flags: defineCommandFlags(couplingFlags),\n examples: ['kb quality coupling', 'kb quality coupling --json', 'kb quality coupling --sort coupled --top 20'],\n permissions: pluginPermissions,\n },\n {\n path: 'quality build order',\n category: 'Architecture',\n operationType: 'analyze' as const,\n describe: 'Topological build order',\n handler: './cli/commands/build-order.js#default',\n flags: defineCommandFlags(buildOrderFlags),\n examples: ['kb quality build order', 'kb quality build order --json'],\n permissions: pluginPermissions,\n },\n {\n path: 'quality cycles',\n category: 'Architecture',\n operationType: 'analyze' as const,\n describe: 'Detect circular dependencies',\n handler: './cli/commands/cycles.js#default',\n flags: defineCommandFlags(cyclesFlags),\n examples: ['kb quality cycles', 'kb quality cycles --json'],\n permissions: pluginPermissions,\n },\n\n // ── Checks ───────────────────────────────────────────────────────────────\n {\n path: 'quality dead code',\n category: 'Checks',\n operationType: 'analyze' as const,\n describe: 'Detect unused files, exports, and deps via knip',\n handler: './cli/commands/dead-code.js#default',\n flags: defineCommandFlags(deadCodeFlags),\n examples: ['kb quality dead code', 'kb quality dead code --json'],\n permissions: pluginPermissions,\n },\n {\n path: 'quality check types',\n category: 'Checks',\n operationType: 'analyze' as const,\n describe: 'TypeScript type safety analysis (any count, ts-ignore, errors)',\n handler: './cli/commands/check-types.js#default',\n flags: defineCommandFlags(checkTypesFlags),\n examples: ['kb quality check types', 'kb quality check types --json'],\n permissions: heavyPermissions,\n },\n {\n path: 'quality check builds',\n category: 'Checks',\n operationType: 'analyze' as const,\n describe: 'Build status across monorepo',\n handler: './cli/commands/check-builds.js#default',\n flags: defineCommandFlags(checkBuildsFlags),\n examples: ['kb quality check builds', 'kb quality check builds --json'],\n permissions: heavyPermissions,\n },\n {\n path: 'quality check tests',\n category: 'Checks',\n operationType: 'execute' as const,\n describe: 'Run tests and track coverage',\n handler: './cli/commands/check-tests.js#default',\n flags: defineCommandFlags(checkTestsFlags),\n examples: ['kb quality check tests', 'kb quality check tests --with-coverage'],\n permissions: heavyPermissions,\n },\n {\n path: 'quality fix deps',\n category: 'Fixes',\n operationType: 'mutate' as const,\n describe: 'Auto-fix dependency issues',\n handler: './cli/commands/fix-deps.js#default',\n flags: defineCommandFlags(fixDepsFlags),\n examples: ['kb quality fix deps --dry-run', 'kb quality fix deps --all'],\n permissions: pluginPermissions,\n },\n {\n path: 'quality visualize',\n category: 'Fixes',\n operationType: 'analyze' as const,\n describe: 'Visualize dependency graph',\n handler: './cli/commands/visualize.js#default',\n flags: defineCommandFlags(visualizeFlags),\n examples: ['kb quality visualize --tree', 'kb quality visualize --dot'],\n permissions: pluginPermissions,\n },\n ],\n },\n\n rest: {\n basePath: QUALITY_BASE_PATH,\n routes: [\n { method: 'GET', path: QUALITY_ROUTES.STATS, handler: './rest/handlers/stats-handler.js#default', timeoutMs: 120_000 },\n { method: 'GET', path: QUALITY_ROUTES.HEALTH, handler: './rest/handlers/health-handler.js#default' },\n { method: 'GET', path: QUALITY_ROUTES.LAYERS, handler: './rest/handlers/layers-handler.js#default' },\n { method: 'GET', path: QUALITY_ROUTES.COUPLING, handler: './rest/handlers/coupling-handler.js#default' },\n { method: 'GET', path: QUALITY_ROUTES.DEAD_CODE, handler: './rest/handlers/knip-handler.js#default' },\n { method: 'GET', path: QUALITY_ROUTES.HISTORY, handler: './rest/handlers/history-handler.js#default' },\n { method: 'POST', path: QUALITY_ROUTES.SNAPSHOT, handler: './rest/handlers/snapshot-handler.js#default' },\n { method: 'GET', path: QUALITY_ROUTES.DEPENDENCIES, handler: './rest/handlers/dependencies-handler.js#default' },\n { method: 'GET', path: QUALITY_ROUTES.BUILD_ORDER, handler: './rest/handlers/build-order-handler.js#default' },\n { method: 'GET', path: QUALITY_ROUTES.CYCLES, handler: './rest/handlers/cycles-handler.js#default' },\n { method: 'GET', path: QUALITY_ROUTES.GRAPH, handler: './rest/handlers/graph-handler.js#default' },\n { method: 'GET', path: QUALITY_ROUTES.STALE, handler: './rest/handlers/stale-handler.js#default' },\n ],\n },\n\n studio: {\n version: 2 as const,\n remoteName: 'qualityPlugin',\n pages: [\n {\n id: 'quality.overview',\n title: 'Quality',\n icon: 'CheckCircleOutlined',\n route: '/p/quality',\n entry: './QualityOverview',\n order: 1,\n },\n ],\n menus: [\n {\n id: 'quality',\n label: 'Quality',\n icon: 'CheckCircleOutlined',\n target: 'quality.overview',\n order: 40,\n },\n ],\n },\n\n permissions: pluginPermissions,\n};\n\nexport default manifest;\n"]}
|
|
@@ -1,17 +1,9 @@
|
|
|
1
1
|
import * as _kb_labs_shared_command_kit from '@kb-labs/shared-command-kit';
|
|
2
|
+
import * as _kb_labs_quality_core from '@kb-labs/quality-core';
|
|
2
3
|
import { RestInput } from '@kb-labs/sdk';
|
|
3
4
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
}
|
|
7
|
-
type BuildOrderResponse = {
|
|
8
|
-
layers: string[][];
|
|
9
|
-
sorted: string[];
|
|
10
|
-
circular: string[][];
|
|
11
|
-
packageCount: number;
|
|
12
|
-
layerCount: number;
|
|
13
|
-
hasCircular: boolean;
|
|
14
|
-
};
|
|
15
|
-
declare const _default: _kb_labs_shared_command_kit.Handler<unknown, RestInput<BuildOrderRequest, unknown, unknown>, BuildOrderResponse>;
|
|
5
|
+
declare const _default: _kb_labs_shared_command_kit.Handler<unknown, RestInput<{
|
|
6
|
+
package?: string;
|
|
7
|
+
}, unknown, unknown>, _kb_labs_quality_core.BuildOrderResult>;
|
|
16
8
|
|
|
17
|
-
export {
|
|
9
|
+
export { _default as default };
|
|
@@ -1,25 +1,22 @@
|
|
|
1
|
-
import { defineHandler } from '@kb-labs/sdk';
|
|
2
|
-
import {
|
|
1
|
+
import { defineHandler, useConfig, rethrowForRest } from '@kb-labs/sdk';
|
|
2
|
+
import { analyzeBuildOrder } from '@kb-labs/quality-core';
|
|
3
|
+
import { defaultQualityConfig } from '@kb-labs/quality-contracts';
|
|
3
4
|
|
|
4
5
|
// src/rest/handlers/build-order-handler.ts
|
|
5
6
|
var build_order_handler_default = defineHandler({
|
|
6
7
|
async execute(ctx, input) {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
8
|
+
try {
|
|
9
|
+
const config = await useConfig();
|
|
10
|
+
const cfg = config ?? defaultQualityConfig;
|
|
11
|
+
const cwd = ctx.cwd ?? process.cwd();
|
|
12
|
+
return analyzeBuildOrder({
|
|
13
|
+
rootDir: cwd,
|
|
14
|
+
layerMap: cfg.layers,
|
|
15
|
+
filterPackage: input.query?.package
|
|
16
|
+
});
|
|
17
|
+
} catch (err) {
|
|
18
|
+
rethrowForRest(err);
|
|
14
19
|
}
|
|
15
|
-
return {
|
|
16
|
-
layers: result.layers,
|
|
17
|
-
sorted: result.sorted,
|
|
18
|
-
circular: result.circular,
|
|
19
|
-
packageCount: result.sorted.length,
|
|
20
|
-
layerCount: result.layers.length,
|
|
21
|
-
hasCircular: result.circular.length > 0
|
|
22
|
-
};
|
|
23
20
|
}
|
|
24
21
|
});
|
|
25
22
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/rest/handlers/build-order-handler.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/rest/handlers/build-order-handler.ts"],"names":[],"mappings":";;;;;AAIA,IAAO,8BAAQ,aAAA,CAAc;AAAA,EAC3B,MAAM,OAAA,CAAQ,GAAA,EAAsB,KAAA,EAAiD;AACnF,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,SAAA,EAA+B;AACpD,MAAA,MAAM,MAAM,MAAA,IAAU,oBAAA;AACtB,MAAA,MAAM,GAAA,GAAM,GAAA,CAAI,GAAA,IAAO,OAAA,CAAQ,GAAA,EAAI;AAEnC,MAAA,OAAO,iBAAA,CAAkB;AAAA,QACvB,OAAA,EAAS,GAAA;AAAA,QACT,UAAU,GAAA,CAAI,MAAA;AAAA,QACd,aAAA,EAAe,MAAM,KAAA,EAAO;AAAA,OAC7B,CAAA;AAAA,IACH,SAAS,GAAA,EAAK;AACZ,MAAA,cAAA,CAAe,GAAG,CAAA;AAAA,IACpB;AAAA,EACF;AACF,CAAC","file":"build-order-handler.js","sourcesContent":["import { defineHandler, rethrowForRest, useConfig, type PluginContextV3, type RestInput } from '@kb-labs/sdk';\nimport { analyzeBuildOrder } from '@kb-labs/quality-core';\nimport { defaultQualityConfig, type QualityPluginConfig } from '@kb-labs/quality-contracts';\n\nexport default defineHandler({\n async execute(ctx: PluginContextV3, input: RestInput<{ package?: string }, unknown>) {\n try {\n const config = await useConfig<QualityPluginConfig>();\n const cfg = config ?? defaultQualityConfig;\n const cwd = ctx.cwd ?? process.cwd();\n\n return analyzeBuildOrder({\n rootDir: cwd,\n layerMap: cfg.layers,\n filterPackage: input.query?.package,\n });\n } catch (err) {\n rethrowForRest(err);\n }\n },\n});\n"]}
|
|
@@ -1,14 +1,18 @@
|
|
|
1
|
-
import { defineHandler } from '@kb-labs/sdk';
|
|
1
|
+
import { defineHandler, rethrowForRest } from '@kb-labs/sdk';
|
|
2
2
|
import { checkBuilds } from '@kb-labs/quality-core/builds';
|
|
3
3
|
|
|
4
4
|
// src/rest/handlers/builds-handler.ts
|
|
5
5
|
var builds_handler_default = defineHandler({
|
|
6
6
|
async execute(ctx, input) {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
7
|
+
try {
|
|
8
|
+
const { package: packageFilter, timeout } = input.query ?? {};
|
|
9
|
+
return checkBuilds(ctx.cwd, {
|
|
10
|
+
packageFilter,
|
|
11
|
+
timeout: timeout || 3e4
|
|
12
|
+
});
|
|
13
|
+
} catch (err) {
|
|
14
|
+
rethrowForRest(err);
|
|
15
|
+
}
|
|
12
16
|
}
|
|
13
17
|
});
|
|
14
18
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/rest/handlers/builds-handler.ts"],"names":[],"mappings":";;;;AAiBA,IAAO,yBAAQ,aAAA,CAAc;AAAA,EAC3B,MAAM,OAAA,CACJ,GAAA,EACA,KAAA,EACyB;AACzB,IAAA,MAAM,EAAE,OAAA,EAAS,aAAA,EAAe,SAAQ,GAAI,KAAA,CAAM,SAAS,EAAC;AAE5D,
|
|
1
|
+
{"version":3,"sources":["../../../src/rest/handlers/builds-handler.ts"],"names":[],"mappings":";;;;AAiBA,IAAO,yBAAQ,aAAA,CAAc;AAAA,EAC3B,MAAM,OAAA,CACJ,GAAA,EACA,KAAA,EACyB;AACzB,IAAA,IAAI;AACF,MAAA,MAAM,EAAE,OAAA,EAAS,aAAA,EAAe,SAAQ,GAAI,KAAA,CAAM,SAAS,EAAC;AAE5D,MAAA,OAAO,WAAA,CAAY,IAAI,GAAA,EAAK;AAAA,QAC1B,aAAA;AAAA,QACA,SAAS,OAAA,IAAW;AAAA,OACrB,CAAA;AAAA,IACH,SAAS,GAAA,EAAK;AACZ,MAAA,cAAA,CAAe,GAAG,CAAA;AAAA,IACpB;AAAA,EACF;AACF,CAAC","file":"builds-handler.js","sourcesContent":["/**\n * GET /builds handler\n *\n * Get build status across monorepo packages.\n */\n\nimport { defineHandler, rethrowForRest, type PluginContextV3, type RestInput } from '@kb-labs/sdk';\nimport { checkBuilds } from '@kb-labs/quality-core/builds';\nimport type { BuildCheckResult } from '@kb-labs/quality-contracts';\n\nexport type BuildsRequest = {\n package?: string;\n timeout?: number;\n};\n\nexport type BuildsResponse = BuildCheckResult;\n\nexport default defineHandler({\n async execute(\n ctx: PluginContextV3,\n input: RestInput<BuildsRequest, unknown>\n ): Promise<BuildsResponse> {\n try {\n const { package: packageFilter, timeout } = input.query ?? {};\n\n return checkBuilds(ctx.cwd, {\n packageFilter,\n timeout: timeout || 30000,\n });\n } catch (err) {\n rethrowForRest(err);\n }\n },\n});\n"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import * as _kb_labs_shared_command_kit from '@kb-labs/shared-command-kit';
|
|
2
|
+
import { RestInput } from '@kb-labs/sdk';
|
|
3
|
+
|
|
4
|
+
declare const _default: _kb_labs_shared_command_kit.Handler<unknown, RestInput<{
|
|
5
|
+
refresh?: boolean;
|
|
6
|
+
}, unknown, unknown>, {}>;
|
|
7
|
+
|
|
8
|
+
export { _default as default };
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { defineHandler, useConfig, rethrowForRest } from '@kb-labs/sdk';
|
|
2
|
+
import { analyzeCoupling } from '@kb-labs/quality-core';
|
|
3
|
+
import { defaultQualityConfig, CACHE_KEYS, CACHE_TTLS } from '@kb-labs/quality-contracts';
|
|
4
|
+
|
|
5
|
+
// src/rest/handlers/coupling-handler.ts
|
|
6
|
+
var coupling_handler_default = defineHandler({
|
|
7
|
+
async execute(ctx, input) {
|
|
8
|
+
try {
|
|
9
|
+
const config = await useConfig();
|
|
10
|
+
const cfg = config ?? defaultQualityConfig;
|
|
11
|
+
const cwd = ctx.cwd ?? process.cwd();
|
|
12
|
+
const refresh = input.query?.refresh;
|
|
13
|
+
if (!refresh) {
|
|
14
|
+
const cached = await ctx.platform.cache.get(CACHE_KEYS.COUPLING);
|
|
15
|
+
if (cached) return cached;
|
|
16
|
+
}
|
|
17
|
+
const report = analyzeCoupling({ rootDir: cwd, layerMap: cfg.layers });
|
|
18
|
+
await ctx.platform.cache.set(CACHE_KEYS.COUPLING, report, CACHE_TTLS.FAST);
|
|
19
|
+
return report;
|
|
20
|
+
} catch (err) {
|
|
21
|
+
rethrowForRest(err);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
export { coupling_handler_default as default };
|
|
27
|
+
//# sourceMappingURL=coupling-handler.js.map
|
|
28
|
+
//# sourceMappingURL=coupling-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/rest/handlers/coupling-handler.ts"],"names":[],"mappings":";;;;;AAIA,IAAO,2BAAQ,aAAA,CAAc;AAAA,EAC3B,MAAM,OAAA,CAAQ,GAAA,EAAsB,KAAA,EAAkD;AACpF,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,SAAA,EAA+B;AACpD,MAAA,MAAM,MAAM,MAAA,IAAU,oBAAA;AACtB,MAAA,MAAM,GAAA,GAAM,GAAA,CAAI,GAAA,IAAO,OAAA,CAAQ,GAAA,EAAI;AACnC,MAAA,MAAM,OAAA,GAAU,MAAM,KAAA,EAAO,OAAA;AAE7B,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,MAAM,SAAS,MAAM,GAAA,CAAI,SAAS,KAAA,CAAM,GAAA,CAAI,WAAW,QAAQ,CAAA;AAC/D,QAAA,IAAI,QAAQ,OAAO,MAAA;AAAA,MACrB;AAEA,MAAA,MAAM,MAAA,GAAS,gBAAgB,EAAE,OAAA,EAAS,KAAK,QAAA,EAAU,GAAA,CAAI,QAAQ,CAAA;AACrE,MAAA,MAAM,GAAA,CAAI,SAAS,KAAA,CAAM,GAAA,CAAI,WAAW,QAAA,EAAU,MAAA,EAAQ,WAAW,IAAI,CAAA;AACzE,MAAA,OAAO,MAAA;AAAA,IACT,SAAS,GAAA,EAAK;AACZ,MAAA,cAAA,CAAe,GAAG,CAAA;AAAA,IACpB;AAAA,EACF;AACF,CAAC","file":"coupling-handler.js","sourcesContent":["import { defineHandler, rethrowForRest, useConfig, type PluginContextV3, type RestInput } from '@kb-labs/sdk';\nimport { analyzeCoupling } from '@kb-labs/quality-core';\nimport { CACHE_KEYS, CACHE_TTLS, defaultQualityConfig, type QualityPluginConfig } from '@kb-labs/quality-contracts';\n\nexport default defineHandler({\n async execute(ctx: PluginContextV3, input: RestInput<{ refresh?: boolean }, unknown>) {\n try {\n const config = await useConfig<QualityPluginConfig>();\n const cfg = config ?? defaultQualityConfig;\n const cwd = ctx.cwd ?? process.cwd();\n const refresh = input.query?.refresh;\n\n if (!refresh) {\n const cached = await ctx.platform.cache.get(CACHE_KEYS.COUPLING);\n if (cached) return cached;\n }\n\n const report = analyzeCoupling({ rootDir: cwd, layerMap: cfg.layers });\n await ctx.platform.cache.set(CACHE_KEYS.COUPLING, report, CACHE_TTLS.FAST);\n return report;\n } catch (err) {\n rethrowForRest(err);\n }\n },\n});\n"]}
|
|
@@ -1,20 +1,24 @@
|
|
|
1
|
-
import { defineHandler } from '@kb-labs/sdk';
|
|
1
|
+
import { defineHandler, rethrowForRest } from '@kb-labs/sdk';
|
|
2
2
|
import { buildDependencyGraph, findCircularDependencies } from '@kb-labs/quality-core/graph';
|
|
3
3
|
|
|
4
4
|
// src/rest/handlers/cycles-handler.ts
|
|
5
5
|
var cycles_handler_default = defineHandler({
|
|
6
6
|
async execute(ctx, input) {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
7
|
+
try {
|
|
8
|
+
const graph = buildDependencyGraph(ctx.cwd);
|
|
9
|
+
const cycles = findCircularDependencies(graph);
|
|
10
|
+
const affectedPackages = Array.from(
|
|
11
|
+
new Set(cycles.flat())
|
|
12
|
+
);
|
|
13
|
+
return {
|
|
14
|
+
cycles,
|
|
15
|
+
cycleCount: cycles.length,
|
|
16
|
+
hasCircular: cycles.length > 0,
|
|
17
|
+
affectedPackages
|
|
18
|
+
};
|
|
19
|
+
} catch (err) {
|
|
20
|
+
rethrowForRest(err);
|
|
21
|
+
}
|
|
18
22
|
}
|
|
19
23
|
});
|
|
20
24
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/rest/handlers/cycles-handler.ts"],"names":[],"mappings":";;;;AAsBA,IAAO,yBAAQ,aAAA,CAAc;AAAA,EAC3B,MAAM,OAAA,CACJ,GAAA,EACA,KAAA,EACyB;
|
|
1
|
+
{"version":3,"sources":["../../../src/rest/handlers/cycles-handler.ts"],"names":[],"mappings":";;;;AAsBA,IAAO,yBAAQ,aAAA,CAAc;AAAA,EAC3B,MAAM,OAAA,CACJ,GAAA,EACA,KAAA,EACyB;AACzB,IAAA,IAAI;AAEF,MAAA,MAAM,KAAA,GAAQ,oBAAA,CAAqB,GAAA,CAAI,GAAG,CAAA;AAG1C,MAAA,MAAM,MAAA,GAAS,yBAAyB,KAAK,CAAA;AAG7C,MAAA,MAAM,mBAAmB,KAAA,CAAM,IAAA;AAAA,QAC7B,IAAI,GAAA,CAAI,MAAA,CAAO,IAAA,EAAM;AAAA,OACvB;AAEA,MAAA,OAAO;AAAA,QACL,MAAA;AAAA,QACA,YAAY,MAAA,CAAO,MAAA;AAAA,QACnB,WAAA,EAAa,OAAO,MAAA,GAAS,CAAA;AAAA,QAC7B;AAAA,OACF;AAAA,IACF,SAAS,GAAA,EAAK;AACZ,MAAA,cAAA,CAAe,GAAG,CAAA;AAAA,IACpB;AAAA,EACF;AACF,CAAC","file":"cycles-handler.js","sourcesContent":["/**\n * POST /cycles handler\n *\n * Detect circular dependencies in monorepo.\n * Returns all circular dependency chains.\n */\n\nimport { defineHandler, rethrowForRest, type PluginContextV3, type RestInput } from '@kb-labs/sdk';\nimport {\n buildDependencyGraph,\n findCircularDependencies,\n} from '@kb-labs/quality-core/graph';\n\nexport type CyclesRequest = Record<string, never>; // Empty object\n\nexport type CyclesResponse = {\n cycles: string[][];\n cycleCount: number;\n hasCircular: boolean;\n affectedPackages: string[];\n};\n\nexport default defineHandler({\n async execute(\n ctx: PluginContextV3,\n input: RestInput<unknown, CyclesRequest>\n ): Promise<CyclesResponse> {\n try {\n // Build dependency graph\n const graph = buildDependencyGraph(ctx.cwd);\n\n // Find circular dependencies\n const cycles = findCircularDependencies(graph);\n\n // Get all affected packages (unique)\n const affectedPackages = Array.from(\n new Set(cycles.flat())\n );\n\n return {\n cycles,\n cycleCount: cycles.length,\n hasCircular: cycles.length > 0,\n affectedPackages,\n };\n } catch (err) {\n rethrowForRest(err);\n }\n },\n});\n"]}
|
|
@@ -1,16 +1,20 @@
|
|
|
1
|
-
import { defineHandler } from '@kb-labs/sdk';
|
|
1
|
+
import { defineHandler, rethrowForRest } from '@kb-labs/sdk';
|
|
2
2
|
import { analyzeDependencies } from '@kb-labs/quality-core/dependencies';
|
|
3
3
|
|
|
4
4
|
// src/rest/handlers/dependencies-handler.ts
|
|
5
5
|
var dependencies_handler_default = defineHandler({
|
|
6
6
|
async execute(ctx, input) {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
7
|
+
try {
|
|
8
|
+
const analysis = await analyzeDependencies(ctx.cwd);
|
|
9
|
+
return {
|
|
10
|
+
duplicates: analysis.duplicates,
|
|
11
|
+
unused: analysis.unused,
|
|
12
|
+
missing: analysis.missing,
|
|
13
|
+
totalIssues: analysis.duplicates.length + analysis.unused.length + analysis.missing.length
|
|
14
|
+
};
|
|
15
|
+
} catch (err) {
|
|
16
|
+
rethrowForRest(err);
|
|
17
|
+
}
|
|
14
18
|
}
|
|
15
19
|
});
|
|
16
20
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/rest/handlers/dependencies-handler.ts"],"names":[],"mappings":";;;;AAuBA,IAAO,+BAAQ,aAAA,CAAc;AAAA,EAC3B,MAAM,OAAA,CACJ,GAAA,EACA,KAAA,EAC+B;AAC/B,IAAA,MAAM,QAAA,GAAW,MAAM,mBAAA,CAAoB,GAAA,CAAI,GAAG,CAAA;AAElD,
|
|
1
|
+
{"version":3,"sources":["../../../src/rest/handlers/dependencies-handler.ts"],"names":[],"mappings":";;;;AAuBA,IAAO,+BAAQ,aAAA,CAAc;AAAA,EAC3B,MAAM,OAAA,CACJ,GAAA,EACA,KAAA,EAC+B;AAC/B,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,MAAM,mBAAA,CAAoB,GAAA,CAAI,GAAG,CAAA;AAElD,MAAA,OAAO;AAAA,QACL,YAAY,QAAA,CAAS,UAAA;AAAA,QACrB,QAAQ,QAAA,CAAS,MAAA;AAAA,QACjB,SAAS,QAAA,CAAS,OAAA;AAAA,QAClB,WAAA,EACE,SAAS,UAAA,CAAW,MAAA,GACpB,SAAS,MAAA,CAAO,MAAA,GAChB,SAAS,OAAA,CAAQ;AAAA,OACrB;AAAA,IACF,SAAS,GAAA,EAAK;AACZ,MAAA,cAAA,CAAe,GAAG,CAAA;AAAA,IACpB;AAAA,EACF;AACF,CAAC","file":"dependencies-handler.js","sourcesContent":["/**\n * POST /dependencies handler\n *\n * Analyze dependencies: find duplicates, unused, missing.\n */\n\nimport { defineHandler, rethrowForRest, type PluginContextV3, type RestInput } from '@kb-labs/sdk';\nimport {\n analyzeDependencies,\n type DuplicateDependency,\n type UnusedDependency,\n type MissingDependency,\n} from '@kb-labs/quality-core/dependencies';\n\nexport type DependenciesRequest = Record<string, never>; // Empty object\n\nexport type DependenciesResponse = {\n duplicates: DuplicateDependency[];\n unused: UnusedDependency[];\n missing: MissingDependency[];\n totalIssues: number;\n};\n\nexport default defineHandler({\n async execute(\n ctx: PluginContextV3,\n input: RestInput<unknown, DependenciesRequest>\n ): Promise<DependenciesResponse> {\n try {\n const analysis = await analyzeDependencies(ctx.cwd);\n\n return {\n duplicates: analysis.duplicates,\n unused: analysis.unused,\n missing: analysis.missing,\n totalIssues:\n analysis.duplicates.length +\n analysis.unused.length +\n analysis.missing.length,\n };\n } catch (err) {\n rethrowForRest(err);\n }\n },\n});\n"]}
|
|
@@ -1,92 +1,96 @@
|
|
|
1
|
-
import { defineHandler } from '@kb-labs/sdk';
|
|
1
|
+
import { defineHandler, rethrowForRest } from '@kb-labs/sdk';
|
|
2
2
|
import { buildDependencyGraph, getReverseDependencies, getImpactAnalysis } from '@kb-labs/quality-core/graph';
|
|
3
3
|
|
|
4
4
|
// src/rest/handlers/graph-handler.ts
|
|
5
5
|
var graph_handler_default = defineHandler({
|
|
6
6
|
async execute(ctx, input) {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
key,
|
|
15
|
-
{
|
|
16
|
-
...value,
|
|
17
|
-
deps: new Set(value.deps),
|
|
18
|
-
devDeps: value.devDeps ? new Set(value.devDeps) : void 0,
|
|
19
|
-
dependents: new Set(value.dependents)
|
|
20
|
-
}
|
|
21
|
-
])),
|
|
22
|
-
workspacePackages: new Set(cached.workspacePackages)
|
|
23
|
-
};
|
|
24
|
-
} else {
|
|
25
|
-
graph = buildDependencyGraph(ctx.cwd);
|
|
26
|
-
const serialized = {
|
|
27
|
-
nodes: Object.fromEntries(
|
|
28
|
-
Array.from(graph.nodes.entries()).map(([key, value]) => [
|
|
7
|
+
try {
|
|
8
|
+
const { packageName, mode } = input.query ?? { mode: "stats" };
|
|
9
|
+
const cacheKey = `quality:graph:${ctx.cwd}`;
|
|
10
|
+
const cached = await ctx.platform.cache.get(cacheKey);
|
|
11
|
+
let graph;
|
|
12
|
+
if (cached) {
|
|
13
|
+
graph = {
|
|
14
|
+
nodes: new Map(Object.entries(cached.nodes).map(([key, value]) => [
|
|
29
15
|
key,
|
|
30
16
|
{
|
|
31
17
|
...value,
|
|
32
|
-
deps:
|
|
33
|
-
devDeps: value.devDeps ?
|
|
34
|
-
dependents:
|
|
18
|
+
deps: new Set(value.deps),
|
|
19
|
+
devDeps: value.devDeps ? new Set(value.devDeps) : void 0,
|
|
20
|
+
dependents: new Set(value.dependents)
|
|
21
|
+
}
|
|
22
|
+
])),
|
|
23
|
+
workspacePackages: new Set(cached.workspacePackages)
|
|
24
|
+
};
|
|
25
|
+
} else {
|
|
26
|
+
graph = buildDependencyGraph(ctx.cwd);
|
|
27
|
+
const serialized = {
|
|
28
|
+
nodes: Object.fromEntries(
|
|
29
|
+
Array.from(graph.nodes.entries()).map(([key, value]) => [
|
|
30
|
+
key,
|
|
31
|
+
{
|
|
32
|
+
...value,
|
|
33
|
+
deps: Array.from(value.deps),
|
|
34
|
+
devDeps: value.devDeps ? Array.from(value.devDeps) : void 0,
|
|
35
|
+
dependents: Array.from(value.dependents)
|
|
36
|
+
}
|
|
37
|
+
])
|
|
38
|
+
),
|
|
39
|
+
workspacePackages: Array.from(graph.workspacePackages)
|
|
40
|
+
};
|
|
41
|
+
await ctx.platform.cache.set(cacheKey, serialized, 12e4);
|
|
42
|
+
}
|
|
43
|
+
if (mode === "stats") {
|
|
44
|
+
return {
|
|
45
|
+
mode,
|
|
46
|
+
stats: calculateGraphStats(graph)
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
if (mode === "tree") {
|
|
50
|
+
if (!packageName) {
|
|
51
|
+
const rootPackages = [];
|
|
52
|
+
for (const [name, node] of graph.nodes) {
|
|
53
|
+
if (node.dependents.size === 0) {
|
|
54
|
+
rootPackages.push(name);
|
|
35
55
|
}
|
|
36
|
-
])
|
|
37
|
-
),
|
|
38
|
-
workspacePackages: Array.from(graph.workspacePackages)
|
|
39
|
-
};
|
|
40
|
-
await ctx.platform.cache.set(cacheKey, serialized, 12e4);
|
|
41
|
-
}
|
|
42
|
-
if (mode === "stats") {
|
|
43
|
-
return {
|
|
44
|
-
mode,
|
|
45
|
-
stats: calculateGraphStats(graph)
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
if (mode === "tree") {
|
|
49
|
-
if (!packageName) {
|
|
50
|
-
const rootPackages = [];
|
|
51
|
-
for (const [name, node] of graph.nodes) {
|
|
52
|
-
if (node.dependents.size === 0) {
|
|
53
|
-
rootPackages.push(name);
|
|
54
56
|
}
|
|
57
|
+
return {
|
|
58
|
+
mode,
|
|
59
|
+
tree: {
|
|
60
|
+
name: "Root Packages",
|
|
61
|
+
children: rootPackages.map((pkg) => buildDependencyTree(graph, pkg))
|
|
62
|
+
}
|
|
63
|
+
};
|
|
55
64
|
}
|
|
56
65
|
return {
|
|
57
66
|
mode,
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
children: rootPackages.map((pkg) => buildDependencyTree(graph, pkg))
|
|
61
|
-
}
|
|
67
|
+
packageName,
|
|
68
|
+
tree: buildDependencyTree(graph, packageName)
|
|
62
69
|
};
|
|
63
70
|
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
packages: Array.from(affected)
|
|
87
|
-
};
|
|
71
|
+
if (!packageName) {
|
|
72
|
+
throw new Error("packageName is required for reverse and impact modes");
|
|
73
|
+
}
|
|
74
|
+
if (mode === "reverse") {
|
|
75
|
+
const reverseDeps = getReverseDependencies(graph, packageName);
|
|
76
|
+
return {
|
|
77
|
+
mode,
|
|
78
|
+
packageName,
|
|
79
|
+
packages: Array.from(reverseDeps)
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
if (mode === "impact") {
|
|
83
|
+
const affected = getImpactAnalysis(graph, packageName);
|
|
84
|
+
return {
|
|
85
|
+
mode,
|
|
86
|
+
packageName,
|
|
87
|
+
packages: Array.from(affected)
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
throw new Error(`Unknown mode: ${mode}`);
|
|
91
|
+
} catch (err) {
|
|
92
|
+
rethrowForRest(err);
|
|
88
93
|
}
|
|
89
|
-
throw new Error(`Unknown mode: ${mode}`);
|
|
90
94
|
}
|
|
91
95
|
});
|
|
92
96
|
function buildDependencyTree(graph, packageName, visited = /* @__PURE__ */ new Set()) {
|