@kernlang/review 3.1.5 → 3.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (156) hide show
  1. package/LICENSE +17 -0
  2. package/dist/cache.d.ts +1 -1
  3. package/dist/cache.js +5 -3
  4. package/dist/cache.js.map +1 -1
  5. package/dist/call-graph.d.ts +63 -0
  6. package/dist/call-graph.js +380 -0
  7. package/dist/call-graph.js.map +1 -0
  8. package/dist/concept-rules/boundary-mutation.d.ts +1 -1
  9. package/dist/concept-rules/boundary-mutation.js.map +1 -1
  10. package/dist/concept-rules/ignored-error.d.ts +1 -1
  11. package/dist/concept-rules/ignored-error.js.map +1 -1
  12. package/dist/concept-rules/illegal-dependency.d.ts +1 -1
  13. package/dist/concept-rules/illegal-dependency.js.map +1 -1
  14. package/dist/concept-rules/index.js +1 -6
  15. package/dist/concept-rules/index.js.map +1 -1
  16. package/dist/concept-rules/unguarded-effect.d.ts +1 -1
  17. package/dist/concept-rules/unguarded-effect.js.map +1 -1
  18. package/dist/concept-rules/unrecovered-effect.d.ts +1 -1
  19. package/dist/concept-rules/unrecovered-effect.js +2 -1
  20. package/dist/concept-rules/unrecovered-effect.js.map +1 -1
  21. package/dist/confidence.js +12 -8
  22. package/dist/confidence.js.map +1 -1
  23. package/dist/differ.js +3 -7
  24. package/dist/differ.js.map +1 -1
  25. package/dist/external-tools.js +5 -6
  26. package/dist/external-tools.js.map +1 -1
  27. package/dist/file-context.d.ts +21 -0
  28. package/dist/file-context.js +234 -0
  29. package/dist/file-context.js.map +1 -0
  30. package/dist/file-role.js +14 -7
  31. package/dist/file-role.js.map +1 -1
  32. package/dist/graph.d.ts +1 -1
  33. package/dist/graph.js +24 -16
  34. package/dist/graph.js.map +1 -1
  35. package/dist/index.d.ts +44 -35
  36. package/dist/index.js +221 -68
  37. package/dist/index.js.map +1 -1
  38. package/dist/inferrer.d.ts +8 -2
  39. package/dist/inferrer.js +80 -47
  40. package/dist/inferrer.js.map +1 -1
  41. package/dist/kern-lint.d.ts +3 -4
  42. package/dist/kern-lint.js +7 -5
  43. package/dist/kern-lint.js.map +1 -1
  44. package/dist/llm-bridge.d.ts +23 -7
  45. package/dist/llm-bridge.js +267 -31
  46. package/dist/llm-bridge.js.map +1 -1
  47. package/dist/llm-review.d.ts +16 -2
  48. package/dist/llm-review.js +240 -35
  49. package/dist/llm-review.js.map +1 -1
  50. package/dist/mappers/ts-concepts.d.ts +1 -1
  51. package/dist/mappers/ts-concepts.js +303 -32
  52. package/dist/mappers/ts-concepts.js.map +1 -1
  53. package/dist/norm-miner.d.ts +31 -0
  54. package/dist/norm-miner.js +119 -0
  55. package/dist/norm-miner.js.map +1 -0
  56. package/dist/obligations.d.ts +63 -0
  57. package/dist/obligations.js +158 -0
  58. package/dist/obligations.js.map +1 -0
  59. package/dist/quality-rules.d.ts +3 -3
  60. package/dist/quality-rules.js +4 -2
  61. package/dist/quality-rules.js.map +1 -1
  62. package/dist/reporter.d.ts +7 -2
  63. package/dist/reporter.js +82 -51
  64. package/dist/reporter.js.map +1 -1
  65. package/dist/rule-eval.d.ts +1 -2
  66. package/dist/rule-eval.js +5 -9
  67. package/dist/rule-eval.js.map +1 -1
  68. package/dist/rule-loader.js +16 -14
  69. package/dist/rule-loader.js.map +1 -1
  70. package/dist/rules/base.js +153 -69
  71. package/dist/rules/base.js.map +1 -1
  72. package/dist/rules/cli.d.ts +7 -0
  73. package/dist/rules/cli.js +99 -0
  74. package/dist/rules/cli.js.map +1 -0
  75. package/dist/rules/confidence.d.ts +1 -1
  76. package/dist/rules/confidence.js +5 -5
  77. package/dist/rules/confidence.js.map +1 -1
  78. package/dist/rules/dead-code.d.ts +10 -0
  79. package/dist/rules/dead-code.js +75 -0
  80. package/dist/rules/dead-code.js.map +1 -0
  81. package/dist/rules/dead-logic.js +35 -31
  82. package/dist/rules/dead-logic.js.map +1 -1
  83. package/dist/rules/express.d.ts +2 -1
  84. package/dist/rules/express.js +380 -126
  85. package/dist/rules/express.js.map +1 -1
  86. package/dist/rules/fastapi.d.ts +10 -0
  87. package/dist/rules/fastapi.js +183 -0
  88. package/dist/rules/fastapi.js.map +1 -0
  89. package/dist/rules/ground-layer.js +3 -3
  90. package/dist/rules/ground-layer.js.map +1 -1
  91. package/dist/rules/index.d.ts +5 -1
  92. package/dist/rules/index.js +602 -84
  93. package/dist/rules/index.js.map +1 -1
  94. package/dist/rules/ink.d.ts +8 -0
  95. package/dist/rules/ink.js +88 -0
  96. package/dist/rules/ink.js.map +1 -0
  97. package/dist/rules/kern-source.js +202 -63
  98. package/dist/rules/kern-source.js.map +1 -1
  99. package/dist/rules/nextjs.js +88 -33
  100. package/dist/rules/nextjs.js.map +1 -1
  101. package/dist/rules/null-safety.js +52 -26
  102. package/dist/rules/null-safety.js.map +1 -1
  103. package/dist/rules/nuxt.js +24 -29
  104. package/dist/rules/nuxt.js.map +1 -1
  105. package/dist/rules/react.js +355 -69
  106. package/dist/rules/react.js.map +1 -1
  107. package/dist/rules/security-v2.js +71 -57
  108. package/dist/rules/security-v2.js.map +1 -1
  109. package/dist/rules/security-v3.js.map +1 -1
  110. package/dist/rules/security-v4.js +54 -27
  111. package/dist/rules/security-v4.js.map +1 -1
  112. package/dist/rules/security.js +35 -5
  113. package/dist/rules/security.js.map +1 -1
  114. package/dist/rules/terminal.d.ts +8 -0
  115. package/dist/rules/terminal.js +139 -0
  116. package/dist/rules/terminal.js.map +1 -0
  117. package/dist/rules/vue.js +162 -107
  118. package/dist/rules/vue.js.map +1 -1
  119. package/dist/semantic-diff.d.ts +52 -0
  120. package/dist/semantic-diff.js +342 -0
  121. package/dist/semantic-diff.js.map +1 -0
  122. package/dist/spec-checker.js +11 -10
  123. package/dist/spec-checker.js.map +1 -1
  124. package/dist/suppression/apply-suppression.d.ts +2 -3
  125. package/dist/suppression/apply-suppression.js +3 -3
  126. package/dist/suppression/apply-suppression.js.map +1 -1
  127. package/dist/suppression/index.d.ts +2 -2
  128. package/dist/suppression/index.js +1 -1
  129. package/dist/suppression/index.js.map +1 -1
  130. package/dist/suppression/parse-directives.d.ts +1 -1
  131. package/dist/suppression/parse-directives.js +9 -4
  132. package/dist/suppression/parse-directives.js.map +1 -1
  133. package/dist/taint-ast.d.ts +20 -0
  134. package/dist/taint-ast.js +427 -0
  135. package/dist/taint-ast.js.map +1 -0
  136. package/dist/taint-crossfile.d.ts +28 -0
  137. package/dist/taint-crossfile.js +174 -0
  138. package/dist/taint-crossfile.js.map +1 -0
  139. package/dist/taint-findings.d.ts +17 -0
  140. package/dist/taint-findings.js +131 -0
  141. package/dist/taint-findings.js.map +1 -0
  142. package/dist/taint-regex.d.ts +61 -0
  143. package/dist/taint-regex.js +379 -0
  144. package/dist/taint-regex.js.map +1 -0
  145. package/dist/taint-types.d.ts +128 -0
  146. package/dist/taint-types.js +174 -0
  147. package/dist/taint-types.js.map +1 -0
  148. package/dist/taint.d.ts +13 -107
  149. package/dist/taint.js +16 -1067
  150. package/dist/taint.js.map +1 -1
  151. package/dist/template-detector.d.ts +2 -2
  152. package/dist/template-detector.js +11 -16
  153. package/dist/template-detector.js.map +1 -1
  154. package/dist/types.d.ts +35 -0
  155. package/dist/types.js.map +1 -1
  156. package/package.json +3 -3
