@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.
Files changed (191) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +85 -0
  3. package/dist/agent-context.d.ts +54 -0
  4. package/dist/agent-context.d.ts.map +1 -0
  5. package/dist/agent-context.js +122 -0
  6. package/dist/agent-context.js.map +1 -0
  7. package/dist/cobol-proleap-setup.d.ts +77 -0
  8. package/dist/cobol-proleap-setup.d.ts.map +1 -0
  9. package/dist/cobol-proleap-setup.js +289 -0
  10. package/dist/cobol-proleap-setup.js.map +1 -0
  11. package/dist/commands/analyze.d.ts +234 -0
  12. package/dist/commands/analyze.d.ts.map +1 -0
  13. package/dist/commands/analyze.js +1096 -0
  14. package/dist/commands/analyze.js.map +1 -0
  15. package/dist/commands/augment.d.ts +48 -0
  16. package/dist/commands/augment.d.ts.map +1 -0
  17. package/dist/commands/augment.js +249 -0
  18. package/dist/commands/augment.js.map +1 -0
  19. package/dist/commands/baseline.d.ts +68 -0
  20. package/dist/commands/baseline.d.ts.map +1 -0
  21. package/dist/commands/baseline.js +110 -0
  22. package/dist/commands/baseline.js.map +1 -0
  23. package/dist/commands/bench.d.ts +54 -0
  24. package/dist/commands/bench.d.ts.map +1 -0
  25. package/dist/commands/bench.js +283 -0
  26. package/dist/commands/bench.js.map +1 -0
  27. package/dist/commands/ci-init.d.ts +37 -0
  28. package/dist/commands/ci-init.d.ts.map +1 -0
  29. package/dist/commands/ci-init.js +115 -0
  30. package/dist/commands/ci-init.js.map +1 -0
  31. package/dist/commands/clean.d.ts +13 -0
  32. package/dist/commands/clean.d.ts.map +1 -0
  33. package/dist/commands/clean.js +38 -0
  34. package/dist/commands/clean.js.map +1 -0
  35. package/dist/commands/code-pack.d.ts +105 -0
  36. package/dist/commands/code-pack.d.ts.map +1 -0
  37. package/dist/commands/code-pack.js +187 -0
  38. package/dist/commands/code-pack.js.map +1 -0
  39. package/dist/commands/context.d.ts +30 -0
  40. package/dist/commands/context.d.ts.map +1 -0
  41. package/dist/commands/context.js +237 -0
  42. package/dist/commands/context.js.map +1 -0
  43. package/dist/commands/detect-changes.d.ts +26 -0
  44. package/dist/commands/detect-changes.d.ts.map +1 -0
  45. package/dist/commands/detect-changes.js +73 -0
  46. package/dist/commands/detect-changes.js.map +1 -0
  47. package/dist/commands/doctor.d.ts +52 -0
  48. package/dist/commands/doctor.d.ts.map +1 -0
  49. package/dist/commands/doctor.js +472 -0
  50. package/dist/commands/doctor.js.map +1 -0
  51. package/dist/commands/find-enclosing-symbol.d.ts +67 -0
  52. package/dist/commands/find-enclosing-symbol.d.ts.map +1 -0
  53. package/dist/commands/find-enclosing-symbol.js +106 -0
  54. package/dist/commands/find-enclosing-symbol.js.map +1 -0
  55. package/dist/commands/group.d.ts +123 -0
  56. package/dist/commands/group.d.ts.map +1 -0
  57. package/dist/commands/group.js +448 -0
  58. package/dist/commands/group.js.map +1 -0
  59. package/dist/commands/impact.d.ts +23 -0
  60. package/dist/commands/impact.d.ts.map +1 -0
  61. package/dist/commands/impact.js +91 -0
  62. package/dist/commands/impact.js.map +1 -0
  63. package/dist/commands/index-repo.d.ts +39 -0
  64. package/dist/commands/index-repo.d.ts.map +1 -0
  65. package/dist/commands/index-repo.js +148 -0
  66. package/dist/commands/index-repo.js.map +1 -0
  67. package/dist/commands/ingest-sarif.d.ts +64 -0
  68. package/dist/commands/ingest-sarif.d.ts.map +1 -0
  69. package/dist/commands/ingest-sarif.js +381 -0
  70. package/dist/commands/ingest-sarif.js.map +1 -0
  71. package/dist/commands/init.d.ts +75 -0
  72. package/dist/commands/init.d.ts.map +1 -0
  73. package/dist/commands/init.js +315 -0
  74. package/dist/commands/init.js.map +1 -0
  75. package/dist/commands/list.d.ts +17 -0
  76. package/dist/commands/list.d.ts.map +1 -0
  77. package/dist/commands/list.js +79 -0
  78. package/dist/commands/list.js.map +1 -0
  79. package/dist/commands/mcp.d.ts +8 -0
  80. package/dist/commands/mcp.d.ts.map +1 -0
  81. package/dist/commands/mcp.js +28 -0
  82. package/dist/commands/mcp.js.map +1 -0
  83. package/dist/commands/open-store.d.ts +25 -0
  84. package/dist/commands/open-store.d.ts.map +1 -0
  85. package/dist/commands/open-store.js +47 -0
  86. package/dist/commands/open-store.js.map +1 -0
  87. package/dist/commands/pack.d.ts +35 -0
  88. package/dist/commands/pack.d.ts.map +1 -0
  89. package/dist/commands/pack.js +83 -0
  90. package/dist/commands/pack.js.map +1 -0
  91. package/dist/commands/query.d.ts +85 -0
  92. package/dist/commands/query.d.ts.map +1 -0
  93. package/dist/commands/query.js +309 -0
  94. package/dist/commands/query.js.map +1 -0
  95. package/dist/commands/scan.d.ts +81 -0
  96. package/dist/commands/scan.d.ts.map +1 -0
  97. package/dist/commands/scan.js +407 -0
  98. package/dist/commands/scan.js.map +1 -0
  99. package/dist/commands/setup.d.ts +178 -0
  100. package/dist/commands/setup.d.ts.map +1 -0
  101. package/dist/commands/setup.js +370 -0
  102. package/dist/commands/setup.js.map +1 -0
  103. package/dist/commands/sql.d.ts +19 -0
  104. package/dist/commands/sql.d.ts.map +1 -0
  105. package/dist/commands/sql.js +51 -0
  106. package/dist/commands/sql.js.map +1 -0
  107. package/dist/commands/status.d.ts +13 -0
  108. package/dist/commands/status.d.ts.map +1 -0
  109. package/dist/commands/status.js +66 -0
  110. package/dist/commands/status.js.map +1 -0
  111. package/dist/commands/verdict-render.d.ts +33 -0
  112. package/dist/commands/verdict-render.d.ts.map +1 -0
  113. package/dist/commands/verdict-render.js +123 -0
  114. package/dist/commands/verdict-render.js.map +1 -0
  115. package/dist/commands/verdict.d.ts +61 -0
  116. package/dist/commands/verdict.d.ts.map +1 -0
  117. package/dist/commands/verdict.js +146 -0
  118. package/dist/commands/verdict.js.map +1 -0
  119. package/dist/commands/wiki.d.ts +26 -0
  120. package/dist/commands/wiki.d.ts.map +1 -0
  121. package/dist/commands/wiki.js +74 -0
  122. package/dist/commands/wiki.js.map +1 -0
  123. package/dist/editors/claude-code.d.ts +23 -0
  124. package/dist/editors/claude-code.d.ts.map +1 -0
  125. package/dist/editors/claude-code.js +58 -0
  126. package/dist/editors/claude-code.js.map +1 -0
  127. package/dist/editors/codex.d.ts +22 -0
  128. package/dist/editors/codex.d.ts.map +1 -0
  129. package/dist/editors/codex.js +59 -0
  130. package/dist/editors/codex.js.map +1 -0
  131. package/dist/editors/cursor.d.ts +13 -0
  132. package/dist/editors/cursor.d.ts.map +1 -0
  133. package/dist/editors/cursor.js +21 -0
  134. package/dist/editors/cursor.js.map +1 -0
  135. package/dist/editors/index.d.ts +12 -0
  136. package/dist/editors/index.d.ts.map +1 -0
  137. package/dist/editors/index.js +11 -0
  138. package/dist/editors/index.js.map +1 -0
  139. package/dist/editors/opencode.d.ts +23 -0
  140. package/dist/editors/opencode.d.ts.map +1 -0
  141. package/dist/editors/opencode.js +61 -0
  142. package/dist/editors/opencode.js.map +1 -0
  143. package/dist/editors/types.d.ts +33 -0
  144. package/dist/editors/types.d.ts.map +1 -0
  145. package/dist/editors/types.js +19 -0
  146. package/dist/editors/types.js.map +1 -0
  147. package/dist/editors/windows-wrap.d.ts +19 -0
  148. package/dist/editors/windows-wrap.d.ts.map +1 -0
  149. package/dist/editors/windows-wrap.js +28 -0
  150. package/dist/editors/windows-wrap.js.map +1 -0
  151. package/dist/editors/windsurf.d.ts +12 -0
  152. package/dist/editors/windsurf.d.ts.map +1 -0
  153. package/dist/editors/windsurf.js +21 -0
  154. package/dist/editors/windsurf.js.map +1 -0
  155. package/dist/embedder-downloader.d.ts +87 -0
  156. package/dist/embedder-downloader.d.ts.map +1 -0
  157. package/dist/embedder-downloader.js +261 -0
  158. package/dist/embedder-downloader.js.map +1 -0
  159. package/dist/fs-atomic.d.ts +22 -0
  160. package/dist/fs-atomic.d.ts.map +1 -0
  161. package/dist/fs-atomic.js +28 -0
  162. package/dist/fs-atomic.js.map +1 -0
  163. package/dist/groups.d.ts +64 -0
  164. package/dist/groups.d.ts.map +1 -0
  165. package/dist/groups.js +172 -0
  166. package/dist/groups.js.map +1 -0
  167. package/dist/index.d.ts +11 -0
  168. package/dist/index.d.ts.map +1 -0
  169. package/dist/index.js +703 -0
  170. package/dist/index.js.map +1 -0
  171. package/dist/lib/is-indexed.d.ts +20 -0
  172. package/dist/lib/is-indexed.d.ts.map +1 -0
  173. package/dist/lib/is-indexed.js +35 -0
  174. package/dist/lib/is-indexed.js.map +1 -0
  175. package/dist/registry.d.ts +64 -0
  176. package/dist/registry.d.ts.map +1 -0
  177. package/dist/registry.js +145 -0
  178. package/dist/registry.js.map +1 -0
  179. package/dist/scip-downloader.d.ts +138 -0
  180. package/dist/scip-downloader.d.ts.map +1 -0
  181. package/dist/scip-downloader.js +372 -0
  182. package/dist/scip-downloader.js.map +1 -0
  183. package/dist/scip-pins.d.ts +99 -0
  184. package/dist/scip-pins.d.ts.map +1 -0
  185. package/dist/scip-pins.js +195 -0
  186. package/dist/scip-pins.js.map +1 -0
  187. package/dist/skills-gen.d.ts +47 -0
  188. package/dist/skills-gen.d.ts.map +1 -0
  189. package/dist/skills-gen.js +292 -0
  190. package/dist/skills-gen.js.map +1 -0
  191. 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":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EACL,QAAQ,IAAI,UAAU,EACtB,KAAK,IAAI,OAAO,EAChB,OAAO,IAAI,SAAS,EACpB,OAAO,IAAI,SAAS,EACpB,MAAM,IAAI,QAAQ,EAClB,EAAE,IAAI,IAAI,EACV,IAAI,IAAI,MAAM,GACf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,CAAC,MAAM,sBAAsB,GAAG,sCAAsC,CAAC;AAC7E,MAAM,CAAC,MAAM,oBAAoB,GAAG,QAAQ,CAAC;AAC7C,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,CAAC;AAoBlC,MAAM,CAAC,MAAM,mBAAmB,GAAe;IAC7C,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG;QAChB,OAAO,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YACzB,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,IAAgB,EAAE;gBACzC,GAAG;gBACH,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;aAClC,CAAC,CAAC;YACH,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YACjC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YACjC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE;gBACpC,MAAM,IAAI,CAAC,CAAC;YACd,CAAC,CAAC,CAAC;YACH,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE;gBACpC,MAAM,IAAI,CAAC,CAAC;YACd,CAAC,CAAC,CAAC;YACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBACxB,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,KAAK,MAAM,EAAE,EAAE,CAAC,CAAC;YACjE,CAAC,CAAC,CAAC;YACH,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;gBACxB,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;YAC5C,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IACD,KAAK,CAAC,OAAO,CAAC,MAAM;QAClB,OAAO,MAAM,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;IACjD,CAAC;IACD,KAAK,CAAC,KAAK,CAAC,IAAI;QACd,MAAM,OAAO,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC;IACD,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI;QACtB,MAAM,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC9B,CAAC;IACD,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI;QACpB,MAAM,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC5B,CAAC;IACD,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI;QACjB,MAAM,IAAI,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,IAAI,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,KAAK,EAAE,CAAC,CAAC;IACzF,CAAC;IACD,KAAK,CAAC,OAAO,CAAC,IAAI;QAChB,OAAO,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IACD,KAAK,CAAC,MAAM,CAAC,IAAI;QACf,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;YACnB,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ;gBAAE,OAAO,KAAK,CAAC;YACnE,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;CACF,CAAC;AA0BF;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,OAAiC,EAAE;IAEnC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,IAAI,mBAAmB,CAAC;IACpD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7D,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChE,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,0BAA0B,CAAC,CAAC;IAC9D,MAAM,eAAe,GAAG,SAAS,CAAC;IAClC,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE,qBAAqB,CAAC,CAAC;IAElE,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;QACxB,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;YACxE,GAAG,CAAC,uDAAuD,SAAS,EAAE,CAAC,CAAC;YACxE,OAAO;gBACL,OAAO,EAAE,SAAS;gBAClB,gBAAgB,EAAE,eAAe;gBACjC,SAAS;gBACT,SAAS,EAAE,KAAK;gBAChB,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC;IAED,2EAA2E;IAC3E,MAAM,kBAAkB,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;IACvE,MAAM,kBAAkB,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,WAAW,CAAC,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;IAC/E,MAAM,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,WAAW,CAAC,EAAE,aAAa,EAAE,eAAe,CAAC,CAAC;IAEvF,2EAA2E;IAC3E,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACvD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IAC7C,GAAG,CACD,4CAA4C,sBAAsB,KAAK,oBAAoB,GAAG,CAC/F,CAAC;IACF,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE;QAClC,OAAO;QACP,SAAS;QACT,GAAG;QACH,UAAU;QACV,oBAAoB;QACpB,sBAAsB;QACtB,MAAM;KACP,CAAC,CAAC;IACH,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACrB,MAAM,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC7B,MAAM,IAAI,KAAK,CACb,yDAAyD,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CACpG,CAAC;IACJ,CAAC;IAED,GAAG,CAAC,8EAA8E,CAAC,CAAC;IACpF,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,aAAa,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;IAC5E,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACnB,MAAM,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC7B,MAAM,IAAI,KAAK,CACb,yDAAyD,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAChG,CAAC;IACJ,CAAC;IAED,oDAAoD;IACpD,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACzC,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAC/B,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,UAAU,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,CAC7F,CAAC;IACF,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC7B,MAAM,IAAI,KAAK,CACb,oFAAoF,SAAS,EAAE,CAChG,CAAC;IACJ,CAAC;IACD,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAE/C,2EAA2E;IAC3E,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,IAAI,wBAAwB,EAAE,CAAC;IACrE,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;QACrC,MAAM,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC7B,MAAM,IAAI,KAAK,CACb,mEAAmE,UAAU,IAAI;YAC/E,8DAA8D,CACjE,CAAC;IACJ,CAAC;IACD,iEAAiE;IACjE,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC5C,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC7B,kEAAkE;IAClE,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,oBAAoB,CAAC,CAAC;IACxD,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAC1C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;IACzF,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACrB,MAAM,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC7B,MAAM,IAAI,KAAK,CACb,qDAAqD,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAChG,CAAC;IACJ,CAAC;IACD,MAAM,iBAAiB,GAAG,IAAI,CAAC,UAAU,EAAE,qBAAqB,CAAC,CAAC;IAClE,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC;QAC5C,MAAM,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC7B,MAAM,IAAI,KAAK,CACb,yFAAyF,CAC1F,CAAC;IACJ,CAAC;IAED,2EAA2E;IAC3E,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC5B,sEAAsE;IACtE,qEAAqE;IACrE,mBAAmB;IACnB,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;IAC/C,CAAC;IACD,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAAC;IACvD,CAAC;IACD,MAAM,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAE7B,GAAG,CACD,4CAA4C,SAAS,MAAM,cAAc,CAAC,QAAQ,CAAC,QAAQ;QACzF,0BAA0B,SAAS,EAAE,CACxC,CAAC;IACF,GAAG,CACD,uCAAuC;QACrC,0DAA0D,CAC7D,CAAC;IACF,OAAO;QACL,OAAO,EAAE,SAAS;QAClB,gBAAgB,EAAE,eAAe;QACjC,SAAS;QACT,SAAS,EAAE,IAAI;QACf,OAAO,EAAE,KAAK;KACf,CAAC;AACJ,CAAC;AAED,0BAA0B;AAC1B,MAAM,UAAU,gBAAgB,CAAC,IAAa;IAC5C,OAAO,IAAI,CAAC,IAAI,IAAI,OAAO,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;AAClE,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,kBAAkB,CAC/B,IAAgB,EAChB,GAAW,EACX,IAAuB,EACvB,QAAgB,EAChB,QAA4B;IAE5B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACtC,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CACb,kCAAkC,QAAQ,yBAAyB,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO;YAC7F,WAAW,CAAC,QAAQ,CAAC,CACxB,CAAC;IACJ,CAAC;IACD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,GAAG,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE,CAAC;QAChD,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;QACnC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,GAAG,QAAQ,EAAE,CAAC;YAC5C,MAAM,IAAI,KAAK,CACb,kCAAkC,QAAQ,MAAM,QAAQ,cAAc,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK;gBACtG,WAAW,CAAC,QAAQ,CAAC,CACxB,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,QAAgB;IACnC,IAAI,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,6DAA6D,CAAC;IACvE,CAAC;IACD,IAAI,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACjC,OAAO,gGAAgG,CAAC;IAC1G,CAAC;IACD,IAAI,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,CACL,iBAAiB,eAAe,kCAAkC,eAAe,QAAQ;YACzF,yBAAyB,eAAe,sBAAsB,CAC/D,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,UAAU,CAAC,MAAc;IAChC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;IACzD,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC9C,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,OAAO,MAAM,CAAC;IAC7C,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;IACvD,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC9C,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,OAAO,MAAM,CAAC;IAC7C,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,cAAc,CAAC,OAAe;IACrC,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACzD,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;AAC7B,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,IAAgB,EAAE,GAAW;IAClD,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,cAAc;IAChB,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAS,wBAAwB;IAC/B,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC9B,MAAM,UAAU,GAAG;QACjB,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,oBAAoB,CAAC;QAC1E,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,oBAAoB,CAAC;QAChF,GAAG,EAAE,CACH,IAAI,CACF,GAAG,EACH,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,cAAc,EACd,eAAe,EACf,MAAM,EACN,oBAAoB,CACrB;KACJ,CAAC;IACF,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;QAC5B,MAAM,CAAC,GAAG,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;QACxB,mDAAmD;QACnD,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,SAAS,CAA6B,CAAC;QACtE,IAAI,UAAU,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;IAC9B,CAAC;IACD,oEAAoE;IACpE,iEAAiE;IACjE,OAAO,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,oBAAoB,CAAC,CAAC;AACjF,CAAC"}
@@ -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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"}