@kernlang/cli 3.5.8 → 3.5.9-canary.213.1.07ba4c76
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/commands/context.d.ts +10 -0
- package/dist/commands/context.js +36 -6
- package/dist/commands/context.js.map +1 -1
- package/dist/shared.d.ts +1 -1
- package/package.json +16 -16
|
@@ -15,4 +15,14 @@ export interface ContextOptions {
|
|
|
15
15
|
* it reads — returned for direct use and so the CLI wrapper stays a thin shell.
|
|
16
16
|
*/
|
|
17
17
|
export declare function buildContextJson(paths: string[], opts?: ContextOptions): ProjectContextGraph;
|
|
18
|
+
/**
|
|
19
|
+
* Build the compact, prompt-ready `<kern-map>` spine for a set of entry paths —
|
|
20
|
+
* the whole-project context an LLM/agent drops straight into a prompt. Scopes to
|
|
21
|
+
* every file in the artifact (the whole project) and fits `spineBudget` tokens
|
|
22
|
+
* (default {@link DEFAULT_SPINE_TOKENS}), degrading through tiers when the
|
|
23
|
+
* project is large. Returns '' when there are no exported symbols to surface.
|
|
24
|
+
*/
|
|
25
|
+
export declare function buildContextSpine(paths: string[], opts?: ContextOptions & {
|
|
26
|
+
spineBudget?: number;
|
|
27
|
+
}): string;
|
|
18
28
|
export declare function runContext(args: string[]): void;
|
package/dist/commands/context.js
CHANGED
|
@@ -13,10 +13,12 @@
|
|
|
13
13
|
* kern context src/ --out map.json
|
|
14
14
|
* kern context src/ --stdout # print JSON to stdout instead of a file
|
|
15
15
|
* kern context src/ --max-depth 12
|
|
16
|
+
* kern context src/ --spine --stdout # compact <kern-map> for a prompt
|
|
17
|
+
* kern context src/ --spine --spine-budget 3000 # cap the spine at 3000 tokens
|
|
16
18
|
*/
|
|
17
19
|
import { existsSync, readdirSync, statSync, writeFileSync } from 'node:fs';
|
|
18
20
|
import { basename, join, relative, resolve } from 'node:path';
|
|
19
|
-
import { buildCallGraph, buildContextArtifact, resolveImportGraph, } from '@kernlang/review';
|
|
21
|
+
import { buildCallGraph, buildContextArtifact, buildSpine, resolveImportGraph, } from '@kernlang/review';
|
|
20
22
|
import { hasFlag, parseFlagOrNext } from '../shared.js';
|
|
21
23
|
const SKIP_DIRS = new Set([
|
|
22
24
|
'node_modules',
|
|
@@ -31,7 +33,7 @@ const SKIP_DIRS = new Set([
|
|
|
31
33
|
]);
|
|
32
34
|
const SOURCE_EXTS = ['.ts', '.tsx', '.mts', '.cts'];
|
|
33
35
|
/** Flags that consume the following token as their value (so it isn't a path). */
|
|
34
|
-
const VALUE_FLAGS = new Set(['--out', '--max-depth', '--base']);
|
|
36
|
+
const VALUE_FLAGS = new Set(['--out', '--max-depth', '--base', '--spine-budget']);
|
|
35
37
|
/** Recursively collect source files under the given paths (files pass through). */
|
|
36
38
|
export function collectSourceFiles(paths) {
|
|
37
39
|
const out = [];
|
|
@@ -74,6 +76,20 @@ export function buildContextJson(paths, opts = {}) {
|
|
|
74
76
|
const artifact = buildContextArtifact(graph, callGraph);
|
|
75
77
|
return opts.base ? relativizeArtifact(artifact, opts.base) : artifact;
|
|
76
78
|
}
|
|
79
|
+
/**
|
|
80
|
+
* Build the compact, prompt-ready `<kern-map>` spine for a set of entry paths —
|
|
81
|
+
* the whole-project context an LLM/agent drops straight into a prompt. Scopes to
|
|
82
|
+
* every file in the artifact (the whole project) and fits `spineBudget` tokens
|
|
83
|
+
* (default {@link DEFAULT_SPINE_TOKENS}), degrading through tiers when the
|
|
84
|
+
* project is large. Returns '' when there are no exported symbols to surface.
|
|
85
|
+
*/
|
|
86
|
+
export function buildContextSpine(paths, opts = {}) {
|
|
87
|
+
const artifact = buildContextJson(paths, opts);
|
|
88
|
+
return buildSpine(artifact, {
|
|
89
|
+
batchFiles: artifact.files.map((f) => f.path),
|
|
90
|
+
tokenBudget: opts.spineBudget,
|
|
91
|
+
});
|
|
92
|
+
}
|
|
77
93
|
/** Rewrite all paths (files, imports, use-sites) relative to `base`. */
|
|
78
94
|
function relativizeArtifact(a, base) {
|
|
79
95
|
const rel = (p) => relative(base, p) || '.';
|
|
@@ -106,10 +122,24 @@ export function runContext(args) {
|
|
|
106
122
|
const maxDepth = Number(parseFlagOrNext(rest, '--max-depth') ?? 8);
|
|
107
123
|
// Portable (relative) paths by default; --absolute keeps machine paths.
|
|
108
124
|
const base = hasFlag(rest, '--absolute') ? undefined : (parseFlagOrNext(rest, '--base') ?? process.cwd());
|
|
109
|
-
const
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
125
|
+
const ctxOpts = { maxDepth: Number.isFinite(maxDepth) ? maxDepth : 8, base };
|
|
126
|
+
// --spine: emit the compact, prompt-ready <kern-map> spine instead of the JSON
|
|
127
|
+
// artifact — the form an LLM/agent drops straight into a prompt. --spine-budget
|
|
128
|
+
// caps it (tokens); default DEFAULT_SPINE_TOKENS, degrading through tiers.
|
|
129
|
+
if (hasFlag(rest, '--spine')) {
|
|
130
|
+
const budgetArg = parseFlagOrNext(rest, '--spine-budget');
|
|
131
|
+
const spineBudget = budgetArg !== undefined && Number.isFinite(Number(budgetArg)) ? Number(budgetArg) : undefined;
|
|
132
|
+
const spine = buildContextSpine(paths, { ...ctxOpts, spineBudget });
|
|
133
|
+
if (hasFlag(rest, '--stdout')) {
|
|
134
|
+
console.log(spine);
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
const spineOut = parseFlagOrNext(rest, '--out') ?? 'kern-context.spine.txt';
|
|
138
|
+
writeFileSync(spineOut, spine);
|
|
139
|
+
console.log(`kern context: <kern-map> spine (${spine.length} chars) → ${spineOut}`);
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
const artifact = buildContextJson(paths, ctxOpts);
|
|
113
143
|
const json = JSON.stringify(artifact, null, 2);
|
|
114
144
|
if (hasFlag(rest, '--stdout')) {
|
|
115
145
|
console.log(json);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/commands/context.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/commands/context.ts"],"names":[],"mappings":"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"}
|
package/dist/shared.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { IRNode, KernTarget, ParseDiagnostic, ResolvedKernConfig, SchemaViolation, ShadowAnalyzeOptions, ShadowDiagnostic } from '@kernlang/core';
|
|
2
|
-
export declare const GENERATED_HEADER = "// @generated by kern v3.5.
|
|
2
|
+
export declare const GENERATED_HEADER = "// @generated by kern v3.5.9-canary.213.1.07ba4c76 \u2014 DO NOT EDIT. Source: ";
|
|
3
3
|
export declare function parseCompilerVersion(version: string): [number, number, number] | null;
|
|
4
4
|
/**
|
|
5
5
|
* Check the existing output file's @generated stamp against the current compiler version.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kernlang/cli",
|
|
3
|
-
"version": "3.5.
|
|
3
|
+
"version": "3.5.9-canary.213.1.07ba4c76",
|
|
4
4
|
"description": "KERN CLI — transpile, compile, minify, and analyze .kern files",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -29,21 +29,21 @@
|
|
|
29
29
|
"chokidar": "^5.0.0",
|
|
30
30
|
"jiti": "^2.7.0",
|
|
31
31
|
"typescript": "^6.0.3",
|
|
32
|
-
"@kernlang/codemod": "3.5.
|
|
33
|
-
"@kernlang/core": "3.5.
|
|
34
|
-
"@kernlang/
|
|
35
|
-
"@kernlang/
|
|
36
|
-
"@kernlang/
|
|
37
|
-
"@kernlang/
|
|
38
|
-
"@kernlang/
|
|
39
|
-
"@kernlang/
|
|
40
|
-
"@kernlang/
|
|
41
|
-
"@kernlang/review": "3.5.
|
|
42
|
-
"@kernlang/
|
|
43
|
-
"@kernlang/
|
|
44
|
-
"@kernlang/test": "3.5.
|
|
45
|
-
"@kernlang/
|
|
46
|
-
"@kernlang/
|
|
32
|
+
"@kernlang/codemod": "3.5.9-canary.213.1.07ba4c76",
|
|
33
|
+
"@kernlang/core": "3.5.9-canary.213.1.07ba4c76",
|
|
34
|
+
"@kernlang/python": "3.5.9-canary.213.1.07ba4c76",
|
|
35
|
+
"@kernlang/evolve": "3.5.9-canary.213.1.07ba4c76",
|
|
36
|
+
"@kernlang/go": "3.5.9-canary.213.1.07ba4c76",
|
|
37
|
+
"@kernlang/mcp": "3.5.9-canary.213.1.07ba4c76",
|
|
38
|
+
"@kernlang/metrics": "3.5.9-canary.213.1.07ba4c76",
|
|
39
|
+
"@kernlang/native": "3.5.9-canary.213.1.07ba4c76",
|
|
40
|
+
"@kernlang/express": "3.5.9-canary.213.1.07ba4c76",
|
|
41
|
+
"@kernlang/review": "3.5.9-canary.213.1.07ba4c76",
|
|
42
|
+
"@kernlang/react": "3.5.9-canary.213.1.07ba4c76",
|
|
43
|
+
"@kernlang/review-mcp": "3.5.9-canary.213.1.07ba4c76",
|
|
44
|
+
"@kernlang/test": "3.5.9-canary.213.1.07ba4c76",
|
|
45
|
+
"@kernlang/terminal": "3.5.9-canary.213.1.07ba4c76",
|
|
46
|
+
"@kernlang/vue": "3.5.9-canary.213.1.07ba4c76"
|
|
47
47
|
},
|
|
48
48
|
"scripts": {
|
|
49
49
|
"build": "tsc -b",
|