@@ -33,12 +33,10 @@ export function exportKernIR(inferred, templateMatches) {
33
33
  }
34
34
  return lines.join('\n');
35
35
  }
36
- export function buildLLMPrompt(inferred, templateMatches, graphContext) {
36
+ export function buildLLMPrompt(inferred, templateMatches, graphContext, mode = 'ir-only', obligations) {
37
37
  const lines = [];
38
38
  // Valid aliases list (for the LLM to reference)
39
- const aliases = inferred
40
- .filter(r => r.node.type !== 'import')
41
- .map(r => r.promptAlias);
39
+ const aliases = inferred.filter((r) => r.node.type !== 'import').map((r) => r.promptAlias);
42
40
  // NOTE: instructions are in the system prompt (llm-bridge.ts buildSystemPrompt).
43
41
  // Only data goes here — this content is wrapped in <kern-file> (untrusted boundary).
44
42
  lines.push(`Valid aliases: ${aliases.join(', ')}`);
@@ -65,15 +63,57 @@ export function buildLLMPrompt(inferred, templateMatches, graphContext) {
65
63
  marker = distance === 0 ? ' [CHANGED]' : ` [CONTEXT d=${distance}]`;
66
64
  }
67
65
  }
68
- lines.push(`[${r.promptAlias}]${marker} ${serializeNodeWithBody(r.node, '')}`);
66
+ lines.push(`[${r.promptAlias}]${marker} ${serializeNodeWithBody(r.node, '', mode, r.startLine, r.endLine)}`);
69
67
  }
