@kb-labs/quality-contracts 2.119.0-canary.f8394d5fd → 2.119.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/contract.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/contract.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["
|
|
1
|
+
{"version":3,"sources":["../../home/runner/work/kb-labs/kb-labs/plugins/quality/contracts/src/version.ts","../../home/runner/work/kb-labs/kb-labs/plugins/quality/contracts/src/contract.ts"],"names":[],"mappings":";AAAO,IAAM,iBAAA,GAAoB,uBAAA;AAI1B,IAAM,gBAAA,GAAmB,OAAA;;;ACAzB,IAAM,uBAAA,GAA0B;AAAA,EACrC,MAAA,EAAQ,iBAAA;AAAA,EACR,QAAA,EAAU,0BAAA;AAAA,EACV,gBAAA;AAAA,EACA,SAAA,EAAW;AAAA,IACT,yBAAA,EAA2B;AAAA,MACzB,EAAA,EAAI,yBAAA;AAAA,MACJ,IAAA,EAAM,MAAA;AAAA,MACN,WAAA,EAAa,mEAAA;AAAA,MACb,WAAA,EAAa,wCAAA;AAAA,MACb,SAAA,EAAW,kBAAA;AAAA,MACX,SAAA,EAAW,yDAAA;AAAA,MACX,OAAA,EAAS;AAAA,QACP,OAAA,EAAS,qCAAA;AAAA,QACT,OAAA,EAAS;AAAA,UACP,OAAA,EAAS,eAAA;AAAA,UACT,MAAA,EAAQ;AAAA;AACV;AACF,KACF;AAAA,IACA,oBAAA,EAAsB;AAAA,MACpB,EAAA,EAAI,oBAAA;AAAA,MACJ,IAAA,EAAM,KAAA;AAAA,MACN,WAAA,EAAa,2CAAA;AAAA,MACb,WAAA,EAAa,6BAAA;AAAA,MACb,SAAA,EAAW;AAAA;AACb,GACF;AAAA,EACA,QAAA,EAAU;AAAA,IACR,uBAAA,EAAyB;AAAA,MACvB,EAAA,EAAI,uBAAA;AAAA,MACJ,WAAA,EAAa,kEAAA;AAAA,MACb,KAAA,EAAO;AAAA,QACL,GAAA,EAAK,6DAAA;AAAA,QACL,MAAA,EAAQ;AAAA,OACV;AAAA,MACA,MAAA,EAAQ;AAAA,QACN,GAAA,EAAK,8DAAA;AAAA,QACL,MAAA,EAAQ;AAAA,OACV;AAAA,MACA,QAAA,EAAU,CAAC,yBAAA,EAA2B,oBAAoB,CAAA;AAAA,MAC1D,QAAA,EAAU,CAAC,0BAAA,EAA4B,qCAAA,EAAuC,iCAAiC;AAAA,KACjH;AAAA,IACA,6BAAA,EAA+B;AAAA,MAC7B,EAAA,EAAI,6BAAA;AAAA,MACJ,WAAA,EAAa,8DAAA;AAAA,MACb,KAAA,EAAO;AAAA,QACL,GAAA,EAAK,kEAAA;AAAA,QACL,MAAA,EAAQ;AAAA,OACV;AAAA,MACA,MAAA,EAAQ;AAAA,QACN,GAAA,EAAK,mEAAA;AAAA,QACL,MAAA,EAAQ;AAAA,OACV;AAAA,MACA,UAAU,EAAC;AAAA,MACX,QAAA,EAAU,CAAC,gCAAA,EAAkC,gDAAA,EAAkD,uCAAuC;AAAA;AACxI,GACF;AAAA,EACA,SAAA,EAAW;AAAA,IACT,yBAAA,EAA2B;AAAA,MACzB,EAAA,EAAI,yBAAA;AAAA,MACJ,WAAA,EAAa,mFAAA;AAAA,MACb,QAAA,EAAU,CAAC,yBAAA,EAA2B,oBAAoB,CAAA;AAAA,MAC1D,KAAA,EAAO;AAAA,QACL;AAAA,UACE,EAAA,EAAI,0CAAA;AAAA,UACJ,SAAA,EAAW,uBAAA;AAAA,UACX,QAAA,EAAU,CAAC,yBAAA,EAA2B,oBAAoB;AAAA;AAC5D;AACF;AACF,GACF;AAAA,EACA,GAAA,EAAK;AAAA,IACH,IAAA,EAAM;AAAA,MACJ,QAAA,EAAU,sBAAA;AAAA,MACV,MAAA,EAAQ;AAAA,QACN,qBAAA,EAAuB;AAAA,UACrB,EAAA,EAAI,qBAAA;AAAA,UACJ,MAAA,EAAQ,KAAA;AAAA,UACR,IAAA,EAAM,QAAA;AAAA,UACN,WAAA,EAAa,kDAAA;AAAA,UACb,QAAA,EAAU;AAAA,YACR,GAAA,EAAK,8DAAA;AAAA,YACL,MAAA,EAAQ;AAAA,WACV;AAAA,UACA,QAAA,EAAU,CAAC,yBAAyB;AAAA;AACtC;AACF;AACF;AAEJ","file":"contract.js","sourcesContent":["export const contractsSchemaId = 'kb.plugin.contracts/1' as const;\n\nexport type ContractsSchemaId = typeof contractsSchemaId;\n\nexport const contractsVersion = '1.0.0' as const;\n\n","import type { PluginContracts } from './types';\nimport { contractsSchemaId, contractsVersion } from './version';\n\n// Level 2: Contracts типизация с as const для извлечения типов\nexport const pluginContractsManifest = {\n schema: contractsSchemaId,\n pluginId: '@kb-labs/plugin-template',\n contractsVersion,\n artifacts: {\n 'template.hello.greeting': {\n id: 'template.hello.greeting',\n kind: 'json',\n description: 'Machine-readable greeting payload returned by the hello surfaces.',\n pathPattern: 'artifacts/template/hello/greeting.json',\n mediaType: 'application/json',\n schemaRef: '@kb-labs/plugin-template-contracts/schema#HelloGreeting',\n example: {\n summary: 'Greeting payload for anonymous user',\n payload: {\n message: 'Hello, World!',\n target: 'World'\n }\n }\n },\n 'template.hello.log': {\n id: 'template.hello.log',\n kind: 'log',\n description: 'Execution log for hello command/workflow.',\n pathPattern: 'logs/template/hello/run.log',\n mediaType: 'text/plain'\n }\n },\n commands: {\n 'plugin-template:hello': {\n id: 'plugin-template:hello',\n description: 'Produce a greeting message optionally targeting a provided name.',\n input: {\n ref: '@kb-labs/plugin-template-contracts/schema#HelloCommandInput',\n format: 'zod'\n },\n output: {\n ref: '@kb-labs/plugin-template-contracts/schema#HelloCommandOutput',\n format: 'zod'\n },\n produces: ['template.hello.greeting', 'template.hello.log'],\n examples: ['kb plugin-template hello', 'kb plugin-template hello --name Dev', 'kb plugin-template hello --json']\n },\n 'plugin-template:test-loader': {\n id: 'plugin-template:test-loader',\n description: 'Test UI loader/spinner functionality with various scenarios.',\n input: {\n ref: '@kb-labs/plugin-template-contracts/schema#TestLoaderCommandInput',\n format: 'zod'\n },\n output: {\n ref: '@kb-labs/plugin-template-contracts/schema#TestLoaderCommandOutput',\n format: 'zod'\n },\n produces: [],\n examples: ['kb plugin-template test-loader', 'kb plugin-template test-loader --duration 1000', 'kb plugin-template test-loader --fail']\n }\n },\n workflows: {\n 'template.workflow.hello': {\n id: 'template.workflow.hello',\n description: 'Single-step workflow executing the hello command and emitting greeting artifacts.',\n produces: ['template.hello.greeting', 'template.hello.log'],\n steps: [\n {\n id: 'template.workflow.hello.step.run-command',\n commandId: 'plugin-template:hello',\n produces: ['template.hello.greeting', 'template.hello.log']\n }\n ]\n }\n },\n api: {\n rest: {\n basePath: '/v1/plugins/template',\n routes: {\n 'template.rest.hello': {\n id: 'template.rest.hello',\n method: 'GET',\n path: '/hello',\n description: 'Return a greeting payload from the REST surface.',\n response: {\n ref: '@kb-labs/plugin-template-contracts/schema#HelloCommandOutput',\n format: 'zod'\n },\n produces: ['template.hello.greeting']\n }\n }\n }\n }\n} as const satisfies PluginContracts;\n\n// Извлекаем типы для использования в других местах\nexport type PluginArtifactIds = keyof typeof pluginContractsManifest.artifacts;\nexport type PluginCommandIds = keyof typeof pluginContractsManifest.commands;\nexport type PluginWorkflowIds = keyof typeof pluginContractsManifest.workflows;\nexport type PluginRouteIds = typeof pluginContractsManifest.api extends { rest: { routes: infer R } }\n ? R extends Record<string, any>\n ? keyof R\n : never\n : never;\n\n"]}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/types/config.ts","../src/constants.ts","../src/routes.ts","../src/types/rest-api.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Quality plugin configuration — stored in kb.config.json under \"quality\" section\n */\n\nexport interface QualityLayerMap {\n [pathPrefix: string]: number;\n}\n\nexport interface QualityThresholds {\n /** Minimum health score before exit 1. Default: 70 */\n health: number;\n /** Instability threshold for warning. Default: 0.85 */\n instability: number;\n}\n\nexport interface QualityKnipConfig {\n /** Whether to run knip for dead code / dep analysis. Default: true */\n enabled: boolean;\n}\n\nexport interface QualityPluginConfig {\n /** Max snapshots to retain in history. Default: 30 */\n maxSnapshots: number;\n knip: QualityKnipConfig;\n /**\n * Layer map: path prefix → layer index.\n * Defaults to KB Labs standard layers from CLAUDE.md.\n */\n layers: QualityLayerMap;\n thresholds: QualityThresholds;\n}\n\nexport const defaultQualityConfig: QualityPluginConfig = {\n maxSnapshots: 30,\n knip: {\n enabled: true,\n },\n layers: {\n 'core/': 0,\n 'sdk/': 1,\n 'shared/': 1,\n 'cli/': 2,\n 'adapters/': 2,\n 'plugins/': 3,\n 'studio/': 4,\n },\n thresholds: {\n health: 70,\n instability: 0.85,\n },\n};\n","/**\n * Constants for Quality Plugin\n */\n\nexport const QUALITY_ENV_VARS = [\n 'KB_QUALITY_CACHE_TTL',\n 'KB_QUALITY_MAX_PACKAGES',\n] as const;\n\nexport const QUALITY_CACHE_PREFIX = 'quality:';\n\nexport const CACHE_KEYS = {\n STATS: 'quality:stats',\n HEALTH: 'quality:health',\n IMPORTS: 'quality:imports',\n EXPORTS: 'quality:exports',\n TYPES: 'quality:types',\n DUPLICATES: 'quality:duplicates',\n BUILDS: 'quality:builds',\n TYPE_ANALYSIS: 'quality:type-analysis',\n TESTS: 'quality:tests',\n DEAD_CODE: 'quality:dead-code',\n KNIP: 'quality:knip',\n LAYERS: 'quality:layers',\n COUPLING: 'quality:coupling',\n} as const;\n\n/** Cache TTLs in milliseconds */\nexport const CACHE_TTLS = {\n FAST: 5 * 60 * 1000, // 5 min — stats, health, coupling, layers\n SLOW: 10 * 60 * 1000, // 10 min — knip, builds, tests\n} as const;\n\nexport const DEFAULT_TIMEOUTS = {\n STATS: 60_000,\n HEALTH: 120_000,\n LAYERS: 60_000,\n COUPLING: 30_000,\n KNIP: 180_000,\n CHECK_TYPES: 90_000,\n FIX_DEPS: 300_000,\n CI: 600_000,\n} as const;\n\nexport const HEALTH_GRADES = {\n A: { min: 90, max: 100, label: 'Excellent' },\n B: { min: 80, max: 89, label: 'Good' },\n C: { min: 70, max: 79, label: 'Fair' },\n D: { min: 60, max: 69, label: 'Poor' },\n F: { min: 0, max: 59, label: 'Failing' },\n} as const;\n\n/** Dimension weights for composite health score */\nexport const DIMENSION_WEIGHTS = {\n architecture: 0.30,\n typescript: 0.25,\n deadCode: 0.20,\n depHygiene: 0.15,\n testCoverage: 0.10,\n} as const;\n\nexport const SNAPSHOT_DIR = '.kb/quality/snapshots';\nexport const SNAPSHOT_FILE = 'quality.json';\nexport const MAX_SNAPSHOTS_DEFAULT = 30;\n","/**\n * @module @kb-labs/quality-contracts/routes\n * REST API route constants for quality plugin\n */\n\nexport const QUALITY_BASE_PATH = '/v1/plugins/quality' as const;\n\nexport const QUALITY_ROUTES = {\n /** GET /stats */\n STATS: '/stats',\n /** GET /health */\n HEALTH: '/health',\n /** GET /dependencies */\n DEPENDENCIES: '/dependencies',\n /** GET /build-order */\n BUILD_ORDER: '/build-order',\n /** GET /cycles */\n CYCLES: '/cycles',\n /** GET /graph */\n GRAPH: '/graph',\n /** GET /stale */\n STALE: '/stale',\n /** GET /layers — layering violation report */\n LAYERS: '/layers',\n /** GET /coupling — coupling metrics */\n COUPLING: '/coupling',\n /** GET /dead-code — knip report */\n DEAD_CODE: '/dead-code',\n /** GET /history — snapshot history */\n HISTORY: '/history',\n /** POST /snapshot — save snapshot */\n SNAPSHOT: '/snapshot',\n} as const;\n\nexport const QUALITY_FULL_ROUTES = Object.fromEntries(\n Object.entries(QUALITY_ROUTES).map(([k, v]) => [k, `${QUALITY_BASE_PATH}${v}`])\n) as { [K in keyof typeof QUALITY_ROUTES]: string };\n\nexport type QualityRoute = (typeof QUALITY_ROUTES)[keyof typeof QUALITY_ROUTES];\n","/**\n * REST API Request/Response Types and Zod Schemas for Quality Plugin\n */\n\nimport { z } from 'zod';\n\n// ============================================================================\n// Stats API\n// ============================================================================\n\nexport const StatsRequestSchema = z.object({\n includeHealth: z.boolean().optional(),\n});\n\nexport type StatsRequest = z.infer<typeof StatsRequestSchema>;\n\nexport const StatsResponseSchema = z.object({\n packages: z.number(),\n loc: z.number(),\n size: z.string(),\n health: z.number().optional(),\n grade: z.string().optional(),\n});\n\nexport type StatsResponse = z.infer<typeof StatsResponseSchema>;\n\n// ============================================================================\n// Health API\n// ============================================================================\n\nexport const HealthRequestSchema = z.object({\n detailed: z.boolean().optional(),\n});\n\nexport type HealthRequest = z.infer<typeof HealthRequestSchema>;\n\nexport const HealthIssueSchema = z.object({\n type: z.string(),\n severity: z.number(),\n description: z.string(),\n packages: z.array(z.string()).optional(),\n count: z.number().optional(),\n});\n\nexport type HealthIssue = z.infer<typeof HealthIssueSchema>;\n\nexport const HealthResponseSchema = z.object({\n score: z.number(),\n grade: z.string(),\n issues: z.array(HealthIssueSchema).optional(),\n});\n\nexport type HealthResponse = z.infer<typeof HealthResponseSchema>;\n\n// ============================================================================\n// Dependencies API\n// ============================================================================\n\nexport const DependenciesRequestSchema = z.object({});\n\nexport type DependenciesRequest = z.infer<typeof DependenciesRequestSchema>;\n\nexport const VersionInfoSchema = z.object({\n version: z.string(),\n packages: z.array(z.string()),\n count: z.number(),\n});\n\nexport type VersionInfo = z.infer<typeof VersionInfoSchema>;\n\nexport const DuplicateDependencySchema = z.object({\n name: z.string(),\n versions: z.array(VersionInfoSchema),\n totalPackages: z.number(),\n});\n\nexport type DuplicateDependency = z.infer<typeof DuplicateDependencySchema>;\n\nexport const UnusedDependencySchema = z.object({\n name: z.string(),\n packages: z.array(z.string()),\n});\n\nexport type UnusedDependency = z.infer<typeof UnusedDependencySchema>;\n\nexport const MissingDependencySchema = z.object({\n name: z.string(),\n packages: z.array(z.string()),\n importedIn: z.array(z.string()),\n});\n\nexport type MissingDependency = z.infer<typeof MissingDependencySchema>;\n\nexport const DependenciesResponseSchema = z.object({\n duplicates: z.array(DuplicateDependencySchema),\n unused: z.array(UnusedDependencySchema),\n missing: z.array(MissingDependencySchema),\n totalIssues: z.number(),\n});\n\nexport type DependenciesResponse = z.infer<typeof DependenciesResponseSchema>;\n\n// ============================================================================\n// Build Order API\n// ============================================================================\n\nexport const BuildOrderRequestSchema = z.object({\n packageName: z.string().optional(),\n});\n\nexport type BuildOrderRequest = z.infer<typeof BuildOrderRequestSchema>;\n\nexport const BuildOrderResponseSchema = z.object({\n layers: z.array(z.array(z.string())),\n sorted: z.array(z.string()),\n circular: z.array(z.array(z.string())),\n packageCount: z.number(),\n layerCount: z.number(),\n hasCircular: z.boolean(),\n});\n\nexport type BuildOrderResponse = z.infer<typeof BuildOrderResponseSchema>;\n\n// ============================================================================\n// Cycles API\n// ============================================================================\n\nexport const CyclesRequestSchema = z.object({});\n\nexport type CyclesRequest = z.infer<typeof CyclesRequestSchema>;\n\nexport const CyclesResponseSchema = z.object({\n cycles: z.array(z.array(z.string())),\n count: z.number(),\n hasCircular: z.boolean(),\n affected: z.array(z.string()),\n});\n\nexport type CyclesResponse = z.infer<typeof CyclesResponseSchema>;\n\n// ============================================================================\n// Graph API\n// ============================================================================\n\nexport const GraphModeSchema = z.enum(['tree', 'reverse', 'impact', 'stats']);\n\nexport type GraphMode = z.infer<typeof GraphModeSchema>;\n\nexport const GraphRequestSchema = z.object({\n packageName: z.string().optional(),\n mode: GraphModeSchema,\n});\n\nexport type GraphRequest = z.infer<typeof GraphRequestSchema>;\n\nexport const GraphNodeSchema: z.ZodType<GraphNode> = z.lazy(() =>\n z.object({\n name: z.string(),\n children: z.array(GraphNodeSchema).optional(),\n })\n);\n\nexport type GraphNode = {\n name: string;\n children?: GraphNode[];\n};\n\nexport const GraphStatsSchema = z.object({\n totalPackages: z.number(),\n maxDepth: z.number(),\n avgDependencies: z.number(),\n mostDepended: z.array(\n z.object({\n name: z.string(),\n count: z.number(),\n })\n ),\n});\n\nexport type GraphStats = z.infer<typeof GraphStatsSchema>;\n\nexport const GraphResponseSchema = z.object({\n mode: GraphModeSchema,\n packageName: z.string().optional(),\n tree: GraphNodeSchema.optional(),\n packages: z.array(z.string()).optional(),\n stats: GraphStatsSchema.optional(),\n});\n\nexport type GraphResponse = z.infer<typeof GraphResponseSchema>;\n\n// ============================================================================\n// Stale API\n// ============================================================================\n\nexport const StaleRequestSchema = z.object({\n detailed: z.boolean().optional(),\n});\n\nexport type StaleRequest = z.infer<typeof StaleRequestSchema>;\n\nexport const StalePackageSchema = z.object({\n name: z.string(),\n path: z.string(),\n reason: z.enum(['source-newer', 'dependency-rebuilt', 'missing-dist']),\n sourceModified: z.string().optional(),\n distModified: z.string().optional(),\n affectedPackages: z.array(z.string()),\n affectedCount: z.number(),\n severity: z.enum(['critical', 'high', 'medium', 'low']),\n});\n\nexport type StalePackage = z.infer<typeof StalePackageSchema>;\n\nexport const StaleChainSchema = z.object({\n root: z.string(),\n affected: z.array(z.string()),\n depth: z.number(),\n});\n\nexport type StaleChain = z.infer<typeof StaleChainSchema>;\n\nexport const StaleResponseSchema = z.object({\n stalePackages: z.array(StalePackageSchema),\n totalStale: z.number(),\n totalAffected: z.number(),\n criticalChains: z.array(StaleChainSchema).optional(),\n});\n\nexport type StaleResponse = z.infer<typeof StaleResponseSchema>;\n\n// ============================================================================\n// Health (multidimensional) API\n// ============================================================================\n\nexport const DimensionScoreSchema = z.object({\n score: z.number(),\n grade: z.enum(['A', 'B', 'C', 'D', 'F']),\n details: z.array(z.string()),\n});\n\nexport const DimensionScoresSchema = z.object({\n architecture: DimensionScoreSchema,\n typescript: DimensionScoreSchema,\n deadCode: DimensionScoreSchema,\n depHygiene: DimensionScoreSchema,\n testCoverage: DimensionScoreSchema,\n});\n\nexport const HealthV2ResponseSchema = z.object({\n score: z.number(),\n grade: z.enum(['A', 'B', 'C', 'D', 'F']),\n dimensions: DimensionScoresSchema,\n});\n\nexport type HealthV2Response = z.infer<typeof HealthV2ResponseSchema>;\n\n// ============================================================================\n// Layering API\n// ============================================================================\n\nexport const LayeringViolationSchema = z.object({\n file: z.string(),\n fromPackage: z.string(),\n fromLayer: z.number(),\n toPackage: z.string(),\n toLayer: z.number(),\n importSpecifier: z.string(),\n});\n\nexport const LayeringResponseSchema = z.object({\n violations: z.array(LayeringViolationSchema),\n totalViolations: z.number(),\n affectedPackages: z.array(z.string()),\n layerMap: z.record(z.number()),\n});\n\nexport type LayeringResponse = z.infer<typeof LayeringResponseSchema>;\n\n// ============================================================================\n// Coupling API\n// ============================================================================\n\nexport const PackageCouplingSchema = z.object({\n name: z.string(),\n afferent: z.number(),\n efferent: z.number(),\n instability: z.number(),\n});\n\nexport const CouplingResponseSchema = z.object({\n packages: z.array(PackageCouplingSchema),\n avgInstability: z.number(),\n mostUnstable: z.array(PackageCouplingSchema),\n mostCoupled: z.array(PackageCouplingSchema),\n});\n\nexport type CouplingResponse = z.infer<typeof CouplingResponseSchema>;\n\n// ============================================================================\n// Dead code (Knip) API\n// ============================================================================\n\nexport const KnipUnusedExportSchema = z.object({\n file: z.string(),\n symbol: z.string(),\n});\n\nexport const KnipUnusedDependencySchema = z.object({\n package: z.string(),\n workspace: z.string(),\n});\n\nexport const DeadCodeResponseSchema = z.object({\n unusedFiles: z.array(z.string()),\n unusedExports: z.array(KnipUnusedExportSchema),\n unusedDependencies: z.array(KnipUnusedDependencySchema),\n unlistedDependencies: z.array(KnipUnusedDependencySchema),\n totalIssues: z.number(),\n});\n\nexport type DeadCodeResponse = z.infer<typeof DeadCodeResponseSchema>;\n\n// ============================================================================\n// Snapshot / History API\n// ============================================================================\n\nexport const QualitySnapshotSchema = z.object({\n id: z.string(),\n timestamp: z.string(),\n git: z.object({\n commit: z.string(),\n branch: z.string(),\n message: z.string(),\n }),\n score: z.number(),\n grade: z.enum(['A', 'B', 'C', 'D', 'F']),\n dimensions: DimensionScoresSchema,\n counters: z.object({\n layeringViolations: z.number(),\n avgInstability: z.number(),\n anyCount: z.number(),\n tsIgnoreCount: z.number(),\n unusedFiles: z.number(),\n unusedDeps: z.number(),\n }),\n});\n\nexport const SnapshotDeltaSchema = z.object({\n score: z.number(),\n layeringViolations: z.number(),\n anyCount: z.number(),\n tsIgnoreCount: z.number(),\n unusedFiles: z.number(),\n unusedDeps: z.number(),\n avgInstability: z.number(),\n});\n\nexport const HistoryResponseSchema = z.object({\n snapshots: z.array(QualitySnapshotSchema),\n delta: SnapshotDeltaSchema.nullable(),\n latest: QualitySnapshotSchema.nullable(),\n});\n\nexport type HistoryResponse = z.infer<typeof HistoryResponseSchema>;\n"]}
|
|
1
|
+
{"version":3,"sources":["../../home/runner/work/kb-labs/kb-labs/plugins/quality/contracts/src/types/config.ts","../../home/runner/work/kb-labs/kb-labs/plugins/quality/contracts/src/constants.ts","../../home/runner/work/kb-labs/kb-labs/plugins/quality/contracts/src/routes.ts","../../home/runner/work/kb-labs/kb-labs/plugins/quality/contracts/src/types/rest-api.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Quality plugin configuration — stored in kb.config.json under \"quality\" section\n */\n\nexport interface QualityLayerMap {\n [pathPrefix: string]: number;\n}\n\nexport interface QualityThresholds {\n /** Minimum health score before exit 1. Default: 70 */\n health: number;\n /** Instability threshold for warning. Default: 0.85 */\n instability: number;\n}\n\nexport interface QualityKnipConfig {\n /** Whether to run knip for dead code / dep analysis. Default: true */\n enabled: boolean;\n}\n\nexport interface QualityPluginConfig {\n /** Max snapshots to retain in history. Default: 30 */\n maxSnapshots: number;\n knip: QualityKnipConfig;\n /**\n * Layer map: path prefix → layer index.\n * Defaults to KB Labs standard layers from CLAUDE.md.\n */\n layers: QualityLayerMap;\n thresholds: QualityThresholds;\n}\n\nexport const defaultQualityConfig: QualityPluginConfig = {\n maxSnapshots: 30,\n knip: {\n enabled: true,\n },\n layers: {\n 'core/': 0,\n 'sdk/': 1,\n 'shared/': 1,\n 'cli/': 2,\n 'adapters/': 2,\n 'plugins/': 3,\n 'studio/': 4,\n },\n thresholds: {\n health: 70,\n instability: 0.85,\n },\n};\n","/**\n * Constants for Quality Plugin\n */\n\nexport const QUALITY_ENV_VARS = [\n 'KB_QUALITY_CACHE_TTL',\n 'KB_QUALITY_MAX_PACKAGES',\n] as const;\n\nexport const QUALITY_CACHE_PREFIX = 'quality:';\n\nexport const CACHE_KEYS = {\n STATS: 'quality:stats',\n HEALTH: 'quality:health',\n IMPORTS: 'quality:imports',\n EXPORTS: 'quality:exports',\n TYPES: 'quality:types',\n DUPLICATES: 'quality:duplicates',\n BUILDS: 'quality:builds',\n TYPE_ANALYSIS: 'quality:type-analysis',\n TESTS: 'quality:tests',\n DEAD_CODE: 'quality:dead-code',\n KNIP: 'quality:knip',\n LAYERS: 'quality:layers',\n COUPLING: 'quality:coupling',\n} as const;\n\n/** Cache TTLs in milliseconds */\nexport const CACHE_TTLS = {\n FAST: 5 * 60 * 1000, // 5 min — stats, health, coupling, layers\n SLOW: 10 * 60 * 1000, // 10 min — knip, builds, tests\n} as const;\n\nexport const DEFAULT_TIMEOUTS = {\n STATS: 60_000,\n HEALTH: 120_000,\n LAYERS: 60_000,\n COUPLING: 30_000,\n KNIP: 180_000,\n CHECK_TYPES: 90_000,\n FIX_DEPS: 300_000,\n CI: 600_000,\n} as const;\n\nexport const HEALTH_GRADES = {\n A: { min: 90, max: 100, label: 'Excellent' },\n B: { min: 80, max: 89, label: 'Good' },\n C: { min: 70, max: 79, label: 'Fair' },\n D: { min: 60, max: 69, label: 'Poor' },\n F: { min: 0, max: 59, label: 'Failing' },\n} as const;\n\n/** Dimension weights for composite health score */\nexport const DIMENSION_WEIGHTS = {\n architecture: 0.30,\n typescript: 0.25,\n deadCode: 0.20,\n depHygiene: 0.15,\n testCoverage: 0.10,\n} as const;\n\nexport const SNAPSHOT_DIR = '.kb/quality/snapshots';\nexport const SNAPSHOT_FILE = 'quality.json';\nexport const MAX_SNAPSHOTS_DEFAULT = 30;\n","/**\n * @module @kb-labs/quality-contracts/routes\n * REST API route constants for quality plugin\n */\n\nexport const QUALITY_BASE_PATH = '/v1/plugins/quality' as const;\n\nexport const QUALITY_ROUTES = {\n /** GET /stats */\n STATS: '/stats',\n /** GET /health */\n HEALTH: '/health',\n /** GET /dependencies */\n DEPENDENCIES: '/dependencies',\n /** GET /build-order */\n BUILD_ORDER: '/build-order',\n /** GET /cycles */\n CYCLES: '/cycles',\n /** GET /graph */\n GRAPH: '/graph',\n /** GET /stale */\n STALE: '/stale',\n /** GET /layers — layering violation report */\n LAYERS: '/layers',\n /** GET /coupling — coupling metrics */\n COUPLING: '/coupling',\n /** GET /dead-code — knip report */\n DEAD_CODE: '/dead-code',\n /** GET /history — snapshot history */\n HISTORY: '/history',\n /** POST /snapshot — save snapshot */\n SNAPSHOT: '/snapshot',\n} as const;\n\nexport const QUALITY_FULL_ROUTES = Object.fromEntries(\n Object.entries(QUALITY_ROUTES).map(([k, v]) => [k, `${QUALITY_BASE_PATH}${v}`])\n) as { [K in keyof typeof QUALITY_ROUTES]: string };\n\nexport type QualityRoute = (typeof QUALITY_ROUTES)[keyof typeof QUALITY_ROUTES];\n","/**\n * REST API Request/Response Types and Zod Schemas for Quality Plugin\n */\n\nimport { z } from 'zod';\n\n// ============================================================================\n// Stats API\n// ============================================================================\n\nexport const StatsRequestSchema = z.object({\n includeHealth: z.boolean().optional(),\n});\n\nexport type StatsRequest = z.infer<typeof StatsRequestSchema>;\n\nexport const StatsResponseSchema = z.object({\n packages: z.number(),\n loc: z.number(),\n size: z.string(),\n health: z.number().optional(),\n grade: z.string().optional(),\n});\n\nexport type StatsResponse = z.infer<typeof StatsResponseSchema>;\n\n// ============================================================================\n// Health API\n// ============================================================================\n\nexport const HealthRequestSchema = z.object({\n detailed: z.boolean().optional(),\n});\n\nexport type HealthRequest = z.infer<typeof HealthRequestSchema>;\n\nexport const HealthIssueSchema = z.object({\n type: z.string(),\n severity: z.number(),\n description: z.string(),\n packages: z.array(z.string()).optional(),\n count: z.number().optional(),\n});\n\nexport type HealthIssue = z.infer<typeof HealthIssueSchema>;\n\nexport const HealthResponseSchema = z.object({\n score: z.number(),\n grade: z.string(),\n issues: z.array(HealthIssueSchema).optional(),\n});\n\nexport type HealthResponse = z.infer<typeof HealthResponseSchema>;\n\n// ============================================================================\n// Dependencies API\n// ============================================================================\n\nexport const DependenciesRequestSchema = z.object({});\n\nexport type DependenciesRequest = z.infer<typeof DependenciesRequestSchema>;\n\nexport const VersionInfoSchema = z.object({\n version: z.string(),\n packages: z.array(z.string()),\n count: z.number(),\n});\n\nexport type VersionInfo = z.infer<typeof VersionInfoSchema>;\n\nexport const DuplicateDependencySchema = z.object({\n name: z.string(),\n versions: z.array(VersionInfoSchema),\n totalPackages: z.number(),\n});\n\nexport type DuplicateDependency = z.infer<typeof DuplicateDependencySchema>;\n\nexport const UnusedDependencySchema = z.object({\n name: z.string(),\n packages: z.array(z.string()),\n});\n\nexport type UnusedDependency = z.infer<typeof UnusedDependencySchema>;\n\nexport const MissingDependencySchema = z.object({\n name: z.string(),\n packages: z.array(z.string()),\n importedIn: z.array(z.string()),\n});\n\nexport type MissingDependency = z.infer<typeof MissingDependencySchema>;\n\nexport const DependenciesResponseSchema = z.object({\n duplicates: z.array(DuplicateDependencySchema),\n unused: z.array(UnusedDependencySchema),\n missing: z.array(MissingDependencySchema),\n totalIssues: z.number(),\n});\n\nexport type DependenciesResponse = z.infer<typeof DependenciesResponseSchema>;\n\n// ============================================================================\n// Build Order API\n// ============================================================================\n\nexport const BuildOrderRequestSchema = z.object({\n packageName: z.string().optional(),\n});\n\nexport type BuildOrderRequest = z.infer<typeof BuildOrderRequestSchema>;\n\nexport const BuildOrderResponseSchema = z.object({\n layers: z.array(z.array(z.string())),\n sorted: z.array(z.string()),\n circular: z.array(z.array(z.string())),\n packageCount: z.number(),\n layerCount: z.number(),\n hasCircular: z.boolean(),\n});\n\nexport type BuildOrderResponse = z.infer<typeof BuildOrderResponseSchema>;\n\n// ============================================================================\n// Cycles API\n// ============================================================================\n\nexport const CyclesRequestSchema = z.object({});\n\nexport type CyclesRequest = z.infer<typeof CyclesRequestSchema>;\n\nexport const CyclesResponseSchema = z.object({\n cycles: z.array(z.array(z.string())),\n count: z.number(),\n hasCircular: z.boolean(),\n affected: z.array(z.string()),\n});\n\nexport type CyclesResponse = z.infer<typeof CyclesResponseSchema>;\n\n// ============================================================================\n// Graph API\n// ============================================================================\n\nexport const GraphModeSchema = z.enum(['tree', 'reverse', 'impact', 'stats']);\n\nexport type GraphMode = z.infer<typeof GraphModeSchema>;\n\nexport const GraphRequestSchema = z.object({\n packageName: z.string().optional(),\n mode: GraphModeSchema,\n});\n\nexport type GraphRequest = z.infer<typeof GraphRequestSchema>;\n\nexport const GraphNodeSchema: z.ZodType<GraphNode> = z.lazy(() =>\n z.object({\n name: z.string(),\n children: z.array(GraphNodeSchema).optional(),\n })\n);\n\nexport type GraphNode = {\n name: string;\n children?: GraphNode[];\n};\n\nexport const GraphStatsSchema = z.object({\n totalPackages: z.number(),\n maxDepth: z.number(),\n avgDependencies: z.number(),\n mostDepended: z.array(\n z.object({\n name: z.string(),\n count: z.number(),\n })\n ),\n});\n\nexport type GraphStats = z.infer<typeof GraphStatsSchema>;\n\nexport const GraphResponseSchema = z.object({\n mode: GraphModeSchema,\n packageName: z.string().optional(),\n tree: GraphNodeSchema.optional(),\n packages: z.array(z.string()).optional(),\n stats: GraphStatsSchema.optional(),\n});\n\nexport type GraphResponse = z.infer<typeof GraphResponseSchema>;\n\n// ============================================================================\n// Stale API\n// ============================================================================\n\nexport const StaleRequestSchema = z.object({\n detailed: z.boolean().optional(),\n});\n\nexport type StaleRequest = z.infer<typeof StaleRequestSchema>;\n\nexport const StalePackageSchema = z.object({\n name: z.string(),\n path: z.string(),\n reason: z.enum(['source-newer', 'dependency-rebuilt', 'missing-dist']),\n sourceModified: z.string().optional(),\n distModified: z.string().optional(),\n affectedPackages: z.array(z.string()),\n affectedCount: z.number(),\n severity: z.enum(['critical', 'high', 'medium', 'low']),\n});\n\nexport type StalePackage = z.infer<typeof StalePackageSchema>;\n\nexport const StaleChainSchema = z.object({\n root: z.string(),\n affected: z.array(z.string()),\n depth: z.number(),\n});\n\nexport type StaleChain = z.infer<typeof StaleChainSchema>;\n\nexport const StaleResponseSchema = z.object({\n stalePackages: z.array(StalePackageSchema),\n totalStale: z.number(),\n totalAffected: z.number(),\n criticalChains: z.array(StaleChainSchema).optional(),\n});\n\nexport type StaleResponse = z.infer<typeof StaleResponseSchema>;\n\n// ============================================================================\n// Health (multidimensional) API\n// ============================================================================\n\nexport const DimensionScoreSchema = z.object({\n score: z.number(),\n grade: z.enum(['A', 'B', 'C', 'D', 'F']),\n details: z.array(z.string()),\n});\n\nexport const DimensionScoresSchema = z.object({\n architecture: DimensionScoreSchema,\n typescript: DimensionScoreSchema,\n deadCode: DimensionScoreSchema,\n depHygiene: DimensionScoreSchema,\n testCoverage: DimensionScoreSchema,\n});\n\nexport const HealthV2ResponseSchema = z.object({\n score: z.number(),\n grade: z.enum(['A', 'B', 'C', 'D', 'F']),\n dimensions: DimensionScoresSchema,\n});\n\nexport type HealthV2Response = z.infer<typeof HealthV2ResponseSchema>;\n\n// ============================================================================\n// Layering API\n// ============================================================================\n\nexport const LayeringViolationSchema = z.object({\n file: z.string(),\n fromPackage: z.string(),\n fromLayer: z.number(),\n toPackage: z.string(),\n toLayer: z.number(),\n importSpecifier: z.string(),\n});\n\nexport const LayeringResponseSchema = z.object({\n violations: z.array(LayeringViolationSchema),\n totalViolations: z.number(),\n affectedPackages: z.array(z.string()),\n layerMap: z.record(z.number()),\n});\n\nexport type LayeringResponse = z.infer<typeof LayeringResponseSchema>;\n\n// ============================================================================\n// Coupling API\n// ============================================================================\n\nexport const PackageCouplingSchema = z.object({\n name: z.string(),\n afferent: z.number(),\n efferent: z.number(),\n instability: z.number(),\n});\n\nexport const CouplingResponseSchema = z.object({\n packages: z.array(PackageCouplingSchema),\n avgInstability: z.number(),\n mostUnstable: z.array(PackageCouplingSchema),\n mostCoupled: z.array(PackageCouplingSchema),\n});\n\nexport type CouplingResponse = z.infer<typeof CouplingResponseSchema>;\n\n// ============================================================================\n// Dead code (Knip) API\n// ============================================================================\n\nexport const KnipUnusedExportSchema = z.object({\n file: z.string(),\n symbol: z.string(),\n});\n\nexport const KnipUnusedDependencySchema = z.object({\n package: z.string(),\n workspace: z.string(),\n});\n\nexport const DeadCodeResponseSchema = z.object({\n unusedFiles: z.array(z.string()),\n unusedExports: z.array(KnipUnusedExportSchema),\n unusedDependencies: z.array(KnipUnusedDependencySchema),\n unlistedDependencies: z.array(KnipUnusedDependencySchema),\n totalIssues: z.number(),\n});\n\nexport type DeadCodeResponse = z.infer<typeof DeadCodeResponseSchema>;\n\n// ============================================================================\n// Snapshot / History API\n// ============================================================================\n\nexport const QualitySnapshotSchema = z.object({\n id: z.string(),\n timestamp: z.string(),\n git: z.object({\n commit: z.string(),\n branch: z.string(),\n message: z.string(),\n }),\n score: z.number(),\n grade: z.enum(['A', 'B', 'C', 'D', 'F']),\n dimensions: DimensionScoresSchema,\n counters: z.object({\n layeringViolations: z.number(),\n avgInstability: z.number(),\n anyCount: z.number(),\n tsIgnoreCount: z.number(),\n unusedFiles: z.number(),\n unusedDeps: z.number(),\n }),\n});\n\nexport const SnapshotDeltaSchema = z.object({\n score: z.number(),\n layeringViolations: z.number(),\n anyCount: z.number(),\n tsIgnoreCount: z.number(),\n unusedFiles: z.number(),\n unusedDeps: z.number(),\n avgInstability: z.number(),\n});\n\nexport const HistoryResponseSchema = z.object({\n snapshots: z.array(QualitySnapshotSchema),\n delta: SnapshotDeltaSchema.nullable(),\n latest: QualitySnapshotSchema.nullable(),\n});\n\nexport type HistoryResponse = z.infer<typeof HistoryResponseSchema>;\n"]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kb-labs/quality-contracts",
|
|
3
3
|
"description": "Type-safe contracts for Quality Plugin. Types, schemas, and constants for monorepo analysis and quality checks.",
|
|
4
|
-
"version": "2.119.0
|
|
4
|
+
"version": "2.119.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
7
7
|
"types": "./dist/index.d.ts",
|
|
@@ -31,10 +31,10 @@
|
|
|
31
31
|
"tsup": "^8.5.0",
|
|
32
32
|
"typescript": "^5.6.3",
|
|
33
33
|
"vitest": "^3.2.6",
|
|
34
|
-
"@kb-labs/devkit": "2.119.0
|
|
34
|
+
"@kb-labs/devkit": "2.119.0"
|
|
35
35
|
},
|
|
36
36
|
"engines": {
|
|
37
|
-
"node": ">=
|
|
37
|
+
"node": ">=24.0.0",
|
|
38
38
|
"pnpm": ">=9.0.0"
|
|
39
39
|
},
|
|
40
40
|
"sideEffects": false,
|