refactor: rename the agent client and agent setting to pnpr#12155
Conversation
The pnpm-side client and its config setting still carried the old "agent" name after the server moved to pnpr. Align both with pnpr (and with pacquet, which already uses `pnprServer`): - Move `agent/client` → `pnpr/client` and rename the package `@pnpm/agent.client` → `@pnpm/pnpr.client` (exported `AgentProject` type → `PnprProject`). - Rename the config setting `agent` → `pnprServer` (`--pnpr-server` CLI flag), matching pacquet's setting name. - Rename the internal install-path symbols and the user-facing log / error strings that mentioned "pnpm agent" to "pnpr". No behavioral change — only names. The e2e suite now drives `--config.pnprServer`.
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (6)
✅ Files skipped from review due to trivial changes (1)
🚧 Files skipped from review as they are similar to previous changes (3)
📜 Recent review details⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (9)
🧰 Additional context used📓 Path-based instructions (1)pnpr/**/pnpr/**/*.rs📄 CodeRabbit inference engine (pnpr/AGENTS.md)
Files:
🧠 Learnings (16)📓 Common learnings📚 Learning: 2026-05-24T21:11:04.272ZApplied to files:
📚 Learning: 2026-05-24T21:11:04.272ZApplied to files:
📚 Learning: 2026-05-25T12:36:42.202ZApplied to files:
📚 Learning: 2026-05-25T12:36:42.202ZApplied to files:
📚 Learning: 2026-05-20T23:08:06.093ZApplied to files:
📚 Learning: 2026-05-25T12:36:42.202ZApplied to files:
📚 Learning: 2026-05-29T18:03:15.354ZApplied to files:
📚 Learning: 2026-05-29T18:03:24.760ZApplied to files:
📚 Learning: 2026-05-29T18:03:15.354ZApplied to files:
📚 Learning: 2026-05-29T18:03:15.354ZApplied to files:
📚 Learning: 2026-05-21T00:33:05.035ZApplied to files:
📚 Learning: 2026-05-21T00:33:05.035ZApplied to files:
📚 Learning: 2026-05-20T23:08:06.093ZApplied to files:
📚 Learning: 2026-05-26T21:01:06.666ZApplied to files:
📚 Learning: 2026-05-29T18:03:24.760ZApplied to files:
🔇 Additional comments (2)
📝 WalkthroughWalkthroughThis PR renames the experimental "agent" surface to "pnprServer", renames and repackages the agent client as ChangesAgent to pnprServer rename with pnpr server integration
Sequence diagrams: skipped (changes are broad codebase wiring and protocol/type extensions; no single trivial 3+ actor sequential flow is rendered here). Estimated code review effort Possibly related PRs
Suggested reviewers
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Warning There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure. 🔧 ESLint
ESLint install failed. For unrecoverable errors, disable the tool in CodeRabbit configuration. Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Review Summary by QodoRename agent client and setting to pnpr for consistency
WalkthroughsDescription• Renamed agent config setting to pnprServer across all packages • Moved @pnpm/agent.client package to @pnpm/pnpr.client with renamed exports • Updated internal symbols and comments from "agent" to "pnpr" terminology • Updated test suite to use new --config.pnprServer flag instead of --config.agent Diagramflowchart LR
A["Config Setting<br/>agent → pnprServer"] --> B["Package Rename<br/>@pnpm/agent.client →<br/>@pnpm/pnpr.client"]
B --> C["Type Rename<br/>AgentProject →<br/>PnprProject"]
A --> D["Internal Symbols<br/>mutateModulesViaAgent →<br/>mutateModulesViaPnpr"]
D --> E["Error Messages &<br/>Comments Updated"]
E --> F["Tests Updated<br/>--config.pnprServer"]
File Changes1. config/reader/src/Config.ts
|
Micro-Benchmark ResultsLinux |
There was a problem hiding this comment.
Pull request overview
Renames pnpm’s experimental install-accelerator client/package and configuration from the legacy “agent” naming to “pnpr”, aligning with the pnpr server and pacquet’s pnprServer naming.
Changes:
- Renamed config setting
agent→pnprServer(and rc keypnpr-server) across config reader/types and install command option plumbing. - Moved/renamed client package to
pnpr/clientand updated imports, symbols, and user-facing strings to “pnpr server”. - Updated tests and workspace/lockfile metadata to reference the new package name and config key.
Reviewed changes
Copilot reviewed 24 out of 31 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| worker/src/start.ts | Updates comments/errors to refer to “pnpr server” for /v1/files behavior. |
| worker/src/index.ts | Updates doc comment for pnpr-related concurrency behavior. |
| pnpr/crates/pnpr/src/install_accelerator/protocol.rs | Updates Rust doc comment to reference @pnpm/pnpr.client. |
| pnpr/client/tsconfig.lint.json | Adds lint tsconfig for the renamed client package. |
| pnpr/client/tsconfig.json | Adds build tsconfig and project references for the renamed client package. |
| pnpr/client/src/protocol.ts | Adds protocol types for pnpr client responses. |
| pnpr/client/src/index.ts | Adds package entrypoint exports for pnpr client. |
| pnpr/client/src/fetchFromPnpmRegistry.ts | Renames public types/symbols and strings from “agent” to “pnpr server”. |
| pnpr/client/README.md | Renames documentation to @pnpm/pnpr.client and pnprServer. |
| pnpr/client/package.json | Renames the published package to @pnpm/pnpr.client and updates metadata. |
| pnpr/client/CHANGELOG.md | Adds/moves changelog into the new package location. |
| pnpr/client/.gitignore | Adds store ignore for the new package dir. |
| pnpm/test/install/pnpmRegistry.ts | Updates e2e coverage to use --config.pnprServer and “pnpr server” naming. |
| pnpm-workspace.yaml | Updates workspace package list to include pnpr/client instead of agent/*. |
| pnpm-lock.yaml | Updates importers/deps to reflect pnpr/client and @pnpm/pnpr.client. |
| pacquet/crates/pnpr-client/src/lib.rs | Updates Rust doc comment to reference @pnpm/pnpr.client. |
| installing/deps-installer/tsconfig.json | Updates TS project references from agent/client to pnpr/client. |
| installing/deps-installer/src/install/index.ts | Renames option/plumbing and user-facing strings/errors to pnprServer and pnpr terminology. |
| installing/deps-installer/src/install/extendInstallOptions.ts | Renames the option field from agent?: to pnprServer?: and updates docs. |
| installing/deps-installer/package.json | Switches dependency from @pnpm/agent.client to @pnpm/pnpr.client. |
| installing/commands/src/recursive.ts | Updates command options pick list to pnprServer. |
| installing/commands/src/installDeps.ts | Updates command options pick list to pnprServer. |
| installing/commands/src/install.ts | Replaces rc option agent with pnpr-server and updates command option typing to pnprServer. |
| core/types/src/package.ts | Renames PnpmSettings.agent to PnpmSettings.pnprServer. |
| config/reader/src/types.ts | Replaces config key agent with pnpr-server in type map. |
| config/reader/src/getOptionsFromRootManifest.ts | Updates root-manifest settings pick to include pnprServer. |
| config/reader/src/configFileKey.ts | Updates allowed config file keys to include pnpr-server instead of agent. |
| config/reader/src/Config.ts | Renames config field agent?: to pnprServer?:. |
| .meta-updater/src/index.ts | Updates experimental package list to @pnpm/pnpr.client. |
| .changeset/rename-agent-to-pnpr-server.md | Adds release notes for the agent → pnprServer rename and package rename. |
| .changeset/pnpr-lockfile-only.md | Updates changeset package name references from @pnpm/agent.client to @pnpm/pnpr.client. |
Files not reviewed (1)
- pnpm-lock.yaml: Language not supported
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #12155 +/- ##
==========================================
+ Coverage 87.56% 87.57% +0.01%
==========================================
Files 268 268
Lines 30761 30764 +3
==========================================
+ Hits 26935 26942 +7
+ Misses 3826 3822 -4 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
There was a problem hiding this comment.
Actionable comments posted: 1
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (3)
installing/deps-installer/src/install/index.ts (3)
2312-2316:⚠️ Potential issue | 🟠 Major | ⚡ Quick winReturn
resolutionPolicyViolationsfrom the pnpr fast path.
mutateModules()can return this object directly at Line 314, but this branch omitsresolutionPolicyViolationsand then casts the result toMutateModulesResult. Callers likeaddDependenciesToPackage()andmutateModulesInSingleProject()treat that field as a required array, so the pnpr path currently returnsundefinedand breaks the contract.Minimal fix
return { updatedProjects, stats: result.stats, ignoredBuilds: result.ignoredBuilds, + resolutionPolicyViolations: [], } as MutateModulesResult🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@installing/deps-installer/src/install/index.ts` around lines 2312 - 2316, The pnpr fast-path return is missing the resolutionPolicyViolations field, breaking the MutateModulesResult contract; update the returned object in the fast path (the return near the end of the pnpr branch in install/index.ts where updatedProjects, stats and ignoredBuilds are returned) to include resolutionPolicyViolations (e.g. set it from result.resolutionPolicyViolations or default to an empty array) so callers like addDependenciesToPackage and mutateModulesInSingleProject receive a defined array.
2491-2497:⚠️ Potential issue | 🟠 Major | ⚡ Quick winNormalize workspace importer IDs to POSIX here too.
Earlier in this method, the outgoing
projectsListuses.split(path.sep).join('/')because the pnpr server and lockfile importer IDs are POSIX-normalized.headlessOpts.allProjects[*].idskips that normalization, so on Windows you'll pass ids likepackages\foowhile the returned lockfile containspackages/foo, which can make the pnpr workspace path miss importer entries.Minimal fix
allProjects: Object.fromEntries( (allInstallProjects ?? [{ rootDir, manifest }]).map((p, i) => [ p.rootDir, { binsDir: path.join(p.rootDir, 'node_modules', '.bin'), buildIndex: i, - id: (path.relative(lockfileDir, p.rootDir) || '.') as ProjectId, + id: ((path.relative(lockfileDir, p.rootDir) || '.').split(path.sep).join('/')) as ProjectId, manifest: p.manifest, modulesDir: path.join(p.rootDir, 'node_modules'), rootDir: p.rootDir, }, ])🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@installing/deps-installer/src/install/index.ts` around lines 2491 - 2497, The project id assigned in the mapping for allInstallProjects is not POSIX-normalized, causing Windows backslashes (e.g. "packages\\foo") to mismatch lockfile importer IDs; update the id assignment in the (allInstallProjects ?? ...).map(...) block (the id property inside the created object) to normalize via splitting on path.sep and joining with '/' (same approach used earlier for projectsList) so the id becomes POSIX-style (e.g. "packages/foo").
2393-2400:⚠️ Potential issue | 🟠 Major | ⚡ Quick winDon't checkpoint and close
StoreIndexbefore lateIframes finish.
fetchFromPnpmRegistry()resolves as soon as it sees theLframe, but its own comment says the stream keeps delivering remainingD/Ilines afterward. This block writesindexEntries, checkpoints, and closes SQLite immediately after that early resolve, so any index entries appended after the lockfile frame are never persisted.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@installing/deps-installer/src/install/index.ts` around lines 2393 - 2400, fetchFromPnpmRegistry currently returns when it sees the `L` frame while the stream may still emit `D`/`I` frames, but the code calls writeRawIndexEntries and then immediately invokes storeIndex.checkpoint() and storeIndex.close(); move the checkpoint/close to occur only after the registry stream is fully consumed (i.e., after fetchFromPnpmRegistry resolves only when all frames processed) or add an explicit await for the stream completion before calling writeRawIndexEntries/storeIndex.checkpoint() and storeIndex.close(); update either fetchFromPnpmRegistry to delay its resolution until end-of-stream or adjust the caller to wait for end-of-stream, ensuring late `I` frames appended to indexEntries are persisted.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@pnpr/client/src/fetchFromPnpmRegistry.ts`:
- Around line 12-17: The PnprProject type was stripped of optionalDependencies
causing optional deps to be omitted from pnpr requests; restore an
optionalDependencies?: Record<string,string> field on the PnprProject interface
and update the fast-path in the installer (where single-project and workspace
request bodies are assembled) to populate manifest.optionalDependencies into
that field so pnprServer receives them; also propagate
manifest.optionalDependencies through the caller chain (the install function
that builds the pnpr request, referenced as manifest.optionalDependencies and
the request construction in install/index.ts) so both single-project and
workspace flows include optionalDependencies.
---
Outside diff comments:
In `@installing/deps-installer/src/install/index.ts`:
- Around line 2312-2316: The pnpr fast-path return is missing the
resolutionPolicyViolations field, breaking the MutateModulesResult contract;
update the returned object in the fast path (the return near the end of the pnpr
branch in install/index.ts where updatedProjects, stats and ignoredBuilds are
returned) to include resolutionPolicyViolations (e.g. set it from
result.resolutionPolicyViolations or default to an empty array) so callers like
addDependenciesToPackage and mutateModulesInSingleProject receive a defined
array.
- Around line 2491-2497: The project id assigned in the mapping for
allInstallProjects is not POSIX-normalized, causing Windows backslashes (e.g.
"packages\\foo") to mismatch lockfile importer IDs; update the id assignment in
the (allInstallProjects ?? ...).map(...) block (the id property inside the
created object) to normalize via splitting on path.sep and joining with '/'
(same approach used earlier for projectsList) so the id becomes POSIX-style
(e.g. "packages/foo").
- Around line 2393-2400: fetchFromPnpmRegistry currently returns when it sees
the `L` frame while the stream may still emit `D`/`I` frames, but the code calls
writeRawIndexEntries and then immediately invokes storeIndex.checkpoint() and
storeIndex.close(); move the checkpoint/close to occur only after the registry
stream is fully consumed (i.e., after fetchFromPnpmRegistry resolves only when
all frames processed) or add an explicit await for the stream completion before
calling writeRawIndexEntries/storeIndex.checkpoint() and storeIndex.close();
update either fetchFromPnpmRegistry to delay its resolution until end-of-stream
or adjust the caller to wait for end-of-stream, ensuring late `I` frames
appended to indexEntries are persisted.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro Plus
Run ID: 12f45dfb-25b4-4503-91b3-a75c49a49386
⛔ Files ignored due to path filters (1)
pnpm-lock.yamlis excluded by!**/pnpm-lock.yaml
📒 Files selected for processing (30)
.changeset/pnpr-lockfile-only.md.changeset/rename-agent-to-pnpr-server.md.meta-updater/src/index.tsconfig/reader/src/Config.tsconfig/reader/src/configFileKey.tsconfig/reader/src/getOptionsFromRootManifest.tsconfig/reader/src/types.tscore/types/src/package.tsinstalling/commands/src/install.tsinstalling/commands/src/installDeps.tsinstalling/commands/src/recursive.tsinstalling/deps-installer/package.jsoninstalling/deps-installer/src/install/extendInstallOptions.tsinstalling/deps-installer/src/install/index.tsinstalling/deps-installer/tsconfig.jsonpacquet/crates/pnpr-client/src/lib.rspnpm-workspace.yamlpnpm/test/install/pnpmRegistry.tspnpr/client/.gitignorepnpr/client/CHANGELOG.mdpnpr/client/README.mdpnpr/client/package.jsonpnpr/client/src/fetchFromPnpmRegistry.tspnpr/client/src/index.tspnpr/client/src/protocol.tspnpr/client/tsconfig.jsonpnpr/client/tsconfig.lint.jsonpnpr/crates/pnpr/src/install_accelerator/protocol.rsworker/src/index.tsworker/src/start.ts
Integrated-Benchmark Report (Linux)Scenario: Isolated linker: fresh restore, cold cache + cold store
BENCHMARK_REPORT.json{
"results": [
{
"command": "pacquet@HEAD",
"mean": 2.0789570070599996,
"stddev": 0.05832126438916964,
"median": 2.09357934216,
"user": 2.5738173200000003,
"system": 3.4462924800000003,
"min": 1.97647524316,
"max": 2.16249380116,
"times": [
2.0629987601599997,
1.97647524316,
1.98612566216,
2.07266280116,
2.12279574016,
2.09393365516,
2.16249380116,
2.10691970116,
2.09322502916,
2.11193967716
]
},
{
"command": "pacquet@main",
"mean": 2.13959125386,
"stddev": 0.06153706430553691,
"median": 2.15330091966,
"user": 2.57689672,
"system": 3.4146083799999993,
"min": 2.04645904416,
"max": 2.2316548581599998,
"times": [
2.2316548581599998,
2.16023353816,
2.05973242116,
2.16692384416,
2.07721732416,
2.14636830116,
2.20296266216,
2.17576026016,
2.12860028516,
2.04645904416
]
}
]
}Scenario: Isolated linker: fresh restore, hot cache + hot store
BENCHMARK_REPORT.json{
"results": [
{
"command": "pacquet@HEAD",
"mean": 0.65680476808,
"stddev": 0.027734100941874604,
"median": 0.65211350408,
"user": 0.35895412000000004,
"system": 1.32905022,
"min": 0.63503265108,
"max": 0.73253578808,
"times": [
0.73253578808,
0.65240805808,
0.65963615108,
0.65487359908,
0.63962207408,
0.65181895008,
0.64653625808,
0.63503265108,
0.64092437508,
0.65465977608
]
},
{
"command": "pacquet@main",
"mean": 0.6628808371799999,
"stddev": 0.026956447035626697,
"median": 0.65280664658,
"user": 0.3632003199999999,
"system": 1.3350692199999998,
"min": 0.64187983608,
"max": 0.71630433208,
"times": [
0.71630433208,
0.65679204108,
0.64882125208,
0.64187983608,
0.64414897508,
0.64243784408,
0.64591976808,
0.66332203108,
0.7070705470800001,
0.66211174508
]
}
]
}Scenario: Isolated linker: fresh install, cold cache + cold store
BENCHMARK_REPORT.json{
"results": [
{
"command": "pacquet@HEAD",
"mean": 2.3245373486,
"stddev": 0.032689177174771704,
"median": 2.3210638664,
"user": 3.71426212,
"system": 3.15975494,
"min": 2.2709348049,
"max": 2.3892803969,
"times": [
2.3020677159,
2.3391797079,
2.2980685019,
2.3511194479,
2.3226934049,
2.3123294649,
2.3892803969,
2.3194343279,
2.2709348049,
2.3402657129
]
},
{
"command": "pacquet@main",
"mean": 2.3040578908,
"stddev": 0.03677272883122393,
"median": 2.2987663068999997,
"user": 3.70246202,
"system": 3.10942924,
"min": 2.2516375029,
"max": 2.3577815569,
"times": [
2.2836059049,
2.2660124859,
2.2783485389,
2.3005763248999997,
2.2969562888999997,
2.3577815569,
2.3511336738999997,
2.3091857228999997,
2.3453409079,
2.2516375029
]
}
]
}Scenario: Isolated linker: fresh install, hot cache + hot store
BENCHMARK_REPORT.json{
"results": [
{
"command": "pacquet@HEAD",
"mean": 1.55804949536,
"stddev": 0.023827469353541117,
"median": 1.5633822670600002,
"user": 1.7402556200000003,
"system": 1.9045266600000001,
"min": 1.52670846106,
"max": 1.58511449806,
"times": [
1.52803199206,
1.57160900506,
1.5752715960600001,
1.53843187606,
1.55515552906,
1.52670846106,
1.5790084880600002,
1.58511449806,
1.53641443906,
1.5847490690600001
]
},
{
"command": "pacquet@main",
"mean": 1.49870386156,
"stddev": 0.020771373491026437,
"median": 1.4993072120600002,
"user": 1.68666032,
"system": 1.85411026,
"min": 1.46762363406,
"max": 1.53549529506,
"times": [
1.51994523306,
1.5000505640600001,
1.46762363406,
1.51241073306,
1.53549529506,
1.48368922506,
1.47253745606,
1.50083085406,
1.49589176106,
1.49856386006
]
}
]
} |
|
| Branch | pr/12155 |
| Testbed | pacquet |
Click to view all benchmark results
| Benchmark | Latency | Benchmark Result milliseconds (ms) (Result Δ%) | Upper Boundary milliseconds (ms) (Limit %) |
|---|---|---|---|
| isolated-linker.fresh-install.cold-cache.cold-store | 📈 view plot 🚷 view threshold | 2,324.54 ms(-0.71%)Baseline: 2,341.15 ms | 2,809.38 ms (82.74%) |
| isolated-linker.fresh-install.hot-cache.hot-store | 📈 view plot 🚷 view threshold | 1,558.05 ms(+2.72%)Baseline: 1,516.86 ms | 1,820.23 ms (85.60%) |
| isolated-linker.fresh-restore.cold-cache.cold-store | 📈 view plot 🚷 view threshold | 2,078.96 ms(+1.32%)Baseline: 2,051.91 ms | 2,462.29 ms (84.43%) |
| isolated-linker.fresh-restore.hot-cache.hot-store | 📈 view plot 🚷 view threshold | 656.80 ms(+1.04%)Baseline: 650.03 ms | 780.03 ms (84.20%) |
`PnprProject` and the install-request body only carried `dependencies` and `devDependencies`, so a project's `optionalDependencies` were dropped on the way to the pnpr server — it resolved as if they didn't exist, producing a different lockfile than the local resolver. Thread `optionalDependencies` through the client request shape, the deps-installer single-project and workspace request builders, and the pnpr server (`InstallRequestProject` / `InstallRequest` + the throwaway manifest it writes for resolution). Adds an e2e case asserting an optional dependency is resolved through `pnprServer`.
What
After the install-accelerator server moved from the experimental
pnpm-agentto pnpr (#12151), the pnpm-side client and its config setting still carried the old "agent" name. This renames both to align with pnpr — and specifically with pacquet, which already exposes the setting aspnprServer/--pnpr-server.Changes
agent/client→pnpr/clientand renamed@pnpm/agent.client→@pnpm/pnpr.client(exportedAgentProjecttype →PnprProject). Same MIT license, kept separate from the source-availablepnpr/server crates.agent→pnprServer(camelCase setting /--pnpr-serverCLI flag /pnpr-serverrc key), matching pacquet'spnpr_server. Updated@pnpm/config.reader(Config,types,configFileKey,getOptionsFromRootManifest), thePnpmSettingstype in@pnpm/types, and the install command option lists.mutateModulesViaAgent→mutateModulesViaPnpr,canUseAgentForMutations→canUsePnprForMutations,prepareAgentProjects→preparePnprProjects, etc.) and the user-facing log / error strings (Resolving dependencies via the pnpr server,TRUST_POLICY_INCOMPATIBLE_WITH_PNPR, the/v1/filesworker errors).@pnpm/agent.client.No behavioral change — only names.
Verification
pnpm/test/install/pnpmRegistry.ts: 10/10 pass driving--config.pnprServer.pnpm --filter pnpm run compile(tsc + bundle) clean;pnpm run lint:metapasses (it sorted the moved package's tsconfig reference and tracked the rename); ESLint clean on changed files; Rust fmt/doc/dylint/taplo clean.Changeset:
pnpmminor (the experimentalagentsetting is renamed; the old name no longer works).Written by an agent (Claude Code, claude-opus-4-8).
Summary by CodeRabbit
New Features
pnpm install --lockfile-onlyhonors configuration with a pnpr server and writes lockfile without fetching or linking.Bug Fixes
Breaking Changes
agent→pnprServer(--pnpr-server).@pnpm/pnpr.client.Chores