@isac322/pi-codegraph 0.2.0 → 0.3.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 (58) hide show
  1. package/.mcp.json +1 -2
  2. package/CONTRIBUTING.md +63 -0
  3. package/README.md +35 -2
  4. package/dist/bin/codegraph-mcp.d.ts +3 -0
  5. package/dist/bin/codegraph-mcp.d.ts.map +1 -0
  6. package/dist/bin/codegraph-mcp.js +199 -0
  7. package/dist/bin/codegraph-mcp.js.map +1 -0
  8. package/dist/extensions/omp.d.ts +14 -0
  9. package/dist/extensions/omp.d.ts.map +1 -0
  10. package/dist/extensions/omp.js +19 -0
  11. package/dist/extensions/omp.js.map +1 -0
  12. package/dist/extensions/pi.d.ts +3 -0
  13. package/dist/extensions/pi.d.ts.map +1 -0
  14. package/dist/extensions/pi.js +162 -0
  15. package/dist/extensions/pi.js.map +1 -0
  16. package/dist/lib/codegraph.d.ts +65 -0
  17. package/dist/lib/codegraph.d.ts.map +1 -0
  18. package/dist/lib/codegraph.js +546 -0
  19. package/dist/lib/codegraph.js.map +1 -0
  20. package/dist/lib/config.d.ts +5 -0
  21. package/dist/lib/config.d.ts.map +1 -0
  22. package/dist/lib/config.js +131 -0
  23. package/dist/lib/config.js.map +1 -0
  24. package/dist/lib/jsonrpc.d.ts +19 -0
  25. package/dist/lib/jsonrpc.d.ts.map +1 -0
  26. package/dist/lib/jsonrpc.js +116 -0
  27. package/dist/lib/jsonrpc.js.map +1 -0
  28. package/dist/lib/pi-mcp-client.d.ts +15 -0
  29. package/dist/lib/pi-mcp-client.d.ts.map +1 -0
  30. package/dist/lib/pi-mcp-client.js +84 -0
  31. package/dist/lib/pi-mcp-client.js.map +1 -0
  32. package/dist/lib/prompt.d.ts +7 -0
  33. package/dist/lib/prompt.d.ts.map +1 -0
  34. package/dist/lib/prompt.js +16 -0
  35. package/dist/lib/prompt.js.map +1 -0
  36. package/dist/lib/tool-metadata.d.ts +10 -0
  37. package/dist/lib/tool-metadata.d.ts.map +1 -0
  38. package/dist/lib/tool-metadata.js +163 -0
  39. package/dist/lib/tool-metadata.js.map +1 -0
  40. package/dist/lib/types.d.ts +69 -0
  41. package/dist/lib/types.d.ts.map +1 -0
  42. package/dist/lib/types.js +2 -0
  43. package/dist/lib/types.js.map +1 -0
  44. package/dist/lib/worker-pool.d.ts +19 -0
  45. package/dist/lib/worker-pool.d.ts.map +1 -0
  46. package/dist/lib/worker-pool.js +221 -0
  47. package/dist/lib/worker-pool.js.map +1 -0
  48. package/package.json +29 -9
  49. package/bin/codegraph-mcp.mjs +0 -146
  50. package/extensions/omp.mjs +0 -14
  51. package/extensions/pi.mjs +0 -127
  52. package/lib/codegraph.mjs +0 -415
  53. package/lib/config.mjs +0 -103
  54. package/lib/jsonrpc.mjs +0 -90
  55. package/lib/pi-mcp-client.mjs +0 -68
  56. package/lib/prompt.mjs +0 -15
  57. package/lib/tool-metadata.mjs +0 -97
  58. package/lib/worker-pool.mjs +0 -107
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codegraph.d.ts","sourceRoot":"","sources":["../../lib/codegraph.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EAChB,MAAM,YAAY,CAAC;AAWpB,UAAU,mBAAmB;IAC3B,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,UAAU,kBAAkB;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AA+BD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,SAAQ,GAAG,MAAM,CAa5E;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM;;;EAU5D;AAED,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,OAAO,EAClB,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,GAAG,SAAS,CAYpB;AAED,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,YAAY,CAAC,EAAE,MAAM,GACpB,MAAM,CAGR;AAqBD,wBAAsB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA6D3E;AAUD,qBAAa,YAAY;IACvB,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IACjC,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC;IAEhC,OAAa,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,yBAahE;IAED,YAAY,IAAI,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,EAAE,EAG1D;IAEK,OAAO,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAchE;CACF;AAuBD,wBAAsB,sBAAsB,CAC1C,QAAQ,EAAE,iBAAiB,EAC3B,IAAI,GAAE,MAAM,EAAO,GAClB,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAiC9C;AAED,wBAAsB,YAAY,CAChC,QAAQ,EAAE,iBAAiB,EAC3B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,kBAAkB,CAAC,CAsD7B;AA+DD,qBAAa,gBAAgB;;IAC3B,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;IACrC,QAAQ,CAAC,QAAQ,sBAA6B;IAC9C,OAAO,CAAC,MAAM,CAAK;IAEnB,YAAY,QAAQ,EAAE,iBAAiB,EAEtC;IAEK,OAAO,CACX,QAAQ,EAAE,iBAAiB,EAC3B,OAAO,GAAE,mBAAwB;;;;;;;;;;OAmDlC;IA4DK,MAAM,CAAC,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAAC,eAAe,CAAC,CA4BlE;IAEK,MAAM,CAAC,QAAQ,EAAE,iBAAiB;;;;iCA0FnB,MAAM;;OAjF1B;IAEK,EAAE,CACN,cAAc,GAAE,WAAW,CAAC,MAAM,CAAqB,EACvD,KAAK,UAAQ,GACZ,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAwChC;CACF;AAED,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CA2B5E;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAC/D,iBAAiB,EACjB,qBAAqB,CACtB,GAAG;IACF,mBAAmB,EAAE,MAAM,CAAC;CAC7B,CAeA"}
@@ -0,0 +1,546 @@
1
+ import { execFile, spawn } from "node:child_process";
2
+ import { createHash } from "node:crypto";
3
+ import { access, lstat, mkdir, readdir, readFile, realpath, rename, rm, stat, symlink, writeFile, } from "node:fs/promises";
4
+ import { createRequire } from "node:module";
5
+ import os from "node:os";
6
+ import { dirname, isAbsolute, join, relative, resolve, sep } from "node:path";
7
+ import { promisify } from "node:util";
8
+ const execFileAsync = promisify(execFile);
9
+ const require = createRequire(import.meta.url);
10
+ const metadataName = ".pi-codegraph.json";
11
+ const emptyFilesMarker = "No files found matching the criteria.";
12
+ const ansiEscapePattern = new RegExp(`${String.fromCodePoint(27)}\\[[0-9;]*m`, "g");
13
+ function hasErrorCode(error, ...codes) {
14
+ return (error instanceof Error &&
15
+ "code" in error &&
16
+ typeof error.code === "string" &&
17
+ codes.includes(error.code));
18
+ }
19
+ export function sanitizeDiagnostic(value, maxLength = 2_000) {
20
+ const clean = String(value || "")
21
+ .replace(ansiEscapePattern, "")
22
+ .replace(/\b([A-Z0-9_]*(?:TOKEN|SECRET|PASSWORD|API_KEY|APIKEY|AUTH)[A-Z0-9_]*=)\S+/gi, "$1[redacted]")
23
+ .replace(/\bBearer\s+[A-Za-z0-9._~+/=-]+/gi, "Bearer [redacted]")
24
+ .replace(/--(?:token|secret|password|api-key|apikey|otp)(?:=|\s+)\S+/gi, "--[redacted]");
25
+ return clean.length > maxLength ? `${clean.slice(0, maxLength)}...` : clean;
26
+ }
27
+ export function truncateText(value, maxChars) {
28
+ const text = String(value ?? "");
29
+ if (text.length <= maxChars)
30
+ return { text, truncated: false };
31
+ const marker = "\n\n[pi-codegraph output truncated]\n\n";
32
+ const headLength = Math.floor((maxChars - marker.length) * 0.75);
33
+ const tailLength = Math.max(0, maxChars - marker.length - headLength);
34
+ return {
35
+ text: `${text.slice(0, headLength)}${marker}${text.slice(-tailLength)}`,
36
+ truncated: true,
37
+ };
38
+ }
39
+ export function normalizeFilesPath(inputPath, projectCwd) {
40
+ if (typeof inputPath !== "string" || !inputPath.trim())
41
+ return undefined;
42
+ let expanded = inputPath.trim();
43
+ if (expanded === "~" || expanded.startsWith("~/"))
44
+ expanded = join(os.homedir(), expanded.slice(1));
45
+ if (projectCwd && isAbsolute(expanded)) {
46
+ const rel = relative(projectCwd, expanded);
47
+ if (!rel)
48
+ return undefined;
49
+ if (!rel.startsWith(`..${sep}`) && rel !== ".." && !isAbsolute(rel))
50
+ return rel.split(sep).join("/");
51
+ }
52
+ return expanded.split(sep).join("/");
53
+ }
54
+ export function annotateFilesResult(text, originalPath) {
55
+ if (!originalPath || !String(text).includes(emptyFilesMarker))
56
+ return text;
57
+ return `${text}\n\nHint: codegraph_files expects a repo-relative POSIX prefix such as "src/components". The path "${originalPath}" did not match the index.`;
58
+ }
59
+ async function existingDirectory(input) {
60
+ const resolved = await realpath(resolve(input));
61
+ const info = await stat(resolved);
62
+ if (!info.isDirectory())
63
+ throw new Error(`Project path is not a directory: ${input}`);
64
+ return resolved;
65
+ }
66
+ async function gitValue(cwd, args) {
67
+ try {
68
+ const { stdout } = await execFileAsync("git", ["-C", cwd, ...args], {
69
+ timeout: 5_000,
70
+ });
71
+ return stdout.trim();
72
+ }
73
+ catch {
74
+ return "";
75
+ }
76
+ }
77
+ export async function gitIdentity(input) {
78
+ const sourcePath = await existingDirectory(input);
79
+ const top = await gitValue(sourcePath, ["rev-parse", "--show-toplevel"]);
80
+ if (!top) {
81
+ const info = await stat(sourcePath);
82
+ return {
83
+ sourcePath,
84
+ repoRoot: sourcePath,
85
+ repoIdentity: `directory:${sourcePath}:${info.dev}:${info.ino}:${info.birthtimeMs}`,
86
+ worktreeIdentity: `directory:${sourcePath}:${info.dev}:${info.ino}`,
87
+ gitCommonDir: "",
88
+ };
89
+ }
90
+ const repoRoot = await realpath(top);
91
+ const commonRaw = await gitValue(repoRoot, ["rev-parse", "--git-common-dir"]);
92
+ const gitDirRaw = await gitValue(repoRoot, ["rev-parse", "--git-dir"]);
93
+ const common = await realpath(isAbsolute(commonRaw) ? commonRaw : resolve(repoRoot, commonRaw));
94
+ const gitDir = await realpath(isAbsolute(gitDirRaw) ? gitDirRaw : resolve(repoRoot, gitDirRaw));
95
+ const [rootCommits, remote, commonInfo, gitDirInfo, sourceInfo] = await Promise.all([
96
+ gitValue(repoRoot, ["rev-list", "--max-parents=0", "HEAD"]),
97
+ gitValue(repoRoot, ["config", "--get", "remote.origin.url"]),
98
+ stat(common),
99
+ stat(gitDir),
100
+ stat(repoRoot),
101
+ ]);
102
+ const repoIdentity = createHash("sha256")
103
+ .update([
104
+ common,
105
+ rootCommits,
106
+ remote,
107
+ commonInfo.dev,
108
+ commonInfo.ino,
109
+ commonInfo.birthtimeMs,
110
+ ].join("\0"))
111
+ .digest("hex");
112
+ const worktreeIdentity = createHash("sha256")
113
+ .update([
114
+ gitDir,
115
+ gitDirInfo.dev,
116
+ gitDirInfo.ino,
117
+ repoRoot,
118
+ sourceInfo.dev,
119
+ sourceInfo.ino,
120
+ ].join("\0"))
121
+ .digest("hex");
122
+ return {
123
+ sourcePath: repoRoot,
124
+ repoRoot,
125
+ repoIdentity,
126
+ worktreeIdentity,
127
+ gitCommonDir: common,
128
+ };
129
+ }
130
+ function isWithin(child, parent) {
131
+ const rel = relative(parent, child);
132
+ return (rel === "" ||
133
+ (!rel.startsWith(`..${sep}`) && rel !== ".." && !isAbsolute(rel)));
134
+ }
135
+ export class ProjectGuard {
136
+ base;
137
+ allowedRoots;
138
+ static async create(baseRoot, settings) {
139
+ if (process.env.PI_CODEGRAPH_TRUSTED === "0")
140
+ throw new Error("CodeGraph is disabled for an untrusted project.");
141
+ const base = await gitIdentity(baseRoot);
142
+ const allowedRoots = [];
143
+ for (const root of [base.sourcePath, ...settings.allowedProjectRoots]) {
144
+ try {
145
+ allowedRoots.push(await existingDirectory(root));
146
+ }
147
+ catch {
148
+ // Ignore unavailable optional roots.
149
+ }
150
+ }
151
+ return new ProjectGuard(base, allowedRoots);
152
+ }
153
+ constructor(base, allowedRoots) {
154
+ this.base = base;
155
+ this.allowedRoots = allowedRoots;
156
+ }
157
+ async resolve(requestedPath) {
158
+ if (requestedPath && !isAbsolute(requestedPath))
159
+ throw new Error("CodeGraph projectPath must be absolute.");
160
+ const identity = await gitIdentity(requestedPath || this.base.sourcePath);
161
+ if (this.allowedRoots.some((root) => isWithin(identity.sourcePath, root)))
162
+ return identity;
163
+ if (this.base.gitCommonDir &&
164
+ identity.gitCommonDir === this.base.gitCommonDir)
165
+ return identity;
166
+ throw new Error(`CodeGraph projectPath is outside the trusted workspace and registered worktrees: ${identity.sourcePath}`);
167
+ }
168
+ }
169
+ async function locatePackageJson(entry) {
170
+ let current = dirname(entry);
171
+ for (;;) {
172
+ const candidate = join(current, "package.json");
173
+ try {
174
+ const parsed = JSON.parse(await readFile(candidate, "utf8"));
175
+ if (parsed.name === "@colbymchenry/codegraph")
176
+ return { path: candidate, parsed };
177
+ }
178
+ catch {
179
+ // Continue toward the filesystem root.
180
+ }
181
+ const parent = dirname(current);
182
+ if (parent === current)
183
+ return undefined;
184
+ current = parent;
185
+ }
186
+ }
187
+ export async function resolveCodeGraphLaunch(settings, args = []) {
188
+ if (settings.codegraphExecutable)
189
+ return { command: settings.codegraphExecutable, args };
190
+ try {
191
+ let packageJson;
192
+ try {
193
+ const packagePath = require.resolve("@colbymchenry/codegraph/package.json");
194
+ packageJson = {
195
+ path: packagePath,
196
+ parsed: JSON.parse(await readFile(packagePath, "utf8")),
197
+ };
198
+ }
199
+ catch {
200
+ packageJson = await locatePackageJson(require.resolve("@colbymchenry/codegraph"));
201
+ }
202
+ const binValue = typeof packageJson?.parsed?.bin === "string"
203
+ ? packageJson.parsed.bin
204
+ : packageJson?.parsed?.bin?.codegraph;
205
+ if (binValue && packageJson)
206
+ return {
207
+ command: process.execPath,
208
+ args: [resolve(dirname(packageJson.path), binValue), ...args],
209
+ };
210
+ }
211
+ catch {
212
+ // Fall through to a global executable.
213
+ }
214
+ return { command: "codegraph", args };
215
+ }
216
+ export async function runCodeGraph(settings, cwd, args, options = {}) {
217
+ const launch = await resolveCodeGraphLaunch(settings, args);
218
+ return new Promise((resolvePromise, reject) => {
219
+ const child = spawn(launch.command, launch.args, {
220
+ cwd,
221
+ env: process.env,
222
+ stdio: ["ignore", "pipe", "pipe"],
223
+ });
224
+ let stdout = "";
225
+ let stderr = "";
226
+ let settled = false;
227
+ const finish = (error, value) => {
228
+ if (settled)
229
+ return;
230
+ settled = true;
231
+ clearTimeout(timer);
232
+ options.signal?.removeEventListener("abort", onAbort);
233
+ if (error)
234
+ reject(error);
235
+ else if (value)
236
+ resolvePromise(value);
237
+ };
238
+ const onAbort = () => {
239
+ child.kill();
240
+ const error = new Error(`codegraph ${args[0]} aborted`);
241
+ error.name = "AbortError";
242
+ finish(error);
243
+ };
244
+ child.stdout.on("data", (chunk) => {
245
+ stdout += chunk.toString("utf8");
246
+ });
247
+ child.stderr.on("data", (chunk) => {
248
+ stderr += chunk.toString("utf8");
249
+ });
250
+ child.on("error", finish);
251
+ child.on("exit", (code) => {
252
+ if (code === 0)
253
+ finish(undefined, { stdout, stderr });
254
+ else
255
+ finish(new Error(sanitizeDiagnostic(stderr) ||
256
+ `codegraph ${args[0]} exited with code ${code}`));
257
+ });
258
+ const timeoutMs = options.timeoutMs || settings.requestTimeoutMs;
259
+ const timer = setTimeout(() => {
260
+ child.kill();
261
+ const error = new Error(`codegraph ${args[0]} timed out after ${timeoutMs}ms`);
262
+ error.code = "ETIMEDOUT";
263
+ finish(error);
264
+ }, timeoutMs);
265
+ timer.unref?.();
266
+ options.signal?.addEventListener("abort", onAbort, { once: true });
267
+ });
268
+ }
269
+ async function exists(input) {
270
+ try {
271
+ await access(input);
272
+ return true;
273
+ }
274
+ catch {
275
+ return false;
276
+ }
277
+ }
278
+ async function readMetadata(indexPath) {
279
+ try {
280
+ return JSON.parse(await readFile(join(indexPath, metadataName), "utf8"));
281
+ }
282
+ catch {
283
+ return undefined;
284
+ }
285
+ }
286
+ async function writeMetadata(indexPath, metadata) {
287
+ const target = join(indexPath, metadataName);
288
+ const temporary = `${target}.${process.pid}.tmp`;
289
+ await writeFile(temporary, `${JSON.stringify(metadata, null, 2)}\n`, {
290
+ mode: 0o600,
291
+ });
292
+ await rename(temporary, target);
293
+ }
294
+ async function acquireLock(lockPath, timeoutMs = 30_000) {
295
+ await mkdir(dirname(lockPath), { recursive: true });
296
+ const started = Date.now();
297
+ for (;;) {
298
+ try {
299
+ await mkdir(lockPath);
300
+ return async () => rm(lockPath, { recursive: true, force: true });
301
+ }
302
+ catch (error) {
303
+ if (!hasErrorCode(error, "EEXIST"))
304
+ throw error;
305
+ try {
306
+ const info = await stat(lockPath);
307
+ if (Date.now() - info.mtimeMs > timeoutMs * 2)
308
+ await rm(lockPath, { recursive: true, force: true });
309
+ }
310
+ catch {
311
+ // Another owner released the lock.
312
+ }
313
+ if (Date.now() - started >= timeoutMs)
314
+ throw new Error(`Timed out waiting for CodeGraph index lock: ${lockPath}`);
315
+ await new Promise((resolvePromise) => setTimeout(resolvePromise, 100));
316
+ }
317
+ }
318
+ }
319
+ export class WorkspaceManager {
320
+ settings;
321
+ lastSync = new Map();
322
+ lastGc = 0;
323
+ constructor(settings) {
324
+ this.settings = settings;
325
+ }
326
+ async prepare(identity, options = {}) {
327
+ await existingDirectory(identity.sourcePath);
328
+ const key = createHash("sha256")
329
+ .update(`${identity.repoIdentity}\0${identity.worktreeIdentity}\0${identity.sourcePath}`)
330
+ .digest("hex");
331
+ const managedIndex = join(this.settings.indexStore, "projects", key);
332
+ const lockPath = join(this.settings.indexStore, "locks", `${key}.lock`);
333
+ const release = await acquireLock(lockPath, this.settings.requestTimeoutMs);
334
+ try {
335
+ await existingDirectory(identity.sourcePath);
336
+ const binding = await this.#bind(identity, managedIndex);
337
+ const database = join(binding.indexPath, "codegraph.db");
338
+ if (!(await exists(database)))
339
+ await runCodeGraph(this.settings, identity.sourcePath, ["init", "-i"], options);
340
+ const lastSync = this.lastSync.get(identity.sourcePath) || 0;
341
+ const shouldSync = (options.forceSync || this.settings.autoSync) &&
342
+ (options.forceSync ||
343
+ Date.now() - lastSync >= this.settings.syncMinIntervalMs);
344
+ if (shouldSync) {
345
+ await existingDirectory(identity.sourcePath);
346
+ await runCodeGraph(this.settings, identity.sourcePath, ["sync"], options);
347
+ this.lastSync.set(identity.sourcePath, Date.now());
348
+ }
349
+ const metadata = {
350
+ schemaVersion: 2,
351
+ sourcePath: identity.sourcePath,
352
+ repoIdentity: identity.repoIdentity,
353
+ worktreeIdentity: identity.worktreeIdentity,
354
+ managed: binding.managed,
355
+ lastPreparedAt: new Date().toISOString(),
356
+ lastSyncAt: this.lastSync.get(identity.sourcePath) || null,
357
+ };
358
+ await writeMetadata(binding.indexPath, metadata);
359
+ return { ...metadata, indexPath: binding.indexPath, state: "ready" };
360
+ }
361
+ finally {
362
+ await release();
363
+ }
364
+ }
365
+ async #bind(identity, managedIndex) {
366
+ const linkPath = join(identity.sourcePath, ".codegraph");
367
+ await mkdir(managedIndex, { recursive: true });
368
+ try {
369
+ const info = await lstat(linkPath);
370
+ if (info.isSymbolicLink()) {
371
+ let target;
372
+ try {
373
+ target = await realpath(linkPath);
374
+ }
375
+ catch {
376
+ target = "";
377
+ }
378
+ if (target === managedIndex)
379
+ return { indexPath: managedIndex, managed: true };
380
+ const metadata = target ? await readMetadata(target) : undefined;
381
+ if (metadata?.managed && metadata.sourcePath === identity.sourcePath) {
382
+ await rm(linkPath, { force: true });
383
+ }
384
+ else {
385
+ throw new Error(`Refusing to replace an unmanaged .codegraph symlink at ${identity.sourcePath}`);
386
+ }
387
+ }
388
+ else if (info.isDirectory()) {
389
+ const metadata = await readMetadata(linkPath);
390
+ if (metadata &&
391
+ (metadata.repoIdentity !== identity.repoIdentity ||
392
+ metadata.worktreeIdentity !== identity.worktreeIdentity)) {
393
+ throw new Error(`Existing .codegraph belongs to a different repository identity: ${linkPath}`);
394
+ }
395
+ return { indexPath: linkPath, managed: false };
396
+ }
397
+ else {
398
+ throw new Error(`Expected .codegraph to be a directory or symlink: ${linkPath}`);
399
+ }
400
+ }
401
+ catch (error) {
402
+ if (!hasErrorCode(error, "ENOENT"))
403
+ throw error;
404
+ }
405
+ await existingDirectory(identity.sourcePath);
406
+ const temporary = `${linkPath}.pi-codegraph-${process.pid}`;
407
+ await rm(temporary, { force: true });
408
+ await symlink(managedIndex, temporary, "dir");
409
+ try {
410
+ await rename(temporary, linkPath);
411
+ }
412
+ catch (error) {
413
+ await rm(temporary, { force: true });
414
+ if (!hasErrorCode(error, "EEXIST", "ENOTEMPTY"))
415
+ throw error;
416
+ }
417
+ return { indexPath: await realpath(linkPath), managed: true };
418
+ }
419
+ async status(identity) {
420
+ const linkPath = join(identity.sourcePath, ".codegraph");
421
+ try {
422
+ const indexPath = await realpath(linkPath);
423
+ const metadata = await readMetadata(indexPath);
424
+ return {
425
+ state: (await exists(join(indexPath, "codegraph.db")))
426
+ ? "ready"
427
+ : "uninitialized",
428
+ sourcePath: identity.sourcePath,
429
+ indexPath,
430
+ managed: metadata?.managed ?? false,
431
+ lastSyncAt: metadata?.lastSyncAt || null,
432
+ identityMatches: !metadata ||
433
+ (metadata.repoIdentity === identity.repoIdentity &&
434
+ metadata.worktreeIdentity === identity.worktreeIdentity),
435
+ };
436
+ }
437
+ catch {
438
+ return {
439
+ state: "missing",
440
+ sourcePath: identity.sourcePath,
441
+ indexPath: null,
442
+ managed: false,
443
+ lastSyncAt: null,
444
+ identityMatches: true,
445
+ };
446
+ }
447
+ }
448
+ async doctor(identity) {
449
+ const version = await runCodeGraph(this.settings, identity.sourcePath, [
450
+ "--version",
451
+ ]);
452
+ return {
453
+ executable: version.stdout.trim() || version.stderr.trim(),
454
+ workspace: await this.status(identity),
455
+ settings: publicSettings(this.settings),
456
+ };
457
+ }
458
+ async gc(activeProjects = new Set(), force = false) {
459
+ if (!this.settings.autoGc && !force)
460
+ return { removed: [] };
461
+ if (!force && Date.now() - this.lastGc < 60 * 60_000)
462
+ return { removed: [] };
463
+ this.lastGc = Date.now();
464
+ const projectsRoot = join(this.settings.indexStore, "projects");
465
+ let entries = [];
466
+ try {
467
+ entries = await readdir(projectsRoot, { withFileTypes: true });
468
+ }
469
+ catch {
470
+ return { removed: [] };
471
+ }
472
+ const removed = [];
473
+ for (const entry of entries) {
474
+ if (!entry.isDirectory())
475
+ continue;
476
+ const indexPath = join(projectsRoot, entry.name);
477
+ const metadata = await readMetadata(indexPath);
478
+ if (!metadata?.managed ||
479
+ typeof metadata.sourcePath !== "string" ||
480
+ activeProjects.has(metadata.sourcePath))
481
+ continue;
482
+ let stale = !(await exists(metadata.sourcePath));
483
+ if (!stale) {
484
+ try {
485
+ const identity = await gitIdentity(metadata.sourcePath);
486
+ stale =
487
+ identity.repoIdentity !== metadata.repoIdentity ||
488
+ identity.worktreeIdentity !== metadata.worktreeIdentity;
489
+ }
490
+ catch {
491
+ stale = true;
492
+ }
493
+ }
494
+ if (stale) {
495
+ await rm(indexPath, { recursive: true, force: true });
496
+ removed.push(indexPath);
497
+ }
498
+ }
499
+ return { removed };
500
+ }
501
+ }
502
+ export async function workspaceSummary(cwd) {
503
+ try {
504
+ const identity = await gitIdentity(cwd);
505
+ const linkPath = join(identity.sourcePath, ".codegraph");
506
+ const indexPath = await realpath(linkPath);
507
+ const metadata = await readMetadata(indexPath);
508
+ return {
509
+ state: (await exists(join(indexPath, "codegraph.db")))
510
+ ? "ready"
511
+ : "uninitialized",
512
+ sourcePath: identity.sourcePath,
513
+ indexPath,
514
+ lastSyncAt: metadata?.lastSyncAt || null,
515
+ identityMatches: !metadata ||
516
+ (metadata.repoIdentity === identity.repoIdentity &&
517
+ metadata.worktreeIdentity === identity.worktreeIdentity),
518
+ };
519
+ }
520
+ catch {
521
+ return {
522
+ state: "missing",
523
+ sourcePath: resolve(cwd),
524
+ indexPath: null,
525
+ lastSyncAt: null,
526
+ identityMatches: true,
527
+ };
528
+ }
529
+ }
530
+ export function publicSettings(settings) {
531
+ return {
532
+ autoSync: settings.autoSync,
533
+ autoGc: settings.autoGc,
534
+ indexStore: settings.indexStore,
535
+ workerIdleTimeoutMs: settings.workerIdleTimeoutMs,
536
+ maxWorkers: settings.maxWorkers,
537
+ requestTimeoutMs: settings.requestTimeoutMs,
538
+ syncMinIntervalMs: settings.syncMinIntervalMs,
539
+ maxOutputChars: settings.maxOutputChars,
540
+ allowedProjectRoots: settings.allowedProjectRoots,
541
+ promptInjection: settings.promptInjection,
542
+ codegraphExecutable: settings.codegraphExecutable || "auto",
543
+ configFile: settings.configFile,
544
+ };
545
+ }
546
+ //# sourceMappingURL=codegraph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codegraph.js","sourceRoot":"","sources":["../../lib/codegraph.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { CodeGraphSettings } from "./types.js";
2
+ export declare const defaultSettings: Readonly<CodeGraphSettings>;
3
+ export declare function loadSettings(overrides?: Partial<CodeGraphSettings>): Promise<CodeGraphSettings>;
4
+ export declare function settingsEnvironment(settings: CodeGraphSettings, baseRoot: string, trusted?: boolean): NodeJS.ProcessEnv;
5
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../lib/config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAmBpD,eAAO,MAAM,eAAe,EAAE,QAAQ,CAAC,iBAAiB,CAatD,CAAC;AA0EH,wBAAsB,YAAY,CAChC,SAAS,GAAE,OAAO,CAAC,iBAAiB,CAAM,GACzC,OAAO,CAAC,iBAAiB,CAAC,CA2C5B;AAED,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,iBAAiB,EAC3B,QAAQ,EAAE,MAAM,EAChB,OAAO,UAAO,GACb,MAAM,CAAC,UAAU,CAoBnB"}