{"_id":"@davidsneighbour/nanny","_rev":"7-b09a78e8765e782dd9cfaf387eddb986","name":"@davidsneighbour/nanny","dist-tags":{"latest":"0.5.0"},"versions":{"0.1.3":{"name":"@davidsneighbour/nanny","version":"0.1.3","_id":"@davidsneighbour/nanny@0.1.3","maintainers":[{"name":"davidsneighbour","email":"pkollitsch@gmail.com"}],"bin":{"nanny":"dist/cli.js"},"dist":{"shasum":"7972f8ea19444274c2c5fd4949475ce47438218a","tarball":"https://registry.npmjs.org/@davidsneighbour/nanny/-/nanny-0.1.3.tgz","fileCount":9,"integrity":"sha512-6VPAuMANRmZbaKfd+eN4j46PdjRobfy8+4FA6XRpGGXKv5vCYDy2Uu1gv17p/5pFRjDVhIiQcqswwRtgIwRZJg==","signatures":[{"sig":"MEUCIQCcvFmSo3R70cY/FBmFUuUxIvSbz1AJb7sRFVDpUCpXqAIgUNL01tZVwis2sqsqv7F233HTE4H2gEPtbGMGxmdPXuQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":29105},"type":"module","wireit":{"release":{"command":"commit-and-tag-version --sign -a -t \"v\" --releaseCommitMessageFormat \"chore(release): v{{currentTag}}\" -- --no-verify"}},"engines":{"node":">=24"},"gitHead":"59fc29f36beb3ea171e5fdc70b253527a214e9c4","scripts":{"ci":"npm run typecheck && npm run build","build":"tsc -p tsconfig.json","release":"wireit","typecheck":"tsc -p tsconfig.json --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"davidsneighbour","email":"pkollitsch@gmail.com"},"_npmVersion":"11.10.0","description":"Repo management and maintenance CLI for davidsneighbour projects.","directories":{},"_nodeVersion":"24.13.1","dependencies":{"glob":"13.0.6","fast-glob":"3.3.3","jsonc-parser":"3.3.1","@davidsneighbour/release-config":"2026.0.2"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"5.9.3","@types/node":"25.3.0"},"_npmOperationalInternal":{"tmp":"tmp/nanny_0.1.3_1771728644945_0.21116092892532","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@davidsneighbour/nanny","version":"0.1.5","_id":"@davidsneighbour/nanny@0.1.5","maintainers":[{"name":"davidsneighbour","email":"pkollitsch@gmail.com"}],"homepage":"https://github.com/davidsneighbour/nanny#readme","bugs":{"url":"https://github.com/davidsneighbour/nanny/issues"},"bin":{"nanny":"dist/cli.js"},"dist":{"shasum":"340bc54a631f07f4f972acec30ecd9bf135d9c67","tarball":"https://registry.npmjs.org/@davidsneighbour/nanny/-/nanny-0.1.5.tgz","fileCount":9,"integrity":"sha512-o1UBT4nrL6LUoNgOb5Q5ezzGCFCa6HkiEqE6LoOYblPr9aiwhZKjcLfpRqt2VdIYv8VmC2ZGmRMSSFYUF5k1Kg==","signatures":[{"sig":"MEYCIQDGR7Vj/BGrMLmgUJkRMre17Wq9p1sawFnGe+kXpquYCQIhAJSXjhBPawjR7LIXg0fIIv+WAmcp1WFp9i88SEFYiTQI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@davidsneighbour%2fnanny@0.1.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":29054},"type":"module","engines":{"node":">=24"},"gitHead":"7aae2f251a7a2ddb0fa865b26e656f795c382b26","scripts":{"ci":"npm run typecheck && npm run build","build":"tsc -p tsconfig.json","typecheck":"tsc -p tsconfig.json --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:13235ca1-1553-4689-ab5a-2786b5c3f9f0"}},"repository":{"url":"git+https://github.com/davidsneighbour/nanny.git","type":"git"},"_npmVersion":"11.14.1","description":"Repo management and maintenance CLI for davidsneighbour projects.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"fast-glob":"3.3.3","release-it":"20.0.1","jsonc-parser":"3.3.1","@release-it/conventional-changelog":"11.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"6.0.3","@types/node":"25.9.0"},"_npmOperationalInternal":{"tmp":"tmp/nanny_0.1.5_1779178379661_0.08773914747862777","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@davidsneighbour/nanny","version":"0.2.0","_id":"@davidsneighbour/nanny@0.2.0","maintainers":[{"name":"davidsneighbour","email":"pkollitsch@gmail.com"}],"homepage":"https://github.com/davidsneighbour/nanny#readme","bugs":{"url":"https://github.com/davidsneighbour/nanny/issues"},"bin":{"nanny":"dist/cli.js"},"dist":{"shasum":"dd2b5b8911caf27cebcbcf00bc6b44b3cf576c79","tarball":"https://registry.npmjs.org/@davidsneighbour/nanny/-/nanny-0.2.0.tgz","fileCount":9,"integrity":"sha512-9xThMtTPaF+XT4s+a+a3v6fmdtOsH9RkS3GkANr7XsWbpSib/VfHNunzEQrlaQPShoXJhQzHBLkbw4OlufuhsA==","signatures":[{"sig":"MEYCIQDEqi22pkpveDb7vWcDKVyTWDuawMdMrnUP11D1K4592gIhAN2YZ/TSnE3WB1zw4JjEtujKbSSISjGgTbfO7lYOyCN9","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@davidsneighbour%2fnanny@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":29097},"type":"module","engines":{"node":">=24"},"gitHead":"a39e896df1ac3d1308e1dde2e66db60265500fdd","scripts":{"ci":"npm run typecheck && npm run build","build":"tsc -p tsconfig.json","release":"npm run ci && release-it","typecheck":"tsc -p tsconfig.json --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:13235ca1-1553-4689-ab5a-2786b5c3f9f0"}},"repository":{"url":"git+https://github.com/davidsneighbour/nanny.git","type":"git"},"_npmVersion":"11.12.1","description":"Repo management and maintenance CLI for davidsneighbour projects.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"fast-glob":"3.3.3","release-it":"20.0.1","jsonc-parser":"3.3.1","@release-it/conventional-changelog":"11.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"6.0.3","@types/node":"25.9.0"},"_npmOperationalInternal":{"tmp":"tmp/nanny_0.2.0_1779180737121_0.8175348708030661","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@davidsneighbour/nanny","version":"0.3.0","_id":"@davidsneighbour/nanny@0.3.0","maintainers":[{"name":"davidsneighbour","email":"pkollitsch@gmail.com"}],"homepage":"https://github.com/davidsneighbour/nanny#readme","bugs":{"url":"https://github.com/davidsneighbour/nanny/issues"},"bin":{"nanny":"dist/cli.js"},"dist":{"shasum":"87bb515bfb5e1f8b70a0008a4dcc5331f7744167","tarball":"https://registry.npmjs.org/@davidsneighbour/nanny/-/nanny-0.3.0.tgz","fileCount":11,"integrity":"sha512-E/5j841qf5qyRIDV4lThHpEwJEvEY3FlxDe9yXpf8FU378qBkit1gAS/VO10RRMSNLJMMLvd1GRVFFsgXOduow==","signatures":[{"sig":"MEUCIQDgqz5cirzjcan2EP9ukxjUeCU0jeBzTU47J6dkg4GtKAIgDtRKvCqYwTEkCNcghYj65Li+UJwONV2sHFpDJpJ4OI4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@davidsneighbour%2fnanny@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":36816},"type":"module","engines":{"node":">=24"},"gitHead":"05fb9b4151fbd4d3fee3d20f3fa61e34df5ce7c9","scripts":{"ci":"npm run typecheck && npm run build","build":"tsc -p tsconfig.json","release":"npm run ci && release-it","typecheck":"tsc -p tsconfig.json --noEmit","prepublishOnly":"npm run build","test:package-init":"npm run build && node dist/tests/package-init.test.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:13235ca1-1553-4689-ab5a-2786b5c3f9f0"}},"repository":{"url":"git+https://github.com/davidsneighbour/nanny.git","type":"git"},"_npmVersion":"11.12.1","description":"Repo management and maintenance CLI for davidsneighbour projects.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"fast-glob":"3.3.3","release-it":"20.0.1","jsonc-parser":"3.3.1","@release-it/conventional-changelog":"11.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"6.0.3","@types/node":"25.9.1"},"_npmOperationalInternal":{"tmp":"tmp/nanny_0.3.0_1779227228604_0.5859618912298665","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@davidsneighbour/nanny","version":"0.4.0","_id":"@davidsneighbour/nanny@0.4.0","maintainers":[{"name":"davidsneighbour","email":"pkollitsch@gmail.com"}],"homepage":"https://github.com/davidsneighbour/nanny#readme","bugs":{"url":"https://github.com/davidsneighbour/nanny/issues"},"bin":{"nanny":"dist/cli.js"},"dist":{"shasum":"6295515530c55bfa6be16d098e8733d7fd127902","tarball":"https://registry.npmjs.org/@davidsneighbour/nanny/-/nanny-0.4.0.tgz","fileCount":13,"integrity":"sha512-lLSN4UeER6mUoA6L3vae5ZY2BrlauS6usQn0VdEPaIVQzutL1i7sd+PDpZWXKjJZgWIo1jVrJKM5WnadGWl0DA==","signatures":[{"sig":"MEUCIQDORoMIqtvXh7rvVyPMFXhTaVeheu+khVWa83Hl92Xf4wIgc6KUecUlGDRBuZbGnKEU9NPFgqsCnUl/oByxZv0UWoM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@davidsneighbour%2fnanny@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":46197},"type":"module","engines":{"node":">=24"},"gitHead":"dd1d86e9885948faf2bc95d5d511692bd957363f","scripts":{"ci":"npm run typecheck && npm run build","build":"tsc -p tsconfig.json","release":"npm run ci && release-it","typecheck":"tsc -p tsconfig.json --noEmit","prepublishOnly":"npm run build","test:package-init":"npm run build && node dist/tests/package-init.test.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:13235ca1-1553-4689-ab5a-2786b5c3f9f0"}},"repository":{"url":"git+https://github.com/davidsneighbour/nanny.git","type":"git"},"_npmVersion":"11.12.1","description":"Repo management and maintenance CLI for davidsneighbour projects.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"c12":"3.3.4","confbox":"0.2.4","fast-glob":"3.3.3","release-it":"20.0.1","@release-it/conventional-changelog":"11.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"6.0.3","@types/node":"25.9.1"},"_npmOperationalInternal":{"tmp":"tmp/nanny_0.4.0_1779232268063_0.9175490348641497","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@davidsneighbour/nanny","version":"0.4.1","_id":"@davidsneighbour/nanny@0.4.1","maintainers":[{"name":"davidsneighbour","email":"pkollitsch@gmail.com"}],"homepage":"https://github.com/davidsneighbour/nanny#readme","bugs":{"url":"https://github.com/davidsneighbour/nanny/issues"},"bin":{"nanny":"dist/cli.js"},"dist":{"shasum":"030ca85f9a5a98d007746233e0974b88c4871175","tarball":"https://registry.npmjs.org/@davidsneighbour/nanny/-/nanny-0.4.1.tgz","fileCount":3,"integrity":"sha512-YuJVyuQ4CgR7lLv/mwUn5/e/g1kz+630JGAgksXahQWbhIogTRsd8KwrQFcI/6rG0AXY0VLeynfM8Cj74QrkXg==","signatures":[{"sig":"MEUCIQD/cSN0SEFelqNkzqpg/jwAL7tSi5nvWcvS0dBQRoh9qwIgfVqfbTgWVm/GExuo72I/wqqPWUJkgKrvEu5s4ROcmYU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@davidsneighbour%2fnanny@0.4.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":6812},"type":"module","engines":{"node":">=24"},"gitHead":"dc40a91dce3523947665598dfcbe433672fbf17d","scripts":{"ci":"npm run typecheck && npm run build","build":"tsc -p tsconfig.json","release":"npm run ci && release-it","typecheck":"tsc -p tsconfig.json --noEmit","prepublishOnly":"npm run build","test:package-init":"npm run build && node dist/tests/package-init.test.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:13235ca1-1553-4689-ab5a-2786b5c3f9f0"}},"repository":{"url":"git+https://github.com/davidsneighbour/nanny.git","type":"git"},"_npmVersion":"11.13.0","description":"Repo management and maintenance CLI for davidsneighbour projects.","directories":{},"_nodeVersion":"24.17.0","dependencies":{"c12":"3.3.4","confbox":"0.2.4","fast-glob":"3.3.3","release-it":"20.2.1","@dnbhq/tsconfig":"0.1.6","@release-it/conventional-changelog":"11.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"6.0.3","@types/node":"25.9.1"},"_npmOperationalInternal":{"tmp":"tmp/nanny_0.4.1_1782690112091_0.712244229908273","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@davidsneighbour/nanny","description":"Repo management and maintenance CLI for davidsneighbour projects.","version":"0.5.0","repository":{"type":"git","url":"git+https://github.com/davidsneighbour/nanny.git"},"dependencies":{"c12":"3.3.4","confbox":"0.2.4","fast-glob":"3.3.3"},"devDependencies":{"@commitlint/cli":"21.2.1","@commitlint/config-conventional":"21.2.0","@dnbhq/tsconfig":"0.1.6","@release-it/conventional-changelog":"11.0.1","@types/node":"26.1.1","release-it":"20.2.1","simple-git-hooks":"2.13.1","typescript":"7.0.2"},"scripts":{"build":"tsc -p tsconfig.json","ci":"npm run typecheck && npm run build","prepare":"simple-git-hooks","prepublishOnly":"npm run build","release":"npm run ci && release-it","test:package-init":"npm run build && node dist/tests/package-init.test.js","typecheck":"tsc -p tsconfig.json --noEmit"},"bin":{"nanny":"dist/cli.js"},"publishConfig":{"access":"public"},"engines":{"node":">=24"},"type":"module","simple-git-hooks":{"commit-msg":"npx --no -- commitlint --edit $1"},"gitHead":"f38b7da5f62a4ea434d56f168ea5504aaf4788a5","_id":"@davidsneighbour/nanny@0.5.0","bugs":{"url":"https://github.com/davidsneighbour/nanny/issues"},"homepage":"https://github.com/davidsneighbour/nanny#readme","_nodeVersion":"24.18.0","_npmVersion":"12.0.1","dist":{"integrity":"sha512-/jPb1p/Kdaz9YzWlXhBLYxPxw/QBqeTKrh02Q4FLiGaCDVBTYb1Qn0igYD91OHhaLBgecaoh0wYLY5rkd1lrpA==","shasum":"82cbc33bd5e87f2ec9afa984998cc3935c89e5da","tarball":"https://registry.npmjs.org/@davidsneighbour/nanny/-/nanny-0.5.0.tgz","fileCount":15,"unpackedSize":64915,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@davidsneighbour%2fnanny@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIGmFq8RdW30S0ZtUPaWJgLm0CL5BYz+saYU1K3xzp+VlAiBJpywpa+s5kY0No3uxy89GExk1x7fP0qvH+mIURPpHhA=="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:13235ca1-1553-4689-ab5a-2786b5c3f9f0"}},"directories":{},"maintainers":[{"name":"davidsneighbour","email":"pkollitsch@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/nanny_0.5.0_1784844984619_0.5802712611855609"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-22T02:50:44.814Z","modified":"2026-07-23T22:16:25.093Z","0.1.3":"2026-02-22T02:50:45.112Z","0.1.5":"2026-05-19T08:12:59.827Z","0.2.0":"2026-05-19T08:52:17.271Z","0.3.0":"2026-05-19T21:47:08.786Z","0.4.0":"2026-05-19T23:11:08.222Z","0.4.1":"2026-06-28T23:41:52.227Z","0.5.0":"2026-07-23T22:16:24.770Z"},"bugs":{"url":"https://github.com/davidsneighbour/nanny/issues"},"homepage":"https://github.com/davidsneighbour/nanny#readme","repository":{"type":"git","url":"git+https://github.com/davidsneighbour/nanny.git"},"description":"Repo management and maintenance CLI for davidsneighbour projects.","maintainers":[{"name":"davidsneighbour","email":"pkollitsch@gmail.com"}],"readme":"# @davidsneighbour/nanny\n\nRepo management and maintenance CLI for @davidsneighbour's projects.\n\n- [Installation](#installation)\n- [Global usage](#global-usage)\n- [Configuration](#configuration)\n- [Commands](#commands)\n  - [package-init](#package-init)\n  - [generate-package](#generate-package)\n  - [update-package](#update-package)\n  - [merge-vscode-config](#merge-vscode-config)\n  - [check](#check)\n  - [editorconfig](#editorconfig)\n- [Tests](#tests)\n\n## Installation\n\n```bash\nnpm install -D @davidsneighbour/nanny\n```\n\n## Global usage\n\n```bash\nnanny <command> [--cwd <path>] [--verbose]\nnanny --version\n```\n\nCommands run relative to `--cwd` (defaults to the current working directory).\n\nRun `nanny --version` (or `-v`) to print the installed version.\n\nPackage fragment commands read their fragment directory from this precedence order:\n\n* `--packages-dir <path>`\n* `NANNY_PACKAGES_DIR`\n* `nanny.config.local.jsonc` in the working directory (gitignored, per-machine override)\n* Nanny configuration loaded through `c12` (repo-local, committed)\n* `src/packages`\n\n## Configuration\n\nNanny uses `c12` to find and load project configuration. JSONC parsing is handled through `confbox`, so configuration files ending in `.jsonc` are supported.\n\nThe current configuration object supports:\n\n* `packagesDir`: Directory that contains package fragments for `package-init`, `generate-package`, and `update-package`. Defaults to `src/packages`.\n\nSupported configuration locations include:\n\n* `nanny.config.ts`\n* `nanny.config.js`\n* `nanny.config.mjs`\n* `nanny.config.cjs`\n* `nanny.config.json`\n* `nanny.config.jsonc`\n* `nanny.config.yaml`\n* `nanny.config.yml`\n* `.nannyrc`\n* `.nannyrc.json`\n* `.nannyrc.jsonc`\n* `.nannyrc.yaml`\n* `.nannyrc.yml`\n* `.config/nanny.jsonc`\n* the `nanny` property in `package.json`\n\nExample `nanny.config.jsonc`:\n\n```jsonc\n{\n  // Directory that contains package fragments.\n  \"packagesDir\": \"config/package-particles\"\n}\n```\n\nExample `nanny.config.ts`:\n\n```ts\nexport default {\n  packagesDir: \"config/package-particles\",\n};\n```\n\nExample `package.json` configuration:\n\n```json\n{\n  \"nanny\": {\n    \"packagesDir\": \"config/package-particles\"\n  }\n}\n```\n\n### Local overrides\n\nA gitignored `nanny.config.local.jsonc` in the working directory overrides the repo-local config above, for per-machine settings that shouldn't be committed. It's applied after the `c12`-loaded config and before CLI flags / env vars.\n\n```jsonc\n// nanny.config.local.jsonc (gitignored)\n{\n  \"packagesDir\": \"/tmp/my-local-package-particles\"\n}\n```\n\nCLI and environment overrides still take precedence over configuration files:\n\n```bash\nnanny generate-package --packages-dir config/package-particles --dry-run\nNANNY_PACKAGES_DIR=config/package-particles nanny update-package\n```\n\n## Commands\n\n### package-init\n\nCreates the initial package fragment files expected by `update-package` and `generate-package`.\n\n```bash\nnanny package-init [--package <path>] [--packages-dir <path>] [--force] [--verbose]\n```\n\nThis command reads the current `package.json` and writes:\n\n* `<packages-dir>/legacy/starter.jsonc` with `scripts`, `dependencies`, and `devDependencies`\n* `<packages-dir>/system/default.jsonc` with all other package fields\n\nIt leaves `package.json` unchanged. Use `nanny generate-package --dry-run` afterwards to verify the generated object without overwriting the existing file.\n\nExamples:\n\n```bash\nnanny package-init\nnanny package-init --packages-dir config/package-particles\nNANNY_PACKAGES_DIR=config/package-particles nanny package-init\n```\n\n### generate-package\n\nMerges all `<packages-dir>/**/*.jsonc` into `package.json`, while preserving a configurable set of keys from the original `package.json`.\n\n```bash\nnanny generate-package [--package <path>] [--packages-dir <path>] [--keys <csv>] [--add-keys <csv>] [--dry-run] [--verbose]\n```\n\n`--keys` replaces the default list of keys preserved from `package.json`. `--add-keys` extends whatever list is in effect (the default, or `--keys` if also passed) instead of replacing it.\n\nExamples:\n\n```bash\nnanny generate-package --dry-run\nnanny generate-package --packages-dir config/package-particles --dry-run\nNANNY_PACKAGES_DIR=config/package-particles nanny generate-package --dry-run\nnanny generate-package --add-keys workspaces --dry-run\n```\n\n### update-package\n\nSynchronises dependency versions in `<packages-dir>/**/*.jsonc` against the root `package.json`, then audits:\n\n* unused root dependencies\n* scripts missing from package jsonc files\n* scripts and wireit entries that differ from root\n* duplicates across multiple jsonc files\n\n```bash\nnanny update-package [--packages-dir <path>] [--verbose]\n```\n\nExamples:\n\n```bash\nnanny update-package\nnanny update-package --packages-dir config/package-particles\nNANNY_PACKAGES_DIR=config/package-particles nanny update-package\n```\n\n### merge-vscode-config\n\nMerges `.vscode/settings.base.jsonc` and `.vscode/settings.local.jsonc` (optional) into `.vscode/settings.json`.\n\n```bash\nnanny merge-vscode-config [--base <path>] [--local <path>] [--out <path>] [--check] [--dry-run] [--verbose]\n```\n\n### check\n\nRead-only report of repo maintenance tasks. Makes no changes; exits non-zero only if actionable issues are found.\n\n```bash\nnanny check [--packages-dir <path>] [--verbose]\n```\n\nChecks:\n\n* Package fragment dependency versions, scripts, and wireit config are in sync with `package.json` (skipped if no fragments are found)\n* `.vscode/settings.json` is in sync with `.vscode/settings.base.jsonc` (skipped if no base file is found)\n* No uncommitted changes in generated files (`package.json`, `.vscode/settings.json`) — skipped outside a git repository\n\nExamples:\n\n```bash\nnanny check\nnanny check --packages-dir config/package-particles\n```\n\n### editorconfig\n\nWrites `.editorconfig` with davidsneighbour's sensible defaults if none exists. If a file already exists, its nanny-managed sections (`[*]`, `[*.md]`, `[*.{yml,yaml}]`, `[*.{json,jsonc}]`) are refreshed to the current defaults; any other section is preserved as-is.\n\n```bash\nnanny editorconfig [--out <path>] [--dry-run] [--verbose]\n```\n\nExamples:\n\n```bash\nnanny editorconfig\nnanny editorconfig --dry-run\n```\n\n## Tests\n\n```bash\nnpm run test:package-init\n```\n\nThe package init test creates a temporary fixture, runs `nanny package-init --packages-dir config/package-particles`, then runs `nanny generate-package --packages-dir config/package-particles --dry-run` and compares the generated object with the original fixture package object. It does not overwrite the repository `package.json`.\n\nExit codes:\n\n* `0` success\n* `1` invalid arguments or runtime error\n* `2` missing required files\n","readmeFilename":"README.md"}