70
68
  for (const t of templateMatches) {
71
69
  if (t.suggestedKern) {
72
70
  lines.push(`// template: ${t.suggestedKern}`);
73
71
  }
74
72
  }
73
+ // Obligations section — verification claims for the AI reviewer
74
+ if (obligations && obligations.length > 0) {
75
+ lines.push('');
76
+ lines.push('<kern-obligations>');
77
+ for (const o of obligations) {
78
+ lines.push(` [${o.id}] (${o.type}) L${o.line}: ${o.claim}`);
79
+ if (o.evidence_for.length > 0) {
80
+ lines.push(` Evidence FOR: ${o.evidence_for.join('; ')}`);
81
+ }
82
+ if (o.evidence_against.length > 0) {
83
+ lines.push(` Evidence AGAINST: ${o.evidence_against.join('; ')}`);
84
+ }
85
+ if (o.prevalence !== undefined) {
86
+ lines.push(` Peer prevalence: ${Math.round(o.prevalence * 100)}%`);
87
+ }
88
+ lines.push(` Check: ${o.suggested_check}`);
89
+ }
90
+ lines.push('</kern-obligations>');
91
+ }
75
92
  return lines.join('\n');
76
93
  }
94
+ /** Map AI-returned categories to valid internal categories. */
95
+ const CATEGORY_MAP = {
96
+ bug: 'bug',
97
+ correctness: 'bug',
98
+ logic: 'bug',
99
+ error: 'bug',
100
+ security: 'bug',
101
+ vulnerability: 'bug',
102
+ injection: 'bug',
103
+ type: 'type',
104
+ typing: 'type',
105
+ types: 'type',
106
+ pattern: 'pattern',
107
+ antipattern: 'pattern',
108
+ 'anti-pattern': 'pattern',
109
+ style: 'style',
110
+ formatting: 'style',
111
+ readability: 'style',
112
+ performance: 'pattern',
113
+ structure: 'structure',
114
+ architecture: 'structure',
115
+ design: 'structure',
116
+ };
77
117
  /**
78
118
  * Parse strict JSON response from LLM, validate nodeIds, reject unknowns.
79
119
  * Returns unified ReviewFinding[] mapped back to TS source spans.
@@ -96,7 +136,8 @@ export function parseLLMResponse(response, inferred) {
96
136
  parsed = JSON.parse(jsonStr);
97
137
  }
98
138
  catch {
99
- return [{
139
+ return [
140
+ {
100
141
  source: 'llm',
101
142
  ruleId: 'parse-error',
102
143
  severity: 'error',
@@ -104,10 +145,12 @@ export function parseLLMResponse(response, inferred) {
104
145
  message: `Failed to parse LLM response as JSON: ${jsonStr.substring(0, 100)}...`,
105
146
  primarySpan: { file: '', startLine: 0, startCol: 0, endLine: 0, endCol: 0 },
106
147
  fingerprint: createFingerprint('parse-error', 0, 0),
107
- }];
148
+ },
149
+ ];
108
150
  }
109
151
  if (!Array.isArray(parsed)) {
110
- return [{
152
+ return [
153
+ {
111
154
  source: 'llm',
112
155
  ruleId: 'parse-error',
113
156
  severity: 'error',
@@ -115,46 +158,54 @@ export function parseLLMResponse(response, inferred) {
115
158
  message: 'LLM response is not a JSON array',
116
159
  primarySpan: { file: '', startLine: 0, startCol: 0, endLine: 0, endCol: 0 },
117
160
  fingerprint: createFingerprint('parse-error', 0, 1),
118
- }];
161
+ },
162
+ ];
119
163
  }
120
164
  const findings = [];
121
165
  const validSeverities = new Set(['error', 'warning', 'info']);
122
- const validCategories = new Set(['bug', 'type', 'pattern', 'style', 'structure']);
123
166
  for (const item of parsed) {
124
- // Validate nodeAlias
125
- if (!item.nodeAlias || !validAliases.has(item.nodeAlias)) {
126
- continue; // reject unknown aliases silently
167
+ // Resolve source location: prefer nodeAlias, fall back to line number
168
+ let primarySpan = null;
169
+ let nodeIds;
170
+ if (item.nodeAlias && validAliases.has(item.nodeAlias)) {
171
+ const node = aliasMap.get(item.nodeAlias);
172
+ primarySpan = node.sourceSpans[0] || {
173
+ file: '',
174
+ startLine: node.startLine,
175
+ startCol: 1,
176
+ endLine: node.endLine,
177
+ endCol: 1,
178
+ };
179
+ nodeIds = [node.nodeId];
180
+ }
181
+ else if (item.line && typeof item.line === 'number' && item.line > 0) {
182
+ // AI used "line" field — create a span from the line number
183
+ primarySpan = { file: '', startLine: item.line, startCol: 1, endLine: item.line, endCol: 1 };
127
184
  }
128
- // Validate severity and category
185
+ else {
186
+ continue; // no location at all — skip
187
+ }
188
+ // Validate severity
129
189
  if (!validSeverities.has(item.severity))
130
190
  continue;
131
- if (!validCategories.has(item.category))
132
- continue;
133
191
  if (!item.message || typeof item.message !== 'string')
134
192
  continue;
193
+ const category = (CATEGORY_MAP[(item.category || '').toLowerCase()] || 'bug');
135
194
  // Sanitize message: strip ANSI escape codes and control characters
136
195
  const message = item.message
137
196
  .replace(/\x1b\[[0-9;]*[a-zA-Z]/g, '') // ANSI escape sequences
138
197
  .replace(/\x1b\][^\x07]*\x07/g, '') // OSC sequences (title bar injection)
139
198
  .replace(/[\x00-\x08\x0b\x0c\x0e-\x1f]/g, ''); // control chars (keep \t \n \r)
140
- const node = aliasMap.get(item.nodeAlias);
141
- const primarySpan = node.sourceSpans[0] || {
142
- file: '',
143
- startLine: node.startLine,
144
- startCol: 1,
145
- endLine: node.endLine,
146
- endCol: 1,
147
- };
148
199
  findings.push({
149
200
  source: 'llm',
150
- ruleId: `llm-${item.category}`,
201
+ ruleId: `llm-${category}`,
151
202
  severity: item.severity,
152
- category: item.category,
203
+ category,
153
204
  message,
154
205
  primarySpan,
155
- nodeIds: [node.nodeId],
206
+ ...(nodeIds ? { nodeIds } : {}),
156
207
  confidence: 0.7, // LLM findings get lower confidence
157
- fingerprint: createFingerprint(`llm-${item.category}`, primarySpan.startLine, primarySpan.startCol),
208
+ fingerprint: createFingerprint(`llm-${category}`, primarySpan.startLine, primarySpan.startCol),
158
209
  });
159
210
  }
160
211
  return findings;
@@ -174,21 +225,175 @@ function serializeNode(node, indent) {
174
225
  let result = indent + parts.join(' ');
175
226
  if (node.children) {
176
227
  for (const child of node.children) {
177
- result += '\n' + serializeNode(child, indent + ' ');
228
+ result += `\n${serializeNode(child, `${indent} `)}`;
178
229
  }
179
230
  }
180
231
  return result;
181
232
  }
182
- function serializeNodeWithBody(node, indent) {
233
+ /** Max handler lines before compression kicks in (IR-only mode). */
234
+ const HANDLER_COMPRESS_THRESHOLD = 30;
235
+ // Security-sensitive patterns to preserve verbatim in compressed output.
236
+ // These are detection patterns for code review, not actual usage.
237
+ const SECURITY_PATTERN = /\b(exec|eval|spawn|sql|query|auth|token|password|cookie|header|redirect|innerHTML|dangerouslySetInnerHTML|crypto|hash|sign|verify|decrypt|encrypt)\b/i; // eslint-disable-line -- detection pattern, not usage
238
+ // ── Effect annotation patterns ──────────────────────────────────────────
239
+ const EFFECT_DB_PATTERN = /\b(db|sql|query|mongo|prisma|knex|sequelize|typeorm|drizzle)\b/i;
240
+ const EFFECT_FS_PATTERN = /\b(fs\.|readFile|writeFile|readdir|mkdir|unlink|createReadStream|createWriteStream)\b/i;
241
+ const EFFECT_NET_PATTERN = /\b(fetch|axios|http|https|request|got|superagent|XMLHttpRequest|WebSocket)\b/i;
242
+ const EFFECT_EXEC_PATTERN = /\b(exec|execSync|spawn|spawnSync|fork|execFile)\b/i; // eslint-disable-line -- detection pattern
243
+ const EFFECT_CRYPTO_PATTERN = /\b(crypto|hash|sign|verify|decrypt|encrypt|createHash|createHmac|randomBytes)\b/i;
244
+ const STRIP_PATTERNS = [
245
+ /^\s*\/\//,
246
+ /^\s*\/?\*/,
247
+ /^\s*console\.(log|debug|info|trace|dir|table|time|timeEnd|count|group|groupEnd)\b/,
248
+ /^\s*logger\.(debug|trace|verbose)\b/,
249
+ /^\s*debugger\b/,
250
+ /^\s*\/\*\*/,
251
+ /^\s*\*\s/,
252
+ /^\s*\*\//,
253
+ /^\s*$/,
254
+ ];
255
+ const TYPE_ONLY_PATTERN = /^\s*(type\s|interface\s|as\s+\w|<\w+>$)/;
256
+ const CONTROL_FLOW_LINE = /^\s*(if|else\s*if|else|for|while|do|switch|case|default|try|catch|finally)\b/;
257
+ const EXIT_PATTERN = /^\s*(return|yield|throw)\b/;
258
+ const CLOSE_BRACE = /^\s*\}(\s*(else|catch|finally)\b.*)?;?\s*$/;
259
+ const ASSIGNMENT_PATTERN = /^\s*(const|let|var)\s+(\w+)\s*=/;
260
+ const CLEANUP_PATTERN = /\b(release|close|destroy|disconnect|dispose|cleanup|teardown|end)\s*\(/;
261
+ const AWAIT_PATTERN = /\bawait\b/;
262
+ function annotateLine(trimmed) {
263
+ const annotations = [];
264
+ if (EFFECT_DB_PATTERN.test(trimmed))
265
+ annotations.push('[EFFECT:db]');
266
+ if (EFFECT_FS_PATTERN.test(trimmed))
267
+ annotations.push('[EFFECT:fs]');
268
+ if (EFFECT_NET_PATTERN.test(trimmed))
269
+ annotations.push('[EFFECT:net]');
270
+ if (EFFECT_EXEC_PATTERN.test(trimmed))
271
+ annotations.push('[EFFECT:exec]');
272
+ if (EFFECT_CRYPTO_PATTERN.test(trimmed))
273
+ annotations.push('[EFFECT:crypto]');
274
+ if (SECURITY_PATTERN.test(trimmed) && !annotations.some((a) => a.startsWith('[EFFECT:')))
275
+ annotations.push('[TAINT:sink]');
276
+ if (/^\s*(if|else\s+if)\s*\(/.test(trimmed) &&
277
+ /\b(auth|admin|permission|role|valid|check|verify|allowed|forbidden|unauthorized)\b/i.test(trimmed))
278
+ annotations.push('[GUARD]');
279
+ if (/^\s*catch\b/.test(trimmed))
280
+ annotations.push('[ERROR:handle]');
281
+ else if (/^\s*throw\b/.test(trimmed) && /\b(err|error|e)\s*;?\s*$/.test(trimmed))
282
+ annotations.push('[ERROR:propagate]');
283
+ else if (/^\s*throw\b/.test(trimmed))
284
+ annotations.push('[ERROR:raise]');
285
+ if (CLEANUP_PATTERN.test(trimmed))
286
+ annotations.push('[CLEANUP]');
287
+ return annotations.length > 0 ? ` ${annotations.join(' ')}` : '';
288
+ }
289
+ function isStrippableLine(trimmed) {
290
+ return STRIP_PATTERNS.some((p) => p.test(trimmed)) || TYPE_ONLY_PATTERN.test(trimmed);
291
+ }
292
+ function isEffectLine(trimmed) {
293
+ return (EFFECT_DB_PATTERN.test(trimmed) ||
294
+ EFFECT_FS_PATTERN.test(trimmed) ||
295
+ EFFECT_NET_PATTERN.test(trimmed) ||
296
+ EFFECT_EXEC_PATTERN.test(trimmed) ||
297
+ EFFECT_CRYPTO_PATTERN.test(trimmed) ||
298
+ AWAIT_PATTERN.test(trimmed));
299
+ }
300
+ /**
301
+ * Compress a large handler body into a logic-flow skeleton that preserves
302
+ * the decision structure, effects, error handling, and return paths.
303
+ * Uses line-based regex analysis — no AST re-parse needed.
304
+ */
305
+ export function compressHandlerBody(code) {
306
+ const lines = code.split('\n');
307
+ const totalLines = lines.length;
308
+ const keptIndices = new Set();
309
+ const lineData = lines.map((raw, idx) => ({ raw, trimmed: raw.trim(), idx, lineNum: idx + 1 }));
310
+ // Pass 1: classify every line
311
+ for (const { trimmed, idx } of lineData) {
312
+ if (trimmed === '')
313
+ continue;
314
+ if (CONTROL_FLOW_LINE.test(trimmed)) {
315
+ keptIndices.add(idx);
316
+ continue;
317
+ }
318
+ if (EXIT_PATTERN.test(trimmed)) {
319
+ keptIndices.add(idx);
320
+ continue;
321
+ }
322
+ if (CLOSE_BRACE.test(trimmed)) {
323
+ keptIndices.add(idx);
324
+ continue;
325
+ }
326
+ if (SECURITY_PATTERN.test(trimmed)) {
327
+ keptIndices.add(idx);
328
+ continue;
329
+ }
330
+ if (isEffectLine(trimmed)) {
331
+ keptIndices.add(idx);
332
+ continue;
333
+ }
334
+ if (CLEANUP_PATTERN.test(trimmed)) {
335
+ keptIndices.add(idx);
336
+ continue;
337
+ }
338
+ if (isStrippableLine(trimmed))
339
+ continue;
340
+ if (ASSIGNMENT_PATTERN.test(trimmed) && (AWAIT_PATTERN.test(trimmed) || /=\s*new\s+/.test(trimmed))) {
341
+ keptIndices.add(idx);
342
+ }
343
+ }
344
+ // Pass 2: backfill assignments whose variables are referenced in kept lines
345
+ const keptContent = [...keptIndices].map((i) => lineData[i].trimmed).join('\n');
346
+ for (const { trimmed, idx } of lineData) {
347
+ if (keptIndices.has(idx))
348
+ continue;
349
+ const assignMatch = trimmed.match(ASSIGNMENT_PATTERN);
350
+ if (assignMatch) {
351
+ const varName = assignMatch[2];
352
+ if (new RegExp(`\\b${varName}\\b`).test(keptContent))
353
+ keptIndices.add(idx);
354
+ }
355
+ }
356
+ // Pass 3: build skeleton
357
+ const skeleton = [`// ${totalLines} lines, logic skeleton:`];
358
+ const sortedIndices = [...keptIndices].sort((a, b) => a - b);
359
+ let prevIdx = -1;
360
+ for (const idx of sortedIndices) {
361
+ const { raw, trimmed, lineNum } = lineData[idx];
362
+ if (prevIdx >= 0 && idx - prevIdx > 1) {
363
+ const hasContent = lineData.slice(prevIdx + 1, idx).some((l) => l.trimmed !== '' && l.trimmed !== '}');
364
+ if (hasContent)
365
+ skeleton.push(` // ... (${idx - prevIdx - 1} lines)`);
366
+ }
367
+ const escaped = raw.replace(/<kern-code>/gi, '&lt;kern-code&gt;').replace(/<\/kern-code>/gi, '&lt;/kern-code&gt;');
368
+ const annotations = annotateLine(trimmed);
369
+ skeleton.push(`${escaped}${' '.repeat(Math.max(1, 40 - escaped.length))}// L${lineNum}${annotations}`);
370
+ prevIdx = idx;
371
+ }
372
+ return skeleton.join('\n');
373
+ }
374
+ export function serializeNodeWithBody(node, indent, mode = 'ir-only', nodeStartLine, nodeEndLine) {
183
375
  const parts = [node.type];
184
376
  if (node.props) {
185
377
  for (const [k, v] of Object.entries(node.props)) {
186
378
  if (typeof v === 'string') {
187
379
  if (k === 'code') {
188
- // Include handler bodies in LLM prompt (wrapped in XML-style tags)
189
- // Escape any closing tags in the source to prevent breakout
190
- const escaped = v.replace(/<\/kern-code>/gi, '&lt;/kern-code&gt;');
191
- parts.push(`<kern-code>\n${escaped}\n</kern-code>`);
380
+ if (mode === 'deep' && nodeStartLine !== undefined && nodeEndLine !== undefined) {
381
+ // Deep mode: LLM has full source in <kern-source>, just reference lines
382
+ parts.push(`lines=${nodeStartLine}-${nodeEndLine}`);
383
+ }
384
+ else {
385
+ // IR-only mode: inline small handlers, compress large ones
386
+ const lineCount = v.split('\n').length;
387
+ if (lineCount > HANDLER_COMPRESS_THRESHOLD) {
388
+ parts.push(`<kern-code>\n${compressHandlerBody(v)}\n</kern-code>`);
389
+ }
390
+ else {
391
+ const escaped = v
392
+ .replace(/<kern-code>/gi, '&lt;kern-code&gt;')
393
+ .replace(/<\/kern-code>/gi, '&lt;/kern-code&gt;');
394
+ parts.push(`<kern-code>\n${escaped}\n</kern-code>`);
395
+ }
396
+ }
192
397
  }
193
398
  else {
194
399
  parts.push(v.includes(' ') ? `${k}="${v}"` : `${k}=${v}`);
@@ -199,7 +404,7 @@ function serializeNodeWithBody(node, indent) {
199
404
  let result = indent + parts.join(' ');
200
405
  if (node.children) {
201
406
  for (const child of node.children) {
202
- result += '\n' + serializeNodeWithBody(child, indent + ' ');
407
+ result += `\n${serializeNodeWithBody(child, `${indent} `, mode, nodeStartLine, nodeEndLine)}`;
203
408
  }
204
409
  }
205
410
  return result;
@@ -1 +1 @@
1
- {"version":3,"file":"llm-review.js","sourceRoot":"","sources":["../src/llm-review.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,4EAA4E;AAE5E;;;GAGG;AACH,MAAM,UAAU,YAAY,CAC1B,QAAuB,EACvB,eAAgC;IAEhC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;IAC3D,KAAK,CAAC,IAAI,CAAC,wEAAwE,CAAC,CAAC;IACrF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ;YAAE,SAAS,CAAC,2BAA2B;QAEnE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,WAAW,MAAM,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,aAAa,eAAe,CAAC,CAAC;QAClG,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;QACtC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,eAAe,EAAE,CAAC;QAChC,IAAI,CAAC,CAAC,aAAa,EAAE,CAAC;YACpB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,OAAO,MAAM,CAAC,CAAC,WAAW,KAAK,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC;YACvF,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAgBD,MAAM,UAAU,cAAc,CAC5B,QAAuB,EACvB,eAAgC,EAChC,YAA8B;IAE9B,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,gDAAgD;IAChD,MAAM,OAAO,GAAG,QAAQ;SACrB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC;SACrC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IAE3B,iFAAiF;IACjF,qFAAqF;IACrF,KAAK,CAAC,IAAI,CAAC,kBAAkB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEnD,4FAA4F;IAC5F,IAAI,YAAY,EAAE,CAAC;QACjB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,mFAAmF,CAAC,CAAC;QAChG,KAAK,CAAC,IAAI,CAAC,2EAA2E,CAAC,CAAC;QACxF,KAAK,CAAC,IAAI,CAAC,kEAAkE,CAAC,CAAC;QAC/E,KAAK,CAAC,IAAI,CAAC,gGAAgG,CAAC,CAAC;IAC/G,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAEvB,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ;YAAE,SAAS;QAEvC,2CAA2C;QAC3C,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,QAAQ,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC;YAChD,MAAM,QAAQ,GAAG,YAAY,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC1D,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC3B,MAAM,GAAG,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,eAAe,QAAQ,GAAG,CAAC;YACtE,CAAC;QACH,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,IAAI,MAAM,IAAI,qBAAqB,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;IACjF,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,eAAe,EAAE,CAAC;QAChC,IAAI,CAAC,CAAC,aAAa,EAAE,CAAC;YACpB,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAYD;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,QAAgB,EAChB,QAAuB;IAEvB,mCAAmC;IACnC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAuB,CAAC;IAChD,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IACjC,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IAE9C,8EAA8E;IAC9E,IAAI,OAAO,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC9B,6BAA6B;IAC7B,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IACjF,CAAC;IAED,IAAI,MAAoB,CAAC;IACzB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC;gBACN,MAAM,EAAE,KAAK;gBACb,MAAM,EAAE,aAAa;gBACrB,QAAQ,EAAE,OAAO;gBACjB,QAAQ,EAAE,KAAK;gBACf,OAAO,EAAE,yCAAyC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK;gBAChF,WAAW,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;gBAC3E,WAAW,EAAE,iBAAiB,CAAC,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC;aACpD,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC;gBACN,MAAM,EAAE,KAAK;gBACb,MAAM,EAAE,aAAa;gBACrB,QAAQ,EAAE,OAAO;gBACjB,QAAQ,EAAE,KAAK;gBACf,OAAO,EAAE,kCAAkC;gBAC3C,WAAW,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;gBAC3E,WAAW,EAAE,iBAAiB,CAAC,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC;aACpD,CAAC,CAAC;IACL,CAAC;IAED,MAAM,QAAQ,GAAoB,EAAE,CAAC;IACrC,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;IAC9D,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;IAElF,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;QAC1B,qBAAqB;QACrB,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YACzD,SAAS,CAAC,kCAAkC;QAC9C,CAAC;QAED,iCAAiC;QACjC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;YAAE,SAAS;QAClD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;YAAE,SAAS;QAClD,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ;YAAE,SAAS;QAEhE,mEAAmE;QACnE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO;aACzB,OAAO,CAAC,wBAAwB,EAAE,EAAE,CAAC,CAAC,wBAAwB;aAC9D,OAAO,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAK,sCAAsC;aAC7E,OAAO,CAAC,+BAA+B,EAAE,EAAE,CAAC,CAAC,CAAC,gCAAgC;QAEjF,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAE,CAAC;QAC3C,MAAM,WAAW,GAAe,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI;YACrD,IAAI,EAAE,EAAE;YACR,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,MAAM,EAAE,CAAC;SACV,CAAC;QAEF,QAAQ,CAAC,IAAI,CAAC;YACZ,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,OAAO,IAAI,CAAC,QAAQ,EAAE;YAC9B,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,OAAO;YACP,WAAW;YACX,OAAO,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC;YACtB,UAAU,EAAE,GAAG,EAAE,oCAAoC;YACrD,WAAW,EAAE,iBAAiB,CAAC,OAAO,IAAI,CAAC,QAAQ,EAAE,EAAE,WAAW,CAAC,SAAS,EAAE,WAAW,CAAC,QAAQ,CAAC;SACpG,CAAC,CAAC;IACL,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,4EAA4E;AAE5E,SAAS,aAAa,CAAC,IAAqC,EAAE,MAAc;IAC1E,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAChD,IAAI,CAAC,KAAK,MAAM;gBAAE,SAAS,CAAC,iDAAiD;YAC7E,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;gBAC1B,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;IACH,CAAC;IACD,IAAI,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClC,MAAM,IAAI,IAAI,GAAG,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAqC,EAAE,MAAc;IAClF,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAChD,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;gBAC1B,IAAI,CAAC,KAAK,MAAM,EAAE,CAAC;oBACjB,mEAAmE;oBACnE,4DAA4D;oBAC5D,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,CAAC;oBACnE,KAAK,CAAC,IAAI,CAAC,gBAAgB,OAAO,gBAAgB,CAAC,CAAC;gBACtD,CAAC;qBAAM,CAAC;oBACN,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC5D,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IACD,IAAI,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClC,MAAM,IAAI,IAAI,GAAG,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"llm-review.js","sourceRoot":"","sources":["../src/llm-review.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,6 @@
4
4
  * Phase 1: error_raise, error_handle, effect
5
5
  * Phase 2: entrypoint, guard, state_mutation, call, dependency
6
6
  */
7
- import { type SourceFile } from 'ts-morph';
8
7
  import type { ConceptMap } from '@kernlang/core';
8
+ import { type SourceFile } from 'ts-morph';
9
9
  export declare function extractTsConcepts(sourceFile: SourceFile, filePath: string): ConceptMap;