{"_id":"@openclaw/fs-safe","_rev":"59-b3a664adefa3db0cd029292b0874092a","name":"@openclaw/fs-safe","dist-tags":{"latest":"0.23.0"},"versions":{"0.1.0":{"name":"@openclaw/fs-safe","version":"0.1.0","license":"MIT","_id":"@openclaw/fs-safe@0.1.0","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://github.com/openclaw/fs-safe#readme","bugs":{"url":"https://github.com/openclaw/fs-safe/issues"},"dist":{"shasum":"a6cefeb1e960fd0221eb45c96cbbf436e7bf7f24","tarball":"https://registry.npmjs.org/@openclaw/fs-safe/-/fs-safe-0.1.0.tgz","fileCount":260,"integrity":"sha512-ByFeXAA+7EXje15eaI3mqee9STFcglTkfdhenZQ2V4OGAkhkHzb2yxe3hInuWXYImG9gDolbccNEnwlsoTayaA==","signatures":[{"sig":"MEQCIEaKpm6baJAtM27YGDpQGJafrj1WjXYRgxEMdhWu2IUlAiBQZBLftLxcCl7EgePAanQFBsg3BKUx5SaThrJw44lhQA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":615833},"type":"module","engines":{"node":">=20.11"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./json":{"types":"./dist/json.d.ts","default":"./dist/json.js"},"./path":{"types":"./dist/path.d.ts","default":"./dist/path.js"},"./root":{"types":"./dist/root.d.ts","default":"./dist/root.js"},"./temp":{"types":"./dist/temp.d.ts","default":"./dist/temp.js"},"./walk":{"types":"./dist/walk.d.ts","default":"./dist/walk.js"},"./store":{"types":"./dist/store.d.ts","default":"./dist/store.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./atomic":{"types":"./dist/atomic.d.ts","default":"./dist/atomic.js"},"./config":{"types":"./dist/config.d.ts","default":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","default":"./dist/errors.js"},"./secret":{"types":"./dist/secret.d.ts","default":"./dist/secret.js"},"./archive":{"types":"./dist/archive.d.ts","default":"./dist/archive.js"},"./advanced":{"types":"./dist/advanced.d.ts","default":"./dist/advanced.js"},"./file-lock":{"types":"./dist/file-lock.d.ts","default":"./dist/file-lock.js"},"./test-hooks":{"types":"./dist/test-hooks.d.ts","default":"./dist/test-hooks.js"},"./permissions":{"types":"./dist/permissions-public.d.ts","default":"./dist/permissions-public.js"},"./secure-file":{"types":"./dist/secure-file.d.ts","default":"./dist/secure-file.js"}},"gitHead":"621d643d379533791ab5108e1cf639fc7d8e2c8c","scripts":{"test":"vitest run","build":"tsc -p tsconfig.json","check":"pnpm build && pnpm test","prepack":"node scripts/prepack-build.mjs","benchmark":"node scripts/benchmark.mjs","docs:site":"node scripts/build-docs-site.mjs","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"steipete","email":"steipete@gmail.com"},"repository":{"url":"git+https://github.com/openclaw/fs-safe.git","type":"git"},"_npmVersion":"11.12.1","description":"Capability-style filesystem roots for Node.js apps that handle untrusted relative paths.","directories":{},"sideEffects":false,"_nodeVersion":"25.9.0","_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.1.4","typescript":"^5.8.3","@types/node":"^22.15.19","@vitest/coverage-v8":"3.2.4"},"optionalDependencies":{"tar":"7.5.13","jszip":"^3.10.1"},"_npmOperationalInternal":{"tmp":"tmp/fs-safe_0.1.0_1778028973059_0.6890056058521941","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@openclaw/fs-safe","version":"0.1.1","license":"MIT","_id":"@openclaw/fs-safe@0.1.1","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://github.com/openclaw/fs-safe#readme","bugs":{"url":"https://github.com/openclaw/fs-safe/issues"},"dist":{"shasum":"6a8ab2a09139ff5f383bc7a249407fb2a8573570","tarball":"https://registry.npmjs.org/@openclaw/fs-safe/-/fs-safe-0.1.1.tgz","fileCount":260,"integrity":"sha512-+50LBpW7nKWzu3wJb4C5X9BQAcAxmj3oNRd/ZqZK+YO1ZdiikOPZ6fy5ta631xsV13+m+Ap5s0Gb3zPSl+0kOQ==","signatures":[{"sig":"MEQCIG+fzqlcrixcZ8TgWby7iBT+HkDG0XbEXaqnu0rNhN1aAiBBbJOaU3WsohTL+Zo3MYlEQNQa5V6LlSCBDhzLJDD0pA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":617911},"type":"module","engines":{"node":">=20.11"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./json":{"types":"./dist/json.d.ts","default":"./dist/json.js"},"./path":{"types":"./dist/path.d.ts","default":"./dist/path.js"},"./root":{"types":"./dist/root.d.ts","default":"./dist/root.js"},"./temp":{"types":"./dist/temp.d.ts","default":"./dist/temp.js"},"./walk":{"types":"./dist/walk.d.ts","default":"./dist/walk.js"},"./store":{"types":"./dist/store.d.ts","default":"./dist/store.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./atomic":{"types":"./dist/atomic.d.ts","default":"./dist/atomic.js"},"./config":{"types":"./dist/config.d.ts","default":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","default":"./dist/errors.js"},"./secret":{"types":"./dist/secret.d.ts","default":"./dist/secret.js"},"./archive":{"types":"./dist/archive.d.ts","default":"./dist/archive.js"},"./advanced":{"types":"./dist/advanced.d.ts","default":"./dist/advanced.js"},"./file-lock":{"types":"./dist/file-lock.d.ts","default":"./dist/file-lock.js"},"./test-hooks":{"types":"./dist/test-hooks.d.ts","default":"./dist/test-hooks.js"},"./permissions":{"types":"./dist/permissions-public.d.ts","default":"./dist/permissions-public.js"},"./secure-file":{"types":"./dist/secure-file.d.ts","default":"./dist/secure-file.js"}},"gitHead":"695710c4790ce3c95432b0d32af6f244b88a4957","scripts":{"test":"vitest run","build":"tsc -p tsconfig.json","check":"pnpm build && pnpm test","prepack":"node scripts/prepack-build.mjs","benchmark":"node scripts/benchmark.mjs","docs:site":"node scripts/build-docs-site.mjs","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"steipete","email":"steipete@gmail.com"},"repository":{"url":"git+https://github.com/openclaw/fs-safe.git","type":"git"},"_npmVersion":"11.12.1","description":"Capability-style filesystem roots for Node.js apps that handle untrusted relative paths.","directories":{},"sideEffects":false,"_nodeVersion":"25.9.0","_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.1.4","typescript":"^5.8.3","@types/node":"^22.15.19","@vitest/coverage-v8":"3.2.4"},"optionalDependencies":{"tar":"7.5.13","jszip":"^3.10.1"},"_npmOperationalInternal":{"tmp":"tmp/fs-safe_0.1.1_1778031019835_0.2674438693699117","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@openclaw/fs-safe","version":"0.1.2","license":"MIT","_id":"@openclaw/fs-safe@0.1.2","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://github.com/openclaw/fs-safe#readme","bugs":{"url":"https://github.com/openclaw/fs-safe/issues"},"dist":{"shasum":"becd7aa00576c4b5b66a496144faf80597335ea6","tarball":"https://registry.npmjs.org/@openclaw/fs-safe/-/fs-safe-0.1.2.tgz","fileCount":256,"integrity":"sha512-4x0FzdEenLzrm+sZjuR/Yo5EUEsnXLMF+rinrY/OSqn9D+/2ibmPdWrvX0HfeddVxNOKa+VVcgPMnEb102nKEg==","signatures":[{"sig":"MEYCIQCvvobdDfvrPATYVmWkYyQ8O4H1QBRI+NQ4IZ+9uraMzgIhANboZsot/aZlwi0+PkBtyUCYGS5dnnIMJSSKbf8AsHpm","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":683149},"type":"module","engines":{"node":">=20.11"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./json":{"types":"./dist/json.d.ts","default":"./dist/json.js"},"./path":{"types":"./dist/path.d.ts","default":"./dist/path.js"},"./root":{"types":"./dist/root.d.ts","default":"./dist/root.js"},"./temp":{"types":"./dist/temp.d.ts","default":"./dist/temp.js"},"./walk":{"types":"./dist/walk.d.ts","default":"./dist/walk.js"},"./store":{"types":"./dist/store.d.ts","default":"./dist/store.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./atomic":{"types":"./dist/atomic.d.ts","default":"./dist/atomic.js"},"./config":{"types":"./dist/config.d.ts","default":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","default":"./dist/errors.js"},"./secret":{"types":"./dist/secret.d.ts","default":"./dist/secret.js"},"./archive":{"types":"./dist/archive.d.ts","default":"./dist/archive.js"},"./advanced":{"types":"./dist/advanced.d.ts","default":"./dist/advanced.js"},"./file-lock":{"types":"./dist/file-lock.d.ts","default":"./dist/file-lock.js"},"./test-hooks":{"types":"./dist/test-hooks.d.ts","default":"./dist/test-hooks.js"},"./permissions":{"types":"./dist/permissions-public.d.ts","default":"./dist/permissions-public.js"},"./secure-file":{"types":"./dist/secure-file.d.ts","default":"./dist/secure-file.js"}},"gitHead":"cbe59d156a0d9ddc0b7f4b237fa02e42806654a0","scripts":{"test":"vitest run","build":"tsc -p tsconfig.json","check":"pnpm lint:file-size && pnpm build && pnpm test","prepack":"node scripts/prepack-build.mjs","benchmark":"node scripts/benchmark.mjs","docs:site":"node scripts/build-docs-site.mjs","test:coverage":"vitest run --coverage","test:security":"vitest run test/fs-safe.test.ts test/openclaw-read-bypass-parity.test.ts test/openclaw-write-bypass-parity.test.ts test/additional-bypass-parity.test.ts test/adversarial-boundary-payloads.test.ts","lint:file-size":"node scripts/check-file-size.mjs"},"_npmUser":{"name":"steipete","email":"steipete@gmail.com"},"repository":{"url":"git+https://github.com/openclaw/fs-safe.git","type":"git"},"_npmVersion":"11.12.1","description":"Capability-style filesystem roots for Node.js apps that handle untrusted relative paths.","directories":{},"sideEffects":false,"_nodeVersion":"25.9.0","_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.1.4","typescript":"^5.8.3","@types/node":"^22.15.19","@vitest/coverage-v8":"3.2.4"},"optionalDependencies":{"tar":"7.5.13","jszip":"^3.10.1"},"_npmOperationalInternal":{"tmp":"tmp/fs-safe_0.1.2_1778039745575_0.23646923266861042","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@openclaw/fs-safe","version":"0.2.0","license":"MIT","_id":"@openclaw/fs-safe@0.2.0","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://github.com/openclaw/fs-safe#readme","bugs":{"url":"https://github.com/openclaw/fs-safe/issues"},"dist":{"shasum":"309c2378a05a6c8a4f80d99edd52ead92988bd8f","tarball":"https://registry.npmjs.org/@openclaw/fs-safe/-/fs-safe-0.2.0.tgz","fileCount":290,"integrity":"sha512-lFR7d0XOs3vqfhTRAJ7xGRcsW2jZNEKBBKt9dGuiE4jX0fvfN8mbFyWTJ9YUsgjP4DReAwErevphUKTKLZ+UYg==","signatures":[{"sig":"MEUCIQDshiKCENdj1nn9dELQCPyHqBDckAUFwEeZ/eNnuqe1hAIgbTm0jomBq3rdEjaB6RrcI4FSawZy7xMRTrkUMcERNAY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":782352},"type":"module","engines":{"node":">=20.11"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./json":{"types":"./dist/json.d.ts","default":"./dist/json.js"},"./path":{"types":"./dist/path.d.ts","default":"./dist/path.js"},"./root":{"types":"./dist/root.d.ts","default":"./dist/root.js"},"./temp":{"types":"./dist/temp.d.ts","default":"./dist/temp.js"},"./walk":{"types":"./dist/walk.d.ts","default":"./dist/walk.js"},"./store":{"types":"./dist/store.d.ts","default":"./dist/store.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./atomic":{"types":"./dist/atomic.d.ts","default":"./dist/atomic.js"},"./config":{"types":"./dist/config.d.ts","default":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","default":"./dist/errors.js"},"./output":{"types":"./dist/output.d.ts","default":"./dist/output.js"},"./secret":{"types":"./dist/secret.d.ts","default":"./dist/secret.js"},"./archive":{"types":"./dist/archive.d.ts","default":"./dist/archive.js"},"./advanced":{"types":"./dist/advanced.d.ts","default":"./dist/advanced.js"},"./file-lock":{"types":"./dist/file-lock.d.ts","default":"./dist/file-lock.js"},"./test-hooks":{"types":"./dist/test-hooks.d.ts","default":"./dist/test-hooks.js"},"./permissions":{"types":"./dist/permissions-public.d.ts","default":"./dist/permissions-public.js"},"./secure-file":{"types":"./dist/secure-file.d.ts","default":"./dist/secure-file.js"}},"gitHead":"c7ccb99d3058f2acf2ad2758ad2470c7e113a53c","scripts":{"test":"vitest run","build":"tsc -p tsconfig.json","check":"pnpm lint:file-size && pnpm lint:fs-boundary && pnpm build && pnpm test","prepack":"node scripts/prepack-build.mjs","benchmark":"node scripts/benchmark.mjs","docs:site":"node scripts/build-docs-site.mjs","test:coverage":"vitest run --coverage","test:security":"vitest run test/fs-safe.test.ts test/openclaw-read-bypass-parity.test.ts test/openclaw-write-bypass-parity.test.ts test/additional-bypass-parity.test.ts test/adversarial-boundary-payloads.test.ts","lint:file-size":"node scripts/check-file-size.mjs","lint:fs-boundary":"node scripts/check-fs-boundary-primitives.mjs"},"_npmUser":{"name":"steipete","email":"steipete@gmail.com"},"repository":{"url":"git+https://github.com/openclaw/fs-safe.git","type":"git"},"_npmVersion":"11.12.1","description":"Capability-style filesystem roots for Node.js apps that handle untrusted relative paths.","directories":{},"sideEffects":false,"_nodeVersion":"25.9.0","_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.1.4","typescript":"^5.8.3","@types/node":"^22.15.19","@vitest/coverage-v8":"3.2.4"},"optionalDependencies":{"tar":"7.5.13","jszip":"^3.10.1"},"_npmOperationalInternal":{"tmp":"tmp/fs-safe_0.2.0_1778148461988_0.5725338173119163","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@openclaw/fs-safe","version":"0.2.1","license":"MIT","_id":"@openclaw/fs-safe@0.2.1","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://github.com/openclaw/fs-safe#readme","bugs":{"url":"https://github.com/openclaw/fs-safe/issues"},"dist":{"shasum":"386a0e36cf1b62af0dba7d711da5cb155999475d","tarball":"https://registry.npmjs.org/@openclaw/fs-safe/-/fs-safe-0.2.1.tgz","fileCount":290,"integrity":"sha512-xFLJZHRtnxI9V5RfrPArzPXZRs5bVAbhV0x96qYKFmvyqxRwAyCdjXYLHpLHqU3uzwOGzRQFP8anAVNcfI7umA==","signatures":[{"sig":"MEUCIFuQesYqOA8r8qo3qT22xgYKKV/D+29qg5ej5Rl6TTKjAiEArDU8sP2JY+NRAkB6u4/KuwekDI6BJzH4jzlv6lrUorg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":783794},"type":"module","engines":{"node":">=20.11"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./json":{"types":"./dist/json.d.ts","default":"./dist/json.js"},"./path":{"types":"./dist/path.d.ts","default":"./dist/path.js"},"./root":{"types":"./dist/root.d.ts","default":"./dist/root.js"},"./temp":{"types":"./dist/temp.d.ts","default":"./dist/temp.js"},"./walk":{"types":"./dist/walk.d.ts","default":"./dist/walk.js"},"./store":{"types":"./dist/store.d.ts","default":"./dist/store.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./atomic":{"types":"./dist/atomic.d.ts","default":"./dist/atomic.js"},"./config":{"types":"./dist/config.d.ts","default":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","default":"./dist/errors.js"},"./output":{"types":"./dist/output.d.ts","default":"./dist/output.js"},"./secret":{"types":"./dist/secret.d.ts","default":"./dist/secret.js"},"./archive":{"types":"./dist/archive.d.ts","default":"./dist/archive.js"},"./advanced":{"types":"./dist/advanced.d.ts","default":"./dist/advanced.js"},"./file-lock":{"types":"./dist/file-lock.d.ts","default":"./dist/file-lock.js"},"./test-hooks":{"types":"./dist/test-hooks.d.ts","default":"./dist/test-hooks.js"},"./permissions":{"types":"./dist/permissions-public.d.ts","default":"./dist/permissions-public.js"},"./secure-file":{"types":"./dist/secure-file.d.ts","default":"./dist/secure-file.js"}},"gitHead":"d3f37bc700e8fd31473afee48eb96f9e6377ffad","scripts":{"test":"vitest run","build":"tsc -p tsconfig.json","check":"pnpm lint:file-size && pnpm lint:fs-boundary && pnpm build && pnpm test","prepack":"node scripts/prepack-build.mjs","benchmark":"node scripts/benchmark.mjs","docs:site":"node scripts/build-docs-site.mjs","test:coverage":"vitest run --coverage","test:security":"vitest run test/fs-safe.test.ts test/openclaw-read-bypass-parity.test.ts test/openclaw-write-bypass-parity.test.ts test/additional-bypass-parity.test.ts test/adversarial-boundary-payloads.test.ts","lint:file-size":"node scripts/check-file-size.mjs","lint:fs-boundary":"node scripts/check-fs-boundary-primitives.mjs"},"_npmUser":{"name":"steipete","email":"steipete@gmail.com"},"repository":{"url":"git+https://github.com/openclaw/fs-safe.git","type":"git"},"_npmVersion":"11.12.1","description":"Capability-style filesystem roots for Node.js apps that handle untrusted relative paths.","directories":{},"sideEffects":false,"_nodeVersion":"25.9.0","_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.1.4","typescript":"^5.8.3","@types/node":"^22.15.19","@vitest/coverage-v8":"3.2.4"},"optionalDependencies":{"tar":"7.5.13","jszip":"^3.10.1"},"_npmOperationalInternal":{"tmp":"tmp/fs-safe_0.2.1_1778239613195_0.7989608130970478","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@openclaw/fs-safe","version":"0.2.2","license":"MIT","_id":"@openclaw/fs-safe@0.2.2","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://github.com/openclaw/fs-safe#readme","bugs":{"url":"https://github.com/openclaw/fs-safe/issues"},"dist":{"shasum":"bf89b0ccf66f7cf925f09f73c58f4b589de93afa","tarball":"https://registry.npmjs.org/@openclaw/fs-safe/-/fs-safe-0.2.2.tgz","fileCount":341,"integrity":"sha512-rQIqgVjuI8MONThAuOsGp1x1nK5UUvBYI8BW5OZtZw/0d8MbSfl27DNdkxzNF2FwHb8yKG8VBnmTlPHI269KTw==","signatures":[{"sig":"MEUCIAuwTvHCvbi1l5EZXcZjVVKyjFYxNPdiCdwvzbX5m/SOAiEAy9cxFE4p6HRlZPoK4Fg9KOa9F3koz1aku5mcLVSPb+k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":926432},"type":"module","engines":{"node":">=20.11"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./json":{"types":"./dist/json.d.ts","default":"./dist/json.js"},"./path":{"types":"./dist/path.d.ts","default":"./dist/path.js"},"./root":{"types":"./dist/root.d.ts","default":"./dist/root.js"},"./temp":{"types":"./dist/temp.d.ts","default":"./dist/temp.js"},"./walk":{"types":"./dist/walk.d.ts","default":"./dist/walk.js"},"./store":{"types":"./dist/store.d.ts","default":"./dist/store.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./atomic":{"types":"./dist/atomic.d.ts","default":"./dist/atomic.js"},"./config":{"types":"./dist/config.d.ts","default":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","default":"./dist/errors.js"},"./output":{"types":"./dist/output.d.ts","default":"./dist/output.js"},"./secret":{"types":"./dist/secret.d.ts","default":"./dist/secret.js"},"./archive":{"types":"./dist/archive.d.ts","default":"./dist/archive.js"},"./advanced":{"types":"./dist/advanced.d.ts","default":"./dist/advanced.js"},"./file-lock":{"types":"./dist/file-lock.d.ts","default":"./dist/file-lock.js"},"./test-hooks":{"types":"./dist/test-hooks.d.ts","default":"./dist/test-hooks.js"},"./permissions":{"types":"./dist/permissions-public.d.ts","default":"./dist/permissions-public.js"},"./secure-file":{"types":"./dist/secure-file.d.ts","default":"./dist/secure-file.js"}},"gitHead":"530e2f25864e2278ab8dbab25f262f2f61aab775","scripts":{"test":"vitest run","build":"tsc -p tsconfig.json","check":"pnpm lint:file-size && pnpm lint:fs-boundary && pnpm build && pnpm test","prepack":"node scripts/prepack-build.mjs","benchmark":"node scripts/benchmark.mjs","docs:site":"node scripts/build-docs-site.mjs","test:coverage":"vitest run --coverage","test:security":"vitest run test/fs-safe.test.ts test/openclaw-read-bypass-parity.test.ts test/openclaw-write-bypass-parity.test.ts test/additional-bypass-parity.test.ts test/adversarial-boundary-payloads.test.ts","lint:file-size":"node scripts/check-file-size.mjs","lint:fs-boundary":"node scripts/check-fs-boundary-primitives.mjs"},"_npmUser":{"name":"steipete","email":"steipete@gmail.com"},"repository":{"url":"git+https://github.com/openclaw/fs-safe.git","type":"git"},"_npmVersion":"11.11.0","description":"Capability-style filesystem roots for Node.js apps that handle untrusted relative paths.","directories":{},"sideEffects":false,"_nodeVersion":"25.8.1","_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.1.4","typescript":"^5.8.3","@types/node":"^22.15.19","@vitest/coverage-v8":"3.2.4"},"optionalDependencies":{"tar":"7.5.13","jszip":"^3.10.1"},"_npmOperationalInternal":{"tmp":"tmp/fs-safe_0.2.2_1778485566574_0.5236190903931561","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@openclaw/fs-safe","version":"0.2.3","license":"MIT","_id":"@openclaw/fs-safe@0.2.3","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://github.com/openclaw/fs-safe#readme","bugs":{"url":"https://github.com/openclaw/fs-safe/issues"},"dist":{"shasum":"da23cab5b67bc2033cb52cb7d4432f5dd0175fc2","tarball":"https://registry.npmjs.org/@openclaw/fs-safe/-/fs-safe-0.2.3.tgz","fileCount":290,"integrity":"sha512-O8AJ/ZiLbBQvpxYyXrZuyIFFUG2N2Oz6uhle5Gn1gVGkgT+Qmx7O1A9tbE2pTZs2Cyk75A31H0F8w34CL2X6gg==","signatures":[{"sig":"MEQCIHz0+MpwnOzGDRRivk6iGzvjPtdc85tN0IYN7gLo5P0uAiBlTaT3jPzGUnJ29VzBQ8hjnYBS4S9JIoNG5Em0a5tBoA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":784443},"type":"module","engines":{"node":">=20.11"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./json":{"types":"./dist/json.d.ts","default":"./dist/json.js"},"./path":{"types":"./dist/path.d.ts","default":"./dist/path.js"},"./root":{"types":"./dist/root.d.ts","default":"./dist/root.js"},"./temp":{"types":"./dist/temp.d.ts","default":"./dist/temp.js"},"./walk":{"types":"./dist/walk.d.ts","default":"./dist/walk.js"},"./store":{"types":"./dist/store.d.ts","default":"./dist/store.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./atomic":{"types":"./dist/atomic.d.ts","default":"./dist/atomic.js"},"./config":{"types":"./dist/config.d.ts","default":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","default":"./dist/errors.js"},"./output":{"types":"./dist/output.d.ts","default":"./dist/output.js"},"./secret":{"types":"./dist/secret.d.ts","default":"./dist/secret.js"},"./archive":{"types":"./dist/archive.d.ts","default":"./dist/archive.js"},"./advanced":{"types":"./dist/advanced.d.ts","default":"./dist/advanced.js"},"./file-lock":{"types":"./dist/file-lock.d.ts","default":"./dist/file-lock.js"},"./test-hooks":{"types":"./dist/test-hooks.d.ts","default":"./dist/test-hooks.js"},"./permissions":{"types":"./dist/permissions-public.d.ts","default":"./dist/permissions-public.js"},"./secure-file":{"types":"./dist/secure-file.d.ts","default":"./dist/secure-file.js"}},"gitHead":"4c9720f575c8a90f07ce4cc3dac8887762101739","scripts":{"test":"vitest run","build":"tsc -p tsconfig.json","check":"pnpm lint:file-size && pnpm lint:fs-boundary && pnpm build && pnpm test","prepack":"node scripts/prepack-build.mjs","benchmark":"node scripts/benchmark.mjs","docs:site":"node scripts/build-docs-site.mjs","test:coverage":"vitest run --coverage","test:security":"vitest run test/fs-safe.test.ts test/read-boundary-bypass.test.ts test/write-boundary-bypass.test.ts test/additional-boundary-bypass.test.ts test/adversarial-boundary-payloads.test.ts","lint:file-size":"node scripts/check-file-size.mjs","lint:fs-boundary":"node scripts/check-fs-boundary-primitives.mjs"},"_npmUser":{"name":"steipete","email":"steipete@gmail.com"},"repository":{"url":"git+https://github.com/openclaw/fs-safe.git","type":"git"},"_npmVersion":"11.11.0","description":"Capability-style filesystem roots for Node.js apps that handle untrusted relative paths.","directories":{},"sideEffects":false,"_nodeVersion":"25.8.1","_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.1.4","typescript":"^5.8.3","@types/node":"^22.15.19","@vitest/coverage-v8":"3.2.4"},"optionalDependencies":{"tar":"7.5.13","jszip":"^3.10.1"},"_npmOperationalInternal":{"tmp":"tmp/fs-safe_0.2.3_1778739972029_0.5175275569655868","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"@openclaw/fs-safe","version":"0.2.4","license":"MIT","_id":"@openclaw/fs-safe@0.2.4","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://github.com/openclaw/fs-safe#readme","bugs":{"url":"https://github.com/openclaw/fs-safe/issues"},"dist":{"shasum":"bfaec3db87fbc7492093e8e711527728049330e5","tarball":"https://registry.npmjs.org/@openclaw/fs-safe/-/fs-safe-0.2.4.tgz","fileCount":341,"integrity":"sha512-Fo3WTQhxu0asD/rZqIKBqhX6fuZfjyHxSW5yTKfcRx+D9BRAcz0AGoVh+3ur/4XRvZkvsh3Ud8XTw006yRYLgg==","signatures":[{"sig":"MEUCIQDjfEFp9VbDZwSn9sgkF9o6y9OwvJMKpVjvUm+G0WssgwIgFUCqC5EpAFTvrby7fiTt/S3zM5yZM0baBV9PDe782AA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":929942},"type":"module","engines":{"node":">=20.11"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./json":{"types":"./dist/json.d.ts","default":"./dist/json.js"},"./path":{"types":"./dist/path.d.ts","default":"./dist/path.js"},"./root":{"types":"./dist/root.d.ts","default":"./dist/root.js"},"./temp":{"types":"./dist/temp.d.ts","default":"./dist/temp.js"},"./walk":{"types":"./dist/walk.d.ts","default":"./dist/walk.js"},"./store":{"types":"./dist/store.d.ts","default":"./dist/store.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./atomic":{"types":"./dist/atomic.d.ts","default":"./dist/atomic.js"},"./config":{"types":"./dist/config.d.ts","default":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","default":"./dist/errors.js"},"./output":{"types":"./dist/output.d.ts","default":"./dist/output.js"},"./secret":{"types":"./dist/secret.d.ts","default":"./dist/secret.js"},"./archive":{"types":"./dist/archive.d.ts","default":"./dist/archive.js"},"./advanced":{"types":"./dist/advanced.d.ts","default":"./dist/advanced.js"},"./file-lock":{"types":"./dist/file-lock.d.ts","default":"./dist/file-lock.js"},"./test-hooks":{"types":"./dist/test-hooks.d.ts","default":"./dist/test-hooks.js"},"./permissions":{"types":"./dist/permissions-public.d.ts","default":"./dist/permissions-public.js"},"./secure-file":{"types":"./dist/secure-file.d.ts","default":"./dist/secure-file.js"}},"gitHead":"a51f90ccf40f900f215a6a653276316332509c58","scripts":{"test":"vitest run","build":"tsc -p tsconfig.json","check":"pnpm lint:file-size && pnpm lint:fs-boundary && pnpm build && pnpm test","prepack":"node scripts/prepack-build.mjs","benchmark":"node scripts/benchmark.mjs","docs:site":"node scripts/build-docs-site.mjs","test:coverage":"vitest run --coverage","test:security":"vitest run test/fs-safe.test.ts test/read-boundary-bypass.test.ts test/write-boundary-bypass.test.ts test/additional-boundary-bypass.test.ts test/adversarial-boundary-payloads.test.ts","lint:file-size":"node scripts/check-file-size.mjs","lint:fs-boundary":"node scripts/check-fs-boundary-primitives.mjs"},"_npmUser":{"name":"steipete","email":"steipete@gmail.com"},"repository":{"url":"git+https://github.com/openclaw/fs-safe.git","type":"git"},"_npmVersion":"11.12.1","description":"Capability-style filesystem roots for Node.js apps that handle untrusted relative paths.","directories":{},"sideEffects":false,"_nodeVersion":"26.0.0","_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.1.4","typescript":"^5.8.3","@types/node":"^22.15.19","@vitest/coverage-v8":"3.2.4"},"optionalDependencies":{"tar":"7.5.13","jszip":"^3.10.1"},"_npmOperationalInternal":{"tmp":"tmp/fs-safe_0.2.4_1778741647240_0.9228151905111226","host":"s3://npm-registry-packages-npm-production"}},"0.2.5":{"name":"@openclaw/fs-safe","version":"0.2.5","license":"MIT","_id":"@openclaw/fs-safe@0.2.5","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://github.com/openclaw/fs-safe#readme","bugs":{"url":"https://github.com/openclaw/fs-safe/issues"},"dist":{"shasum":"7d84911135e2788200d2452472b9c080a53707b0","tarball":"https://registry.npmjs.org/@openclaw/fs-safe/-/fs-safe-0.2.5.tgz","fileCount":287,"integrity":"sha512-j39mOrNmJGRoMCjFWM+kB29X1rDKQnty74faRa/1QEb2Ew/OUAGo7SY2ci5xSGfZ60/koQsido6NmV5BuqiZBQ==","signatures":[{"sig":"MEYCIQCil4HtKKpb/uG8CU6AnPcGASRET17wtS1jsSDk3t3L2gIhAMlg4LLmO7DqdxL0uL8cy9ogvzMzfbJqbBGUnhqHBwRu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":789083},"type":"module","engines":{"node":">=20.11"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./json":{"types":"./dist/json.d.ts","default":"./dist/json.js"},"./path":{"types":"./dist/path.d.ts","default":"./dist/path.js"},"./root":{"types":"./dist/root.d.ts","default":"./dist/root.js"},"./temp":{"types":"./dist/temp.d.ts","default":"./dist/temp.js"},"./walk":{"types":"./dist/walk.d.ts","default":"./dist/walk.js"},"./store":{"types":"./dist/store.d.ts","default":"./dist/store.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./atomic":{"types":"./dist/atomic.d.ts","default":"./dist/atomic.js"},"./config":{"types":"./dist/config.d.ts","default":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","default":"./dist/errors.js"},"./output":{"types":"./dist/output.d.ts","default":"./dist/output.js"},"./secret":{"types":"./dist/secret.d.ts","default":"./dist/secret.js"},"./archive":{"types":"./dist/archive.d.ts","default":"./dist/archive.js"},"./advanced":{"types":"./dist/advanced.d.ts","default":"./dist/advanced.js"},"./file-lock":{"types":"./dist/file-lock.d.ts","default":"./dist/file-lock.js"},"./test-hooks":{"types":"./dist/test-hooks.d.ts","default":"./dist/test-hooks.js"},"./permissions":{"types":"./dist/permissions-public.d.ts","default":"./dist/permissions-public.js"},"./secure-file":{"types":"./dist/secure-file.d.ts","default":"./dist/secure-file.js"}},"gitHead":"d6628de98648c68157d8e578d399492607e70b41","scripts":{"test":"vitest run","build":"node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\" && tsc -p tsconfig.json","check":"pnpm lint:file-size && pnpm lint:fs-boundary && pnpm build && pnpm test","prepack":"node scripts/prepack-build.mjs","benchmark":"node scripts/benchmark.mjs","docs:site":"node scripts/build-docs-site.mjs","test:coverage":"vitest run --coverage","test:security":"vitest run test/fs-safe.test.ts test/read-boundary-bypass.test.ts test/write-boundary-bypass.test.ts test/additional-boundary-bypass.test.ts test/adversarial-boundary-payloads.test.ts","lint:file-size":"node scripts/check-file-size.mjs","lint:fs-boundary":"node scripts/check-fs-boundary-primitives.mjs"},"_npmUser":{"name":"steipete","email":"steipete@gmail.com"},"repository":{"url":"git+https://github.com/openclaw/fs-safe.git","type":"git"},"_npmVersion":"11.11.0","description":"Capability-style filesystem roots for Node.js apps that handle untrusted relative paths.","directories":{},"sideEffects":false,"_nodeVersion":"25.8.1","_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.6","typescript":"^5.8.3","@types/node":"^22.15.19","@vitest/coverage-v8":"4.1.6"},"optionalDependencies":{"tar":"7.5.13","jszip":"^3.10.1"},"_npmOperationalInternal":{"tmp":"tmp/fs-safe_0.2.5_1778967093136_0.8191503140966354","host":"s3://npm-registry-packages-npm-production"}},"0.2.6":{"name":"@openclaw/fs-safe","version":"0.2.6","license":"MIT","_id":"@openclaw/fs-safe@0.2.6","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://github.com/openclaw/fs-safe#readme","bugs":{"url":"https://github.com/openclaw/fs-safe/issues"},"dist":{"shasum":"9e23b3203d05a0713fcc6b0eb97fe3f32eff32bf","tarball":"https://registry.npmjs.org/@openclaw/fs-safe/-/fs-safe-0.2.6.tgz","fileCount":287,"integrity":"sha512-9RG/tD9yJF5UkoXiXgvd+IWXFeTWQmNJWB20h/lbbDJiV+6C/pgjcLDMRq9vntSNNEJhaj6Hrqs2W8iiIbAtOA==","signatures":[{"sig":"MEUCIQD4xWEMPC8aOQyCLeJiReIPwDK7DLEXJWFg0QUl1uZOzAIgXD4W2PFyCWcwq0UY7UL/93VDWu2RxPFDf138P4mKJ2M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":794263},"type":"module","engines":{"node":">=20.11"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./json":{"types":"./dist/json.d.ts","default":"./dist/json.js"},"./path":{"types":"./dist/path.d.ts","default":"./dist/path.js"},"./root":{"types":"./dist/root.d.ts","default":"./dist/root.js"},"./temp":{"types":"./dist/temp.d.ts","default":"./dist/temp.js"},"./walk":{"types":"./dist/walk.d.ts","default":"./dist/walk.js"},"./store":{"types":"./dist/store.d.ts","default":"./dist/store.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./atomic":{"types":"./dist/atomic.d.ts","default":"./dist/atomic.js"},"./config":{"types":"./dist/config.d.ts","default":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","default":"./dist/errors.js"},"./output":{"types":"./dist/output.d.ts","default":"./dist/output.js"},"./secret":{"types":"./dist/secret.d.ts","default":"./dist/secret.js"},"./archive":{"types":"./dist/archive.d.ts","default":"./dist/archive.js"},"./advanced":{"types":"./dist/advanced.d.ts","default":"./dist/advanced.js"},"./file-lock":{"types":"./dist/file-lock.d.ts","default":"./dist/file-lock.js"},"./test-hooks":{"types":"./dist/test-hooks.d.ts","default":"./dist/test-hooks.js"},"./permissions":{"types":"./dist/permissions-public.d.ts","default":"./dist/permissions-public.js"},"./secure-file":{"types":"./dist/secure-file.d.ts","default":"./dist/secure-file.js"}},"gitHead":"dc409b7841d542f881c9de53ee46f5638036ce9c","scripts":{"test":"vitest run","build":"node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\" && tsc -p tsconfig.json","check":"pnpm lint:file-size && pnpm lint:fs-boundary && pnpm build && pnpm test","prepack":"node scripts/prepack-build.mjs","benchmark":"node scripts/benchmark.mjs","docs:site":"node scripts/build-docs-site.mjs","test:coverage":"vitest run --coverage","test:security":"vitest run test/fs-safe.test.ts test/read-boundary-bypass.test.ts test/write-boundary-bypass.test.ts test/additional-boundary-bypass.test.ts test/adversarial-boundary-payloads.test.ts","lint:file-size":"node scripts/check-file-size.mjs","lint:fs-boundary":"node scripts/check-fs-boundary-primitives.mjs"},"_npmUser":{"name":"steipete","email":"steipete@gmail.com"},"repository":{"url":"git+https://github.com/openclaw/fs-safe.git","type":"git"},"_npmVersion":"11.11.0","description":"Capability-style filesystem roots for Node.js apps that handle untrusted relative paths.","directories":{},"sideEffects":false,"_nodeVersion":"25.8.1","_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.6","typescript":"^5.8.3","@types/node":"^22.15.19","@vitest/coverage-v8":"4.1.6"},"optionalDependencies":{"tar":"7.5.13","jszip":"^3.10.1"},"_npmOperationalInternal":{"tmp":"tmp/fs-safe_0.2.6_1779000289607_0.11723465509276942","host":"s3://npm-registry-packages-npm-production"}},"0.2.7":{"name":"@openclaw/fs-safe","version":"0.2.7","license":"MIT","_id":"@openclaw/fs-safe@0.2.7","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://github.com/openclaw/fs-safe#readme","bugs":{"url":"https://github.com/openclaw/fs-safe/issues"},"dist":{"shasum":"fb9d3d3d4659e6bc2ca535fc05699f6a1bad5f5e","tarball":"https://registry.npmjs.org/@openclaw/fs-safe/-/fs-safe-0.2.7.tgz","fileCount":293,"integrity":"sha512-l/Yj3K2ChR/gI+bZo1wIe7rjKyTFwGOAw120cTCMRT8LZbVhJhTbiZLGIRBMv0Gc9GQjYE8EjPBza3RdrSSbyQ==","signatures":[{"sig":"MEUCIEAcHCnL5LWiyxq8fWotBQzGP6JdxjpfgzLsVJqH1RE8AiEAtSG4/v4XdlFkFldxHlkE3rcNk9zTLfJrtGelz4NqTRg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":806370},"type":"module","engines":{"node":">=20.11"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./json":{"types":"./dist/json.d.ts","default":"./dist/json.js"},"./path":{"types":"./dist/path.d.ts","default":"./dist/path.js"},"./root":{"types":"./dist/root.d.ts","default":"./dist/root.js"},"./temp":{"types":"./dist/temp.d.ts","default":"./dist/temp.js"},"./walk":{"types":"./dist/walk.d.ts","default":"./dist/walk.js"},"./store":{"types":"./dist/store.d.ts","default":"./dist/store.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./atomic":{"types":"./dist/atomic.d.ts","default":"./dist/atomic.js"},"./config":{"types":"./dist/config.d.ts","default":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","default":"./dist/errors.js"},"./output":{"types":"./dist/output.d.ts","default":"./dist/output.js"},"./secret":{"types":"./dist/secret.d.ts","default":"./dist/secret.js"},"./archive":{"types":"./dist/archive.d.ts","default":"./dist/archive.js"},"./advanced":{"types":"./dist/advanced.d.ts","default":"./dist/advanced.js"},"./file-lock":{"types":"./dist/file-lock.d.ts","default":"./dist/file-lock.js"},"./test-hooks":{"types":"./dist/test-hooks.d.ts","default":"./dist/test-hooks.js"},"./permissions":{"types":"./dist/permissions-public.d.ts","default":"./dist/permissions-public.js"},"./secure-file":{"types":"./dist/secure-file.d.ts","default":"./dist/secure-file.js"}},"gitHead":"d649786af91d3385f068cadce0b2b59bbcd4ed0b","scripts":{"test":"vitest run","build":"node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\" && tsc -p tsconfig.json","check":"pnpm lint:file-size && pnpm lint:fs-boundary && pnpm build && pnpm test","prepack":"node scripts/prepack-build.mjs","benchmark":"node scripts/benchmark.mjs","docs:site":"node scripts/build-docs-site.mjs","test:coverage":"vitest run --coverage","test:security":"vitest run test/fs-safe.test.ts test/read-boundary-bypass.test.ts test/write-boundary-bypass.test.ts test/additional-boundary-bypass.test.ts test/adversarial-boundary-payloads.test.ts","lint:file-size":"node scripts/check-file-size.mjs","lint:fs-boundary":"node scripts/check-fs-boundary-primitives.mjs"},"_npmUser":{"name":"steipete","email":"steipete@gmail.com"},"repository":{"url":"git+https://github.com/openclaw/fs-safe.git","type":"git"},"_npmVersion":"11.14.1","description":"Capability-style filesystem roots for Node.js apps that handle untrusted relative paths.","directories":{},"sideEffects":false,"_nodeVersion":"26.0.0","_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.6","typescript":"^5.8.3","@types/node":"^22.15.19","@vitest/coverage-v8":"4.1.6"},"optionalDependencies":{"tar":"7.5.13","jszip":"^3.10.1"},"_npmOperationalInternal":{"tmp":"tmp/fs-safe_0.2.7_1779300963938_0.846633694025009","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@openclaw/fs-safe","version":"0.3.0","license":"MIT","_id":"@openclaw/fs-safe@0.3.0","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://github.com/openclaw/fs-safe#readme","bugs":{"url":"https://github.com/openclaw/fs-safe/issues"},"dist":{"shasum":"3a6e5c019803c0a4cf2b72d95e1d8d059b8fd043","tarball":"https://registry.npmjs.org/@openclaw/fs-safe/-/fs-safe-0.3.0.tgz","fileCount":302,"integrity":"sha512-uIBE441CIt1kIURoP9qRGKZ8LkGyfD9ZzeESjwAd29ZPWtghws/5GR3Pjb67jKdcJHP1I6roNXcvnhzAU7lHlA==","signatures":[{"sig":"MEUCIQCzqnKV2aHfICfyVq7EFwfyUbvy81+8G5z5k2XQpSFkSwIgV/AyZA5Mv9zkAOBgpwSlS9U9tkS6J3D9zV2v7nYMTtQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":823053},"type":"module","engines":{"node":">=20.11"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./json":{"types":"./dist/json.d.ts","default":"./dist/json.js"},"./path":{"types":"./dist/path.d.ts","default":"./dist/path.js"},"./root":{"types":"./dist/root.d.ts","default":"./dist/root.js"},"./temp":{"types":"./dist/temp.d.ts","default":"./dist/temp.js"},"./walk":{"types":"./dist/walk.d.ts","default":"./dist/walk.js"},"./store":{"types":"./dist/store.d.ts","default":"./dist/store.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./atomic":{"types":"./dist/atomic.d.ts","default":"./dist/atomic.js"},"./config":{"types":"./dist/config.d.ts","default":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","default":"./dist/errors.js"},"./output":{"types":"./dist/output.d.ts","default":"./dist/output.js"},"./secret":{"types":"./dist/secret.d.ts","default":"./dist/secret.js"},"./archive":{"types":"./dist/archive.d.ts","default":"./dist/archive.js"},"./advanced":{"types":"./dist/advanced.d.ts","default":"./dist/advanced.js"},"./file-lock":{"types":"./dist/file-lock.d.ts","default":"./dist/file-lock.js"},"./test-hooks":{"types":"./dist/test-hooks.d.ts","default":"./dist/test-hooks.js"},"./permissions":{"types":"./dist/permissions-public.d.ts","default":"./dist/permissions-public.js"},"./secure-file":{"types":"./dist/secure-file.d.ts","default":"./dist/secure-file.js"}},"gitHead":"cb91a5e42b301b330218c7658da56f1b0a826003","scripts":{"test":"vitest run","build":"node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\" && tsc -p tsconfig.json","check":"pnpm lint:file-size && pnpm lint:fs-boundary && pnpm build && pnpm test","prepack":"node scripts/prepack-build.mjs","benchmark":"node scripts/benchmark.mjs","docs:site":"node scripts/build-docs-site.mjs","test:coverage":"vitest run --coverage","test:security":"vitest run test/fs-safe.test.ts test/read-boundary-bypass.test.ts test/write-boundary-bypass.test.ts test/additional-boundary-bypass.test.ts test/adversarial-boundary-payloads.test.ts","lint:file-size":"node scripts/check-file-size.mjs","lint:fs-boundary":"node scripts/check-fs-boundary-primitives.mjs"},"_npmUser":{"name":"steipete","email":"steipete@gmail.com"},"repository":{"url":"git+https://github.com/openclaw/fs-safe.git","type":"git"},"_npmVersion":"11.11.0","description":"Capability-style filesystem roots for Node.js apps that handle untrusted relative paths.","directories":{},"sideEffects":false,"_nodeVersion":"25.8.1","_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.6","typescript":"^5.8.3","@types/node":"^22.15.19","@vitest/coverage-v8":"4.1.6"},"optionalDependencies":{"tar":"7.5.13","jszip":"^3.10.1"},"_npmOperationalInternal":{"tmp":"tmp/fs-safe_0.3.0_1779405146225_0.5931943840533764","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@openclaw/fs-safe","version":"0.4.0","license":"MIT","_id":"@openclaw/fs-safe@0.4.0","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"dist":{"shasum":"03c1fa0908fa61448f5919013e86066169ba3029","tarball":"https://registry.npmjs.org/@openclaw/fs-safe/-/fs-safe-0.4.0.tgz","fileCount":308,"integrity":"sha512-UxHKy+W2Wc5y7ARLdSZuIzutNCuhFpZpKlpX4iodycBadYLR30c6yuv9AhTpJ+Sq0x1NoXsZJcfwRncfQNT48Q==","signatures":[{"sig":"MEUCIDWWxc+Elu8YAbE6ljKmyzTlEG3VDQG8yWt1QQBzm7daAiEAteGtQOhtihFc5AwG2ZkBriiQGlDliNXHazxJMbVjwQo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":836784},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./json":{"types":"./dist/json.d.ts","default":"./dist/json.js"},"./path":{"types":"./dist/path.d.ts","default":"./dist/path.js"},"./root":{"types":"./dist/root.d.ts","default":"./dist/root.js"},"./temp":{"types":"./dist/temp.d.ts","default":"./dist/temp.js"},"./walk":{"types":"./dist/walk.d.ts","default":"./dist/walk.js"},"./store":{"types":"./dist/store.d.ts","default":"./dist/store.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./atomic":{"types":"./dist/atomic.d.ts","default":"./dist/atomic.js"},"./config":{"types":"./dist/config.d.ts","default":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","default":"./dist/errors.js"},"./output":{"types":"./dist/output.d.ts","default":"./dist/output.js"},"./secret":{"types":"./dist/secret.d.ts","default":"./dist/secret.js"},"./archive":{"types":"./dist/archive.d.ts","default":"./dist/archive.js"},"./advanced":{"types":"./dist/advanced.d.ts","default":"./dist/advanced.js"},"./file-lock":{"types":"./dist/file-lock.d.ts","default":"./dist/file-lock.js"},"./test-hooks":{"types":"./dist/test-hooks.d.ts","default":"./dist/test-hooks.js"},"./permissions":{"types":"./dist/permissions-public.d.ts","default":"./dist/permissions-public.js"},"./secure-file":{"types":"./dist/secure-file.d.ts","default":"./dist/secure-file.js"}},"scripts":{"test":"vitest run","build":"node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\" && tsc -p tsconfig.json","check":"pnpm lint:file-size && pnpm lint:fs-boundary && pnpm build && pnpm test","benchmark":"node scripts/benchmark.mjs","docs:site":"node scripts/build-docs-site.mjs","crabbox:run":"crabbox run","crabbox:stop":"crabbox stop","test:changed":"pnpm run test","check:changed":"pnpm run check","test:coverage":"vitest run --coverage","test:security":"vitest run test/fs-safe.test.ts test/read-boundary-bypass.test.ts test/write-boundary-bypass.test.ts test/additional-boundary-bypass.test.ts test/adversarial-boundary-payloads.test.ts","crabbox:warmup":"crabbox warmup","lint:file-size":"node scripts/check-file-size.mjs","crabbox:hydrate":"crabbox actions hydrate","lint:fs-boundary":"node scripts/check-fs-boundary-primitives.mjs"},"_npmUser":{"name":"steipete","email":"steipete@gmail.com"},"repository":{"url":"git+https://github.com/openclaw/fs-safe.git","type":"git"},"description":"Capability-style filesystem roots for Node.js apps that handle untrusted relative paths.","directories":{},"sideEffects":false,"_nodeVersion":"25.8.1","_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^5.9.3","@types/node":"^22.19.20","@vitest/coverage-v8":"4.1.8"},"optionalDependencies":{"tar":"7.5.16","jszip":"^3.10.1"},"_npmOperationalInternal":{"tmp":"tmp/fs-safe_0.4.0_1781754806793_0.6774810995180749","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@openclaw/fs-safe","version":"0.4.1","license":"MIT","_id":"@openclaw/fs-safe@0.4.1","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://github.com/openclaw/fs-safe#readme","bugs":{"url":"https://github.com/openclaw/fs-safe/issues"},"dist":{"shasum":"3665fc937649634e9f6c9dce85b0f4e5b44358d7","tarball":"https://registry.npmjs.org/@openclaw/fs-safe/-/fs-safe-0.4.1.tgz","fileCount":308,"integrity":"sha512-hQi+BxO10KdRFlYUot1syC+hTaUnGeQNdqX5kwkKJig8CFq1tKsYJLPm+zkiiGsSKOprPAquQl/txejEhpKPgg==","signatures":[{"sig":"MEQCIHKGQov1lkg1TSZ1igKqMI5LaIhPtLaJAZ9ZV3B8UpgnAiBME8gk+vXyhkod35MjpqzcNMbX3mnB34+mDrePsr5nTA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":846410},"type":"module","_from":"file:/tmp/fs-safe-0.4.1.aRxBqJ/openclaw-fs-safe-0.4.1.tgz","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./json":{"types":"./dist/json.d.ts","default":"./dist/json.js"},"./path":{"types":"./dist/path.d.ts","default":"./dist/path.js"},"./root":{"types":"./dist/root.d.ts","default":"./dist/root.js"},"./temp":{"types":"./dist/temp.d.ts","default":"./dist/temp.js"},"./walk":{"types":"./dist/walk.d.ts","default":"./dist/walk.js"},"./store":{"types":"./dist/store.d.ts","default":"./dist/store.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./atomic":{"types":"./dist/atomic.d.ts","default":"./dist/atomic.js"},"./config":{"types":"./dist/config.d.ts","default":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","default":"./dist/errors.js"},"./output":{"types":"./dist/output.d.ts","default":"./dist/output.js"},"./secret":{"types":"./dist/secret.d.ts","default":"./dist/secret.js"},"./archive":{"types":"./dist/archive.d.ts","default":"./dist/archive.js"},"./advanced":{"types":"./dist/advanced.d.ts","default":"./dist/advanced.js"},"./file-lock":{"types":"./dist/file-lock.d.ts","default":"./dist/file-lock.js"},"./test-hooks":{"types":"./dist/test-hooks.d.ts","default":"./dist/test-hooks.js"},"./permissions":{"types":"./dist/permissions-public.d.ts","default":"./dist/permissions-public.js"},"./secure-file":{"types":"./dist/secure-file.d.ts","default":"./dist/secure-file.js"}},"scripts":{"test":"vitest run","build":"node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\" && tsc -p tsconfig.json","check":"pnpm lint:file-size && pnpm lint:fs-boundary && pnpm build && pnpm test","benchmark":"node scripts/benchmark.mjs","docs:site":"node scripts/build-docs-site.mjs","crabbox:run":"crabbox run","crabbox:stop":"crabbox stop","test:changed":"pnpm run test","check:changed":"pnpm run check","test:coverage":"vitest run --coverage","test:security":"vitest run test/fs-safe.test.ts test/read-boundary-bypass.test.ts test/write-boundary-bypass.test.ts test/additional-boundary-bypass.test.ts test/adversarial-boundary-payloads.test.ts","crabbox:warmup":"crabbox warmup","lint:file-size":"node scripts/check-file-size.mjs","crabbox:hydrate":"crabbox actions hydrate","lint:fs-boundary":"node scripts/check-fs-boundary-primitives.mjs"},"_npmUser":{"name":"steipete","email":"steipete@gmail.com"},"_resolved":"/tmp/fs-safe-0.4.1.aRxBqJ/openclaw-fs-safe-0.4.1.tgz","_integrity":"sha512-hQi+BxO10KdRFlYUot1syC+hTaUnGeQNdqX5kwkKJig8CFq1tKsYJLPm+zkiiGsSKOprPAquQl/txejEhpKPgg==","repository":{"url":"git+https://github.com/openclaw/fs-safe.git","type":"git"},"_npmVersion":"11.11.0","description":"Capability-style filesystem roots for Node.js apps that handle untrusted relative paths.","directories":{},"sideEffects":false,"_nodeVersion":"25.8.1","_hasShrinkwrap":false,"devDependencies":{"vite":"7.3.5","vitest":"^4.1.9","typescript":"^5.9.3","@types/node":"^22.20.0","@vitest/coverage-v8":"4.1.9"},"optionalDependencies":{"tar":"7.5.19","jszip":"^3.10.1"},"_npmOperationalInternal":{"tmp":"tmp/fs-safe_0.4.1_1782897180816_0.7757808237359882","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"@openclaw/fs-safe","version":"0.4.2","license":"MIT","_id":"@openclaw/fs-safe@0.4.2","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://github.com/openclaw/fs-safe#readme","bugs":{"url":"https://github.com/openclaw/fs-safe/issues"},"dist":{"shasum":"67f8747c5ac699a38126d21f3bb7661ab1ec4e32","tarball":"https://registry.npmjs.org/@openclaw/fs-safe/-/fs-safe-0.4.2.tgz","fileCount":311,"integrity":"sha512-x02inO/FF+kuKU8W5vX5UFgkkMG2bCf2u02lX90XQYCYzvD87P/J0F9dfYKF4o/9b37JATdXcUhJwrhtREpwWQ==","signatures":[{"sig":"MEUCIQDdfCetnhD9IPdvOoS53US/PvOaQCYMuLmx376J0ReXQQIgLhyJLXDrQW4qMEvJPvyop94/3FYbL2Wea3tZTuCXtU8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":852026},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./json":{"types":"./dist/json.d.ts","default":"./dist/json.js"},"./path":{"types":"./dist/path.d.ts","default":"./dist/path.js"},"./root":{"types":"./dist/root.d.ts","default":"./dist/root.js"},"./temp":{"types":"./dist/temp.d.ts","default":"./dist/temp.js"},"./walk":{"types":"./dist/walk.d.ts","default":"./dist/walk.js"},"./store":{"types":"./dist/store.d.ts","default":"./dist/store.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./atomic":{"types":"./dist/atomic.d.ts","default":"./dist/atomic.js"},"./config":{"types":"./dist/config.d.ts","default":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","default":"./dist/errors.js"},"./output":{"types":"./dist/output.d.ts","default":"./dist/output.js"},"./secret":{"types":"./dist/secret.d.ts","default":"./dist/secret.js"},"./archive":{"types":"./dist/archive.d.ts","default":"./dist/archive.js"},"./advanced":{"types":"./dist/advanced.d.ts","default":"./dist/advanced.js"},"./file-lock":{"types":"./dist/file-lock.d.ts","default":"./dist/file-lock.js"},"./test-hooks":{"types":"./dist/test-hooks.d.ts","default":"./dist/test-hooks.js"},"./permissions":{"types":"./dist/permissions-public.d.ts","default":"./dist/permissions-public.js"},"./secure-file":{"types":"./dist/secure-file.d.ts","default":"./dist/secure-file.js"}},"gitHead":"f5fc0cbb947ea92fc77ef940b43931e1e7f42c98","scripts":{"test":"vitest run","build":"node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\" && tsc -p tsconfig.json","check":"pnpm lint:file-size && pnpm lint:fs-boundary && pnpm build && pnpm test","prepack":"node scripts/prepack-build.mjs","benchmark":"node scripts/benchmark.mjs","docs:site":"node scripts/build-docs-site.mjs","crabbox:run":"crabbox run","crabbox:stop":"crabbox stop","test:changed":"pnpm run test","check:changed":"pnpm run check","test:coverage":"vitest run --coverage","test:security":"vitest run test/fs-safe.test.ts test/read-boundary-bypass.test.ts test/write-boundary-bypass.test.ts test/additional-boundary-bypass.test.ts test/adversarial-boundary-payloads.test.ts","crabbox:warmup":"crabbox warmup","lint:file-size":"node scripts/check-file-size.mjs","crabbox:hydrate":"crabbox actions hydrate","lint:fs-boundary":"node scripts/check-fs-boundary-primitives.mjs"},"_npmUser":{"name":"steipete","email":"steipete@gmail.com"},"repository":{"url":"git+https://github.com/openclaw/fs-safe.git","type":"git"},"_npmVersion":"11.16.0","description":"Capability-style filesystem roots for Node.js apps that handle untrusted relative paths.","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"packageManager":"pnpm@10.34.5","devDependencies":{"vite":"8.1.5","vitest":"^4.1.10","typescript":"^7.0.2","@types/node":"^26.1.1","@vitest/coverage-v8":"4.1.10"},"optionalDependencies":{"tar":"7.5.20","jszip":"^3.10.1"},"_npmOperationalInternal":{"tmp":"tmp/fs-safe_0.4.2_1784428862409_0.8000385502856364","host":"s3://npm-registry-packages-npm-production"}},"0.4.3":{"name":"@openclaw/fs-safe","version":"0.4.3","license":"MIT","_id":"@openclaw/fs-safe@0.4.3","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://github.com/openclaw/fs-safe#readme","bugs":{"url":"https://github.com/openclaw/fs-safe/issues"},"dist":{"shasum":"c20294ddfed112debead5ba9870eb26662fe5af8","tarball":"https://registry.npmjs.org/@openclaw/fs-safe/-/fs-safe-0.4.3.tgz","fileCount":311,"integrity":"sha512-COOPvc0yFwisi0QXA4FtKz5LLzT+1reYNNJn+598/PHYPCxo4uS8NZS4BQV62ypqxL7laW702PitCKyEXu5MpA==","signatures":[{"sig":"MEUCIQD2VWzVW3lWw18uW87ynfl4MtmePWRjd5JWMnnUUkQ8tAIgUTGm08EdLRfREyuC6ebUzP8xfuvnq4PDyCAlbsE5ZeI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":853034},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./json":{"types":"./dist/json.d.ts","default":"./dist/json.js"},"./path":{"types":"./dist/path.d.ts","default":"./dist/path.js"},"./root":{"types":"./dist/root.d.ts","default":"./dist/root.js"},"./temp":{"types":"./dist/temp.d.ts","default":"./dist/temp.js"},"./walk":{"types":"./dist/walk.d.ts","default":"./dist/walk.js"},"./store":{"types":"./dist/store.d.ts","default":"./dist/store.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./atomic":{"types":"./dist/atomic.d.ts","default":"./dist/atomic.js"},"./config":{"types":"./dist/config.d.ts","default":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","default":"./dist/errors.js"},"./output":{"types":"./dist/output.d.ts","default":"./dist/output.js"},"./secret":{"types":"./dist/secret.d.ts","default":"./dist/secret.js"},"./archive":{"types":"./dist/archive.d.ts","default":"./dist/archive.js"},"./advanced":{"types":"./dist/advanced.d.ts","default":"./dist/advanced.js"},"./file-lock":{"types":"./dist/file-lock.d.ts","default":"./dist/file-lock.js"},"./test-hooks":{"types":"./dist/test-hooks.d.ts","default":"./dist/test-hooks.js"},"./permissions":{"types":"./dist/permissions-public.d.ts","default":"./dist/permissions-public.js"},"./secure-file":{"types":"./dist/secure-file.d.ts","default":"./dist/secure-file.js"}},"gitHead":"08132c98edd6ac3bc478ee356a9bfc62177b87e5","scripts":{"test":"vitest run","build":"node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\" && tsc -p tsconfig.json","check":"pnpm lint:file-size && pnpm lint:fs-boundary && pnpm build && pnpm test","prepack":"node scripts/prepack-build.mjs","benchmark":"node scripts/benchmark.mjs","docs:site":"node scripts/build-docs-site.mjs","crabbox:run":"crabbox run","crabbox:stop":"crabbox stop","test:changed":"pnpm run test","check:changed":"pnpm run check","test:coverage":"vitest run --coverage","test:security":"vitest run test/fs-safe.test.ts test/read-boundary-bypass.test.ts test/write-boundary-bypass.test.ts test/additional-boundary-bypass.test.ts test/adversarial-boundary-payloads.test.ts","crabbox:warmup":"crabbox warmup","lint:file-size":"node scripts/check-file-size.mjs","crabbox:hydrate":"crabbox actions hydrate","lint:fs-boundary":"node scripts/check-fs-boundary-primitives.mjs"},"_npmUser":{"name":"steipete","email":"steipete@gmail.com"},"repository":{"url":"git+https://github.com/openclaw/fs-safe.git","type":"git"},"_npmVersion":"12.0.1","description":"Capability-style filesystem roots for Node.js apps that handle untrusted relative paths.","directories":{},"sideEffects":false,"_nodeVersion":"26.5.0","_hasShrinkwrap":false,"packageManager":"pnpm@10.34.5","devDependencies":{"vite":"8.1.5","vitest":"^4.1.10","typescript":"^7.0.2","@types/node":"^26.1.1","@vitest/coverage-v8":"4.1.10"},"optionalDependencies":{"tar":"7.5.20","jszip":"^3.10.1"},"_npmOperationalInternal":{"tmp":"tmp/fs-safe_0.4.3_1784434959924_0.2766441599415215","host":"s3://npm-registry-packages-npm-production"}},"0.4.4":{"name":"@openclaw/fs-safe","version":"0.4.4","license":"MIT","_id":"@openclaw/fs-safe@0.4.4","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://github.com/openclaw/fs-safe#readme","bugs":{"url":"https://github.com/openclaw/fs-safe/issues"},"dist":{"shasum":"00b60529cbe2a5ecd44093d2fed775568e591c07","tarball":"https://registry.npmjs.org/@openclaw/fs-safe/-/fs-safe-0.4.4.tgz","fileCount":314,"integrity":"sha512-QklFGshaQDXl7RFyxPeSN/1moYq/X+SJcmX/nY3oXJO/tzVasL9i1g3m4nJqIfd6qUTJQjeu+41aIqw8+SbUww==","signatures":[{"sig":"MEYCIQDd5e7Q3oX6i4JvUgxsSwfb+Myxu29XSzKTPGH9tCWrsAIhAMpxMUJ2LduIkO3CNlq6trntlT2d4R3JCBTxSw4J8fkd","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":861644},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./json":{"types":"./dist/json.d.ts","default":"./dist/json.js"},"./path":{"types":"./dist/path.d.ts","default":"./dist/path.js"},"./root":{"types":"./dist/root.d.ts","default":"./dist/root.js"},"./temp":{"types":"./dist/temp.d.ts","default":"./dist/temp.js"},"./walk":{"types":"./dist/walk.d.ts","default":"./dist/walk.js"},"./store":{"types":"./dist/store.d.ts","default":"./dist/store.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./atomic":{"types":"./dist/atomic.d.ts","default":"./dist/atomic.js"},"./config":{"types":"./dist/config.d.ts","default":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","default":"./dist/errors.js"},"./output":{"types":"./dist/output.d.ts","default":"./dist/output.js"},"./secret":{"types":"./dist/secret.d.ts","default":"./dist/secret.js"},"./archive":{"types":"./dist/archive.d.ts","default":"./dist/archive.js"},"./advanced":{"types":"./dist/advanced.d.ts","default":"./dist/advanced.js"},"./file-lock":{"types":"./dist/file-lock.d.ts","default":"./dist/file-lock.js"},"./test-hooks":{"types":"./dist/test-hooks.d.ts","default":"./dist/test-hooks.js"},"./permissions":{"types":"./dist/permissions-public.d.ts","default":"./dist/permissions-public.js"},"./secure-file":{"types":"./dist/secure-file.d.ts","default":"./dist/secure-file.js"}},"gitHead":"cc8a26b23d3a1d1c4f8781bc3f8dfe604240e4ea","scripts":{"test":"vitest run","build":"node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\" && tsc -p tsconfig.json","check":"pnpm lint:file-size && pnpm lint:fs-boundary && pnpm build && pnpm test","prepack":"node scripts/prepack-build.mjs","benchmark":"node scripts/benchmark.mjs","docs:site":"node scripts/build-docs-site.mjs","crabbox:run":"crabbox run","crabbox:stop":"crabbox stop","test:changed":"pnpm run test","check:changed":"pnpm run check","test:coverage":"vitest run --coverage","test:security":"vitest run test/fs-safe.test.ts test/read-boundary-bypass.test.ts test/write-boundary-bypass.test.ts test/additional-boundary-bypass.test.ts test/adversarial-boundary-payloads.test.ts","crabbox:warmup":"crabbox warmup","lint:file-size":"node scripts/check-file-size.mjs","crabbox:hydrate":"crabbox actions hydrate","lint:fs-boundary":"node scripts/check-fs-boundary-primitives.mjs"},"_npmUser":{"name":"steipete","email":"steipete@gmail.com"},"repository":{"url":"git+https://github.com/openclaw/fs-safe.git","type":"git"},"_npmVersion":"11.17.0","description":"Capability-style filesystem roots for Node.js apps that handle untrusted relative paths.","directories":{},"sideEffects":false,"_nodeVersion":"26.5.0","_hasShrinkwrap":false,"packageManager":"pnpm@10.34.5","devDependencies":{"vite":"8.1.5","vitest":"^4.1.10","typescript":"^7.0.2","@types/node":"^26.1.1","@vitest/coverage-v8":"4.1.10"},"optionalDependencies":{"tar":"7.5.20","jszip":"^3.10.1"},"_npmOperationalInternal":{"tmp":"tmp/fs-safe_0.4.4_1784439302966_0.10871933563621239","host":"s3://npm-registry-packages-npm-production"}},"0.4.5":{"name":"@openclaw/fs-safe","version":"0.4.5","license":"MIT","_id":"@openclaw/fs-safe@0.4.5","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://github.com/openclaw/fs-safe#readme","bugs":{"url":"https://github.com/openclaw/fs-safe/issues"},"dist":{"shasum":"c2e0eb69117e20b7dc097a2f66b31ceaf872c68f","tarball":"https://registry.npmjs.org/@openclaw/fs-safe/-/fs-safe-0.4.5.tgz","fileCount":314,"integrity":"sha512-1r3A5L6nqzQy61duqNQ83fBPzitVwZlu/uDX2YHhKcao4RPa91wWLX0tZkHNaeQi14sInRGIbId0LFkQsp6bqQ==","signatures":[{"sig":"MEUCIQC4PtjV/s70PBI3oalQuFhA1yGGD6kwuyfq9guKU/2MCAIgZ+5AFv0HyL06UdvmpISfGJagYGCm/b3bipC+hyQL4VQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":866380},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./json":{"types":"./dist/json.d.ts","default":"./dist/json.js"},"./path":{"types":"./dist/path.d.ts","default":"./dist/path.js"},"./root":{"types":"./dist/root.d.ts","default":"./dist/root.js"},"./temp":{"types":"./dist/temp.d.ts","default":"./dist/temp.js"},"./walk":{"types":"./dist/walk.d.ts","default":"./dist/walk.js"},"./store":{"types":"./dist/store.d.ts","default":"./dist/store.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./atomic":{"types":"./dist/atomic.d.ts","default":"./dist/atomic.js"},"./config":{"types":"./dist/config.d.ts","default":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","default":"./dist/errors.js"},"./output":{"types":"./dist/output.d.ts","default":"./dist/output.js"},"./secret":{"types":"./dist/secret.d.ts","default":"./dist/secret.js"},"./archive":{"types":"./dist/archive.d.ts","default":"./dist/archive.js"},"./advanced":{"types":"./dist/advanced.d.ts","default":"./dist/advanced.js"},"./file-lock":{"types":"./dist/file-lock.d.ts","default":"./dist/file-lock.js"},"./test-hooks":{"types":"./dist/test-hooks.d.ts","default":"./dist/test-hooks.js"},"./permissions":{"types":"./dist/permissions-public.d.ts","default":"./dist/permissions-public.js"},"./secure-file":{"types":"./dist/secure-file.d.ts","default":"./dist/secure-file.js"}},"gitHead":"9e067b41f3eaa0b952bca9b35f697b8dc1cdaf80","scripts":{"test":"vitest run","build":"node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\" && tsc -p tsconfig.json","check":"pnpm lint:file-size && pnpm lint:fs-boundary && pnpm build && pnpm test","prepack":"node scripts/prepack-build.mjs","benchmark":"node scripts/benchmark.mjs","docs:site":"node scripts/build-docs-site.mjs","crabbox:run":"crabbox run","crabbox:stop":"crabbox stop","test:changed":"pnpm run test","check:changed":"pnpm run check","test:coverage":"vitest run --coverage","test:security":"vitest run test/fs-safe.test.ts test/read-boundary-bypass.test.ts test/write-boundary-bypass.test.ts test/additional-boundary-bypass.test.ts test/adversarial-boundary-payloads.test.ts","crabbox:warmup":"crabbox warmup","lint:file-size":"node scripts/check-file-size.mjs","crabbox:hydrate":"crabbox actions hydrate","lint:fs-boundary":"node scripts/check-fs-boundary-primitives.mjs"},"_npmUser":{"name":"steipete","email":"steipete@gmail.com"},"repository":{"url":"git+https://github.com/openclaw/fs-safe.git","type":"git"},"_npmVersion":"11.17.0","description":"Capability-style filesystem roots for Node.js apps that handle untrusted relative paths.","directories":{},"sideEffects":false,"_nodeVersion":"26.5.0","_hasShrinkwrap":false,"packageManager":"pnpm@10.34.5","devDependencies":{"vite":"8.1.5","vitest":"^4.1.10","typescript":"^7.0.2","@types/node":"^26.1.1","@vitest/coverage-v8":"4.1.10"},"optionalDependencies":{"tar":"7.5.20","jszip":"^3.10.1"},"_npmOperationalInternal":{"tmp":"tmp/fs-safe_0.4.5_1784611899390_0.8866997890686463","host":"s3://npm-registry-packages-npm-production"}},"0.4.6":{"name":"@openclaw/fs-safe","version":"0.4.6","keywords":["filesystem","openclaw","path-traversal","security","typescript"],"author":{"name":"OpenClaw Team","email":"dev@openclaw.ai"},"license":"MIT","_id":"@openclaw/fs-safe@0.4.6","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://fs-safe.io","bugs":{"url":"https://github.com/openclaw/fs-safe/issues"},"dist":{"shasum":"472d5c06f2348ace826372f4bdc7edaf32e8d108","tarball":"https://registry.npmjs.org/@openclaw/fs-safe/-/fs-safe-0.4.6.tgz","fileCount":320,"integrity":"sha512-aIuQp7Xb2UE3Jiup86HAlK0+36VJnHtCMtEwhA1A/2R8HjO3VrawNuyNwWynb/SihQgrUxluWw7O6vRW6Se0Ig==","signatures":[{"sig":"MEUCIQCbRyGX5C3Rhfy4Dld+RSPqH4GkTwVvpxXr8XqhbsmQywIgJpM17XYEal9/CjrkWQf07lpaiUctsb6KU389NrSZBNk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDZExozdkE5amMdWUPpLaaBOfnjeLX7M3EfVeR61PHQrwIhAPNQ6guyYQUSoZUNgVzW9UugCprAU9ULwvJDx5oOhcIg","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@openclaw%2ffs-safe@0.4.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":881830},"type":"module","_from":"file:release-artifact/openclaw-fs-safe-0.4.6.tgz","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./json":{"types":"./dist/json.d.ts","default":"./dist/json.js"},"./path":{"types":"./dist/path.d.ts","default":"./dist/path.js"},"./root":{"types":"./dist/root.d.ts","default":"./dist/root.js"},"./temp":{"types":"./dist/temp.d.ts","default":"./dist/temp.js"},"./walk":{"types":"./dist/walk.d.ts","default":"./dist/walk.js"},"./store":{"types":"./dist/store.d.ts","default":"./dist/store.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./atomic":{"types":"./dist/atomic.d.ts","default":"./dist/atomic.js"},"./config":{"types":"./dist/config.d.ts","default":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","default":"./dist/errors.js"},"./output":{"types":"./dist/output.d.ts","default":"./dist/output.js"},"./secret":{"types":"./dist/secret.d.ts","default":"./dist/secret.js"},"./archive":{"types":"./dist/archive.d.ts","default":"./dist/archive.js"},"./advanced":{"types":"./dist/advanced.d.ts","default":"./dist/advanced.js"},"./file-lock":{"types":"./dist/file-lock.d.ts","default":"./dist/file-lock.js"},"./test-hooks":{"types":"./dist/test-hooks.d.ts","default":"./dist/test-hooks.js"},"./permissions":{"types":"./dist/permissions-public.d.ts","default":"./dist/permissions-public.js"},"./secure-file":{"types":"./dist/secure-file.d.ts","default":"./dist/secure-file.js"},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\" && tsc -p tsconfig.json","check":"pnpm lint:file-size && pnpm lint:fs-boundary && pnpm build && pnpm test && node scripts/check-pack.mjs","prepack":"node scripts/prepack-build.mjs","benchmark":"node scripts/benchmark.mjs","docs:site":"node scripts/build-docs-site.mjs","pack:check":"pnpm build && node scripts/check-pack.mjs","crabbox:run":"crabbox run","crabbox:stop":"crabbox stop","test:changed":"pnpm run test","check:changed":"pnpm run check","release:notes":"node scripts/release-notes.mjs","test:coverage":"vitest run --coverage","test:security":"vitest run test/fs-safe.test.ts test/read-boundary-bypass.test.ts test/write-boundary-bypass.test.ts test/additional-boundary-bypass.test.ts test/adversarial-boundary-payloads.test.ts","crabbox:warmup":"crabbox warmup","lint:file-size":"node scripts/check-file-size.mjs","crabbox:hydrate":"crabbox actions hydrate","lint:fs-boundary":"node scripts/check-fs-boundary-primitives.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:71485d21-a8c3-4f6c-ae40-dd60e3585161"}},"_resolved":"/home/runner/work/fs-safe/fs-safe/release-artifact/openclaw-fs-safe-0.4.6.tgz","_integrity":"sha512-aIuQp7Xb2UE3Jiup86HAlK0+36VJnHtCMtEwhA1A/2R8HjO3VrawNuyNwWynb/SihQgrUxluWw7O6vRW6Se0Ig==","repository":{"url":"git+https://github.com/openclaw/fs-safe.git","type":"git"},"_npmVersion":"11.16.0","description":"Capability-style filesystem roots for Node.js apps that handle untrusted relative paths.","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@10.34.5","devDependencies":{"vite":"8.1.5","vitest":"^4.1.10","typescript":"^7.0.2","@types/node":"^26.1.1","@vitest/coverage-v8":"4.1.10"},"optionalDependencies":{"tar":"7.5.20","jszip":"^3.10.1"},"_npmOperationalInternal":{"tmp":"tmp/fs-safe_0.4.6_1784890044195_0.23181808174506258","host":"s3://npm-registry-packages-npm-production"}},"0.4.7":{"name":"@openclaw/fs-safe","version":"0.4.7","keywords":["filesystem","openclaw","path-traversal","security","typescript"],"author":{"name":"OpenClaw Team","email":"dev@openclaw.ai"},"license":"MIT","_id":"@openclaw/fs-safe@0.4.7","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://fs-safe.io","bugs":{"url":"https://github.com/openclaw/fs-safe/issues"},"dist":{"shasum":"6c890bb39205c84469d9d02d2e145968214914a4","tarball":"https://registry.npmjs.org/@openclaw/fs-safe/-/fs-safe-0.4.7.tgz","fileCount":327,"integrity":"sha512-UO+FCB8vF+VJngOzZuVTdkOapX/gPml0HFEjRj2qIeEmBlCkGLHjRJ4CZWFziRtcq3g4YioWra/6J3iwEH1JaA==","signatures":[{"sig":"MEUCIQDUvz4KV50QYAXnB/g6VMDhWZtXYZaIxzGZQ2346fUupQIgaT4IOBmG8c9YNgnon+8c7Fy8C1VL/1N+w1xH/4ICvzc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQC5b7SOUTOPNhA2it+A3W2hHjpAW/p/2ZVtbw4hHXu/RAIhAO4hAwoXMBE/IYDGpW2yNHlW/Q6WqaG9oJ4hpsPM7Qcr","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@openclaw%2ffs-safe@0.4.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":902614},"type":"module","_from":"file:release-artifact/openclaw-fs-safe-0.4.7.tgz","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./json":{"types":"./dist/json.d.ts","default":"./dist/json.js"},"./path":{"types":"./dist/path.d.ts","default":"./dist/path.js"},"./root":{"types":"./dist/root.d.ts","default":"./dist/root.js"},"./temp":{"types":"./dist/temp.d.ts","default":"./dist/temp.js"},"./walk":{"types":"./dist/walk.d.ts","default":"./dist/walk.js"},"./store":{"types":"./dist/store.d.ts","default":"./dist/store.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./atomic":{"types":"./dist/atomic.d.ts","default":"./dist/atomic.js"},"./config":{"types":"./dist/config.d.ts","default":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","default":"./dist/errors.js"},"./output":{"types":"./dist/output.d.ts","default":"./dist/output.js"},"./secret":{"types":"./dist/secret.d.ts","default":"./dist/secret.js"},"./archive":{"types":"./dist/archive.d.ts","default":"./dist/archive.js"},"./advanced":{"types":"./dist/advanced.d.ts","default":"./dist/advanced.js"},"./file-lock":{"types":"./dist/file-lock.d.ts","default":"./dist/file-lock.js"},"./durability":{"types":"./dist/durability.d.ts","default":"./dist/durability.js"},"./test-hooks":{"types":"./dist/test-hooks.d.ts","default":"./dist/test-hooks.js"},"./permissions":{"types":"./dist/permissions-public.d.ts","default":"./dist/permissions-public.js"},"./secure-file":{"types":"./dist/secure-file.d.ts","default":"./dist/secure-file.js"},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\" && tsc -p tsconfig.json","check":"pnpm lint:file-size && pnpm lint:fs-boundary && pnpm build && pnpm test && node scripts/check-pack.mjs","prepack":"node scripts/prepack-build.mjs","benchmark":"node scripts/benchmark.mjs","docs:site":"node scripts/build-docs-site.mjs","pack:check":"pnpm build && node scripts/check-pack.mjs","crabbox:run":"crabbox run","crabbox:stop":"crabbox stop","test:changed":"pnpm run test","check:changed":"pnpm run check","release:notes":"node scripts/release-notes.mjs","test:coverage":"vitest run --coverage","test:security":"vitest run test/fs-safe.test.ts test/read-boundary-bypass.test.ts test/write-boundary-bypass.test.ts test/additional-boundary-bypass.test.ts test/adversarial-boundary-payloads.test.ts","crabbox:warmup":"crabbox warmup","lint:file-size":"node scripts/check-file-size.mjs","crabbox:hydrate":"crabbox actions hydrate","lint:fs-boundary":"node scripts/check-fs-boundary-primitives.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:71485d21-a8c3-4f6c-ae40-dd60e3585161"}},"_resolved":"/home/runner/work/fs-safe/fs-safe/release-artifact/openclaw-fs-safe-0.4.7.tgz","_integrity":"sha512-UO+FCB8vF+VJngOzZuVTdkOapX/gPml0HFEjRj2qIeEmBlCkGLHjRJ4CZWFziRtcq3g4YioWra/6J3iwEH1JaA==","repository":{"url":"git+https://github.com/openclaw/fs-safe.git","type":"git"},"_npmVersion":"11.16.0","description":"Capability-style filesystem roots for Node.js apps that handle untrusted relative paths.","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@10.34.5","devDependencies":{"vite":"8.1.5","vitest":"^4.1.10","typescript":"^7.0.2","@types/node":"^26.1.1","@vitest/coverage-v8":"4.1.10"},"optionalDependencies":{"tar":"7.5.20","jszip":"^3.10.1"},"_npmOperationalInternal":{"tmp":"tmp/fs-safe_0.4.7_1784935115772_0.8016562061025325","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@openclaw/fs-safe","version":"0.5.0","keywords":["filesystem","openclaw","path-traversal","security","typescript"],"author":{"name":"OpenClaw Team","email":"dev@openclaw.ai"},"license":"MIT","_id":"@openclaw/fs-safe@0.5.0","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://fs-safe.io","bugs":{"url":"https://github.com/openclaw/fs-safe/issues"},"dist":{"shasum":"576d58efaa053ad8a51ae5dffccca90461a351b8","tarball":"https://registry.npmjs.org/@openclaw/fs-safe/-/fs-safe-0.5.0.tgz","fileCount":417,"integrity":"sha512-TPpFG8PkAKlM/eP7glzHhCeZnDX3sSqyjXgeoc0jeyii0y957/zePB62BIwc75gOFmxaeKLWkd4iF41/Ghlgjg==","signatures":[{"sig":"MEUCIQC4fhUB8BpzSXWHqv5nbzggfjTLgOUDgyT+SXHQJoMIEQIgcLmHHXbHTKmPxRRwSfsCuofCjtZ4U6SFUCX6AW628Fo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIGbTYGX+2dtBIwZVpPwHAqh7YQMwoUCJLHjO+gjFBXWjAiEAzSi05IRPcLGlh2HuJ8XxOg66uCRqyKHz/5RZ2Oy5P8Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@openclaw%2ffs-safe@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":16993344},"type":"module","_from":"file:/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.5.0.tgz","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./json":{"types":"./dist/json.d.ts","default":"./dist/json.js"},"./path":{"types":"./dist/path.d.ts","default":"./dist/path.js"},"./root":{"types":"./dist/root.d.ts","default":"./dist/root.js"},"./temp":{"types":"./dist/temp.d.ts","default":"./dist/temp.js"},"./walk":{"types":"./dist/walk.d.ts","default":"./dist/walk.js"},"./store":{"types":"./dist/store.d.ts","default":"./dist/store.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./atomic":{"types":"./dist/atomic.d.ts","default":"./dist/atomic.js"},"./config":{"types":"./dist/config.d.ts","default":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","default":"./dist/errors.js"},"./output":{"types":"./dist/output.d.ts","default":"./dist/output.js"},"./secret":{"types":"./dist/secret.d.ts","default":"./dist/secret.js"},"./archive":{"types":"./dist/archive.d.ts","default":"./dist/archive.js"},"./advanced":{"types":"./dist/advanced.d.ts","default":"./dist/advanced.js"},"./file-lock":{"types":"./dist/file-lock.d.ts","default":"./dist/file-lock.js"},"./durability":{"types":"./dist/durability.d.ts","default":"./dist/durability.js"},"./test-hooks":{"types":"./dist/test-hooks.d.ts","default":"./dist/test-hooks.js"},"./permissions":{"types":"./dist/permissions-public.d.ts","default":"./dist/permissions-public.js"},"./secure-file":{"types":"./dist/secure-file.d.ts","default":"./dist/secure-file.js"},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\" && tsc -p tsconfig.json","check":"pnpm lint:file-size && pnpm lint:fs-boundary && pnpm build && pnpm test && node scripts/check-pack.mjs","prepack":"node scripts/prepack-build.mjs","benchmark":"node scripts/benchmark.mjs","docs:site":"node scripts/build-docs-site.mjs","pack:check":"pnpm build && node scripts/check-pack.mjs","crabbox:run":"crabbox run","native:test":"cargo test --manifest-path native/Cargo.toml","crabbox:stop":"crabbox stop","native:build":"pnpm --filter @openclaw/fs-safe-native-build build","test:changed":"pnpm run test","check:changed":"pnpm run check","package:smoke":"node scripts/check-release-packages.mjs --allow-host-only --output release-artifacts","release:notes":"node scripts/release-notes.mjs","test:coverage":"vitest run --coverage","test:security":"vitest run test/fs-safe.test.ts test/read-boundary-bypass.test.ts test/write-boundary-bypass.test.ts test/additional-boundary-bypass.test.ts test/adversarial-boundary-payloads.test.ts","crabbox:warmup":"crabbox warmup","lint:file-size":"node scripts/check-file-size.mjs","crabbox:hydrate":"crabbox actions hydrate","lint:fs-boundary":"node scripts/check-fs-boundary-primitives.mjs","benchmark:publish":"pnpm build && node scripts/bench-publish.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:71485d21-a8c3-4f6c-ae40-dd60e3585161"}},"_resolved":"/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.5.0.tgz","_integrity":"sha512-TPpFG8PkAKlM/eP7glzHhCeZnDX3sSqyjXgeoc0jeyii0y957/zePB62BIwc75gOFmxaeKLWkd4iF41/Ghlgjg==","repository":{"url":"git+https://github.com/openclaw/fs-safe.git","type":"git"},"_npmVersion":"12.0.1","description":"Capability-style filesystem roots for Node.js apps that handle untrusted relative paths.","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@10.34.5","devDependencies":{"vite":"8.1.5","vitest":"^4.1.10","typescript":"^7.0.2","@types/node":"^26.1.1","@napi-rs/cli":"3.7.4","@vitest/coverage-v8":"4.1.10"},"optionalDependencies":{"tar":"7.5.21","jszip":"^3.10.1"},"_npmOperationalInternal":{"tmp":"tmp/fs-safe_0.5.0_1785197982602_0.8155902769007746","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"@openclaw/fs-safe","version":"0.5.1","keywords":["filesystem","openclaw","path-traversal","security","typescript"],"author":{"name":"OpenClaw Team","email":"dev@openclaw.ai"},"license":"MIT","_id":"@openclaw/fs-safe@0.5.1","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://fs-safe.io","bugs":{"url":"https://github.com/openclaw/fs-safe/issues"},"dist":{"shasum":"f4dabf3ed706bf08ea7a282750baa4ebf1707b60","tarball":"https://registry.npmjs.org/@openclaw/fs-safe/-/fs-safe-0.5.1.tgz","fileCount":417,"integrity":"sha512-WcaG3NUMd4q+puq/I55zxwc0+OjNVhqxSprKzpS17c2cDd9bYc8c2DrYrs6Io3mmNXNa90re/UWSwVkX4I6PkA==","signatures":[{"sig":"MEYCIQDoTe+ea6J2ut/J6wVJBA0Fk5WqYKbGuwpU7nVCYWHuvQIhAJx/YgA1oyhHI0sQrQQUsshz1vq9zd/xTlDPQ12Owgr0","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIEyEubtfSJGmjzXZZWb7sU5cxGFvLua6TEJgZwRmL/0pAiAuF5L7RTKZYDreynb8QBhOFHtq7ZBFkz0MOvXyH3YTQQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@openclaw%2ffs-safe@0.5.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":17092354},"type":"module","_from":"file:/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.5.1.tgz","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./json":{"types":"./dist/json.d.ts","default":"./dist/json.js"},"./path":{"types":"./dist/path.d.ts","default":"./dist/path.js"},"./root":{"types":"./dist/root.d.ts","default":"./dist/root.js"},"./temp":{"types":"./dist/temp.d.ts","default":"./dist/temp.js"},"./walk":{"types":"./dist/walk.d.ts","default":"./dist/walk.js"},"./store":{"types":"./dist/store.d.ts","default":"./dist/store.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./atomic":{"types":"./dist/atomic.d.ts","default":"./dist/atomic.js"},"./config":{"types":"./dist/config.d.ts","default":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","default":"./dist/errors.js"},"./output":{"types":"./dist/output.d.ts","default":"./dist/output.js"},"./secret":{"types":"./dist/secret.d.ts","default":"./dist/secret.js"},"./archive":{"types":"./dist/archive.d.ts","default":"./dist/archive.js"},"./advanced":{"types":"./dist/advanced.d.ts","default":"./dist/advanced.js"},"./file-lock":{"types":"./dist/file-lock.d.ts","default":"./dist/file-lock.js"},"./durability":{"types":"./dist/durability.d.ts","default":"./dist/durability.js"},"./test-hooks":{"types":"./dist/test-hooks.d.ts","default":"./dist/test-hooks.js"},"./permissions":{"types":"./dist/permissions-public.d.ts","default":"./dist/permissions-public.js"},"./secure-file":{"types":"./dist/secure-file.d.ts","default":"./dist/secure-file.js"},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\" && tsc -p tsconfig.json","check":"pnpm lint:file-size && pnpm lint:fs-boundary && pnpm build && pnpm test && node scripts/check-pack.mjs","prepack":"node scripts/prepack-build.mjs","benchmark":"node scripts/benchmark.mjs","docs:site":"node scripts/build-docs-site.mjs","pack:check":"pnpm build && node scripts/check-pack.mjs","crabbox:run":"crabbox run","native:test":"cargo test --manifest-path native/Cargo.toml","crabbox:stop":"crabbox stop","native:build":"pnpm --filter @openclaw/fs-safe-native-build build","test:changed":"pnpm run test","check:changed":"pnpm run check","package:smoke":"node scripts/check-release-packages.mjs --allow-host-only --output release-artifacts","release:notes":"node scripts/release-notes.mjs","test:coverage":"vitest run --coverage","test:security":"vitest run test/fs-safe.test.ts test/read-boundary-bypass.test.ts test/write-boundary-bypass.test.ts test/additional-boundary-bypass.test.ts test/adversarial-boundary-payloads.test.ts","crabbox:warmup":"crabbox warmup","lint:file-size":"node scripts/check-file-size.mjs","crabbox:hydrate":"crabbox actions hydrate","lint:fs-boundary":"node scripts/check-fs-boundary-primitives.mjs","benchmark:publish":"pnpm build && node scripts/bench-publish.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:71485d21-a8c3-4f6c-ae40-dd60e3585161"}},"_resolved":"/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.5.1.tgz","_integrity":"sha512-WcaG3NUMd4q+puq/I55zxwc0+OjNVhqxSprKzpS17c2cDd9bYc8c2DrYrs6Io3mmNXNa90re/UWSwVkX4I6PkA==","repository":{"url":"git+https://github.com/openclaw/fs-safe.git","type":"git"},"_npmVersion":"12.0.1","description":"Capability-style filesystem roots for Node.js apps that handle untrusted relative paths.","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@10.34.5","devDependencies":{"vite":"8.2.0","vitest":"^4.1.10","typescript":"^7.0.2","@types/node":"^26.1.2","@napi-rs/cli":"3.8.1","@vitest/coverage-v8":"4.1.10"},"optionalDependencies":{"tar":"7.5.22","jszip":"^3.10.1"},"_npmOperationalInternal":{"tmp":"tmp/fs-safe_0.5.1_1785638272775_0.9179894756500377","host":"s3://npm-registry-packages-npm-production"}},"0.5.2":{"name":"@openclaw/fs-safe","version":"0.5.2","keywords":["filesystem","openclaw","path-traversal","security","typescript"],"author":{"name":"OpenClaw Team","email":"dev@openclaw.ai"},"license":"MIT","_id":"@openclaw/fs-safe@0.5.2","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://fs-safe.io","bugs":{"url":"https://github.com/openclaw/fs-safe/issues"},"dist":{"shasum":"7a2c8f406a8829371465683155aded24f21aef19","tarball":"https://registry.npmjs.org/@openclaw/fs-safe/-/fs-safe-0.5.2.tgz","fileCount":431,"integrity":"sha512-klidJFTE5FFAweNFpy/aVgschya3JYMWtXfdoSH3bTFN7+WAqlJtD+UQjOIFdkD42kJcWM7josNUpIIm7dnwXg==","signatures":[{"sig":"MEQCIH+N2sI8FePv+a9yOHMaG0vnaZK06Mq2bnUOcTDKtP+0AiAuYzdy4kx+NALS365Hzaprp4hlwFnPd6lmVQ/ekTVlOg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCmkT5STfd4iro1Z73Eh+1gVbTaVqzdIkP9mjFQLcE4EwIhAPY9Y9BbEiRJmZN1bxOb0UA1xtaeaVhJ3GNJW4B2HAgV","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@openclaw%2ffs-safe@0.5.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":17249142},"type":"module","_from":"file:/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.5.2.tgz","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./json":{"types":"./dist/json.d.ts","default":"./dist/json.js"},"./path":{"types":"./dist/path.d.ts","default":"./dist/path.js"},"./root":{"types":"./dist/root.d.ts","default":"./dist/root.js"},"./temp":{"types":"./dist/temp.d.ts","default":"./dist/temp.js"},"./walk":{"types":"./dist/walk.d.ts","default":"./dist/walk.js"},"./store":{"types":"./dist/store.d.ts","default":"./dist/store.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./atomic":{"types":"./dist/atomic.d.ts","default":"./dist/atomic.js"},"./config":{"types":"./dist/config.d.ts","default":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","default":"./dist/errors.js"},"./output":{"types":"./dist/output.d.ts","default":"./dist/output.js"},"./secret":{"types":"./dist/secret.d.ts","default":"./dist/secret.js"},"./archive":{"types":"./dist/archive.d.ts","default":"./dist/archive.js"},"./advanced":{"types":"./dist/advanced.d.ts","default":"./dist/advanced.js"},"./file-lock":{"types":"./dist/file-lock.d.ts","default":"./dist/file-lock.js"},"./durability":{"types":"./dist/durability.d.ts","default":"./dist/durability.js"},"./test-hooks":{"types":"./dist/test-hooks.d.ts","default":"./dist/test-hooks.js"},"./permissions":{"types":"./dist/permissions-public.d.ts","default":"./dist/permissions-public.js"},"./secure-file":{"types":"./dist/secure-file.d.ts","default":"./dist/secure-file.js"},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\" && tsc -p tsconfig.json","check":"pnpm lint:file-size && pnpm lint:fs-boundary && pnpm build && pnpm docs:check && pnpm test && node scripts/check-pack.mjs","prepack":"node scripts/prepack-build.mjs","benchmark":"node scripts/benchmark.mjs","docs:site":"node scripts/build-docs-site.mjs","docs:check":"node scripts/check-doc-examples.mjs","pack:check":"pnpm build && node scripts/check-pack.mjs","crabbox:run":"crabbox run","native:test":"cargo test --manifest-path native/Cargo.toml","crabbox:stop":"crabbox stop","native:build":"pnpm --filter @openclaw/fs-safe-native-build build","test:changed":"pnpm run test","check:changed":"pnpm run check","package:smoke":"node scripts/check-release-packages.mjs --allow-host-only --output release-artifacts","release:notes":"node scripts/release-notes.mjs","test:coverage":"vitest run --coverage","test:security":"vitest run test/fs-safe.test.ts test/read-boundary-bypass.test.ts test/write-boundary-bypass.test.ts test/additional-boundary-bypass.test.ts test/adversarial-boundary-payloads.test.ts","crabbox:warmup":"crabbox warmup","lint:file-size":"node scripts/check-file-size.mjs","crabbox:hydrate":"crabbox actions hydrate","lint:fs-boundary":"node scripts/check-fs-boundary-primitives.mjs","benchmark:publish":"pnpm build && node scripts/bench-publish.mjs","public-api:update":"pnpm build && node scripts/check-pack.mjs --update-public-api"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:71485d21-a8c3-4f6c-ae40-dd60e3585161"}},"_resolved":"/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.5.2.tgz","_integrity":"sha512-klidJFTE5FFAweNFpy/aVgschya3JYMWtXfdoSH3bTFN7+WAqlJtD+UQjOIFdkD42kJcWM7josNUpIIm7dnwXg==","repository":{"url":"git+https://github.com/openclaw/fs-safe.git","type":"git"},"_npmVersion":"12.0.1","description":"Capability-style filesystem roots for Node.js apps that handle untrusted relative paths.","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@10.34.5","devDependencies":{"vite":"8.2.0","vitest":"^4.1.10","sigstore":"5.0.0","typescript":"^7.0.2","@types/node":"^26.1.2","@napi-rs/cli":"3.8.2","@vitest/coverage-v8":"4.1.10"},"optionalDependencies":{"tar":"7.5.22","jszip":"^3.10.1"},"_npmOperationalInternal":{"tmp":"tmp/fs-safe_0.5.2_1785728130237_0.5255935084499608","host":"s3://npm-registry-packages-npm-production"}},"0.5.3":{"name":"@openclaw/fs-safe","version":"0.5.3","keywords":["filesystem","openclaw","path-traversal","security","typescript"],"author":{"name":"OpenClaw Team","email":"dev@openclaw.ai"},"license":"MIT","_id":"@openclaw/fs-safe@0.5.3","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://fs-safe.io","bugs":{"url":"https://github.com/openclaw/fs-safe/issues"},"dist":{"shasum":"6820005852dfef805e5f2a9f63292bfc5e5a4c4a","tarball":"https://registry.npmjs.org/@openclaw/fs-safe/-/fs-safe-0.5.3.tgz","fileCount":434,"integrity":"sha512-tWzQywX8Q2Lu4rXpPp/b+T2XL7H4WgupxLcXrpaM6qes6UevsRjY22NRt6XVAeIE8xysrPriMGFV67ooxfBpkw==","signatures":[{"sig":"MEUCIQCEGbXTMZ1z0RUoqjkPJkjwzKe4gRZ4tmMmqBxxyB3XgwIgRexPlq56cUrPrQKbs7r2edJKPMeXdyH0ppQBfxvV0n8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIBV/DKR1HNv4LiTSPxVjFtqd6aVBR11hcdX7GjylBzG0AiEAkzepUHsNs5kQAauH+mc+1z5r8CQdP9duJvhzQ4Rw3jM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@openclaw%2ffs-safe@0.5.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":17270971},"type":"module","_from":"file:/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.5.3.tgz","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./json":{"types":"./dist/json.d.ts","default":"./dist/json.js"},"./path":{"types":"./dist/path.d.ts","default":"./dist/path.js"},"./root":{"types":"./dist/root.d.ts","default":"./dist/root.js"},"./temp":{"types":"./dist/temp.d.ts","default":"./dist/temp.js"},"./walk":{"types":"./dist/walk.d.ts","default":"./dist/walk.js"},"./store":{"types":"./dist/store.d.ts","default":"./dist/store.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./atomic":{"types":"./dist/atomic.d.ts","default":"./dist/atomic.js"},"./config":{"types":"./dist/config.d.ts","default":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","default":"./dist/errors.js"},"./output":{"types":"./dist/output.d.ts","default":"./dist/output.js"},"./secret":{"types":"./dist/secret.d.ts","default":"./dist/secret.js"},"./archive":{"types":"./dist/archive.d.ts","default":"./dist/archive.js"},"./advanced":{"types":"./dist/advanced.d.ts","default":"./dist/advanced.js"},"./file-lock":{"types":"./dist/file-lock.d.ts","default":"./dist/file-lock.js"},"./durability":{"types":"./dist/durability.d.ts","default":"./dist/durability.js"},"./test-hooks":{"types":"./dist/test-hooks.d.ts","default":"./dist/test-hooks.js"},"./permissions":{"types":"./dist/permissions-public.d.ts","default":"./dist/permissions-public.js"},"./secure-file":{"types":"./dist/secure-file.d.ts","default":"./dist/secure-file.js"},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\" && tsc -p tsconfig.json","check":"pnpm lint:file-size && pnpm lint:fs-boundary && pnpm build && pnpm docs:check && pnpm test && node scripts/check-pack.mjs","prepack":"node scripts/prepack-build.mjs","benchmark":"node scripts/benchmark.mjs","docs:site":"node scripts/build-docs-site.mjs","docs:check":"node scripts/check-doc-examples.mjs","pack:check":"pnpm build && node scripts/check-pack.mjs","crabbox:run":"crabbox run","native:test":"cargo test --manifest-path native/Cargo.toml","crabbox:stop":"crabbox stop","native:build":"pnpm --filter @openclaw/fs-safe-native-build build","test:changed":"pnpm run test","check:changed":"pnpm run check","package:smoke":"node scripts/check-release-packages.mjs --allow-host-only --output release-artifacts","release:notes":"node scripts/release-notes.mjs","test:coverage":"vitest run --coverage","test:security":"vitest run test/fs-safe.test.ts test/read-boundary-bypass.test.ts test/write-boundary-bypass.test.ts test/additional-boundary-bypass.test.ts test/adversarial-boundary-payloads.test.ts","crabbox:warmup":"crabbox warmup","lint:file-size":"node scripts/check-file-size.mjs","crabbox:hydrate":"crabbox actions hydrate","lint:fs-boundary":"node scripts/check-fs-boundary-primitives.mjs","benchmark:publish":"pnpm build && node scripts/bench-publish.mjs","public-api:update":"pnpm build && node scripts/check-pack.mjs --update-public-api","test:coverage:merge":"node scripts/merge-coverage.mjs","test:coverage:collect":"vitest run --coverage --coverage.reporter=json --coverage.thresholds.lines=0 --coverage.thresholds.functions=0 --coverage.thresholds.statements=0 --coverage.thresholds.branches=0"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:71485d21-a8c3-4f6c-ae40-dd60e3585161"}},"_resolved":"/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.5.3.tgz","_integrity":"sha512-tWzQywX8Q2Lu4rXpPp/b+T2XL7H4WgupxLcXrpaM6qes6UevsRjY22NRt6XVAeIE8xysrPriMGFV67ooxfBpkw==","repository":{"url":"git+https://github.com/openclaw/fs-safe.git","type":"git"},"_npmVersion":"12.0.1","description":"Capability-style filesystem roots for Node.js apps that handle untrusted relative paths.","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@10.34.5","devDependencies":{"vite":"8.2.1","vitest":"^4.1.10","sigstore":"5.0.0","fast-check":"^4.9.0","typescript":"^7.0.2","@types/node":"^26.1.2","@napi-rs/cli":"3.8.2","@emnapi/runtime":"2.0.0-alpha.3","istanbul-reports":"3.2.0","@vitest/coverage-v8":"4.1.10","istanbul-lib-report":"3.0.1","istanbul-lib-coverage":"3.2.2"},"optionalDependencies":{"tar":"7.5.22","jszip":"^3.10.1"},"_npmOperationalInternal":{"tmp":"tmp/fs-safe_0.5.3_1786248836651_0.061462382687168526","host":"s3://npm-registry-packages-npm-production"}},"0.5.4":{"name":"@openclaw/fs-safe","version":"0.5.4","keywords":["filesystem","openclaw","path-traversal","security","typescript"],"author":{"name":"OpenClaw Team","email":"dev@openclaw.ai"},"license":"MIT","_id":"@openclaw/fs-safe@0.5.4","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://fs-safe.io","bugs":{"url":"https://github.com/openclaw/fs-safe/issues"},"dist":{"shasum":"66be0d3b5f4e3d77dc3f058f59be2177ec63254c","tarball":"https://registry.npmjs.org/@openclaw/fs-safe/-/fs-safe-0.5.4.tgz","fileCount":437,"integrity":"sha512-lttlWKRBQU7eYDYykU2BPoF1S6AESGrT77mVCXsuWBxnRBTAI/PuGB89DB3D1lBCDaqTykIjymPJz4pFesGnkg==","signatures":[{"sig":"MEUCIEojKXi7kGrw9ADZ0ChdULR/IHseFvJBXBD/gzwdyAbRAiEA1bwoS59fFKIfoILfIjV2fuOLXFdWvxEZ2b18hj0u9fk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIEf0VS2JURNjGOuTUnC3N1XlDi6a/AjRQgz6sydtU+btAiEA9NVCNfR0GAhniiBtiNsLt4KuPl9hFafYaDeULL1HFOU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@openclaw%2ffs-safe@0.5.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":17501651},"type":"module","_from":"file:/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.5.4.tgz","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./json":{"types":"./dist/json.d.ts","default":"./dist/json.js"},"./path":{"types":"./dist/path.d.ts","default":"./dist/path.js"},"./root":{"types":"./dist/root.d.ts","default":"./dist/root.js"},"./temp":{"types":"./dist/temp.d.ts","default":"./dist/temp.js"},"./walk":{"types":"./dist/walk.d.ts","default":"./dist/walk.js"},"./store":{"types":"./dist/store.d.ts","default":"./dist/store.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./atomic":{"types":"./dist/atomic.d.ts","default":"./dist/atomic.js"},"./config":{"types":"./dist/config.d.ts","default":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","default":"./dist/errors.js"},"./output":{"types":"./dist/output.d.ts","default":"./dist/output.js"},"./secret":{"types":"./dist/secret.d.ts","default":"./dist/secret.js"},"./archive":{"types":"./dist/archive.d.ts","default":"./dist/archive.js"},"./advanced":{"types":"./dist/advanced.d.ts","default":"./dist/advanced.js"},"./file-lock":{"types":"./dist/file-lock.d.ts","default":"./dist/file-lock.js"},"./durability":{"types":"./dist/durability.d.ts","default":"./dist/durability.js"},"./test-hooks":{"types":"./dist/test-hooks.d.ts","default":"./dist/test-hooks.js"},"./permissions":{"types":"./dist/permissions-public.d.ts","default":"./dist/permissions-public.js"},"./secure-file":{"types":"./dist/secure-file.d.ts","default":"./dist/secure-file.js"},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\" && tsc -p tsconfig.json","check":"pnpm lint:file-size && pnpm lint:fs-boundary && pnpm build && pnpm docs:check && pnpm test && node scripts/check-pack.mjs","prepack":"node scripts/prepack-build.mjs","benchmark":"node scripts/benchmark.mjs","docs:site":"node scripts/build-docs-site.mjs","docs:check":"node scripts/check-doc-examples.mjs","pack:check":"pnpm build && node scripts/check-pack.mjs","crabbox:run":"crabbox run","native:test":"cargo test --manifest-path native/Cargo.toml","crabbox:stop":"crabbox stop","native:build":"pnpm --filter @openclaw/fs-safe-native-build build","test:changed":"pnpm run test","check:changed":"pnpm run check","package:smoke":"node scripts/check-release-packages.mjs --allow-host-only --output release-artifacts","release:notes":"node scripts/release-notes.mjs","test:coverage":"vitest run --coverage","test:security":"vitest run test/fs-safe.test.ts test/read-boundary-bypass.test.ts test/write-boundary-bypass.test.ts test/additional-boundary-bypass.test.ts test/adversarial-boundary-payloads.test.ts","crabbox:warmup":"crabbox warmup","lint:file-size":"node scripts/check-file-size.mjs","crabbox:hydrate":"crabbox actions hydrate","lint:fs-boundary":"node scripts/check-fs-boundary-primitives.mjs","benchmark:publish":"pnpm build && node scripts/bench-publish.mjs","public-api:update":"pnpm build && node scripts/check-pack.mjs --update-public-api","test:coverage:merge":"node scripts/merge-coverage.mjs","test:coverage:collect":"vitest run --coverage --coverage.reporter=json --coverage.thresholds.lines=0 --coverage.thresholds.functions=0 --coverage.thresholds.statements=0 --coverage.thresholds.branches=0"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:71485d21-a8c3-4f6c-ae40-dd60e3585161"}},"_resolved":"/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.5.4.tgz","_integrity":"sha512-lttlWKRBQU7eYDYykU2BPoF1S6AESGrT77mVCXsuWBxnRBTAI/PuGB89DB3D1lBCDaqTykIjymPJz4pFesGnkg==","repository":{"url":"git+https://github.com/openclaw/fs-safe.git","type":"git"},"_npmVersion":"12.0.1","description":"Capability-style filesystem roots for Node.js apps that handle untrusted relative paths.","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@10.34.5","devDependencies":{"vite":"8.2.1","vitest":"^4.1.10","sigstore":"5.0.0","fast-check":"^4.9.0","typescript":"^7.0.2","@types/node":"^26.2.0","@napi-rs/cli":"3.8.2","@emnapi/runtime":"2.0.0-alpha.3","istanbul-reports":"3.2.0","@vitest/coverage-v8":"4.1.10","istanbul-lib-report":"3.0.1","istanbul-lib-coverage":"3.2.2"},"optionalDependencies":{"tar":"7.5.22","jszip":"^3.10.1"},"_npmOperationalInternal":{"tmp":"tmp/fs-safe_0.5.4_1786368649187_0.2868149443225758","host":"s3://npm-registry-packages-npm-production"}},"0.5.5":{"name":"@openclaw/fs-safe","version":"0.5.5","keywords":["filesystem","openclaw","path-traversal","security","typescript"],"author":{"name":"OpenClaw Team","email":"dev@openclaw.ai"},"license":"MIT","_id":"@openclaw/fs-safe@0.5.5","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://fs-safe.io","bugs":{"url":"https://github.com/openclaw/fs-safe/issues"},"dist":{"shasum":"a8c820ccd495c0b1d8660f2bfc881363620503d7","tarball":"https://registry.npmjs.org/@openclaw/fs-safe/-/fs-safe-0.5.5.tgz","fileCount":437,"integrity":"sha512-x8wYigrOwmnsE8v4LfAh2eTvvkuDMspBrQeBp/GyB9/c7eFf8aL7gK4keewDbhscKX1pACD8Yd+ehZq6o29xHw==","signatures":[{"sig":"MEQCIEIIHDE3Xwc+6FribmOdRKQqZXEqulypmvMdegSwu5KBAiAnf7n4sP1ySHmXoXexvO0582kzZyt3HRspyIagQhQk4Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIAlpLlFElvlXVNSDQNk9+DtnreRpAw6BOIqYGGkNQ7k+AiEA99i8flXketi+D4K2V09edzpquyo50Fw1u18aQSHXmx8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@openclaw%2ffs-safe@0.5.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":17500321},"type":"module","_from":"file:/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.5.5.tgz","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./json":{"types":"./dist/json.d.ts","default":"./dist/json.js"},"./path":{"types":"./dist/path.d.ts","default":"./dist/path.js"},"./root":{"types":"./dist/root.d.ts","default":"./dist/root.js"},"./temp":{"types":"./dist/temp.d.ts","default":"./dist/temp.js"},"./walk":{"types":"./dist/walk.d.ts","default":"./dist/walk.js"},"./store":{"types":"./dist/store.d.ts","default":"./dist/store.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./atomic":{"types":"./dist/atomic.d.ts","default":"./dist/atomic.js"},"./config":{"types":"./dist/config.d.ts","default":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","default":"./dist/errors.js"},"./output":{"types":"./dist/output.d.ts","default":"./dist/output.js"},"./secret":{"types":"./dist/secret.d.ts","default":"./dist/secret.js"},"./archive":{"types":"./dist/archive.d.ts","default":"./dist/archive.js"},"./advanced":{"types":"./dist/advanced.d.ts","default":"./dist/advanced.js"},"./file-lock":{"types":"./dist/file-lock.d.ts","default":"./dist/file-lock.js"},"./durability":{"types":"./dist/durability.d.ts","default":"./dist/durability.js"},"./test-hooks":{"types":"./dist/test-hooks.d.ts","default":"./dist/test-hooks.js"},"./permissions":{"types":"./dist/permissions-public.d.ts","default":"./dist/permissions-public.js"},"./secure-file":{"types":"./dist/secure-file.d.ts","default":"./dist/secure-file.js"},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\" && tsc -p tsconfig.json","check":"pnpm lint:file-size && pnpm lint:fs-boundary && pnpm build && pnpm docs:check && pnpm test && node scripts/check-pack.mjs","prepack":"node scripts/prepack-build.mjs","benchmark":"node scripts/benchmark.mjs","docs:site":"node scripts/build-docs-site.mjs","docs:check":"node scripts/check-doc-examples.mjs","pack:check":"pnpm build && node scripts/check-pack.mjs","crabbox:run":"crabbox run","native:test":"cargo test --manifest-path native/Cargo.toml","crabbox:stop":"crabbox stop","native:build":"pnpm --filter @openclaw/fs-safe-native-build build","test:changed":"pnpm run test","check:changed":"pnpm run check","package:smoke":"node scripts/check-release-packages.mjs --allow-host-only --output release-artifacts","release:notes":"node scripts/release-notes.mjs","test:coverage":"vitest run --coverage","test:security":"vitest run test/fs-safe.test.ts test/read-boundary-bypass.test.ts test/write-boundary-bypass.test.ts test/additional-boundary-bypass.test.ts test/adversarial-boundary-payloads.test.ts","crabbox:warmup":"crabbox warmup","lint:file-size":"node scripts/check-file-size.mjs","crabbox:hydrate":"crabbox actions hydrate","lint:fs-boundary":"node scripts/check-fs-boundary-primitives.mjs","benchmark:publish":"pnpm build && node scripts/bench-publish.mjs","public-api:update":"pnpm build && node scripts/check-pack.mjs --update-public-api","test:coverage:merge":"node scripts/merge-coverage.mjs","test:coverage:collect":"vitest run --coverage --coverage.reporter=json --coverage.thresholds.lines=0 --coverage.thresholds.functions=0 --coverage.thresholds.statements=0 --coverage.thresholds.branches=0"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:71485d21-a8c3-4f6c-ae40-dd60e3585161"}},"_resolved":"/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.5.5.tgz","_integrity":"sha512-x8wYigrOwmnsE8v4LfAh2eTvvkuDMspBrQeBp/GyB9/c7eFf8aL7gK4keewDbhscKX1pACD8Yd+ehZq6o29xHw==","repository":{"url":"git+https://github.com/openclaw/fs-safe.git","type":"git"},"_npmVersion":"12.0.1","description":"Capability-style filesystem roots for Node.js apps that handle untrusted relative paths.","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@10.34.5","devDependencies":{"vite":"8.2.1","vitest":"^4.1.10","sigstore":"5.0.0","fast-check":"^4.9.0","typescript":"^7.0.2","@types/node":"^26.2.0","@napi-rs/cli":"3.8.2","@emnapi/runtime":"2.0.0-alpha.3","istanbul-reports":"3.2.0","@vitest/coverage-v8":"4.1.10","istanbul-lib-report":"3.0.1","istanbul-lib-coverage":"3.2.2"},"optionalDependencies":{"tar":"7.5.22","jszip":"^3.10.1"},"_npmOperationalInternal":{"tmp":"tmp/fs-safe_0.5.5_1786508203073_0.5913361942258659","host":"s3://npm-registry-packages-npm-production"}},"0.5.6":{"name":"@openclaw/fs-safe","version":"0.5.6","keywords":["filesystem","openclaw","path-traversal","security","typescript"],"author":{"name":"OpenClaw Team","email":"dev@openclaw.ai"},"license":"MIT","_id":"@openclaw/fs-safe@0.5.6","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://fs-safe.io","bugs":{"url":"https://github.com/openclaw/fs-safe/issues"},"dist":{"shasum":"7001bdd7db3e715a0da61fe8d0b86d947205243d","tarball":"https://registry.npmjs.org/@openclaw/fs-safe/-/fs-safe-0.5.6.tgz","fileCount":437,"integrity":"sha512-0M1vz1PEFAgCwTxhB1lt/B7z+TRTTWmlYJ3dSbdhjZp2AcfM7rXPGjQVJqHXpzpsb9SRxvKGrAM454Uul/Xy5g==","signatures":[{"sig":"MEQCIHOpwBFLfbilV4Y0QtFSHdh4Q5wgYt9eCWjZHZJvOHuRAiADPQmFCdauKCy7zYukA0H0663y3IrtSvSt51WiGqqhJg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIFK1eP8syRqcy+t7W+M1Cy9ZdqiDfrOvrKUQ1bfxZ8/WAiBN5Von4dKMIUugl5mprcCw1ojp8qkDGamINZD9IKsxxQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@openclaw%2ffs-safe@0.5.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":17504725},"type":"module","_from":"file:/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.5.6.tgz","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./json":{"types":"./dist/json.d.ts","default":"./dist/json.js"},"./path":{"types":"./dist/path.d.ts","default":"./dist/path.js"},"./root":{"types":"./dist/root.d.ts","default":"./dist/root.js"},"./temp":{"types":"./dist/temp.d.ts","default":"./dist/temp.js"},"./walk":{"types":"./dist/walk.d.ts","default":"./dist/walk.js"},"./store":{"types":"./dist/store.d.ts","default":"./dist/store.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./atomic":{"types":"./dist/atomic.d.ts","default":"./dist/atomic.js"},"./config":{"types":"./dist/config.d.ts","default":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","default":"./dist/errors.js"},"./output":{"types":"./dist/output.d.ts","default":"./dist/output.js"},"./secret":{"types":"./dist/secret.d.ts","default":"./dist/secret.js"},"./archive":{"types":"./dist/archive.d.ts","default":"./dist/archive.js"},"./advanced":{"types":"./dist/advanced.d.ts","default":"./dist/advanced.js"},"./file-lock":{"types":"./dist/file-lock.d.ts","default":"./dist/file-lock.js"},"./durability":{"types":"./dist/durability.d.ts","default":"./dist/durability.js"},"./test-hooks":{"types":"./dist/test-hooks.d.ts","default":"./dist/test-hooks.js"},"./permissions":{"types":"./dist/permissions-public.d.ts","default":"./dist/permissions-public.js"},"./secure-file":{"types":"./dist/secure-file.d.ts","default":"./dist/secure-file.js"},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\" && tsc -p tsconfig.json","check":"pnpm lint:file-size && pnpm lint:fs-boundary && pnpm build && pnpm docs:check && pnpm test && node scripts/check-pack.mjs","prepack":"node scripts/prepack-build.mjs","benchmark":"node scripts/benchmark.mjs","docs:site":"node scripts/build-docs-site.mjs","docs:check":"node scripts/check-doc-examples.mjs","pack:check":"pnpm build && node scripts/check-pack.mjs","crabbox:run":"crabbox run","native:test":"cargo test --manifest-path native/Cargo.toml","crabbox:stop":"crabbox stop","native:build":"pnpm --filter @openclaw/fs-safe-native-build build","test:changed":"pnpm run test","check:changed":"pnpm run check","package:smoke":"node scripts/check-release-packages.mjs --allow-host-only --output release-artifacts","release:notes":"node scripts/release-notes.mjs","test:coverage":"vitest run --coverage","test:security":"vitest run test/fs-safe.test.ts test/read-boundary-bypass.test.ts test/write-boundary-bypass.test.ts test/additional-boundary-bypass.test.ts test/adversarial-boundary-payloads.test.ts","crabbox:warmup":"crabbox warmup","lint:file-size":"node scripts/check-file-size.mjs","crabbox:hydrate":"crabbox actions hydrate","lint:fs-boundary":"node scripts/check-fs-boundary-primitives.mjs","benchmark:publish":"pnpm build && node scripts/bench-publish.mjs","public-api:update":"pnpm build && node scripts/check-pack.mjs --update-public-api","test:coverage:merge":"node scripts/merge-coverage.mjs","test:coverage:collect":"vitest run --coverage --coverage.reporter=json --coverage.thresholds.lines=0 --coverage.thresholds.functions=0 --coverage.thresholds.statements=0 --coverage.thresholds.branches=0"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:71485d21-a8c3-4f6c-ae40-dd60e3585161"}},"_resolved":"/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.5.6.tgz","_integrity":"sha512-0M1vz1PEFAgCwTxhB1lt/B7z+TRTTWmlYJ3dSbdhjZp2AcfM7rXPGjQVJqHXpzpsb9SRxvKGrAM454Uul/Xy5g==","repository":{"url":"git+https://github.com/openclaw/fs-safe.git","type":"git"},"_npmVersion":"12.0.1","description":"Capability-style filesystem roots for Node.js apps that handle untrusted relative paths.","directories":{},"sideEffects":false,"_nodeVersion":"24.19.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@10.34.5","devDependencies":{"vite":"8.2.1","vitest":"^4.1.10","sigstore":"5.0.0","fast-check":"^4.9.0","typescript":"^7.0.2","@types/node":"^26.2.0","@napi-rs/cli":"3.8.6","@emnapi/runtime":"2.0.0-alpha.3","istanbul-reports":"3.2.0","@vitest/coverage-v8":"4.1.10","istanbul-lib-report":"3.0.1","istanbul-lib-coverage":"3.2.2"},"optionalDependencies":{"tar":"7.5.22","jszip":"^3.10.1"},"_npmOperationalInternal":{"tmp":"tmp/fs-safe_0.5.6_1786738548274_0.09041546145639767","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@openclaw/fs-safe","version":"0.6.0","keywords":["filesystem","openclaw","path-traversal","security","typescript"],"author":{"name":"OpenClaw Team","email":"dev@openclaw.ai"},"license":"MIT","_id":"@openclaw/fs-safe@0.6.0","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://fs-safe.io","bugs":{"url":"https://github.com/openclaw/fs-safe/issues"},"dist":{"shasum":"e5ada8dcebcdbcb9f0b4e9a78c78bc4d41df4552","tarball":"https://registry.npmjs.org/@openclaw/fs-safe/-/fs-safe-0.6.0.tgz","fileCount":474,"integrity":"sha512-tO5m6zOtRwy+qYVGPzMsjD2W45n5efxAxH9yemaje/0gYibq/i+dJt/zFHkcIHYVccmdKJKjWat1F75igyr0Qw==","signatures":[{"sig":"MEQCICJ2kg4tU1SkyX0piU2k5nrlk7xMCGZSOIdnRx0JrZp7AiB8z1ycJpxYs4p0KCVOKul1Mo2QGAnQ5TNUBmRJG5HIzg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDdTKoGdTtgAcLI5YdCpp0uoFSuJOVAWj9NVnhNcFhwUgIhAMTN+T5ctVId2ZKwi5olASxI0NMafBinABrUoB8W3i6n","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@openclaw%2ffs-safe@0.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1394053},"type":"module","_from":"file:/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.6.0.tgz","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./json":{"types":"./dist/json.d.ts","default":"./dist/json.js"},"./path":{"types":"./dist/path.d.ts","default":"./dist/path.js"},"./root":{"types":"./dist/root.d.ts","default":"./dist/root.js"},"./temp":{"types":"./dist/temp.d.ts","default":"./dist/temp.js"},"./walk":{"types":"./dist/walk.d.ts","default":"./dist/walk.js"},"./store":{"types":"./dist/store.d.ts","default":"./dist/store.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./atomic":{"types":"./dist/atomic.d.ts","default":"./dist/atomic.js"},"./config":{"types":"./dist/config.d.ts","default":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","default":"./dist/errors.js"},"./output":{"types":"./dist/output.d.ts","default":"./dist/output.js"},"./secret":{"types":"./dist/secret.d.ts","default":"./dist/secret.js"},"./archive":{"types":"./dist/archive.d.ts","default":"./dist/archive.js"},"./advanced":{"types":"./dist/advanced.d.ts","default":"./dist/advanced.js"},"./file-lock":{"types":"./dist/file-lock.d.ts","default":"./dist/file-lock.js"},"./durability":{"types":"./dist/durability.d.ts","default":"./dist/durability.js"},"./test-hooks":{"types":"./dist/test-hooks.d.ts","default":"./dist/test-hooks.js"},"./permissions":{"types":"./dist/permissions-public.d.ts","default":"./dist/permissions-public.js"},"./secure-file":{"types":"./dist/secure-file.d.ts","default":"./dist/secure-file.js"},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\" && tsc -p tsconfig.json","check":"pnpm lint:file-size && pnpm lint:fs-boundary && pnpm build && pnpm docs:check && pnpm test && node scripts/check-pack.mjs","prepack":"node scripts/prepack-build.mjs","benchmark":"node scripts/benchmark.mjs","docs:site":"node scripts/build-docs-site.mjs","docs:check":"node scripts/check-doc-examples.mjs","pack:check":"pnpm build && node scripts/check-pack.mjs","crabbox:run":"crabbox run","native:test":"cargo test --manifest-path native/Cargo.toml","crabbox:stop":"crabbox stop","native:build":"pnpm --filter @openclaw/fs-safe-native-build build","test:changed":"pnpm run test","check:changed":"pnpm run check","package:smoke":"node scripts/check-release-packages.mjs --allow-host-only --output release-artifacts","release:notes":"node scripts/release-notes.mjs","test:coverage":"vitest run --coverage","test:security":"vitest run test/fs-safe.test.ts test/read-boundary-bypass.test.ts test/write-boundary-bypass.test.ts test/additional-boundary-bypass.test.ts test/adversarial-boundary-payloads.test.ts","crabbox:warmup":"crabbox warmup","lint:file-size":"node scripts/check-file-size.mjs","crabbox:hydrate":"crabbox actions hydrate","package:collect":"node scripts/check-release-packages.mjs --output release-artifacts","lint:fs-boundary":"node scripts/check-fs-boundary-primitives.mjs","benchmark:publish":"pnpm build && node scripts/bench-publish.mjs","public-api:update":"pnpm build && node scripts/check-pack.mjs --update-public-api","test:coverage:merge":"node scripts/merge-coverage.mjs","test:coverage:collect":"vitest run --coverage --coverage.reporter=json --coverage.thresholds.lines=0 --coverage.thresholds.functions=0 --coverage.thresholds.statements=0 --coverage.thresholds.branches=0"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:71485d21-a8c3-4f6c-ae40-dd60e3585161"}},"_resolved":"/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.6.0.tgz","_integrity":"sha512-tO5m6zOtRwy+qYVGPzMsjD2W45n5efxAxH9yemaje/0gYibq/i+dJt/zFHkcIHYVccmdKJKjWat1F75igyr0Qw==","repository":{"url":"git+https://github.com/openclaw/fs-safe.git","type":"git"},"_npmVersion":"12.0.2","description":"Capability-style filesystem roots for Node.js apps that handle untrusted relative paths.","directories":{},"sideEffects":false,"_nodeVersion":"24.19.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@11.24.0","devDependencies":{"vite":"8.2.2","vitest":"^4.1.11","sigstore":"5.0.0","fast-check":"^4.9.0","typescript":"^7.0.2","@types/node":"^26.3.0","@napi-rs/cli":"3.8.6","@emnapi/runtime":"2.0.0-alpha.4","istanbul-reports":"3.2.0","@vitest/coverage-v8":"4.1.11","istanbul-lib-report":"3.0.1","istanbul-lib-coverage":"3.2.2"},"optionalDependencies":{"tar":"7.5.22","jszip":"^3.10.1","@openclaw/fs-safe-darwin-x64":"0.6.0","@openclaw/fs-safe-darwin-arm64":"0.6.0","@openclaw/fs-safe-linux-x64-gnu":"0.6.0","@openclaw/fs-safe-linux-x64-musl":"0.6.0","@openclaw/fs-safe-win32-x64-msvc":"0.6.0","@openclaw/fs-safe-linux-arm64-gnu":"0.6.0","@openclaw/fs-safe-linux-arm64-musl":"0.6.0"},"_npmOperationalInternal":{"tmp":"tmp/fs-safe_0.6.0_1788030089477_0.8056912032448875","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@openclaw/fs-safe","version":"0.7.0","keywords":["filesystem","openclaw","path-traversal","security","typescript"],"author":{"name":"OpenClaw Team","email":"dev@openclaw.ai"},"license":"MIT","_id":"@openclaw/fs-safe@0.7.0","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://fs-safe.io","bugs":{"url":"https://github.com/openclaw/fs-safe/issues"},"dist":{"shasum":"09dc6e8d5339c80c73f33dccb1ecf4ee431ea487","tarball":"https://registry.npmjs.org/@openclaw/fs-safe/-/fs-safe-0.7.0.tgz","fileCount":519,"integrity":"sha512-i+0a4yQYa4ThUahaSLMledG99AL38XdAn8q/ppVMr49zr0dsOO+1gf8Jz6jgI0ggdcq6U4IhgsNunACsSymjyA==","signatures":[{"sig":"MEYCIQC9FswO9JD8b/fc2w1zsp+xvIXJluk1fEgIwKk7t1kt6QIhAOF8p3ibfbIabrsoaez4BXtsi0io6w6ChAnI1gCTIKBK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIFMUfkBZ5sLH60hu8bkGcP5KSDPhQIo4gIQyvmCfaKKRAiBAj8MWC/nXqUguZDvPgdI38Vle9HQHVLRoHJx7FqcuXA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@openclaw%2ffs-safe@0.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1539599},"type":"module","_from":"file:/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.7.0.tgz","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./json":{"types":"./dist/json.d.ts","default":"./dist/json.js"},"./path":{"types":"./dist/path.d.ts","default":"./dist/path.js"},"./root":{"types":"./dist/root.d.ts","default":"./dist/root.js"},"./temp":{"types":"./dist/temp.d.ts","default":"./dist/temp.js"},"./walk":{"types":"./dist/walk.d.ts","default":"./dist/walk.js"},"./store":{"types":"./dist/store.d.ts","default":"./dist/store.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./atomic":{"types":"./dist/atomic.d.ts","default":"./dist/atomic.js"},"./config":{"types":"./dist/config.d.ts","default":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","default":"./dist/errors.js"},"./output":{"types":"./dist/output.d.ts","default":"./dist/output.js"},"./secret":{"types":"./dist/secret.d.ts","default":"./dist/secret.js"},"./archive":{"types":"./dist/archive.d.ts","default":"./dist/archive.js"},"./advanced":{"types":"./dist/advanced.d.ts","default":"./dist/advanced.js"},"./file-lock":{"types":"./dist/file-lock.d.ts","default":"./dist/file-lock.js"},"./durability":{"types":"./dist/durability.d.ts","default":"./dist/durability.js"},"./test-hooks":{"types":"./dist/test-hooks.d.ts","default":"./dist/test-hooks.js"},"./permissions":{"types":"./dist/permissions-public.d.ts","default":"./dist/permissions-public.js"},"./secure-file":{"types":"./dist/secure-file.d.ts","default":"./dist/secure-file.js"},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\" && tsc -p tsconfig.json","check":"pnpm lint:file-size && pnpm lint:fs-boundary && pnpm build && pnpm docs:check && pnpm test && node scripts/check-pack.mjs","prepack":"node scripts/prepack-build.mjs","benchmark":"node scripts/benchmark.mjs","docs:site":"node scripts/build-docs-site.mjs","docs:check":"node scripts/check-doc-examples.mjs","pack:check":"pnpm build && node scripts/check-pack.mjs","crabbox:run":"crabbox run","native:test":"cargo test --manifest-path native/Cargo.toml","crabbox:stop":"crabbox stop","native:build":"pnpm --filter @openclaw/fs-safe-native-build build","test:changed":"pnpm run test","check:changed":"pnpm run check","package:smoke":"node scripts/check-release-packages.mjs --allow-host-only --output release-artifacts","release:notes":"node scripts/release-notes.mjs","test:coverage":"vitest run --coverage","test:security":"vitest run test/fs-safe.test.ts test/read-boundary-bypass.test.ts test/write-boundary-bypass.test.ts test/additional-boundary-bypass.test.ts test/adversarial-boundary-payloads.test.ts","crabbox:warmup":"crabbox warmup","lint:file-size":"node scripts/check-file-size.mjs","crabbox:hydrate":"crabbox actions hydrate","package:collect":"node scripts/check-release-packages.mjs --output release-artifacts","lint:fs-boundary":"node scripts/check-fs-boundary-primitives.mjs","benchmark:publish":"pnpm build && node scripts/bench-publish.mjs","public-api:update":"pnpm build && node scripts/check-pack.mjs --update-public-api","test:coverage:merge":"node scripts/merge-coverage.mjs","test:coverage:collect":"pnpm build && vitest run --coverage --coverage.reporter=json --coverage.thresholds.lines=0 --coverage.thresholds.functions=0 --coverage.thresholds.statements=0 --coverage.thresholds.branches=0"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:71485d21-a8c3-4f6c-ae40-dd60e3585161"}},"_resolved":"/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.7.0.tgz","_integrity":"sha512-i+0a4yQYa4ThUahaSLMledG99AL38XdAn8q/ppVMr49zr0dsOO+1gf8Jz6jgI0ggdcq6U4IhgsNunACsSymjyA==","repository":{"url":"git+https://github.com/openclaw/fs-safe.git","type":"git"},"_npmVersion":"12.0.2","description":"Capability-style filesystem roots for Node.js apps that handle untrusted relative paths.","directories":{},"sideEffects":false,"_nodeVersion":"24.19.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@11.24.0","devDependencies":{"vite":"8.2.2","vitest":"^4.1.11","sigstore":"5.0.0","fast-check":"^4.9.0","typescript":"^7.0.2","@types/node":"^26.4.0","@napi-rs/cli":"3.8.6","@emnapi/runtime":"2.0.0-alpha.4","istanbul-reports":"3.2.0","@vitest/coverage-v8":"4.1.11","istanbul-lib-report":"3.0.1","istanbul-lib-coverage":"3.2.2"},"optionalDependencies":{"tar":"7.5.22","jszip":"^3.10.1","@openclaw/fs-safe-darwin-x64":"0.7.0","@openclaw/fs-safe-darwin-arm64":"0.7.0","@openclaw/fs-safe-linux-x64-gnu":"0.7.0","@openclaw/fs-safe-linux-x64-musl":"0.7.0","@openclaw/fs-safe-win32-x64-msvc":"0.7.0","@openclaw/fs-safe-linux-arm64-gnu":"0.7.0","@openclaw/fs-safe-linux-arm64-musl":"0.7.0"},"_npmOperationalInternal":{"tmp":"tmp/fs-safe_0.7.0_1788193790610_0.4768946628852315","host":"s3://npm-registry-packages-npm-production"}},"0.7.1":{"name":"@openclaw/fs-safe","version":"0.7.1","keywords":["filesystem","openclaw","path-traversal","security","typescript"],"author":{"name":"OpenClaw Team","email":"dev@openclaw.ai"},"license":"MIT","_id":"@openclaw/fs-safe@0.7.1","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://fs-safe.io","bugs":{"url":"https://github.com/openclaw/fs-safe/issues"},"dist":{"shasum":"e68a589c031ce18d674079100d61dfd55ff05f6c","tarball":"https://registry.npmjs.org/@openclaw/fs-safe/-/fs-safe-0.7.1.tgz","fileCount":528,"integrity":"sha512-wxvJNMygGEFnrYvnjsNA4UiFxRYQd839q/Ps5qeIYYxxcgI5sOR6ynH57uJQ2bOeIvsQCI3phpyelhaUs1Oy/Q==","signatures":[{"sig":"MEUCIQDJ3VIt/qbtIQ7raAlXFnD14vlJEAKpR2AH++bKbUGEtQIgMvZUdB2Mog1xzYSXYnAopndj+JdmnAv2o+JYHAQpgtE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIGzT5a6cT4LjR1c36QlyNaT267v0c42krDHlNumG+fN0AiB06KvjBYil1JkILMkwIZGvwEACai7jfgy+QWCYci1SYA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@openclaw%2ffs-safe@0.7.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1565382},"type":"module","_from":"file:/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.7.1.tgz","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./json":{"types":"./dist/json.d.ts","default":"./dist/json.js"},"./path":{"types":"./dist/path.d.ts","default":"./dist/path.js"},"./root":{"types":"./dist/root.d.ts","default":"./dist/root.js"},"./temp":{"types":"./dist/temp.d.ts","default":"./dist/temp.js"},"./walk":{"types":"./dist/walk.d.ts","default":"./dist/walk.js"},"./store":{"types":"./dist/store.d.ts","default":"./dist/store.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./atomic":{"types":"./dist/atomic.d.ts","default":"./dist/atomic.js"},"./config":{"types":"./dist/config.d.ts","default":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","default":"./dist/errors.js"},"./output":{"types":"./dist/output.d.ts","default":"./dist/output.js"},"./secret":{"types":"./dist/secret.d.ts","default":"./dist/secret.js"},"./archive":{"types":"./dist/archive.d.ts","default":"./dist/archive.js"},"./advanced":{"types":"./dist/advanced.d.ts","default":"./dist/advanced.js"},"./file-lock":{"types":"./dist/file-lock.d.ts","default":"./dist/file-lock.js"},"./durability":{"types":"./dist/durability.d.ts","default":"./dist/durability.js"},"./test-hooks":{"types":"./dist/test-hooks.d.ts","default":"./dist/test-hooks.js"},"./permissions":{"types":"./dist/permissions-public.d.ts","default":"./dist/permissions-public.js"},"./secure-file":{"types":"./dist/secure-file.d.ts","default":"./dist/secure-file.js"},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\" && tsc -p tsconfig.json","check":"pnpm lint:file-size && pnpm lint:fs-boundary && pnpm build && pnpm docs:check && pnpm test && node scripts/check-pack.mjs","prepack":"node scripts/prepack-build.mjs","benchmark":"node scripts/benchmark.mjs","docs:site":"node scripts/build-docs-site.mjs","docs:check":"node scripts/check-doc-examples.mjs","pack:check":"pnpm build && node scripts/check-pack.mjs","crabbox:run":"crabbox run","native:test":"cargo test --manifest-path native/Cargo.toml","crabbox:stop":"crabbox stop","native:build":"pnpm --filter @openclaw/fs-safe-native-build build","test:changed":"pnpm run test","check:changed":"pnpm run check","package:smoke":"node scripts/check-release-packages.mjs --allow-host-only --output release-artifacts","release:notes":"node scripts/release-notes.mjs","test:coverage":"vitest run --coverage","test:security":"vitest run test/fs-safe.test.ts test/read-boundary-bypass.test.ts test/write-boundary-bypass.test.ts test/additional-boundary-bypass.test.ts test/adversarial-boundary-payloads.test.ts","crabbox:warmup":"crabbox warmup","lint:file-size":"node scripts/check-file-size.mjs","crabbox:hydrate":"crabbox actions hydrate","package:collect":"node scripts/check-release-packages.mjs --output release-artifacts","lint:fs-boundary":"node scripts/check-fs-boundary-primitives.mjs","benchmark:publish":"pnpm build && node scripts/bench-publish.mjs","public-api:update":"pnpm build && node scripts/check-pack.mjs --update-public-api","test:coverage:merge":"node scripts/merge-coverage.mjs","test:coverage:collect":"pnpm build && vitest run --coverage --coverage.reporter=json --coverage.thresholds.lines=0 --coverage.thresholds.functions=0 --coverage.thresholds.statements=0 --coverage.thresholds.branches=0"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:71485d21-a8c3-4f6c-ae40-dd60e3585161"}},"_resolved":"/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.7.1.tgz","_integrity":"sha512-wxvJNMygGEFnrYvnjsNA4UiFxRYQd839q/Ps5qeIYYxxcgI5sOR6ynH57uJQ2bOeIvsQCI3phpyelhaUs1Oy/Q==","repository":{"url":"git+https://github.com/openclaw/fs-safe.git","type":"git"},"_npmVersion":"12.0.2","description":"Capability-style filesystem roots for Node.js apps that handle untrusted relative paths.","directories":{},"sideEffects":false,"_nodeVersion":"24.19.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@11.24.0","devDependencies":{"vite":"8.2.2","vitest":"^4.1.11","sigstore":"5.0.0","fast-check":"^4.9.0","typescript":"^7.0.2","@types/node":"^26.4.0","@napi-rs/cli":"3.8.6","@emnapi/runtime":"2.0.0-alpha.4","istanbul-reports":"3.2.0","@vitest/coverage-v8":"4.1.11","istanbul-lib-report":"3.0.1","istanbul-lib-coverage":"3.2.2"},"optionalDependencies":{"tar":"7.5.22","jszip":"^3.10.1","@openclaw/fs-safe-darwin-x64":"0.7.1","@openclaw/fs-safe-darwin-arm64":"0.7.1","@openclaw/fs-safe-linux-x64-gnu":"0.7.1","@openclaw/fs-safe-linux-x64-musl":"0.7.1","@openclaw/fs-safe-win32-x64-msvc":"0.7.1","@openclaw/fs-safe-linux-arm64-gnu":"0.7.1","@openclaw/fs-safe-linux-arm64-musl":"0.7.1"},"_npmOperationalInternal":{"tmp":"tmp/fs-safe_0.7.1_1788286861851_0.9548135179696122","host":"s3://npm-registry-packages-npm-production"}},"0.7.2":{"name":"@openclaw/fs-safe","version":"0.7.2","keywords":["filesystem","openclaw","path-traversal","security","typescript"],"author":{"name":"OpenClaw Team","email":"dev@openclaw.ai"},"license":"MIT","_id":"@openclaw/fs-safe@0.7.2","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://fs-safe.io","bugs":{"url":"https://github.com/openclaw/fs-safe/issues"},"dist":{"shasum":"fd1180e767298c733f21eb3f203dde5db9aaca56","tarball":"https://registry.npmjs.org/@openclaw/fs-safe/-/fs-safe-0.7.2.tgz","fileCount":528,"integrity":"sha512-Ls27+zwLKg7uomERaYeFFzKlhFH7A/T6PsQue/9JcLmJWS29041C/PcCaLH/r9Xajvk691EFkaNAq8lcKR75ew==","signatures":[{"sig":"MEUCIQDFvlvNbz0410On076gE/9JyFksKu82GlO3caafr8PUNAIgMLXpdzxtGU/fxAlMpHorW0Rjwgi5fGsxJ85M4KKaqp4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQD8F3dwJLMcZWV5QUOvsG7LVFNZ9eRjgjpoyhc7l8h21wIgLtlepC1E8xdZpKeQdui5I9AdBQjsnJeWycgkPkqQYUI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@openclaw%2ffs-safe@0.7.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1568355},"type":"module","_from":"file:/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.7.2.tgz","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./json":{"types":"./dist/json.d.ts","default":"./dist/json.js"},"./path":{"types":"./dist/path.d.ts","default":"./dist/path.js"},"./root":{"types":"./dist/root.d.ts","default":"./dist/root.js"},"./temp":{"types":"./dist/temp.d.ts","default":"./dist/temp.js"},"./walk":{"types":"./dist/walk.d.ts","default":"./dist/walk.js"},"./store":{"types":"./dist/store.d.ts","default":"./dist/store.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./atomic":{"types":"./dist/atomic.d.ts","default":"./dist/atomic.js"},"./config":{"types":"./dist/config.d.ts","default":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","default":"./dist/errors.js"},"./output":{"types":"./dist/output.d.ts","default":"./dist/output.js"},"./secret":{"types":"./dist/secret.d.ts","default":"./dist/secret.js"},"./archive":{"types":"./dist/archive.d.ts","default":"./dist/archive.js"},"./advanced":{"types":"./dist/advanced.d.ts","default":"./dist/advanced.js"},"./file-lock":{"types":"./dist/file-lock.d.ts","default":"./dist/file-lock.js"},"./durability":{"types":"./dist/durability.d.ts","default":"./dist/durability.js"},"./test-hooks":{"types":"./dist/test-hooks.d.ts","default":"./dist/test-hooks.js"},"./permissions":{"types":"./dist/permissions-public.d.ts","default":"./dist/permissions-public.js"},"./secure-file":{"types":"./dist/secure-file.d.ts","default":"./dist/secure-file.js"},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\" && tsc -p tsconfig.json","check":"pnpm lint:file-size && pnpm lint:fs-boundary && pnpm build && pnpm docs:check && pnpm test && node scripts/check-pack.mjs","prepack":"node scripts/prepack-build.mjs","benchmark":"node scripts/benchmark.mjs","docs:site":"node scripts/build-docs-site.mjs","docs:check":"node scripts/check-doc-examples.mjs","pack:check":"pnpm build && node scripts/check-pack.mjs","crabbox:run":"crabbox run","native:test":"cargo test --manifest-path native/Cargo.toml","crabbox:stop":"crabbox stop","native:build":"pnpm --filter @openclaw/fs-safe-native-build build","test:changed":"pnpm run test","check:changed":"pnpm run check","package:smoke":"node scripts/check-release-packages.mjs --allow-host-only --output release-artifacts","release:notes":"node scripts/release-notes.mjs","test:coverage":"vitest run --coverage","test:security":"vitest run test/fs-safe.test.ts test/read-boundary-bypass.test.ts test/write-boundary-bypass.test.ts test/additional-boundary-bypass.test.ts test/adversarial-boundary-payloads.test.ts","crabbox:warmup":"crabbox warmup","lint:file-size":"node scripts/check-file-size.mjs","crabbox:hydrate":"crabbox actions hydrate","package:collect":"node scripts/check-release-packages.mjs --output release-artifacts","lint:fs-boundary":"node scripts/check-fs-boundary-primitives.mjs","benchmark:publish":"pnpm build && node scripts/bench-publish.mjs","public-api:update":"pnpm build && node scripts/check-pack.mjs --update-public-api","test:coverage:merge":"node scripts/merge-coverage.mjs","test:coverage:collect":"pnpm build && vitest run --coverage --coverage.reporter=json --coverage.thresholds.lines=0 --coverage.thresholds.functions=0 --coverage.thresholds.statements=0 --coverage.thresholds.branches=0"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:71485d21-a8c3-4f6c-ae40-dd60e3585161"}},"_resolved":"/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.7.2.tgz","_integrity":"sha512-Ls27+zwLKg7uomERaYeFFzKlhFH7A/T6PsQue/9JcLmJWS29041C/PcCaLH/r9Xajvk691EFkaNAq8lcKR75ew==","repository":{"url":"git+https://github.com/openclaw/fs-safe.git","type":"git"},"_npmVersion":"12.0.2","description":"Capability-style filesystem roots for Node.js apps that handle untrusted relative paths.","directories":{},"sideEffects":false,"_nodeVersion":"24.19.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@11.24.0","devDependencies":{"vite":"8.2.2","vitest":"^4.1.11","sigstore":"5.0.0","fast-check":"^4.9.0","typescript":"^7.0.2","@types/node":"^26.4.0","@napi-rs/cli":"3.8.6","@emnapi/runtime":"2.0.0-alpha.4","istanbul-reports":"3.2.0","@vitest/coverage-v8":"4.1.11","istanbul-lib-report":"3.0.1","istanbul-lib-coverage":"3.2.2"},"optionalDependencies":{"tar":"7.5.22","jszip":"^3.10.1","@openclaw/fs-safe-darwin-x64":"0.7.2","@openclaw/fs-safe-darwin-arm64":"0.7.2","@openclaw/fs-safe-linux-x64-gnu":"0.7.2","@openclaw/fs-safe-linux-x64-musl":"0.7.2","@openclaw/fs-safe-win32-x64-msvc":"0.7.2","@openclaw/fs-safe-linux-arm64-gnu":"0.7.2","@openclaw/fs-safe-linux-arm64-musl":"0.7.2"},"_npmOperationalInternal":{"tmp":"tmp/fs-safe_0.7.2_1788292667197_0.9420548276761129","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@openclaw/fs-safe","version":"0.8.0","keywords":["filesystem","openclaw","path-traversal","security","typescript"],"author":{"name":"OpenClaw Team","email":"dev@openclaw.ai"},"license":"MIT","_id":"@openclaw/fs-safe@0.8.0","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://fs-safe.io","bugs":{"url":"https://github.com/openclaw/fs-safe/issues"},"dist":{"shasum":"00d858e361f49fc1993945abfa025668c42e66b5","tarball":"https://registry.npmjs.org/@openclaw/fs-safe/-/fs-safe-0.8.0.tgz","fileCount":543,"integrity":"sha512-RS2YgIn4Zpp0q56KEsFxbH093Dlx2Iq8fNfTEEawNDPxfeQ7hiXSaAbU1HhNvfh3aAYXHJH06lCg0qtChqpAVw==","signatures":[{"sig":"MEQCIFsdGCywtH8RPuyp3dMfzrBbNCn3Pt+tFnsMSAX6xBziAiARZ+Xh4M2oYeSZUhw+WzBbHNQ7dQjaaY7Fyx70EyQfuQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCdpJaLCKcu1/gmECTeKGo7+ggndJvHvTkuSr2bL/ux0QIgG8nbgnrkZ2P663rx/x1T424f0fCLeKzSLr8yQfJB+DQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@openclaw%2ffs-safe@0.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1647477},"type":"module","_from":"file:/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.8.0.tgz","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./json":{"types":"./dist/json.d.ts","default":"./dist/json.js"},"./path":{"types":"./dist/path.d.ts","default":"./dist/path.js"},"./root":{"types":"./dist/root.d.ts","default":"./dist/root.js"},"./temp":{"types":"./dist/temp.d.ts","default":"./dist/temp.js"},"./walk":{"types":"./dist/walk.d.ts","default":"./dist/walk.js"},"./store":{"types":"./dist/store.d.ts","default":"./dist/store.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./atomic":{"types":"./dist/atomic.d.ts","default":"./dist/atomic.js"},"./config":{"types":"./dist/config.d.ts","default":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","default":"./dist/errors.js"},"./output":{"types":"./dist/output.d.ts","default":"./dist/output.js"},"./secret":{"types":"./dist/secret.d.ts","default":"./dist/secret.js"},"./archive":{"types":"./dist/archive.d.ts","default":"./dist/archive.js"},"./advanced":{"types":"./dist/advanced.d.ts","default":"./dist/advanced.js"},"./file-lock":{"types":"./dist/file-lock.d.ts","default":"./dist/file-lock.js"},"./durability":{"types":"./dist/durability.d.ts","default":"./dist/durability.js"},"./test-hooks":{"types":"./dist/test-hooks.d.ts","default":"./dist/test-hooks.js"},"./permissions":{"types":"./dist/permissions-public.d.ts","default":"./dist/permissions-public.js"},"./secure-file":{"types":"./dist/secure-file.d.ts","default":"./dist/secure-file.js"},"./package.json":"./package.json","./secure-temp-root":{"types":"./dist/secure-temp-dir.d.ts","default":"./dist/secure-temp-dir.js"}},"scripts":{"test":"vitest run","build":"node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\" && tsc -p tsconfig.json","check":"pnpm lint:file-size && pnpm lint:fs-boundary && pnpm build && pnpm docs:check && pnpm test && node scripts/check-pack.mjs","prepack":"node scripts/prepack-build.mjs","benchmark":"node scripts/benchmark.mjs","docs:site":"node scripts/build-docs-site.mjs","docs:check":"node scripts/check-doc-examples.mjs","pack:check":"pnpm build && node scripts/check-pack.mjs","crabbox:run":"crabbox run","native:test":"cargo test --manifest-path native/Cargo.toml","crabbox:stop":"crabbox stop","native:build":"pnpm --filter @openclaw/fs-safe-native-build build","test:changed":"pnpm run test","check:changed":"pnpm run check","package:smoke":"node scripts/check-release-packages.mjs --allow-host-only --output release-artifacts","release:notes":"node scripts/release-notes.mjs","test:coverage":"vitest run --coverage","test:security":"vitest run test/fs-safe.test.ts test/read-boundary-bypass.test.ts test/write-boundary-bypass.test.ts test/additional-boundary-bypass.test.ts test/adversarial-boundary-payloads.test.ts","crabbox:warmup":"crabbox warmup","lint:file-size":"node scripts/check-file-size.mjs","crabbox:hydrate":"crabbox actions hydrate","package:collect":"node scripts/check-release-packages.mjs --output release-artifacts","lint:fs-boundary":"node scripts/check-fs-boundary-primitives.mjs","benchmark:publish":"pnpm build && node scripts/bench-publish.mjs","public-api:update":"pnpm build && node scripts/check-pack.mjs --update-public-api","test:coverage:merge":"node scripts/merge-coverage.mjs","test:coverage:collect":"pnpm build && vitest run --coverage --coverage.reporter=json --coverage.thresholds.lines=0 --coverage.thresholds.functions=0 --coverage.thresholds.statements=0 --coverage.thresholds.branches=0"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:71485d21-a8c3-4f6c-ae40-dd60e3585161"}},"_resolved":"/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.8.0.tgz","_integrity":"sha512-RS2YgIn4Zpp0q56KEsFxbH093Dlx2Iq8fNfTEEawNDPxfeQ7hiXSaAbU1HhNvfh3aAYXHJH06lCg0qtChqpAVw==","repository":{"url":"git+https://github.com/openclaw/fs-safe.git","type":"git"},"_npmVersion":"12.0.2","description":"Capability-style filesystem roots for Node.js apps that handle untrusted relative paths.","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@11.25.0","devDependencies":{"vite":"8.2.2","vitest":"^4.1.11","sigstore":"5.0.0","fast-check":"^4.9.0","typescript":"^7.0.2","@types/node":"^26.4.1","@napi-rs/cli":"3.8.6","@emnapi/runtime":"2.0.0-alpha.4","istanbul-reports":"3.2.0","@vitest/coverage-v8":"4.1.11","istanbul-lib-report":"3.0.1","istanbul-lib-coverage":"3.2.2"},"optionalDependencies":{"tar":"7.5.22","jszip":"^3.10.1","@openclaw/fs-safe-darwin-x64":"0.8.0","@openclaw/fs-safe-darwin-arm64":"0.8.0","@openclaw/fs-safe-linux-x64-gnu":"0.8.0","@openclaw/fs-safe-linux-x64-musl":"0.8.0","@openclaw/fs-safe-win32-x64-msvc":"0.8.0","@openclaw/fs-safe-linux-arm64-gnu":"0.8.0","@openclaw/fs-safe-linux-arm64-musl":"0.8.0"},"_npmOperationalInternal":{"tmp":"tmp/fs-safe_0.8.0_1788543989360_0.8777547900008977","host":"s3://npm-registry-packages-npm-production"}},"0.8.1":{"name":"@openclaw/fs-safe","version":"0.8.1","keywords":["filesystem","openclaw","path-traversal","security","typescript"],"author":{"name":"OpenClaw Team","email":"dev@openclaw.ai"},"license":"MIT","_id":"@openclaw/fs-safe@0.8.1","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://fs-safe.io","bugs":{"url":"https://github.com/openclaw/fs-safe/issues"},"dist":{"shasum":"f9b05e1f306153a4887dddadf77a859ee9228917","tarball":"https://registry.npmjs.org/@openclaw/fs-safe/-/fs-safe-0.8.1.tgz","fileCount":543,"integrity":"sha512-I11v+xiet4RCE1G1bmWFLEMmd9nBnZMmKqHPT9gkqVtoqacY7GtFvpt1O7cffUDD6C2YlAt7Z5Z2Vlbq5rYxDg==","signatures":[{"sig":"MEQCIDTuaEXNvcK6BpfxIFQEcfLINtjKu/AvF7aIZKLB6wNUAiBPJnFrJaF3qi6rL+a84CVLroBPVNRlxg5JY/6JWR/9+w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQC7k2fCrgTxkSdtI9OCi5xtwEeFP6vQ79vfoF/AjxqXQgIgIKYVgRTllRsY2SAqWoL6ih9d2BVK6LuJ3yIXLOKNDLs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@openclaw%2ffs-safe@0.8.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1650270},"type":"module","_from":"file:/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.8.1.tgz","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./json":{"types":"./dist/json.d.ts","default":"./dist/json.js"},"./path":{"types":"./dist/path.d.ts","default":"./dist/path.js"},"./root":{"types":"./dist/root.d.ts","default":"./dist/root.js"},"./temp":{"types":"./dist/temp.d.ts","default":"./dist/temp.js"},"./walk":{"types":"./dist/walk.d.ts","default":"./dist/walk.js"},"./store":{"types":"./dist/store.d.ts","default":"./dist/store.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./atomic":{"types":"./dist/atomic.d.ts","default":"./dist/atomic.js"},"./config":{"types":"./dist/config.d.ts","default":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","default":"./dist/errors.js"},"./output":{"types":"./dist/output.d.ts","default":"./dist/output.js"},"./secret":{"types":"./dist/secret.d.ts","default":"./dist/secret.js"},"./archive":{"types":"./dist/archive.d.ts","default":"./dist/archive.js"},"./advanced":{"types":"./dist/advanced.d.ts","default":"./dist/advanced.js"},"./file-lock":{"types":"./dist/file-lock.d.ts","default":"./dist/file-lock.js"},"./durability":{"types":"./dist/durability.d.ts","default":"./dist/durability.js"},"./test-hooks":{"types":"./dist/test-hooks.d.ts","default":"./dist/test-hooks.js"},"./permissions":{"types":"./dist/permissions-public.d.ts","default":"./dist/permissions-public.js"},"./secure-file":{"types":"./dist/secure-file.d.ts","default":"./dist/secure-file.js"},"./package.json":"./package.json","./secure-temp-root":{"types":"./dist/secure-temp-dir.d.ts","default":"./dist/secure-temp-dir.js"}},"scripts":{"test":"vitest run","build":"node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\" && tsc -p tsconfig.json","check":"pnpm lint:file-size && pnpm lint:fs-boundary && pnpm build && pnpm docs:check && pnpm test && node scripts/check-pack.mjs","prepack":"node scripts/prepack-build.mjs","benchmark":"node scripts/benchmark.mjs","docs:site":"node scripts/build-docs-site.mjs","docs:check":"node scripts/check-doc-examples.mjs","pack:check":"pnpm build && node scripts/check-pack.mjs","crabbox:run":"crabbox run","native:test":"cargo test --manifest-path native/Cargo.toml","crabbox:stop":"crabbox stop","native:build":"pnpm --filter @openclaw/fs-safe-native-build build","test:changed":"pnpm run test","check:changed":"pnpm run check","package:smoke":"node scripts/check-release-packages.mjs --allow-host-only --output release-artifacts","release:notes":"node scripts/release-notes.mjs","test:coverage":"vitest run --coverage","test:security":"vitest run test/fs-safe.test.ts test/read-boundary-bypass.test.ts test/write-boundary-bypass.test.ts test/additional-boundary-bypass.test.ts test/adversarial-boundary-payloads.test.ts","crabbox:warmup":"crabbox warmup","lint:file-size":"node scripts/check-file-size.mjs","crabbox:hydrate":"crabbox actions hydrate","package:collect":"node scripts/check-release-packages.mjs --output release-artifacts","lint:fs-boundary":"node scripts/check-fs-boundary-primitives.mjs","benchmark:publish":"pnpm build && node scripts/bench-publish.mjs","public-api:update":"pnpm build && node scripts/check-pack.mjs --update-public-api","test:coverage:merge":"node scripts/merge-coverage.mjs","test:coverage:collect":"pnpm build && vitest run --coverage --coverage.reporter=json --coverage.thresholds.lines=0 --coverage.thresholds.functions=0 --coverage.thresholds.statements=0 --coverage.thresholds.branches=0"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:71485d21-a8c3-4f6c-ae40-dd60e3585161"}},"_resolved":"/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.8.1.tgz","_integrity":"sha512-I11v+xiet4RCE1G1bmWFLEMmd9nBnZMmKqHPT9gkqVtoqacY7GtFvpt1O7cffUDD6C2YlAt7Z5Z2Vlbq5rYxDg==","repository":{"url":"git+https://github.com/openclaw/fs-safe.git","type":"git"},"_npmVersion":"12.0.2","description":"Capability-style filesystem roots for Node.js apps that handle untrusted relative paths.","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@11.25.0","devDependencies":{"vite":"8.2.2","vitest":"^4.1.11","sigstore":"5.0.0","fast-check":"^4.9.0","typescript":"^7.0.2","@types/node":"^26.4.1","@napi-rs/cli":"3.8.6","@emnapi/runtime":"2.0.0-alpha.4","istanbul-reports":"3.2.0","@vitest/coverage-v8":"4.1.11","istanbul-lib-report":"3.0.1","istanbul-lib-coverage":"3.2.2"},"optionalDependencies":{"tar":"7.5.22","jszip":"^3.10.1","@openclaw/fs-safe-darwin-x64":"0.8.1","@openclaw/fs-safe-darwin-arm64":"0.8.1","@openclaw/fs-safe-linux-x64-gnu":"0.8.1","@openclaw/fs-safe-linux-x64-musl":"0.8.1","@openclaw/fs-safe-win32-x64-msvc":"0.8.1","@openclaw/fs-safe-linux-arm64-gnu":"0.8.1","@openclaw/fs-safe-linux-arm64-musl":"0.8.1"},"_npmOperationalInternal":{"tmp":"tmp/fs-safe_0.8.1_1788562314125_0.940910452347586","host":"s3://npm-registry-packages-npm-production"}},"0.8.2":{"name":"@openclaw/fs-safe","version":"0.8.2","keywords":["filesystem","openclaw","path-traversal","security","typescript"],"author":{"name":"OpenClaw Team","email":"dev@openclaw.ai"},"license":"MIT","_id":"@openclaw/fs-safe@0.8.2","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://fs-safe.io","bugs":{"url":"https://github.com/openclaw/fs-safe/issues"},"dist":{"shasum":"29016cefa078c8d0b6148af545fd9d7128f2b108","tarball":"https://registry.npmjs.org/@openclaw/fs-safe/-/fs-safe-0.8.2.tgz","fileCount":538,"integrity":"sha512-XZ/5RCK45asJNLM+zvFW1lf/Jwjhxb3DdScWWe89rBKumFrcWuFn8R0xVZVzXUsIPchaNm5eoUJIFUN3Q1u36A==","signatures":[{"sig":"MEQCIC7V8S4e/oLNC9d7TAAiodHINBQdDqOx9YcEsvOX7tkmAiA/6qNEquM0GH41JYaKjBQy4fAzOvUUPdW3kejfCQnjAA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCNjiGDNhq4iKZoqVZcngVSPQBciKi/5zSMPJ0zUa/iIwIhAK9LzKi25fWaXOLKhjMVWfNz/GqUXXbLsaIZ4Y78yRTG","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@openclaw%2ffs-safe@0.8.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2079173},"type":"module","_from":"file:/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.8.2.tgz","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./json":{"types":"./dist/json.d.ts","default":"./dist/json.js"},"./path":{"types":"./dist/path.d.ts","default":"./dist/path.js"},"./root":{"types":"./dist/root.d.ts","default":"./dist/root.js"},"./temp":{"types":"./dist/temp.d.ts","default":"./dist/temp.js"},"./walk":{"types":"./dist/walk.d.ts","default":"./dist/walk.js"},"./store":{"types":"./dist/store.d.ts","default":"./dist/store.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./atomic":{"types":"./dist/atomic.d.ts","default":"./dist/atomic.js"},"./config":{"types":"./dist/config.d.ts","default":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","default":"./dist/errors.js"},"./output":{"types":"./dist/output.d.ts","default":"./dist/output.js"},"./secret":{"types":"./dist/secret.d.ts","default":"./dist/secret.js"},"./archive":{"types":"./dist/archive.d.ts","default":"./dist/archive.js"},"./advanced":{"types":"./dist/advanced.d.ts","default":"./dist/advanced.js"},"./file-lock":{"types":"./dist/file-lock.d.ts","default":"./dist/file-lock.js"},"./durability":{"types":"./dist/durability.d.ts","default":"./dist/durability.js"},"./test-hooks":{"types":"./dist/test-hooks.d.ts","default":"./dist/test-hooks.js"},"./permissions":{"types":"./dist/permissions-public.d.ts","default":"./dist/permissions-public.js"},"./secure-file":{"types":"./dist/secure-file.d.ts","default":"./dist/secure-file.js"},"./package.json":"./package.json","./secure-temp-root":{"types":"./dist/secure-temp-dir.d.ts","default":"./dist/secure-temp-dir.js"}},"scripts":{"test":"vitest run","build":"node scripts/prepack-build.mjs","check":"pnpm lint:file-size && pnpm lint:fs-boundary && pnpm build && pnpm docs:check && pnpm test && node scripts/check-pack.mjs","prepack":"node scripts/prepack-build.mjs","benchmark":"node scripts/benchmark.mjs","docs:site":"node scripts/build-docs-site.mjs","docs:check":"node scripts/check-doc-examples.mjs","pack:check":"pnpm build && node scripts/check-pack.mjs","crabbox:run":"crabbox run","native:test":"cargo test --workspace","archive:wasm":"node scripts/build-archive-wasm.mjs","crabbox:stop":"crabbox stop","native:build":"pnpm --filter @openclaw/fs-safe-native-build build","test:changed":"pnpm run test","check:changed":"pnpm run check","package:smoke":"node scripts/check-release-packages.mjs --allow-host-only --output release-artifacts","release:notes":"node scripts/release-notes.mjs","test:coverage":"vitest run --coverage","test:security":"vitest run test/fs-safe.test.ts test/read-boundary-bypass.test.ts test/write-boundary-bypass.test.ts test/additional-boundary-bypass.test.ts test/adversarial-boundary-payloads.test.ts","crabbox:warmup":"crabbox warmup","lint:file-size":"node scripts/check-file-size.mjs","crabbox:hydrate":"crabbox actions hydrate","package:collect":"node scripts/check-release-packages.mjs --output release-artifacts","lint:fs-boundary":"node scripts/check-fs-boundary-primitives.mjs","benchmark:publish":"pnpm build && node scripts/bench-publish.mjs","public-api:update":"pnpm build && node scripts/check-pack.mjs --update-public-api","test:coverage:merge":"node scripts/merge-coverage.mjs","test:coverage:collect":"pnpm build && vitest run --coverage --coverage.reporter=json --coverage.thresholds.lines=0 --coverage.thresholds.functions=0 --coverage.thresholds.statements=0 --coverage.thresholds.branches=0","archive:producer-smoke":"node scripts/archive-producer-smoke.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:71485d21-a8c3-4f6c-ae40-dd60e3585161"}},"_resolved":"/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.8.2.tgz","_integrity":"sha512-XZ/5RCK45asJNLM+zvFW1lf/Jwjhxb3DdScWWe89rBKumFrcWuFn8R0xVZVzXUsIPchaNm5eoUJIFUN3Q1u36A==","repository":{"url":"git+https://github.com/openclaw/fs-safe.git","type":"git"},"_npmVersion":"12.0.2","description":"Capability-style filesystem roots for Node.js apps that handle untrusted relative paths.","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@11.25.0","devDependencies":{"tar":"7.5.22","vite":"8.2.2","vitest":"^5.0.0","sigstore":"5.0.0","fast-check":"^4.9.0","typescript":"^7.0.2","@types/node":"^26.4.1","@napi-rs/cli":"3.9.0","@emnapi/runtime":"2.0.0-alpha.4","istanbul-reports":"3.2.0","@vitest/coverage-v8":"5.0.0","istanbul-lib-report":"3.0.1","istanbul-lib-coverage":"3.2.2"},"optionalDependencies":{"jszip":"^3.10.1","@openclaw/fs-safe-darwin-x64":"0.8.2","@openclaw/fs-safe-darwin-arm64":"0.8.2","@openclaw/fs-safe-linux-x64-gnu":"0.8.2","@openclaw/fs-safe-linux-x64-musl":"0.8.2","@openclaw/fs-safe-win32-x64-msvc":"0.8.2","@openclaw/fs-safe-linux-arm64-gnu":"0.8.2","@openclaw/fs-safe-linux-arm64-musl":"0.8.2"},"_npmOperationalInternal":{"tmp":"tmp/fs-safe_0.8.2_1788640310972_0.9956441757279033","host":"s3://npm-registry-packages-npm-production"}},"0.8.3":{"name":"@openclaw/fs-safe","version":"0.8.3","keywords":["filesystem","openclaw","path-traversal","security","typescript"],"author":{"name":"OpenClaw Team","email":"dev@openclaw.ai"},"license":"MIT","_id":"@openclaw/fs-safe@0.8.3","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://fs-safe.io","bugs":{"url":"https://github.com/openclaw/fs-safe/issues"},"dist":{"shasum":"ae8f9582d01af0bbd50a942001f2569391a11f14","tarball":"https://registry.npmjs.org/@openclaw/fs-safe/-/fs-safe-0.8.3.tgz","fileCount":520,"integrity":"sha512-2hzKN8W5CQhhoa+9NZCO9vwpuEInrX4nlVbm2JrEvI2aYCI/dXcjHcZWJOefWR/t3VfqLntr30+7lLg3dj0t5A==","signatures":[{"sig":"MEYCIQCfZ0SW4I2iUHu9Vg7kfDMGaaPh/+/gFn7BygJjWPRtoQIhAO+sPgx1iboqZFyHeizHFow56TVb67vofZzbEWjRCTFi","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIAYRTfUjB7t0bUXv6sGnaKpZVr8vHccruZeufap25+OsAiBo9Oc798fxHtn4GA29yFpljzJVDb6CB/c0YWDgk59Yyg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@openclaw%2ffs-safe@0.8.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2076108},"type":"module","_from":"file:/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.8.3.tgz","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./json":{"types":"./dist/json.d.ts","default":"./dist/json.js"},"./path":{"types":"./dist/path.d.ts","default":"./dist/path.js"},"./root":{"types":"./dist/root.d.ts","default":"./dist/root.js"},"./temp":{"types":"./dist/temp.d.ts","default":"./dist/temp.js"},"./walk":{"types":"./dist/walk.d.ts","default":"./dist/walk.js"},"./store":{"types":"./dist/store.d.ts","default":"./dist/store.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./atomic":{"types":"./dist/atomic.d.ts","default":"./dist/atomic.js"},"./config":{"types":"./dist/config.d.ts","default":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","default":"./dist/errors.js"},"./output":{"types":"./dist/output.d.ts","default":"./dist/output.js"},"./secret":{"types":"./dist/secret.d.ts","default":"./dist/secret.js"},"./archive":{"types":"./dist/archive.d.ts","default":"./dist/archive.js"},"./advanced":{"types":"./dist/advanced.d.ts","default":"./dist/advanced.js"},"./file-lock":{"types":"./dist/file-lock.d.ts","default":"./dist/file-lock.js"},"./durability":{"types":"./dist/durability.d.ts","default":"./dist/durability.js"},"./test-hooks":{"types":"./dist/test-hooks.d.ts","default":"./dist/test-hooks.js"},"./permissions":{"types":"./dist/permissions-public.d.ts","default":"./dist/permissions-public.js"},"./secure-file":{"types":"./dist/secure-file.d.ts","default":"./dist/secure-file.js"},"./package.json":"./package.json","./secure-temp-root":{"types":"./dist/secure-temp-dir.d.ts","default":"./dist/secure-temp-dir.js"}},"scripts":{"test":"vitest run","build":"node scripts/prepack-build.mjs","check":"pnpm lint:file-size && pnpm lint:fs-boundary && pnpm build && pnpm docs:check && pnpm test && node scripts/check-pack.mjs","prepack":"node scripts/prepack-build.mjs","benchmark":"node scripts/benchmark.mjs","docs:site":"node scripts/build-docs-site.mjs","docs:check":"node scripts/check-doc-examples.mjs","pack:check":"pnpm build && node scripts/check-pack.mjs","crabbox:run":"crabbox run","native:test":"cargo test --workspace","archive:wasm":"node scripts/build-archive-wasm.mjs","crabbox:stop":"crabbox stop","native:build":"pnpm --filter @openclaw/fs-safe-native-build build","test:changed":"pnpm run test","check:changed":"pnpm run check","package:smoke":"node scripts/check-release-packages.mjs --allow-host-only --output release-artifacts","release:notes":"node scripts/release-notes.mjs","test:coverage":"vitest run --coverage","test:security":"vitest run test/fs-safe.test.ts test/read-boundary-bypass.test.ts test/write-boundary-bypass.test.ts test/additional-boundary-bypass.test.ts test/adversarial-boundary-payloads.test.ts","crabbox:warmup":"crabbox warmup","lint:file-size":"node scripts/check-file-size.mjs","crabbox:hydrate":"crabbox actions hydrate","package:collect":"node scripts/check-release-packages.mjs --output release-artifacts","lint:fs-boundary":"node scripts/check-fs-boundary-primitives.mjs","benchmark:publish":"pnpm build && node scripts/bench-publish.mjs","public-api:update":"pnpm build && node scripts/check-pack.mjs --update-public-api","test:coverage:merge":"node scripts/merge-coverage.mjs","test:coverage:collect":"pnpm build && vitest run --coverage --coverage.reporter=json --coverage.thresholds.lines=0 --coverage.thresholds.functions=0 --coverage.thresholds.statements=0 --coverage.thresholds.branches=0","archive:producer-smoke":"node scripts/archive-producer-smoke.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:71485d21-a8c3-4f6c-ae40-dd60e3585161"}},"_resolved":"/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.8.3.tgz","_integrity":"sha512-2hzKN8W5CQhhoa+9NZCO9vwpuEInrX4nlVbm2JrEvI2aYCI/dXcjHcZWJOefWR/t3VfqLntr30+7lLg3dj0t5A==","repository":{"url":"git+https://github.com/openclaw/fs-safe.git","type":"git"},"_npmVersion":"12.0.2","description":"Capability-style filesystem roots for Node.js apps that handle untrusted relative paths.","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@11.25.0","devDependencies":{"tar":"7.5.22","vite":"8.2.2","vitest":"^5.0.0","sigstore":"5.0.0","fast-check":"^4.9.0","typescript":"^7.0.2","@types/node":"^26.4.1","@napi-rs/cli":"3.9.0","@emnapi/runtime":"2.0.0-alpha.4","istanbul-reports":"3.2.0","@vitest/coverage-v8":"5.0.0","istanbul-lib-report":"3.0.1","istanbul-lib-coverage":"3.2.2"},"optionalDependencies":{"jszip":"^3.10.1","@openclaw/fs-safe-darwin-x64":"0.8.3","@openclaw/fs-safe-darwin-arm64":"0.8.3","@openclaw/fs-safe-linux-x64-gnu":"0.8.3","@openclaw/fs-safe-linux-x64-musl":"0.8.3","@openclaw/fs-safe-win32-x64-msvc":"0.8.3","@openclaw/fs-safe-linux-arm64-gnu":"0.8.3","@openclaw/fs-safe-linux-arm64-musl":"0.8.3"},"_npmOperationalInternal":{"tmp":"tmp/fs-safe_0.8.3_1788744214065_0.4033533540872609","host":"s3://npm-registry-packages-npm-production"}},"0.8.4":{"name":"@openclaw/fs-safe","version":"0.8.4","keywords":["filesystem","openclaw","path-traversal","security","typescript"],"author":{"name":"OpenClaw Team","email":"dev@openclaw.ai"},"license":"MIT","_id":"@openclaw/fs-safe@0.8.4","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://fs-safe.io","bugs":{"url":"https://github.com/openclaw/fs-safe/issues"},"dist":{"shasum":"ec2c92ca731c1aeecbb51657f80d6a5ba14e3208","tarball":"https://registry.npmjs.org/@openclaw/fs-safe/-/fs-safe-0.8.4.tgz","fileCount":526,"integrity":"sha512-/smWdIgJWPx1JaswmhswiOsVo4gT3ZoigP+y84VWYGbvMJwyFF3KESTP44k+CCvrhyUpK75CFcWWPlOdWpVJow==","signatures":[{"sig":"MEUCIQDcNkSRp5Z38yn3Xsazy9FckeGd/6VSG4DlVHeC9DdKWAIgdJXRBjdAzo0cOlBm1c0yLUtwlqBF0onRatkKdGzO8xY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCID9DccVc4odczGMr5Ke0038AjOvhUEQtINYA2fqioi+CAiAQOfmtmrz2gImVuVnV28tnnsdn/o2et9C1xjsXRj49LA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@openclaw%2ffs-safe@0.8.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2090934},"type":"module","_from":"file:/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.8.4.tgz","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./json":{"types":"./dist/json.d.ts","default":"./dist/json.js"},"./path":{"types":"./dist/path.d.ts","default":"./dist/path.js"},"./root":{"types":"./dist/root.d.ts","default":"./dist/root.js"},"./temp":{"types":"./dist/temp.d.ts","default":"./dist/temp.js"},"./walk":{"types":"./dist/walk.d.ts","default":"./dist/walk.js"},"./store":{"types":"./dist/store.d.ts","default":"./dist/store.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./atomic":{"types":"./dist/atomic.d.ts","default":"./dist/atomic.js"},"./config":{"types":"./dist/config.d.ts","default":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","default":"./dist/errors.js"},"./output":{"types":"./dist/output.d.ts","default":"./dist/output.js"},"./secret":{"types":"./dist/secret.d.ts","default":"./dist/secret.js"},"./archive":{"types":"./dist/archive.d.ts","default":"./dist/archive.js"},"./advanced":{"types":"./dist/advanced.d.ts","default":"./dist/advanced.js"},"./file-lock":{"types":"./dist/file-lock.d.ts","default":"./dist/file-lock.js"},"./durability":{"types":"./dist/durability.d.ts","default":"./dist/durability.js"},"./test-hooks":{"types":"./dist/test-hooks.d.ts","default":"./dist/test-hooks.js"},"./permissions":{"types":"./dist/permissions-public.d.ts","default":"./dist/permissions-public.js"},"./secure-file":{"types":"./dist/secure-file.d.ts","default":"./dist/secure-file.js"},"./package.json":"./package.json","./secure-temp-root":{"types":"./dist/secure-temp-dir.d.ts","default":"./dist/secure-temp-dir.js"}},"scripts":{"test":"vitest run","build":"node scripts/prepack-build.mjs","check":"pnpm lint:file-size && pnpm lint:fs-boundary && pnpm build && pnpm docs:check && pnpm test && node scripts/check-pack.mjs","prepack":"node scripts/prepack-build.mjs","benchmark":"node scripts/benchmark.mjs","docs:site":"node scripts/build-docs-site.mjs","docs:check":"node scripts/check-doc-examples.mjs","pack:check":"pnpm build && node scripts/check-pack.mjs","crabbox:run":"crabbox run","native:test":"cargo test --workspace","archive:wasm":"node scripts/build-archive-wasm.mjs","crabbox:stop":"crabbox stop","native:build":"pnpm --filter @openclaw/fs-safe-native-build build","test:changed":"pnpm run test","check:changed":"pnpm run check","package:smoke":"node scripts/check-release-packages.mjs --allow-host-only --output release-artifacts","release:notes":"node scripts/release-notes.mjs","test:coverage":"vitest run --coverage","test:security":"vitest run test/fs-safe.test.ts test/read-boundary-bypass.test.ts test/write-boundary-bypass.test.ts test/additional-boundary-bypass.test.ts test/adversarial-boundary-payloads.test.ts","crabbox:warmup":"crabbox warmup","lint:file-size":"node scripts/check-file-size.mjs","crabbox:hydrate":"crabbox actions hydrate","package:collect":"node scripts/check-release-packages.mjs --output release-artifacts","lint:fs-boundary":"node scripts/check-fs-boundary-primitives.mjs","benchmark:publish":"pnpm build && node scripts/bench-publish.mjs","public-api:update":"pnpm build && node scripts/check-pack.mjs --update-public-api","test:coverage:merge":"node scripts/merge-coverage.mjs","test:coverage:collect":"pnpm build && vitest run --coverage --coverage.reporter=json --coverage.thresholds.lines=0 --coverage.thresholds.functions=0 --coverage.thresholds.statements=0 --coverage.thresholds.branches=0","archive:producer-smoke":"node scripts/archive-producer-smoke.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:71485d21-a8c3-4f6c-ae40-dd60e3585161"}},"_resolved":"/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.8.4.tgz","_integrity":"sha512-/smWdIgJWPx1JaswmhswiOsVo4gT3ZoigP+y84VWYGbvMJwyFF3KESTP44k+CCvrhyUpK75CFcWWPlOdWpVJow==","repository":{"url":"git+https://github.com/openclaw/fs-safe.git","type":"git"},"_npmVersion":"12.0.2","description":"Capability-style filesystem roots for Node.js apps that handle untrusted relative paths.","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@11.25.0","devDependencies":{"tar":"7.5.22","vite":"8.2.2","vitest":"^5.0.0","sigstore":"5.0.0","fast-check":"^4.9.0","typescript":"^7.0.2","@types/node":"^26.4.1","@napi-rs/cli":"3.9.0","@emnapi/runtime":"2.0.0-alpha.4","istanbul-reports":"3.2.0","@vitest/coverage-v8":"5.0.0","istanbul-lib-report":"3.0.1","istanbul-lib-coverage":"3.2.2"},"optionalDependencies":{"jszip":"^3.10.1","@openclaw/fs-safe-darwin-x64":"0.8.4","@openclaw/fs-safe-darwin-arm64":"0.8.4","@openclaw/fs-safe-linux-x64-gnu":"0.8.4","@openclaw/fs-safe-linux-x64-musl":"0.8.4","@openclaw/fs-safe-win32-x64-msvc":"0.8.4","@openclaw/fs-safe-linux-arm64-gnu":"0.8.4","@openclaw/fs-safe-linux-arm64-musl":"0.8.4"},"_npmOperationalInternal":{"tmp":"tmp/fs-safe_0.8.4_1788756319912_0.4288863185748659","host":"s3://npm-registry-packages-npm-production"}},"0.8.5":{"name":"@openclaw/fs-safe","version":"0.8.5","keywords":["filesystem","openclaw","path-traversal","security","typescript"],"author":{"name":"OpenClaw Team","email":"dev@openclaw.ai"},"license":"MIT","_id":"@openclaw/fs-safe@0.8.5","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://fs-safe.io","bugs":{"url":"https://github.com/openclaw/fs-safe/issues"},"dist":{"shasum":"c0d297e0817019a6cef720a68728bc4053bbe523","tarball":"https://registry.npmjs.org/@openclaw/fs-safe/-/fs-safe-0.8.5.tgz","fileCount":526,"integrity":"sha512-MAuWVgZ+DZhakzfrbyn2NOKsZop3ES2ITeVCoAaDNb/NIxF45hAzYDXmp2G8W10CE/HGasL97QMC0+iBZNzHUQ==","signatures":[{"sig":"MEUCICFI8TSR1ojP1dh1Z/B9+WA9G/o70nQ82LcmLQxenEseAiEAkZZfHa0SKxKdxPXi19HKBRGbxs55bn4HukQxNrrSK7c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCID9xXdMnZyKC/+MRmomcVMQYTnydCmRYFCO9M25gkOdVAiEAtgIxfpdipHkceyMwhmO/chlLmCE6pCZ3TLUv76CiPE4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@openclaw%2ffs-safe@0.8.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2092652},"type":"module","_from":"file:/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.8.5.tgz","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./json":{"types":"./dist/json.d.ts","default":"./dist/json.js"},"./path":{"types":"./dist/path.d.ts","default":"./dist/path.js"},"./root":{"types":"./dist/root.d.ts","default":"./dist/root.js"},"./temp":{"types":"./dist/temp.d.ts","default":"./dist/temp.js"},"./walk":{"types":"./dist/walk.d.ts","default":"./dist/walk.js"},"./store":{"types":"./dist/store.d.ts","default":"./dist/store.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./atomic":{"types":"./dist/atomic.d.ts","default":"./dist/atomic.js"},"./config":{"types":"./dist/config.d.ts","default":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","default":"./dist/errors.js"},"./output":{"types":"./dist/output.d.ts","default":"./dist/output.js"},"./secret":{"types":"./dist/secret.d.ts","default":"./dist/secret.js"},"./archive":{"types":"./dist/archive.d.ts","default":"./dist/archive.js"},"./advanced":{"types":"./dist/advanced.d.ts","default":"./dist/advanced.js"},"./file-lock":{"types":"./dist/file-lock.d.ts","default":"./dist/file-lock.js"},"./durability":{"types":"./dist/durability.d.ts","default":"./dist/durability.js"},"./test-hooks":{"types":"./dist/test-hooks.d.ts","default":"./dist/test-hooks.js"},"./permissions":{"types":"./dist/permissions-public.d.ts","default":"./dist/permissions-public.js"},"./secure-file":{"types":"./dist/secure-file.d.ts","default":"./dist/secure-file.js"},"./package.json":"./package.json","./secure-temp-root":{"types":"./dist/secure-temp-dir.d.ts","default":"./dist/secure-temp-dir.js"}},"scripts":{"test":"vitest run","build":"node scripts/prepack-build.mjs","check":"pnpm lint:file-size && pnpm lint:fs-boundary && pnpm build && pnpm docs:check && pnpm test && node scripts/check-pack.mjs","prepack":"node scripts/prepack-build.mjs","benchmark":"node scripts/benchmark.mjs","docs:site":"node scripts/build-docs-site.mjs","docs:check":"node scripts/check-doc-examples.mjs","pack:check":"pnpm build && node scripts/check-pack.mjs","crabbox:run":"crabbox run","native:test":"cargo test --workspace","archive:wasm":"node scripts/build-archive-wasm.mjs","crabbox:stop":"crabbox stop","native:build":"pnpm --filter @openclaw/fs-safe-native-build build","test:changed":"pnpm run test","check:changed":"pnpm run check","package:smoke":"node scripts/check-release-packages.mjs --allow-host-only --output release-artifacts","release:notes":"node scripts/release-notes.mjs","test:coverage":"vitest run --coverage","test:security":"vitest run test/fs-safe.test.ts test/read-boundary-bypass.test.ts test/write-boundary-bypass.test.ts test/additional-boundary-bypass.test.ts test/adversarial-boundary-payloads.test.ts","crabbox:warmup":"crabbox warmup","lint:file-size":"node scripts/check-file-size.mjs","crabbox:hydrate":"crabbox actions hydrate","package:collect":"node scripts/check-release-packages.mjs --output release-artifacts","lint:fs-boundary":"node scripts/check-fs-boundary-primitives.mjs","benchmark:publish":"pnpm build && node scripts/bench-publish.mjs","public-api:update":"pnpm build && node scripts/check-pack.mjs --update-public-api","test:coverage:merge":"node scripts/merge-coverage.mjs","test:coverage:collect":"pnpm build && vitest run --coverage --coverage.reporter=json --coverage.thresholds.lines=0 --coverage.thresholds.functions=0 --coverage.thresholds.statements=0 --coverage.thresholds.branches=0","archive:producer-smoke":"node scripts/archive-producer-smoke.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:71485d21-a8c3-4f6c-ae40-dd60e3585161"}},"_resolved":"/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.8.5.tgz","_integrity":"sha512-MAuWVgZ+DZhakzfrbyn2NOKsZop3ES2ITeVCoAaDNb/NIxF45hAzYDXmp2G8W10CE/HGasL97QMC0+iBZNzHUQ==","repository":{"url":"git+https://github.com/openclaw/fs-safe.git","type":"git"},"_npmVersion":"12.0.2","description":"Capability-style filesystem roots for Node.js apps that handle untrusted relative paths.","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@11.25.0","devDependencies":{"tar":"7.5.22","vite":"8.2.2","vitest":"^5.0.0","sigstore":"5.0.0","fast-check":"^4.9.0","typescript":"^7.0.2","@types/node":"^26.4.1","@napi-rs/cli":"3.9.0","@emnapi/runtime":"2.0.0-alpha.4","istanbul-reports":"3.2.0","@vitest/coverage-v8":"5.0.0","istanbul-lib-report":"3.0.1","istanbul-lib-coverage":"3.2.2"},"optionalDependencies":{"jszip":"^3.10.1","@openclaw/fs-safe-darwin-x64":"0.8.5","@openclaw/fs-safe-darwin-arm64":"0.8.5","@openclaw/fs-safe-linux-x64-gnu":"0.8.5","@openclaw/fs-safe-linux-x64-musl":"0.8.5","@openclaw/fs-safe-win32-x64-msvc":"0.8.5","@openclaw/fs-safe-linux-arm64-gnu":"0.8.5","@openclaw/fs-safe-linux-arm64-musl":"0.8.5"},"_npmOperationalInternal":{"tmp":"tmp/fs-safe_0.8.5_1788774765246_0.0603573492055538","host":"s3://npm-registry-packages-npm-production"}},"0.8.6":{"name":"@openclaw/fs-safe","version":"0.8.6","keywords":["filesystem","openclaw","path-traversal","security","typescript"],"author":{"name":"OpenClaw Team","email":"dev@openclaw.ai"},"license":"MIT","_id":"@openclaw/fs-safe@0.8.6","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://fs-safe.io","bugs":{"url":"https://github.com/openclaw/fs-safe/issues"},"dist":{"shasum":"68c1620bfc3ef3b9cf13f6e760ce06b2c499cc32","tarball":"https://registry.npmjs.org/@openclaw/fs-safe/-/fs-safe-0.8.6.tgz","fileCount":526,"integrity":"sha512-0Rc0bzd7zz26PiRGzeFtK3VLdKtCQSUu/mXsKC6T6/FlVDvKmz8PU87AdFMWBxo2zge1nZC0vuPegaJB+bnO5w==","signatures":[{"sig":"MEQCIHzIOF3a4R53K/Ykuj4QSIpdSPqWf8rJ/aVt8pL7L5eqAiAnDNqqM5Va09peH0M/CIit4+TnNK5aAnGnA3gnY9JLNQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIBPW+BDunQp2Za4HE7J6Ascq2HA02vkIMo2KdAbefc7mAiALoa2Xizn2SJyW12yDDVo2jYnEE+sI6M4N8EnLzirk7g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@openclaw%2ffs-safe@0.8.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2094982},"type":"module","_from":"file:/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.8.6.tgz","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./json":{"types":"./dist/json.d.ts","default":"./dist/json.js"},"./path":{"types":"./dist/path.d.ts","default":"./dist/path.js"},"./root":{"types":"./dist/root.d.ts","default":"./dist/root.js"},"./temp":{"types":"./dist/temp.d.ts","default":"./dist/temp.js"},"./walk":{"types":"./dist/walk.d.ts","default":"./dist/walk.js"},"./store":{"types":"./dist/store.d.ts","default":"./dist/store.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./atomic":{"types":"./dist/atomic.d.ts","default":"./dist/atomic.js"},"./config":{"types":"./dist/config.d.ts","default":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","default":"./dist/errors.js"},"./output":{"types":"./dist/output.d.ts","default":"./dist/output.js"},"./secret":{"types":"./dist/secret.d.ts","default":"./dist/secret.js"},"./archive":{"types":"./dist/archive.d.ts","default":"./dist/archive.js"},"./advanced":{"types":"./dist/advanced.d.ts","default":"./dist/advanced.js"},"./file-lock":{"types":"./dist/file-lock.d.ts","default":"./dist/file-lock.js"},"./durability":{"types":"./dist/durability.d.ts","default":"./dist/durability.js"},"./test-hooks":{"types":"./dist/test-hooks.d.ts","default":"./dist/test-hooks.js"},"./permissions":{"types":"./dist/permissions-public.d.ts","default":"./dist/permissions-public.js"},"./secure-file":{"types":"./dist/secure-file.d.ts","default":"./dist/secure-file.js"},"./package.json":"./package.json","./secure-temp-root":{"types":"./dist/secure-temp-dir.d.ts","default":"./dist/secure-temp-dir.js"}},"scripts":{"test":"vitest run","build":"node scripts/prepack-build.mjs","check":"pnpm lint:file-size && pnpm lint:fs-boundary && pnpm build && pnpm docs:check && pnpm test && node scripts/check-pack.mjs","prepack":"node scripts/prepack-build.mjs","benchmark":"node scripts/benchmark.mjs","docs:site":"node scripts/build-docs-site.mjs","docs:check":"node scripts/check-doc-examples.mjs","pack:check":"pnpm build && node scripts/check-pack.mjs","crabbox:run":"crabbox run","native:test":"cargo test --workspace","archive:wasm":"node scripts/build-archive-wasm.mjs","crabbox:stop":"crabbox stop","native:build":"pnpm --filter @openclaw/fs-safe-native-build build","test:changed":"pnpm run test","check:changed":"pnpm run check","package:smoke":"node scripts/check-release-packages.mjs --allow-host-only --output release-artifacts","release:notes":"node scripts/release-notes.mjs","test:coverage":"vitest run --coverage","test:security":"vitest run test/fs-safe.test.ts test/read-boundary-bypass.test.ts test/write-boundary-bypass.test.ts test/additional-boundary-bypass.test.ts test/adversarial-boundary-payloads.test.ts","crabbox:warmup":"crabbox warmup","lint:file-size":"node scripts/check-file-size.mjs","crabbox:hydrate":"crabbox actions hydrate","package:collect":"node scripts/check-release-packages.mjs --output release-artifacts","lint:fs-boundary":"node scripts/check-fs-boundary-primitives.mjs","benchmark:publish":"pnpm build && node scripts/bench-publish.mjs","public-api:update":"pnpm build && node scripts/check-pack.mjs --update-public-api","test:coverage:merge":"node scripts/merge-coverage.mjs","test:coverage:collect":"pnpm build && vitest run --coverage --coverage.reporter=json --coverage.thresholds.lines=0 --coverage.thresholds.functions=0 --coverage.thresholds.statements=0 --coverage.thresholds.branches=0","archive:producer-smoke":"node scripts/archive-producer-smoke.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:71485d21-a8c3-4f6c-ae40-dd60e3585161"}},"_resolved":"/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.8.6.tgz","_integrity":"sha512-0Rc0bzd7zz26PiRGzeFtK3VLdKtCQSUu/mXsKC6T6/FlVDvKmz8PU87AdFMWBxo2zge1nZC0vuPegaJB+bnO5w==","repository":{"url":"git+https://github.com/openclaw/fs-safe.git","type":"git"},"_npmVersion":"12.0.2","description":"Capability-style filesystem roots for Node.js apps that handle untrusted relative paths.","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@11.25.0","devDependencies":{"tar":"7.5.22","vite":"8.2.2","vitest":"^5.0.0","sigstore":"5.0.0","fast-check":"^4.9.0","typescript":"^7.0.2","@types/node":"^26.4.1","@napi-rs/cli":"3.9.0","@emnapi/runtime":"2.0.0-alpha.4","istanbul-reports":"3.2.0","@vitest/coverage-v8":"5.0.0","istanbul-lib-report":"3.0.1","istanbul-lib-coverage":"3.2.2"},"optionalDependencies":{"jszip":"^3.10.1","@openclaw/fs-safe-darwin-x64":"0.8.6","@openclaw/fs-safe-darwin-arm64":"0.8.6","@openclaw/fs-safe-linux-x64-gnu":"0.8.6","@openclaw/fs-safe-linux-x64-musl":"0.8.6","@openclaw/fs-safe-win32-x64-msvc":"0.8.6","@openclaw/fs-safe-linux-arm64-gnu":"0.8.6","@openclaw/fs-safe-linux-arm64-musl":"0.8.6"},"_npmOperationalInternal":{"tmp":"tmp/fs-safe_0.8.6_1788778513337_0.09346991843913677","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"@openclaw/fs-safe","version":"0.9.0","keywords":["filesystem","openclaw","path-traversal","security","typescript"],"author":{"name":"OpenClaw Team","email":"dev@openclaw.ai"},"license":"MIT","_id":"@openclaw/fs-safe@0.9.0","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://fs-safe.io","bugs":{"url":"https://github.com/openclaw/fs-safe/issues"},"dist":{"shasum":"8eedbe02ae5e482f8aebd335c3557cdb30f967a4","tarball":"https://registry.npmjs.org/@openclaw/fs-safe/-/fs-safe-0.9.0.tgz","fileCount":532,"integrity":"sha512-tosF8aEryiwblHUcoiZLlyNFHqtwNkvZcTGM0rnpl30Szlxkg6GEdzbpmvWM0x6q4ZaMrkGAODtrwZGD0eoXEw==","signatures":[{"sig":"MEUCICwR1eZ0Mnx8YCVXnJmJNNC3x4FGhA/iteRR0c60c0m3AiEAkQBRlPsGCWRkC/Qi7adTt4H2DFwpNuHKT2BL3x+mwmE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCICK5qDmy5XKGIy+79H+fI9AUjU6rbPd5vzOB73COuN+9AiEA0O3xYBA/WB2geZLsvmpFQNoOa6OKttcro+cEQ3cQfiw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@openclaw%2ffs-safe@0.9.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2123373},"type":"module","_from":"file:/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.9.0.tgz","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./json":{"types":"./dist/json.d.ts","default":"./dist/json.js"},"./path":{"types":"./dist/path.d.ts","default":"./dist/path.js"},"./root":{"types":"./dist/root.d.ts","default":"./dist/root.js"},"./temp":{"types":"./dist/temp.d.ts","default":"./dist/temp.js"},"./walk":{"types":"./dist/walk.d.ts","default":"./dist/walk.js"},"./store":{"types":"./dist/store.d.ts","default":"./dist/store.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./atomic":{"types":"./dist/atomic.d.ts","default":"./dist/atomic.js"},"./config":{"types":"./dist/config.d.ts","default":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","default":"./dist/errors.js"},"./output":{"types":"./dist/output.d.ts","default":"./dist/output.js"},"./secret":{"types":"./dist/secret.d.ts","default":"./dist/secret.js"},"./archive":{"types":"./dist/archive.d.ts","default":"./dist/archive.js"},"./advanced":{"types":"./dist/advanced.d.ts","default":"./dist/advanced.js"},"./file-lock":{"types":"./dist/file-lock.d.ts","default":"./dist/file-lock.js"},"./durability":{"types":"./dist/durability.d.ts","default":"./dist/durability.js"},"./test-hooks":{"types":"./dist/test-hooks.d.ts","default":"./dist/test-hooks.js"},"./permissions":{"types":"./dist/permissions-public.d.ts","default":"./dist/permissions-public.js"},"./secure-file":{"types":"./dist/secure-file.d.ts","default":"./dist/secure-file.js"},"./package.json":"./package.json","./secure-temp-root":{"types":"./dist/secure-temp-dir.d.ts","default":"./dist/secure-temp-dir.js"}},"scripts":{"test":"vitest run","build":"node scripts/prepack-build.mjs","check":"pnpm lint:file-size && pnpm lint:fs-boundary && pnpm build && pnpm docs:check && pnpm test && node scripts/check-pack.mjs","prepack":"node scripts/prepack-build.mjs","benchmark":"node scripts/benchmark.mjs","docs:site":"node scripts/build-docs-site.mjs","docs:check":"node scripts/check-doc-examples.mjs","pack:check":"pnpm build && node scripts/check-pack.mjs","crabbox:run":"crabbox run","native:test":"cargo test --workspace","archive:wasm":"node scripts/build-archive-wasm.mjs","crabbox:stop":"crabbox stop","native:build":"pnpm --filter @openclaw/fs-safe-native-build build","test:changed":"pnpm run test","check:changed":"pnpm run check","package:smoke":"node scripts/check-release-packages.mjs --allow-host-only --output release-artifacts","release:notes":"node scripts/release-notes.mjs","test:coverage":"vitest run --coverage","test:security":"vitest run test/fs-safe.test.ts test/read-boundary-bypass.test.ts test/write-boundary-bypass.test.ts test/additional-boundary-bypass.test.ts test/adversarial-boundary-payloads.test.ts","crabbox:warmup":"crabbox warmup","lint:file-size":"node scripts/check-file-size.mjs","crabbox:hydrate":"crabbox actions hydrate","package:collect":"node scripts/check-release-packages.mjs --output release-artifacts","lint:fs-boundary":"node scripts/check-fs-boundary-primitives.mjs","benchmark:publish":"pnpm build && node scripts/bench-publish.mjs","public-api:update":"pnpm build && node scripts/check-pack.mjs --update-public-api","test:coverage:merge":"node scripts/merge-coverage.mjs","test:coverage:collect":"pnpm build && vitest run --coverage --coverage.reporter=json --coverage.thresholds.lines=0 --coverage.thresholds.functions=0 --coverage.thresholds.statements=0 --coverage.thresholds.branches=0","archive:producer-smoke":"node scripts/archive-producer-smoke.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:71485d21-a8c3-4f6c-ae40-dd60e3585161"}},"_resolved":"/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.9.0.tgz","_integrity":"sha512-tosF8aEryiwblHUcoiZLlyNFHqtwNkvZcTGM0rnpl30Szlxkg6GEdzbpmvWM0x6q4ZaMrkGAODtrwZGD0eoXEw==","repository":{"url":"git+https://github.com/openclaw/fs-safe.git","type":"git"},"_npmVersion":"12.0.2","description":"Capability-style filesystem roots for Node.js apps that handle untrusted relative paths.","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@11.25.0","devDependencies":{"tar":"7.5.22","vite":"8.2.2","vitest":"^5.0.0","sigstore":"5.0.0","fast-check":"^4.9.0","typescript":"^7.0.2","@types/node":"^26.5.1","@napi-rs/cli":"3.9.0","@emnapi/runtime":"2.0.0-alpha.5","istanbul-reports":"3.2.0","@vitest/coverage-v8":"5.0.0","istanbul-lib-report":"3.0.1","istanbul-lib-coverage":"3.2.2"},"optionalDependencies":{"jszip":"^3.10.2","@openclaw/fs-safe-darwin-x64":"0.9.0","@openclaw/fs-safe-darwin-arm64":"0.9.0","@openclaw/fs-safe-linux-x64-gnu":"0.9.0","@openclaw/fs-safe-linux-x64-musl":"0.9.0","@openclaw/fs-safe-win32-x64-msvc":"0.9.0","@openclaw/fs-safe-linux-arm64-gnu":"0.9.0","@openclaw/fs-safe-linux-arm64-musl":"0.9.0"},"_npmOperationalInternal":{"tmp":"tmp/fs-safe_0.9.0_1789166807045_0.3884595112613285","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"name":"@openclaw/fs-safe","version":"0.10.0","keywords":["filesystem","openclaw","path-traversal","security","typescript"],"author":{"name":"OpenClaw Team","email":"dev@openclaw.ai"},"license":"MIT","_id":"@openclaw/fs-safe@0.10.0","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://fs-safe.io","bugs":{"url":"https://github.com/openclaw/fs-safe/issues"},"dist":{"shasum":"6edc8ef663af1a63105111df63add56878e3b1e6","tarball":"https://registry.npmjs.org/@openclaw/fs-safe/-/fs-safe-0.10.0.tgz","fileCount":573,"integrity":"sha512-tZW2fR6TgLAYfsaYx+ewC4zoPLO6EicRfx7f6kke4N/jIb8ZkteBEq2cD4Y6jMeNgVM7YClVzQuzcaAIkan3Dg==","signatures":[{"sig":"MEQCIC4CqO/wOTrOFCbAWRPMVFPmps51EB//g7UB8Gv9uyXSAiAvWdky8GpM/FUDqEnlCkBdDhy6O/PqGpwo2gRfDfYWpg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIG67irVJEnegGS15I56faA+N+W/7KXWntPPFPP29Ms3uAiEA699kn8Zpo/Dk9FcI92so+VmaDvuTFMktV8l76eCa3Ic=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@openclaw%2ffs-safe@0.10.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2259711},"type":"module","_from":"file:/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.10.0.tgz","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./copy":{"types":"./dist/copy.d.ts","default":"./dist/copy.js"},"./json":{"types":"./dist/json.d.ts","default":"./dist/json.js"},"./path":{"types":"./dist/path.d.ts","default":"./dist/path.js"},"./root":{"types":"./dist/root.d.ts","default":"./dist/root.js"},"./temp":{"types":"./dist/temp.d.ts","default":"./dist/temp.js"},"./walk":{"types":"./dist/walk.d.ts","default":"./dist/walk.js"},"./store":{"types":"./dist/store.d.ts","default":"./dist/store.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./atomic":{"types":"./dist/atomic.d.ts","default":"./dist/atomic.js"},"./config":{"types":"./dist/config.d.ts","default":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","default":"./dist/errors.js"},"./output":{"types":"./dist/output.d.ts","default":"./dist/output.js"},"./secret":{"types":"./dist/secret.d.ts","default":"./dist/secret.js"},"./archive":{"types":"./dist/archive.d.ts","default":"./dist/archive.js"},"./advanced":{"types":"./dist/advanced.d.ts","default":"./dist/advanced.js"},"./file-lock":{"types":"./dist/file-lock.d.ts","default":"./dist/file-lock.js"},"./durability":{"types":"./dist/durability.d.ts","default":"./dist/durability.js"},"./test-hooks":{"types":"./dist/test-hooks.d.ts","default":"./dist/test-hooks.js"},"./permissions":{"types":"./dist/permissions-public.d.ts","default":"./dist/permissions-public.js"},"./secure-file":{"types":"./dist/secure-file.d.ts","default":"./dist/secure-file.js"},"./package.json":"./package.json","./secure-temp-root":{"types":"./dist/secure-temp-dir.d.ts","default":"./dist/secure-temp-dir.js"}},"scripts":{"test":"vitest run","build":"node scripts/prepack-build.mjs","check":"pnpm lint:file-size && pnpm lint:fs-boundary && pnpm build && pnpm docs:check && pnpm test && node scripts/check-pack.mjs","prepack":"node scripts/prepack-build.mjs","benchmark":"node scripts/benchmark.mjs","docs:site":"node scripts/build-docs-site.mjs","docs:check":"node scripts/check-doc-examples.mjs","pack:check":"pnpm build && node scripts/check-pack.mjs","crabbox:run":"crabbox run","native:test":"cargo test --workspace","archive:wasm":"node scripts/build-archive-wasm.mjs","crabbox:stop":"crabbox stop","native:build":"pnpm --filter @openclaw/fs-safe-native-build build","test:changed":"pnpm run test","check:changed":"pnpm run check","package:smoke":"node scripts/check-release-packages.mjs --allow-host-only --output release-artifacts","release:notes":"node scripts/release-notes.mjs","test:coverage":"vitest run --coverage","test:security":"vitest run test/fs-safe.test.ts test/read-boundary-bypass.test.ts test/write-boundary-bypass.test.ts test/additional-boundary-bypass.test.ts test/adversarial-boundary-payloads.test.ts","crabbox:warmup":"crabbox warmup","lint:file-size":"node scripts/check-file-size.mjs","crabbox:hydrate":"crabbox actions hydrate","package:collect":"node scripts/check-release-packages.mjs --output release-artifacts","lint:fs-boundary":"node scripts/check-fs-boundary-primitives.mjs","benchmark:methods":"node benchmarks/runner.mjs","benchmark:publish":"pnpm build && node scripts/bench-publish.mjs","public-api:update":"pnpm build && node scripts/check-pack.mjs --update-public-api","test:coverage:merge":"node scripts/merge-coverage.mjs","test:coverage:collect":"pnpm build && vitest run --coverage --coverage.reporter=json --coverage.thresholds.lines=0 --coverage.thresholds.functions=0 --coverage.thresholds.statements=0 --coverage.thresholds.branches=0","archive:producer-smoke":"node scripts/archive-producer-smoke.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:71485d21-a8c3-4f6c-ae40-dd60e3585161"}},"_resolved":"/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.10.0.tgz","_integrity":"sha512-tZW2fR6TgLAYfsaYx+ewC4zoPLO6EicRfx7f6kke4N/jIb8ZkteBEq2cD4Y6jMeNgVM7YClVzQuzcaAIkan3Dg==","repository":{"url":"git+https://github.com/openclaw/fs-safe.git","type":"git"},"_npmVersion":"12.0.2","description":"Capability-style filesystem roots for Node.js apps that handle untrusted relative paths.","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@11.25.0","devDependencies":{"tar":"7.5.22","vite":"8.2.2","vitest":"^5.0.0","sigstore":"5.0.0","fast-check":"^4.9.0","typescript":"^7.0.2","@types/node":"^26.5.1","@napi-rs/cli":"3.9.0","@emnapi/runtime":"2.0.0-alpha.5","istanbul-reports":"3.2.0","@vitest/coverage-v8":"5.0.0","istanbul-lib-report":"3.0.1","istanbul-lib-coverage":"3.2.2"},"optionalDependencies":{"jszip":"^3.10.2","@openclaw/fs-safe-darwin-x64":"0.10.0","@openclaw/fs-safe-darwin-arm64":"0.10.0","@openclaw/fs-safe-linux-x64-gnu":"0.10.0","@openclaw/fs-safe-linux-x64-musl":"0.10.0","@openclaw/fs-safe-win32-x64-msvc":"0.10.0","@openclaw/fs-safe-linux-arm64-gnu":"0.10.0","@openclaw/fs-safe-linux-arm64-musl":"0.10.0"},"_npmOperationalInternal":{"tmp":"tmp/fs-safe_0.10.0_1789288502642_0.0030551688083710893","host":"s3://npm-registry-packages-npm-production"}},"0.11.0":{"name":"@openclaw/fs-safe","version":"0.11.0","keywords":["filesystem","openclaw","path-traversal","security","typescript"],"author":{"name":"OpenClaw Team","email":"dev@openclaw.ai"},"license":"MIT","_id":"@openclaw/fs-safe@0.11.0","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://fs-safe.io","bugs":{"url":"https://github.com/openclaw/fs-safe/issues"},"dist":{"shasum":"a685d118b65a79211398d75e10ed0a13ac6a6b88","tarball":"https://registry.npmjs.org/@openclaw/fs-safe/-/fs-safe-0.11.0.tgz","fileCount":623,"integrity":"sha512-peGqt1p6b/93Xvqo8V5ZvrL9NdNX6VjzrcnDuo0o+Y+UfeuFvxcF64qSarsHwyJ24s2gEjE9Vl76A3vtFR8WTg==","signatures":[{"sig":"MEQCIFbSj2Df7P5SymsTT38RWUB99VZRS8ogL8LOH8rwW/7SAiA/ZFBca1JjjimWxru7GPz8oIpAgbBE/CWYyFDy0kKleQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIDSSYdcY9OyxBeeHWYrJx6+WgY7dP5fJZuYEj/5q2h2AAiEA00Az6fOXJ1dIX3OLsibIyJAUg9DHFnMaus2ad5YmR4g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@openclaw%2ffs-safe@0.11.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2431834},"type":"module","_from":"file:/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.11.0.tgz","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./copy":{"types":"./dist/copy.d.ts","default":"./dist/copy.js"},"./json":{"types":"./dist/json.d.ts","default":"./dist/json.js"},"./path":{"types":"./dist/path.d.ts","default":"./dist/path.js"},"./root":{"types":"./dist/root.d.ts","default":"./dist/root.js"},"./temp":{"types":"./dist/temp.d.ts","default":"./dist/temp.js"},"./walk":{"types":"./dist/walk.d.ts","default":"./dist/walk.js"},"./guest":{"types":"./dist/guest.d.ts","default":"./dist/guest.js"},"./store":{"types":"./dist/store.d.ts","default":"./dist/store.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./atomic":{"types":"./dist/atomic.d.ts","default":"./dist/atomic.js"},"./config":{"types":"./dist/config.d.ts","default":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","default":"./dist/errors.js"},"./output":{"types":"./dist/output.d.ts","default":"./dist/output.js"},"./secret":{"types":"./dist/secret.d.ts","default":"./dist/secret.js"},"./archive":{"types":"./dist/archive.d.ts","default":"./dist/archive.js"},"./advanced":{"types":"./dist/advanced.d.ts","default":"./dist/advanced.js"},"./file-lock":{"types":"./dist/file-lock.d.ts","default":"./dist/file-lock.js"},"./durability":{"types":"./dist/durability.d.ts","default":"./dist/durability.js"},"./test-hooks":{"types":"./dist/test-hooks.d.ts","default":"./dist/test-hooks.js"},"./permissions":{"types":"./dist/permissions-public.d.ts","default":"./dist/permissions-public.js"},"./secure-file":{"types":"./dist/secure-file.d.ts","default":"./dist/secure-file.js"},"./package.json":"./package.json","./secure-temp-root":{"types":"./dist/secure-temp-dir.d.ts","default":"./dist/secure-temp-dir.js"}},"scripts":{"test":"vitest run","build":"node scripts/prepack-build.mjs","check":"pnpm lint:file-size && pnpm lint:fs-boundary && pnpm build && pnpm docs:check && pnpm test && node scripts/check-pack.mjs","prepack":"node scripts/prepack-build.mjs","test:bun":"bun node_modules/vitest/vitest.mjs run --config scripts/bun-vitest.config.ts","benchmark":"node scripts/benchmark.mjs","docs:site":"node scripts/build-docs-site.mjs","docs:check":"node scripts/check-doc-examples.mjs","pack:check":"pnpm build && node scripts/check-pack.mjs","crabbox:run":"crabbox run","native:test":"cargo test --workspace","archive:wasm":"node scripts/build-archive-wasm.mjs","crabbox:stop":"crabbox stop","native:build":"pnpm --filter @openclaw/fs-safe-native-build build","test:changed":"pnpm run test","check:changed":"pnpm run check","package:smoke":"node scripts/check-release-packages.mjs --allow-host-only --output release-artifacts","release:notes":"node scripts/release-notes.mjs","test:coverage":"vitest run --coverage","test:security":"vitest run test/fs-safe.test.ts test/read-boundary-bypass.test.ts test/write-boundary-bypass.test.ts test/additional-boundary-bypass.test.ts test/adversarial-boundary-payloads.test.ts","crabbox:warmup":"crabbox warmup","lint:file-size":"node scripts/check-file-size.mjs","crabbox:hydrate":"crabbox actions hydrate","package:collect":"node scripts/check-release-packages.mjs --output release-artifacts","test:bun:native":"bun scripts/bun-native-proof.mjs && bun node_modules/vitest/vitest.mjs run --config scripts/bun-native-vitest.config.ts","lint:fs-boundary":"node scripts/check-fs-boundary-primitives.mjs","benchmark:methods":"node benchmarks/runner.mjs","benchmark:publish":"pnpm build && node scripts/bench-publish.mjs","public-api:update":"pnpm build && node scripts/check-pack.mjs --update-public-api","test:coverage:merge":"node scripts/merge-coverage.mjs","test:coverage:collect":"pnpm build && vitest run --coverage --coverage.reporter=json --coverage.thresholds.lines=0 --coverage.thresholds.functions=0 --coverage.thresholds.statements=0 --coverage.thresholds.branches=0","archive:producer-smoke":"node scripts/archive-producer-smoke.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:71485d21-a8c3-4f6c-ae40-dd60e3585161"}},"_resolved":"/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.11.0.tgz","_integrity":"sha512-peGqt1p6b/93Xvqo8V5ZvrL9NdNX6VjzrcnDuo0o+Y+UfeuFvxcF64qSarsHwyJ24s2gEjE9Vl76A3vtFR8WTg==","repository":{"url":"git+https://github.com/openclaw/fs-safe.git","type":"git"},"_npmVersion":"12.0.2","description":"Capability-style filesystem roots for Node.js apps that handle untrusted relative paths.","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@11.25.0","devDependencies":{"tar":"7.5.22","vite":"8.2.2","vitest":"^5.0.0","sigstore":"5.0.0","fast-check":"^4.9.0","typescript":"^7.0.2","@types/node":"^26.5.1","@napi-rs/cli":"3.9.0","@emnapi/runtime":"2.0.0-alpha.5","istanbul-reports":"3.2.0","@vitest/coverage-v8":"5.0.0","istanbul-lib-report":"3.0.1","istanbul-lib-coverage":"3.2.2"},"optionalDependencies":{"jszip":"^3.10.2","@openclaw/fs-safe-darwin-x64":"0.11.0","@openclaw/fs-safe-darwin-arm64":"0.11.0","@openclaw/fs-safe-linux-x64-gnu":"0.11.0","@openclaw/fs-safe-linux-x64-musl":"0.11.0","@openclaw/fs-safe-win32-x64-msvc":"0.11.0","@openclaw/fs-safe-linux-arm64-gnu":"0.11.0","@openclaw/fs-safe-linux-arm64-musl":"0.11.0"},"_npmOperationalInternal":{"tmp":"tmp/fs-safe_0.11.0_1789372246259_0.1017346295881707","host":"s3://npm-registry-packages-npm-production"}},"0.12.0":{"name":"@openclaw/fs-safe","version":"0.12.0","keywords":["filesystem","openclaw","path-traversal","security","typescript"],"author":{"name":"OpenClaw Team","email":"dev@openclaw.ai"},"license":"MIT","_id":"@openclaw/fs-safe@0.12.0","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://fs-safe.io","bugs":{"url":"https://github.com/openclaw/fs-safe/issues"},"dist":{"shasum":"1e9ff3b00ade5d225adf28048c0e9fea83ce46be","tarball":"https://registry.npmjs.org/@openclaw/fs-safe/-/fs-safe-0.12.0.tgz","fileCount":638,"integrity":"sha512-Dwu2BZL6+n9pTeSLwijjL+dUBN0ktOjyucZPDjwSpuIkiPx9aussFWdyiWUD9UvNu3gwfLRAcktz1HfYT8QW1w==","signatures":[{"sig":"MEUCIQC3kzbFyGCL3R+2CWDhzEXWlWAszAvzgopDOhOKW5fW5gIgbBTUnCtIXaKzs9/z0BPamDi87sQrStu7HUJuiuTURP0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCUn2HaDlG7491GIoMOsokgAgIJeJR0DqKwdfv1aF6ceAIhAOSE4MAqHsuLKgV3CzOwele3jUEysk1iWnwO6pK5UaOa","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@openclaw%2ffs-safe@0.12.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2490546},"type":"module","_from":"file:/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.12.0.tgz","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./copy":{"types":"./dist/copy.d.ts","default":"./dist/copy.js"},"./json":{"types":"./dist/json.d.ts","default":"./dist/json.js"},"./path":{"types":"./dist/path.d.ts","default":"./dist/path.js"},"./root":{"types":"./dist/root.d.ts","default":"./dist/root.js"},"./temp":{"types":"./dist/temp.d.ts","default":"./dist/temp.js"},"./walk":{"types":"./dist/walk.d.ts","default":"./dist/walk.js"},"./guest":{"types":"./dist/guest.d.ts","default":"./dist/guest.js"},"./store":{"types":"./dist/store.d.ts","default":"./dist/store.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./atomic":{"types":"./dist/atomic.d.ts","default":"./dist/atomic.js"},"./config":{"types":"./dist/config.d.ts","default":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","default":"./dist/errors.js"},"./output":{"types":"./dist/output.d.ts","default":"./dist/output.js"},"./secret":{"types":"./dist/secret.d.ts","default":"./dist/secret.js"},"./archive":{"types":"./dist/archive.d.ts","default":"./dist/archive.js"},"./advanced":{"types":"./dist/advanced.d.ts","default":"./dist/advanced.js"},"./file-lock":{"types":"./dist/file-lock.d.ts","default":"./dist/file-lock.js"},"./durability":{"types":"./dist/durability.d.ts","default":"./dist/durability.js"},"./test-hooks":{"types":"./dist/test-hooks.d.ts","default":"./dist/test-hooks.js"},"./permissions":{"types":"./dist/permissions-public.d.ts","default":"./dist/permissions-public.js"},"./secure-file":{"types":"./dist/secure-file.d.ts","default":"./dist/secure-file.js"},"./package.json":"./package.json","./secure-temp-root":{"types":"./dist/secure-temp-dir.d.ts","default":"./dist/secure-temp-dir.js"}},"scripts":{"test":"vitest run","build":"node scripts/prepack-build.mjs","check":"pnpm lint:file-size && pnpm lint:fs-boundary && pnpm build && pnpm docs:check && pnpm test && node scripts/check-pack.mjs","prepack":"node scripts/prepack-build.mjs","test:bun":"bun node_modules/vitest/vitest.mjs run --config scripts/bun-vitest.config.ts","benchmark":"node scripts/benchmark.mjs","docs:site":"node scripts/build-docs-site.mjs","docs:check":"node scripts/check-doc-examples.mjs","pack:check":"pnpm build && node scripts/check-pack.mjs","crabbox:run":"crabbox run","native:test":"cargo test --workspace","archive:wasm":"node scripts/build-archive-wasm.mjs","crabbox:stop":"crabbox stop","native:build":"pnpm --filter @openclaw/fs-safe-native-build build","test:changed":"pnpm run test","check:changed":"pnpm run check","package:smoke":"node scripts/check-release-packages.mjs --allow-host-only --output release-artifacts","release:notes":"node scripts/release-notes.mjs","test:coverage":"vitest run --coverage","test:security":"vitest run test/fs-safe.test.ts test/read-boundary-bypass.test.ts test/write-boundary-bypass.test.ts test/additional-boundary-bypass.test.ts test/adversarial-boundary-payloads.test.ts","crabbox:warmup":"crabbox warmup","lint:file-size":"node scripts/check-file-size.mjs","crabbox:hydrate":"crabbox actions hydrate","package:collect":"node scripts/check-release-packages.mjs --output release-artifacts","test:bun:native":"bun scripts/bun-native-proof.mjs && bun node_modules/vitest/vitest.mjs run --config scripts/bun-native-vitest.config.ts","lint:fs-boundary":"node scripts/check-fs-boundary-primitives.mjs","benchmark:methods":"node benchmarks/runner.mjs","benchmark:publish":"pnpm build && node scripts/bench-publish.mjs","public-api:update":"pnpm build && node scripts/check-pack.mjs --update-public-api","test:coverage:merge":"node scripts/merge-coverage.mjs","test:coverage:collect":"pnpm build && vitest run --coverage --coverage.reporter=json --coverage.thresholds.lines=0 --coverage.thresholds.functions=0 --coverage.thresholds.statements=0 --coverage.thresholds.branches=0","archive:producer-smoke":"node scripts/archive-producer-smoke.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:71485d21-a8c3-4f6c-ae40-dd60e3585161"}},"_resolved":"/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.12.0.tgz","_integrity":"sha512-Dwu2BZL6+n9pTeSLwijjL+dUBN0ktOjyucZPDjwSpuIkiPx9aussFWdyiWUD9UvNu3gwfLRAcktz1HfYT8QW1w==","repository":{"url":"git+https://github.com/openclaw/fs-safe.git","type":"git"},"_npmVersion":"12.0.2","description":"Capability-style filesystem roots for Node.js apps that handle untrusted relative paths.","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@11.25.0","devDependencies":{"tar":"7.5.22","vite":"8.2.2","vitest":"^5.0.0","sigstore":"5.0.0","fast-check":"^4.9.0","typescript":"^7.0.2","@types/node":"^26.5.1","@napi-rs/cli":"3.9.0","@emnapi/runtime":"2.0.0-alpha.5","istanbul-reports":"3.2.0","@vitest/coverage-v8":"5.0.0","istanbul-lib-report":"3.0.1","istanbul-lib-coverage":"3.2.2"},"optionalDependencies":{"jszip":"^3.10.2","@openclaw/fs-safe-darwin-x64":"0.12.0","@openclaw/fs-safe-darwin-arm64":"0.12.0","@openclaw/fs-safe-linux-x64-gnu":"0.12.0","@openclaw/fs-safe-linux-x64-musl":"0.12.0","@openclaw/fs-safe-win32-x64-msvc":"0.12.0","@openclaw/fs-safe-linux-arm64-gnu":"0.12.0","@openclaw/fs-safe-linux-arm64-musl":"0.12.0"},"_npmOperationalInternal":{"tmp":"tmp/fs-safe_0.12.0_1789475921975_0.4927718318170722","host":"s3://npm-registry-packages-npm-production"}},"0.13.0":{"name":"@openclaw/fs-safe","version":"0.13.0","keywords":["filesystem","openclaw","path-traversal","security","typescript"],"author":{"name":"OpenClaw Team","email":"dev@openclaw.ai"},"license":"MIT","_id":"@openclaw/fs-safe@0.13.0","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://fs-safe.io","bugs":{"url":"https://github.com/openclaw/fs-safe/issues"},"dist":{"shasum":"3f7d372ca8ee9517b7314e85fa4f0c5ef1696e1f","tarball":"https://registry.npmjs.org/@openclaw/fs-safe/-/fs-safe-0.13.0.tgz","fileCount":773,"integrity":"sha512-8dyH9wMH5PFsOZZocY/lb+EYFMVN3+BMaPo0z2a1YwaOrkwrEt6kLvhI2g0X2AAKeq75r99cS1aMvY+Tk3wa6g==","signatures":[{"sig":"MEYCIQDTzBYJ9Py0r3JBtI/AX2zEGQooi7QOHkLNlgsPnivh/QIhAM4Oc86DYWcjb+1mHimgt2ooOPL7QZWGnXAtz/JKdp/k","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQD8w38jTGCvGAJ/L7hEbM2mOIailyY3tWet56zU9cUVhAIhAJZ9fWNzZyCZ80qd6uMUFir8JgakiEH00TCrRX2/GzLp","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@openclaw%2ffs-safe@0.13.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3041410},"type":"module","_from":"file:/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.13.0.tgz","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./copy":{"types":"./dist/copy.d.ts","default":"./dist/copy.js"},"./json":{"types":"./dist/json.d.ts","default":"./dist/json.js"},"./path":{"types":"./dist/path.d.ts","default":"./dist/path.js"},"./root":{"types":"./dist/root.d.ts","default":"./dist/root.js"},"./temp":{"types":"./dist/temp.d.ts","default":"./dist/temp.js"},"./walk":{"types":"./dist/walk.d.ts","default":"./dist/walk.js"},"./guest":{"types":"./dist/guest.d.ts","default":"./dist/guest.js"},"./store":{"types":"./dist/store.d.ts","default":"./dist/store.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./atomic":{"types":"./dist/atomic.d.ts","default":"./dist/atomic.js"},"./config":{"types":"./dist/config.d.ts","default":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","default":"./dist/errors.js"},"./output":{"types":"./dist/output.d.ts","default":"./dist/output.js"},"./secret":{"types":"./dist/secret.d.ts","default":"./dist/secret.js"},"./archive":{"types":"./dist/archive.d.ts","default":"./dist/archive.js"},"./advanced":{"types":"./dist/advanced.d.ts","default":"./dist/advanced.js"},"./file-lock":{"types":"./dist/file-lock.d.ts","default":"./dist/file-lock.js"},"./durability":{"types":"./dist/durability.d.ts","default":"./dist/durability.js"},"./test-hooks":{"types":"./dist/test-hooks.d.ts","default":"./dist/test-hooks.js"},"./permissions":{"types":"./dist/permissions-public.d.ts","default":"./dist/permissions-public.js"},"./secure-file":{"types":"./dist/secure-file.d.ts","default":"./dist/secure-file.js"},"./package.json":"./package.json","./secure-temp-root":{"types":"./dist/secure-temp-dir.d.ts","default":"./dist/secure-temp-dir.js"}},"scripts":{"test":"vitest run","build":"node scripts/prepack-build.mjs","check":"pnpm lint:file-size && pnpm lint:fs-boundary && pnpm build && pnpm docs:check && pnpm test && node scripts/check-pack.mjs","prepack":"node scripts/prepack-build.mjs","test:bun":"bun node_modules/vitest/vitest.mjs run --config scripts/bun-vitest.config.ts","benchmark":"node scripts/benchmark.mjs","docs:site":"node scripts/build-docs-site.mjs","docs:check":"node scripts/check-doc-examples.mjs","pack:check":"pnpm build && node scripts/check-pack.mjs","crabbox:run":"crabbox run","native:test":"cargo test --workspace","archive:wasm":"node scripts/build-archive-wasm.mjs","crabbox:stop":"crabbox stop","native:build":"pnpm --filter @openclaw/fs-safe-native-build build","test:changed":"pnpm run test","check:changed":"pnpm run check","package:smoke":"node scripts/check-release-packages.mjs --allow-host-only --output release-artifacts","release:notes":"node scripts/release-notes.mjs","test:coverage":"vitest run --coverage","test:security":"vitest run test/fs-safe.test.ts test/read-boundary-bypass.test.ts test/write-boundary-bypass.test.ts test/additional-boundary-bypass.test.ts test/adversarial-boundary-payloads.test.ts","crabbox:warmup":"crabbox warmup","lint:file-size":"node scripts/check-file-size.mjs","crabbox:hydrate":"crabbox actions hydrate","package:collect":"node scripts/check-release-packages.mjs --output release-artifacts","test:bun:native":"bun scripts/bun-native-proof.mjs && bun node_modules/vitest/vitest.mjs run --config scripts/bun-native-vitest.config.ts","lint:fs-boundary":"node scripts/check-fs-boundary-primitives.mjs","benchmark:methods":"node benchmarks/runner.mjs","benchmark:publish":"pnpm build && node scripts/bench-publish.mjs","public-api:update":"pnpm build && node scripts/check-pack.mjs --update-public-api","test:coverage:merge":"node scripts/merge-coverage.mjs","test:coverage:collect":"pnpm build && vitest run --coverage --coverage.reporter=json --coverage.thresholds.lines=0 --coverage.thresholds.functions=0 --coverage.thresholds.statements=0 --coverage.thresholds.branches=0","archive:producer-smoke":"node scripts/archive-producer-smoke.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:71485d21-a8c3-4f6c-ae40-dd60e3585161"}},"_resolved":"/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.13.0.tgz","_integrity":"sha512-8dyH9wMH5PFsOZZocY/lb+EYFMVN3+BMaPo0z2a1YwaOrkwrEt6kLvhI2g0X2AAKeq75r99cS1aMvY+Tk3wa6g==","repository":{"url":"git+https://github.com/openclaw/fs-safe.git","type":"git"},"_npmVersion":"12.0.2","description":"Capability-style filesystem roots for Node.js apps that handle untrusted relative paths.","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@11.25.0","devDependencies":{"tar":"7.5.22","vite":"8.3.0","vitest":"^5.0.0","sigstore":"5.0.0","fast-check":"^4.9.0","typescript":"^7.0.2","@types/node":"^26.5.1","@napi-rs/cli":"3.9.1","@emnapi/runtime":"2.0.0-alpha.5","istanbul-reports":"3.2.0","@vitest/coverage-v8":"5.0.0","istanbul-lib-report":"3.0.1","istanbul-lib-coverage":"3.2.2"},"optionalDependencies":{"jszip":"^3.10.2","@openclaw/fs-safe-darwin-x64":"0.13.0","@openclaw/fs-safe-darwin-arm64":"0.13.0","@openclaw/fs-safe-linux-x64-gnu":"0.13.0","@openclaw/fs-safe-linux-x64-musl":"0.13.0","@openclaw/fs-safe-win32-x64-msvc":"0.13.0","@openclaw/fs-safe-linux-arm64-gnu":"0.13.0","@openclaw/fs-safe-linux-arm64-musl":"0.13.0"},"_npmOperationalInternal":{"tmp":"tmp/fs-safe_0.13.0_1789581470553_0.23884868825540106","host":"s3://npm-registry-packages-npm-production"}},"0.13.1":{"name":"@openclaw/fs-safe","version":"0.13.1","keywords":["filesystem","openclaw","path-traversal","security","typescript"],"author":{"name":"OpenClaw Team","email":"dev@openclaw.ai"},"license":"MIT","_id":"@openclaw/fs-safe@0.13.1","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://fs-safe.io","bugs":{"url":"https://github.com/openclaw/fs-safe/issues"},"dist":{"shasum":"e6e3f4bb697ea515f047553eb66ca4c0d7b88024","tarball":"https://registry.npmjs.org/@openclaw/fs-safe/-/fs-safe-0.13.1.tgz","fileCount":773,"integrity":"sha512-nfsEjPirAKotKBaQoQt10JbZx3RwkFIcv2Ujj0m3DCJCP5Jre3AUnMatVinsNL/W60IL4XeRWEXCvlra7edx7g==","signatures":[{"sig":"MEYCIQCc4ljYptRwKfpoYE3oCppk1V5nkttVgNM3QbXdmDEtSwIhAPy2/+bSuCrNgpCBdW8lXTgkViUJgFHQiBFU0zfYGOIM","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIDtBZNWr6R1+vzDh2wxnTdT9nN9xH3IeFXSv9iq6pMYQAiArrBl/0ONKe9r4FgdRIP+2uUn6FiIhb7OtZQymGdRA8A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@openclaw%2ffs-safe@0.13.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3045948},"type":"module","_from":"file:/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.13.1.tgz","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./copy":{"types":"./dist/copy.d.ts","default":"./dist/copy.js"},"./json":{"types":"./dist/json.d.ts","default":"./dist/json.js"},"./path":{"types":"./dist/path.d.ts","default":"./dist/path.js"},"./root":{"types":"./dist/root.d.ts","default":"./dist/root.js"},"./temp":{"types":"./dist/temp.d.ts","default":"./dist/temp.js"},"./walk":{"types":"./dist/walk.d.ts","default":"./dist/walk.js"},"./guest":{"types":"./dist/guest.d.ts","default":"./dist/guest.js"},"./store":{"types":"./dist/store.d.ts","default":"./dist/store.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./atomic":{"types":"./dist/atomic.d.ts","default":"./dist/atomic.js"},"./config":{"types":"./dist/config.d.ts","default":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","default":"./dist/errors.js"},"./output":{"types":"./dist/output.d.ts","default":"./dist/output.js"},"./secret":{"types":"./dist/secret.d.ts","default":"./dist/secret.js"},"./archive":{"types":"./dist/archive.d.ts","default":"./dist/archive.js"},"./advanced":{"types":"./dist/advanced.d.ts","default":"./dist/advanced.js"},"./file-lock":{"types":"./dist/file-lock.d.ts","default":"./dist/file-lock.js"},"./durability":{"types":"./dist/durability.d.ts","default":"./dist/durability.js"},"./test-hooks":{"types":"./dist/test-hooks.d.ts","default":"./dist/test-hooks.js"},"./permissions":{"types":"./dist/permissions-public.d.ts","default":"./dist/permissions-public.js"},"./secure-file":{"types":"./dist/secure-file.d.ts","default":"./dist/secure-file.js"},"./package.json":"./package.json","./secure-temp-root":{"types":"./dist/secure-temp-dir.d.ts","default":"./dist/secure-temp-dir.js"}},"scripts":{"test":"vitest run","build":"node scripts/prepack-build.mjs","check":"pnpm lint:file-size && pnpm lint:fs-boundary && pnpm build && pnpm docs:check && pnpm test && node scripts/check-pack.mjs","prepack":"node scripts/prepack-build.mjs","test:bun":"bun node_modules/vitest/vitest.mjs run --config scripts/bun-vitest.config.ts","benchmark":"node scripts/benchmark.mjs","docs:site":"node scripts/build-docs-site.mjs","docs:check":"node scripts/check-doc-examples.mjs","pack:check":"pnpm build && node scripts/check-pack.mjs","crabbox:run":"crabbox run","native:test":"cargo test --workspace","archive:wasm":"node scripts/build-archive-wasm.mjs","crabbox:stop":"crabbox stop","native:build":"pnpm --filter @openclaw/fs-safe-native-build build","test:changed":"pnpm run test","check:changed":"pnpm run check","package:smoke":"node scripts/check-release-packages.mjs --allow-host-only --output release-artifacts","release:notes":"node scripts/release-notes.mjs","test:coverage":"vitest run --coverage","test:security":"vitest run test/fs-safe.test.ts test/read-boundary-bypass.test.ts test/write-boundary-bypass.test.ts test/additional-boundary-bypass.test.ts test/adversarial-boundary-payloads.test.ts","crabbox:warmup":"crabbox warmup","lint:file-size":"node scripts/check-file-size.mjs","crabbox:hydrate":"crabbox actions hydrate","package:collect":"node scripts/check-release-packages.mjs --output release-artifacts","test:bun:native":"bun scripts/bun-native-proof.mjs && bun node_modules/vitest/vitest.mjs run --config scripts/bun-native-vitest.config.ts","lint:fs-boundary":"node scripts/check-fs-boundary-primitives.mjs","benchmark:methods":"node benchmarks/runner.mjs","benchmark:publish":"pnpm build && node scripts/bench-publish.mjs","public-api:update":"pnpm build && node scripts/check-pack.mjs --update-public-api","test:coverage:merge":"node scripts/merge-coverage.mjs","test:coverage:collect":"pnpm build && vitest run --coverage --coverage.reporter=json --coverage.thresholds.lines=0 --coverage.thresholds.functions=0 --coverage.thresholds.statements=0 --coverage.thresholds.branches=0","archive:producer-smoke":"node scripts/archive-producer-smoke.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:71485d21-a8c3-4f6c-ae40-dd60e3585161"}},"_resolved":"/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.13.1.tgz","_integrity":"sha512-nfsEjPirAKotKBaQoQt10JbZx3RwkFIcv2Ujj0m3DCJCP5Jre3AUnMatVinsNL/W60IL4XeRWEXCvlra7edx7g==","repository":{"url":"git+https://github.com/openclaw/fs-safe.git","type":"git"},"_npmVersion":"12.0.2","description":"Capability-style filesystem roots for Node.js apps that handle untrusted relative paths.","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@11.25.0","devDependencies":{"tar":"7.5.22","vite":"8.3.0","vitest":"^5.0.0","sigstore":"5.0.0","fast-check":"^4.9.0","typescript":"^7.0.2","@types/node":"^26.5.1","@napi-rs/cli":"3.9.1","@emnapi/runtime":"2.0.0-alpha.5","istanbul-reports":"3.2.0","@vitest/coverage-v8":"5.0.0","istanbul-lib-report":"3.0.1","istanbul-lib-coverage":"3.2.2"},"optionalDependencies":{"jszip":"^3.10.2","@openclaw/fs-safe-darwin-x64":"0.13.1","@openclaw/fs-safe-darwin-arm64":"0.13.1","@openclaw/fs-safe-linux-x64-gnu":"0.13.1","@openclaw/fs-safe-linux-x64-musl":"0.13.1","@openclaw/fs-safe-win32-x64-msvc":"0.13.1","@openclaw/fs-safe-linux-arm64-gnu":"0.13.1","@openclaw/fs-safe-linux-arm64-musl":"0.13.1"},"_npmOperationalInternal":{"tmp":"tmp/fs-safe_0.13.1_1789596056301_0.7218695188409228","host":"s3://npm-registry-packages-npm-production"}},"0.14.0":{"name":"@openclaw/fs-safe","version":"0.14.0","keywords":["filesystem","openclaw","path-traversal","security","typescript"],"author":{"name":"OpenClaw Team","email":"dev@openclaw.ai"},"license":"MIT","_id":"@openclaw/fs-safe@0.14.0","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://fs-safe.io","bugs":{"url":"https://github.com/openclaw/fs-safe/issues"},"dist":{"shasum":"98e47c2d9cdc58ab0920ee2db7bc1effddd1eb06","tarball":"https://registry.npmjs.org/@openclaw/fs-safe/-/fs-safe-0.14.0.tgz","fileCount":779,"integrity":"sha512-QvowaR5IGtEe/HUTvxWZDZgV4NZyzKUkuZk05r7vrzlNSfcT4PALhbkbTguDNXMMVNA5URCt2f2vqk/3e8cwYw==","signatures":[{"sig":"MEUCIQDTsCoqCUJMPniABtOGDgdBibnxtaxx+UUrKF9rs7bgbwIgEPK4lB0Xe/6ppXHByZ1lHhQ5Xvci4pgURsi7vhE6ANo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIED564e4am4v8bQ+awonSqc24DwkN2SVh36ANMrEo72jAiB9oHTI4pTrsZI4uXwnX/xDTsPOiH+Vm6REs6xEb0rxgw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@openclaw%2ffs-safe@0.14.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3068861},"type":"module","_from":"file:/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.14.0.tgz","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./copy":{"types":"./dist/copy.d.ts","default":"./dist/copy.js"},"./json":{"types":"./dist/json.d.ts","default":"./dist/json.js"},"./path":{"types":"./dist/path.d.ts","default":"./dist/path.js"},"./root":{"types":"./dist/root.d.ts","default":"./dist/root.js"},"./temp":{"types":"./dist/temp.d.ts","default":"./dist/temp.js"},"./walk":{"types":"./dist/walk.d.ts","default":"./dist/walk.js"},"./guest":{"types":"./dist/guest.d.ts","default":"./dist/guest.js"},"./store":{"types":"./dist/store.d.ts","default":"./dist/store.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./atomic":{"types":"./dist/atomic.d.ts","default":"./dist/atomic.js"},"./config":{"types":"./dist/config.d.ts","default":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","default":"./dist/errors.js"},"./output":{"types":"./dist/output.d.ts","default":"./dist/output.js"},"./secret":{"types":"./dist/secret.d.ts","default":"./dist/secret.js"},"./archive":{"types":"./dist/archive.d.ts","default":"./dist/archive.js"},"./advanced":{"types":"./dist/advanced.d.ts","default":"./dist/advanced.js"},"./file-lock":{"types":"./dist/file-lock.d.ts","default":"./dist/file-lock.js"},"./durability":{"types":"./dist/durability.d.ts","default":"./dist/durability.js"},"./test-hooks":{"types":"./dist/test-hooks.d.ts","default":"./dist/test-hooks.js"},"./permissions":{"types":"./dist/permissions-public.d.ts","default":"./dist/permissions-public.js"},"./secure-file":{"types":"./dist/secure-file.d.ts","default":"./dist/secure-file.js"},"./package.json":"./package.json","./secure-temp-root":{"types":"./dist/secure-temp-dir.d.ts","default":"./dist/secure-temp-dir.js"}},"scripts":{"test":"vitest run","build":"node scripts/prepack-build.mjs","check":"pnpm lint:file-size && pnpm lint:fs-boundary && pnpm build && pnpm docs:check && pnpm test && node scripts/check-pack.mjs","prepack":"node scripts/prepack-build.mjs","test:bun":"bun node_modules/vitest/vitest.mjs run --config scripts/bun-vitest.config.ts","benchmark":"node scripts/benchmark.mjs","docs:site":"node scripts/build-docs-site.mjs","docs:check":"node scripts/check-doc-examples.mjs","pack:check":"pnpm build && node scripts/check-pack.mjs","crabbox:run":"crabbox run","native:test":"cargo test --workspace","archive:wasm":"node scripts/build-archive-wasm.mjs","crabbox:stop":"crabbox stop","native:build":"pnpm --filter @openclaw/fs-safe-native-build build","test:changed":"pnpm run test","check:changed":"pnpm run check","package:smoke":"node scripts/check-release-packages.mjs --allow-host-only --output release-artifacts","release:notes":"node scripts/release-notes.mjs","test:coverage":"vitest run --coverage","test:security":"vitest run test/fs-safe.test.ts test/read-boundary-bypass.test.ts test/write-boundary-bypass.test.ts test/additional-boundary-bypass.test.ts test/adversarial-boundary-payloads.test.ts","crabbox:warmup":"crabbox warmup","lint:file-size":"node scripts/check-file-size.mjs","crabbox:hydrate":"crabbox actions hydrate","package:collect":"node scripts/check-release-packages.mjs --output release-artifacts","test:bun:native":"bun scripts/bun-native-proof.mjs && bun node_modules/vitest/vitest.mjs run --config scripts/bun-native-vitest.config.ts","lint:fs-boundary":"node scripts/check-fs-boundary-primitives.mjs","benchmark:methods":"node benchmarks/runner.mjs","benchmark:publish":"pnpm build && node scripts/bench-publish.mjs","public-api:update":"pnpm build && node scripts/check-pack.mjs --update-public-api","test:coverage:merge":"node scripts/merge-coverage.mjs","test:coverage:collect":"pnpm build && vitest run --coverage --coverage.reporter=json --coverage.thresholds.lines=0 --coverage.thresholds.functions=0 --coverage.thresholds.statements=0 --coverage.thresholds.branches=0","archive:producer-smoke":"node scripts/archive-producer-smoke.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:71485d21-a8c3-4f6c-ae40-dd60e3585161"}},"_resolved":"/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.14.0.tgz","_integrity":"sha512-QvowaR5IGtEe/HUTvxWZDZgV4NZyzKUkuZk05r7vrzlNSfcT4PALhbkbTguDNXMMVNA5URCt2f2vqk/3e8cwYw==","repository":{"url":"git+https://github.com/openclaw/fs-safe.git","type":"git"},"_npmVersion":"12.0.2","description":"Capability-style filesystem roots for Node.js apps that handle untrusted relative paths.","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@11.25.0","devDependencies":{"tar":"7.5.22","vite":"8.3.0","vitest":"^5.0.0","sigstore":"5.0.0","fast-check":"^4.9.0","typescript":"^7.0.2","@types/node":"^26.5.1","@napi-rs/cli":"3.9.1","@emnapi/runtime":"2.0.0-alpha.5","istanbul-reports":"3.2.0","@vitest/coverage-v8":"5.0.0","istanbul-lib-report":"3.0.1","istanbul-lib-coverage":"3.2.2"},"optionalDependencies":{"jszip":"^3.10.2","@openclaw/fs-safe-darwin-x64":"0.14.0","@openclaw/fs-safe-darwin-arm64":"0.14.0","@openclaw/fs-safe-linux-x64-gnu":"0.14.0","@openclaw/fs-safe-linux-x64-musl":"0.14.0","@openclaw/fs-safe-win32-x64-msvc":"0.14.0","@openclaw/fs-safe-linux-arm64-gnu":"0.14.0","@openclaw/fs-safe-linux-arm64-musl":"0.14.0"},"_npmOperationalInternal":{"tmp":"tmp/fs-safe_0.14.0_1789639134905_0.7328411451199706","host":"s3://npm-registry-packages-npm-production"}},"0.15.0":{"name":"@openclaw/fs-safe","version":"0.15.0","keywords":["filesystem","openclaw","path-traversal","security","typescript"],"author":{"name":"OpenClaw Team","email":"dev@openclaw.ai"},"license":"MIT","_id":"@openclaw/fs-safe@0.15.0","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://fs-safe.io","bugs":{"url":"https://github.com/openclaw/fs-safe/issues"},"dist":{"shasum":"29898376fa0328f16c8c50617e1e3a87ab89d3f9","tarball":"https://registry.npmjs.org/@openclaw/fs-safe/-/fs-safe-0.15.0.tgz","fileCount":830,"integrity":"sha512-np+OHOn7eeENHgwoMzc3h0PjXjepIv0VDAk4Qfwwut9b8VGdroYnJlG8Ea36kZYQvrkUjbT+aSpBlra8KNXKcg==","signatures":[{"sig":"MEUCIQC27YsZE143b3WP5NBLaRtAQ+dfSSSlxDQMuUjrnpc/9wIgexhGuU9dcGoZa39EenM6/dRIVoZFTLG1I+AcVOwoj7s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDC42XKwGxiRq57zGlHbT3Lrvxu1q6yG/PSuKg0CrQ06QIhAOcw8YXhX4rEoEWbmcteOWq+PA4nYTGhXgOaWIzL7jA7","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@openclaw%2ffs-safe@0.15.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3317875},"type":"module","_from":"file:/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.15.0.tgz","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./copy":{"types":"./dist/copy.d.ts","default":"./dist/copy.js"},"./json":{"types":"./dist/json.d.ts","default":"./dist/json.js"},"./path":{"types":"./dist/path.d.ts","default":"./dist/path.js"},"./root":{"types":"./dist/root.d.ts","default":"./dist/root.js"},"./temp":{"types":"./dist/temp.d.ts","default":"./dist/temp.js"},"./walk":{"types":"./dist/walk.d.ts","default":"./dist/walk.js"},"./guest":{"types":"./dist/guest.d.ts","default":"./dist/guest.js"},"./store":{"types":"./dist/store.d.ts","default":"./dist/store.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./atomic":{"types":"./dist/atomic.d.ts","default":"./dist/atomic.js"},"./config":{"types":"./dist/config.d.ts","default":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","default":"./dist/errors.js"},"./output":{"types":"./dist/output.d.ts","default":"./dist/output.js"},"./secret":{"types":"./dist/secret.d.ts","default":"./dist/secret.js"},"./archive":{"types":"./dist/archive.d.ts","default":"./dist/archive.js"},"./advanced":{"types":"./dist/advanced.d.ts","default":"./dist/advanced.js"},"./file-lock":{"types":"./dist/file-lock.d.ts","default":"./dist/file-lock.js"},"./durability":{"types":"./dist/durability.d.ts","default":"./dist/durability.js"},"./test-hooks":{"types":"./dist/test-hooks.d.ts","default":"./dist/test-hooks.js"},"./permissions":{"types":"./dist/permissions-public.d.ts","default":"./dist/permissions-public.js"},"./secure-file":{"types":"./dist/secure-file.d.ts","default":"./dist/secure-file.js"},"./package.json":"./package.json","./secure-temp-root":{"types":"./dist/secure-temp-dir.d.ts","default":"./dist/secure-temp-dir.js"}},"scripts":{"test":"vitest run","build":"node scripts/prepack-build.mjs","check":"pnpm lint:file-size && pnpm lint:fs-boundary && pnpm build && pnpm docs:check && pnpm test && node scripts/check-pack.mjs","prepack":"node scripts/prepack-build.mjs","test:bun":"bun node_modules/vitest/vitest.mjs run --config scripts/bun-vitest.config.ts","benchmark":"node scripts/benchmark.mjs","docs:site":"node scripts/build-docs-site.mjs","docs:check":"node scripts/check-doc-examples.mjs","pack:check":"pnpm build && node scripts/check-pack.mjs","crabbox:run":"crabbox run","native:test":"cargo test --workspace","archive:wasm":"node scripts/build-archive-wasm.mjs","crabbox:stop":"crabbox stop","native:build":"pnpm --filter @openclaw/fs-safe-native-build build","test:changed":"pnpm run test","check:changed":"pnpm run check","package:smoke":"node scripts/check-release-packages.mjs --allow-host-only --output release-artifacts","release:notes":"node scripts/release-notes.mjs","test:coverage":"vitest run --coverage","test:security":"vitest run test/fs-safe.test.ts test/read-boundary-bypass.test.ts test/write-boundary-bypass.test.ts test/additional-boundary-bypass.test.ts test/adversarial-boundary-payloads.test.ts","crabbox:warmup":"crabbox warmup","lint:file-size":"node scripts/check-file-size.mjs","crabbox:hydrate":"crabbox actions hydrate","package:collect":"node scripts/check-release-packages.mjs --output release-artifacts","test:bun:native":"bun scripts/bun-native-proof.mjs && bun node_modules/vitest/vitest.mjs run --config scripts/bun-native-vitest.config.ts","lint:fs-boundary":"node scripts/check-fs-boundary-primitives.mjs","benchmark:methods":"node benchmarks/runner.mjs","benchmark:publish":"pnpm build && node scripts/bench-publish.mjs","public-api:update":"pnpm build && node scripts/check-pack.mjs --update-public-api","test:coverage:merge":"node scripts/merge-coverage.mjs","test:coverage:collect":"pnpm build && vitest run --coverage --coverage.reporter=json --coverage.thresholds.lines=0 --coverage.thresholds.functions=0 --coverage.thresholds.statements=0 --coverage.thresholds.branches=0","archive:producer-smoke":"node scripts/archive-producer-smoke.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:71485d21-a8c3-4f6c-ae40-dd60e3585161"}},"_resolved":"/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.15.0.tgz","_integrity":"sha512-np+OHOn7eeENHgwoMzc3h0PjXjepIv0VDAk4Qfwwut9b8VGdroYnJlG8Ea36kZYQvrkUjbT+aSpBlra8KNXKcg==","repository":{"url":"git+https://github.com/openclaw/fs-safe.git","type":"git"},"_npmVersion":"12.0.2","description":"Capability-style filesystem roots for Node.js apps that handle untrusted relative paths.","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@11.25.0","devDependencies":{"tar":"7.5.22","vite":"8.3.0","vitest":"^5.0.0","sigstore":"5.0.0","fast-check":"^4.9.0","typescript":"^7.0.2","@types/node":"^26.5.1","@napi-rs/cli":"3.10.0","@emnapi/runtime":"2.0.0-alpha.5","istanbul-reports":"3.2.0","@vitest/coverage-v8":"5.0.1","istanbul-lib-report":"3.0.1","istanbul-lib-coverage":"3.2.2"},"optionalDependencies":{"jszip":"^3.10.2","@openclaw/fs-safe-darwin-x64":"0.15.0","@openclaw/fs-safe-darwin-arm64":"0.15.0","@openclaw/fs-safe-linux-x64-gnu":"0.15.0","@openclaw/fs-safe-linux-x64-musl":"0.15.0","@openclaw/fs-safe-win32-x64-msvc":"0.15.0","@openclaw/fs-safe-linux-arm64-gnu":"0.15.0","@openclaw/fs-safe-linux-arm64-musl":"0.15.0"},"_npmOperationalInternal":{"tmp":"tmp/fs-safe_0.15.0_1789745676289_0.9824009689126807","host":"s3://npm-registry-packages-npm-production"}},"0.16.0":{"name":"@openclaw/fs-safe","version":"0.16.0","keywords":["filesystem","openclaw","path-traversal","security","typescript"],"author":{"name":"OpenClaw Team","email":"dev@openclaw.ai"},"license":"MIT","_id":"@openclaw/fs-safe@0.16.0","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://fs-safe.io","bugs":{"url":"https://github.com/openclaw/fs-safe/issues"},"dist":{"shasum":"231111467dcf6f38615794b79abb05302e8d5748","tarball":"https://registry.npmjs.org/@openclaw/fs-safe/-/fs-safe-0.16.0.tgz","fileCount":890,"integrity":"sha512-jRCVSEfnJQdyAV7LyYOnysV09EQRoQ7KcEysLLhBtzdNVwjYtZApnwwoDDpf38IF2pXIeok0cB679yVUUkAOpg==","signatures":[{"sig":"MEUCIE5fRWUWShVC8uZ04zQuaFW6Zs6t7KFd9uAO/qUcra3/AiEA8IEWQe6AqFqAj9dlmJMzoPc/5T6+Y2lN2J0+0K65DqI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCXBJ4iZXrNdZOIFzTKwhBfi5UJbFkHmDnX83CBAu7UawIhALteRjZoOxJQBeIu2N3RWHW/0Ovzt42Fq5Ubnlon+uy5","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@openclaw%2ffs-safe@0.16.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3542899},"type":"module","_from":"file:/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.16.0.tgz","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./copy":{"types":"./dist/copy.d.ts","default":"./dist/copy.js"},"./json":{"types":"./dist/json.d.ts","default":"./dist/json.js"},"./path":{"types":"./dist/path.d.ts","default":"./dist/path.js"},"./root":{"types":"./dist/root.d.ts","default":"./dist/root.js"},"./temp":{"types":"./dist/temp.d.ts","default":"./dist/temp.js"},"./walk":{"types":"./dist/walk.d.ts","default":"./dist/walk.js"},"./guest":{"types":"./dist/guest.d.ts","default":"./dist/guest.js"},"./store":{"types":"./dist/store.d.ts","default":"./dist/store.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./atomic":{"types":"./dist/atomic.d.ts","default":"./dist/atomic.js"},"./config":{"types":"./dist/config.d.ts","default":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","default":"./dist/errors.js"},"./output":{"types":"./dist/output.d.ts","default":"./dist/output.js"},"./secret":{"types":"./dist/secret.d.ts","default":"./dist/secret.js"},"./archive":{"types":"./dist/archive.d.ts","default":"./dist/archive.js"},"./advanced":{"types":"./dist/advanced.d.ts","default":"./dist/advanced.js"},"./file-lock":{"types":"./dist/file-lock.d.ts","default":"./dist/file-lock.js"},"./durability":{"types":"./dist/durability.d.ts","default":"./dist/durability.js"},"./test-hooks":{"types":"./dist/test-hooks.d.ts","default":"./dist/test-hooks.js"},"./permissions":{"types":"./dist/permissions-public.d.ts","default":"./dist/permissions-public.js"},"./secure-file":{"types":"./dist/secure-file.d.ts","default":"./dist/secure-file.js"},"./package.json":"./package.json","./secure-temp-root":{"types":"./dist/secure-temp-dir.d.ts","default":"./dist/secure-temp-dir.js"}},"scripts":{"test":"vitest run","build":"node scripts/prepack-build.mjs","check":"pnpm lint:file-size && pnpm lint:fs-boundary && pnpm build && pnpm archive:wasm:allocator-tests && pnpm docs:check && pnpm test && node scripts/check-pack.mjs","prepack":"node scripts/prepack-build.mjs","test:bun":"bun node_modules/vitest/vitest.mjs run --config scripts/bun-vitest.config.ts","benchmark":"node scripts/benchmark.mjs","docs:site":"node scripts/build-docs-site.mjs","docs:check":"node scripts/check-doc-examples.mjs","pack:check":"pnpm build && node scripts/check-pack.mjs","crabbox:run":"crabbox run","native:test":"cargo test --workspace","archive:wasm":"node scripts/build-archive-wasm.mjs","crabbox:stop":"crabbox stop","native:build":"pnpm --filter @openclaw/fs-safe-native-build build","test:changed":"pnpm run test","check:changed":"pnpm run check","package:smoke":"node scripts/check-release-packages.mjs --allow-host-only --output release-artifacts","release:notes":"node scripts/release-notes.mjs","test:coverage":"vitest run --coverage","test:security":"vitest run test/fs-safe.test.ts test/read-boundary-bypass.test.ts test/write-boundary-bypass.test.ts test/additional-boundary-bypass.test.ts test/adversarial-boundary-payloads.test.ts","crabbox:warmup":"crabbox warmup","lint:file-size":"node scripts/check-file-size.mjs","crabbox:hydrate":"crabbox actions hydrate","package:collect":"node scripts/check-release-packages.mjs --output release-artifacts","test:bun:native":"bun scripts/bun-native-proof.mjs && bun node_modules/vitest/vitest.mjs run --config scripts/bun-native-vitest.config.ts","lint:fs-boundary":"node scripts/check-fs-boundary-primitives.mjs","benchmark:methods":"node benchmarks/runner.mjs","benchmark:publish":"pnpm build && node scripts/bench-publish.mjs","public-api:update":"pnpm build && node scripts/check-pack.mjs --update-public-api","test:coverage:merge":"node scripts/merge-coverage.mjs","test:coverage:collect":"pnpm build && pnpm archive:wasm:allocator-tests && vitest run --coverage --coverage.reporter=json --coverage.thresholds.lines=0 --coverage.thresholds.functions=0 --coverage.thresholds.statements=0 --coverage.thresholds.branches=0","archive:producer-smoke":"node scripts/archive-producer-smoke.mjs","archive:wasm:allocator-tests":"node scripts/build-archive-wasm.mjs --allocator-tests"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:71485d21-a8c3-4f6c-ae40-dd60e3585161"}},"_resolved":"/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.16.0.tgz","_integrity":"sha512-jRCVSEfnJQdyAV7LyYOnysV09EQRoQ7KcEysLLhBtzdNVwjYtZApnwwoDDpf38IF2pXIeok0cB679yVUUkAOpg==","repository":{"url":"git+https://github.com/openclaw/fs-safe.git","type":"git"},"_npmVersion":"12.0.2","description":"Capability-style filesystem roots for Node.js apps that handle untrusted relative paths.","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@12.4.2","devDependencies":{"tar":"7.5.22","vite":"8.3.0","vitest":"^5.0.1","sigstore":"5.0.0","fast-check":"^4.10.1","typescript":"^7.0.2","@types/node":"^26.6.1","@napi-rs/cli":"3.10.3","@emnapi/runtime":"2.0.0-alpha.5","istanbul-reports":"3.2.0","@vitest/coverage-v8":"5.0.1","istanbul-lib-report":"3.0.1","istanbul-lib-coverage":"3.2.2"},"optionalDependencies":{"jszip":"^3.10.2","@openclaw/fs-safe-darwin-x64":"0.16.0","@openclaw/fs-safe-darwin-arm64":"0.16.0","@openclaw/fs-safe-linux-x64-gnu":"0.16.0","@openclaw/fs-safe-linux-x64-musl":"0.16.0","@openclaw/fs-safe-win32-x64-msvc":"0.16.0","@openclaw/fs-safe-linux-arm64-gnu":"0.16.0","@openclaw/fs-safe-linux-arm64-musl":"0.16.0"},"_npmOperationalInternal":{"tmp":"tmp/fs-safe_0.16.0_1789800267691_0.6376492178283526","host":"s3://npm-registry-packages-npm-production"}},"0.17.0":{"name":"@openclaw/fs-safe","version":"0.17.0","keywords":["filesystem","openclaw","path-traversal","security","typescript"],"author":{"name":"OpenClaw Team","email":"dev@openclaw.ai"},"license":"MIT","_id":"@openclaw/fs-safe@0.17.0","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://fs-safe.io","bugs":{"url":"https://github.com/openclaw/fs-safe/issues"},"dist":{"shasum":"571cad125208a0f781be455f4e0cdba4467b72f7","tarball":"https://registry.npmjs.org/@openclaw/fs-safe/-/fs-safe-0.17.0.tgz","fileCount":897,"integrity":"sha512-T2p3BM5Iz3CnFdK6XkdMowKsaxTgZG9J/FTIlrA3U/wGZCAqfaqHylFOQqMQqIU14i+8A1OM6Vt80ycu1zeqQw==","signatures":[{"sig":"MEUCIQCoM1aebC3qE3tQc+RgdUzp+7RHKfgliNzCHuaGiJlBqAIgdqY6s67jqqimrFP3VhuLoKdh26GzmOO4fRgmMbhCa9M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIG9+3CD6Po0TrEjzV2tD2C7U1t5TJu1Za4/d0X8ggvbvAiEA+xo+c7YHf3ZleGmFpYJzgbrHwK4dyR4mzRwphYtIqbE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@openclaw%2ffs-safe@0.17.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3587495},"type":"module","_from":"file:/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.17.0.tgz","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./copy":{"types":"./dist/copy.d.ts","default":"./dist/copy.js"},"./json":{"types":"./dist/json.d.ts","default":"./dist/json.js"},"./path":{"types":"./dist/path.d.ts","default":"./dist/path.js"},"./root":{"types":"./dist/root.d.ts","default":"./dist/root.js"},"./temp":{"types":"./dist/temp.d.ts","default":"./dist/temp.js"},"./walk":{"types":"./dist/walk.d.ts","default":"./dist/walk.js"},"./guest":{"types":"./dist/guest.d.ts","default":"./dist/guest.js"},"./store":{"types":"./dist/store.d.ts","default":"./dist/store.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./atomic":{"types":"./dist/atomic.d.ts","default":"./dist/atomic.js"},"./config":{"types":"./dist/config.d.ts","default":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","default":"./dist/errors.js"},"./output":{"types":"./dist/output.d.ts","default":"./dist/output.js"},"./secret":{"types":"./dist/secret.d.ts","default":"./dist/secret.js"},"./archive":{"types":"./dist/archive.d.ts","default":"./dist/archive.js"},"./advanced":{"types":"./dist/advanced.d.ts","default":"./dist/advanced.js"},"./file-lock":{"types":"./dist/file-lock.d.ts","default":"./dist/file-lock.js"},"./durability":{"types":"./dist/durability.d.ts","default":"./dist/durability.js"},"./test-hooks":{"types":"./dist/test-hooks.d.ts","default":"./dist/test-hooks.js"},"./permissions":{"types":"./dist/permissions-public.d.ts","default":"./dist/permissions-public.js"},"./secure-file":{"types":"./dist/secure-file.d.ts","default":"./dist/secure-file.js"},"./package.json":"./package.json","./secure-temp-root":{"types":"./dist/secure-temp-dir.d.ts","default":"./dist/secure-temp-dir.js"}},"scripts":{"test":"vitest run","build":"node scripts/prepack-build.mjs","check":"pnpm lint:file-size && pnpm lint:fs-boundary && pnpm build && pnpm archive:wasm:allocator-tests && pnpm docs:check && pnpm test && node scripts/check-pack.mjs","prepack":"node scripts/prepack-build.mjs","test:bun":"bun node_modules/vitest/vitest.mjs run --config scripts/bun-vitest.config.ts","benchmark":"node scripts/benchmark.mjs","docs:site":"node scripts/build-docs-site.mjs","docs:check":"node scripts/check-doc-examples.mjs","pack:check":"pnpm build && node scripts/check-pack.mjs","crabbox:run":"crabbox run","native:test":"cargo test --workspace","archive:wasm":"node scripts/build-archive-wasm.mjs","crabbox:stop":"crabbox stop","native:build":"pnpm --filter @openclaw/fs-safe-native-build build","test:changed":"pnpm run test","check:changed":"pnpm run check","package:smoke":"node scripts/check-release-packages.mjs --allow-host-only --output release-artifacts","release:notes":"node scripts/release-notes.mjs","test:coverage":"vitest run --coverage","test:security":"vitest run test/fs-safe.test.ts test/read-boundary-bypass.test.ts test/write-boundary-bypass.test.ts test/additional-boundary-bypass.test.ts test/adversarial-boundary-payloads.test.ts","crabbox:warmup":"crabbox warmup","lint:file-size":"node scripts/check-file-size.mjs","crabbox:hydrate":"crabbox actions hydrate","package:collect":"node scripts/check-release-packages.mjs --output release-artifacts","test:bun:native":"bun scripts/bun-native-proof.mjs && bun node_modules/vitest/vitest.mjs run --config scripts/bun-native-vitest.config.ts","lint:fs-boundary":"node scripts/check-fs-boundary-primitives.mjs","benchmark:methods":"node benchmarks/runner.mjs","benchmark:publish":"pnpm build && node scripts/bench-publish.mjs","public-api:update":"pnpm build && node scripts/check-pack.mjs --update-public-api","test:coverage:merge":"node scripts/merge-coverage.mjs","test:coverage:collect":"pnpm build && pnpm archive:wasm:allocator-tests && vitest run --coverage --coverage.reporter=json --coverage.thresholds.lines=0 --coverage.thresholds.functions=0 --coverage.thresholds.statements=0 --coverage.thresholds.branches=0","archive:producer-smoke":"node scripts/archive-producer-smoke.mjs","archive:wasm:allocator-tests":"node scripts/build-archive-wasm.mjs --allocator-tests"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:71485d21-a8c3-4f6c-ae40-dd60e3585161"}},"_resolved":"/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.17.0.tgz","_integrity":"sha512-T2p3BM5Iz3CnFdK6XkdMowKsaxTgZG9J/FTIlrA3U/wGZCAqfaqHylFOQqMQqIU14i+8A1OM6Vt80ycu1zeqQw==","repository":{"url":"git+https://github.com/openclaw/fs-safe.git","type":"git"},"_npmVersion":"12.0.2","description":"Capability-style filesystem roots for Node.js apps that handle untrusted relative paths.","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@12.4.2","devDependencies":{"tar":"7.5.22","vite":"8.3.0","vitest":"^5.0.1","sigstore":"5.0.0","fast-check":"^4.10.1","typescript":"^7.0.2","@types/node":"^26.6.1","@napi-rs/cli":"3.10.3","@emnapi/runtime":"2.0.0-alpha.5","istanbul-reports":"3.2.0","@vitest/coverage-v8":"5.0.1","istanbul-lib-report":"3.0.1","istanbul-lib-coverage":"3.2.2"},"optionalDependencies":{"jszip":"^3.10.2","@openclaw/fs-safe-darwin-x64":"0.17.0","@openclaw/fs-safe-darwin-arm64":"0.17.0","@openclaw/fs-safe-linux-x64-gnu":"0.17.0","@openclaw/fs-safe-linux-x64-musl":"0.17.0","@openclaw/fs-safe-win32-x64-msvc":"0.17.0","@openclaw/fs-safe-linux-arm64-gnu":"0.17.0","@openclaw/fs-safe-linux-arm64-musl":"0.17.0"},"_npmOperationalInternal":{"tmp":"tmp/fs-safe_0.17.0_1789923275369_0.44465024880133197","host":"s3://npm-registry-packages-npm-production"}},"0.18.0":{"name":"@openclaw/fs-safe","version":"0.18.0","keywords":["filesystem","openclaw","path-traversal","security","typescript"],"author":{"name":"OpenClaw Team","email":"dev@openclaw.ai"},"license":"MIT","_id":"@openclaw/fs-safe@0.18.0","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://fs-safe.io","bugs":{"url":"https://github.com/openclaw/fs-safe/issues"},"dist":{"shasum":"155789db3f7fa0501043b9cf44d33fad3378884d","tarball":"https://registry.npmjs.org/@openclaw/fs-safe/-/fs-safe-0.18.0.tgz","fileCount":621,"integrity":"sha512-eSPdJUUIHSPMc0iHwgvONxEtFQ8AwtDGBwWLjOau7THlnL173QArWE9xlsxsOOacAcjG6awVo25IU4D6Dxfzng==","signatures":[{"sig":"MEUCIQCp6oYmTV745Y8neElm0ad9IZdCmplyyLZzOf+w95ZG+gIgFsmXjqQ9YXhdDzPH42bqwptlslNBL/imqb1fbSuO/y0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCICdYwC8ehO4lz8Jwb5g4aYzDJwlejAesItJtBfs+BB4WAiAY0mjCvohVTJDAp8VndhThPFMB1Y7BahoD9HNsoyYDfQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@openclaw%2ffs-safe@0.18.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3298787},"type":"module","_from":"file:/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.18.0.tgz","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./copy":{"types":"./dist/copy.d.ts","default":"./dist/copy.js"},"./json":{"types":"./dist/json.d.ts","default":"./dist/json.js"},"./path":{"types":"./dist/path.d.ts","default":"./dist/path.js"},"./root":{"types":"./dist/root.d.ts","default":"./dist/root.js"},"./temp":{"types":"./dist/temp.d.ts","default":"./dist/temp.js"},"./walk":{"types":"./dist/walk.d.ts","default":"./dist/walk.js"},"./guest":{"types":"./dist/guest.d.ts","default":"./dist/guest.js"},"./store":{"types":"./dist/store.d.ts","default":"./dist/store.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./atomic":{"types":"./dist/atomic.d.ts","default":"./dist/atomic.js"},"./config":{"types":"./dist/config.d.ts","default":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","default":"./dist/errors.js"},"./output":{"types":"./dist/output.d.ts","default":"./dist/output.js"},"./secret":{"types":"./dist/secret.d.ts","default":"./dist/secret.js"},"./archive":{"types":"./dist/archive.d.ts","default":"./dist/archive.js"},"./advanced":{"types":"./dist/advanced.d.ts","default":"./dist/advanced.js"},"./file-lock":{"types":"./dist/file-lock.d.ts","default":"./dist/file-lock.js"},"./durability":{"types":"./dist/durability.d.ts","default":"./dist/durability.js"},"./test-hooks":{"types":"./dist/test-hooks.d.ts","default":"./dist/test-hooks.js"},"./permissions":{"types":"./dist/permissions-public.d.ts","default":"./dist/permissions-public.js"},"./secure-file":{"types":"./dist/secure-file.d.ts","default":"./dist/secure-file.js"},"./package.json":"./package.json","./secure-temp-root":{"types":"./dist/secure-temp-dir.d.ts","default":"./dist/secure-temp-dir.js"}},"scripts":{"test":"vitest run","build":"node scripts/prepack-build.mjs","check":"pnpm lint:file-size && pnpm lint:fs-boundary && pnpm build && pnpm archive:wasm:allocator-tests && pnpm docs:check && pnpm test && node scripts/check-pack.mjs","prepack":"node scripts/prepack-build.mjs","test:bun":"bun node_modules/vitest/vitest.mjs run --config scripts/bun-vitest.config.ts","benchmark":"node scripts/benchmark.mjs","docs:site":"node scripts/build-docs-site.mjs","docs:check":"node scripts/check-doc-examples.mjs","pack:check":"pnpm build && node scripts/check-pack.mjs","crabbox:run":"crabbox run","native:test":"cargo test --workspace","archive:wasm":"node scripts/build-archive-wasm.mjs","crabbox:stop":"crabbox stop","native:build":"pnpm --filter @openclaw/fs-safe-native-build build","test:changed":"pnpm run test","check:changed":"pnpm run check","package:smoke":"node scripts/check-release-packages.mjs --allow-host-only --output release-artifacts","release:notes":"node scripts/release-notes.mjs","test:coverage":"vitest run --coverage","test:security":"vitest run test/fs-safe.test.ts test/read-boundary-bypass.test.ts test/write-boundary-bypass.test.ts test/additional-boundary-bypass.test.ts test/adversarial-boundary-payloads.test.ts","crabbox:warmup":"crabbox warmup","lint:file-size":"node scripts/check-file-size.mjs","crabbox:hydrate":"crabbox actions hydrate","package:collect":"node scripts/check-release-packages.mjs --output release-artifacts","test:bun:native":"bun scripts/bun-native-proof.mjs && bun node_modules/vitest/vitest.mjs run --config scripts/bun-native-vitest.config.ts","lint:fs-boundary":"node scripts/check-fs-boundary-primitives.mjs","benchmark:methods":"node benchmarks/runner.mjs","benchmark:publish":"pnpm build && node scripts/bench-publish.mjs","public-api:update":"pnpm build && node scripts/check-pack.mjs --update-public-api","test:coverage:merge":"node scripts/merge-coverage.mjs","test:coverage:collect":"pnpm build && pnpm archive:wasm:allocator-tests && vitest run --coverage --coverage.reporter=json --coverage.thresholds.lines=0 --coverage.thresholds.functions=0 --coverage.thresholds.statements=0 --coverage.thresholds.branches=0","archive:producer-smoke":"node scripts/archive-producer-smoke.mjs","archive:wasm:allocator-tests":"node scripts/build-archive-wasm.mjs --allocator-tests"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:71485d21-a8c3-4f6c-ae40-dd60e3585161"}},"_resolved":"/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.18.0.tgz","_integrity":"sha512-eSPdJUUIHSPMc0iHwgvONxEtFQ8AwtDGBwWLjOau7THlnL173QArWE9xlsxsOOacAcjG6awVo25IU4D6Dxfzng==","repository":{"url":"git+https://github.com/openclaw/fs-safe.git","type":"git"},"_npmVersion":"12.0.2","description":"Capability-style filesystem roots for Node.js apps that handle untrusted relative paths.","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@12.4.2","devDependencies":{"tar":"7.5.22","vite":"8.3.0","vitest":"^5.0.1","sigstore":"5.0.0","fast-check":"^4.10.1","typescript":"^7.0.2","@types/node":"^26.6.1","@napi-rs/cli":"3.10.3","@emnapi/runtime":"2.0.0-alpha.5","istanbul-reports":"3.2.0","@vitest/coverage-v8":"5.0.1","istanbul-lib-report":"3.0.1","istanbul-lib-coverage":"3.2.2"},"optionalDependencies":{"jszip":"^3.10.2","@openclaw/fs-safe-darwin-x64":"0.18.0","@openclaw/fs-safe-darwin-arm64":"0.18.0","@openclaw/fs-safe-linux-x64-gnu":"0.18.0","@openclaw/fs-safe-linux-x64-musl":"0.18.0","@openclaw/fs-safe-win32-x64-msvc":"0.18.0","@openclaw/fs-safe-linux-arm64-gnu":"0.18.0","@openclaw/fs-safe-linux-arm64-musl":"0.18.0"},"_npmOperationalInternal":{"tmp":"tmp/fs-safe_0.18.0_1790013678103_0.46208744179488237","host":"s3://npm-registry-packages-npm-production"}},"0.18.1":{"name":"@openclaw/fs-safe","version":"0.18.1","keywords":["filesystem","openclaw","path-traversal","security","typescript"],"author":{"name":"OpenClaw Team","email":"dev@openclaw.ai"},"license":"MIT","_id":"@openclaw/fs-safe@0.18.1","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://fs-safe.io","bugs":{"url":"https://github.com/openclaw/fs-safe/issues"},"dist":{"shasum":"4f7ebb0f31d0f5c014cc956937caf9073783fc2d","tarball":"https://registry.npmjs.org/@openclaw/fs-safe/-/fs-safe-0.18.1.tgz","fileCount":589,"integrity":"sha512-p56o1BFSQ2Ayc2+WhTJHfiWNyEtl8DOY15uUCUV/lvQILt+58651v964SpqNEgCvaXdccJvK/YHW5+ivOYKt0A==","signatures":[{"sig":"MEUCIF13UAvX1BzKy8nSCpMCclLF1vBuk8AvxRl00jr94545AiEAoBWqXDK2BeqnvQ77S35r6Pam+3lW3M5UIHhPHRMW0Mk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDsm/8T4C4cqMC5nHzto0Os9NVjonYfqQ3QPf6yJe6IuAIhAM3G1NyTOdnOndImXkwGmYvv3RZH+0miM2HI8G6c7KAW","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@openclaw%2ffs-safe@0.18.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3288786},"type":"module","_from":"file:/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.18.1.tgz","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./copy":{"types":"./dist/copy.d.ts","default":"./dist/copy.js"},"./json":{"types":"./dist/json.d.ts","default":"./dist/json.js"},"./path":{"types":"./dist/path.d.ts","default":"./dist/path.js"},"./root":{"types":"./dist/root.d.ts","default":"./dist/root.js"},"./temp":{"types":"./dist/temp.d.ts","default":"./dist/temp.js"},"./walk":{"types":"./dist/walk.d.ts","default":"./dist/walk.js"},"./guest":{"types":"./dist/guest.d.ts","default":"./dist/guest.js"},"./store":{"types":"./dist/store.d.ts","default":"./dist/store.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./atomic":{"types":"./dist/atomic.d.ts","default":"./dist/atomic.js"},"./config":{"types":"./dist/config.d.ts","default":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","default":"./dist/errors.js"},"./output":{"types":"./dist/output.d.ts","default":"./dist/output.js"},"./secret":{"types":"./dist/secret.d.ts","default":"./dist/secret.js"},"./archive":{"types":"./dist/archive.d.ts","default":"./dist/archive.js"},"./advanced":{"types":"./dist/advanced.d.ts","default":"./dist/advanced.js"},"./file-lock":{"types":"./dist/file-lock.d.ts","default":"./dist/file-lock.js"},"./durability":{"types":"./dist/durability.d.ts","default":"./dist/durability.js"},"./test-hooks":{"types":"./dist/test-hooks.d.ts","default":"./dist/test-hooks.js"},"./permissions":{"types":"./dist/permissions-public.d.ts","default":"./dist/permissions-public.js"},"./secure-file":{"types":"./dist/secure-file.d.ts","default":"./dist/secure-file.js"},"./package.json":"./package.json","./secure-temp-root":{"types":"./dist/secure-temp-dir.d.ts","default":"./dist/secure-temp-dir.js"}},"scripts":{"test":"vitest run","build":"node scripts/prepack-build.mjs","check":"pnpm lint:file-size && pnpm lint:fs-boundary && pnpm build && pnpm archive:wasm:allocator-tests && pnpm docs:check && pnpm test && node scripts/check-pack.mjs","prepack":"node scripts/prepack-build.mjs","test:bun":"bun node_modules/vitest/vitest.mjs run --config scripts/bun-vitest.config.ts","benchmark":"node scripts/benchmark.mjs","docs:site":"node scripts/build-docs-site.mjs","docs:check":"node scripts/check-doc-examples.mjs","pack:check":"pnpm build && node scripts/check-pack.mjs","crabbox:run":"crabbox run","native:test":"cargo test --workspace","archive:wasm":"node scripts/build-archive-wasm.mjs","crabbox:stop":"crabbox stop","native:build":"pnpm --filter @openclaw/fs-safe-native-build build","test:changed":"pnpm run test","check:changed":"pnpm run check","package:smoke":"node scripts/check-release-packages.mjs --allow-host-only --output release-artifacts","release:notes":"node scripts/release-notes.mjs","test:coverage":"vitest run --coverage","test:security":"vitest run test/fs-safe.test.ts test/read-boundary-bypass.test.ts test/write-boundary-bypass.test.ts test/additional-boundary-bypass.test.ts test/adversarial-boundary-payloads.test.ts","crabbox:warmup":"crabbox warmup","lint:file-size":"node scripts/check-file-size.mjs","crabbox:hydrate":"crabbox actions hydrate","package:collect":"node scripts/check-release-packages.mjs --output release-artifacts","test:bun:native":"bun scripts/bun-native-proof.mjs && bun node_modules/vitest/vitest.mjs run --config scripts/bun-native-vitest.config.ts","lint:fs-boundary":"node scripts/check-fs-boundary-primitives.mjs","benchmark:methods":"node benchmarks/runner.mjs","benchmark:publish":"pnpm build && node scripts/bench-publish.mjs","public-api:update":"pnpm build && node scripts/check-pack.mjs --update-public-api","test:coverage:merge":"node scripts/merge-coverage.mjs","test:coverage:collect":"pnpm build && pnpm archive:wasm:allocator-tests && vitest run --coverage --coverage.reporter=json --coverage.thresholds.lines=0 --coverage.thresholds.functions=0 --coverage.thresholds.statements=0 --coverage.thresholds.branches=0","archive:producer-smoke":"node scripts/archive-producer-smoke.mjs","archive:wasm:allocator-tests":"node scripts/build-archive-wasm.mjs --allocator-tests"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:71485d21-a8c3-4f6c-ae40-dd60e3585161"}},"_resolved":"/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.18.1.tgz","_integrity":"sha512-p56o1BFSQ2Ayc2+WhTJHfiWNyEtl8DOY15uUCUV/lvQILt+58651v964SpqNEgCvaXdccJvK/YHW5+ivOYKt0A==","repository":{"url":"git+https://github.com/openclaw/fs-safe.git","type":"git"},"_npmVersion":"12.0.2","description":"Capability-style filesystem roots for Node.js apps that handle untrusted relative paths.","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@12.4.2","devDependencies":{"tar":"7.5.22","vite":"8.3.0","vitest":"^5.0.1","sigstore":"5.0.0","fast-check":"^4.10.1","typescript":"^7.0.2","@types/node":"^26.6.1","@napi-rs/cli":"3.10.3","@emnapi/runtime":"2.0.0-alpha.5","istanbul-reports":"3.2.0","@vitest/coverage-v8":"5.0.1","istanbul-lib-report":"3.0.1","istanbul-lib-coverage":"3.2.2"},"optionalDependencies":{"jszip":"^3.10.2","@openclaw/fs-safe-darwin-x64":"0.18.1","@openclaw/fs-safe-darwin-arm64":"0.18.1","@openclaw/fs-safe-linux-x64-gnu":"0.18.1","@openclaw/fs-safe-linux-x64-musl":"0.18.1","@openclaw/fs-safe-win32-x64-msvc":"0.18.1","@openclaw/fs-safe-linux-arm64-gnu":"0.18.1","@openclaw/fs-safe-linux-arm64-musl":"0.18.1"},"_npmOperationalInternal":{"tmp":"tmp/fs-safe_0.18.1_1790080912871_0.6123842478786199","host":"s3://npm-registry-packages-npm-production"}},"0.18.2":{"name":"@openclaw/fs-safe","version":"0.18.2","keywords":["filesystem","openclaw","path-traversal","security","typescript"],"author":{"name":"OpenClaw Team","email":"dev@openclaw.ai"},"license":"MIT","_id":"@openclaw/fs-safe@0.18.2","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://fs-safe.io","bugs":{"url":"https://github.com/openclaw/fs-safe/issues"},"dist":{"shasum":"e7f3d7d80ca585e7e196323279c095f419d0c675","tarball":"https://registry.npmjs.org/@openclaw/fs-safe/-/fs-safe-0.18.2.tgz","fileCount":587,"integrity":"sha512-ZurOE7wousc+xT1HhVw+/lkqLHms378GcHz8O9dlMAsXY+MGNLKpZncmjpuEVHPz292n82FC1mp2SCCRUnvbNg==","signatures":[{"sig":"MEQCICdhtv4zr76ody0SHHI2q87/zKaQyhVYZLMjUHxk/vr1AiB+qKz3nZdm9rKJ4L2KSYBHqsewZGnajp/1ZDoGD7L82g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIDz4//kOnfE2KZZGq2Hw57oLycof1FiDdEoGbviVAA7ZAiB0vc3pW/RFpO8w+NS5/fAVQ5t3AljGofp1FCcbeoa/9w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@openclaw%2ffs-safe@0.18.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3285942},"type":"module","_from":"file:/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.18.2.tgz","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./copy":{"types":"./dist/copy.d.ts","default":"./dist/copy.js"},"./json":{"types":"./dist/json.d.ts","default":"./dist/json.js"},"./path":{"types":"./dist/path.d.ts","default":"./dist/path.js"},"./root":{"types":"./dist/root.d.ts","default":"./dist/root.js"},"./temp":{"types":"./dist/temp.d.ts","default":"./dist/temp.js"},"./walk":{"types":"./dist/walk.d.ts","default":"./dist/walk.js"},"./guest":{"types":"./dist/guest.d.ts","default":"./dist/guest.js"},"./store":{"types":"./dist/store.d.ts","default":"./dist/store.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./atomic":{"types":"./dist/atomic.d.ts","default":"./dist/atomic.js"},"./config":{"types":"./dist/config.d.ts","default":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","default":"./dist/errors.js"},"./output":{"types":"./dist/output.d.ts","default":"./dist/output.js"},"./secret":{"types":"./dist/secret.d.ts","default":"./dist/secret.js"},"./archive":{"types":"./dist/archive.d.ts","default":"./dist/archive.js"},"./advanced":{"types":"./dist/advanced.d.ts","default":"./dist/advanced.js"},"./file-lock":{"types":"./dist/file-lock.d.ts","default":"./dist/file-lock.js"},"./durability":{"types":"./dist/durability.d.ts","default":"./dist/durability.js"},"./test-hooks":{"types":"./dist/test-hooks.d.ts","default":"./dist/test-hooks.js"},"./permissions":{"types":"./dist/permissions-public.d.ts","default":"./dist/permissions-public.js"},"./secure-file":{"types":"./dist/secure-file.d.ts","default":"./dist/secure-file.js"},"./package.json":"./package.json","./secure-temp-root":{"types":"./dist/secure-temp-dir.d.ts","default":"./dist/secure-temp-dir.js"}},"scripts":{"test":"vitest run","build":"node scripts/prepack-build.mjs","check":"pnpm lint:file-size && pnpm lint:fs-boundary && pnpm build && pnpm archive:wasm:allocator-tests && pnpm docs:check && pnpm test && node scripts/check-pack.mjs","prepack":"node scripts/prepack-build.mjs","test:bun":"bun node_modules/vitest/vitest.mjs run --config scripts/bun-vitest.config.ts","benchmark":"node scripts/benchmark.mjs","docs:site":"node scripts/build-docs-site.mjs","docs:check":"node scripts/check-doc-examples.mjs","pack:check":"pnpm build && node scripts/check-pack.mjs","crabbox:run":"crabbox run","native:test":"cargo test --workspace","archive:wasm":"node scripts/build-archive-wasm.mjs","crabbox:stop":"crabbox stop","native:build":"pnpm --filter @openclaw/fs-safe-native-build build","test:changed":"pnpm run test","check:changed":"pnpm run check","package:smoke":"node scripts/check-release-packages.mjs --allow-host-only --output release-artifacts","release:notes":"node scripts/release-notes.mjs","test:coverage":"vitest run --coverage","test:security":"vitest run test/fs-safe.test.ts test/read-boundary-bypass.test.ts test/write-boundary-bypass.test.ts test/additional-boundary-bypass.test.ts test/adversarial-boundary-payloads.test.ts","crabbox:warmup":"crabbox warmup","lint:file-size":"node scripts/check-file-size.mjs","crabbox:hydrate":"crabbox actions hydrate","package:collect":"node scripts/check-release-packages.mjs --output release-artifacts","test:bun:native":"bun scripts/bun-native-proof.mjs && bun node_modules/vitest/vitest.mjs run --config scripts/bun-native-vitest.config.ts","lint:fs-boundary":"node scripts/check-fs-boundary-primitives.mjs","benchmark:methods":"node benchmarks/runner.mjs","benchmark:publish":"pnpm build && node scripts/bench-publish.mjs","public-api:update":"pnpm build && node scripts/check-pack.mjs --update-public-api","test:coverage:merge":"node scripts/merge-coverage.mjs","test:coverage:collect":"pnpm build && pnpm archive:wasm:allocator-tests && vitest run --coverage --coverage.reporter=json --coverage.thresholds.lines=0 --coverage.thresholds.functions=0 --coverage.thresholds.statements=0 --coverage.thresholds.branches=0","archive:producer-smoke":"node scripts/archive-producer-smoke.mjs","archive:wasm:allocator-tests":"node scripts/build-archive-wasm.mjs --allocator-tests"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:71485d21-a8c3-4f6c-ae40-dd60e3585161"}},"_resolved":"/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.18.2.tgz","_integrity":"sha512-ZurOE7wousc+xT1HhVw+/lkqLHms378GcHz8O9dlMAsXY+MGNLKpZncmjpuEVHPz292n82FC1mp2SCCRUnvbNg==","repository":{"url":"git+https://github.com/openclaw/fs-safe.git","type":"git"},"_npmVersion":"12.0.2","description":"Capability-style filesystem roots for Node.js apps that handle untrusted relative paths.","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@12.4.2","devDependencies":{"tar":"7.5.22","vite":"8.3.0","vitest":"^5.0.1","sigstore":"5.0.0","fast-check":"^4.10.1","typescript":"^7.0.2","@types/node":"^26.6.1","@napi-rs/cli":"3.10.3","@emnapi/runtime":"2.0.0-alpha.5","istanbul-reports":"3.2.0","@vitest/coverage-v8":"5.0.1","istanbul-lib-report":"3.0.1","istanbul-lib-coverage":"3.2.2"},"optionalDependencies":{"jszip":"^3.10.2","@openclaw/fs-safe-darwin-x64":"0.18.2","@openclaw/fs-safe-darwin-arm64":"0.18.2","@openclaw/fs-safe-linux-x64-gnu":"0.18.2","@openclaw/fs-safe-linux-x64-musl":"0.18.2","@openclaw/fs-safe-win32-x64-msvc":"0.18.2","@openclaw/fs-safe-linux-arm64-gnu":"0.18.2","@openclaw/fs-safe-linux-arm64-musl":"0.18.2"},"_npmOperationalInternal":{"tmp":"tmp/fs-safe_0.18.2_1790141203114_0.675907744604243","host":"s3://npm-registry-packages-npm-production"}},"0.19.0":{"name":"@openclaw/fs-safe","version":"0.19.0","keywords":["filesystem","openclaw","path-traversal","security","typescript"],"author":{"name":"OpenClaw Team","email":"dev@openclaw.ai"},"license":"MIT","_id":"@openclaw/fs-safe@0.19.0","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://fs-safe.io","bugs":{"url":"https://github.com/openclaw/fs-safe/issues"},"dist":{"shasum":"12abaa9a743b8dfde7e3b4999aa2b9566650198f","tarball":"https://registry.npmjs.org/@openclaw/fs-safe/-/fs-safe-0.19.0.tgz","fileCount":587,"integrity":"sha512-skoljavKmNulSdsu40HtSHNf39RfdZIZ4bfzxMJLT6n/7RK2PIPPMhxp0FoilRaeh1d8AHJRj6b2ZeDvTY1rSA==","signatures":[{"sig":"MEQCIFdLGKlzar3Kzj/A5XsJXL+FWNUqSNrLr40BDHe3PoFhAiAv12c1m/TA0c+EJSTlsPW21kjDcffqcrD2gruLoxHx6A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIGAAyF+knYanKm9yvamOsVel2iUUW3un41W8hoOVHD2mAiA+WxTamklTEylcToGaz76+Ds5SeDVoc6hZ4ykzJx62wg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@openclaw%2ffs-safe@0.19.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3294011},"type":"module","_from":"file:/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.19.0.tgz","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./copy":{"types":"./dist/copy.d.ts","default":"./dist/copy.js"},"./json":{"types":"./dist/json.d.ts","default":"./dist/json.js"},"./path":{"types":"./dist/path.d.ts","default":"./dist/path.js"},"./root":{"types":"./dist/root.d.ts","default":"./dist/root.js"},"./temp":{"types":"./dist/temp.d.ts","default":"./dist/temp.js"},"./walk":{"types":"./dist/walk.d.ts","default":"./dist/walk.js"},"./guest":{"types":"./dist/guest.d.ts","default":"./dist/guest.js"},"./store":{"types":"./dist/store.d.ts","default":"./dist/store.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./atomic":{"types":"./dist/atomic.d.ts","default":"./dist/atomic.js"},"./config":{"types":"./dist/config.d.ts","default":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","default":"./dist/errors.js"},"./output":{"types":"./dist/output.d.ts","default":"./dist/output.js"},"./secret":{"types":"./dist/secret.d.ts","default":"./dist/secret.js"},"./archive":{"types":"./dist/archive.d.ts","default":"./dist/archive.js"},"./advanced":{"types":"./dist/advanced.d.ts","default":"./dist/advanced.js"},"./file-lock":{"types":"./dist/file-lock.d.ts","default":"./dist/file-lock.js"},"./durability":{"types":"./dist/durability.d.ts","default":"./dist/durability.js"},"./test-hooks":{"types":"./dist/test-hooks.d.ts","default":"./dist/test-hooks.js"},"./permissions":{"types":"./dist/permissions-public.d.ts","default":"./dist/permissions-public.js"},"./secure-file":{"types":"./dist/secure-file.d.ts","default":"./dist/secure-file.js"},"./package.json":"./package.json","./secure-temp-root":{"types":"./dist/secure-temp-dir.d.ts","default":"./dist/secure-temp-dir.js"}},"scripts":{"test":"vitest run","build":"node scripts/prepack-build.mjs","check":"pnpm lint:file-size && pnpm lint:fs-boundary && pnpm build && pnpm archive:wasm:allocator-tests && pnpm docs:check && pnpm test && node scripts/check-pack.mjs","prepack":"node scripts/prepack-build.mjs","test:bun":"bun node_modules/vitest/vitest.mjs run --config scripts/bun-vitest.config.ts","benchmark":"node scripts/benchmark.mjs","docs:site":"node scripts/build-docs-site.mjs","docs:check":"node scripts/check-doc-examples.mjs","pack:check":"pnpm build && node scripts/check-pack.mjs","crabbox:run":"crabbox run","native:test":"cargo test --workspace","archive:wasm":"node scripts/build-archive-wasm.mjs","crabbox:stop":"crabbox stop","native:build":"pnpm --filter @openclaw/fs-safe-native-build build","test:changed":"pnpm run test","check:changed":"pnpm run check","package:smoke":"node scripts/check-release-packages.mjs --allow-host-only --output release-artifacts","release:notes":"node scripts/release-notes.mjs","test:coverage":"vitest run --coverage","test:security":"vitest run test/fs-safe.test.ts test/read-boundary-bypass.test.ts test/write-boundary-bypass.test.ts test/additional-boundary-bypass.test.ts test/adversarial-boundary-payloads.test.ts","crabbox:warmup":"crabbox warmup","lint:file-size":"node scripts/check-file-size.mjs","crabbox:hydrate":"crabbox actions hydrate","package:collect":"node scripts/check-release-packages.mjs --output release-artifacts","test:bun:native":"bun scripts/bun-native-proof.mjs && bun node_modules/vitest/vitest.mjs run --config scripts/bun-native-vitest.config.ts","lint:fs-boundary":"node scripts/check-fs-boundary-primitives.mjs","benchmark:methods":"node benchmarks/runner.mjs","benchmark:publish":"pnpm build && node scripts/bench-publish.mjs","public-api:update":"pnpm build && node scripts/check-pack.mjs --update-public-api","test:coverage:merge":"node scripts/merge-coverage.mjs","test:coverage:collect":"pnpm build && pnpm archive:wasm:allocator-tests && vitest run --coverage --coverage.reporter=json --coverage.thresholds.lines=0 --coverage.thresholds.functions=0 --coverage.thresholds.statements=0 --coverage.thresholds.branches=0","archive:producer-smoke":"node scripts/archive-producer-smoke.mjs","archive:wasm:allocator-tests":"node scripts/build-archive-wasm.mjs --allocator-tests"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:71485d21-a8c3-4f6c-ae40-dd60e3585161"}},"_resolved":"/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.19.0.tgz","_integrity":"sha512-skoljavKmNulSdsu40HtSHNf39RfdZIZ4bfzxMJLT6n/7RK2PIPPMhxp0FoilRaeh1d8AHJRj6b2ZeDvTY1rSA==","repository":{"url":"git+https://github.com/openclaw/fs-safe.git","type":"git"},"_npmVersion":"12.0.2","description":"Capability-style filesystem roots for Node.js apps that handle untrusted relative paths.","directories":{},"sideEffects":false,"_nodeVersion":"24.21.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@12.4.2","devDependencies":{"tar":"7.5.22","vite":"8.3.0","vitest":"^5.0.1","sigstore":"5.0.0","fast-check":"^4.10.1","typescript":"^7.0.2","@types/node":"^26.6.1","@napi-rs/cli":"3.10.3","@emnapi/runtime":"2.0.0-alpha.5","istanbul-reports":"3.2.0","@vitest/coverage-v8":"5.0.1","istanbul-lib-report":"3.0.1","istanbul-lib-coverage":"3.2.2"},"optionalDependencies":{"jszip":"^3.10.2","@openclaw/fs-safe-darwin-x64":"0.19.0","@openclaw/fs-safe-darwin-arm64":"0.19.0","@openclaw/fs-safe-linux-x64-gnu":"0.19.0","@openclaw/fs-safe-linux-x64-musl":"0.19.0","@openclaw/fs-safe-win32-x64-msvc":"0.19.0","@openclaw/fs-safe-linux-arm64-gnu":"0.19.0","@openclaw/fs-safe-linux-arm64-musl":"0.19.0"},"_npmOperationalInternal":{"tmp":"tmp/fs-safe_0.19.0_1790288272545_0.050097501705054226","host":"s3://npm-registry-packages-npm-production"}},"0.20.0":{"name":"@openclaw/fs-safe","version":"0.20.0","keywords":["filesystem","openclaw","path-traversal","security","typescript"],"author":{"name":"OpenClaw Team","email":"dev@openclaw.ai"},"license":"MIT","_id":"@openclaw/fs-safe@0.20.0","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://fs-safe.io","bugs":{"url":"https://github.com/openclaw/fs-safe/issues"},"dist":{"shasum":"760e004c0864ed0b0c7e816f18e892c92e46de22","tarball":"https://registry.npmjs.org/@openclaw/fs-safe/-/fs-safe-0.20.0.tgz","fileCount":596,"integrity":"sha512-XEFZEnQXiJt0CDfQgjvfWk1bYFrB4mZQv7pNXu9FwvuQ+PbW1lumHX/ICLUlISxDRc5vjMQZLRAbRVAl79wCeQ==","signatures":[{"sig":"MEUCIFLmkF3xZS7MmGYWo324LH17Zwp85y3nixQ5OHhXULHxAiEAhNyD5DVznmqZtyLRf5bmxH4+W4DpmCx4Bq/D4x5p4No=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCICljaYDNCQRQVWX3zIAWO4jwKTGFLfBxrd+KwCdgW2NCAiBn/jbzFtIchJOYFec0W9Yh/iw9oNpx+qDOMxxM47oljA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@openclaw%2ffs-safe@0.20.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3352468},"type":"module","_from":"file:/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.20.0.tgz","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./copy":{"types":"./dist/copy.d.ts","default":"./dist/copy.js"},"./json":{"types":"./dist/json.d.ts","default":"./dist/json.js"},"./path":{"types":"./dist/path.d.ts","default":"./dist/path.js"},"./root":{"types":"./dist/root.d.ts","default":"./dist/root.js"},"./temp":{"types":"./dist/temp.d.ts","default":"./dist/temp.js"},"./walk":{"types":"./dist/walk.d.ts","default":"./dist/walk.js"},"./guest":{"types":"./dist/guest.d.ts","default":"./dist/guest.js"},"./store":{"types":"./dist/store.d.ts","default":"./dist/store.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./atomic":{"types":"./dist/atomic.d.ts","default":"./dist/atomic.js"},"./config":{"types":"./dist/config.d.ts","default":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","default":"./dist/errors.js"},"./output":{"types":"./dist/output.d.ts","default":"./dist/output.js"},"./secret":{"types":"./dist/secret.d.ts","default":"./dist/secret.js"},"./archive":{"types":"./dist/archive.d.ts","default":"./dist/archive.js"},"./advanced":{"types":"./dist/advanced.d.ts","default":"./dist/advanced.js"},"./file-lock":{"types":"./dist/file-lock.d.ts","default":"./dist/file-lock.js"},"./durability":{"types":"./dist/durability.d.ts","default":"./dist/durability.js"},"./test-hooks":{"types":"./dist/test-hooks.d.ts","default":"./dist/test-hooks.js"},"./permissions":{"types":"./dist/permissions-public.d.ts","default":"./dist/permissions-public.js"},"./secure-file":{"types":"./dist/secure-file.d.ts","default":"./dist/secure-file.js"},"./package.json":"./package.json","./secure-temp-root":{"types":"./dist/secure-temp-dir.d.ts","default":"./dist/secure-temp-dir.js"}},"scripts":{"test":"vitest run","build":"node scripts/prepack-build.mjs","check":"pnpm lint:file-size && pnpm lint:fs-boundary && pnpm build && pnpm archive:wasm:allocator-tests && pnpm docs:check && pnpm test && node scripts/check-pack.mjs","prepack":"node scripts/prepack-build.mjs","test:bun":"bun node_modules/vitest/vitest.mjs run --config scripts/bun-vitest.config.ts","benchmark":"node scripts/benchmark.mjs","docs:site":"node scripts/build-docs-site.mjs","docs:check":"node scripts/check-doc-examples.mjs","pack:check":"pnpm build && node scripts/check-pack.mjs","crabbox:run":"crabbox run","native:test":"cargo test --workspace","archive:wasm":"node scripts/build-archive-wasm.mjs","crabbox:stop":"crabbox stop","native:build":"pnpm --filter @openclaw/fs-safe-native-build build","test:changed":"pnpm run test","check:changed":"pnpm run check","package:smoke":"node scripts/check-release-packages.mjs --allow-host-only --output release-artifacts","release:notes":"node scripts/release-notes.mjs","test:coverage":"vitest run --coverage","test:security":"vitest run test/fs-safe.test.ts test/read-boundary-bypass.test.ts test/write-boundary-bypass.test.ts test/additional-boundary-bypass.test.ts test/adversarial-boundary-payloads.test.ts","crabbox:warmup":"crabbox warmup","lint:file-size":"node scripts/check-file-size.mjs","crabbox:hydrate":"crabbox actions hydrate","package:collect":"node scripts/check-release-packages.mjs --output release-artifacts","test:bun:native":"bun scripts/bun-native-proof.mjs && bun node_modules/vitest/vitest.mjs run --config scripts/bun-native-vitest.config.ts","lint:fs-boundary":"node scripts/check-fs-boundary-primitives.mjs","benchmark:methods":"node benchmarks/runner.mjs","benchmark:publish":"pnpm build && node scripts/bench-publish.mjs","public-api:update":"pnpm build && node scripts/check-pack.mjs --update-public-api","test:coverage:merge":"node scripts/merge-coverage.mjs","test:coverage:collect":"pnpm build && pnpm archive:wasm:allocator-tests && vitest run --coverage --coverage.reporter=json --coverage.thresholds.lines=0 --coverage.thresholds.functions=0 --coverage.thresholds.statements=0 --coverage.thresholds.branches=0","archive:producer-smoke":"node scripts/archive-producer-smoke.mjs","archive:wasm:allocator-tests":"node scripts/build-archive-wasm.mjs --allocator-tests"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:71485d21-a8c3-4f6c-ae40-dd60e3585161"}},"_resolved":"/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.20.0.tgz","_integrity":"sha512-XEFZEnQXiJt0CDfQgjvfWk1bYFrB4mZQv7pNXu9FwvuQ+PbW1lumHX/ICLUlISxDRc5vjMQZLRAbRVAl79wCeQ==","repository":{"url":"git+https://github.com/openclaw/fs-safe.git","type":"git"},"_npmVersion":"12.0.2","description":"Capability-style filesystem roots for Node.js apps that handle untrusted relative paths.","directories":{},"sideEffects":false,"_nodeVersion":"24.21.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@12.4.2","devDependencies":{"tar":"7.5.22","vite":"8.3.0","vitest":"^5.0.1","sigstore":"5.0.0","fast-check":"^4.10.1","typescript":"^7.0.2","@types/node":"^26.6.1","@napi-rs/cli":"3.10.5","@emnapi/runtime":"2.0.0-alpha.5","istanbul-reports":"3.2.0","@vitest/coverage-v8":"5.0.1","istanbul-lib-report":"3.0.1","istanbul-lib-coverage":"3.2.2"},"optionalDependencies":{"jszip":"^3.10.2","@openclaw/fs-safe-darwin-x64":"0.20.0","@openclaw/fs-safe-darwin-arm64":"0.20.0","@openclaw/fs-safe-linux-x64-gnu":"0.20.0","@openclaw/fs-safe-linux-x64-musl":"0.20.0","@openclaw/fs-safe-win32-x64-msvc":"0.20.0","@openclaw/fs-safe-linux-arm64-gnu":"0.20.0","@openclaw/fs-safe-linux-arm64-musl":"0.20.0"},"_npmOperationalInternal":{"tmp":"tmp/fs-safe_0.20.0_1790394191041_0.015383139415001468","host":"s3://npm-registry-packages-npm-production"}},"0.21.0":{"name":"@openclaw/fs-safe","version":"0.21.0","keywords":["filesystem","openclaw","path-traversal","security","typescript"],"author":{"name":"OpenClaw Team","email":"dev@openclaw.ai"},"license":"MIT","_id":"@openclaw/fs-safe@0.21.0","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://fs-safe.io","bugs":{"url":"https://github.com/openclaw/fs-safe/issues"},"dist":{"shasum":"42672031ffd413a9351afc7114432af13c008465","tarball":"https://registry.npmjs.org/@openclaw/fs-safe/-/fs-safe-0.21.0.tgz","fileCount":628,"integrity":"sha512-gKhQjKUvL1ydanvJ1tGs5+qdIlwmtddFkekngPlBZecyyfrEKHSlM5LyiIipMnxxttgqJKIw5sKw/GqLvu/RDA==","signatures":[{"sig":"MEQCIHkPhHhrTpX+bZRVnC/T3aN91sHdG0/hr1jiDAOYiFuSAiBxRCg9BsWVU0hdy75CJtHgevVTAisBwspLQ0mb0zsr9g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDolYzyYWVIklc1yHWJzTiVZza1p0cE5QriePjn63ibIgIhAIF41txxiwfbZHGEW+T+RW+1H7oCo6fUCronVhrGAO87","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@openclaw%2ffs-safe@0.21.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3469143},"type":"module","_from":"file:/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.21.0.tgz","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./copy":{"types":"./dist/copy.d.ts","default":"./dist/copy.js"},"./json":{"types":"./dist/json.d.ts","default":"./dist/json.js"},"./path":{"types":"./dist/path.d.ts","default":"./dist/path.js"},"./root":{"types":"./dist/root.d.ts","default":"./dist/root.js"},"./temp":{"types":"./dist/temp.d.ts","default":"./dist/temp.js"},"./walk":{"types":"./dist/walk.d.ts","default":"./dist/walk.js"},"./guest":{"types":"./dist/guest.d.ts","default":"./dist/guest.js"},"./store":{"types":"./dist/store.d.ts","default":"./dist/store.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./watch":{"types":"./dist/watch.d.ts","default":"./dist/watch.js"},"./atomic":{"types":"./dist/atomic.d.ts","default":"./dist/atomic.js"},"./config":{"types":"./dist/config.d.ts","default":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","default":"./dist/errors.js"},"./output":{"types":"./dist/output.d.ts","default":"./dist/output.js"},"./secret":{"types":"./dist/secret.d.ts","default":"./dist/secret.js"},"./archive":{"types":"./dist/archive.d.ts","default":"./dist/archive.js"},"./advanced":{"types":"./dist/advanced.d.ts","default":"./dist/advanced.js"},"./file-lock":{"types":"./dist/file-lock.d.ts","default":"./dist/file-lock.js"},"./durability":{"types":"./dist/durability.d.ts","default":"./dist/durability.js"},"./test-hooks":{"types":"./dist/test-hooks.d.ts","default":"./dist/test-hooks.js"},"./permissions":{"types":"./dist/permissions-public.d.ts","default":"./dist/permissions-public.js"},"./secure-file":{"types":"./dist/secure-file.d.ts","default":"./dist/secure-file.js"},"./package.json":"./package.json","./secure-temp-root":{"types":"./dist/secure-temp-dir.d.ts","default":"./dist/secure-temp-dir.js"}},"scripts":{"test":"vitest run","build":"node scripts/prepack-build.mjs","check":"pnpm lint:file-size && pnpm lint:fs-boundary && pnpm build && pnpm archive:wasm:allocator-tests && pnpm docs:check && pnpm test && node scripts/check-pack.mjs","prepack":"node scripts/prepack-build.mjs","test:bun":"bun node_modules/vitest/vitest.mjs run --config scripts/bun-vitest.config.ts","benchmark":"node scripts/benchmark.mjs","docs:site":"node scripts/build-docs-site.mjs","docs:check":"node scripts/check-doc-examples.mjs","pack:check":"pnpm build && node scripts/check-pack.mjs","crabbox:run":"crabbox run","native:test":"cargo test --workspace","archive:wasm":"node scripts/build-archive-wasm.mjs","crabbox:stop":"crabbox stop","native:build":"pnpm --filter @openclaw/fs-safe-native-build build","test:changed":"pnpm run test","check:changed":"pnpm run check","package:smoke":"node scripts/check-release-packages.mjs --allow-host-only --output release-artifacts","release:notes":"node scripts/release-notes.mjs","test:coverage":"vitest run --coverage","test:security":"vitest run test/fs-safe.test.ts test/read-boundary-bypass.test.ts test/write-boundary-bypass.test.ts test/additional-boundary-bypass.test.ts test/adversarial-boundary-payloads.test.ts","crabbox:warmup":"crabbox warmup","lint:file-size":"node scripts/check-file-size.mjs","crabbox:hydrate":"crabbox actions hydrate","package:collect":"node scripts/check-release-packages.mjs --output release-artifacts","test:bun:native":"bun scripts/bun-native-proof.mjs && bun node_modules/vitest/vitest.mjs run --config scripts/bun-native-vitest.config.ts","lint:fs-boundary":"node scripts/check-fs-boundary-primitives.mjs","benchmark:methods":"node benchmarks/runner.mjs","benchmark:publish":"pnpm build && node scripts/bench-publish.mjs","public-api:update":"pnpm build && node scripts/check-pack.mjs --update-public-api","test:coverage:merge":"node scripts/merge-coverage.mjs","test:coverage:collect":"pnpm build && pnpm archive:wasm:allocator-tests && vitest run --coverage --coverage.reporter=json --coverage.thresholds.lines=0 --coverage.thresholds.functions=0 --coverage.thresholds.statements=0 --coverage.thresholds.branches=0","archive:producer-smoke":"node scripts/archive-producer-smoke.mjs","archive:wasm:allocator-tests":"node scripts/build-archive-wasm.mjs --allocator-tests"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:71485d21-a8c3-4f6c-ae40-dd60e3585161"}},"_resolved":"/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.21.0.tgz","_integrity":"sha512-gKhQjKUvL1ydanvJ1tGs5+qdIlwmtddFkekngPlBZecyyfrEKHSlM5LyiIipMnxxttgqJKIw5sKw/GqLvu/RDA==","repository":{"url":"git+https://github.com/openclaw/fs-safe.git","type":"git"},"_npmVersion":"12.0.2","description":"Capability-style filesystem roots for Node.js apps that handle untrusted relative paths.","directories":{},"sideEffects":false,"_nodeVersion":"24.21.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@12.4.2","devDependencies":{"tar":"7.5.22","vite":"8.3.0","vitest":"^5.0.1","sigstore":"5.0.0","fast-check":"^4.10.1","typescript":"^7.0.2","@types/node":"^26.6.1","@napi-rs/cli":"3.10.5","@emnapi/runtime":"2.0.0-alpha.5","istanbul-reports":"3.2.0","@vitest/coverage-v8":"5.0.1","istanbul-lib-report":"3.0.1","istanbul-lib-coverage":"3.2.2"},"optionalDependencies":{"jszip":"^3.10.2","@openclaw/fs-safe-darwin-x64":"0.21.0","@openclaw/fs-safe-darwin-arm64":"0.21.0","@openclaw/fs-safe-linux-x64-gnu":"0.21.0","@openclaw/fs-safe-linux-x64-musl":"0.21.0","@openclaw/fs-safe-win32-x64-msvc":"0.21.0","@openclaw/fs-safe-linux-arm64-gnu":"0.21.0","@openclaw/fs-safe-linux-arm64-musl":"0.21.0"},"_npmOperationalInternal":{"tmp":"tmp/fs-safe_0.21.0_1790469803910_0.2552281554021054","host":"s3://npm-registry-packages-npm-production"}},"0.21.1":{"name":"@openclaw/fs-safe","version":"0.21.1","keywords":["filesystem","openclaw","path-traversal","security","typescript"],"author":{"name":"OpenClaw Team","email":"dev@openclaw.ai"},"license":"MIT","_id":"@openclaw/fs-safe@0.21.1","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://fs-safe.io","bugs":{"url":"https://github.com/openclaw/fs-safe/issues"},"dist":{"shasum":"96ac7c8ffef1006c5a7d9887fb5b4a54539a8cc9","tarball":"https://registry.npmjs.org/@openclaw/fs-safe/-/fs-safe-0.21.1.tgz","fileCount":632,"integrity":"sha512-jkowVEniLZBi203tncmZTvh0Cbby0rhKaPIaWFo7F+qiABOsE/6lsPATVyyqzrcj/t+FqFADhwXKsrlw5UJL1Q==","signatures":[{"sig":"MEYCIQCoxa3wiaovA/8J/v8EwC0uQDfCPTdjHdMqReFEkd+y/wIhAJ9IZmzEbXLgRe8qS55wGyHi7HVYB8Pggu1hzGonUDUM","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDmHMEwqeRKtexvNG50RWf5Pc44eAoITpUe2eAxRAow+wIgGY45A92LGcaCdwVtDRfY8mgUrNrcGPwJn1Et9tXlqDo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@openclaw%2ffs-safe@0.21.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3512322},"type":"module","_from":"file:/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.21.1.tgz","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./copy":{"types":"./dist/copy.d.ts","default":"./dist/copy.js"},"./json":{"types":"./dist/json.d.ts","default":"./dist/json.js"},"./path":{"types":"./dist/path.d.ts","default":"./dist/path.js"},"./root":{"types":"./dist/root.d.ts","default":"./dist/root.js"},"./temp":{"types":"./dist/temp.d.ts","default":"./dist/temp.js"},"./walk":{"types":"./dist/walk.d.ts","default":"./dist/walk.js"},"./guest":{"types":"./dist/guest.d.ts","default":"./dist/guest.js"},"./store":{"types":"./dist/store.d.ts","default":"./dist/store.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./watch":{"types":"./dist/watch.d.ts","default":"./dist/watch.js"},"./atomic":{"types":"./dist/atomic.d.ts","default":"./dist/atomic.js"},"./config":{"types":"./dist/config.d.ts","default":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","default":"./dist/errors.js"},"./output":{"types":"./dist/output.d.ts","default":"./dist/output.js"},"./secret":{"types":"./dist/secret.d.ts","default":"./dist/secret.js"},"./archive":{"types":"./dist/archive.d.ts","default":"./dist/archive.js"},"./advanced":{"types":"./dist/advanced.d.ts","default":"./dist/advanced.js"},"./file-lock":{"types":"./dist/file-lock.d.ts","default":"./dist/file-lock.js"},"./durability":{"types":"./dist/durability.d.ts","default":"./dist/durability.js"},"./test-hooks":{"types":"./dist/test-hooks.d.ts","default":"./dist/test-hooks.js"},"./permissions":{"types":"./dist/permissions-public.d.ts","default":"./dist/permissions-public.js"},"./secure-file":{"types":"./dist/secure-file.d.ts","default":"./dist/secure-file.js"},"./package.json":"./package.json","./secure-temp-root":{"types":"./dist/secure-temp-dir.d.ts","default":"./dist/secure-temp-dir.js"}},"scripts":{"test":"vitest run","build":"node scripts/prepack-build.mjs","check":"pnpm lint:file-size && pnpm lint:fs-boundary && pnpm build && pnpm archive:wasm:allocator-tests && pnpm docs:check && pnpm test && node scripts/check-pack.mjs","prepack":"node scripts/prepack-build.mjs","test:bun":"bun node_modules/vitest/vitest.mjs run --config scripts/bun-vitest.config.ts","benchmark":"node scripts/benchmark.mjs","docs:site":"node scripts/build-docs-site.mjs","docs:check":"node scripts/check-doc-examples.mjs","pack:check":"pnpm build && node scripts/check-pack.mjs","crabbox:run":"crabbox run","native:test":"cargo test --workspace","archive:wasm":"node scripts/build-archive-wasm.mjs","crabbox:stop":"crabbox stop","native:build":"pnpm --filter @openclaw/fs-safe-native-build build","test:changed":"pnpm run test","check:changed":"pnpm run check","package:smoke":"node scripts/check-release-packages.mjs --allow-host-only --output release-artifacts","release:notes":"node scripts/release-notes.mjs","test:coverage":"vitest run --coverage","test:security":"vitest run test/fs-safe.test.ts test/read-boundary-bypass.test.ts test/write-boundary-bypass.test.ts test/additional-boundary-bypass.test.ts test/adversarial-boundary-payloads.test.ts","crabbox:warmup":"crabbox warmup","lint:file-size":"node scripts/check-file-size.mjs","crabbox:hydrate":"crabbox actions hydrate","package:collect":"node scripts/check-release-packages.mjs --output release-artifacts","test:bun:native":"bun scripts/bun-native-proof.mjs && bun node_modules/vitest/vitest.mjs run --config scripts/bun-native-vitest.config.ts","lint:fs-boundary":"node scripts/check-fs-boundary-primitives.mjs","benchmark:methods":"node benchmarks/runner.mjs","benchmark:publish":"pnpm build && node scripts/bench-publish.mjs","public-api:update":"pnpm build && node scripts/check-pack.mjs --update-public-api","test:coverage:merge":"node scripts/merge-coverage.mjs","test:coverage:collect":"pnpm build && pnpm archive:wasm:allocator-tests && vitest run --coverage --coverage.reporter=json --coverage.thresholds.lines=0 --coverage.thresholds.functions=0 --coverage.thresholds.statements=0 --coverage.thresholds.branches=0","archive:producer-smoke":"node scripts/archive-producer-smoke.mjs","archive:wasm:allocator-tests":"node scripts/build-archive-wasm.mjs --allocator-tests"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:71485d21-a8c3-4f6c-ae40-dd60e3585161"}},"_resolved":"/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.21.1.tgz","_integrity":"sha512-jkowVEniLZBi203tncmZTvh0Cbby0rhKaPIaWFo7F+qiABOsE/6lsPATVyyqzrcj/t+FqFADhwXKsrlw5UJL1Q==","repository":{"url":"git+https://github.com/openclaw/fs-safe.git","type":"git"},"_npmVersion":"12.0.2","description":"Capability-style filesystem roots for Node.js apps that handle untrusted relative paths.","directories":{},"sideEffects":false,"_nodeVersion":"24.21.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@12.4.2","devDependencies":{"tar":"7.5.22","vite":"8.3.0","vitest":"^5.0.1","sigstore":"5.0.0","fast-check":"^4.10.1","typescript":"^7.0.2","@types/node":"^26.6.1","@napi-rs/cli":"3.10.5","@emnapi/runtime":"2.0.0-alpha.5","istanbul-reports":"3.2.0","@vitest/coverage-v8":"5.0.1","istanbul-lib-report":"3.0.1","istanbul-lib-coverage":"3.2.2"},"optionalDependencies":{"jszip":"^3.10.2","@openclaw/fs-safe-darwin-x64":"0.21.1","@openclaw/fs-safe-darwin-arm64":"0.21.1","@openclaw/fs-safe-linux-x64-gnu":"0.21.1","@openclaw/fs-safe-linux-x64-musl":"0.21.1","@openclaw/fs-safe-win32-x64-msvc":"0.21.1","@openclaw/fs-safe-linux-arm64-gnu":"0.21.1","@openclaw/fs-safe-linux-arm64-musl":"0.21.1"},"_npmOperationalInternal":{"tmp":"tmp/fs-safe_0.21.1_1790536389934_0.5919830798305936","host":"s3://npm-registry-packages-npm-production"}},"0.21.2":{"name":"@openclaw/fs-safe","version":"0.21.2","keywords":["filesystem","openclaw","path-traversal","security","typescript"],"author":{"name":"OpenClaw Team","email":"dev@openclaw.ai"},"license":"MIT","_id":"@openclaw/fs-safe@0.21.2","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://fs-safe.io","bugs":{"url":"https://github.com/openclaw/fs-safe/issues"},"dist":{"shasum":"34fcd98c4d0ce367cc4f24194bb141b125fea0e3","tarball":"https://registry.npmjs.org/@openclaw/fs-safe/-/fs-safe-0.21.2.tgz","fileCount":638,"integrity":"sha512-KP1cys7gJTCCFFsnp9HBQScSh+zDEqK+b89Ubc/kQI82U0TuJ1SY6MlwRnT7JPDn8Q06CmBlvaZqWGjzBnhnew==","signatures":[{"sig":"MEUCIQDfsS60GoYUIM8E6gOK4THL7h1ll2YOVlZBPx7HErz4JAIgAr+EfgC8z984Qi0OQytTWQWXappztzGJuA7erdJA2zI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDr3ZQwDYSZjHeo60Rtskvnmt2XeOKr86Folp7mLRNIzwIhAI/SXM78J98N6T0S2P2mZYQTJMqk2zm0RDqTz2xC6eqt","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@openclaw%2ffs-safe@0.21.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3584776},"type":"module","_from":"file:/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.21.2.tgz","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./copy":{"types":"./dist/copy.d.ts","default":"./dist/copy.js"},"./json":{"types":"./dist/json.d.ts","default":"./dist/json.js"},"./path":{"types":"./dist/path.d.ts","default":"./dist/path.js"},"./root":{"types":"./dist/root.d.ts","default":"./dist/root.js"},"./temp":{"types":"./dist/temp.d.ts","default":"./dist/temp.js"},"./walk":{"types":"./dist/walk.d.ts","default":"./dist/walk.js"},"./guest":{"types":"./dist/guest.d.ts","default":"./dist/guest.js"},"./store":{"types":"./dist/store.d.ts","default":"./dist/store.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./watch":{"types":"./dist/watch.d.ts","default":"./dist/watch.js"},"./atomic":{"types":"./dist/atomic.d.ts","default":"./dist/atomic.js"},"./config":{"types":"./dist/config.d.ts","default":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","default":"./dist/errors.js"},"./output":{"types":"./dist/output.d.ts","default":"./dist/output.js"},"./secret":{"types":"./dist/secret.d.ts","default":"./dist/secret.js"},"./archive":{"types":"./dist/archive.d.ts","default":"./dist/archive.js"},"./advanced":{"types":"./dist/advanced.d.ts","default":"./dist/advanced.js"},"./file-lock":{"types":"./dist/file-lock.d.ts","default":"./dist/file-lock.js"},"./durability":{"types":"./dist/durability.d.ts","default":"./dist/durability.js"},"./test-hooks":{"types":"./dist/test-hooks.d.ts","default":"./dist/test-hooks.js"},"./permissions":{"types":"./dist/permissions-public.d.ts","default":"./dist/permissions-public.js"},"./secure-file":{"types":"./dist/secure-file.d.ts","default":"./dist/secure-file.js"},"./package.json":"./package.json","./secure-temp-root":{"types":"./dist/secure-temp-dir.d.ts","default":"./dist/secure-temp-dir.js"}},"scripts":{"test":"vitest run","build":"node scripts/prepack-build.mjs","check":"pnpm lint:file-size && pnpm lint:fs-boundary && pnpm build && pnpm archive:wasm:allocator-tests && pnpm docs:check && pnpm test && node scripts/check-pack.mjs","prepack":"node scripts/prepack-build.mjs","test:bun":"bun node_modules/vitest/vitest.mjs run --config scripts/bun-vitest.config.ts","benchmark":"node scripts/benchmark.mjs","docs:site":"node scripts/build-docs-site.mjs","docs:check":"node scripts/check-doc-examples.mjs","pack:check":"pnpm build && node scripts/check-pack.mjs","crabbox:run":"crabbox run","native:test":"cargo test --workspace","archive:wasm":"node scripts/build-archive-wasm.mjs","crabbox:stop":"crabbox stop","native:build":"pnpm --filter @openclaw/fs-safe-native-build build","test:changed":"pnpm run test","check:changed":"pnpm run check","package:smoke":"node scripts/check-release-packages.mjs --allow-host-only --output release-artifacts","release:notes":"node scripts/release-notes.mjs","test:coverage":"vitest run --coverage","test:security":"vitest run test/fs-safe.test.ts test/read-boundary-bypass.test.ts test/write-boundary-bypass.test.ts test/additional-boundary-bypass.test.ts test/adversarial-boundary-payloads.test.ts","crabbox:warmup":"crabbox warmup","lint:file-size":"node scripts/check-file-size.mjs","crabbox:hydrate":"crabbox actions hydrate","package:collect":"node scripts/check-release-packages.mjs --output release-artifacts","test:bun:native":"bun scripts/bun-native-proof.mjs && bun node_modules/vitest/vitest.mjs run --config scripts/bun-native-vitest.config.ts","lint:fs-boundary":"node scripts/check-fs-boundary-primitives.mjs","benchmark:methods":"node benchmarks/runner.mjs","benchmark:publish":"pnpm build && node scripts/bench-publish.mjs","public-api:update":"pnpm build && node scripts/check-pack.mjs --update-public-api","test:coverage:merge":"node scripts/merge-coverage.mjs","test:coverage:collect":"pnpm build && pnpm archive:wasm:allocator-tests && vitest run --coverage --coverage.reporter=json --coverage.thresholds.lines=0 --coverage.thresholds.functions=0 --coverage.thresholds.statements=0 --coverage.thresholds.branches=0","archive:producer-smoke":"node scripts/archive-producer-smoke.mjs","archive:wasm:allocator-tests":"node scripts/build-archive-wasm.mjs --allocator-tests"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:71485d21-a8c3-4f6c-ae40-dd60e3585161"}},"_resolved":"/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.21.2.tgz","_integrity":"sha512-KP1cys7gJTCCFFsnp9HBQScSh+zDEqK+b89Ubc/kQI82U0TuJ1SY6MlwRnT7JPDn8Q06CmBlvaZqWGjzBnhnew==","repository":{"url":"git+https://github.com/openclaw/fs-safe.git","type":"git"},"_npmVersion":"12.0.2","description":"Capability-style filesystem roots for Node.js apps that handle untrusted relative paths.","directories":{},"sideEffects":false,"_nodeVersion":"24.21.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@12.4.2","devDependencies":{"tar":"7.5.22","vite":"8.3.0","vitest":"^5.0.1","sigstore":"5.0.0","fast-check":"^4.10.1","typescript":"^7.0.2","@types/node":"^26.6.1","@napi-rs/cli":"3.10.5","@emnapi/runtime":"2.0.0-alpha.5","istanbul-reports":"3.2.0","@vitest/coverage-v8":"5.0.1","istanbul-lib-report":"3.0.1","istanbul-lib-coverage":"3.2.2"},"optionalDependencies":{"jszip":"^3.10.2","@openclaw/fs-safe-darwin-x64":"0.21.2","@openclaw/fs-safe-darwin-arm64":"0.21.2","@openclaw/fs-safe-linux-x64-gnu":"0.21.2","@openclaw/fs-safe-linux-x64-musl":"0.21.2","@openclaw/fs-safe-win32-x64-msvc":"0.21.2","@openclaw/fs-safe-linux-arm64-gnu":"0.21.2","@openclaw/fs-safe-linux-arm64-musl":"0.21.2"},"_npmOperationalInternal":{"tmp":"tmp/fs-safe_0.21.2_1790615948281_0.5854173992471798","host":"s3://npm-registry-packages-npm-production"}},"0.21.3":{"name":"@openclaw/fs-safe","version":"0.21.3","keywords":["filesystem","openclaw","path-traversal","security","typescript"],"author":{"name":"OpenClaw Team","email":"dev@openclaw.ai"},"license":"MIT","_id":"@openclaw/fs-safe@0.21.3","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://fs-safe.io","bugs":{"url":"https://github.com/openclaw/fs-safe/issues"},"dist":{"shasum":"0fc142915967fdea3e05aaf7c35d1c4897bf2d8c","tarball":"https://registry.npmjs.org/@openclaw/fs-safe/-/fs-safe-0.21.3.tgz","fileCount":642,"integrity":"sha512-sBm68f4QiZrrqlZxbOlqVIutrmOK/KLZBrwyPIhV7xXJmlPFc6ZET8AggcU3hMDM3dDSUYgA8LUupxwTB2DZsg==","signatures":[{"sig":"MEQCIFikkp941DIxqoSvqx9EXi8xRiD7qIVnd+qflwbOMqhqAiBCibwsd1TsRbhCsjDlgQi4TpSQL41TMe2wz1BuKqFVCQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIGsuKNf4+g6RORiXHW2H0Fp8hNcOLRp8ZerwzVqlPlV3AiBvy9UlEJ/x+vTIoDYVojXMN8smzKTKIHWlaqo1dczaFA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@openclaw%2ffs-safe@0.21.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3600641},"type":"module","_from":"file:/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.21.3.tgz","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./copy":{"types":"./dist/copy.d.ts","default":"./dist/copy.js"},"./json":{"types":"./dist/json.d.ts","default":"./dist/json.js"},"./path":{"types":"./dist/path.d.ts","default":"./dist/path.js"},"./root":{"types":"./dist/root.d.ts","default":"./dist/root.js"},"./temp":{"types":"./dist/temp.d.ts","default":"./dist/temp.js"},"./walk":{"types":"./dist/walk.d.ts","default":"./dist/walk.js"},"./guest":{"types":"./dist/guest.d.ts","default":"./dist/guest.js"},"./store":{"types":"./dist/store.d.ts","default":"./dist/store.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./watch":{"types":"./dist/watch.d.ts","default":"./dist/watch.js"},"./atomic":{"types":"./dist/atomic.d.ts","default":"./dist/atomic.js"},"./config":{"types":"./dist/config.d.ts","default":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","default":"./dist/errors.js"},"./output":{"types":"./dist/output.d.ts","default":"./dist/output.js"},"./secret":{"types":"./dist/secret.d.ts","default":"./dist/secret.js"},"./archive":{"types":"./dist/archive.d.ts","default":"./dist/archive.js"},"./advanced":{"types":"./dist/advanced.d.ts","default":"./dist/advanced.js"},"./file-lock":{"types":"./dist/file-lock.d.ts","default":"./dist/file-lock.js"},"./durability":{"types":"./dist/durability.d.ts","default":"./dist/durability.js"},"./test-hooks":{"types":"./dist/test-hooks.d.ts","default":"./dist/test-hooks.js"},"./permissions":{"types":"./dist/permissions-public.d.ts","default":"./dist/permissions-public.js"},"./secure-file":{"types":"./dist/secure-file.d.ts","default":"./dist/secure-file.js"},"./package.json":"./package.json","./secure-temp-root":{"types":"./dist/secure-temp-dir.d.ts","default":"./dist/secure-temp-dir.js"}},"scripts":{"test":"vitest run","build":"node scripts/prepack-build.mjs","check":"pnpm lint:file-size && pnpm lint:fs-boundary && pnpm build && pnpm archive:wasm:allocator-tests && pnpm docs:check && pnpm test && node scripts/check-pack.mjs","prepack":"node scripts/prepack-build.mjs","test:bun":"bun node_modules/vitest/vitest.mjs run --config scripts/bun-vitest.config.ts","benchmark":"node scripts/benchmark.mjs","docs:site":"node scripts/build-docs-site.mjs","docs:check":"node scripts/check-doc-examples.mjs","pack:check":"pnpm build && node scripts/check-pack.mjs","crabbox:run":"crabbox run","native:test":"cargo test --workspace","archive:wasm":"node scripts/build-archive-wasm.mjs","crabbox:stop":"crabbox stop","native:build":"pnpm --filter @openclaw/fs-safe-native-build build","test:changed":"pnpm run test","check:changed":"pnpm run check","package:smoke":"node scripts/check-release-packages.mjs --allow-host-only --output release-artifacts","release:notes":"node scripts/release-notes.mjs","test:coverage":"vitest run --coverage","test:security":"vitest run test/fs-safe.test.ts test/read-boundary-bypass.test.ts test/write-boundary-bypass.test.ts test/additional-boundary-bypass.test.ts test/adversarial-boundary-payloads.test.ts","crabbox:warmup":"crabbox warmup","lint:file-size":"node scripts/check-file-size.mjs","crabbox:hydrate":"crabbox actions hydrate","package:collect":"node scripts/check-release-packages.mjs --output release-artifacts","test:bun:native":"bun scripts/bun-native-proof.mjs && bun node_modules/vitest/vitest.mjs run --config scripts/bun-native-vitest.config.ts","lint:fs-boundary":"node scripts/check-fs-boundary-primitives.mjs","benchmark:methods":"node benchmarks/runner.mjs","benchmark:publish":"pnpm build && node scripts/bench-publish.mjs","public-api:update":"pnpm build && node scripts/check-pack.mjs --update-public-api","test:coverage:merge":"node scripts/merge-coverage.mjs","test:coverage:collect":"pnpm build && pnpm archive:wasm:allocator-tests && vitest run --coverage --coverage.reporter=json --coverage.thresholds.lines=0 --coverage.thresholds.functions=0 --coverage.thresholds.statements=0 --coverage.thresholds.branches=0","archive:producer-smoke":"node scripts/archive-producer-smoke.mjs","archive:wasm:allocator-tests":"node scripts/build-archive-wasm.mjs --allocator-tests"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"71485d21-a8c3-4f6c-ae40-dd60e3585161"}},"_resolved":"/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.21.3.tgz","_integrity":"sha512-sBm68f4QiZrrqlZxbOlqVIutrmOK/KLZBrwyPIhV7xXJmlPFc6ZET8AggcU3hMDM3dDSUYgA8LUupxwTB2DZsg==","repository":{"url":"git+https://github.com/openclaw/fs-safe.git","type":"git"},"_npmVersion":"12.0.2","description":"Capability-style filesystem roots for Node.js apps that handle untrusted relative paths.","directories":{},"sideEffects":false,"_nodeVersion":"24.21.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@12.4.2","devDependencies":{"tar":"7.5.22","vite":"8.3.1","vitest":"^5.0.1","sigstore":"5.0.0","fast-check":"^4.10.1","typescript":"^7.0.2","@types/node":"^26.6.1","@napi-rs/cli":"3.10.5","@emnapi/runtime":"2.0.0-alpha.5","istanbul-reports":"3.2.0","@vitest/coverage-v8":"5.0.2","istanbul-lib-report":"3.0.1","istanbul-lib-coverage":"3.2.2"},"optionalDependencies":{"jszip":"^3.10.2","@openclaw/fs-safe-darwin-x64":"0.21.3","@openclaw/fs-safe-darwin-arm64":"0.21.3","@openclaw/fs-safe-linux-x64-gnu":"0.21.3","@openclaw/fs-safe-linux-x64-musl":"0.21.3","@openclaw/fs-safe-win32-x64-msvc":"0.21.3","@openclaw/fs-safe-linux-arm64-gnu":"0.21.3","@openclaw/fs-safe-linux-arm64-musl":"0.21.3"},"_npmOperationalInternal":{"tmp":"tmp/fs-safe_0.21.3_1790772462468_0.08017674583139511","host":"s3://npm-registry-packages-npm-production"}},"0.22.0":{"name":"@openclaw/fs-safe","version":"0.22.0","keywords":["filesystem","openclaw","path-traversal","security","typescript"],"author":{"name":"OpenClaw Team","email":"dev@openclaw.ai"},"license":"MIT","_id":"@openclaw/fs-safe@0.22.0","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://fs-safe.io","bugs":{"url":"https://github.com/openclaw/fs-safe/issues"},"dist":{"shasum":"c7f3b86755c9a918a0bcb4bc80ffddcd0fd8826f","tarball":"https://registry.npmjs.org/@openclaw/fs-safe/-/fs-safe-0.22.0.tgz","fileCount":649,"integrity":"sha512-CW/T0NUcdn8PLVBgyXUbIn90a16uhP3YtKdd+eqJjmg0FR01KCCjCI3PxrvK1ygrUb/BfQsJJe+hXA9+/0rqKQ==","signatures":[{"sig":"MEQCIGU+huWXwwp1/BM0U3zgn2bcq+5w2FbnoTPPJq5zQzIKAiATxNiQ5lqX0VtBFMaZv9Bvto0zt2AToN89yqvYWV0KMA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCICIp//zuBvJClOgR9I5wOS309Swsp2TH/M/csi8Y3k1uAiALlsmmIx8za+UWAOhGTM+Ju9t99o9VcFVElSiIUULjlg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@openclaw%2ffs-safe@0.22.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3629009},"type":"module","_from":"file:/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.22.0.tgz","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./copy":{"types":"./dist/copy.d.ts","default":"./dist/copy.js"},"./json":{"types":"./dist/json.d.ts","default":"./dist/json.js"},"./path":{"types":"./dist/path.d.ts","default":"./dist/path.js"},"./root":{"types":"./dist/root.d.ts","default":"./dist/root.js"},"./temp":{"types":"./dist/temp.d.ts","default":"./dist/temp.js"},"./walk":{"types":"./dist/walk.d.ts","default":"./dist/walk.js"},"./guest":{"types":"./dist/guest.d.ts","default":"./dist/guest.js"},"./store":{"types":"./dist/store.d.ts","default":"./dist/store.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./watch":{"types":"./dist/watch.d.ts","default":"./dist/watch.js"},"./atomic":{"types":"./dist/atomic.d.ts","default":"./dist/atomic.js"},"./config":{"types":"./dist/config.d.ts","default":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","default":"./dist/errors.js"},"./output":{"types":"./dist/output.d.ts","default":"./dist/output.js"},"./secret":{"types":"./dist/secret.d.ts","default":"./dist/secret.js"},"./archive":{"types":"./dist/archive.d.ts","default":"./dist/archive.js"},"./advanced":{"types":"./dist/advanced.d.ts","default":"./dist/advanced.js"},"./file-lock":{"types":"./dist/file-lock.d.ts","default":"./dist/file-lock.js"},"./durability":{"types":"./dist/durability.d.ts","default":"./dist/durability.js"},"./test-hooks":{"types":"./dist/test-hooks.d.ts","default":"./dist/test-hooks.js"},"./permissions":{"types":"./dist/permissions-public.d.ts","default":"./dist/permissions-public.js"},"./secure-file":{"types":"./dist/secure-file.d.ts","default":"./dist/secure-file.js"},"./package.json":"./package.json","./secure-temp-root":{"types":"./dist/secure-temp-dir.d.ts","default":"./dist/secure-temp-dir.js"}},"scripts":{"test":"vitest run","build":"node scripts/prepack-build.mjs","check":"pnpm lint:file-size && pnpm lint:fs-boundary && pnpm build && pnpm archive:wasm:allocator-tests && pnpm docs:check && pnpm test && node scripts/check-pack.mjs","prepack":"node scripts/prepack-build.mjs","test:bun":"bun node_modules/vitest/vitest.mjs run --config scripts/bun-vitest.config.ts","benchmark":"node scripts/benchmark.mjs","docs:site":"node scripts/build-docs-site.mjs","docs:check":"node scripts/check-doc-examples.mjs","pack:check":"pnpm build && node scripts/check-pack.mjs","crabbox:run":"crabbox run","native:test":"cargo test --workspace","archive:wasm":"node scripts/build-archive-wasm.mjs","crabbox:stop":"crabbox stop","native:build":"pnpm --filter @openclaw/fs-safe-native-build build","test:changed":"pnpm run test","check:changed":"pnpm run check","package:smoke":"node scripts/check-release-packages.mjs --allow-host-only --output release-artifacts","release:notes":"node scripts/release-notes.mjs","test:coverage":"vitest run --coverage","test:security":"vitest run test/fs-safe.test.ts test/read-boundary-bypass.test.ts test/write-boundary-bypass.test.ts test/additional-boundary-bypass.test.ts test/adversarial-boundary-payloads.test.ts","crabbox:warmup":"crabbox warmup","lint:file-size":"node scripts/check-file-size.mjs","crabbox:hydrate":"crabbox actions hydrate","package:collect":"node scripts/check-release-packages.mjs --output release-artifacts","test:bun:native":"bun scripts/bun-native-proof.mjs && bun node_modules/vitest/vitest.mjs run --config scripts/bun-native-vitest.config.ts","lint:fs-boundary":"node scripts/check-fs-boundary-primitives.mjs","benchmark:methods":"node benchmarks/runner.mjs","benchmark:publish":"pnpm build && node scripts/bench-publish.mjs","public-api:update":"pnpm build && node scripts/check-pack.mjs --update-public-api","test:coverage:merge":"node scripts/merge-coverage.mjs","test:coverage:collect":"pnpm build && pnpm archive:wasm:allocator-tests && vitest run --coverage --coverage.reporter=json --coverage.thresholds.lines=0 --coverage.thresholds.functions=0 --coverage.thresholds.statements=0 --coverage.thresholds.branches=0","archive:producer-smoke":"node scripts/archive-producer-smoke.mjs","archive:wasm:allocator-tests":"node scripts/build-archive-wasm.mjs --allocator-tests"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"71485d21-a8c3-4f6c-ae40-dd60e3585161"}},"_resolved":"/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.22.0.tgz","_integrity":"sha512-CW/T0NUcdn8PLVBgyXUbIn90a16uhP3YtKdd+eqJjmg0FR01KCCjCI3PxrvK1ygrUb/BfQsJJe+hXA9+/0rqKQ==","repository":{"url":"git+https://github.com/openclaw/fs-safe.git","type":"git"},"_npmVersion":"12.0.2","description":"Capability-style filesystem roots for Node.js apps that handle untrusted relative paths.","directories":{},"sideEffects":false,"_nodeVersion":"24.21.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@12.4.2","devDependencies":{"tar":"7.5.22","vite":"8.3.1","vitest":"^5.0.1","sigstore":"5.0.0","fast-check":"^4.10.1","typescript":"^7.0.2","@types/node":"^26.6.1","@napi-rs/cli":"3.10.5","@emnapi/runtime":"2.0.0-alpha.5","istanbul-reports":"3.2.0","@vitest/coverage-v8":"5.0.2","istanbul-lib-report":"3.0.1","istanbul-lib-coverage":"3.2.2"},"optionalDependencies":{"jszip":"^3.10.2","@openclaw/fs-safe-darwin-x64":"0.22.0","@openclaw/fs-safe-darwin-arm64":"0.22.0","@openclaw/fs-safe-linux-x64-gnu":"0.22.0","@openclaw/fs-safe-linux-x64-musl":"0.22.0","@openclaw/fs-safe-win32-x64-msvc":"0.22.0","@openclaw/fs-safe-linux-arm64-gnu":"0.22.0","@openclaw/fs-safe-linux-arm64-musl":"0.22.0"},"_npmOperationalInternal":{"tmp":"tmp/fs-safe_0.22.0_1790834412325_0.4452680148489203","host":"s3://npm-registry-packages-npm-production"}},"0.23.0":{"_id":"@openclaw/fs-safe@0.23.0","bugs":{"url":"https://github.com/openclaw/fs-safe/issues"},"dist":{"shasum":"08fda502b3353f5590d4be4e3da11291006a8531","tarball":"https://registry.npmjs.org/@openclaw/fs-safe/-/fs-safe-0.23.0.tgz","fileCount":646,"integrity":"sha512-4AQjaT2KF3Kmt+DYabyJpWIJcm0CXaEIvDRbR4g4PmkG5dc8KtNf5kahMhQ7F/n1DzMztmSLWilt07m01fDI1Q==","signatures":[{"sig":"MEQCIDFdJ95zKQ37d3zbgyyB0EoarsZtrKfoV5AJaCG9Ue9rAiA90o4gD2+CK5DzCCFdD+aehg74nXBmXMuayVGF9PJ7fw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIGtjh+eOxSqy/m7gNaP4+r6gjbp/Ev01oKqHLQa6DEVDAiEAgBrxi2qIgR9BXqE7s+HMb6ysLfXqofNDANDjyRJxGJg="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@openclaw%2ffs-safe@0.23.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3584567},"name":"@openclaw/fs-safe","type":"module","_from":"file:/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.23.0.tgz","author":{"name":"OpenClaw Team","email":"dev@openclaw.ai"},"engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./copy":{"types":"./dist/copy.d.ts","default":"./dist/copy.js"},"./json":{"types":"./dist/json.d.ts","default":"./dist/json.js"},"./path":{"types":"./dist/path.d.ts","default":"./dist/path.js"},"./root":{"types":"./dist/root.d.ts","default":"./dist/root.js"},"./temp":{"types":"./dist/temp.d.ts","default":"./dist/temp.js"},"./walk":{"types":"./dist/walk.d.ts","default":"./dist/walk.js"},"./guest":{"types":"./dist/guest.d.ts","default":"./dist/guest.js"},"./store":{"types":"./dist/store.d.ts","default":"./dist/store.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./watch":{"types":"./dist/watch.d.ts","default":"./dist/watch.js"},"./atomic":{"types":"./dist/atomic.d.ts","default":"./dist/atomic.js"},"./config":{"types":"./dist/config.d.ts","default":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","default":"./dist/errors.js"},"./output":{"types":"./dist/output.d.ts","default":"./dist/output.js"},"./secret":{"types":"./dist/secret.d.ts","default":"./dist/secret.js"},"./archive":{"types":"./dist/archive.d.ts","default":"./dist/archive.js"},"./advanced":{"types":"./dist/advanced.d.ts","default":"./dist/advanced.js"},"./file-lock":{"types":"./dist/file-lock.d.ts","default":"./dist/file-lock.js"},"./durability":{"types":"./dist/durability.d.ts","default":"./dist/durability.js"},"./test-hooks":{"types":"./dist/test-hooks.d.ts","default":"./dist/test-hooks.js"},"./permissions":{"types":"./dist/permissions-public.d.ts","default":"./dist/permissions-public.js"},"./secure-file":{"types":"./dist/secure-file.d.ts","default":"./dist/secure-file.js"},"./package.json":"./package.json","./secure-temp-root":{"types":"./dist/secure-temp-dir.d.ts","default":"./dist/secure-temp-dir.js"}},"license":"MIT","scripts":{"test":"vitest run","build":"node scripts/prepack-build.mjs","check":"pnpm lint:file-size && pnpm lint:fs-boundary && pnpm build && pnpm archive:wasm:allocator-tests && pnpm docs:check && pnpm test && node scripts/check-pack.mjs","prepack":"node scripts/prepack-build.mjs","test:bun":"bun node_modules/vitest/vitest.mjs run --config scripts/bun-vitest.config.ts","benchmark":"node scripts/benchmark.mjs","docs:site":"node scripts/build-docs-site.mjs","docs:check":"node scripts/check-doc-examples.mjs","pack:check":"pnpm build && node scripts/check-pack.mjs","crabbox:run":"crabbox run","native:test":"cargo test --workspace","archive:wasm":"node scripts/build-archive-wasm.mjs","crabbox:stop":"crabbox stop","native:build":"pnpm --filter @openclaw/fs-safe-native-build build","test:changed":"pnpm run test","check:changed":"pnpm run check","package:smoke":"node scripts/check-release-packages.mjs --allow-host-only --output release-artifacts","release:notes":"node scripts/release-notes.mjs","test:coverage":"vitest run --coverage","test:security":"vitest run test/fs-safe.test.ts test/read-boundary-bypass.test.ts test/write-boundary-bypass.test.ts test/additional-boundary-bypass.test.ts test/adversarial-boundary-payloads.test.ts","crabbox:warmup":"crabbox warmup","lint:file-size":"node scripts/check-file-size.mjs","crabbox:hydrate":"crabbox actions hydrate","package:collect":"node scripts/check-release-packages.mjs --output release-artifacts","test:bun:native":"bun scripts/bun-native-proof.mjs && bun node_modules/vitest/vitest.mjs run --config scripts/bun-native-vitest.config.ts","lint:fs-boundary":"node scripts/check-fs-boundary-primitives.mjs","benchmark:methods":"node benchmarks/runner.mjs","benchmark:publish":"pnpm build && node scripts/bench-publish.mjs","public-api:update":"pnpm build && node scripts/check-pack.mjs --update-public-api","test:coverage:merge":"node scripts/merge-coverage.mjs","test:coverage:collect":"pnpm build && pnpm archive:wasm:allocator-tests && vitest run --coverage --coverage.reporter=json --coverage.thresholds.lines=0 --coverage.thresholds.functions=0 --coverage.thresholds.statements=0 --coverage.thresholds.branches=0","archive:producer-smoke":"node scripts/archive-producer-smoke.mjs","archive:wasm:allocator-tests":"node scripts/build-archive-wasm.mjs --allocator-tests"},"version":"0.23.0","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"71485d21-a8c3-4f6c-ae40-dd60e3585161"}},"homepage":"https://fs-safe.io","keywords":["filesystem","openclaw","path-traversal","security","typescript"],"_resolved":"/home/runner/work/fs-safe/fs-safe/release-artifacts/openclaw-fs-safe-0.23.0.tgz","_integrity":"sha512-4AQjaT2KF3Kmt+DYabyJpWIJcm0CXaEIvDRbR4g4PmkG5dc8KtNf5kahMhQ7F/n1DzMztmSLWilt07m01fDI1Q==","repository":{"url":"git+https://github.com/openclaw/fs-safe.git","type":"git"},"_npmVersion":"12.0.2","description":"Capability-style filesystem roots for Node.js apps that handle untrusted relative paths.","directories":{},"maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"sideEffects":false,"_nodeVersion":"24.21.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@12.4.2","devDependencies":{"tar":"7.5.22","vite":"8.3.1","vitest":"^5.0.1","sigstore":"5.0.0","fast-check":"^4.10.1","typescript":"^7.0.2","@types/node":"^26.6.1","@napi-rs/cli":"3.10.5","@emnapi/runtime":"2.0.0-alpha.5","istanbul-reports":"3.2.0","@vitest/coverage-v8":"5.0.2","istanbul-lib-report":"3.0.1","istanbul-lib-coverage":"3.2.2"},"optionalDependencies":{"jszip":"^3.10.2","@openclaw/fs-safe-darwin-x64":"0.23.0","@openclaw/fs-safe-darwin-arm64":"0.23.0","@openclaw/fs-safe-linux-x64-gnu":"0.23.0","@openclaw/fs-safe-linux-x64-musl":"0.23.0","@openclaw/fs-safe-win32-x64-msvc":"0.23.0","@openclaw/fs-safe-linux-arm64-gnu":"0.23.0","@openclaw/fs-safe-linux-arm64-musl":"0.23.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/fs-safe_0.23.0_1790921708627_0.8193736048175944"}}},"time":{"created":"2026-05-06T00:56:12.903Z","modified":"2026-10-02T06:15:09.077Z","0.1.0":"2026-05-06T00:56:13.211Z","0.1.1":"2026-05-06T01:30:19.977Z","0.1.2":"2026-05-06T03:55:45.741Z","0.2.0":"2026-05-07T10:07:42.188Z","0.2.1":"2026-05-08T11:26:53.408Z","0.2.2":"2026-05-11T07:46:06.770Z","0.2.3":"2026-05-14T06:26:12.279Z","0.2.4":"2026-05-14T06:54:07.417Z","0.2.5":"2026-05-16T21:31:33.323Z","0.2.6":"2026-05-17T06:44:49.762Z","0.2.7":"2026-05-20T18:16:04.215Z","0.3.0":"2026-05-21T23:12:26.380Z","0.4.0":"2026-06-18T03:53:27.015Z","0.4.1":"2026-07-01T09:13:00.992Z","0.4.2":"2026-07-19T02:41:02.564Z","0.4.3":"2026-07-19T04:22:40.081Z","0.4.4":"2026-07-19T05:35:03.124Z","0.4.5":"2026-07-21T05:31:39.569Z","0.4.6":"2026-07-24T10:47:24.276Z","0.4.7":"2026-07-24T23:18:35.891Z","0.5.0":"2026-07-28T00:19:42.846Z","0.5.1":"2026-08-02T02:37:52.971Z","0.5.2":"2026-08-03T03:35:30.471Z","0.5.3":"2026-08-09T04:13:56.852Z","0.5.4":"2026-08-10T13:30:49.362Z","0.5.5":"2026-08-12T04:16:43.387Z","0.5.6":"2026-08-14T20:15:48.591Z","0.6.0":"2026-08-29T19:01:29.601Z","0.7.0":"2026-08-31T16:29:50.754Z","0.7.1":"2026-09-01T18:21:01.964Z","0.7.2":"2026-09-01T19:57:47.311Z","0.8.0":"2026-09-04T17:46:29.445Z","0.8.1":"2026-09-04T22:51:54.214Z","0.8.2":"2026-09-05T20:31:51.118Z","0.8.3":"2026-09-07T01:23:34.233Z","0.8.4":"2026-09-07T04:45:20.058Z","0.8.5":"2026-09-07T09:52:45.348Z","0.8.6":"2026-09-07T10:55:13.458Z","0.9.0":"2026-09-11T22:46:47.142Z","0.10.0":"2026-09-13T08:35:02.755Z","0.11.0":"2026-09-14T07:50:46.406Z","0.12.0":"2026-09-15T12:38:42.129Z","0.13.0":"2026-09-16T17:57:50.666Z","0.13.1":"2026-09-16T22:00:56.413Z","0.14.0":"2026-09-17T09:58:55.050Z","0.15.0":"2026-09-18T15:34:36.392Z","0.16.0":"2026-09-19T06:44:27.800Z","0.17.0":"2026-09-20T16:54:35.482Z","0.18.0":"2026-09-21T18:01:18.267Z","0.18.1":"2026-09-22T12:41:53.020Z","0.18.2":"2026-09-23T05:26:43.267Z","0.19.0":"2026-09-24T22:17:52.679Z","0.20.0":"2026-09-26T03:43:11.184Z","0.21.0":"2026-09-27T00:43:24.097Z","0.21.1":"2026-09-27T19:13:10.081Z","0.21.2":"2026-09-28T17:19:08.397Z","0.21.3":"2026-09-30T12:47:42.593Z","0.22.0":"2026-10-01T06:00:12.449Z","0.23.0":"2026-10-02T06:15:08.733Z"},"bugs":{"url":"https://github.com/openclaw/fs-safe/issues"},"author":{"name":"OpenClaw Team","email":"dev@openclaw.ai"},"license":"MIT","homepage":"https://fs-safe.io","keywords":["filesystem","openclaw","path-traversal","security","typescript"],"repository":{"url":"git+https://github.com/openclaw/fs-safe.git","type":"git"},"description":"Capability-style filesystem roots for Node.js apps that handle untrusted relative paths.","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"readme":"# 🛡️ @openclaw/fs-safe\n\n![fs-safe banner](docs/assets/readme-banner.jpg)\n\n[![npm](https://img.shields.io/npm/v/@openclaw/fs-safe.svg?color=10b981&label=npm)](https://www.npmjs.com/package/@openclaw/fs-safe)\n[![ci](https://github.com/openclaw/fs-safe/actions/workflows/ci.yml/badge.svg)](https://github.com/openclaw/fs-safe/actions/workflows/ci.yml)\n[![node](https://img.shields.io/node/v/@openclaw/fs-safe.svg?color=10b981)](https://nodejs.org)\n[![license](https://img.shields.io/npm/l/@openclaw/fs-safe.svg?color=10b981)](LICENSE)\n[![docs](https://img.shields.io/badge/docs-fs--safe.io-10b981)](https://fs-safe.io)\n\nCapability-style filesystem roots for Node.js apps that handle untrusted relative paths.\n\nThink Go's `os.Root` / `OpenInRoot` or Rust's [`cap-std`](https://github.com/bytecodealliance/cap-std), but for Node. Hand `root()` a trusted directory and you get back a handle whose every method resolves relative paths against it and defends against `..`, symlink swaps, hardlink aliases, and TOCTOU rename races. The exact containment strength is reported per mechanism: Linux `openat2` opens are kernel-atomic; guarded Linux fallback, macOS, Windows, and JavaScript paths are best-effort.\n\n```ts\nimport { root } from \"@openclaw/fs-safe\";\n\nconst fs = await root(\"/safe/workspace\");\nawait fs.write(\"notes/today.txt\", \"hello\\n\");   // ok\nawait fs.write(\"../escape.txt\", \"x\");            // throws FsSafeError(\"outside-workspace\")\n```\n\nThat's the whole pitch. `root()` is the product; the rest of the package — JSON stores, atomic writes, secret files, archive extraction, temp workspaces — is supporting cast for the same boundary.\n\nFull docs and reference at **[fs-safe.io](https://fs-safe.io)**.\n\n## Contents\n\n[Why this exists](#why-this-exists) · [Not a sandbox](#not-a-sandbox) · [Install](#install) · [0.6 migration](docs/migrating-to-0.6.md) · [Python migration](#migrating-from-the-python-helper) · [Quick start](#quick-start) · [Reading](#reading) · [Subpaths](#subpaths) · [Failure semantics](#failure-semantics-in-the-name) · [Directory durability](#directory-durability) · [Atomic writes](#atomic-writes) · [External outputs](#external-outputs) · [Stores](#stores) · [Secure absolute reads](#secure-absolute-file-reads) · [Walking](#directory-walking) · [Archive extraction](#archive-extraction) · [Path scopes](#advanced-path-scopes) · [Errors](#errors) · [Safety model](#safety-model) · [Limitations](#limitations)\n\n## Why this exists\n\nMost Node code that has to touch caller-controlled paths reaches for:\n\n```ts\npath.resolve(root, input).startsWith(root)\n```\n\nThat validates a *string*. It does not pin the file you opened, defend against a symlink retarget between check and use, reject hardlinked aliases of out-of-tree inodes, or verify that a write landed where you intended after a rename. The pieces to do those things exist scattered across the ecosystem — [`write-file-atomic`](https://www.npmjs.com/package/write-file-atomic) for atomic writes, `tar` / `jszip` for archive extraction, various `safefs`-style convenience wrappers — but none of them give you one root handle with traversal-resistant semantics across every operation.\n\nThe same idea has landed in other languages. Go [added `os.Root` and `OpenInRoot`](https://go.dev/blog/osroot); Rust has had [`cap-std`](https://github.com/bytecodealliance/cap-std) for years. Node's `fs` is path-string-oriented and exposes flags like `O_NOFOLLOW` but not an ergonomic \"operate inside this root\" API. `fs-safe` fills that gap.\n\n| | Root boundary | Atomic writes | Symlink/hardlink defense | TOCTOU resistance | Archive extraction |\n|---|---|---|---|---|---|\n| `path.resolve().startsWith()` | string check only | – | – | – | – |\n| [`write-file-atomic`](https://www.npmjs.com/package/write-file-atomic) | – | ✓ | – | – | – |\n| Go [`os.Root`](https://go.dev/blog/osroot) / Rust [`cap-std`](https://github.com/bytecodealliance/cap-std) | ✓ | platform | ✓ | ✓ | – |\n| **`@openclaw/fs-safe`** | **✓** | **✓** | **✓** | **Linux openat2 atomic; others best-effort** | **✓ (ZIP/TAR/gzip/zstd/bzip2)** |\n\n## Not a sandbox\n\nThis is a **library-level guardrail**, not OS-level isolation. It does not replace containers, seccomp, AppArmor, or filesystem permissions. It is for code that already runs with the privileges of its workspace and wants to stop trivial path tricks from escaping it. If your threat model is a hostile process, you need OS isolation; if your threat model is \"an agent, plugin, upload handler, or CLI will eventually be tricked into writing somewhere it shouldn't,\" `fs-safe` catches that. The [security model](docs/security-model.md) describes the exact Linux, macOS, Windows, and JavaScript fallback guarantees and race boundaries.\n\n## Install\n\n```sh\npnpm add @openclaw/fs-safe\n```\n\nRequires Node.js 22 or newer. Bun 1.4.2 is also supported with the\n[Bun runtime requirements](docs/install.md#bun-runtime), including the matching\nRust addon on macOS and Linux. See\n[Installation](docs/install.md) for supported platforms and optional dependencies.\n\nConfigure native policy before first use:\n\n```ts\nimport { configureFsSafeNative } from \"@openclaw/fs-safe\";\n\nconfigureFsSafeNative({ mode: \"auto\" });    // default: native when available\nconfigureFsSafeNative({ mode: \"off\" });     // disable the addon; use supported fallbacks\nconfigureFsSafeNative({ mode: \"require\" }); // fail closed if the operation's native capability is unavailable\n```\n\n`FS_SAFE_NATIVE_MODE=auto|off|require` selects the same policy. Native-only\noperations fail with `helper-unavailable` when their capability is unavailable.\nGuarded JavaScript mutations are best-effort: a hostile peer can redirect a\npathname mutation before its post-check detects the escape. `require` selects\nhardened native paths where documented, but does not make every operation\nkernel-atomic. Read the [native helper policy](docs/native-helper.md) and\n[operation/platform matrix](docs/security-model.md#native-root-mutation-capabilities)\nwhen concurrent mutation is in scope.\n\n## Migrating from the Python helper\n\nVersion 0.5 replaced the Python worker with prebuilt native bindings. Follow the\n[0.5 migration checklist](docs/migrating-to-0.5.md) to replace the removed Python\nconfiguration with native mode selection; current archive changes are covered\nin the [0.6 migration guide](docs/migrating-to-0.6.md).\n\n## Quick start\n\n```ts\nimport { root } from \"@openclaw/fs-safe\";\n\nconst fs = await root(\"/safe/workspace\", {\n  hardlinks: \"reject\",\n  symlinks: \"reject\",\n  mkdir: true,\n  mode: 0o600,\n});\n\nawait fs.write(\"notes/today.txt\", \"hello\\n\");\nconst text = await fs.readText(\"notes/today.txt\");\nconst config = await fs.readJson(\"config.json\");\nawait fs.copyIn(\"uploads/upload.png\", \"/tmp/upload.png\");\nawait fs.move(\"notes/today.txt\", \"notes/archive/today.txt\", { overwrite: true });\nawait fs.remove(\"notes/archive/today.txt\");\n```\n\n`root()` requires an existing trusted directory. Its defaults apply to each\noperation; per-call options handle exceptions. See the [Root reference](docs/root.md).\n\n`write()` replaces contents by default. Use `create()` or `overwrite: false`\nwhen an existing destination should be an error. `move()` defaults to no clobber\nand requires native support for the atomic collision decision; it fails with\n`helper-unavailable` when unavailable. Pass `overwrite: true` when replacement\nis intended.\n\nSee [Writing](docs/writing.md) for copy sources, mutation authority, symlink\npolicy, writable handles, and bounded removal, and [Creation](docs/creation.md)\nfor private permissions, atomic creation, and durability options.\n\n## Reading\n\nPick the narrowest read shape that gives you what you need:\n\n```ts\nawait fs.readJson(\"config.json\"); // parsed value; validate it at your boundary\nawait fs.readText(\"notes/today.txt\");\nawait fs.readBytes(\"image.png\");\nawait fs.read(\"notes/today.txt\"); // { buffer, realPath, stat }\nconst opened = await fs.open(\"large.log\"); // FileHandle for streaming\n```\n\nFor streams, use `open()` and the returned `FileHandle`:\n\n```ts\nawait using opened = await fs.open(\"large.log\");\n{\n  const stream = opened.handle.createReadStream();\n  // consume stream\n}\n```\n\nRoot reads default to `DEFAULT_ROOT_MAX_BYTES` (16 MiB). Pass a larger `maxBytes`\nfor expected large reads, or `Number.POSITIVE_INFINITY` when the caller has a\nseparate size budget.\n\nSee [Reading](docs/reading.md) for absolute-path loaders, aliases, and read\nbudgets, and [Writing](docs/writing.md#openwritable-for-streaming) for writable\nhandles. Inspection results from `stat()`, `exists()`, `list()`, and `entries()`\nare advisory; use the operation methods for identity checks at the time of I/O.\n\n## Subpaths\n\nThe main entry point collects the common root, config, output, lock, native-mode,\nand error exports. Prefer focused subpaths when a consumer needs a narrower\ncontract. Low-level helpers that OpenClaw needs to compose higher-level APIs are grouped under\n`@openclaw/fs-safe/advanced` instead of being separate public leaf contracts.\n\nSee the [complete subpath catalogue](docs/install.md#subpath-exports) for every entry point and its contents.\n\n## Failure semantics in the name\n\nWhen two helpers behave differently on the same input, the difference is in the name, not the docs.\n\n```ts\nimport { readJson, tryReadJson } from \"@openclaw/fs-safe/json\";\n\nawait tryReadJson(\"./config.json\"); // returns null on missing or invalid\nawait readJson(\"./manifest.json\");  // throws on missing or invalid\n```\n\nFor one-off structured reads under a trusted root, `readRootJsonObjectSync()`\nperforms the root-bounded open and JSON object validation in one step. Use\n`readRootStructuredFileSync()` when the parser lives outside fs-safe, such as\nJSON5-backed plugin manifests.\n\n## Directory durability\n\nUse the [Directory durability](docs/durability.md) reference for directory\nreceipts, pinned synchronization, and exclusive publication policies, including\nwhether a completed target is preserved after a parent-directory sync failure.\n\n## Atomic writes\n\n`replaceFileAtomic()` writes a sibling temp and renames it over the destination.\nFile and parent-directory synchronization are opt-in:\n\n```ts\nimport { replaceFileAtomic } from \"@openclaw/fs-safe/atomic\";\n\nawait replaceFileAtomic({\n  filePath: \"/safe/workspace/state.json\",\n  content: JSON.stringify(state, null, 2),\n  mode: 0o600,\n  syncTempFile: true,\n  syncParentDir: true,\n});\n```\n\nSee [Atomic writes](docs/atomic.md) for synchronous adapters, fallback recovery,\nmutation authority, and publication receipts. Retained lifecycles have separate\ncontracts: [staged files](docs/staged-file.md), [entry publication](docs/entry-publication.md),\nand [staged symlinks](docs/staged-symlink.md).\n\n## External outputs\n\nUse `writeExternalFileWithinRoot()` when a browser download, renderer, media\ntool, or native library needs an absolute path to write to:\n\n```ts\nimport { writeExternalFileWithinRoot } from \"@openclaw/fs-safe/output\";\n\nawait writeExternalFileWithinRoot({\n  rootDir: \"/safe/workspace/downloads\",\n  path: \"reports/today.pdf\",\n  staging: \"sibling\",\n  write: async (filePath) => {\n    await download.saveAs(filePath);\n  },\n});\n```\n\nThe callback receives a staged path. Choose workspace or sibling staging and\nproducer isolation using the [staging-mode guide](docs/output.md#choosing-a-staging-mode).\n\n## Stores\n\nUse `fileStore().json()` for small state files that need explicit fallback\nreads, atomic writes, and optional sidecar locking around read-modify-write\nupdates:\n\n```ts\nimport { fileStore } from \"@openclaw/fs-safe/store\";\n\nconst files = fileStore({ rootDir: \"/safe/workspace/state\", private: true });\nconst store = files.json(\"settings.json\", { lock: true });\n\nawait store.updateOr({ enabled: false }, (current) => ({ ...current, enabled: true }));\n```\n\nSee [JSON stores](docs/json-store.md) for single-path stores and update semantics,\n[File stores](docs/file-store.md) for blobs, streams, and private state, and\n[File locks](docs/sidecar-lock.md) for coordination and stale-lock recovery.\nThe store subpath also provides [durable JSON queues](docs/store.md#durable-json-queues).\nUse [temp workspaces](docs/temp.md) for scoped scratch files and cleanup policies.\n\n## Exact file comparison\n\nFor exact comparison of already-open files, use\n[`sameFileContentsSync()`](docs/file-contents.md) from `advanced`. It compares\nbytes through both EOFs with bounded memory and preserves the borrowed\ndescriptors' positions and ownership.\n\n## Secure absolute file reads\n\nUse [`readSecureFile()`](docs/secure-file.md) for an absolute credential path.\nIt validates permissions, ownership, identity, and size through the opened handle.\nSee [Windows fallback prerequisites](docs/install.md#windows-security-fallback)\nwhen native support is unavailable.\n\n```ts\nimport { readSecureFile } from \"@openclaw/fs-safe/secure-file\";\n\nconst { buffer } = await readSecureFile({\n  filePath: \"/var/lib/app/token\",\n  label: \"auth token\",\n  trust: { trustedDirs: [\"/var/lib/app\"] },\n  io: { maxBytes: 16 * 1024, timeoutMs: 5_000 },\n});\n```\n\nUse `permissions: { allowInsecure: true }` only for migration or explicit local-development\nflows where a warning is preferable to refusing the file.\n\n## Directory walking\n\n[`Root.entries()`](docs/entries.md) lists immediate children without following\nchild symlinks:\n\n```ts\nfor await (const entry of fs.entries(\"plugins\", { maxEntries: 1_000 })) {\n  console.log(entry.name, entry.isSymbolicLink);\n}\n```\n\nUse `Root.walk()` for root-bounded recursive traversal of caller-controlled\npaths. Standalone `walkDirectory()` and `walkDirectorySync()` provide best-effort\ninventories; inspect `truncated` and `failedDirs` before treating a scan as complete.\nSee [Directory walking](docs/walk.md) for budgets, ordering, filtering, and\ncancellation contracts.\n\n## Archive extraction\n\n`extractArchive()` handles ZIP and TAR behind one API, with traversal checks, blocked-link-type rejection, and entry-count and byte budgets.\n\n```ts\nimport { extractArchive, resolveArchiveKind } from \"@openclaw/fs-safe/archive\";\n\nconst kind = resolveArchiveKind(uploadPath);\nif (!kind) throw new Error(`unsupported archive: ${uploadPath}`);\n\nawait extractArchive({\n  archivePath: uploadPath,\n  destDir: \"/safe/workspace/plugin\",\n  kind,\n  timeoutMs: 15_000,\n  limits: {\n    maxArchiveBytes: 256 * 1024 * 1024,\n    maxEntries: 50_000,\n    maxExtractedBytes: 512 * 1024 * 1024,\n    maxEntryBytes: 256 * 1024 * 1024,\n    maxEntryPathComponents: 64,\n  },\n});\n```\n\nExtraction stages into a private directory and merges through the same safe-open boundary used by direct writes, so a symlinked entry can't trick the merge into following an out-of-tree path.\n\n## Advanced path scopes\n\nUse [`pathScope()`](docs/path-scope.md) for lower-level boundary validation over\na trusted absolute path.\n\n## Errors\n\nBoundary and policy failures use `FsSafeError` with a closed `code` union.\nParsing, callbacks, and underlying I/O can also throw other error types:\n\n```ts\nimport { FsSafeError } from \"@openclaw/fs-safe/errors\";\n\ntry {\n  await fs.write(\"../escape.txt\", \"x\");\n} catch (err) {\n  if (err instanceof FsSafeError && err.code === \"outside-workspace\") {\n    // handle\n  }\n  throw err;\n}\n```\n\nFor `FsSafeError`, `category` distinguishes policy rejections from operational\nfilesystem or runtime failures. See [Errors](docs/errors.md) for codes, receipts,\nand other error families; check the error type before branching on its code.\n\n## Safety model\n\nRoot operations combine confinement, no-follow opens, and identity checks.\nThe [security model](docs/security-model.md) describes guarantees and race limits\nfor native and JavaScript mechanisms on each platform.\n\n## Limitations\n\n- Windows native opens are handle-relative and reject reparse points; operations without native wiring use the guarded Node implementation.\n- Hardlink rejection depends on platform metadata. Treat it as defense-in-depth, not authorization.\n- `fs-safe` does not validate file contents or archive payload semantics beyond filesystem safety constraints. Schemas, signatures, and authorization belong in the layer above.\n\n## License\n\nMIT.\n","readmeFilename":"README.md"}