pindex 1.2.3 → 1.4.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 (71) hide show
  1. package/README.md +18 -5
  2. package/dist/db/migrations.d.ts +4 -1
  3. package/dist/db/migrations.d.ts.map +1 -1
  4. package/dist/db/migrations.js +9 -3
  5. package/dist/db/migrations.js.map +1 -1
  6. package/dist/db/queries.d.ts.map +1 -1
  7. package/dist/db/queries.js +21 -17
  8. package/dist/db/queries.js.map +1 -1
  9. package/dist/gui/server.d.ts.map +1 -1
  10. package/dist/gui/server.js +14 -5
  11. package/dist/gui/server.js.map +1 -1
  12. package/dist/index.js +14 -0
  13. package/dist/index.js.map +1 -1
  14. package/dist/indexer/index.d.ts +23 -3
  15. package/dist/indexer/index.d.ts.map +1 -1
  16. package/dist/indexer/index.js +146 -62
  17. package/dist/indexer/index.js.map +1 -1
  18. package/dist/indexer/lsp-mapper.d.ts +6 -0
  19. package/dist/indexer/lsp-mapper.d.ts.map +1 -0
  20. package/dist/indexer/lsp-mapper.js +40 -0
  21. package/dist/indexer/lsp-mapper.js.map +1 -0
  22. package/dist/indexer/lsp-python.d.ts +43 -0
  23. package/dist/indexer/lsp-python.d.ts.map +1 -0
  24. package/dist/indexer/lsp-python.js +234 -0
  25. package/dist/indexer/lsp-python.js.map +1 -0
  26. package/dist/indexer/parse-pool.d.ts +26 -0
  27. package/dist/indexer/parse-pool.d.ts.map +1 -0
  28. package/dist/indexer/parse-pool.js +201 -0
  29. package/dist/indexer/parse-pool.js.map +1 -0
  30. package/dist/indexer/parse-types.d.ts +33 -0
  31. package/dist/indexer/parse-types.d.ts.map +1 -0
  32. package/dist/indexer/parse-types.js +2 -0
  33. package/dist/indexer/parse-types.js.map +1 -0
  34. package/dist/indexer/parse-worker.d.ts +2 -0
  35. package/dist/indexer/parse-worker.d.ts.map +1 -0
  36. package/dist/indexer/parse-worker.js +39 -0
  37. package/dist/indexer/parse-worker.js.map +1 -0
  38. package/dist/indexer/parser.d.ts.map +1 -1
  39. package/dist/indexer/parser.js +10 -4
  40. package/dist/indexer/parser.js.map +1 -1
  41. package/dist/indexer/summarizer.d.ts +18 -7
  42. package/dist/indexer/summarizer.d.ts.map +1 -1
  43. package/dist/indexer/summarizer.js +110 -13
  44. package/dist/indexer/summarizer.js.map +1 -1
  45. package/dist/indexer/watcher.d.ts.map +1 -1
  46. package/dist/indexer/watcher.js +2 -0
  47. package/dist/indexer/watcher.js.map +1 -1
  48. package/dist/memory/observer.d.ts.map +1 -1
  49. package/dist/memory/observer.js +20 -4
  50. package/dist/memory/observer.js.map +1 -1
  51. package/dist/monitoring/server.d.ts.map +1 -1
  52. package/dist/monitoring/server.js +5 -1
  53. package/dist/monitoring/server.js.map +1 -1
  54. package/dist/server.d.ts.map +1 -1
  55. package/dist/server.js +32 -16
  56. package/dist/server.js.map +1 -1
  57. package/dist/tools/get_context.d.ts.map +1 -1
  58. package/dist/tools/get_context.js +4 -2
  59. package/dist/tools/get_context.js.map +1 -1
  60. package/dist/tools/schemas.d.ts +75 -0
  61. package/dist/tools/schemas.d.ts.map +1 -0
  62. package/dist/tools/schemas.js +79 -0
  63. package/dist/tools/schemas.js.map +1 -0
  64. package/dist/tools/search_symbols.d.ts.map +1 -1
  65. package/dist/tools/search_symbols.js +8 -6
  66. package/dist/tools/search_symbols.js.map +1 -1
  67. package/dist/util/paths.d.ts +9 -0
  68. package/dist/util/paths.d.ts.map +1 -0
  69. package/dist/util/paths.js +18 -0
  70. package/dist/util/paths.js.map +1 -0
  71. package/package.json +15 -7
