pindex 1.3.0 → 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.
package/README.md CHANGED
@@ -523,6 +523,7 @@ These are set automatically in the generated `.mcp.json` — you rarely need to
523
523
  | `TOKEN_PRICE_PER_MILLION` | `3.00` | USD price per million tokens — used for cost estimates |
524
524
  | `PINDEX_PARSE_WORKERS` | _(empty)_ | Parse workers (0=sync, empty=auto) |
525
525
  | `PINDEX_BIND_HOST` | `127.0.0.1` | Bind host for monitoring/GUI (default loopback) |
526
+ | `PINDEX_LSP` | `true` | opt-in LSP parsing for Python (set to `false` to force regex) |
526
527
  | `FEDERATION_REPOS` | _(empty)_ | Colon-separated absolute paths to linked repositories |
527
528
  | `DOCUMENT_PATTERNS` | `**/*.md,**/*.markdown,**/*.yaml,**/*.yml,**/*.txt` | Glob patterns for document files to index alongside code |
528
529
  | `OBSERVATION_RETENTION` | `permanent` | How long passive session observations are kept: `permanent`, `session`, or `Nd` (e.g. `30d`) |
@@ -635,6 +636,12 @@ goose session start
635
636
 
636
637
  ---
637
638
 
639
+ ### Python (LSP)
640
+
641
+ PindeX ships with Pyright as an optional dependency. When installed, Pyright's LSP server produces the precise symbol tree instead of the fallback regex extractor. Set `PINDEX_LSP=false` to opt out. If Pyright is missing (for example when installed with `--no-optional`), PindeX logs a one-time warning and falls back to the regex path.
642
+
643
+ ---
644
+
638
645
  ## CLI Reference
639
646
 
