Files
pig/package.json
T
karti a6167629cc
CI / verify (push) Successful in 3m23s
Move from npm to pnpm across the workspace, CI and the image
The monorepo was on npm workspaces. pnpm gives it a content-addressed store
shared between the eight packages, a lockfile that records the whole graph
rather than a flattened view of it, and — the reason this mattered in practice —
`workspace:*`, which makes an internal dependency unambiguous instead of a
version range that npm may satisfy from the registry.

Mechanics:

  - `packageManager: pnpm@11.21.0` pins the version; corepack installs it in CI
    and in the image, so all three environments resolve identically.
  - The npm `workspaces` array is replaced by `pnpm-workspace.yaml`. pnpm
    ignores the former, and keeping both would leave two sources of truth.
  - All six internal dependencies moved to `workspace:*`.
  - Root scripts use `pnpm -r --if-present` and `pnpm -F <pkg>`.

Two findings worth recording, both from running it rather than reading it:

`tsx` was a devDependency, but the server runs TypeScript directly in
production — the container's command is `pnpm exec tsx apps/api/src/server.ts`.
Under npm this was concealed by the runtime stage re-installing tsx by hand
after pruning dev dependencies. Under `pnpm install --prod` that sleight of
hand stops working and the image simply fails to start. tsx is now declared in
`dependencies`, which is what it has always actually been.

The first image build failed with ERR_PNPM_ABORTED_REMOVE_MODULES_DIR_NO_TTY.
That is not a pnpm bug: it had decided the modules directory was stale and
wanted confirmation before deleting it, which a non-interactive build cannot
give. The trigger was the host's `node_modules` reaching the build context —
there was no `.dockerignore` at all. pnpm's tree is symlinks into a
content-addressed store, so copying it into an image produces dangling links
and a directory pnpm rightly considers corrupt. Fixed by adding
`.dockerignore` and setting `CI=true`, which is required in any non-interactive
pnpm build.

`esbuild` is denied install scripts via `allowBuilds`. Its platform binary
arrives through the optional dependency `@esbuild/linux-x64` and the postinstall
only verifies it; confirmed by running the binary directly, which reports
0.25.12.

Verified under pnpm: typecheck clean, 150 tests / 0 failures, e2e passes, web
builds. The image was built and booted against a real Postgres — health ok,
`/api/dashboard` 401 with an issuer configured, `/` and `/capacity` serve the
SPA, `/og.png` serves as image/png, and the migrator runs from the pruned
runtime stage.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-13 04:15:54 -07:00

38 lines
1.1 KiB
JSON

{
"name": "pig",
"version": "0.1.0",
"private": true,
"description": "PIG \u2014 Prime Intellect Growth. An open-source, agent-native CRM for two-sided AI-compute companies.",
"license": "Apache-2.0",
"type": "module",
"engines": {
"node": ">=22",
"pnpm": ">=11"
},
"scripts": {
"build": "pnpm -r --if-present run build",
"typecheck": "pnpm -r --if-present run typecheck",
"test": "pnpm -r --if-present run test",
"test:e2e": "pnpm -F @pig/api run test:e2e",
"lint": "pnpm -r --if-present run lint",
"dev:api": "pnpm -F @pig/api run dev",
"dev:web": "pnpm -F @pig/web run dev",
"dev:mcp": "pnpm -F @pig/mcp run dev",
"dev:piggy": "pnpm -F @pig/piggy run dev",
"pig": "tsx apps/cli/src/main.ts",
"db:generate": "pnpm -F @pig/db run generate",
"db:migrate": "pnpm -F @pig/db run migrate",
"db:seed": "pnpm -F @pig/db run seed",
"db:demo": "pnpm -F @pig/db run demo"
},
"devDependencies": {
"@types/node": "^22.10.2",
"playwright": "^1.62.1",
"typescript": "^5.7.2"
},
"packageManager": "pnpm@11.21.0",
"dependencies": {
"tsx": "^4.19.2"
}
}