@kernlang/review 3.1.5 → 3.1.6

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/LICENSE CHANGED
@@ -659,3 +659,20 @@ specific requirements.
659
659
  if any, to sign a "copyright disclaimer" for the program, if necessary.
660
660
  For more information on this, and how to apply and follow the GNU AGPL, see
661
661
  <https://www.gnu.org/licenses/>.
662
+
663
+ ===============================================================================
664
+
665
+ Copyright (c) 2026 KERNlang
666
+
667
+ Additional permission under GNU AGPL version 3 section 7:
668
+
669
+ If you modify this Program, or any covered work, by linking or combining
670
+ it with other code, such other code is not for that reason alone subject
671
+ to any of the requirements of the GNU Affero GPL version 3.
672
+
673
+ ---
674
+
675
+ COMMERCIAL USE
676
+
677
+ Using this software as part of a paid product or service requires a
678
+ commercial license. Contact: hello@kernlang.dev
package/dist/index.js CHANGED
@@ -26,6 +26,7 @@ import { lintKernIR, flattenIR } from './kern-lint.js';
26
26
  import { loadBuiltinNativeRules, loadNativeRules } from './rule-loader.js';
27
27
  import { lintKernSourceIR, KERN_SOURCE_RULES } from './rules/kern-source.js';
28
28
  import { GROUND_LAYER_RULES } from './rules/ground-layer.js';
29
+ import { runFastapiConceptRules } from './rules/fastapi.js';
29
30
  // Load native .kern rules once at module init
30
31
  // Guard: import.meta.url is undefined when bundled as CJS (e.g. esbuild for VS Code worker)
31
32
  let NATIVE_RULES = [];
