pindex 1.4.0 → 1.7.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 (126) hide show
  1. package/README.md +53 -23
  2. package/dist/cli/daemon.d.ts +1 -1
  3. package/dist/cli/daemon.d.ts.map +1 -1
  4. package/dist/cli/daemon.js +25 -6
  5. package/dist/cli/daemon.js.map +1 -1
  6. package/dist/cli/federate.d.ts +6 -0
  7. package/dist/cli/federate.d.ts.map +1 -0
  8. package/dist/cli/federate.js +121 -0
  9. package/dist/cli/federate.js.map +1 -0
  10. package/dist/cli/index.js +46 -2
  11. package/dist/cli/index.js.map +1 -1
  12. package/dist/cli/init.d.ts.map +1 -1
  13. package/dist/cli/init.js +14 -7
  14. package/dist/cli/init.js.map +1 -1
  15. package/dist/cli/project-detector.d.ts +16 -3
  16. package/dist/cli/project-detector.d.ts.map +1 -1
  17. package/dist/cli/project-detector.js +83 -11
  18. package/dist/cli/project-detector.js.map +1 -1
  19. package/dist/cli/setup.d.ts.map +1 -1
  20. package/dist/cli/setup.js +3 -5
  21. package/dist/cli/setup.js.map +1 -1
  22. package/dist/db/queries.d.ts +14 -0
  23. package/dist/db/queries.d.ts.map +1 -1
  24. package/dist/db/queries.js +22 -3
  25. package/dist/db/queries.js.map +1 -1
  26. package/dist/federation/merge.d.ts +4 -0
  27. package/dist/federation/merge.d.ts.map +1 -0
  28. package/dist/federation/merge.js +15 -0
  29. package/dist/federation/merge.js.map +1 -0
  30. package/dist/federation/registry-name.d.ts +6 -0
  31. package/dist/federation/registry-name.d.ts.map +1 -0
  32. package/dist/federation/registry-name.js +17 -0
  33. package/dist/federation/registry-name.js.map +1 -0
  34. package/dist/federation/repo-set.d.ts +27 -0
  35. package/dist/federation/repo-set.d.ts.map +1 -0
  36. package/dist/federation/repo-set.js +41 -0
  37. package/dist/federation/repo-set.js.map +1 -0
  38. package/dist/federation/repos-env.d.ts +16 -0
  39. package/dist/federation/repos-env.d.ts.map +1 -0
  40. package/dist/federation/repos-env.js +27 -0
  41. package/dist/federation/repos-env.js.map +1 -0
  42. package/dist/gui/server.d.ts.map +1 -1
  43. package/dist/gui/server.js +63 -23
  44. package/dist/gui/server.js.map +1 -1
  45. package/dist/index.js +36 -34
  46. package/dist/index.js.map +1 -1
  47. package/dist/indexer/detect-languages.d.ts +10 -0
  48. package/dist/indexer/detect-languages.d.ts.map +1 -0
  49. package/dist/indexer/detect-languages.js +36 -0
  50. package/dist/indexer/detect-languages.js.map +1 -0
  51. package/dist/indexer/index.d.ts +2 -0
  52. package/dist/indexer/index.d.ts.map +1 -1
  53. package/dist/indexer/index.js +21 -9
  54. package/dist/indexer/index.js.map +1 -1
  55. package/dist/indexer/parser.d.ts.map +1 -1
  56. package/dist/indexer/parser.js +36 -5
  57. package/dist/indexer/parser.js.map +1 -1
  58. package/dist/indexer/summarizer.d.ts.map +1 -1
  59. package/dist/indexer/summarizer.js +3 -0
  60. package/dist/indexer/summarizer.js.map +1 -1
  61. package/dist/memory/retention.d.ts +16 -0
  62. package/dist/memory/retention.d.ts.map +1 -0
  63. package/dist/memory/retention.js +32 -0
  64. package/dist/memory/retention.js.map +1 -0
  65. package/dist/monitoring/server.d.ts.map +1 -1
  66. package/dist/monitoring/server.js +22 -1
  67. package/dist/monitoring/server.js.map +1 -1
  68. package/dist/monitoring/ui/dashboard.js +83 -31
  69. package/dist/monitoring/ui/esc.js +17 -0
  70. package/dist/monitoring/ui/index.html +17 -11
  71. package/dist/monitoring/ui/styles.css +24 -4
  72. package/dist/server-config.d.ts +18 -0
  73. package/dist/server-config.d.ts.map +1 -0
  74. package/dist/server-config.js +41 -0
  75. package/dist/server-config.js.map +1 -0
  76. package/dist/server.d.ts +5 -0
  77. package/dist/server.d.ts.map +1 -1
  78. package/dist/server.js +21 -14
  79. package/dist/server.js.map +1 -1
  80. package/dist/tools/find_usages.d.ts +2 -2
  81. package/dist/tools/find_usages.d.ts.map +1 -1
  82. package/dist/tools/find_usages.js +24 -10
  83. package/dist/tools/find_usages.js.map +1 -1
  84. package/dist/tools/get_context.d.ts +2 -2
  85. package/dist/tools/get_context.d.ts.map +1 -1
  86. package/dist/tools/get_context.js +54 -50
  87. package/dist/tools/get_context.js.map +1 -1
  88. package/dist/tools/get_dependencies.d.ts +2 -2
  89. package/dist/tools/get_dependencies.d.ts.map +1 -1
  90. package/dist/tools/get_dependencies.js +24 -11
  91. package/dist/tools/get_dependencies.js.map +1 -1
  92. package/dist/tools/get_doc_chunk.d.ts +2 -2
  93. package/dist/tools/get_doc_chunk.d.ts.map +1 -1
  94. package/dist/tools/get_doc_chunk.js +38 -29
  95. package/dist/tools/get_doc_chunk.js.map +1 -1
  96. package/dist/tools/get_file_summary.d.ts +2 -2
  97. package/dist/tools/get_file_summary.d.ts.map +1 -1
  98. package/dist/tools/get_file_summary.js +48 -37
  99. package/dist/tools/get_file_summary.js.map +1 -1
  100. package/dist/tools/get_project_overview.d.ts +2 -3
  101. package/dist/tools/get_project_overview.d.ts.map +1 -1
  102. package/dist/tools/get_project_overview.js +22 -22
  103. package/dist/tools/get_project_overview.js.map +1 -1
  104. package/dist/tools/get_symbol.d.ts +2 -2
  105. package/dist/tools/get_symbol.d.ts.map +1 -1
  106. package/dist/tools/get_symbol.js +33 -27
  107. package/dist/tools/get_symbol.js.map +1 -1
  108. package/dist/tools/schemas.d.ts +9 -0
  109. package/dist/tools/schemas.d.ts.map +1 -1
  110. package/dist/tools/schemas.js +20 -2
  111. package/dist/tools/schemas.js.map +1 -1
  112. package/dist/tools/search_docs.d.ts +2 -2
  113. package/dist/tools/search_docs.d.ts.map +1 -1
  114. package/dist/tools/search_docs.js +40 -28
  115. package/dist/tools/search_docs.js.map +1 -1
  116. package/dist/tools/search_symbols.d.ts +2 -3
  117. package/dist/tools/search_symbols.d.ts.map +1 -1
  118. package/dist/tools/search_symbols.js +35 -46
  119. package/dist/tools/search_symbols.js.map +1 -1
  120. package/dist/types.d.ts +24 -10
  121. package/dist/types.d.ts.map +1 -1
  122. package/dist/util/net.d.ts +25 -0
  123. package/dist/util/net.d.ts.map +1 -0
  124. package/dist/util/net.js +50 -0
  125. package/dist/util/net.js.map +1 -0
  126. package/package.json +5 -5
