# pnpm workspace + supply-chain policy. # See .agents/skills/npm-security-best-practices/ for the full rationale. # Workspace members: server + plugin under apps/, libraries under packages/. packages: - 'apps/*' - 'apps/plugin/mcp-bridge' - 'packages/*' # Allowlist of dependencies permitted to run lifecycle scripts. # Everything else is blocked via .npmrc::ignore-scripts=true. # Adding an entry here is a security-relevant decision; review carefully. # pnpm 11+ uses an explicit per-package boolean map (replaces the old # onlyBuiltDependencies list from pnpm 10). allowBuilds: husky: true # registers git hooks via prepare better-sqlite3: true # native binding postinstall fetches prebuilt sqlite-vec: true # native binding postinstall fetches prebuilt esbuild: false # transitive of vitest; explicitly DENY (no native binary needed at install time) onnxruntime-node: true # native binding postinstall validates/places prebuilt (in-process embedder) sharp: false # transitive of @huggingface/transformers; vision-only, never loaded by text pipelines — DENY protobufjs: false # transitive of onnxruntime; postinstall only writes version aliases — DENY unrs-resolver: false # transitive of eslint-plugin-import-x; import-x/order resolves no imports — DENY # Refuse transitive deps fetched from git URLs, tarball URLs, or any non-registry source. # Practice #2 (lirantal/npm-security-best-practices). Requires pnpm ≥ 10.26. blockExoticSubdeps: true # Install cooldown: refuse dep versions younger than 3 days (in minutes). # Practice #3 — gives the community time to detect compromised publishes. # Escape hatch for genuine security patches: lower this value temporarily # (e.g., to 0) and re-tighten in a follow-up PR, OR add the offending package # to minimumReleaseAgeExclude below. minimumReleaseAge: 4320