@kb-labs/quality-entry 2.14.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.
Files changed (74) hide show
  1. package/README.md +120 -0
  2. package/dist/cli/commands/build-order.d.ts +16 -0
  3. package/dist/cli/commands/build-order.js +113 -0
  4. package/dist/cli/commands/build-order.js.map +1 -0
  5. package/dist/cli/commands/check-builds.d.ts +10 -0
  6. package/dist/cli/commands/check-builds.js +93 -0
  7. package/dist/cli/commands/check-builds.js.map +1 -0
  8. package/dist/cli/commands/check-tests.d.ts +10 -0
  9. package/dist/cli/commands/check-tests.js +114 -0
  10. package/dist/cli/commands/check-tests.js.map +1 -0
  11. package/dist/cli/commands/check-types.d.ts +10 -0
  12. package/dist/cli/commands/check-types.js +108 -0
  13. package/dist/cli/commands/check-types.js.map +1 -0
  14. package/dist/cli/commands/cycles.d.ts +17 -0
  15. package/dist/cli/commands/cycles.js +85 -0
  16. package/dist/cli/commands/cycles.js.map +1 -0
  17. package/dist/cli/commands/dead-code.d.ts +10 -0
  18. package/dist/cli/commands/dead-code.js +217 -0
  19. package/dist/cli/commands/dead-code.js.map +1 -0
  20. package/dist/cli/commands/fix-deps.d.ts +28 -0
  21. package/dist/cli/commands/fix-deps.js +389 -0
  22. package/dist/cli/commands/fix-deps.js.map +1 -0
  23. package/dist/cli/commands/flags.d.ts +344 -0
  24. package/dist/cli/commands/flags.js +298 -0
  25. package/dist/cli/commands/flags.js.map +1 -0
  26. package/dist/cli/commands/health.d.ts +10 -0
  27. package/dist/cli/commands/health.js +210 -0
  28. package/dist/cli/commands/health.js.map +1 -0
  29. package/dist/cli/commands/index.d.ts +14 -0
  30. package/dist/cli/commands/index.js +1747 -0
  31. package/dist/cli/commands/index.js.map +1 -0
  32. package/dist/cli/commands/stats.d.ts +10 -0
  33. package/dist/cli/commands/stats.js +282 -0
  34. package/dist/cli/commands/stats.js.map +1 -0
  35. package/dist/cli/commands/visualize.d.ts +26 -0
  36. package/dist/cli/commands/visualize.js +210 -0
  37. package/dist/cli/commands/visualize.js.map +1 -0
  38. package/dist/index.d.ts +2 -0
  39. package/dist/index.js +666 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/manifest.d.ts +168 -0
  42. package/dist/manifest.js +666 -0
  43. package/dist/manifest.js.map +1 -0
  44. package/dist/rest/handlers/build-order-handler.d.ts +17 -0
  45. package/dist/rest/handlers/build-order-handler.js +28 -0
  46. package/dist/rest/handlers/build-order-handler.js.map +1 -0
  47. package/dist/rest/handlers/builds-handler.d.ts +12 -0
  48. package/dist/rest/handlers/builds-handler.js +17 -0
  49. package/dist/rest/handlers/builds-handler.js.map +1 -0
  50. package/dist/rest/handlers/cycles-handler.d.ts +13 -0
  51. package/dist/rest/handlers/cycles-handler.js +23 -0
  52. package/dist/rest/handlers/cycles-handler.js.map +1 -0
  53. package/dist/rest/handlers/dependencies-handler.d.ts +14 -0
  54. package/dist/rest/handlers/dependencies-handler.js +19 -0
  55. package/dist/rest/handlers/dependencies-handler.js.map +1 -0
  56. package/dist/rest/handlers/graph-handler.d.ts +30 -0
  57. package/dist/rest/handlers/graph-handler.js +155 -0
  58. package/dist/rest/handlers/graph-handler.js.map +1 -0
  59. package/dist/rest/handlers/health-handler.d.ts +15 -0
  60. package/dist/rest/handlers/health-handler.js +19 -0
  61. package/dist/rest/handlers/health-handler.js.map +1 -0
  62. package/dist/rest/handlers/stale-handler.d.ts +30 -0
  63. package/dist/rest/handlers/stale-handler.js +20 -0
  64. package/dist/rest/handlers/stale-handler.js.map +1 -0
  65. package/dist/rest/handlers/stats-handler.d.ts +16 -0
  66. package/dist/rest/handlers/stats-handler.js +29 -0
  67. package/dist/rest/handlers/stats-handler.js.map +1 -0
  68. package/dist/rest/handlers/tests-handler.d.ts +14 -0
  69. package/dist/rest/handlers/tests-handler.js +19 -0
  70. package/dist/rest/handlers/tests-handler.js.map +1 -0
  71. package/dist/rest/handlers/types-handler.d.ts +12 -0
  72. package/dist/rest/handlers/types-handler.js +17 -0
  73. package/dist/rest/handlers/types-handler.js.map +1 -0
  74. package/package.json +98 -0
