@kernlang/evolve 3.1.6 → 3.1.8
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/concept-gap-adapter.js +1 -1
- package/dist/concept-gap-adapter.js.map +1 -1
- package/dist/detector-registry.js +1 -1
- package/dist/detector-registry.js.map +1 -1
- package/dist/detectors/animation.js +4 -8
- package/dist/detectors/animation.js.map +1 -1
- package/dist/detectors/data-fetching.js +3 -5
- package/dist/detectors/data-fetching.js.map +1 -1
- package/dist/detectors/express-middleware.js +4 -4
- package/dist/detectors/express-middleware.js.map +1 -1
- package/dist/detectors/react-forms.js +5 -3
- package/dist/detectors/react-forms.js.map +1 -1
- package/dist/detectors/schema-validation.js +2 -2
- package/dist/detectors/schema-validation.js.map +1 -1
- package/dist/detectors/state-mgmt.js +2 -3
- package/dist/detectors/state-mgmt.js.map +1 -1
- package/dist/detectors/structural.js +37 -23
- package/dist/detectors/structural.js.map +1 -1
- package/dist/detectors/testing.js +1 -1
- package/dist/detectors/testing.js.map +1 -1
- package/dist/detectors/vue-composables.js +4 -2
- package/dist/detectors/vue-composables.js.map +1 -1
- package/dist/evolve-dedup.js.map +1 -1
- package/dist/evolve-rollback.js +2 -2
- package/dist/evolve-rollback.js.map +1 -1
- package/dist/evolve-runner.js +24 -23
- package/dist/evolve-runner.js.map +1 -1
- package/dist/evolve-validator-v4.js +4 -5
- package/dist/evolve-validator-v4.js.map +1 -1
- package/dist/evolved-node-loader.js +4 -4
- package/dist/evolved-node-loader.js.map +1 -1
- package/dist/expressibility-scorer.d.ts +1 -1
- package/dist/expressibility-scorer.js +2 -3
- package/dist/expressibility-scorer.js.map +1 -1
- package/dist/gap-detector.d.ts +1 -1
- package/dist/gap-detector.js +2 -2
- package/dist/gap-detector.js.map +1 -1
- package/dist/golden-test-runner.js +4 -5
- package/dist/golden-test-runner.js.map +1 -1
- package/dist/graduation.d.ts +1 -1
- package/dist/graduation.js +4 -4
- package/dist/graduation.js.map +1 -1
- package/dist/index.d.ts +24 -24
- package/dist/index.js +35 -34
- package/dist/index.js.map +1 -1
- package/dist/llm-discovery.d.ts +24 -1
- package/dist/llm-discovery.js +68 -8
- package/dist/llm-discovery.js.map +1 -1
- package/dist/llm-provider.js +4 -4
- package/dist/llm-provider.js.map +1 -1
- package/dist/node-governance.js.map +1 -1
- package/dist/node-proposer.d.ts +3 -3
- package/dist/node-proposer.js +4 -9
- package/dist/node-proposer.js.map +1 -1
- package/dist/node-validator.js +1 -1
- package/dist/node-validator.js.map +1 -1
- package/dist/pattern-analyzer.d.ts +1 -1
- package/dist/pattern-analyzer.js +25 -23
- package/dist/pattern-analyzer.js.map +1 -1
- package/dist/quality-scorer.d.ts +1 -1
- package/dist/quality-scorer.js +7 -7
- package/dist/quality-scorer.js.map +1 -1
- package/dist/sandboxed-generator.js +21 -18
- package/dist/sandboxed-generator.js.map +1 -1
- package/dist/staging.d.ts +2 -2
- package/dist/staging.js +14 -11
- package/dist/staging.js.map +1 -1
- package/dist/template-proposer.js +1 -1
- package/dist/template-proposer.js.map +1 -1
- package/dist/template-validator.js +17 -17
- package/dist/template-validator.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -10,49 +10,50 @@
|
|
|
10
10
|
* registerDetector(pack) — register custom detector
|
|
11
11
|
* loadBuiltinDetectors() — load all built-in detectors
|
|
12
12
|
*/
|
|
13
|
-
// Detector Registry
|
|
14
|
-
export { registerDetector, unregisterDetector, getDetector, getAllDetectors, getDetectorsForImport, getUniversalDetectors, clearDetectors, detectorCount, loadBuiltinDetectors, registerDetectors, } from './detector-registry.js';
|
|
15
|
-
// Gap Detector
|
|
16
|
-
export { detectGaps, detectGapsInFiles, detectGapsFromSource, resetGapIds } from './gap-detector.js';
|
|
17
13
|
// Concept Gap Adapter
|
|
18
14
|
export { detectConceptualGaps, resetConceptGapIds } from './concept-gap-adapter.js';
|
|
19
|
-
//
|
|
20
|
-
export {
|
|
21
|
-
//
|
|
22
|
-
export {
|
|
23
|
-
// Template Proposer
|
|
24
|
-
export { proposeTemplates, generateKernSource } from './template-proposer.js';
|
|
25
|
-
// Template Validator
|
|
26
|
-
export { validateProposal } from './template-validator.js';
|
|
27
|
-
// Staging
|
|
28
|
-
export { stageProposal, listStaged, getStaged, updateStagedStatus, promoteLocal, cleanRejected, formatSplitView,
|
|
29
|
-
// v3 node staging
|
|
30
|
-
stageNodeProposal, listStagedNodes, updateStagedNodeStatus, formatNodeSplitView,
|
|
31
|
-
// v4 evolve staging
|
|
32
|
-
stageEvolveV4Proposal, listStagedEvolveV4, getStagedEvolveV4, updateStagedEvolveV4Status, cleanRejectedEvolveV4, cleanApprovedEvolveV4, formatEvolveV4SplitView, } from './staging.js';
|
|
15
|
+
// Detector Registry
|
|
16
|
+
export { clearDetectors, detectorCount, getAllDetectors, getDetector, getDetectorsForImport, getUniversalDetectors, loadBuiltinDetectors, registerDetector, registerDetectors, unregisterDetector, } from './detector-registry.js';
|
|
17
|
+
// Evolve Runner (main entry points)
|
|
18
|
+
export { evolve, evolveSource } from './evolve-runner.js';
|
|
33
19
|
// Expressibility Scorer (v3)
|
|
34
|
-
export {
|
|
35
|
-
//
|
|
36
|
-
export {
|
|
20
|
+
export { EXPRESSIBILITY_NODE_THRESHOLD, isNodeCandidate, scoreExpressibility, } from './expressibility-scorer.js';
|
|
21
|
+
// Gap Detector
|
|
22
|
+
export { detectGaps, detectGapsFromSource, detectGapsInFiles, resetGapIds } from './gap-detector.js';
|
|
37
23
|
// Node Governance (v3)
|
|
38
|
-
export {
|
|
24
|
+
export { getGovernanceThresholds, governanceGate } from './node-governance.js';
|
|
25
|
+
// Node Proposer (v3)
|
|
26
|
+
export { deriveNodeName as deriveNodeProposalName, proposeNodes, resetNodeProposalIds } from './node-proposer.js';
|
|
39
27
|
// Node Validator (v3)
|
|
40
28
|
export { validateNodeProposal } from './node-validator.js';
|
|
41
|
-
//
|
|
42
|
-
export {
|
|
43
|
-
//
|
|
44
|
-
export {
|
|
45
|
-
//
|
|
46
|
-
export {
|
|
29
|
+
// Pattern Analyzer
|
|
30
|
+
export { analyzePatterns, analyzeStructuralPatterns, computeStructuralHash, deriveTemplateName, } from './pattern-analyzer.js';
|
|
31
|
+
// Quality Scorer
|
|
32
|
+
export { DEFAULT_THRESHOLDS, passesThresholds, scorePattern } from './quality-scorer.js';
|
|
33
|
+
// Staging
|
|
34
|
+
export { cleanApprovedEvolveV4, cleanRejected, cleanRejectedEvolveV4, formatEvolveV4SplitView, formatNodeSplitView, formatSplitView, getStaged, getStagedEvolveV4, listStaged, listStagedEvolveV4, listStagedNodes, promoteLocal,
|
|
35
|
+
// v4 evolve staging
|
|
36
|
+
stageEvolveV4Proposal,
|
|
37
|
+
// v3 node staging
|
|
38
|
+
stageNodeProposal, stageProposal, updateStagedEvolveV4Status, updateStagedNodeStatus, updateStagedStatus, } from './staging.js';
|
|
39
|
+
// Template Proposer
|
|
40
|
+
export { generateKernSource, proposeTemplates } from './template-proposer.js';
|
|
41
|
+
// Template Validator
|
|
42
|
+
export { validateProposal } from './template-validator.js';
|
|
43
|
+
// ── Evolve v4 — Self-Extending IR ───────────────────────────────────────
|
|
44
|
+
export { checkDedup } from './evolve-dedup.js';
|
|
45
|
+
// Rollback + Prune + Migrate
|
|
46
|
+
export { detectCollisions, findUsages, pruneNodes, renameEvolvedNode, restoreNode, rollbackNode, } from './evolve-rollback.js';
|
|
47
47
|
// v4 Validation
|
|
48
48
|
export { validateEvolveProposal } from './evolve-validator-v4.js';
|
|
49
|
-
|
|
50
|
-
export {
|
|
49
|
+
// Evolved Node Loader
|
|
50
|
+
export { clearEvolvedNodes, evolvedNodeCount, getEvolvedGenerator, getEvolvedKeywords, getParserHints as getEvolvedParserHints, hasEvolvedNodes, loadEvolvedNodes, readManifest as readEvolvedManifest, readNodeDefinition, rebuildManifest as rebuildEvolvedManifest, } from './evolved-node-loader.js';
|
|
51
|
+
export { compareGoldenOutput, formatGoldenTestResults, runGoldenTests } from './golden-test-runner.js';
|
|
51
52
|
// Graduation
|
|
52
|
-
export {
|
|
53
|
-
// Rollback + Prune + Migrate
|
|
54
|
-
export { rollbackNode, restoreNode, findUsages, pruneNodes, detectCollisions, renameEvolvedNode } from './evolve-rollback.js';
|
|
53
|
+
export { compileCodegenToJS, graduateNode, promoteNode } from './graduation.js';
|
|
55
54
|
// LLM Discovery
|
|
56
|
-
export {
|
|
55
|
+
export { buildBackfillPrompt, buildDiscoveryPrompt, buildRetryPrompt, collectTsFiles, estimateTokens, parseDiscoveryResponse, parseLLMJsonObject, selectRepresentativeFiles, validateBackfillResponse, validateRetryResponse, } from './llm-discovery.js';
|
|
57
56
|
export { createLLMProvider, TokenBudget } from './llm-provider.js';
|
|
57
|
+
// Sandboxed Generator
|
|
58
|
+
export { compileSandboxedGenerator, getCodegenHelpers, loadSandboxedGenerator } from './sandboxed-generator.js';
|
|
58
59
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/llm-discovery.d.ts
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* Offline-safe: this module only constructs prompts and parses responses.
|
|
8
8
|
* The actual LLM call is handled by llm-provider.ts.
|
|
9
9
|
*/
|
|
10
|
-
import type {
|
|
10
|
+
import type { EvolvedNodeProp, EvolveNodeProposal } from './evolved-types.js';
|
|
11
11
|
/**
|
|
12
12
|
* Select representative TypeScript files, clustered by directory.
|
|
13
13
|
* Returns batches of 3-5 files suitable for LLM context.
|
|
@@ -34,6 +34,29 @@ export declare function buildDiscoveryPrompt(files: Array<{
|
|
|
34
34
|
* Handles common LLM quirks: markdown fences, preamble, trailing text.
|
|
35
35
|
*/
|
|
36
36
|
export declare function parseDiscoveryResponse(response: string, evolveRunId?: string): EvolveNodeProposal[];
|
|
37
|
+
/**
|
|
38
|
+
* Extract and parse a JSON object from an LLM response.
|
|
39
|
+
* Handles markdown fences, preamble text, and validates the result is a plain object.
|
|
40
|
+
* Returns null if extraction or parsing fails.
|
|
41
|
+
*/
|
|
42
|
+
export declare function parseLLMJsonObject(response: string): Record<string, unknown> | null;
|
|
43
|
+
/**
|
|
44
|
+
* Validate and extract a backfill LLM response.
|
|
45
|
+
* Returns only known fields with correct types, or null if codegenSource is missing.
|
|
46
|
+
*/
|
|
47
|
+
export declare function validateBackfillResponse(parsed: Record<string, unknown>): {
|
|
48
|
+
codegenSource: string;
|
|
49
|
+
expectedOutput: string | undefined;
|
|
50
|
+
} | null;
|
|
51
|
+
/**
|
|
52
|
+
* Validate and extract retry response fields for an evolve proposal.
|
|
53
|
+
* Returns only known string fields that are present.
|
|
54
|
+
*/
|
|
55
|
+
export declare function validateRetryResponse(parsed: Record<string, unknown>): {
|
|
56
|
+
kernExample?: string;
|
|
57
|
+
expectedOutput?: string;
|
|
58
|
+
codegenSource?: string;
|
|
59
|
+
};
|
|
37
60
|
/**
|
|
38
61
|
* Estimate token count for a string (rough: 1 token ≈ 4 chars).
|
|
39
62
|
*/
|
package/dist/llm-discovery.js
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* The actual LLM call is handled by llm-provider.ts.
|
|
9
9
|
*/
|
|
10
10
|
import { readdirSync, statSync } from 'fs';
|
|
11
|
-
import {
|
|
11
|
+
import { dirname, join, resolve } from 'path';
|
|
12
12
|
// ── File Selection ───────────────────────────────────────────────────────
|
|
13
13
|
/**
|
|
14
14
|
* Select representative TypeScript files, clustered by directory.
|
|
@@ -29,7 +29,7 @@ export function selectRepresentativeFiles(filePaths, maxPerCluster = 3, maxBatch
|
|
|
29
29
|
}
|
|
30
30
|
// Sample from each cluster: pick diverse files (by size variance)
|
|
31
31
|
const sampled = [];
|
|
32
|
-
for (const [
|
|
32
|
+
for (const [_dir, files] of clusters) {
|
|
33
33
|
// Sort by file size (descending) to get diverse samples
|
|
34
34
|
const sorted = [...files].sort((a, b) => {
|
|
35
35
|
try {
|
|
@@ -96,7 +96,9 @@ export function collectTsFiles(dir, recursive = true) {
|
|
|
96
96
|
* Build the LLM discovery prompt for a batch of files.
|
|
97
97
|
*/
|
|
98
98
|
export function buildDiscoveryPrompt(files, nodeTypes, evolvedKeywords = []) {
|
|
99
|
-
const fileBlocks = files
|
|
99
|
+
const fileBlocks = files
|
|
100
|
+
.map((f) => `### ${f.path}\n\`\`\`typescript\n${truncate(f.content, 3000)}\n\`\`\``)
|
|
101
|
+
.join('\n\n');
|
|
100
102
|
const existingNodes = [...nodeTypes, ...evolvedKeywords].join(', ');
|
|
101
103
|
return `You are analyzing TypeScript source files to find repeating structural patterns that a language called KERN cannot yet express.
|
|
102
104
|
|
|
@@ -200,7 +202,11 @@ function normalizeProposal(raw, evolveRunId) {
|
|
|
200
202
|
if (!keyword || typeof keyword !== 'string')
|
|
201
203
|
return null;
|
|
202
204
|
// Normalize keyword to lowercase with hyphens
|
|
203
|
-
const normalizedKeyword = keyword
|
|
205
|
+
const normalizedKeyword = keyword
|
|
206
|
+
.toLowerCase()
|
|
207
|
+
.replace(/[^a-z0-9-]/g, '-')
|
|
208
|
+
.replace(/-+/g, '-')
|
|
209
|
+
.replace(/^-|-$/g, '');
|
|
204
210
|
if (!normalizedKeyword)
|
|
205
211
|
return null;
|
|
206
212
|
const reason = raw.reason || {};
|
|
@@ -234,18 +240,72 @@ function normalizeProps(raw) {
|
|
|
234
240
|
return [];
|
|
235
241
|
return raw
|
|
236
242
|
.filter((p) => p !== null && typeof p === 'object')
|
|
237
|
-
.map(p => ({
|
|
243
|
+
.map((p) => ({
|
|
238
244
|
name: p.name || 'unknown',
|
|
239
|
-
type: (['string', 'boolean', 'number', 'expression'].includes(p.type)
|
|
245
|
+
type: (['string', 'boolean', 'number', 'expression'].includes(p.type)
|
|
246
|
+
? p.type
|
|
247
|
+
: 'string'),
|
|
240
248
|
required: p.required === true,
|
|
241
249
|
description: p.description || '',
|
|
242
250
|
}));
|
|
243
251
|
}
|
|
252
|
+
// ── LLM JSON Extraction ─────────────────────────────────────────────────
|
|
253
|
+
/**
|
|
254
|
+
* Extract and parse a JSON object from an LLM response.
|
|
255
|
+
* Handles markdown fences, preamble text, and validates the result is a plain object.
|
|
256
|
+
* Returns null if extraction or parsing fails.
|
|
257
|
+
*/
|
|
258
|
+
export function parseLLMJsonObject(response) {
|
|
259
|
+
let json = response.trim();
|
|
260
|
+
const fenceMatch = json.match(/```(?:json)?\s*\n?([\s\S]*?)```/);
|
|
261
|
+
if (fenceMatch)
|
|
262
|
+
json = fenceMatch[1].trim();
|
|
263
|
+
const objStart = json.indexOf('{');
|
|
264
|
+
const objEnd = json.lastIndexOf('}');
|
|
265
|
+
if (objStart === -1 || objEnd <= objStart)
|
|
266
|
+
return null;
|
|
267
|
+
json = json.slice(objStart, objEnd + 1);
|
|
268
|
+
let parsed;
|
|
269
|
+
try {
|
|
270
|
+
parsed = JSON.parse(json);
|
|
271
|
+
}
|
|
272
|
+
catch {
|
|
273
|
+
return null;
|
|
274
|
+
}
|
|
275
|
+
if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed))
|
|
276
|
+
return null;
|
|
277
|
+
return parsed;
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Validate and extract a backfill LLM response.
|
|
281
|
+
* Returns only known fields with correct types, or null if codegenSource is missing.
|
|
282
|
+
*/
|
|
283
|
+
export function validateBackfillResponse(parsed) {
|
|
284
|
+
const codegenSource = typeof parsed.codegenSource === 'string' ? parsed.codegenSource : undefined;
|
|
285
|
+
if (!codegenSource)
|
|
286
|
+
return null;
|
|
287
|
+
const expectedOutput = typeof parsed.expectedOutput === 'string' ? parsed.expectedOutput : undefined;
|
|
288
|
+
return { codegenSource, expectedOutput };
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* Validate and extract retry response fields for an evolve proposal.
|
|
292
|
+
* Returns only known string fields that are present.
|
|
293
|
+
*/
|
|
294
|
+
export function validateRetryResponse(parsed) {
|
|
295
|
+
const result = {};
|
|
296
|
+
if (typeof parsed.kernExample === 'string')
|
|
297
|
+
result.kernExample = parsed.kernExample;
|
|
298
|
+
if (typeof parsed.expectedOutput === 'string')
|
|
299
|
+
result.expectedOutput = parsed.expectedOutput;
|
|
300
|
+
if (typeof parsed.codegenSource === 'string')
|
|
301
|
+
result.codegenSource = parsed.codegenSource;
|
|
302
|
+
return result;
|
|
303
|
+
}
|
|
244
304
|
// ── Utility ──────────────────────────────────────────────────────────────
|
|
245
305
|
function truncate(content, maxChars) {
|
|
246
306
|
if (content.length <= maxChars)
|
|
247
307
|
return content;
|
|
248
|
-
return content.slice(0, maxChars)
|
|
308
|
+
return `${content.slice(0, maxChars)}\n// ... truncated ...`;
|
|
249
309
|
}
|
|
250
310
|
/**
|
|
251
311
|
* Estimate token count for a string (rough: 1 token ≈ 4 chars).
|
|
@@ -312,7 +372,7 @@ export function buildBackfillPrompt(keyword, definition, target) {
|
|
|
312
372
|
Target: ${target}
|
|
313
373
|
|
|
314
374
|
## Props
|
|
315
|
-
${definition.props.map(p => `- ${p.name} (${p.type}${p.required ? ', required' : ''}): ${p.description}`).join('\n')}
|
|
375
|
+
${definition.props.map((p) => `- ${p.name} (${p.type}${p.required ? ', required' : ''}): ${p.description}`).join('\n')}
|
|
316
376
|
|
|
317
377
|
## Child Types
|
|
318
378
|
${definition.childTypes.join(', ') || '(none)'}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm-discovery.js","sourceRoot":"","sources":["../src/llm-discovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAG9C,4EAA4E;AAE5E;;;;;;;GAOG;AACH,MAAM,UAAU,yBAAyB,
|
|
1
|
+
{"version":3,"file":"llm-discovery.js","sourceRoot":"","sources":["../src/llm-discovery.ts"],"names":[],"mappings":"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"}
|
package/dist/llm-provider.js
CHANGED
|
@@ -55,7 +55,7 @@ function createOpenAIProvider(options) {
|
|
|
55
55
|
const text = await response.text();
|
|
56
56
|
throw new Error(`OpenAI API error ${response.status}: ${text}`);
|
|
57
57
|
}
|
|
58
|
-
const data = await response.json();
|
|
58
|
+
const data = (await response.json());
|
|
59
59
|
return data.choices[0]?.message?.content || '';
|
|
60
60
|
},
|
|
61
61
|
};
|
|
@@ -86,7 +86,7 @@ function createAnthropicProvider(options) {
|
|
|
86
86
|
const text = await response.text();
|
|
87
87
|
throw new Error(`Anthropic API error ${response.status}: ${text}`);
|
|
88
88
|
}
|
|
89
|
-
const data = await response.json();
|
|
89
|
+
const data = (await response.json());
|
|
90
90
|
return data.content[0]?.text || '';
|
|
91
91
|
},
|
|
92
92
|
};
|
|
@@ -110,7 +110,7 @@ function createOllamaProvider(options) {
|
|
|
110
110
|
const text = await response.text();
|
|
111
111
|
throw new Error(`Ollama error ${response.status}: ${text}`);
|
|
112
112
|
}
|
|
113
|
-
const data = await response.json();
|
|
113
|
+
const data = (await response.json());
|
|
114
114
|
return data.response || '';
|
|
115
115
|
},
|
|
116
116
|
};
|
|
@@ -137,7 +137,7 @@ export class TokenBudget {
|
|
|
137
137
|
return this.used;
|
|
138
138
|
}
|
|
139
139
|
toString() {
|
|
140
|
-
return `${this.used}/${this.limit} tokens (${Math.round(this.used / this.limit * 100)}%)`;
|
|
140
|
+
return `${this.used}/${this.limit} tokens (${Math.round((this.used / this.limit) * 100)}%)`;
|
|
141
141
|
}
|
|
142
142
|
}
|
|
143
143
|
//# sourceMappingURL=llm-provider.js.map
|
package/dist/llm-provider.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm-provider.js","sourceRoot":"","sources":["../src/llm-provider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAeH;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,UAA8B,EAAE;IAChE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,cAAc,EAAE,CAAC;IAEtD,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,QAAQ;YACX,OAAO,oBAAoB,CAAC,OAAO,CAAC,CAAC;QACvC,KAAK,WAAW;YACd,OAAO,uBAAuB,CAAC,OAAO,CAAC,CAAC;QAC1C,KAAK,QAAQ;YACX,OAAO,oBAAoB,CAAC,OAAO,CAAC,CAAC;QACvC;YACE,MAAM,IAAI,KAAK,
|
|
1
|
+
{"version":3,"file":"llm-provider.js","sourceRoot":"","sources":["../src/llm-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-governance.js","sourceRoot":"","sources":["../src/node-governance.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,MAAM,aAAa,GAAG,CAAC,CAAC;AACxB,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAC/B,MAAM,mBAAmB,GAAG,CAAC,CAAC,CAAC,oBAAoB;AACnD,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAE7B;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,QAAsB;IACnD,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,IAAI,QAAQ,CAAC,SAAS,GAAG,aAAa,EAAE,CAAC;QACvC,OAAO,CAAC,IAAI,CAAC,aAAa,QAAQ,CAAC,SAAS,MAAM,aAAa,wBAAwB,CAAC,CAAC;IAC3F,CAAC;IAED,IAAI,QAAQ,CAAC,mBAAmB,CAAC,OAAO,GAAG,kBAAkB,EAAE,CAAC;QAC9D,OAAO,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"node-governance.js","sourceRoot":"","sources":["../src/node-governance.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,MAAM,aAAa,GAAG,CAAC,CAAC;AACxB,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAC/B,MAAM,mBAAmB,GAAG,CAAC,CAAC,CAAC,oBAAoB;AACnD,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAE7B;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,QAAsB;IACnD,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,IAAI,QAAQ,CAAC,SAAS,GAAG,aAAa,EAAE,CAAC;QACvC,OAAO,CAAC,IAAI,CAAC,aAAa,QAAQ,CAAC,SAAS,MAAM,aAAa,wBAAwB,CAAC,CAAC;IAC3F,CAAC;IAED,IAAI,QAAQ,CAAC,mBAAmB,CAAC,OAAO,GAAG,kBAAkB,EAAE,CAAC;QAC9D,OAAO,CAAC,IAAI,CACV,kBAAkB,QAAQ,CAAC,mBAAmB,CAAC,OAAO,MAAM,kBAAkB,2BAA2B,CAC1G,CAAC;IACJ,CAAC;IAED,IAAI,QAAQ,CAAC,YAAY,GAAG,iBAAiB,EAAE,CAAC;QAC9C,OAAO,CAAC,IAAI,CAAC,WAAW,QAAQ,CAAC,YAAY,MAAM,iBAAiB,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED,wEAAwE;IACxE,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC;IAC7D,IAAI,WAAW,GAAG,CAAC,IAAI,WAAW,GAAG,mBAAmB,EAAE,CAAC;QACzD,OAAO,CAAC,IAAI,CAAC,mBAAmB,WAAW,IAAI,mBAAmB,EAAE,CAAC,CAAC;IACxE,CAAC;IAED,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,MAAM,KAAK,CAAC;QAC1B,OAAO;KACR,CAAC;AACJ,CAAC;AAED,6CAA6C;AAC7C,MAAM,UAAU,uBAAuB;IACrC,OAAO;QACL,YAAY,EAAE,aAAa;QAC3B,iBAAiB,EAAE,kBAAkB;QACrC,iBAAiB,EAAE,mBAAmB;QACtC,eAAe,EAAE,iBAAiB;KACnC,CAAC;AACJ,CAAC"}
|
package/dist/node-proposer.d.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Deterministic: no LLM needed (--llm is optional enhancement).
|
|
5
5
|
* Maps detected structural patterns to proposed KERN node types.
|
|
6
6
|
*/
|
|
7
|
-
import type { AnalyzedPattern,
|
|
7
|
+
import type { AnalyzedPattern, ExpressibilityScore, NodeProposal } from './types.js';
|
|
8
8
|
export declare function resetNodeProposalIds(): void;
|
|
9
9
|
/**
|
|
10
10
|
* Derive a KERN node name from a structural pattern's detector ID.
|
|
@@ -13,11 +13,11 @@ export declare function deriveNodeName(pattern: AnalyzedPattern): string;
|
|
|
13
13
|
/**
|
|
14
14
|
* Generate example KERN syntax for a proposed node.
|
|
15
15
|
*/
|
|
16
|
-
export declare function generateKernSyntaxExample(nodeName: string,
|
|
16
|
+
export declare function generateKernSyntaxExample(nodeName: string, _pattern: AnalyzedPattern): string;
|
|
17
17
|
/**
|
|
18
18
|
* Generate a codegen stub for a proposed node.
|
|
19
19
|
*/
|
|
20
|
-
export declare function generateCodegenStub(nodeName: string,
|
|
20
|
+
export declare function generateCodegenStub(nodeName: string, _pattern: AnalyzedPattern): string;
|
|
21
21
|
/**
|
|
22
22
|
* Propose new IR nodes from analyzed structural patterns.
|
|
23
23
|
*
|
package/dist/node-proposer.js
CHANGED
|
@@ -35,15 +35,13 @@ export function deriveNodeName(pattern) {
|
|
|
35
35
|
}
|
|
36
36
|
}
|
|
37
37
|
// Fallback: derive from template name
|
|
38
|
-
const cleaned = pattern.templateName
|
|
39
|
-
.replace(/^structural-?/, '')
|
|
40
|
-
.replace(/-\w+$/, '');
|
|
38
|
+
const cleaned = pattern.templateName.replace(/^structural-?/, '').replace(/-\w+$/, '');
|
|
41
39
|
return cleaned || 'unknown';
|
|
42
40
|
}
|
|
43
41
|
/**
|
|
44
42
|
* Generate example KERN syntax for a proposed node.
|
|
45
43
|
*/
|
|
46
|
-
export function generateKernSyntaxExample(nodeName,
|
|
44
|
+
export function generateKernSyntaxExample(nodeName, _pattern) {
|
|
47
45
|
const examples = {
|
|
48
46
|
model: [
|
|
49
47
|
`model name=Example table=examples`,
|
|
@@ -65,10 +63,7 @@ export function generateKernSyntaxExample(nodeName, pattern) {
|
|
|
65
63
|
` entry name=item key="ex:{id}"`,
|
|
66
64
|
` strategy read-through`,
|
|
67
65
|
].join('\n'),
|
|
68
|
-
conditional: [
|
|
69
|
-
`conditional if=isEnabled`,
|
|
70
|
-
` text value="Feature enabled"`,
|
|
71
|
-
].join('\n'),
|
|
66
|
+
conditional: [`conditional if=isEnabled`, ` text value="Feature enabled"`].join('\n'),
|
|
72
67
|
select: [
|
|
73
68
|
`select name=status value=current placeholder="Choose"`,
|
|
74
69
|
` option value=active label="Active"`,
|
|
@@ -80,7 +75,7 @@ export function generateKernSyntaxExample(nodeName, pattern) {
|
|
|
80
75
|
/**
|
|
81
76
|
* Generate a codegen stub for a proposed node.
|
|
82
77
|
*/
|
|
83
|
-
export function generateCodegenStub(nodeName,
|
|
78
|
+
export function generateCodegenStub(nodeName, _pattern) {
|
|
84
79
|
const fnName = `generate${nodeName[0].toUpperCase()}${nodeName.slice(1)}`;
|
|
85
80
|
return [
|
|
86
81
|
`export function ${fnName}(node: IRNode): string[] {`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-proposer.js","sourceRoot":"","sources":["../src/node-proposer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,IAAI,oBAAoB,GAAG,CAAC,CAAC;AAE7B,SAAS,kBAAkB;IACzB,OAAO,iBAAiB,EAAE,oBAAoB,EAAE,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,oBAAoB,GAAG,CAAC,CAAC;AAC3B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,OAAwB;IACrD,oFAAoF;IACpF,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,OAAO,CAAC,YAAY,CAAC;IAExG,MAAM,OAAO,GAA2B;QACtC,kBAAkB,EAAE,OAAO;QAC3B,uBAAuB,EAAE,YAAY;QACrC,uBAAuB,EAAE,YAAY;QACrC,kBAAkB,EAAE,OAAO;QAC3B,wBAAwB,EAAE,aAAa;QACvC,mBAAmB,EAAE,QAAQ;KAC9B,CAAC;IAEF,uCAAuC;IACvC,IAAI,OAAO,CAAC,UAAU,CAAC;QAAE,OAAO,OAAO,CAAC,UAAU,CAAC,CAAC;IAEpD,kCAAkC;IAClC,KAAK,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACrD,IAAI,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC;YACrE,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,sCAAsC;IACtC,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY
|
|
1
|
+
{"version":3,"file":"node-proposer.js","sourceRoot":"","sources":["../src/node-proposer.ts"],"names":[],"mappings":"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"}
|
package/dist/node-validator.js
CHANGED
|
@@ -33,7 +33,7 @@ function validateKernSyntax(syntax, errors) {
|
|
|
33
33
|
return false;
|
|
34
34
|
}
|
|
35
35
|
// Check the syntax has proper indentation structure
|
|
36
|
-
const lines = syntax.split('\n').filter(l => l.trim().length > 0);
|
|
36
|
+
const lines = syntax.split('\n').filter((l) => l.trim().length > 0);
|
|
37
37
|
if (lines.length === 0) {
|
|
38
38
|
errors.push('KERN syntax has no non-empty lines');
|
|
39
39
|
return false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-validator.js","sourceRoot":"","sources":["../src/node-validator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAsB;IACzD,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,0DAA0D;IAC1D,MAAM,OAAO,GAAG,kBAAkB,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAEhE,+CAA+C;IAC/C,MAAM,SAAS,GAAG,mBAAmB,CAAC,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAEvF,2BAA2B;IAC3B,MAAM,cAAc,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAErD,OAAO;QACL,OAAO;QACP,SAAS;QACT,cAAc;QACd,MAAM;KACP,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAc,EAAE,MAAgB;IAC1D,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1C,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACpC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,oDAAoD;IACpD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"node-validator.js","sourceRoot":"","sources":["../src/node-validator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAsB;IACzD,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,0DAA0D;IAC1D,MAAM,OAAO,GAAG,kBAAkB,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAEhE,+CAA+C;IAC/C,MAAM,SAAS,GAAG,mBAAmB,CAAC,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAEvF,2BAA2B;IAC3B,MAAM,cAAc,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAErD,OAAO;QACL,OAAO;QACP,SAAS;QACT,cAAc;QACd,MAAM;KACP,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAc,EAAE,MAAgB;IAC1D,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1C,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACpC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,oDAAoD;IACpD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACpE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;QAClD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,yDAAyD;IACzD,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;IACvC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QACjC,MAAM,CAAC,IAAI,CAAC,2DAA2D,SAAS,GAAG,CAAC,CAAC;QACrF,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAY,EAAE,QAAgB,EAAE,MAAgB;IAC3E,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACrC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,0CAA0C;IAC1C,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;QACxD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,oCAAoC;IACpC,MAAM,UAAU,GAAG,WAAW,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9E,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC,gDAAgD,UAAU,EAAE,CAAC,CAAC;QAC1E,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,mBAAmB,CAAC,QAAsB;IACjD,+CAA+C;IAC/C,qCAAqC;IACrC,MAAM,YAAY,GAAG,EAAE,CAAC,CAAC,6BAA6B;IACtD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC;IACvD,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC;AAC1C,CAAC"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Groups gaps by structural hash, deduplicates, scores, and selects
|
|
5
5
|
* representative examples for template generation.
|
|
6
6
|
*/
|
|
7
|
-
import type {
|
|
7
|
+
import type { AnalyzedPattern, PatternGap, QualityThresholds } from './types.js';
|
|
8
8
|
/**
|
|
9
9
|
* Compute a structural hash for a pattern gap.
|
|
10
10
|
*
|
package/dist/pattern-analyzer.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* representative examples for template generation.
|
|
6
6
|
*/
|
|
7
7
|
import { createHash } from 'crypto';
|
|
8
|
-
import {
|
|
8
|
+
import { DEFAULT_THRESHOLDS, passesThresholds, scorePattern } from './quality-scorer.js';
|
|
9
9
|
/**
|
|
10
10
|
* Compute a structural hash for a pattern gap.
|
|
11
11
|
*
|
|
@@ -15,7 +15,7 @@ import { scorePattern, passesThresholds, DEFAULT_THRESHOLDS } from './quality-sc
|
|
|
15
15
|
export function computeStructuralHash(gap) {
|
|
16
16
|
// Normalize: replace variable values with slot types
|
|
17
17
|
const paramSignature = gap.extractedParams
|
|
18
|
-
.map(p => `${p.name}:${p.slotType}`)
|
|
18
|
+
.map((p) => `${p.name}:${p.slotType}`)
|
|
19
19
|
.sort()
|
|
20
20
|
.join('|');
|
|
21
21
|
// The hash key: detector + pattern structure (not values)
|
|
@@ -31,7 +31,7 @@ export function deriveTemplateName(gap) {
|
|
|
31
31
|
// Start with detector ID which is already descriptive
|
|
32
32
|
const base = gap.detectorId;
|
|
33
33
|
// Look for a key identifier param (the main "name" param)
|
|
34
|
-
const nameParam = gap.extractedParams.find(p => p.slotType === 'identifier' && !p.optional);
|
|
34
|
+
const nameParam = gap.extractedParams.find((p) => p.slotType === 'identifier' && !p.optional);
|
|
35
35
|
// If there's a clear naming pattern, use it
|
|
36
36
|
if (nameParam) {
|
|
37
37
|
// e.g., react-hook-form + useForm → rhf-useform
|
|
@@ -45,16 +45,16 @@ function abbreviateLibrary(name) {
|
|
|
45
45
|
// Common abbreviations
|
|
46
46
|
const abbrevs = {
|
|
47
47
|
'React Hook Form': 'rhf',
|
|
48
|
-
|
|
49
|
-
|
|
48
|
+
Formik: 'formik',
|
|
49
|
+
Recoil: 'recoil',
|
|
50
50
|
'Redux Toolkit': 'rtk',
|
|
51
51
|
'Framer Motion': 'motion',
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
52
|
+
Axios: 'axios',
|
|
53
|
+
Ky: 'ky',
|
|
54
|
+
Yup: 'yup',
|
|
55
|
+
Valibot: 'valibot',
|
|
56
56
|
'Express Middleware': 'express-mw',
|
|
57
|
-
|
|
57
|
+
VueUse: 'vueuse',
|
|
58
58
|
'Testing Library': 'rtl',
|
|
59
59
|
};
|
|
60
60
|
return abbrevs[name] || name.toLowerCase().replace(/\s+/g, '-');
|
|
@@ -64,24 +64,26 @@ function abbreviateLibrary(name) {
|
|
|
64
64
|
*/
|
|
65
65
|
function extractImports(gap) {
|
|
66
66
|
// The anchor import tells us what to import
|
|
67
|
-
return [
|
|
67
|
+
return [
|
|
68
|
+
{
|
|
68
69
|
from: gap.anchorImport.includes('/') ? gap.anchorImport : guessImportSource(gap),
|
|
69
70
|
names: [gap.anchorImport],
|
|
70
|
-
}
|
|
71
|
+
},
|
|
72
|
+
];
|
|
71
73
|
}
|
|
72
74
|
function guessImportSource(gap) {
|
|
73
75
|
// Map library names to package names
|
|
74
76
|
const packageMap = {
|
|
75
77
|
'React Hook Form': 'react-hook-form',
|
|
76
|
-
|
|
77
|
-
|
|
78
|
+
Formik: 'formik',
|
|
79
|
+
Recoil: 'recoil',
|
|
78
80
|
'Redux Toolkit': '@reduxjs/toolkit',
|
|
79
81
|
'Framer Motion': 'framer-motion',
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
82
|
+
Axios: 'axios',
|
|
83
|
+
Ky: 'ky',
|
|
84
|
+
Yup: 'yup',
|
|
85
|
+
Valibot: 'valibot',
|
|
86
|
+
VueUse: '@vueuse/core',
|
|
85
87
|
'Testing Library': '@testing-library/react',
|
|
86
88
|
};
|
|
87
89
|
return packageMap[gap.libraryName] || gap.libraryName.toLowerCase();
|
|
@@ -135,7 +137,7 @@ function mergeParams(gaps) {
|
|
|
135
137
|
* Analyze structural gaps separately for v3 node proposals.
|
|
136
138
|
*/
|
|
137
139
|
export function analyzeStructuralPatterns(gaps, thresholds = DEFAULT_THRESHOLDS) {
|
|
138
|
-
const structuralGaps = gaps.filter(g => g.libraryName === 'structural');
|
|
140
|
+
const structuralGaps = gaps.filter((g) => g.libraryName === 'structural');
|
|
139
141
|
return groupAndScore(structuralGaps, thresholds);
|
|
140
142
|
}
|
|
141
143
|
/**
|
|
@@ -143,7 +145,7 @@ export function analyzeStructuralPatterns(gaps, thresholds = DEFAULT_THRESHOLDS)
|
|
|
143
145
|
*/
|
|
144
146
|
export function analyzePatterns(gaps, thresholds = DEFAULT_THRESHOLDS) {
|
|
145
147
|
// Structural gaps are findings, not template proposal candidates — filter them out
|
|
146
|
-
const templateGaps = gaps.filter(g => g.libraryName !== 'structural');
|
|
148
|
+
const templateGaps = gaps.filter((g) => g.libraryName !== 'structural');
|
|
147
149
|
return groupAndScore(templateGaps, thresholds);
|
|
148
150
|
}
|
|
149
151
|
function groupAndScore(gaps, thresholds) {
|
|
@@ -156,7 +158,7 @@ function groupAndScore(gaps, thresholds) {
|
|
|
156
158
|
groups.set(key, group);
|
|
157
159
|
}
|
|
158
160
|
const patterns = [];
|
|
159
|
-
for (const [
|
|
161
|
+
for (const [_key, groupGaps] of groups) {
|
|
160
162
|
const representative = groupGaps[0];
|
|
161
163
|
const hash = computeStructuralHash(representative);
|
|
162
164
|
const qualityScore = scorePattern(groupGaps, thresholds);
|
|
@@ -172,7 +174,7 @@ function groupAndScore(gaps, thresholds) {
|
|
|
172
174
|
representativeSnippet: representative.snippet,
|
|
173
175
|
goldenExample: buildGoldenExample(representative),
|
|
174
176
|
imports: extractImports(representative),
|
|
175
|
-
gapIds: groupGaps.map(g => g.id),
|
|
177
|
+
gapIds: groupGaps.map((g) => g.id),
|
|
176
178
|
});
|
|
177
179
|
}
|
|
178
180
|
patterns.sort((a, b) => b.qualityScore.overallScore - a.qualityScore.overallScore);
|