{"_id":"@hydra-acp/archiver","_rev":"28-50d22a2e5cf812973ac86515ff4254c4","name":"@hydra-acp/archiver","dist-tags":{"latest":"0.1.27"},"versions":{"0.1.0":{"name":"@hydra-acp/archiver","version":"0.1.0","license":"MIT","_id":"@hydra-acp/archiver@0.1.0","maintainers":[{"name":"zachakahn","email":"smagnuso@gmail.com"}],"bin":{"hydra-acp-archiver":"dist/index.js"},"dist":{"shasum":"82af16fcf40106bd227d9d3a5c632dcc6d50c6ed","tarball":"https://registry.npmjs.org/@hydra-acp/archiver/-/archiver-0.1.0.tgz","fileCount":41,"integrity":"sha512-kzuWdxraiqbU85RDk0QiD34C/domkWhxChwvQl3RaWpgpC9xCVXw0yaMfkYX+kGqFv4f7FAMEMYGuHcsV+6/1g==","signatures":[{"sig":"MEUCIAW2A4KvtwVcio8crAn5Cq5JGT9/iUtVGHR9lGb8BQ7gAiEAueLtkStlV1prAENDSfNqR5wYrDnfVDSMcsvQXgPQEHM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":127695},"main":"dist/index.js","type":"module","engines":{"node":">=20"},"gitHead":"eee51322e13c9bd336d82a4b8857cda8cd27bc56","scripts":{"dev":"tsc -p . && node dist/index.js","lint":"tsc -p . --noEmit","test":"node --test --import tsx 'test/**/*.test.ts'","build":"tsc -p .","start":"node dist/index.js","watch":"tsc -p . --watch","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"zachakahn","email":"smagnuso@gmail.com"},"_npmVersion":"11.6.2","description":"Session sync extension for hydra-acp — uploads session bundles to a shared backend (Google Drive, fs) and imports peers' bundles.","directories":{},"_nodeVersion":"24.12.0","dependencies":{"ws":"^8.20.0","googleapis":"^144.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.0","@types/ws":"^8.18.1","typescript":"^5.6.3","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/archiver_0.1.0_1779319064844_0.40187221455695266","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@hydra-acp/archiver","version":"0.1.1","license":"MIT","_id":"@hydra-acp/archiver@0.1.1","maintainers":[{"name":"zachakahn","email":"smagnuso@gmail.com"}],"bin":{"hydra-acp-archiver":"dist/index.js"},"dist":{"shasum":"40034296922d2ab4f6ef8250111e2052085630e5","tarball":"https://registry.npmjs.org/@hydra-acp/archiver/-/archiver-0.1.1.tgz","fileCount":41,"integrity":"sha512-qporWc33FvMi9ycULA3xbxN5ST7LNdgBoIIHSJvZvfuLHHroC/Ty5Yma9nBUxjZwIw9B+LRqKL4sfdocwGo+1A==","signatures":[{"sig":"MEYCIQCQwjF9hmlo/h4DnMJtaFSFz+WELhrHHIhoTIX1+TPvfwIhAPB78xT3LSOk/aIPGQR0wcQzk+L6oyNwr0UmEqNOFZ78","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":127695},"main":"dist/index.js","type":"module","engines":{"node":">=20"},"gitHead":"6c379e4ae96ab54906b77b26aad414e683cb2d27","scripts":{"dev":"tsc -p . && node dist/index.js","lint":"tsc -p . --noEmit","test":"node --test --import tsx 'test/**/*.test.ts'","build":"tsc -p .","start":"node dist/index.js","watch":"tsc -p . --watch","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"zachakahn","email":"smagnuso@gmail.com"},"_npmVersion":"11.6.2","description":"Session sync extension for hydra-acp — uploads session bundles to a shared backend (Google Drive, fs) and imports peers' bundles.","directories":{},"_nodeVersion":"24.12.0","dependencies":{"ws":"^8.20.0","googleapis":"^144.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.0","@types/ws":"^8.18.1","typescript":"^5.6.3","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/archiver_0.1.1_1779319104206_0.7168802274001842","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@hydra-acp/archiver","version":"0.1.2","license":"MIT","_id":"@hydra-acp/archiver@0.1.2","maintainers":[{"name":"zachakahn","email":"smagnuso@gmail.com"}],"bin":{"hydra-acp-archiver":"dist/index.js"},"dist":{"shasum":"1b75790cc1be19d31895ba9953c3884b50f65f1f","tarball":"https://registry.npmjs.org/@hydra-acp/archiver/-/archiver-0.1.2.tgz","fileCount":41,"integrity":"sha512-CD3MOp8z6/B/Jb0Bdje3JB0VklZ/SEmvzVMO52cvhtujIlr8niiEebv/zUHOAOaS8Bx6cmNoAaV/29DvxHZK5Q==","signatures":[{"sig":"MEUCIHQDh0RsMI8ggBeaZxa6Gj6n05DIjF7jonmauVXdQOPOAiEA0AhM37eNG4fj+dpHGIowQ0m2SpjmaZI2sZA5O3EmcOQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":128381},"main":"dist/index.js","type":"module","engines":{"node":">=20"},"gitHead":"7bde4ca409ab8fdb81490ed743dd30bad6e2e7b0","scripts":{"dev":"tsc -p . && node dist/index.js","lint":"tsc -p . --noEmit","test":"node --test --import tsx 'test/**/*.test.ts'","build":"tsc -p .","start":"node dist/index.js","watch":"tsc -p . --watch","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"zachakahn","email":"smagnuso@gmail.com"},"_npmVersion":"11.6.2","description":"Session sync extension for hydra-acp — uploads session bundles to a shared backend (Google Drive, fs) and imports peers' bundles.","directories":{},"_nodeVersion":"24.12.0","dependencies":{"ws":"^8.20.0","googleapis":"^144.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.0","@types/ws":"^8.18.1","typescript":"^5.6.3","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/archiver_0.1.2_1779323682090_0.5480449481416454","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@hydra-acp/archiver","version":"0.1.3","license":"MIT","_id":"@hydra-acp/archiver@0.1.3","maintainers":[{"name":"zachakahn","email":"smagnuso@gmail.com"}],"bin":{"hydra-acp-archiver":"dist/index.js"},"dist":{"shasum":"2d500396aadbebc43d97d744f4472fbf409dcce1","tarball":"https://registry.npmjs.org/@hydra-acp/archiver/-/archiver-0.1.3.tgz","fileCount":41,"integrity":"sha512-7fPPqaacOJqv24j4MaiTuwNbBYBhSXqCQDq03YL2bE92veSXfGdeI39Ijoj86/I8NUcsHK18SXoAU8UaDSmmzA==","signatures":[{"sig":"MEYCIQCta0T/BxacX6vXCGaSQOYhvefqLH+dTsvz81dvseuM0wIhAJVHCA8wolXZWT5ApspFcFizMyQkeD0daB1hj9UhvMAT","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":128381},"main":"dist/index.js","type":"module","engines":{"node":">=20"},"gitHead":"0009077e9fcbadc45574db86c8f3ae53bfbebae8","scripts":{"dev":"tsc -p . && node dist/index.js","lint":"tsc -p . --noEmit","test":"node --test --import tsx 'test/**/*.test.ts'","build":"tsc -p .","start":"node dist/index.js","watch":"tsc -p . --watch","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"zachakahn","email":"smagnuso@gmail.com"},"_npmVersion":"11.6.2","description":"Session sync extension for hydra-acp — uploads session bundles to a shared backend (Google Drive, fs) and imports peers' bundles.","directories":{},"_nodeVersion":"24.12.0","dependencies":{"ws":"^8.20.0","googleapis":"^171.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.0","@types/ws":"^8.18.1","typescript":"^5.6.3","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/archiver_0.1.3_1779324923991_0.5133377063573767","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@hydra-acp/archiver","version":"0.1.4","license":"MIT","_id":"@hydra-acp/archiver@0.1.4","maintainers":[{"name":"zachakahn","email":"smagnuso@gmail.com"}],"bin":{"hydra-acp-archiver":"dist/index.js"},"dist":{"shasum":"960030baa648fa7c27006f4e0ff3a03dd05d0d5f","tarball":"https://registry.npmjs.org/@hydra-acp/archiver/-/archiver-0.1.4.tgz","fileCount":41,"integrity":"sha512-u0ReZHGdV7V0q2dkrnYmWyf6BqEE/0qIv2GOpcoCESSn2VOMFMD8HRryEJPb5ONRVxf5b9mV+rNNSDtN91i+Qg==","signatures":[{"sig":"MEYCIQDEXlPQZOCPdcOOkZLZKrElQ8PhfmJn/lOIRNHwGAJ3YQIhAOmZUmWFw/ntRtbj6CyneX0Z7Wd3joipfG+5xtoj8OEz","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":132045},"main":"dist/index.js","type":"module","engines":{"node":">=20"},"gitHead":"9d0be1254096e6d5b85bb23e7120bfc395cde965","scripts":{"dev":"tsc -p . && node dist/index.js","lint":"tsc -p . --noEmit","test":"node --test --import tsx 'test/**/*.test.ts'","build":"tsc -p .","start":"node dist/index.js","watch":"tsc -p . --watch","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"zachakahn","email":"smagnuso@gmail.com"},"_npmVersion":"11.6.2","description":"Session sync extension for hydra-acp — uploads session bundles to a shared backend (Google Drive, fs) and imports peers' bundles.","directories":{},"_nodeVersion":"24.12.0","dependencies":{"ws":"^8.20.0","googleapis":"^171.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.0","@types/ws":"^8.18.1","typescript":"^5.6.3","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/archiver_0.1.4_1779329132946_0.30525927185590596","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@hydra-acp/archiver","version":"0.1.5","license":"MIT","_id":"@hydra-acp/archiver@0.1.5","maintainers":[{"name":"zachakahn","email":"smagnuso@gmail.com"}],"bin":{"hydra-acp-archiver":"dist/index.js"},"dist":{"shasum":"ca5ac0e6da05163b7a2e7faa605142f8164517e3","tarball":"https://registry.npmjs.org/@hydra-acp/archiver/-/archiver-0.1.5.tgz","fileCount":41,"integrity":"sha512-ChqLjvOcQ1U4UpkbdjSKIpMbatUAEKcy6wa/1zYn850Um0ulcPh1nGlsvLzKeAhRbxPoQvpRKeruAac6oA4fFg==","signatures":[{"sig":"MEUCICl5QJJKE0ngo31aUgTdve7ncLbwvg1Q8+gTQ7o/6XNsAiEA+p0mBTfZRXGjgXrkOY5ylyJgWg1UauovU8tubHxmeLg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":133288},"main":"dist/index.js","type":"module","engines":{"node":">=20"},"gitHead":"1d756c28cd1167c45e68a1486915f7089f517166","scripts":{"dev":"tsc -p . && node dist/index.js","lint":"tsc -p . --noEmit","test":"node --test --import tsx 'test/**/*.test.ts'","build":"tsc -p .","start":"node dist/index.js","watch":"tsc -p . --watch","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"zachakahn","email":"smagnuso@gmail.com"},"_npmVersion":"11.6.2","description":"Session sync extension for hydra-acp — uploads session bundles to a shared backend (Google Drive, fs) and imports peers' bundles.","directories":{},"_nodeVersion":"24.12.0","dependencies":{"ws":"^8.20.0","googleapis":"^171.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.0","@types/ws":"^8.18.1","typescript":"^5.6.3","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/archiver_0.1.5_1779340952608_0.04190043940795851","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@hydra-acp/archiver","version":"0.1.6","license":"MIT","_id":"@hydra-acp/archiver@0.1.6","maintainers":[{"name":"zachakahn","email":"smagnuso@gmail.com"}],"bin":{"hydra-acp-archiver":"dist/index.js"},"dist":{"shasum":"2ddbc10e94984bc443edea8d1f6a65f66361e433","tarball":"https://registry.npmjs.org/@hydra-acp/archiver/-/archiver-0.1.6.tgz","fileCount":41,"integrity":"sha512-DVCunhy+C/SOwE0RCjYlGNQKYesF9tHflnswsS+iKsRXi9BGt+4+rHtQFstiamNjSWvIP0gVbA68Ktu085iGug==","signatures":[{"sig":"MEUCIEHVWb5HxPigcqPARSC/Xy3EMHXdvVlNZ9mo7XXZWn9vAiEA/uPnqF5hHQcPk9i+8JNFn6Lo0XyeRvn9JlB3Xw27N/A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":133523},"main":"dist/index.js","type":"module","engines":{"node":">=20"},"gitHead":"947b5c4b1168b9815ab212ca56bdadf9598477a7","scripts":{"dev":"tsc -p . && node dist/index.js","lint":"tsc -p . --noEmit","test":"node --test --import tsx 'test/**/*.test.ts'","build":"tsc -p .","start":"node dist/index.js","watch":"tsc -p . --watch","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"zachakahn","email":"smagnuso@gmail.com"},"_npmVersion":"11.6.2","description":"Session sync extension for hydra-acp — uploads session bundles to a shared backend (Google Drive, fs) and imports peers' bundles.","directories":{},"_nodeVersion":"24.12.0","dependencies":{"ws":"^8.20.0","googleapis":"^171.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.0","@types/ws":"^8.18.1","typescript":"^5.6.3","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/archiver_0.1.6_1779473670561_0.3998747431998608","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@hydra-acp/archiver","version":"0.1.7","license":"MIT","_id":"@hydra-acp/archiver@0.1.7","maintainers":[{"name":"zachakahn","email":"smagnuso@gmail.com"}],"bin":{"hydra-acp-archiver":"dist/index.js"},"dist":{"shasum":"29cf6850ad9f88208ffb1a1d89fd1cc7130cfb25","tarball":"https://registry.npmjs.org/@hydra-acp/archiver/-/archiver-0.1.7.tgz","fileCount":47,"integrity":"sha512-v/p+lz9lo8FTjRuBe/X39yWf+8Tqaf6isDohggc2VwwfUbM/HJjXdKJ9hjSfzldwSFKZaYYaApURo3FPwmzTTg==","signatures":[{"sig":"MEQCIHsbyR+ir4XEN7ts1fdEQzQC9T+gzUXCCpFC19kBylJrAiAEgw2wtm6X9n14Jk5B9KmUe5VsumsYnGv2TxYwxyxlJg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":172551},"main":"dist/index.js","type":"module","engines":{"node":">=20"},"gitHead":"28f472dbede5fa5e6716dfd0d6141d3378f92001","scripts":{"dev":"tsc -p . && node dist/index.js","lint":"tsc -p . --noEmit","test":"node --test --import tsx 'test/**/*.test.ts'","build":"tsc -p .","start":"node dist/index.js","watch":"tsc -p . --watch","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"zachakahn","email":"smagnuso@gmail.com"},"_npmVersion":"11.6.2","description":"Session sync extension for hydra-acp — uploads session bundles to a shared backend (Google Drive, fs) and imports peers' bundles.","directories":{},"_nodeVersion":"24.12.0","dependencies":{"ws":"^8.20.0","googleapis":"^171.0.0","@aws-sdk/client-s3":"^3.700.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.0","@types/ws":"^8.18.1","typescript":"^5.6.3","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/archiver_0.1.7_1779730059038_0.48281588893303584","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"@hydra-acp/archiver","version":"0.1.8","license":"MIT","_id":"@hydra-acp/archiver@0.1.8","maintainers":[{"name":"zachakahn","email":"smagnuso@gmail.com"}],"bin":{"hydra-acp-archiver":"dist/index.js"},"dist":{"shasum":"6e3c41d3c9801dae1f665373efc7f5bbd6bd14e2","tarball":"https://registry.npmjs.org/@hydra-acp/archiver/-/archiver-0.1.8.tgz","fileCount":47,"integrity":"sha512-V5zshFsl5wMLx5NNHbwxUcZuQqgDKYWg0gSyvdVFXJroF0FhTY1pKVXGwoeW0Y/bq9u68TN8Qn/qd3xFbEq5qg==","signatures":[{"sig":"MEYCIQDyHpTi5V/e0XBjAySH2MHinryrzpE5hxvi2Hy3+kiUxAIhAPQCvdf6Rr/hXxchgApeber94V4qPu3SVZp0je1uTxws","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":172551},"main":"dist/index.js","type":"module","engines":{"node":">=20"},"gitHead":"bd78682fc30bd4a4331e50024a9ab9fdb4ac2954","scripts":{"dev":"tsc -p . && node dist/index.js","lint":"tsc -p . --noEmit","test":"node --test --import tsx 'test/**/*.test.ts'","build":"tsc -p .","start":"node dist/index.js","watch":"tsc -p . --watch","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"zachakahn","email":"smagnuso@gmail.com"},"_npmVersion":"11.6.2","description":"Session sync extension for hydra-acp — uploads session bundles to a shared backend (Google Drive, fs) and imports peers' bundles.","directories":{},"_nodeVersion":"24.12.0","dependencies":{"ws":"^8.20.0","googleapis":"^171.0.0","@aws-sdk/client-s3":"^3.700.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.0","@types/ws":"^8.18.1","typescript":"^5.6.3","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/archiver_0.1.8_1779730438326_0.8772415962070708","host":"s3://npm-registry-packages-npm-production"}},"0.1.9":{"name":"@hydra-acp/archiver","version":"0.1.9","license":"MIT","_id":"@hydra-acp/archiver@0.1.9","maintainers":[{"name":"zachakahn","email":"smagnuso@gmail.com"}],"bin":{"hydra-acp-archiver":"dist/index.js"},"dist":{"shasum":"685deb2db37f676d83f31ddbe7256b46f2d8f8ad","tarball":"https://registry.npmjs.org/@hydra-acp/archiver/-/archiver-0.1.9.tgz","fileCount":47,"integrity":"sha512-WDaA9x8pP53A8v1YYsWO96l0WJu10LsWueywEyeyRpCeYojBA9Nv9xTZ2IOWNek8Gml4QfgnMHfJOfAuDfaRlw==","signatures":[{"sig":"MEQCIF6fJFC+875S4JjaKOaVsR4+aTZYGrVU1VHWtjy0yJnbAiBa3gaR5hG1I0KujpFMpgZsV36A/KR+VuqYE5gM/P8EYg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":172551},"main":"dist/index.js","type":"module","engines":{"node":">=20"},"gitHead":"74871daf889c6465421be4be66b2894c67a94885","scripts":{"dev":"tsc -p . && node dist/index.js","lint":"tsc -p . --noEmit","test":"node --test --import tsx 'test/**/*.test.ts'","build":"tsc -p .","start":"node dist/index.js","watch":"tsc -p . --watch","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"zachakahn","email":"smagnuso@gmail.com"},"_npmVersion":"11.6.2","description":"Session sync extension for hydra-acp — uploads session bundles to a shared backend (Google Drive, fs) and imports peers' bundles.","directories":{},"_nodeVersion":"24.12.0","dependencies":{"ws":"^8.20.0","googleapis":"^171.0.0","@aws-sdk/client-s3":"3.1042.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.0","@types/ws":"^8.18.1","typescript":"^5.6.3","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/archiver_0.1.9_1779730549977_0.11293637949151036","host":"s3://npm-registry-packages-npm-production"}},"0.1.10":{"name":"@hydra-acp/archiver","version":"0.1.10","license":"MIT","_id":"@hydra-acp/archiver@0.1.10","maintainers":[{"name":"zachakahn","email":"smagnuso@gmail.com"}],"bin":{"hydra-acp-archiver":"dist/index.js"},"dist":{"shasum":"720d427c8adc0044fd945ceca844a6286fc974bc","tarball":"https://registry.npmjs.org/@hydra-acp/archiver/-/archiver-0.1.10.tgz","fileCount":49,"integrity":"sha512-AYtAQGBUmSl4cQclcC5YaFAs5zw+kvnARI864WA4eeAy1Dr/9QawShp4OCIbFof5UljES+kkGeQwQZs1iToV7w==","signatures":[{"sig":"MEUCIDv+0yY4cUK/cNhKJ/QLrX+7EnjIYd7AXZQi1i5kbJ1zAiEA0sfnRRT0WBxA1gdMqHbDG9v9bT/emibXNlqOWEej+08=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":189187},"main":"dist/index.js","type":"module","engines":{"node":">=20"},"gitHead":"3bf80a6e3ab3359021cea42737cca58aa4d45a84","scripts":{"dev":"tsc -p . && node dist/index.js","lint":"tsc -p . --noEmit","test":"node --test --import tsx 'test/**/*.test.ts'","build":"tsc -p .","start":"node dist/index.js","watch":"tsc -p . --watch","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"zachakahn","email":"smagnuso@gmail.com"},"_npmVersion":"11.6.2","description":"Session sync extension for hydra-acp — uploads session bundles to a shared backend (Google Drive, fs) and imports peers' bundles.","directories":{},"_nodeVersion":"24.12.0","dependencies":{"ws":"^8.20.0","googleapis":"^171.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.0","@types/ws":"^8.18.1","typescript":"^5.6.3","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/archiver_0.1.10_1779731376051_0.7654249494370773","host":"s3://npm-registry-packages-npm-production"}},"0.1.11":{"name":"@hydra-acp/archiver","version":"0.1.11","license":"MIT","_id":"@hydra-acp/archiver@0.1.11","maintainers":[{"name":"zachakahn","email":"smagnuso@gmail.com"}],"bin":{"hydra-acp-archiver":"dist/index.js"},"dist":{"shasum":"86265da2b4d95524993082c05d48f03315552bee","tarball":"https://registry.npmjs.org/@hydra-acp/archiver/-/archiver-0.1.11.tgz","fileCount":49,"integrity":"sha512-POeY7uQ0TT7HnAGqGXrUn/Ngk5Db+XOhc0CnSzeFl50a+VIL7uL5qbd6OgXDYauDMvDJBz5Q19/Sk8IyHVWLIw==","signatures":[{"sig":"MEYCIQCes7m70vnRWP1aAxB0++6KlN/5k2bMwZIYU7CpsC5eAwIhAPzRerUZKhykjgwLUSCTZo7mKQ94UJUJXHs4M//nMFks","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":190669},"main":"dist/index.js","type":"module","engines":{"node":">=20"},"gitHead":"e39c8c1e98d10d3332b2ef5ccf7967e7ba99d83f","scripts":{"dev":"tsc -p . && node dist/index.js","lint":"tsc -p . --noEmit","test":"node --test --import tsx 'test/**/*.test.ts'","build":"tsc -p .","start":"node dist/index.js","watch":"tsc -p . --watch","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"zachakahn","email":"smagnuso@gmail.com"},"_npmVersion":"11.6.2","description":"Session sync extension for hydra-acp — uploads session bundles to a shared backend (Google Drive, fs) and imports peers' bundles.","directories":{},"_nodeVersion":"24.12.0","dependencies":{"ws":"^8.20.0","googleapis":"^171.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.0","@types/ws":"^8.18.1","typescript":"^5.6.3","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/archiver_0.1.11_1779732359485_0.8066892309893055","host":"s3://npm-registry-packages-npm-production"}},"0.1.12":{"name":"@hydra-acp/archiver","version":"0.1.12","license":"MIT","_id":"@hydra-acp/archiver@0.1.12","maintainers":[{"name":"zachakahn","email":"smagnuso@gmail.com"}],"bin":{"hydra-acp-archiver":"dist/index.js"},"dist":{"shasum":"f06d0f3d3195f053e41a6f285aed1de2ac7de081","tarball":"https://registry.npmjs.org/@hydra-acp/archiver/-/archiver-0.1.12.tgz","fileCount":49,"integrity":"sha512-pEUZOAdWflZGifACeeleZ0qNYiXVmtX2ymzVmlBgod9rAaNlt4m5QAszq7L8dcVgQieHRuu3Sz/Fk/hfVrP5hA==","signatures":[{"sig":"MEUCIQC18DKxDkwp0p4W7uOyYGItTgNRTSCdI69Z/GT8qCMUQAIgBQGMwQ14AesLf6YUm6bvRBZl5h2Dmu/samAZI2PrH6o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":194125},"main":"dist/index.js","type":"module","engines":{"node":">=20"},"gitHead":"fcb064ed5e5a9520ba726457781cf65681ea77de","scripts":{"dev":"tsc -p . && node dist/index.js","lint":"tsc -p . --noEmit","test":"node --test --import tsx 'test/**/*.test.ts'","build":"tsc -p .","start":"node dist/index.js","watch":"tsc -p . --watch","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"zachakahn","email":"smagnuso@gmail.com"},"_npmVersion":"11.6.2","description":"Session sync extension for hydra-acp — uploads session bundles to a shared backend (Google Drive, fs) and imports peers' bundles.","directories":{},"_nodeVersion":"24.12.0","dependencies":{"ws":"^8.20.0","googleapis":"^171.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.0","@types/ws":"^8.18.1","typescript":"^5.6.3","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/archiver_0.1.12_1779734120330_0.6560805415961797","host":"s3://npm-registry-packages-npm-production"}},"0.1.13":{"name":"@hydra-acp/archiver","version":"0.1.13","license":"MIT","_id":"@hydra-acp/archiver@0.1.13","maintainers":[{"name":"zachakahn","email":"smagnuso@gmail.com"}],"bin":{"hydra-acp-archiver":"dist/index.js"},"dist":{"shasum":"3a902756f287c5462ce92ba70776c705b4d48842","tarball":"https://registry.npmjs.org/@hydra-acp/archiver/-/archiver-0.1.13.tgz","fileCount":57,"integrity":"sha512-P0Wd4uOTMKph8ftJINKjMG1HOr1jOBeyFArmMnpgDRyNh6PwB4mOQV63obyZZOctrAwsDCeK19JVAVw9LNp/IA==","signatures":[{"sig":"MEYCIQDSdgDsx5djNLXoY2mW7KG9TotxJrJoWYy2LW4eBI7j2wIhAI4JX1+OQcdX+ymX7rm/6fRhrGCi9nD9xIMLY+GC5bis","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":245672},"main":"dist/index.js","type":"module","engines":{"node":">=20"},"gitHead":"88146bde3324f61d2bb0a0a3bf586c3e9d23acf5","scripts":{"dev":"tsc -p . && node dist/index.js","lint":"tsc -p . --noEmit","test":"node --test --import tsx 'test/**/*.test.ts'","build":"tsc -p .","start":"node dist/index.js","watch":"tsc -p . --watch","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"zachakahn","email":"smagnuso@gmail.com"},"_npmVersion":"11.6.2","description":"Session sync extension for hydra-acp — uploads session bundles to a shared backend (Google Drive, fs) and imports peers' bundles.","directories":{},"_nodeVersion":"24.12.0","dependencies":{"ws":"^8.20.0","googleapis":"^171.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.0","@types/ws":"^8.18.1","typescript":"^5.6.3","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/archiver_0.1.13_1779937633482_0.7269853530379013","host":"s3://npm-registry-packages-npm-production"}},"0.1.14":{"name":"@hydra-acp/archiver","version":"0.1.14","license":"MIT","_id":"@hydra-acp/archiver@0.1.14","maintainers":[{"name":"zachakahn","email":"smagnuso@gmail.com"}],"bin":{"hydra-acp-archiver":"dist/index.js"},"dist":{"shasum":"a201b407c1d830cc59a186b4789deb377a0da88b","tarball":"https://registry.npmjs.org/@hydra-acp/archiver/-/archiver-0.1.14.tgz","fileCount":57,"integrity":"sha512-woYLp8ztjh/9O+zbFmK2vjVn9tksgm9yWAXdMXyq79xd149k80eN6SCqQHzYkuE4XO2rw3XdCXH3G4mXBRRtJQ==","signatures":[{"sig":"MEQCIF8Jkpe0hMipLS9uJgcqsiAozoWXWTBJfBhj/aKXdLiWAiALrUXls/6hG3K75tD1eINETf/45MH5pB0d+GR5I+BXDw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":246169},"main":"dist/index.js","type":"module","engines":{"node":">=20"},"gitHead":"6b129efcd92765aa43db4bc5bfb2103fb4427905","scripts":{"dev":"tsc -p . && node dist/index.js","lint":"tsc -p . --noEmit","test":"node --test --import tsx 'test/**/*.test.ts'","build":"tsc -p .","start":"node dist/index.js","watch":"tsc -p . --watch","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"zachakahn","email":"smagnuso@gmail.com"},"_npmVersion":"11.6.2","description":"Session sync extension for hydra-acp — uploads session bundles to a shared backend (Google Drive, fs) and imports peers' bundles.","directories":{},"_nodeVersion":"24.12.0","dependencies":{"ws":"^8.20.0","googleapis":"^171.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.0","@types/ws":"^8.18.1","typescript":"^5.6.3","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/archiver_0.1.14_1780012909246_0.5830248231433384","host":"s3://npm-registry-packages-npm-production"}},"0.1.15":{"name":"@hydra-acp/archiver","version":"0.1.15","license":"MIT","_id":"@hydra-acp/archiver@0.1.15","maintainers":[{"name":"zachakahn","email":"smagnuso@gmail.com"}],"bin":{"hydra-acp-archiver":"dist/index.js"},"dist":{"shasum":"880959254d7b154baaf0e71755c57ed6f419d44e","tarball":"https://registry.npmjs.org/@hydra-acp/archiver/-/archiver-0.1.15.tgz","fileCount":57,"integrity":"sha512-XPvHn7cjYqIZkV9y0YkngY7zjl4LYGe8ne1J6p/k4Jhl62/KyUVKzGBL5OPHy6qLlBalqvovuamGYd1SSLf9rg==","signatures":[{"sig":"MEUCIQC7k9QrxAB+lByvl/TDhE6fcNWoDBDbMD8C9oGwE0iWtAIgVXtru4SR0cXnPusjhS+FUdFkE7KNP2hpW0sNwC8GnZA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":246971},"main":"dist/index.js","type":"module","engines":{"node":">=20"},"gitHead":"0fba23ae4bcd2a741145d1992643b820c32afd4f","scripts":{"dev":"tsc -p . && node dist/index.js","lint":"tsc -p . --noEmit","test":"node --test --import tsx 'test/**/*.test.ts'","build":"tsc -p .","start":"node dist/index.js","watch":"tsc -p . --watch","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"zachakahn","email":"smagnuso@gmail.com"},"_npmVersion":"11.6.2","description":"Session sync extension for hydra-acp — uploads session bundles to a shared backend (Google Drive, fs) and imports peers' bundles.","directories":{},"_nodeVersion":"24.12.0","dependencies":{"ws":"^8.20.0","googleapis":"^171.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.0","@types/ws":"^8.18.1","typescript":"^5.6.3","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/archiver_0.1.15_1780332183962_0.3115900327439938","host":"s3://npm-registry-packages-npm-production"}},"0.1.16":{"name":"@hydra-acp/archiver","version":"0.1.16","license":"MIT","_id":"@hydra-acp/archiver@0.1.16","maintainers":[{"name":"zachakahn","email":"smagnuso@gmail.com"}],"bin":{"hydra-acp-archiver":"dist/index.js"},"dist":{"shasum":"aad8cd0911635a6df2b170775ce8a5ebd0b8789c","tarball":"https://registry.npmjs.org/@hydra-acp/archiver/-/archiver-0.1.16.tgz","fileCount":57,"integrity":"sha512-SWyp/oZ0SWVPYEYK0eYHaVdi1b+OxCmVchUIOBPwKksw1Nl/HTdLLgfbObMGo1Zylw8b0AL+dHU5TYaJPcIVRw==","signatures":[{"sig":"MEYCIQD5lXngkqq4Esi2Aw5H/Kp/+MD+mBm9ALBpgVI3fUeA/wIhAL0mI7HM9uSXs0ltqrsU4uwv9PcoaN0wMTaMuA1HyJ8S","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":248215},"main":"dist/index.js","type":"module","engines":{"node":">=20"},"gitHead":"018e94194a08a4bb3270f5b2b826e79b72196e29","scripts":{"dev":"tsc -p . && node dist/index.js","lint":"tsc -p . --noEmit","test":"node --test --import tsx 'test/**/*.test.ts'","build":"tsc -p .","start":"node dist/index.js","watch":"tsc -p . --watch","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"zachakahn","email":"smagnuso@gmail.com"},"_npmVersion":"11.6.2","description":"Session sync extension for hydra-acp — uploads session bundles to a shared backend (Google Drive, fs) and imports peers' bundles.","directories":{},"_nodeVersion":"24.12.0","dependencies":{"ws":"^8.20.0","googleapis":"^171.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.0","@types/ws":"^8.18.1","typescript":"^5.6.3","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/archiver_0.1.16_1780350401709_0.15519549842939329","host":"s3://npm-registry-packages-npm-production"}},"0.1.17":{"name":"@hydra-acp/archiver","version":"0.1.17","license":"MIT","_id":"@hydra-acp/archiver@0.1.17","maintainers":[{"name":"zachakahn","email":"smagnuso@gmail.com"}],"bin":{"hydra-acp-archiver":"dist/index.js"},"dist":{"shasum":"79cfc36d0bf06a867ccc6c7615f23df9236b570a","tarball":"https://registry.npmjs.org/@hydra-acp/archiver/-/archiver-0.1.17.tgz","fileCount":30,"integrity":"sha512-Z2L15p8VDI0LP9/xxPMxPxUtAJvMcypnVm9bDKNE6cyrtU/ItB3cnHM0SwbYgdtPU9k/t9VIfu9mPqVnLfm3RA==","signatures":[{"sig":"MEUCIQD/H5Y+fjhwCIi2QTDLsFj0LDOoO3hHuatWV63ABUlppgIgff9cpgUrYNFtEYNbBFohXUqhFGcg/vPJUD7GYTeO0QM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":78633},"main":"dist/index.js","type":"module","engines":{"node":">=20"},"gitHead":"0973baaf546450d40869967da38bad1b909139d3","scripts":{"dev":"tsup && node dist/index.js","lint":"tsc -p . --noEmit","test":"node --test --import tsx 'test/**/*.test.ts'","build":"tsup","start":"node dist/index.js","watch":"tsup --watch","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"zachakahn","email":"smagnuso@gmail.com"},"_npmVersion":"11.6.2","description":"Session sync extension for hydra-acp — uploads session bundles to a shared backend (Google Drive, fs) and imports peers' bundles.","directories":{},"_nodeVersion":"24.12.0","dependencies":{"ws":"^8.20.0","googleapis":"^171.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.0","tsup":"^8.5.1","@types/ws":"^8.18.1","typescript":"^5.6.3","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/archiver_0.1.17_1780421466145_0.5459358884510286","host":"s3://npm-registry-packages-npm-production"}},"0.1.18":{"name":"@hydra-acp/archiver","version":"0.1.18","license":"MIT","_id":"@hydra-acp/archiver@0.1.18","maintainers":[{"name":"zachakahn","email":"smagnuso@gmail.com"}],"bin":{"hydra-acp-archiver":"dist/index.js"},"dist":{"shasum":"1890556005ca89685703f11d795c92287db7cd2f","tarball":"https://registry.npmjs.org/@hydra-acp/archiver/-/archiver-0.1.18.tgz","fileCount":30,"integrity":"sha512-rNaxroJrGtJEowy6Au1oJ58TNlgUpB5+W8+IXpcC0HlHTWmRrpGZVwhM/3klk286YMLbO4kgvLRw+d+KNP+VNg==","signatures":[{"sig":"MEYCIQCKaXjy9I7fTMm9kMDFqPZQm4G3F8KmsjiKcDHa5gzDFgIhAPeVqmlND6v8/EVW6lE9l97Rnye2BAZeM3DmS0TKvSaq","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":79092},"main":"dist/index.js","type":"module","engines":{"node":">=20"},"gitHead":"6a4aa810e380d2ab6c53b4a06a1b43df0b4245c8","scripts":{"dev":"tsup && node dist/index.js","lint":"tsc -p . --noEmit","test":"node --test --import tsx 'test/**/*.test.ts'","build":"tsup","start":"node dist/index.js","watch":"tsup --watch","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"zachakahn","email":"smagnuso@gmail.com"},"_npmVersion":"11.6.2","description":"Session sync extension for hydra-acp — uploads session bundles to a shared backend (Google Drive, fs) and imports peers' bundles.","directories":{},"_nodeVersion":"24.12.0","dependencies":{"ws":"^8.20.0","googleapis":"^171.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.0","tsup":"^8.5.1","@types/ws":"^8.18.1","typescript":"^5.6.3","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/archiver_0.1.18_1780555190091_0.9157602532259979","host":"s3://npm-registry-packages-npm-production"}},"0.1.19":{"name":"@hydra-acp/archiver","version":"0.1.19","license":"MIT","_id":"@hydra-acp/archiver@0.1.19","maintainers":[{"name":"zachakahn","email":"smagnuso@gmail.com"}],"bin":{"hydra-acp-archiver":"dist/index.js"},"dist":{"shasum":"a4424e990a05bec0a37facd39056c97570a1e6d7","tarball":"https://registry.npmjs.org/@hydra-acp/archiver/-/archiver-0.1.19.tgz","fileCount":30,"integrity":"sha512-I8vSpR2PXXR3Ohd8BGJv7SNpPe12CddHfxoMJ89sdOD/LbWauTZ6TzIHsYCnFySAA1rZ4Hi3c6H3IPDW7utNeg==","signatures":[{"sig":"MEUCICHdFU5nEqQT5+z0stCXzRldxYa1LiEvGG0OxXE5dYJmAiEAj+YMdTRuDerKVAKMobOUln716owVdhhOTnitxIw9UjU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":75797},"main":"dist/index.js","type":"module","engines":{"node":">=20"},"gitHead":"d96ce26e711d33788c4868d079da0257b8571b4e","scripts":{"dev":"tsup && node dist/index.js","lint":"tsc -p . --noEmit","test":"node --test --import tsx 'test/**/*.test.ts'","build":"tsup","start":"node dist/index.js","watch":"tsup --watch","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"zachakahn","email":"smagnuso@gmail.com"},"_npmVersion":"11.6.2","description":"Session sync extension for hydra-acp — uploads session bundles to a shared backend (Google Drive, fs) and imports peers' bundles.","directories":{},"_nodeVersion":"24.12.0","dependencies":{"ws":"^8.20.0","googleapis":"^171.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.0","tsup":"^8.5.1","@types/ws":"^8.18.1","typescript":"^5.6.3","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/archiver_0.1.19_1781497689460_0.09651388719367393","host":"s3://npm-registry-packages-npm-production"}},"0.1.20":{"name":"@hydra-acp/archiver","version":"0.1.20","license":"MIT","_id":"@hydra-acp/archiver@0.1.20","maintainers":[{"name":"zachakahn","email":"smagnuso@gmail.com"}],"bin":{"hydra-acp-archiver":"dist/index.js"},"dist":{"shasum":"b1e83ac30c33de2cf144b9b8ec185a1f8ae908c8","tarball":"https://registry.npmjs.org/@hydra-acp/archiver/-/archiver-0.1.20.tgz","fileCount":30,"integrity":"sha512-boTwwI/o1B2NfPIOG1iOKqQ1VU5POeU9L8hk0IMsaAr+JI+Xj6h9k/gI6KA3VsaNbBVyroRz4MFfHbJASqSKwg==","signatures":[{"sig":"MEUCIEKw8DJLYBEc2IzWBWfXdhsCF+tSP1LxVH3qz33Dmqu+AiEArnwn491KYk43pLZzLmdM+QqvHZuSLrE9zUThMYf4JzA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":76059},"main":"dist/index.js","type":"module","engines":{"node":">=20"},"gitHead":"c0dfbf4fa2cc137e7504f3a91379ed3921d6d29e","scripts":{"dev":"tsup && node dist/index.js","lint":"tsc -p . --noEmit","test":"node --test --import tsx 'test/**/*.test.ts'","build":"tsup","start":"node dist/index.js","watch":"tsup --watch","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"zachakahn","email":"smagnuso@gmail.com"},"_npmVersion":"11.6.2","description":"Session sync extension for hydra-acp — uploads session bundles to a shared backend (Google Drive, fs) and imports peers' bundles.","directories":{},"_nodeVersion":"24.12.0","dependencies":{"ws":"^8.20.0","googleapis":"^171.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.0","tsup":"^8.5.1","@types/ws":"^8.18.1","typescript":"^5.6.3","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/archiver_0.1.20_1781541227988_0.8280859506209404","host":"s3://npm-registry-packages-npm-production"}},"0.1.21":{"name":"@hydra-acp/archiver","version":"0.1.21","license":"MIT","_id":"@hydra-acp/archiver@0.1.21","maintainers":[{"name":"zachakahn","email":"smagnuso@gmail.com"}],"bin":{"hydra-acp-archiver":"dist/index.js"},"dist":{"shasum":"65e64bb06c1214143989022dae981b4779526df6","tarball":"https://registry.npmjs.org/@hydra-acp/archiver/-/archiver-0.1.21.tgz","fileCount":30,"integrity":"sha512-TgwaTuzYt+T5Q07odwHcieveMI9PhvJMTf76P6QmISwRc0clnOahYVg5AwZS1vWNopyIlQR3prxXNxTetZIvtw==","signatures":[{"sig":"MEQCIDaXINOEoKT7iF104ZWKcDpNSHbI6oRTxytPK7YvYF4HAiABGw4bgnvaJKCztNV7dJ6nYckBSy58smMc/518mZ8RfQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":76059},"main":"dist/index.js","type":"module","engines":{"node":">=20"},"gitHead":"bb3bec2ab589cf7ebd9644873284a597d3ccba90","scripts":{"dev":"tsup && node dist/index.js","lint":"tsc -p . --noEmit","test":"node --test --import tsx 'test/**/*.test.ts'","build":"tsup","start":"node dist/index.js","watch":"tsup --watch","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"zachakahn","email":"smagnuso@gmail.com"},"_npmVersion":"11.6.2","description":"Session sync extension for hydra-acp — uploads session bundles to a shared backend (Google Drive, fs) and imports peers' bundles.","directories":{},"_nodeVersion":"24.12.0","dependencies":{"ws":"^8.20.0","googleapis":"^171.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.0","tsup":"^8.5.1","@types/ws":"^8.18.1","typescript":"^5.6.3","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/archiver_0.1.21_1782506288961_0.5955211212333344","host":"s3://npm-registry-packages-npm-production"}},"0.1.22":{"name":"@hydra-acp/archiver","version":"0.1.22","license":"MIT","_id":"@hydra-acp/archiver@0.1.22","maintainers":[{"name":"zachakahn","email":"smagnuso@gmail.com"}],"bin":{"hydra-acp-archiver":"dist/index.js"},"dist":{"shasum":"b95a0315eb0d22d1f4d1bb8959c5ca6356f60569","tarball":"https://registry.npmjs.org/@hydra-acp/archiver/-/archiver-0.1.22.tgz","fileCount":30,"integrity":"sha512-aAvzzRS1wPrbtkYYSx0GdikW4a4WP0NrmYMRgzLlyNAz8E/LlV+xnpmm3iic+QdLyM1zpVukOle/NkvCjh98rA==","signatures":[{"sig":"MEUCIQDFybfW2tOP0VcCLN7Sjef4gryj9WEIhw8Eh+34zuqmUgIgbVwstivbFD3YDu19IskGz8cWIwlSYM0f6l+okOiIn1o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":76059},"main":"dist/index.js","type":"module","engines":{"node":">=20"},"gitHead":"ee333811986c9bffe12590085270097ef8155a7c","scripts":{"dev":"tsup && node dist/index.js","lint":"tsc -p . --noEmit","test":"node --test --import tsx 'test/**/*.test.ts'","build":"tsup","start":"node dist/index.js","watch":"tsup --watch","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"zachakahn","email":"smagnuso@gmail.com"},"_npmVersion":"11.6.2","description":"Session sync extension for hydra-acp — uploads session bundles to a shared backend (Google Drive, fs) and imports peers' bundles.","directories":{},"_nodeVersion":"24.12.0","dependencies":{"ws":"^8.20.0","googleapis":"^171.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.0","tsup":"^8.5.1","@types/ws":"^8.18.1","typescript":"^5.6.3","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/archiver_0.1.22_1783975625550_0.39272396573728985","host":"s3://npm-registry-packages-npm-production"}},"0.1.23":{"name":"@hydra-acp/archiver","version":"0.1.23","license":"MIT","_id":"@hydra-acp/archiver@0.1.23","maintainers":[{"name":"zachakahn","email":"smagnuso@gmail.com"}],"bin":{"hydra-acp-archiver":"dist/index.js"},"dist":{"shasum":"a72be74ba01ac86ad8da90838b58d9ef5eb549d5","tarball":"https://registry.npmjs.org/@hydra-acp/archiver/-/archiver-0.1.23.tgz","fileCount":30,"integrity":"sha512-xfsJw4hdlXe04vrRkjPVpqg64mz0YNO5mcJSHVkkYdNgvYvhX5lEXUp0G/0hYZdISqkBvIjP/NRzHu0R/Lc+NA==","signatures":[{"sig":"MEYCIQD15ul5bRKwTuT3Teygwq1EuDBWn42kWi8jEhH9/20qmwIhAOsKDIcFLdcI1/gfYFN+pPYGO1sc97e9QBSAPdwdr0c4","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":76059},"main":"dist/index.js","type":"module","engines":{"node":">=20"},"gitHead":"4b01f1da3bf7265e500c5bb504c6c04e191b8e38","scripts":{"dev":"tsup && node dist/index.js","lint":"tsc -p . --noEmit","test":"node --test --import tsx 'test/**/*.test.ts'","build":"tsup","start":"node dist/index.js","watch":"tsup --watch","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"zachakahn","email":"smagnuso@gmail.com"},"_npmVersion":"11.16.0","description":"Session sync extension for hydra-acp — uploads session bundles to a shared backend (Google Drive, fs) and imports peers' bundles.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ws":"^8.20.0","googleapis":"^171.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.0","tsup":"^8.5.1","@types/ws":"^8.18.1","typescript":"^5.6.3","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/archiver_0.1.23_1784658157310_0.1417347090147092","host":"s3://npm-registry-packages-npm-production"}},"0.1.24":{"name":"@hydra-acp/archiver","version":"0.1.24","license":"MIT","_id":"@hydra-acp/archiver@0.1.24","maintainers":[{"name":"zachakahn","email":"smagnuso@gmail.com"}],"bin":{"hydra-acp-archiver":"dist/index.js"},"dist":{"shasum":"db0db415e407e1822c0e77863a92dd1e5b46fd42","tarball":"https://registry.npmjs.org/@hydra-acp/archiver/-/archiver-0.1.24.tgz","fileCount":33,"integrity":"sha512-AgmFB0oIMlBRBsOAj8vCad5n97P0FjgsUBQ59JeCwIBvMc63nKm8hS0LSOn37J0eYAxBmSVkqltEo7UeguKWJA==","signatures":[{"sig":"MEUCIQD8OuddwV7qY0aE76Xcg5TLRg+mV6Zp0/CnP1ItJlzn2QIgI8brmCYlbvOEjew9QtnN30Ya2Y/mzT9rNN/K17VZoYk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":89321},"main":"dist/index.js","type":"module","engines":{"node":">=20"},"gitHead":"3715cd862429a5617c05fc21742217ff3a221052","scripts":{"dev":"tsup && node dist/index.js","lint":"tsc -p . --noEmit","test":"node --test --import tsx 'test/**/*.test.ts'","build":"tsup","start":"node dist/index.js","watch":"tsup --watch","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"zachakahn","email":"smagnuso@gmail.com"},"_npmVersion":"11.16.0","description":"Session sync extension for hydra-acp — uploads session bundles to a shared backend (Google Drive, fs) and imports peers' bundles.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ws":"^8.20.0","googleapis":"^171.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.0","tsup":"^8.5.1","@types/ws":"^8.18.1","typescript":"^5.6.3","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/archiver_0.1.24_1784747185895_0.45766477947667905","host":"s3://npm-registry-packages-npm-production"}},"0.1.25":{"name":"@hydra-acp/archiver","version":"0.1.25","license":"MIT","_id":"@hydra-acp/archiver@0.1.25","maintainers":[{"name":"zachakahn","email":"smagnuso@gmail.com"}],"bin":{"hydra-acp-archiver":"dist/index.js"},"dist":{"shasum":"e234f2ec7c267ef23c50e9e0d06dd1c7840fcccd","tarball":"https://registry.npmjs.org/@hydra-acp/archiver/-/archiver-0.1.25.tgz","fileCount":33,"integrity":"sha512-1OFqRIPveNplQLZRMyADTdBEPrBP5Ivn2NmkZ06bQP94xHwkyNC7TMtKxN0xiiQT6NubO2ptJ/qsGv7Urx8pQg==","signatures":[{"sig":"MEUCIHo4hTtAWmXk5R7rJTMm06S6UWPr4asT/PSXMxZZqytOAiEA9epYrANFORzsV/CXpnwI/4aDECsUSskbhGTRIWb9MRk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":89333},"main":"dist/index.js","type":"module","engines":{"node":">=20"},"gitHead":"553d2d7a84ece4f061341e18bde5cd992dd8738f","scripts":{"dev":"tsup && node dist/index.js","lint":"tsc -p . --noEmit","test":"node --test --import tsx 'test/**/*.test.ts'","build":"tsup","start":"node dist/index.js","watch":"tsup --watch","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"zachakahn","email":"smagnuso@gmail.com"},"_npmVersion":"11.16.0","description":"Session sync extension for hydra-acp — uploads session bundles to a shared backend (Google Drive, fs) and imports peers' bundles.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ws":"^8.20.0","googleapis":"^171.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.0","tsup":"^8.5.1","@types/ws":"^8.18.1","typescript":"^5.6.3","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/archiver_0.1.25_1785892572408_0.3140990009701159","host":"s3://npm-registry-packages-npm-production"}},"0.1.26":{"name":"@hydra-acp/archiver","version":"0.1.26","license":"MIT","_id":"@hydra-acp/archiver@0.1.26","maintainers":[{"name":"zachakahn","email":"smagnuso@gmail.com"}],"bin":{"hydra-acp-archiver":"dist/index.js"},"dist":{"shasum":"b221b1c12c99ba42271af7e579a0711c38e38543","tarball":"https://registry.npmjs.org/@hydra-acp/archiver/-/archiver-0.1.26.tgz","fileCount":33,"integrity":"sha512-I/N3zdcG8+vkyR5GO+RtBzFVoV8eNAYGGYXbZP15qYXZrQEMRPDX9MDnP4Dlye/d+aSkq423naMNqmrliLGnQw==","signatures":[{"sig":"MEYCIQC/Sxw5L1fHwnvxs6OH+t2TYil6PpcJMTEby1w77qowyAIhAIO5Rr+y91Ntia6IuOEBj5jBD9xcvl4Peor/mqLXfCj6","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":89315},"main":"dist/index.js","type":"module","engines":{"node":">=20"},"gitHead":"389fde97dd5c30b1ea14ee1e60f05cd955aabfde","scripts":{"dev":"tsup && node dist/index.js","lint":"tsc -p . --noEmit","test":"node scripts/run-tests.mjs","build":"tsup","start":"node dist/index.js","watch":"tsup --watch","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"zachakahn","email":"smagnuso@gmail.com"},"_npmVersion":"11.16.0","description":"Session sync extension for hydra-acp — uploads session bundles to a shared backend (Google Drive, fs) and imports peers' bundles.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ws":"^8.21.0","googleapis":"^171.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.0","tsup":"^8.5.1","@types/ws":"^8.18.1","typescript":"^5.6.3","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/archiver_0.1.26_1788754457002_0.4493616866122496","host":"s3://npm-registry-packages-npm-production"}},"0.1.27":{"_id":"@hydra-acp/archiver@0.1.27","bin":{"hydra-acp-archiver":"dist/index.js"},"dist":{"shasum":"fd2ffbe4a9e7b6c39b8ce5eb58fcc7b004f79ab3","tarball":"https://registry.npmjs.org/@hydra-acp/archiver/-/archiver-0.1.27.tgz","fileCount":33,"integrity":"sha512-PN4tKYIkJvwDLHLfew569yVUHHv08r70xR4LsR3GtVv2lozRywQujLUrVbDoovrDRATYnTU4uKs7sFmMCNN9+Q==","signatures":[{"sig":"MEQCIARuXDtqgRTiMVbuy33+nV9U5E9VQD4d14dIHYfRIx6+AiBbDnQMyw5W1n8a955g5WylcLtBxbS/zCyUO06Fjyja9g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIFDbm6l75C/Pvtp0dapO2KEFxtMktpYHr6b2NEpcbghTAiA3mAP3nOLeE5W7t5LJHlyplBeEoEoONLlUHuX/UOUUWQ=="}],"unpackedSize":90177},"main":"dist/index.js","name":"@hydra-acp/archiver","type":"module","engines":{"node":">=20"},"gitHead":"7111b19f870bbcb0920bb8735e2e1362e06eda22","license":"MIT","scripts":{"dev":"tsup && node dist/index.js","lint":"tsc -p . --noEmit","test":"node scripts/run-tests.mjs","build":"tsup","start":"node dist/index.js","watch":"tsup --watch","prepublishOnly":"npm run build && npm test"},"version":"0.1.27","_npmUser":{"name":"zachakahn","email":"smagnuso@gmail.com"},"_npmVersion":"11.16.0","description":"Session sync extension for hydra-acp — uploads session bundles to a shared backend (Google Drive, fs) and imports peers' bundles.","directories":{},"maintainers":[{"name":"zachakahn","email":"smagnuso@gmail.com"}],"_nodeVersion":"24.18.0","dependencies":{"ws":"^8.21.0","googleapis":"^171.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.0","tsup":"^8.5.1","@types/ws":"^8.18.1","typescript":"^5.6.3","@types/node":"^22.10.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/archiver_0.1.27_1789964370365_0.8965552760017244"}}},"time":{"created":"2026-05-20T23:17:44.721Z","modified":"2026-09-21T04:19:30.626Z","0.1.0":"2026-05-20T23:17:44.981Z","0.1.1":"2026-05-20T23:18:24.348Z","0.1.2":"2026-05-21T00:34:42.260Z","0.1.3":"2026-05-21T00:55:24.208Z","0.1.4":"2026-05-21T02:05:33.093Z","0.1.5":"2026-05-21T05:22:32.760Z","0.1.6":"2026-05-22T18:14:30.722Z","0.1.7":"2026-05-25T17:27:39.196Z","0.1.8":"2026-05-25T17:33:58.458Z","0.1.9":"2026-05-25T17:35:50.117Z","0.1.10":"2026-05-25T17:49:36.208Z","0.1.11":"2026-05-25T18:05:59.669Z","0.1.12":"2026-05-25T18:35:20.514Z","0.1.13":"2026-05-28T03:07:13.650Z","0.1.14":"2026-05-29T00:01:49.391Z","0.1.15":"2026-06-01T16:43:04.099Z","0.1.16":"2026-06-01T21:46:41.850Z","0.1.17":"2026-06-02T17:31:06.304Z","0.1.18":"2026-06-04T06:39:50.288Z","0.1.19":"2026-06-15T04:28:09.586Z","0.1.20":"2026-06-15T16:33:48.138Z","0.1.21":"2026-06-26T20:38:09.101Z","0.1.22":"2026-07-13T20:47:05.705Z","0.1.23":"2026-07-21T18:22:37.453Z","0.1.24":"2026-07-22T19:06:26.123Z","0.1.25":"2026-08-05T01:16:12.555Z","0.1.26":"2026-09-07T04:14:17.133Z","0.1.27":"2026-09-21T04:19:30.458Z"},"license":"MIT","description":"Session sync extension for hydra-acp — uploads session bundles to a shared backend (Google Drive, fs) and imports peers' bundles.","maintainers":[{"name":"zachakahn","email":"smagnuso@gmail.com"}],"readme":"# hydra-acp-archiver\n\nSync extension for [hydra-acp](https://github.com/smagnuso/hydra-acp). Keeps your agent sessions in sync across the machines you work on by uploading session bundles to a shared backend (Google Drive, S3, plain filesystem) after every turn and importing peers' bundles in the background. Supports optional AES-256-GCM encryption so data at rest is unreadable without your shared key.\n\nRuns as a daemon-managed process, so sessions started on machine A become available on machine B without any manual export/import.\n\n## How it works\n\n1. **Startup cold sweep**: lists every session the daemon knows about and exports the cold ones — so installing the archiver on a machine with a pile of existing sessions backfills them all to the backend without the user having to touch each one. Hash-dedup keeps subsequent restarts cheap (already-uploaded sessions are skipped).\n2. **Live monitoring**: watches every live hydra session via the daemon's WebSocket. When a session emits `turn_complete`, the archiver schedules a debounced flush (default 5 s window).\n3. **On flush**: asks the daemon to `GET /v1/sessions/:id/export`, wraps the resulting `.hydra` bundle in a sync envelope (lineageId + hash + uploader info), and writes it to the backend keyed by `lineageId`.\n4. **Live → cold final flush**: when a session goes cold (daemon detaches), one last flush captures its latest state before the WS bridge tears down.\n5. **Pull loop**: on a separate timer (default 60 s), lists the backend, downloads any envelope newer than what it last saw, and POSTs the bundle to `/v1/sessions/import` with `replace: true`.\n6. **De-dup**: uses hydra's stable `lineageId` (it survives every export/import hop) plus a SHA-256 of the canonicalized bundle to skip uploads when content hasn't actually changed.\n\nConflict resolution is last-writer-wins by envelope `uploadedAt`. The envelope format leaves room for a future `activeOn` claim-lock; not in this release.\n\n## Install\n\nFrom npm (recommended once published):\n\n```sh\nnpm install -g @hydra-acp/cli @hydra-acp/archiver\n```\n\nThis drops the `hydra-acp` (and `hydra`) CLI plus a `hydra-acp-archiver` binary on your PATH. The CLI dispatches `hydra-acp <name>` to any `hydra-acp-<name>` binary on PATH, so the archiver is also reachable as `hydra-acp archiver`.\n\nOr from source:\n\n```sh\ngit clone git@github.com:smagnuso/hydra-acp-archiver.git ~/dev/hydra-acp-archiver\ncd ~/dev/hydra-acp-archiver\nnpm install\nnpm run build\n```\n\n## Setup\n\n```sh\nhydra-acp archiver setup\n```\n\nOr from source:\n\n```sh\ngit clone git@github.com:smagnuson/hydra-acp-archiver.git ~/dev/hydra-acp-archiver\ncd ~/dev/hydra-acp-archiver\nnpm install\nnpm run build\n```\n\n## Setup\n\n```sh\nhydra-acp-archiver setup\n```\n\nThe wizard walks you through picking a backend (Google Drive / S3 / Filesystem), configuring credentials, optionally generating an AES-256-GCM key for encryption, writing `~/.hydra-acp/archiver.conf`, and registering the archiver as a hydra extension. About 1 minute for S3/Filesystem; about 5–8 minutes for Google Drive (the GCP Console click-through is the long pole).\n\nRe-run `hydra-acp archiver setup` any time to switch backends or rotate keys — it preserves existing custom config keys.\n\n<details>\n<summary>Manual Google Drive setup (if you prefer not to run the wizard)</summary>\n\nThe Google Drive backend uses OAuth 2.0 with the **`drive.file`** scope — the archiver can only see files it creates plus those you explicitly hand it via a picker. Your other Drive contents stay invisible to it.\n\nThe archiver ships with an embedded OAuth client (the published `hydra-acp-archiver` app), so there's no Cloud Console setup on your end:\n\n1. Run `hydra-acp archiver gdrive login`. Your browser opens to Google's consent screen — sign in and grant access. The redirect lands on a transient local server, the archiver writes `~/.hydra-acp/archiver-google-token.json` (mode 0600), and you're done.\n2. Register: `hydra-acp extensions add hydra-acp-archiver`.\n\nAfter this, restart the daemon. The archiver process starts up, creates a `hydra-acp-archive/` folder in your Drive on first upload, and begins syncing.\n\n</details>\n\n<details>\n<summary>Manual extension registration</summary>\n\nIf you skip the wizard's registration step, run:\n\n```sh\nhydra-acp extensions add hydra-acp-archiver\n```\n\nOr pointed at a local build:\n\n```sh\nhydra-acp extensions add hydra-acp-archiver \\\n  --command node \\\n  --args ~/dev/hydra-acp-archiver/dist/index.js\n```\n\nThat writes the equivalent entry into `~/.hydra-acp/config.json`. On `hydra-acp daemon start`, hydra spawns hydra-acp-archiver as a managed subprocess. Stdout/stderr land in `~/.hydra-acp/extensions/hydra-acp-archiver.log`.\n\n</details>\n\n## Multi-machine setup\n\nRun `hydra-acp archiver setup` on each machine that should sync. For Google Drive, log in with the **same Google account** and use the **same Drive folder name** so each machine points at the shared archive. For S3, point each machine at the same bucket. For filesystem, point each at a directory that some external sync tool (Syncthing, Dropbox, iCloud) mirrors.\n\nIf you turned on encryption, copy `~/.hydra-acp/archiver-key` from your first machine to each peer; the wizard's fingerprint output lets you verify they match.\n\n## S3 backend\n\nWorks with any S3-compatible store: AWS S3, Cloudflare R2, Backblaze B2, MinIO, Wasabi, etc.\n\nCredentials come from the standard AWS SDK chain — environment variables (`AWS_ACCESS_KEY_ID` / `AWS_SECRET_ACCESS_KEY`), `~/.aws/credentials`, or an IAM role. Set `AWS_PROFILE` to use a non-default credentials profile.\n\n```json\n{\n  \"extensions\": {\n    \"hydra-acp-archiver\": {\n      \"command\": [\"node\"],\n      \"args\": [\"/home/you/dev/hydra-acp-archiver/dist/index.js\"],\n      \"env\": {\n        \"HYDRA_ACP_ARCHIVER_BACKEND\": \"s3\",\n        \"HYDRA_ACP_ARCHIVER_S3_BUCKET\": \"my-hydra-archive\",\n        \"HYDRA_ACP_ARCHIVER_S3_REGION\": \"us-east-1\"\n      }\n    }\n  }\n}\n```\n\nFor S3-compatible endpoints (R2, MinIO, B2):\n\n```json\n\"HYDRA_ACP_ARCHIVER_S3_ENDPOINT\": \"https://<accountid>.r2.cloudflarestorage.com\"\n```\n\n**Multi-machine setup**: point every machine at the same bucket.\n\n**Data separation**: the archiver sets a prefix automatically so users sharing a bucket don't see each other's sessions:\n- **Encryption on**: prefix defaults to the key fingerprint (e.g. `a1b2c3d4e5f6a7b8/`). Everyone sharing the same key lands in the same namespace; different keys land in different namespaces. Rotating the key changes the prefix, causing a full re-upload with the new key.\n- **Encryption off**: prefix defaults to your OS username (e.g. `alice/`).\n\nSet `HYDRA_ACP_ARCHIVER_PREFIX` explicitly to override the default.\n\n**Delete semantics**: blobs are hard-deleted. Enable [S3 bucket versioning](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html) if you want recoverability.\n\n## Filesystem backend\n\nUseful for testing locally, or for pointing at a folder that a separate sync tool (Syncthing, Dropbox client) already mirrors across your machines.\n\n```json\n{\n  \"extensions\": {\n    \"hydra-acp-archiver\": {\n      \"command\": [\"node\"],\n      \"args\": [\"/home/you/dev/hydra-acp-archiver/dist/index.js\"],\n      \"env\": {\n        \"HYDRA_ACP_ARCHIVER_BACKEND\": \"fs\",\n        \"HYDRA_ACP_ARCHIVER_FS_DIR\": \"/home/you/Sync/hydra-archive\"\n      }\n    }\n  }\n}\n```\n\n## Encryption\n\nAll three backends support optional AES-256-GCM encryption. When enabled, blobs are encrypted before upload and decrypted after download — the backend never sees plaintext.\n\nGenerate a key on one machine:\n\n```sh\nhydra-acp archiver keygen\n```\n\nThis writes a 32-byte key as a hex file (mode 0600) and prints:\n\n```\nkey written to ~/.hydra-acp/archiver-key\nkey fingerprint: a1b2c3d4e5f6a7b8\n\nCopy ~/.hydra-acp/archiver-key to every machine that should share this archive.\nThen add to your extension env config:\n  \"HYDRA_ACP_ARCHIVER_KEY_PATH\": \"/home/you/.hydra-acp/archiver-key\"\n```\n\nCopy the key file to each machine, then set `HYDRA_ACP_ARCHIVER_KEY_PATH` in every extension env block. The fingerprint lets you verify all machines have the same key.\n\n**Key mismatch**: if a blob was encrypted with a different key, the archiver logs `key mismatch` and skips that blob rather than failing with a confusing crypto error.\n\n**Enabling encryption on an existing archive**: the key fingerprint becomes the new prefix, so old unencrypted blobs (written under a different prefix) are simply ignored — no decryption errors. The cold sweep re-uploads all sessions under the new prefix. To clean up old blobs, remove them from the backend manually.\n\n## Prefix and namespace isolation\n\nEvery backend supports an optional namespace prefix. The archiver sets one automatically so multiple users sharing the same storage container don't interfere with each other.\n\n### How the prefix is chosen\n\n1. **`HYDRA_ACP_ARCHIVER_PREFIX` is set** — that value is used verbatim. Set it to `\"\"` to disable the prefix entirely (not recommended on shared storage).\n2. **Encryption is on, no explicit prefix** — the key fingerprint (first 8 bytes of SHA-256 of the key, encoded as 16 hex chars followed by `/`) is used, e.g. `a1b2c3d4e5f6a7b8/`. Everyone sharing the same key lands in the same namespace; different keys land in different namespaces. Rotating the key changes the prefix, which isolates new blobs from old ones.\n3. **Encryption off, no explicit prefix** — the OS username (sanitized to lowercase alphanumeric + hyphens, followed by `/`) is used, e.g. `alice/`.\n\n### Host segregation\n\nWithin the user prefix, each machine writes to its own subdirectory named by its host ID. The full storage path is `<user-prefix><hostId>/<lineageId>.hydra.archive`. For example:\n\n```\na1b2c3d4e5f6a7b8/\n  alice-macbook/uuid1.hydra.archive\n  alice-macbook/uuid2.hydra.archive\n  alice-desktop/uuid3.hydra.archive\n```\n\nThe pull loop reads across all host subdirectories (seeing all peers' sessions) but skips its own host's files entirely — cheaper than parsing envelopes for self-loop detection. The session-ID check remains as a second layer for edge cases.\n\nSet `HYDRA_ACP_ARCHIVER_HOST_ID` to override the default (`os.hostname()` sanitized). Useful in containers or after a machine rename. Use the same value consistently across daemon restarts on a machine — changing it creates a new subdirectory and triggers a full re-upload.\n\n### What the prefix does per backend\n\n| Backend | Prefix behaviour |\n|---|---|\n| **S3** | Prepended to the S3 object key. `ListObjectsV2` is called with the `Prefix` parameter so only matching objects are fetched — efficient on large shared buckets. |\n| **fs** | Resolved as a subdirectory of the archive directory. Files land at `<dir>/<prefix>/<key>`. Each prefix gets its own isolated directory. |\n| **Google Drive** | Prepended to the Drive filename. Drive has no native directory structure within a folder, so `alice/uuid.hydra.archive` is literally the filename. `list()` filters client-side. |\n\n### Key rotation and re-upload\n\nWhen encryption is enabled and you regenerate the key (`hydra-acp archiver keygen`), the fingerprint prefix changes. The new prefix namespace is empty, so the cold sweep on the next daemon start re-uploads all sessions encrypted with the new key. Old blobs under the previous prefix are simply ignored — no decryption errors, no manual cleanup required (though you can delete the old prefix from the bucket/dir when convenient).\n\n## Configuration file\n\nInstead of setting environment variables in `config.json`, you can use a plain-text config file at `~/.hydra-acp/archiver.conf` (override with `HYDRA_ACP_ARCHIVER_CONF`). Environment variables always take precedence over file values.\n\n```sh\n# ~/.hydra-acp/archiver.conf\n# All keys are optional — omit any you don't need.\n# Env vars override these values when both are set.\n\nBACKEND=s3\n\n# S3\nS3_BUCKET=my-hydra-archive\nS3_REGION=us-east-1\n# S3_ENDPOINT=https://<accountid>.r2.cloudflarestorage.com\n\n# Encryption\nKEY_PATH=/home/you/.hydra-acp/archiver-key\n\n# Identity\nHOST_ID=alice-macbook\n\n# Google Drive\n# DRIVE_FOLDER=hydra-acp-archive\n\n# Tuning (rarely needed)\n# DEBOUNCE_MS=5000\n# PULL_MS=60000\n# DEBUG=false\n```\n\nRestrict permissions on the file if it contains sensitive paths: `chmod 600 ~/.hydra-acp/archiver.conf`.\n\nThe file is optional — if it doesn't exist the archiver falls back to environment variables only.\n\n## Environment variables\n\n| Variable | Default | Notes |\n| --- | --- | --- |\n| `HYDRA_ACP_ARCHIVER_CONF` | `~/.hydra-acp/archiver.conf` | Path to the config file |\n| `HYDRA_ACP_ARCHIVER_BACKEND` | `google-drive` | `google-drive` \\| `fs` \\| `s3` |\n| `HYDRA_ACP_ARCHIVER_DRIVE_FOLDER` | `hydra-acp-archive` | Drive folder name |\n| `HYDRA_ACP_ARCHIVER_FS_DIR` | `~/.hydra-acp/archive` | Used when backend is `fs` |\n| `HYDRA_ACP_ARCHIVER_S3_BUCKET` | — | Bucket name (required for `s3`) |\n| `HYDRA_ACP_ARCHIVER_S3_REGION` | AWS SDK default | AWS region |\n| `HYDRA_ACP_ARCHIVER_S3_ENDPOINT` | — | Custom endpoint for R2/MinIO/B2 |\n| `HYDRA_ACP_ARCHIVER_PREFIX` | auto (fingerprint or username) | User-level namespace prefix applied by all backends |\n| `HYDRA_ACP_ARCHIVER_HOST_ID` | `os.hostname()` (sanitized) | Host identifier used as a subdirectory under the user prefix |\n| `HYDRA_ACP_ARCHIVER_KEY_PATH` | — | Path to encryption key file; if unset, encryption is off |\n| `HYDRA_ACP_ARCHIVER_CONFIG` | `~/.hydra-acp/archiver.config.js` | Rule file (optional) |\n| `HYDRA_ACP_ARCHIVER_POLL_MS` | `2000` | Session discovery cadence |\n| `HYDRA_ACP_ARCHIVER_DEBOUNCE_MS` | `5000` | Per-session upload debounce window |\n| `HYDRA_ACP_ARCHIVER_PULL_MS` | `60000` | Backend list cadence |\n| `DEBUG` | `false` | Verbose logging |\n\n## Rule (opt-out specific sessions)\n\nBy default the archiver uploads every live session. Drop a JS module at `~/.hydra-acp/archiver.config.js` (or `HYDRA_ACP_ARCHIVER_CONFIG`) to skip some:\n\n```js\n// ~/.hydra-acp/archiver.config.js\nexport default function archive(ev) {\n  // ev.sessionId, ev.lineageId\n  // ev.meta.cwd, ev.meta.agentId, ev.meta.title\n\n  // Don't sync work in throwaway scratch dirs:\n  if (ev.meta.cwd?.startsWith(\"/tmp/\")) {\n    return false;\n  }\n\n  // Don't sync sessions whose title is prefixed with \"(local)\":\n  if (ev.meta.title?.startsWith(\"(local)\")) {\n    return false;\n  }\n\n  return true;\n}\n```\n\nReturn `false` to skip an upload. Any other value (including `undefined`) archives. The rule reloads on SIGHUP, so you don't need to restart the daemon to change it.\n\n## On-disk state\n\n- `~/.hydra-acp/archiver-state.json` — per-lineage cache of last uploaded hash + last seen remote upload, used for self-loop suppression. Safe to delete; archiver will rebuild it.\n- `~/.hydra-acp/archiver-google-credentials.json` — OAuth client JSON you downloaded.\n- `~/.hydra-acp/archiver-google-token.json` — refresh + access token (mode 0600). Re-run `hydra-acp archiver login` to refresh.\n- `~/.hydra-acp/archiver-key` — encryption key (mode 0600), written by `hydra-acp archiver keygen`. Copy this file to every machine in your sync group. Keep it safe — losing it means losing access to encrypted blobs.\n\n## Troubleshooting\n\n- **`Missing HYDRA_ACP_TOKEN env var`** — you ran the archiver directly instead of via the daemon. Run it as a registered extension.\n- **`No Google OAuth token at …`** — run `hydra-acp archiver gdrive login` first.\n- **`OAuth credentials file not found`** — follow the **First-time Google setup** steps to download the client JSON from GCP Console.\n- **Files aren't appearing in Drive** — check `~/.hydra-acp/extensions/hydra-acp-archiver.log` for errors. Common: consent-screen test-user list doesn't include your Google account.\n- **Two machines kept overwriting each other** — that's last-writer-wins working as designed if both are actively editing the same session. Avoid editing the same session on two machines simultaneously; one of them will lose its diff. A future `activeOn` claim-lock will close this gap.\n\n## Backends\n\nCurrent: `google-drive`, `fs`, `s3`. Adding a new one means implementing the `SyncBackend` interface in `src/backend/types.ts` and wiring it into `src/backend/factory.ts`. Encryption is handled by the `EncryptedBackend` wrapper in `src/backend/encrypted.ts` — new backends get it for free.\n","readmeFilename":"README.md"}