@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.
Files changed (116) hide show
  1. package/CHANGELOG.md +73 -126
  2. package/README.md +359 -101
  3. package/dist/cli.js +20 -0
  4. package/dist/cli.js.map +1 -1
  5. package/dist/indexer.js +3 -3
  6. package/dist/indexer.js.map +1 -1
  7. package/dist/init.d.ts +28 -0
  8. package/dist/init.js +112 -0
  9. package/dist/init.js.map +1 -0
  10. package/dist/interactions.d.ts +5 -4
  11. package/dist/interactions.js +0 -0
  12. package/dist/interactions.js.map +1 -1
  13. package/dist/mcp.js +126 -46
  14. package/dist/mcp.js.map +1 -1
  15. package/dist/repo-resolve.d.ts +47 -0
  16. package/dist/repo-resolve.js +195 -0
  17. package/dist/repo-resolve.js.map +1 -0
  18. package/dist/storage.js +10 -1
  19. package/dist/storage.js.map +1 -1
  20. package/dist/validation.js +30 -4
  21. package/dist/validation.js.map +1 -1
  22. package/dist/watcher.d.ts +10 -0
  23. package/dist/watcher.js +70 -7
  24. package/dist/watcher.js.map +1 -1
  25. package/examples/README.md +105 -0
  26. package/examples/claude-code/README.md +125 -0
  27. package/examples/claude-code/claude-routing.md +102 -0
  28. package/examples/claude-code/claude_config.json +8 -0
  29. package/examples/cline/.clinerules +39 -0
  30. package/examples/cline/README.md +104 -0
  31. package/examples/cline/cline_mcp_settings.json +10 -0
  32. package/examples/continue/.continuerules +39 -0
  33. package/examples/continue/README.md +98 -0
  34. package/examples/continue/config.json +13 -0
  35. package/examples/cursor/.cursorrules +39 -0
  36. package/examples/cursor/README.md +98 -0
  37. package/examples/cursor/mcp.json +11 -0
  38. package/examples/windsurf/.windsurfrules +39 -0
  39. package/examples/windsurf/README.md +85 -0
  40. package/examples/windsurf/mcp_config.json +8 -0
  41. package/package.json +12 -3
  42. package/.editorconfig +0 -15
  43. package/.github/CODEOWNERS +0 -22
  44. package/.github/FUNDING.yml +0 -1
  45. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -33
  46. package/.github/ISSUE_TEMPLATE/config.yml +0 -5
  47. package/.github/ISSUE_TEMPLATE/feature_request.md +0 -23
  48. package/.github/PULL_REQUEST_TEMPLATE.md +0 -19
  49. package/.github/dependabot.yml +0 -15
  50. package/.github/workflows/ci.yml +0 -62
  51. package/.github/workflows/release.yml +0 -50
  52. package/.prettierignore +0 -19
  53. package/.prettierrc.json +0 -20
  54. package/CODE_OF_CONDUCT.md +0 -83
  55. package/CONTRIBUTING.md +0 -111
  56. package/bench/README.md +0 -544
  57. package/bench/results/agent-tier-2026-05-22.md +0 -28
  58. package/bench/results/agent-tier-summary.md +0 -44
  59. package/bench/results/baseline-tier-2026-05-22.md +0 -23
  60. package/bench/results/baseline.json +0 -810
  61. package/bench/results/baseline.md +0 -28
  62. package/bench/run-agent-tier-automated.ts +0 -234
  63. package/bench/run-agent-tier.md +0 -125
  64. package/bench/run-baseline-tier.ts +0 -200
  65. package/bench/run.ts +0 -210
  66. package/bench/runner-baseline.ts +0 -177
  67. package/bench/runner-graphpilot.ts +0 -131
  68. package/bench/score-agent-tier.ts +0 -191
  69. package/bench/score.ts +0 -59
  70. package/bench/tasks.ts +0 -236
  71. package/dist/provenance.d.ts +0 -74
  72. package/dist/provenance.js +0 -95
  73. package/dist/provenance.js.map +0 -1
  74. package/docs/architecture.md +0 -311
  75. package/docs/limitations.md +0 -156
  76. package/docs/mcp-setup.md +0 -231
  77. package/docs/quickstart.md +0 -202
  78. package/eslint.config.js +0 -148
  79. package/lefthook.yml +0 -81
  80. package/pnpm-workspace.yaml +0 -6
  81. package/scripts/smoke-stdio.mjs +0 -97
  82. package/src/cli.ts +0 -171
  83. package/src/edges.ts +0 -202
  84. package/src/git.ts +0 -255
  85. package/src/graph-schema.ts +0 -229
  86. package/src/impact.ts +0 -218
  87. package/src/indexer.ts +0 -152
  88. package/src/interactions.ts +0 -0
  89. package/src/mcp.ts +0 -652
  90. package/src/parser.ts +0 -138
  91. package/src/provenance.ts +0 -115
  92. package/src/query.ts +0 -148
  93. package/src/redact.ts +0 -122
  94. package/src/storage.ts +0 -115
  95. package/src/symbols.ts +0 -173
  96. package/src/validation.ts +0 -69
  97. package/src/validators.ts +0 -253
  98. package/src/watcher.ts +0 -383
  99. package/tests/edges.test.ts +0 -175
  100. package/tests/fixtures/sample.ts +0 -32
  101. package/tests/git.test.ts +0 -303
  102. package/tests/graph-schema.test.ts +0 -321
  103. package/tests/impact.test.ts +0 -454
  104. package/tests/interactions.test.ts +0 -180
  105. package/tests/lint-policy.test.ts +0 -106
  106. package/tests/mcp-stdio.test.ts +0 -171
  107. package/tests/mcp.test.ts +0 -335
  108. package/tests/parser.test.ts +0 -31
  109. package/tests/provenance.test.ts +0 -132
  110. package/tests/query.test.ts +0 -160
  111. package/tests/redact.test.ts +0 -167
  112. package/tests/security.test.ts +0 -144
  113. package/tests/symbols.test.ts +0 -78
  114. package/tests/validators.test.ts +0 -193
  115. package/tests/watcher.test.ts +0 -250
  116. 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
- writeFileSync(tmpPath, JSON.stringify(graph, null, 2), {
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
@@ -1 +1 @@
1
- {"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}
@@ -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
- '/tmp',
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
- '/home',
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
  }
@@ -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,UAAU;IACV,YAAY;IACZ,MAAM;IACN,MAAM;IACN,MAAM;IACN,UAAU;IACV,cAAc;IACd,cAAc;IACd,cAAc;IACd,UAAU;IACV,SAAS;IACT,eAAe;IACf,UAAU;IACV,QAAQ;IACR,OAAO;IACP,aAAa;IACb,uBAAuB;IACvB,mBAAmB;IACnB,yBAAyB;CAC1B,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE7B,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,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"}
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
- const rel = relative(this.absRoot, absFilePath);
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 {
@@ -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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"}