@@ -0,0 +1,27 @@
1
+ import { delimiter } from 'node:path';
2
+ /**
3
+ * `FEDERATION_REPOS` is a delimiter-separated list of absolute repo paths stored
4
+ * in `.mcp.json`. We use the OS path delimiter (`:` on POSIX, `;` on Windows) —
5
+ * the same convention as `PATH` — because a plain `:` collides with the colon in
6
+ * Windows drive letters (`C:\...`), which silently corrupts every path on
7
+ * Windows. On POSIX the delimiter stays `:`, so existing values keep working
8
+ * with no migration.
9
+ *
10
+ * Read side additionally accepts a comma as a separator for backward
11
+ * compatibility with hand-edited values.
12
+ */
13
+ /** Parses a `FEDERATION_REPOS` env value into a list of absolute paths. */
14
+ export function parseFederationRepos(value) {
15
+ if (!value)
16
+ return [];
17
+ return value
18
+ .split(delimiter)
19
+ .flatMap((s) => s.split(','))
20
+ .map((s) => s.trim())
21
+ .filter(Boolean);
22
+ }
23
+ /** Serialises a list of absolute paths into a `FEDERATION_REPOS` env value. */
24
+ export function joinFederationRepos(paths) {
25
+ return paths.join(delimiter);
26
+ }
27
+ //# sourceMappingURL=repos-env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repos-env.js","sourceRoot":"","sources":["../../src/federation/repos-env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC;;;;;;;;;;GAUG;AAEH,2EAA2E;AAC3E,MAAM,UAAU,oBAAoB,CAAC,KAAyB;IAC5D,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,OAAO,KAAK;SACT,KAAK,CAAC,SAAS,CAAC;SAChB,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;SAC5B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,OAAO,CAAC,CAAC;AACrB,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,mBAAmB,CAAC,KAAe;IACjD,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC/B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/gui/server.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAGzC,OAAO,OAAO,MAAM,SAAS,CAAC;AAG9B,OAAO,EAGL,KAAK,aAAa,EACnB,MAAM,4BAA4B,CAAC;AAIpC,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,aAAa,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,aAAa,EAAE,OAAO,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB;AAaD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAAC,YAAY,EAAE,eAAe,CAAC,CAuD1F;AAID,wBAAgB,YAAY,IAAI,OAAO,CAAC,WAAW,CAmKlD;AAED,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;IAC5C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,MAAM,WAAW,iBAAkB,SAAQ,SAAS;IAClD,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA2BvE"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/gui/server.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAGzC,OAAO,OAAO,MAAM,SAAS,CAAC;AAG9B,OAAO,EAGL,KAAK,aAAa,EACnB,MAAM,4BAA4B,CAAC;AAKpC,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,aAAa,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,aAAa,EAAE,OAAO,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB;AAaD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAAC,YAAY,EAAE,eAAe,CAAC,CAuD1F;AAID,wBAAgB,YAAY,IAAI,OAAO,CAAC,WAAW,CAmLlD;AAED,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;IAC5C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,MAAM,WAAW,iBAAkB,SAAQ,SAAS;IAClD,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA2BvE"}
@@ -10,6 +10,7 @@ import express from 'express';
10
10
  import open from 'open';
