{"record":{"id":"c4fe2b1c1a837db4","repo":"can1357/oh-my-pi","slug":"sherpa-package-is-missing-from-package-json-opt","errorCode":null,"errorMessage":"${SHERPA_PACKAGE} is missing from package.json optionalDependencies","messagePattern":"(.+?) is missing from package\\.json optionalDependencies","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/coding-agent/src/stt/asr-worker.ts","lineNumber":121,"sourceCode":"function runOnModel<T>(work: () => Promise<T>): Promise<T> {\n\tconst run = modelLock.then(work, work);\n\tmodelLock = run.then(\n\t\t() => undefined,\n\t\t() => undefined,\n\t);\n\treturn run;\n}\nconst transformersRuntime = new MemoizedRuntime<TransformersRuntime>();\nconst sherpaRuntime = new MemoizedRuntime<SherpaRuntime>();\n\nlet cachedSherpaVersionSpec: string | undefined;\nfunction resolveSherpaVersionSpec(): string {\n\tconst manifest = packageJson as {\n\t\toptionalDependencies?: Record<string, string>;\n\t\tdependencies?: Record<string, string>;\n\t};\n\tconst versionSpec = manifest.optionalDependencies?.[SHERPA_PACKAGE] ?? manifest.dependencies?.[SHERPA_PACKAGE];\n\tif (!versionSpec) throw new Error(`${SHERPA_PACKAGE} is missing from package.json optionalDependencies`);\n\treturn versionSpec;\n}\n\nfunction getSherpaVersionSpec(): string {\n\tcachedSherpaVersionSpec ??= resolveSherpaVersionSpec();\n\treturn cachedSherpaVersionSpec;\n}\n\nfunction getSttRuntimeDir(): string {\n\tconst key = getTransformersVersionSpec().replace(/[^A-Za-z0-9._-]/g, \"_\");\n\treturn path.join(path.dirname(getTinyModelsCacheDir()), \"stt-runtime\", `transformers-${key}`);\n}\n\nfunction getSherpaRuntimeDir(): string {\n\tconst key = getSherpaVersionSpec().replace(/[^A-Za-z0-9._-]/g, \"_\");\n\treturn path.join(path.dirname(getTinyModelsCacheDir()), \"stt-runtime\", `sherpa-${key}`);\n}\n","sourceCodeStart":103,"sourceCodeEnd":139,"githubUrl":"https://github.com/can1357/oh-my-pi/blob/969062200754ea02cfac922e5ebb8c608c079e15/packages/coding-agent/src/stt/asr-worker.ts#L103-L139","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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."],"exampleFix":"// before (package.json)\n\"optionalDependencies\": {}\n// after (package.json)\n\"optionalDependencies\": { \"sherpa-onnx-node\": \"^1.x\" }","handlingStrategy":"validation","validationCode":"const pkg = \"sherpa-onnx-node\";\nconst spec = packageJson.optionalDependencies?.[pkg] ?? packageJson.dependencies?.[pkg];\nif (!spec) throw new Error(`${pkg} must be declared before using sherpa STT`);","typeGuard":null,"tryCatchPattern":"try { const v = getSherpaVersionSpec(); } catch (err) { // manifest missing dep — disable sherpa path or fail fast with install instructions }","preventionTips":["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."],"tags":["configuration","packaging","dependency"],"backgroundTag":"missing-package-json-dependency","analyzedSha":"969062200754ea02cfac922e5ebb8c608c079e15","analyzedAt":"2026-08-31T10:29:35.737Z","schemaVersion":2},"datasetVersion":"2026-08-31T14:17:45.589Z"}