@@ -1,9 +1,12 @@
1
1
  import { readFileSync, existsSync, statSync } from 'node:fs';
2
2
  import { join, resolve, dirname } from 'node:path';
3
3
  import { glob } from 'glob';
4
+ import { ParsePool } from './parse-pool.js';
4
5
  import { parseFile, parseDocument, hashContent } from './parser.js';
5
6
  import { upsertFile, upsertSymbol, upsertDependency, deleteSymbolsByFileId, deleteDependenciesByFile, getFileByPath, insertDocumentChunk, deleteDocumentChunksByFileId, } from '../db/queries.js';
6
7
  import { computeAstDiff } from '../memory/ast-diff.js';
8
+ import { Summarizer } from './summarizer.js';
9
+ import { LspPythonClient } from './lsp-python.js';
7
10
  // ─── Default Configuration ────────────────────────────────────────────────────
8
11
  const DEFAULT_IGNORE = [
9
12
  '**/node_modules/**',
@@ -65,43 +68,65 @@ export class Indexer {
65
68
  languages;
66
69
  ignorePatterns;
67
70
  generateSummaries;
71
+ summarizer;
68
72
  documentPatterns;
73
+ pool = null;
74
+ configuredMaxWorkers;
75
+ lastImportsCache = null;
76
+ lsp = null;
69
77
  constructor(options) {
70
78
  this.db = options.db;
71
79
  this.projectRoot = resolve(options.projectRoot);
72
80
  this.languages = options.languages ?? DEFAULT_LANGUAGES;
73
81
  this.ignorePatterns = options.ignorePatterns ?? DEFAULT_IGNORE;
74
82
  this.generateSummaries = options.generateSummaries ?? false;
83
+ this.summarizer = new Summarizer(options.summarizerOptions ?? { enabled: false });
75
84
  this.documentPatterns = options.documentPatterns ?? DEFAULT_DOCUMENT_PATTERNS;
85
+ this.configuredMaxWorkers = ParsePool.pickDefaultWorkerCount(options.maxParseWorkers);
86
+ const lspEnabled = options.lspEnabled ?? (process.env.PINDEX_LSP !== 'false');
87
+ if (lspEnabled) {
88
+ this.lsp = new LspPythonClient({ projectRoot: this.projectRoot, enabled: true });
89
+ }
76
90
  }
77
91
  /** Discovers and indexes all source files and document files in the project root. */
78
92
  async indexAll(options = {}) {
79
93
  const result = { indexed: 0, updated: 0, skipped: 0, errors: [] };
80
94
  const codePatterns = buildCodePatterns(this.languages);
81
95
  const [codePaths, docPaths] = await Promise.all([
82
- glob(codePatterns, {
83
- cwd: this.projectRoot,
84
- ignore: this.ignorePatterns,
85
- absolute: false,
86
- }),
87
- glob(this.documentPatterns, {
88
- cwd: this.projectRoot,
89
- ignore: this.ignorePatterns,
90
- absolute: false,
91
- }),
96
+ glob(codePatterns, { cwd: this.projectRoot, ignore: this.ignorePatterns, absolute: false }),
97
+ glob(this.documentPatterns, { cwd: this.projectRoot, ignore: this.ignorePatterns, absolute: false }),
92
98
  ]);
93
- // Include any additional paths requested
94
99
  const allCodePaths = [...codePaths, ...(options.additionalPaths ?? [])];
95
- for (const relativePath of allCodePaths) {
96
- const fileResult = await this.indexFile(relativePath, options.force);
97
- if (fileResult.status === 'indexed')
100
+ const jobs = allCodePaths.map((rel) => ({
101
+ absolutePath: join(this.projectRoot, rel),
102
+ relativePath: rel,
103
+ }));
104
+ const importsCache = new Map();
105
+ const effectiveWorkers = ParsePool.pickEffectiveWorkerCount(jobs.length, this.configuredMaxWorkers);
106
+ // Close any pool from a prior indexAll call and size a new one for this batch.
107
+ if (this.pool)
108
+ await this.pool.close();
109
+ this.pool = new ParsePool({ maxWorkers: effectiveWorkers });
110
+ for await (const parseResult of this.pool.parseMany(jobs)) {
111
+ if (parseResult.status === 'skipped') {
112
+ result.skipped++;
113
+ continue;
114
+ }
115
+ if (parseResult.status === 'error') {
116
+ result.errors.push(parseResult.error);
117
+ continue;
118
+ }
119
+ const fileRes = await this.processParsedFile(parseResult.relativePath, parseResult.parsed, parseResult.content, parseResult.hash, options.force ?? false);
120
+ if (fileRes.status === 'indexed')
98
121
  result.indexed++;
99
- else if (fileResult.status === 'updated')
122
+ else if (fileRes.status === 'updated')
100
123
  result.updated++;
101
- else if (fileResult.status === 'skipped')
124
+ else if (fileRes.status === 'skipped')
102
125
  result.skipped++;
103
- result.errors.push(...fileResult.errors);
126
+ result.errors.push(...fileRes.errors);
127
+ importsCache.set(parseResult.relativePath, parseResult.parsed.imports);
104
128
  }
129
+ // Documents stay sequential; they are few and cheap.
105
130
  for (const relativePath of docPaths) {
106
131
  const fileResult = await this.indexDocument(relativePath, options.force);
107
132
  if (fileResult.status === 'indexed')
@@ -112,18 +137,16 @@ export class Indexer {
112
137
  result.skipped++;
113
138
  result.errors.push(...fileResult.errors);
114
139
  }
140
+ // Stash the cache for resolveDependencies (Task 7 will consume it).
141
+ this.lastImportsCache = importsCache;
115
142
  return result;
116
143
  }
117
144
  /** Indexes (or re-indexes) a single file given its project-relative path. */
118
145
  async indexFile(relativePath, force = false) {
119
146
  const absolutePath = join(this.projectRoot, relativePath);
120
147
  if (!existsSync(absolutePath)) {
121
- return {
122
- status: 'error',
123
- errors: [`File not found: ${relativePath}`],
124
- };
148
+ return { status: 'error', errors: [`File not found: ${relativePath}`] };
125
149
  }
126
- // Skip files larger than MAX_FILE_SIZE to prevent OOM
127
150
  try {
128
151
  const stat = statSync(absolutePath);
129
152
  if (stat.size > MAX_FILE_SIZE) {
@@ -136,34 +159,74 @@ export class Indexer {
136
159
  content = readFileSync(absolutePath, 'utf-8');
137
160
  }
138
161
  catch (err) {
139
- return {
140
- status: 'error',
141
- errors: [`Failed to read ${relativePath}: ${String(err)}`],
142
- };
162
+ return { status: 'error', errors: [`Failed to read ${relativePath}: ${String(err)}`] };
143
163
  }
144
164
  const hash = hashContent(content);
145
- // Check if file has changed (skip if unchanged) single DB lookup
165
+ // Fast path: skip re-parsing unchanged files. The watcher hot path
166
+ // relies on this short-circuit; ParsePool-backed indexAll bypasses
167
+ // indexFile so it does not pay this extra lookup.
168
+ if (!force) {
169
+ const existing = getFileByPath(this.db, relativePath);
170
+ if (existing && existing.hash === hash) {
171
+ return { status: 'skipped', errors: [] };
172
+ }
173
+ }
174
+ let parsed;
175
+ try {
176
+ parsed = parseFile(absolutePath, content);
177
+ }
178
+ catch (err) {
179
+ return { status: 'error', errors: [`Failed to parse ${relativePath}: ${String(err)}`] };
180
+ }
181
+ return this.processParsedFile(relativePath, parsed, content, hash, force);
182
+ }
183
+ /** Everything that happens after a file has been read, parsed, and hashed.
184
+ * Runs entirely on the main thread: summarizer → AST diff → DB transaction. */
185
+ async processParsedFile(relativePath, parsed, content, hash, force) {
146
186
  const existing = getFileByPath(this.db, relativePath);
147
187
  if (!force && existing && existing.hash === hash) {
148
188
  return { status: 'skipped', errors: [] };
149
189
  }
150
190
  const isUpdate = existing !== null;
191
+ if (parsed.language === 'python' && this.lsp) {
192
+ if (this.lsp.state === 'idle') {
193
+ // Fire-and-forget: first Python file proceeds with the regex result
194
+ // while pyright warms up. Subsequent files get LSP-quality output.
195
+ this.lsp.start().catch((err) => {
196
+ process.stderr.write(`[pindex] LSP start failed: ${String(err)}\n`);
197
+ });
198
+ }
199
+ if (this.lsp.ready) {
200
+ const upgraded = await this.lsp.getDocumentSymbols(relativePath, content);
201
+ if (upgraded) {
202
+ parsed = { ...parsed, symbols: upgraded.symbols, imports: upgraded.imports };
203
+ }
204
+ }
205
+ }
206
+ let fileSummary = null;
207
+ const symbolSummaries = new Map();
208
+ if (this.generateSummaries) {
209
+ fileSummary = await this.summarizer.summarizeFile(relativePath, content);
210
+ const symbolEntries = parsed.symbols.map(async (sym) => {
211
+ const snippet = content.split('\n').slice(sym.startLine - 1, sym.endLine).join('\n');
212
+ const summary = await this.summarizer.summarizeSymbol(sym.signature, snippet);
213
+ return [sym.name, summary];
214
+ });
215
+ for (const [name, summary] of await Promise.all(symbolEntries)) {
216
+ symbolSummaries.set(name, summary);
217
+ }
218
+ }
151
219
  try {
152
- const parsed = parseFile(absolutePath, content);
153
- // Wrap all DB mutations in a single transaction for atomicity + performance
154
220
  const runInTransaction = this.db.transaction(() => {
155
221
  upsertFile(this.db, {
156
222
  path: relativePath,
157
223
  language: parsed.language,
158
224
  hash,
159
225
  rawTokenEstimate: parsed.rawTokenEstimate,
160
- summary: null,
226
+ summary: fileSummary,
161
227
  });
162
- // Re-fetch after upsert to get the ID (needed for FK references)
163
228
  const fileRecord = getFileByPath(this.db, relativePath);
164
- // Compute AST diff before replacing symbols (snapshots updated inside)
165
229
  const diff = computeAstDiff(this.db, relativePath, parsed.symbols);
166
- // Replace symbols for this file
167
230
  deleteSymbolsByFileId(this.db, fileRecord.id);
168
231
  for (const sym of parsed.symbols) {
169
232
  upsertSymbol(this.db, {
@@ -171,7 +234,7 @@ export class Indexer {
171
234
  name: sym.name,
172
235
  kind: sym.kind,
173
236
  signature: sym.signature,
174
- summary: null,
237
+ summary: symbolSummaries.get(sym.name) ?? null,
175
238
  startLine: sym.startLine,
176
239
  endLine: sym.endLine,
177
240
  isExported: sym.isExported,
@@ -179,7 +242,6 @@ export class Indexer {
179
242
  hasTryCatch: sym.hasTryCatch,
180
243
  });
181
244
  }
182
- // Update dependencies
183
245
  deleteDependenciesByFile(this.db, fileRecord.id);
184
246
  return diff;
185
247
  });
@@ -251,43 +313,65 @@ export class Indexer {
251
313
  return { status: 'error', errors: [`Failed to index document ${relativePath}: ${String(err)}`] };
252
314
  }
253
315
  }
254
- /** Second-pass: resolves import strings to file IDs and stores dependencies. */
255
- async resolveDependencies() {
256
- // Re-parse all files to extract imports, then match to known file paths
316
+ /** Resolves import strings to file IDs and stores dependencies.
317
+ * Fast path: pass an importsCache built during indexAll() to skip re-reading
318
+ * and re-parsing every file. Slow path (no cache) re-parses as before. */
319
+ async resolveDependencies(importsCache) {
320
+ const cache = importsCache ?? this.lastImportsCache ?? undefined;
257
321
  const { getAllFiles } = await import('../db/queries.js');
258
322
  const allFiles = getAllFiles(this.db);
259
323
  const pathIndex = new Map(allFiles.map((f) => [f.path, f.id]));
260
324
  const knownPaths = new Set(pathIndex.keys());
261
325
  for (const file of allFiles) {
262
- const absolutePath = join(this.projectRoot, file.path);
263
- if (!existsSync(absolutePath))
264
- continue;
265
- try {
266
- const content = readFileSync(absolutePath, 'utf-8');
267
- const parsed = parseFile(absolutePath, content);
268
- deleteDependenciesByFile(this.db, file.id);
269
- for (const imp of parsed.imports) {
270
- // Resolve relative imports to known project files
271
- const resolvedPath = this.resolveImportPath(file.path, imp.source, knownPaths);
272
- if (!resolvedPath)
273
- continue;
274
- const toFileId = pathIndex.get(resolvedPath);
275
- if (!toFileId)
276
- continue;
277
- for (const sym of imp.symbols.length > 0 ? imp.symbols : [null]) {
278
- upsertDependency(this.db, {
279
- fromFile: file.id,
280
- toFile: toFileId,
281
- symbolName: sym,
282
- });
283
- }
326
+ let imports;
327
+ if (cache && cache.has(file.path)) {
328
+ imports = cache.get(file.path);
329
+ }
330
+ else {
331
+ const absolutePath = join(this.projectRoot, file.path);
332
+ if (!existsSync(absolutePath))
333
+ continue;
334
+ try {
335
+ const content = readFileSync(absolutePath, 'utf-8');
336
+ imports = parseFile(absolutePath, content).imports;
337
+ }
338
+ catch (err) {
339
+ process.stderr.write(`[pindex] resolveDependencies: re-parse failed for ${file.path}: ${String(err)}\n`);
340
+ continue;
284
341
  }
285
342
  }
286
- catch {
287
- // Silently skip files that fail dependency resolution
343
+ if (!imports)
344
+ continue;
345
+ deleteDependenciesByFile(this.db, file.id);
346
+ for (const imp of imports) {
347
+ const resolvedPath = this.resolveImportPath(file.path, imp.source, knownPaths);
348
+ if (!resolvedPath)
349
+ continue;
350
+ const toFileId = pathIndex.get(resolvedPath);
351
+ if (!toFileId)
352
+ continue;
353
+ for (const sym of imp.symbols.length > 0 ? imp.symbols : [null]) {
354
+ upsertDependency(this.db, {
355
+ fromFile: file.id,
356
+ toFile: toFileId,
357
+ symbolName: sym,
358
+ });
359
+ }
288
360
  }
289
361
  }
290
362
  }
363
+ /** Terminates any worker threads owned by the parse pool. Safe to call
364
+ * multiple times; no-op when no pool was ever constructed. */
365
+ async closePool() {
366
+ if (this.lsp) {
367
+ await this.lsp.close();
368
+ this.lsp = null;
369
+ }
370
+ if (!this.pool)
371
+ return;
372
+ await this.pool.close();
373
+ this.pool = null;
374
+ }
291
375
  /** Resolves a relative import path to a project-relative file path. */
292
376
  resolveImportPath(fromFile, importSource, knownPaths) {
293
377
  if (!importSource.startsWith('.'))
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/indexer/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/indexer/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { DocumentSymbol } from 'vscode-languageserver-protocol';
2
+ import type { ParsedSymbol } from '../types.js';
3
+ /** Flattens an LSP DocumentSymbol tree into PindeX's flat ParsedSymbol array.
4
+ * Nested class members are emitted as individual method/variable entries. */
5
+ export declare function mapDocumentSymbols(symbols: DocumentSymbol[]): ParsedSymbol[];
6
+ //# sourceMappingURL=lsp-mapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lsp-mapper.d.ts","sourceRoot":"","sources":["../../src/indexer/lsp-mapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,KAAK,EAAE,YAAY,EAAc,MAAM,aAAa,CAAC;AAc5D;8EAC8E;AAC9E,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,YAAY,EAAE,CAI5E"}
@@ -0,0 +1,40 @@
1
+ // LSP SymbolKind → PindeX SymbolKind.
2
+ // Numeric values per LSP spec:
3
+ // 5 Class / 9 Constructor / 6 Method / 12 Function / 13 Variable / 14 Constant
4
+ const KIND_MAP = {
5
+ 5: 'class',
6
+ 6: 'method',
7
+ 9: 'method', // constructors are methods in our model
8
+ 12: 'function',
9
+ 13: 'variable',
10
+ 14: 'variable',
11
+ };
12
+ /** Flattens an LSP DocumentSymbol tree into PindeX's flat ParsedSymbol array.
13
+ * Nested class members are emitted as individual method/variable entries. */
14
+ export function mapDocumentSymbols(symbols) {
15
+ const out = [];
16
+ walk(symbols, out);
17
+ return out;
18
+ }
19
+ function walk(nodes, out) {
20
+ for (const node of nodes) {
21
+ const kind = KIND_MAP[node.kind];
22
+ if (kind) {
23
+ // LSP ranges are 0-indexed; PindeX stores 1-indexed start/end lines.
24
+ out.push({
25
+ name: node.name,
26
+ kind,
27
+ signature: node.name,
28
+ startLine: node.range.start.line + 1,
29
+ endLine: node.range.end.line + 1,
30
+ isExported: true,
31
+ isAsync: false,
32
+ hasTryCatch: false,
33
+ });
34
+ }
35
+ if (node.children && node.children.length > 0) {
36
+ walk(node.children, out);
37
+ }
38
+ }
39
+ }
40
+ //# sourceMappingURL=lsp-mapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lsp-mapper.js","sourceRoot":"","sources":["../../src/indexer/lsp-mapper.ts"],"names":[],"mappings":"AAGA,sCAAsC;AACtC,+BAA+B;AAC/B,gFAAgF;AAChF,MAAM,QAAQ,GAA+B;IAC3C,CAAC,EAAE,OAAO;IACV,CAAC,EAAE,QAAQ;IACX,CAAC,EAAE,QAAQ,EAAI,wCAAwC;IACvD,EAAE,EAAE,UAAU;IACd,EAAE,EAAE,UAAU;IACd,EAAE,EAAE,UAAU;CACf,CAAC;AAEF;8EAC8E;AAC9E,MAAM,UAAU,kBAAkB,CAAC,OAAyB;IAC1D,MAAM,GAAG,GAAmB,EAAE,CAAC;IAC/B,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACnB,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,IAAI,CAAC,KAAuB,EAAE,GAAmB;IACxD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAc,CAAC,CAAC;QAC3C,IAAI,IAAI,EAAE,CAAC;YACT,qEAAqE;YACrE,GAAG,CAAC,IAAI,CAAC;gBACP,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,IAAI;gBACJ,SAAS,EAAE,IAAI,CAAC,IAAI;gBACpB,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC;gBACpC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC;gBAChC,UAAU,EAAE,IAAI;gBAChB,OAAO,EAAE,KAAK;gBACd,WAAW,EAAE,KAAK;aACnB,CAAC,CAAC;QACL,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9C,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,43 @@
1
+ import { type ChildProcessWithoutNullStreams } from 'node:child_process';
2
+ import type { ParsedSymbol, ParsedImport } from '../types.js';
3
+ export type LspReadyState = 'idle' | 'starting' | 'ready' | 'failed' | 'closed';
4
+ export interface LspPythonClientOptions {
5
+ projectRoot: string;
6
+ enabled: boolean;
7
+ timeoutMs?: number;
8
+ /** Test seam: inject a fake subprocess factory. Not for production use. */
9
+ _spawn?: (path: string) => ChildProcessWithoutNullStreams;
10
+ /** Test seam: inject a fake resolver. Not for production use. */
11
+ _resolveServerPath?: () => string | null;
12
+ }
13
+ export declare class LspPythonClient {
14
+ private _state;
15
+ private readonly enabled;
16
+ private readonly projectRoot;
17
+ private readonly timeoutMs;
18
+ private readonly spawnImpl;
19
+ private readonly resolveImpl;
20
+ private proc;
21
+ private connection;
22
+ private static warnedMissing;
23
+ private pendingQueue;
24
+ private restartAttempted;
25
+ private consecutiveTimeouts;
26
+ constructor(options: LspPythonClientOptions);
27
+ /** Test-only: resets module-level warning guard so tests can observe
28
+ * stderr output repeatedly. NOT for production use. */
29
+ static _resetWarnedMissingForTest(): void;
30
+ get state(): LspReadyState;
31
+ get ready(): boolean;
32
+ start(): Promise<void>;
33
+ getDocumentSymbols(relPath: string, content: string): Promise<{
34
+ symbols: ParsedSymbol[];
35
+ imports: ParsedImport[];
36
+ } | null>;
37
+ private runRequest;
38
+ /** Manually triggers the same restart-or-fail path the exit handler uses.
39
+ * Used when the subprocess is unresponsive (repeated request timeouts). */
40
+ private simulateCrash;
41
+ close(): Promise<void>;
42
+ }
43
+ //# sourceMappingURL=lsp-python.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lsp-python.d.ts","sourceRoot":"","sources":["../../src/indexer/lsp-python.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,8BAA8B,EAAE,MAAM,oBAAoB,CAAC;AAW7F,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI9D,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEhF,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2EAA2E;IAC3E,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,8BAA8B,CAAC;IAC1D,iEAAiE;IACjE,kBAAkB,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;CAC1C;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAyB;IACvC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAmD;IAC7E,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAsB;IAClD,OAAO,CAAC,IAAI,CAA+C;IAC3D,OAAO,CAAC,UAAU,CAAkC;IACpD,OAAO,CAAC,MAAM,CAAC,aAAa,CAAS;IACrC,OAAO,CAAC,YAAY,CAAuC;IAC3D,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,mBAAmB,CAAK;gBAEpB,OAAO,EAAE,sBAAsB;IAU3C;4DACwD;IACxD,MAAM,CAAC,0BAA0B,IAAI,IAAI;IAIzC,IAAI,KAAK,IAAI,aAAa,CAEzB;IAED,IAAI,KAAK,IAAI,OAAO,CAEnB;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAqFtB,kBAAkB,CACtB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;QAAE,OAAO,EAAE,YAAY,EAAE,CAAC;QAAC,OAAO,EAAE,YAAY,EAAE,CAAA;KAAE,GAAG,IAAI,CAAC;YASzD,UAAU;IA0DxB;gFAC4E;IAC5E,OAAO,CAAC,aAAa;IAef,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAmB7B"}