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
- Add sherpa-onnx-node back to optionalDependencies (or dependencies) in packages/coding-agent/package.json with a valid semver range.
- Run the package's install step so the manifest and lockfile are consistent.
- 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
- Keep sherpa-onnx-node declared in optionalDependencies when shipping STT.
- Run CI checks that STT code paths match declared dependencies.
- After dependency renames, grep for the old package name in code that reads package.json.
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
- No model configured
- Azure OpenAI base URL is required. Set AZURE_OPENAI_BASE_URL
- Cannot register custom API "${api}": built-in API names are
- Unable to read OMP_AUTH_BROKER_ACCOUNT_POOL_FILE at ${filePa
- OMP_AUTH_BROKER_ACCOUNT_POOL_FILE must contain a JSON object
AI-assisted analysis of can1357/oh-my-pi@9690622007 (2026-08-31).
Data as JSON: /api/errors/c4fe2b1c1a837db4.
Report an issue: GitHub.