@kb-labs/quality-entry 2.119.0 → 2.119.1-canary.b53bbee1d
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.js.map +1 -1
- package/dist/cli/commands/check-builds.js.map +1 -1
- package/dist/cli/commands/check-layers.js.map +1 -1
- package/dist/cli/commands/check-tests.js.map +1 -1
- package/dist/cli/commands/check-types.js.map +1 -1
- package/dist/cli/commands/context.js.map +1 -1
- package/dist/cli/commands/coupling.js.map +1 -1
- package/dist/cli/commands/cycles.js.map +1 -1
- package/dist/cli/commands/dead-code.js.map +1 -1
- package/dist/cli/commands/fix-deps.js.map +1 -1
- package/dist/cli/commands/flags.js.map +1 -1
- package/dist/cli/commands/gate.js.map +1 -1
- package/dist/cli/commands/health.js.map +1 -1
- package/dist/cli/commands/history.js.map +1 -1
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/snapshot.js.map +1 -1
- package/dist/cli/commands/stats.js.map +1 -1
- package/dist/cli/commands/visualize.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/manifest.js.map +1 -1
- package/dist/manifest.json +1394 -0
- package/dist/rest/handlers/build-order-handler.js.map +1 -1
- package/dist/rest/handlers/builds-handler.js.map +1 -1
- package/dist/rest/handlers/coupling-handler.js.map +1 -1
- package/dist/rest/handlers/cycles-handler.js.map +1 -1
- package/dist/rest/handlers/dependencies-handler.js.map +1 -1
- package/dist/rest/handlers/graph-handler.js.map +1 -1
- package/dist/rest/handlers/health-handler.js.map +1 -1
- package/dist/rest/handlers/history-handler.js.map +1 -1
- package/dist/rest/handlers/knip-handler.js.map +1 -1
- package/dist/rest/handlers/layers-handler.js.map +1 -1
- package/dist/rest/handlers/snapshot-handler.js.map +1 -1
- package/dist/rest/handlers/stale-handler.js.map +1 -1
- package/dist/rest/handlers/stats-handler.js.map +1 -1
- package/dist/rest/handlers/tests-handler.js.map +1 -1
- package/dist/rest/handlers/types-handler.js.map +1 -1
- package/dist/widgets/117.js +32 -0
- package/dist/widgets/165.js +1 -0
- package/dist/widgets/326.js +1 -0
- package/dist/widgets/370.js +1 -0
- package/dist/widgets/405.js +1 -0
- package/dist/widgets/46.js +445 -0
- package/dist/widgets/50.js +1 -0
- package/dist/widgets/546.js +1 -0
- package/dist/widgets/648.js +1 -0
- package/dist/widgets/669.js +1 -0
- package/dist/widgets/707.js +1 -0
- package/dist/widgets/775.js +1 -0
- package/dist/widgets/78.js +1 -0
- package/dist/widgets/832.js +96 -0
- package/dist/widgets/875.js +25 -0
- package/dist/widgets/945.js +1 -0
- package/dist/widgets/968.js +9 -0
- package/dist/widgets/__federation_expose_QualityOverview.js +1 -0
- package/dist/widgets/mf-manifest.json +229 -0
- package/dist/widgets/mf-stats.json +253 -0
- package/dist/widgets/remoteEntry.js +7 -0
- package/package.json +8 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["
|
|
1
|
+
{"version":3,"sources":["../../../src/cli/commands/snapshot.ts"],"names":[],"mappings":"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","file":"snapshot.js","sourcesContent":["import {\n defineCommand,\n useConfig,\n type CLIInput,\n type PluginContextV3,\n type CommandResult,\n} from '@kb-labs/sdk';\nimport {\n analyzeLayering,\n analyzeCoupling,\n runKnip,\n analyzeTypes,\n QualitySnapshotStore,\n} from '@kb-labs/quality-core';\nimport { calculateHealth } from '@kb-labs/quality-core';\nimport { defaultQualityConfig, type QualityPluginConfig, type KnipReport } from '@kb-labs/quality-contracts';\nimport type { SnapshotFlags } from './flags.js';\nimport type { ShellAPI } from '@kb-labs/sdk';\n\nasync function captureGit(shell: ShellAPI, cwd: string) {\n try {\n const [c, b, m] = await Promise.all([\n shell.exec('git', ['rev-parse', '--short', 'HEAD'], { cwd, throwOnError: false }),\n shell.exec('git', ['rev-parse', '--abbrev-ref', 'HEAD'], { cwd, throwOnError: false }),\n shell.exec('git', ['log', '-1', '--format=%s'], { cwd, throwOnError: false }),\n ]);\n if (!c.ok) return undefined;\n return { commit: c.stdout.trim(), branch: b.stdout.trim() || 'HEAD', message: m.stdout.trim() };\n } catch {\n return undefined;\n }\n}\n\nexport default defineCommand<unknown, CLIInput<SnapshotFlags>, unknown>({\n id: 'quality:snapshot',\n description: 'Collect all quality metrics and save a snapshot for trend tracking',\n\n handler: {\n async intent(_ctx: PluginContextV3, _input: CLIInput<SnapshotFlags>) {\n return {\n summary: 'Collect all quality metrics and save snapshot for trend tracking',\n operations: [\n { type: 'create' as const, resource: 'file', details: { path: '.kb/quality/snapshots/<timestamp>.json' } },\n ],\n };\n },\n\n async execute(ctx: PluginContextV3, input: CLIInput<SnapshotFlags>): Promise<CommandResult> {\n const { flags } = input;\n const config = await useConfig<QualityPluginConfig>();\n const cwd = ctx.cwd ?? process.cwd();\n const cfg = config ?? defaultQualityConfig;\n\n ctx.ui?.success?.('Collecting quality metrics…');\n\n const [layering, coupling, types, git] = await Promise.all([\n analyzeLayering({ rootDir: cwd, layerMap: cfg.layers }),\n Promise.resolve(analyzeCoupling({ rootDir: cwd, layerMap: cfg.layers })),\n analyzeTypes(cwd),\n captureGit(ctx.api.shell, cwd),\n ]);\n\n let knip: KnipReport = { unusedFiles: [], unusedExports: [], unusedDependencies: [], unlistedDependencies: [], totalIssues: 0 };\n if (cfg.knip.enabled) {\n knip = await runKnip({ shell: ctx.api.shell, rootDir: cwd });\n }\n\n const totalPackages = coupling.packages.length;\n const health = calculateHealth({\n layering,\n coupling,\n types,\n knip,\n totalPackages,\n avgTestCoverage: null,\n thresholds: cfg.thresholds,\n });\n\n const store = new QualitySnapshotStore(cwd, cfg.maxSnapshots);\n const snap = store.save({\n score: health.score,\n grade: health.grade,\n dimensions: health.dimensions,\n counters: {\n layeringViolations: layering.totalViolations,\n avgInstability: coupling.avgInstability,\n anyCount: types.packages.reduce((s: number, p: { anyCount: number }) => s + p.anyCount, 0),\n tsIgnoreCount: types.packages.reduce((s: number, p: { tsIgnoreCount: number }) => s + p.tsIgnoreCount, 0),\n unusedFiles: knip.unusedFiles.length,\n unusedDeps: knip.unusedDependencies.length,\n },\n git: git ?? { commit: '', branch: '', message: '' },\n });\n\n if (flags.json) {\n ctx.ui?.json?.(snap);\n } else {\n ctx.ui?.success?.(`Snapshot saved: score ${snap.score}/100 (${snap.grade})`, {\n sections: [{\n header: 'Dimensions',\n items: Object.entries(snap.dimensions).map(\n ([k, d]) => `${k} ${d.score}/100 (${d.grade})`\n ),\n }],\n });\n }\n\n return { ok: true };\n },\n },\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["
|
|
1
|
+
{"version":3,"sources":["../../../src/cli/commands/stats.ts"],"names":[],"mappings":";;;;AASA,IAAO,gBAAQ,aAAA,CAAsD;AAAA,EACnE,EAAA,EAAI,eAAA;AAAA,EACJ,WAAA,EAAa,oDAAA;AAAA,EAEb,OAAA,EAAS;AAAA,IACP,MAAM,OAAA,CAAQ,GAAA,EAAsB,KAAA,EAAqD;AACvF,MAAA,MAAM,EAAE,OAAM,GAAI,KAAA;AAClB,MAAA,MAAM,GAAA,GAAM,GAAA,CAAI,GAAA,IAAO,OAAA,CAAQ,GAAA,EAAI;AAEnC,MAAA,MAAM,KAAA,GAAQ,MAAM,cAAA,CAAe,GAAG,CAAA;AAEtC,MAAA,IAAI,MAAM,IAAA,EAAM;AACd,QAAA,GAAA,CAAI,EAAA,EAAI,OAAO,KAAK,CAAA;AACpB,QAAA,OAAO,EAAE,IAAI,IAAA,EAAK;AAAA,MACpB;AAEA,MAAA,GAAA,CAAI,EAAA,EAAI,UAAU,qBAAA,EAAuB;AAAA,QACvC,UAAU,CAAC;AAAA,UACT,MAAA,EAAQ,UAAA;AAAA,UACR,KAAA,EAAO;AAAA,YACL,CAAA,UAAA,EAAa,MAAM,QAAQ,CAAA,CAAA;AAAA,YAC3B,CAAA,eAAA,EAAkB,KAAA,CAAM,GAAA,CAAI,cAAA,EAAgB,CAAA,CAAA;AAAA,YAC5C,CAAA,MAAA,EAAS,MAAM,aAAa,CAAA;AAAA;AAC9B,SACD;AAAA,OACF,CAAA;AAED,MAAA,OAAO,EAAE,IAAI,IAAA,EAAK;AAAA,IACpB;AAAA;AAEJ,CAAC","file":"stats.js","sourcesContent":["import {\n defineCommand,\n type CLIInput,\n type PluginContextV3,\n type CommandResult,\n} from '@kb-labs/sdk';\nimport { calculateStats } from '@kb-labs/quality-core';\nimport type { StatsFlags } from './flags.js';\n\nexport default defineCommand<unknown, CLIInput<StatsFlags>, unknown>({\n id: 'quality:stats',\n description: 'Monorepo statistics: packages, lines of code, size',\n\n handler: {\n async execute(ctx: PluginContextV3, input: CLIInput<StatsFlags>): Promise<CommandResult> {\n const { flags } = input;\n const cwd = ctx.cwd ?? process.cwd();\n\n const stats = await calculateStats(cwd);\n\n if (flags.json) {\n ctx.ui?.json?.(stats);\n return { ok: true };\n }\n\n ctx.ui?.success?.('Monorepo statistics', {\n sections: [{\n header: 'Overview',\n items: [\n `Packages: ${stats.packages}`,\n `Lines of code: ${stats.loc.toLocaleString()}`,\n `Size: ${stats.sizeFormatted}`,\n ],\n }],\n });\n\n return { ok: true };\n },\n },\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../home/runner/work/kb-labs/kb-labs/plugins/quality/entry/src/cli/commands/visualize.ts"],"names":[],"mappings":"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","file":"visualize.js","sourcesContent":["/**\n * quality:visualize - Visualize dependency graph\n *\n * Shows dependency graph in various formats:\n * - Tree view for specific package\n * - DOT format for graphviz\n * - Statistics about the graph\n */\n\nimport { defineCommand, type PluginContextV3, type CommandResult } from '@kb-labs/sdk';\nimport type { UIFacade } from '@kb-labs/sdk';\nimport {\n buildDependencyGraph,\n getReverseDependencies,\n getImpactAnalysis,\n type DependencyGraph,\n} from '@kb-labs/quality-core/graph';\n\ntype VisualizeFlags = {\n package?: string;\n tree?: boolean;\n dot?: boolean;\n stats?: boolean;\n reverse?: boolean;\n impact?: boolean;\n json?: boolean;\n argv?: string[];\n};\n\ntype VisualizeInput = VisualizeFlags & { argv?: string[] };\n\nexport default defineCommand({\n id: 'quality:visualize',\n description: 'Visualize dependency graph',\n\n handler: {\n async execute(ctx: PluginContextV3, input: VisualizeInput): Promise<CommandResult<{ graph: DependencyGraph }>> {\n const { ui } = ctx;\n\n // V3: Flags may come wrapped in input.flags or passed directly\n const flags = ('flags' in input && typeof (input as { flags?: unknown }).flags === 'object' && (input as { flags?: unknown }).flags !== null)\n ? (input as { flags: VisualizeInput }).flags\n : input;\n\n // Build dependency graph\n const graph = buildDependencyGraph(ctx.cwd);\n\n // Handle different output modes\n if (flags.dot) {\n outputDot(graph, flags, ui);\n } else if (flags.tree && flags.package) {\n outputTree(graph, flags.package, flags, ui);\n } else if (flags.reverse && flags.package) {\n outputReverse(graph, flags.package, flags, ui);\n } else if (flags.impact && flags.package) {\n outputImpact(graph, flags.package, flags, ui);\n } else if (flags.stats) {\n outputStats(graph, flags, ui);\n } else {\n // Default: show stats\n outputStats(graph, flags, ui);\n }\n\n return { ok: true, result: { graph } };\n },\n },\n});\n\n/**\n * Output dependency tree for a package\n */\nfunction outputTree(graph: DependencyGraph, packageName: string, flags: VisualizeFlags, ui: UIFacade | undefined) {\n const { nodes } = graph;\n const node = nodes.get(packageName);\n\n if (!node) {\n ui?.error?.(`Package not found: ${packageName}`);\n return;\n }\n\n const sections: Array<{ header: string; items: string[] }> = [];\n\n // Build tree recursively\n const visited = new Set<string>();\n const treeItems: string[] = [];\n\n function buildTree(pkg: string, depth: number, prefix: string) {\n if (visited.has(pkg)) {\n treeItems.push(`${prefix}${pkg} (circular)`);\n return;\n }\n visited.add(pkg);\n\n const pkgNode = nodes.get(pkg);\n if (!pkgNode) {return;}\n\n treeItems.push(`${prefix}${pkg}`);\n\n const deps = Array.from(pkgNode.deps);\n for (let i = 0; i < deps.length; i++) {\n const dep = deps[i];\n if (!dep) {continue;}\n const isLast = i === deps.length - 1;\n const newPrefix = prefix + (isLast ? ' └─ ' : ' ├─ ');\n buildTree(dep, depth + 1, newPrefix);\n }\n }\n\n buildTree(packageName, 0, '');\n\n sections.push({\n header: 'Dependency Tree',\n items: treeItems,\n });\n\n ui?.success?.('Dependency tree generated', {\n title: `📦 Dependency Tree for ${packageName}`,\n sections,\n });\n}\n\n/**\n * Output reverse dependencies (who depends on this package)\n */\nfunction outputReverse(graph: DependencyGraph, packageName: string, flags: VisualizeFlags, ui: UIFacade | undefined) {\n const reverseDeps = getReverseDependencies(graph, packageName);\n\n if (flags.json) {\n ui?.json?.({ package: packageName, reverseDependencies: Array.from(reverseDeps) });\n return;\n }\n\n const sections: Array<{ header: string; items: string[] }> = [];\n\n if (reverseDeps.size === 0) {\n sections.push({\n header: 'Result',\n items: ['No packages depend on this package'],\n });\n } else {\n sections.push({\n header: `Packages that depend on ${packageName}`,\n items: Array.from(reverseDeps).map(dep => `• ${dep}`),\n });\n }\n\n ui?.success?.('Reverse dependencies found', {\n title: `⬅️ Reverse Dependencies for ${packageName}`,\n sections,\n });\n}\n\n/**\n * Output impact analysis (all packages affected by changes)\n */\nfunction outputImpact(graph: DependencyGraph, packageName: string, flags: VisualizeFlags, ui: UIFacade | undefined) {\n const affected = getImpactAnalysis(graph, packageName);\n\n if (flags.json) {\n ui?.json?.({ package: packageName, affectedPackages: Array.from(affected) });\n return;\n }\n\n const sections: Array<{ header: string; items: string[] }> = [];\n\n if (affected.size === 0) {\n sections.push({\n header: 'Result',\n items: ['No other packages affected by changes to this package'],\n });\n } else {\n sections.push({\n header: `Impact Analysis for ${packageName}`,\n items: [\n `Changes to this package will affect ${affected.size} other packages:`,\n '',\n ...Array.from(affected).map(dep => `• ${dep}`),\n ],\n });\n\n sections.push({\n header: 'Recommendations',\n items: [\n '🧪 Run tests in affected packages',\n '🔨 Rebuild affected packages',\n '📝 Update documentation if API changed',\n ],\n });\n }\n\n ui?.success?.('Impact analysis completed', {\n title: `💥 Impact Analysis for ${packageName}`,\n sections,\n });\n}\n\n/**\n * Output dependency graph statistics\n */\nfunction outputStats(graph: DependencyGraph, flags: VisualizeFlags, ui: UIFacade | undefined) {\n const { nodes } = graph;\n\n // Calculate statistics\n let totalDeps = 0;\n let maxDeps = 0;\n let maxDepsPackage = '';\n const depCounts = new Map<number, number>();\n\n for (const [name, node] of nodes) {\n const depCount = node.deps.size;\n totalDeps += depCount;\n\n if (depCount > maxDeps) {\n maxDeps = depCount;\n maxDepsPackage = name;\n }\n\n depCounts.set(depCount, (depCounts.get(depCount) ?? 0) + 1);\n }\n\n const avgDeps = nodes.size > 0 ? (totalDeps / nodes.size).toFixed(2) : '0';\n\n if (flags.json) {\n ui?.json?.({\n totalPackages: nodes.size,\n totalDependencies: totalDeps,\n averageDependencies: Number.parseFloat(avgDeps),\n maxDependencies: maxDeps,\n maxDependenciesPackage: maxDepsPackage,\n });\n return;\n }\n\n const sections: Array<{ header: string; items: string[] }> = [];\n\n sections.push({\n header: 'Graph Statistics',\n items: [\n `Total packages: ${nodes.size}`,\n `Total dependencies: ${totalDeps}`,\n `Average dependencies per package: ${avgDeps}`,\n `Max dependencies: ${maxDeps} (${maxDepsPackage})`,\n ],\n });\n\n // Dependency distribution\n const distributionItems: string[] = [];\n const sortedCounts = Array.from(depCounts.entries()).sort((a, b) => a[0] - b[0]);\n for (const [count, packages] of sortedCounts) {\n const bar = '█'.repeat(Math.min(packages, 20));\n distributionItems.push(`${count} deps: ${bar} ${packages} packages`);\n }\n\n sections.push({\n header: 'Dependency Distribution',\n items: distributionItems,\n });\n\n ui?.success?.('Graph statistics calculated', {\n title: '📊 Dependency Graph Statistics',\n sections,\n });\n}\n\n/**\n * Output DOT format for graphviz\n */\nfunction outputDot(graph: DependencyGraph, flags: VisualizeFlags, ui: UIFacade | undefined) {\n const { nodes } = graph;\n\n const lines: string[] = [];\n lines.push('digraph dependencies {');\n lines.push(' rankdir=LR;');\n lines.push(' node [shape=box];');\n lines.push('');\n\n for (const [name, node] of nodes) {\n for (const dep of node.deps) {\n const safeName = name.replace(/[@\\/]/g, '_');\n const safeDep = dep.replace(/[@\\/]/g, '_');\n lines.push(` \"${safeName}\" -> \"${safeDep}\";`);\n }\n }\n\n lines.push('}');\n\n if (flags.json) {\n ui?.json?.({ dot: lines.join('\\n') });\n } else {\n for (const line of lines) {\n ui?.write?.(line);\n }\n ui?.write?.('');\n ui?.write?.('# Save to file and visualize with:');\n ui?.write?.('# dot -Tpng dependencies.dot -o dependencies.png');\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/cli/commands/visualize.ts"],"names":[],"mappings":"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","file":"visualize.js","sourcesContent":["/**\n * quality:visualize - Visualize dependency graph\n *\n * Shows dependency graph in various formats:\n * - Tree view for specific package\n * - DOT format for graphviz\n * - Statistics about the graph\n */\n\nimport { defineCommand, type PluginContextV3, type CommandResult } from '@kb-labs/sdk';\nimport type { UIFacade } from '@kb-labs/sdk';\nimport {\n buildDependencyGraph,\n getReverseDependencies,\n getImpactAnalysis,\n type DependencyGraph,\n} from '@kb-labs/quality-core/graph';\n\ntype VisualizeFlags = {\n package?: string;\n tree?: boolean;\n dot?: boolean;\n stats?: boolean;\n reverse?: boolean;\n impact?: boolean;\n json?: boolean;\n argv?: string[];\n};\n\ntype VisualizeInput = VisualizeFlags & { argv?: string[] };\n\nexport default defineCommand({\n id: 'quality:visualize',\n description: 'Visualize dependency graph',\n\n handler: {\n async execute(ctx: PluginContextV3, input: VisualizeInput): Promise<CommandResult<{ graph: DependencyGraph }>> {\n const { ui } = ctx;\n\n // V3: Flags may come wrapped in input.flags or passed directly\n const flags = ('flags' in input && typeof (input as { flags?: unknown }).flags === 'object' && (input as { flags?: unknown }).flags !== null)\n ? (input as { flags: VisualizeInput }).flags\n : input;\n\n // Build dependency graph\n const graph = buildDependencyGraph(ctx.cwd);\n\n // Handle different output modes\n if (flags.dot) {\n outputDot(graph, flags, ui);\n } else if (flags.tree && flags.package) {\n outputTree(graph, flags.package, flags, ui);\n } else if (flags.reverse && flags.package) {\n outputReverse(graph, flags.package, flags, ui);\n } else if (flags.impact && flags.package) {\n outputImpact(graph, flags.package, flags, ui);\n } else if (flags.stats) {\n outputStats(graph, flags, ui);\n } else {\n // Default: show stats\n outputStats(graph, flags, ui);\n }\n\n return { ok: true, result: { graph } };\n },\n },\n});\n\n/**\n * Output dependency tree for a package\n */\nfunction outputTree(graph: DependencyGraph, packageName: string, flags: VisualizeFlags, ui: UIFacade | undefined) {\n const { nodes } = graph;\n const node = nodes.get(packageName);\n\n if (!node) {\n ui?.error?.(`Package not found: ${packageName}`);\n return;\n }\n\n const sections: Array<{ header: string; items: string[] }> = [];\n\n // Build tree recursively\n const visited = new Set<string>();\n const treeItems: string[] = [];\n\n function buildTree(pkg: string, depth: number, prefix: string) {\n if (visited.has(pkg)) {\n treeItems.push(`${prefix}${pkg} (circular)`);\n return;\n }\n visited.add(pkg);\n\n const pkgNode = nodes.get(pkg);\n if (!pkgNode) {return;}\n\n treeItems.push(`${prefix}${pkg}`);\n\n const deps = Array.from(pkgNode.deps);\n for (let i = 0; i < deps.length; i++) {\n const dep = deps[i];\n if (!dep) {continue;}\n const isLast = i === deps.length - 1;\n const newPrefix = prefix + (isLast ? ' └─ ' : ' ├─ ');\n buildTree(dep, depth + 1, newPrefix);\n }\n }\n\n buildTree(packageName, 0, '');\n\n sections.push({\n header: 'Dependency Tree',\n items: treeItems,\n });\n\n ui?.success?.('Dependency tree generated', {\n title: `📦 Dependency Tree for ${packageName}`,\n sections,\n });\n}\n\n/**\n * Output reverse dependencies (who depends on this package)\n */\nfunction outputReverse(graph: DependencyGraph, packageName: string, flags: VisualizeFlags, ui: UIFacade | undefined) {\n const reverseDeps = getReverseDependencies(graph, packageName);\n\n if (flags.json) {\n ui?.json?.({ package: packageName, reverseDependencies: Array.from(reverseDeps) });\n return;\n }\n\n const sections: Array<{ header: string; items: string[] }> = [];\n\n if (reverseDeps.size === 0) {\n sections.push({\n header: 'Result',\n items: ['No packages depend on this package'],\n });\n } else {\n sections.push({\n header: `Packages that depend on ${packageName}`,\n items: Array.from(reverseDeps).map(dep => `• ${dep}`),\n });\n }\n\n ui?.success?.('Reverse dependencies found', {\n title: `⬅️ Reverse Dependencies for ${packageName}`,\n sections,\n });\n}\n\n/**\n * Output impact analysis (all packages affected by changes)\n */\nfunction outputImpact(graph: DependencyGraph, packageName: string, flags: VisualizeFlags, ui: UIFacade | undefined) {\n const affected = getImpactAnalysis(graph, packageName);\n\n if (flags.json) {\n ui?.json?.({ package: packageName, affectedPackages: Array.from(affected) });\n return;\n }\n\n const sections: Array<{ header: string; items: string[] }> = [];\n\n if (affected.size === 0) {\n sections.push({\n header: 'Result',\n items: ['No other packages affected by changes to this package'],\n });\n } else {\n sections.push({\n header: `Impact Analysis for ${packageName}`,\n items: [\n `Changes to this package will affect ${affected.size} other packages:`,\n '',\n ...Array.from(affected).map(dep => `• ${dep}`),\n ],\n });\n\n sections.push({\n header: 'Recommendations',\n items: [\n '🧪 Run tests in affected packages',\n '🔨 Rebuild affected packages',\n '📝 Update documentation if API changed',\n ],\n });\n }\n\n ui?.success?.('Impact analysis completed', {\n title: `💥 Impact Analysis for ${packageName}`,\n sections,\n });\n}\n\n/**\n * Output dependency graph statistics\n */\nfunction outputStats(graph: DependencyGraph, flags: VisualizeFlags, ui: UIFacade | undefined) {\n const { nodes } = graph;\n\n // Calculate statistics\n let totalDeps = 0;\n let maxDeps = 0;\n let maxDepsPackage = '';\n const depCounts = new Map<number, number>();\n\n for (const [name, node] of nodes) {\n const depCount = node.deps.size;\n totalDeps += depCount;\n\n if (depCount > maxDeps) {\n maxDeps = depCount;\n maxDepsPackage = name;\n }\n\n depCounts.set(depCount, (depCounts.get(depCount) ?? 0) + 1);\n }\n\n const avgDeps = nodes.size > 0 ? (totalDeps / nodes.size).toFixed(2) : '0';\n\n if (flags.json) {\n ui?.json?.({\n totalPackages: nodes.size,\n totalDependencies: totalDeps,\n averageDependencies: Number.parseFloat(avgDeps),\n maxDependencies: maxDeps,\n maxDependenciesPackage: maxDepsPackage,\n });\n return;\n }\n\n const sections: Array<{ header: string; items: string[] }> = [];\n\n sections.push({\n header: 'Graph Statistics',\n items: [\n `Total packages: ${nodes.size}`,\n `Total dependencies: ${totalDeps}`,\n `Average dependencies per package: ${avgDeps}`,\n `Max dependencies: ${maxDeps} (${maxDepsPackage})`,\n ],\n });\n\n // Dependency distribution\n const distributionItems: string[] = [];\n const sortedCounts = Array.from(depCounts.entries()).sort((a, b) => a[0] - b[0]);\n for (const [count, packages] of sortedCounts) {\n const bar = '█'.repeat(Math.min(packages, 20));\n distributionItems.push(`${count} deps: ${bar} ${packages} packages`);\n }\n\n sections.push({\n header: 'Dependency Distribution',\n items: distributionItems,\n });\n\n ui?.success?.('Graph statistics calculated', {\n title: '📊 Dependency Graph Statistics',\n sections,\n });\n}\n\n/**\n * Output DOT format for graphviz\n */\nfunction outputDot(graph: DependencyGraph, flags: VisualizeFlags, ui: UIFacade | undefined) {\n const { nodes } = graph;\n\n const lines: string[] = [];\n lines.push('digraph dependencies {');\n lines.push(' rankdir=LR;');\n lines.push(' node [shape=box];');\n lines.push('');\n\n for (const [name, node] of nodes) {\n for (const dep of node.deps) {\n const safeName = name.replace(/[@\\/]/g, '_');\n const safeDep = dep.replace(/[@\\/]/g, '_');\n lines.push(` \"${safeName}\" -> \"${safeDep}\";`);\n }\n }\n\n lines.push('}');\n\n if (flags.json) {\n ui?.json?.({ dot: lines.join('\\n') });\n } else {\n for (const line of lines) {\n ui?.write?.(line);\n }\n ui?.write?.('');\n ui?.write?.('# Save to file and visualize with:');\n ui?.write?.('# dot -Tpng dependencies.dot -o dependencies.png');\n }\n}\n"]}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../home/runner/work/kb-labs/kb-labs/plugins/quality/entry/src/cli/commands/flags.ts","../../home/runner/work/kb-labs/kb-labs/plugins/quality/entry/src/manifest.ts"],"names":[],"mappings":";;;;;;AASO,IAAM,UAAA,GAAa;AAAA,EACxB,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,oBAAA;AAAA,IACb,OAAA,EAAS;AAAA,GACX;AAAA,EACA,EAAA,EAAI;AAAA,IACF,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,uBAAA;AAAA,IACb,OAAA,EAAS;AAAA,GACX;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,mBAAA;AAAA,IACb,OAAA,EAAS;AAAA,GACX;AAAA,EACA,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,8BAAA;AAAA,IACb,OAAA,EAAS;AAAA;AAEb,CAAA;AAaO,IAAM,WAAA,GAAc;AAAA,EACzB,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,oBAAA;AAAA,IACb,OAAA,EAAS;AAAA,GACX;AAAA,EACA,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,QAAA;AAAA,IACN,WAAA,EAAa,mCAAA;AAAA,IACb,KAAA,EAAO;AAAA,GACT;AAAA,EACA,QAAA,EAAU;AAAA,IACR,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,yBAAA;AAAA,IACb,OAAA,EAAS,KAAA;AAAA,IACT,KAAA,EAAO;AAAA,GACT;AAAA,EACA,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,4BAAA;AAAA,IACb,OAAA,EAAS;AAAA;AAEb,CAAA;AAaO,IAAM,YAAA,GAAe;AAAA,EAC1B,SAAA,EAAW;AAAA,IACT,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,uCAAA;AAAA,IACb,OAAA,EAAS;AAAA,GACX;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,4BAAA;AAAA,IACb,OAAA,EAAS;AAAA,GACX;AAAA,EACA,aAAA,EAAe;AAAA,IACb,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,oCAAA;AAAA,IACb,OAAA,EAAS;AAAA,GACX;AAAA,EACA,gBAAA,EAAkB;AAAA,IAChB,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,qCAAA;AAAA,IACb,OAAA,EAAS;AAAA,GACX;AAAA,EACA,GAAA,EAAK;AAAA,IACH,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,gEAAA;AAAA,IACb,OAAA,EAAS;AAAA,GACX;AAAA,EACA,KAAA,EAAO;AAAA,IACL,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,4BAAA;AAAA,IACb,OAAA,EAAS;AAAA,GACX;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,oBAAA;AAAA,IACb,OAAA,EAAS;AAAA;AAEb,CAAA;AA8DO,IAAM,eAAA,GAAkB;AAAA,EAC7B,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,QAAA;AAAA,IACN,WAAA,EAAa,4CAAA;AAAA,IACb,KAAA,EAAO;AAAA,GACT;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,qCAAA;AAAA,IACb,OAAA,EAAS;AAAA,GACX;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,wBAAA;AAAA,IACb,OAAA,EAAS;AAAA,GACX;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,oBAAA;AAAA,IACb,OAAA,EAAS;AAAA;AAEb,CAAA;AAaO,IAAM,WAAA,GAAc;AAAA,EACzB,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,oBAAA;AAAA,IACb,OAAA,EAAS;AAAA;AAEb,CAAA;AAUO,IAAM,cAAA,GAAiB;AAAA,EAC5B,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,QAAA;AAAA,IACN,WAAA,EAAa,2BAAA;AAAA,IACb,KAAA,EAAO;AAAA,GACT;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,sBAAA;AAAA,IACb,OAAA,EAAS;AAAA,GACX;AAAA,EACA,GAAA,EAAK;AAAA,IACH,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,gCAAA;AAAA,IACb,OAAA,EAAS;AAAA,GACX;AAAA,EACA,KAAA,EAAO;AAAA,IACL,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,uBAAA;AAAA,IACb,OAAA,EAAS;AAAA,GACX;AAAA,EACA,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,iDAAA;AAAA,IACb,OAAA,EAAS;AAAA,GACX;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,8CAAA;AAAA,IACb,OAAA,EAAS;AAAA,GACX;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,oBAAA;AAAA,IACb,OAAA,EAAS;AAAA;AAEb,CAAA;AAgBO,IAAM,gBAAA,GAAmB;AAAA,EAC9B,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,QAAA;AAAA,IACN,WAAA,EAAa,mCAAA;AAAA,IACb,KAAA,EAAO;AAAA,GACT;AAAA,EACA,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,QAAA;AAAA,IACN,WAAA,EAAa,qCAAA;AAAA,IACb,OAAA,EAAS;AAAA,GACX;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,oBAAA;AAAA,IACb,OAAA,EAAS;AAAA,GACX;AAAA,EACA,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,8BAAA;AAAA,IACb,OAAA,EAAS;AAAA;AAEb,CAAA;AAaO,IAAM,eAAA,GAAkB;AAAA,EAC7B,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,QAAA;AAAA,IACN,WAAA,EAAa,oCAAA;AAAA,IACb,KAAA,EAAO;AAAA,GACT;AAAA,EACA,aAAA,EAAe;AAAA,IACb,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,gCAAA;AAAA,IACb,OAAA,EAAS;AAAA,GACX;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,oBAAA;AAAA,IACb,OAAA,EAAS;AAAA,GACX;AAAA,EACA,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,gCAAA;AAAA,IACb,OAAA,EAAS;AAAA;AAEb,CAAA;AAaO,IAAM,eAAA,GAAkB;AAAA,EAC7B,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,QAAA;AAAA,IACN,WAAA,EAAa,gCAAA;AAAA,IACb,KAAA,EAAO;AAAA,GACT;AAAA,EACA,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,QAAA;AAAA,IACN,WAAA,EAAa,qCAAA;AAAA,IACb,OAAA,EAAS;AAAA,GACX;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,6BAAA;AAAA,IACb,OAAA,EAAS;AAAA,GACX;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,mDAAA;AAAA,IACb,OAAA,EAAS;AAAA,GACX;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,oBAAA;AAAA,IACb,OAAA,EAAS;AAAA,GACX;AAAA,EACA,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,4BAAA;AAAA,IACb,OAAA,EAAS;AAAA;AAEb,CAAA;AAeO,IAAM,gBAAA,GAAmB;AAAA,EAC9B,MAAM,EAAE,IAAA,EAAM,WAAW,WAAA,EAAa,oBAAA,EAAsB,SAAS,KAAA,EAAM;AAAA,EAC3E,SAAS,EAAE,IAAA,EAAM,UAAU,WAAA,EAAa,mCAAA,EAAqC,OAAO,GAAA;AACtF,CAAA;AAOO,IAAM,aAAA,GAAgB;AAAA,EAC3B,MAAM,EAAE,IAAA,EAAM,WAAW,WAAA,EAAa,oBAAA,EAAsB,SAAS,KAAA,EAAM;AAAA,EAC3E,MAAM,EAAE,IAAA,EAAM,UAAU,WAAA,EAAa,gCAAA,EAAkC,SAAS,aAAA,EAAc;AAAA,EAC9F,KAAK,EAAE,IAAA,EAAM,UAAU,WAAA,EAAa,qBAAA,EAAuB,SAAS,EAAA;AACtE,CAAA;AAOO,IAAM,aAAA,GAAgB;AAAA,EAC3B,MAAM,EAAE,IAAA,EAAM,WAAW,WAAA,EAAa,oBAAA,EAAsB,SAAS,KAAA;AACvE,CAAA;AAOO,IAAM,YAAA,GAAe;AAAA,EAC1B,MAAM,EAAE,IAAA,EAAM,WAAW,WAAA,EAAa,oBAAA,EAAsB,SAAS,KAAA,EAAM;AAAA,EAC3E,OAAO,EAAE,IAAA,EAAM,UAAU,WAAA,EAAa,2BAAA,EAA6B,SAAS,EAAA;AAC9E,CAAA;AAOO,IAAM,aAAA,GAAgB;AAAA,EAC3B,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,QAAA;AAAA,IACN,WAAA,EAAa,4BAAA;AAAA,IACb,KAAA,EAAO;AAAA,GACT;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,oBAAA;AAAA,IACb,OAAA,EAAS;AAAA,GACX;AAAA,EACA,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,qCAAA;AAAA,IACb,OAAA,EAAS,KAAA;AAAA,IACT,KAAA,EAAO;AAAA,GACT;AAAA,EACA,aAAA,EAAe;AAAA,IACb,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,0CAAA;AAAA,IACb,OAAA,EAAS;AAAA,GACX;AAAA,EACA,SAAA,EAAW;AAAA,IACT,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,sDAAA;AAAA,IACb,OAAA,EAAS;AAAA,GACX;AAAA,EACA,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,QAAA;AAAA,IACN,WAAA,EAAa;AAAA,GACf;AAAA,EACA,cAAA,EAAgB;AAAA,IACd,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,wBAAA;AAAA,IACb,OAAA,EAAS;AAAA,GACX;AAAA,EACA,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,yBAAA;AAAA,IACb,OAAA,EAAS;AAAA;AAEb,CAAA;AAcO,IAAM,YAAA,GAAe;AAAA,EAC1B,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,QAAA;AAAA,IACN,WAAA,EAAa,iCAAA;AAAA,IACb,KAAA,EAAO;AAAA,GACT;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,oBAAA;AAAA,IACb,OAAA,EAAS;AAAA;AAEb,CAAA;AAOO,IAAM,SAAA,GAAY;AAAA,EACvB,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,oBAAA;AAAA,IACb,OAAA,EAAS;AAAA,GACX;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,0DAAA;AAAA,IACb,OAAA,EAAS;AAAA;AAEb,CAAA;;;ACpeA,IAAM,oBAAoB,kBAAA,EAAmB,CAC1C,KAAK,gBAAgB,CAAA,CACrB,OAAO,EAAE,IAAA,EAAM,aAAa,KAAA,EAAO,CAAC,IAAI,CAAA,EAAG,EAC3C,SAAA,CAAU,EAAE,OAAO,CAAC,MAAA,EAAQ,KAAK,CAAA,EAAG,EACpC,YAAA,CAAa,EAAE,OAAO,CAAC,UAAU,GAAG,SAAA,EAAW,IAAA,EAAM,CAAA,CACrD,UAAA,CAAW,EAAE,SAAA,EAAW,GAAA,EAAS,UAAU,IAAA,EAAM,EACjD,KAAA,EAAM;AAET,IAAM,mBAAmB,kBAAA,EAAmB,CACzC,KAAK,gBAAgB,CAAA,CACrB,OAAO,EAAE,IAAA,EAAM,aAAa,KAAA,EAAO,CAAC,IAAI,CAAA,EAAG,EAC3C,SAAA,CAAU,EAAE,OAAO,CAAC,MAAA,EAAQ,KAAK,CAAA,EAAG,EACpC,YAAA,CAAa,EAAE,OAAO,CAAC,UAAU,GAAG,SAAA,EAAW,IAAA,EAAM,CAAA,CACrD,UAAA,CAAW,EAAE,SAAA,EAAW,GAAA,EAAS,UAAU,IAAA,EAAM,EACjD,KAAA,EAAM;AAEF,IAAM,QAAA,GAAW;AAAA,EACtB,MAAA,EAAQ,aAAA;AAAA,EACR,EAAA,EAAI,kBAAA;AAAA,EACJ,OAAA,EAAS,OAAA;AAAA,EACT,aAAA,EAAe,SAAA;AAAA,EAEf,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,yDAAA;AAAA,IACb,IAAA,EAAM,CAAC,SAAA,EAAW,cAAA,EAAgB,YAAY,UAAU;AAAA,GAC1D;AAAA,EAEA,QAAA,EAAU;AAAA,IACR,QAAA,EAAU,CAAC,SAAA,EAAW,OAAO,CAAA;AAAA,IAC7B,QAAA,EAAU,CAAC,WAAA,EAAa,QAAQ;AAAA,GAClC;AAAA,EAEA,GAAA,EAAK;AAAA,IACH,SAAA,EAAW;AAAA,MACT,EAAE,IAAA,EAAM,SAAA,EAAW,QAAA,EAAU,0DAAA,EAA2D;AAAA,MACxF,EAAE,IAAA,EAAM,eAAA,EAAiB,QAAA,EAAU,uDAAA,EAAwD;AAAA,MAC3F,EAAE,IAAA,EAAM,aAAA,EAAe,QAAA,EAAU,yBAAA;AAA0B,KAC7D;AAAA,IACA,QAAA,EAAU;AAAA;AAAA,MAER;AAAA,QACE,IAAA,EAAM,eAAA;AAAA,QACN,QAAA,EAAU,UAAA;AAAA,QACV,aAAA,EAAe,MAAA;AAAA,QACf,QAAA,EAAU,qBAAA;AAAA,QACV,OAAA,EAAS,iCAAA;AAAA,QACT,KAAA,EAAO,mBAAmB,UAAU,CAAA;AAAA,QACpC,QAAA,EAAU,CAAC,kBAAA,EAAoB,yBAAyB,CAAA;AAAA,QACxD,WAAA,EAAa;AAAA,OACf;AAAA,MACA;AAAA,QACE,IAAA,EAAM,gBAAA;AAAA,QACN,QAAA,EAAU,UAAA;AAAA,QACV,aAAA,EAAe,SAAA;AAAA,QACf,QAAA,EAAU,2EAAA;AAAA,QACV,OAAA,EAAS,kCAAA;AAAA,QACT,KAAA,EAAO,mBAAmB,WAAW,CAAA;AAAA,QACrC,QAAA,EAAU,CAAC,mBAAA,EAAqB,0BAAA,EAA4B,8BAA8B,CAAA;AAAA,QAC1F,WAAA,EAAa;AAAA,OACf;AAAA,MACA;AAAA,QACE,IAAA,EAAM,kBAAA;AAAA,QACN,QAAA,EAAU,UAAA;AAAA,QACV,aAAA,EAAe,QAAA;AAAA,QACf,QAAA,EAAU,4DAAA;AAAA,QACV,OAAA,EAAS,oCAAA;AAAA,QACT,KAAA,EAAO,mBAAmB,aAAa,CAAA;AAAA,QACvC,QAAA,EAAU,CAAC,qBAAA,EAAuB,4BAA4B,CAAA;AAAA,QAC9D,WAAA,EAAa;AAAA,OACf;AAAA,MACA;AAAA,QACE,IAAA,EAAM,iBAAA;AAAA,QACN,QAAA,EAAU,UAAA;AAAA,QACV,aAAA,EAAe,MAAA;AAAA,QACf,QAAA,EAAU,gDAAA;AAAA,QACV,OAAA,EAAS,mCAAA;AAAA,QACT,KAAA,EAAO,mBAAmB,YAAY,CAAA;AAAA,QACtC,QAAA,EAAU,CAAC,oBAAA,EAAsB,2BAAA,EAA6B,+BAA+B,CAAA;AAAA,QAC7F,WAAA,EAAa;AAAA,OACf;AAAA;AAAA,MAGA;AAAA,QACE,IAAA,EAAM,iBAAA;AAAA,QACN,QAAA,EAAU,OAAA;AAAA,QACV,aAAA,EAAe,MAAA;AAAA,QACf,QAAA,EAAU,+EAAA;AAAA,QACV,OAAA,EAAS,mCAAA;AAAA,QACT,KAAA,EAAO,mBAAmB,YAAY,CAAA;AAAA,QACtC,QAAA,EAAU;AAAA,UACR,2CAAA;AAAA,UACA,kDAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,WAAA,EAAa;AAAA,OACf;AAAA,MACA;AAAA,QACE,IAAA,EAAM,cAAA;AAAA,QACN,QAAA,EAAU,OAAA;AAAA,QACV,aAAA,EAAe,SAAA;AAAA,QACf,QAAA,EAAU,+DAAA;AAAA,QACV,OAAA,EAAS,gCAAA;AAAA,QACT,KAAA,EAAO,mBAAmB,SAAS,CAAA;AAAA,QACnC,QAAA,EAAU;AAAA,UACR,iBAAA;AAAA,UACA,wBAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,WAAA,EAAa;AAAA,OACf;AAAA;AAAA,MAGA;AAAA,QACE,IAAA,EAAM,sBAAA;AAAA,QACN,QAAA,EAAU,cAAA;AAAA,QACV,aAAA,EAAe,SAAA;AAAA,QACf,QAAA,EAAU,iEAAA;AAAA,QACV,OAAA,EAAS,wCAAA;AAAA,QACT,KAAA,EAAO,mBAAmB,gBAAgB,CAAA;AAAA,QAC1C,QAAA,EAAU,CAAC,yBAAA,EAA2B,gCAAA,EAAkC,uDAAuD,CAAA;AAAA,QAC/H,WAAA,EAAa;AAAA,OACf;AAAA,MACA;AAAA,QACE,IAAA,EAAM,kBAAA;AAAA,QACN,QAAA,EAAU,cAAA;AAAA,QACV,aAAA,EAAe,SAAA;AAAA,QACf,QAAA,EAAU,uDAAA;AAAA,QACV,OAAA,EAAS,oCAAA;AAAA,QACT,KAAA,EAAO,mBAAmB,aAAa,CAAA;AAAA,QACvC,QAAA,EAAU,CAAC,qBAAA,EAAuB,4BAAA,EAA8B,6CAA6C,CAAA;AAAA,QAC7G,WAAA,EAAa;AAAA,OACf;AAAA,MACA;AAAA,QACE,IAAA,EAAM,qBAAA;AAAA,QACN,QAAA,EAAU,cAAA;AAAA,QACV,aAAA,EAAe,SAAA;AAAA,QACf,QAAA,EAAU,yBAAA;AAAA,QACV,OAAA,EAAS,uCAAA;AAAA,QACT,KAAA,EAAO,mBAAmB,eAAe,CAAA;AAAA,QACzC,QAAA,EAAU,CAAC,wBAAA,EAA0B,+BAA+B,CAAA;AAAA,QACpE,WAAA,EAAa;AAAA,OACf;AAAA,MACA;AAAA,QACE,IAAA,EAAM,gBAAA;AAAA,QACN,QAAA,EAAU,cAAA;AAAA,QACV,aAAA,EAAe,SAAA;AAAA,QACf,QAAA,EAAU,8BAAA;AAAA,QACV,OAAA,EAAS,kCAAA;AAAA,QACT,KAAA,EAAO,mBAAmB,WAAW,CAAA;AAAA,QACrC,QAAA,EAAU,CAAC,mBAAA,EAAqB,0BAA0B,CAAA;AAAA,QAC1D,WAAA,EAAa;AAAA,OACf;AAAA;AAAA,MAGA;AAAA,QACE,IAAA,EAAM,mBAAA;AAAA,QACN,QAAA,EAAU,QAAA;AAAA,QACV,aAAA,EAAe,SAAA;AAAA,QACf,QAAA,EAAU,iDAAA;AAAA,QACV,OAAA,EAAS,qCAAA;AAAA,QACT,KAAA,EAAO,mBAAmB,aAAa,CAAA;AAAA,QACvC,QAAA,EAAU,CAAC,sBAAA,EAAwB,6BAA6B,CAAA;AAAA,QAChE,WAAA,EAAa;AAAA,OACf;AAAA,MACA;AAAA,QACE,IAAA,EAAM,qBAAA;AAAA,QACN,QAAA,EAAU,QAAA;AAAA,QACV,aAAA,EAAe,SAAA;AAAA,QACf,QAAA,EAAU,gEAAA;AAAA,QACV,OAAA,EAAS,uCAAA;AAAA,QACT,KAAA,EAAO,mBAAmB,eAAe,CAAA;AAAA,QACzC,QAAA,EAAU,CAAC,wBAAA,EAA0B,+BAA+B,CAAA;AAAA,QACpE,WAAA,EAAa;AAAA,OACf;AAAA,MACA;AAAA,QACE,IAAA,EAAM,sBAAA;AAAA,QACN,QAAA,EAAU,QAAA;AAAA,QACV,aAAA,EAAe,SAAA;AAAA,QACf,QAAA,EAAU,8BAAA;AAAA,QACV,OAAA,EAAS,wCAAA;AAAA,QACT,KAAA,EAAO,mBAAmB,gBAAgB,CAAA;AAAA,QAC1C,QAAA,EAAU,CAAC,yBAAA,EAA2B,gCAAgC,CAAA;AAAA,QACtE,WAAA,EAAa;AAAA,OACf;AAAA,MACA;AAAA,QACE,IAAA,EAAM,qBAAA;AAAA,QACN,QAAA,EAAU,QAAA;AAAA,QACV,aAAA,EAAe,SAAA;AAAA,QACf,QAAA,EAAU,8BAAA;AAAA,QACV,OAAA,EAAS,uCAAA;AAAA,QACT,KAAA,EAAO,mBAAmB,eAAe,CAAA;AAAA,QACzC,QAAA,EAAU,CAAC,wBAAA,EAA0B,wCAAwC,CAAA;AAAA,QAC7E,WAAA,EAAa;AAAA,OACf;AAAA,MACA;AAAA,QACE,IAAA,EAAM,kBAAA;AAAA,QACN,QAAA,EAAU,OAAA;AAAA,QACV,aAAA,EAAe,QAAA;AAAA,QACf,QAAA,EAAU,4BAAA;AAAA,QACV,OAAA,EAAS,oCAAA;AAAA,QACT,KAAA,EAAO,mBAAmB,YAAY,CAAA;AAAA,QACtC,QAAA,EAAU,CAAC,+BAAA,EAAiC,2BAA2B,CAAA;AAAA,QACvE,WAAA,EAAa;AAAA,OACf;AAAA,MACA;AAAA,QACE,IAAA,EAAM,mBAAA;AAAA,QACN,QAAA,EAAU,OAAA;AAAA,QACV,aAAA,EAAe,SAAA;AAAA,QACf,QAAA,EAAU,4BAAA;AAAA,QACV,OAAA,EAAS,qCAAA;AAAA,QACT,KAAA,EAAO,mBAAmB,cAAc,CAAA;AAAA,QACxC,QAAA,EAAU,CAAC,6BAAA,EAA+B,4BAA4B,CAAA;AAAA,QACtE,WAAA,EAAa;AAAA;AACf;AACF,GACF;AAAA,EAEA,IAAA,EAAM;AAAA,IACJ,QAAA,EAAU,iBAAA;AAAA,IACV,MAAA,EAAQ;AAAA,MACN,EAAE,QAAQ,KAAA,EAAO,IAAA,EAAM,eAAe,KAAA,EAAO,OAAA,EAAS,0CAAA,EAA4C,SAAA,EAAW,IAAA,EAAQ;AAAA,MACrH,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAM,cAAA,CAAe,MAAA,EAAQ,SAAS,2CAAA,EAA4C;AAAA,MACnG,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAM,cAAA,CAAe,MAAA,EAAQ,SAAS,2CAAA,EAA4C;AAAA,MACnG,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAM,cAAA,CAAe,QAAA,EAAU,SAAS,6CAAA,EAA8C;AAAA,MACvG,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAM,cAAA,CAAe,SAAA,EAAW,SAAS,yCAAA,EAA0C;AAAA,MACpG,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAM,cAAA,CAAe,OAAA,EAAS,SAAS,4CAAA,EAA6C;AAAA,MACrG,EAAE,MAAA,EAAQ,MAAA,EAAQ,MAAM,cAAA,CAAe,QAAA,EAAU,SAAS,6CAAA,EAA8C;AAAA,MACxG,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAM,cAAA,CAAe,YAAA,EAAc,SAAS,iDAAA,EAAkD;AAAA,MAC/G,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAM,cAAA,CAAe,WAAA,EAAa,SAAS,gDAAA,EAAiD;AAAA,MAC7G,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAM,cAAA,CAAe,MAAA,EAAQ,SAAS,2CAAA,EAA4C;AAAA,MACnG,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAM,cAAA,CAAe,KAAA,EAAO,SAAS,0CAAA,EAA2C;AAAA,MACjG,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAM,cAAA,CAAe,KAAA,EAAO,SAAS,0CAAA;AAA2C;AACnG,GACF;AAAA,EAEA,MAAA,EAAQ;AAAA,IACN,OAAA,EAAS,CAAA;AAAA,IACT,UAAA,EAAY,eAAA;AAAA,IACZ,KAAA,EAAO;AAAA,MACL;AAAA,QACE,EAAA,EAAI,kBAAA;AAAA,QACJ,KAAA,EAAO,SAAA;AAAA,QACP,IAAA,EAAM,qBAAA;AAAA,QACN,KAAA,EAAO,YAAA;AAAA,QACP,KAAA,EAAO,mBAAA;AAAA,QACP,KAAA,EAAO;AAAA;AACT,KACF;AAAA,IACA,KAAA,EAAO;AAAA,MACL;AAAA,QACE,EAAA,EAAI,SAAA;AAAA,QACJ,KAAA,EAAO,SAAA;AAAA,QACP,IAAA,EAAM,qBAAA;AAAA,QACN,MAAA,EAAQ,kBAAA;AAAA,QACR,KAAA,EAAO;AAAA;AACT;AACF,GACF;AAAA,EAEA,WAAA,EAAa;AACf;AAEA,IAAO,gBAAA,GAAQ","file":"index.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
|
+
{"version":3,"sources":["../src/cli/commands/flags.ts","../src/manifest.ts"],"names":[],"mappings":"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","file":"index.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"]}
|
package/dist/manifest.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../home/runner/work/kb-labs/kb-labs/plugins/quality/entry/src/cli/commands/flags.ts","../../home/runner/work/kb-labs/kb-labs/plugins/quality/entry/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
|
+
{"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"]}
|