From c87c5487aab9116c6c23a43c9790ca4f300917d8 Mon Sep 17 00:00:00 2001 From: Colby McHenry Date: Mon, 19 Jan 2026 15:11:40 -0600 Subject: [PATCH] Fix ESM import error for @xenova/transformers Change static import to dynamic import() for @xenova/transformers which is an ESM-only package. This fixes ERR_REQUIRE_ESM when running via npx in CommonJS environments. Co-Authored-By: Claude Opus 4.5 --- package.json | 2 +- src/vectors/embedder.ts | 17 +++++++++++++++-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 2756e1a..27eeb70 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@colbymchenry/codegraph", - "version": "0.2.1", + "version": "0.2.2", "description": "A local-first code intelligence system that builds a semantic knowledge graph from any codebase", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/src/vectors/embedder.ts b/src/vectors/embedder.ts index 689cbb2..06e7703 100644 --- a/src/vectors/embedder.ts +++ b/src/vectors/embedder.ts @@ -5,12 +5,22 @@ * Uses ONNX runtime under the hood for fast local inference. */ -import { pipeline, env } from '@xenova/transformers'; import * as path from 'path'; import * as fs from 'fs'; +// Dynamic import for @xenova/transformers (ESM-only package) +// We use dynamic import to support CommonJS builds +let transformersModule: typeof import('@xenova/transformers') | null = null; + +async function getTransformers() { + if (!transformersModule) { + transformersModule = await import('@xenova/transformers'); + } + return transformersModule; +} + // Type for the feature extraction pipeline -type FeatureExtractionPipeline = Awaited>>; +type FeatureExtractionPipeline = any; /** * Default model for embeddings @@ -93,6 +103,9 @@ export class TextEmbedder { return; } + // Load transformers.js dynamically (ESM-only package) + const { pipeline, env } = await getTransformers(); + // Configure transformers.js to use local cache env.cacheDir = this.cacheDir;