can1357/oh-my-pi · error · Error
${TRANSFORMERS_PACKAGE} is missing from package.json optiona
Error message
${TRANSFORMERS_PACKAGE} is missing from package.json optionalDependencies What it means
resolveTransformersVersionSpec reads the coding-agent package.json to find @huggingface/transformers in optionalDependencies (falling back to dependencies). If the package is declared in neither map, the version spec cannot be determined for the side runtime install, so it throws. This is essentially an internal packaging-consistency assertion.
Source
Thrown at packages/coding-agent/src/subprocess/worker-runtime.ts:276
* absolute entrypoint of `packageName` to `require`.
*/
async function prepareCompiledRuntime(runtimeDir: string, packageName: string): Promise<string> {
const nodeModules = await installSharpStubResolver(runtimeDir);
const entry = resolveRuntimeModule(nodeModules, packageName);
if (!entry) throw new Error(`Unable to resolve ${packageName} in compiled runtime at ${nodeModules}`);
return entry;
}
// ── Transformers version resolution ─────────────────────────────────
function resolveTransformersVersionSpec(): string {
const manifest = packageJson as {
optionalDependencies?: Record<string, string>;
dependencies?: Record<string, string>;
};
const versionSpec =
manifest.optionalDependencies?.[TRANSFORMERS_PACKAGE] ?? manifest.dependencies?.[TRANSFORMERS_PACKAGE];
if (!versionSpec) throw new Error(`${TRANSFORMERS_PACKAGE} is missing from package.json optionalDependencies`);
if (!versionSpec.startsWith("catalog:")) return versionSpec;
if (COMPILED_TRANSFORMERS_VERSION) return COMPILED_TRANSFORMERS_VERSION;
const installed = sourceRequire(`${TRANSFORMERS_PACKAGE}/package.json`) as { version: string };
return installed.version;
}
let cachedTransformersVersionSpec: string | undefined;
/**
* Lazily resolve (and memoize) the transformers version spec. In the `catalog:`
* case {@link resolveTransformersVersionSpec} `require`s the installed
* `@huggingface/transformers/package.json`, so it is only ever touched on the
* compiled-binary runtime-install path — loading a worker (smoke-test ping,
* online path) never triggers the transformers resolve/install dance.
*/
export function getTransformersVersionSpec(): string {
cachedTransformersVersionSpec ??= resolveTransformersVersionSpec();
return cachedTransformersVersionSpec;View on GitHub (pinned to 9690622007)
Solutions
- Restore @huggingface/transformers to optionalDependencies (or dependencies) in the package.json of the running coding-agent build.
- If running a fork/patched build, re-apply the upstream package.json entry for the transformers package.
- Reinstall the package from a pristine release so its shipped package.json is intact.
Example fix
// before (package.json)
"optionalDependencies": {}
// after
"optionalDependencies": { "@huggingface/transformers": "catalog:" } Defensive patterns
Strategy: validation
Validate before calling
const manifest = JSON.parse(await Bun.file(new URL("../package.json", import.meta.url)).text());
const spec = manifest.optionalDependencies?.["@huggingface/transformers"] ?? manifest.dependencies?.["@huggingface/transformers"];
if (!spec) throw new Error("transformers dependency missing; restore optionalDependencies entry before launching"); Try / catch
try {
return resolveTransformersVersionSpec();
} catch (err) {
if (String(err.message).includes("missing from package.json")) {
logger.error("Packaging broken: transformers dep was removed from package.json", {});
}
throw err;
} Prevention
- Do not let dependency-pruning tools remove optionalDependencies entries used at runtime.
- Add a CI check that package.json retains @huggingface/transformers.
- Avoid hand-editing package.json in forks without re-running the full test suite.
When it happens
Trigger: getTransformersVersionSpec -> resolveTransformersVersionSpec when manifest.optionalDependencies['@huggingface/transformers'] and manifest.dependencies[...] are both undefined — i.e. a modified/patched package.json or a fork that removed the optional dependency.
Common situations: Downstream forks or automated dependency pruning tools removing the 'optional' transformers dependency, a bad merge dropping the entry, or tooling rewriting package.json without preserving optionalDependencies.
Related errors
- packages/coding-agent/package.json has no valid version
- Failed to load tree-sitter language: {err}
- sso-token-missing
- sso-token-expired
- Destination option ${key} must be a string
AI-assisted analysis of can1357/oh-my-pi@9690622007 (2026-08-31).
Data as JSON: /api/errors/9c470bba55e78d3d.
Report an issue: GitHub.