@kb-labs/review-entry 2.15.0 → 2.18.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/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/manifest.js +1 -1
- package/dist/manifest.js.map +1 -1
- package/package.json +6 -6
package/dist/index.js
CHANGED
|
@@ -78,7 +78,7 @@ var manifest = {
|
|
|
78
78
|
cli: {
|
|
79
79
|
commands: [
|
|
80
80
|
{
|
|
81
|
-
id: "
|
|
81
|
+
id: "run",
|
|
82
82
|
group: "review",
|
|
83
83
|
describe: "Run code review analysis",
|
|
84
84
|
longDescription: "Analyzes code using heuristic engines (ESLint, Ruff, etc.) and optionally LLM analyzers. Supports three modes: heuristic (CI, fast), full (local, comprehensive), llm (deep analysis).",
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/commands/flags.ts","../src/manifest.ts","../src/formatters/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Command flags definitions for AI Review plugin\n */\n\nimport { defineFlags } from '@kb-labs/sdk';\n\n/**\n * Flags for review:run command\n */\nexport const runFlags = defineFlags({\n mode: {\n type: 'string',\n description: 'Review mode: heuristic (CI), full (local), llm (deep)',\n choices: ['heuristic', 'full', 'llm'],\n default: 'heuristic',\n },\n scope: {\n type: 'string',\n description: 'File scope: all, changed (vs main), staged',\n choices: ['all', 'changed', 'staged'],\n default: 'changed',\n },\n repos: {\n type: 'array',\n description: 'Repository scope (submodule names to include, e.g., --repos kb-labs-core kb-labs-cli)',\n },\n task: {\n type: 'string',\n description: 'Task context - describe what the changes are trying to achieve',\n },\n preset: {\n type: 'string',\n description: 'Preset ID (e.g., typescript-strict)',\n },\n files: {\n type: 'array',\n description: 'File patterns to analyze',\n },\n eslintConfig: {\n type: 'string',\n description: 'ESLint config file path',\n },\n json: {\n type: 'boolean',\n description: 'Output JSON',\n default: false,\n },\n});\n","/**\n * KB Labs AI Review Plugin - Manifest V3\n */\n\nimport {\n defineCommandFlags,\n combinePermissions,\n gitWorkflowPreset,\n kbPlatformPreset,\n} from '@kb-labs/sdk';\nimport { runFlags } from './commands/flags.js';\n\n/**\n * Build permissions:\n * - gitWorkflow: HOME, USER, GIT_* for git operations\n * - kbPlatform: KB_* env vars and .kb/ directory\n * - Custom: file read access, LLM, cache, analytics\n */\nconst pluginPermissions = combinePermissions()\n .with(gitWorkflowPreset)\n .with(kbPlatformPreset)\n .withFs({\n mode: 'read',\n allow: ['**/*'],\n })\n .withPlatform({\n llm: true, // LLM for full/llm modes\n cache: ['review:'], // Cache namespace prefix\n analytics: true, // Track review events\n })\n .withQuotas({\n timeoutMs: 600000, // 10 min for deep analysis\n memoryMb: 512,\n })\n .build();\n\nexport const manifest = {\n schema: 'kb.plugin/3',\n id: '@kb-labs/review',\n version: '0.1.0',\n\n display: {\n name: 'AI Review',\n description: 'AI-powered code review with heuristic engines (ESLint, Ruff, etc.) and LLM analyzers.',\n tags: ['code-review', 'linting', 'ai', 'quality'],\n },\n\n // Configuration section in kb.config.json\n configSection: 'review',\n\n // Platform requirements\n platform: {\n requires: ['storage', 'cache'],\n optional: ['llm', 'analytics', 'logger'],\n },\n\n // CLI commands\n cli: {\n commands: [\n {\n id: 'review:run',\n group: 'review',\n describe: 'Run code review analysis',\n longDescription:\n 'Analyzes code using heuristic engines (ESLint, Ruff, etc.) and optionally LLM analyzers. ' +\n 'Supports three modes: heuristic (CI, fast), full (local, comprehensive), llm (deep analysis).',\n\n handler: './commands/run.js#default',\n handlerPath: './commands/run.js',\n\n flags: defineCommandFlags(runFlags.schema),\n\n examples: [\n 'kb review run',\n 'kb review run --mode=full',\n 'kb review run --scope=staged',\n 'kb review run --preset=typescript-strict',\n 'kb review run --files=\"src/**/*.ts\"',\n 'kb review run --json',\n ],\n },\n ],\n },\n\n // Permissions\n permissions: pluginPermissions,\n};\n\nexport default manifest;\n","/**\n * @module @kb-labs/review-cli/formatters\n * Output formatters for code review results.\n */\n\nimport type { ReviewFinding, ReviewResult } from '@kb-labs/review-contracts';\nimport chalk from 'chalk';\n\n/**\n * Format findings as text.\n */\nexport function formatFindings(findings: ReviewFinding[]): string {\n if (findings.length === 0) {\n return chalk.green('✓ No issues found!');\n }\n\n const lines: string[] = [];\n\n // Group by severity\n const byFile = new Map<string, ReviewFinding[]>();\n\n for (const finding of findings) {\n if (!byFile.has(finding.file)) {\n byFile.set(finding.file, []);\n }\n byFile.get(finding.file)!.push(finding);\n }\n\n // Format by file\n for (const [file, fileFindings] of byFile) {\n lines.push('');\n lines.push(chalk.bold.white(file));\n\n for (const finding of fileFindings) {\n const severity = formatSeverity(finding.severity);\n const location = chalk.dim(`${finding.line}:${finding.column ?? 0}`);\n const message = finding.message;\n const sourceTag = formatSource(finding.source, finding.ruleId);\n\n lines.push(` ${location} ${severity} ${message} ${sourceTag}`);\n\n // Show fix hint if available\n if (finding.fix && finding.automated) {\n lines.push(chalk.dim(' ⚡ Auto-fixable'));\n }\n }\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Format source tag (rule vs llm).\n * Shows whether finding came from a project rule or LLM ad-hoc analysis.\n */\nfunction formatSource(source: string, ruleId: string): string {\n // Parse ruleId format: \"rule:category/name\" or \"llm-lite:category\"\n if (ruleId.startsWith('rule:')) {\n // Project rule - show rule ID with green highlight\n const projectRuleId = ruleId.slice(5); // Remove \"rule:\" prefix\n return chalk.green(`[rule:${projectRuleId}]`);\n } else if (ruleId.startsWith('llm-lite:')) {\n // LLM ad-hoc finding - show category with dim styling\n const category = ruleId.slice(9); // Remove \"llm-lite:\" prefix\n return chalk.dim(`[llm:${category}]`);\n } else {\n // Legacy format - just show the ruleId\n return chalk.dim(`[${ruleId}]`);\n }\n}\n\n/**\n * Format severity with color.\n */\nfunction formatSeverity(severity: string): string {\n switch (severity) {\n case 'blocker':\n return chalk.bgRed.white(' BLOCKER ');\n case 'high':\n return chalk.red('error');\n case 'medium':\n return chalk.yellow('warning');\n case 'low':\n return chalk.blue('info');\n case 'info':\n return chalk.gray('hint');\n default:\n return severity;\n }\n}\n\n/**\n * Format summary statistics.\n */\nexport function formatSummary(result: ReviewResult): string {\n const lines: string[] = [];\n\n lines.push('');\n lines.push(chalk.bold('Summary'));\n lines.push('─'.repeat(50));\n\n // Count by severity\n const counts = {\n blocker: 0,\n high: 0,\n medium: 0,\n low: 0,\n info: 0,\n };\n\n // Count by source (rule vs llm)\n const sourceCounts = {\n rule: 0,\n llm: 0,\n };\n\n for (const finding of result.findings) {\n counts[finding.severity]++;\n\n // Count by source based on ruleId format\n if (finding.ruleId.startsWith('rule:')) {\n sourceCounts.rule++;\n } else {\n sourceCounts.llm++;\n }\n }\n\n // Format counts\n if (counts.blocker > 0) {\n lines.push(chalk.red(` Blocker: ${counts.blocker}`));\n }\n if (counts.high > 0) {\n lines.push(chalk.red(` High: ${counts.high}`));\n }\n if (counts.medium > 0) {\n lines.push(chalk.yellow(` Medium: ${counts.medium}`));\n }\n if (counts.low > 0) {\n lines.push(chalk.blue(` Low: ${counts.low}`));\n }\n if (counts.info > 0) {\n lines.push(chalk.gray(` Info: ${counts.info}`));\n }\n\n lines.push('');\n lines.push(` Total: ${result.findings.length}`);\n lines.push(` Files: ${result.metadata.analyzedFiles}`);\n lines.push(` Time: ${result.metadata.durationMs}ms`);\n lines.push(` Engines: ${result.metadata.engines.join(', ')}`);\n\n // Show source breakdown if there are findings\n if (result.findings.length > 0) {\n lines.push('');\n lines.push(chalk.bold(' Finding Sources:'));\n if (sourceCounts.rule > 0) {\n lines.push(chalk.green(` From rules: ${sourceCounts.rule}`));\n }\n if (sourceCounts.llm > 0) {\n lines.push(chalk.dim(` LLM ad-hoc: ${sourceCounts.llm}`));\n }\n }\n\n return lines.join('\\n');\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/commands/flags.ts","../src/manifest.ts","../src/formatters/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Command flags definitions for AI Review plugin\n */\n\nimport { defineFlags } from '@kb-labs/sdk';\n\n/**\n * Flags for review:run command\n */\nexport const runFlags = defineFlags({\n mode: {\n type: 'string',\n description: 'Review mode: heuristic (CI), full (local), llm (deep)',\n choices: ['heuristic', 'full', 'llm'],\n default: 'heuristic',\n },\n scope: {\n type: 'string',\n description: 'File scope: all, changed (vs main), staged',\n choices: ['all', 'changed', 'staged'],\n default: 'changed',\n },\n repos: {\n type: 'array',\n description: 'Repository scope (submodule names to include, e.g., --repos kb-labs-core kb-labs-cli)',\n },\n task: {\n type: 'string',\n description: 'Task context - describe what the changes are trying to achieve',\n },\n preset: {\n type: 'string',\n description: 'Preset ID (e.g., typescript-strict)',\n },\n files: {\n type: 'array',\n description: 'File patterns to analyze',\n },\n eslintConfig: {\n type: 'string',\n description: 'ESLint config file path',\n },\n json: {\n type: 'boolean',\n description: 'Output JSON',\n default: false,\n },\n});\n","/**\n * KB Labs AI Review Plugin - Manifest V3\n */\n\nimport {\n defineCommandFlags,\n combinePermissions,\n gitWorkflowPreset,\n kbPlatformPreset,\n} from '@kb-labs/sdk';\nimport { runFlags } from './commands/flags.js';\n\n/**\n * Build permissions:\n * - gitWorkflow: HOME, USER, GIT_* for git operations\n * - kbPlatform: KB_* env vars and .kb/ directory\n * - Custom: file read access, LLM, cache, analytics\n */\nconst pluginPermissions = combinePermissions()\n .with(gitWorkflowPreset)\n .with(kbPlatformPreset)\n .withFs({\n mode: 'read',\n allow: ['**/*'],\n })\n .withPlatform({\n llm: true, // LLM for full/llm modes\n cache: ['review:'], // Cache namespace prefix\n analytics: true, // Track review events\n })\n .withQuotas({\n timeoutMs: 600000, // 10 min for deep analysis\n memoryMb: 512,\n })\n .build();\n\nexport const manifest = {\n schema: 'kb.plugin/3',\n id: '@kb-labs/review',\n version: '0.1.0',\n\n display: {\n name: 'AI Review',\n description: 'AI-powered code review with heuristic engines (ESLint, Ruff, etc.) and LLM analyzers.',\n tags: ['code-review', 'linting', 'ai', 'quality'],\n },\n\n // Configuration section in kb.config.json\n configSection: 'review',\n\n // Platform requirements\n platform: {\n requires: ['storage', 'cache'],\n optional: ['llm', 'analytics', 'logger'],\n },\n\n // CLI commands\n cli: {\n commands: [\n {\n id: 'run',\n group: 'review',\n describe: 'Run code review analysis',\n longDescription:\n 'Analyzes code using heuristic engines (ESLint, Ruff, etc.) and optionally LLM analyzers. ' +\n 'Supports three modes: heuristic (CI, fast), full (local, comprehensive), llm (deep analysis).',\n\n handler: './commands/run.js#default',\n handlerPath: './commands/run.js',\n\n flags: defineCommandFlags(runFlags.schema),\n\n examples: [\n 'kb review run',\n 'kb review run --mode=full',\n 'kb review run --scope=staged',\n 'kb review run --preset=typescript-strict',\n 'kb review run --files=\"src/**/*.ts\"',\n 'kb review run --json',\n ],\n },\n ],\n },\n\n // Permissions\n permissions: pluginPermissions,\n};\n\nexport default manifest;\n","/**\n * @module @kb-labs/review-cli/formatters\n * Output formatters for code review results.\n */\n\nimport type { ReviewFinding, ReviewResult } from '@kb-labs/review-contracts';\nimport chalk from 'chalk';\n\n/**\n * Format findings as text.\n */\nexport function formatFindings(findings: ReviewFinding[]): string {\n if (findings.length === 0) {\n return chalk.green('✓ No issues found!');\n }\n\n const lines: string[] = [];\n\n // Group by severity\n const byFile = new Map<string, ReviewFinding[]>();\n\n for (const finding of findings) {\n if (!byFile.has(finding.file)) {\n byFile.set(finding.file, []);\n }\n byFile.get(finding.file)!.push(finding);\n }\n\n // Format by file\n for (const [file, fileFindings] of byFile) {\n lines.push('');\n lines.push(chalk.bold.white(file));\n\n for (const finding of fileFindings) {\n const severity = formatSeverity(finding.severity);\n const location = chalk.dim(`${finding.line}:${finding.column ?? 0}`);\n const message = finding.message;\n const sourceTag = formatSource(finding.source, finding.ruleId);\n\n lines.push(` ${location} ${severity} ${message} ${sourceTag}`);\n\n // Show fix hint if available\n if (finding.fix && finding.automated) {\n lines.push(chalk.dim(' ⚡ Auto-fixable'));\n }\n }\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Format source tag (rule vs llm).\n * Shows whether finding came from a project rule or LLM ad-hoc analysis.\n */\nfunction formatSource(source: string, ruleId: string): string {\n // Parse ruleId format: \"rule:category/name\" or \"llm-lite:category\"\n if (ruleId.startsWith('rule:')) {\n // Project rule - show rule ID with green highlight\n const projectRuleId = ruleId.slice(5); // Remove \"rule:\" prefix\n return chalk.green(`[rule:${projectRuleId}]`);\n } else if (ruleId.startsWith('llm-lite:')) {\n // LLM ad-hoc finding - show category with dim styling\n const category = ruleId.slice(9); // Remove \"llm-lite:\" prefix\n return chalk.dim(`[llm:${category}]`);\n } else {\n // Legacy format - just show the ruleId\n return chalk.dim(`[${ruleId}]`);\n }\n}\n\n/**\n * Format severity with color.\n */\nfunction formatSeverity(severity: string): string {\n switch (severity) {\n case 'blocker':\n return chalk.bgRed.white(' BLOCKER ');\n case 'high':\n return chalk.red('error');\n case 'medium':\n return chalk.yellow('warning');\n case 'low':\n return chalk.blue('info');\n case 'info':\n return chalk.gray('hint');\n default:\n return severity;\n }\n}\n\n/**\n * Format summary statistics.\n */\nexport function formatSummary(result: ReviewResult): string {\n const lines: string[] = [];\n\n lines.push('');\n lines.push(chalk.bold('Summary'));\n lines.push('─'.repeat(50));\n\n // Count by severity\n const counts = {\n blocker: 0,\n high: 0,\n medium: 0,\n low: 0,\n info: 0,\n };\n\n // Count by source (rule vs llm)\n const sourceCounts = {\n rule: 0,\n llm: 0,\n };\n\n for (const finding of result.findings) {\n counts[finding.severity]++;\n\n // Count by source based on ruleId format\n if (finding.ruleId.startsWith('rule:')) {\n sourceCounts.rule++;\n } else {\n sourceCounts.llm++;\n }\n }\n\n // Format counts\n if (counts.blocker > 0) {\n lines.push(chalk.red(` Blocker: ${counts.blocker}`));\n }\n if (counts.high > 0) {\n lines.push(chalk.red(` High: ${counts.high}`));\n }\n if (counts.medium > 0) {\n lines.push(chalk.yellow(` Medium: ${counts.medium}`));\n }\n if (counts.low > 0) {\n lines.push(chalk.blue(` Low: ${counts.low}`));\n }\n if (counts.info > 0) {\n lines.push(chalk.gray(` Info: ${counts.info}`));\n }\n\n lines.push('');\n lines.push(` Total: ${result.findings.length}`);\n lines.push(` Files: ${result.metadata.analyzedFiles}`);\n lines.push(` Time: ${result.metadata.durationMs}ms`);\n lines.push(` Engines: ${result.metadata.engines.join(', ')}`);\n\n // Show source breakdown if there are findings\n if (result.findings.length > 0) {\n lines.push('');\n lines.push(chalk.bold(' Finding Sources:'));\n if (sourceCounts.rule > 0) {\n lines.push(chalk.green(` From rules: ${sourceCounts.rule}`));\n }\n if (sourceCounts.llm > 0) {\n lines.push(chalk.dim(` LLM ad-hoc: ${sourceCounts.llm}`));\n }\n }\n\n return lines.join('\\n');\n}\n"]}
|
package/dist/manifest.js
CHANGED
|
@@ -77,7 +77,7 @@ var manifest = {
|
|
|
77
77
|
cli: {
|
|
78
78
|
commands: [
|
|
79
79
|
{
|
|
80
|
-
id: "
|
|
80
|
+
id: "run",
|
|
81
81
|
group: "review",
|
|
82
82
|
describe: "Run code review analysis",
|
|
83
83
|
longDescription: "Analyzes code using heuristic engines (ESLint, Ruff, etc.) and optionally LLM analyzers. Supports three modes: heuristic (CI, fast), full (local, comprehensive), llm (deep analysis).",
|
package/dist/manifest.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/commands/flags.ts","../src/manifest.ts"],"names":[],"mappings":";;;AASO,IAAM,WAAW,WAAA,CAAY;AAAA,EAClC,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM,QAAA;AAAA,IACN,WAAA,EAAa,uDAAA;AAAA,IACb,OAAA,EAAS,CAAC,WAAA,EAAa,MAAA,EAAQ,KAAK,CAAA;AAAA,IACpC,OAAA,EAAS;AAAA,GACX;AAAA,EACA,KAAA,EAAO;AAAA,IACL,IAAA,EAAM,QAAA;AAAA,IACN,WAAA,EAAa,4CAAA;AAAA,IACb,OAAA,EAAS,CAAC,KAAA,EAAO,SAAA,EAAW,QAAQ,CAAA;AAAA,IACpC,OAAA,EAAS;AAAA,GACX;AAAA,EACA,KAAA,EAAO;AAAA,IACL,IAAA,EAAM,OAAA;AAAA,IACN,WAAA,EAAa;AAAA,GACf;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM,QAAA;AAAA,IACN,WAAA,EAAa;AAAA,GACf;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM,QAAA;AAAA,IACN,WAAA,EAAa;AAAA,GACf;AAAA,EACA,KAAA,EAAO;AAAA,IACL,IAAA,EAAM,OAAA;AAAA,IACN,WAAA,EAAa;AAAA,GACf;AAAA,EACA,YAAA,EAAc;AAAA,IACZ,IAAA,EAAM,QAAA;AAAA,IACN,WAAA,EAAa;AAAA,GACf;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,aAAA;AAAA,IACb,OAAA,EAAS;AAAA;AAEb,CAAC,CAAA;;;AC7BD,IAAM,iBAAA,GAAoB,oBAAmB,CAC1C,IAAA,CAAK,iBAAiB,CAAA,CACtB,IAAA,CAAK,gBAAgB,CAAA,CACrB,MAAA,CAAO;AAAA,EACN,IAAA,EAAM,MAAA;AAAA,EACN,KAAA,EAAO,CAAC,MAAM;AAChB,CAAC,EACA,YAAA,CAAa;AAAA,EACZ,GAAA,EAAK,IAAA;AAAA;AAAA,EACL,KAAA,EAAO,CAAC,SAAS,CAAA;AAAA;AAAA,EACjB,SAAA,EAAW;AAAA;AACb,CAAC,EACA,UAAA,CAAW;AAAA,EACV,SAAA,EAAW,GAAA;AAAA;AAAA,EACX,QAAA,EAAU;AACZ,CAAC,EACA,KAAA,EAAM;AAEF,IAAM,QAAA,GAAW;AAAA,EACtB,MAAA,EAAQ,aAAA;AAAA,EACR,EAAA,EAAI,iBAAA;AAAA,EACJ,OAAA,EAAS,OAAA;AAAA,EAET,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,WAAA;AAAA,IACN,WAAA,EAAa,uFAAA;AAAA,IACb,IAAA,EAAM,CAAC,aAAA,EAAe,SAAA,EAAW,MAAM,SAAS;AAAA,GAClD;AAAA;AAAA,EAGA,aAAA,EAAe,QAAA;AAAA;AAAA,EAGf,QAAA,EAAU;AAAA,IACR,QAAA,EAAU,CAAC,SAAA,EAAW,OAAO,CAAA;AAAA,IAC7B,QAAA,EAAU,CAAC,KAAA,EAAO,WAAA,EAAa,QAAQ;AAAA,GACzC;AAAA;AAAA,EAGA,GAAA,EAAK;AAAA,IACH,QAAA,EAAU;AAAA,MACR;AAAA,QACE,EAAA,EAAI,
|
|
1
|
+
{"version":3,"sources":["../src/commands/flags.ts","../src/manifest.ts"],"names":[],"mappings":"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","file":"manifest.js","sourcesContent":["/**\n * Command flags definitions for AI Review plugin\n */\n\nimport { defineFlags } from '@kb-labs/sdk';\n\n/**\n * Flags for review:run command\n */\nexport const runFlags = defineFlags({\n mode: {\n type: 'string',\n description: 'Review mode: heuristic (CI), full (local), llm (deep)',\n choices: ['heuristic', 'full', 'llm'],\n default: 'heuristic',\n },\n scope: {\n type: 'string',\n description: 'File scope: all, changed (vs main), staged',\n choices: ['all', 'changed', 'staged'],\n default: 'changed',\n },\n repos: {\n type: 'array',\n description: 'Repository scope (submodule names to include, e.g., --repos kb-labs-core kb-labs-cli)',\n },\n task: {\n type: 'string',\n description: 'Task context - describe what the changes are trying to achieve',\n },\n preset: {\n type: 'string',\n description: 'Preset ID (e.g., typescript-strict)',\n },\n files: {\n type: 'array',\n description: 'File patterns to analyze',\n },\n eslintConfig: {\n type: 'string',\n description: 'ESLint config file path',\n },\n json: {\n type: 'boolean',\n description: 'Output JSON',\n default: false,\n },\n});\n","/**\n * KB Labs AI Review Plugin - Manifest V3\n */\n\nimport {\n defineCommandFlags,\n combinePermissions,\n gitWorkflowPreset,\n kbPlatformPreset,\n} from '@kb-labs/sdk';\nimport { runFlags } from './commands/flags.js';\n\n/**\n * Build permissions:\n * - gitWorkflow: HOME, USER, GIT_* for git operations\n * - kbPlatform: KB_* env vars and .kb/ directory\n * - Custom: file read access, LLM, cache, analytics\n */\nconst pluginPermissions = combinePermissions()\n .with(gitWorkflowPreset)\n .with(kbPlatformPreset)\n .withFs({\n mode: 'read',\n allow: ['**/*'],\n })\n .withPlatform({\n llm: true, // LLM for full/llm modes\n cache: ['review:'], // Cache namespace prefix\n analytics: true, // Track review events\n })\n .withQuotas({\n timeoutMs: 600000, // 10 min for deep analysis\n memoryMb: 512,\n })\n .build();\n\nexport const manifest = {\n schema: 'kb.plugin/3',\n id: '@kb-labs/review',\n version: '0.1.0',\n\n display: {\n name: 'AI Review',\n description: 'AI-powered code review with heuristic engines (ESLint, Ruff, etc.) and LLM analyzers.',\n tags: ['code-review', 'linting', 'ai', 'quality'],\n },\n\n // Configuration section in kb.config.json\n configSection: 'review',\n\n // Platform requirements\n platform: {\n requires: ['storage', 'cache'],\n optional: ['llm', 'analytics', 'logger'],\n },\n\n // CLI commands\n cli: {\n commands: [\n {\n id: 'run',\n group: 'review',\n describe: 'Run code review analysis',\n longDescription:\n 'Analyzes code using heuristic engines (ESLint, Ruff, etc.) and optionally LLM analyzers. ' +\n 'Supports three modes: heuristic (CI, fast), full (local, comprehensive), llm (deep analysis).',\n\n handler: './commands/run.js#default',\n handlerPath: './commands/run.js',\n\n flags: defineCommandFlags(runFlags.schema),\n\n examples: [\n 'kb review run',\n 'kb review run --mode=full',\n 'kb review run --scope=staged',\n 'kb review run --preset=typescript-strict',\n 'kb review run --files=\"src/**/*.ts\"',\n 'kb review run --json',\n ],\n },\n ],\n },\n\n // Permissions\n permissions: pluginPermissions,\n};\n\nexport default manifest;\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kb-labs/review-entry",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.18.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": {
|
|
@@ -13,10 +13,10 @@
|
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
15
|
"chalk": "^5.3.0",
|
|
16
|
-
"@kb-labs/review-contracts": "2.
|
|
17
|
-
"@kb-labs/sdk": "
|
|
18
|
-
"@kb-labs/
|
|
19
|
-
"@kb-labs/
|
|
16
|
+
"@kb-labs/review-contracts": "2.18.0",
|
|
17
|
+
"@kb-labs/sdk": "2.17.0",
|
|
18
|
+
"@kb-labs/shared-cli-ui": "2.18.0",
|
|
19
|
+
"@kb-labs/review-core": "2.18.0"
|
|
20
20
|
},
|
|
21
21
|
"devDependencies": {
|
|
22
22
|
"@types/node": "^24.3.3",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"typescript": "^5.6.3",
|
|
25
25
|
"rimraf": "^6.0.1",
|
|
26
26
|
"vitest": "^3.2.4",
|
|
27
|
-
"@kb-labs/devkit": "2.
|
|
27
|
+
"@kb-labs/devkit": "2.18.0"
|
|
28
28
|
},
|
|
29
29
|
"engines": {
|
|
30
30
|
"node": ">=20.0.0",
|