@graphpilot-oss/graphpilot 0.0.1 → 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/CHANGELOG.md +73 -126
- package/README.md +359 -101
- package/dist/cli.js +20 -0
- package/dist/cli.js.map +1 -1
- package/dist/indexer.js +3 -3
- package/dist/indexer.js.map +1 -1
- package/dist/init.d.ts +28 -0
- package/dist/init.js +112 -0
- package/dist/init.js.map +1 -0
- package/dist/interactions.d.ts +5 -4
- package/dist/interactions.js +0 -0
- package/dist/interactions.js.map +1 -1
- package/dist/mcp.js +126 -46
- package/dist/mcp.js.map +1 -1
- package/dist/repo-resolve.d.ts +47 -0
- package/dist/repo-resolve.js +195 -0
- package/dist/repo-resolve.js.map +1 -0
- package/dist/storage.js +10 -1
- package/dist/storage.js.map +1 -1
- package/dist/validation.js +30 -4
- package/dist/validation.js.map +1 -1
- package/dist/watcher.d.ts +10 -0
- package/dist/watcher.js +70 -7
- package/dist/watcher.js.map +1 -1
- package/examples/README.md +105 -0
- package/examples/claude-code/README.md +125 -0
- package/examples/claude-code/claude-routing.md +102 -0
- package/examples/claude-code/claude_config.json +8 -0
- package/examples/cline/.clinerules +39 -0
- package/examples/cline/README.md +104 -0
- package/examples/cline/cline_mcp_settings.json +10 -0
- package/examples/continue/.continuerules +39 -0
- package/examples/continue/README.md +98 -0
- package/examples/continue/config.json +13 -0
- package/examples/cursor/.cursorrules +39 -0
- package/examples/cursor/README.md +98 -0
- package/examples/cursor/mcp.json +11 -0
- package/examples/windsurf/.windsurfrules +39 -0
- package/examples/windsurf/README.md +85 -0
- package/examples/windsurf/mcp_config.json +8 -0
- package/package.json +12 -3
- package/.editorconfig +0 -15
- package/.github/CODEOWNERS +0 -22
- package/.github/FUNDING.yml +0 -1
- package/.github/ISSUE_TEMPLATE/bug_report.md +0 -33
- package/.github/ISSUE_TEMPLATE/config.yml +0 -5
- package/.github/ISSUE_TEMPLATE/feature_request.md +0 -23
- package/.github/PULL_REQUEST_TEMPLATE.md +0 -19
- package/.github/dependabot.yml +0 -15
- package/.github/workflows/ci.yml +0 -62
- package/.github/workflows/release.yml +0 -50
- package/.prettierignore +0 -19
- package/.prettierrc.json +0 -20
- package/CODE_OF_CONDUCT.md +0 -83
- package/CONTRIBUTING.md +0 -111
- package/bench/README.md +0 -544
- package/bench/results/agent-tier-2026-05-22.md +0 -28
- package/bench/results/agent-tier-summary.md +0 -44
- package/bench/results/baseline-tier-2026-05-22.md +0 -23
- package/bench/results/baseline.json +0 -810
- package/bench/results/baseline.md +0 -28
- package/bench/run-agent-tier-automated.ts +0 -234
- package/bench/run-agent-tier.md +0 -125
- package/bench/run-baseline-tier.ts +0 -200
- package/bench/run.ts +0 -210
- package/bench/runner-baseline.ts +0 -177
- package/bench/runner-graphpilot.ts +0 -131
- package/bench/score-agent-tier.ts +0 -191
- package/bench/score.ts +0 -59
- package/bench/tasks.ts +0 -236
- package/dist/provenance.d.ts +0 -74
- package/dist/provenance.js +0 -95
- package/dist/provenance.js.map +0 -1
- package/docs/architecture.md +0 -311
- package/docs/limitations.md +0 -156
- package/docs/mcp-setup.md +0 -231
- package/docs/quickstart.md +0 -202
- package/eslint.config.js +0 -148
- package/lefthook.yml +0 -81
- package/pnpm-workspace.yaml +0 -6
- package/scripts/smoke-stdio.mjs +0 -97
- package/src/cli.ts +0 -171
- package/src/edges.ts +0 -202
- package/src/git.ts +0 -255
- package/src/graph-schema.ts +0 -229
- package/src/impact.ts +0 -218
- package/src/indexer.ts +0 -152
- package/src/interactions.ts +0 -0
- package/src/mcp.ts +0 -652
- package/src/parser.ts +0 -138
- package/src/provenance.ts +0 -115
- package/src/query.ts +0 -148
- package/src/redact.ts +0 -122
- package/src/storage.ts +0 -115
- package/src/symbols.ts +0 -173
- package/src/validation.ts +0 -69
- package/src/validators.ts +0 -253
- package/src/watcher.ts +0 -383
- package/tests/edges.test.ts +0 -175
- package/tests/fixtures/sample.ts +0 -32
- package/tests/git.test.ts +0 -303
- package/tests/graph-schema.test.ts +0 -321
- package/tests/impact.test.ts +0 -454
- package/tests/interactions.test.ts +0 -180
- package/tests/lint-policy.test.ts +0 -106
- package/tests/mcp-stdio.test.ts +0 -171
- package/tests/mcp.test.ts +0 -335
- package/tests/parser.test.ts +0 -31
- package/tests/provenance.test.ts +0 -132
- package/tests/query.test.ts +0 -160
- package/tests/redact.test.ts +0 -167
- package/tests/security.test.ts +0 -144
- package/tests/symbols.test.ts +0 -78
- package/tests/validators.test.ts +0 -193
- package/tests/watcher.test.ts +0 -250
- package/tsconfig.json +0 -18
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default repo-path resolution for MCP tool calls.
|
|
3
|
+
*
|
|
4
|
+
* Agents often omit `path` or pass "." while the MCP process cwd is the
|
|
5
|
+
* user's home directory — not the open workspace. Resolution order:
|
|
6
|
+
*
|
|
7
|
+
* 1. Explicit `path` argument
|
|
8
|
+
* 2. GRAPHPILOT_ROOT environment variable
|
|
9
|
+
* 3. MCP client workspace roots (roots/list)
|
|
10
|
+
* 4. Walk parents of process.cwd() for an on-disk index
|
|
11
|
+
* 5. Unique index whose rootPath contains cwd
|
|
12
|
+
* 6. Sole index under ~/.graphpilot
|
|
13
|
+
* 7. process.cwd() (may error with a helpful message)
|
|
14
|
+
*/
|
|
15
|
+
import { type Graph } from './storage.js';
|
|
16
|
+
export interface IndexedRepoSummary {
|
|
17
|
+
rootPath: string;
|
|
18
|
+
repoId: string;
|
|
19
|
+
indexedAt: string;
|
|
20
|
+
symbolCount: number;
|
|
21
|
+
edgeCount: number;
|
|
22
|
+
}
|
|
23
|
+
export declare function setMcpClientRoots(roots: string[]): void;
|
|
24
|
+
export declare function getMcpClientRoots(): readonly string[];
|
|
25
|
+
/**
|
|
26
|
+
* Convert an MCP root URI to an absolute filesystem path.
|
|
27
|
+
* Supports file:// URIs (the common case from Cursor and VS Code).
|
|
28
|
+
*/
|
|
29
|
+
export declare function rootUriToFilesystemPath(uri: string): string | null;
|
|
30
|
+
/** True when `child` is `parent` or a subdirectory of `parent`. */
|
|
31
|
+
export declare function isPathUnder(child: string, parent: string): boolean;
|
|
32
|
+
/**
|
|
33
|
+
* List every valid index under ~/.graphpilot by reading each graph.json.
|
|
34
|
+
* Best-effort: skips corrupt entries.
|
|
35
|
+
*/
|
|
36
|
+
export declare function listIndexedRepos(): IndexedRepoSummary[];
|
|
37
|
+
/**
|
|
38
|
+
* Resolve which filesystem path to use for an MCP tool call before
|
|
39
|
+
* worktree re-rooting and graph loading.
|
|
40
|
+
*/
|
|
41
|
+
export declare function resolveRepoPath(rawPath?: string): string;
|
|
42
|
+
/**
|
|
43
|
+
* Build a helpful error when no graph exists for the resolved root.
|
|
44
|
+
*/
|
|
45
|
+
export declare function formatNoIndexError(requestedPath: string, resolvedWorktreeRoot: string): string;
|
|
46
|
+
/** @internal Test hook: summarize a loaded graph. */
|
|
47
|
+
export declare function graphSummary(g: Graph): IndexedRepoSummary;
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default repo-path resolution for MCP tool calls.
|
|
3
|
+
*
|
|
4
|
+
* Agents often omit `path` or pass "." while the MCP process cwd is the
|
|
5
|
+
* user's home directory — not the open workspace. Resolution order:
|
|
6
|
+
*
|
|
7
|
+
* 1. Explicit `path` argument
|
|
8
|
+
* 2. GRAPHPILOT_ROOT environment variable
|
|
9
|
+
* 3. MCP client workspace roots (roots/list)
|
|
10
|
+
* 4. Walk parents of process.cwd() for an on-disk index
|
|
11
|
+
* 5. Unique index whose rootPath contains cwd
|
|
12
|
+
* 6. Sole index under ~/.graphpilot
|
|
13
|
+
* 7. process.cwd() (may error with a helpful message)
|
|
14
|
+
*/
|
|
15
|
+
import { existsSync, readdirSync, readFileSync } from 'node:fs';
|
|
16
|
+
import { homedir } from 'node:os';
|
|
17
|
+
import { dirname, join, resolve } from 'node:path';
|
|
18
|
+
import { fileURLToPath } from 'node:url';
|
|
19
|
+
import { loadGraph } from './storage.js';
|
|
20
|
+
import { resolveIndexRoot } from './git.js';
|
|
21
|
+
/** Workspace roots reported by the MCP client via roots/list. */
|
|
22
|
+
let mcpClientRoots = [];
|
|
23
|
+
export function setMcpClientRoots(roots) {
|
|
24
|
+
mcpClientRoots = roots;
|
|
25
|
+
}
|
|
26
|
+
export function getMcpClientRoots() {
|
|
27
|
+
return mcpClientRoots;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Convert an MCP root URI to an absolute filesystem path.
|
|
31
|
+
* Supports file:// URIs (the common case from Cursor and VS Code).
|
|
32
|
+
*/
|
|
33
|
+
export function rootUriToFilesystemPath(uri) {
|
|
34
|
+
const trimmed = uri.trim();
|
|
35
|
+
if (!trimmed)
|
|
36
|
+
return null;
|
|
37
|
+
if (trimmed.startsWith('file://')) {
|
|
38
|
+
try {
|
|
39
|
+
return resolve(fileURLToPath(trimmed));
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
// Some clients may pass a plain path; accept only absolute-looking paths.
|
|
46
|
+
if (/^([A-Za-z]:[\\/]|\/)/.test(trimmed)) {
|
|
47
|
+
return resolve(trimmed);
|
|
48
|
+
}
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
function normalizeForCompare(p) {
|
|
52
|
+
return resolve(p).replace(/\\/g, '/').toLowerCase();
|
|
53
|
+
}
|
|
54
|
+
/** True when `child` is `parent` or a subdirectory of `parent`. */
|
|
55
|
+
export function isPathUnder(child, parent) {
|
|
56
|
+
const c = normalizeForCompare(child);
|
|
57
|
+
const p = normalizeForCompare(parent);
|
|
58
|
+
return c === p || c.startsWith(p + '/');
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* List every valid index under ~/.graphpilot by reading each graph.json.
|
|
62
|
+
* Best-effort: skips corrupt entries.
|
|
63
|
+
*/
|
|
64
|
+
export function listIndexedRepos() {
|
|
65
|
+
const base = join(homedir(), '.graphpilot');
|
|
66
|
+
if (!existsSync(base))
|
|
67
|
+
return [];
|
|
68
|
+
const out = [];
|
|
69
|
+
let entries;
|
|
70
|
+
try {
|
|
71
|
+
entries = readdirSync(base);
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
return [];
|
|
75
|
+
}
|
|
76
|
+
for (const repoId of entries) {
|
|
77
|
+
const graphFile = join(base, repoId, 'graph.json');
|
|
78
|
+
if (!existsSync(graphFile))
|
|
79
|
+
continue;
|
|
80
|
+
let raw;
|
|
81
|
+
try {
|
|
82
|
+
raw = readFileSync(graphFile, 'utf8');
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
let parsed;
|
|
88
|
+
try {
|
|
89
|
+
parsed = JSON.parse(raw);
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
if (!parsed || typeof parsed !== 'object')
|
|
95
|
+
continue;
|
|
96
|
+
const o = parsed;
|
|
97
|
+
const rootPath = typeof o.rootPath === 'string' ? o.rootPath : null;
|
|
98
|
+
if (!rootPath)
|
|
99
|
+
continue;
|
|
100
|
+
const graph = loadGraph(rootPath);
|
|
101
|
+
if (!graph)
|
|
102
|
+
continue;
|
|
103
|
+
out.push({
|
|
104
|
+
rootPath: graph.rootPath,
|
|
105
|
+
repoId: graph.repoId,
|
|
106
|
+
indexedAt: graph.indexedAt,
|
|
107
|
+
symbolCount: graph.symbolCount,
|
|
108
|
+
edgeCount: graph.edgeCount,
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
return out.sort((a, b) => b.indexedAt.localeCompare(a.indexedAt));
|
|
112
|
+
}
|
|
113
|
+
function firstRootWithIndex(paths) {
|
|
114
|
+
for (const p of paths) {
|
|
115
|
+
const { root } = resolveIndexRoot(p);
|
|
116
|
+
if (loadGraph(root))
|
|
117
|
+
return p;
|
|
118
|
+
}
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Resolve which filesystem path to use for an MCP tool call before
|
|
123
|
+
* worktree re-rooting and graph loading.
|
|
124
|
+
*/
|
|
125
|
+
export function resolveRepoPath(rawPath) {
|
|
126
|
+
if (rawPath !== undefined && rawPath.trim() !== '') {
|
|
127
|
+
return resolve(rawPath.trim());
|
|
128
|
+
}
|
|
129
|
+
const envRoot = process.env.GRAPHPILOT_ROOT?.trim();
|
|
130
|
+
if (envRoot) {
|
|
131
|
+
return resolve(envRoot);
|
|
132
|
+
}
|
|
133
|
+
const fromMcp = firstRootWithIndex([...mcpClientRoots]);
|
|
134
|
+
if (fromMcp)
|
|
135
|
+
return fromMcp;
|
|
136
|
+
let cur = resolve(process.cwd());
|
|
137
|
+
for (let i = 0; i < 64; i++) {
|
|
138
|
+
const { root } = resolveIndexRoot(cur);
|
|
139
|
+
if (loadGraph(root))
|
|
140
|
+
return cur;
|
|
141
|
+
const parent = dirname(cur);
|
|
142
|
+
if (parent === cur)
|
|
143
|
+
break;
|
|
144
|
+
cur = parent;
|
|
145
|
+
}
|
|
146
|
+
const indexed = listIndexedRepos();
|
|
147
|
+
const cwd = resolve(process.cwd());
|
|
148
|
+
const underCwd = indexed.filter((r) => isPathUnder(cwd, r.rootPath));
|
|
149
|
+
if (underCwd.length === 1) {
|
|
150
|
+
return resolve(underCwd[0].rootPath);
|
|
151
|
+
}
|
|
152
|
+
if (indexed.length === 1) {
|
|
153
|
+
return resolve(indexed[0].rootPath);
|
|
154
|
+
}
|
|
155
|
+
return cwd;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Build a helpful error when no graph exists for the resolved root.
|
|
159
|
+
*/
|
|
160
|
+
export function formatNoIndexError(requestedPath, resolvedWorktreeRoot) {
|
|
161
|
+
const indexed = listIndexedRepos();
|
|
162
|
+
const lines = [
|
|
163
|
+
`No GraphPilot index found for ${resolvedWorktreeRoot}.`,
|
|
164
|
+
`(Resolved from: ${requestedPath})`,
|
|
165
|
+
'',
|
|
166
|
+
'Fix:',
|
|
167
|
+
` • Run \`graphpilot index ${resolvedWorktreeRoot}\` in a terminal, or`,
|
|
168
|
+
' • Call the gp_index tool with the same path, or',
|
|
169
|
+
' • Set GRAPHPILOT_ROOT to your workspace folder in MCP config, or',
|
|
170
|
+
' • Use a Cursor/VS Code MCP client that supports workspace roots.',
|
|
171
|
+
];
|
|
172
|
+
if (indexed.length > 0) {
|
|
173
|
+
lines.push('', 'Indexed repos on this machine:');
|
|
174
|
+
const cap = 8;
|
|
175
|
+
for (const r of indexed.slice(0, cap)) {
|
|
176
|
+
lines.push(` • ${r.rootPath} (${r.symbolCount} symbols, ${r.edgeCount} calls, ${r.indexedAt})`);
|
|
177
|
+
}
|
|
178
|
+
if (indexed.length > cap) {
|
|
179
|
+
lines.push(` … and ${indexed.length - cap} more`);
|
|
180
|
+
}
|
|
181
|
+
lines.push('', 'Pass an explicit `path` to target one of the above.');
|
|
182
|
+
}
|
|
183
|
+
return lines.join('\n');
|
|
184
|
+
}
|
|
185
|
+
/** @internal Test hook: summarize a loaded graph. */
|
|
186
|
+
export function graphSummary(g) {
|
|
187
|
+
return {
|
|
188
|
+
rootPath: g.rootPath,
|
|
189
|
+
repoId: g.repoId,
|
|
190
|
+
indexedAt: g.indexedAt,
|
|
191
|
+
symbolCount: g.symbolCount,
|
|
192
|
+
edgeCount: g.edgeCount,
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
//# sourceMappingURL=repo-resolve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repo-resolve.js","sourceRoot":"","sources":["../src/repo-resolve.ts"],"names":[],"mappings":"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"}
|
package/dist/storage.js
CHANGED
|
@@ -30,7 +30,8 @@ export function saveGraph(graph) {
|
|
|
30
30
|
// fail T4's schema validator and force a full re-index. Defends watch
|
|
31
31
|
// mode (which writes many times) against ungraceful shutdowns.
|
|
32
32
|
const tmpPath = path + '.tmp';
|
|
33
|
-
|
|
33
|
+
const pretty = process.env['GRAPHPILOT_PRETTY'] === '1';
|
|
34
|
+
writeFileSync(tmpPath, pretty ? JSON.stringify(graph, null, 2) : JSON.stringify(graph), {
|
|
34
35
|
encoding: 'utf8',
|
|
35
36
|
mode: 0o600,
|
|
36
37
|
});
|
|
@@ -80,6 +81,14 @@ export function loadGraph(absRootPath) {
|
|
|
80
81
|
'\n');
|
|
81
82
|
return null;
|
|
82
83
|
}
|
|
84
|
+
// Reject graphs whose stored rootPath doesn't match the directory we
|
|
85
|
+
// derived the storage path from. Guards against a graph.json copied from
|
|
86
|
+
// another project landing in a sibling repo's ~/.graphpilot/<id>/ slot.
|
|
87
|
+
if (validated.rootPath !== absRootPath) {
|
|
88
|
+
process.stderr.write(`[graphpilot] graph.json rootPath mismatch: stored "${validated.rootPath}" ` +
|
|
89
|
+
`but requested "${absRootPath}" — ignoring stale index.\n`);
|
|
90
|
+
return null;
|
|
91
|
+
}
|
|
83
92
|
return validated;
|
|
84
93
|
}
|
|
85
94
|
//# sourceMappingURL=storage.js.map
|
package/dist/storage.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAGpG,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC;AAwB/C,MAAM,UAAU,SAAS,CAAC,WAAmB;IAC3C,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC7E,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,WAAmB;IACzC,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,WAAmB;IAC3C,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,YAAY,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAY;IACpC,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACpC,2EAA2E;IAC3E,wEAAwE;IACxE,wEAAwE;IACxE,4EAA4E;IAC5E,yEAAyE;IACzE,4CAA4C;IAC5C,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACjD,IAAI,CAAC,SAAS;QAAE,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAEvC,sEAAsE;IACtE,uEAAuE;IACvE,sEAAsE;IACtE,+DAA+D;IAC/D,MAAM,OAAO,GAAG,IAAI,GAAG,MAAM,CAAC;IAC9B,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}
|
package/dist/validation.js
CHANGED
|
@@ -15,27 +15,44 @@ export const MAX_FILES_PER_INDEX = 50_000;
|
|
|
15
15
|
const DANGEROUS_PATHS = new Set([
|
|
16
16
|
'/',
|
|
17
17
|
'/bin',
|
|
18
|
+
'/boot',
|
|
19
|
+
'/dev',
|
|
20
|
+
'/etc',
|
|
21
|
+
'/home',
|
|
22
|
+
'/lib',
|
|
23
|
+
'/lib64',
|
|
24
|
+
'/opt',
|
|
25
|
+
'/proc',
|
|
26
|
+
'/root',
|
|
27
|
+
'/run',
|
|
18
28
|
'/sbin',
|
|
29
|
+
'/srv',
|
|
30
|
+
'/sys',
|
|
31
|
+
'/tmp',
|
|
19
32
|
'/usr',
|
|
20
33
|
'/usr/bin',
|
|
21
34
|
'/usr/local',
|
|
22
|
-
'/etc',
|
|
23
35
|
'/var',
|
|
24
|
-
|
|
36
|
+
// macOS canonical forms (symlinks resolve to /private/*)
|
|
25
37
|
'/private',
|
|
26
38
|
'/private/etc',
|
|
27
39
|
'/private/var',
|
|
28
40
|
'/private/tmp',
|
|
41
|
+
// macOS top-level
|
|
42
|
+
'/Applications',
|
|
29
43
|
'/Library',
|
|
30
44
|
'/System',
|
|
31
|
-
'/Applications',
|
|
32
45
|
'/Volumes',
|
|
33
46
|
'/Users',
|
|
34
|
-
|
|
47
|
+
// Windows system paths
|
|
35
48
|
'C:\\Windows',
|
|
36
49
|
'C:\\Windows\\System32',
|
|
37
50
|
'C:\\Program Files',
|
|
38
51
|
'C:\\Program Files (x86)',
|
|
52
|
+
// Indexing C:\Users walks every user profile on the machine; C:\ProgramData
|
|
53
|
+
// holds service configs and app state that should never be leaked.
|
|
54
|
+
'C:\\Users',
|
|
55
|
+
'C:\\ProgramData',
|
|
39
56
|
]);
|
|
40
57
|
/**
|
|
41
58
|
* Returns null if the path is safe to index, or a human-readable reason string
|
|
@@ -43,6 +60,13 @@ const DANGEROUS_PATHS = new Set([
|
|
|
43
60
|
*/
|
|
44
61
|
export function validateRootPath(rawPath) {
|
|
45
62
|
const abs = resolve(rawPath);
|
|
63
|
+
// Check the unnormalized absolute path first so that entries like /sbin are
|
|
64
|
+
// caught even on distros where /sbin is a symlink to /usr/sbin (merged-/usr
|
|
65
|
+
// layout on Debian/Ubuntu 22+ and Fedora). realpathSync would resolve it to
|
|
66
|
+
// /usr/sbin which is not in the set, causing a bypass.
|
|
67
|
+
if (DANGEROUS_PATHS.has(abs)) {
|
|
68
|
+
return `Refusing to index system path: ${abs}`;
|
|
69
|
+
}
|
|
46
70
|
let real;
|
|
47
71
|
try {
|
|
48
72
|
real = realpathSync(abs);
|
|
@@ -54,6 +78,8 @@ export function validateRootPath(rawPath) {
|
|
|
54
78
|
if (process.platform === 'win32' && /^[A-Za-z]:\\?$/.test(real)) {
|
|
55
79
|
return `Refusing to index system path: ${real}`;
|
|
56
80
|
}
|
|
81
|
+
// Also check the resolved form — catches cases where a non-dangerous-looking
|
|
82
|
+
// path resolves to a dangerous one via a symlink.
|
|
57
83
|
if (DANGEROUS_PATHS.has(real)) {
|
|
58
84
|
return `Refusing to index system path: ${real}`;
|
|
59
85
|
}
|
package/dist/validation.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,0EAA0E;AAC1E,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO;AAEtD,0EAA0E;AAC1E,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAC;AAE1C;;;;;;GAMG;AACH,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC;IAC9B,GAAG;IACH,MAAM;IACN,OAAO;IACP,MAAM;IACN,
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,0EAA0E;AAC1E,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO;AAEtD,0EAA0E;AAC1E,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAC;AAE1C;;;;;;GAMG;AACH,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC;IAC9B,GAAG;IACH,MAAM;IACN,OAAO;IACP,MAAM;IACN,MAAM;IACN,OAAO;IACP,MAAM;IACN,QAAQ;IACR,MAAM;IACN,OAAO;IACP,OAAO;IACP,MAAM;IACN,OAAO;IACP,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,UAAU;IACV,YAAY;IACZ,MAAM;IACN,yDAAyD;IACzD,UAAU;IACV,cAAc;IACd,cAAc;IACd,cAAc;IACd,kBAAkB;IAClB,eAAe;IACf,UAAU;IACV,SAAS;IACT,UAAU;IACV,QAAQ;IACR,uBAAuB;IACvB,aAAa;IACb,uBAAuB;IACvB,mBAAmB;IACnB,yBAAyB;IACzB,4EAA4E;IAC5E,mEAAmE;IACnE,WAAW;IACX,iBAAiB;CAClB,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE7B,4EAA4E;IAC5E,4EAA4E;IAC5E,4EAA4E;IAC5E,uDAAuD;IACvD,IAAI,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7B,OAAO,kCAAkC,GAAG,EAAE,CAAC;IACjD,CAAC;IAED,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACH,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,6CAA6C,GAAG,EAAE,CAAC;IAC5D,CAAC;IAED,qEAAqE;IACrE,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAChE,OAAO,kCAAkC,IAAI,EAAE,CAAC;IAClD,CAAC;IACD,6EAA6E;IAC7E,kDAAkD;IAClD,IAAI,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9B,OAAO,kCAAkC,IAAI,EAAE,CAAC;IAClD,CAAC;IACD,IAAI,IAAI,KAAK,OAAO,EAAE,EAAE,CAAC;QACvB,OAAO,mDAAmD,IAAI,kDAAkD,CAAC;IACnH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/dist/watcher.d.ts
CHANGED
|
@@ -48,6 +48,9 @@ export declare class GraphWatcher {
|
|
|
48
48
|
private watcher;
|
|
49
49
|
private readonly log;
|
|
50
50
|
private readonly awaitStabilityMs;
|
|
51
|
+
/** mtime + size of graph.json after the last save this process performed. */
|
|
52
|
+
private lastSavedMtimeMs;
|
|
53
|
+
private lastSavedSizeBytes;
|
|
51
54
|
/**
|
|
52
55
|
* Serializes the update queue so chokidar bursts (multiple `change`
|
|
53
56
|
* events in 200ms) don't race each other into a torn graph.
|
|
@@ -75,6 +78,13 @@ export declare class GraphWatcher {
|
|
|
75
78
|
private enqueue;
|
|
76
79
|
private handleEvent;
|
|
77
80
|
private handleDeletion;
|
|
81
|
+
/**
|
|
82
|
+
* If graph.json was written by another process since we last saved, reload
|
|
83
|
+
* it into memory so the next delta is applied on top of the fresh state.
|
|
84
|
+
* This handles gp_index from an agent, a parallel CLI re-index, or a
|
|
85
|
+
* git checkout while watch is running.
|
|
86
|
+
*/
|
|
87
|
+
private reloadIfDrifted;
|
|
78
88
|
/**
|
|
79
89
|
* Apply a new (symbols, rawCalls) state: re-resolve edges, update the
|
|
80
90
|
* graph object, save atomically.
|
package/dist/watcher.js
CHANGED
|
@@ -16,12 +16,12 @@
|
|
|
16
16
|
* clean for any agent that's also reading the graph over MCP.
|
|
17
17
|
*/
|
|
18
18
|
import chokidar from 'chokidar';
|
|
19
|
-
import { realpathSync } from 'node:fs';
|
|
20
|
-
import { resolve, relative } from 'node:path';
|
|
19
|
+
import { realpathSync, statSync } from 'node:fs';
|
|
20
|
+
import { resolve, relative, sep } from 'node:path';
|
|
21
21
|
import { parseFile } from './parser.js';
|
|
22
22
|
import { extractSymbols } from './symbols.js';
|
|
23
23
|
import { extractRawCalls, resolveCallEdges } from './edges.js';
|
|
24
|
-
import { saveGraph, loadGraph, repoIdFor } from './storage.js';
|
|
24
|
+
import { saveGraph, loadGraph, repoIdFor, graphPath } from './storage.js';
|
|
25
25
|
import { readGitInfo } from './git.js';
|
|
26
26
|
import { indexDirectory } from './indexer.js';
|
|
27
27
|
import { validateRootPath, MAX_FILES_PER_INDEX } from './validation.js';
|
|
@@ -63,6 +63,9 @@ export class GraphWatcher {
|
|
|
63
63
|
watcher = null;
|
|
64
64
|
log;
|
|
65
65
|
awaitStabilityMs;
|
|
66
|
+
/** mtime + size of graph.json after the last save this process performed. */
|
|
67
|
+
lastSavedMtimeMs = 0;
|
|
68
|
+
lastSavedSizeBytes = 0;
|
|
66
69
|
/**
|
|
67
70
|
* Serializes the update queue so chokidar bursts (multiple `change`
|
|
68
71
|
* events in 200ms) don't race each other into a torn graph.
|
|
@@ -84,6 +87,14 @@ export class GraphWatcher {
|
|
|
84
87
|
if (loaded) {
|
|
85
88
|
this.graph = loaded;
|
|
86
89
|
this.rawCalls = this.deriveRawCalls(loaded.edges);
|
|
90
|
+
try {
|
|
91
|
+
const st = statSync(graphPath(this.absRoot));
|
|
92
|
+
this.lastSavedMtimeMs = st.mtimeMs;
|
|
93
|
+
this.lastSavedSizeBytes = st.size;
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
// best-effort baseline
|
|
97
|
+
}
|
|
87
98
|
}
|
|
88
99
|
else {
|
|
89
100
|
// No existing index — caller is expected to `start()`, which will
|
|
@@ -142,10 +153,15 @@ export class GraphWatcher {
|
|
|
142
153
|
async applyUpdate(absFilePath, kind = 'change') {
|
|
143
154
|
if (!isWatchableFile(absFilePath))
|
|
144
155
|
return null;
|
|
145
|
-
if (!absFilePath.startsWith(this.absRoot))
|
|
156
|
+
if (absFilePath !== this.absRoot && !absFilePath.startsWith(this.absRoot + sep))
|
|
146
157
|
return null;
|
|
158
|
+
// Detect mtime drift — reload before computing the delta so we apply
|
|
159
|
+
// the edit on top of the freshest known graph, not a stale in-memory one.
|
|
160
|
+
this.reloadIfDrifted();
|
|
147
161
|
const start = Date.now();
|
|
148
|
-
|
|
162
|
+
// Normalize to POSIX separators so paths stored in graph.json are always
|
|
163
|
+
// forward-slash on every OS (same convention as indexer.ts).
|
|
164
|
+
const rel = relative(this.absRoot, absFilePath).split(sep).join('/');
|
|
149
165
|
const symbolsBefore = this.graph.symbols.length;
|
|
150
166
|
const edgesBefore = this.graph.edges.length;
|
|
151
167
|
// 1. Remove existing symbols + raw calls from this file
|
|
@@ -186,10 +202,11 @@ export class GraphWatcher {
|
|
|
186
202
|
}
|
|
187
203
|
/** Drop everything that came from a deleted file. */
|
|
188
204
|
async applyDeletion(absFilePath) {
|
|
189
|
-
if (!absFilePath.startsWith(this.absRoot))
|
|
205
|
+
if (absFilePath !== this.absRoot && !absFilePath.startsWith(this.absRoot + sep))
|
|
190
206
|
return null;
|
|
207
|
+
this.reloadIfDrifted();
|
|
191
208
|
const start = Date.now();
|
|
192
|
-
const rel = relative(this.absRoot, absFilePath);
|
|
209
|
+
const rel = relative(this.absRoot, absFilePath).split(sep).join('/');
|
|
193
210
|
const symbolsBefore = this.graph.symbols.length;
|
|
194
211
|
const edgesBefore = this.graph.edges.length;
|
|
195
212
|
const keptSymbols = this.graph.symbols.filter((s) => s.file !== rel);
|
|
@@ -226,6 +243,14 @@ export class GraphWatcher {
|
|
|
226
243
|
};
|
|
227
244
|
this.rawCalls = this.deriveRawCalls(result.edges);
|
|
228
245
|
saveGraph(this.graph);
|
|
246
|
+
try {
|
|
247
|
+
const st = statSync(graphPath(this.absRoot));
|
|
248
|
+
this.lastSavedMtimeMs = st.mtimeMs;
|
|
249
|
+
this.lastSavedSizeBytes = st.size;
|
|
250
|
+
}
|
|
251
|
+
catch {
|
|
252
|
+
// best-effort
|
|
253
|
+
}
|
|
229
254
|
}
|
|
230
255
|
/** Read-only accessor, mainly for tests + diagnostics. */
|
|
231
256
|
get currentGraph() {
|
|
@@ -251,6 +276,36 @@ export class GraphWatcher {
|
|
|
251
276
|
async handleDeletion(abs) {
|
|
252
277
|
await this.applyDeletion(abs);
|
|
253
278
|
}
|
|
279
|
+
/**
|
|
280
|
+
* If graph.json was written by another process since we last saved, reload
|
|
281
|
+
* it into memory so the next delta is applied on top of the fresh state.
|
|
282
|
+
* This handles gp_index from an agent, a parallel CLI re-index, or a
|
|
283
|
+
* git checkout while watch is running.
|
|
284
|
+
*/
|
|
285
|
+
reloadIfDrifted() {
|
|
286
|
+
if (this.lastSavedMtimeMs === 0)
|
|
287
|
+
return; // no baseline yet
|
|
288
|
+
try {
|
|
289
|
+
const st = statSync(graphPath(this.absRoot));
|
|
290
|
+
// Check both mtime and size: mtime alone has 1-second resolution on some
|
|
291
|
+
// Windows filesystems (FAT/exFAT, some container mounts), so a rapid
|
|
292
|
+
// external write within the same second would not be detected. Adding the
|
|
293
|
+
// size check catches content changes even when the clock doesn't advance.
|
|
294
|
+
if (st.mtimeMs === this.lastSavedMtimeMs && st.size === this.lastSavedSizeBytes)
|
|
295
|
+
return;
|
|
296
|
+
const fresh = loadGraph(this.absRoot);
|
|
297
|
+
if (fresh) {
|
|
298
|
+
this.graph = fresh;
|
|
299
|
+
this.rawCalls = this.deriveRawCalls(fresh.edges);
|
|
300
|
+
this.lastSavedMtimeMs = st.mtimeMs;
|
|
301
|
+
this.lastSavedSizeBytes = st.size;
|
|
302
|
+
this.log(`Detected external re-index (${fresh.symbolCount} symbols); reloaded before applying delta.`);
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
catch {
|
|
306
|
+
// best-effort — if statSync fails the file is gone; next save will recreate it
|
|
307
|
+
}
|
|
308
|
+
}
|
|
254
309
|
/**
|
|
255
310
|
* Apply a new (symbols, rawCalls) state: re-resolve edges, update the
|
|
256
311
|
* graph object, save atomically.
|
|
@@ -278,6 +333,14 @@ export class GraphWatcher {
|
|
|
278
333
|
};
|
|
279
334
|
this.rawCalls = rawCalls;
|
|
280
335
|
saveGraph(this.graph);
|
|
336
|
+
try {
|
|
337
|
+
const st = statSync(graphPath(this.absRoot));
|
|
338
|
+
this.lastSavedMtimeMs = st.mtimeMs;
|
|
339
|
+
this.lastSavedSizeBytes = st.size;
|
|
340
|
+
}
|
|
341
|
+
catch {
|
|
342
|
+
// best-effort
|
|
343
|
+
}
|
|
281
344
|
}
|
|
282
345
|
finalize(file, kind, symbolsBefore, edgesBefore, start) {
|
|
283
346
|
return {
|
package/dist/watcher.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watcher.js","sourceRoot":"","sources":["../src/watcher.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"watcher.js","sourceRoot":"","sources":["../src/watcher.ts"],"names":[],"mappings":"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"}
|