@@ -0,0 +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\nexport type StatsFlags = typeof statsFlags;\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\nexport type HealthFlags = typeof healthFlags;\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\nexport type FixDepsFlags = typeof fixDepsFlags;\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\nexport type RunFlags = typeof runFlags;\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\nexport type BuildOrderFlags = typeof buildOrderFlags;\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\nexport type CyclesFlags = typeof cyclesFlags;\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\nexport type VisualizeFlags = typeof visualizeFlags;\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\nexport type CheckBuildsFlags = typeof checkBuildsFlags;\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\nexport type CheckTypesFlags = typeof checkTypesFlags;\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\nexport type CheckTestsFlags = typeof checkTestsFlags;\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\nexport type DeadCodeFlags = typeof deadCodeFlags;\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: 'quality: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: 'quality: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: 'quality: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: 'quality: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: 'quality: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: 'quality: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: 'quality: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: 'quality: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: 'quality: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: 'quality: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"]}
@@ -0,0 +1,17 @@
1
+ import * as _kb_labs_shared_command_kit from '@kb-labs/shared-command-kit';
2
+ import { RestInput } from '@kb-labs/sdk';
3
+
4
+ type BuildOrderRequest = {
5
+ packageName?: string;
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>;
16
+
17
+ export { type BuildOrderRequest, type BuildOrderResponse, _default as default };
@@ -0,0 +1,28 @@
1
+ import { defineHandler } from '@kb-labs/sdk';
2
+ import { buildDependencyGraph, getBuildOrderForPackage, topologicalSort } from '@kb-labs/quality-core/graph';
3
+
4
+ // src/rest/handlers/build-order-handler.ts
5
+ var build_order_handler_default = defineHandler({
6
+ async execute(ctx, input) {
7
+ const packageName = input.query?.packageName;
8
+ const graph = buildDependencyGraph(ctx.cwd);
9
+ let result;
10
+ if (packageName) {
11
+ result = getBuildOrderForPackage(graph, packageName);
12
+ } else {
13
+ result = topologicalSort(graph);
14
+ }
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
+ }
24
+ });
25
+
26
+ export { build_order_handler_default as default };
27
+ //# sourceMappingURL=build-order-handler.js.map
28
+ //# sourceMappingURL=build-order-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/rest/handlers/build-order-handler.ts"],"names":[],"mappings":";;;;AA4BA,IAAO,8BAAQ,aAAA,CAAc;AAAA,EAC3B,MAAM,OAAA,CACJ,GAAA,EACA,KAAA,EAC6B;AAC7B,IAAA,MAAM,WAAA,GAAc,MAAM,KAAA,EAAO,WAAA;AAGjC,IAAA,MAAM,KAAA,GAAQ,oBAAA,CAAqB,GAAA,CAAI,GAAG,CAAA;AAG1C,IAAA,IAAI,MAAA;AACJ,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,MAAA,GAAS,uBAAA,CAAwB,OAAO,WAAW,CAAA;AAAA,IACrD,CAAA,MAAO;AACL,MAAA,MAAA,GAAS,gBAAgB,KAAK,CAAA;AAAA,IAChC;AAEA,IAAA,OAAO;AAAA,MACL,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,YAAA,EAAc,OAAO,MAAA,CAAO,MAAA;AAAA,MAC5B,UAAA,EAAY,OAAO,MAAA,CAAO,MAAA;AAAA,MAC1B,WAAA,EAAa,MAAA,CAAO,QAAA,CAAS,MAAA,GAAS;AAAA,KACxC;AAAA,EACF;AACF,CAAC","file":"build-order-handler.js","sourcesContent":["/**\n * POST /build-order handler\n *\n * Calculate build order with topological sort.\n * Returns build layers for parallel execution.\n */\n\nimport { defineHandler, type PluginContextV3, type RestInput } from '@kb-labs/sdk';\nimport {\n buildDependencyGraph,\n topologicalSort,\n getBuildOrderForPackage,\n type TopologicalSortResult,\n} from '@kb-labs/quality-core/graph';\n\nexport type BuildOrderRequest = {\n packageName?: string;\n};\n\nexport type BuildOrderResponse = {\n layers: string[][];\n sorted: string[];\n circular: string[][];\n packageCount: number;\n layerCount: number;\n hasCircular: boolean;\n};\n\nexport default defineHandler({\n async execute(\n ctx: PluginContextV3,\n input: RestInput<BuildOrderRequest, unknown>\n ): Promise<BuildOrderResponse> {\n const packageName = input.query?.packageName;\n\n // Build dependency graph\n const graph = buildDependencyGraph(ctx.cwd);\n\n // Calculate build order\n let result: TopologicalSortResult;\n if (packageName) {\n result = getBuildOrderForPackage(graph, packageName);\n } else {\n result = topologicalSort(graph);\n }\n\n return {\n layers: result.layers,\n sorted: result.sorted,\n circular: result.circular,\n packageCount: result.sorted.length,\n layerCount: result.layers.length,\n hasCircular: result.circular.length > 0,\n };\n },\n});\n"]}
@@ -0,0 +1,12 @@
1
+ import * as _kb_labs_shared_command_kit from '@kb-labs/shared-command-kit';
2
+ import { RestInput } from '@kb-labs/sdk';
3
+ import { BuildCheckResult } from '@kb-labs/quality-contracts';
4
+
5
+ type BuildsRequest = {
6
+ package?: string;
7
+ timeout?: number;
8
+ };
9
+ type BuildsResponse = BuildCheckResult;
10
+ declare const _default: _kb_labs_shared_command_kit.Handler<unknown, RestInput<BuildsRequest, unknown, unknown>, BuildCheckResult>;
11
+
12
+ export { type BuildsRequest, type BuildsResponse, _default as default };
@@ -0,0 +1,17 @@
1
+ import { defineHandler } from '@kb-labs/sdk';
2
+ import { checkBuilds } from '@kb-labs/quality-core/builds';
3
+
4
+ // src/rest/handlers/builds-handler.ts
5
+ var builds_handler_default = defineHandler({
6
+ async execute(ctx, input) {
7
+ const { package: packageFilter, timeout } = input.query ?? {};
8
+ return checkBuilds(ctx.cwd, {
9
+ packageFilter,
10
+ timeout: timeout || 3e4
11
+ });
12
+ }
13
+ });
14
+
15
+ export { builds_handler_default as default };
16
+ //# sourceMappingURL=builds-handler.js.map
17
+ //# sourceMappingURL=builds-handler.js.map
@@ -0,0 +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,IAAA,OAAO,WAAA,CAAY,IAAI,GAAA,EAAK;AAAA,MAC1B,aAAA;AAAA,MACA,SAAS,OAAA,IAAW;AAAA,KACrB,CAAA;AAAA,EACH;AACF,CAAC","file":"builds-handler.js","sourcesContent":["/**\n * GET /builds handler\n *\n * Get build status across monorepo packages.\n */\n\nimport { defineHandler, 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 const { package: packageFilter, timeout } = input.query ?? {};\n\n return checkBuilds(ctx.cwd, {\n packageFilter,\n timeout: timeout || 30000,\n });\n },\n});\n"]}
@@ -0,0 +1,13 @@
1
+ import * as _kb_labs_shared_command_kit from '@kb-labs/shared-command-kit';
2
+ import { RestInput } from '@kb-labs/sdk';
3
+
4
+ type CyclesRequest = Record<string, never>;
5
+ type CyclesResponse = {
6
+ cycles: string[][];
7
+ cycleCount: number;
8
+ hasCircular: boolean;
9
+ affectedPackages: string[];
10
+ };
11
+ declare const _default: _kb_labs_shared_command_kit.Handler<unknown, RestInput<unknown, CyclesRequest, unknown>, CyclesResponse>;
12
+
13
+ export { type CyclesRequest, type CyclesResponse, _default as default };
@@ -0,0 +1,23 @@
1
+ import { defineHandler } from '@kb-labs/sdk';
2
+ import { buildDependencyGraph, findCircularDependencies } from '@kb-labs/quality-core/graph';
3
+
4
+ // src/rest/handlers/cycles-handler.ts
5
+ var cycles_handler_default = defineHandler({
6
+ async execute(ctx, input) {
7
+ const graph = buildDependencyGraph(ctx.cwd);
8
+ const cycles = findCircularDependencies(graph);
9
+ const affectedPackages = Array.from(
10
+ new Set(cycles.flat())
11
+ );
12
+ return {
13
+ cycles,
14
+ cycleCount: cycles.length,
15
+ hasCircular: cycles.length > 0,
16
+ affectedPackages
17
+ };
18
+ }
19
+ });
20
+
21
+ export { cycles_handler_default as default };
22
+ //# sourceMappingURL=cycles-handler.js.map
23
+ //# sourceMappingURL=cycles-handler.js.map
@@ -0,0 +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;AAEzB,IAAA,MAAM,KAAA,GAAQ,oBAAA,CAAqB,GAAA,CAAI,GAAG,CAAA;AAG1C,IAAA,MAAM,MAAA,GAAS,yBAAyB,KAAK,CAAA;AAG7C,IAAA,MAAM,mBAAmB,KAAA,CAAM,IAAA;AAAA,MAC7B,IAAI,GAAA,CAAI,MAAA,CAAO,IAAA,EAAM;AAAA,KACvB;AAEA,IAAA,OAAO;AAAA,MACL,MAAA;AAAA,MACA,YAAY,MAAA,CAAO,MAAA;AAAA,MACnB,WAAA,EAAa,OAAO,MAAA,GAAS,CAAA;AAAA,MAC7B;AAAA,KACF;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, 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 // 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 },\n});\n"]}
@@ -0,0 +1,14 @@
1
+ import * as _kb_labs_shared_command_kit from '@kb-labs/shared-command-kit';
2
+ import { RestInput } from '@kb-labs/sdk';
3
+ import { DuplicateDependency, UnusedDependency, MissingDependency } from '@kb-labs/quality-core/dependencies';
4
+
5
+ type DependenciesRequest = Record<string, never>;
6
+ type DependenciesResponse = {
7
+ duplicates: DuplicateDependency[];
8
+ unused: UnusedDependency[];
9
+ missing: MissingDependency[];
10
+ totalIssues: number;
11
+ };
12
+ declare const _default: _kb_labs_shared_command_kit.Handler<unknown, RestInput<unknown, DependenciesRequest, unknown>, DependenciesResponse>;
13
+
14
+ export { type DependenciesRequest, type DependenciesResponse, _default as default };
@@ -0,0 +1,19 @@
1
+ import { defineHandler } from '@kb-labs/sdk';
2
+ import { analyzeDependencies } from '@kb-labs/quality-core/dependencies';
3
+
4
+ // src/rest/handlers/dependencies-handler.ts
5
+ var dependencies_handler_default = defineHandler({
6
+ async execute(ctx, input) {
7
+ const analysis = await analyzeDependencies(ctx.cwd);
8
+ return {
9
+ duplicates: analysis.duplicates,
10
+ unused: analysis.unused,
11
+ missing: analysis.missing,
12
+ totalIssues: analysis.duplicates.length + analysis.unused.length + analysis.missing.length
13
+ };
14
+ }
15
+ });
16
+
17
+ export { dependencies_handler_default as default };
18
+ //# sourceMappingURL=dependencies-handler.js.map
19
+ //# sourceMappingURL=dependencies-handler.js.map
@@ -0,0 +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,IAAA,OAAO;AAAA,MACL,YAAY,QAAA,CAAS,UAAA;AAAA,MACrB,QAAQ,QAAA,CAAS,MAAA;AAAA,MACjB,SAAS,QAAA,CAAS,OAAA;AAAA,MAClB,WAAA,EACE,SAAS,UAAA,CAAW,MAAA,GACpB,SAAS,MAAA,CAAO,MAAA,GAChB,SAAS,OAAA,CAAQ;AAAA,KACrB;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, 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 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 },\n});\n"]}
@@ -0,0 +1,30 @@
1
+ import * as _kb_labs_shared_command_kit from '@kb-labs/shared-command-kit';
2
+ import { RestInput } from '@kb-labs/sdk';
3
+
4
+ type GraphRequest = {
5
+ packageName?: string;
6
+ mode: 'tree' | 'reverse' | 'impact' | 'stats';
7
+ };
8
+ type GraphResponse = {
9
+ mode: string;
10
+ packageName?: string;
11
+ tree?: DependencyTree;
12
+ packages?: string[];
13
+ stats?: GraphStats;
14
+ };
15
+ type DependencyTree = {
16
+ name: string;
17
+ children: DependencyTree[];
18
+ };
19
+ type GraphStats = {
20
+ totalPackages: number;
21
+ maxDepth: number;
22
+ avgDependencies: number;
23
+ mostDepended: Array<{
24
+ name: string;
25
+ count: number;
26
+ }>;
27
+ };
28
+ declare const _default: _kb_labs_shared_command_kit.Handler<unknown, RestInput<GraphRequest, unknown, unknown>, GraphResponse>;
29
+
30
+ export { type DependencyTree, type GraphRequest, type GraphResponse, type GraphStats, _default as default };
@@ -0,0 +1,155 @@
1
+ import { defineHandler } from '@kb-labs/sdk';
2
+ import { buildDependencyGraph, getReverseDependencies, getImpactAnalysis } from '@kb-labs/quality-core/graph';
3
+
4
+ // src/rest/handlers/graph-handler.ts
5
+ var graph_handler_default = defineHandler({
6
+ async execute(ctx, input) {
7
+ const { packageName, mode } = input.query ?? { mode: "stats" };
8
+ const cacheKey = `quality:graph:${ctx.cwd}`;
9
+ const cached = await ctx.platform.cache.get(cacheKey);
10
+ let graph;
11
+ if (cached) {
12
+ graph = {
13
+ nodes: new Map(Object.entries(cached.nodes).map(([key, value]) => [
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]) => [
29
+ key,
30
+ {
31
+ ...value,
32
+ deps: Array.from(value.deps),
33
+ devDeps: value.devDeps ? Array.from(value.devDeps) : void 0,
34
+ dependents: Array.from(value.dependents)
35
+ }
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
+ }
55
+ }
56
+ return {
57
+ mode,
58
+ tree: {
59
+ name: "Root Packages",
60
+ children: rootPackages.map((pkg) => buildDependencyTree(graph, pkg))
61
+ }
62
+ };
63
+ }
64
+ return {
65
+ mode,
66
+ packageName,
67
+ tree: buildDependencyTree(graph, packageName)
68
+ };
69
+ }
70
+ if (!packageName) {
71
+ throw new Error("packageName is required for reverse and impact modes");
72
+ }
73
+ if (mode === "reverse") {
74
+ const reverseDeps = getReverseDependencies(graph, packageName);
75
+ return {
76
+ mode,
77
+ packageName,
78
+ packages: Array.from(reverseDeps)
79
+ };
80
+ }
81
+ if (mode === "impact") {
82
+ const affected = getImpactAnalysis(graph, packageName);
83
+ return {
84
+ mode,
85
+ packageName,
86
+ packages: Array.from(affected)
87
+ };
88
+ }
89
+ throw new Error(`Unknown mode: ${mode}`);
90
+ }
91
+ });
92
+ function buildDependencyTree(graph, packageName, visited = /* @__PURE__ */ new Set()) {
93
+ const node = graph.nodes.get(packageName);
94
+ if (!node) {
95
+ return { name: packageName, children: [] };
96
+ }
97
+ if (visited.has(packageName)) {
98
+ return { name: `${packageName} (circular)`, children: [] };
99
+ }
100
+ visited.add(packageName);
101
+ const children = Array.from(node.deps).map(
102
+ (dep) => buildDependencyTree(graph, dep, new Set(visited))
103
+ );
104
+ return {
105
+ name: packageName,
106
+ children
107
+ };
108
+ }
109
+ function calculateGraphStats(graph) {
110
+ const { nodes } = graph;
111
+ let totalDeps = 0;
112
+ for (const node of nodes.values()) {
113
+ totalDeps += node.deps.size;
114
+ }
115
+ const avgDeps = nodes.size > 0 ? totalDeps / nodes.size : 0;
116
+ let maxDepth = 0;
117
+ for (const [name] of nodes) {
118
+ const depth = calculateDepth(graph, name, /* @__PURE__ */ new Set());
119
+ if (depth > maxDepth) {
120
+ maxDepth = depth;
121
+ }
122
+ }
123
+ const dependentCounts = /* @__PURE__ */ new Map();
124
+ for (const node of nodes.values()) {
125
+ for (const dep of node.deps) {
126
+ dependentCounts.set(dep, (dependentCounts.get(dep) ?? 0) + 1);
127
+ }
128
+ }
129
+ const mostDepended = Array.from(dependentCounts.entries()).map(([name, count]) => ({ name, count })).sort((a, b) => b.count - a.count).slice(0, 5);
130
+ return {
131
+ totalPackages: nodes.size,
132
+ maxDepth,
133
+ avgDependencies: Number.parseFloat(avgDeps.toFixed(2)),
134
+ mostDepended
135
+ };
136
+ }
137
+ function calculateDepth(graph, packageName, visited) {
138
+ const node = graph.nodes.get(packageName);
139
+ if (!node || visited.has(packageName)) {
140
+ return 0;
141
+ }
142
+ visited.add(packageName);
143
+ let maxChildDepth = 0;
144
+ for (const dep of node.deps) {
145
+ const depth = calculateDepth(graph, dep, new Set(visited));
146
+ if (depth > maxChildDepth) {
147
+ maxChildDepth = depth;
148
+ }
149
+ }
150
+ return 1 + maxChildDepth;
151
+ }
152
+
153
+ export { graph_handler_default as default };
154
+ //# sourceMappingURL=graph-handler.js.map
155
+ //# sourceMappingURL=graph-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/rest/handlers/graph-handler.ts"],"names":[],"mappings":"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","file":"graph-handler.js","sourcesContent":["/**\n * POST /graph handler\n *\n * Visualize dependency graph in different modes:\n * - tree: dependency tree for package\n * - reverse: who depends on this package\n * - impact: what will be affected by changes\n * - stats: graph statistics\n */\n\nimport { defineHandler, type PluginContextV3, type RestInput } from '@kb-labs/sdk';\nimport {\n buildDependencyGraph,\n getReverseDependencies,\n getImpactAnalysis,\n type DependencyGraph,\n} from '@kb-labs/quality-core/graph';\n\nexport type GraphRequest = {\n packageName?: string;\n mode: 'tree' | 'reverse' | 'impact' | 'stats';\n};\n\nexport type GraphResponse = {\n mode: string;\n packageName?: string;\n tree?: DependencyTree;\n packages?: string[];\n stats?: GraphStats;\n};\n\nexport type DependencyTree = {\n name: string;\n children: DependencyTree[];\n};\n\nexport type GraphStats = {\n totalPackages: number;\n maxDepth: number;\n avgDependencies: number;\n mostDepended: Array<{ name: string; count: number }>;\n};\n\nexport default defineHandler({\n async execute(\n ctx: PluginContextV3,\n input: RestInput<GraphRequest, unknown>\n ): Promise<GraphResponse> {\n const { packageName, mode } = input.query ?? { mode: 'stats' };\n\n // Build dependency graph (cached with Map serialization)\n const cacheKey = `quality:graph:${ctx.cwd}`;\n const cached = await ctx.platform.cache.get<any>(cacheKey);\n\n let graph: DependencyGraph;\n\n if (cached) {\n // Deserialize: convert plain object back to Map\n graph = {\n nodes: new Map(Object.entries(cached.nodes).map(([key, value]: [string, any]) => [\n key,\n {\n ...value,\n deps: new Set(value.deps),\n devDeps: value.devDeps ? new Set(value.devDeps) : undefined,\n dependents: new Set(value.dependents),\n },\n ])),\n workspacePackages: new Set(cached.workspacePackages),\n };\n } else {\n graph = buildDependencyGraph(ctx.cwd);\n\n // Serialize: convert Map to plain object for Redis\n const serialized = {\n nodes: Object.fromEntries(\n Array.from(graph.nodes.entries()).map(([key, value]) => [\n key,\n {\n ...value,\n deps: Array.from(value.deps),\n devDeps: value.devDeps ? Array.from(value.devDeps) : undefined,\n dependents: Array.from(value.dependents),\n },\n ])\n ),\n workspacePackages: Array.from(graph.workspacePackages),\n };\n\n // Cache for 2 minutes\n await ctx.platform.cache.set(cacheKey, serialized, 120000);\n }\n\n // Handle different modes\n if (mode === 'stats') {\n return {\n mode,\n stats: calculateGraphStats(graph),\n };\n }\n\n if (mode === 'tree') {\n if (!packageName) {\n // Find root packages (packages that have no dependents - nothing depends on them)\n const rootPackages: string[] = [];\n for (const [name, node] of graph.nodes) {\n if (node.dependents.size === 0) {\n rootPackages.push(name);\n }\n }\n\n return {\n mode,\n tree: {\n name: 'Root Packages',\n children: rootPackages.map(pkg => buildDependencyTree(graph, pkg)),\n },\n };\n }\n return {\n mode,\n packageName,\n tree: buildDependencyTree(graph, packageName),\n };\n }\n\n if (!packageName) {\n throw new Error('packageName is required for reverse and impact modes');\n }\n\n if (mode === 'reverse') {\n const reverseDeps = getReverseDependencies(graph, packageName);\n return {\n mode,\n packageName,\n packages: Array.from(reverseDeps),\n };\n }\n\n if (mode === 'impact') {\n const affected = getImpactAnalysis(graph, packageName);\n return {\n mode,\n packageName,\n packages: Array.from(affected),\n };\n }\n\n throw new Error(`Unknown mode: ${mode}`);\n },\n});\n\n/**\n * Build dependency tree recursively\n */\nfunction buildDependencyTree(\n graph: DependencyGraph,\n packageName: string,\n visited: Set<string> = new Set()\n): DependencyTree {\n const node = graph.nodes.get(packageName);\n if (!node) {\n return { name: packageName, children: [] };\n }\n\n if (visited.has(packageName)) {\n return { name: `${packageName} (circular)`, children: [] };\n }\n\n visited.add(packageName);\n\n const children = Array.from(node.deps).map(dep =>\n buildDependencyTree(graph, dep, new Set(visited))\n );\n\n return {\n name: packageName,\n children,\n };\n}\n\n/**\n * Calculate graph statistics\n */\nfunction calculateGraphStats(graph: DependencyGraph): GraphStats {\n const { nodes } = graph;\n\n // Calculate average dependencies\n let totalDeps = 0;\n for (const node of nodes.values()) {\n totalDeps += node.deps.size;\n }\n const avgDeps = nodes.size > 0 ? totalDeps / nodes.size : 0;\n\n // Calculate max depth (longest dependency chain)\n let maxDepth = 0;\n for (const [name] of nodes) {\n const depth = calculateDepth(graph, name, new Set());\n if (depth > maxDepth) {\n maxDepth = depth;\n }\n }\n\n // Find most depended on packages (packages with most dependents)\n const dependentCounts = new Map<string, number>();\n for (const node of nodes.values()) {\n for (const dep of node.deps) {\n dependentCounts.set(dep, (dependentCounts.get(dep) ?? 0) + 1);\n }\n }\n\n const mostDepended = Array.from(dependentCounts.entries())\n .map(([name, count]) => ({ name, count }))\n .sort((a, b) => b.count - a.count)\n .slice(0, 5); // Top 5\n\n return {\n totalPackages: nodes.size,\n maxDepth,\n avgDependencies: Number.parseFloat(avgDeps.toFixed(2)),\n mostDepended,\n };\n}\n\n/**\n * Calculate depth of dependency chain from a package\n */\nfunction calculateDepth(\n graph: DependencyGraph,\n packageName: string,\n visited: Set<string>\n): number {\n const node = graph.nodes.get(packageName);\n if (!node || visited.has(packageName)) {\n return 0;\n }\n\n visited.add(packageName);\n\n let maxChildDepth = 0;\n for (const dep of node.deps) {\n const depth = calculateDepth(graph, dep, new Set(visited));\n if (depth > maxChildDepth) {\n maxChildDepth = depth;\n }\n }\n\n return 1 + maxChildDepth;\n}\n"]}
@@ -0,0 +1,15 @@
1
+ import * as _kb_labs_shared_command_kit from '@kb-labs/shared-command-kit';
2
+ import { RestInput } from '@kb-labs/sdk';
3
+ import { HealthIssue } from '@kb-labs/quality-core/health';
4
+
5
+ type HealthRequest = {
6
+ detailed?: boolean;
7
+ };
8
+ type HealthResponse = {
9
+ score: number;
10
+ grade: string;
11
+ issues?: HealthIssue[];
12
+ };
13
+ declare const _default: _kb_labs_shared_command_kit.Handler<unknown, RestInput<HealthRequest, unknown, unknown>, HealthResponse>;
14
+
15
+ export { type HealthRequest, type HealthResponse, _default as default };
@@ -0,0 +1,19 @@
1
+ import { defineHandler } from '@kb-labs/sdk';
2
+ import { calculateHealth } from '@kb-labs/quality-core/health';
3
+
4
+ // src/rest/handlers/health-handler.ts
5
+ var health_handler_default = defineHandler({
6
+ async execute(ctx, input) {
7
+ const { detailed } = input.query ?? {};
8
+ const healthResult = await calculateHealth(ctx.cwd);
9
+ return {
10
+ score: healthResult.score,
11
+ grade: healthResult.grade,
12
+ issues: detailed ? healthResult.issues : void 0
13
+ };
14
+ }
15
+ });
16
+
17
+ export { health_handler_default as default };
18
+ //# sourceMappingURL=health-handler.js.map
19
+ //# sourceMappingURL=health-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/rest/handlers/health-handler.ts"],"names":[],"mappings":";;;;AAmBA,IAAO,yBAAQ,aAAA,CAAc;AAAA,EAC3B,MAAM,OAAA,CACJ,GAAA,EACA,KAAA,EACyB;AACzB,IAAA,MAAM,EAAE,QAAA,EAAS,GAAI,KAAA,CAAM,SAAS,EAAC;AAErC,IAAA,MAAM,YAAA,GAAe,MAAM,eAAA,CAAgB,GAAA,CAAI,GAAG,CAAA;AAElD,IAAA,OAAO;AAAA,MACL,OAAO,YAAA,CAAa,KAAA;AAAA,MACpB,OAAO,YAAA,CAAa,KAAA;AAAA,MACpB,MAAA,EAAQ,QAAA,GAAW,YAAA,CAAa,MAAA,GAAS;AAAA,KAC3C;AAAA,EACF;AACF,CAAC","file":"health-handler.js","sourcesContent":["/**\n * POST /health handler\n *\n * Get monorepo health score and grade (A-F).\n */\n\nimport { defineHandler, type PluginContextV3, type RestInput } from '@kb-labs/sdk';\nimport { calculateHealth, type HealthIssue } from '@kb-labs/quality-core/health';\n\nexport type HealthRequest = {\n detailed?: boolean;\n};\n\nexport type HealthResponse = {\n score: number;\n grade: string;\n issues?: HealthIssue[];\n};\n\nexport default defineHandler({\n async execute(\n ctx: PluginContextV3,\n input: RestInput<HealthRequest, unknown>\n ): Promise<HealthResponse> {\n const { detailed } = input.query ?? {};\n\n const healthResult = await calculateHealth(ctx.cwd);\n\n return {\n score: healthResult.score,\n grade: healthResult.grade,\n issues: detailed ? healthResult.issues : undefined,\n };\n },\n});\n"]}
@@ -0,0 +1,30 @@
1
+ import * as _kb_labs_shared_command_kit from '@kb-labs/shared-command-kit';
2
+ import { RestInput } from '@kb-labs/sdk';
3
+
4
+ type StaleRequest = {
5
+ detailed?: boolean;
6
+ };
7
+ type StalePackage = {
8
+ name: string;
9
+ path: string;
10
+ reason: 'source-newer' | 'dependency-rebuilt' | 'missing-dist';
11
+ sourceModified?: string;
12
+ distModified?: string;
13
+ affectedPackages: string[];
14
+ affectedCount: number;
15
+ severity: 'critical' | 'high' | 'medium' | 'low';
16
+ };
17
+ type StaleChain = {
18
+ root: string;
19
+ affected: string[];
20
+ depth: number;
21
+ };
22
+ type StaleResponse = {
23
+ stalePackages: StalePackage[];
24
+ totalStale: number;
25
+ totalAffected: number;
26
+ criticalChains?: StaleChain[];
27
+ };
28
+ declare const _default: _kb_labs_shared_command_kit.Handler<unknown, RestInput<StaleRequest, unknown, unknown>, StaleResponse>;
29
+
30
+ export { type StaleChain, type StalePackage, type StaleRequest, type StaleResponse, _default as default };
@@ -0,0 +1,20 @@
1
+ import { defineHandler } from '@kb-labs/sdk';
2
+ import { analyzeStalePackages } from '@kb-labs/quality-core/stale';
3
+
4
+ // src/rest/handlers/stale-handler.ts
5
+ var stale_handler_default = defineHandler({
6
+ async execute(ctx, input) {
7
+ const { detailed } = input.query ?? {};
8
+ const analysis = await analyzeStalePackages(ctx.cwd, detailed);
9
+ return {
10
+ stalePackages: analysis.stalePackages,
11
+ totalStale: analysis.totalStale,
12
+ totalAffected: analysis.totalAffected,
13
+ criticalChains: detailed ? analysis.criticalChains : void 0
14
+ };
15
+ }
16
+ });
17
+
18
+ export { stale_handler_default as default };
19
+ //# sourceMappingURL=stale-handler.js.map
20
+ //# sourceMappingURL=stale-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/rest/handlers/stale-handler.ts"],"names":[],"mappings":";;;;AAwCA,IAAO,wBAAQ,aAAA,CAAc;AAAA,EAC3B,MAAM,OAAA,CACJ,GAAA,EACA,KAAA,EACwB;AACxB,IAAA,MAAM,EAAE,QAAA,EAAS,GAAI,KAAA,CAAM,SAAS,EAAC;AAErC,IAAA,MAAM,QAAA,GAAW,MAAM,oBAAA,CAAqB,GAAA,CAAI,KAAK,QAAQ,CAAA;AAE7D,IAAA,OAAO;AAAA,MACL,eAAe,QAAA,CAAS,aAAA;AAAA,MACxB,YAAY,QAAA,CAAS,UAAA;AAAA,MACrB,eAAe,QAAA,CAAS,aAAA;AAAA,MACxB,cAAA,EAAgB,QAAA,GAAW,QAAA,CAAS,cAAA,GAAiB;AAAA,KACvD;AAAA,EACF;AACF,CAAC","file":"stale-handler.js","sourcesContent":["/**\n * GET /stale handler\n *\n * Detect stale packages that need rebuilding.\n * Shows packages where source is newer than dist, or dependencies were rebuilt.\n */\n\nimport { defineHandler, type PluginContextV3, type RestInput } from '@kb-labs/sdk';\nimport {\n analyzeStalePackages,\n} from '@kb-labs/quality-core/stale';\n\nexport type StaleRequest = {\n detailed?: boolean;\n};\n\nexport type StalePackage = {\n name: string;\n path: string;\n reason: 'source-newer' | 'dependency-rebuilt' | 'missing-dist';\n sourceModified?: string;\n distModified?: string;\n affectedPackages: string[];\n affectedCount: number;\n severity: 'critical' | 'high' | 'medium' | 'low';\n};\n\nexport type StaleChain = {\n root: string;\n affected: string[];\n depth: number;\n};\n\nexport type StaleResponse = {\n stalePackages: StalePackage[];\n totalStale: number;\n totalAffected: number;\n criticalChains?: StaleChain[];\n};\n\nexport default defineHandler({\n async execute(\n ctx: PluginContextV3,\n input: RestInput<StaleRequest, unknown>\n ): Promise<StaleResponse> {\n const { detailed } = input.query ?? {};\n\n const analysis = await analyzeStalePackages(ctx.cwd, detailed);\n\n return {\n stalePackages: analysis.stalePackages,\n totalStale: analysis.totalStale,\n totalAffected: analysis.totalAffected,\n criticalChains: detailed ? analysis.criticalChains : undefined,\n };\n },\n});\n"]}
@@ -0,0 +1,16 @@
1
+ import * as _kb_labs_shared_command_kit from '@kb-labs/shared-command-kit';
2
+ import { RestInput } from '@kb-labs/sdk';
3
+
4
+ type StatsRequest = {
5
+ includeHealth?: boolean;
6
+ };
7
+ type StatsResponse = {
8
+ packages: number;
9
+ loc: number;
10
+ size: string;
11
+ health?: number;
12
+ grade?: string;
13
+ };
14
+ declare const _default: _kb_labs_shared_command_kit.Handler<unknown, RestInput<StatsRequest, unknown, unknown>, StatsResponse>;
15
+
16
+ export { type StatsRequest, type StatsResponse, _default as default };
@@ -0,0 +1,29 @@
1
+ import { defineHandler } from '@kb-labs/sdk';
2
+ import { calculateStats } from '@kb-labs/quality-core/stats';
3
+ import { calculateHealth } from '@kb-labs/quality-core/health';
4
+
5
+ // src/rest/handlers/stats-handler.ts
6
+ var stats_handler_default = defineHandler({
7
+ async execute(ctx, input) {
8
+ const includeHealth = input.query?.includeHealth ?? false;
9
+ const stats = await calculateStats(ctx.cwd);
10
+ let health;
11
+ let grade;
12
+ if (includeHealth) {
13
+ const healthResult = await calculateHealth(ctx.cwd);
14
+ health = healthResult.score;
15
+ grade = healthResult.grade;
16
+ }
17
+ return {
18
+ packages: stats.packages,
19
+ loc: stats.loc,
20
+ size: stats.sizeFormatted,
21
+ health,
22
+ grade
23
+ };
24
+ }
25
+ });
26
+
27
+ export { stats_handler_default as default };
28
+ //# sourceMappingURL=stats-handler.js.map
29
+ //# sourceMappingURL=stats-handler.js.map