Release v0.81.0

This commit is contained in:
Mario Zechner
2026-07-21 15:27:11 +02:00
parent 3f1762cc7d
commit 9c480b6ad2
26 changed files with 131 additions and 110 deletions
+22 -33
View File
@@ -786,10 +786,6 @@
"resolved": "packages/agent",
"link": true
},
"node_modules/@earendil-works/pi-storage-sqlite-node": {
"resolved": "packages/storage/sqlite-node",
"link": true
},
"node_modules/@earendil-works/pi-ai": {
"resolved": "packages/ai",
"link": true
@@ -802,6 +798,10 @@
"resolved": "packages/server",
"link": true
},
"node_modules/@earendil-works/pi-storage-sqlite-node": {
"resolved": "packages/storage/sqlite-node",
"link": true
},
"node_modules/@earendil-works/pi-tui": {
"resolved": "packages/tui",
"link": true
@@ -1573,7 +1573,6 @@
"resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz",
"integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==",
"license": "Apache-2.0",
"peer": true,
"engines": {
"node": ">=8.0.0"
}
@@ -2651,7 +2650,6 @@
"dev": true,
"hasInstallScript": true,
"license": "MIT",
"peer": true,
"bin": {
"esbuild": "bin/esbuild"
},
@@ -4721,7 +4719,6 @@
"integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
"dev": true,
"license": "MIT",
"peer": true,
"engines": {
"node": ">=12"
},
@@ -4760,7 +4757,6 @@
"integrity": "sha512-TvncJykhxAzFCk0VQZKBTClall4Pm7qXDSodb6uxi8QFa8X8mT6ABjxxsQ2opDRYxG7AzcRWXaFtruz5HJKuWg==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"esbuild": "~0.28.0"
},
@@ -4841,7 +4837,6 @@
"integrity": "sha512-h9bXPmJichP5fLmVQo3PyaGSDE2n3aPuomeAlVRm0JLmt4rY6zmPKd59HYI4LNW8oTK7tlTsuC7l/m7awx9Jcw==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"lightningcss": "^1.32.0",
"picomatch": "^4.0.4",
@@ -5031,7 +5026,6 @@
"resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz",
"integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==",
"license": "MIT",
"peer": true,
"funding": {
"url": "https://github.com/sponsors/colinhacks"
}
@@ -5047,10 +5041,10 @@
},
"packages/agent": {
"name": "@earendil-works/pi-agent-core",
"version": "0.80.10",
"version": "0.81.0",
"license": "MIT",
"dependencies": {
"@earendil-works/pi-ai": "^0.80.10",
"@earendil-works/pi-ai": "^0.81.0",
"ignore": "7.0.5",
"typebox": "1.1.38",
"yaml": "2.9.0"
@@ -5071,7 +5065,6 @@
"integrity": "sha512-GUUEShf+PBCGW2KaXwcIt3Yk+e3pkKwWKb9GSyM9WQVE+ep2jzmHdGsHzu4wgcZy5fN9FBdVzjpBQsYlpfpgLA==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"undici-types": "~7.16.0"
}
@@ -5082,7 +5075,6 @@
"integrity": "sha512-G9/lgqibheLVBDRuya45EbsEXTYcWoSG+TLg7i2axuzx0Eq62eXn+aWXyaVdV5vKvFSWd6ywcX8hA7la9Pvu8g==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@bcoe/v8-coverage": "^1.0.2",
"@vitest/utils": "4.1.9",
@@ -5288,7 +5280,6 @@
"integrity": "sha512-nE3/LEyc0z87uHYLZebqCUOaJr2hdtuPp7BQ4BosVFnfltxgAvMG08NyrSGlPpOUWvR27c5flSmYFTNr78L9GQ==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@vitest/expect": "4.1.9",
"@vitest/mocker": "4.1.9",
@@ -5402,7 +5393,7 @@
},
"packages/ai": {
"name": "@earendil-works/pi-ai",
"version": "0.80.10",
"version": "0.81.0",
"license": "MIT",
"dependencies": {
"@anthropic-ai/sdk": "0.91.1",
@@ -5435,7 +5426,6 @@
"integrity": "sha512-GUUEShf+PBCGW2KaXwcIt3Yk+e3pkKwWKb9GSyM9WQVE+ep2jzmHdGsHzu4wgcZy5fN9FBdVzjpBQsYlpfpgLA==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"undici-types": "~7.16.0"
}
@@ -5709,12 +5699,12 @@
},
"packages/coding-agent": {
"name": "@earendil-works/pi-coding-agent",
"version": "0.80.10",
"version": "0.81.0",
"license": "MIT",
"dependencies": {
"@earendil-works/pi-agent-core": "^0.80.10",
"@earendil-works/pi-ai": "^0.80.10",
"@earendil-works/pi-tui": "^0.80.10",
"@earendil-works/pi-agent-core": "^0.81.0",
"@earendil-works/pi-ai": "^0.81.0",
"@earendil-works/pi-tui": "^0.81.0",
"@silvia-odwyer/photon-node": "0.3.4",
"chalk": "5.6.2",
"cross-spawn": "7.0.6",
@@ -5755,32 +5745,32 @@
},
"packages/coding-agent/examples/extensions/custom-provider-anthropic": {
"name": "pi-extension-custom-provider-anthropic",
"version": "0.80.10",
"version": "0.81.0",
"dependencies": {
"@anthropic-ai/sdk": "0.52.0"
}
},
"packages/coding-agent/examples/extensions/custom-provider-gitlab-duo": {
"name": "pi-extension-custom-provider-gitlab-duo",
"version": "0.80.10"
"version": "0.81.0"
},
"packages/coding-agent/examples/extensions/gondolin": {
"name": "pi-extension-gondolin",
"version": "0.80.10",
"version": "0.81.0",
"dependencies": {
"@earendil-works/gondolin": "0.12.0"
}
},
"packages/coding-agent/examples/extensions/sandbox": {
"name": "pi-extension-sandbox",
"version": "1.10.10",
"version": "1.11.0",
"dependencies": {
"@anthropic-ai/sandbox-runtime": "0.0.26"
}
},
"packages/coding-agent/examples/extensions/with-deps": {
"name": "pi-extension-with-deps",
"version": "0.80.10",
"version": "0.81.0",
"dependencies": {
"ms": "2.1.3"
},
@@ -5803,7 +5793,6 @@
"integrity": "sha512-GUUEShf+PBCGW2KaXwcIt3Yk+e3pkKwWKb9GSyM9WQVE+ep2jzmHdGsHzu4wgcZy5fN9FBdVzjpBQsYlpfpgLA==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"undici-types": "~7.16.0"
}
@@ -6077,10 +6066,10 @@
},
"packages/server": {
"name": "@earendil-works/pi-server",
"version": "0.80.10",
"version": "0.81.0",
"license": "MIT",
"dependencies": {
"@earendil-works/pi-coding-agent": "^0.80.10"
"@earendil-works/pi-coding-agent": "^0.81.0"
},
"bin": {
"server": "dist/cli.js"
@@ -6094,11 +6083,11 @@
},
"packages/storage/sqlite-node": {
"name": "@earendil-works/pi-storage-sqlite-node",
"version": "0.80.10",
"version": "0.81.0",
"license": "MIT",
"dependencies": {
"@earendil-works/pi-agent-core": "^0.80.10",
"@earendil-works/pi-ai": "^0.80.10"
"@earendil-works/pi-agent-core": "^0.81.0",
"@earendil-works/pi-ai": "^0.81.0"
},
"engines": {
"node": ">=22.19.0"
@@ -6106,7 +6095,7 @@
},
"packages/tui": {
"name": "@earendil-works/pi-tui",
"version": "0.80.10",
"version": "0.81.0",
"license": "MIT",
"dependencies": {
"get-east-asian-width": "1.6.0",
+1 -1
View File
@@ -1,6 +1,6 @@
# Changelog
## [Unreleased]
## [0.81.0] - 2026-07-21
### Breaking Changes
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "@earendil-works/pi-agent-core",
"version": "0.80.10",
"version": "0.81.0",
"description": "General-purpose agent with transport abstraction, state management, and attachment support",
"type": "module",
"main": "./dist/index.js",
@@ -29,7 +29,7 @@
"prepublishOnly": "npm run build"
},
"dependencies": {
"@earendil-works/pi-ai": "^0.80.10",
"@earendil-works/pi-ai": "^0.81.0",
"ignore": "7.0.5",
"typebox": "1.1.38",
"yaml": "2.9.0"
+1 -1
View File
@@ -1,6 +1,6 @@
# Changelog
## [Unreleased]
## [0.81.0] - 2026-07-21
### Added
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@earendil-works/pi-ai",
"version": "0.80.10",
"version": "0.81.0",
"description": "Unified LLM API with automatic model discovery and provider configuration",
"type": "module",
"main": "./dist/index.js",
+1 -1
View File
@@ -1,6 +1,6 @@
# Changelog
## [Unreleased]
## [0.81.0] - 2026-07-21
### New Features
@@ -1,12 +1,12 @@
{
"name": "pi-extension-custom-provider",
"version": "0.80.10",
"version": "0.81.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "pi-extension-custom-provider",
"version": "0.80.10",
"version": "0.81.0",
"dependencies": {
"@anthropic-ai/sdk": "^0.52.0"
}
@@ -1,7 +1,7 @@
{
"name": "pi-extension-custom-provider-anthropic",
"private": true,
"version": "0.80.10",
"version": "0.81.0",
"type": "module",
"scripts": {
"clean": "echo 'nothing to clean'",
@@ -1,7 +1,7 @@
{
"name": "pi-extension-custom-provider-gitlab-duo",
"private": true,
"version": "0.80.10",
"version": "0.81.0",
"type": "module",
"scripts": {
"clean": "echo 'nothing to clean'",
@@ -1,12 +1,12 @@
{
"name": "pi-extension-gondolin",
"version": "0.80.10",
"version": "0.81.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "pi-extension-gondolin",
"version": "0.80.10",
"version": "0.81.0",
"dependencies": {
"@earendil-works/gondolin": "0.12.0"
}
@@ -1,7 +1,7 @@
{
"name": "pi-extension-gondolin",
"private": true,
"version": "0.80.10",
"version": "0.81.0",
"type": "module",
"scripts": {
"clean": "echo 'nothing to clean'",
@@ -1,12 +1,12 @@
{
"name": "pi-extension-sandbox",
"version": "1.10.10",
"version": "1.11.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "pi-extension-sandbox",
"version": "1.10.10",
"version": "1.11.0",
"dependencies": {
"@anthropic-ai/sandbox-runtime": "^0.0.26"
}
@@ -1,7 +1,7 @@
{
"name": "pi-extension-sandbox",
"private": true,
"version": "1.10.10",
"version": "1.11.0",
"type": "module",
"scripts": {
"clean": "echo 'nothing to clean'",
@@ -1,12 +1,12 @@
{
"name": "pi-extension-with-deps",
"version": "0.80.10",
"version": "0.81.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "pi-extension-with-deps",
"version": "0.80.10",
"version": "0.81.0",
"dependencies": {
"ms": "^2.1.3"
},
@@ -1,7 +1,7 @@
{
"name": "pi-extension-with-deps",
"private": true,
"version": "0.80.10",
"version": "0.81.0",
"type": "module",
"scripts": {
"clean": "echo 'nothing to clean'",
+17 -19
View File
@@ -1,14 +1,14 @@
{
"name": "@earendil-works/pi-coding-agent-install",
"version": "0.80.10",
"version": "0.81.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@earendil-works/pi-coding-agent-install",
"version": "0.80.10",
"version": "0.81.0",
"dependencies": {
"@earendil-works/pi-coding-agent": "0.80.10"
"@earendil-works/pi-coding-agent": "0.81.0"
},
"engines": {
"node": ">=22.19.0"
@@ -450,11 +450,11 @@
}
},
"node_modules/@earendil-works/pi-agent-core": {
"version": "0.80.10",
"resolved": "https://registry.npmjs.org/@earendil-works/pi-agent-core/-/pi-agent-core-0.80.10.tgz",
"version": "0.81.0",
"resolved": "https://registry.npmjs.org/@earendil-works/pi-agent-core/-/pi-agent-core-0.81.0.tgz",
"license": "MIT",
"dependencies": {
"@earendil-works/pi-ai": "^0.80.10",
"@earendil-works/pi-ai": "^0.81.0",
"ignore": "7.0.5",
"typebox": "1.1.38",
"yaml": "2.9.0"
@@ -464,8 +464,8 @@
}
},
"node_modules/@earendil-works/pi-ai": {
"version": "0.80.10",
"resolved": "https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.80.10.tgz",
"version": "0.81.0",
"resolved": "https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.81.0.tgz",
"license": "MIT",
"dependencies": {
"@anthropic-ai/sdk": "0.91.1",
@@ -488,13 +488,13 @@
}
},
"node_modules/@earendil-works/pi-coding-agent": {
"version": "0.80.10",
"resolved": "https://registry.npmjs.org/@earendil-works/pi-coding-agent/-/pi-coding-agent-0.80.10.tgz",
"version": "0.81.0",
"resolved": "https://registry.npmjs.org/@earendil-works/pi-coding-agent/-/pi-coding-agent-0.81.0.tgz",
"license": "MIT",
"dependencies": {
"@earendil-works/pi-agent-core": "^0.80.10",
"@earendil-works/pi-ai": "^0.80.10",
"@earendil-works/pi-tui": "^0.80.10",
"@earendil-works/pi-agent-core": "^0.81.0",
"@earendil-works/pi-ai": "^0.81.0",
"@earendil-works/pi-tui": "^0.81.0",
"@silvia-odwyer/photon-node": "0.3.4",
"chalk": "5.6.2",
"cross-spawn": "7.0.6",
@@ -522,8 +522,8 @@
}
},
"node_modules/@earendil-works/pi-tui": {
"version": "0.80.10",
"resolved": "https://registry.npmjs.org/@earendil-works/pi-tui/-/pi-tui-0.80.10.tgz",
"version": "0.81.0",
"resolved": "https://registry.npmjs.org/@earendil-works/pi-tui/-/pi-tui-0.81.0.tgz",
"license": "MIT",
"dependencies": {
"get-east-asian-width": "1.6.0",
@@ -775,8 +775,7 @@
"license": "Apache-2.0",
"engines": {
"node": ">=8.0.0"
},
"peer": true
}
},
"node_modules/@opentelemetry/semantic-conventions": {
"version": "1.41.1",
@@ -1820,8 +1819,7 @@
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/colinhacks"
},
"peer": true
}
},
"node_modules/zod-to-json-schema": {
"version": "3.25.2",
@@ -1,10 +1,10 @@
{
"name": "@earendil-works/pi-coding-agent-install",
"version": "0.80.10",
"version": "0.81.0",
"private": true,
"description": "Lockfile root used by the Pi installer and updater.",
"dependencies": {
"@earendil-works/pi-coding-agent": "0.80.10"
"@earendil-works/pi-coding-agent": "0.81.0"
},
"overrides": {
"rimraf": "6.1.2",
+14 -16
View File
@@ -1,17 +1,17 @@
{
"name": "@earendil-works/pi-coding-agent",
"version": "0.80.10",
"version": "0.81.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@earendil-works/pi-coding-agent",
"version": "0.80.10",
"version": "0.81.0",
"license": "MIT",
"dependencies": {
"@earendil-works/pi-agent-core": "^0.80.10",
"@earendil-works/pi-ai": "^0.80.10",
"@earendil-works/pi-tui": "^0.80.10",
"@earendil-works/pi-agent-core": "^0.81.0",
"@earendil-works/pi-ai": "^0.81.0",
"@earendil-works/pi-tui": "^0.81.0",
"@silvia-odwyer/photon-node": "0.3.4",
"chalk": "5.6.2",
"cross-spawn": "7.0.6",
@@ -474,11 +474,11 @@
}
},
"node_modules/@earendil-works/pi-agent-core": {
"version": "0.80.10",
"resolved": "https://registry.npmjs.org/@earendil-works/pi-agent-core/-/pi-agent-core-0.80.10.tgz",
"version": "0.81.0",
"resolved": "https://registry.npmjs.org/@earendil-works/pi-agent-core/-/pi-agent-core-0.81.0.tgz",
"license": "MIT",
"dependencies": {
"@earendil-works/pi-ai": "^0.80.10",
"@earendil-works/pi-ai": "^0.81.0",
"ignore": "7.0.5",
"typebox": "1.1.38",
"yaml": "2.9.0"
@@ -488,8 +488,8 @@
}
},
"node_modules/@earendil-works/pi-ai": {
"version": "0.80.10",
"resolved": "https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.80.10.tgz",
"version": "0.81.0",
"resolved": "https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.81.0.tgz",
"license": "MIT",
"dependencies": {
"@anthropic-ai/sdk": "0.91.1",
@@ -512,8 +512,8 @@
}
},
"node_modules/@earendil-works/pi-tui": {
"version": "0.80.10",
"resolved": "https://registry.npmjs.org/@earendil-works/pi-tui/-/pi-tui-0.80.10.tgz",
"version": "0.81.0",
"resolved": "https://registry.npmjs.org/@earendil-works/pi-tui/-/pi-tui-0.81.0.tgz",
"license": "MIT",
"dependencies": {
"get-east-asian-width": "1.6.0",
@@ -765,8 +765,7 @@
"license": "Apache-2.0",
"engines": {
"node": ">=8.0.0"
},
"peer": true
}
},
"node_modules/@opentelemetry/semantic-conventions": {
"version": "1.41.1",
@@ -1810,8 +1809,7 @@
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/colinhacks"
},
"peer": true
}
},
"node_modules/zod-to-json-schema": {
"version": "3.25.2",
+4 -4
View File
@@ -1,6 +1,6 @@
{
"name": "@earendil-works/pi-coding-agent",
"version": "0.80.10",
"version": "0.81.0",
"description": "Coding agent CLI with read, bash, edit, write tools and session management",
"type": "module",
"piConfig": {
@@ -39,9 +39,9 @@
"prepublishOnly": "npm run clean && npm run build && npm run shrinkwrap"
},
"dependencies": {
"@earendil-works/pi-agent-core": "^0.80.10",
"@earendil-works/pi-ai": "^0.80.10",
"@earendil-works/pi-tui": "^0.80.10",
"@earendil-works/pi-agent-core": "^0.81.0",
"@earendil-works/pi-ai": "^0.81.0",
"@earendil-works/pi-tui": "^0.81.0",
"@silvia-odwyer/photon-node": "0.3.4",
"chalk": "5.6.2",
"cross-spawn": "7.0.6",
+1 -1
View File
@@ -1,6 +1,6 @@
# Changelog
## [Unreleased]
## [0.81.0] - 2026-07-21
### Changed
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "@earendil-works/pi-server",
"version": "0.80.10",
"version": "0.81.0",
"description": "experimental server package for pi",
"type": "module",
"main": "./dist/index.js",
@@ -40,7 +40,7 @@
"node": ">=22.19.0"
},
"dependencies": {
"@earendil-works/pi-coding-agent": "^0.80.10"
"@earendil-works/pi-coding-agent": "^0.81.0"
},
"devDependencies": {
"shx": "0.4.0"
+1 -1
View File
@@ -1,6 +1,6 @@
# Changelog
## [Unreleased]
## [0.81.0] - 2026-07-21
### Added
+3 -3
View File
@@ -1,6 +1,6 @@
{
"name": "@earendil-works/pi-storage-sqlite-node",
"version": "0.80.10",
"version": "0.81.0",
"description": "Node sqlite storage backend for @earendil-works/pi-agent-core sessions",
"type": "module",
"main": "./dist/index.js",
@@ -32,7 +32,7 @@
"node": ">=22.19.0"
},
"dependencies": {
"@earendil-works/pi-ai": "^0.80.10",
"@earendil-works/pi-agent-core": "^0.80.10"
"@earendil-works/pi-ai": "^0.81.0",
"@earendil-works/pi-agent-core": "^0.81.0"
}
}
+1 -1
View File
@@ -1,6 +1,6 @@
# Changelog
## [Unreleased]
## [0.81.0] - 2026-07-21
### Fixed
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@earendil-works/pi-tui",
"version": "0.80.10",
"version": "0.81.0",
"description": "Terminal User Interface library with differential rendering for efficient text-based applications",
"type": "module",
"main": "dist/index.js",
+39 -3
View File
@@ -68,6 +68,36 @@ function shellQuote(value) {
return `'${value.replace(/'/g, `'\\''`)}'`;
}
function removeStaleWorkspaceLockEntries() {
const workspaceVersions = new Map(
findPackageDirectories()
.map((directory) => JSON.parse(readFileSync(join(directory, "package.json"), "utf8")))
.filter((pkg) => pkg.private !== true)
.map((pkg) => [pkg.name, pkg.version]),
);
const lockPath = "package-lock.json";
const lock = JSON.parse(readFileSync(lockPath, "utf8"));
let removed = 0;
for (const [path, pkg] of Object.entries(lock.packages)) {
if (!path.startsWith("packages/") || pkg.link === true) {
continue;
}
for (const [name, version] of workspaceVersions) {
if (path.endsWith(`/node_modules/${name}`) && pkg.version !== version) {
delete lock.packages[path];
removed++;
break;
}
}
}
if (removed > 0) {
writeFileSync(lockPath, `${JSON.stringify(lock, null, "\t")}\n`);
console.log(`Removed ${removed} stale workspace package lock ${removed === 1 ? "entry" : "entries"}.`);
}
}
function stageChangedFiles() {
const output = run("git ls-files -m -o -d --exclude-standard", { silent: true });
const paths = [...new Set((output || "").split("\n").map((line) => line.trim()).filter(Boolean))];
@@ -84,9 +114,7 @@ function bumpOrSetVersion(target) {
if (BUMP_TYPES.has(target)) {
console.log(`Bumping version (${target})...`);
run(`npm run version:${target}`);
return getVersion();
}
} else {
if (compareVersions(target, currentVersion) <= 0) {
console.error(`Error: explicit version ${target} must be greater than current version ${currentVersion}.`);
process.exit(1);
@@ -94,6 +122,14 @@ function bumpOrSetVersion(target) {
console.log(`Setting explicit version (${target})...`);
run(`npm version ${target} -ws --no-git-tag-version && node scripts/sync-versions.js && npm install --package-lock-only --ignore-scripts`);
}
// npm version can temporarily install the previous workspace versions before
// sync-versions updates inter-package ranges. Remove those stale lock entries,
// refresh the lockfile, then hydrate from the final dependency graph.
removeStaleWorkspaceLockEntries();
run("npm install --package-lock-only --ignore-scripts");
run("npm ci --ignore-scripts");
return getVersion();
}