{"_id":"reflect-sync","_rev":"33-00faf468a72c25dd50fa4ea5708ace60","name":"reflect-sync","dist-tags":{"latest":"0.15.2"},"versions":{"0.7.0":{"name":"reflect-sync","version":"0.7.0","keywords":["rsync","sqlite","sync","watch","ssh","mutagen","backup"],"author":{"url":"wstein@sagemath.com","name":"William Stein"},"license":"MIT","_id":"reflect-sync@0.7.0","maintainers":[{"name":"wstein","email":"wstein@sagemath.com"}],"homepage":"https://github.com/sagemathinc/reflect-sync","bugs":{"url":"https://github.com/sagemathinc/reflect-sync/issues"},"bin":{"rfsync":"bin/reflect-sync.mjs","reflect":"bin/reflect-sync.mjs","reflect-sync":"bin/reflect-sync.mjs"},"dist":{"shasum":"c20dbac3d29d7240b8747224324b4d5d05c1685e","tarball":"https://registry.npmjs.org/reflect-sync/-/reflect-sync-0.7.0.tgz","fileCount":73,"integrity":"sha512-+IwkId0p9HbgHU50VcihhxpszyMx/YngYEkUnnRK7EsdVECdSBmF7WEGpxjJMdqjewdZVN+8s4tQ+TcYd6cZ5w==","signatures":[{"sig":"MEYCIQDltL0pQJVVN+NiSMUgKrYpEn4AoPQzVXAeBPi8Ggq/RAIhAPjNPJXiSbGeIcL6cbON2LGz9Gaq2oxDUrb40qA4psEw","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":442884},"main":"dist/index.js","type":"module","_from":"file:reflect-sync-0.7.0.tgz","types":"dist/index.d.ts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"pnpm build && NODE_OPTIONS='--no-warnings' jest","build":"tsc -p tsconfig.json","clean":"rm -rf dist node_modules","test:watch":"pnpm build &&  NODE_OPTIONS='--no-warnings' jest --watch"},"_npmUser":{"name":"wstein","email":"wstein@sagemath.com"},"_resolved":"/tmp/404e28e8b9cf45f225c1ba0b2cffcf06/reflect-sync-0.7.0.tgz","_integrity":"sha512-+IwkId0p9HbgHU50VcihhxpszyMx/YngYEkUnnRK7EsdVECdSBmF7WEGpxjJMdqjewdZVN+8s4tQ+TcYd6cZ5w==","repository":{"url":"git+https://github.com/sagemathinc/reflect-sync.git","type":"git"},"_npmVersion":"11.6.0","description":"Fast rsync-powered two-way sync with SQLite metadata and SSH-friendly scanning.","directories":{},"_nodeVersion":"24.8.0","dependencies":{"ignore":"^7.0.5","chokidar":"^4.0.3","commander":"^14.0.2","ascii-table3":"^1.0.1","@node-rs/xxhash":"^1.7.6","@nodelib/fs.walk":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","jest":"^29.7.0","ts-jest":"29","typescript":"^5.9.3","@types/jest":"^29.5.14","@types/node":"^24.9.1","@commander-js/extra-typings":"^14.0.0"},"_npmOperationalInternal":{"tmp":"tmp/reflect-sync_0.7.0_1761856315785_0.386911740402057","host":"s3://npm-registry-packages-npm-production"}},"0.7.2":{"name":"reflect-sync","version":"0.7.2","keywords":["rsync","sqlite","sync","watch","ssh","mutagen","backup"],"author":{"url":"wstein@sagemath.com","name":"William Stein"},"license":"MIT","_id":"reflect-sync@0.7.2","maintainers":[{"name":"wstein","email":"wstein@sagemath.com"}],"homepage":"https://github.com/sagemathinc/reflect-sync","bugs":{"url":"https://github.com/sagemathinc/reflect-sync/issues"},"bin":{"rfsync":"bin/reflect-sync.mjs","reflect":"bin/reflect-sync.mjs","reflect-sync":"bin/reflect-sync.mjs"},"dist":{"shasum":"030c4b7cb9cd302f1f1392c54ae88a71a0dded78","tarball":"https://registry.npmjs.org/reflect-sync/-/reflect-sync-0.7.2.tgz","fileCount":73,"integrity":"sha512-cEnj0QY++JJtLE18EkuRNTzW9Wx1IGHj51AjJ7tBgfRzmgjfMAfrW8+m+Pmcbro22p13M+56PdQ7RPhYsXffLQ==","signatures":[{"sig":"MEUCIA0dYYiP8plT5jO4nejpNSjudaW+otkR43dEodv0hFV8AiEAigA82SyK0mhXcpuT2IvH0ARcdKE1IuAvBPfAd1IWTtE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":450277},"main":"dist/index.js","type":"module","_from":"file:reflect-sync-0.7.2.tgz","types":"dist/index.d.ts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"pnpm build && NODE_OPTIONS='--no-warnings' jest","build":"tsc -p tsconfig.json","clean":"rm -rf dist node_modules","test:watch":"pnpm build &&  NODE_OPTIONS='--no-warnings' jest --watch"},"_npmUser":{"name":"wstein","email":"wstein@sagemath.com"},"_resolved":"/tmp/2da85a3f9a3fa2d0bbf2f4b48b0d6116/reflect-sync-0.7.2.tgz","_integrity":"sha512-cEnj0QY++JJtLE18EkuRNTzW9Wx1IGHj51AjJ7tBgfRzmgjfMAfrW8+m+Pmcbro22p13M+56PdQ7RPhYsXffLQ==","repository":{"url":"git+https://github.com/sagemathinc/reflect-sync.git","type":"git"},"_npmVersion":"11.6.0","description":"Fast rsync-powered two-way sync with SQLite metadata and SSH-friendly scanning.","directories":{},"_nodeVersion":"24.8.0","dependencies":{"ignore":"^7.0.5","chokidar":"^4.0.3","commander":"^14.0.2","ascii-table3":"^1.0.1","@nodelib/fs.walk":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","jest":"^29.7.0","ts-jest":"29","typescript":"^5.9.3","@types/jest":"^29.5.14","@types/node":"^24.9.1","@commander-js/extra-typings":"^14.0.0"},"_npmOperationalInternal":{"tmp":"tmp/reflect-sync_0.7.2_1761868717457_0.5609944415971968","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"reflect-sync","version":"0.8.0","keywords":["rsync","sqlite","sync","watch","ssh","mutagen","backup"],"author":{"url":"wstein@sagemath.com","name":"William Stein"},"license":"MIT","_id":"reflect-sync@0.8.0","maintainers":[{"name":"wstein","email":"wstein@sagemath.com"}],"homepage":"https://github.com/sagemathinc/reflect-sync","bugs":{"url":"https://github.com/sagemathinc/reflect-sync/issues"},"bin":{"rfsync":"bin/reflect-sync.mjs","reflect":"bin/reflect-sync.mjs","reflect-sync":"bin/reflect-sync.mjs"},"dist":{"shasum":"1f4f7e70b113491bedbb4abe257e9aafedd90dcf","tarball":"https://registry.npmjs.org/reflect-sync/-/reflect-sync-0.8.0.tgz","fileCount":103,"integrity":"sha512-JVNkUT8ma6HQyLpmHsUvRZziu3KCzoe1IjGKjeh7JzVt7zBLpqZlRb4FrfDxpDXiimU/JRi8akOOawv3532sZg==","signatures":[{"sig":"MEUCIFAEkQKXI7G/ZVGm5cTA0sDTs605WJ9TIF9xfEgNADcCAiEAxOz5ZLJ2Ajh4Y40GXT01ltWtSdVVO2Hu7P5LVbJsSYE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":704812},"main":"dist/index.js","type":"module","_from":"file:reflect-sync-0.8.0.tgz","types":"dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"sea":"pnpm bundle && pnpm sea:blob && pnpm sea:inject","test":"pnpm build && NODE_OPTIONS='--no-warnings' jest","build":"tsc -p tsconfig.json","clean":"rm -rf dist node_modules bundle","bundle":"pnpm install && pnpm build && pnpm bundle:worker && pnpm bundle:main","sea:blob":"node --experimental-sea-config sea.config.json","sea:inject":"cp $(command -v node) dist/reflect-sync && pnpx postject dist/reflect-sync NODE_SEA_BLOB dist/reflect-sync.blob --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2 2>&1 | sed -E '/find string offset for section name/d'","test:watch":"pnpm build &&  NODE_OPTIONS='--no-warnings' jest --watch","bundle:main":"rollup -c rollup.config.mjs","bundle:worker":"rollup -c rollup.worker.mjs"},"_npmUser":{"name":"wstein","email":"wstein@sagemath.com"},"_resolved":"/tmp/d19e3cfe783057d21117f89371bce52a/reflect-sync-0.8.0.tgz","_integrity":"sha512-JVNkUT8ma6HQyLpmHsUvRZziu3KCzoe1IjGKjeh7JzVt7zBLpqZlRb4FrfDxpDXiimU/JRi8akOOawv3532sZg==","repository":{"url":"git+https://github.com/sagemathinc/reflect-sync.git","type":"git"},"_npmVersion":"11.6.0","description":"Fast rsync-powered two-way sync with SQLite metadata and SSH-friendly scanning.","directories":{},"_nodeVersion":"24.8.0","dependencies":{"ignore":"^7.0.5","chokidar":"^4.0.3","commander":"^14.0.2","ascii-table3":"^1.0.1","@nodelib/fs.walk":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","jest":"^29.7.0","rollup":"^4.52.5","ts-jest":"29","typescript":"^5.9.3","@types/jest":"^29.5.14","@types/node":"^24.9.1","@rollup/plugin-json":"^6.1.0","@rollup/plugin-terser":"^0.4.4","@rollup/plugin-commonjs":"^29.0.0","@commander-js/extra-typings":"^14.0.0","@rollup/plugin-node-resolve":"^16.0.3"},"_npmOperationalInternal":{"tmp":"tmp/reflect-sync_0.8.0_1762060445427_0.1593288922317444","host":"s3://npm-registry-packages-npm-production"}},"0.8.1":{"name":"reflect-sync","version":"0.8.1","keywords":["rsync","sqlite","sync","watch","ssh","mutagen","backup"],"author":{"url":"wstein@sagemath.com","name":"William Stein"},"license":"MIT","_id":"reflect-sync@0.8.1","maintainers":[{"name":"wstein","email":"wstein@sagemath.com"}],"homepage":"https://github.com/sagemathinc/reflect-sync","bugs":{"url":"https://github.com/sagemathinc/reflect-sync/issues"},"bin":{"rfsync":"bin/reflect-sync.mjs","reflect":"bin/reflect-sync.mjs","reflect-sync":"bin/reflect-sync.mjs"},"dist":{"shasum":"03ef6aeec8c074aa2782dbd088f9bf366446e23c","tarball":"https://registry.npmjs.org/reflect-sync/-/reflect-sync-0.8.1.tgz","fileCount":106,"integrity":"sha512-C6J2nuG9xggUmNaBEQeI7knbgaJ9kEq3arKIpnaf2xdeqeAytUaLdXFgeRdUHmfBgFTye/u2OQ38aLAGVHXi1A==","signatures":[{"sig":"MEQCIAlQYpNa3yB4jzdP/ZOUTj2b+hcN+Kgg687m/W9z1FGYAiB5PMnN1jMeiYUjzL0Y4jkRcdCIbrAXNaHKsd6vry+meg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":740223},"main":"dist/index.js","type":"module","_from":"file:reflect-sync-0.8.1.tgz","types":"dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"sea":"pnpm bundle && pnpm sea:blob && pnpm sea:inject","test":"pnpm build && NODE_OPTIONS='--no-warnings' jest","build":"tsc -p tsconfig.json","clean":"rm -rf dist node_modules bundle","bundle":"pnpm install && pnpm build && pnpm bundle:worker && pnpm bundle:main","sea:blob":"node --experimental-sea-config sea.config.json","sea:inject":"cp $(command -v node) dist/reflect-sync && pnpx postject dist/reflect-sync NODE_SEA_BLOB dist/reflect-sync.blob --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2 2>&1 | sed -E '/find string offset for section name/d'","test:watch":"pnpm build &&  NODE_OPTIONS='--no-warnings' jest --watch","bundle:main":"rollup -c rollup.config.mjs","bundle:worker":"rollup -c rollup.worker.mjs"},"_npmUser":{"name":"wstein","email":"wstein@sagemath.com"},"_resolved":"/tmp/6a593bb0432fec89d3077a0c273d3635/reflect-sync-0.8.1.tgz","_integrity":"sha512-C6J2nuG9xggUmNaBEQeI7knbgaJ9kEq3arKIpnaf2xdeqeAytUaLdXFgeRdUHmfBgFTye/u2OQ38aLAGVHXi1A==","repository":{"url":"git+https://github.com/sagemathinc/reflect-sync.git","type":"git"},"_npmVersion":"11.6.0","description":"Fast rsync-powered two-way sync with SQLite metadata and SSH-friendly scanning.","directories":{},"_nodeVersion":"24.8.0","dependencies":{"ignore":"^7.0.5","chokidar":"^4.0.3","commander":"^14.0.2","ascii-table3":"^1.0.1","@nodelib/fs.walk":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","jest":"^29.7.0","rollup":"^4.52.5","ts-jest":"29","typescript":"^5.9.3","@types/jest":"^29.5.14","@types/node":"^24.9.1","@rollup/plugin-json":"^6.1.0","@rollup/plugin-terser":"^0.4.4","@rollup/plugin-commonjs":"^29.0.0","@commander-js/extra-typings":"^14.0.0","@rollup/plugin-node-resolve":"^16.0.3"},"_npmOperationalInternal":{"tmp":"tmp/reflect-sync_0.8.1_1762102410453_0.7854020050247303","host":"s3://npm-registry-packages-npm-production"}},"0.8.2":{"name":"reflect-sync","version":"0.8.2","keywords":["rsync","sqlite","sync","watch","ssh","mutagen","backup"],"author":{"url":"wstein@sagemath.com","name":"William Stein"},"license":"MIT","_id":"reflect-sync@0.8.2","maintainers":[{"name":"wstein","email":"wstein@sagemath.com"}],"homepage":"https://github.com/sagemathinc/reflect-sync","bugs":{"url":"https://github.com/sagemathinc/reflect-sync/issues"},"bin":{"reflect":"bin/reflect-sync.mjs","reflect-sync":"bin/reflect-sync.mjs"},"dist":{"shasum":"4986f39dce54dd9135062c1979a4e31e5f1e7a89","tarball":"https://registry.npmjs.org/reflect-sync/-/reflect-sync-0.8.2.tgz","fileCount":106,"integrity":"sha512-QXkNloC5grGCuzDparH5S30OUHj+IgfIJvJH7QZQgPqEecyCkCsl4rTijSXPXGJq18Fff5MKH3+LuBoG2ZWqDQ==","signatures":[{"sig":"MEUCIBqdtafa03znWvvljGBDE6HWd8Kk2ssPl/CLDFAzAE4CAiEAq537SpzblqaWmQZ2oq95XOSeTd29yaCaYBw0YCJAdA0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":740172},"main":"dist/index.js","type":"module","_from":"file:reflect-sync-0.8.2.tgz","types":"dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"sea":"pnpm bundle && pnpm sea:blob && pnpm sea:inject","test":"pnpm build && NODE_OPTIONS='--no-warnings' jest","build":"tsc -p tsconfig.json","clean":"rm -rf dist node_modules bundle","bundle":"pnpm install && pnpm build && pnpm bundle:worker && pnpm bundle:main","sea:blob":"node --experimental-sea-config sea.config.json","sea:inject":"cp $(command -v node) dist/reflect-sync && pnpx postject dist/reflect-sync NODE_SEA_BLOB dist/reflect-sync.blob --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2 2>&1 | sed -E '/find string offset for section name/d'","test:watch":"pnpm build &&  NODE_OPTIONS='--no-warnings' jest --watch","bundle:main":"rollup -c rollup.config.mjs","bundle:worker":"rollup -c rollup.worker.mjs"},"_npmUser":{"name":"wstein","email":"wstein@sagemath.com"},"_resolved":"/tmp/e266647c8ea539a503fee650ad43027d/reflect-sync-0.8.2.tgz","_integrity":"sha512-QXkNloC5grGCuzDparH5S30OUHj+IgfIJvJH7QZQgPqEecyCkCsl4rTijSXPXGJq18Fff5MKH3+LuBoG2ZWqDQ==","repository":{"url":"git+https://github.com/sagemathinc/reflect-sync.git","type":"git"},"_npmVersion":"11.6.0","description":"Fast rsync-powered two-way sync with SQLite metadata and SSH-friendly scanning.","directories":{},"_nodeVersion":"24.8.0","dependencies":{"ignore":"^7.0.5","chokidar":"^4.0.3","commander":"^14.0.2","ascii-table3":"^1.0.1","@nodelib/fs.walk":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","jest":"^29.7.0","rollup":"^4.52.5","ts-jest":"29","typescript":"^5.9.3","@types/jest":"^29.5.14","@types/node":"^24.9.1","@rollup/plugin-json":"^6.1.0","@rollup/plugin-terser":"^0.4.4","@rollup/plugin-commonjs":"^29.0.0","@commander-js/extra-typings":"^14.0.0","@rollup/plugin-node-resolve":"^16.0.3"},"_npmOperationalInternal":{"tmp":"tmp/reflect-sync_0.8.2_1762103383008_0.659412274550695","host":"s3://npm-registry-packages-npm-production"}},"0.8.3":{"name":"reflect-sync","version":"0.8.3","keywords":["rsync","sqlite","sync","watch","ssh","mutagen","backup"],"author":{"url":"wstein@sagemath.com","name":"William Stein"},"license":"MIT","_id":"reflect-sync@0.8.3","maintainers":[{"name":"wstein","email":"wstein@sagemath.com"}],"homepage":"https://github.com/sagemathinc/reflect-sync","bugs":{"url":"https://github.com/sagemathinc/reflect-sync/issues"},"bin":{"reflect":"bin/reflect-sync.mjs","reflect-sync":"bin/reflect-sync.mjs"},"dist":{"shasum":"6ac93901ac7bce5aa2931d468711b569638b80bf","tarball":"https://registry.npmjs.org/reflect-sync/-/reflect-sync-0.8.3.tgz","fileCount":106,"integrity":"sha512-4CFL9xXxn23HLy8k38QuHMrQvqde3Cx58LzUkAuhzNLai//28zjUEuQNZnSRA83wqvwYYi5xTsfukrXBvC6gyg==","signatures":[{"sig":"MEUCIF5bm7MFRPMoOP3vCu/FIWVcpjRRTsffG06u9LzYB0HhAiEAy8LonY41LSx6Rwvt/v/9NC7jf9FzGYV/MPu4R+/aHD0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":740177},"main":"dist/index.js","type":"module","_from":"file:reflect-sync-0.8.3.tgz","types":"dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"sea":"pnpm bundle && pnpm sea:blob && pnpm sea:inject","test":"pnpm build && NODE_OPTIONS='--no-warnings' jest","build":"tsc -p tsconfig.json","clean":"rm -rf dist node_modules bundle","bundle":"pnpm install && pnpm build && pnpm bundle:worker && pnpm bundle:main","sea:blob":"node --experimental-sea-config sea.config.json","sea:inject":"cp $(command -v node) dist/reflect-sync && pnpx postject dist/reflect-sync NODE_SEA_BLOB dist/reflect-sync.blob --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2 2>&1 | sed -E '/find string offset for section name/d'","test:watch":"pnpm build &&  NODE_OPTIONS='--no-warnings' jest --watch","bundle:main":"rollup -c rollup.config.mjs","bundle:worker":"rollup -c rollup.worker.mjs"},"_npmUser":{"name":"wstein","email":"wstein@sagemath.com"},"_resolved":"/tmp/7515a51e0bb52e1c4826fceb3cb25b18/reflect-sync-0.8.3.tgz","_integrity":"sha512-4CFL9xXxn23HLy8k38QuHMrQvqde3Cx58LzUkAuhzNLai//28zjUEuQNZnSRA83wqvwYYi5xTsfukrXBvC6gyg==","repository":{"url":"git+https://github.com/sagemathinc/reflect-sync.git","type":"git"},"_npmVersion":"11.6.0","description":"Fast rsync-powered two-way sync with SQLite metadata and SSH-friendly scanning.","directories":{},"_nodeVersion":"24.8.0","dependencies":{"ignore":"^7.0.5","chokidar":"^4.0.3","commander":"^14.0.2","ascii-table3":"^1.0.1","@nodelib/fs.walk":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","jest":"^29.7.0","rollup":"^4.52.5","ts-jest":"29","typescript":"^5.9.3","@types/jest":"^29.5.14","@types/node":"^24.9.1","@rollup/plugin-json":"^6.1.0","@rollup/plugin-terser":"^0.4.4","@rollup/plugin-commonjs":"^29.0.0","@commander-js/extra-typings":"^14.0.0","@rollup/plugin-node-resolve":"^16.0.3"},"_npmOperationalInternal":{"tmp":"tmp/reflect-sync_0.8.3_1762103881778_0.06297657468548268","host":"s3://npm-registry-packages-npm-production"}},"0.8.4":{"name":"reflect-sync","version":"0.8.4","keywords":["rsync","sqlite","sync","watch","ssh","mutagen","backup"],"author":{"url":"wstein@sagemath.com","name":"William Stein"},"license":"MIT","_id":"reflect-sync@0.8.4","maintainers":[{"name":"wstein","email":"wstein@sagemath.com"}],"homepage":"https://github.com/sagemathinc/reflect-sync","bugs":{"url":"https://github.com/sagemathinc/reflect-sync/issues"},"bin":{"reflect":"bin/reflect-sync.mjs","reflect-sync":"bin/reflect-sync.mjs"},"dist":{"shasum":"a5144616804a23091c02c42d8960b699c7db5f74","tarball":"https://registry.npmjs.org/reflect-sync/-/reflect-sync-0.8.4.tgz","fileCount":109,"integrity":"sha512-cJr5d/bLKIsdqrzrm7Kd5saJyeb+fz8cG4+gEbhP+7Lmm8gSXNc8VEzflAVLLfp9RhKS8r8nR1zSmJEvhAtYJA==","signatures":[{"sig":"MEYCIQCEPX4elInyY1e85fZTRF2tT7r3dErvhXAwnhFNIn+/rgIhANj0dBjoHD8B8ISigzaw0cf+NfJazhUqGfhBfKwfqWfi","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":753964},"main":"dist/index.js","type":"module","_from":"file:reflect-sync-0.8.4.tgz","types":"dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"sea":"pnpm bundle && pnpm sea:blob && pnpm sea:inject","test":"pnpm build && NODE_OPTIONS='--no-warnings' jest","build":"tsc -p tsconfig.json","clean":"rm -rf dist node_modules bundle","bundle":"pnpm install && pnpm build && pnpm bundle:worker && pnpm bundle:main","sea:blob":"node --experimental-sea-config sea.config.json","sea:inject":"cp $(command -v node) dist/reflect-sync && pnpx postject dist/reflect-sync NODE_SEA_BLOB dist/reflect-sync.blob --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2 2>&1 | sed -E '/find string offset for section name/d'","test:watch":"pnpm build &&  NODE_OPTIONS='--no-warnings' jest --watch","bundle:main":"rollup -c rollup.config.mjs","bundle:worker":"rollup -c rollup.worker.mjs"},"_npmUser":{"name":"wstein","email":"wstein@sagemath.com"},"_resolved":"/tmp/ea6093cbf7b9944270fdb3dcb415d8f1/reflect-sync-0.8.4.tgz","_integrity":"sha512-cJr5d/bLKIsdqrzrm7Kd5saJyeb+fz8cG4+gEbhP+7Lmm8gSXNc8VEzflAVLLfp9RhKS8r8nR1zSmJEvhAtYJA==","repository":{"url":"git+https://github.com/sagemathinc/reflect-sync.git","type":"git"},"_npmVersion":"11.6.0","description":"Fast rsync-powered two-way sync with SQLite metadata and SSH-friendly scanning.","directories":{},"_nodeVersion":"24.8.0","dependencies":{"ignore":"^7.0.5","chokidar":"^4.0.3","commander":"^14.0.2","ascii-table3":"^1.0.1","@nodelib/fs.walk":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","jest":"^29.7.0","rollup":"^4.52.5","ts-jest":"29","typescript":"^5.9.3","@types/jest":"^29.5.14","@types/node":"^24.9.1","@rollup/plugin-json":"^6.1.0","@rollup/plugin-terser":"^0.4.4","@rollup/plugin-commonjs":"^29.0.0","@commander-js/extra-typings":"^14.0.0","@rollup/plugin-node-resolve":"^16.0.3"},"_npmOperationalInternal":{"tmp":"tmp/reflect-sync_0.8.4_1762123147276_0.4487710585683027","host":"s3://npm-registry-packages-npm-production"}},"0.8.5":{"name":"reflect-sync","version":"0.8.5","keywords":["rsync","sqlite","sync","watch","ssh","mutagen","backup"],"author":{"url":"wstein@sagemath.com","name":"William Stein"},"license":"MIT","_id":"reflect-sync@0.8.5","maintainers":[{"name":"wstein","email":"wstein@sagemath.com"}],"homepage":"https://github.com/sagemathinc/reflect-sync","bugs":{"url":"https://github.com/sagemathinc/reflect-sync/issues"},"bin":{"reflect":"bin/reflect-sync.mjs","reflect-sync":"bin/reflect-sync.mjs"},"dist":{"shasum":"2b0ee638b92f7c3389db74e758c3e68dde1ded65","tarball":"https://registry.npmjs.org/reflect-sync/-/reflect-sync-0.8.5.tgz","fileCount":109,"integrity":"sha512-WFkUaWq1SAA+iMemXI1G4DY1QKLDc+cY6NUBVraDaY1EhvGzOcMbPVUVVE40orL5WRgrWMFbPz6lTj5gF/LZ/w==","signatures":[{"sig":"MEYCIQC2IEjpWCeg7ONShxtYjWqBXiUGLl7YivHnfo7kYa5/bgIhAKuxkMKhAHZWyOMZKieGYLyiAtOwcR3eAcDItcZsPKBN","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":768872},"main":"dist/index.js","type":"module","_from":"file:reflect-sync-0.8.5.tgz","types":"dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"sea":"pnpm bundle && pnpm sea:blob && pnpm sea:inject","test":"pnpm build && NODE_OPTIONS='--no-warnings' jest","build":"tsc -p tsconfig.json","clean":"rm -rf dist node_modules bundle","bundle":"pnpm install && pnpm build && pnpm bundle:worker && pnpm bundle:main","sea:blob":"node --experimental-sea-config sea.config.json","sea:inject":"cp $(command -v node) dist/reflect-sync && pnpx postject dist/reflect-sync NODE_SEA_BLOB dist/reflect-sync.blob --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2 2>&1 | sed -E '/find string offset for section name/d'","test:watch":"pnpm build &&  NODE_OPTIONS='--no-warnings' jest --watch","bundle:main":"rollup -c rollup.config.mjs","bundle:worker":"rollup -c rollup.worker.mjs"},"_npmUser":{"name":"wstein","email":"wstein@sagemath.com"},"_resolved":"/tmp/55dacc1389b085259282a4f12585edba/reflect-sync-0.8.5.tgz","_integrity":"sha512-WFkUaWq1SAA+iMemXI1G4DY1QKLDc+cY6NUBVraDaY1EhvGzOcMbPVUVVE40orL5WRgrWMFbPz6lTj5gF/LZ/w==","repository":{"url":"git+https://github.com/sagemathinc/reflect-sync.git","type":"git"},"_npmVersion":"11.6.0","description":"Fast rsync-powered two-way sync with SQLite metadata and SSH-friendly scanning.","directories":{},"_nodeVersion":"24.8.0","dependencies":{"ignore":"^7.0.5","chokidar":"^4.0.3","commander":"^14.0.2","ascii-table3":"^1.0.1","@nodelib/fs.walk":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","jest":"^29.7.0","rollup":"^4.52.5","ts-jest":"29","typescript":"^5.9.3","@types/jest":"^29.5.14","@types/node":"^24.9.1","@rollup/plugin-json":"^6.1.0","@rollup/plugin-terser":"^0.4.4","@rollup/plugin-commonjs":"^29.0.0","@commander-js/extra-typings":"^14.0.0","@rollup/plugin-node-resolve":"^16.0.3"},"_npmOperationalInternal":{"tmp":"tmp/reflect-sync_0.8.5_1762130067469_0.5236782382300926","host":"s3://npm-registry-packages-npm-production"}},"0.8.6":{"name":"reflect-sync","version":"0.8.6","keywords":["rsync","sqlite","sync","watch","ssh","mutagen","backup"],"author":{"url":"wstein@sagemath.com","name":"William Stein"},"license":"MIT","_id":"reflect-sync@0.8.6","maintainers":[{"name":"wstein","email":"wstein@sagemath.com"}],"homepage":"https://github.com/sagemathinc/reflect-sync","bugs":{"url":"https://github.com/sagemathinc/reflect-sync/issues"},"bin":{"reflect":"bin/reflect-sync.mjs","reflect-sync":"bin/reflect-sync.mjs"},"dist":{"shasum":"72bb5e40bf46d3ceae4cc035ddb45e5b894b5091","tarball":"https://registry.npmjs.org/reflect-sync/-/reflect-sync-0.8.6.tgz","fileCount":109,"integrity":"sha512-kV6943dpZqXx4M/IDFWhsozoh/bc76fsMvyOeB0bCNOp4zdoMfuzsbVfr26acMjPv70ya9qcbLRpKcNyAukVCw==","signatures":[{"sig":"MEUCIH28wqiwMP5J1dhUfvFA5ftFD/uMkA2HxSmsQCcdMe2DAiEAgEUsv+p/M3hKZ5RMisfIwM+pr7EZnoHkLBGEeTsvj4w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":774036},"main":"dist/index.js","type":"module","_from":"file:reflect-sync-0.8.6.tgz","types":"dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"sea":"pnpm bundle && pnpm sea:blob && pnpm sea:inject","test":"pnpm build && NODE_OPTIONS='--no-warnings' jest","build":"tsc -p tsconfig.json","clean":"rm -rf dist node_modules bundle","bundle":"pnpm install && pnpm build && pnpm bundle:worker && pnpm bundle:main","sea:blob":"node --experimental-sea-config sea.config.json","sea:inject":"cp $(command -v node) dist/reflect-sync && pnpx postject dist/reflect-sync NODE_SEA_BLOB dist/reflect-sync.blob --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2 2>&1 | sed -E '/find string offset for section name/d'","test:watch":"pnpm build &&  NODE_OPTIONS='--no-warnings' jest --watch","bundle:main":"rollup -c rollup.config.mjs","bundle:worker":"rollup -c rollup.worker.mjs"},"_npmUser":{"name":"wstein","email":"wstein@sagemath.com"},"_resolved":"/tmp/0171f4336341b07f99dc71623f9ec02d/reflect-sync-0.8.6.tgz","_integrity":"sha512-kV6943dpZqXx4M/IDFWhsozoh/bc76fsMvyOeB0bCNOp4zdoMfuzsbVfr26acMjPv70ya9qcbLRpKcNyAukVCw==","repository":{"url":"git+https://github.com/sagemathinc/reflect-sync.git","type":"git"},"_npmVersion":"11.6.0","description":"Fast rsync-powered two-way sync with SQLite metadata and SSH-friendly scanning.","directories":{},"_nodeVersion":"24.8.0","dependencies":{"ignore":"^7.0.5","chokidar":"^4.0.3","commander":"^14.0.2","ascii-table3":"^1.0.1","@nodelib/fs.walk":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","jest":"^29.7.0","rollup":"^4.52.5","ts-jest":"29","typescript":"^5.9.3","@types/jest":"^29.5.14","@types/node":"^24.9.1","@rollup/plugin-json":"^6.1.0","@rollup/plugin-terser":"^0.4.4","@rollup/plugin-commonjs":"^29.0.0","@commander-js/extra-typings":"^14.0.0","@rollup/plugin-node-resolve":"^16.0.3"},"_npmOperationalInternal":{"tmp":"tmp/reflect-sync_0.8.6_1762134904331_0.5965491549476862","host":"s3://npm-registry-packages-npm-production"}},"0.8.7":{"name":"reflect-sync","version":"0.8.7","keywords":["rsync","sqlite","sync","watch","ssh","mutagen","backup"],"author":{"url":"wstein@sagemath.com","name":"William Stein"},"license":"MIT","_id":"reflect-sync@0.8.7","maintainers":[{"name":"wstein","email":"wstein@sagemath.com"}],"homepage":"https://github.com/sagemathinc/reflect-sync","bugs":{"url":"https://github.com/sagemathinc/reflect-sync/issues"},"bin":{"reflect":"bin/reflect-sync.mjs","reflect-sync":"bin/reflect-sync.mjs"},"dist":{"shasum":"806d6c258647418691024d8c8e42c47080d6a630","tarball":"https://registry.npmjs.org/reflect-sync/-/reflect-sync-0.8.7.tgz","fileCount":109,"integrity":"sha512-n6hBL/A12SdvWTkTDV3UOS0yReIH3Ml02MEJOLd98JZUZD2xqczONzmpAragJJzS0dEdpALHg6nJ/72pJ/R/4A==","signatures":[{"sig":"MEQCIE1hQYtTNnEkvNelMhE7GiZqnCbuQOgnnbaDn7h/k/jDAiAmLQh1s8g440av8eefO2q8G/7j/hbaZGJ27YZQB00nkQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":774043},"main":"dist/index.js","type":"module","_from":"file:reflect-sync-0.8.7.tgz","types":"dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"sea":"pnpm bundle && pnpm sea:blob && pnpm sea:inject","test":"pnpm build && NODE_OPTIONS='--no-warnings' jest","build":"tsc -p tsconfig.json","clean":"rm -rf dist node_modules bundle","bundle":"pnpm install && pnpm build && pnpm bundle:worker && pnpm bundle:main","sea:blob":"node --experimental-sea-config sea.config.json","sea:inject":"cp $(command -v node) dist/reflect-sync && pnpx postject dist/reflect-sync NODE_SEA_BLOB dist/reflect-sync.blob --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2 2>&1 | sed -E '/find string offset for section name/d'","test:watch":"pnpm build &&  NODE_OPTIONS='--no-warnings' jest --watch","bundle:main":"rollup -c rollup.config.mjs","bundle:worker":"rollup -c rollup.worker.mjs"},"_npmUser":{"name":"wstein","email":"wstein@sagemath.com"},"_resolved":"/tmp/acc24db4b995bb2a4640cfaf60820859/reflect-sync-0.8.7.tgz","_integrity":"sha512-n6hBL/A12SdvWTkTDV3UOS0yReIH3Ml02MEJOLd98JZUZD2xqczONzmpAragJJzS0dEdpALHg6nJ/72pJ/R/4A==","repository":{"url":"git+https://github.com/sagemathinc/reflect-sync.git","type":"git"},"_npmVersion":"11.6.0","description":"Fast rsync-powered two-way sync with SQLite metadata and SSH-friendly scanning.","directories":{},"_nodeVersion":"24.8.0","dependencies":{"ignore":"^7.0.5","chokidar":"^4.0.3","commander":"^14.0.2","ascii-table3":"^1.0.1","@nodelib/fs.walk":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","jest":"^29.7.0","rollup":"^4.52.5","ts-jest":"29","typescript":"^5.9.3","@types/jest":"^29.5.14","@types/node":"^24.9.1","@rollup/plugin-json":"^6.1.0","@rollup/plugin-terser":"^0.4.4","@rollup/plugin-commonjs":"^29.0.0","@commander-js/extra-typings":"^14.0.0","@rollup/plugin-node-resolve":"^16.0.3"},"_npmOperationalInternal":{"tmp":"tmp/reflect-sync_0.8.7_1762140725652_0.6123479336689845","host":"s3://npm-registry-packages-npm-production"}},"0.8.8":{"name":"reflect-sync","version":"0.8.8","keywords":["rsync","sqlite","sync","watch","ssh","mutagen","backup"],"author":{"url":"wstein@sagemath.com","name":"William Stein"},"license":"MIT","_id":"reflect-sync@0.8.8","maintainers":[{"name":"wstein","email":"wstein@sagemath.com"}],"homepage":"https://github.com/sagemathinc/reflect-sync","bugs":{"url":"https://github.com/sagemathinc/reflect-sync/issues"},"bin":{"reflect":"bin/reflect-sync.mjs","reflect-sync":"bin/reflect-sync.mjs"},"dist":{"shasum":"020385851b9400e30cd2fcfc602f5e8c0c1f77a9","tarball":"https://registry.npmjs.org/reflect-sync/-/reflect-sync-0.8.8.tgz","fileCount":106,"integrity":"sha512-wnfmE4fzKte51HeCOQLtyuVxB0OjCJFPg78Fv6CZQpNx5d1rAccag8By5RuJIZv9bdpdFCv/lJgEBVsFh28hmg==","signatures":[{"sig":"MEUCIQDuKhf02fq9k+8wnUSTrnxbvEKBR+zheE1Qw778I2Dh3wIgEywwspSMGAMF8Jagzfzp9RJNrl+Tfj9br7+gfpmcAcw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":768105},"main":"dist/index.js","type":"module","_from":"file:reflect-sync-0.8.8.tgz","types":"dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"sea":"pnpm bundle && pnpm sea:blob && pnpm sea:inject","test":"pnpm build && NODE_OPTIONS='--no-warnings' jest","build":"tsc -p tsconfig.json","clean":"rm -rf dist node_modules bundle","bundle":"pnpm install && pnpm build && pnpm bundle:worker && pnpm bundle:main","sea:blob":"node --experimental-sea-config sea.config.json","sea:inject":"cp $(command -v node) dist/reflect-sync && pnpx postject dist/reflect-sync NODE_SEA_BLOB dist/reflect-sync.blob --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2 2>&1 | sed -E '/find string offset for section name/d'","test:watch":"pnpm build &&  NODE_OPTIONS='--no-warnings' jest --watch","bundle:main":"rollup -c rollup.config.mjs","bundle:worker":"rollup -c rollup.worker.mjs"},"_npmUser":{"name":"wstein","email":"wstein@sagemath.com"},"_resolved":"/tmp/3fc1947c55210cb90f8c02b4b0aeee6e/reflect-sync-0.8.8.tgz","_integrity":"sha512-wnfmE4fzKte51HeCOQLtyuVxB0OjCJFPg78Fv6CZQpNx5d1rAccag8By5RuJIZv9bdpdFCv/lJgEBVsFh28hmg==","repository":{"url":"git+https://github.com/sagemathinc/reflect-sync.git","type":"git"},"_npmVersion":"11.6.0","description":"Fast rsync-powered two-way sync with SQLite metadata and SSH-friendly scanning.","directories":{},"_nodeVersion":"24.8.0","dependencies":{"ignore":"^7.0.5","chokidar":"^4.0.3","commander":"^14.0.2","ascii-table3":"^1.0.1","@nodelib/fs.walk":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","jest":"^29.7.0","rollup":"^4.52.5","ts-jest":"29","typescript":"^5.9.3","@types/jest":"^29.5.14","@types/node":"^24.9.1","@rollup/plugin-json":"^6.1.0","@rollup/plugin-terser":"^0.4.4","@rollup/plugin-commonjs":"^29.0.0","@commander-js/extra-typings":"^14.0.0","@rollup/plugin-node-resolve":"^16.0.3"},"_npmOperationalInternal":{"tmp":"tmp/reflect-sync_0.8.8_1762143373472_0.8300274941618204","host":"s3://npm-registry-packages-npm-production"}},"0.8.9":{"name":"reflect-sync","version":"0.8.9","keywords":["rsync","sqlite","sync","watch","ssh","mutagen","backup"],"author":{"url":"wstein@sagemath.com","name":"William Stein"},"license":"MIT","_id":"reflect-sync@0.8.9","maintainers":[{"name":"wstein","email":"wstein@sagemath.com"}],"homepage":"https://github.com/sagemathinc/reflect-sync","bugs":{"url":"https://github.com/sagemathinc/reflect-sync/issues"},"bin":{"reflect":"bin/reflect-sync.mjs","reflect-sync":"bin/reflect-sync.mjs"},"dist":{"shasum":"f90e098ff97e4a3722b6f23a91ea58acf071d77c","tarball":"https://registry.npmjs.org/reflect-sync/-/reflect-sync-0.8.9.tgz","fileCount":106,"integrity":"sha512-3n9bnYUQeiYKBst8RGBqRO801JsQp8NazSv12iUGgv0jddYpxpAP4gk1OTvQYHBySe0SIhLCM9f1hkbRZgIk4A==","signatures":[{"sig":"MEYCIQDmFeZpAJnopBPdcxPCiidl5UCYoSNr6kkB4Ib8nVa8FgIhAN8/AHBPDAr3YcCTQ5Ajy25kRWPElQNVVC3OT8tKbL1T","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":786747},"main":"dist/index.js","type":"module","_from":"file:reflect-sync-0.8.9.tgz","types":"dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"sea":"pnpm bundle && pnpm sea:blob && pnpm sea:inject","test":"pnpm build && NODE_OPTIONS='--no-warnings' jest","build":"tsc -p tsconfig.json","clean":"rm -rf dist node_modules bundle","bundle":"pnpm install && pnpm build && pnpm bundle:worker && pnpm bundle:main","sea:blob":"node --experimental-sea-config sea.config.json","sea:inject":"cp $(command -v node) dist/reflect-sync && pnpx postject dist/reflect-sync NODE_SEA_BLOB dist/reflect-sync.blob --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2 2>&1 | sed -E '/find string offset for section name/d'","test:watch":"pnpm build &&  NODE_OPTIONS='--no-warnings' jest --watch","bundle:main":"rollup -c rollup.config.mjs","bundle:worker":"rollup -c rollup.worker.mjs"},"_npmUser":{"name":"wstein","email":"wstein@sagemath.com"},"_resolved":"/tmp/088b50cb63ea22e8ab358ee945d49354/reflect-sync-0.8.9.tgz","_integrity":"sha512-3n9bnYUQeiYKBst8RGBqRO801JsQp8NazSv12iUGgv0jddYpxpAP4gk1OTvQYHBySe0SIhLCM9f1hkbRZgIk4A==","repository":{"url":"git+https://github.com/sagemathinc/reflect-sync.git","type":"git"},"_npmVersion":"11.6.0","description":"Fast rsync-powered two-way sync with SQLite metadata and SSH-friendly scanning.","directories":{},"_nodeVersion":"24.8.0","dependencies":{"ignore":"^7.0.5","chokidar":"^4.0.3","commander":"^14.0.2","ascii-table3":"^1.0.1","@nodelib/fs.walk":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","jest":"^29.7.0","rollup":"^4.52.5","ts-jest":"29","typescript":"^5.9.3","@types/jest":"^29.5.14","@types/node":"^24.9.1","@rollup/plugin-json":"^6.1.0","@rollup/plugin-terser":"^0.4.4","@rollup/plugin-commonjs":"^29.0.0","@commander-js/extra-typings":"^14.0.0","@rollup/plugin-node-resolve":"^16.0.3"},"_npmOperationalInternal":{"tmp":"tmp/reflect-sync_0.8.9_1762213764653_0.6632017912086658","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"reflect-sync","version":"0.9.0","keywords":["rsync","sqlite","sync","watch","ssh","mutagen","backup"],"author":{"url":"wstein@sagemath.com","name":"William Stein"},"license":"MIT","_id":"reflect-sync@0.9.0","maintainers":[{"name":"wstein","email":"wstein@sagemath.com"}],"homepage":"https://github.com/sagemathinc/reflect-sync","bugs":{"url":"https://github.com/sagemathinc/reflect-sync/issues"},"bin":{"reflect":"bin/reflect-sync.mjs","reflect-sync":"bin/reflect-sync.mjs"},"dist":{"shasum":"d0cec4ff03ff86430eacc893c7f3651d99e7540b","tarball":"https://registry.npmjs.org/reflect-sync/-/reflect-sync-0.9.0.tgz","fileCount":5,"integrity":"sha512-qiTaoPUQBTrHXiqwMf0BMBPs7kKZrdoLxZKm8diI7NblW8sD2lDDBxSMlb7x35Xh2pD52O+Y/MdoEKPqXhDkpQ==","signatures":[{"sig":"MEYCIQCLjulPEiPq5NDC1NG6WeT7U6EOUzD1icO8L2K0lqIU7wIhALKIfhQ5XjYhEtBkhuc9y9euNfl5c/krzuUgsI+SWhk2","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":307899},"main":"dist/bundle.mjs","type":"module","_from":"file:reflect-sync-0.9.0.tgz","engines":{"node":">=22"},"exports":{".":"./dist/bundle.mjs"},"scripts":{"sea":"pnpm bundle && pnpm sea:blob && pnpm sea:inject","test":"pnpm build && NODE_OPTIONS='--no-warnings' jest","build":"tsc -p tsconfig.json","clean":"rm -rf dist node_modules bundle","bundle":"pnpm install && pnpm build && pnpm bundle:worker && pnpm bundle:main","sea:blob":"node --experimental-sea-config sea.config.json","sea:inject":"cp $(command -v node) dist/reflect-sync && pnpx postject dist/reflect-sync NODE_SEA_BLOB dist/reflect-sync.blob --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2 2>&1 | sed -E '/find string offset for section name/d'","test:watch":"pnpm build &&  NODE_OPTIONS='--no-warnings' jest --watch","bundle:main":"rollup -c rollup.config.mjs","bundle:worker":"rollup -c rollup.worker.mjs"},"_npmUser":{"name":"wstein","email":"wstein@sagemath.com"},"_resolved":"/tmp/08a92ba9e6fde524a149b97e13c644c7/reflect-sync-0.9.0.tgz","_integrity":"sha512-qiTaoPUQBTrHXiqwMf0BMBPs7kKZrdoLxZKm8diI7NblW8sD2lDDBxSMlb7x35Xh2pD52O+Y/MdoEKPqXhDkpQ==","repository":{"url":"git+https://github.com/sagemathinc/reflect-sync.git","type":"git"},"_npmVersion":"11.6.0","description":"Fast rsync-powered two-way sync with SQLite metadata and SSH-friendly scanning.","directories":{},"_nodeVersion":"24.8.0","dependencies":{"ignore":"^7.0.5","chokidar":"^4.0.3","commander":"^14.0.2","ascii-table3":"^1.0.1","@nodelib/fs.walk":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","jest":"^29.7.0","rollup":"^4.52.5","ts-jest":"29","typescript":"^5.9.3","@types/jest":"^29.5.14","@types/node":"^24.9.1","@rollup/plugin-json":"^6.1.0","@rollup/plugin-terser":"^0.4.4","@rollup/plugin-commonjs":"^29.0.0","@commander-js/extra-typings":"^14.0.0","@rollup/plugin-node-resolve":"^16.0.3"},"_npmOperationalInternal":{"tmp":"tmp/reflect-sync_0.9.0_1762288019146_0.24968436204529976","host":"s3://npm-registry-packages-npm-production"}},"0.9.1":{"name":"reflect-sync","version":"0.9.1","keywords":["rsync","sqlite","sync","watch","ssh","mutagen","backup"],"author":{"url":"wstein@sagemath.com","name":"William Stein"},"license":"MIT","_id":"reflect-sync@0.9.1","maintainers":[{"name":"wstein","email":"wstein@sagemath.com"}],"homepage":"https://github.com/sagemathinc/reflect-sync","bugs":{"url":"https://github.com/sagemathinc/reflect-sync/issues"},"bin":{"reflect":"bin/reflect-sync.mjs","reflect-sync":"bin/reflect-sync.mjs"},"dist":{"shasum":"2d613e0ab8447781dfb571f3d692dbf44fa82f56","tarball":"https://registry.npmjs.org/reflect-sync/-/reflect-sync-0.9.1.tgz","fileCount":5,"integrity":"sha512-uHQOym7isNwa0t3oul6jRSG0zc+/b6b9ccsNZAdJ94mGlThJPdvae2YTd59hGope+/guQLja4JvCw8PC66uj8A==","signatures":[{"sig":"MEUCIQCrLXKdWSPkv3aZ8N57r2bA/kWQ0M1hORkZHLE3nvRREgIgSg5UM6ICmnhW6psF1WkHQyrZk7XS2PxLvPRI7iHkakg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":307948},"main":"dist/bundle.mjs","type":"module","_from":"file:reflect-sync-0.9.1.tgz","engines":{"node":">=22"},"exports":{".":"./dist/bundle.mjs"},"scripts":{"sea":"pnpm bundle && pnpm sea:blob && pnpm sea:inject","test":"pnpm build && NODE_OPTIONS='--no-warnings' jest","build":"tsc -p tsconfig.json","clean":"rm -rf dist node_modules bundle","bundle":"pnpm install && pnpm build && pnpm bundle:worker && pnpm bundle:main","sea:blob":"node --experimental-sea-config sea.config.json","sea:inject":"cp $(command -v node) dist/reflect-sync && pnpx postject dist/reflect-sync NODE_SEA_BLOB dist/reflect-sync.blob --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2 2>&1 | sed -E '/find string offset for section name/d'","test:watch":"pnpm build &&  NODE_OPTIONS='--no-warnings' jest --watch","bundle:main":"rollup -c rollup.config.mjs","bundle:worker":"rollup -c rollup.worker.mjs"},"_npmUser":{"name":"wstein","email":"wstein@sagemath.com"},"_resolved":"/tmp/67f3f66d8d44599c8c8651f9569f5289/reflect-sync-0.9.1.tgz","_integrity":"sha512-uHQOym7isNwa0t3oul6jRSG0zc+/b6b9ccsNZAdJ94mGlThJPdvae2YTd59hGope+/guQLja4JvCw8PC66uj8A==","repository":{"url":"git+https://github.com/sagemathinc/reflect-sync.git","type":"git"},"_npmVersion":"11.6.0","description":"Fast rsync-powered two-way sync with SQLite metadata and SSH-friendly scanning.","directories":{},"_nodeVersion":"24.8.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","jest":"^29.7.0","ignore":"^7.0.5","rollup":"^4.52.5","ts-jest":"29","chokidar":"^4.0.3","commander":"^14.0.2","typescript":"^5.9.3","@types/jest":"^29.5.14","@types/node":"^24.9.1","ascii-table3":"^1.0.1","@nodelib/fs.walk":"^3.0.1","@rollup/plugin-json":"^6.1.0","@rollup/plugin-terser":"^0.4.4","@rollup/plugin-commonjs":"^29.0.0","@commander-js/extra-typings":"^14.0.0","@rollup/plugin-node-resolve":"^16.0.3"},"_npmOperationalInternal":{"tmp":"tmp/reflect-sync_0.9.1_1762304427991_0.9732408884701531","host":"s3://npm-registry-packages-npm-production"}},"0.9.2":{"name":"reflect-sync","version":"0.9.2","keywords":["rsync","sqlite","sync","watch","ssh","mutagen","backup"],"author":{"url":"wstein@sagemath.com","name":"William Stein"},"license":"MIT","_id":"reflect-sync@0.9.2","maintainers":[{"name":"wstein","email":"wstein@sagemath.com"}],"homepage":"https://github.com/sagemathinc/reflect-sync","bugs":{"url":"https://github.com/sagemathinc/reflect-sync/issues"},"bin":{"reflect":"bin/reflect-sync.mjs","reflect-sync":"bin/reflect-sync.mjs"},"dist":{"shasum":"590e81439729882e3c7c9e773922ab5265f5f9ea","tarball":"https://registry.npmjs.org/reflect-sync/-/reflect-sync-0.9.2.tgz","fileCount":5,"integrity":"sha512-sp62/9zF659nknwJ2UPrAqxGy48AK58jzA3B6T7+BV0avx7lG3A0AcGjA4dPwgMSvSeVhWfUilBI56RlViHAFA==","signatures":[{"sig":"MEUCIFwCyEN01Pu3sbyqEn/3eVs1uUH1mLZdLkNpxDJOjf8lAiEAhHr0gtZqgxIDWXQnkFQ6hI4SybuiZ7qAkFcVpmq2wAU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":308818},"main":"dist/bundle.mjs","type":"module","_from":"file:reflect-sync-0.9.2.tgz","engines":{"node":">=22"},"exports":{".":"./dist/bundle.mjs"},"scripts":{"sea":"pnpm bundle && pnpm sea:blob && pnpm sea:inject","test":"pnpm build && NODE_OPTIONS='--no-warnings' jest","build":"tsc -p tsconfig.json","clean":"rm -rf dist node_modules bundle","bundle":"pnpm install && pnpm build && pnpm bundle:worker && pnpm bundle:main","sea:blob":"node --experimental-sea-config sea.config.json","sea:inject":"cp $(command -v node) dist/reflect-sync && pnpx postject dist/reflect-sync NODE_SEA_BLOB dist/reflect-sync.blob --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2 2>&1 | sed -E '/find string offset for section name/d'","test:watch":"pnpm build &&  NODE_OPTIONS='--no-warnings' jest --watch","bundle:main":"rollup -c rollup.config.mjs","bundle:worker":"rollup -c rollup.worker.mjs"},"_npmUser":{"name":"wstein","email":"wstein@sagemath.com"},"_resolved":"/tmp/3c02c709c172cc536a1e433d554a00c8/reflect-sync-0.9.2.tgz","_integrity":"sha512-sp62/9zF659nknwJ2UPrAqxGy48AK58jzA3B6T7+BV0avx7lG3A0AcGjA4dPwgMSvSeVhWfUilBI56RlViHAFA==","repository":{"url":"git+https://github.com/sagemathinc/reflect-sync.git","type":"git"},"_npmVersion":"11.6.0","description":"Fast rsync-powered two-way sync with SQLite metadata and SSH-friendly scanning.","directories":{},"_nodeVersion":"24.8.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","jest":"^29.7.0","ignore":"^7.0.5","rollup":"^4.52.5","ts-jest":"29","chokidar":"^4.0.3","commander":"^14.0.2","typescript":"^5.9.3","@types/jest":"^29.5.14","@types/node":"^24.9.1","ascii-table3":"^1.0.1","@nodelib/fs.walk":"^3.0.1","@rollup/plugin-json":"^6.1.0","@rollup/plugin-terser":"^0.4.4","@rollup/plugin-commonjs":"^29.0.0","@commander-js/extra-typings":"^14.0.0","@rollup/plugin-node-resolve":"^16.0.3"},"_npmOperationalInternal":{"tmp":"tmp/reflect-sync_0.9.2_1762305258526_0.820267717995669","host":"s3://npm-registry-packages-npm-production"}},"0.9.3":{"name":"reflect-sync","version":"0.9.3","keywords":["rsync","sqlite","sync","watch","ssh","mutagen","backup"],"author":{"url":"wstein@sagemath.com","name":"William Stein"},"license":"MIT","_id":"reflect-sync@0.9.3","maintainers":[{"name":"wstein","email":"wstein@sagemath.com"}],"homepage":"https://github.com/sagemathinc/reflect-sync","bugs":{"url":"https://github.com/sagemathinc/reflect-sync/issues"},"bin":{"reflect":"bin/reflect-sync.mjs","reflect-sync":"bin/reflect-sync.mjs"},"dist":{"shasum":"688d2f53924ab89cbff5146b26957e05555bed31","tarball":"https://registry.npmjs.org/reflect-sync/-/reflect-sync-0.9.3.tgz","fileCount":5,"integrity":"sha512-+AKQbV09racew/M13jPeAFKM8apGsi0bQuZ1fSmCs+on6vfBhf7h5X7UbpYwwgr+wSMYeSYyAfGeanjevb3msw==","signatures":[{"sig":"MEUCID30JF8rzOhXFMLLOMt10whI3adkuT7zNy18y/tbPge0AiEA7jdumGTo5ruTzZYHyzsCt2n+7t4BcMMckIwuH0hlPgs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":308915},"main":"dist/bundle.mjs","type":"module","_from":"file:reflect-sync-0.9.3.tgz","engines":{"node":">=22"},"exports":{".":"./dist/bundle.mjs"},"scripts":{"sea":"pnpm bundle && pnpm sea:blob && pnpm sea:inject","test":"pnpm build && NODE_OPTIONS='--no-warnings' jest","build":"tsc -p tsconfig.json","clean":"rm -rf dist node_modules bundle","bundle":"pnpm install && pnpm build && pnpm bundle:worker && pnpm bundle:main","sea:blob":"node --experimental-sea-config sea.config.json","sea:inject":"cp $(command -v node) dist/reflect-sync && pnpx postject dist/reflect-sync NODE_SEA_BLOB dist/reflect-sync.blob --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2 2>&1 | sed -E '/find string offset for section name/d'","test:watch":"pnpm build &&  NODE_OPTIONS='--no-warnings' jest --watch","bundle:main":"rollup -c rollup.config.mjs","bundle:worker":"rollup -c rollup.worker.mjs"},"_npmUser":{"name":"wstein","email":"wstein@sagemath.com"},"_resolved":"/tmp/27decbf15802139f82c3239e22cd6e4a/reflect-sync-0.9.3.tgz","_integrity":"sha512-+AKQbV09racew/M13jPeAFKM8apGsi0bQuZ1fSmCs+on6vfBhf7h5X7UbpYwwgr+wSMYeSYyAfGeanjevb3msw==","repository":{"url":"git+https://github.com/sagemathinc/reflect-sync.git","type":"git"},"_npmVersion":"11.6.0","description":"Fast rsync-powered two-way sync with SQLite metadata and SSH-friendly scanning.","directories":{},"_nodeVersion":"24.8.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","jest":"^29.7.0","ignore":"^7.0.5","rollup":"^4.52.5","ts-jest":"29","chokidar":"^4.0.3","commander":"^14.0.2","typescript":"^5.9.3","@types/jest":"^29.5.14","@types/node":"^24.9.1","ascii-table3":"^1.0.1","@nodelib/fs.walk":"^3.0.1","@rollup/plugin-json":"^6.1.0","@rollup/plugin-terser":"^0.4.4","@rollup/plugin-commonjs":"^29.0.0","@commander-js/extra-typings":"^14.0.0","@rollup/plugin-node-resolve":"^16.0.3"},"_npmOperationalInternal":{"tmp":"tmp/reflect-sync_0.9.3_1762308657171_0.5513797412094734","host":"s3://npm-registry-packages-npm-production"}},"0.9.4":{"name":"reflect-sync","version":"0.9.4","keywords":["rsync","sqlite","sync","watch","ssh","mutagen","backup"],"author":{"url":"wstein@sagemath.com","name":"William Stein"},"license":"MIT","_id":"reflect-sync@0.9.4","maintainers":[{"name":"wstein","email":"wstein@sagemath.com"}],"homepage":"https://github.com/sagemathinc/reflect-sync","bugs":{"url":"https://github.com/sagemathinc/reflect-sync/issues"},"bin":{"reflect":"bin/reflect-sync.mjs","reflect-sync":"bin/reflect-sync.mjs"},"dist":{"shasum":"219c9337349f26c6b6c8cc0bcb380504c3c5ec26","tarball":"https://registry.npmjs.org/reflect-sync/-/reflect-sync-0.9.4.tgz","fileCount":5,"integrity":"sha512-SjVVXdJ18SOIskX/4GJlDLjt3x1+N87j2aXU0CfzyBqaL22M8y4/5UFXwWLtWykdTFCey7cE6QQ/LkV0exsk7A==","signatures":[{"sig":"MEUCIFBXV/LIw1zb3IxKbIVlx9cIvHdnzZ3P7P36YgK1V66RAiEAlQUtfStx72c49+rmeiPGOF0kw0GMoU+YnPljR4hXWZg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":310041},"main":"dist/bundle.mjs","type":"module","_from":"file:reflect-sync-0.9.4.tgz","engines":{"node":">=22"},"exports":{".":"./dist/bundle.mjs"},"scripts":{"sea":"pnpm bundle && pnpm sea:blob && pnpm sea:inject","test":"pnpm build && NODE_OPTIONS='--no-warnings' jest","build":"tsc -p tsconfig.json","clean":"rm -rf dist node_modules bundle","bundle":"pnpm install && pnpm build && pnpm bundle:worker && pnpm bundle:main","sea:blob":"node --experimental-sea-config sea.config.json","sea:inject":"cp $(command -v node) dist/reflect-sync && pnpx postject dist/reflect-sync NODE_SEA_BLOB dist/reflect-sync.blob --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2 2>&1 | sed -E '/find string offset for section name/d'","test:watch":"pnpm build &&  NODE_OPTIONS='--no-warnings' jest --watch","bundle:main":"rollup -c rollup.config.mjs","bundle:worker":"rollup -c rollup.worker.mjs"},"_npmUser":{"name":"wstein","email":"wstein@sagemath.com"},"_resolved":"/tmp/b2f99abc63511597e6e68a93e05f9201/reflect-sync-0.9.4.tgz","_integrity":"sha512-SjVVXdJ18SOIskX/4GJlDLjt3x1+N87j2aXU0CfzyBqaL22M8y4/5UFXwWLtWykdTFCey7cE6QQ/LkV0exsk7A==","repository":{"url":"git+https://github.com/sagemathinc/reflect-sync.git","type":"git"},"_npmVersion":"11.6.0","description":"Fast rsync-powered two-way sync with SQLite metadata and SSH-friendly scanning.","directories":{},"_nodeVersion":"24.8.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","jest":"^29.7.0","ignore":"^7.0.5","rollup":"^4.52.5","ts-jest":"29","chokidar":"^4.0.3","commander":"^14.0.2","typescript":"^5.9.3","@types/jest":"^29.5.14","@types/node":"^24.9.1","ascii-table3":"^1.0.1","@nodelib/fs.walk":"^3.0.1","@rollup/plugin-json":"^6.1.0","@rollup/plugin-terser":"^0.4.4","@rollup/plugin-commonjs":"^29.0.0","@commander-js/extra-typings":"^14.0.0","@rollup/plugin-node-resolve":"^16.0.3"},"_npmOperationalInternal":{"tmp":"tmp/reflect-sync_0.9.4_1762313306404_0.9047368478404187","host":"s3://npm-registry-packages-npm-production"}},"0.10.2":{"name":"reflect-sync","version":"0.10.2","keywords":["rsync","sqlite","sync","watch","ssh","mutagen","backup"],"author":{"url":"wstein@sagemath.com","name":"William Stein"},"license":"MIT","_id":"reflect-sync@0.10.2","maintainers":[{"name":"wstein","email":"wstein@sagemath.com"}],"homepage":"https://github.com/sagemathinc/reflect-sync","bugs":{"url":"https://github.com/sagemathinc/reflect-sync/issues"},"bin":{"reflect":"bin/reflect-sync.mjs","reflect-sync":"bin/reflect-sync.mjs"},"dist":{"shasum":"ce81e1930864986417016ea5da04473cfd8c3af9","tarball":"https://registry.npmjs.org/reflect-sync/-/reflect-sync-0.10.2.tgz","fileCount":5,"integrity":"sha512-MNBNzDOX2ANuE0zh1Y680s1lTK+iX2eIhYQeIol02949ggf5yb1f85IUQaWUFNTL6NN6L3/YWytXW4vd9YQtSQ==","signatures":[{"sig":"MEYCIQDqMAbALKs8Cu7Yfs7HrD3nWgaXl82n4Y8lkUrq2KbhOQIhAK77wc9Gs6TUQGlEMqiDhPHOepfw5NMIfoWht1JaPco7","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":310101},"main":"dist/bundle.mjs","type":"module","_from":"file:reflect-sync-0.10.2.tgz","engines":{"node":">=22"},"exports":{".":"./dist/bundle.mjs"},"scripts":{"sea":"pnpm bundle && pnpm sea:blob && pnpm sea:inject","test":"pnpm build && NODE_OPTIONS='--no-warnings' jest","build":"tsc -p tsconfig.json","clean":"rm -rf dist node_modules bundle","bundle":"pnpm install && pnpm build && pnpm bundle:worker && pnpm bundle:main && chmod +x dist/bundle.mjs","sea:blob":"node --experimental-sea-config sea.config.json","sea:inject":"cp $(command -v node) dist/reflect-sync && pnpx postject dist/reflect-sync NODE_SEA_BLOB dist/reflect-sync.blob --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2 2>&1 | sed -E '/find string offset for section name/d'","test:watch":"pnpm build &&  NODE_OPTIONS='--no-warnings' jest --watch","bundle:main":"rollup -c rollup.config.mjs","bundle:worker":"rollup -c rollup.worker.mjs"},"_npmUser":{"name":"wstein","email":"wstein@sagemath.com"},"_resolved":"/tmp/36deffa4962fdd9829f7c8bb7ddb50d0/reflect-sync-0.10.2.tgz","_integrity":"sha512-MNBNzDOX2ANuE0zh1Y680s1lTK+iX2eIhYQeIol02949ggf5yb1f85IUQaWUFNTL6NN6L3/YWytXW4vd9YQtSQ==","repository":{"url":"git+https://github.com/sagemathinc/reflect-sync.git","type":"git"},"_npmVersion":"11.6.0","description":"Fast rsync-powered two-way sync with SQLite metadata and SSH-friendly scanning.","directories":{},"_nodeVersion":"24.8.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","jest":"^29.7.0","ignore":"^7.0.5","rollup":"^4.52.5","ts-jest":"29","chokidar":"^4.0.3","commander":"^14.0.2","typescript":"^5.9.3","@types/jest":"^29.5.14","@types/node":"^24.9.1","ascii-table3":"^1.0.1","@nodelib/fs.walk":"^3.0.1","@rollup/plugin-json":"^6.1.0","@rollup/plugin-terser":"^0.4.4","@rollup/plugin-commonjs":"^29.0.0","@commander-js/extra-typings":"^14.0.0","@rollup/plugin-node-resolve":"^16.0.3"},"_npmOperationalInternal":{"tmp":"tmp/reflect-sync_0.10.2_1762377344979_0.4846687890057493","host":"s3://npm-registry-packages-npm-production"}},"0.10.11":{"name":"reflect-sync","version":"0.10.11","keywords":["rsync","sqlite","sync","watch","ssh","mutagen","backup"],"author":{"url":"wstein@sagemath.com","name":"William Stein"},"license":"MIT","_id":"reflect-sync@0.10.11","maintainers":[{"name":"wstein","email":"wstein@sagemath.com"}],"homepage":"https://github.com/sagemathinc/reflect-sync","bugs":{"url":"https://github.com/sagemathinc/reflect-sync/issues"},"bin":{"reflect":"bin/reflect-sync.mjs","reflect-sync":"bin/reflect-sync.mjs"},"dist":{"shasum":"020efd206647d519613d5942cb8ba81a960678e0","tarball":"https://registry.npmjs.org/reflect-sync/-/reflect-sync-0.10.11.tgz","fileCount":5,"integrity":"sha512-Pcadoojm3PjzAowzJpUv+PqcGw9LgSrNcweQ+m8TWysrxqD4xyT3yIu4A/soJrf5gz7rv5WAEBqHBlvEQAVLKg==","signatures":[{"sig":"MEYCIQCz6wtuMa+9Q4QqCay79MeVBgtDSiOiIew7NbFhY2XDEwIhAMIlW8eQ/TfUWxFjkNNWk2IJVa8KMQnyTT7mgY1j6umX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":322366},"main":"dist/bundle.mjs","type":"module","_from":"file:reflect-sync-0.10.11.tgz","engines":{"node":">=22"},"exports":{".":"./dist/bundle.mjs"},"scripts":{"sea":"pnpm bundle && pnpm sea:blob && pnpm sea:inject","test":"pnpm build && NODE_OPTIONS='--no-warnings' jest","build":"tsc -p tsconfig.json","clean":"rm -rf dist node_modules bundle","bundle":"pnpm install && pnpm build && pnpm bundle:worker && pnpm bundle:main && chmod +x dist/bundle.mjs","sea:blob":"node --experimental-sea-config sea.config.json","sea:inject":"cp $(command -v node) dist/reflect-sync && pnpx postject dist/reflect-sync NODE_SEA_BLOB dist/reflect-sync.blob --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2 2>&1 | sed -E '/find string offset for section name/d'","test:watch":"pnpm build &&  NODE_OPTIONS='--no-warnings' jest --watch","bundle:main":"rollup -c rollup.config.mjs","bundle:worker":"rollup -c rollup.worker.mjs"},"_npmUser":{"name":"wstein","email":"wstein@sagemath.com"},"_resolved":"/tmp/63ccceedbfabbcbbb76e7553e74c9f59/reflect-sync-0.10.11.tgz","_integrity":"sha512-Pcadoojm3PjzAowzJpUv+PqcGw9LgSrNcweQ+m8TWysrxqD4xyT3yIu4A/soJrf5gz7rv5WAEBqHBlvEQAVLKg==","repository":{"url":"git+https://github.com/sagemathinc/reflect-sync.git","type":"git"},"_npmVersion":"11.6.0","description":"Fast rsync-powered two-way sync with SQLite metadata and SSH-friendly scanning.","directories":{},"_nodeVersion":"24.8.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","jest":"^29.7.0","ignore":"^7.0.5","rollup":"^4.52.5","ts-jest":"29","chokidar":"^4.0.3","commander":"^14.0.2","typescript":"^5.9.3","@types/jest":"^29.5.14","@types/node":"^24.9.1","ascii-table3":"^1.0.1","@nodelib/fs.walk":"^3.0.1","@rollup/plugin-json":"^6.1.0","@rollup/plugin-terser":"^0.4.4","@rollup/plugin-commonjs":"^29.0.0","@commander-js/extra-typings":"^14.0.0","@rollup/plugin-node-resolve":"^16.0.3"},"_npmOperationalInternal":{"tmp":"tmp/reflect-sync_0.10.11_1762416900495_0.08152068948715718","host":"s3://npm-registry-packages-npm-production"}},"0.11.0":{"name":"reflect-sync","version":"0.11.0","keywords":["rsync","sqlite","sync","watch","ssh","mutagen","backup"],"author":{"url":"wstein@sagemath.com","name":"William Stein"},"license":"MIT","_id":"reflect-sync@0.11.0","maintainers":[{"name":"wstein","email":"wstein@sagemath.com"}],"homepage":"https://github.com/sagemathinc/reflect-sync","bugs":{"url":"https://github.com/sagemathinc/reflect-sync/issues"},"bin":{"reflect":"bin/reflect-sync.mjs","reflect-sync":"bin/reflect-sync.mjs"},"dist":{"shasum":"5c6a5d9cb2ef620beeeaa98587c052601c7111ef","tarball":"https://registry.npmjs.org/reflect-sync/-/reflect-sync-0.11.0.tgz","fileCount":5,"integrity":"sha512-e6T2JIdcWoRnd4QgOJDmjIu8x634Djxv4pbI6DO9frtx3NkyTwd7ioLrsgekk8jEJ5t5o0lBOD4zgRAvkOp3eA==","signatures":[{"sig":"MEUCIQCRXwQax3zeEaLDnLp13yXfY1v9Er9FdW23B2uavPEH0QIgMPeqeo7c0GUyVOpZD9+NPbb0e1z/CfhviXj2XMdtg3Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":328322},"main":"dist/bundle.mjs","type":"module","_from":"file:reflect-sync-0.11.0.tgz","engines":{"node":">=22"},"exports":{".":"./dist/bundle.mjs"},"scripts":{"sea":"pnpm bundle && pnpm sea:blob && pnpm sea:inject","test":"pnpm build && NODE_OPTIONS='--no-warnings' jest","build":"tsc -p tsconfig.json","clean":"rm -rf dist node_modules bundle","bundle":"pnpm install && pnpm build && pnpm bundle:worker && pnpm bundle:main && chmod +x dist/bundle.mjs","sea:blob":"node --experimental-sea-config sea.config.json","sea:inject":"cp $(command -v node) dist/reflect-sync && pnpx postject dist/reflect-sync NODE_SEA_BLOB dist/reflect-sync.blob --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2 2>&1 | sed -E '/find string offset for section name/d'","test:watch":"pnpm build &&  NODE_OPTIONS='--no-warnings' jest --watch","bundle:main":"rollup -c rollup.config.mjs","bundle:worker":"rollup -c rollup.worker.mjs"},"_npmUser":{"name":"wstein","email":"wstein@sagemath.com"},"_resolved":"/tmp/29f7c35d056222297c7fff523b14b002/reflect-sync-0.11.0.tgz","_integrity":"sha512-e6T2JIdcWoRnd4QgOJDmjIu8x634Djxv4pbI6DO9frtx3NkyTwd7ioLrsgekk8jEJ5t5o0lBOD4zgRAvkOp3eA==","repository":{"url":"git+https://github.com/sagemathinc/reflect-sync.git","type":"git"},"_npmVersion":"11.6.0","description":"Fast rsync-powered two-way sync with SQLite metadata and SSH-friendly scanning.","directories":{},"_nodeVersion":"24.8.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","jest":"^29.7.0","ignore":"^7.0.5","rollup":"^4.52.5","ts-jest":"29","chokidar":"^4.0.3","commander":"^14.0.2","typescript":"^5.9.3","@types/jest":"^29.5.14","@types/node":"^24.9.1","ascii-table3":"^1.0.1","@nodelib/fs.walk":"^3.0.1","@rollup/plugin-json":"^6.1.0","@rollup/plugin-terser":"^0.4.4","@rollup/plugin-commonjs":"^29.0.0","@commander-js/extra-typings":"^14.0.0","@rollup/plugin-node-resolve":"^16.0.3"},"_npmOperationalInternal":{"tmp":"tmp/reflect-sync_0.11.0_1762475734614_0.9350401663734778","host":"s3://npm-registry-packages-npm-production"}},"0.12.0":{"name":"reflect-sync","version":"0.12.0","keywords":["rsync","sqlite","sync","watch","ssh","mutagen","backup"],"author":{"url":"wstein@sagemath.com","name":"William Stein"},"license":"MIT","_id":"reflect-sync@0.12.0","maintainers":[{"name":"wstein","email":"wstein@sagemath.com"}],"homepage":"https://github.com/sagemathinc/reflect-sync","bugs":{"url":"https://github.com/sagemathinc/reflect-sync/issues"},"bin":{"reflect":"bin/reflect-sync.mjs","reflect-sync":"bin/reflect-sync.mjs"},"dist":{"shasum":"d25cbceaa541b8c1aec20fd85ba4278a0292db01","tarball":"https://registry.npmjs.org/reflect-sync/-/reflect-sync-0.12.0.tgz","fileCount":5,"integrity":"sha512-9zVeII3x29aVFnFUo6u/du+Kk2krMSROFVKHbYFYhrZh1MGJR5mcgdF3Q4WNjdLYonI3e3nOIu8R2AH4iiyrLw==","signatures":[{"sig":"MEUCIGdu+OFkZVXBqE5VMVR3arec9Oy1pBmanXT43cw5dE7GAiEAsR7b0qYRbO/8fvqo95ytmWkywu9w+Uz9p0J1HK/Cmh8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":348355},"main":"dist/bundle.mjs","type":"module","_from":"file:reflect-sync-0.12.0.tgz","engines":{"node":">=22"},"exports":{".":"./dist/bundle.mjs"},"scripts":{"sea":"pnpm bundle && pnpm sea:blob && pnpm sea:inject","test":"pnpm build && NODE_OPTIONS='--no-warnings' jest","build":"tsc -p tsconfig.json","clean":"rm -rf dist node_modules bundle","bundle":"pnpm install && pnpm build && pnpm bundle:worker && pnpm bundle:main && chmod +x dist/bundle.mjs","sea:blob":"node --experimental-sea-config sea.config.json","sea:inject":"cp $(command -v node) dist/reflect-sync && pnpx postject dist/reflect-sync NODE_SEA_BLOB dist/reflect-sync.blob --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2 2>&1 | sed -E '/find string offset for section name/d'","test:watch":"pnpm build &&  NODE_OPTIONS='--no-warnings' jest --watch","bundle:main":"rollup -c rollup.config.mjs","prettier-all":"prettier -w src","bundle:worker":"rollup -c rollup.worker.mjs"},"_npmUser":{"name":"wstein","email":"wstein@sagemath.com"},"_resolved":"/tmp/b429980c17339b34c68f33e23c246a9b/reflect-sync-0.12.0.tgz","_integrity":"sha512-9zVeII3x29aVFnFUo6u/du+Kk2krMSROFVKHbYFYhrZh1MGJR5mcgdF3Q4WNjdLYonI3e3nOIu8R2AH4iiyrLw==","repository":{"url":"git+https://github.com/sagemathinc/reflect-sync.git","type":"git"},"_npmVersion":"11.6.0","description":"Fast rsync-powered two-way sync with SQLite metadata and SSH-friendly scanning.","directories":{},"_nodeVersion":"24.8.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","jest":"^29.7.0","ignore":"^7.0.5","rollup":"^4.52.5","ts-jest":"29","chokidar":"^4.0.3","prettier":"^3.6.2","commander":"^14.0.2","typescript":"^5.9.3","@types/jest":"^29.5.14","@types/node":"^24.9.1","ascii-table3":"^1.0.1","@nodelib/fs.walk":"^3.0.1","@rollup/plugin-json":"^6.1.0","@rollup/plugin-terser":"^0.4.4","@rollup/plugin-commonjs":"^29.0.0","@commander-js/extra-typings":"^14.0.0","@rollup/plugin-node-resolve":"^16.0.3"},"_npmOperationalInternal":{"tmp":"tmp/reflect-sync_0.12.0_1762752549240_0.10596511859014757","host":"s3://npm-registry-packages-npm-production"}},"0.12.1":{"name":"reflect-sync","version":"0.12.1","keywords":["rsync","sqlite","sync","watch","ssh","mutagen","backup"],"author":{"url":"wstein@sagemath.com","name":"William Stein"},"license":"MIT","_id":"reflect-sync@0.12.1","maintainers":[{"name":"wstein","email":"wstein@sagemath.com"}],"homepage":"https://github.com/sagemathinc/reflect-sync","bugs":{"url":"https://github.com/sagemathinc/reflect-sync/issues"},"bin":{"reflect":"bin/reflect-sync.mjs","reflect-sync":"bin/reflect-sync.mjs"},"dist":{"shasum":"014f59a8bd76ca651fa09f2e5a3eca59c83096fd","tarball":"https://registry.npmjs.org/reflect-sync/-/reflect-sync-0.12.1.tgz","fileCount":5,"integrity":"sha512-lumROGeapkePn1XwtmsRhCl3Gko1e+WLh3KbHY/m8uTc/xLIl7TkhMcE6xPAP8m+PVndy0Dgl6OcBiA2xQ41PA==","signatures":[{"sig":"MEUCIFRxpJB+5DZQ6WJMW98JlToZoKzqZN7hXOds/oX97OpZAiEA60a9NPzfQYpHZ2o7+Kalz94KuxXYhMilerxKPnLJS5Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":348321},"main":"dist/bundle.mjs","type":"module","_from":"file:reflect-sync-0.12.1.tgz","engines":{"node":">=22"},"exports":{".":"./dist/bundle.mjs"},"scripts":{"sea":"pnpm bundle && pnpm sea:blob && pnpm sea:inject","test":"pnpm build && NODE_OPTIONS='--no-warnings' jest","build":"tsc -p tsconfig.json","clean":"rm -rf dist node_modules bundle","bundle":"pnpm install && pnpm build && pnpm bundle:worker && pnpm bundle:main && chmod +x dist/bundle.mjs","sea:blob":"node --experimental-sea-config sea.config.json","sea:inject":"cp $(command -v node) dist/reflect-sync && pnpx postject dist/reflect-sync NODE_SEA_BLOB dist/reflect-sync.blob --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2 2>&1 | sed -E '/find string offset for section name/d'","test:watch":"pnpm build &&  NODE_OPTIONS='--no-warnings' jest --watch","bundle:main":"rollup -c rollup.config.mjs","prettier-all":"prettier -w src","bundle:worker":"rollup -c rollup.worker.mjs"},"_npmUser":{"name":"wstein","email":"wstein@sagemath.com"},"_resolved":"/tmp/22f45e31cf82836e5ba467c56c3aa150/reflect-sync-0.12.1.tgz","_integrity":"sha512-lumROGeapkePn1XwtmsRhCl3Gko1e+WLh3KbHY/m8uTc/xLIl7TkhMcE6xPAP8m+PVndy0Dgl6OcBiA2xQ41PA==","repository":{"url":"git+https://github.com/sagemathinc/reflect-sync.git","type":"git"},"_npmVersion":"11.6.0","description":"Fast rsync-powered two-way sync with SQLite metadata and SSH-friendly scanning.","directories":{},"_nodeVersion":"24.8.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","jest":"^29.7.0","ignore":"^7.0.5","rollup":"^4.52.5","ts-jest":"29","chokidar":"^4.0.3","prettier":"^3.6.2","commander":"^14.0.2","typescript":"^5.9.3","@types/jest":"^29.5.14","@types/node":"^24.9.1","ascii-table3":"^1.0.1","@nodelib/fs.walk":"^3.0.1","@rollup/plugin-json":"^6.1.0","@rollup/plugin-terser":"^0.4.4","@rollup/plugin-commonjs":"^29.0.0","@commander-js/extra-typings":"^14.0.0","@rollup/plugin-node-resolve":"^16.0.3"},"_npmOperationalInternal":{"tmp":"tmp/reflect-sync_0.12.1_1762756723887_0.12545487930115384","host":"s3://npm-registry-packages-npm-production"}},"0.12.2":{"name":"reflect-sync","version":"0.12.2","keywords":["rsync","sqlite","sync","watch","ssh","mutagen","backup"],"author":{"url":"wstein@sagemath.com","name":"William Stein"},"license":"MIT","_id":"reflect-sync@0.12.2","maintainers":[{"name":"wstein","email":"wstein@sagemath.com"}],"homepage":"https://github.com/sagemathinc/reflect-sync","bugs":{"url":"https://github.com/sagemathinc/reflect-sync/issues"},"bin":{"reflect":"bin/reflect-sync.mjs","reflect-sync":"bin/reflect-sync.mjs"},"dist":{"shasum":"0de7798d6aa6b5e3b25b0627f74f0fd929b60b11","tarball":"https://registry.npmjs.org/reflect-sync/-/reflect-sync-0.12.2.tgz","fileCount":5,"integrity":"sha512-NbRZwBKrj1txx+jIBB9o+sWx70F3UXc5f3XYLarMAutdcyFQaWCqmJS+5HYfajeTVuQY1dO22ki5myWShJbvyw==","signatures":[{"sig":"MEUCIQDuX2V+7trSs2iCDxN13FfYWzGX30GZCG9v1U3PsId0EgIgGZj0Tx1D22WemOw4Wb1d+Z0fCTxWVKTCW6Gaq9wllQ0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":311980},"main":"dist/bundle.mjs","type":"module","_from":"file:reflect-sync-0.12.2.tgz","engines":{"node":">=22"},"exports":{".":"./dist/bundle.mjs"},"scripts":{"sea":"pnpm bundle && pnpm sea:blob && pnpm sea:inject","test":"pnpm build && NODE_OPTIONS='--no-warnings' jest","build":"tsc -p tsconfig.json","clean":"rm -rf dist node_modules bundle","bundle":"pnpm install && pnpm build && pnpm bundle:worker && pnpm bundle:main && chmod +x dist/bundle.mjs","sea:blob":"node --experimental-sea-config sea.config.json","sea:inject":"cp $(command -v node) dist/reflect-sync && pnpx postject dist/reflect-sync NODE_SEA_BLOB dist/reflect-sync.blob --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2 2>&1 | sed -E '/find string offset for section name/d'","test:watch":"pnpm build &&  NODE_OPTIONS='--no-warnings' jest --watch","bundle:main":"rollup -c rollup.config.mjs","prettier-all":"prettier -w src","bundle:worker":"rollup -c rollup.worker.mjs"},"_npmUser":{"name":"wstein","email":"wstein@sagemath.com"},"_resolved":"/tmp/3c662fb02522d9d71e95260c8d31cdb9/reflect-sync-0.12.2.tgz","_integrity":"sha512-NbRZwBKrj1txx+jIBB9o+sWx70F3UXc5f3XYLarMAutdcyFQaWCqmJS+5HYfajeTVuQY1dO22ki5myWShJbvyw==","repository":{"url":"git+https://github.com/sagemathinc/reflect-sync.git","type":"git"},"_npmVersion":"11.6.0","description":"Fast rsync-powered two-way sync with SQLite metadata and SSH-friendly scanning.","directories":{},"_nodeVersion":"24.8.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","jest":"^29.7.0","ignore":"^7.0.5","rollup":"^4.52.5","ts-jest":"29","chokidar":"^4.0.3","prettier":"^3.6.2","commander":"^14.0.2","typescript":"^5.9.3","@types/jest":"^29.5.14","@types/node":"^24.9.1","ascii-table3":"^1.0.1","@nodelib/fs.walk":"^3.0.1","@rollup/plugin-json":"^6.1.0","@rollup/plugin-terser":"^0.4.4","@rollup/plugin-commonjs":"^29.0.0","@commander-js/extra-typings":"^14.0.0","@rollup/plugin-node-resolve":"^16.0.3"},"_npmOperationalInternal":{"tmp":"tmp/reflect-sync_0.12.2_1762895798337_0.23813783629334062","host":"s3://npm-registry-packages-npm-production"}},"0.13.0":{"name":"reflect-sync","version":"0.13.0","keywords":["rsync","sqlite","sync","watch","ssh","mutagen","backup"],"author":{"url":"wstein@sagemath.com","name":"William Stein"},"license":"MIT","_id":"reflect-sync@0.13.0","maintainers":[{"name":"wstein","email":"wstein@sagemath.com"}],"homepage":"https://github.com/sagemathinc/reflect-sync","bugs":{"url":"https://github.com/sagemathinc/reflect-sync/issues"},"bin":{"reflect":"bin/reflect-sync.mjs","reflect-sync":"bin/reflect-sync.mjs"},"dist":{"shasum":"315818e97101ad6ba2e3c28aeb3e78d562139362","tarball":"https://registry.npmjs.org/reflect-sync/-/reflect-sync-0.13.0.tgz","fileCount":5,"integrity":"sha512-qkrne++qNrz1GsT9ApJpprZQHTq3wAUtJXv9FbYX9sZPUt8Zx+JZtNooS1P9OjVl9oebg7myzHHrmeGReN8X3w==","signatures":[{"sig":"MEYCIQCNwjHSTAt2Rfly50kK3i6txerBU5/gt1yGj+/roaVhwwIhAOh3h0y25++PFgEti27v7ZodNk2AkA/nkDy9vSC4wz7P","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":330446},"main":"dist/bundle.mjs","type":"module","_from":"file:reflect-sync-0.13.0.tgz","engines":{"node":">=22"},"exports":{".":"./dist/bundle.mjs"},"scripts":{"sea":"pnpm bundle && pnpm sea:blob && pnpm sea:inject","test":"pnpm build && NODE_OPTIONS='--no-warnings' jest","build":"tsc -p tsconfig.json","clean":"rm -rf dist node_modules bundle","bundle":"pnpm install && pnpm build && pnpm bundle:worker && pnpm bundle:main && chmod +x dist/bundle.mjs","sea:blob":"node --experimental-sea-config sea.config.json","sea:inject":"cp $(command -v node) dist/reflect-sync && pnpx postject dist/reflect-sync NODE_SEA_BLOB dist/reflect-sync.blob --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2 2>&1 | sed -E '/find string offset for section name/d'","test:watch":"pnpm build &&  NODE_OPTIONS='--no-warnings' jest --watch","bundle:main":"rollup -c rollup.config.mjs","prettier-all":"prettier -w src","bundle:worker":"rollup -c rollup.worker.mjs"},"_npmUser":{"name":"wstein","email":"wstein@sagemath.com"},"_resolved":"/tmp/458dca63ef31aebdb7044c9842bd826d/reflect-sync-0.13.0.tgz","_integrity":"sha512-qkrne++qNrz1GsT9ApJpprZQHTq3wAUtJXv9FbYX9sZPUt8Zx+JZtNooS1P9OjVl9oebg7myzHHrmeGReN8X3w==","repository":{"url":"git+https://github.com/sagemathinc/reflect-sync.git","type":"git"},"_npmVersion":"11.6.0","description":"Fast rsync-powered two-way sync with SQLite metadata and SSH-friendly scanning.","directories":{},"_nodeVersion":"24.8.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","jest":"^29.7.0","ignore":"^7.0.5","rollup":"^4.52.5","ts-jest":"29","chokidar":"^4.0.3","prettier":"^3.6.2","commander":"^14.0.2","typescript":"^5.9.3","@types/jest":"^29.5.14","@types/node":"^24.9.1","ascii-table3":"^1.0.1","@nodelib/fs.walk":"^3.0.1","@rollup/plugin-json":"^6.1.0","@rollup/plugin-terser":"^0.4.4","@rollup/plugin-commonjs":"^29.0.0","@commander-js/extra-typings":"^14.0.0","@rollup/plugin-node-resolve":"^16.0.3"},"_npmOperationalInternal":{"tmp":"tmp/reflect-sync_0.13.0_1763093812294_0.23735360234919312","host":"s3://npm-registry-packages-npm-production"}},"0.13.1":{"name":"reflect-sync","version":"0.13.1","keywords":["rsync","sqlite","sync","watch","ssh","mutagen","backup"],"author":{"url":"wstein@sagemath.com","name":"William Stein"},"license":"MIT","_id":"reflect-sync@0.13.1","maintainers":[{"name":"wstein","email":"wstein@sagemath.com"}],"homepage":"https://github.com/sagemathinc/reflect-sync","bugs":{"url":"https://github.com/sagemathinc/reflect-sync/issues"},"bin":{"reflect":"bin/reflect-sync.mjs","reflect-sync":"bin/reflect-sync.mjs"},"dist":{"shasum":"bd9ae8dfde5881717a3762a8d90492b7898bdf49","tarball":"https://registry.npmjs.org/reflect-sync/-/reflect-sync-0.13.1.tgz","fileCount":5,"integrity":"sha512-gbVg0oGLovg0YIxGub30xvkyPdIm6GuuBdUR/HcbTxObsEg9g/uhTacuVOGUXkcTrfwd+vOeThKLHdC2nwRDOA==","signatures":[{"sig":"MEYCIQD6CvgJXQ3UZ4IwWSNeCIGmglRikAiNZe7Kkxkab4ms+AIhAJt3jSIN4FFqueWnnIkJODBr5wpIVw+EZMgozyTQzCFp","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":334892},"main":"dist/bundle.mjs","type":"module","_from":"file:reflect-sync-0.13.1.tgz","engines":{"node":">=22"},"exports":{".":"./dist/bundle.mjs"},"scripts":{"sea":"pnpm bundle && pnpm sea:blob && pnpm sea:inject","test":"pnpm build && NODE_OPTIONS='--no-warnings' jest","build":"tsc -p tsconfig.json","clean":"rm -rf dist node_modules bundle","bundle":"pnpm install && pnpm build && pnpm bundle:worker && pnpm bundle:main && chmod +x dist/bundle.mjs","sea:blob":"node --experimental-sea-config sea.config.json","sea:inject":"cp $(command -v node) dist/reflect-sync && pnpx postject dist/reflect-sync NODE_SEA_BLOB dist/reflect-sync.blob --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2 2>&1 | sed -E '/find string offset for section name/d'","test:watch":"pnpm build &&  NODE_OPTIONS='--no-warnings' jest --watch","bundle:main":"rollup -c rollup.config.mjs","prettier-all":"prettier -w src","bundle:worker":"rollup -c rollup.worker.mjs"},"_npmUser":{"name":"wstein","email":"wstein@sagemath.com"},"_resolved":"/tmp/c1012307ac8c28839bfead73eab1c3f4/reflect-sync-0.13.1.tgz","_integrity":"sha512-gbVg0oGLovg0YIxGub30xvkyPdIm6GuuBdUR/HcbTxObsEg9g/uhTacuVOGUXkcTrfwd+vOeThKLHdC2nwRDOA==","repository":{"url":"git+https://github.com/sagemathinc/reflect-sync.git","type":"git"},"_npmVersion":"11.6.0","description":"Fast bidirectional file synchronization using rsync and sqlite","directories":{},"_nodeVersion":"24.8.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","jest":"^29.7.0","ignore":"^7.0.5","rollup":"^4.52.5","ts-jest":"29","chokidar":"^4.0.3","prettier":"^3.6.2","commander":"^14.0.2","typescript":"^5.9.3","@types/jest":"^29.5.14","@types/node":"^24.9.1","ascii-table3":"^1.0.1","@nodelib/fs.walk":"^3.0.1","@rollup/plugin-json":"^6.1.0","@rollup/plugin-terser":"^0.4.4","@rollup/plugin-commonjs":"^29.0.0","@commander-js/extra-typings":"^14.0.0","@rollup/plugin-node-resolve":"^16.0.3"},"_npmOperationalInternal":{"tmp":"tmp/reflect-sync_0.13.1_1763180209286_0.8678997124973358","host":"s3://npm-registry-packages-npm-production"}},"0.13.2":{"name":"reflect-sync","version":"0.13.2","keywords":["rsync","sqlite","sync","watch","ssh","mutagen","backup"],"author":{"url":"wstein@sagemath.com","name":"William Stein"},"license":"MIT","_id":"reflect-sync@0.13.2","maintainers":[{"name":"wstein","email":"wstein@sagemath.com"}],"homepage":"https://github.com/sagemathinc/reflect-sync","bugs":{"url":"https://github.com/sagemathinc/reflect-sync/issues"},"bin":{"reflect":"bin/reflect-sync.mjs","reflect-sync":"bin/reflect-sync.mjs"},"dist":{"shasum":"114de240154780015310cdeca053cdda2201d252","tarball":"https://registry.npmjs.org/reflect-sync/-/reflect-sync-0.13.2.tgz","fileCount":5,"integrity":"sha512-O/q62OgDrqp9LB+nC/L5+Uhv9Xjok5aruxs3fIL0DbqdNuogVjUHV3etXRkzvFbrnO8KR1OZ2wlPUc5eBCEJrw==","signatures":[{"sig":"MEQCIC2BlRFNjwChE/2r6dSsarkLmmAX81R+Bzp8hcNJC+qjAiBtBK8z8q2Xa/hKE9wLGaEMJcaYSRHwJl9VCxk4H9OuNA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":337090},"main":"dist/bundle.mjs","type":"module","_from":"file:reflect-sync-0.13.2.tgz","engines":{"node":">=22"},"exports":{".":"./dist/bundle.mjs"},"scripts":{"sea":"pnpm bundle && pnpm sea:blob && pnpm sea:inject","lint":"eslint \"src/**/*.{ts,tsx}\"","test":"pnpm build && NODE_OPTIONS='--no-warnings' jest --maxWorkers 50%","build":"tsc -p tsconfig.json","clean":"rm -rf dist node_modules bundle","bundle":"pnpm install && pnpm build && pnpm bundle:worker && pnpm bundle:main && chmod +x dist/bundle.mjs","sea:blob":"node --experimental-sea-config sea.config.json","sea:inject":"cp $(command -v node) dist/reflect-sync && pnpx postject dist/reflect-sync NODE_SEA_BLOB dist/reflect-sync.blob --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2 2>&1 | sed -E '/find string offset for section name/d'","test:watch":"pnpm build &&  NODE_OPTIONS='--no-warnings' jest --watch","bundle:main":"rollup -c rollup.config.mjs","prettier-all":"prettier -w src","bundle:worker":"rollup -c rollup.worker.mjs"},"_npmUser":{"name":"wstein","email":"wstein@sagemath.com"},"_resolved":"/tmp/545cd2ef4da2b103e42c7fb961e7befe/reflect-sync-0.13.2.tgz","_integrity":"sha512-O/q62OgDrqp9LB+nC/L5+Uhv9Xjok5aruxs3fIL0DbqdNuogVjUHV3etXRkzvFbrnO8KR1OZ2wlPUc5eBCEJrw==","repository":{"url":"git+https://github.com/sagemathinc/reflect-sync.git","type":"git"},"_npmVersion":"11.6.0","description":"Fast bidirectional file synchronization using rsync and sqlite","directories":{},"_nodeVersion":"24.8.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","jest":"^29.7.0","eslint":"^9.39.1","ignore":"^7.0.5","rollup":"^4.52.5","ts-jest":"29","chokidar":"^4.0.3","prettier":"^3.6.2","commander":"^14.0.2","typescript":"^5.9.3","@types/jest":"^29.5.14","@types/node":"^24.9.1","ascii-table3":"^1.0.1","@nodelib/fs.walk":"^3.0.1","@rollup/plugin-json":"^6.1.0","eslint-plugin-import":"^2.32.0","@rollup/plugin-terser":"^0.4.4","@rollup/plugin-commonjs":"^29.0.0","@typescript-eslint/parser":"^8.46.4","@commander-js/extra-typings":"^14.0.0","@rollup/plugin-node-resolve":"^16.0.3","@typescript-eslint/eslint-plugin":"^8.46.4"},"_npmOperationalInternal":{"tmp":"tmp/reflect-sync_0.13.2_1763188745661_0.395944682981725","host":"s3://npm-registry-packages-npm-production"}},"0.14.1":{"name":"reflect-sync","version":"0.14.1","keywords":["rsync","sqlite","sync","watch","ssh","mutagen","backup"],"author":{"url":"wstein@sagemath.com","name":"William Stein"},"license":"MIT","_id":"reflect-sync@0.14.1","maintainers":[{"name":"wstein","email":"wstein@sagemath.com"}],"homepage":"https://github.com/sagemathinc/reflect-sync","bugs":{"url":"https://github.com/sagemathinc/reflect-sync/issues"},"bin":{"reflect":"bin/reflect-sync.mjs","reflect-sync":"bin/reflect-sync.mjs"},"dist":{"shasum":"7a5c4bc347eedb436d617e9557146942ab83a3f5","tarball":"https://registry.npmjs.org/reflect-sync/-/reflect-sync-0.14.1.tgz","fileCount":5,"integrity":"sha512-jtMin650fhwq7ypRdJFruP+T5SiQfWr/vGs9txIwhmuOxTo7PvZDWQSN1oBAej53Cw620Yf+iXhvovdb/01IgA==","signatures":[{"sig":"MEQCIF9UoZrkMsbXXllMUmVhT47kS5JTLuwdeX6Vc4mwFkCYAiBE9YCL54pjSS/4ihI6ZUgooJ8qaDUV+nVYwEntUEYAOg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":352480},"main":"dist/bundle.mjs","type":"module","_from":"file:reflect-sync-0.14.1.tgz","engines":{"node":">=22"},"exports":{".":"./dist/bundle.mjs"},"scripts":{"sea":"pnpm bundle && pnpm sea:blob && pnpm sea:inject","lint":"eslint \"src/**/*.{ts,tsx}\"","test":"pnpm build && NODE_OPTIONS='--no-warnings' jest --maxWorkers 1pnp","build":"tsc -p tsconfig.json","clean":"rm -rf dist node_modules bundle","bundle":"pnpm install && pnpm build && pnpm bundle:worker && pnpm bundle:main && chmod +x dist/bundle.mjs","sanity":"pnpm prettier-all && pnpm build && pnpm lint && pnpm test","sea:blob":"node --experimental-sea-config sea.config.json","sea:inject":"cp $(command -v node) dist/reflect-sync && pnpx postject dist/reflect-sync NODE_SEA_BLOB dist/reflect-sync.blob --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2 2>&1 | sed -E '/find string offset for section name/d'","test:watch":"pnpm build &&  NODE_OPTIONS='--no-warnings' jest --watch","bundle:main":"rollup -c rollup.config.mjs","prettier-all":"prettier -w src","bundle:worker":"rollup -c rollup.worker.mjs"},"_npmUser":{"name":"wstein","email":"wstein@sagemath.com"},"_resolved":"/tmp/7bb3a3b75134c4f6082d4c60cc9ee22f/reflect-sync-0.14.1.tgz","_integrity":"sha512-jtMin650fhwq7ypRdJFruP+T5SiQfWr/vGs9txIwhmuOxTo7PvZDWQSN1oBAej53Cw620Yf+iXhvovdb/01IgA==","repository":{"url":"git+https://github.com/sagemathinc/reflect-sync.git","type":"git"},"_npmVersion":"11.6.0","description":"Fast bidirectional file synchronization using rsync and sqlite","directories":{},"_nodeVersion":"24.8.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","jest":"^29.7.0","eslint":"^9.39.1","ignore":"^7.0.5","rollup":"^4.52.5","ts-jest":"29","chokidar":"^4.0.3","prettier":"^3.6.2","commander":"^14.0.2","typescript":"^5.9.3","@types/jest":"^29.5.14","@types/node":"^24.9.1","ascii-table3":"^1.0.1","@nodelib/fs.walk":"^3.0.1","@rollup/plugin-json":"^6.1.0","eslint-plugin-import":"^2.32.0","@rollup/plugin-terser":"^0.4.4","@rollup/plugin-commonjs":"^29.0.0","@typescript-eslint/parser":"^8.46.4","@commander-js/extra-typings":"^14.0.0","@rollup/plugin-node-resolve":"^16.0.3","@typescript-eslint/eslint-plugin":"^8.46.4"},"_npmOperationalInternal":{"tmp":"tmp/reflect-sync_0.14.1_1763269481746_0.3288169538533334","host":"s3://npm-registry-packages-npm-production"}},"0.14.2":{"name":"reflect-sync","version":"0.14.2","keywords":["rsync","sqlite","sync","watch","ssh","mutagen","backup"],"author":{"url":"wstein@sagemath.com","name":"William Stein"},"license":"MIT","_id":"reflect-sync@0.14.2","maintainers":[{"name":"wstein","email":"wstein@sagemath.com"}],"homepage":"https://github.com/sagemathinc/reflect-sync","bugs":{"url":"https://github.com/sagemathinc/reflect-sync/issues"},"bin":{"reflect":"bin/reflect-sync.mjs","reflect-sync":"bin/reflect-sync.mjs"},"dist":{"shasum":"9f1390d1bc77c2f95a338a838ef64c4ff3400eff","tarball":"https://registry.npmjs.org/reflect-sync/-/reflect-sync-0.14.2.tgz","fileCount":5,"integrity":"sha512-pWwa9BaxVOD7nevhV+PH1WftXRp4By+Uo7+S23MzIp8SJr3m+1SjXKJ3HyyDGI724tyIhvq62GYNa2eVuiJuaw==","signatures":[{"sig":"MEUCICFSzHqJhmUF35+ocB5x1DlVB+dswkDyzBrgXsEpTjETAiEAqbuT7YDlsq2WOE6ZB1BONc1UTmS1jreWx6JgtZC6e9U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":365145},"main":"dist/bundle.mjs","type":"module","_from":"file:reflect-sync-0.14.2.tgz","engines":{"node":">=22"},"exports":{".":"./dist/bundle.mjs"},"scripts":{"sea":"pnpm bundle && pnpm sea:blob && pnpm sea:inject","lint":"eslint \"src/**/*.{ts,tsx}\"","test":"pnpm build && NODE_OPTIONS='--no-warnings' jest --maxWorkers 50%","build":"tsc -p tsconfig.json","clean":"rm -rf dist node_modules bundle","bundle":"pnpm install && pnpm build && pnpm bundle:worker && pnpm bundle:main && chmod +x dist/bundle.mjs","sanity":"pnpm prettier-all && pnpm build && pnpm lint && pnpm test","sea:blob":"node --experimental-sea-config sea.config.json","sea:deno":"deno compile --allow-all --output dist/reflect-sync dist/cli.js","sea:inject":"cp $(command -v node) dist/reflect-sync && pnpx postject dist/reflect-sync NODE_SEA_BLOB dist/reflect-sync.blob --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2 2>&1 | sed -E '/find string offset for section name/d'","test:watch":"pnpm build &&  NODE_OPTIONS='--no-warnings' jest --watch","bundle:main":"rollup -c rollup.config.mjs","prettier-all":"prettier -w src","bundle:worker":"rollup -c rollup.worker.mjs","sea:deno:windows":"deno compile --allow-all --output dist/reflect-sync-windows.exe --target x86_64-pc-windows-msvc dist/cli.js","sea:deno:x86_64-apple":"deno compile --allow-all --output dist/reflect-sync-x86_64-apple --target x86_64-apple-darwin dist/cli.js","sea:deno:x86_64-linux":"deno compile --allow-all --output dist/reflect-sync-x86_64-linux --target x86_64-unknown-linux-gnu dist/cli.js","sea:deno:aarch64-apple":"deno compile --allow-all --output dist/reflect-sync-aarch64-apple --target aarch64-apple-darwin dist/cli.js","sea:deno:aarch64-linux":"deno compile --allow-all --output dist/reflect-sync-aarch64-linux --target aarch64-unknown-linux-gnu dist/cli.js"},"_npmUser":{"name":"wstein","email":"wstein@sagemath.com"},"_resolved":"/tmp/b96c754e577363be1ba54071477332e7/reflect-sync-0.14.2.tgz","_integrity":"sha512-pWwa9BaxVOD7nevhV+PH1WftXRp4By+Uo7+S23MzIp8SJr3m+1SjXKJ3HyyDGI724tyIhvq62GYNa2eVuiJuaw==","repository":{"url":"git+https://github.com/sagemathinc/reflect-sync.git","type":"git"},"_npmVersion":"11.6.0","description":"Fast bidirectional file synchronization using rsync and sqlite","directories":{},"_nodeVersion":"24.8.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","jest":"^29.7.0","eslint":"^9.39.1","rollup":"^4.52.5","ts-jest":"29","chokidar":"^4.0.3","prettier":"^3.6.2","commander":"^14.0.2","typescript":"^5.9.3","@types/jest":"^29.5.14","@types/node":"^24.9.1","fast-ignore":"^1.1.3","ascii-table3":"^1.0.1","@nodelib/fs.walk":"^3.0.1","@rollup/plugin-json":"^6.1.0","eslint-plugin-import":"^2.32.0","@rollup/plugin-terser":"^0.4.4","@rollup/plugin-commonjs":"^29.0.0","@typescript-eslint/parser":"^8.46.4","@commander-js/extra-typings":"^14.0.0","@rollup/plugin-node-resolve":"^16.0.3","@typescript-eslint/eslint-plugin":"^8.46.4"},"_npmOperationalInternal":{"tmp":"tmp/reflect-sync_0.14.2_1763356688173_0.0908693354946355","host":"s3://npm-registry-packages-npm-production"}},"0.14.3":{"name":"reflect-sync","version":"0.14.3","keywords":["rsync","sqlite","sync","watch","ssh","mutagen","backup"],"author":{"url":"wstein@sagemath.com","name":"William Stein"},"license":"MIT","_id":"reflect-sync@0.14.3","maintainers":[{"name":"wstein","email":"wstein@sagemath.com"}],"homepage":"https://github.com/sagemathinc/reflect-sync","bugs":{"url":"https://github.com/sagemathinc/reflect-sync/issues"},"bin":{"reflect":"bin/reflect-sync.mjs","reflect-sync":"bin/reflect-sync.mjs"},"dist":{"shasum":"c52a44814e2991373cc1012295c2d8ed02db04d5","tarball":"https://registry.npmjs.org/reflect-sync/-/reflect-sync-0.14.3.tgz","fileCount":5,"integrity":"sha512-TBtXJJiQY/kXt1ly+JzDTcikMCbxMqyY5RwfdKLZJSzDJkk9rEsA8IXiI/mUgaUO0H/GySpjbDE4cMBNvw64hQ==","signatures":[{"sig":"MEUCIA0vIOxUKEgV+xNOqjaUNKli691V4EQndX+5S8pDkyNxAiEAqdXk+0LHMAm6sj1SqyKZzY5kUSXWgFVjDgF0GZbeTcY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":365198},"main":"dist/bundle.mjs","type":"module","_from":"file:reflect-sync-0.14.3.tgz","engines":{"node":">=22"},"exports":{".":"./dist/bundle.mjs"},"scripts":{"sea":"pnpm bundle && pnpm sea:blob && pnpm sea:inject","lint":"eslint \"src/**/*.{ts,tsx}\"","test":"pnpm build && NODE_OPTIONS='--no-warnings' jest --maxWorkers 50%","build":"tsc -p tsconfig.json","clean":"rm -rf dist node_modules bundle","bundle":"pnpm install && pnpm build && pnpm bundle:worker && pnpm bundle:main && chmod +x dist/bundle.mjs","sanity":"pnpm prettier-all && pnpm build && pnpm lint && pnpm test","sea:blob":"node --experimental-sea-config sea.config.json","sea:deno":"deno compile --allow-all --output dist/reflect-sync dist/cli.js","sea:inject":"cp $(command -v node) dist/reflect-sync && pnpx postject dist/reflect-sync NODE_SEA_BLOB dist/reflect-sync.blob --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2 2>&1 | sed -E '/find string offset for section name/d'","test:watch":"pnpm build &&  NODE_OPTIONS='--no-warnings' jest --watch","bundle:main":"rollup -c rollup.config.mjs","prettier-all":"prettier -w src","bundle:worker":"rollup -c rollup.worker.mjs","sea:deno:windows":"deno compile --allow-all --output dist/reflect-sync-windows.exe --target x86_64-pc-windows-msvc dist/cli.js","sea:deno:x86_64-apple":"deno compile --allow-all --output dist/reflect-sync-x86_64-apple --target x86_64-apple-darwin dist/cli.js","sea:deno:x86_64-linux":"deno compile --allow-all --output dist/reflect-sync-x86_64-linux --target x86_64-unknown-linux-gnu dist/cli.js","sea:deno:aarch64-apple":"deno compile --allow-all --output dist/reflect-sync-aarch64-apple --target aarch64-apple-darwin dist/cli.js","sea:deno:aarch64-linux":"deno compile --allow-all --output dist/reflect-sync-aarch64-linux --target aarch64-unknown-linux-gnu dist/cli.js"},"_npmUser":{"name":"wstein","email":"wstein@sagemath.com"},"_resolved":"/tmp/1765f70046006c5eed834c724505ccfc/reflect-sync-0.14.3.tgz","_integrity":"sha512-TBtXJJiQY/kXt1ly+JzDTcikMCbxMqyY5RwfdKLZJSzDJkk9rEsA8IXiI/mUgaUO0H/GySpjbDE4cMBNvw64hQ==","repository":{"url":"git+https://github.com/sagemathinc/reflect-sync.git","type":"git"},"_npmVersion":"11.6.0","description":"Fast bidirectional file synchronization using rsync and sqlite","directories":{},"_nodeVersion":"24.8.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","jest":"^29.7.0","eslint":"^9.39.1","rollup":"^4.52.5","ts-jest":"29","chokidar":"^4.0.3","prettier":"^3.6.2","commander":"^14.0.2","typescript":"^5.9.3","@types/jest":"^29.5.14","@types/node":"^24.9.1","fast-ignore":"^1.1.3","ascii-table3":"^1.0.1","@nodelib/fs.walk":"^3.0.1","@rollup/plugin-json":"^6.1.0","eslint-plugin-import":"^2.32.0","@rollup/plugin-terser":"^0.4.4","@rollup/plugin-commonjs":"^29.0.0","@typescript-eslint/parser":"^8.46.4","@commander-js/extra-typings":"^14.0.0","@rollup/plugin-node-resolve":"^16.0.3","@typescript-eslint/eslint-plugin":"^8.46.4"},"_npmOperationalInternal":{"tmp":"tmp/reflect-sync_0.14.3_1763394492914_0.079492134552408","host":"s3://npm-registry-packages-npm-production"}},"0.14.4":{"name":"reflect-sync","version":"0.14.4","keywords":["rsync","sqlite","sync","watch","ssh","mutagen","backup"],"author":{"url":"wstein@sagemath.com","name":"William Stein"},"license":"MIT","_id":"reflect-sync@0.14.4","maintainers":[{"name":"wstein","email":"wstein@sagemath.com"}],"homepage":"https://github.com/sagemathinc/reflect-sync","bugs":{"url":"https://github.com/sagemathinc/reflect-sync/issues"},"bin":{"reflect":"bin/reflect-sync.mjs","reflect-sync":"bin/reflect-sync.mjs"},"dist":{"shasum":"c43279b22201dd66588db4693a8f3a83d5387ca1","tarball":"https://registry.npmjs.org/reflect-sync/-/reflect-sync-0.14.4.tgz","fileCount":5,"integrity":"sha512-EVpQgjaPFhYgvOdy/2cFTaf3GgJn4WQg5CC4L+/G+dzEob8B2lFgr319toWNsayvXz/Zed0TojKy/dbgg9FIpw==","signatures":[{"sig":"MEYCIQDg8vR9J6eXVj5MBj/GMXoekEjPxJS6duq4ddFpOIuUAAIhALnaZQtimnuzBhLcIzNWmAquWOvxo1CVTN7rbh6ynEZA","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":367361},"main":"dist/bundle.mjs","type":"module","_from":"file:reflect-sync-0.14.4.tgz","engines":{"node":">=22"},"exports":{".":"./dist/bundle.mjs"},"scripts":{"sea":"pnpm bundle && pnpm sea:blob && pnpm sea:inject && xz -k dist/reflect-sync","lint":"eslint \"src/**/*.{ts,tsx}\"","test":"pnpm build && NODE_OPTIONS='--no-warnings' jest --maxWorkers 50%","build":"tsc -p tsconfig.json","clean":"rm -rf dist node_modules bundle","bundle":"pnpm install && pnpm build && pnpm bundle:worker && pnpm bundle:main && chmod +x dist/bundle.mjs","sanity":"pnpm prettier-all && pnpm build && pnpm lint && pnpm test","sea:blob":"node --experimental-sea-config sea.config.json","sea:deno":"deno compile --allow-all --output dist/reflect-sync dist/cli.js","sea:inject":"cp $(command -v node) dist/reflect-sync && pnpx postject dist/reflect-sync NODE_SEA_BLOB dist/reflect-sync.blob --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2 2>&1 | sed -E '/find string offset for section name/d'","test:watch":"pnpm build &&  NODE_OPTIONS='--no-warnings' jest --watch","bundle:main":"rollup -c rollup.config.mjs","prettier-all":"prettier -w src","bundle:worker":"rollup -c rollup.worker.mjs","sea:deno:windows":"deno compile --allow-all --output dist/reflect-sync-windows.exe --target x86_64-pc-windows-msvc dist/cli.js","sea:deno:x86_64-apple":"deno compile --allow-all --output dist/reflect-sync-x86_64-apple --target x86_64-apple-darwin dist/cli.js","sea:deno:x86_64-linux":"deno compile --allow-all --output dist/reflect-sync-x86_64-linux --target x86_64-unknown-linux-gnu dist/cli.js","sea:deno:aarch64-apple":"deno compile --allow-all --output dist/reflect-sync-aarch64-apple --target aarch64-apple-darwin dist/cli.js","sea:deno:aarch64-linux":"deno compile --allow-all --output dist/reflect-sync-aarch64-linux --target aarch64-unknown-linux-gnu dist/cli.js"},"_npmUser":{"name":"wstein","email":"wstein@sagemath.com"},"_resolved":"/tmp/de4b4670b987530c10839b407d323dbd/reflect-sync-0.14.4.tgz","_integrity":"sha512-EVpQgjaPFhYgvOdy/2cFTaf3GgJn4WQg5CC4L+/G+dzEob8B2lFgr319toWNsayvXz/Zed0TojKy/dbgg9FIpw==","repository":{"url":"git+https://github.com/sagemathinc/reflect-sync.git","type":"git"},"_npmVersion":"11.6.0","description":"Fast bidirectional file synchronization using rsync and sqlite","directories":{},"_nodeVersion":"24.8.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","jest":"^29.7.0","eslint":"^9.39.1","rollup":"^4.52.5","ts-jest":"29","chokidar":"^4.0.3","prettier":"^3.6.2","commander":"^14.0.2","typescript":"^5.9.3","@types/jest":"^29.5.14","@types/node":"^24.9.1","fast-ignore":"^1.1.3","ascii-table3":"^1.0.1","@nodelib/fs.walk":"^3.0.1","@rollup/plugin-json":"^6.1.0","eslint-plugin-import":"^2.32.0","@rollup/plugin-terser":"^0.4.4","@rollup/plugin-commonjs":"^29.0.0","@typescript-eslint/parser":"^8.46.4","@commander-js/extra-typings":"^14.0.0","@rollup/plugin-node-resolve":"^16.0.3","@typescript-eslint/eslint-plugin":"^8.46.4"},"_npmOperationalInternal":{"tmp":"tmp/reflect-sync_0.14.4_1763418689712_0.4517502540708067","host":"s3://npm-registry-packages-npm-production"}},"0.15.0":{"name":"reflect-sync","version":"0.15.0","keywords":["rsync","sqlite","sync","watch","ssh","mutagen","backup"],"author":{"url":"wstein@sagemath.com","name":"William Stein"},"license":"MIT","_id":"reflect-sync@0.15.0","maintainers":[{"name":"wstein","email":"wstein@sagemath.com"}],"homepage":"https://github.com/sagemathinc/reflect-sync","bugs":{"url":"https://github.com/sagemathinc/reflect-sync/issues"},"bin":{"reflect":"bin/reflect-sync.mjs","reflect-sync":"bin/reflect-sync.mjs"},"dist":{"shasum":"3dc8424a8eff735462a5ec24733274465fb49129","tarball":"https://registry.npmjs.org/reflect-sync/-/reflect-sync-0.15.0.tgz","fileCount":171,"integrity":"sha512-0fp19Kud+/NMLQ6i1UMADRu20Esd5IfaxCCN2ksElaXI815dPdgNAco2nHK3fIYrJBJ54z7TJgp1esLZqPahIw==","signatures":[{"sig":"MEQCIGQs4WOWDFuS0Dy/M7jvD9v4vjG16+kGpDSNFn1oACpwAiBIkRAIoR/1Yiia1C9idXn5LO2ArSJwXcCtPmQJkHUinw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1463989},"main":"dist/index.js","type":"module","_from":"file:reflect-sync-0.15.0.tgz","types":"dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./cli":"./dist/cli.js","./bundle":"./dist/bundle.mjs"},"scripts":{"sea":"pnpm bundle && pnpm sea:blob && pnpm sea:inject && xz -k dist/reflect-sync","lint":"eslint \"src/**/*.{ts,tsx}\"","test":"pnpm build && NODE_OPTIONS='--no-warnings' jest --maxWorkers 50%","build":"tsc -p tsconfig.json","clean":"rm -rf dist node_modules bundle","bundle":"pnpm install && pnpm build && pnpm bundle:worker && pnpm bundle:main && chmod +x dist/bundle.mjs","sanity":"pnpm prettier-all && pnpm build && pnpm lint && pnpm test","sea:blob":"node --experimental-sea-config sea.config.json","sea:deno":"deno compile --allow-all --output dist/reflect-sync dist/cli.js","sea:inject":"cp $(command -v node) dist/reflect-sync && pnpx postject dist/reflect-sync NODE_SEA_BLOB dist/reflect-sync.blob --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2 2>&1 | sed -E '/find string offset for section name/d'","test:watch":"pnpm build &&  NODE_OPTIONS='--no-warnings' jest --watch","bundle:main":"rollup -c rollup.config.mjs","prettier-all":"prettier -w src","bundle:worker":"rollup -c rollup.worker.mjs","sea:deno:windows":"deno compile --allow-all --output dist/reflect-sync-windows.exe --target x86_64-pc-windows-msvc dist/cli.js","sea:deno:x86_64-apple":"deno compile --allow-all --output dist/reflect-sync-x86_64-apple --target x86_64-apple-darwin dist/cli.js","sea:deno:x86_64-linux":"deno compile --allow-all --output dist/reflect-sync-x86_64-linux --target x86_64-unknown-linux-gnu dist/cli.js","sea:deno:aarch64-apple":"deno compile --allow-all --output dist/reflect-sync-aarch64-apple --target aarch64-apple-darwin dist/cli.js","sea:deno:aarch64-linux":"deno compile --allow-all --output dist/reflect-sync-aarch64-linux --target aarch64-unknown-linux-gnu dist/cli.js"},"_npmUser":{"name":"wstein","email":"wstein@sagemath.com"},"_resolved":"/tmp/09494c37f9a7fd957ef230aa74bd565c/reflect-sync-0.15.0.tgz","_integrity":"sha512-0fp19Kud+/NMLQ6i1UMADRu20Esd5IfaxCCN2ksElaXI815dPdgNAco2nHK3fIYrJBJ54z7TJgp1esLZqPahIw==","repository":{"url":"git+https://github.com/sagemathinc/reflect-sync.git","type":"git"},"_npmVersion":"11.6.2","description":"Fast bidirectional file synchronization using rsync and sqlite","directories":{},"_nodeVersion":"24.11.1","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","jest":"^29.7.0","eslint":"^9.39.1","rollup":"^4.52.5","ts-jest":"29","chokidar":"^4.0.3","prettier":"^3.6.2","commander":"^14.0.2","typescript":"^5.9.3","@types/jest":"^29.5.14","@types/node":"^24.9.1","fast-ignore":"^1.1.3","ascii-table3":"^1.0.1","@nodelib/fs.walk":"^3.0.1","@rollup/plugin-json":"^6.1.0","eslint-plugin-import":"^2.32.0","@rollup/plugin-terser":"^0.4.4","@rollup/plugin-commonjs":"^29.0.0","@typescript-eslint/parser":"^8.46.4","@commander-js/extra-typings":"^14.0.0","@rollup/plugin-node-resolve":"^16.0.3","@typescript-eslint/eslint-plugin":"^8.46.4"},"_npmOperationalInternal":{"tmp":"tmp/reflect-sync_0.15.0_1770161447299_0.5073361821252611","host":"s3://npm-registry-packages-npm-production"}},"0.15.1":{"name":"reflect-sync","version":"0.15.1","keywords":["rsync","sqlite","sync","watch","ssh","mutagen","backup"],"author":{"url":"wstein@sagemath.com","name":"William Stein"},"license":"MIT","_id":"reflect-sync@0.15.1","maintainers":[{"name":"wstein","email":"wstein@sagemath.com"}],"homepage":"https://github.com/sagemathinc/reflect-sync","bugs":{"url":"https://github.com/sagemathinc/reflect-sync/issues"},"bin":{"reflect":"bin/reflect-sync.mjs","reflect-sync":"bin/reflect-sync.mjs"},"dist":{"shasum":"6f8c9b16e81e0c1fe13df1db4a661a07cfc0f8d2","tarball":"https://registry.npmjs.org/reflect-sync/-/reflect-sync-0.15.1.tgz","fileCount":171,"integrity":"sha512-7eup3NJdNCcmAyVs2Z22WzmmA7RjrI5sBlRuAcKxMuDgmNbfeaBXr5Z80C423vAtz/CXgZ/oP4j3N+b4bq0Gsg==","signatures":[{"sig":"MEUCICbGSzp6V8G7s2rTwnvPjEmDzRDbtTC2HEF+RyBQIU4UAiEAmAFjvYN+bo7WWvlxEUn5vvv19ulYehqK15FPTisRQIM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1464049},"main":"dist/index.js","type":"module","_from":"file:reflect-sync-0.15.1.tgz","types":"dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./cli":"./dist/cli.js","./bundle":"./dist/bundle.mjs"},"scripts":{"sea":"pnpm bundle && pnpm sea:blob && pnpm sea:inject && xz -k dist/reflect-sync","lint":"eslint \"src/**/*.{ts,tsx}\"","test":"pnpm build && NODE_OPTIONS='--no-warnings' jest --maxWorkers 50%","build":"tsc -p tsconfig.json","clean":"rm -rf dist node_modules bundle","bundle":"pnpm install && pnpm build && pnpm bundle:worker && pnpm bundle:main && chmod +x dist/bundle.mjs","sanity":"pnpm prettier-all && pnpm build && pnpm lint && pnpm test","sea:blob":"node --experimental-sea-config sea.config.json","sea:deno":"deno compile --allow-all --output dist/reflect-sync dist/cli.js","sea:inject":"cp $(command -v node) dist/reflect-sync && pnpx postject dist/reflect-sync NODE_SEA_BLOB dist/reflect-sync.blob --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2 2>&1 | sed -E '/find string offset for section name/d'","test:watch":"pnpm build &&  NODE_OPTIONS='--no-warnings' jest --watch","bundle:main":"rollup -c rollup.config.mjs","prettier-all":"prettier -w src","bundle:worker":"rollup -c rollup.worker.mjs","sea:deno:windows":"deno compile --allow-all --output dist/reflect-sync-windows.exe --target x86_64-pc-windows-msvc dist/cli.js","sea:deno:x86_64-apple":"deno compile --allow-all --output dist/reflect-sync-x86_64-apple --target x86_64-apple-darwin dist/cli.js","sea:deno:x86_64-linux":"deno compile --allow-all --output dist/reflect-sync-x86_64-linux --target x86_64-unknown-linux-gnu dist/cli.js","sea:deno:aarch64-apple":"deno compile --allow-all --output dist/reflect-sync-aarch64-apple --target aarch64-apple-darwin dist/cli.js","sea:deno:aarch64-linux":"deno compile --allow-all --output dist/reflect-sync-aarch64-linux --target aarch64-unknown-linux-gnu dist/cli.js"},"_npmUser":{"name":"wstein","email":"wstein@sagemath.com"},"_resolved":"/tmp/84c7c949991f51d25fded8c016669df6/reflect-sync-0.15.1.tgz","_integrity":"sha512-7eup3NJdNCcmAyVs2Z22WzmmA7RjrI5sBlRuAcKxMuDgmNbfeaBXr5Z80C423vAtz/CXgZ/oP4j3N+b4bq0Gsg==","repository":{"url":"git+https://github.com/sagemathinc/reflect-sync.git","type":"git"},"_npmVersion":"11.6.2","description":"Fast bidirectional file synchronization using rsync and sqlite","directories":{},"_nodeVersion":"24.11.1","dependencies":{"chokidar":"^4.0.3","commander":"^14.0.2","fast-ignore":"^1.1.3","ascii-table3":"^1.0.1","@nodelib/fs.walk":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","jest":"^29.7.0","eslint":"^9.39.1","rollup":"^4.52.5","ts-jest":"29","prettier":"^3.6.2","typescript":"^5.9.3","@types/jest":"^29.5.14","@types/node":"^24.9.1","@rollup/plugin-json":"^6.1.0","eslint-plugin-import":"^2.32.0","@rollup/plugin-terser":"^0.4.4","@rollup/plugin-commonjs":"^29.0.0","@typescript-eslint/parser":"^8.46.4","@commander-js/extra-typings":"^14.0.0","@rollup/plugin-node-resolve":"^16.0.3","@typescript-eslint/eslint-plugin":"^8.46.4"},"_npmOperationalInternal":{"tmp":"tmp/reflect-sync_0.15.1_1770161980671_0.24177310008464392","host":"s3://npm-registry-packages-npm-production"}},"0.15.2":{"name":"reflect-sync","version":"0.15.2","description":"Fast bidirectional file synchronization using rsync and sqlite","type":"module","main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./bundle":"./dist/bundle.mjs","./cli":"./dist/cli.js"},"bin":{"reflect":"bin/reflect-sync.mjs","reflect-sync":"bin/reflect-sync.mjs"},"engines":{"node":">=22"},"keywords":["rsync","sqlite","sync","watch","ssh","mutagen","backup"],"license":"MIT","dependencies":{"@nodelib/fs.walk":"^3.0.1","ascii-table3":"^1.0.1","chokidar":"^4.0.3","commander":"^14.0.2","fast-ignore":"^1.1.3"},"devDependencies":{"@commander-js/extra-typings":"^14.0.0","@rollup/plugin-commonjs":"^29.0.0","@rollup/plugin-json":"^6.1.0","@rollup/plugin-node-resolve":"^16.0.3","@rollup/plugin-terser":"^0.4.4","@types/jest":"^29.5.14","@types/node":"^24.9.1","@typescript-eslint/eslint-plugin":"^8.56.1","@typescript-eslint/parser":"^8.56.1","eslint":"^9.39.1","eslint-plugin-import":"^2.32.0","jest":"^29.7.0","prettier":"^3.6.2","rollup":"^4.59.0","ts-jest":"29","tsx":"^4.20.6","typescript":"^5.9.3"},"author":{"name":"William Stein","url":"wstein@sagemath.com"},"repository":{"type":"git","url":"git+https://github.com/sagemathinc/reflect-sync.git"},"homepage":"https://github.com/sagemathinc/reflect-sync","scripts":{"build":"tsc -p tsconfig.json","clean":"rm -rf dist node_modules bundle","prettier-all":"prettier -w src","test":"pnpm build && NODE_OPTIONS='--no-warnings' jest --maxWorkers 50%","test:watch":"pnpm build &&  NODE_OPTIONS='--no-warnings' jest --watch","bundle:worker":"rollup -c rollup.worker.mjs","bundle:main":"rollup -c rollup.config.mjs","bundle":"pnpm install --frozen-lockfile && pnpm build && pnpm bundle:worker && pnpm bundle:main && chmod +x dist/bundle.mjs","sea:blob":"node --experimental-sea-config sea.config.json","sea:inject":"cp $(command -v node) dist/reflect-sync && pnpx postject dist/reflect-sync NODE_SEA_BLOB dist/reflect-sync.blob --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2 2>&1 | sed -E '/find string offset for section name/d'","sea":"pnpm bundle && pnpm sea:blob && pnpm sea:inject && xz -k dist/reflect-sync","sea:deno":"deno compile --allow-all --output dist/reflect-sync dist/cli.js","sea:deno:aarch64-linux":"deno compile --allow-all --output dist/reflect-sync-aarch64-linux --target aarch64-unknown-linux-gnu dist/cli.js","sea:deno:x86_64-linux":"deno compile --allow-all --output dist/reflect-sync-x86_64-linux --target x86_64-unknown-linux-gnu dist/cli.js","sea:deno:aarch64-apple":"deno compile --allow-all --output dist/reflect-sync-aarch64-apple --target aarch64-apple-darwin dist/cli.js","sea:deno:x86_64-apple":"deno compile --allow-all --output dist/reflect-sync-x86_64-apple --target x86_64-apple-darwin dist/cli.js","sea:deno:windows":"deno compile --allow-all --output dist/reflect-sync-windows.exe --target x86_64-pc-windows-msvc dist/cli.js","lint":"eslint \"src/**/*.{ts,tsx}\"","sanity":"pnpm prettier-all && pnpm build && pnpm lint && pnpm test"},"_id":"reflect-sync@0.15.2","bugs":{"url":"https://github.com/sagemathinc/reflect-sync/issues"},"_integrity":"sha512-YIulIbbw3Sr08EGOYPxnf2LG2IgWC8TH9TIhyJJtoZyn/SHkFKLK2KEskLOfBH/Hdk1a+fJSwp9jLd3UwMPWTQ==","_resolved":"/tmp/2d1d45de20cb7eb63e7428d30be84c22/reflect-sync-0.15.2.tgz","_from":"file:reflect-sync-0.15.2.tgz","_nodeVersion":"24.11.1","_npmVersion":"11.6.2","dist":{"integrity":"sha512-YIulIbbw3Sr08EGOYPxnf2LG2IgWC8TH9TIhyJJtoZyn/SHkFKLK2KEskLOfBH/Hdk1a+fJSwp9jLd3UwMPWTQ==","shasum":"73f80bbfbf5be434dd9f1a8de9e8418e04a53e1c","tarball":"https://registry.npmjs.org/reflect-sync/-/reflect-sync-0.15.2.tgz","fileCount":171,"unpackedSize":1465487,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCnl84+zutBgKZTQXuBM81We4vLZOtlc74GAorJbpKpnAIhAIKf1J7Hp/DZLnHGd4ZF7t2vBkQo37l/8L18+Y5e47A8"}]},"_npmUser":{"name":"wstein","email":"wstein@sagemath.com"},"directories":{},"maintainers":[{"name":"wstein","email":"wstein@sagemath.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/reflect-sync_0.15.2_1772657351455_0.6486344655536487"},"_hasShrinkwrap":false}},"time":{"created":"2025-10-30T20:31:55.689Z","modified":"2026-03-04T20:49:11.871Z","0.7.0":"2025-10-30T20:31:55.994Z","0.7.2":"2025-10-30T23:58:37.639Z","0.8.0":"2025-11-02T05:14:05.696Z","0.8.1":"2025-11-02T16:53:30.675Z","0.8.2":"2025-11-02T17:09:43.243Z","0.8.3":"2025-11-02T17:18:01.997Z","0.8.4":"2025-11-02T22:39:07.549Z","0.8.5":"2025-11-03T00:34:27.718Z","0.8.6":"2025-11-03T01:55:04.613Z","0.8.7":"2025-11-03T03:32:05.920Z","0.8.8":"2025-11-03T04:16:13.741Z","0.8.9":"2025-11-03T23:49:24.952Z","0.9.0":"2025-11-04T20:26:59.360Z","0.9.1":"2025-11-05T01:00:28.183Z","0.9.2":"2025-11-05T01:14:18.748Z","0.9.3":"2025-11-05T02:10:57.380Z","0.9.4":"2025-11-05T03:28:26.615Z","0.10.2":"2025-11-05T21:15:45.177Z","0.10.11":"2025-11-06T08:15:00.691Z","0.11.0":"2025-11-07T00:35:34.861Z","0.12.0":"2025-11-10T05:29:09.487Z","0.12.1":"2025-11-10T06:38:44.111Z","0.12.2":"2025-11-11T21:16:38.537Z","0.13.0":"2025-11-14T04:16:52.497Z","0.13.1":"2025-11-15T04:16:49.486Z","0.13.2":"2025-11-15T06:39:05.901Z","0.14.1":"2025-11-16T05:04:41.972Z","0.14.2":"2025-11-17T05:18:08.390Z","0.14.3":"2025-11-17T15:48:13.143Z","0.14.4":"2025-11-17T22:31:29.918Z","0.15.0":"2026-02-03T23:30:47.530Z","0.15.1":"2026-02-03T23:39:40.883Z","0.15.2":"2026-03-04T20:49:11.752Z"},"bugs":{"url":"https://github.com/sagemathinc/reflect-sync/issues"},"author":{"name":"William Stein","url":"wstein@sagemath.com"},"license":"MIT","homepage":"https://github.com/sagemathinc/reflect-sync","keywords":["rsync","sqlite","sync","watch","ssh","mutagen","backup"],"repository":{"type":"git","url":"git+https://github.com/sagemathinc/reflect-sync.git"},"description":"Fast bidirectional file synchronization using rsync and sqlite","maintainers":[{"name":"wstein","email":"wstein@sagemath.com"}],"readme":"# ReflectSync\n\nReflectSync is a fast, fully observable, bidirectional file synchronizer built on rsync and SQLite. It targets large development trees, remote SSH roots, and long-running sessions (days to months) where you want to understand exactly why bytes move.  It can also be used as a library from nodejs.\n\nProject site: https://sagemathinc.github.io/reflect-sync/\n\n## Why ReflectSync?\n\n- **SQLite everywhere.** Alpha, beta, and base databases capture hashes, metadata, and logical timestamps so merges are deterministic and auditable.\n- **Modern rsync pipeline.** Each session owns a persistent SSH ControlMaster, rsync batches are chunked, and remote scans stream NDJSON over stdin/stdout instead of temporary files.\n- **Watchers + restricted scans.** Hot paths flow through debounced watchers; forced scans read NUL-separated path lists from stdin.\n- **Filesystem-aware.** Every root is probed for case sensitivity, Unicode normalization, reflink support, and privilege level. Sessions record canonical winners for conflicts so macOS/Windows volumes cannot clobber distinct case variants that originated on Linux.\n- **Transparency-first.** Structured logs, copy_pending enforcement, and `reflect query …` let you inspect exactly what happened. Nothing is hidden inside opaque daemons.\n\n> Requires **Node.js 22+** and a recent rsync.\n\n## Quick start\n\n```bash\npnpm install -g reflect-sync\n\n# create a session between two paths (local or ssh-style)\nreflect create ~/alpha ~/beta\n\n# run a sync cycle until copy_pending clears\nreflect sync 1\n\n# follow structured progress logs\nreflect logs 1 --follow --message progress\n\n# inspect current state\nreflect status 1\nreflect query recent 1\n```\n\nRemote endpoints use the familiar `user@host:/absolute/path` syntax (or `host:2222:/path` for custom ports). Reflect opens one SSH ControlMaster per session and refuses to run if the remote `reflect-sync` binary reports a different version, preventing protocol drift.\n\n## Architecture at a glance\n\n1. **Scheduler** – coordinates scans, watchers, merge planning, and rsync batches. It can run once via `reflect sync <id>` or stay resident under `reflect daemon`.\n2. **Scans & watchers** – `scan.ts` crawls filesystems (locally or over SSH) while `hotwatch.ts` listens for inotify/FSEvents. Updates flow into alpha/beta/base SQLite DBs.\n3. **Merge planner** – `three-way-merge.ts` compares alpha/beta/base rows, respects merge strategies (default `last-write-wins`), and emits rsync batches while honoring `copy_pending` and canonical conflict winners.\n4. **Transport** – `rsync.ts` and `ssh-control.ts` keep SSH sockets alive, capture transfer logs (mode/user/group), and retry if the ControlMaster dies.\n\nBecause state lives in SQLite, you can reproduce or audit any run with normal SQL tooling. The CLI (`reflect query recent`, `reflect query size`, …) provides common summaries without learning the schema.\n\n## Trust & observability\n\n- **Structured logging everywhere.** Scans, merges, rsync batches, and assertions emit JSON logs consumable via `reflect logs … --json`.\n- **Environment probing.** Sessions fail fast if filesystem capability probes (case sensitivity, Unicode normalization, reflinks) or privilege checks fail—we never guess.\n- **Version enforcement.** Remote sessions run `reflect --version` over SSH and compare it to the local version before syncing.\n- **Explicit merge semantics.** The default `last-write-wins` strategy is documented, and logs call out why each path was copied, skipped, or flagged as a conflict.\n- **No black boxes.** Databases live under `~/.local/share/reflect-sync/`; copying that directory lets you replay or inspect every decision offline.\n\n## LICENSE\n\nOpen source under the MIT License.\n\n\n## Details\n\nAll the planned major functionality is now implemented and there is a test suite.\n\n### Some differences compared to Mutagen:\n\nReflect-sync is inspired by Mutagen, but is also completely new, with a different implementation stack and CLI options.  In particular:\n\n- the command line options are different: it's  not a drop in replacement\n- conflicts are resolved using **last write wins** using logical clock intervals. There is no manual conflict resolution mode.\n- we use Sha\\-256 by default, but also support \"sha1\", \"sha512\", \"blake2b512\", \"blake2s256\", \"sha3-256\", and \"sha3-512\".\n- only tested on macos and linux \\(currently\\)\n- timestamps, permissions, uid and gid are fully preserved, whereas Mutagen mostly ignores them\n- edit properties of sessions after you create them\n- query for total bytes under a directory, recent files, etc.\n\nSee [Design Details](./DESIGN.md).\n\n### Consistency guarantees & tradeoffs\n\nReflect’s realtime path treats each rsync as a small transaction: before we copy a path from one side to the other we acquire a watcher lock on the destination, rsync the path, and only release the lock after re\\-sampling the destination signature \\(hash \\+ metadata\\). This gives a practical guarantee: \n\n> **if a subtree is only modified on one side, Reflect will never push older bytes back over it.** \n\nIn other words, corruption can only occur if both sides are actively editing the same path \\(a true conflict\\). The default merge strategy is **`last-write-wins`**, which compares our logical observation time \\(`updated`\\) on each side. This means a freshly\\-deleted or recreated file always beats an old mtime\\-preserved copy even if the filesystem timestamp didn’t change. If you truly want to compare raw mtimes, you can opt into the legacy `lww-mtime` strategy.\n\nTradeoffs:\n\n- We still rely on rsync’s “copy to temp, rename into place” model. If a file mutates mid-transfer, rsync exits with code 23, we keep the lock, and the scheduler retries once the file settles.\n- We trust the database snapshots we just wrote: after each copy/delete we mirror alpha’s metadata into beta’s DB (and vice versa) so the next cycle sees the same state without having to rescan immediately.\n- We do **not** try to solve the general case of simultaneous edits on both sides; those devolve to last-write-wins with `--prefer` as the tie breaker. The guarantee above simply ensures that editing only one side cannot regress the other.\n\n### Delete semantics\n\nDeletions are tracked just like edits: every scan/watch event updates the `nodes` table and the merge planner only reasons about that metadata. When a path disappears we set its `mtime` to **one millisecond after the last time we saw it alive** (we keep that timestamp in `last_seen`). Why?\n\n- We use `mtime` for last\\-write\\-wins. If a file was modified and then deleted before the next cycle, that “delete” should win because it happened _after_ the last known write. Using `last_seen + 1 ms` encodes exactly that ordering even if the host clock jitters.\n- If two copies both delete the same path they now share the same tombstone timestamp and we drop the path from the plan entirely, so nothing “resurrects” it later.\n- Remote deltas, watcher\\-driven updates, and rsync\\-driven deletes all follow this rule, so every subsystem reports the same ordering information without doing a fresh stat on the remote filesystem.\n- If during a single cycle one side edits the file and the other side deletes it, the with last write wins and our conservative choice of mtime, the edit will be preserved.\n\nPractically this means Reflect will only resurrect a deleted file if the other side really does have a newer, surviving edit, which is the safest interpretation for automated sync.\n\n### Filesystem case sensitivity & Unicode normalization\n\nEvery session probes both roots so the scheduler knows whether each filesystem collapses case or normalizes Unicode. Local probes use direct syscalls; remote probes invoke `reflect fs-capabilities --root <dir>` over SSH before the first scan. That information drives the canonicalization logic:\n\n- Each row stores a canonical key (case-folded, NFC) and the first variant we ever saw becomes the canonical winner. Other variants are marked with `case_conflict = 1` and never copied into a destination that can’t represent them.\n- Merge planning automatically filters out lossy operations. Instead of deleting data on the sensitive side, Reflect logs the conflict and leaves the non-canonical subtree untouched.\n- Canonical decisions persist in `nodes.canonical_key`, so the same winner survives future scans even if directory enumeration order changes.\n- You can inspect a root manually with `reflect fs-capabilities --root /path` (and remotely via `ssh host reflect fs-capabilities …`) when debugging cross-platform deployments.\n\nThis mirrors Mutagen’s probing/scanning guidance and prevents case-insensitive or Unicode-normalizing destinations (e.g., default macOS volumes) from clobbering distinct case variants that originated on case-sensitive filesystems.\n\n---\n\n## Install\n\nProject (local):\n\n```bash\npnpm add reflect-sync\n# or: npm i reflect-sync\n```\n\nGlobal (handy for ops boxes):\n\n```bash\npnpm add -g reflect-sync\n# then: reflect help\n```\n\nBuild from source (dev):\n\n```bash\npnpm install\npnpm build\npnpm test\n```\n\nThe package exposes the `reflect-sync` CLI (and aliases `reflect`) via its `bin` map.\n\n---\n\n## Quick start\n\n### 1) One machine (both roots local)\n\n```bash\nreflect --help\nreflect create /path/to/alpha /path/to/beta\nreflect list\nreflect status 1\nreflect logs 1\nreflect create /path/to/alpha /path/to/beta --ignore=node_modules --ignore=\"*.log\"\n```\n\n- The scheduler runs a scan on each side, computes a 3-way plan, runs rsync, and repeats on an adaptive interval.\n- File changes are pushed in near-realtime by running a restricted scan+merge cycle while the main loop periodically verifies and updates the base snapshot for last write wins 3-way merge semantics.\n- Ignore rules can be provided at creation time with repeated `--ignore` flags (comma-separated or repeated). They’re stored in the session database and applied symmetrically to both sides (scans, merge planning, local/remote watchers, and rsync stages).\n\n### 2) One side over SSH\n\nTwo ways to do it:\n\n```bash\nreflect create user@alpha.example.com:/tmp/alpha /tmp/beta\n# or specify a non-default SSH port\nreflect create /tmp/beta alpha.example.com:2222:/srv/alpha\n```\n\nor\n\n```bash\nreflect create /tmp/beta user@alpha.example.com:/tmp/alpha\n# default port 22 can also be written with a double colon\nreflect create /tmp/beta alpha.example.com::/srv/alpha\n```\n\nThe scheduler will SSH to `alpha-host`, run a remote scan that streams NDJSON deltas, and ingest them locally.\n\n> Remote paths must begin with `/` or `~/`. The optional `:<port>` segment lives between the host and the path (`host:2222:/path`). A bare single colon or a double colon (`host:/path`, `host::/path`) uses the default port 22.\n\n> Advanced plumbing commands (`scan`, `watch`, `scheduler`, …) are hidden from the default help to keep the interface ergonomic. Run `reflect --help --advanced` if you need to see or invoke them directly.\n\n### Copy-on-write reflink copies (optional)\n\nReflect never attempts reflink copies automatically. If **both roots are local and on the same filesystem**, pass `--enable-reflink` to `reflect create` (or `reflect edit … --enable-reflink`) to force `cp --reflink=always --parents …` for alpha↔beta copies. The scheduler CLI also accepts `--enable-reflink` when you launch it manually. Remote sessions must leave the flag unset; the CLI errors if either side is remote.\n\nWith the flag enabled Reflect fails fast if the filesystem refuses a reflink copy—there is no silent fallback to rsync—so only opt in when you know the workload supports CoW clones (e.g., btrfs, XFS with reflinks). `reflect list` and `reflect status` annotate sessions with `reflink` so you can confirm the setting later.\n\n### Running as a daemon\n\nThe `reflect daemon` command keeps schedulers alive in the background:\n\n```bash\nreflect daemon start   # fire-and-forget supervisor (writes ~/.local/share/reflect-sync/daemon/reflect.pid)\nreflect daemon status  # quick health check\nreflect daemon stop    # terminate the supervisor\nreflect daemon logs [--follow] [--json]  # tail the supervisor logs stored in sessions.db\n```\n\nUse `reflect daemon install` to install a user service (systemd on Linux, LaunchAgent on macOS) that launches the daemon on login. The service runs `reflect daemon run` in the foreground, so you can also wire it into your own service manager. All daemon output is persisted in `sessions.db`, so you can inspect historic activity with `reflect daemon logs` even if the process is no longer running.\n\n### Common CLI commands\n\n```bash\nreflect create <alpha> <beta>         # start a new session\nreflect list                          # list sessions\nreflect status <id-or-name>                   # show heartbeat / merge status\nreflect logs <id-or-name> [--follow]          # stream recent structured logs\nreflect logs <id-or-name> --message progress  # tail only progress events (scan/hash/rsync/etc.)\nreflect stop <id-or-name...>                  # stop one or more sessions\nreflect start <id-or-name...>                 # start (and auto-start scheduler if needed)\nreflect terminate <id-or-name...>             # stop and remove session state\nreflect daemon logs [--follow]                # inspect supervisor logs persisted in sessions.db\nreflect daemon start                          # ensure the background supervisor is running\nreflect daemon stop                           # stop the supervisor (removes the PID file)\n```\n\nAll commands honor `--session-db <path>` if you want to keep session metadata outside the default location.\n\n### Session queries\n\nThe sync databases already track file metadata, so you can pull summaries without re-scanning the filesystem:\n\n```bash\nreflect query size 3                      # total logical bytes on alpha side\nreflect query size --side=beta 3          # beta side\nreflect query size --path=work 3          # only files under “work/”\nreflect query recent --max=20 3           # 20 most recently touched files\nreflect query recent --path=logs --json 3 # JSON output for scripting\n```\n\nPaths must live inside the session root (after ignore rules); for remote sessions the command resolves `~/` via SSH just like the scheduler.\n\n### SSH port forwards\n\nReflect can keep long-lived SSH tunnels alive via the daemon supervisor:\n\n```bash\nreflect forward create localhost:8443 user@host:443    # local -> remote\nreflect forward create user@host:2222:22 :2022         # remote -> local\nreflect forward list                                   # ASCII table with live PIDs & ssh args\nreflect forward terminate <id-or-name>\n```\n\nEach forward row stores its `ssh` invocation. The daemon \\(`reflect daemon start`\\) keeps the background `ssh` process alive and restarts it if necessary. `reflect forward list` surfaces the recorded PID and command, and marks forwards as `error` when the underlying process has disappeared.\n\n### Monitoring changes in real time\n\nThe `reflect monitor` command streams change events (hot watcher hits and scan-driven deltas) for any session. It’s useful for dashboards and editors:\n\n```bash\nreflect monitor 7                     # human-readable stream for both sides\nreflect monitor 7 --json --alpha-only # machine-friendly JSON for alpha only\nreflect monitor project-a --since=60000  # replay the last minute of activity, then keep streaming\n```\n\nEach event includes the side, path, source (`hotwatch`, `scan`, `remote-watch`), timestamps, and hashes when available. Use `--beta-only`, `--poll-interval`, or `--hot-interval` to tune the feed.\n\nThe monitor command allows you to watch a potentially huge nested directory with hundreds of thousands of files on Linux, without using too many inotify handles.\n\n---\n\n## How Reflect works \\(short\\)\n\n- **Scan** writes metadata \\(`path, size, ctime, mtime, hash, deleted, last_seen, hashed_ctime`\\) to SQLite. Hashing is streamed and parallelized; we only rehash when `ctime` changed since the last hash. _Scanning never crosses filesytem boundaries._\n- **Merge** builds temp tables with _relative_ paths, computes the 3\\-way plan \\(changed A, changed B, deleted A/B, resolve conflicts by `--prefer`\\), then feeds rsync with NUL\\-separated `--files-from` lists.\n- **Scheduler**:\n  - shallow root watchers \\+ bounded deep “hot” watchers \\(recently touched subtrees\\),\n  - **restricted cycles** run the same scan/merge pipeline on the hot set immediately,\n  - periodically run a full scan \\+ merge; interval adapts to prior cycle time and recent rsync errors.\n  - **Progress logging:** hashing and rsync stages emit logs tagged with `message=\"progress\"` plus scopes in the metadata. Use `reflect logs <id> --message progress -f` to observe in real time.\n\n---\n\n## Environment & scripts\n\n- **Node.js**: `>= 22` (set in `engines`).\n- **Build**: `pnpm build` (TypeScript → `dist/`), `rootDir=src`, `outDir=dist`.\n- **Dev helpers**: `dev:scan`, `dev:ingest`, `dev:merge`, `dev:scheduler` run the TS sources via `tsx`.\n\n---\n\n## Typical file layout\n\nYou’ll end up with three DBs alongside your process (or wherever you point them):\n\n- `alpha.db` — metadata for alpha root\n- `beta.db` — metadata for beta root\n- `base.db` — 3-way merge base (relative paths)\n\nThis separation makes it easy to relocate/rotate databases, inspect state, and compute user-facing reports (e.g. “what changed recently”, “top space users”).\n\n---\n\n## Troubleshooting\n\n- **Inotify/FSEvents limits \\(Linux/macOS\\)**: scheduler uses shallow \\+ bounded hot watchers. If you still hit limits, tune:\n  - `MAX_HOT_WATCHERS` — cap number of deep watchers\n  - `SHALLOW_DEPTH` — 0 or 1 recommended\n  - `HOT_DEPTH` — typical 1–2\n\n- **DB size**: large trees create large but inexpensive DBs. Use WAL mode \\(default\\) and SSDs for best throughput.\n\n---\n\n## Development\n\n```bash\npnpm install\npnpm build\npnpm test\npnpm link -g .\nreflect -h\n```\n\nTypeScript compiler outputs to `dist/.`\n\n---\n\n## Notes\n\n- Executables are provided via `bin` and linked to the compiled files in `dist/`. If you’re hacking locally in this repo, either run `node dist/cli.js …` or `pnpm link --global .` to get `reflect` on your PATH.\n- For SSH use, ensure the remote has Node 22\\+ and `reflect` on PATH \\(installed or included in your SEA image\\). Then `reflect scan … --emit-delta | reflect ingest …` is all you need. Also, make sure you have ssh keys setup for passwordless login.\n\n---\n\n## Why ReflectSync?\n\n**reflect-sync** is a two-way file sync tool written in Typescript with **deterministic Last-Write-Wins (LWW)** semantics, built on **rsync** for transfer and **SQLite** for state. It aims to be predictable, debuggable, and fast for the common case of **two roots** (e.g., laptop ↔ server, container bind-mount ↔ host, staging ↔ prod).\n\n### Key properties\n\n- **Deterministic LWW:** Changes are decided by content timestamps with a small configurable epsilon; ties break toward the **preferred side** you choose.\n- **Hash-driven change detection:** Content hashes, not “mtime only,” determine whether a file actually changed—keeps plans stable and reduces churn.\n- **First-class symlinks:** Links are scanned via `lstat`, targets are stored and hashed as **`link:<target>`**, and rsync preserves them.\n- **Simple & inspectable:** Uses SQLite tables and NDJSON deltas—easy to debug, test, and reason about.\n- **MIT-licensed:** Very permissive for both open-source and commercial use.\n\n---\n\n## When to use ReflectSync\n\nWhen you want:\n\n- **Two endpoints** with **predictable outcomes** (no “conflict copies”).\n- Great performance on **large files** or **incremental edits** (thanks to rsync).\n- **Transparent plans** and state you can audit (SQLite + file lists).\n- **Symlink-accurate** behavior across platforms that support them.\n\nNot a perfect fit if you need:\n\n- A **multi\\-node mesh** with discovery/relays \\(see Syncthing/Resilio\\).\n- Built\\-in **version history** or a cloud UI \\(see Nextcloud/Dropbox\\).\n- **Interactive** conflict resolution UX \\(see Unison\\); with ReflectSync there is **never** conflict resolution.\n\n---\n\n## How it compares\n\n| Tool            | License                             | Sync model                   | Conflict policy                   | Notes                                         |\n| --------------- | ----------------------------------- | ---------------------------- | --------------------------------- | --------------------------------------------- |\n| **ReflectSync** | **MIT**                             | Two-way between two roots    | **LWW** (+ preferred side on tie) | rsync transport; SQLite state; symlink-aware  |\n| **Unison**      | GPL-3                               | Two-way                      | Interactive or policy-driven      | Mature, formal; heavier UX for headless flows |\n| **Syncthing**   | MPL-2.0                             | Continuous P2P mesh          | **Conflict copies** on diverge    | Great for many devices; background indexer    |\n| **Mutagen**     | Source-available (see project docs) | Dev-focused low-latency sync | Modes incl. “prefer side”         | Very fast for dev trees; custom protocol      |\n| **lsyncd**      | GPL-2.0+                            | One-way (event → rsync)      | N/A                               | Simple near-real-time mirroring               |\n\n> Philosophy difference: **ReflectSync** favors _determinism without duplicates or \"conflict\" files_ \\(LWW \\+ preference\\). Tools like Syncthing/Dropbox prefer _never lose data_ \\(create conflict files\\), which is ideal for less controlled, multi\\-party edits.\n\n---\n\n## Semantics (brief)\n\n- **Change detection:** By **content hash, permissions and \\(for root\\) uid/gid**. Pure mtime or ctime changes do NOT count as edits. However, when there is an edit, the file is transfered with the mtime properly synced.\n- **Last write wins \\(LWW\\) resolution:** The newer op timestamp wins, or preferred side in case of a tie.\n- **Type changes:** File ↔ symlink ↔ dir follow the same LWW rule \\(so type can change if the winner differs\\).\n- **Deletes:** Deletions are first\\-class operations and replicate per LWW.\n- **Symlinks:** Stored with target string and hashed as `<target>`; preserved by rsync.\n- **Permission modes:** are always fully sync'd on posix systems.\n- **UID/GID:** sync'd as numeric ids when the user is root; ignored otherwise.\n\n---\n\n## Performance notes\n\n- **Large files / small edits:** Excellent even for high latency links \\(rsync rolling checksums\\).\n- **Many small files:** Competitive when watch\\-driven; initial cold scans take longer than always\\-on indexers.\n- **Observability:** Plans are explicit \\(`toAlpha`, `toBeta`, delete lists\\) and replayable. State is visible in sqlite tables. After each scan a hash of each directory tree is computed, so you can be certain the state has converged.\n\n---\n\n## Platform support\n\n- **Linux / macOS:** Fully supported \\(Node.js 22\\+\\). Uses `lutimes` where available for precise symlink mtimes.\n- **Windows:** Works best via **WSL** or an rsync port. Symlink behavior depends on platform capabilities and permissions. Not yet tested for native Windows, but planned.\n\n---\n\n## Open Source\n\nThe MIT license is maximally permissive: embed, modify, and redistribute with minimal friction. This makes **ReflectSync** easy to adopt in both open\\-source stacks and commercial tooling.\n\n---\n\n## ReflectSync vs. X — choose-by-scenario\n\n| Scenario                                                                | Recommended                  | Why                                                                                  | Notes                                                                            |\n| ----------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------- |\n| **Two endpoints; predictable outcome; no conflict copies wanted**       | **ReflectSync**              | Deterministic **LWW** with explicit tie-preference; symlink-aware; transparent plans | Great for laptop↔server, container bind-mounts, staging↔prod                   |\n| **One-way near-real-time mirroring** (e.g., deploy artifacts → webroot) | **lsyncd**                   | Event→batch→rsync is simple and robust                                               | If you still want ReflectSync, just run one side as authoritative (prefer-alpha) |\n| **Dev loop; tons of small files; low latency**                          | **Mutagen**                  | Purpose-built for fast dev sync; very low overhead on edits                          | License differs; protocol/agent required                                         |\n| **Many devices; peer-to-peer mesh; zero central server**                | **Syncthing**                | Discovery, relay, NAT traversal, continuous                                          | Creates conflict copies on diverge (safer for multi-writer)                      |\n| **Non-technical users; desktop + mobile; web UI; version history**      | **Nextcloud** or **Dropbox** | Turnkey clients + history + sharing                                                  | Heavier footprint; server (Nextcloud) or cloud (Dropbox)                         |\n| **CI/CD cache or artifacts between two machines**                       | **ReflectSync**              | Deterministic, debuggable, rsync-efficient on large binaries                         | Keep file lists tight; parallelize rsync if needed                               |\n| **Large binary files with small edits over LAN**                        | **ReflectSync**              | rsync rolling checksum excels                                                        | Consider `--inplace` only if types won’t change and perms allow                  |\n| **Interactive conflict resolution preferred**                           | **Unison**                   | Mature interactive/tunable policy engine                                             | More friction in headless automation                                             |\n| **Multi-writer folder; avoid any silent overwrite**                     | **Syncthing**                | Uses conflict files rather than overwrite                                            | Safer for less-controlled edits; not deterministic                               |\n| **Windows-first environment**                                           | **Syncthing** / **Dropbox**  | Native UX; no rsync/WSL needed                                                       | **ReflectSync** works best via **WSL** (document this path)                      |\n| **Air-gapped / restricted SSH only**                                    | **ReflectSync**              | rsync over SSH; explicit file lists; easy to audit                                   | Works well in regulated environments                                             |\n| **Exact promotion between environments (e.g., staging → prod)**         | **ReflectSync**              | Precise deletes; type changes honored; no conflict files                             | Keep backups if human edits happen in prod                                       |\n| **One-way ingest to object storage (S3, etc.)**                         | **rclone** (adjacent tool)   | Direct backends; checksumming; retries                                               | Different problem space; can be combined with ReflectSync locally                |\n\n**Legend:**\n\n- **LWW** = Last-Write-Wins. In ReflectSync, ties break toward your **preferred side** (alpha/beta).\n- “Conflict copies” = tools that create duplicate files when both sides changed (e.g., `filename (conflict copy).txt`).\n\n**Rule of thumb**\n\n- Want **determinism** between **two roots** → pick **ReflectSync**.\n- Want a **mesh** or **never lose data** via conflict files → pick **Syncthing** (or cloud sync).\n- Want **dev-loop speed** → pick **Mutagen**.\n- Want **one-way mirroring** → pick **lsyncd**.\n- Want **history + sharing** → pick **Nextcloud/Dropbox**.\n","readmeFilename":"README.md"}