640
647
  ```
@@ -15,6 +15,8 @@ export interface IndexerOptions {
15
15
  /** 0 = run parsing synchronously on main (test / small-project mode).
16
16
  * undefined = auto-select based on CPU count. */
17
17
  maxParseWorkers?: number;
18
+ /** Enable the LSP-backed Python parser. Default: process.env.PINDEX_LSP !== 'false'. */
19
+ lspEnabled?: boolean;
18
20
  }
19
21
  export interface IndexAllOptions {
20
22
  additionalPaths?: string[];
@@ -37,6 +39,7 @@ export declare class Indexer {
37
39
  private pool;
38
40
  private readonly configuredMaxWorkers;
39
41
  private lastImportsCache;
42
+ private lsp;
40
43
  constructor(options: IndexerOptions);
41
44
  /** Discovers and indexes all source files and document files in the project root. */
42
45
  indexAll(options?: IndexAllOptions): Promise<IndexResult>;
@@ -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;AAyBrE,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;CAC1B;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;gBAExD,OAAO,EAAE,cAAc;IAWnC,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;IAmE/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;IAMhC,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;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"}
@@ -6,6 +6,7 @@ import { parseFile, parseDocument, hashContent } from './parser.js';
6
6
  import { upsertFile, upsertSymbol, upsertDependency, deleteSymbolsByFileId, deleteDependenciesByFile, getFileByPath, insertDocumentChunk, deleteDocumentChunksByFileId, } from '../db/queries.js';
7
7
  import { computeAstDiff } from '../memory/ast-diff.js';
8
8
  import { Summarizer } from './summarizer.js';
9
+ import { LspPythonClient } from './lsp-python.js';
9
10
  // ─── Default Configuration ────────────────────────────────────────────────────
10
11
  const DEFAULT_IGNORE = [
11
12
  '**/node_modules/**',
@@ -72,6 +73,7 @@ export class Indexer {
72
73
  pool = null;
73
74
  configuredMaxWorkers;
74
75
  lastImportsCache = null;
76
+ lsp = null;
75
77
  constructor(options) {
76
78
  this.db = options.db;
77
79
  this.projectRoot = resolve(options.projectRoot);
@@ -81,6 +83,10 @@ export class Indexer {
81
83
  this.summarizer = new Summarizer(options.summarizerOptions ?? { enabled: false });
82
84
  this.documentPatterns = options.documentPatterns ?? DEFAULT_DOCUMENT_PATTERNS;
83
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
+ }
84
90
  }
85
91
  /** Discovers and indexes all source files and document files in the project root. */
86
92
  async indexAll(options = {}) {
@@ -182,6 +188,21 @@ export class Indexer {
182
188
  return { status: 'skipped', errors: [] };
183
189
  }
184
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
+ }
185
206
  let fileSummary = null;
186
207
  const symbolSummaries = new Map();
187
208
  if (this.generateSummaries) {
@@ -342,6 +363,10 @@ export class Indexer {
342
363
  /** Terminates any worker threads owned by the parse pool. Safe to call
343
364
  * multiple times; no-op when no pool was ever constructed. */
344
365
  async closePool() {
366
+ if (this.lsp) {
367
+ await this.lsp.close();
368
+ this.lsp = null;
369
+ }
345
370
  if (!this.pool)
346
371
  return;
347
372
  await this.pool.close();
@@ -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"}
@@ -0,0 +1,234 @@
1
+ import { spawn as nodeSpawn } from 'node:child_process';
2
+ import { existsSync } from 'node:fs';
3
+ import { resolve, join } from 'node:path';
4
+ import { pathToFileURL } from 'node:url';
5
+ import { StreamMessageReader, StreamMessageWriter, createMessageConnection, } from 'vscode-jsonrpc/node.js';
6
+ import { mapDocumentSymbols } from './lsp-mapper.js';
7
+ import { parseFile } from './parser.js';
8
+ export class LspPythonClient {
9
+ _state = 'idle';
10
+ enabled;
11
+ projectRoot;
12
+ timeoutMs;
13
+ spawnImpl;
14
+ resolveImpl;
15
+ proc = null;
16
+ connection = null;
17
+ static warnedMissing = false;
18
+ pendingQueue = Promise.resolve();
19
+ restartAttempted = false;
20
+ consecutiveTimeouts = 0;
21
+ constructor(options) {
22
+ this.enabled = options.enabled;
23
+ this.projectRoot = options.projectRoot;
24
+ this.timeoutMs = options.timeoutMs ?? 5000;
25
+ this.spawnImpl =
26
+ options._spawn ??
27
+ ((path) => nodeSpawn(path, ['--stdio'], { stdio: ['pipe', 'pipe', 'pipe'] }));
28
+ this.resolveImpl = options._resolveServerPath ?? (() => resolvePyrightLangserver());
29
+ }
30
+ /** Test-only: resets module-level warning guard so tests can observe
31
+ * stderr output repeatedly. NOT for production use. */
32
+ static _resetWarnedMissingForTest() {
33
+ LspPythonClient.warnedMissing = false;
34
+ }
35
+ get state() {
36
+ return this._state;
37
+ }
38
+ get ready() {
39
+ return this._state === 'ready';
40
+ }
41
+ async start() {
42
+ if (this._state !== 'idle')
43
+ return;
44
+ if (!this.enabled) {
45
+ this._state = 'failed';
46
+ return;
47
+ }
48
+ const path = this.resolveImpl();
49
+ if (!path) {
50
+ if (!LspPythonClient.warnedMissing) {
51
+ process.stderr.write(`[pindex] LSP: pyright-langserver not found on PATH or in node_modules; ` +
52
+ `falling back to regex parsing. Install with "npm install pyright" or ` +
53
+ `set PINDEX_LSP=false to silence this.\n`);
54
+ LspPythonClient.warnedMissing = true;
55
+ }
56
+ this._state = 'failed';
57
+ return;
58
+ }
59
+ this._state = 'starting';
60
+ try {
61
+ this.proc = this.spawnImpl(path);
62
+ }
63
+ catch (err) {
64
+ process.stderr.write(`[pindex] LSP: spawn failed: ${String(err)}\n`);
65
+ this._state = 'failed';
66
+ return;
67
+ }
68
+ // exitReject lets us abort the initialize handshake when the process exits early.
69
+ let exitReject;
70
+ const exitPromise = new Promise((_, reject) => { exitReject = reject; });
71
+ this.proc.on('exit', (code) => {
72
+ if (this._state === 'closed')
73
+ return;
74
+ process.stderr.write(`[pindex] LSP: pyright-langserver exited (code ${code})\n`);
75
+ if (!this.restartAttempted && this._state === 'ready') {
76
+ this.restartAttempted = true;
77
+ process.stderr.write(`[pindex] LSP: attempting one restart\n`);
78
+ this._state = 'idle';
79
+ this.proc = null;
80
+ this.connection?.dispose();
81
+ this.connection = null;
82
+ // Fire and forget — the restart is opportunistic.
83
+ this.start().catch(() => {
84
+ /* swallow — state already reflects any failure */
85
+ });
86
+ return;
87
+ }
88
+ this._state = 'failed';
89
+ exitReject(new Error(`pyright-langserver exited with code ${String(code)}`));
90
+ });
91
+ this.connection = createMessageConnection(new StreamMessageReader(this.proc.stdout), new StreamMessageWriter(this.proc.stdin));
92
+ this.connection.listen();
93
+ try {
94
+ await Promise.race([
95
+ this.connection.sendRequest('initialize', {
96
+ processId: process.pid,
97
+ rootUri: pathToFileURL(resolve(this.projectRoot)).href,
98
+ capabilities: { textDocument: { documentSymbol: { hierarchicalDocumentSymbolSupport: true } } },
99
+ }),
100
+ exitPromise,
101
+ new Promise((_, reject) => setTimeout(() => reject(new Error('initialize timeout')), this.timeoutMs)),
102
+ ]);
103
+ this.connection.sendNotification('initialized', {});
104
+ this._state = 'ready';
105
+ }
106
+ catch (err) {
107
+ // The exit handler may have already set _state to 'failed' via the event loop.
108
+ const currentState = this._state;
109
+ if (currentState !== 'failed' && currentState !== 'closed') {
110
+ process.stderr.write(`[pindex] LSP: initialize failed: ${String(err)}\n`);
111
+ this._state = 'failed';
112
+ }
113
+ }
114
+ }
115
+ async getDocumentSymbols(relPath, content) {
116
+ if (this._state !== 'ready' || !this.connection)
117
+ return null;
118
+ // Serialise concurrent callers so the LSP sees one request at a time.
119
+ const task = this.pendingQueue.then(() => this.runRequest(relPath, content));
120
+ this.pendingQueue = task.catch(() => undefined);
121
+ return task;
122
+ }
123
+ async runRequest(relPath, content) {
124
+ if (!this.connection || this._state !== 'ready')
125
+ return null;
126
+ const uri = pathToFileURL(resolve(this.projectRoot, relPath)).href;
127
+ try {
128
+ this.connection.sendNotification('textDocument/didOpen', {
129
+ textDocument: { uri, languageId: 'python', version: 1, text: content },
130
+ });
131
+ let timedOut = false;
132
+ let response;
133
+ try {
134
+ response = (await Promise.race([
135
+ this.connection.sendRequest('textDocument/documentSymbol', {
136
+ textDocument: { uri },
137
+ }),
138
+ new Promise((_, reject) => setTimeout(() => {
139
+ timedOut = true;
140
+ reject(new Error('request timeout'));
141
+ }, this.timeoutMs)),
142
+ ]));
143
+ }
144
+ catch (err) {
145
+ if (timedOut) {
146
+ this.consecutiveTimeouts++;
147
+ if (this.consecutiveTimeouts >= 3) {
148
+ process.stderr.write(`[pindex] LSP: 3 consecutive timeouts, treating as crash\n`);
149
+ this.simulateCrash();
150
+ }
151
+ return null;
152
+ }
153
+ throw err;
154
+ }
155
+ this.connection.sendNotification('textDocument/didClose', {
156
+ textDocument: { uri },
157
+ });
158
+ if (!response || !Array.isArray(response)) {
159
+ return { symbols: [], imports: extractImportsFromContent(content) };
160
+ }
161
+ this.consecutiveTimeouts = 0;
162
+ return {
163
+ symbols: mapDocumentSymbols(response),
164
+ imports: extractImportsFromContent(content),
165
+ };
166
+ }
167
+ catch (err) {
168
+ process.stderr.write(`[pindex] LSP: documentSymbol failed for ${relPath}: ${String(err)}\n`);
169
+ return null;
170
+ }
171
+ }
172
+ /** Manually triggers the same restart-or-fail path the exit handler uses.
173
+ * Used when the subprocess is unresponsive (repeated request timeouts). */
174
+ simulateCrash() {
175
+ if (this._state !== 'ready')
176
+ return;
177
+ this._state = 'idle';
178
+ try {
179
+ this.proc?.kill('SIGKILL');
180
+ }
181
+ catch { /* process already dead */ }
182
+ this.proc = null;
183
+ this.connection?.dispose();
184
+ this.connection = null;
185
+ if (!this.restartAttempted) {
186
+ this.restartAttempted = true;
187
+ this.start().catch(() => { });
188
+ }
189
+ else {
190
+ this._state = 'failed';
191
+ }
192
+ }
193
+ async close() {
194
+ this._state = 'closed';
195
+ if (this.connection) {
196
+ const conn = this.connection;
197
+ this.connection = null;
198
+ try {
199
+ await Promise.race([
200
+ conn.sendRequest('shutdown', null),
201
+ new Promise((_, reject) => setTimeout(() => reject(new Error('shutdown timeout')), 1000)),
202
+ ]);
203
+ conn.sendNotification('exit', null);
204
+ }
205
+ catch { /* subprocess may already be dead */ }
206
+ conn.dispose();
207
+ }
208
+ if (this.proc) {
209
+ try {
210
+ this.proc.kill('SIGTERM');
211
+ }
212
+ catch { /* ignore */ }
213
+ this.proc = null;
214
+ }
215
+ }
216
+ }
217
+ /** Resolves the pyright-langserver binary path by checking node_modules/.bin.
218
+ * Returns null if not found; PATH-based discovery is intentionally not
219
+ * implemented (would require spawn + stderr capture to detect failure, which
220
+ * is a larger change and not worth the complexity for the optionalDependency
221
+ * install path where node_modules is the canonical location). */
222
+ function resolvePyrightLangserver() {
223
+ const local = join(process.cwd(), 'node_modules', '.bin', 'pyright-langserver');
224
+ if (existsSync(local))
225
+ return local;
226
+ return null;
227
+ }
228
+ /** Reuses the existing Python regex import extractor from parseFile(). Pyright's
229
+ * documentSymbol does not expose import statements; the regex is reliable
230
+ * enough for `import X` / `from Y import Z`. */
231
+ function extractImportsFromContent(content) {
232
+ return parseFile('pseudo.py', content).imports;
233
+ }
234
+ //# sourceMappingURL=lsp-python.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lsp-python.js","sourceRoot":"","sources":["../../src/indexer/lsp-python.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pindex",
3
- "version": "1.3.0",
3
+ "version": "1.4.0",
4
4
  "description": "MCP server providing structural codebase indexing for token-efficient AI coding assistants on medium-to-large projects",
5
5
  "type": "module",
6
6
  "bin": {
@@ -46,9 +46,14 @@
46
46
  "tree-sitter": "^0.21.0",
47
47
  "tree-sitter-typescript": "^0.21.0",
48
48
  "uuid": "^9.0.0",
49
+ "vscode-jsonrpc": "^8.2.1",
50
+ "vscode-languageserver-protocol": "^3.17.5",
49
51
  "ws": "^8.16.0",
50
52
  "zod": "^4.3.6"
51
53
  },
54
+ "optionalDependencies": {
55
+ "pyright": "^1.1.380"
56
+ },
52
57
  "devDependencies": {
53
58
  "@types/better-sqlite3": "^7.6.11",
54
59
  "@types/express": "^4.17.0",