{"_id":"@bobfrankston/bobup","_rev":"17-35f27ed18de5f482bbd301a4ebce6c74","name":"@bobfrankston/bobup","dist-tags":{"latest":"0.1.17"},"versions":{"0.1.1":{"name":"@bobfrankston/bobup","version":"0.1.1","keywords":["npm","global","update","bobfrankston"],"author":{"name":"Bob Frankston"},"license":"MIT","_id":"@bobfrankston/bobup@0.1.1","maintainers":[{"name":"bobfrankston","email":"npm@bob.ma"}],"homepage":"https://github.com/BobFrankston/bobup#readme","bugs":{"url":"https://github.com/BobFrankston/bobup/issues"},"bin":{"bobup":"cli.js"},"dist":{"shasum":"ce76e7ddd74af7d4f1e34ec74be2d3a2485ec238","tarball":"https://registry.npmjs.org/@bobfrankston/bobup/-/bobup-0.1.1.tgz","fileCount":10,"integrity":"sha512-p4F/9S2EJVMb+UAvz6IXDwmRjS1ooAYejI5tDDzn3JdNIK5qglTXGy6A1o5d32kdTm4Xmmup9o7ZhpgEosmD4A==","signatures":[{"sig":"MEQCIEGdnZvD8eMhOe0O8UFCTuwaSr/QSLN9sCkZn82pTrBPAiBXnftLt8nS7rh+XyuwETQZgSAvMo/KUwGch/QWLdkiOg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":28792},"main":"index.js","type":"module","_from":"file:bobfrankston-bobup-0.1.1.tgz","types":"index.d.ts","exports":{".":{"types":"./index.d.ts","import":"./index.js"}},"scripts":{"build":"tsc","watch":"tsc -w"},"_npmUser":{"name":"bobfrankston","email":"npm@bob.ma"},"_resolved":"Y:\\dev\\utils\\bobup\\bobfrankston-bobup-0.1.1.tgz","_integrity":"sha512-p4F/9S2EJVMb+UAvz6IXDwmRjS1ooAYejI5tDDzn3JdNIK5qglTXGy6A1o5d32kdTm4Xmmup9o7ZhpgEosmD4A==","repository":{"url":"git+ssh://git@github.com/BobFrankston/bobup.git","type":"git"},"_npmVersion":"11.12.1","description":"List and update globally-installed @bobfrankston/* npm packages","directories":{},"_nodeVersion":"25.9.0","_hasShrinkwrap":false,"devDependencies":{"@types/node":"^25.6.0"},"_npmOperationalInternal":{"tmp":"tmp/bobup_0.1.1_1777319861581_0.06380135278836674","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@bobfrankston/bobup","version":"0.1.2","keywords":["npm","global","update","bobfrankston"],"author":{"name":"Bob Frankston"},"license":"MIT","_id":"@bobfrankston/bobup@0.1.2","maintainers":[{"name":"bobfrankston","email":"npm@bob.ma"}],"homepage":"https://github.com/BobFrankston/bobup#readme","bugs":{"url":"https://github.com/BobFrankston/bobup/issues"},"bin":{"bobup":"cli.js"},"dist":{"shasum":"aa4103f3dd8cde960e4e87b14b9736adb38ad392","tarball":"https://registry.npmjs.org/@bobfrankston/bobup/-/bobup-0.1.2.tgz","fileCount":10,"integrity":"sha512-NXBJBjGwWW6N9djq+XdpjToiwU45OkV9Lq5VCd5PdgBosO7aV8t/r9iiXtmIheFOqiqg/OsuYxnC3d0aGgYDRA==","signatures":[{"sig":"MEQCIFAXuzsK9T+KrMSzCKybl/l8SerwFieCzePgQH9WaCtQAiBF+J5pPbblfOh0H6if+6rGaSgWIppjSnPOiuGooQ9pPQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":28792},"main":"index.js","type":"module","_from":"file:bobfrankston-bobup-0.1.2.tgz","types":"index.d.ts","exports":{".":{"types":"./index.d.ts","import":"./index.js"}},"scripts":{"build":"tsc","watch":"tsc -w"},"_npmUser":{"name":"bobfrankston","email":"npm@bob.ma"},"_resolved":"Y:\\dev\\utils\\bobup\\bobfrankston-bobup-0.1.2.tgz","_integrity":"sha512-NXBJBjGwWW6N9djq+XdpjToiwU45OkV9Lq5VCd5PdgBosO7aV8t/r9iiXtmIheFOqiqg/OsuYxnC3d0aGgYDRA==","repository":{"url":"git+ssh://git@github.com/BobFrankston/bobup.git","type":"git"},"_npmVersion":"11.12.1","description":"List and update globally-installed @bobfrankston/* npm packages","directories":{},"_nodeVersion":"25.9.0","_hasShrinkwrap":false,"devDependencies":{"@types/node":"^25.6.0"},"_npmOperationalInternal":{"tmp":"tmp/bobup_0.1.2_1777319935212_0.37268874106385175","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@bobfrankston/bobup","version":"0.1.3","keywords":["npm","global","update","bobfrankston"],"author":{"name":"Bob Frankston"},"license":"MIT","_id":"@bobfrankston/bobup@0.1.3","maintainers":[{"name":"bobfrankston","email":"npm@bob.ma"}],"homepage":"https://github.com/BobFrankston/bobup#readme","bugs":{"url":"https://github.com/BobFrankston/bobup/issues"},"bin":{"bobup":"cli.js"},"dist":{"shasum":"2485d940059decc494e46f6e08c8aed617ca34e0","tarball":"https://registry.npmjs.org/@bobfrankston/bobup/-/bobup-0.1.3.tgz","fileCount":10,"integrity":"sha512-UEkwHsPFcwqzJe47bmW1vpvIVEanq5lhhoyMKO1jO52Fn9wxkv0cJ3kTPFvRpuGuJ4nbbzVhx/ZRdphw58xuuw==","signatures":[{"sig":"MEUCIQCRG9i7Wr1vJqEK7X1aj5SKiunNIJrPJzEiY1J29Np0JQIgJnITQlPmT0R+v/p68ZPELuCvDd+gxKKlX+abVgxN7x8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":28792},"main":"index.js","type":"module","_from":"file:bobfrankston-bobup-0.1.3.tgz","types":"index.d.ts","exports":{".":{"types":"./index.d.ts","import":"./index.js"}},"scripts":{"build":"tsc","watch":"tsc -w"},"_npmUser":{"name":"bobfrankston","email":"npm@bob.ma"},"_resolved":"Y:\\dev\\utils\\bobup\\bobfrankston-bobup-0.1.3.tgz","_integrity":"sha512-UEkwHsPFcwqzJe47bmW1vpvIVEanq5lhhoyMKO1jO52Fn9wxkv0cJ3kTPFvRpuGuJ4nbbzVhx/ZRdphw58xuuw==","repository":{"url":"git+ssh://git@github.com/BobFrankston/bobup.git","type":"git"},"_npmVersion":"11.12.1","description":"List and update globally-installed @bobfrankston/* npm packages","directories":{},"_nodeVersion":"25.9.0","_hasShrinkwrap":false,"devDependencies":{"@types/node":"^25.6.0"},"_npmOperationalInternal":{"tmp":"tmp/bobup_0.1.3_1777319972508_0.9019706331189801","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@bobfrankston/bobup","version":"0.1.5","keywords":["npm","global","update","bobfrankston"],"author":{"name":"Bob Frankston"},"license":"MIT","_id":"@bobfrankston/bobup@0.1.5","maintainers":[{"name":"bobfrankston","email":"npm@bob.ma"}],"homepage":"https://github.com/BobFrankston/bobup#readme","bugs":{"url":"https://github.com/BobFrankston/bobup/issues"},"bin":{"bobup":"cli.js"},"dist":{"shasum":"39f750ecf629b895bf2d91f8ec816301417cb5c8","tarball":"https://registry.npmjs.org/@bobfrankston/bobup/-/bobup-0.1.5.tgz","fileCount":10,"integrity":"sha512-g7AVImvE+7UCxF7fR+naWMKZIYSIcDXVRxyaF8l4jvntw7wuki8xilTdg3DQrRXvR23LYmi1erxrBnhx3TUERA==","signatures":[{"sig":"MEQCIC2Akgcity70dtihAkjNkWbX58MJCwn5o7MyLCVbH04pAiAOAWIW+5QzMmvga799B50YFRRYol8Y0DgdFjB89uyR/A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":29694},"main":"index.js","type":"module","_from":"file:bobfrankston-bobup-0.1.5.tgz","types":"index.d.ts","exports":{".":{"types":"./index.d.ts","import":"./index.js"}},"scripts":{"build":"tsc","watch":"tsc -w"},"_npmUser":{"name":"bobfrankston","email":"npm@bob.ma"},"_resolved":"Y:\\dev\\utils\\bobup\\bobfrankston-bobup-0.1.5.tgz","_integrity":"sha512-g7AVImvE+7UCxF7fR+naWMKZIYSIcDXVRxyaF8l4jvntw7wuki8xilTdg3DQrRXvR23LYmi1erxrBnhx3TUERA==","repository":{"url":"git+ssh://git@github.com/BobFrankston/bobup.git","type":"git"},"_npmVersion":"11.12.1","description":"List and update globally-installed @bobfrankston/* npm packages","directories":{},"_nodeVersion":"25.9.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^25.6.0"},"_npmOperationalInternal":{"tmp":"tmp/bobup_0.1.5_1777320221304_0.9151425669249698","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@bobfrankston/bobup","version":"0.1.6","keywords":["npm","global","update","bobfrankston"],"author":{"name":"Bob Frankston"},"license":"MIT","_id":"@bobfrankston/bobup@0.1.6","maintainers":[{"name":"bobfrankston","email":"npm@bob.ma"}],"homepage":"https://github.com/BobFrankston/bobup#readme","bugs":{"url":"https://github.com/BobFrankston/bobup/issues"},"bin":{"bobup":"cli.js"},"dist":{"shasum":"7373ab0f88ff5cd2c397d78affef31edf83539a0","tarball":"https://registry.npmjs.org/@bobfrankston/bobup/-/bobup-0.1.6.tgz","fileCount":10,"integrity":"sha512-yHGaM2une5Zx09UT/rYxgQSAQwGU1m/EpFQvArinqP+y+1wgk1MKPaDsr5PI5zoURerLpANvqvKU7Ll5dvxmgA==","signatures":[{"sig":"MEYCIQD72n8euUXTUu9S315zSwHCF1H2FFcS55jsz+73x/8iMQIhANA3YrsJrz3n4xpT6aNPM/jonvKlBQuYWkrsZdlzjwus","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":38160},"main":"index.js","type":"module","_from":"file:bobfrankston-bobup-0.1.6.tgz","types":"index.d.ts","exports":{".":{"types":"./index.d.ts","import":"./index.js"}},"scripts":{"build":"tsc","watch":"tsc -w"},"_npmUser":{"name":"bobfrankston","email":"npm@bob.ma"},"_resolved":"Y:\\dev\\utils\\bobup\\bobfrankston-bobup-0.1.6.tgz","_integrity":"sha512-yHGaM2une5Zx09UT/rYxgQSAQwGU1m/EpFQvArinqP+y+1wgk1MKPaDsr5PI5zoURerLpANvqvKU7Ll5dvxmgA==","repository":{"url":"git+ssh://git@github.com/BobFrankston/bobup.git","type":"git"},"_npmVersion":"11.12.1","description":"List and update globally-installed @bobfrankston/* npm packages","directories":{},"_nodeVersion":"25.9.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^25.6.0"},"_npmOperationalInternal":{"tmp":"tmp/bobup_0.1.6_1777320612172_0.18272927438656095","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@bobfrankston/bobup","version":"0.1.7","keywords":["npm","global","update","bobfrankston"],"author":{"name":"Bob Frankston"},"license":"MIT","_id":"@bobfrankston/bobup@0.1.7","maintainers":[{"name":"bobfrankston","email":"npm@bob.ma"}],"homepage":"https://github.com/BobFrankston/bobup#readme","bugs":{"url":"https://github.com/BobFrankston/bobup/issues"},"bin":{"bobup":"cli.js"},"dist":{"shasum":"2a3c93b2e6360e8eeabf9f0a9305920d03911b50","tarball":"https://registry.npmjs.org/@bobfrankston/bobup/-/bobup-0.1.7.tgz","fileCount":10,"integrity":"sha512-Alv8YxLQYJ15hWP4b0cDL9WLQgFrKMT6p4JzQGnvcFR1ppOaocQrp4tmF5+hpByiR7yK/4GLEqN9mg11GvGM9Q==","signatures":[{"sig":"MEUCIQCuwIrndEiWALLZ2PaxJqeS/+/OQwVOGR6oKoGAbLUtMgIgTdayoC/Zhf7V3CFCazZG+ghqZ9Xwd3O5KXsyBLCuXXs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":48859},"main":"index.js","type":"module","_from":"file:bobfrankston-bobup-0.1.7.tgz","types":"index.d.ts","exports":{".":{"types":"./index.d.ts","import":"./index.js"}},"scripts":{"build":"tsc","watch":"tsc -w"},"_npmUser":{"name":"bobfrankston","email":"npm@bob.ma"},"_resolved":"Y:\\dev\\utils\\bobup\\bobfrankston-bobup-0.1.7.tgz","_integrity":"sha512-Alv8YxLQYJ15hWP4b0cDL9WLQgFrKMT6p4JzQGnvcFR1ppOaocQrp4tmF5+hpByiR7yK/4GLEqN9mg11GvGM9Q==","repository":{"url":"git+ssh://git@github.com/BobFrankston/bobup.git","type":"git"},"_npmVersion":"11.12.1","description":"List and update globally-installed @bobfrankston/* npm packages","directories":{},"_nodeVersion":"25.9.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^25.6.0"},"_npmOperationalInternal":{"tmp":"tmp/bobup_0.1.7_1777321929222_0.7992654639692756","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"@bobfrankston/bobup","version":"0.1.8","keywords":["npm","global","update","bobfrankston"],"author":{"name":"Bob Frankston"},"license":"MIT","_id":"@bobfrankston/bobup@0.1.8","maintainers":[{"name":"bobfrankston","email":"npm@bob.ma"}],"homepage":"https://github.com/BobFrankston/bobup#readme","bugs":{"url":"https://github.com/BobFrankston/bobup/issues"},"bin":{"bobup":"cli.js"},"dist":{"shasum":"ee93ee45a2b52f92a0ff3952d2f4defa310bb632","tarball":"https://registry.npmjs.org/@bobfrankston/bobup/-/bobup-0.1.8.tgz","fileCount":10,"integrity":"sha512-rqVCq6SRsAsUco8ZuLmGATXpyI9mqnnH9uNeKrii5aehKNycLyDrmSKy91+UdG8+KaK1oTKDcDswBJfGDKiqQA==","signatures":[{"sig":"MEUCICNt6OdyTRKiZJ63hzy+XAQYt2Soou/4WXK+2iMceFW5AiEAmf1RiaJACD/KjpIckXTjsFMegz2M+Saxdm1hqGwk3To=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":55485},"main":"index.js","type":"module","_from":"file:bobfrankston-bobup-0.1.8.tgz","types":"index.d.ts","exports":{".":{"types":"./index.d.ts","import":"./index.js"}},"scripts":{"build":"tsc","watch":"tsc -w"},"_npmUser":{"name":"bobfrankston","email":"npm@bob.ma"},"_resolved":"Y:\\dev\\utils\\bobup\\bobfrankston-bobup-0.1.8.tgz","_integrity":"sha512-rqVCq6SRsAsUco8ZuLmGATXpyI9mqnnH9uNeKrii5aehKNycLyDrmSKy91+UdG8+KaK1oTKDcDswBJfGDKiqQA==","repository":{"url":"git+ssh://git@github.com/BobFrankston/bobup.git","type":"git"},"_npmVersion":"11.12.1","description":"List and update globally-installed @bobfrankston/* npm packages","directories":{},"_nodeVersion":"25.9.0","dependencies":{"@bobfrankston/themecolors":"^0.1.6"},".dependencies":{"@bobfrankston/themecolors":"file:../themecolors"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^25.6.0"},".transformedSnapshot":{"dependencies":{"@bobfrankston/themecolors":"^0.1.6"}},"_npmOperationalInternal":{"tmp":"tmp/bobup_0.1.8_1777332442760_0.6437985079735042","host":"s3://npm-registry-packages-npm-production"}},"0.1.9":{"name":"@bobfrankston/bobup","version":"0.1.9","keywords":["npm","global","update","bobfrankston"],"author":{"name":"Bob Frankston"},"license":"MIT","_id":"@bobfrankston/bobup@0.1.9","maintainers":[{"name":"bobfrankston","email":"npm@bob.ma"}],"homepage":"https://github.com/BobFrankston/bobup#readme","bugs":{"url":"https://github.com/BobFrankston/bobup/issues"},"bin":{"bobup":"cli.js"},"dist":{"shasum":"9e62082e89b2a4c0039f21d45ed91e31affd8c8e","tarball":"https://registry.npmjs.org/@bobfrankston/bobup/-/bobup-0.1.9.tgz","fileCount":10,"integrity":"sha512-SP9YRbLIStOzUL/yzADg2ZBZ8tXwc9N9ltovr/2x1hKFeXwqCzyVssfgYzFhdXX2rou5HUjBf1yMJEoe+wfuEg==","signatures":[{"sig":"MEUCIQDUosAicY0nwGn9U8UubUHBUltwKdkJgXJV4T8/EeDsdAIgLZ7o9TpCmzmT7tDx0CZTxt4fm0JeC+QE/gDCdGsy5kU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":63206},"main":"index.js","type":"module","_from":"file:bobfrankston-bobup-0.1.9.tgz","types":"index.d.ts","exports":{".":{"types":"./index.d.ts","import":"./index.js"}},"scripts":{"build":"tsc","watch":"tsc -w"},"_npmUser":{"name":"bobfrankston","email":"npm@bob.ma"},"_resolved":"y:\\dev\\utils\\bobup\\bobfrankston-bobup-0.1.9.tgz","_integrity":"sha512-SP9YRbLIStOzUL/yzADg2ZBZ8tXwc9N9ltovr/2x1hKFeXwqCzyVssfgYzFhdXX2rou5HUjBf1yMJEoe+wfuEg==","repository":{"url":"git+ssh://git@github.com/BobFrankston/bobup.git","type":"git"},"_npmVersion":"11.13.0","description":"List and update globally-installed @bobfrankston/* npm packages","directories":{},"_nodeVersion":"25.9.0","dependencies":{"@bobfrankston/themecolors":"^0.1.6"},".dependencies":{"@bobfrankston/themecolors":"file:../themecolors"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^25.6.0"},".transformedSnapshot":{"dependencies":{"@bobfrankston/themecolors":"^0.1.6"}},"_npmOperationalInternal":{"tmp":"tmp/bobup_0.1.9_1778074862104_0.01983851494702127","host":"s3://npm-registry-packages-npm-production"}},"0.1.10":{"name":"@bobfrankston/bobup","version":"0.1.10","keywords":["npm","global","update","bobfrankston"],"author":{"name":"Bob Frankston"},"license":"MIT","_id":"@bobfrankston/bobup@0.1.10","maintainers":[{"name":"bobfrankston","email":"npm@bob.ma"}],"homepage":"https://github.com/BobFrankston/bobup#readme","bugs":{"url":"https://github.com/BobFrankston/bobup/issues"},"bin":{"bobup":"cli.js"},"dist":{"shasum":"4d597626b67bbbf05478e3c2080508c7d9469c99","tarball":"https://registry.npmjs.org/@bobfrankston/bobup/-/bobup-0.1.10.tgz","fileCount":10,"integrity":"sha512-DuG3xjRaBtg/ZpwYUgPJTtonLzpHQdnmRNyQ7CROu5bqL18OHNFF5pT0G0e8vy99Hm2/yD5l518eYJ+5MtEsEQ==","signatures":[{"sig":"MEUCIQDzRb504CXV3fUQkfPTkw6MhNFAx3xeZ0VbDetM9Hsg4wIgUrJYNXjw0U7b7L1vzNZJ8e00ADkntkAcsm4SeJq0tPM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":65682},"main":"index.js","type":"module","_from":"file:bobfrankston-bobup-0.1.10.tgz","types":"index.d.ts","exports":{".":{"types":"./index.d.ts","import":"./index.js"}},"scripts":{"build":"tsc","watch":"tsc -w"},"_npmUser":{"name":"bobfrankston","email":"npm@bob.ma"},"_resolved":"y:\\dev\\utils\\bobup\\bobfrankston-bobup-0.1.10.tgz","_integrity":"sha512-DuG3xjRaBtg/ZpwYUgPJTtonLzpHQdnmRNyQ7CROu5bqL18OHNFF5pT0G0e8vy99Hm2/yD5l518eYJ+5MtEsEQ==","repository":{"url":"git+ssh://git@github.com/BobFrankston/bobup.git","type":"git"},"_npmVersion":"11.13.0","description":"List and update globally-installed @bobfrankston/* npm packages","directories":{},"_nodeVersion":"25.9.0","dependencies":{"@bobfrankston/themecolors":"^0.1.6"},".dependencies":{"@bobfrankston/themecolors":"file:../themecolors"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^25.6.0"},".transformedSnapshot":{"dependencies":{"@bobfrankston/themecolors":"^0.1.6"}},"_npmOperationalInternal":{"tmp":"tmp/bobup_0.1.10_1778181884627_0.20343730942134997","host":"s3://npm-registry-packages-npm-production"}},"0.1.11":{"name":"@bobfrankston/bobup","version":"0.1.11","keywords":["npm","global","update","bobfrankston"],"author":{"name":"Bob Frankston"},"license":"MIT","_id":"@bobfrankston/bobup@0.1.11","maintainers":[{"name":"bobfrankston","email":"npm@bob.ma"}],"homepage":"https://github.com/BobFrankston/bobup#readme","bugs":{"url":"https://github.com/BobFrankston/bobup/issues"},"bin":{"bobup":"cli.js"},"dist":{"shasum":"b3f2d347385d539ed4f96cce4a13bde66c7b8dd0","tarball":"https://registry.npmjs.org/@bobfrankston/bobup/-/bobup-0.1.11.tgz","fileCount":10,"integrity":"sha512-yFL6VCY6DdRc3dDMKR1kIWTB0I715/BxRH2NWMPxfIiNwMKBQ7fFoRYX7HW+vTnQh9BvQi4C6tCB8Jvu026VWA==","signatures":[{"sig":"MEUCIDrXM33dcAe4g41w1/PM7+Jqf0Cvh/UxcfRxIaurYEcPAiEAihB5Kl9gpk/+rVIg4MFpzVOgh9T+X1BGD0MyMiPTelk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":66694},"main":"index.js","type":"module","_from":"file:bobfrankston-bobup-0.1.11.tgz","types":"index.d.ts","exports":{".":{"types":"./index.d.ts","import":"./index.js"}},"scripts":{"build":"tsc","watch":"tsc -w"},"_npmUser":{"name":"bobfrankston","email":"npm@bob.ma"},"_resolved":"y:\\dev\\utils\\bobup\\bobfrankston-bobup-0.1.11.tgz","_integrity":"sha512-yFL6VCY6DdRc3dDMKR1kIWTB0I715/BxRH2NWMPxfIiNwMKBQ7fFoRYX7HW+vTnQh9BvQi4C6tCB8Jvu026VWA==","repository":{"url":"git+ssh://git@github.com/BobFrankston/bobup.git","type":"git"},"_npmVersion":"11.13.0","description":"List and update globally-installed @bobfrankston/* npm packages","directories":{},"_nodeVersion":"25.9.0","dependencies":{"@bobfrankston/themecolors":"^0.1.6"},".dependencies":{"@bobfrankston/themecolors":"file:../themecolors"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^25.6.0"},".transformedSnapshot":{"dependencies":{"@bobfrankston/themecolors":"^0.1.6"}},"_npmOperationalInternal":{"tmp":"tmp/bobup_0.1.11_1778182084075_0.23197316705337667","host":"s3://npm-registry-packages-npm-production"}},"0.1.12":{"name":"@bobfrankston/bobup","version":"0.1.12","keywords":["npm","global","update","bobfrankston"],"author":{"name":"Bob Frankston"},"license":"MIT","_id":"@bobfrankston/bobup@0.1.12","maintainers":[{"name":"bobfrankston","email":"npm@bob.ma"}],"homepage":"https://github.com/BobFrankston/bobup#readme","bugs":{"url":"https://github.com/BobFrankston/bobup/issues"},"bin":{"bobup":"cli.js"},"dist":{"shasum":"4a62a2a2c446d64f4a627fb53fd9f7cd9b51d426","tarball":"https://registry.npmjs.org/@bobfrankston/bobup/-/bobup-0.1.12.tgz","fileCount":10,"integrity":"sha512-m9XvGsl3Q8/Z+DwNad9fOdXMbtJqNcYDiPfdGFl7L+G5oPaLQtIH7BAvttwkXYnDlw/Etr9LhTTz2/e9lI+x/w==","signatures":[{"sig":"MEUCIQDKS4yssEDcV+awImX2JeALXR0z5a93BOLkQf9xdhX6xAIgWtmclflCwku9CeBYkMQI3WM1BAqGv6Oz8qo8rMi3y3o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":66830},"main":"index.js","type":"module","_from":"file:bobfrankston-bobup-0.1.12.tgz","types":"index.d.ts","exports":{".":{"types":"./index.d.ts","import":"./index.js"}},"scripts":{"build":"tsc","watch":"tsc -w"},"_npmUser":{"name":"bobfrankston","email":"npm@bob.ma"},"_resolved":"y:\\dev\\utils\\bobup\\bobfrankston-bobup-0.1.12.tgz","_integrity":"sha512-m9XvGsl3Q8/Z+DwNad9fOdXMbtJqNcYDiPfdGFl7L+G5oPaLQtIH7BAvttwkXYnDlw/Etr9LhTTz2/e9lI+x/w==","repository":{"url":"git+ssh://git@github.com/BobFrankston/bobup.git","type":"git"},"_npmVersion":"11.13.0","description":"List and update globally-installed @bobfrankston/* npm packages","directories":{},"_nodeVersion":"25.9.0","dependencies":{"@bobfrankston/themecolors":"^0.1.6"},".dependencies":{"@bobfrankston/themecolors":"file:../themecolors"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^25.6.0"},".transformedSnapshot":{"dependencies":{"@bobfrankston/themecolors":"^0.1.6"}},"_npmOperationalInternal":{"tmp":"tmp/bobup_0.1.12_1778793328376_0.4848470087775101","host":"s3://npm-registry-packages-npm-production"}},"0.1.13":{"name":"@bobfrankston/bobup","version":"0.1.13","keywords":["npm","global","update","bobfrankston"],"author":{"name":"Bob Frankston"},"license":"MIT","_id":"@bobfrankston/bobup@0.1.13","maintainers":[{"name":"bobfrankston","email":"npm@bob.ma"}],"homepage":"https://github.com/BobFrankston/bobup#readme","bugs":{"url":"https://github.com/BobFrankston/bobup/issues"},"bin":{"bobup":"cli.js"},"dist":{"shasum":"5790aab90e17cafa42369e3dbb63ba6c975d0004","tarball":"https://registry.npmjs.org/@bobfrankston/bobup/-/bobup-0.1.13.tgz","fileCount":10,"integrity":"sha512-nSZ/Q0FzojTJIyBBI0jMSLOSOszNZAq2VgtR9KuchxMhaLwwkYsDdZrSgpcnDmyv5vNgs0NqUqUeG6YJkAVsAg==","signatures":[{"sig":"MEQCIFghDM9Nhoyj5RN5vJbWdNVsth6PNAWJ1lSWxyrEZq2TAiAYYGo0pQQRKldTh1Dw398bz7Trmr3LQCVRLriW8bmFiw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":69122},"main":"index.js","type":"module","_from":"file:bobfrankston-bobup-0.1.13.tgz","types":"index.d.ts","exports":{".":{"types":"./index.d.ts","import":"./index.js"}},"scripts":{"build":"tsc","watch":"tsc -w"},"_npmUser":{"name":"bobfrankston","email":"npm@bob.ma"},"_resolved":"Y:\\dev\\utils\\bobup\\bobfrankston-bobup-0.1.13.tgz","_integrity":"sha512-nSZ/Q0FzojTJIyBBI0jMSLOSOszNZAq2VgtR9KuchxMhaLwwkYsDdZrSgpcnDmyv5vNgs0NqUqUeG6YJkAVsAg==","repository":{"url":"git+ssh://git@github.com/BobFrankston/bobup.git","type":"git"},"_npmVersion":"11.13.0","description":"List and update globally-installed @bobfrankston/* npm packages","directories":{},"_nodeVersion":"26.1.0","dependencies":{"@bobfrankston/themecolors":"^0.1.7"},".dependencies":{"@bobfrankston/themecolors":"file:../themecolors"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^25.6.0"},".transformedSnapshot":{"dependencies":{"@bobfrankston/themecolors":"^0.1.7"}},"_npmOperationalInternal":{"tmp":"tmp/bobup_0.1.13_1778938731049_0.22435289778283551","host":"s3://npm-registry-packages-npm-production"}},"0.1.14":{"name":"@bobfrankston/bobup","version":"0.1.14","keywords":["npm","global","update","bobfrankston"],"author":{"name":"Bob Frankston"},"license":"MIT","_id":"@bobfrankston/bobup@0.1.14","maintainers":[{"name":"bobfrankston","email":"npm@bob.ma"}],"homepage":"https://github.com/BobFrankston/bobup#readme","bugs":{"url":"https://github.com/BobFrankston/bobup/issues"},"bin":{"bobup":"cli.js"},"dist":{"shasum":"407146e887a8bb1933ff5062d9ce0f31cf220775","tarball":"https://registry.npmjs.org/@bobfrankston/bobup/-/bobup-0.1.14.tgz","fileCount":10,"integrity":"sha512-PU/i/HK4LtAJxsWtDvPFH9TxXFSmtxbnywhgtLNEeZGJpNfzmNLTH28+OurnvhhPvqTeHLNpL8iX1OZg3cyUig==","signatures":[{"sig":"MEYCIQDUn2ugThGVBbRWaUxX8supdtyXpHjJd4uPz9/9f5zU+wIhAOwdsLGrFLpwyiVtZMkujlTgSQlKfVYqcOKvD1PLdjWA","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":84063},"main":"index.js","type":"module","_from":"file:bobfrankston-bobup-0.1.14.tgz","types":"index.d.ts","exports":{".":{"types":"./index.d.ts","import":"./index.js"}},"scripts":{"build":"tsc","watch":"tsc -w"},"_npmUser":{"name":"bobfrankston","email":"npm@bob.ma"},"_resolved":"y:\\dev\\utils\\bobup\\bobfrankston-bobup-0.1.14.tgz","_integrity":"sha512-PU/i/HK4LtAJxsWtDvPFH9TxXFSmtxbnywhgtLNEeZGJpNfzmNLTH28+OurnvhhPvqTeHLNpL8iX1OZg3cyUig==","repository":{"url":"git+ssh://git@github.com/BobFrankston/bobup.git","type":"git"},"_npmVersion":"11.13.0","description":"List and update globally-installed @bobfrankston/* npm packages","directories":{},"_nodeVersion":"26.1.0","dependencies":{"@bobfrankston/themecolors":"^0.1.7"},".dependencies":{"@bobfrankston/themecolors":"file:../themecolors"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^25.6.0"},".transformedSnapshot":{"dependencies":{"@bobfrankston/themecolors":"^0.1.7"}},"_npmOperationalInternal":{"tmp":"tmp/bobup_0.1.14_1778961125122_0.07531290189417694","host":"s3://npm-registry-packages-npm-production"}},"0.1.15":{"name":"@bobfrankston/bobup","version":"0.1.15","keywords":["npm","global","update","bobfrankston"],"author":{"name":"Bob Frankston"},"license":"MIT","_id":"@bobfrankston/bobup@0.1.15","maintainers":[{"name":"bobfrankston","email":"npm@bob.ma"}],"homepage":"https://github.com/BobFrankston/bobup#readme","bugs":{"url":"https://github.com/BobFrankston/bobup/issues"},"bin":{"bobup":"cli.js"},"dist":{"shasum":"320954c5bd4fddc36f295de53433df47da2327ba","tarball":"https://registry.npmjs.org/@bobfrankston/bobup/-/bobup-0.1.15.tgz","fileCount":10,"integrity":"sha512-6fgl520TWDW9a9OmdN3ir7lU9vr3Zlse7YdF54xCzsHbJ/kp04DfSNkhukp4t7C9wCSkfPi+I97wd+AoxJ7u6Q==","signatures":[{"sig":"MEUCID2zd22TX54oVRZzMf77yFiR7kKuOd+srkxdyTbvuDlPAiEAvoiwOaGaIrVChHlE0eUVWt/JpvGpWi+RpW5GqJnABtw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":85746},"main":"index.js","type":"module","_from":"file:bobfrankston-bobup-0.1.15.tgz","types":"index.d.ts","exports":{".":{"types":"./index.d.ts","import":"./index.js"}},"scripts":{"build":"tsc","watch":"tsc -w"},"_npmUser":{"name":"bobfrankston","email":"npm@bob.ma"},"_resolved":"Y:\\dev\\utils\\bobup\\bobfrankston-bobup-0.1.15.tgz","_integrity":"sha512-6fgl520TWDW9a9OmdN3ir7lU9vr3Zlse7YdF54xCzsHbJ/kp04DfSNkhukp4t7C9wCSkfPi+I97wd+AoxJ7u6Q==","repository":{"url":"git+ssh://git@github.com/BobFrankston/bobup.git","type":"git"},"_npmVersion":"11.17.0","description":"List and update globally-installed @bobfrankston/* npm packages","directories":{},"_nodeVersion":"26.4.0","dependencies":{"@bobfrankston/themecolors":"^0.1.8"},".dependencies":{"@bobfrankston/themecolors":"file:../themecolors"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^25.6.0"},".transformedSnapshot":{"dependencies":{"@bobfrankston/themecolors":"^0.1.8"}},"_npmOperationalInternal":{"tmp":"tmp/bobup_0.1.15_1785178116508_0.014569796856346517","host":"s3://npm-registry-packages-npm-production"}},"0.1.16":{"name":"@bobfrankston/bobup","version":"0.1.16","keywords":["npm","global","update","bobfrankston"],"author":{"name":"Bob Frankston"},"license":"MIT","_id":"@bobfrankston/bobup@0.1.16","maintainers":[{"name":"bobfrankston","email":"npm@bob.ma"}],"homepage":"https://github.com/BobFrankston/bobup#readme","bugs":{"url":"https://github.com/BobFrankston/bobup/issues"},"bin":{"bobup":"cli.js"},"dist":{"shasum":"03091d6f6681b73ffccf2bfde573ef6fad73859a","tarball":"https://registry.npmjs.org/@bobfrankston/bobup/-/bobup-0.1.16.tgz","fileCount":10,"integrity":"sha512-Y/matDU39KZF6/Br1O8O7c8Z+fZjpd1RP7BRG88Gal3xCxgEmsQrCP1cB5wlipgYFm+sv4wakJd5+Z8VeNDp9Q==","signatures":[{"sig":"MEUCIQDjmOqtRmzhTFOW0v2RHapKlCqZ9dSScxHh2hzRLZNZ9wIgAv2xWWKMt2egYx7+tnCEnnDTX9o/7TSQUrilyO7rXxY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":87306},"main":"index.js","type":"module","_from":"file:bobfrankston-bobup-0.1.16.tgz","types":"index.d.ts","exports":{".":{"types":"./index.d.ts","import":"./index.js"}},"scripts":{"build":"tsc","watch":"tsc -w"},"_npmUser":{"name":"bobfrankston","email":"npm@bob.ma"},"_resolved":"Y:\\dev\\utils\\bobup\\bobfrankston-bobup-0.1.16.tgz","_integrity":"sha512-Y/matDU39KZF6/Br1O8O7c8Z+fZjpd1RP7BRG88Gal3xCxgEmsQrCP1cB5wlipgYFm+sv4wakJd5+Z8VeNDp9Q==","repository":{"url":"git+ssh://git@github.com/BobFrankston/bobup.git","type":"git"},"_npmVersion":"11.17.0","description":"List and update globally-installed @bobfrankston/* npm packages","directories":{},"_nodeVersion":"26.4.0","dependencies":{"@bobfrankston/themecolors":"^0.1.8"},".dependencies":{"@bobfrankston/themecolors":"file:../themecolors"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^25.6.0"},".transformedSnapshot":{"dependencies":{"@bobfrankston/themecolors":"^0.1.8"}},"_npmOperationalInternal":{"tmp":"tmp/bobup_0.1.16_1785181855467_0.33980241377846476","host":"s3://npm-registry-packages-npm-production"}},"0.1.17":{"name":"@bobfrankston/bobup","version":"0.1.17","description":"List and update globally-installed @bobfrankston/* npm packages","type":"module","main":"index.js","types":"index.d.ts","bin":{"bobup":"cli.js"},"exports":{".":{"import":"./index.js","types":"./index.d.ts"}},"scripts":{"build":"tsc","watch":"tsc -w"},"dependencies":{"@bobfrankston/themecolors":"^0.1.8"},"devDependencies":{"@types/node":"^25.6.0"},"repository":{"type":"git","url":"git+ssh://git@github.com/BobFrankston/bobup.git"},"keywords":["npm","global","update","bobfrankston"],"author":{"name":"Bob Frankston"},"license":"MIT","publishConfig":{"access":"public"},".dependencies":{"@bobfrankston/themecolors":"file:../themecolors"},".transformedSnapshot":{"dependencies":{"@bobfrankston/themecolors":"^0.1.8"}},"_id":"@bobfrankston/bobup@0.1.17","bugs":{"url":"https://github.com/BobFrankston/bobup/issues"},"homepage":"https://github.com/BobFrankston/bobup#readme","_integrity":"sha512-nyXRkl88zUc2FP1jrt+GPROXalBfo79uguSBpzeP6ttut8gyrqeNH3RB2m8AwDWxUE8H6Ac2CpOxadC55zuJnw==","_resolved":"Y:\\dev\\utils\\bobup\\bobfrankston-bobup-0.1.17.tgz","_from":"file:bobfrankston-bobup-0.1.17.tgz","_nodeVersion":"26.4.0","_npmVersion":"11.17.0","dist":{"integrity":"sha512-nyXRkl88zUc2FP1jrt+GPROXalBfo79uguSBpzeP6ttut8gyrqeNH3RB2m8AwDWxUE8H6Ac2CpOxadC55zuJnw==","shasum":"14ac647840c8efc016f3fd16970c71e2e4c7a549","tarball":"https://registry.npmjs.org/@bobfrankston/bobup/-/bobup-0.1.17.tgz","fileCount":10,"unpackedSize":94749,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIHg29aMQZP33veL534P74GYGn7FMf/IqTa038SWTuhU/AiAex2xTZqaDi9L/+Si93VtYCrZPiR8yF3iWrAbp1S45wA=="}]},"_npmUser":{"name":"bobfrankston","email":"npm@bob.ma"},"directories":{},"maintainers":[{"name":"bobfrankston","email":"npm@bob.ma"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/bobup_0.1.17_1785182812449_0.8563603917617937"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-27T19:57:41.581Z","modified":"2026-07-27T20:06:52.771Z","0.1.1":"2026-04-27T19:57:41.734Z","0.1.2":"2026-04-27T19:58:55.368Z","0.1.3":"2026-04-27T19:59:32.639Z","0.1.5":"2026-04-27T20:03:41.453Z","0.1.6":"2026-04-27T20:10:12.319Z","0.1.7":"2026-04-27T20:32:09.363Z","0.1.8":"2026-04-27T23:27:22.958Z","0.1.9":"2026-05-06T13:41:02.271Z","0.1.10":"2026-05-07T19:24:44.768Z","0.1.11":"2026-05-07T19:28:04.211Z","0.1.12":"2026-05-14T21:15:28.529Z","0.1.13":"2026-05-16T13:38:51.220Z","0.1.14":"2026-05-16T19:52:05.248Z","0.1.15":"2026-07-27T18:48:36.667Z","0.1.16":"2026-07-27T19:50:55.619Z","0.1.17":"2026-07-27T20:06:52.586Z"},"bugs":{"url":"https://github.com/BobFrankston/bobup/issues"},"author":{"name":"Bob Frankston"},"license":"MIT","homepage":"https://github.com/BobFrankston/bobup#readme","keywords":["npm","global","update","bobfrankston"],"repository":{"type":"git","url":"git+ssh://git@github.com/BobFrankston/bobup.git"},"description":"List and update globally-installed @bobfrankston/* npm packages","maintainers":[{"name":"bobfrankston","email":"npm@bob.ma"}],"readme":"# @bobfrankston/bobup\n\nList and update all globally-installed `@bobfrankston/*` npm packages.\n\nCross-platform — runs on Windows, Linux, and macOS. The CLI uses `npm` to do all work, and the library spawns `npm.cmd` on Windows / `npm` elsewhere automatically.\n\n## Requirements\n\n- Node.js ≥ 22 (uses `node:util.styleText`)\n- `npm` available in `PATH`\n- Permission to install globally (on Linux/macOS that may mean a user-level npm prefix or `sudo`, depending on how npm was set up)\n\n## Install\n\n```bash\nnpm install -g @bobfrankston/bobup\n```\n\n## CLI\n\n```\nbobup                          Update every outdated package (same as: bobup update all)\nbobup -h | --help              Show usage\nbobup list                     List packages that need updating (outdated only)\nbobup list all                 List every installed package (alias: bobup listall, bobup list -all)\nbobup list -csv                Comma-separated names (script-friendly; combine with `all`)\nbobup list -json               JSON array of package descriptors (combine with `all`)\nbobup update all               Update every outdated package (alias: bobup upgrade)\nbobup update <selectors...>    Update by index, range, comma-list, or name\nbobup <prod|dev|latest>        Update every package to that build (no-arg form)\n```\n\n`bobup` with no arguments updates every outdated package (equivalent to `bobup update all`); use `bobup -h` for usage. On Linux/macOS, if the npm global prefix isn't writable, `bobup` re-runs itself under `sudo` automatically (you may be prompted for your password); if `sudo` isn't available it prints a single clear message instead of a wall of npm `EACCES` errors. `bobup list` is concise — only the outdated packages — so the indexes you see are exactly what `update` will operate on. Pass `all` (or `-all` / `--all` / use `listall`) to see everything.\n\nColored output is produced through [`@bobfrankston/themecolors`](https://github.com/BobFrankston/themecolors), which adapts color choices to the detected terminal background — no light-on-light or dark-on-dark surprises.\n\n### Script-friendly output\n\n```bash\nbobup list -csv                # @bobfrankston/foo,@bobfrankston/bar\nbobup list all -csv            # every installed name, comma-separated\nbobup list -json               # JSON array of {name, short, installed, latest, target, distTags, status, problems}\nbobup list all -json           # same, for every installed package\n```\n\n`-csv` and `-json` are mutually exclusive. Both suppress the human-readable formatting and the broken-package advisory so output stays parseable.\n\n### Selectors\n\nMix and match — all are space-separated; commas are within a single selector.\n\n| Form        | Meaning                                                         |\n|-------------|-----------------------------------------------------------------|\n| `N`         | 1-based index against the most recent `bobup list` (outdated)   |\n| `N-M`       | Inclusive range (against the outdated list)                     |\n| `N,M,...`   | Comma list (against the outdated list)                          |\n| `name`      | Short or full package name (resolved against ALL installed, so you can force-reinstall a current or broken package by name) |\n| `all`       | Every **outdated** package — broken packages are skipped, see below |\n\n### Builds / dist-tags\n\nBy default bobup installs the **`latest`** build, and lists any other published builds (e.g. `dev`, `prod`) alongside it so you can see what else is available:\n\n```\n  1. @bobfrankston/foo  1.2.0 → 1.2.3  Outdated  [dev@1.3.0-dev.2  prod@1.2.1]\n```\n\nOverride the build that gets installed with a bare keyword or the general `-tag` flag — it can appear anywhere on the line:\n\n| Form                | Meaning                                                  |\n|---------------------|----------------------------------------------------------|\n| `prod` `dev` `latest` | bare keyword selects that dist-tag                     |\n| `-tag <name>`       | any published dist-tag (also `--tag`, `-tag=<name>`)     |\n\nWhen a package has no such dist-tag, bobup falls back to its `latest` version (so the package still updates) and still lists what builds it does publish. Dist-tag versions come from `npm view <name> dist-tags --json` — a registry read, so it never needs root.\n\n```bash\nbobup prod                     # update every package to its 'prod' build\nbobup update all dev           # same, dev build\nbobup update logit -tag beta   # one package, an arbitrary dist-tag\nbobup list dev                 # list, comparing each package against its 'dev' build\n```\n\n### Examples\n\n```bash\nbobup                          # update every outdated package\nbobup -h                       # show usage\nbobup list                     # show only outdated\nbobup list all                 # show everything (or: bobup listall)\nbobup update 1                 # update outdated item 1\nbobup update 1-4               # update outdated items 1 through 4\nbobup update 1,3-5             # update outdated 1, 3, 4, 5\nbobup update logit npmlatest   # update by name (works even if current)\nbobup update 1,3-5,logit       # any combination\nbobup update all               # update every outdated package\n```\n\nEach update runs `npm install -g @bobfrankston/<name>@<version>` (the concrete version resolved for the chosen build) and the npm output streams to your terminal so you see the install progress.\n\n### Install scripts\n\nnpm 11.17+ has an `allowScripts` policy that skips install-time lifecycle scripts (`preinstall` / `install` / `postinstall`) for packages not on an allowlist — and global installs have no project `package.json` to record approvals in, so app postinstall steps (protocol registration, workspace symlinks, dependency binary downloads) would silently never run. Since bobup only installs your own `@bobfrankston/*` apps, it passes `--dangerously-allow-all-scripts` so every install script in the tree runs, plus `--foreground-scripts` so their output is visible.\n\nIf the effective npm predates the policy (probed once via `npm config get`), bobup updates npm itself first — `npm install -g npm@latest`, automatically, before the package updates. A failed or PATH-shadowed npm self-update is reported but doesn't abort the run: pre-policy npm runs all install scripts unconditionally anyway, so package updates still behave correctly.\n\n### Broken installs\n\nIf `npm list -g` can't determine a package's installed version, bobup labels it `Broken` and shows a diagnostic line under the row (missing directory, missing/unreadable `package.json`, missing bin shim, etc.).\n\n`bobup update all` and numeric/range selectors **skip broken packages** — `npm install -g` rarely recovers a broken global install on its own, and silently re-running it can leave more debris. Bobup prints the recommended uninstall/reinstall recipe at the end of the run so you can repair them by hand:\n\n```bash\nnpm uninstall -g @bobfrankston/<name> && npm install -g @bobfrankston/<name>\n```\n\nIf you still want to force bobup to attempt an install on a broken package, pass it by name (e.g. `bobup update brother-print`).\n\n## Library API\n\n`bobup` is also a normal library — useful when another tool wants to drive update logic itself.\n\n```typescript\nimport {\n    listInstalled,\n    getLatestVersions,\n    getDistTags,\n    parseSelectors,\n    updatePackages,\n    listAsJson,\n    Package,\n    PackageJson,\n    UpdateResult\n} from \"@bobfrankston/bobup\";\n\n// Discover installed @bobfrankston packages\nconst pkgs = listInstalled();\n\n// Fill in .latest / .target via `npm outdated -g`\ngetLatestVersions(pkgs);\n\n// ...or fill in .distTags / .latest / .target for a chosen build:\ngetDistTags(pkgs, \"prod\");      // .target becomes each package's `prod` version\n\n// JSON-friendly view (with computed status: \"current\" | \"outdated\" | \"broken\")\nconst json: PackageJson[] = listAsJson(pkgs);\nconsole.log(JSON.stringify(json, null, 2));\n\n// Resolve user input (\"all\", \"1-3\", names, etc.) against the list\nconst targets = parseSelectors([\"1-3\", \"logit\"], pkgs);\n\n// Run the updates (sequential — npm global prefix is shared state)\nconst results: UpdateResult[] = await updatePackages(targets, {\n    inherit: false,                        // capture instead of stream\n    logmsg: (m) => console.log(m)          // optional logger\n});\n\nfor (const r of results)\n    console.log(r.package.name, r.success ? \"OK\" : r.error);\n```\n\n### API summary\n\n- `listInstalled(): Package[]` — globally-installed `@bobfrankston/*` packages, sorted. Each `Package` includes a `problems: string[]` array that is non-empty when npm couldn't determine the installed version (filesystem-level diagnosis is performed automatically for broken installs).\n- `getLatestVersions(pkgs): Package[]` — fills `latest` and `target` from `npm outdated -g` (a single call). Mutates and returns input.\n- `getDistTags(pkgs, tag?): Package[]` — fills `distTags`, `latest`, and `target` from `npm view <name> dist-tags --json` (one call per package, registry-only so no root needed). `tag` (default `\"latest\"`) picks which dist-tag becomes `target`, falling back to `latest` when a package doesn't publish that tag. Mutates and returns input.\n- `listAsJson(pkgs): PackageJson[]` — pure transform that returns JSON-friendly descriptors with a computed `status` field (`\"current\" | \"outdated\" | \"broken\"`) plus `target` and `distTags`. Run `getLatestVersions` or `getDistTags` first if you want the status to reflect outdated state.\n- `parseSelectors(selectors, pkgs): Package[]` — resolves `[\"1-3\", \"all\", \"name\", ...]` against the list. Throws on bad selectors.\n- `updatePackage(pkg, opts?): Promise<UpdateResult>` — single update.\n- `updatePackages(pkgs, opts?): Promise<UpdateResult[]>` — sequential batch.\n\n`UpdateOptions`:\n- `inherit?: boolean` — if `true`, npm streams stdio directly to the parent (default `false`, captured).\n- `logmsg?: (msg: string) => void` — optional logger; library never writes to console on its own.\n\n## Notes\n\n- Discovery uses `npm list -g --depth=0 --json`.\n- Build / dist-tag lookup uses `npm view <name> dist-tags --json` (one call per package — needed to enumerate every published build). It reads only the registry, so it works without root.\n- Updates run sequentially because the npm global prefix isn't safe for concurrent installs.\n- `bobup list -json` descriptors include `target` (the version that would be installed for the chosen build) and `distTags` (every published build).\n","readmeFilename":"README.md"}