From 7554f2e9e92b4d074ff88e02f26bb45d8a438517 Mon Sep 17 00:00:00 2001 From: Danny Avila Date: Sun, 7 Jun 2026 08:03:28 -0400 Subject: [PATCH] =?UTF-8?q?=F0=9F=A9=B9=20fix:=20Bump=20GitNexus=20to=201.?= =?UTF-8?q?6.5=20and=20Fail-Soft=20the=20PR=20Index=20Job=20(#13569)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 🩹 fix: Bump GitNexus to 1.6.5 and Fail-Soft the PR Index Job The GitNexus Index workflow began failing on most PRs with "Analysis failed: Maximum call stack size exceeded". Root cause is in the pinned gitnexus@1.5.3 CLI: pipeline.js does `deferredWorkerCalls.push(...chunkWorkerData.calls)`, and once a chunk yields more extracted calls than V8's argument-count limit (~125k on this repo) the spread-push throws a RangeError. It is deterministic on repo size, not flaky — LibreChat simply grew past the threshold, so it fails "more often" as more branches cross it. Stack-size flags don't help; it's an arg-count limit, not stack depth. gitnexus@1.6.5 refactored that code path (the .calls spread-pushes are gone) and indexes this repo cleanly. Bump the indexer, the deploy image tag/build-arg, and the Dockerfile default in lockstep (an index written by 1.6.5 must be served by a 1.6.5 server), and move the co-pinned @ladybugdb/core to 0.16.1 to match. Also make the index job fail-soft on pull_request events so a future tool-internal crash degrades gracefully instead of red-X'ing PRs. Push, dispatch, and /gitnexus command runs still fail loudly, keeping the deploy-gating and completion-comment logic correct. * 🐳 fix: Unbreak the GitNexus Deploy Image for 1.6.5 Addresses two issues in the deploy image surfaced after the 1.6.5 bump: - The image build's lbug-adapter patch grepped dist/mcp/core/lbug-adapter.js for "LOAD EXTENSION fts", but in 1.6.5 that file is a shim re-export and the FTS load moved to dist/core/lbug/lbug-adapter.js. The grep would fail the build on the next image rebuild. The patch is also obsolete: 1.6.5 loads the vector extension itself via loadVectorExtension. Removed the patch step. - The image installed only gitnexus, letting @ladybugdb/core resolve freely via gitnexus's ^0.16.1 range while the index workflow pins 0.16.1 exactly. Pin the native DB in the image too (nested under gitnexus so install-extensions.js keeps resolving it), restoring the intended indexer/server lockstep. --- .do/gitnexus/Dockerfile | 19 ++++++++++--------- .github/workflows/gitnexus-deploy.yml | 2 +- .github/workflows/gitnexus-index.yml | 7 +++++-- 3 files changed, 16 insertions(+), 12 deletions(-) diff --git a/.do/gitnexus/Dockerfile b/.do/gitnexus/Dockerfile index 58a79e087e..ede0920593 100644 --- a/.do/gitnexus/Dockerfile +++ b/.do/gitnexus/Dockerfile @@ -7,13 +7,18 @@ FROM node:24.16.0-slim -ARG GITNEXUS_VERSION=1.5.3 +ARG GITNEXUS_VERSION=1.6.5 +# Pin the native DB to match the index workflow; gitnexus's ^0.16.1 range +# would otherwise let the served image drift from the CI-produced index. +ARG LADYBUG_VERSION=0.16.1 # 1. Build native addons with Bookworm toolchain, then remove build tools. # curl stays for the docker healthcheck; Caddy lives in its own container. +# LadybugDB is pinned nested under gitnexus so step 3's require() resolves it. RUN apt-get update \ && apt-get install -y --no-install-recommends python3 make g++ curl \ && npm install -g gitnexus@${GITNEXUS_VERSION} \ + && npm install --no-save --prefix /usr/local/lib/node_modules/gitnexus "@ladybugdb/core@${LADYBUG_VERSION}" \ && apt-get purge -y --auto-remove python3 make g++ \ && rm -rf /var/lib/apt/lists/* /root/.npm @@ -26,17 +31,13 @@ RUN echo "deb http://deb.debian.org/debian trixie main" > /etc/apt/sources.list. && rm -rf /var/lib/apt/lists/* # 3. Pre-install LadybugDB FTS + vector extensions so ~/.kuzu/extension/ -# is baked into the image. Workaround for upstream GitNexus 1.5.3 bug. +# is baked into the image. gitnexus serve loads extensions with a +# load-only policy and never installs them at runtime, so the cache +# must already exist. (GitNexus 1.6.5 loads the vector extension itself +# via loadVectorExtension — no adapter patch needed.) COPY install-extensions.js /tmp/install-extensions.js RUN node /tmp/install-extensions.js && rm -rf /tmp/install-extensions.js /tmp/lbug-ext-install -# 4. Patch lbug-adapter.js to also LOAD EXTENSION vector after FTS. -RUN LBUG_ADAPTER=/usr/local/lib/node_modules/gitnexus/dist/mcp/core/lbug-adapter.js \ - && grep -q "LOAD EXTENSION fts" "$LBUG_ADAPTER" \ - && sed -i "s|await available\[0\]\.query('LOAD EXTENSION fts');|await available[0].query('LOAD EXTENSION fts'); try { await available[0].query('LOAD EXTENSION vector'); } catch (e) { /* vector extension may not be installed */ }|g" "$LBUG_ADAPTER" \ - && grep -c "LOAD EXTENSION vector" "$LBUG_ADAPTER" \ - && echo "lbug-adapter.js patched to load vector extension" - COPY entrypoint.sh /entrypoint.sh RUN chmod +x /entrypoint.sh diff --git a/.github/workflows/gitnexus-deploy.yml b/.github/workflows/gitnexus-deploy.yml index 203138c706..f4cd38bb2b 100644 --- a/.github/workflows/gitnexus-deploy.yml +++ b/.github/workflows/gitnexus-deploy.yml @@ -84,7 +84,7 @@ concurrency: cancel-in-progress: false env: - GITNEXUS_VERSION: '1.5.3' + GITNEXUS_VERSION: '1.6.5' IMAGE_NAME: ghcr.io/${{ github.repository_owner }}/librechat-gitnexus jobs: diff --git a/.github/workflows/gitnexus-index.yml b/.github/workflows/gitnexus-index.yml index 21c3f69321..26b0a06098 100644 --- a/.github/workflows/gitnexus-index.yml +++ b/.github/workflows/gitnexus-index.yml @@ -43,7 +43,7 @@ concurrency: cancel-in-progress: true env: - GITNEXUS_VERSION: '1.5.3' + GITNEXUS_VERSION: '1.6.5' jobs: index: @@ -64,6 +64,9 @@ jobs: github.event.pull_request.user.login == 'danny-avila' runs-on: ubuntu-latest timeout-minutes: 25 + # Best-effort index: a tool-internal crash must not block PRs. Fail soft on + # PR events; push/dispatch runs still fail loudly so regressions stay visible. + continue-on-error: ${{ github.event_name == 'pull_request' }} steps: - name: Validate dispatch inputs if: github.event_name == 'workflow_dispatch' @@ -162,7 +165,7 @@ jobs: --no-save \ --no-package-lock \ "gitnexus@${{ env.GITNEXUS_VERSION }}" \ - "@ladybugdb/core@0.15.2" + "@ladybugdb/core@0.16.1" test -x "$RUNNER_TEMP/gitnexus-cli/node_modules/.bin/gitnexus" - name: Checkout repository