{"record":{"id":"c47ce9a499a594ba","repo":"can1357/oh-my-pi","slug":"cannot-find-package-fastembed-fastembed-spec-r","errorCode":null,"errorMessage":"Cannot find package fastembed@${FASTEMBED_SPEC}; resolved ${String(manifest.version)}","messagePattern":"Cannot find package fastembed@(.+?); resolved (.+?)","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/mnemopi/src/core/fastembed-runtime.ts","lineNumber":126,"sourceCode":"\tif (!alreadyPresent) env.PATH = currentPath ? `${dllDir}${path.delimiter}${currentPath}` : dllDir;\n\treturn { ortEntry, ortPackageDir, dllDir };\n}\n\nexport function loadFastembed(): Promise<FastembedModule> {\n\tfastembedLoad ??= loadFastembedOnce().catch(error => {\n\t\tfastembedLoad = null;\n\t\tthrow error;\n\t});\n\treturn fastembedLoad;\n}\n\nasync function loadFastembedOnce(): Promise<FastembedModule> {\n\ttry {\n\t\tconst requireDirect = createRequire(import.meta.url);\n\t\tconst manifestPath = requireDirect.resolve(\"fastembed/package.json\");\n\t\tconst manifest: { version?: unknown } = requireDirect(manifestPath);\n\t\tif (manifest.version !== FASTEMBED_SPEC) {\n\t\t\tthrow new Error(`Cannot find package fastembed@${FASTEMBED_SPEC}; resolved ${String(manifest.version)}`);\n\t\t}\n\t\treturn await loadResolvedFastembed(requireDirect.resolve(\"fastembed\"), path.dirname(manifestPath));\n\t} catch (error) {\n\t\tif (!isRecoverableFastembedLoadError(error)) throw error;\n\t\tlogger.debug(\"mnemopi: fastembed not loadable, using on-demand runtime install\", {\n\t\t\terror: String(error),\n\t\t});\n\t\treturn loadFromRuntimeInstall();\n\t}\n}\n\nasync function loadResolvedFastembed(entry: string, fastembedPackageDir: string): Promise<FastembedModule> {\n\tconst requireFastembed = createRequire(entry);\n\tif (process.platform === \"win32\") {\n\t\tconst { ortEntry } = await prepareWindowsFastembedRuntime({ fastembedEntry: entry, fastembedPackageDir });\n\t\trequireFastembed(ortEntry);\n\t}\n\tconst loaded: FastembedModule = requireFastembed(entry);","sourceCodeStart":108,"sourceCodeEnd":144,"githubUrl":"https://github.com/can1357/oh-my-pi/blob/969062200754ea02cfac922e5ebb8c608c079e15/packages/mnemopi/src/core/fastembed-runtime.ts#L108-L144","documentation":"loadFastembedOnce resolves the locally installed fastembed package and requires that its installed version exactly equals the pinned spec from mnemopi's peerDependencies (FASTEMBED_SPEC). If the resolved package.json reports any other version, it throws this error; only recoverable resolve/load errors fall back to the on-demand runtime install — an explicit version mismatch is treated as fatal.","triggerScenarios":"A fastembed package is resolvable from mnemopi (requireDirect.resolve('fastembed/package.json') succeeds) but manifest.version !== FASTEMBED_SPEC — i.e. a hoisted or workspace fastembed at a different version than the exact peer pin, or a stale lockfile after mnemopi bumped its fastembed pin.","commonSituations":"Upgrading mnemopi (new FASTEMBED_SPEC) while the app keeps an older hoisted fastembed; a monorepo where another package's fastembed version wins resolution; manually installing fastembed@latest instead of the exact pinned version.","solutions":["Install the exact pinned version: bun add fastembed@<FASTEMBED_SPEC from mnemopi peerDependencies>","Remove any hoisted/stray fastembed copy (e.g. rm -rf node_modules/fastembed; reinstall) so the pinned one resolves","Update the lockfile (bun install) after upgrading mnemopi so the peer pin is satisfied","Check the resolved version with node -p \"require('fastembed/package.json').version\" and align it with the pin"],"exampleFix":"// before\n\"dependencies\": { \"fastembed\": \"^1.0.0\" }\n// after (match mnemopi's exact peer pin)\n\"dependencies\": { \"fastembed\": \"1.0.0\" }","handlingStrategy":"validation","validationCode":"import { createRequire } from \"node:module\";\nimport pkg from \"@oh-my-pi/mnemopi/package.json\" with { type: \"json\" };\nconst requireDirect = createRequire(import.meta.url);\ntry {\n  const v = requireDirect(\"fastembed/package.json\").version;\n  if (v !== pkg.peerDependencies.fastembed) {\n    throw new Error(`fastembed ${v} installed; mnemopi pins ${pkg.peerDependencies.fastembed}`);\n  }\n} catch (e) { /* reinstall before starting the app */ }","typeGuard":"function hasMatchingFastembed(v: unknown, spec: string): v is string {\n  return typeof v === \"string\" && v === spec;\n}","tryCatchPattern":"try {\n  await loadFastembed();\n} catch (err) {\n  if (String(err).includes(\"Cannot find package fastembed@\")) {\n    logger.error(\"fastembed version mismatch; reinstall with the exact pinned version\");\n  } else throw err;\n}","preventionTips":["Pin fastembed to the exact version in mnemopi's peerDependencies, never a range","Run bun install after every mnemopi upgrade to refresh the lockfile","Audit for duplicate hoisted fastembed copies in monorepo node_modules","Check the resolved fastembed version in CI before deployment"],"tags":["version-mismatch","dependency-resolution","fastembed"],"backgroundTag":"peer-dependency-version-mismatch","analyzedSha":"969062200754ea02cfac922e5ebb8c608c079e15","analyzedAt":"2026-08-31T10:29:35.737Z","schemaVersion":2},"datasetVersion":"2026-08-31T14:17:45.589Z"}