can1357/oh-my-pi · error · Error

${SHERPA_PACKAGE} is missing from package.json optionalDepen

Error message

${SHERPA_PACKAGE} is missing from package.json optionalDependencies

What it means

The STT worker reads the pinned version of the native sherpa-onnx-node addon from the package.json manifest (optionalDependencies, falling back to dependencies) to know which runtime to install into the compiled-binary side directory. If the manifest does not declare sherpa-onnx-node at all, the version spec cannot be resolved and the worker throws.

Source

Thrown at packages/coding-agent/src/stt/asr-worker.ts:121

function runOnModel<T>(work: () => Promise<T>): Promise<T> {
	const run = modelLock.then(work, work);
	modelLock = run.then(
		() => undefined,
		() => undefined,
	);
	return run;
}
const transformersRuntime = new MemoizedRuntime<TransformersRuntime>();
const sherpaRuntime = new MemoizedRuntime<SherpaRuntime>();

let cachedSherpaVersionSpec: string | undefined;
function resolveSherpaVersionSpec(): string {
	const manifest = packageJson as {
		optionalDependencies?: Record<string, string>;
		dependencies?: Record<string, string>;
	};
	const versionSpec = manifest.optionalDependencies?.[SHERPA_PACKAGE] ?? manifest.dependencies?.[SHERPA_PACKAGE];
	if (!versionSpec) throw new Error(`${SHERPA_PACKAGE} is missing from package.json optionalDependencies`);
	return versionSpec;
}

function getSherpaVersionSpec(): string {
	cachedSherpaVersionSpec ??= resolveSherpaVersionSpec();
	return cachedSherpaVersionSpec;
}

function getSttRuntimeDir(): string {
	const key = getTransformersVersionSpec().replace(/[^A-Za-z0-9._-]/g, "_");
	return path.join(path.dirname(getTinyModelsCacheDir()), "stt-runtime", `transformers-${key}`);
}

function getSherpaRuntimeDir(): string {
	const key = getSherpaVersionSpec().replace(/[^A-Za-z0-9._-]/g, "_");
	return path.join(path.dirname(getTinyModelsCacheDir()), "stt-runtime", `sherpa-${key}`);
}

View on GitHub (pinned to 9690622007)

Solutions

  1. Add sherpa-onnx-node back to optionalDependencies (or dependencies) in packages/coding-agent/package.json with a valid semver range.
  2. Run the package's install step so the manifest and lockfile are consistent.
  3. If sherpa STT is not needed, avoid selecting a sherpa-engine model.

Example fix

// before (package.json)
"optionalDependencies": {}
// after (package.json)
"optionalDependencies": { "sherpa-onnx-node": "^1.x" }
Defensive patterns

Strategy: validation

Validate before calling

const pkg = "sherpa-onnx-node";
const spec = packageJson.optionalDependencies?.[pkg] ?? packageJson.dependencies?.[pkg];
if (!spec) throw new Error(`${pkg} must be declared before using sherpa STT`);

Try / catch

try { const v = getSherpaVersionSpec(); } catch (err) { // manifest missing dep — disable sherpa path or fail fast with install instructions }

Prevention

When it happens

Trigger: Loading a sherpa-engine STT model in a compiled binary when resolveSherpaVersionSpec finds no sherpa-onnx-node entry in either optionalDependencies or dependencies of packages/coding-agent/package.json.

Common situations: A dependency was removed or renamed in package.json while STT code still references it, a partial patch/monorepo surgery dropped optionalDependencies, or building from a modified checkout.

Related errors


AI-assisted analysis of can1357/oh-my-pi@9690622007 (2026-08-31). Data as JSON: /api/errors/c4fe2b1c1a837db4. Report an issue: GitHub.