From f36ff72d8d782b867a841924322b4dc725f6090a Mon Sep 17 00:00:00 2001 From: alaa Date: Sat, 2 May 2026 22:30:16 +0100 Subject: [PATCH] fix: tree-sitter callback API for Python files >32 KB --- Dockerfile.cli | 1 + .../src/core/ingestion/languages/python/captures.ts | 12 +++++++++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/Dockerfile.cli b/Dockerfile.cli index c45292e06..3ad7b9916 100644 --- a/Dockerfile.cli +++ b/Dockerfile.cli @@ -44,6 +44,7 @@ COPY --from=builder --chown=node:node /app/gitnexus/dist ./gitnexus/dist COPY --from=builder --chown=node:node /app/gitnexus/node_modules ./gitnexus/node_modules COPY --from=builder --chown=node:node /app/gitnexus/package.json ./gitnexus/package.json COPY --from=builder --chown=node:node /app/gitnexus/vendor ./gitnexus/vendor +COPY --from=builder --chown=node:node /app/gitnexus/scripts ./gitnexus/scripts USER node diff --git a/gitnexus/src/core/ingestion/languages/python/captures.ts b/gitnexus/src/core/ingestion/languages/python/captures.ts index be891b5cc..7c3ca7c71 100644 --- a/gitnexus/src/core/ingestion/languages/python/captures.ts +++ b/gitnexus/src/core/ingestion/languages/python/captures.ts @@ -23,7 +23,8 @@ import { getPythonParser, getPythonScopeQuery } from './query.js'; import { synthesizeReceiverTypeBinding } from './receiver-binding.js'; import { computePythonArityMetadata } from './arity-metadata.js'; import { recordCacheHit, recordCacheMiss } from './cache-stats.js'; -import { getTreeSitterBufferSize } from '../../constants.js'; +import { Buffer } from 'node:buffer'; +import { getTreeSitterContentByteLength } from '../../constants.js'; import { pythonFunctionDefinitionLabel } from './simple-hooks.js'; export function emitPythonScopeCaptures( @@ -39,8 +40,13 @@ export function emitPythonScopeCaptures( let tree = cachedTree as ReturnType['parse']> | undefined; if (tree === undefined) { try { - tree = getPythonParser().parse(sourceText, undefined, { - bufferSize: getTreeSitterBufferSize(sourceText), + // Callback form avoids the NAPI bufferSize bug in tree-sitter 0.21.x + // that triggers "Invalid argument" on files larger than ~32 KB. + const encoded = Buffer.from(sourceText, 'utf8'); + const byteLength = getTreeSitterContentByteLength(sourceText); + tree = getPythonParser().parse((startIndex: number) => { + if (startIndex >= byteLength) return ''; + return encoded.slice(startIndex, startIndex + 4096).toString('utf8'); }); } catch (err) { throw scopeExtractionError('parse', _filePath, err);