@opencodehub/cli 0.1.0
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 +202 -0
- package/README.md +85 -0
- package/dist/agent-context.d.ts +54 -0
- package/dist/agent-context.d.ts.map +1 -0
- package/dist/agent-context.js +122 -0
- package/dist/agent-context.js.map +1 -0
- package/dist/cobol-proleap-setup.d.ts +77 -0
- package/dist/cobol-proleap-setup.d.ts.map +1 -0
- package/dist/cobol-proleap-setup.js +289 -0
- package/dist/cobol-proleap-setup.js.map +1 -0
- package/dist/commands/analyze.d.ts +234 -0
- package/dist/commands/analyze.d.ts.map +1 -0
- package/dist/commands/analyze.js +1096 -0
- package/dist/commands/analyze.js.map +1 -0
- package/dist/commands/augment.d.ts +48 -0
- package/dist/commands/augment.d.ts.map +1 -0
- package/dist/commands/augment.js +249 -0
- package/dist/commands/augment.js.map +1 -0
- package/dist/commands/baseline.d.ts +68 -0
- package/dist/commands/baseline.d.ts.map +1 -0
- package/dist/commands/baseline.js +110 -0
- package/dist/commands/baseline.js.map +1 -0
- package/dist/commands/bench.d.ts +54 -0
- package/dist/commands/bench.d.ts.map +1 -0
- package/dist/commands/bench.js +283 -0
- package/dist/commands/bench.js.map +1 -0
- package/dist/commands/ci-init.d.ts +37 -0
- package/dist/commands/ci-init.d.ts.map +1 -0
- package/dist/commands/ci-init.js +115 -0
- package/dist/commands/ci-init.js.map +1 -0
- package/dist/commands/clean.d.ts +13 -0
- package/dist/commands/clean.d.ts.map +1 -0
- package/dist/commands/clean.js +38 -0
- package/dist/commands/clean.js.map +1 -0
- package/dist/commands/code-pack.d.ts +105 -0
- package/dist/commands/code-pack.d.ts.map +1 -0
- package/dist/commands/code-pack.js +187 -0
- package/dist/commands/code-pack.js.map +1 -0
- package/dist/commands/context.d.ts +30 -0
- package/dist/commands/context.d.ts.map +1 -0
- package/dist/commands/context.js +237 -0
- package/dist/commands/context.js.map +1 -0
- package/dist/commands/detect-changes.d.ts +26 -0
- package/dist/commands/detect-changes.d.ts.map +1 -0
- package/dist/commands/detect-changes.js +73 -0
- package/dist/commands/detect-changes.js.map +1 -0
- package/dist/commands/doctor.d.ts +52 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +472 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/find-enclosing-symbol.d.ts +67 -0
- package/dist/commands/find-enclosing-symbol.d.ts.map +1 -0
- package/dist/commands/find-enclosing-symbol.js +106 -0
- package/dist/commands/find-enclosing-symbol.js.map +1 -0
- package/dist/commands/group.d.ts +123 -0
- package/dist/commands/group.d.ts.map +1 -0
- package/dist/commands/group.js +448 -0
- package/dist/commands/group.js.map +1 -0
- package/dist/commands/impact.d.ts +23 -0
- package/dist/commands/impact.d.ts.map +1 -0
- package/dist/commands/impact.js +91 -0
- package/dist/commands/impact.js.map +1 -0
- package/dist/commands/index-repo.d.ts +39 -0
- package/dist/commands/index-repo.d.ts.map +1 -0
- package/dist/commands/index-repo.js +148 -0
- package/dist/commands/index-repo.js.map +1 -0
- package/dist/commands/ingest-sarif.d.ts +64 -0
- package/dist/commands/ingest-sarif.d.ts.map +1 -0
- package/dist/commands/ingest-sarif.js +381 -0
- package/dist/commands/ingest-sarif.js.map +1 -0
- package/dist/commands/init.d.ts +75 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +315 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/list.d.ts +17 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +79 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/mcp.d.ts +8 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/mcp.js +28 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/open-store.d.ts +25 -0
- package/dist/commands/open-store.d.ts.map +1 -0
- package/dist/commands/open-store.js +47 -0
- package/dist/commands/open-store.js.map +1 -0
- package/dist/commands/pack.d.ts +35 -0
- package/dist/commands/pack.d.ts.map +1 -0
- package/dist/commands/pack.js +83 -0
- package/dist/commands/pack.js.map +1 -0
- package/dist/commands/query.d.ts +85 -0
- package/dist/commands/query.d.ts.map +1 -0
- package/dist/commands/query.js +309 -0
- package/dist/commands/query.js.map +1 -0
- package/dist/commands/scan.d.ts +81 -0
- package/dist/commands/scan.d.ts.map +1 -0
- package/dist/commands/scan.js +407 -0
- package/dist/commands/scan.js.map +1 -0
- package/dist/commands/setup.d.ts +178 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +370 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/sql.d.ts +19 -0
- package/dist/commands/sql.d.ts.map +1 -0
- package/dist/commands/sql.js +51 -0
- package/dist/commands/sql.js.map +1 -0
- package/dist/commands/status.d.ts +13 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +66 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/verdict-render.d.ts +33 -0
- package/dist/commands/verdict-render.d.ts.map +1 -0
- package/dist/commands/verdict-render.js +123 -0
- package/dist/commands/verdict-render.js.map +1 -0
- package/dist/commands/verdict.d.ts +61 -0
- package/dist/commands/verdict.d.ts.map +1 -0
- package/dist/commands/verdict.js +146 -0
- package/dist/commands/verdict.js.map +1 -0
- package/dist/commands/wiki.d.ts +26 -0
- package/dist/commands/wiki.d.ts.map +1 -0
- package/dist/commands/wiki.js +74 -0
- package/dist/commands/wiki.js.map +1 -0
- package/dist/editors/claude-code.d.ts +23 -0
- package/dist/editors/claude-code.d.ts.map +1 -0
- package/dist/editors/claude-code.js +58 -0
- package/dist/editors/claude-code.js.map +1 -0
- package/dist/editors/codex.d.ts +22 -0
- package/dist/editors/codex.d.ts.map +1 -0
- package/dist/editors/codex.js +59 -0
- package/dist/editors/codex.js.map +1 -0
- package/dist/editors/cursor.d.ts +13 -0
- package/dist/editors/cursor.d.ts.map +1 -0
- package/dist/editors/cursor.js +21 -0
- package/dist/editors/cursor.js.map +1 -0
- package/dist/editors/index.d.ts +12 -0
- package/dist/editors/index.d.ts.map +1 -0
- package/dist/editors/index.js +11 -0
- package/dist/editors/index.js.map +1 -0
- package/dist/editors/opencode.d.ts +23 -0
- package/dist/editors/opencode.d.ts.map +1 -0
- package/dist/editors/opencode.js +61 -0
- package/dist/editors/opencode.js.map +1 -0
- package/dist/editors/types.d.ts +33 -0
- package/dist/editors/types.d.ts.map +1 -0
- package/dist/editors/types.js +19 -0
- package/dist/editors/types.js.map +1 -0
- package/dist/editors/windows-wrap.d.ts +19 -0
- package/dist/editors/windows-wrap.d.ts.map +1 -0
- package/dist/editors/windows-wrap.js +28 -0
- package/dist/editors/windows-wrap.js.map +1 -0
- package/dist/editors/windsurf.d.ts +12 -0
- package/dist/editors/windsurf.d.ts.map +1 -0
- package/dist/editors/windsurf.js +21 -0
- package/dist/editors/windsurf.js.map +1 -0
- package/dist/embedder-downloader.d.ts +87 -0
- package/dist/embedder-downloader.d.ts.map +1 -0
- package/dist/embedder-downloader.js +261 -0
- package/dist/embedder-downloader.js.map +1 -0
- package/dist/fs-atomic.d.ts +22 -0
- package/dist/fs-atomic.d.ts.map +1 -0
- package/dist/fs-atomic.js +28 -0
- package/dist/fs-atomic.js.map +1 -0
- package/dist/groups.d.ts +64 -0
- package/dist/groups.d.ts.map +1 -0
- package/dist/groups.js +172 -0
- package/dist/groups.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +703 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/is-indexed.d.ts +20 -0
- package/dist/lib/is-indexed.d.ts.map +1 -0
- package/dist/lib/is-indexed.js +35 -0
- package/dist/lib/is-indexed.js.map +1 -0
- package/dist/registry.d.ts +64 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +145 -0
- package/dist/registry.js.map +1 -0
- package/dist/scip-downloader.d.ts +138 -0
- package/dist/scip-downloader.d.ts.map +1 -0
- package/dist/scip-downloader.js +372 -0
- package/dist/scip-downloader.js.map +1 -0
- package/dist/scip-pins.d.ts +99 -0
- package/dist/scip-pins.d.ts.map +1 -0
- package/dist/scip-pins.js +195 -0
- package/dist/scip-pins.js.map +1 -0
- package/dist/skills-gen.d.ts +47 -0
- package/dist/skills-gen.d.ts.map +1 -0
- package/dist/skills-gen.js +292 -0
- package/dist/skills-gen.js.map +1 -0
- package/package.json +81 -0
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `codehub setup --cobol-proleap` — one-time bootstrap for the COBOL
|
|
3
|
+
* deep-parse bridge.
|
|
4
|
+
*
|
|
5
|
+
* The uwol/cobol-parser library is NOT published to Maven Central as of 2026-04
|
|
6
|
+
* (search.maven.org returns 0 hits), and the latest GitHub Release is v2.4.0
|
|
7
|
+
* from 2018 — but master is on v4.x. So we build from source:
|
|
8
|
+
*
|
|
9
|
+
* 1. Probe for `git`, `mvn`, and `javac` (JDK 17+) on PATH. Missing tool
|
|
10
|
+
* → refuse with a tool-specific install hint.
|
|
11
|
+
* 2. Resolve a temp workdir, `git clone --branch master https://github.com/uwol/cobol-parser`.
|
|
12
|
+
* 3. `mvn install -DskipTests` to build the JAR. Target artifact is
|
|
13
|
+
* `<tmp>/target/proleap-cobol-parser-<ver>.jar`.
|
|
14
|
+
* 4. `javac -cp <jar> cobol_to_scip.java` — compile the wrapper class
|
|
15
|
+
* (the `.java` source ships under `packages/cobol-proleap/java/`).
|
|
16
|
+
* 5. Atomic rename the JAR + compiled wrapper into
|
|
17
|
+
* `~/.codehub/vendor/proleap/{proleap-cobol-parser-<ver>.jar,
|
|
18
|
+
* cobol_to_scip.class}`.
|
|
19
|
+
*
|
|
20
|
+
* Every external-tool spawn goes through the `ProcessApi` seam so tests
|
|
21
|
+
* can stub the whole pipeline without shelling out for real.
|
|
22
|
+
*/
|
|
23
|
+
import { spawn } from "node:child_process";
|
|
24
|
+
import { copyFile as fsCopyFile, mkdir as fsMkdir, mkdtemp as fsMkdtemp, readdir as fsReaddir, rename as fsRename, rm as fsRm, stat as fsStat, } from "node:fs/promises";
|
|
25
|
+
import { homedir, tmpdir } from "node:os";
|
|
26
|
+
import { dirname, join, resolve } from "node:path";
|
|
27
|
+
import { fileURLToPath } from "node:url";
|
|
28
|
+
export const COBOL_PROLEAP_REPO_URL = "https://github.com/uwol/cobol-parser";
|
|
29
|
+
export const COBOL_PROLEAP_BRANCH = "master";
|
|
30
|
+
export const MIN_JAVAC_MAJOR = 17;
|
|
31
|
+
export const DEFAULT_PROCESS_API = {
|
|
32
|
+
run(cmd, args, cwd) {
|
|
33
|
+
return new Promise((res) => {
|
|
34
|
+
const child = spawn(cmd, args, {
|
|
35
|
+
cwd,
|
|
36
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
37
|
+
});
|
|
38
|
+
let stdout = "";
|
|
39
|
+
let stderr = "";
|
|
40
|
+
child.stdout.setEncoding("utf8");
|
|
41
|
+
child.stderr.setEncoding("utf8");
|
|
42
|
+
child.stdout.on("data", (d) => {
|
|
43
|
+
stdout += d;
|
|
44
|
+
});
|
|
45
|
+
child.stderr.on("data", (d) => {
|
|
46
|
+
stderr += d;
|
|
47
|
+
});
|
|
48
|
+
child.on("error", (err) => {
|
|
49
|
+
res({ code: -1, stdout, stderr: `${err.message}\n${stderr}` });
|
|
50
|
+
});
|
|
51
|
+
child.on("exit", (code) => {
|
|
52
|
+
res({ code: code ?? -1, stdout, stderr });
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
},
|
|
56
|
+
async mkdtemp(prefix) {
|
|
57
|
+
return await fsMkdtemp(join(tmpdir(), prefix));
|
|
58
|
+
},
|
|
59
|
+
async mkdir(path) {
|
|
60
|
+
await fsMkdir(path, { recursive: true });
|
|
61
|
+
},
|
|
62
|
+
async copyFile(src, dest) {
|
|
63
|
+
await fsCopyFile(src, dest);
|
|
64
|
+
},
|
|
65
|
+
async rename(src, dest) {
|
|
66
|
+
await fsRename(src, dest);
|
|
67
|
+
},
|
|
68
|
+
async rm(path, opts) {
|
|
69
|
+
await fsRm(path, { recursive: opts?.recursive ?? false, force: opts?.force ?? false });
|
|
70
|
+
},
|
|
71
|
+
async readdir(path) {
|
|
72
|
+
return await fsReaddir(path);
|
|
73
|
+
},
|
|
74
|
+
async exists(path) {
|
|
75
|
+
try {
|
|
76
|
+
await fsStat(path);
|
|
77
|
+
return true;
|
|
78
|
+
}
|
|
79
|
+
catch (err) {
|
|
80
|
+
if (err.code === "ENOENT")
|
|
81
|
+
return false;
|
|
82
|
+
throw err;
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
};
|
|
86
|
+
/**
|
|
87
|
+
* Run the setup. Returns the final install paths (jar + wrapper classpath
|
|
88
|
+
* dir) so the analyze runner can resolve them without re-walking the
|
|
89
|
+
* vendor dir. Throws on precondition failure with tool-specific install
|
|
90
|
+
* hints so the user can self-serve.
|
|
91
|
+
*/
|
|
92
|
+
export async function runSetupCobolProleap(opts = {}) {
|
|
93
|
+
const proc = opts.processApi ?? DEFAULT_PROCESS_API;
|
|
94
|
+
const log = opts.log ?? ((msg) => console.warn(msg));
|
|
95
|
+
const vendorDir = opts.vendorDir ?? defaultVendorDir(opts.home);
|
|
96
|
+
const jarTarget = join(vendorDir, "proleap-cobol-parser.jar");
|
|
97
|
+
const wrapperClassDir = vendorDir;
|
|
98
|
+
const wrapperClass = join(wrapperClassDir, "cobol_to_scip.class");
|
|
99
|
+
if (opts.force !== true) {
|
|
100
|
+
if ((await proc.exists(jarTarget)) && (await proc.exists(wrapperClass))) {
|
|
101
|
+
log(`codehub setup --cobol-proleap: already installed at ${vendorDir}`);
|
|
102
|
+
return {
|
|
103
|
+
jarPath: jarTarget,
|
|
104
|
+
wrapperClassPath: wrapperClassDir,
|
|
105
|
+
vendorDir,
|
|
106
|
+
installed: false,
|
|
107
|
+
skipped: true,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
// --- Precondition probes ------------------------------------------------
|
|
112
|
+
await requireToolOrThrow(proc, "git", ["--version"], "git", undefined);
|
|
113
|
+
await requireToolOrThrow(proc, "mvn", ["--version"], "maven (mvn)", undefined);
|
|
114
|
+
await requireToolOrThrow(proc, "javac", ["--version"], "JDK (javac)", MIN_JAVAC_MAJOR);
|
|
115
|
+
// --- Build from source --------------------------------------------------
|
|
116
|
+
const workDir = await proc.mkdtemp("codehub-proleap-");
|
|
117
|
+
const srcDir = join(workDir, "cobol-parser");
|
|
118
|
+
log(`codehub setup --cobol-proleap: git clone ${COBOL_PROLEAP_REPO_URL} (${COBOL_PROLEAP_BRANCH})`);
|
|
119
|
+
const clone = await proc.run("git", [
|
|
120
|
+
"clone",
|
|
121
|
+
"--depth",
|
|
122
|
+
"1",
|
|
123
|
+
"--branch",
|
|
124
|
+
COBOL_PROLEAP_BRANCH,
|
|
125
|
+
COBOL_PROLEAP_REPO_URL,
|
|
126
|
+
srcDir,
|
|
127
|
+
]);
|
|
128
|
+
if (clone.code !== 0) {
|
|
129
|
+
await cleanup(proc, workDir);
|
|
130
|
+
throw new Error(`codehub setup --cobol-proleap: git clone failed (code ${clone.code}): ${clone.stderr.slice(-400)}`);
|
|
131
|
+
}
|
|
132
|
+
log("codehub setup --cobol-proleap: mvn install -DskipTests (this takes a minute)");
|
|
133
|
+
const mvn = await proc.run("mvn", ["install", "-DskipTests", "-q"], srcDir);
|
|
134
|
+
if (mvn.code !== 0) {
|
|
135
|
+
await cleanup(proc, workDir);
|
|
136
|
+
throw new Error(`codehub setup --cobol-proleap: mvn build failed (code ${mvn.code}): ${mvn.stderr.slice(-400)}`);
|
|
137
|
+
}
|
|
138
|
+
// Locate the target/proleap-cobol-parser-<ver>.jar.
|
|
139
|
+
const targetDir = join(srcDir, "target");
|
|
140
|
+
const targetFiles = await proc.readdir(targetDir);
|
|
141
|
+
const builtJar = targetFiles.find((n) => n.startsWith("proleap-cobol-parser-") && n.endsWith(".jar") && !n.endsWith("-sources.jar"));
|
|
142
|
+
if (builtJar === undefined) {
|
|
143
|
+
await cleanup(proc, workDir);
|
|
144
|
+
throw new Error(`codehub setup --cobol-proleap: mvn finished but no proleap-cobol-parser-*.jar in ${targetDir}`);
|
|
145
|
+
}
|
|
146
|
+
const builtJarPath = join(targetDir, builtJar);
|
|
147
|
+
// --- Compile the wrapper ------------------------------------------------
|
|
148
|
+
const javaSource = opts.javaSourcePath ?? resolveWrapperJavaSource();
|
|
149
|
+
if (!(await proc.exists(javaSource))) {
|
|
150
|
+
await cleanup(proc, workDir);
|
|
151
|
+
throw new Error(`codehub setup --cobol-proleap: wrapper Java source not found at ${javaSource}. ` +
|
|
152
|
+
"Re-install @opencodehub/cobol-proleap or pass --java-source.");
|
|
153
|
+
}
|
|
154
|
+
// Compile into the workDir so a failure doesn't pollute vendor/.
|
|
155
|
+
const compileDir = join(workDir, "wrapper");
|
|
156
|
+
await proc.mkdir(compileDir);
|
|
157
|
+
// Copy the .java file so javac's output lands next to the source.
|
|
158
|
+
const workJava = join(compileDir, "cobol_to_scip.java");
|
|
159
|
+
await proc.copyFile(javaSource, workJava);
|
|
160
|
+
const javac = await proc.run("javac", ["-cp", builtJarPath, "-d", compileDir, workJava]);
|
|
161
|
+
if (javac.code !== 0) {
|
|
162
|
+
await cleanup(proc, workDir);
|
|
163
|
+
throw new Error(`codehub setup --cobol-proleap: javac failed (code ${javac.code}): ${javac.stderr.slice(-400)}`);
|
|
164
|
+
}
|
|
165
|
+
const wrapperClassBuilt = join(compileDir, "cobol_to_scip.class");
|
|
166
|
+
if (!(await proc.exists(wrapperClassBuilt))) {
|
|
167
|
+
await cleanup(proc, workDir);
|
|
168
|
+
throw new Error("codehub setup --cobol-proleap: javac succeeded but cobol_to_scip.class was not produced");
|
|
169
|
+
}
|
|
170
|
+
// --- Atomic install -----------------------------------------------------
|
|
171
|
+
await proc.mkdir(vendorDir);
|
|
172
|
+
// Rename rather than copy so the final JAR lands in one syscall; fall
|
|
173
|
+
// back to copyFile for cross-filesystem temp dirs where rename would
|
|
174
|
+
// fail with EXDEV.
|
|
175
|
+
try {
|
|
176
|
+
await proc.rename(builtJarPath, jarTarget);
|
|
177
|
+
}
|
|
178
|
+
catch {
|
|
179
|
+
await proc.copyFile(builtJarPath, jarTarget);
|
|
180
|
+
}
|
|
181
|
+
try {
|
|
182
|
+
await proc.rename(wrapperClassBuilt, wrapperClass);
|
|
183
|
+
}
|
|
184
|
+
catch {
|
|
185
|
+
await proc.copyFile(wrapperClassBuilt, wrapperClass);
|
|
186
|
+
}
|
|
187
|
+
await cleanup(proc, workDir);
|
|
188
|
+
log(`codehub setup --cobol-proleap: installed ${jarTarget} (v${extractVersion(builtJar)}) and ` +
|
|
189
|
+
`cobol_to_scip.class at ${vendorDir}`);
|
|
190
|
+
log("codehub setup --cobol-proleap: Done. " +
|
|
191
|
+
"Pass --allow-build-scripts=proleap to `codehub analyze`.");
|
|
192
|
+
return {
|
|
193
|
+
jarPath: jarTarget,
|
|
194
|
+
wrapperClassPath: wrapperClassDir,
|
|
195
|
+
vendorDir,
|
|
196
|
+
installed: true,
|
|
197
|
+
skipped: false,
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
/** Default vendor dir. */
|
|
201
|
+
export function defaultVendorDir(home) {
|
|
202
|
+
return join(home ?? homedir(), ".codehub", "vendor", "proleap");
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Probe a tool. Throws an Error (containing a user-facing install hint) when
|
|
206
|
+
* the binary is missing or too old. `minMajor` is non-undefined only for
|
|
207
|
+
* javac today — the major-version parse is reused from the JRE probe shape.
|
|
208
|
+
*/
|
|
209
|
+
async function requireToolOrThrow(proc, cmd, args, friendly, minMajor) {
|
|
210
|
+
const out = await proc.run(cmd, args);
|
|
211
|
+
if (out.code !== 0) {
|
|
212
|
+
throw new Error(`codehub setup --cobol-proleap: ${friendly} not on PATH (tried \`${cmd} ${args.join(" ")}\`). ` +
|
|
213
|
+
installHint(friendly));
|
|
214
|
+
}
|
|
215
|
+
if (minMajor !== undefined) {
|
|
216
|
+
const combined = `${out.stdout}\n${out.stderr}`;
|
|
217
|
+
const major = parseMajor(combined);
|
|
218
|
+
if (major === undefined || major < minMajor) {
|
|
219
|
+
throw new Error(`codehub setup --cobol-proleap: ${friendly} < ${minMajor} detected (${combined.trim().slice(0, 120)}). ` +
|
|
220
|
+
installHint(friendly));
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
function installHint(friendly) {
|
|
225
|
+
if (friendly.startsWith("git")) {
|
|
226
|
+
return "Install git from https://git-scm.com/downloads, then retry.";
|
|
227
|
+
}
|
|
228
|
+
if (friendly.startsWith("maven")) {
|
|
229
|
+
return "Install Maven 3.8+ (`brew install maven` on macOS, `apt install maven` on Debian), then retry.";
|
|
230
|
+
}
|
|
231
|
+
if (friendly.startsWith("JDK")) {
|
|
232
|
+
return (`Install a JDK ${MIN_JAVAC_MAJOR}+ (e.g. \`brew install openjdk@${MIN_JAVAC_MAJOR}\` or ` +
|
|
233
|
+
`\`apt install openjdk-${MIN_JAVAC_MAJOR}-jdk\`), then retry.`);
|
|
234
|
+
}
|
|
235
|
+
return "";
|
|
236
|
+
}
|
|
237
|
+
function parseMajor(output) {
|
|
238
|
+
const legacy = output.match(/\b1\.(\d+)(?:\.[\d_]+)?\b/);
|
|
239
|
+
if (legacy?.[1] !== undefined) {
|
|
240
|
+
const parsed = Number.parseInt(legacy[1], 10);
|
|
241
|
+
if (Number.isFinite(parsed))
|
|
242
|
+
return parsed;
|
|
243
|
+
}
|
|
244
|
+
const modern = output.match(/\b(\d{2,3})(?:\.\d+)?\b/);
|
|
245
|
+
if (modern?.[1] !== undefined) {
|
|
246
|
+
const parsed = Number.parseInt(modern[1], 10);
|
|
247
|
+
if (Number.isFinite(parsed))
|
|
248
|
+
return parsed;
|
|
249
|
+
}
|
|
250
|
+
return undefined;
|
|
251
|
+
}
|
|
252
|
+
function extractVersion(jarName) {
|
|
253
|
+
const m = jarName.match(/proleap-cobol-parser-([\d.]+)/);
|
|
254
|
+
return m?.[1] ?? "unknown";
|
|
255
|
+
}
|
|
256
|
+
async function cleanup(proc, dir) {
|
|
257
|
+
try {
|
|
258
|
+
await proc.rm(dir, { recursive: true, force: true });
|
|
259
|
+
}
|
|
260
|
+
catch {
|
|
261
|
+
// best-effort
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Resolve the wrapper Java source shipped in @opencodehub/cobol-proleap.
|
|
266
|
+
* Walks up from the installed CLI until it finds
|
|
267
|
+
* `packages/cobol-proleap/java/cobol_to_scip.java` (repo checkout) or
|
|
268
|
+
* `node_modules/@opencodehub/cobol-proleap/java/cobol_to_scip.java` (installed).
|
|
269
|
+
*/
|
|
270
|
+
function resolveWrapperJavaSource() {
|
|
271
|
+
const thisFile = fileURLToPath(import.meta.url);
|
|
272
|
+
const dir = dirname(thisFile);
|
|
273
|
+
const candidates = [
|
|
274
|
+
() => join(dir, "..", "..", "cobol-proleap", "java", "cobol_to_scip.java"),
|
|
275
|
+
() => join(dir, "..", "..", "..", "cobol-proleap", "java", "cobol_to_scip.java"),
|
|
276
|
+
() => join(dir, "..", "..", "..", "..", "@opencodehub", "cobol-proleap", "java", "cobol_to_scip.java"),
|
|
277
|
+
];
|
|
278
|
+
for (const fn of candidates) {
|
|
279
|
+
const p = resolve(fn());
|
|
280
|
+
// Sync existsSync is fine in this pre-flight path.
|
|
281
|
+
const { existsSync } = require("node:fs");
|
|
282
|
+
if (existsSync(p))
|
|
283
|
+
return p;
|
|
284
|
+
}
|
|
285
|
+
// Fall back to the conventional repo layout; caller reports a clean
|
|
286
|
+
// "wrapper Java source not found" error if it's missing on disk.
|
|
287
|
+
return resolve(dir, "..", "..", "cobol-proleap", "java", "cobol_to_scip.java");
|
|
288
|
+
}
|
|
289
|
+
//# sourceMappingURL=cobol-proleap-setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cobol-proleap-setup.js","sourceRoot":"","sources":["../src/cobol-proleap-setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `codehub analyze [path]` — index a repository.
|
|
3
|
+
*
|
|
4
|
+
* Flow:
|
|
5
|
+
* 1. Resolve `repoPath` (default `process.cwd()`).
|
|
6
|
+
* 2. Read the registry. If `!force` and the recorded `lastCommit` matches
|
|
7
|
+
* the pipeline's fresh commit, emit an "up to date" message and return
|
|
8
|
+
* without doing work.
|
|
9
|
+
* 3. Otherwise run `runIngestion(repoPath, {...})`, then open a writable
|
|
10
|
+
* `Store` (composed graph + temporal) via `openStore`, then
|
|
11
|
+
* `createSchema()`, `bulkLoad()`, and `setMeta()`.
|
|
12
|
+
* 4. Update the registry and, unless suppressed, stamp AGENTS.md + CLAUDE.md.
|
|
13
|
+
* 5. Print a one-line summary.
|
|
14
|
+
*
|
|
15
|
+
* The `--offline` flag is a hard promise: the ingestion pipeline never opens
|
|
16
|
+
* a network socket, and embeddings are a no-op for MVP. We log the promise so
|
|
17
|
+
* reviewers can audit call sites.
|
|
18
|
+
*/
|
|
19
|
+
import { type CodeRelation, type GraphNode } from "@opencodehub/core-types";
|
|
20
|
+
import { pipeline } from "@opencodehub/ingestion";
|
|
21
|
+
import { type RepoEntry } from "../registry.js";
|
|
22
|
+
export interface AnalyzeOptions {
|
|
23
|
+
readonly force?: boolean;
|
|
24
|
+
/**
|
|
25
|
+
* When true, the embeddings phase embeds every callable/declaration symbol
|
|
26
|
+
* and the result is upserted into the DuckDB `embeddings` table. Requires
|
|
27
|
+
* `codehub setup --embeddings` to have installed weights; if weights are
|
|
28
|
+
* missing the phase logs a warning and skips — analyze never aborts.
|
|
29
|
+
*/
|
|
30
|
+
readonly embeddings?: boolean;
|
|
31
|
+
/** Which embedder variant to use. Defaults to `fp32` when embeddings=true. */
|
|
32
|
+
readonly embeddingsVariant?: "fp32" | "int8";
|
|
33
|
+
/** Override the embedder model directory (mostly useful for tests). */
|
|
34
|
+
readonly embeddingsModelDir?: string;
|
|
35
|
+
/**
|
|
36
|
+
* Hierarchical tiers to emit when `embeddings=true` (P03). Defaults to
|
|
37
|
+
* `["symbol"]`. Pass `["symbol", "file", "community"]` for the full
|
|
38
|
+
* hierarchical index — enables `codehub query --zoom` coarse-to-fine.
|
|
39
|
+
*/
|
|
40
|
+
readonly embeddingsGranularity?: readonly ("symbol" | "file" | "community")[];
|
|
41
|
+
/**
|
|
42
|
+
* Number of parallel ONNX embedder workers. Defaults to 1 (legacy
|
|
43
|
+
* single-threaded path). Values >= 2 fan inference out across a
|
|
44
|
+
* Piscina pool; each worker holds its own ~300 MB ONNX session, so
|
|
45
|
+
* scale with host memory in mind. Ignored under the HTTP backend.
|
|
46
|
+
*/
|
|
47
|
+
readonly embeddingsWorkers?: number;
|
|
48
|
+
/**
|
|
49
|
+
* Chunks per `embedBatch()` call. Defaults to 32. Larger batches
|
|
50
|
+
* amortize tokenizer + tensor-feed overhead but increase peak memory;
|
|
51
|
+
* `1` restores the pre-refactor one-node-per-call pattern.
|
|
52
|
+
*/
|
|
53
|
+
readonly embeddingsBatchSize?: number;
|
|
54
|
+
readonly offline?: boolean;
|
|
55
|
+
readonly verbose?: boolean;
|
|
56
|
+
readonly skipAgentsMd?: boolean;
|
|
57
|
+
/**
|
|
58
|
+
* When true, emit `.codehub/sbom.cyclonedx.json` and
|
|
59
|
+
* `.codehub/sbom.spdx.json` from Dependency nodes. Off by default so
|
|
60
|
+
* `codehub analyze` stays quiet for repos where supply-chain docs are
|
|
61
|
+
* out of scope.
|
|
62
|
+
*/
|
|
63
|
+
readonly sbom?: boolean;
|
|
64
|
+
/**
|
|
65
|
+
* When true, run the coverage overlay phase which detects lcov /
|
|
66
|
+
* cobertura / jacoco / coverage.py reports and populates
|
|
67
|
+
* `coveragePercent` + `coveredLines` on File nodes. Off by default.
|
|
68
|
+
*/
|
|
69
|
+
readonly coverage?: boolean;
|
|
70
|
+
/**
|
|
71
|
+
* When true (the post-P04 default), the `summarize` phase walks LSP-
|
|
72
|
+
* confirmed callable symbols and invokes Bedrock to generate structured
|
|
73
|
+
* summaries within the resolved cost cap. Pass `false` (or
|
|
74
|
+
* `CODEHUB_BEDROCK_DISABLED=1`) to force the phase off.
|
|
75
|
+
*/
|
|
76
|
+
readonly summaries?: boolean;
|
|
77
|
+
/**
|
|
78
|
+
* Upper bound on Bedrock calls per run. Accepts either a non-negative
|
|
79
|
+
* integer or the literal string `"auto"`. Default `"auto"` resolves to
|
|
80
|
+
* `min(floor(scipConfirmedCallableCount × 0.1), 500)` at run time, using
|
|
81
|
+
* a prior-run heuristic seeded from `store_meta.stats["embeddingsCount"]`
|
|
82
|
+
* when available and falling back to 50 on first run. Any positive
|
|
83
|
+
* integer caps the batch size at that value; `0` runs the phase in
|
|
84
|
+
* dry-run mode.
|
|
85
|
+
*/
|
|
86
|
+
readonly maxSummariesPerRun?: number | "auto";
|
|
87
|
+
/**
|
|
88
|
+
* Override the Bedrock model id used by the summarize phase. When
|
|
89
|
+
* undefined, the phase uses `DEFAULT_MODEL_ID` from
|
|
90
|
+
* `@opencodehub/summarizer`.
|
|
91
|
+
*/
|
|
92
|
+
readonly summaryModel?: string;
|
|
93
|
+
/**
|
|
94
|
+
* When true, walk Communities with `symbolCount >= 5` after analyze
|
|
95
|
+
* completes and emit one `SKILL.md` per cluster under
|
|
96
|
+
* `<repo>/.codehub/skills/<slug>/`. Off by default — operators opt in.
|
|
97
|
+
*/
|
|
98
|
+
readonly skills?: boolean;
|
|
99
|
+
/**
|
|
100
|
+
* When true, detectors that pattern-match on receiver identifiers drop
|
|
101
|
+
* heuristic-only matches entirely — edges only emit when a receiver's
|
|
102
|
+
* module origin was confirmed via the import graph or ts-morph
|
|
103
|
+
* (DET-O-001). Off by default so legacy repos keep emitting.
|
|
104
|
+
*/
|
|
105
|
+
readonly strictDetectors?: boolean;
|
|
106
|
+
/**
|
|
107
|
+
* Opt-ins that enable build-script-driven indexers. Current surface:
|
|
108
|
+
* `"proleap"` — wakes the JVM COBOL deep-parse bridge
|
|
109
|
+
* (`@opencodehub/cobol-proleap`) provided the JAR has been installed via
|
|
110
|
+
* `codehub setup --cobol-proleap`. Unset → regex hot path only; the JVM
|
|
111
|
+
* is never spawned. The flag is a CSV-style whitelist to leave room for
|
|
112
|
+
* future opt-ins (rust `build.rs`, `gradle`, etc).
|
|
113
|
+
*/
|
|
114
|
+
readonly allowBuildScripts?: readonly "proleap"[];
|
|
115
|
+
/** Test hook: override the home dir used for the registry. */
|
|
116
|
+
readonly home?: string;
|
|
117
|
+
}
|
|
118
|
+
export interface AnalyzeSummary {
|
|
119
|
+
readonly repoPath: string;
|
|
120
|
+
readonly repoName: string;
|
|
121
|
+
readonly nodeCount: number;
|
|
122
|
+
readonly edgeCount: number;
|
|
123
|
+
readonly graphHash: string;
|
|
124
|
+
readonly durationMs: number;
|
|
125
|
+
readonly upToDate: boolean;
|
|
126
|
+
readonly warnings: readonly string[];
|
|
127
|
+
}
|
|
128
|
+
export declare function runAnalyze(path: string, opts?: AnalyzeOptions): Promise<AnalyzeSummary>;
|
|
129
|
+
/**
|
|
130
|
+
* Build the {@link pipeline.PreviousGraph} projection expected by the
|
|
131
|
+
* incremental-scope phase from the prior DuckDB index + scan-state sidecar.
|
|
132
|
+
*
|
|
133
|
+
* The projection carries:
|
|
134
|
+
* - file paths + scan-time content hashes, read from
|
|
135
|
+
* `.codehub/scan-state.json` (written at the tail of the prior run),
|
|
136
|
+
* - IMPORTS + EXTENDS + IMPLEMENTS edges recovered from the `relations`
|
|
137
|
+
* table by stripping each endpoint id back to its enclosing file path,
|
|
138
|
+
* - the FULL prior node and edge snapshot, mapped back into
|
|
139
|
+
* {@link GraphNode} / {@link CodeRelation} via {@link rowToGraphNode}
|
|
140
|
+
* and {@link rowToCodeRelation}. Shipping these two arrays is what
|
|
141
|
+
* flips `resolveIncrementalView`
|
|
142
|
+
* (`packages/ingestion/src/pipeline/phases/incremental-helper.ts:95-102`)
|
|
143
|
+
* from `active=false` (passive mode) to `active=true`, so the four
|
|
144
|
+
* incremental consumer phases can carry forward non-closure work and
|
|
145
|
+
* reproduce a byte-identical graph hash vs a full re-index.
|
|
146
|
+
*
|
|
147
|
+
* Returns `undefined` when the store is missing, unreadable, or empty —
|
|
148
|
+
* any of which downgrades incremental mode to a clean full reindex in the
|
|
149
|
+
* phase without surfacing an error.
|
|
150
|
+
*/
|
|
151
|
+
export declare function loadPreviousGraph(repoPath: string): Promise<pipeline.PreviousGraph | undefined>;
|
|
152
|
+
/**
|
|
153
|
+
* Resolve the effective `summaries` flag, honoring the
|
|
154
|
+
* `CODEHUB_BEDROCK_DISABLED=1` env kill-switch and the P04 default-on
|
|
155
|
+
* contract (absent flag → enabled).
|
|
156
|
+
*
|
|
157
|
+
* Truth table (post-P04):
|
|
158
|
+
* - env var set + flag undefined → false (kill-switch wins)
|
|
159
|
+
* - env var set + flag true → false (kill-switch wins)
|
|
160
|
+
* - env var set + flag false → false
|
|
161
|
+
* - env var unset + flag undefined → true (default on)
|
|
162
|
+
* - env var unset + flag true → true
|
|
163
|
+
* - env var unset + flag false → false (explicit --no-summaries)
|
|
164
|
+
*
|
|
165
|
+
* Exported for unit tests; the production call site reads `process.env`.
|
|
166
|
+
*/
|
|
167
|
+
export declare function resolveSummariesEnabled(flag: boolean | undefined, env: NodeJS.ProcessEnv | Record<string, string | undefined>): boolean;
|
|
168
|
+
/**
|
|
169
|
+
* Resolve `--max-summaries auto` / explicit numeric caps into a concrete
|
|
170
|
+
* numeric budget the pipeline can consume.
|
|
171
|
+
*
|
|
172
|
+
* Pre-run heuristic (P04): `auto` bounds the cap at
|
|
173
|
+
* `min(floor(scipConfirmedCallableCount × 0.1), 500)`. We cannot cheaply
|
|
174
|
+
* compute that before the pipeline runs (LSP phases haven't yielded
|
|
175
|
+
* yet), so we use the prior run's stored counts when available:
|
|
176
|
+
*
|
|
177
|
+
* - If a DuckDB store is readable at the expected path, count nodes
|
|
178
|
+
* whose kind is Function/Method/Class. That count is the best proxy
|
|
179
|
+
* for "SCIP-confirmed callables" we can get before the parse phase.
|
|
180
|
+
* - If no prior store exists (fresh clone, first analyze), fall back
|
|
181
|
+
* to a conservative first-run cap of 50. The next invocation has
|
|
182
|
+
* the prior counts and can resolve `auto` accurately.
|
|
183
|
+
*
|
|
184
|
+
* Explicit numeric caps pass through unchanged; negative values clamp to
|
|
185
|
+
* 0 (dry-run). When summaries are disabled we short-circuit to 0 so the
|
|
186
|
+
* phase's cost-cap branch is hit regardless.
|
|
187
|
+
*
|
|
188
|
+
* Exported for unit tests; the production call site passes
|
|
189
|
+
* `countPriorCallableSymbols` for the seed lookup.
|
|
190
|
+
*/
|
|
191
|
+
export declare function resolveMaxSummariesCap(repoPath: string, raw: number | "auto" | undefined, summariesEnabled: boolean, seedLookup?: (repoPath: string) => Promise<number | undefined>): Promise<number>;
|
|
192
|
+
/**
|
|
193
|
+
* Reverse of `nodeToRow` (`packages/storage/src/duckdb-adapter.ts:1169`):
|
|
194
|
+
* translate one row of the polymorphic `nodes` table back into a
|
|
195
|
+
* {@link GraphNode}. Only the `nodes`/`edges` fidelity required by the four
|
|
196
|
+
* incremental consumer phases (`cross-file`, `mro`, `communities`,
|
|
197
|
+
* `processes`) is load-bearing — Community / Process nodes are re-added
|
|
198
|
+
* verbatim by `communities.ts:90-94` / `processes.ts:306-310`, so their
|
|
199
|
+
* `name` / `filePath` / `inferredLabel` / `keywords` / `symbolCount` /
|
|
200
|
+
* `cohesion` / `entryPointId` / `stepCount` must round-trip. Other kinds
|
|
201
|
+
* survive the round trip best-effort; fields we can't recover stay
|
|
202
|
+
* `undefined` and the caller treats the resulting node as lossy — safe
|
|
203
|
+
* because the carry-forward only lives long enough to be hashed into the
|
|
204
|
+
* next graph.
|
|
205
|
+
*
|
|
206
|
+
* Returns `undefined` when the row carries a `kind` we don't recognise or
|
|
207
|
+
* when required scalar slots (`id`, `name`, `file_path`) are missing.
|
|
208
|
+
*
|
|
209
|
+
* Exported for tests; the production call site is {@link loadPreviousGraph}.
|
|
210
|
+
*/
|
|
211
|
+
export declare function rowToGraphNode(row: Record<string, unknown>): GraphNode | undefined;
|
|
212
|
+
/**
|
|
213
|
+
* Reverse of the relations row builder at
|
|
214
|
+
* `packages/storage/src/duckdb-adapter.ts:299-340`. Relations round-trip
|
|
215
|
+
* cleanly because their schema is 7 scalar columns with no polymorphism.
|
|
216
|
+
* Returns `undefined` when `type` is not a known {@link RelationType} or
|
|
217
|
+
* when required scalars are missing.
|
|
218
|
+
*
|
|
219
|
+
* Exported for tests; the production call site is {@link loadPreviousGraph}.
|
|
220
|
+
*/
|
|
221
|
+
export declare function rowToCodeRelation(row: Record<string, unknown>): CodeRelation | undefined;
|
|
222
|
+
export declare function checkFastPath(repoName: string, repoPath: string, opts: AnalyzeOptions): Promise<RepoEntry | undefined>;
|
|
223
|
+
/**
|
|
224
|
+
* Probe whether the working tree has uncommitted changes. Returns `true`
|
|
225
|
+
* iff `git status --porcelain` exits 0 with non-empty stdout. Any spawn
|
|
226
|
+
* error, non-zero exit, or git-unavailable case returns `false` so the
|
|
227
|
+
* caller never blocks the fast-path on a git failure — mirroring
|
|
228
|
+
* `readGitHead`'s "cannot determine" fallback.
|
|
229
|
+
*
|
|
230
|
+
* Exported so the CLI test suite can assert the fallback posture directly
|
|
231
|
+
* without spawning a whole `runAnalyze` pipeline.
|
|
232
|
+
*/
|
|
233
|
+
export declare function isWorkingTreeDirty(repoPath: string): Promise<boolean>;
|
|
234
|
+
//# sourceMappingURL=analyze.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyze.d.ts","sourceRoot":"","sources":["../../src/commands/analyze.ts"],"names":[],"mappings":"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"}
|