@kernlang/cli 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.
- package/LICENSE +17 -0
- package/dist/cli.js +32 -2435
- package/dist/cli.js.map +1 -1
- package/dist/commands/compile.d.ts +1 -0
- package/dist/commands/compile.js +193 -0
- package/dist/commands/compile.js.map +1 -0
- package/dist/commands/confidence.d.ts +1 -0
- package/dist/commands/confidence.js +105 -0
- package/dist/commands/confidence.js.map +1 -0
- package/dist/commands/dev.d.ts +1 -0
- package/dist/commands/dev.js +123 -0
- package/dist/commands/dev.js.map +1 -0
- package/dist/commands/evolve/backfill.d.ts +1 -0
- package/dist/commands/evolve/backfill.js +88 -0
- package/dist/commands/evolve/backfill.js.map +1 -0
- package/dist/commands/evolve/discover.d.ts +1 -0
- package/dist/commands/evolve/discover.js +158 -0
- package/dist/commands/evolve/discover.js.map +1 -0
- package/dist/commands/evolve/index.d.ts +1 -0
- package/dist/commands/evolve/index.js +40 -0
- package/dist/commands/evolve/index.js.map +1 -0
- package/dist/commands/evolve/lifecycle.d.ts +8 -0
- package/dist/commands/evolve/lifecycle.js +190 -0
- package/dist/commands/evolve/lifecycle.js.map +1 -0
- package/dist/commands/evolve/main.d.ts +1 -0
- package/dist/commands/evolve/main.js +76 -0
- package/dist/commands/evolve/main.js.map +1 -0
- package/dist/commands/evolve/review-v4.d.ts +1 -0
- package/dist/commands/evolve/review-v4.js +181 -0
- package/dist/commands/evolve/review-v4.js.map +1 -0
- package/dist/commands/evolve/review.d.ts +1 -0
- package/dist/commands/evolve/review.js +63 -0
- package/dist/commands/evolve/review.js.map +1 -0
- package/dist/commands/review.d.ts +1 -0
- package/dist/commands/review.js +881 -0
- package/dist/commands/review.js.map +1 -0
- package/dist/commands/scan.d.ts +2 -0
- package/dist/commands/scan.js +89 -0
- package/dist/commands/scan.js.map +1 -0
- package/dist/commands/transpile.d.ts +2 -0
- package/dist/commands/transpile.js +286 -0
- package/dist/commands/transpile.js.map +1 -0
- package/dist/shared.d.ts +20 -0
- package/dist/shared.js +270 -0
- package/dist/shared.js.map +1 -0
- package/dist/transpiler-cli.d.ts +1 -1
- package/dist/transpiler-cli.js +10 -9
- package/dist/transpiler-cli.js.map +1 -1
- package/package.json +14 -13
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import { NODE_TYPES } from '@kernlang/core';
|
|
2
|
+
import { detectCollisions, formatGoldenTestResults, promoteNode, pruneNodes, readEvolvedManifest, rebuildEvolvedManifest, renameEvolvedNode, restoreNode, rollbackNode, runGoldenTests, } from '@kernlang/evolve';
|
|
3
|
+
import { relative } from 'path';
|
|
4
|
+
import { hasFlag, parseFlag } from '../../shared.js';
|
|
5
|
+
export function runEvolveTest() {
|
|
6
|
+
console.log('\n KERN evolve:test — golden test runner\n');
|
|
7
|
+
const results = runGoldenTests();
|
|
8
|
+
console.log(formatGoldenTestResults(results));
|
|
9
|
+
const failed = results.filter((r) => !r.pass).length;
|
|
10
|
+
console.log('');
|
|
11
|
+
process.exit(failed > 0 ? 1 : 0);
|
|
12
|
+
}
|
|
13
|
+
export function runEvolveRollback(args) {
|
|
14
|
+
const keyword = args[1];
|
|
15
|
+
if (!keyword || keyword.startsWith('--')) {
|
|
16
|
+
console.error('Usage: kern evolve:rollback <keyword> [--force]');
|
|
17
|
+
process.exit(1);
|
|
18
|
+
}
|
|
19
|
+
const force = hasFlag(args, '--force');
|
|
20
|
+
const result = rollbackNode(keyword, process.cwd(), force);
|
|
21
|
+
if (result.success) {
|
|
22
|
+
console.log(` Rolled back '${keyword}' (moved to .trash/).`);
|
|
23
|
+
console.log(` Restore with: kern evolve:restore ${keyword}`);
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
console.error(` Failed: ${result.error}`);
|
|
27
|
+
if (result.usageFiles) {
|
|
28
|
+
console.error(' Used in:');
|
|
29
|
+
for (const f of result.usageFiles.slice(0, 5)) {
|
|
30
|
+
console.error(` ${relative(process.cwd(), f)}`);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
process.exit(1);
|
|
34
|
+
}
|
|
35
|
+
process.exit(0);
|
|
36
|
+
}
|
|
37
|
+
export function runEvolveRestore(args) {
|
|
38
|
+
const keyword = args[1];
|
|
39
|
+
if (!keyword) {
|
|
40
|
+
console.error('Usage: kern evolve:restore <keyword>');
|
|
41
|
+
process.exit(1);
|
|
42
|
+
}
|
|
43
|
+
const result = restoreNode(keyword);
|
|
44
|
+
if (result.success) {
|
|
45
|
+
console.log(` Restored '${keyword}'.`);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
console.error(` Failed: ${result.error}`);
|
|
49
|
+
process.exit(1);
|
|
50
|
+
}
|
|
51
|
+
process.exit(0);
|
|
52
|
+
}
|
|
53
|
+
export function runEvolveList() {
|
|
54
|
+
const manifest = readEvolvedManifest();
|
|
55
|
+
if (!manifest || Object.keys(manifest.nodes).length === 0) {
|
|
56
|
+
console.log("\n No evolved nodes graduated. Run 'kern evolve:discover' to start.\n");
|
|
57
|
+
process.exit(0);
|
|
58
|
+
}
|
|
59
|
+
console.log(`\n KERN evolved nodes — ${Object.keys(manifest.nodes).length} graduated\n`);
|
|
60
|
+
for (const [keyword, entry] of Object.entries(manifest.nodes)) {
|
|
61
|
+
console.log(` ${keyword} — ${entry.displayName} (graduated ${entry.graduatedAt.split('T')[0]} by ${entry.graduatedBy})`);
|
|
62
|
+
}
|
|
63
|
+
console.log('');
|
|
64
|
+
process.exit(0);
|
|
65
|
+
}
|
|
66
|
+
export function runEvolvePromote(args) {
|
|
67
|
+
const promoteKeyword = args[1];
|
|
68
|
+
if (!promoteKeyword || promoteKeyword.startsWith('--')) {
|
|
69
|
+
console.error('Usage: kern evolve:promote <keyword>');
|
|
70
|
+
console.error(' Reads codegen from .kern/evolved/<keyword>/ and outputs what to add to core.');
|
|
71
|
+
process.exit(1);
|
|
72
|
+
}
|
|
73
|
+
const result = promoteNode(promoteKeyword);
|
|
74
|
+
if (!result.success) {
|
|
75
|
+
console.error(` Failed: ${result.error}`);
|
|
76
|
+
process.exit(1);
|
|
77
|
+
}
|
|
78
|
+
const fnName = 'generate' +
|
|
79
|
+
promoteKeyword
|
|
80
|
+
.split('-')
|
|
81
|
+
.map((w) => w[0].toUpperCase() + w.slice(1))
|
|
82
|
+
.join('');
|
|
83
|
+
console.log(`\n KERN evolve:promote — ${promoteKeyword}\n`);
|
|
84
|
+
console.log(' To promote this node to core, apply these changes:\n');
|
|
85
|
+
console.log(` 1. Add '${promoteKeyword}' to NODE_TYPES in packages/core/src/spec.ts`);
|
|
86
|
+
console.log(` 2. Create packages/core/src/generators/${fnName}.ts with:`);
|
|
87
|
+
console.log(` ──────────────────────────────`);
|
|
88
|
+
for (const line of (result.codegenTs || '').split('\n').slice(0, 20)) {
|
|
89
|
+
console.log(` ${line}`);
|
|
90
|
+
}
|
|
91
|
+
if ((result.codegenTs || '').split('\n').length > 20) {
|
|
92
|
+
console.log(` ... (${(result.codegenTs || '').split('\n').length - 20} more lines)`);
|
|
93
|
+
}
|
|
94
|
+
console.log(` ──────────────────────────────`);
|
|
95
|
+
console.log(` 3. Add case '${promoteKeyword}': return ${fnName}(node); to generateCoreNode() in codegen-core.ts`);
|
|
96
|
+
if (result.goldenKern) {
|
|
97
|
+
console.log(` 4. Move golden test to packages/core/tests/`);
|
|
98
|
+
}
|
|
99
|
+
console.log(` 5. Run: kern evolve:rollback ${promoteKeyword} --force`);
|
|
100
|
+
console.log('');
|
|
101
|
+
process.exit(0);
|
|
102
|
+
}
|
|
103
|
+
export function runEvolvePrune(args) {
|
|
104
|
+
const dryRun = hasFlag(args, '--dry-run');
|
|
105
|
+
const daysArg = parseFlag(args, '--days');
|
|
106
|
+
const thresholdDays = daysArg ? Number(daysArg) : 90;
|
|
107
|
+
console.log(`\n KERN evolve:prune — removing unused nodes (>${thresholdDays}d)\n`);
|
|
108
|
+
const results = pruneNodes(process.cwd(), thresholdDays, dryRun);
|
|
109
|
+
if (results.length === 0) {
|
|
110
|
+
console.log(' No nodes eligible for pruning.');
|
|
111
|
+
process.exit(0);
|
|
112
|
+
}
|
|
113
|
+
for (const r of results) {
|
|
114
|
+
if (dryRun) {
|
|
115
|
+
console.log(` Would prune: ${r.keyword} (${r.daysUnused}d unused)`);
|
|
116
|
+
}
|
|
117
|
+
else if (r.pruned) {
|
|
118
|
+
console.log(` Pruned: ${r.keyword} (${r.daysUnused}d unused) → .trash/`);
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
console.log(` Failed: ${r.keyword} — ${r.error}`);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
if (dryRun) {
|
|
125
|
+
console.log(`\n Dry run — no changes made. Remove --dry-run to prune.`);
|
|
126
|
+
}
|
|
127
|
+
console.log('');
|
|
128
|
+
process.exit(0);
|
|
129
|
+
}
|
|
130
|
+
export function runEvolveMigrate(args) {
|
|
131
|
+
console.log(`\n KERN evolve:migrate — checking for keyword collisions\n`);
|
|
132
|
+
const collisions = detectCollisions(NODE_TYPES);
|
|
133
|
+
if (collisions.length === 0) {
|
|
134
|
+
console.log(' No collisions. All evolved nodes are compatible with core.');
|
|
135
|
+
process.exit(0);
|
|
136
|
+
}
|
|
137
|
+
console.log(` Found ${collisions.length} collision(s):\n`);
|
|
138
|
+
for (const c of collisions) {
|
|
139
|
+
console.log(` ${c.keyword} (graduated ${c.graduatedAt.split('T')[0]})`);
|
|
140
|
+
console.log(` This keyword now exists in core NODE_TYPES.`);
|
|
141
|
+
console.log(` Options:`);
|
|
142
|
+
console.log(` kern evolve:migrate --rename=${c.keyword} --to=<new-name>`);
|
|
143
|
+
console.log(` kern evolve:migrate --remove=${c.keyword} (core version supersedes)`);
|
|
144
|
+
console.log('');
|
|
145
|
+
}
|
|
146
|
+
const renameArg = parseFlag(args, '--rename');
|
|
147
|
+
const toArg = parseFlag(args, '--to');
|
|
148
|
+
const removeArg = parseFlag(args, '--remove');
|
|
149
|
+
if (renameArg && toArg) {
|
|
150
|
+
const result = renameEvolvedNode(renameArg, toArg);
|
|
151
|
+
if (result.success) {
|
|
152
|
+
console.log(` Renamed '${renameArg}' → '${toArg}'`);
|
|
153
|
+
console.log(` Update your .kern files: replace '${renameArg}' with '${toArg}'.`);
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
console.error(` Rename failed: ${result.error}`);
|
|
157
|
+
process.exit(1);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
if (removeArg) {
|
|
161
|
+
const result = rollbackNode(removeArg, process.cwd(), true);
|
|
162
|
+
if (result.success) {
|
|
163
|
+
console.log(` Removed evolved '${removeArg}' — core version will be used.`);
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
console.error(` Remove failed: ${result.error}`);
|
|
167
|
+
process.exit(1);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
console.log('');
|
|
171
|
+
process.exit(0);
|
|
172
|
+
}
|
|
173
|
+
export function runEvolveRebuild() {
|
|
174
|
+
console.log(`\n KERN evolve:rebuild — rebuilding manifest from disk\n`);
|
|
175
|
+
const result = rebuildEvolvedManifest();
|
|
176
|
+
if (result.errors.length > 0) {
|
|
177
|
+
for (const err of result.errors) {
|
|
178
|
+
console.log(` ⚠ ${err}`);
|
|
179
|
+
}
|
|
180
|
+
console.log('');
|
|
181
|
+
}
|
|
182
|
+
if (result.rebuilt === 0 && result.errors.length > 0) {
|
|
183
|
+
console.error(' No nodes rebuilt.');
|
|
184
|
+
process.exit(1);
|
|
185
|
+
}
|
|
186
|
+
console.log(` manifest.json rebuilt with ${result.rebuilt} node(s).`);
|
|
187
|
+
console.log('');
|
|
188
|
+
process.exit(0);
|
|
189
|
+
}
|
|
190
|
+
//# sourceMappingURL=lifecycle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../../src/commands/evolve/lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,WAAW,EACX,UAAU,EACV,mBAAmB,EACnB,sBAAsB,EACtB,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,cAAc,GACf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAErD,MAAM,UAAU,aAAa;IAC3B,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;IAC3D,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;IACjC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAc;IAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACxB,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACzC,OAAO,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACjE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;IAE3D,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,kBAAkB,OAAO,uBAAuB,CAAC,CAAC;QAC9D,OAAO,CAAC,GAAG,CAAC,uCAAuC,OAAO,EAAE,CAAC,CAAC;IAChE,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,aAAa,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QAC3C,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YACtB,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YAC5B,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;gBAC9C,OAAO,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YACrD,CAAC;QACH,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAc;IAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACxB,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IACpC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,eAAe,OAAO,IAAI,CAAC,CAAC;IAC1C,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,aAAa,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,MAAM,QAAQ,GAAG,mBAAmB,EAAE,CAAC;IAEvC,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,wEAAwE,CAAC,CAAC;QACtF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,4BAA4B,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,MAAM,cAAc,CAAC,CAAC;IAC1F,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9D,OAAO,CAAC,GAAG,CACT,KAAK,OAAO,MAAM,KAAK,CAAC,WAAW,eAAe,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,WAAW,GAAG,CAC7G,CAAC;IACJ,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAc;IAC7C,MAAM,cAAc,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/B,IAAI,CAAC,cAAc,IAAI,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACvD,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;QACtD,OAAO,CAAC,KAAK,CAAC,gFAAgF,CAAC,CAAC;QAChG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC;IAC3C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,aAAa,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GACV,UAAU;QACV,cAAc;aACX,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;aAC3C,IAAI,CAAC,EAAE,CAAC,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,6BAA6B,cAAc,IAAI,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC;IACtE,OAAO,CAAC,GAAG,CAAC,aAAa,cAAc,8CAA8C,CAAC,CAAC;IACvF,OAAO,CAAC,GAAG,CAAC,4CAA4C,MAAM,WAAW,CAAC,CAAC;IAC3E,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;IACnD,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;QACrE,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;IAC9B,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,EAAE,cAAc,CAAC,CAAC;IAC3F,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,kBAAkB,cAAc,aAAa,MAAM,kDAAkD,CAAC,CAAC;IACnH,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,kCAAkC,cAAc,UAAU,CAAC,CAAC;IACxE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAc;IAC3C,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC1C,MAAM,aAAa,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAErD,OAAO,CAAC,GAAG,CAAC,mDAAmD,aAAa,MAAM,CAAC,CAAC;IAEpF,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;IAEjE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;QAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,UAAU,WAAW,CAAC,CAAC;QACvE,CAAC;aAAM,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,UAAU,qBAAqB,CAAC,CAAC;QAC5E,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,OAAO,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAC;IAC3E,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAc;IAC7C,OAAO,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAC;IAE3E,MAAM,UAAU,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAEhD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC;QAC5E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,WAAW,UAAU,CAAC,MAAM,kBAAkB,CAAC,CAAC;IAC5D,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,eAAe,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACzE,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC,OAAO,kBAAkB,CAAC,CAAC;QAC/E,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC,OAAO,6BAA6B,CAAC,CAAC;QAC1F,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACtC,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAE9C,IAAI,SAAS,IAAI,KAAK,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,iBAAiB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QACnD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,cAAc,SAAS,QAAQ,KAAK,GAAG,CAAC,CAAC;YACrD,OAAO,CAAC,GAAG,CAAC,uCAAuC,SAAS,WAAW,KAAK,IAAI,CAAC,CAAC;QACpF,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,oBAAoB,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;QAC5D,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,sBAAsB,SAAS,gCAAgC,CAAC,CAAC;QAC/E,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,oBAAoB,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAC;IAEzE,MAAM,MAAM,GAAG,sBAAsB,EAAE,CAAC;IAExC,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrD,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,gCAAgC,MAAM,CAAC,OAAO,WAAW,CAAC,CAAC;IACvE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function runEvolve(args: string[]): Promise<void>;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { evolve, loadBuiltinDetectors } from '@kernlang/evolve';
|
|
2
|
+
import { existsSync, statSync } from 'fs';
|
|
3
|
+
import { relative, resolve } from 'path';
|
|
4
|
+
import { hasFlag, parseFlag } from '../../shared.js';
|
|
5
|
+
export async function runEvolve(args) {
|
|
6
|
+
const evolveInput = args[1];
|
|
7
|
+
if (!evolveInput || evolveInput.startsWith('--')) {
|
|
8
|
+
console.error('Usage: kern evolve <dir|file> [--recursive] [--preview] [--min-confidence=N] [--min-support=N] [--json]');
|
|
9
|
+
process.exit(1);
|
|
10
|
+
}
|
|
11
|
+
const evolvePath = resolve(evolveInput);
|
|
12
|
+
const stat = existsSync(evolvePath) ? statSync(evolvePath) : null;
|
|
13
|
+
if (!stat) {
|
|
14
|
+
console.error(`Not found: ${evolveInput}`);
|
|
15
|
+
process.exit(1);
|
|
16
|
+
}
|
|
17
|
+
const recursive = hasFlag(args, '--recursive', '-r');
|
|
18
|
+
const preview = hasFlag(args, '--preview');
|
|
19
|
+
const jsonOutput = hasFlag(args, '--json');
|
|
20
|
+
const minConfArg = parseFlag(args, '--min-confidence');
|
|
21
|
+
const minSupportArg = parseFlag(args, '--min-support');
|
|
22
|
+
const enableNodes = hasFlag(args, '--nodes', '--from-gaps');
|
|
23
|
+
const evolveOptions = {
|
|
24
|
+
recursive,
|
|
25
|
+
preview,
|
|
26
|
+
enableNodeProposals: enableNodes,
|
|
27
|
+
thresholds: {
|
|
28
|
+
...(minConfArg ? { minConfidence: Number(minConfArg) } : {}),
|
|
29
|
+
...(minSupportArg ? { minSupport: Number(minSupportArg) } : {}),
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
await loadBuiltinDetectors();
|
|
33
|
+
console.log(`\n KERN evolve — scanning for template gaps\n`);
|
|
34
|
+
console.log(` Input: ${relative(process.cwd(), evolvePath) || '.'}`);
|
|
35
|
+
console.log(` Mode: ${preview ? 'preview (no staging)' : 'detect + stage'}`);
|
|
36
|
+
console.log('');
|
|
37
|
+
const result = evolve(evolvePath, evolveOptions);
|
|
38
|
+
if (jsonOutput) {
|
|
39
|
+
console.log(JSON.stringify(result, null, 2));
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
console.log(` Gaps detected: ${result.gaps.length}`);
|
|
43
|
+
if (result.conceptSummary) {
|
|
44
|
+
console.log(` ${result.conceptSummary.formatted}`);
|
|
45
|
+
}
|
|
46
|
+
console.log(` Patterns analyzed: ${result.analyzed.length}`);
|
|
47
|
+
console.log(` Templates proposed: ${result.proposals.length}`);
|
|
48
|
+
console.log(` Validated: ${result.validated.filter((v) => v.validation.parseOk && v.validation.expansionOk).length}/${result.validated.length}`);
|
|
49
|
+
if (!preview && result.staged.length > 0) {
|
|
50
|
+
console.log(` Staged for review: ${result.staged.length}`);
|
|
51
|
+
console.log(`\n Run 'kern evolve:review --list' to review proposals.`);
|
|
52
|
+
}
|
|
53
|
+
if (result.proposals.length > 0) {
|
|
54
|
+
console.log('\n Proposed templates:');
|
|
55
|
+
for (const p of result.proposals) {
|
|
56
|
+
const v = result.validated.find((v) => v.proposal.id === p.id);
|
|
57
|
+
const status = v ? (v.validation.parseOk && v.validation.expansionOk ? '✓' : '✗') : '?';
|
|
58
|
+
console.log(` ${status} ${p.templateName} (${p.namespace}) — score: ${p.qualityScore.overallScore}, instances: ${p.instanceCount}`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
if (result.nodeProposals && result.nodeProposals.length > 0) {
|
|
62
|
+
console.log(`\n Node proposals (v3): ${result.nodeProposals.length}`);
|
|
63
|
+
for (const np of result.nodeProposals) {
|
|
64
|
+
const nv = result.nodeValidated?.find((v) => v.proposal.id === np.id);
|
|
65
|
+
const status = nv ? (nv.validation.parseOk && nv.validation.codegenOk ? '✓' : '✗') : '?';
|
|
66
|
+
console.log(` ${status} ${np.nodeName} — express: ${np.expressibilityScore.overall}, freq: ${np.frequency}, score: ${np.qualityScore}`);
|
|
67
|
+
}
|
|
68
|
+
if (result.stagedNodes && result.stagedNodes.length > 0) {
|
|
69
|
+
console.log(` Staged nodes: ${result.stagedNodes.length}`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
console.log('');
|
|
74
|
+
process.exit(0);
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=main.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../../src/commands/evolve/main.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAErD,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAc;IAC5C,MAAM,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5B,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACjD,OAAO,CAAC,KAAK,CACX,yGAAyG,CAC1G,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAClE,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,KAAK,CAAC,cAAc,WAAW,EAAE,CAAC,CAAC;QAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;IACrD,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAC3C,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC3C,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC;IACvD,MAAM,aAAa,GAAG,SAAS,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;IAEvD,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;IAC5D,MAAM,aAAa,GAAkB;QACnC,SAAS;QACT,OAAO;QACP,mBAAmB,EAAE,WAAW;QAChC,UAAU,EAAE;YACV,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5D,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAChE;KACF,CAAC;IAEF,MAAM,oBAAoB,EAAE,CAAC;IAE7B,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;IAC9D,OAAO,CAAC,GAAG,CAAC,YAAY,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;IACtE,OAAO,CAAC,GAAG,CAAC,YAAY,OAAO,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAC/E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;IAEjD,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,0BAA0B,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5D,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC,CAAC;QACtD,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,0BAA0B,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAChE,OAAO,CAAC,GAAG,CAAC,0BAA0B,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;QACjE,OAAO,CAAC,GAAG,CACT,0BAA0B,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,CAC/I,CAAC;QAEF,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzC,OAAO,CAAC,GAAG,CAAC,0BAA0B,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;YAC9D,OAAO,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;QAC1E,CAAC;QAED,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;YACvC,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;gBACjC,MAAM,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC/D,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;gBACxF,OAAO,CAAC,GAAG,CACT,OAAO,MAAM,IAAI,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,SAAS,cAAc,CAAC,CAAC,YAAY,CAAC,YAAY,gBAAgB,CAAC,CAAC,aAAa,EAAE,CAC1H,CAAC;YACJ,CAAC;QACH,CAAC;QAED,IAAI,MAAM,CAAC,aAAa,IAAI,MAAM,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5D,OAAO,CAAC,GAAG,CAAC,4BAA4B,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC;YACvE,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;gBACtC,MAAM,EAAE,GAAG,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;gBACtE,MAAM,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;gBACzF,OAAO,CAAC,GAAG,CACT,OAAO,MAAM,IAAI,EAAE,CAAC,QAAQ,eAAe,EAAE,CAAC,mBAAmB,CAAC,OAAO,WAAW,EAAE,CAAC,SAAS,YAAY,EAAE,CAAC,YAAY,EAAE,CAC9H,CAAC;YACJ,CAAC;YACD,IAAI,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxD,OAAO,CAAC,GAAG,CAAC,0BAA0B,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function runEvolveReviewV4(args: string[]): Promise<void>;
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import { cleanApprovedEvolveV4, cleanRejectedEvolveV4, compileCodegenToJS, formatEvolveV4SplitView, getStagedEvolveV4, graduateNode, listStagedEvolveV4, updateStagedEvolveV4Status, } from '@kernlang/evolve';
|
|
2
|
+
import { hasFlag, parseFlagOrNext } from '../../shared.js';
|
|
3
|
+
export async function runEvolveReviewV4(args) {
|
|
4
|
+
const approveV4Id = parseFlagOrNext(args, '--approve');
|
|
5
|
+
const rejectV4Id = parseFlagOrNext(args, '--reject');
|
|
6
|
+
const detailV4Id = parseFlagOrNext(args, '--detail');
|
|
7
|
+
if (approveV4Id) {
|
|
8
|
+
const staged = getStagedEvolveV4(approveV4Id);
|
|
9
|
+
if (!staged) {
|
|
10
|
+
console.error(` Not found: ${approveV4Id}`);
|
|
11
|
+
process.exit(1);
|
|
12
|
+
}
|
|
13
|
+
const { proposal, validation } = staged;
|
|
14
|
+
const allOk = validation.schemaOk &&
|
|
15
|
+
validation.keywordOk &&
|
|
16
|
+
validation.parseOk &&
|
|
17
|
+
validation.codegenCompileOk &&
|
|
18
|
+
validation.codegenRunOk;
|
|
19
|
+
if (!allOk) {
|
|
20
|
+
console.error(` Cannot approve — validation failed for '${proposal.keyword}':`);
|
|
21
|
+
for (const err of validation.errors) {
|
|
22
|
+
console.error(` ${err}`);
|
|
23
|
+
}
|
|
24
|
+
process.exit(1);
|
|
25
|
+
}
|
|
26
|
+
let compiledJs;
|
|
27
|
+
try {
|
|
28
|
+
compiledJs = compileCodegenToJS(proposal.codegenSource);
|
|
29
|
+
}
|
|
30
|
+
catch (err) {
|
|
31
|
+
console.error(` Failed to compile codegen for '${proposal.keyword}': ${err.message}`);
|
|
32
|
+
process.exit(1);
|
|
33
|
+
}
|
|
34
|
+
const result = graduateNode(proposal, compiledJs);
|
|
35
|
+
if (result.success) {
|
|
36
|
+
updateStagedEvolveV4Status(approveV4Id, 'approved');
|
|
37
|
+
cleanApprovedEvolveV4(approveV4Id);
|
|
38
|
+
console.log(` Graduated '${proposal.keyword}' → ${result.path}`);
|
|
39
|
+
console.log(` The node is now available in kern compile and kern dev.`);
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
console.error(` Graduation failed: ${result.error}`);
|
|
43
|
+
process.exit(1);
|
|
44
|
+
}
|
|
45
|
+
process.exit(0);
|
|
46
|
+
}
|
|
47
|
+
if (rejectV4Id) {
|
|
48
|
+
const updated = updateStagedEvolveV4Status(rejectV4Id, 'rejected');
|
|
49
|
+
if (updated) {
|
|
50
|
+
console.log(` Rejected: ${updated.proposal.keyword} (${rejectV4Id})`);
|
|
51
|
+
cleanRejectedEvolveV4();
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
console.error(` Not found: ${rejectV4Id}`);
|
|
55
|
+
process.exit(1);
|
|
56
|
+
}
|
|
57
|
+
process.exit(0);
|
|
58
|
+
}
|
|
59
|
+
if (detailV4Id) {
|
|
60
|
+
const staged = getStagedEvolveV4(detailV4Id);
|
|
61
|
+
if (!staged) {
|
|
62
|
+
console.error(` Not found: ${detailV4Id}`);
|
|
63
|
+
process.exit(1);
|
|
64
|
+
}
|
|
65
|
+
const { proposal, validation } = staged;
|
|
66
|
+
console.log(`\n DETAIL: ${proposal.keyword} (${proposal.displayName})\n`);
|
|
67
|
+
console.log(` Description: ${proposal.description}`);
|
|
68
|
+
console.log(` Props: ${proposal.props.map((p) => `${p.name}:${p.type}${p.required ? '*' : ''}`).join(', ')}`);
|
|
69
|
+
console.log(` Child types: ${proposal.childTypes.join(', ') || '(none)'}`);
|
|
70
|
+
console.log(` Codegen tier: ${proposal.codegenTier}`);
|
|
71
|
+
console.log(` Run ID: ${proposal.evolveRunId}`);
|
|
72
|
+
if (proposal.parserHints) {
|
|
73
|
+
console.log(` Parser hints: ${JSON.stringify(proposal.parserHints)}`);
|
|
74
|
+
}
|
|
75
|
+
console.log(`\n --- Codegen Source ---`);
|
|
76
|
+
console.log(proposal.codegenSource);
|
|
77
|
+
console.log(` --- Instances (${proposal.reason.instances.length}) ---`);
|
|
78
|
+
for (const inst of proposal.reason.instances.slice(0, 10)) {
|
|
79
|
+
console.log(` ${inst}`);
|
|
80
|
+
}
|
|
81
|
+
if (validation.errors.length > 0) {
|
|
82
|
+
console.log(`\n --- Validation Errors ---`);
|
|
83
|
+
for (const err of validation.errors) {
|
|
84
|
+
console.log(` ${err}`);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
console.log('');
|
|
88
|
+
process.exit(0);
|
|
89
|
+
}
|
|
90
|
+
// Default: interactive review or list mode
|
|
91
|
+
const stagedV4 = listStagedEvolveV4();
|
|
92
|
+
const pendingV4 = stagedV4.filter((s) => s.status === 'pending');
|
|
93
|
+
if (pendingV4.length === 0) {
|
|
94
|
+
console.log(" No pending v4 proposals. Run 'kern evolve:discover <dir>' to find patterns.");
|
|
95
|
+
process.exit(0);
|
|
96
|
+
}
|
|
97
|
+
const listOnly = hasFlag(args, '--list');
|
|
98
|
+
if (listOnly) {
|
|
99
|
+
console.log(`\n KERN evolve:review-v4 — ${pendingV4.length} proposal(s)\n`);
|
|
100
|
+
for (const s of pendingV4) {
|
|
101
|
+
console.log(formatEvolveV4SplitView(s));
|
|
102
|
+
console.log('');
|
|
103
|
+
}
|
|
104
|
+
process.exit(0);
|
|
105
|
+
}
|
|
106
|
+
// Interactive review
|
|
107
|
+
const { createInterface } = await import('readline');
|
|
108
|
+
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
109
|
+
const ask = (q) => new Promise((res) => rl.question(q, res));
|
|
110
|
+
console.log(`\n KERN evolve:review-v4 — ${pendingV4.length} proposal(s)\n`);
|
|
111
|
+
for (const staged of pendingV4) {
|
|
112
|
+
console.log(formatEvolveV4SplitView(staged));
|
|
113
|
+
console.log('');
|
|
114
|
+
let decided = false;
|
|
115
|
+
while (!decided) {
|
|
116
|
+
const answer = (await ask(' [a]pprove [r]eject [s]kip [d]etail [q]uit > ')).trim().toLowerCase();
|
|
117
|
+
if (answer === 'a' || answer === 'approve') {
|
|
118
|
+
const { proposal, validation } = staged;
|
|
119
|
+
const allOk = validation.schemaOk &&
|
|
120
|
+
validation.keywordOk &&
|
|
121
|
+
validation.parseOk &&
|
|
122
|
+
validation.codegenCompileOk &&
|
|
123
|
+
validation.codegenRunOk;
|
|
124
|
+
if (!allOk) {
|
|
125
|
+
console.log(` Cannot approve — validation failed. Use [d]etail to see errors.\n`);
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
try {
|
|
129
|
+
const compiledJs = compileCodegenToJS(proposal.codegenSource);
|
|
130
|
+
const result = graduateNode(proposal, compiledJs);
|
|
131
|
+
if (result.success) {
|
|
132
|
+
updateStagedEvolveV4Status(staged.id, 'approved');
|
|
133
|
+
cleanApprovedEvolveV4(staged.id);
|
|
134
|
+
console.log(` \u2713 Graduated '${proposal.keyword}'\n`);
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
console.log(` Graduation failed: ${result.error}\n`);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
catch (err) {
|
|
141
|
+
console.log(` Error: ${err.message}\n`);
|
|
142
|
+
}
|
|
143
|
+
decided = true;
|
|
144
|
+
}
|
|
145
|
+
else if (answer === 'r' || answer === 'reject') {
|
|
146
|
+
updateStagedEvolveV4Status(staged.id, 'rejected');
|
|
147
|
+
cleanRejectedEvolveV4();
|
|
148
|
+
console.log(` \u2717 Rejected '${staged.proposal.keyword}'\n`);
|
|
149
|
+
decided = true;
|
|
150
|
+
}
|
|
151
|
+
else if (answer === 's' || answer === 'skip') {
|
|
152
|
+
console.log(` Skipped.\n`);
|
|
153
|
+
decided = true;
|
|
154
|
+
}
|
|
155
|
+
else if (answer === 'd' || answer === 'detail') {
|
|
156
|
+
const { proposal, validation } = staged;
|
|
157
|
+
console.log(`\n --- Codegen Source ---`);
|
|
158
|
+
console.log(proposal.codegenSource);
|
|
159
|
+
console.log(` --- Instances (${proposal.reason.instances.length}) ---`);
|
|
160
|
+
for (const inst of proposal.reason.instances.slice(0, 5)) {
|
|
161
|
+
console.log(` ${inst}`);
|
|
162
|
+
}
|
|
163
|
+
if (validation.errors.length > 0) {
|
|
164
|
+
console.log(` --- Errors ---`);
|
|
165
|
+
for (const err of validation.errors) {
|
|
166
|
+
console.log(` ${err}`);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
console.log('');
|
|
170
|
+
}
|
|
171
|
+
else if (answer === 'q' || answer === 'quit') {
|
|
172
|
+
rl.close();
|
|
173
|
+
process.exit(0);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
rl.close();
|
|
178
|
+
console.log(' Review complete.\n');
|
|
179
|
+
process.exit(0);
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=review-v4.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review-v4.js","sourceRoot":"","sources":["../../../src/commands/evolve/review-v4.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function runEvolveReview(args: string[]): void;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { cleanRejected, formatSplitView, listStaged, promoteLocal, updateStagedStatus } from '@kernlang/evolve';
|
|
2
|
+
import { hasFlag, parseFlagOrNext } from '../../shared.js';
|
|
3
|
+
export function runEvolveReview(args) {
|
|
4
|
+
const _listMode = hasFlag(args, '--list') || args.length === 1;
|
|
5
|
+
const approveId = parseFlagOrNext(args, '--approve');
|
|
6
|
+
const rejectId = parseFlagOrNext(args, '--reject');
|
|
7
|
+
const promoteMode = hasFlag(args, '--promote');
|
|
8
|
+
const isLocal = hasFlag(args, '--local') || !hasFlag(args, '--catalog');
|
|
9
|
+
if (approveId) {
|
|
10
|
+
const updated = updateStagedStatus(approveId, 'approved');
|
|
11
|
+
if (updated) {
|
|
12
|
+
console.log(` Approved: ${approveId}`);
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
console.error(` Not found: ${approveId}`);
|
|
16
|
+
process.exit(1);
|
|
17
|
+
}
|
|
18
|
+
process.exit(0);
|
|
19
|
+
}
|
|
20
|
+
if (rejectId) {
|
|
21
|
+
const updated = updateStagedStatus(rejectId, 'rejected');
|
|
22
|
+
if (updated) {
|
|
23
|
+
console.log(` Rejected: ${rejectId}`);
|
|
24
|
+
cleanRejected();
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
console.error(` Not found: ${rejectId}`);
|
|
28
|
+
process.exit(1);
|
|
29
|
+
}
|
|
30
|
+
process.exit(0);
|
|
31
|
+
}
|
|
32
|
+
if (promoteMode) {
|
|
33
|
+
if (!isLocal) {
|
|
34
|
+
console.log(' Catalog promotion is for contributors who want to upstream templates.');
|
|
35
|
+
console.log(' Use --local (default) to write templates to your project.');
|
|
36
|
+
process.exit(0);
|
|
37
|
+
}
|
|
38
|
+
const promoted = promoteLocal();
|
|
39
|
+
if (promoted.length === 0) {
|
|
40
|
+
console.log(' No approved proposals to promote.');
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
console.log(` Promoted ${promoted.length} template(s) to templates/:`);
|
|
44
|
+
for (const name of promoted) {
|
|
45
|
+
console.log(` ${name}`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
process.exit(0);
|
|
49
|
+
}
|
|
50
|
+
// Default: list mode
|
|
51
|
+
const staged = listStaged();
|
|
52
|
+
if (staged.length === 0) {
|
|
53
|
+
console.log(" No staged proposals. Run 'kern evolve <dir>' to detect gaps.");
|
|
54
|
+
process.exit(0);
|
|
55
|
+
}
|
|
56
|
+
console.log(`\n KERN evolve:review — ${staged.length} proposal(s)\n`);
|
|
57
|
+
for (const s of staged) {
|
|
58
|
+
console.log(formatSplitView(s));
|
|
59
|
+
console.log('');
|
|
60
|
+
}
|
|
61
|
+
process.exit(0);
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=review.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review.js","sourceRoot":"","sources":["../../../src/commands/evolve/review.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function runReview(args: string[]): Promise<void>;
|