11
11
  import Database from 'better-sqlite3';
12
12
  import { GlobalRegistry, getProjectIndexPath, } from '../cli/project-detector.js';
13
+ import { isAllowedHost, isAllowedOrigin } from '../util/net.js';
13
14
  /** Check whether a TCP port is accepting connections (timeout: 300ms). */
14
15
  function isPortListening(port) {
15
16
  return new Promise((resolve) => {
@@ -76,6 +77,15 @@ export function loadProjectStats(entry) {
76
77
  export function createGuiApp() {
77
78
  const app = express();
78
79
  app.use(express.json());
80
+ // Block DNS-rebinding: only accept loopback Host headers (unless the operator
81
+ // opted into a non-loopback bind via PINDEX_BIND_HOST). SEC-03/SEC-04.
82
+ app.use((req, res, next) => {
83
+ if (!isAllowedHost(req.headers.host)) {
84
+ res.status(403).json({ error: 'Forbidden' });
85
+ return;
86
+ }
87
+ next();
88
+ });
79
89
  // Cache registry reads with a 5-second TTL to avoid re-reading the file on every request
80
90
  let registryCache = null;
81
91
  let registryCacheTime = 0;
@@ -209,7 +219,13 @@ export function createGuiApp() {
209
219
  });
210
220
  return res.json(result);
211
221
  });
212
- app.get('/api/projects/:hash/open', async (req, res) => {
222
+ // POST (not GET) + Origin check so a cross-site page cannot trigger the
223
+ // open() side effect via a navigation/<img>/<iframe>. A forged cross-origin
224
+ // form POST carries the attacker's Origin and is rejected. SEC-04 (CSRF).
225
+ app.post('/api/projects/:hash/open', async (req, res) => {
226
+ if (!isAllowedOrigin(req.headers.origin)) {
227
+ return res.status(403).json({ error: 'Forbidden' });
228
+ }
213
229
  const registry = { list: getCachedRegistry };
214
230
  const entry = registry.list().find((p) => p.hash === req.params.hash);
215
231
  if (!entry)
@@ -250,9 +266,10 @@ export function startGuiServer(port) {
250
266
  });
251
267
  }
252
268
  // ─── Inline Dashboard HTML ─────────────────────────────────────────────────
253
- // NOTE: innerHTML assignments below use data sourced exclusively from our own
254
- // SQLite databases (project names, paths, symbol names). No user-supplied web
255
- // input is ever rendered XSS risk is not applicable in this context.
269
+ // NOTE: data rendered below comes from our own SQLite DBs, but several fields
270
+ // (session labels, tool queries, paths) are derived from MCP tool arguments and
271
+ // are therefore attacker-influenceable. All dynamic values interpolated into the
272
+ // DOM MUST be escaped via esc() before being assigned to innerHTML.
256
273
  function buildDashboardHtml() {
257
274
  return `<!DOCTYPE html>
258
275
  <html lang="en">
@@ -302,8 +319,9 @@ function buildDashboardHtml() {
302
319
  .srv-dot{width:9px;height:9px;border-radius:50%;flex-shrink:0}
303
320
  .srv-dot.on{background:var(--green);box-shadow:0 0 6px var(--green)}
304
321
  .srv-dot.off{background:var(--border)}
305
- .project-name{font-weight:600}
306
- .project-path{font-size:.75rem;color:var(--muted);margin-top:2px}
322
+ .project-info{min-width:0}
323
+ .project-name{font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
324
+ .project-path{font-size:.75rem;color:var(--muted);margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
307
325
  .badge{background:var(--border);border-radius:4px;padding:2px 8px;font-size:.75rem;white-space:nowrap}
308
326
  .badge.green{background:#1c3829;color:var(--green)}
309
327
  .badge.blue{background:#1c2a3e;color:var(--accent)}
@@ -329,7 +347,7 @@ function buildDashboardHtml() {
329
347
  .detail-table tr:hover td{background:#1c2128}
330
348
  .kind-badge{display:inline-block;padding:1px 6px;border-radius:3px;font-size:.7rem;background:var(--border);color:var(--muted)}
331
349
  .info-box{background:#0d1117;border:1px solid var(--border);border-radius:8px;padding:16px;margin-bottom:16px;font-size:.85rem;line-height:1.7}
332
- .info-box .formula{color:var(--accent);font-family:monospace;font-size:.8rem;margin-top:8px;padding:8px;background:var(--surface);border-radius:4px}
350
+ .info-box .formula{color:var(--accent);font-family:monospace;font-size:.8rem;margin-top:8px;padding:8px;background:var(--surface);border-radius:4px;white-space:pre}
333
351
  .stat-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-bottom:16px}
334
352
  .stat-box{background:#0d1117;border:1px solid var(--border);border-radius:6px;padding:12px}
335
353
  .stat-box .v{font-size:1.4rem;font-weight:700;color:var(--accent)}
@@ -403,6 +421,22 @@ let chart = null, currentProjects = [];
403
421
  let _modalSessions = [], _sessPage = 0;
404
422
  const SESS_PER_PAGE = 6;
405
423
 
424
+ // Opens a project folder via POST (CSRF-safe) and surfaces failures on the button
425
+ // instead of swallowing them silently.
426
+ async function openFolder(hash, btn) {
427
+ try {
428
+ const r = await fetch('/api/projects/' + encodeURIComponent(hash) + '/open', { method: 'POST' });
429
+ if (!r.ok) throw new Error(String(r.status));
430
+ } catch (e) {
431
+ if (btn) {
432
+ const pTitle = btn.title, pColor = btn.style.color, pBorder = btn.style.borderColor;
433
+ btn.style.color = 'var(--red)'; btn.style.borderColor = 'var(--red)';
434
+ btn.title = 'Failed to open folder';
435
+ setTimeout(() => { btn.title = pTitle; btn.style.color = pColor; btn.style.borderColor = pBorder; }, 1800);
436
+ }
437
+ }
438
+ }
439
+
406
440
  function updateChart(projects) {
407
441
  if (typeof Chart === 'undefined') return;
408
442
  try {
@@ -435,10 +469,22 @@ function updateChart(projects) {
435
469
  }
436
470
 
437
471
  async function load() {
438
- const [{ overview, projects }, sessions] = await Promise.all([
439
- fetch('/api/overview').then(r => r.json()),
440
- fetch('/api/sessions/recent').then(r => r.json()).catch(() => []),
441
- ]);
472
+ let overview, projects, sessions;
473
+ try {
474
+ [{ overview, projects }, sessions] = await Promise.all([
475
+ fetch('/api/overview').then(r => { if (!r.ok) throw new Error(String(r.status)); return r.json(); }),
476
+ fetch('/api/sessions/recent').then(r => r.ok ? r.json() : []).catch(() => []),
477
+ ]);
478
+ } catch (e) {
479
+ console.error('Failed to load overview:', e);
480
+ const list = document.getElementById('project-list');
481
+ list.textContent = '';
482
+ const msg = document.createElement('div');
483
+ msg.className = 'no-data';
484
+ msg.textContent = 'Failed to load dashboard data — retrying…';
485
+ list.appendChild(msg);
486
+ return;
487
+ }
442
488
  currentProjects = projects;
443
489
  renderSessionGrid(sessions);
444
490
  document.getElementById('ov-projects').textContent = overview.totalProjects;
@@ -466,12 +512,15 @@ async function load() {
466
512
  dot.className = 'srv-dot ' + (p.serverRunning ? 'on' : 'off');
467
513
  dot.title = p.serverRunning ? 'MCP server running (port ' + p.entry.monitoringPort + ')' : 'MCP server not running';
468
514
  const info = document.createElement('div');
515
+ info.className = 'project-info';
469
516
  const name = document.createElement('div');
470
517
  name.className = 'project-name';
471
518
  name.textContent = p.entry.name;
519
+ name.title = p.entry.name;
472
520
  const path = document.createElement('div');
473
521
  path.className = 'project-path';
474
522
  path.textContent = p.entry.path;
523
+ path.title = p.entry.path;
475
524
  info.appendChild(name);
476
525
  info.appendChild(path);
477
526
  const mkBadge = (text, cls) => { const b = document.createElement('span'); b.className = 'badge' + (cls ? ' ' + cls : ''); b.textContent = text; return b; };
@@ -479,7 +528,7 @@ async function load() {
479
528
  openBtn.className = 'open-btn';
480
529
  openBtn.title = 'Open project folder in explorer';
481
530
  openBtn.textContent = '\\u{1F4C2}';
482
- openBtn.onclick = (e) => { e.stopPropagation(); fetch('/api/projects/' + p.entry.hash + '/open').catch(() => {}); };
531
+ openBtn.onclick = (e) => { e.stopPropagation(); openFolder(p.entry.hash, openBtn); };
483
532
  row.appendChild(dot);
484
533
  row.appendChild(info);
485
534
  row.appendChild(mkBadge(fmt(p.fileCount) + ' files', 'blue'));
@@ -541,6 +590,7 @@ async function openDetail(hash, name) {
541
590
  document.getElementById('tab-ov').classList.add('active');
542
591
 
543
592
  const proj = currentProjects.find(p => p.entry.hash === hash);
593
+ if (!proj) { closeModal(); return; }
544
594
  const srvEl = document.getElementById('modal-srv');
545
595
  srvEl.textContent = proj.serverRunning ? '\u25cf MCP running' : '\u25cb MCP stopped';
546
596
  srvEl.className = 'modal-srv ' + (proj.serverRunning ? 'on' : 'off');
@@ -619,7 +669,7 @@ function renderOv(proj, detail) {
619
669
  openLink.style.cssText = 'margin-top:8px;background:none;border:1px solid var(--border);border-radius:4px;padding:4px 10px;color:var(--muted);cursor:pointer;font-size:.8rem;transition:border-color .15s,color .15s';
620
670
  openLink.onmouseover = () => { openLink.style.borderColor = 'var(--accent)'; openLink.style.color = 'var(--text)'; };
621
671
  openLink.onmouseout = () => { openLink.style.borderColor = 'var(--border)'; openLink.style.color = 'var(--muted)'; };
622
- openLink.onclick = () => fetch('/api/projects/' + proj.entry.hash + '/open').catch(() => {});
672
+ openLink.onclick = () => openFolder(proj.entry.hash, openLink);
623
673
  infoB.appendChild(openLink);
624
674
  panel.appendChild(infoB);
625
675
  }
@@ -649,16 +699,6 @@ function buildTable(cols, rows) {
649
699
  return tbl;
650
700
  }
651
701
 
652
- function makeSearchPanel(tabId, placeholder, allItems, renderFn) {
653
- const panel = document.getElementById(tabId);
654
- panel.textContent = '';
655
- const inp = el('input', 'search-input');
656
- inp.placeholder = placeholder;
657
- inp.oninput = () => renderFn(inp.value, panel.querySelector('tbody'));
658
- panel.appendChild(inp);
659
- return panel;
660
- }
661
-
662
702
  function renderFiles(files) {
663
703
  window._files = files;
664
704
  const panel = document.getElementById('tab-files');
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/gui/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/gui/server.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -7,16 +7,19 @@ import { FileWatcher } from './indexer/watcher.js';
7
7
  import { startMonitoringServer } from './monitoring/server.js';
8
8
  import { TokenLogger } from './monitoring/token-logger.js';
9
9
  import { createMcpServer } from './server.js';
10
- import { createSession, deleteObservationsOlderThan, deleteObservationsExceptSession, } from './db/queries.js';
11
- import { getProjectIndexPath } from './cli/project-detector.js';
10
+ import { createSession } from './db/queries.js';
11
+ import { getProjectIndexPath, GlobalRegistry } from './cli/project-detector.js';
12
+ import { assignName } from './federation/registry-name.js';
13
+ import { resolveServerConfig } from './server-config.js';
12
14
  import { SessionObserver } from './memory/observer.js';
15
+ import { applyObservationRetention } from './memory/retention.js';
13
16
  import { v4 as uuidv4 } from 'uuid';
14
17
  // ─── Configuration (from environment variables) ───────────────────────────────
15
- const INDEX_PATH = process.env.INDEX_PATH ?? './.codebase-index/index.db';
16
- const PROJECT_ROOT = process.env.PROJECT_ROOT ?? process.cwd();
17
- const LANGUAGES = (process.env.LANGUAGES ?? 'typescript,javascript').split(',');
18
+ // PROJECT_ROOT, INDEX_PATH, MONITORING_PORT, LANGUAGES and FEDERATION_REPOS are
19
+ // resolved at startup by resolveServerConfig() (explicit env wins, otherwise
20
+ // derived from the project root + self-registered), so the server also works as
21
+ // a zero-config plugin. The remaining knobs are plain env reads.
18
22
  const AUTO_REINDEX = process.env.AUTO_REINDEX !== 'false';
19
- const MONITORING_PORT = parseInt(process.env.MONITORING_PORT ?? '7842', 10);
20
23
  const MONITORING_AUTO_OPEN = process.env.MONITORING_AUTO_OPEN === 'true';
21
24
  const BASELINE_MODE = process.env.BASELINE_MODE === 'true';
22
25
  const GENERATE_SUMMARIES = process.env.GENERATE_SUMMARIES === 'true';
@@ -26,21 +29,40 @@ const OBSERVATION_RETENTION = process.env.OBSERVATION_RETENTION ?? 'permanent';
26
29
  const SUMMARIZER_API_KEY = process.env.SUMMARIZER_API_KEY ?? '';
27
30
  const SUMMARIZER_BASE_URL = process.env.SUMMARIZER_BASE_URL ?? 'https://api.openai.com/v1';
28
31
  const SUMMARIZER_MODEL = process.env.SUMMARIZER_MODEL ?? 'gpt-4o-mini';
29
- // Federated repos: colon- or comma-separated absolute paths
30
- const FEDERATION_REPOS = (process.env.FEDERATION_REPOS ?? '')
31
- .split(/[:,,]/)
32
- .map((p) => p.trim())
33
- .filter(Boolean);
34
32
  async function main() {
33
+ // Resolve config: explicit env wins, otherwise derive from the project root
34
+ // and self-register in the global registry (see server-config.ts).
35
+ const cfg = await resolveServerConfig(process.env, process.cwd());
36
+ const INDEX_PATH = cfg.indexPath;
37
+ const PROJECT_ROOT = cfg.projectRoot;
38
+ const LANGUAGES = cfg.languages;
39
+ const MONITORING_PORT = cfg.monitoringPort;
40
+ const FEDERATION_REPOS = cfg.federationRepos;
41
+ process.stderr.write(`[pindex] project=${PROJECT_ROOT} languages=${LANGUAGES.join(',')} port=${MONITORING_PORT} index=${INDEX_PATH}\n`);
35
42
  // 1. Open / create the SQLite database
36
43
  const db = openDatabase(INDEX_PATH);
37
44
  runMigrations(db);
38
- // 1b. Open federated repo databases (read-only)
45
+ // 1b. Open federated repo databases (read-only), resolving names from GlobalRegistry
46
+ const registry = new GlobalRegistry();
47
+ const allEntries = registry.list();
48
+ const usedNames = new Set();
49
+ // Resolve the primary (local) name first so collisions in federated
50
+ // names don't accidentally shadow it.
51
+ const primaryEntry = allEntries.find((e) => e.path === PROJECT_ROOT);
52
+ const primaryName = primaryEntry?.name ?? assignName(PROJECT_ROOT, usedNames);
53
+ usedNames.add(primaryName);
39
54
  const federatedDbs = FEDERATION_REPOS.map((repoPath) => {
40
55
  const dbPath = getProjectIndexPath(repoPath);
41
56
  try {
42
57
  const fedDb = openDatabase(dbPath);
43
- return { path: repoPath, db: fedDb };
58
+ const entry = allEntries.find((e) => e.path === repoPath);
59
+ let name = entry?.name;
60
+ if (!name) {
61
+ name = assignName(repoPath, usedNames);
62
+ process.stderr.write(`[pindex] federated repo '${repoPath}' has no persisted name; using auto-generated '${name}'. Run 'pindex federate add ${repoPath}' to persist.\n`);
63
+ }
64
+ usedNames.add(name);
65
+ return { name, path: repoPath, db: fedDb };
44
66
  }
45
67
  catch {
46
68
  process.stderr.write(`[pindex] Warning: could not open federated DB for ${repoPath}\n`);
@@ -96,6 +118,7 @@ async function main() {
96
118
  federatedDbs,
97
119
  sessionId,
98
120
  observer,
121
+ primaryName,
99
122
  });
100
123
  const transport = new StdioServerTransport();
101
124
  await server.connect(transport);
@@ -136,25 +159,4 @@ main().catch((err) => {
136
159
  process.stderr.write(`[pindex] Fatal error: ${String(err)}\n`);
137
160
  process.exit(1);
138
161
  });
139
- /**
140
- * Applies the OBSERVATION_RETENTION policy on startup.
141
- * Supported values: 'permanent' (default), 'session', or '<N>d' (e.g. '30d').
142
- */
143
- function applyObservationRetention(db, currentSessionId, policy) {
144
- if (policy === 'permanent')
145
- return;
146
- if (policy === 'session') {
147
- deleteObservationsExceptSession(db, currentSessionId);
148
- return;
149
- }
150
- const match = /^(\d+)d$/.exec(policy);
151
- if (match) {
152
- const days = parseInt(match[1], 10);
153
- const cutoff = new Date();
154
- cutoff.setDate(cutoff.getDate() - days);
155
- deleteObservationsOlderThan(db, cutoff.toISOString());
156
- return;
157
- }
158
- process.stderr.write(`[pindex] Unknown OBSERVATION_RETENTION value: "${policy}" — defaulting to permanent\n`);
159
- }
160
162
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Detects which supported code languages actually have files in the project.
3
+ * Used to auto-configure LANGUAGES when the env var is not set — so a Python or
4
+ * Go project is indexed correctly instead of silently defaulting to TS/JS.
5
+ * Reuses the indexer's ignore patterns so build/vendor dirs don't skew the
6
+ * result. Falls back to the TS/JS default when nothing is found or the scan
7
+ * fails.
8
+ */
9
+ export declare function detectProjectLanguages(projectRoot: string): Promise<string[]>;
10
+ //# sourceMappingURL=detect-languages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect-languages.d.ts","sourceRoot":"","sources":["../../src/indexer/detect-languages.ts"],"names":[],"mappings":"AAYA;;;;;;;GAOG;AACH,wBAAsB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAcnF"}
@@ -0,0 +1,36 @@
1
+ import { glob } from 'glob';
2
+ import { LANGUAGE_PATTERNS, DEFAULT_IGNORE, DEFAULT_LANGUAGES } from './index.js';
3
+ // Reverse map: file extension -> language key, derived from LANGUAGE_PATTERNS so
4
+ // the two stay in sync (e.g. .tsx -> typescript, .jsx -> javascript).
5
+ const EXT_TO_LANG = {};
6
+ for (const [lang, patterns] of Object.entries(LANGUAGE_PATTERNS)) {
7
+ for (const p of patterns) {
8
+ EXT_TO_LANG[p.slice(p.lastIndexOf('.'))] = lang;
9
+ }
10
+ }
11
+ /**
12
+ * Detects which supported code languages actually have files in the project.
13
+ * Used to auto-configure LANGUAGES when the env var is not set — so a Python or
14
+ * Go project is indexed correctly instead of silently defaulting to TS/JS.
15
+ * Reuses the indexer's ignore patterns so build/vendor dirs don't skew the
16
+ * result. Falls back to the TS/JS default when nothing is found or the scan
17
+ * fails.
18
+ */
19
+ export async function detectProjectLanguages(projectRoot) {
20
+ const patterns = [...new Set(Object.values(LANGUAGE_PATTERNS).flat())];
21
+ let files;
22
+ try {
23
+ files = await glob(patterns, { cwd: projectRoot, ignore: DEFAULT_IGNORE, absolute: false });
24
+ }
25
+ catch {
26
+ return [...DEFAULT_LANGUAGES];
27
+ }
28
+ const langs = new Set();
29
+ for (const f of files) {
30
+ const lang = EXT_TO_LANG[f.slice(f.lastIndexOf('.'))];
31
+ if (lang)
32
+ langs.add(lang);
33
+ }
34
+ return langs.size > 0 ? [...langs].sort() : [...DEFAULT_LANGUAGES];
35
+ }
36
+ //# sourceMappingURL=detect-languages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect-languages.js","sourceRoot":"","sources":["../../src/indexer/detect-languages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAElF,iFAAiF;AACjF,sEAAsE;AACtE,MAAM,WAAW,GAA2B,EAAE,CAAC;AAC/C,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,CAAC;IACjE,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAClD,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,WAAmB;IAC9D,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACvE,IAAI,KAAe,CAAC;IACpB,IAAI,CAAC;QACH,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9F,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,GAAG,iBAAiB,CAAC,CAAC;IAChC,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACtD,IAAI,IAAI;YAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC;AACrE,CAAC"}
@@ -2,8 +2,10 @@ import type Database from 'better-sqlite3';
2
2
  import type { IndexResult, ParsedImport } from '../types.js';
3
3
  import { type AstDiffResult } from '../memory/ast-diff.js';
4
4
  import { type SummarizerOptions } from './summarizer.js';
5
+ export declare const DEFAULT_IGNORE: string[];
5
6
  /** Glob patterns per language name (as used in EXTENSION_MAP). */
6
7
  export declare const LANGUAGE_PATTERNS: Record<string, string[]>;
8
+ export declare const DEFAULT_LANGUAGES: string[];
7
9
  export interface IndexerOptions {
8
10
  db: Database.Database;
9
11
  projectRoot: string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/indexer/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAc,YAAY,EAAE,MAAM,aAAa,CAAC;AAczE,OAAO,EAAkB,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,EAAc,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AA0BrE,kEAAkE;AAClE,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAatD,CAAC;AA0BF,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B;sDACkD;IAClD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,wFAAwF;IACxF,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;IACpD,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,qFAAqF;IACrF,IAAI,CAAC,EAAE,aAAa,CAAC;CACtB;AAED,qBAAa,OAAO;IAClB,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAoB;IACvC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;IACrC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAW;IAC1C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAU;IAC5C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IACxC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAW;IAC5C,OAAO,CAAC,IAAI,CAA0B;IACtC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAS;IAC9C,OAAO,CAAC,gBAAgB,CAA4C;IACpE,OAAO,CAAC,GAAG,CAAgC;gBAE/B,OAAO,EAAE,cAAc;IAenC,qFAAqF;IAC/E,QAAQ,CAAC,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,WAAW,CAAC;IAiEnE,6EAA6E;IACvE,SAAS,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,UAAQ,GAAG,OAAO,CAAC,eAAe,CAAC;IA2C9E;oFACgF;YAClE,iBAAiB;IAmF/B,sFAAsF;IAChF,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,UAAQ,GAAG,OAAO,CAAC,eAAe,CAAC;IAiElF;;+EAE2E;IACrE,mBAAmB,CAAC,YAAY,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA6CpF;mEAC+D;IACzD,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAUhC,uEAAuE;IACvE,OAAO,CAAC,iBAAiB;CAqB1B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/indexer/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAc,YAAY,EAAE,MAAM,aAAa,CAAC;AAczE,OAAO,EAAkB,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,EAAc,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAMrE,eAAO,MAAM,cAAc,UAmB1B,CAAC;AAEF,kEAAkE;AAClE,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAatD,CAAC;AAEF,eAAO,MAAM,iBAAiB,UAA+B,CAAC;AAwB9D,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B;sDACkD;IAClD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,wFAAwF;IACxF,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;IACpD,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,qFAAqF;IACrF,IAAI,CAAC,EAAE,aAAa,CAAC;CACtB;AAED,qBAAa,OAAO;IAClB,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAoB;IACvC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;IACrC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAW;IAC1C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAU;IAC5C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IACxC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAW;IAC5C,OAAO,CAAC,IAAI,CAA0B;IACtC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAS;IAC9C,OAAO,CAAC,gBAAgB,CAA4C;IACpE,OAAO,CAAC,GAAG,CAAgC;gBAE/B,OAAO,EAAE,cAAc;IAenC,qFAAqF;IAC/E,QAAQ,CAAC,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,WAAW,CAAC;IAwEnE,6EAA6E;IACvE,SAAS,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,UAAQ,GAAG,OAAO,CAAC,eAAe,CAAC;IA8C9E;oFACgF;YAClE,iBAAiB;IAmF/B,sFAAsF;IAChF,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,UAAQ,GAAG,OAAO,CAAC,eAAe,CAAC;IAoElF;;+EAE2E;IACrE,mBAAmB,CAAC,YAAY,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA6CpF;mEAC+D;IACzD,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAUhC,uEAAuE;IACvE,OAAO,CAAC,iBAAiB;CAqB1B"}
@@ -7,8 +7,9 @@ import { upsertFile, upsertSymbol, upsertDependency, deleteSymbolsByFileId, dele
7
7
  import { computeAstDiff } from '../memory/ast-diff.js';
8
8
  import { Summarizer } from './summarizer.js';
9
9
  import { LspPythonClient } from './lsp-python.js';
10
+ import { resolveWithinRoot } from '../util/paths.js';
10
11
  // ─── Default Configuration ────────────────────────────────────────────────────
11
- const DEFAULT_IGNORE = [
12
+ export const DEFAULT_IGNORE = [
12
13
  '**/node_modules/**',
13
14
  '**/.git/**',
14
15
  '**/dist/**',
@@ -43,7 +44,7 @@ export const LANGUAGE_PATTERNS = {
43
44
  go: ['**/*.go'],
44
45
  rust: ['**/*.rs'],
45
46
  };
46
- const DEFAULT_LANGUAGES = ['typescript', 'javascript'];
47
+ export const DEFAULT_LANGUAGES = ['typescript', 'javascript'];
47
48
  /** Maximum file size to index (1 MB). Larger files are skipped to prevent OOM. */
48
49
  const MAX_FILE_SIZE = 1024 * 1024;
49
50
  /** Builds the set of glob patterns for the given language list. */
@@ -97,10 +98,15 @@ export class Indexer {
97
98
  glob(this.documentPatterns, { cwd: this.projectRoot, ignore: this.ignorePatterns, absolute: false }),
98
99
  ]);
99
100
  const allCodePaths = [...codePaths, ...(options.additionalPaths ?? [])];
100
- const jobs = allCodePaths.map((rel) => ({
101
- absolutePath: join(this.projectRoot, rel),
101
+ // Guard against path traversal: additionalPaths are caller-supplied and could
102
+ // contain '..' segments or absolute paths that escape the project root. glob
103
+ // results are already root-relative, but resolveWithinRoot is cheap insurance.
104
+ const jobs = allCodePaths
105
+ .map((rel) => ({
106
+ absolutePath: resolveWithinRoot(this.projectRoot, rel),
102
107
  relativePath: rel,
103
- }));
108
+ }))
109
+ .filter((j) => j.absolutePath !== null);
104
110
  const importsCache = new Map();
105
111
  const effectiveWorkers = ParsePool.pickEffectiveWorkerCount(jobs.length, this.configuredMaxWorkers);
106
112
  // Close any pool from a prior indexAll call and size a new one for this batch.
@@ -143,7 +149,10 @@ export class Indexer {
143
149
  }
144
150
  /** Indexes (or re-indexes) a single file given its project-relative path. */
145
151
  async indexFile(relativePath, force = false) {
146
- const absolutePath = join(this.projectRoot, relativePath);
152
+ const absolutePath = resolveWithinRoot(this.projectRoot, relativePath);
153
+ if (!absolutePath) {
154
+ return { status: 'error', errors: ['Path escapes project root'] };
155
+ }
147
156
  if (!existsSync(absolutePath)) {
148
157
  return { status: 'error', errors: [`File not found: ${relativePath}`] };
149
158
  }
@@ -257,7 +266,10 @@ export class Indexer {
257
266
  }
258
267
  /** Indexes (or re-indexes) a single document file given its project-relative path. */
259
268
  async indexDocument(relativePath, force = false) {
260
- const absolutePath = join(this.projectRoot, relativePath);
269
+ const absolutePath = resolveWithinRoot(this.projectRoot, relativePath);
270
+ if (!absolutePath) {
271
+ return { status: 'error', errors: ['Path escapes project root'] };
272
+ }
261
273
  if (!existsSync(absolutePath)) {
262
274
  return { status: 'error', errors: [`File not found: ${relativePath}`] };
263
275
  }
@@ -328,8 +340,8 @@ export class Indexer {
328
340
  imports = cache.get(file.path);
329
341
  }
330
342
  else {
331
- const absolutePath = join(this.projectRoot, file.path);
332
- if (!existsSync(absolutePath))
343
+ const absolutePath = resolveWithinRoot(this.projectRoot, file.path);
344
+ if (!absolutePath || !existsSync(absolutePath))
333
345
  continue;
334
346
  try {
335
347
  const content = readFileSync(absolutePath, 'utf-8');