{"_id":"@black-magic/wp-site-maintenance","_rev":"8-1d30bdda07a51feda7050b8ba6e0e15e","name":"@black-magic/wp-site-maintenance","dist-tags":{"latest":"0.0.10"},"versions":{"0.0.2":{"name":"@black-magic/wp-site-maintenance","version":"0.0.2","_id":"@black-magic/wp-site-maintenance@0.0.2","maintainers":[{"name":"heyblackmagic","email":"jorge@heyblackmagic.com"},{"name":"iniciatico","email":"anuar@hey.com"},{"name":"arisbeth","email":"arisbeth.hg@gmail.com"},{"name":"dianyela-maldonado","email":"dianyela.y.maldonado@gmail.com"}],"bin":{"wp-maintenance":"dist/index.js"},"dist":{"shasum":"ec178320c126bae52203958f8c5a0dc2112a42ab","tarball":"https://registry.npmjs.org/@black-magic/wp-site-maintenance/-/wp-site-maintenance-0.0.2.tgz","fileCount":16,"integrity":"sha512-pGtzmBZk2/SrsdUJkG/U8TFCCvHQ6RVNFsEMKWxesOQT1mmZ9bZ8+7igdAgoq4/+e87xP9Bu7tAvovjEgz23Pw==","signatures":[{"sig":"MEUCIQChINZ/bomi8LEMtv1ou2FbmOrmVH2f2YHQ0q66mZ5dGwIgeKmakDE4A+VWb1y/cyIxADG0RLnQa8dHh5l0ojrUIpU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":65645},"type":"module","_from":"file:black-magic-wp-site-maintenance-0.0.2.tgz","scripts":{"dev":"tsx src/index.ts","build":"tsup src/index.ts --format esm --dts","changelog":"tsx scripts/generate-changelog.ts","changelog:all":"tsx scripts/generate-changelog.ts --all"},"_npmUser":{"name":"iniciatico","email":"anuar@hey.com"},"_resolved":"/private/var/folders/5l/j86xb7x15_j852l6z38c61zc0000gn/T/2592ffe300cb8b6bf6226f5bf8f137ad/black-magic-wp-site-maintenance-0.0.2.tgz","_integrity":"sha512-pGtzmBZk2/SrsdUJkG/U8TFCCvHQ6RVNFsEMKWxesOQT1mmZ9bZ8+7igdAgoq4/+e87xP9Bu7tAvovjEgz23Pw==","_npmVersion":"10.9.2","description":"CLI tool to backup and update WordPress sites on SiteGround","directories":{},"_nodeVersion":"22.14.0","dependencies":{"node-ssh":"^13.2.1","picocolors":"^1.1.1","ssh-config":"^5.1.0","@clack/prompts":"^0.9.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","tsup":"^8.3.0","husky":"^9.1.7","typescript":"^5.6.0","@types/node":"^22.0.0","@commitlint/cli":"^20.5.0","@commitlint/config-conventional":"^20.5.0"},"_npmOperationalInternal":{"tmp":"tmp/wp-site-maintenance_0.0.2_1774662515576_0.059513886137450456","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"@black-magic/wp-site-maintenance","version":"0.0.3","_id":"@black-magic/wp-site-maintenance@0.0.3","maintainers":[{"name":"heyblackmagic","email":"jorge@heyblackmagic.com"},{"name":"iniciatico","email":"anuar@hey.com"},{"name":"arisbeth","email":"arisbeth.hg@gmail.com"},{"name":"dianyela-maldonado","email":"dianyela.y.maldonado@gmail.com"}],"bin":{"wp-maintenance":"dist/index.js"},"dist":{"shasum":"715750f2f84f2ee54d4f6d545005c3237d634be8","tarball":"https://registry.npmjs.org/@black-magic/wp-site-maintenance/-/wp-site-maintenance-0.0.3.tgz","fileCount":16,"integrity":"sha512-kuhi+ux48GjwHTKPcMG+1qpIpz3OMG1f8FrN3Uieog+3UNBjpQxKazrUh82VHaN/Bj8mcscjpPJL/Io4Sj5KCQ==","signatures":[{"sig":"MEUCIHGkTZdwA/IX7g0JgGhxKw2w2nV9c2y5mhbLsW87w3k7AiEA67KHxir8+TTSZayKRzPQ9T4gcRWzXwDYuEC2bxkSLMQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":65977},"type":"module","_from":"file:black-magic-wp-site-maintenance-0.0.3.tgz","scripts":{"dev":"tsx src/index.ts","build":"tsup src/index.ts --format esm --dts","changelog":"tsx scripts/generate-changelog.ts","changelog:all":"tsx scripts/generate-changelog.ts --all"},"_npmUser":{"name":"iniciatico","email":"anuar@hey.com"},"_resolved":"/private/var/folders/5l/j86xb7x15_j852l6z38c61zc0000gn/T/5a35496708e0e9f789de1ddd91040497/black-magic-wp-site-maintenance-0.0.3.tgz","_integrity":"sha512-kuhi+ux48GjwHTKPcMG+1qpIpz3OMG1f8FrN3Uieog+3UNBjpQxKazrUh82VHaN/Bj8mcscjpPJL/Io4Sj5KCQ==","_npmVersion":"10.9.2","description":"CLI tool to backup and update WordPress sites on SiteGround","directories":{},"_nodeVersion":"22.14.0","dependencies":{"node-ssh":"^13.2.1","picocolors":"^1.1.1","ssh-config":"^5.1.0","@clack/prompts":"^0.9.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","tsup":"^8.3.0","husky":"^9.1.7","typescript":"^5.6.0","@types/node":"^22.0.0","@commitlint/cli":"^20.5.0","@commitlint/config-conventional":"^20.5.0"},"_npmOperationalInternal":{"tmp":"tmp/wp-site-maintenance_0.0.3_1774663030737_0.6431230427940808","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"name":"@black-magic/wp-site-maintenance","version":"0.0.4","_id":"@black-magic/wp-site-maintenance@0.0.4","maintainers":[{"name":"heyblackmagic","email":"jorge@heyblackmagic.com"},{"name":"iniciatico","email":"anuar@hey.com"},{"name":"arisbeth","email":"arisbeth.hg@gmail.com"},{"name":"dianyela-maldonado","email":"dianyela.y.maldonado@gmail.com"}],"bin":{"wp-maintenance":"dist/index.js"},"dist":{"shasum":"14395b01c0e45df1252f7b490a41d247f47fbdd7","tarball":"https://registry.npmjs.org/@black-magic/wp-site-maintenance/-/wp-site-maintenance-0.0.4.tgz","fileCount":4,"integrity":"sha512-zOr4dPrsvnq9Afr0y3Oby/NvsSBjL/p/Oz79iPjYaIF0nNhQ9Kej2T65bf7F3WYYSoms54Vq9lzcDBG1HkCRrQ==","signatures":[{"sig":"MEUCICvJhZSvdK/I9uSDTd9iljzNfej2Yzi+W4D9QIcM9wFnAiEA3O9/Z8aGk4OvJApPjQXvw+kFNxZlJVfPDk8QSoWhmJw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":24891},"type":"module","_from":"file:black-magic-wp-site-maintenance-0.0.4.tgz","scripts":{"dev":"tsx src/index.ts","build":"tsup src/index.ts --format esm --dts","changelog":"tsx scripts/generate-changelog.ts","changelog:all":"tsx scripts/generate-changelog.ts --all"},"_npmUser":{"name":"iniciatico","email":"anuar@hey.com"},"_resolved":"/private/var/folders/5l/j86xb7x15_j852l6z38c61zc0000gn/T/6c0b5b9defa0bd586c6ecf7fb1dfed3e/black-magic-wp-site-maintenance-0.0.4.tgz","_integrity":"sha512-zOr4dPrsvnq9Afr0y3Oby/NvsSBjL/p/Oz79iPjYaIF0nNhQ9Kej2T65bf7F3WYYSoms54Vq9lzcDBG1HkCRrQ==","_npmVersion":"10.9.2","description":"CLI tool to backup and update WordPress sites on SiteGround","directories":{},"_nodeVersion":"22.14.0","dependencies":{"node-ssh":"^13.2.1","picocolors":"^1.1.1","ssh-config":"^5.1.0","@clack/prompts":"^0.9.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","tsup":"^8.3.0","husky":"^9.1.7","typescript":"^5.6.0","@types/node":"^22.0.0","@commitlint/cli":"^20.5.0","@commitlint/config-conventional":"^20.5.0"},"_npmOperationalInternal":{"tmp":"tmp/wp-site-maintenance_0.0.4_1774663655208_0.781251656902773","host":"s3://npm-registry-packages-npm-production"}},"0.0.5":{"name":"@black-magic/wp-site-maintenance","version":"0.0.5","_id":"@black-magic/wp-site-maintenance@0.0.5","maintainers":[{"name":"heyblackmagic","email":"jorge@heyblackmagic.com"},{"name":"iniciatico","email":"anuar@hey.com"},{"name":"arisbeth","email":"arisbeth.hg@gmail.com"},{"name":"dianyela-maldonado","email":"dianyela.y.maldonado@gmail.com"}],"bin":{"wp-maintenance":"dist/index.js"},"dist":{"shasum":"4623547acaa527591fd6ff2784831c7bbd6d82fe","tarball":"https://registry.npmjs.org/@black-magic/wp-site-maintenance/-/wp-site-maintenance-0.0.5.tgz","fileCount":4,"integrity":"sha512-ZMMa2zz7GzaX9DySmbm+sZZd9zhrKEMVaEuMRLJCZwgE5dO/Z70ZGaBWxf2khCNoVg98/S+DctcQ0lvNLgrDJQ==","signatures":[{"sig":"MEUCIQCY/mSw7apux9tv307el3DjwAZTjI8HHRpolAPAHZLe+wIgR8b94471jq941ffy6izhsSYhSKu4LLbVP/eOjzlo6GU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":27471},"type":"module","_from":"file:black-magic-wp-site-maintenance-0.0.5.tgz","scripts":{"dev":"tsx src/index.ts","build":"tsup src/index.ts --format esm --dts","changelog":"tsx scripts/generate-changelog.ts","changelog:all":"tsx scripts/generate-changelog.ts --all"},"_npmUser":{"name":"iniciatico","email":"anuar@hey.com"},"_resolved":"/private/var/folders/5l/j86xb7x15_j852l6z38c61zc0000gn/T/f2b7be0248976b4c70717c6970a8373f/black-magic-wp-site-maintenance-0.0.5.tgz","_integrity":"sha512-ZMMa2zz7GzaX9DySmbm+sZZd9zhrKEMVaEuMRLJCZwgE5dO/Z70ZGaBWxf2khCNoVg98/S+DctcQ0lvNLgrDJQ==","_npmVersion":"10.9.2","description":"CLI tool to backup and update WordPress sites on SiteGround","directories":{},"_nodeVersion":"22.14.0","dependencies":{"node-ssh":"^13.2.1","picocolors":"^1.1.1","ssh-config":"^5.1.0","@clack/prompts":"^0.9.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","tsup":"^8.3.0","husky":"^9.1.7","typescript":"^5.6.0","@types/node":"^22.0.0","@commitlint/cli":"^20.5.0","@commitlint/config-conventional":"^20.5.0"},"_npmOperationalInternal":{"tmp":"tmp/wp-site-maintenance_0.0.5_1775007497446_0.8484186896340076","host":"s3://npm-registry-packages-npm-production"}},"0.0.7":{"name":"@black-magic/wp-site-maintenance","version":"0.0.7","_id":"@black-magic/wp-site-maintenance@0.0.7","maintainers":[{"name":"heyblackmagic","email":"jorge@heyblackmagic.com"},{"name":"iniciatico","email":"anuar@hey.com"},{"name":"arisbeth","email":"arisbeth.hg@gmail.com"},{"name":"dianyela-maldonado","email":"dianyela.y.maldonado@gmail.com"}],"bin":{"wp-maintenance":"dist/index.js"},"dist":{"shasum":"76e2a3bfb95061147bf652da55c346a1dd511424","tarball":"https://registry.npmjs.org/@black-magic/wp-site-maintenance/-/wp-site-maintenance-0.0.7.tgz","fileCount":4,"integrity":"sha512-aW6EsxO30ahg8Pq9brUpYTF42xhYRTiOVX66Bo6iUiXzayyXa5ULTSeYQMId1DfrKek5vFXqOlHtUnKwg4WxaQ==","signatures":[{"sig":"MEUCICcf81+vp8j4lrdjWKNhFLgxkJQcKK/CivIkTdhk98r7AiEAlKbttWMRV8j7nQDi+22hU4tKzapVWbiY800jzRAwyPE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37415},"type":"module","_from":"file:black-magic-wp-site-maintenance-0.0.7.tgz","scripts":{"dev":"tsx src/index.ts","build":"tsup src/index.ts --format esm --dts","changelog":"tsx scripts/generate-changelog.ts","changelog:all":"tsx scripts/generate-changelog.ts --all"},"_npmUser":{"name":"iniciatico","email":"anuar@hey.com"},"_resolved":"/private/var/folders/5l/j86xb7x15_j852l6z38c61zc0000gn/T/0e34ad06188f8e67db62cb2b963670a6/black-magic-wp-site-maintenance-0.0.7.tgz","_integrity":"sha512-aW6EsxO30ahg8Pq9brUpYTF42xhYRTiOVX66Bo6iUiXzayyXa5ULTSeYQMId1DfrKek5vFXqOlHtUnKwg4WxaQ==","_npmVersion":"10.9.2","description":"CLI tool to backup and update WordPress sites on SiteGround","directories":{},"_nodeVersion":"22.14.0","dependencies":{"node-ssh":"^13.2.1","picocolors":"^1.1.1","ssh-config":"^5.1.0","@clack/prompts":"^0.9.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","tsup":"^8.3.0","husky":"^9.1.7","typescript":"^5.6.0","@types/node":"^22.0.0","@commitlint/cli":"^20.5.0","@commitlint/config-conventional":"^20.5.0"},"_npmOperationalInternal":{"tmp":"tmp/wp-site-maintenance_0.0.7_1775179563447_0.9829314625144789","host":"s3://npm-registry-packages-npm-production"}},"0.0.8":{"name":"@black-magic/wp-site-maintenance","version":"0.0.8","_id":"@black-magic/wp-site-maintenance@0.0.8","maintainers":[{"name":"heyblackmagic","email":"jorge@heyblackmagic.com"},{"name":"iniciatico","email":"anuar@hey.com"},{"name":"arisbeth","email":"arisbeth.hg@gmail.com"},{"name":"dianyela-maldonado","email":"dianyela.y.maldonado@gmail.com"}],"bin":{"wp-maintenance":"dist/index.js"},"dist":{"shasum":"86c31803ee2cb9fd05593a6b0628c6d86facf754","tarball":"https://registry.npmjs.org/@black-magic/wp-site-maintenance/-/wp-site-maintenance-0.0.8.tgz","fileCount":4,"integrity":"sha512-BsbDBnhSML1DQhih6HDGpkgaxyA9/sTo/xJnoXlPAksvP7m8wYlAmcSeAZeuQb0HCiwvgUPhVf2kq0+VrYERRw==","signatures":[{"sig":"MEUCIAGwzm/1rqs2SXVwBtJy00E94sr5CGCYAEVP+ER8u2ydAiEA3XGGLCw1x+hGX/GhSJNrEu5dtj7dtS9xHpNtVA2TuXE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37942},"type":"module","_from":"file:black-magic-wp-site-maintenance-0.0.8.tgz","scripts":{"dev":"tsx src/index.ts","build":"tsup src/index.ts --format esm --dts","changelog":"tsx scripts/generate-changelog.ts","changelog:all":"tsx scripts/generate-changelog.ts --all"},"_npmUser":{"name":"iniciatico","email":"anuar@hey.com"},"_resolved":"/private/var/folders/5l/j86xb7x15_j852l6z38c61zc0000gn/T/c10cd811de147d808d95731885d7ab97/black-magic-wp-site-maintenance-0.0.8.tgz","_integrity":"sha512-BsbDBnhSML1DQhih6HDGpkgaxyA9/sTo/xJnoXlPAksvP7m8wYlAmcSeAZeuQb0HCiwvgUPhVf2kq0+VrYERRw==","_npmVersion":"10.9.2","description":"CLI tool to backup and update WordPress sites on SiteGround","directories":{},"_nodeVersion":"22.14.0","dependencies":{"node-ssh":"^13.2.1","picocolors":"^1.1.1","ssh-config":"^5.1.0","@clack/prompts":"^0.9.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","tsup":"^8.3.0","husky":"^9.1.7","typescript":"^5.6.0","@types/node":"^22.0.0","@commitlint/cli":"^20.5.0","@commitlint/config-conventional":"^20.5.0"},"_npmOperationalInternal":{"tmp":"tmp/wp-site-maintenance_0.0.8_1775179968606_0.5906170387852785","host":"s3://npm-registry-packages-npm-production"}},"0.0.9":{"name":"@black-magic/wp-site-maintenance","version":"0.0.9","_id":"@black-magic/wp-site-maintenance@0.0.9","maintainers":[{"name":"heyblackmagic","email":"jorge@heyblackmagic.com"},{"name":"iniciatico","email":"anuar@hey.com"},{"name":"arisbeth","email":"arisbeth.hg@gmail.com"},{"name":"dianyela-maldonado","email":"dianyela.y.maldonado@gmail.com"}],"bin":{"wp-maintenance":"dist/index.js"},"dist":{"shasum":"f33d52b04cc3110a0192d739d5dd3e6831062997","tarball":"https://registry.npmjs.org/@black-magic/wp-site-maintenance/-/wp-site-maintenance-0.0.9.tgz","fileCount":4,"integrity":"sha512-y0JTUv/L/FhJ4ODTneMJf5KRP2N/uBguGNKjObfW0GgHLjAh6YmuinOITO2BVyN6DcQpM8xAdJHEwDqXy6JYCA==","signatures":[{"sig":"MEUCIQCQFn8pw/LmhmYiwk9pzo7X1cnHLvn2+Rr0KLsbsD6lowIgZ44GOZLphTgVsyfFntYYHLy9MCq2tD6dJZwlHhsoKFU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":38154},"type":"module","_from":"file:black-magic-wp-site-maintenance-0.0.9.tgz","scripts":{"dev":"tsx src/index.ts","build":"tsup src/index.ts --format esm --dts","changelog":"tsx scripts/generate-changelog.ts","changelog:all":"tsx scripts/generate-changelog.ts --all"},"_npmUser":{"name":"iniciatico","email":"anuar@hey.com"},"_resolved":"/private/var/folders/5l/j86xb7x15_j852l6z38c61zc0000gn/T/21687536a723ee54232ab1897c289811/black-magic-wp-site-maintenance-0.0.9.tgz","_integrity":"sha512-y0JTUv/L/FhJ4ODTneMJf5KRP2N/uBguGNKjObfW0GgHLjAh6YmuinOITO2BVyN6DcQpM8xAdJHEwDqXy6JYCA==","_npmVersion":"10.9.2","description":"CLI tool to backup and update WordPress sites on SiteGround","directories":{},"_nodeVersion":"22.14.0","dependencies":{"node-ssh":"^13.2.1","picocolors":"^1.1.1","ssh-config":"^5.1.0","@clack/prompts":"^0.9.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","tsup":"^8.3.0","husky":"^9.1.7","typescript":"^5.6.0","@types/node":"^22.0.0","@commitlint/cli":"^20.5.0","@commitlint/config-conventional":"^20.5.0"},"_npmOperationalInternal":{"tmp":"tmp/wp-site-maintenance_0.0.9_1775180393357_0.32188148436976416","host":"s3://npm-registry-packages-npm-production"}},"0.0.10":{"name":"@black-magic/wp-site-maintenance","version":"0.0.10","description":"CLI tool to backup and update WordPress sites on SiteGround","type":"module","bin":{"wp-maintenance":"dist/index.js"},"dependencies":{"@clack/prompts":"^0.9.1","node-ssh":"^13.2.1","picocolors":"^1.1.1","ssh-config":"^5.1.0"},"devDependencies":{"@commitlint/cli":"^20.5.0","@commitlint/config-conventional":"^20.5.0","@types/node":"^22.0.0","husky":"^9.1.7","tsup":"^8.3.0","tsx":"^4.19.0","typescript":"^5.6.0"},"scripts":{"build":"tsup src/index.ts --format esm --dts","dev":"tsx src/index.ts","changelog":"tsx scripts/generate-changelog.ts","changelog:all":"tsx scripts/generate-changelog.ts --all"},"_id":"@black-magic/wp-site-maintenance@0.0.10","_integrity":"sha512-YsCy4wzt3Sy4FJTYXVnGTS7mw/Hs5MtENGwrUjbo8UuKNxoJyZQQf8r049/1DKjuXjfOuVM4Ik3tZt7hRQ+BJQ==","_resolved":"/private/var/folders/5l/j86xb7x15_j852l6z38c61zc0000gn/T/bbdffec6cf2e47b20f71468d9a8e8556/black-magic-wp-site-maintenance-0.0.10.tgz","_from":"file:black-magic-wp-site-maintenance-0.0.10.tgz","_nodeVersion":"22.14.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-YsCy4wzt3Sy4FJTYXVnGTS7mw/Hs5MtENGwrUjbo8UuKNxoJyZQQf8r049/1DKjuXjfOuVM4Ik3tZt7hRQ+BJQ==","shasum":"1d462bb6559c596d49b7441ed55c0cbfb613fe5e","tarball":"https://registry.npmjs.org/@black-magic/wp-site-maintenance/-/wp-site-maintenance-0.0.10.tgz","fileCount":4,"unpackedSize":38146,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQC4FZyNI6AHIFasftcpVSERVnkyLud2lSngOAYpqaUZHQIhAPtur0ySFLoJCmvnG3ukxtXU+ytb78aUdd3/QFWeS1di"}]},"_npmUser":{"name":"iniciatico","email":"anuar@hey.com"},"directories":{},"maintainers":[{"name":"heyblackmagic","email":"jorge@heyblackmagic.com"},{"name":"iniciatico","email":"anuar@hey.com"},{"name":"arisbeth","email":"arisbeth.hg@gmail.com"},{"name":"dianyela-maldonado","email":"dianyela.y.maldonado@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/wp-site-maintenance_0.0.10_1775181118358_0.7762071379313749"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-28T01:48:35.496Z","modified":"2026-04-03T01:51:58.740Z","0.0.2":"2026-03-28T01:48:35.731Z","0.0.3":"2026-03-28T01:57:10.892Z","0.0.4":"2026-03-28T02:07:35.400Z","0.0.5":"2026-04-01T01:38:17.594Z","0.0.7":"2026-04-03T01:26:03.609Z","0.0.8":"2026-04-03T01:32:48.756Z","0.0.9":"2026-04-03T01:39:53.513Z","0.0.10":"2026-04-03T01:51:58.510Z"},"description":"CLI tool to backup and update WordPress sites on SiteGround","maintainers":[{"name":"heyblackmagic","email":"jorge@heyblackmagic.com"},{"name":"iniciatico","email":"anuar@hey.com"},{"name":"arisbeth","email":"arisbeth.hg@gmail.com"},{"name":"dianyela-maldonado","email":"dianyela.y.maldonado@gmail.com"}],"readme":"# wp-site-maintenance\n\nCLI tool to automate WordPress maintenance on SiteGround-hosted sites. Connects via SSH, creates backups (DB + wp-config.php + per-plugin compressed tars), updates plugins one by one and WordPress core, and automatically rolls back on failure.\n\n## Installation\n\n```bash\n# Run without installing\npnpm dlx @black-magic/wp-site-maintenance\n\n# Or install globally\npnpm add -g @black-magic/wp-site-maintenance\n```\n\n## Setup\n\nCreate a `.wp-maintenance.json` file in the directory where you'll run the command, or in `~/` for global use:\n\n```json\n{\n  \"localBackupDir\": \"~/wp-backups\",\n  \"sites\": [\n    {\n      \"sshAlias\": \"my-wp-site\",\n      \"siteDir\": \"example.com\"\n    }\n  ]\n}\n```\n\n`localBackupDir` is optional — defaults to `~/wp-backups`. Backups are saved as `{localBackupDir}/{siteDir}/{timestamp}.tar.gz`.\n\nYou can also specify a config file explicitly:\n\n```bash\nwp-maintenance --config /path/to/config.json\n```\n\n### Non-standard paths\n\nSome WordPress installations (e.g. Bedrock/Roots) keep plugins and `wp-config.php` outside the standard locations. Use `pluginsDir` and `wpConfigPath` to override:\n\n```json\n{\n  \"sites\": [\n    {\n      \"sshAlias\": \"my-bedrock-site\",\n      \"siteDir\": \"example.com\",\n      \"pluginsDir\": \"public_html/app/plugins\",\n      \"wpConfigPath\": \"../wp-config.php\"\n    }\n  ]\n}\n```\n\nBoth are relative to the site root (`$HOME/www/{siteDir}/`) and optional:\n- `pluginsDir` defaults to `wp-content/plugins`\n- `wpConfigPath` defaults to `wp-config.php`\n\n### SSH connection options\n\n**Option A — SSH config alias (recommended)**\n\n```json\n{ \"sshAlias\": \"my-wp-site\", \"siteDir\": \"example.com\" }\n```\n\n`~/.ssh/config` entry:\n\n```\nHost my-wp-site\n  HostName ssh.example.siteground.com\n  User u1234-abc12def34gh\n  Port 18765\n  IdentityFile ~/.ssh/id_rsa_siteground\n```\n\nIf `IdentityFile` is omitted, the SSH agent (`SSH_AUTH_SOCK`) is used automatically.\n\n**Option B — explicit credentials**\n\n```json\n{\n  \"ssh\": {\n    \"host\": \"ssh.example.siteground.com\",\n    \"username\": \"u1234-abc12def34gh\",\n    \"port\": 18765,\n    \"privateKeyPath\": \"~/.ssh/id_rsa_siteground\"\n  },\n  \"siteDir\": \"example.com\"\n}\n```\n\n## Usage\n\n```bash\nwp-maintenance             # interactive update\nwp-maintenance --dry-run   # preview pending updates without making changes\nwp-maintenance --status    # check last run status for all configured sites\nwp-maintenance --version   # print the installed version\nwp-maintenance --config /path/to/config.json\n```\n\nDuring development:\n\n```bash\npnpm dev\npnpm dev -- --dry-run\npnpm dev -- --status\n```\n\n### Normal mode\n\n1. Select which sites to update (multi-select)\n2. Confirm\n3. For each site, sequentially:\n   - Shows working directory on the remote server\n   - Creates a timestamped backup: DB, `wp-config.php`, and a `.tar.gz` per updated plugin\n   - Compresses the entire backup and downloads it locally via SCP\n   - Deletes the remote backup folder only after all updates succeed\n   - Updates plugins one by one, then WordPress core\n   - **On failure:** automatically rolls back to the pre-update state\n4. Shows a summary with local backup path per site\n\n### Dry-run mode (`--dry-run`)\n\nConnects via SSH, checks for pending plugin and core updates, and prints what would be updated — without making any changes or requiring confirmation.\n\n### Status mode (`--status`)\n\nConnects to each configured site and reads `.wp-maintenance-status.json` to show the result of the last maintenance run. No changes are made.\n\n```\n✓  example.com      success        2026-04-03 10:15  Yoast SEO 22.1→22.2, WordPress 6.4.1→6.5.0\n⚠  other.com        failed_update  2026-03-28 09:12  Failed on: woocommerce\n✗  broken.com       failed_rollback 2026-03-15 09:12  ← REQUIRES MANUAL INTERVENTION\n–  new.com          never run\n```\n\n## What gets backed up\n\nBefore any updates, the tool creates a backup on the remote server at `$HOME/www/{siteDir}/.wp-backups/{timestamp}/`:\n\n| File | Description |\n|------|-------------|\n| `db.sql` | Full database dump via `wp db export` |\n| `wp-config.php` | Copy of the site's config file |\n| `plugins/{slug}.tar.gz` | Compressed backup of each plugin being updated |\n\nOnly plugins that are actually being updated are backed up — not the entire `wp-content/plugins/` directory.\n\nThe backup folder is then compressed into a `.tar.gz` and downloaded to your local machine at `{localBackupDir}/{siteDir}/{timestamp}.tar.gz`. The remote folder is deleted after a successful download — if the download fails, the remote copy is kept.\n\nAfter a successful run, each site also has a status file at `$HOME/www/{siteDir}/.wp-maintenance-status.json` with the result of the last operation.\n\n## License errors\n\nIf a plugin update fails because the license is expired or invalid (WP-CLI outputs `\"Check your license details first\"`), the plugin is **skipped** — no rollback is triggered and the remaining updates continue. The summary shows:\n\n```\n⚠ Advanced Custom Fields Pro  6.2.0  skipped — license error\n```\n\n## Auto-rollback\n\nIf any plugin or core update fails for any other reason, the tool immediately rolls back:\n\n**Plugin failure:**\n1. Restore each backed-up plugin directory from its `.tar.gz`\n2. Restore the database via `wp db import`\n\n**Core failure:**\n1. Restore all backed-up plugin directories\n2. Re-download the previous core version via `wp core download --version={old} --force`\n3. Restore the database\n\nThe final summary distinguishes three states:\n\n| State | Meaning |\n|-------|---------|\n| ✓ Updated | All updates succeeded |\n| ⚠ Rolled back | An update failed, site restored to pre-update state |\n| ✗ Critical | An update failed **and** rollback also failed — manual intervention required |\n\n## Update order\n\nPlugins are updated first, then WordPress core. If a plugin fails, core is still at the old version and the rollback is clean.\n\nWhen multiple core updates are available (e.g. a minor `6.8.5` and a major `6.9.4`), the tool always applies the **latest** available version. Dry-run lists all of them with their type so you have full visibility before committing.\n\n## Build\n\n```bash\npnpm build   # Compiles to dist/index.js (ESM bundle)\n```\n\n## Commit conventions\n\nThis project uses [Conventional Commits](https://www.conventionalcommits.org/), enforced via `commitlint` on every commit:\n\n```\nfeat: add dry-run flag\nfix: handle SSH timeout gracefully\nchore: update dependencies\n```\n\nTo regenerate `CHANGELOG.md` from commit history:\n\n```bash\npnpm changelog        # from last tag to HEAD\npnpm changelog:all    # entire history\npnpm changelog v1.0.0 # from a specific tag\n```\n\n## SiteGround SSH notes\n\n- SSH port is `18765`, not `22`\n- Home directory: `/home/{username}/`, sites under `/home/{username}/www/{domain}/`\n- WP-CLI is available as `wp` — no PHP binary prefix needed\n- WordPress files at `$HOME/www/{domain}/`, database connection from `wp-config.php`\n","readmeFilename":"README.md"}