@@ -342,6 +343,9 @@ export function reviewPythonSource(source, filePath = 'input.py', config) {
342
343
  const { extractPythonConcepts } = require('@kernlang/review-python');
343
344
  const concepts = extractPythonConcepts(source, filePath);
344
345
  conceptFindings = runConceptRules(concepts, filePath);
346
+ if (config?.target === 'fastapi') {
347
+ conceptFindings.push(...runFastapiConceptRules(concepts, filePath, source));
348
+ }
345
349
  // Native .kern rules with concept matching (built-in + custom)
346
350
  const rulesToRunPy = [...NATIVE_RULES];
347
351
  if (config?.rulesDirs && config.rulesDirs.length > 0) {
@@ -485,6 +489,66 @@ export function reviewGraph(entryFiles, config, graphOptions) {
485
489
  report.findings.push(...crossFileConceptFindings);
486
490
  }
487
491
  }
492
+ // ── Post-filter: suppress server-hook / missing-use-client false positives ──
493
+ // In graph mode, if ALL importers of a file are within a client boundary
494
+ // ('use client' — recursively), hooks and event handlers are safe on the client.
495
+ if (config?.target === 'nextjs') {
496
+ const NEXTJS_CLIENT_RULES = new Set(['server-hook', 'missing-use-client']);
497
+ const hasNextjsFindings = reports.some(r => r.findings.some(f => NEXTJS_CLIENT_RULES.has(f.ruleId)));
498
+ if (hasNextjsFindings) {
499
+ const importedByMap = new Map();
500
+ for (const gf of graph.files) {
501
+ importedByMap.set(gf.path, gf.importedBy);
502
+ }
503
+ const useClientCache = new Map();
504
+ function hasUseClient(fp) {
505
+ let r = useClientCache.get(fp);
506
+ if (r !== undefined)
507
+ return r;
508
+ try {
509
+ const src = readFileSync(fp, 'utf-8');
510
+ r = /^['"]use client['"];?\s*$/m.test(src.substring(0, 200));
511
+ }
512
+ catch {
513
+ r = false;
514
+ }
515
+ useClientCache.set(fp, r);
516
+ return r;
517
+ }
518
+ const boundaryCache = new Map();
519
+ function isWithinClientBoundary(fp, visiting) {
520
+ if (hasUseClient(fp))
521
+ return true;
522
+ const c = boundaryCache.get(fp);
523
+ if (c !== undefined)
524
+ return c;
525
+ // Entry files without 'use client' are server components by definition
526
+ if (entrySet.has(fp)) {
527
+ boundaryCache.set(fp, false);
528
+ return false;
529
+ }
530
+ if (visiting.has(fp))
531
+ return true; // cycle — optimistic
532
+ const importers = importedByMap.get(fp);
533
+ if (!importers || importers.length === 0) {
534
+ boundaryCache.set(fp, false);
535
+ return false;
536
+ }
537
+ visiting.add(fp);
538
+ const ok = importers.every(i => isWithinClientBoundary(i, visiting));
539
+ visiting.delete(fp);
540
+ boundaryCache.set(fp, ok);
541
+ return ok;
542
+ }
543
+ for (const report of reports) {
544
+ if (!report.findings.some(f => NEXTJS_CLIENT_RULES.has(f.ruleId)))
545
+ continue;
546
+ if (isWithinClientBoundary(report.filePath, new Set())) {
547
+ report.findings = report.findings.filter(f => !NEXTJS_CLIENT_RULES.has(f.ruleId));
548
+ }
549
+ }
550
+ }
551
+ }
488
552
  // Re-run suppression + dedup on all reports (cross-file findings were injected after initial suppression)
489
553
  for (const report of reports) {
490
554
  try {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * CLI review rules — active when target = cli.
3
+ *
4
+ * Focused on Commander.js entrypoint pitfalls.
5
+ */
6
+ import type { ReviewRule } from '../types.js';
7
+ export declare const cliRules: ReviewRule[];
@@ -0,0 +1,95 @@
1
+ /**
2
+ * CLI review rules — active when target = cli.
3
+ *
4
+ * Focused on Commander.js entrypoint pitfalls.
5
+ */
6
+ import { Node, SyntaxKind } from 'ts-morph';
7
+ import { finding } from './utils.js';
8
+ function isCommanderFile(text) {
9
+ return /from\s+['"]commander['"]|require\s*\(\s*['"]commander['"]\s*\)|\bnew\s+Command\s*\(/.test(text);
10
+ }
11
+ function isEntrypointLike(ctx, text) {
12
+ return /(?:^|\/)(?:cli|bin|main|index)\.[cm]?[jt]sx?$/.test(ctx.filePath) ||
13
+ text.startsWith('#!') ||
14
+ /\bprocess\.argv\b/.test(text) ||
15
+ /\.\s*parse(?:Async)?\s*\(/.test(text);
16
+ }
17
+ function hasCommandInstance(ctx) {
18
+ return ctx.sourceFile.getDescendantsOfKind(SyntaxKind.NewExpression).some(expr => expr.getExpression().getText() === 'Command');
19
+ }
20
+ // ── Rule: cli-missing-shebang ───────────────────────────────────────────
21
+ function missingShebang(ctx) {
22
+ const fullText = ctx.sourceFile.getFullText();
23
+ if (!isCommanderFile(fullText) || !hasCommandInstance(ctx) || !isEntrypointLike(ctx, fullText))
24
+ return [];
25
+ if (fullText.startsWith('#!'))
26
+ return [];
27
+ return [finding('cli-missing-shebang', 'warning', 'pattern', 'CLI entrypoint is missing a shebang — direct execution via npm bin or shell will fail', ctx.filePath, 1, 1, { suggestion: '#!/usr/bin/env node' })];
28
+ }
29
+ // ── Rule: cli-missing-parse ─────────────────────────────────────────────
30
+ function missingParse(ctx) {
31
+ const fullText = ctx.sourceFile.getFullText();
32
+ if (!isCommanderFile(fullText) || !hasCommandInstance(ctx) || !isEntrypointLike(ctx, fullText))
33
+ return [];
34
+ if (/\.\s*parse(?:Async)?\s*\(/.test(fullText))
35
+ return [];
36
+ const command = ctx.sourceFile.getDescendantsOfKind(SyntaxKind.NewExpression)
37
+ .find(expr => expr.getExpression().getText() === 'Command');
38
+ if (!command)
39
+ return [];
40
+ return [finding('cli-missing-parse', 'error', 'bug', 'Commander CLI creates a Command instance but never parses argv — commands and options will never run', ctx.filePath, command.getStartLineNumber(), 1, { suggestion: 'Call await program.parseAsync() (or program.parse() for fully synchronous handlers)' })];
41
+ }
42
+ // ── Rule: cli-async-parse-sync ──────────────────────────────────────────
43
+ function asyncParseSync(ctx) {
44
+ const fullText = ctx.sourceFile.getFullText();
45
+ if (!isCommanderFile(fullText))
46
+ return [];
47
+ const hasAsyncAction = ctx.sourceFile.getDescendantsOfKind(SyntaxKind.CallExpression).some(call => {
48
+ const expr = call.getExpression();
49
+ if (!Node.isPropertyAccessExpression(expr) || expr.getName() !== 'action')
50
+ return false;
51
+ const callback = call.getArguments()[0];
52
+ return (Node.isArrowFunction(callback) || Node.isFunctionExpression(callback)) && callback.isAsync();
53
+ });
54
+ if (!hasAsyncAction || /\.\s*parseAsync\s*\(/.test(fullText))
55
+ return [];
56
+ const syncParse = ctx.sourceFile.getDescendantsOfKind(SyntaxKind.CallExpression).find(call => {
57
+ const expr = call.getExpression();
58
+ return Node.isPropertyAccessExpression(expr) && expr.getName() === 'parse';
59
+ });
60
+ if (!syncParse)
61
+ return [];
62
+ return [finding('cli-async-parse-sync', 'error', 'bug', 'Commander async action handler paired with parse() — pending promises can be dropped before completion', ctx.filePath, syncParse.getStartLineNumber(), 1, { suggestion: 'Use await program.parseAsync() when any action handler is async' })];
63
+ }
64
+ // ── Rule: cli-process-exit-in-action ────────────────────────────────────
65
+ function processExitInAction(ctx) {
66
+ const findings = [];
67
+ const fullText = ctx.sourceFile.getFullText();
68
+ if (!isCommanderFile(fullText))
69
+ return findings;
70
+ for (const call of ctx.sourceFile.getDescendantsOfKind(SyntaxKind.CallExpression)) {
71
+ const expr = call.getExpression();
72
+ if (!Node.isPropertyAccessExpression(expr) || expr.getName() !== 'action')
73
+ continue;
74
+ const callback = call.getArguments()[0];
75
+ if (!callback || (!Node.isArrowFunction(callback) && !Node.isFunctionExpression(callback)))
76
+ continue;
77
+ const exitCall = callback.getDescendantsOfKind(SyntaxKind.CallExpression).find(desc => {
78
+ const descExpr = desc.getExpression();
79
+ return Node.isPropertyAccessExpression(descExpr) &&
80
+ descExpr.getExpression().getText() === 'process' &&
81
+ descExpr.getName() === 'exit';
82
+ });
83
+ if (!exitCall)
84
+ continue;
85
+ findings.push(finding('cli-process-exit-in-action', 'warning', 'pattern', 'Commander action handler calls process.exit() directly — this can skip cleanup and truncate stdio output', ctx.filePath, exitCall.getStartLineNumber(), 1, { suggestion: 'Throw an error or set process.exitCode and return from the action handler' }));
86
+ }
87
+ return findings;
88
+ }
89
+ export const cliRules = [
90
+ missingShebang,
91
+ missingParse,
92
+ asyncParseSync,
93
+ processExitInAction,
94
+ ];
95
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/rules/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * FastAPI review rules — active when target = fastapi.
3
+ *
4
+ * FastAPI uses the Python concept pipeline, so the real checks live in
5
+ * runFastapiConceptRules() below and operate on ConceptMap + source text.
6
+ */
7
+ import type { ConceptMap } from '@kernlang/core';
8
+ import type { ReviewFinding, ReviewRule } from '../types.js';
9
+ export declare function runFastapiConceptRules(concepts: ConceptMap, filePath: string, source: string): ReviewFinding[];
10
+ export declare const fastapiRules: ReviewRule[];
@@ -0,0 +1,149 @@
1
+ /**
2
+ * FastAPI review rules — active when target = fastapi.
3
+ *
4
+ * FastAPI uses the Python concept pipeline, so the real checks live in
5
+ * runFastapiConceptRules() below and operate on ConceptMap + source text.
6
+ */
7
+ import { finding } from './utils.js';
8
+ function lineForIndex(text, index) {
9
+ return text.slice(0, index).split('\n').length;
10
+ }
11
+ function routeNodes(concepts) {
12
+ return concepts.nodes
13
+ .filter(node => node.kind === 'entrypoint' && node.payload.kind === 'entrypoint' && node.payload.subtype === 'route')
14
+ .sort((a, b) => a.primarySpan.startLine - b.primarySpan.startLine);
15
+ }
16
+ function extractRoutes(source, concepts) {
17
+ const lines = source.split('\n');
18
+ const routes = [];
19
+ for (const node of routeNodes(concepts)) {
20
+ const startIdx = node.primarySpan.startLine - 1;
21
+ for (let i = startIdx; i < lines.length; i++) {
22
+ const match = lines[i].match(/^(\s*)(async\s+def|def)\s+([A-Za-z_]\w*)\s*\(/);
23
+ if (!match)
24
+ continue;
25
+ const defIndent = match[1].length;
26
+ let endLine = lines.length;
27
+ for (let j = i + 1; j < lines.length; j++) {
28
+ const line = lines[j];
29
+ const trimmed = line.trim();
30
+ if (!trimmed || trimmed.startsWith('#'))
31
+ continue;
32
+ const indent = line.match(/^(\s*)/)?.[1].length ?? 0;
33
+ if (indent <= defIndent) {
34
+ endLine = j;
35
+ break;
36
+ }
37
+ }
38
+ routes.push({
39
+ startLine: node.primarySpan.startLine,
40
+ headerLine: i + 1,
41
+ endLine,
42
+ name: match[3],
43
+ method: node.payload.kind === 'entrypoint' ? node.payload.httpMethod : undefined,
44
+ isAsync: match[2].startsWith('async'),
45
+ decoratorText: node.evidence,
46
+ body: lines.slice(i + 1, endLine).join('\n'),
47
+ });
48
+ break;
49
+ }
50
+ }
51
+ return routes;
52
+ }
53
+ function nodesInRoute(ctx, route, kind) {
54
+ return ctx.concepts.nodes.filter(node => node.kind === kind &&
55
+ node.primarySpan.startLine >= route.startLine &&
56
+ node.primarySpan.startLine <= route.endLine);
57
+ }
58
+ function bodyLine(route, index) {
59
+ return route.headerLine + lineForIndex(route.body, index);
60
+ }
61
+ // ── Rule: fastapi-missing-response-model ────────────────────────────────
62
+ function missingResponseModel(ctx) {
63
+ const findings = [];
64
+ const plainReturn = /\breturn\s+(?!None\b)(?!JSONResponse\b)(?!PlainTextResponse\b)(?!StreamingResponse\b)(?!FileResponse\b)(?!RedirectResponse\b)(?!HTMLResponse\b)(?!TemplateResponse\b)(?!Response\b)(?:\{|\[|[A-Za-z_]\w*(?:\.[A-Za-z_]\w*)*)/;
65
+ for (const route of extractRoutes(ctx.source, ctx.concepts)) {
66
+ if (/response_model\s*=/.test(route.decoratorText))
67
+ continue;
68
+ if (!plainReturn.test(route.body))
69
+ continue;
70
+ findings.push(finding('fastapi-missing-response-model', 'warning', 'pattern', `FastAPI route '${route.name}' returns data without response_model — response shape is undocumented and easy to over-expose`, ctx.filePath, route.startLine, 1, { suggestion: 'Declare response_model=YourSchema on the route decorator so FastAPI validates and filters outbound data' }));
71
+ }
72
+ return findings;
73
+ }
74
+ // ── Rule: fastapi-blocking-sync-route ───────────────────────────────────
75
+ const BLOCKING_PATTERNS = [
76
+ { pattern: /\brequests\.(?:get|post|put|patch|delete|head|options|request)\s*\(/g, label: 'requests.*', suggestion: 'Use httpx.AsyncClient/aiohttp or move the blocking call to a threadpool' },
77
+ { pattern: /\bopen\s*\(/g, label: 'open()', suggestion: 'Use aiofiles or move blocking file I/O off the event loop' },
78
+ { pattern: /\b(?:sqlite3|psycopg2)\./g, label: 'sync DB client', suggestion: 'Use an async database driver inside async FastAPI routes' },
79
+ { pattern: /\bcursor\.execute\s*\(/g, label: 'cursor.execute()', suggestion: 'Use an async database client or execute the query in a worker thread' },
80
+ { pattern: /\bsubprocess\.(?:run|call|check_call|check_output)\s*\(/g, label: 'subprocess.*', suggestion: 'Use asyncio.create_subprocess_exec() or a worker thread from async routes' },
81
+ { pattern: /\btime\.sleep\s*\(/g, label: 'time.sleep()', suggestion: 'Use await asyncio.sleep() in async FastAPI routes' },
82
+ ];
83
+ function blockingSyncRoute(ctx) {
84
+ const findings = [];
85
+ for (const route of extractRoutes(ctx.source, ctx.concepts)) {
86
+ if (!route.isAsync)
87
+ continue;
88
+ for (const { pattern, label, suggestion } of BLOCKING_PATTERNS) {
89
+ pattern.lastIndex = 0;
90
+ const match = pattern.exec(route.body);
91
+ if (!match)
92
+ continue;
93
+ findings.push(finding('fastapi-blocking-sync-route', 'warning', 'bug', `Async FastAPI route '${route.name}' uses blocking ${label} — the event loop will stall under load`, ctx.filePath, bodyLine(route, match.index), 1, { suggestion }));
94
+ break;
95
+ }
96
+ }
97
+ return findings;
98
+ }
99
+ // ── Rule: fastapi-shared-state ──────────────────────────────────────────
100
+ function sharedState(ctx) {
101
+ const findings = [];
102
+ for (const route of extractRoutes(ctx.source, ctx.concepts)) {
103
+ for (const mutation of nodesInRoute(ctx, route, 'state_mutation')) {
104
+ const payload = mutation.payload;
105
+ if (payload.kind !== 'state_mutation')
106
+ continue;
107
+ if (payload.scope !== 'global' && payload.scope !== 'module')
108
+ continue;
109
+ findings.push(finding('fastapi-shared-state', 'error', 'bug', `FastAPI route '${route.name}' mutates ${payload.scope} state '${payload.target}' — concurrent requests can race and leak state across users`, ctx.filePath, mutation.primarySpan.startLine, 1, { suggestion: 'Move per-request data into function scope, a dependency, or a database/cache with explicit concurrency control' }));
110
+ }
111
+ }
112
+ return findings;
113
+ }
114
+ // ── Rule: fastapi-broad-except ──────────────────────────────────────────
115
+ function broadExcept(ctx) {
116
+ const findings = [];
117
+ const broad = /^\s*except(?:\s+Exception(?:\s+as\s+\w+)?)?\s*:/gm;
118
+ for (const route of extractRoutes(ctx.source, ctx.concepts)) {
119
+ const handlers = nodesInRoute(ctx, route, 'error_handle');
120
+ if (handlers.length === 0)
121
+ continue;
122
+ let match;
123
+ while ((match = broad.exec(route.body)) !== null) {
124
+ const line = bodyLine(route, match.index);
125
+ const conceptMatch = handlers.find(node => node.primarySpan.startLine === line);
126
+ if (!conceptMatch)
127
+ continue;
128
+ const block = route.body.slice(match.index, match.index + 220);
129
+ if (/\braise\s+HTTPException\b|\braise\b/.test(block))
130
+ continue;
131
+ findings.push(finding('fastapi-broad-except', 'warning', 'bug', `FastAPI route '${route.name}' catches broad exceptions without re-raising — real failures get flattened into generic responses`, ctx.filePath, line, 1, { suggestion: 'Catch specific exceptions and re-raise HTTPException (or let FastAPI\'s exception handlers deal with them)' }));
132
+ }
133
+ }
134
+ return findings;
135
+ }
136
+ const FASTAPI_CONCEPT_RULES = [
137
+ missingResponseModel,
138
+ blockingSyncRoute,
139
+ sharedState,
140
+ broadExcept,
141
+ ];
142
+ export function runFastapiConceptRules(concepts, filePath, source) {
143
+ const ctx = { concepts, filePath, source };
144
+ return FASTAPI_CONCEPT_RULES.flatMap(rule => rule(ctx));
145
+ }
146
+ // FastAPI is executed via reviewPythonSource(), not the TS quality-rule layer.
147
+ // The target still needs layer registration for --list-rules / target metadata.
148
+ export const fastapiRules = [];
149
+ //# sourceMappingURL=fastapi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fastapi.js","sourceRoot":"","sources":["../../src/rules/fastapi.ts"],"names":[],"mappings":"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"}
@@ -3,9 +3,13 @@
3
3
  *
4
4
  * Layers:
5
5
  * [base] Always active — universal TS/KERN rules
6
- * [react] Active when target = nextjs | tailwind | web | native
6
+ * [react] Active when target = nextjs | tailwind | web | native | ink
7
+ * [ink] Active when target = ink (on top of react)
7
8
  * [vue] Active when target = vue | nuxt
8
9
  * [express] Active when target = express
10
+ * [cli] Active when target = cli
11
+ * [terminal] Active when target = terminal
12
+ * [fastapi] Active when target = fastapi (Python concept layer)
9
13
  * [nextjs] Active when target = nextjs (on top of react)
10
14
  * [nuxt] Active when target = nuxt (on top of vue)
11
15
  */
@@ -3,9 +3,13 @@
3
3
  *
4
4
  * Layers:
5
5
  * [base] Always active — universal TS/KERN rules
6
- * [react] Active when target = nextjs | tailwind | web | native
6
+ * [react] Active when target = nextjs | tailwind | web | native | ink
7
+ * [ink] Active when target = ink (on top of react)
7
8
  * [vue] Active when target = vue | nuxt
8
9
  * [express] Active when target = express
10
+ * [cli] Active when target = cli
11
+ * [terminal] Active when target = terminal
12
+ * [fastapi] Active when target = fastapi (Python concept layer)
9
13
  * [nextjs] Active when target = nextjs (on top of react)
10
14
  * [nuxt] Active when target = nuxt (on top of vue)
11
15
  */
@@ -20,8 +24,12 @@ import { vueRules } from './vue.js';
20
24
  import { nextjsRules } from './nextjs.js';
21
25
  import { nuxtRules } from './nuxt.js';
22
26
  import { expressRules } from './express.js';
27
+ import { cliRules } from './cli.js';
28
+ import { terminalRules } from './terminal.js';
29
+ import { inkRules } from './ink.js';
30
+ import { fastapiRules } from './fastapi.js';
23
31
  import { nullSafetyRules } from './null-safety.js';
24
- const REACT_TARGETS = new Set(['nextjs', 'tailwind', 'web', 'native']);
32
+ const REACT_TARGETS = new Set(['nextjs', 'tailwind', 'web', 'native', 'ink']);
25
33
  const VUE_TARGETS = new Set(['vue', 'nuxt']);
26
34
  /**
27
35
  * Get all active review rules for a given target.
@@ -44,6 +52,18 @@ export function getActiveRules(target) {
44
52
  if (target === 'express') {
45
53
  rules.push(...expressRules);
46
54
  }
55
+ if (target === 'cli') {
56
+ rules.push(...cliRules);
57
+ }
58
+ if (target === 'terminal') {
59
+ rules.push(...terminalRules);
60
+ }
61
+ if (target === 'ink') {
62
+ rules.push(...inkRules);
63
+ }
64
+ if (target === 'fastapi') {
65
+ rules.push(...fastapiRules);
66
+ }
47
67
  return rules;
48
68
  }
49
69
  const REGISTRY = [
@@ -108,7 +128,7 @@ const REGISTRY = [
108
128
  { id: 'unchecked-find', layer: 'null-safety', severity: 'warning', description: 'array.find() result used without null check' },
109
129
  { id: 'optional-chain-bang', layer: 'null-safety', severity: 'warning', description: 'Optional chain (?) immediately negated by non-null assertion (!)' },
110
130
  { id: 'unchecked-cast', layer: 'null-safety', severity: 'warning', description: 'Unsafe type assertion without runtime guard' },
111
- // React (target: nextjs, tailwind, web, native)
131
+ // React (target: nextjs, tailwind, web, native, ink)
112
132
  { id: 'async-effect', layer: 'react', severity: 'error', description: 'Async function passed directly to useEffect' },
113
133
  { id: 'render-side-effect', layer: 'react', severity: 'error', description: 'Side effect (fetch, mutation) during render' },
114
134
  { id: 'unstable-key', layer: 'react', severity: 'warning', description: 'Non-stable key prop (index, random, Date.now)' },
@@ -116,11 +136,31 @@ const REGISTRY = [
116
136
  { id: 'state-explosion', layer: 'react', severity: 'warning', description: 'Excessive useState calls — consider useReducer' },
117
137
  { id: 'hook-order', layer: 'react', severity: 'error', description: 'React hook called inside condition or loop' },
118
138
  { id: 'effect-self-update-loop', layer: 'react', severity: 'error', description: 'useEffect updates its own dependency — infinite loop' },
139
+ // CLI (target: cli)
140
+ { id: 'cli-missing-shebang', layer: 'cli', severity: 'warning', description: 'Commander CLI entrypoint missing #!/usr/bin/env node' },
141
+ { id: 'cli-missing-parse', layer: 'cli', severity: 'error', description: 'Command instance created without parse()/parseAsync()' },
142
+ { id: 'cli-async-parse-sync', layer: 'cli', severity: 'error', description: 'Async Commander action paired with parse() instead of parseAsync()' },
143
+ { id: 'cli-process-exit-in-action', layer: 'cli', severity: 'warning', description: 'Commander action handler calls process.exit() directly' },
119
144
  // Vue (target: vue, nuxt)
120
145
  { id: 'missing-ref-value', layer: 'vue', severity: 'warning', description: 'ref() used without .value in script setup' },
121
146
  { id: 'missing-onUnmounted', layer: 'vue', severity: 'error', description: 'watch/addEventListener without onUnmounted cleanup' },
122
147
  { id: 'setup-side-effect', layer: 'vue', severity: 'warning', description: 'Top-level await in setup without onMounted' },
123
148
  { id: 'reactive-destructure', layer: 'vue', severity: 'warning', description: 'Destructuring reactive() loses reactivity' },
149
+ // Terminal (target: terminal)
150
+ { id: 'terminal-missing-tty-guard', layer: 'terminal', severity: 'warning', description: 'Interactive terminal code runs without TTY guard' },
151
+ { id: 'terminal-raw-mode-no-restore', layer: 'terminal', severity: 'error', description: 'stdin raw mode enabled without restore on exit' },
152
+ { id: 'terminal-readline-no-close', layer: 'terminal', severity: 'warning', description: 'Readline interface never closed — process can hang' },
153
+ { id: 'terminal-alt-screen-no-restore', layer: 'terminal', severity: 'warning', description: 'Alternate screen entered without restore on exit' },
154
+ { id: 'terminal-missing-signal-handler', layer: 'terminal', severity: 'warning', description: 'No SIGINT/SIGTERM handler for cleanup' },
155
+ { id: 'terminal-cursor-not-restored', layer: 'terminal', severity: 'warning', description: 'Cursor hidden without restore on exit' },
156
+ { id: 'terminal-unthrottled-render', layer: 'terminal', severity: 'warning', description: 'Render loop with excessive refresh rate' },
157
+ // Ink (target: ink, on top of React)
158
+ { id: 'ink-console-output', layer: 'ink', severity: 'warning', description: 'console.* output corrupts Ink terminal rendering' },
159
+ { id: 'ink-direct-stdout', layer: 'ink', severity: 'error', description: 'Direct stdout/stderr writes bypass Ink renderer' },
160
+ { id: 'ink-process-exit', layer: 'ink', severity: 'warning', description: 'process.exit() used instead of useApp().exit()' },
161
+ { id: 'ink-stdin-bypass', layer: 'ink', severity: 'warning', description: 'Raw stdin/readline listeners bypass Ink useInput()' },
162
+ { id: 'ink-uncleared-interval', layer: 'ink', severity: 'warning', description: 'setInterval without cleanup in Ink component' },
163
+ { id: 'ink-missing-error-boundary', layer: 'ink', severity: 'warning', description: 'Ink render() without error handling' },
124
164
  // Next.js (target: nextjs)
125
165
  { id: 'server-hook', layer: 'nextjs', severity: 'error', description: 'React hook used in Server Component' },
126
166
  { id: 'hydration-mismatch', layer: 'nextjs', severity: 'warning', description: 'Nondeterministic expression causes SSR/client mismatch' },
@@ -134,6 +174,11 @@ const REGISTRY = [
134
174
  { id: 'missing-error-middleware', layer: 'express', severity: 'warning', description: 'Express app without error-handling middleware' },
135
175
  { id: 'sync-in-handler', layer: 'express', severity: 'warning', description: 'Blocking I/O in request handler' },
136
176
  { id: 'double-response', layer: 'express', severity: 'error', description: 'Response sent twice without early return' },
177
+ // FastAPI (target: fastapi, concept-based Python pipeline)
178
+ { id: 'fastapi-missing-response-model', layer: 'fastapi', severity: 'warning', description: 'Endpoint without response_model — undocumented response' },
179
+ { id: 'fastapi-blocking-sync-route', layer: 'fastapi', severity: 'warning', description: 'Blocking call in async route stalls event loop' },
180
+ { id: 'fastapi-shared-state', layer: 'fastapi', severity: 'error', description: 'Route mutates global/module state — race condition' },
181
+ { id: 'fastapi-broad-except', layer: 'fastapi', severity: 'warning', description: 'Broad except without re-raising HTTPException' },
137
182
  // Concept rules (always active, language-agnostic)
138
183
  { id: 'boundary-mutation', layer: 'concept', severity: 'warning', description: 'Global/shared state mutation across boundaries' },
139
184
  { id: 'ignored-error', layer: 'concept', severity: 'warning', description: 'Caught exception silently ignored' },
@@ -150,11 +195,15 @@ const LAYER_TARGET_MAP = {
150
195
  'dead-logic': null,
151
196
  'null-safety': null,
152
197
  concept: null,
153
- react: ['nextjs', 'tailwind', 'web', 'native'],
198
+ react: ['nextjs', 'tailwind', 'web', 'native', 'ink'],
199
+ cli: ['cli'],
154
200
  vue: ['vue', 'nuxt'],
201
+ ink: ['ink'],
202
+ terminal: ['terminal'],
155
203
  nextjs: ['nextjs'],
156
204
  nuxt: ['nuxt'],
157
205
  express: ['express'],
206
+ fastapi: ['fastapi'],
158
207
  };
159
208
  /**
160
209
  * Get the rule registry, optionally filtered by target.
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rules/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rules/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Ink review rules — active when target = ink (on top of React rules).
3
+ *
4
+ * Focused on Ink terminal rendering / input handling pitfalls.
5
+ * Codex base rules + Claude extras (uncleared-interval, missing-error-boundary).
6
+ */
7
+ import type { ReviewRule } from '../types.js';
8
+ export declare const inkRules: ReviewRule[];
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Ink review rules — active when target = ink (on top of React rules).
3
+ *
4
+ * Focused on Ink terminal rendering / input handling pitfalls.
5
+ * Codex base rules + Claude extras (uncleared-interval, missing-error-boundary).
6
+ */
7
+ import { finding } from './utils.js';
8
+ function lineForIndex(text, index) {
9
+ return text.slice(0, index).split('\n').length;
10
+ }
11
+ function findAll(text, pattern) {
12
+ const lines = [];
13
+ let match;
14
+ while ((match = pattern.exec(text)) !== null) {
15
+ lines.push(lineForIndex(text, match.index));
16
+ }
17
+ return lines;
18
+ }
19
+ function isInkFile(text) {
20
+ return /from\s+['"]ink['"]|require\s*\(\s*['"]ink['"]\s*\)/.test(text);
21
+ }
22
+ // ── Rule: ink-console-output (Codex) ────────────────────────────────────
23
+ function consoleOutput(ctx) {
24
+ const fullText = ctx.sourceFile.getFullText();
25
+ if (!isInkFile(fullText))
26
+ return [];
27
+ return findAll(fullText, /\bconsole\.(?:log|warn|error|info)\s*\(/g).map(line => finding('ink-console-output', 'warning', 'bug', 'Ink app writes through console.* — direct console output corrupts the rendered terminal frame', ctx.filePath, line, 1, { suggestion: 'Render status via <Text>, <Static>, or useStdout()/useStderr() instead of console.*' }));
28
+ }
29
+ // ── Rule: ink-direct-stdout (Codex) ─────────────────────────────────────
30
+ function directStdout(ctx) {
31
+ const fullText = ctx.sourceFile.getFullText();
32
+ if (!isInkFile(fullText))
33
+ return [];
34
+ return findAll(fullText, /\bprocess\.(?:stdout|stderr)\.write\s*\(/g).map(line => finding('ink-direct-stdout', 'error', 'bug', 'Ink app writes directly to stdout/stderr — bypassing Ink output breaks layout reconciliation', ctx.filePath, line, 1, { suggestion: 'Use Ink components or useStdout()/useStderr() so output stays inside Ink\'s renderer' }));
35
+ }
36
+ // ── Rule: ink-process-exit (Codex) ──────────────────────────────────────
37
+ function processExit(ctx) {
38
+ const fullText = ctx.sourceFile.getFullText();
39
+ if (!isInkFile(fullText))
40
+ return [];
41
+ return findAll(fullText, /\bprocess\.exit\s*\(/g).map(line => finding('ink-process-exit', 'warning', 'pattern', 'Ink app calls process.exit() directly — this skips Ink cleanup and can leave the terminal in a dirty state', ctx.filePath, line, 1, { suggestion: 'Use const { exit } = useApp(); exit(); so Ink can clean up properly' }));
42
+ }
43
+ // ── Rule: ink-stdin-bypass (Codex) ──────────────────────────────────────
44
+ function stdinBypass(ctx) {
45
+ const fullText = ctx.sourceFile.getFullText();
46
+ if (!isInkFile(fullText))
47
+ return [];
48
+ const pattern = /\bprocess\.stdin\.(?:on|addListener|once|resume|setRawMode)\s*\(|\breadline\.createInterface\s*\(/g;
49
+ return findAll(fullText, pattern).map(line => finding('ink-stdin-bypass', 'warning', 'pattern', 'Ink app bypasses useInput() with raw stdin/readline listeners — input handling will fight with Ink\'s renderer', ctx.filePath, line, 1, { suggestion: 'Handle keyboard input with useInput() or useStdin() instead of process.stdin/readline listeners' }));
50
+ }
51
+ // ── Rule: ink-uncleared-interval (Claude) ───────────────────────────────
52
+ function unclearedInterval(ctx) {
53
+ const fullText = ctx.sourceFile.getFullText();
54
+ if (!isInkFile(fullText))
55
+ return [];
56
+ // Already has cleanup
57
+ if (fullText.includes('clearInterval'))
58
+ return [];
59
+ return findAll(fullText, /\bsetInterval\s*\(/g).map(line => finding('ink-uncleared-interval', 'warning', 'bug', 'setInterval without clearInterval in Ink component — timer leaks on unmount', ctx.filePath, line, 1, { suggestion: 'Store the interval ID and clear it in useEffect cleanup: return () => clearInterval(id)' }));
60
+ }
61
+ // ── Rule: ink-missing-error-boundary (Claude) ───────────────────────────
62
+ function missingErrorBoundary(ctx) {
63
+ const fullText = ctx.sourceFile.getFullText();
64
+ if (!isInkFile(fullText))
65
+ return [];
66
+ // Check for Ink render() call — this is the app entry point
67
+ const renderMatch = fullText.match(/\brender\s*\(\s*<\w+/);
68
+ if (!renderMatch)
69
+ return [];
70
+ const hasErrorBoundary = fullText.includes('ErrorBoundary') || fullText.includes('errorBoundary');
71
+ const hasExitHandler = /\.waitUntilExit\s*\(\s*\)\s*\.catch/.test(fullText) ||
72
+ /try\s*\{[^}]*render/.test(fullText);
73
+ if (!hasErrorBoundary && !hasExitHandler) {
74
+ const line = lineForIndex(fullText, renderMatch.index);
75
+ return [finding('ink-missing-error-boundary', 'warning', 'pattern', 'Ink render() without error handling — uncaught errors will corrupt terminal state', ctx.filePath, line, 1, { suggestion: 'Add .waitUntilExit().catch() or wrap with an ErrorBoundary component' })];
76
+ }
77
+ return [];
78
+ }
79
+ export const inkRules = [
80
+ consoleOutput,
81
+ directStdout,
82
+ processExit,
83
+ stdinBypass,
84
+ unclearedInterval,
85
+ missingErrorBoundary,
86
+ ];
87
+ //# sourceMappingURL=ink.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ink.js","sourceRoot":"","sources":["../../src/rules/ink.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Terminal review rules — active when target = terminal.
3
+ *
4
+ * Focused on interactive ANSI / readline terminal apps.
5
+ * Codex base rules + Claude extras (signal-handler, cursor-restore, unthrottled-render).
6
+ */
7
+ import type { ReviewRule } from '../types.js';
8
+ export declare const terminalRules: ReviewRule[];
@@ -0,0 +1,127 @@
1
+ /**
2
+ * Terminal review rules — active when target = terminal.
3
+ *
4
+ * Focused on interactive ANSI / readline terminal apps.
5
+ * Codex base rules + Claude extras (signal-handler, cursor-restore, unthrottled-render).
6
+ */
7
+ import { finding } from './utils.js';
8
+ function lineForIndex(text, index) {
9
+ return text.slice(0, index).split('\n').length;
10
+ }
11
+ function matchLine(text, pattern) {
12
+ const match = pattern.exec(text);
13
+ return match ? lineForIndex(text, match.index) : null;
14
+ }
15
+ // ── Rule: terminal-missing-tty-guard (Codex) ────────────────────────────
16
+ function missingTtyGuard(ctx) {
17
+ const fullText = ctx.sourceFile.getFullText();
18
+ const interactivePattern = /\b(?:readline\.)?createInterface\s*\(|\b(?:process\.)?stdin\.setRawMode\s*\(\s*true|\b(?:process\.)?stdout\.(?:write|clearLine|cursorTo|clearScreenDown)\s*\(|\?1049h|\x1b\[|\u001b\[/;
19
+ if (!interactivePattern.test(fullText))
20
+ return [];
21
+ if (/\b(?:process\.)?(?:stdout|stdin)\.isTTY\b|\btty\.isatty\s*\(/.test(fullText))
22
+ return [];
23
+ const line = matchLine(fullText, interactivePattern) ?? 1;
24
+ return [finding('terminal-missing-tty-guard', 'warning', 'bug', 'Interactive terminal code runs without a TTY guard — pipes and non-interactive shells will render incorrectly', ctx.filePath, line, 1, { suggestion: 'Guard interactive paths with process.stdout.isTTY / process.stdin.isTTY before enabling ANSI UI features' })];
25
+ }
26
+ // ── Rule: terminal-raw-mode-no-restore (Codex) ──────────────────────────
27
+ function rawModeNoRestore(ctx) {
28
+ const fullText = ctx.sourceFile.getFullText();
29
+ const enable = /\.setRawMode\s*\(\s*true\s*\)/g;
30
+ if (!enable.test(fullText))
31
+ return [];
32
+ if (/\.setRawMode\s*\(\s*false\s*\)/.test(fullText))
33
+ return [];
34
+ enable.lastIndex = 0;
35
+ const match = enable.exec(fullText);
36
+ const line = match ? lineForIndex(fullText, match.index) : 1;
37
+ return [finding('terminal-raw-mode-no-restore', 'error', 'bug', 'stdin raw mode is enabled without restoring it — the shell can be left in a broken state after exit', ctx.filePath, line, 1, { suggestion: 'Restore raw mode in cleanup handlers with process.stdin.setRawMode(false)' })];
38
+ }
39
+ // ── Rule: terminal-readline-no-close (Codex) ────────────────────────────
40
+ function readlineNoClose(ctx) {
41
+ const findings = [];
42
+ const fullText = ctx.sourceFile.getFullText();
43
+ const decl = /\b(?:const|let|var)\s+(\w+)\s*=\s*(?:readline\.)?createInterface\s*\(/g;
44
+ let match;
45
+ while ((match = decl.exec(fullText)) !== null) {
46
+ const name = match[1];
47
+ const closePattern = new RegExp(`\\b${name}\\.close\\s*\\(`);
48
+ if (closePattern.test(fullText))
49
+ continue;
50
+ findings.push(finding('terminal-readline-no-close', 'warning', 'bug', `Readline interface '${name}' is never closed — stdin can remain open and keep the process hanging`, ctx.filePath, lineForIndex(fullText, match.index), 1, { suggestion: `Call ${name}.close() in completion and shutdown paths` }));
51
+ }
52
+ return findings;
53
+ }
54
+ // ── Rule: terminal-alt-screen-no-restore (Codex) ────────────────────────
55
+ function altScreenNoRestore(ctx) {
56
+ const fullText = ctx.sourceFile.getFullText();
57
+ const enter = /\?1049h|\?47h/g;
58
+ if (!enter.test(fullText))
59
+ return [];
60
+ if (/\?1049l|\?47l/.test(fullText))
61
+ return [];
62
+ enter.lastIndex = 0;
63
+ const match = enter.exec(fullText);
64
+ const line = match ? lineForIndex(fullText, match.index) : 1;
65
+ return [finding('terminal-alt-screen-no-restore', 'warning', 'bug', 'Terminal app enters the alternate screen without restoring it on exit — users can be left in a blank session', ctx.filePath, line, 1, { suggestion: 'Emit the matching ?1049l / ?47l escape sequence during shutdown and signal cleanup' })];
66
+ }
67
+ // ── Rule: terminal-missing-signal-handler (Claude) ──────────────────────
68
+ function missingSignalHandler(ctx) {
69
+ const fullText = ctx.sourceFile.getFullText();
70
+ // Only check files that do terminal-specific work
71
+ const isTerminal = /\b(setRawMode|cursorTo|clearLine|moveCursor|createInterface|blessed|inquirer|ora|chalk\.)\b/.test(fullText);
72
+ if (!isTerminal)
73
+ return [];
74
+ const hasSigint = /process\.on\s*\(\s*['"`]SIGINT['"`]/.test(fullText);
75
+ const hasSigterm = /process\.on\s*\(\s*['"`]SIGTERM['"`]/.test(fullText);
76
+ if (!hasSigint && !hasSigterm) {
77
+ const termMatch = fullText.match(/\b(setRawMode|cursorTo|clearLine|moveCursor|createInterface)\b/);
78
+ const line = termMatch ? lineForIndex(fullText, termMatch.index) : 1;
79
+ return [finding('terminal-missing-signal-handler', 'warning', 'pattern', 'Terminal app has no SIGINT/SIGTERM handler — cleanup code may not run on Ctrl+C', ctx.filePath, line, 1, { suggestion: 'Add process.on("SIGINT", () => { cleanup(); process.exit(130); })' })];
80
+ }
81
+ return [];
82
+ }
83
+ // ── Rule: terminal-cursor-not-restored (Claude) ─────────────────────────
84
+ function cursorNotRestored(ctx) {
85
+ const fullText = ctx.sourceFile.getFullText();
86
+ const hidesCursor = /\\(?:x1[Bb]|u001[Bb]|e|033)\[\?25l/.test(fullText) ||
87
+ fullText.includes('cursor(false)') ||
88
+ fullText.includes('hideCursor') ||
89
+ fullText.includes('cursor.hide');
90
+ if (!hidesCursor)
91
+ return [];
92
+ const restoresCursor = /\\(?:x1[Bb]|u001[Bb]|e|033)\[\?25h/.test(fullText) ||
93
+ fullText.includes('cursor(true)') ||
94
+ fullText.includes('showCursor') ||
95
+ fullText.includes('cursor.show');
96
+ if (!restoresCursor) {
97
+ const match = fullText.match(/(?:hideCursor|cursor\.hide|cursor\(false\)|\?\s*25\s*l)/);
98
+ const line = match ? lineForIndex(fullText, match.index) : 1;
99
+ return [finding('terminal-cursor-not-restored', 'warning', 'bug', 'Cursor hidden without restore — cursor will stay invisible after exit', ctx.filePath, line, 1, { suggestion: 'Add process.on("exit", () => process.stdout.write("\\x1B[?25h"))' })];
100
+ }
101
+ return [];
102
+ }
103
+ // ── Rule: terminal-unthrottled-render (Claude) ──────────────────────────
104
+ function unthrottledRender(ctx) {
105
+ const findings = [];
106
+ const fullText = ctx.sourceFile.getFullText();
107
+ const intervalRegex = /setInterval\s*\([^,]+,\s*(\d+)\s*\)/g;
108
+ let match;
109
+ while ((match = intervalRegex.exec(fullText)) !== null) {
110
+ const ms = parseInt(match[1], 10);
111
+ if (ms < 16) {
112
+ const line = lineForIndex(fullText, match.index);
113
+ findings.push(finding('terminal-unthrottled-render', 'warning', 'pattern', `setInterval at ${ms}ms (>${Math.round(1000 / ms)}fps) — excessive terminal redraws cause flicker`, ctx.filePath, line, 1, { suggestion: 'Use ≥16ms (60fps) for smooth terminal rendering without excess CPU' }));
114
+ }
115
+ }
116
+ return findings;
117
+ }
118
+ export const terminalRules = [
119
+ missingTtyGuard,
120
+ rawModeNoRestore,
121
+ readlineNoClose,
122
+ altScreenNoRestore,
123
+ missingSignalHandler,
124
+ cursorNotRestored,
125
+ unthrottledRender,
126
+ ];
127
+ //# sourceMappingURL=terminal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal.js","sourceRoot":"","sources":["../../src/rules/terminal.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kernlang/review",
3
- "version": "3.1.5",
3
+ "version": "3.1.6",
4
4
  "description": "Kern Review — scan TS, infer .kern IR, roundtrip diff, report",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -26,10 +26,10 @@
26
26
  "license": "AGPL-3.0",
27
27
  "dependencies": {
28
28
  "ts-morph": "^27.0.0",
29
- "@kernlang/core": "3.1.5"
29
+ "@kernlang/core": "3.1.6"
30
30
  },
31
31
  "scripts": {
32
32
  "build": "tsc -b",
33
- "test": "node --experimental-vm-modules ../../node_modules/jest/bin/jest.js --forceExit --config jest.config.js"
33
+ "test": "node --experimental-vm-modules ../../node_modules/jest/bin/jest.js --config jest.config.js"
34
34
  }
35
35
  }