@openclaw/openshell-sandbox 2026.9.4 → 2026.9.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/activity.svg +3 -0
- package/assets/icon.png +0 -0
- package/dist/index.js +49 -75
- package/node_modules/@openclaw/fs-safe/CHANGELOG.md +487 -0
- package/node_modules/@openclaw/fs-safe/LICENSE +1 -0
- package/node_modules/@openclaw/fs-safe/README.md +106 -16
- package/node_modules/@openclaw/fs-safe/dist/absolute-path.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/absolute-path.js +30 -14
- package/node_modules/@openclaw/fs-safe/dist/advanced.d.ts +13 -3
- package/node_modules/@openclaw/fs-safe/dist/advanced.js +11 -1
- package/node_modules/@openclaw/fs-safe/dist/archive-crc32.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/archive-crc32.js +6 -1
- package/node_modules/@openclaw/fs-safe/dist/archive-deadline.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/archive-deadline.js +23 -25
- package/node_modules/@openclaw/fs-safe/dist/archive-durability.d.ts +23 -0
- package/node_modules/@openclaw/fs-safe/dist/archive-durability.js +180 -0
- package/node_modules/@openclaw/fs-safe/dist/archive-entry.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/archive-entry.js +8 -8
- package/node_modules/@openclaw/fs-safe/dist/archive-errors.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/archive-gzip-tail.d.ts +3 -1
- package/node_modules/@openclaw/fs-safe/dist/archive-gzip-tail.js +33 -8
- package/node_modules/@openclaw/fs-safe/dist/archive-input.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/archive-input.js +14 -8
- package/node_modules/@openclaw/fs-safe/dist/archive-kind.d.ts +0 -2
- package/node_modules/@openclaw/fs-safe/dist/archive-kind.js +8 -19
- package/node_modules/@openclaw/fs-safe/dist/archive-limits.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/archive-merge.d.ts +8 -4
- package/node_modules/@openclaw/fs-safe/dist/archive-merge.js +185 -59
- package/node_modules/@openclaw/fs-safe/dist/archive-parser-errors.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/archive-parser.wasm +0 -0
- package/node_modules/@openclaw/fs-safe/dist/archive-plan.d.ts +72 -2
- package/node_modules/@openclaw/fs-safe/dist/archive-plan.js +86 -22
- package/node_modules/@openclaw/fs-safe/dist/archive-read.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/archive-read.js +132 -114
- package/node_modules/@openclaw/fs-safe/dist/archive-staging.d.ts +6 -4
- package/node_modules/@openclaw/fs-safe/dist/archive-staging.js +100 -42
- package/node_modules/@openclaw/fs-safe/dist/archive-tar-stream.d.ts +14 -5
- package/node_modules/@openclaw/fs-safe/dist/archive-tar-stream.js +68 -36
- package/node_modules/@openclaw/fs-safe/dist/archive-tar-wasm.d.ts +17 -6
- package/node_modules/@openclaw/fs-safe/dist/archive-tar-wasm.js +129 -25
- package/node_modules/@openclaw/fs-safe/dist/archive-zip-admission.d.ts +2 -3
- package/node_modules/@openclaw/fs-safe/dist/archive-zip-admission.js +50 -14
- package/node_modules/@openclaw/fs-safe/dist/archive-zip-count.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/archive-zip-count.js +21 -1
- package/node_modules/@openclaw/fs-safe/dist/archive-zip-directory.d.ts +7 -1
- package/node_modules/@openclaw/fs-safe/dist/archive-zip-directory.js +38 -3
- package/node_modules/@openclaw/fs-safe/dist/archive-zip-entry.d.ts +6 -3
- package/node_modules/@openclaw/fs-safe/dist/archive-zip-entry.js +24 -9
- package/node_modules/@openclaw/fs-safe/dist/archive-zip-integrity.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/archive-zip-integrity.js +3 -4
- package/node_modules/@openclaw/fs-safe/dist/archive-zip-loader.d.ts +8 -0
- package/node_modules/@openclaw/fs-safe/dist/archive-zip-loader.js +147 -0
- package/node_modules/@openclaw/fs-safe/dist/archive-zip-manifest.d.ts +4 -0
- package/node_modules/@openclaw/fs-safe/dist/archive-zip-manifest.js +22 -0
- package/node_modules/@openclaw/fs-safe/dist/archive-zip-names.d.ts +7 -2
- package/node_modules/@openclaw/fs-safe/dist/archive-zip-names.js +67 -18
- package/node_modules/@openclaw/fs-safe/dist/archive-zip-preflight.d.ts +2 -4
- package/node_modules/@openclaw/fs-safe/dist/archive-zip-preflight.js +4 -35
- package/node_modules/@openclaw/fs-safe/dist/archive.d.ts +8 -6
- package/node_modules/@openclaw/fs-safe/dist/archive.js +225 -171
- package/node_modules/@openclaw/fs-safe/dist/async-lock.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/atomic.d.ts +3 -2
- package/node_modules/@openclaw/fs-safe/dist/bounded-read-stream.d.ts +0 -2
- package/node_modules/@openclaw/fs-safe/dist/bounded-read-stream.js +0 -6
- package/node_modules/@openclaw/fs-safe/dist/bounded-read.d.ts +12 -1
- package/node_modules/@openclaw/fs-safe/dist/bounded-read.js +83 -46
- package/node_modules/@openclaw/fs-safe/dist/byte-budget.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/byte-view.d.ts +2 -0
- package/node_modules/@openclaw/fs-safe/dist/byte-view.js +13 -0
- package/node_modules/@openclaw/fs-safe/dist/clone-metadata.d.ts +19 -0
- package/node_modules/@openclaw/fs-safe/dist/clone-metadata.js +36 -0
- package/node_modules/@openclaw/fs-safe/dist/config.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/containment.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/copy-file-input.d.ts +21 -0
- package/node_modules/@openclaw/fs-safe/dist/copy-file-input.js +71 -0
- package/node_modules/@openclaw/fs-safe/dist/copy-policy.d.ts +2 -0
- package/node_modules/@openclaw/fs-safe/dist/copy-policy.js +8 -0
- package/node_modules/@openclaw/fs-safe/dist/copy-publication.d.ts +20 -0
- package/node_modules/@openclaw/fs-safe/dist/copy-publication.js +33 -0
- package/node_modules/@openclaw/fs-safe/dist/copy-tree-portable.d.ts +8 -0
- package/node_modules/@openclaw/fs-safe/dist/copy-tree-portable.js +245 -0
- package/node_modules/@openclaw/fs-safe/dist/copy.d.ts +15 -0
- package/node_modules/@openclaw/fs-safe/dist/copy.js +143 -0
- package/node_modules/@openclaw/fs-safe/dist/create-owned-file.d.ts +7 -0
- package/node_modules/@openclaw/fs-safe/dist/create-owned-file.js +16 -0
- package/node_modules/@openclaw/fs-safe/dist/create.d.ts +17 -0
- package/node_modules/@openclaw/fs-safe/dist/create.js +388 -0
- package/node_modules/@openclaw/fs-safe/dist/creation-boundary.d.ts +60 -0
- package/node_modules/@openclaw/fs-safe/dist/creation-boundary.js +371 -0
- package/node_modules/@openclaw/fs-safe/dist/deny-mutations.d.ts +2 -3
- package/node_modules/@openclaw/fs-safe/dist/deny-mutations.js +61 -35
- package/node_modules/@openclaw/fs-safe/dist/device-path.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/device-path.js +5 -3
- package/node_modules/@openclaw/fs-safe/dist/directory-durability.d.ts +7 -8
- package/node_modules/@openclaw/fs-safe/dist/directory-durability.js +48 -61
- package/node_modules/@openclaw/fs-safe/dist/directory-entry-path.d.ts +2 -0
- package/node_modules/@openclaw/fs-safe/dist/directory-entry-path.js +21 -0
- package/node_modules/@openclaw/fs-safe/dist/directory-guard.d.ts +31 -7
- package/node_modules/@openclaw/fs-safe/dist/directory-guard.js +136 -39
- package/node_modules/@openclaw/fs-safe/dist/directory-mode-node.d.ts +14 -1
- package/node_modules/@openclaw/fs-safe/dist/directory-mode-node.js +125 -9
- package/node_modules/@openclaw/fs-safe/dist/directory-mode-owner.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/directory-mode-owner.js +5 -5
- package/node_modules/@openclaw/fs-safe/dist/directory-receipt.d.ts +23 -0
- package/node_modules/@openclaw/fs-safe/dist/directory-receipt.js +123 -0
- package/node_modules/@openclaw/fs-safe/dist/durability.d.ts +3 -3
- package/node_modules/@openclaw/fs-safe/dist/durability.js +1 -1
- package/node_modules/@openclaw/fs-safe/dist/effective-uid.d.ts +1 -0
- package/node_modules/@openclaw/fs-safe/dist/effective-uid.js +25 -0
- package/node_modules/@openclaw/fs-safe/dist/error-detail.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/error-detail.js +4 -1
- package/node_modules/@openclaw/fs-safe/dist/errors.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/file-cleanup.d.ts +19 -0
- package/node_modules/@openclaw/fs-safe/dist/file-cleanup.js +81 -0
- package/node_modules/@openclaw/fs-safe/dist/file-contents.d.ts +5 -0
- package/node_modules/@openclaw/fs-safe/dist/file-contents.js +40 -0
- package/node_modules/@openclaw/fs-safe/dist/file-handle-transfer.d.ts +15 -0
- package/node_modules/@openclaw/fs-safe/dist/file-handle-transfer.js +190 -0
- package/node_modules/@openclaw/fs-safe/dist/file-hash.d.ts +9 -3
- package/node_modules/@openclaw/fs-safe/dist/file-hash.js +273 -50
- package/node_modules/@openclaw/fs-safe/dist/file-identity.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/file-identity.js +18 -4
- package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-acquisition.d.ts +22 -0
- package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-acquisition.js +98 -0
- package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-admission.d.ts +17 -0
- package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-admission.js +54 -0
- package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-acquire.d.ts +3 -0
- package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-acquire.js +303 -0
- package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-arbitration.d.ts +17 -0
- package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-arbitration.js +66 -0
- package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-held.d.ts +32 -0
- package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-held.js +395 -0
- package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-io.d.ts +43 -0
- package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-io.js +209 -0
- package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-mutation.d.ts +16 -0
- package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-mutation.js +275 -0
- package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-options.d.ts +19 -0
- package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-options.js +58 -0
- package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-registration.d.ts +1 -0
- package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-registration.js +90 -0
- package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root.d.ts +36 -0
- package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root.js +288 -0
- package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-stale-admission.d.ts +19 -0
- package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-stale-admission.js +199 -0
- package/node_modules/@openclaw/fs-safe/dist/file-lock-sync.d.ts +4 -22
- package/node_modules/@openclaw/fs-safe/dist/file-lock-sync.js +226 -234
- package/node_modules/@openclaw/fs-safe/dist/file-lock.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/file-lock.js +29 -9
- package/node_modules/@openclaw/fs-safe/dist/file-observation.d.ts +1 -2
- package/node_modules/@openclaw/fs-safe/dist/file-store-boundary.d.ts +9 -4
- package/node_modules/@openclaw/fs-safe/dist/file-store-boundary.js +69 -81
- package/node_modules/@openclaw/fs-safe/dist/file-store-prune.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/file-store-prune.js +20 -6
- package/node_modules/@openclaw/fs-safe/dist/file-store-sync-directory.d.ts +15 -0
- package/node_modules/@openclaw/fs-safe/dist/file-store-sync-directory.js +319 -0
- package/node_modules/@openclaw/fs-safe/dist/file-store-sync-write.d.ts +1 -1
- package/node_modules/@openclaw/fs-safe/dist/file-store-sync-write.js +74 -73
- package/node_modules/@openclaw/fs-safe/dist/file-store.d.ts +4 -1
- package/node_modules/@openclaw/fs-safe/dist/file-store.js +71 -66
- package/node_modules/@openclaw/fs-safe/dist/file-sync.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/filename.d.ts +1 -1
- package/node_modules/@openclaw/fs-safe/dist/filename.js +83 -36
- package/node_modules/@openclaw/fs-safe/dist/fs.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/fs.js +3 -3
- package/node_modules/@openclaw/fs-safe/dist/guarded-mkdir.d.ts +12 -1
- package/node_modules/@openclaw/fs-safe/dist/guarded-mkdir.js +227 -33
- package/node_modules/@openclaw/fs-safe/dist/guarded-mutation.d.ts +2 -7
- package/node_modules/@openclaw/fs-safe/dist/guarded-mutation.js +15 -16
- package/node_modules/@openclaw/fs-safe/dist/guest-dispatch-python.d.ts +1 -0
- package/node_modules/@openclaw/fs-safe/dist/guest-dispatch-python.js +68 -0
- package/node_modules/@openclaw/fs-safe/dist/guest-native-python.d.ts +3 -0
- package/node_modules/@openclaw/fs-safe/dist/guest-native-python.js +135 -0
- package/node_modules/@openclaw/fs-safe/dist/guest.d.ts +8 -0
- package/node_modules/@openclaw/fs-safe/dist/guest.js +424 -0
- package/node_modules/@openclaw/fs-safe/dist/home-dir.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/home-dir.js +81 -16
- package/node_modules/@openclaw/fs-safe/dist/index.d.ts +9 -7
- package/node_modules/@openclaw/fs-safe/dist/install-path.d.ts +6 -1
- package/node_modules/@openclaw/fs-safe/dist/install-path.js +73 -31
- package/node_modules/@openclaw/fs-safe/dist/json-document-store.d.ts +3 -1
- package/node_modules/@openclaw/fs-safe/dist/json-document-store.js +23 -15
- package/node_modules/@openclaw/fs-safe/dist/json-durable-queue-directory.d.ts +13 -1
- package/node_modules/@openclaw/fs-safe/dist/json-durable-queue-directory.js +137 -3
- package/node_modules/@openclaw/fs-safe/dist/json-durable-queue-ownership.d.ts +8 -2
- package/node_modules/@openclaw/fs-safe/dist/json-durable-queue-ownership.js +153 -90
- package/node_modules/@openclaw/fs-safe/dist/json-durable-queue-read.d.ts +5 -0
- package/node_modules/@openclaw/fs-safe/dist/json-durable-queue-read.js +65 -0
- package/node_modules/@openclaw/fs-safe/dist/json-durable-queue.d.ts +1 -2
- package/node_modules/@openclaw/fs-safe/dist/json-durable-queue.js +93 -261
- package/node_modules/@openclaw/fs-safe/dist/json-store.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/json-store.js +4 -1
- package/node_modules/@openclaw/fs-safe/dist/json-stringify.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/json.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/json.js +90 -110
- package/node_modules/@openclaw/fs-safe/dist/local-file-access.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/local-file-access.js +7 -10
- package/node_modules/@openclaw/fs-safe/dist/local-file-descriptor.d.ts +16 -0
- package/node_modules/@openclaw/fs-safe/dist/local-file-descriptor.js +84 -0
- package/node_modules/@openclaw/fs-safe/dist/local-roots.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/local-roots.js +63 -38
- package/node_modules/@openclaw/fs-safe/dist/lock-config.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/move-path-cleanup.d.ts +7 -20
- package/node_modules/@openclaw/fs-safe/dist/move-path-cleanup.js +100 -37
- package/node_modules/@openclaw/fs-safe/dist/move-path-stage.d.ts +7 -0
- package/node_modules/@openclaw/fs-safe/dist/move-path-stage.js +56 -0
- package/node_modules/@openclaw/fs-safe/dist/move-path.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/move-path.js +120 -64
- package/node_modules/@openclaw/fs-safe/dist/mutation-authority.d.ts +8 -0
- package/node_modules/@openclaw/fs-safe/dist/mutation-authority.js +36 -0
- package/node_modules/@openclaw/fs-safe/dist/native-binding.d.ts +71 -2
- package/node_modules/@openclaw/fs-safe/dist/native-binding.js +8 -1
- package/node_modules/@openclaw/fs-safe/dist/native-config.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/native-directory-observation.d.ts +16 -0
- package/node_modules/@openclaw/fs-safe/dist/native-directory-observation.js +37 -0
- package/node_modules/@openclaw/fs-safe/dist/native-fallback-warning.d.ts +3 -0
- package/node_modules/@openclaw/fs-safe/dist/native-fallback-warning.js +11 -0
- package/node_modules/@openclaw/fs-safe/dist/native-operations.d.ts +1 -7
- package/node_modules/@openclaw/fs-safe/dist/native-operations.js +6 -27
- package/node_modules/@openclaw/fs-safe/dist/native-parent-admission.d.ts +34 -0
- package/node_modules/@openclaw/fs-safe/dist/native-parent-admission.js +147 -0
- package/node_modules/@openclaw/fs-safe/dist/native-pinned-write-windows.d.ts +2 -4
- package/node_modules/@openclaw/fs-safe/dist/native-pinned-write-windows.js +194 -38
- package/node_modules/@openclaw/fs-safe/dist/native-pinned-write.d.ts +1 -2
- package/node_modules/@openclaw/fs-safe/dist/native-pinned-write.js +360 -49
- package/node_modules/@openclaw/fs-safe/dist/native-policy-directory-observation.d.ts +11 -0
- package/node_modules/@openclaw/fs-safe/dist/native-policy-directory-observation.js +61 -0
- package/node_modules/@openclaw/fs-safe/dist/native-policy-parent-windows.d.ts +13 -0
- package/node_modules/@openclaw/fs-safe/dist/native-policy-parent-windows.js +209 -0
- package/node_modules/@openclaw/fs-safe/dist/native-rename-outcome.d.ts +3 -0
- package/node_modules/@openclaw/fs-safe/dist/native-rename-outcome.js +8 -0
- package/node_modules/@openclaw/fs-safe/dist/native-staged-file.d.ts +23 -9
- package/node_modules/@openclaw/fs-safe/dist/native-staged-file.js +180 -100
- package/node_modules/@openclaw/fs-safe/dist/native.d.ts +1 -2
- package/node_modules/@openclaw/fs-safe/dist/native.js +9 -4
- package/node_modules/@openclaw/fs-safe/dist/opened-file-failure.d.ts +1 -2
- package/node_modules/@openclaw/fs-safe/dist/opened-file-failure.js +3 -2
- package/node_modules/@openclaw/fs-safe/dist/opened-realpath.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/opened-realpath.js +16 -6
- package/node_modules/@openclaw/fs-safe/dist/output.d.ts +2 -1
- package/node_modules/@openclaw/fs-safe/dist/output.js +28 -12
- package/node_modules/@openclaw/fs-safe/dist/overwrite-file-handle.d.ts +7 -0
- package/node_modules/@openclaw/fs-safe/dist/overwrite-file-handle.js +46 -0
- package/node_modules/@openclaw/fs-safe/dist/owner-dacl.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/owner-dacl.js +12 -4
- package/node_modules/@openclaw/fs-safe/dist/path-case.d.ts +6 -0
- package/node_modules/@openclaw/fs-safe/dist/path-case.js +136 -0
- package/node_modules/@openclaw/fs-safe/dist/path-policy.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/path-policy.js +7 -2
- package/node_modules/@openclaw/fs-safe/dist/path-prefix.d.ts +6 -0
- package/node_modules/@openclaw/fs-safe/dist/path-prefix.js +104 -0
- package/node_modules/@openclaw/fs-safe/dist/path-scope-lexical.d.ts +13 -0
- package/node_modules/@openclaw/fs-safe/dist/path-scope-lexical.js +37 -0
- package/node_modules/@openclaw/fs-safe/dist/path-segment-route.d.ts +6 -0
- package/node_modules/@openclaw/fs-safe/dist/path-segment-route.js +24 -0
- package/node_modules/@openclaw/fs-safe/dist/path-suffix-aliases.d.ts +11 -0
- package/node_modules/@openclaw/fs-safe/dist/path-suffix-aliases.js +394 -0
- package/node_modules/@openclaw/fs-safe/dist/path.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/path.js +40 -7
- package/node_modules/@openclaw/fs-safe/dist/permission-exec.d.ts +2 -1
- package/node_modules/@openclaw/fs-safe/dist/permission-exec.js +144 -21
- package/node_modules/@openclaw/fs-safe/dist/permissions-public.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/permissions-windows.d.ts +2 -10
- package/node_modules/@openclaw/fs-safe/dist/permissions-windows.js +106 -83
- package/node_modules/@openclaw/fs-safe/dist/permissions.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/permissions.js +37 -30
- package/node_modules/@openclaw/fs-safe/dist/pinned-mutation-admission.d.ts +24 -0
- package/node_modules/@openclaw/fs-safe/dist/pinned-mutation-admission.js +419 -0
- package/node_modules/@openclaw/fs-safe/dist/pinned-mutation-observation.d.ts +38 -0
- package/node_modules/@openclaw/fs-safe/dist/pinned-mutation-observation.js +205 -0
- package/node_modules/@openclaw/fs-safe/dist/pinned-mutation-shared-route.d.ts +24 -0
- package/node_modules/@openclaw/fs-safe/dist/pinned-mutation-shared-route.js +70 -0
- package/node_modules/@openclaw/fs-safe/dist/pinned-open.d.ts +7 -1
- package/node_modules/@openclaw/fs-safe/dist/pinned-open.js +35 -10
- package/node_modules/@openclaw/fs-safe/dist/pinned-operation.d.ts +1 -2
- package/node_modules/@openclaw/fs-safe/dist/pinned-operation.js +4 -17
- package/node_modules/@openclaw/fs-safe/dist/pinned-write-input.d.ts +3 -0
- package/node_modules/@openclaw/fs-safe/dist/pinned-write-input.js +35 -0
- package/node_modules/@openclaw/fs-safe/dist/pinned-write-mode.d.ts +4 -0
- package/node_modules/@openclaw/fs-safe/dist/pinned-write-mode.js +31 -0
- package/node_modules/@openclaw/fs-safe/dist/pinned-write-staged.d.ts +5 -0
- package/node_modules/@openclaw/fs-safe/dist/pinned-write-staged.js +185 -0
- package/node_modules/@openclaw/fs-safe/dist/pinned-write-types.d.ts +68 -0
- package/node_modules/@openclaw/fs-safe/dist/pinned-write.d.ts +6 -30
- package/node_modules/@openclaw/fs-safe/dist/pinned-write.js +202 -154
- package/node_modules/@openclaw/fs-safe/dist/positional-read.d.ts +8 -0
- package/node_modules/@openclaw/fs-safe/dist/positional-read.js +36 -0
- package/node_modules/@openclaw/fs-safe/dist/private-directory.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/private-directory.js +20 -4
- package/node_modules/@openclaw/fs-safe/dist/private-producer-handoff-sync.d.ts +3 -0
- package/node_modules/@openclaw/fs-safe/dist/private-producer-handoff-sync.js +72 -0
- package/node_modules/@openclaw/fs-safe/dist/private-producer-handoff.d.ts +53 -0
- package/node_modules/@openclaw/fs-safe/dist/private-producer-handoff.js +358 -0
- package/node_modules/@openclaw/fs-safe/dist/private-temp-workspace.d.ts +2 -40
- package/node_modules/@openclaw/fs-safe/dist/private-temp-workspace.js +145 -103
- package/node_modules/@openclaw/fs-safe/dist/publish-copy-stage.d.ts +13 -0
- package/node_modules/@openclaw/fs-safe/dist/publish-copy-stage.js +56 -0
- package/node_modules/@openclaw/fs-safe/dist/publish-file-failure.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/publish-file.d.ts +2 -4
- package/node_modules/@openclaw/fs-safe/dist/publish-file.js +110 -144
- package/node_modules/@openclaw/fs-safe/dist/read-open-flags.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/read-opened-file.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/realpath.d.ts +3 -0
- package/node_modules/@openclaw/fs-safe/dist/realpath.js +43 -0
- package/node_modules/@openclaw/fs-safe/dist/recursive-mkdir-path.d.ts +2 -0
- package/node_modules/@openclaw/fs-safe/dist/recursive-mkdir-path.js +8 -0
- package/node_modules/@openclaw/fs-safe/dist/regular-file.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/regular-file.js +127 -201
- package/node_modules/@openclaw/fs-safe/dist/replace-directory.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/replace-directory.js +269 -24
- package/node_modules/@openclaw/fs-safe/dist/replace-file-copy-fallback.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/replace-file-copy-fallback.js +130 -120
- package/node_modules/@openclaw/fs-safe/dist/replace-file-copy-source.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/replace-file-copy-source.js +36 -42
- package/node_modules/@openclaw/fs-safe/dist/replace-file-descriptor.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/replace-file-descriptor.js +16 -17
- package/node_modules/@openclaw/fs-safe/dist/replace-file-mode.d.ts +2 -0
- package/node_modules/@openclaw/fs-safe/dist/replace-file-mode.js +10 -0
- package/node_modules/@openclaw/fs-safe/dist/replace-file-rename-policy.d.ts +1 -3
- package/node_modules/@openclaw/fs-safe/dist/replace-file-temp-owner.d.ts +18 -22
- package/node_modules/@openclaw/fs-safe/dist/replace-file-temp-owner.js +123 -143
- package/node_modules/@openclaw/fs-safe/dist/replace-file.d.ts +4 -4
- package/node_modules/@openclaw/fs-safe/dist/replace-file.js +58 -51
- package/node_modules/@openclaw/fs-safe/dist/retained-directory-replacement.d.ts +25 -0
- package/node_modules/@openclaw/fs-safe/dist/retained-directory-replacement.js +193 -0
- package/node_modules/@openclaw/fs-safe/dist/root-boundary.d.ts +29 -0
- package/node_modules/@openclaw/fs-safe/dist/root-boundary.js +186 -0
- package/node_modules/@openclaw/fs-safe/dist/root-context.d.ts +15 -10
- package/node_modules/@openclaw/fs-safe/dist/root-context.js +133 -42
- package/node_modules/@openclaw/fs-safe/dist/root-create-input.d.ts +16 -0
- package/node_modules/@openclaw/fs-safe/dist/root-create-input.js +93 -0
- package/node_modules/@openclaw/fs-safe/dist/root-directory-creation.d.ts +12 -0
- package/node_modules/@openclaw/fs-safe/dist/root-directory-creation.js +225 -0
- package/node_modules/@openclaw/fs-safe/dist/root-directory-list.d.ts +38 -0
- package/node_modules/@openclaw/fs-safe/dist/root-directory-list.js +382 -0
- package/node_modules/@openclaw/fs-safe/dist/root-directory.d.ts +22 -0
- package/node_modules/@openclaw/fs-safe/dist/root-directory.js +141 -0
- package/node_modules/@openclaw/fs-safe/dist/root-entries.d.ts +10 -0
- package/node_modules/@openclaw/fs-safe/dist/root-entries.js +61 -0
- package/node_modules/@openclaw/fs-safe/dist/root-errors.d.ts +10 -6
- package/node_modules/@openclaw/fs-safe/dist/root-errors.js +32 -15
- package/node_modules/@openclaw/fs-safe/dist/root-file-final-admission.d.ts +20 -0
- package/node_modules/@openclaw/fs-safe/dist/root-file-final-admission.js +86 -0
- package/node_modules/@openclaw/fs-safe/dist/root-file.d.ts +2 -1
- package/node_modules/@openclaw/fs-safe/dist/root-file.js +113 -25
- package/node_modules/@openclaw/fs-safe/dist/root-impl.d.ts +17 -63
- package/node_modules/@openclaw/fs-safe/dist/root-impl.js +803 -590
- package/node_modules/@openclaw/fs-safe/dist/root-move-noreplace.d.ts +15 -0
- package/node_modules/@openclaw/fs-safe/dist/root-move-noreplace.js +205 -0
- package/node_modules/@openclaw/fs-safe/dist/root-move-preflight.d.ts +7 -0
- package/node_modules/@openclaw/fs-safe/dist/root-move-preflight.js +16 -0
- package/node_modules/@openclaw/fs-safe/dist/root-observed-path.d.ts +8 -0
- package/node_modules/@openclaw/fs-safe/dist/root-observed-path.js +93 -0
- package/node_modules/@openclaw/fs-safe/dist/root-options.d.ts +84 -0
- package/node_modules/@openclaw/fs-safe/dist/root-options.js +18 -0
- package/node_modules/@openclaw/fs-safe/dist/root-path-errors.d.ts +12 -0
- package/node_modules/@openclaw/fs-safe/dist/root-path-errors.js +22 -0
- package/node_modules/@openclaw/fs-safe/dist/root-path-existing.d.ts +10 -1
- package/node_modules/@openclaw/fs-safe/dist/root-path-existing.js +133 -41
- package/node_modules/@openclaw/fs-safe/dist/root-path-observation.d.ts +62 -0
- package/node_modules/@openclaw/fs-safe/dist/root-path-observation.js +180 -0
- package/node_modules/@openclaw/fs-safe/dist/root-path-stat.d.ts +4 -0
- package/node_modules/@openclaw/fs-safe/dist/root-path-stat.js +151 -0
- package/node_modules/@openclaw/fs-safe/dist/root-path.d.ts +14 -1
- package/node_modules/@openclaw/fs-safe/dist/root-path.js +292 -330
- package/node_modules/@openclaw/fs-safe/dist/root-paths-lexical.d.ts +8 -0
- package/node_modules/@openclaw/fs-safe/dist/root-paths-lexical.js +22 -0
- package/node_modules/@openclaw/fs-safe/dist/root-paths.d.ts +3 -30
- package/node_modules/@openclaw/fs-safe/dist/root-paths.js +89 -174
- package/node_modules/@openclaw/fs-safe/dist/root-public-types.d.ts +11 -0
- package/node_modules/@openclaw/fs-safe/dist/root-public-types.js +1 -0
- package/node_modules/@openclaw/fs-safe/dist/root-read-admission.d.ts +25 -0
- package/node_modules/@openclaw/fs-safe/dist/root-read-admission.js +86 -0
- package/node_modules/@openclaw/fs-safe/dist/root-remove-identity.d.ts +14 -0
- package/node_modules/@openclaw/fs-safe/dist/root-remove-identity.js +87 -0
- package/node_modules/@openclaw/fs-safe/dist/root-remove-receipt.d.ts +16 -0
- package/node_modules/@openclaw/fs-safe/dist/root-remove-receipt.js +37 -0
- package/node_modules/@openclaw/fs-safe/dist/root-remove.d.ts +6 -0
- package/node_modules/@openclaw/fs-safe/dist/root-remove.js +464 -0
- package/node_modules/@openclaw/fs-safe/dist/root-symlink-policy.d.ts +13 -0
- package/node_modules/@openclaw/fs-safe/dist/root-symlink-policy.js +34 -0
- package/node_modules/@openclaw/fs-safe/dist/root-walk.d.ts +6 -6
- package/node_modules/@openclaw/fs-safe/dist/root-walk.js +116 -51
- package/node_modules/@openclaw/fs-safe/dist/root-write-admission.d.ts +65 -0
- package/node_modules/@openclaw/fs-safe/dist/root-write-admission.js +304 -0
- package/node_modules/@openclaw/fs-safe/dist/root-write-compatibility.d.ts +11 -0
- package/node_modules/@openclaw/fs-safe/dist/root-write-compatibility.js +23 -0
- package/node_modules/@openclaw/fs-safe/dist/root-write-complete-parent.d.ts +41 -0
- package/node_modules/@openclaw/fs-safe/dist/root-write-complete-parent.js +180 -0
- package/node_modules/@openclaw/fs-safe/dist/root-write-lock-binding.d.ts +14 -0
- package/node_modules/@openclaw/fs-safe/dist/root-write-lock-binding.js +162 -0
- package/node_modules/@openclaw/fs-safe/dist/root-write-mode.d.ts +2 -1
- package/node_modules/@openclaw/fs-safe/dist/root-write-mode.js +22 -11
- package/node_modules/@openclaw/fs-safe/dist/root-write-publication.d.ts +23 -0
- package/node_modules/@openclaw/fs-safe/dist/root-write-publication.js +85 -0
- package/node_modules/@openclaw/fs-safe/dist/root-write-verification.d.ts +1 -2
- package/node_modules/@openclaw/fs-safe/dist/root-write-verification.js +35 -37
- package/node_modules/@openclaw/fs-safe/dist/root.d.ts +2 -4
- package/node_modules/@openclaw/fs-safe/dist/safe-path-segment.d.ts +1 -2
- package/node_modules/@openclaw/fs-safe/dist/safe-path-segment.js +5 -6
- package/node_modules/@openclaw/fs-safe/dist/secret-file.d.ts +1 -1
- package/node_modules/@openclaw/fs-safe/dist/secret-file.js +60 -52
- package/node_modules/@openclaw/fs-safe/dist/secret-read-async.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/secret-read-async.js +13 -28
- package/node_modules/@openclaw/fs-safe/dist/secret-read-policy.d.ts +6 -3
- package/node_modules/@openclaw/fs-safe/dist/secret-read-policy.js +31 -3
- package/node_modules/@openclaw/fs-safe/dist/secret.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/secure-file-windows.d.ts +10 -0
- package/node_modules/@openclaw/fs-safe/dist/secure-file-windows.js +88 -0
- package/node_modules/@openclaw/fs-safe/dist/secure-file.d.ts +1 -2
- package/node_modules/@openclaw/fs-safe/dist/secure-file.js +143 -28
- package/node_modules/@openclaw/fs-safe/dist/secure-temp-dir.d.ts +6 -4
- package/node_modules/@openclaw/fs-safe/dist/secure-temp-dir.js +122 -101
- package/node_modules/@openclaw/fs-safe/dist/secure-temp-repair.d.ts +34 -0
- package/node_modules/@openclaw/fs-safe/dist/secure-temp-repair.js +110 -0
- package/node_modules/@openclaw/fs-safe/dist/sibling-staged-file.d.ts +4 -2
- package/node_modules/@openclaw/fs-safe/dist/sibling-staged-file.js +215 -57
- package/node_modules/@openclaw/fs-safe/dist/sibling-temp.d.ts +2 -1
- package/node_modules/@openclaw/fs-safe/dist/sibling-temp.js +64 -27
- package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-acquire.d.ts +2 -29
- package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-acquire.js +298 -192
- package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-admission-context.d.ts +18 -0
- package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-admission-context.js +60 -0
- package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-admission-parser.d.ts +42 -0
- package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-admission-parser.js +113 -0
- package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-admission.d.ts +31 -0
- package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-admission.js +1 -0
- package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-handle.d.ts +3 -1
- package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-handle.js +6 -0
- package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-policy.d.ts +6 -1
- package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-policy.js +45 -3
- package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-reclaim.d.ts +10 -6
- package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-reclaim.js +106 -36
- package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-registration.d.ts +13 -0
- package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-registration.js +47 -0
- package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-root.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-root.js +5 -2
- package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-stale-admission.d.ts +38 -0
- package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-stale-admission.js +228 -0
- package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-target.d.ts +7 -0
- package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-target.js +55 -0
- package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-types.d.ts +22 -17
- package/node_modules/@openclaw/fs-safe/dist/sidecar-lock.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/sidecar-lock.js +47 -32
- package/node_modules/@openclaw/fs-safe/dist/staged-directory.d.ts +18 -7
- package/node_modules/@openclaw/fs-safe/dist/staged-directory.js +98 -10
- package/node_modules/@openclaw/fs-safe/dist/staged-file-settlement.d.ts +16 -0
- package/node_modules/@openclaw/fs-safe/dist/staged-file-settlement.js +57 -0
- package/node_modules/@openclaw/fs-safe/dist/staged-file-types.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/stat-observation.d.ts +10 -0
- package/node_modules/@openclaw/fs-safe/dist/stat-observation.js +64 -0
- package/node_modules/@openclaw/fs-safe/dist/store.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/strict-file-identity.d.ts +1 -2
- package/node_modules/@openclaw/fs-safe/dist/strict-file-identity.js +41 -4
- package/node_modules/@openclaw/fs-safe/dist/string-coerce.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/suppressed-error.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/symlink-parents.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/symlink-parents.js +9 -29
- package/node_modules/@openclaw/fs-safe/dist/temp-cleanup.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/temp-cleanup.js +3 -2
- package/node_modules/@openclaw/fs-safe/dist/temp-target.d.ts +16 -13
- package/node_modules/@openclaw/fs-safe/dist/temp-target.js +120 -19
- package/node_modules/@openclaw/fs-safe/dist/temp-workspace-admission.d.ts +14 -0
- package/node_modules/@openclaw/fs-safe/dist/temp-workspace-admission.js +392 -0
- package/node_modules/@openclaw/fs-safe/dist/temp-workspace-child-admission.d.ts +23 -0
- package/node_modules/@openclaw/fs-safe/dist/temp-workspace-child-admission.js +151 -0
- package/node_modules/@openclaw/fs-safe/dist/temp-workspace-descriptor.d.ts +42 -0
- package/node_modules/@openclaw/fs-safe/dist/temp-workspace-descriptor.js +342 -0
- package/node_modules/@openclaw/fs-safe/dist/temp-workspace-owner.d.ts +8 -7
- package/node_modules/@openclaw/fs-safe/dist/temp-workspace-owner.js +156 -73
- package/node_modules/@openclaw/fs-safe/dist/temp-workspace-types.d.ts +39 -0
- package/node_modules/@openclaw/fs-safe/dist/temp-workspace-types.js +1 -0
- package/node_modules/@openclaw/fs-safe/dist/temp.d.ts +1 -2
- package/node_modules/@openclaw/fs-safe/dist/temp.js +1 -1
- package/node_modules/@openclaw/fs-safe/dist/test-hooks.d.ts +7 -1
- package/node_modules/@openclaw/fs-safe/dist/text-atomic.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/text-atomic.js +3 -1
- package/node_modules/@openclaw/fs-safe/dist/timing.d.ts +1 -1
- package/node_modules/@openclaw/fs-safe/dist/timing.js +25 -6
- package/node_modules/@openclaw/fs-safe/dist/trash.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/trash.js +61 -13
- package/node_modules/@openclaw/fs-safe/dist/types.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/unicode-path.d.ts +2 -0
- package/node_modules/@openclaw/fs-safe/dist/unicode-path.js +16 -0
- package/node_modules/@openclaw/fs-safe/dist/walk.d.ts +5 -2
- package/node_modules/@openclaw/fs-safe/dist/walk.js +47 -47
- package/node_modules/@openclaw/fs-safe/dist/windows-command.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/windows-owner.d.ts +9 -13
- package/node_modules/@openclaw/fs-safe/dist/windows-owner.js +36 -61
- package/node_modules/@openclaw/fs-safe/dist/windows-path-alias.d.ts +39 -0
- package/node_modules/@openclaw/fs-safe/dist/windows-path-alias.js +122 -0
- package/node_modules/@openclaw/fs-safe/dist/windows-path-syntax.d.ts +5 -0
- package/node_modules/@openclaw/fs-safe/dist/windows-path-syntax.js +21 -0
- package/node_modules/@openclaw/fs-safe/dist/windows-security-bridge.cs +336 -0
- package/node_modules/@openclaw/fs-safe/dist/windows-security-bridge.ps1 +15 -0
- package/node_modules/@openclaw/fs-safe/dist/windows-security-command.d.ts +25 -0
- package/node_modules/@openclaw/fs-safe/dist/windows-security-command.js +363 -0
- package/node_modules/@openclaw/fs-safe/dist/windows-security-facts.d.ts +5 -0
- package/node_modules/@openclaw/fs-safe/dist/windows-security-facts.js +108 -0
- package/node_modules/@openclaw/fs-safe/dist/write-file-handle.d.ts +13 -0
- package/node_modules/@openclaw/fs-safe/dist/write-file-handle.js +49 -0
- package/node_modules/@openclaw/fs-safe/dist/write-open-flags.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/write-open-flags.js +1 -9
- package/node_modules/@openclaw/fs-safe/dist/write-queue.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/write-queue.js +1 -4
- package/node_modules/@openclaw/fs-safe/docs/advanced.md +123 -7
- package/node_modules/@openclaw/fs-safe/docs/archive.md +227 -42
- package/node_modules/@openclaw/fs-safe/docs/atomic.md +199 -12
- package/node_modules/@openclaw/fs-safe/docs/config.md +7 -2
- package/node_modules/@openclaw/fs-safe/docs/contributing.md +88 -6
- package/node_modules/@openclaw/fs-safe/docs/copy.md +197 -0
- package/node_modules/@openclaw/fs-safe/docs/creation.md +132 -0
- package/node_modules/@openclaw/fs-safe/docs/directory-identity.md +85 -0
- package/node_modules/@openclaw/fs-safe/docs/durability.md +130 -5
- package/node_modules/@openclaw/fs-safe/docs/entries.md +109 -0
- package/node_modules/@openclaw/fs-safe/docs/errors.md +18 -10
- package/node_modules/@openclaw/fs-safe/docs/file-contents.md +68 -0
- package/node_modules/@openclaw/fs-safe/docs/file-store.md +112 -6
- package/node_modules/@openclaw/fs-safe/docs/filename.md +21 -7
- package/node_modules/@openclaw/fs-safe/docs/guest.md +146 -0
- package/node_modules/@openclaw/fs-safe/docs/in-place-write.md +81 -0
- package/node_modules/@openclaw/fs-safe/docs/index.md +2 -0
- package/node_modules/@openclaw/fs-safe/docs/install-path.md +61 -15
- package/node_modules/@openclaw/fs-safe/docs/install.md +69 -10
- package/node_modules/@openclaw/fs-safe/docs/json-store.md +20 -1
- package/node_modules/@openclaw/fs-safe/docs/json.md +16 -4
- package/node_modules/@openclaw/fs-safe/docs/local-roots.md +10 -1
- package/node_modules/@openclaw/fs-safe/docs/migrating-to-0.5.md +15 -6
- package/node_modules/@openclaw/fs-safe/docs/migrating-to-0.6.md +9 -4
- package/node_modules/@openclaw/fs-safe/docs/mutation-policy-proof.md +69 -0
- package/node_modules/@openclaw/fs-safe/docs/native-helper.md +75 -16
- package/node_modules/@openclaw/fs-safe/docs/native.md +108 -15
- package/node_modules/@openclaw/fs-safe/docs/output.md +61 -7
- package/node_modules/@openclaw/fs-safe/docs/path-case.md +64 -0
- package/node_modules/@openclaw/fs-safe/docs/path-prefix.md +74 -0
- package/node_modules/@openclaw/fs-safe/docs/path-scope.md +1 -1
- package/node_modules/@openclaw/fs-safe/docs/path-suffix-aliases.md +204 -0
- package/node_modules/@openclaw/fs-safe/docs/path.md +16 -5
- package/node_modules/@openclaw/fs-safe/docs/permissions.md +106 -20
- package/node_modules/@openclaw/fs-safe/docs/positional-read.md +63 -0
- package/node_modules/@openclaw/fs-safe/docs/private-file-store.md +14 -0
- package/node_modules/@openclaw/fs-safe/docs/public-api.md +51 -2
- package/node_modules/@openclaw/fs-safe/docs/quickstart.md +1 -1
- package/node_modules/@openclaw/fs-safe/docs/reading.md +16 -3
- package/node_modules/@openclaw/fs-safe/docs/regular-file.md +3 -0
- package/node_modules/@openclaw/fs-safe/docs/root.md +294 -15
- package/node_modules/@openclaw/fs-safe/docs/secret-file.md +28 -2
- package/node_modules/@openclaw/fs-safe/docs/secure-file.md +28 -16
- package/node_modules/@openclaw/fs-safe/docs/security-model.md +90 -9
- package/node_modules/@openclaw/fs-safe/docs/sidecar-lock.md +163 -7
- package/node_modules/@openclaw/fs-safe/docs/staged-file.md +16 -6
- package/node_modules/@openclaw/fs-safe/docs/store.md +35 -2
- package/node_modules/@openclaw/fs-safe/docs/temp.md +313 -29
- package/node_modules/@openclaw/fs-safe/docs/test-hooks.md +14 -0
- package/node_modules/@openclaw/fs-safe/docs/timing.md +2 -0
- package/node_modules/@openclaw/fs-safe/docs/types.md +35 -12
- package/node_modules/@openclaw/fs-safe/docs/walk.md +128 -6
- package/node_modules/@openclaw/fs-safe/docs/writing.md +314 -20
- package/node_modules/@openclaw/fs-safe/package.json +33 -20
- package/node_modules/@openclaw/fs-safe-darwin-arm64/fs-safe-native.node +0 -0
- package/node_modules/@openclaw/fs-safe-darwin-arm64/package.json +1 -1
- package/node_modules/@openclaw/fs-safe-darwin-x64/fs-safe-native.node +0 -0
- package/node_modules/@openclaw/fs-safe-darwin-x64/package.json +1 -1
- package/node_modules/@openclaw/fs-safe-linux-arm64-gnu/fs-safe-native.node +0 -0
- package/node_modules/@openclaw/fs-safe-linux-arm64-gnu/package.json +1 -1
- package/node_modules/@openclaw/fs-safe-linux-arm64-musl/fs-safe-native.node +0 -0
- package/node_modules/@openclaw/fs-safe-linux-arm64-musl/package.json +1 -1
- package/node_modules/@openclaw/fs-safe-linux-x64-gnu/fs-safe-native.node +0 -0
- package/node_modules/@openclaw/fs-safe-linux-x64-gnu/package.json +1 -1
- package/node_modules/@openclaw/fs-safe-linux-x64-musl/fs-safe-native.node +0 -0
- package/node_modules/@openclaw/fs-safe-linux-x64-musl/package.json +1 -1
- package/node_modules/@openclaw/fs-safe-win32-x64-msvc/fs-safe-native.node +0 -0
- package/node_modules/@openclaw/fs-safe-win32-x64-msvc/package.json +1 -1
- package/node_modules/jszip/.github/FUNDING.yml +1 -0
- package/node_modules/jszip/.github/actions/setup/action.yml +23 -0
- package/node_modules/jszip/.github/workflows/benchmark.yml +38 -0
- package/node_modules/jszip/.github/workflows/main.yml +55 -0
- package/node_modules/jszip/CHANGES.md +6 -0
- package/node_modules/jszip/dist/jszip.js +28 -19
- package/node_modules/jszip/dist/jszip.min.js +2 -2
- package/node_modules/jszip/index.d.ts +14 -0
- package/node_modules/jszip/lib/index.js +1 -1
- package/node_modules/jszip/lib/utils.js +26 -17
- package/node_modules/jszip/package.json +2 -2
- package/node_modules/p-limit/index.d.ts +1 -1
- package/node_modules/p-limit/index.js +6 -1
- package/node_modules/p-limit/package.json +1 -1
- package/node_modules/p-limit/readme.md +8 -0
- package/node_modules/zod/README.md +29 -2
- package/node_modules/zod/compile.cjs +96 -0
- package/node_modules/zod/compile.d.cts +1 -0
- package/node_modules/zod/compile.d.ts +1 -0
- package/node_modules/zod/compile.js +52 -0
- package/node_modules/zod/index.cjs +21 -2
- package/node_modules/zod/index.d.cts +1 -2
- package/node_modules/zod/index.d.ts +1 -2
- package/node_modules/zod/index.js +5 -2
- package/node_modules/zod/locales/index.cjs +19 -0
- package/node_modules/zod/mini/index.cjs +19 -0
- package/node_modules/zod/package.json +20 -8
- package/node_modules/zod/src/compile.ts +56 -0
- package/node_modules/zod/src/index.ts +5 -2
- package/node_modules/zod/src/v3/ZodError.ts +22 -12
- package/node_modules/zod/src/v3/helpers/errorUtil.ts +1 -1
- package/node_modules/zod/src/v3/tests/error.test.ts +35 -0
- package/node_modules/zod/src/v3/tests/intersection.test.ts +18 -0
- package/node_modules/zod/src/v3/tests/language-server.test.ts +1 -2
- package/node_modules/zod/src/v3/tests/object.test.ts +3 -6
- package/node_modules/zod/src/v3/tests/readonly.test.ts +0 -80
- package/node_modules/zod/src/v3/tests/string.test.ts +6 -0
- package/node_modules/zod/src/v3/types.ts +5 -5
- package/node_modules/zod/src/v4/classic/checks.ts +1 -0
- package/node_modules/zod/src/v4/classic/compat.ts +26 -18
- package/node_modules/zod/src/v4/classic/deep-partial.ts +76 -0
- package/node_modules/zod/src/v4/classic/errors.ts +59 -44
- package/node_modules/zod/src/v4/classic/external.ts +14 -9
- package/node_modules/zod/src/v4/classic/from-json-schema.ts +363 -78
- package/node_modules/zod/src/v4/classic/in-out.ts +45 -0
- package/node_modules/zod/src/v4/classic/index.ts +2 -2
- package/node_modules/zod/src/v4/classic/iso.ts +2 -72
- package/node_modules/zod/src/v4/classic/parse.ts +10 -4
- package/node_modules/zod/src/v4/classic/schemas.ts +640 -375
- package/node_modules/zod/src/v4/classic/tests/apply.test.ts +27 -0
- package/node_modules/zod/src/v4/classic/tests/array.test.ts +2 -2
- package/node_modules/zod/src/v4/classic/tests/assignability.test.ts +186 -0
- package/node_modules/zod/src/v4/classic/tests/bigint.test.ts +36 -1
- package/node_modules/zod/src/v4/classic/tests/catch.test.ts +278 -0
- package/node_modules/zod/src/v4/classic/tests/codec-examples.test.ts +1 -2
- package/node_modules/zod/src/v4/classic/tests/codec.test.ts +2 -1
- package/node_modules/zod/src/v4/classic/tests/continuability.test.ts +3 -3
- package/node_modules/zod/src/v4/classic/tests/credit-card.test.ts +76 -0
- package/node_modules/zod/src/v4/classic/tests/cyclic-data.test.ts +985 -0
- package/node_modules/zod/src/v4/classic/tests/date.test.ts +30 -0
- package/node_modules/zod/src/v4/classic/tests/datetime.test.ts +32 -18
- package/node_modules/zod/src/v4/classic/tests/deep-partial.test.ts +380 -0
- package/node_modules/zod/src/v4/classic/tests/default-locale.test.ts +32 -0
- package/node_modules/zod/src/v4/classic/tests/default.test.ts +46 -0
- package/node_modules/zod/src/v4/classic/tests/detached-methods.test.ts +31 -7
- package/node_modules/zod/src/v4/classic/tests/discriminated-unions.test.ts +261 -13
- package/node_modules/zod/src/v4/classic/tests/enum.test.ts +20 -0
- package/node_modules/zod/src/v4/classic/tests/error-utils.test.ts +112 -2
- package/node_modules/zod/src/v4/classic/tests/error.test.ts +403 -6
- package/node_modules/zod/src/v4/classic/tests/from-json-schema.test.ts +582 -10
- package/node_modules/zod/src/v4/classic/tests/function.test.ts +31 -0
- package/node_modules/zod/src/v4/classic/tests/global-config.test.ts +2 -9
- package/node_modules/zod/src/v4/classic/tests/hash.test.ts +1 -2
- package/node_modules/zod/src/v4/classic/tests/iban.test.ts +81 -0
- package/node_modules/zod/src/v4/classic/tests/in-out.test.ts +159 -0
- package/node_modules/zod/src/v4/classic/tests/index.test.ts +21 -2
- package/node_modules/zod/src/v4/classic/tests/instance-footprint.test.ts +319 -0
- package/node_modules/zod/src/v4/classic/tests/instanceof.test.ts +67 -0
- package/node_modules/zod/src/v4/classic/tests/intersection.test.ts +136 -0
- package/node_modules/zod/src/v4/classic/tests/issue-schema.test.ts +215 -0
- package/node_modules/zod/src/v4/classic/tests/jitless-allows-eval.test.ts +3 -10
- package/node_modules/zod/src/v4/classic/tests/lazy.test.ts +36 -1
- package/node_modules/zod/src/v4/classic/tests/literal.test.ts +12 -1
- package/node_modules/zod/src/v4/classic/tests/map.test.ts +12 -0
- package/node_modules/zod/src/v4/classic/tests/number.test.ts +85 -9
- package/node_modules/zod/src/v4/classic/tests/object.test.ts +301 -12
- package/node_modules/zod/src/v4/classic/tests/optin-ladder.test.ts +235 -0
- package/node_modules/zod/src/v4/classic/tests/optional.test.ts +49 -16
- package/node_modules/zod/src/v4/classic/tests/partial.test.ts +51 -4
- package/node_modules/zod/src/v4/classic/tests/prefault.test.ts +70 -0
- package/node_modules/zod/src/v4/classic/tests/preprocess-types.test.ts +20 -2
- package/node_modules/zod/src/v4/classic/tests/properties.test.ts +141 -0
- package/node_modules/zod/src/v4/classic/tests/readonly.test.ts +0 -68
- package/node_modules/zod/src/v4/classic/tests/record.test.ts +186 -18
- package/node_modules/zod/src/v4/classic/tests/recursive-types.test.ts +79 -3
- package/node_modules/zod/src/v4/classic/tests/redos.test.ts +68 -0
- package/node_modules/zod/src/v4/classic/tests/refine.test.ts +60 -0
- package/node_modules/zod/src/v4/classic/tests/set.test.ts +9 -0
- package/node_modules/zod/src/v4/classic/tests/standard-schema.test.ts +19 -0
- package/node_modules/zod/src/v4/classic/tests/string.test.ts +222 -6
- package/node_modules/zod/src/v4/classic/tests/stringbool.test.ts +18 -0
- package/node_modules/zod/src/v4/classic/tests/template-literal.test.ts +44 -3
- package/node_modules/zod/src/v4/classic/tests/to-json-schema.test.ts +1812 -204
- package/node_modules/zod/src/v4/classic/tests/tuple.test.ts +45 -30
- package/node_modules/zod/src/v4/classic/tests/union.test.ts +39 -2
- package/node_modules/zod/src/v4/classic/tests/validate.test.ts +645 -0
- package/node_modules/zod/src/v4/classic/tests/validations.test.ts +2 -2
- package/node_modules/zod/src/v4/core/api.ts +87 -35
- package/node_modules/zod/src/v4/core/checks.ts +119 -146
- package/node_modules/zod/src/v4/core/compile.ts +2313 -0
- package/node_modules/zod/src/v4/core/core.ts +99 -22
- package/node_modules/zod/src/v4/core/doc.ts +17 -9
- package/node_modules/zod/src/v4/core/errors.ts +113 -25
- package/node_modules/zod/src/v4/core/index.ts +3 -0
- package/node_modules/zod/src/v4/core/json-schema-generator.ts +8 -3
- package/node_modules/zod/src/v4/core/json-schema-processors.ts +424 -156
- package/node_modules/zod/src/v4/core/json-schema.ts +2 -1
- package/node_modules/zod/src/v4/core/memoizer.ts +331 -0
- package/node_modules/zod/src/v4/core/parse.ts +164 -50
- package/node_modules/zod/src/v4/core/regexes.ts +42 -15
- package/node_modules/zod/src/v4/core/registries.ts +2 -2
- package/node_modules/zod/src/v4/core/schemas.ts +1000 -538
- package/node_modules/zod/src/v4/core/tests/cached.test.ts +54 -0
- package/node_modules/zod/src/v4/core/tests/compile-differential.test.ts +1004 -0
- package/node_modules/zod/src/v4/core/tests/compile-generative.test.ts +445 -0
- package/node_modules/zod/src/v4/core/tests/compile-global.test.ts +89 -0
- package/node_modules/zod/src/v4/core/tests/compile-off-by-default.test.ts +26 -0
- package/node_modules/zod/src/v4/core/tests/compile-stats.test.ts +34 -0
- package/node_modules/zod/src/v4/core/tests/compile.test.ts +2036 -0
- package/node_modules/zod/src/v4/core/tests/email-regex.test.ts +140 -0
- package/node_modules/zod/src/v4/core/tests/locales/el.test.ts +1 -2
- package/node_modules/zod/src/v4/core/tests/locales/es.test.ts +1 -2
- package/node_modules/zod/src/v4/core/tests/locales/fr.test.ts +3 -3
- package/node_modules/zod/src/v4/core/tests/locales/parity.test.ts +42 -0
- package/node_modules/zod/src/v4/core/tests/locales/tg.test.ts +85 -0
- package/node_modules/zod/src/v4/core/tests/locales/tk.test.ts +69 -0
- package/node_modules/zod/src/v4/core/tests/polyfill-collision.test.ts +46 -0
- package/node_modules/zod/src/v4/core/tests/treeshake.test.ts +51 -0
- package/node_modules/zod/src/v4/core/tests/url-no-canparse.test.ts +133 -0
- package/node_modules/zod/src/v4/core/to-json-schema.ts +283 -48
- package/node_modules/zod/src/v4/core/util.ts +454 -157
- package/node_modules/zod/src/v4/core/versions.ts +2 -2
- package/node_modules/zod/src/v4/core/visit.ts +193 -0
- package/node_modules/zod/src/v4/index.ts +3 -3
- package/node_modules/zod/src/v4/locales/ar.ts +5 -0
- package/node_modules/zod/src/v4/locales/az.ts +5 -0
- package/node_modules/zod/src/v4/locales/be.ts +12 -0
- package/node_modules/zod/src/v4/locales/bg.ts +5 -0
- package/node_modules/zod/src/v4/locales/bn.ts +123 -0
- package/node_modules/zod/src/v4/locales/ca.ts +5 -0
- package/node_modules/zod/src/v4/locales/ckb.ts +140 -0
- package/node_modules/zod/src/v4/locales/cs.ts +5 -0
- package/node_modules/zod/src/v4/locales/da.ts +7 -2
- package/node_modules/zod/src/v4/locales/de.ts +5 -0
- package/node_modules/zod/src/v4/locales/el.ts +3 -0
- package/node_modules/zod/src/v4/locales/en.ts +17 -4
- package/node_modules/zod/src/v4/locales/eo.ts +5 -0
- package/node_modules/zod/src/v4/locales/es.ts +4 -0
- package/node_modules/zod/src/v4/locales/fa.ts +5 -0
- package/node_modules/zod/src/v4/locales/fi.ts +5 -0
- package/node_modules/zod/src/v4/locales/fr-CA.ts +5 -0
- package/node_modules/zod/src/v4/locales/fr.ts +21 -14
- package/node_modules/zod/src/v4/locales/gu.ts +123 -0
- package/node_modules/zod/src/v4/locales/he.ts +8 -1
- package/node_modules/zod/src/v4/locales/hi.ts +126 -0
- package/node_modules/zod/src/v4/locales/hr.ts +4 -0
- package/node_modules/zod/src/v4/locales/hu.ts +5 -0
- package/node_modules/zod/src/v4/locales/hy.ts +11 -0
- package/node_modules/zod/src/v4/locales/id.ts +5 -0
- package/node_modules/zod/src/v4/locales/index.ts +11 -0
- package/node_modules/zod/src/v4/locales/is.ts +5 -0
- package/node_modules/zod/src/v4/locales/it.ts +5 -0
- package/node_modules/zod/src/v4/locales/ja.ts +5 -0
- package/node_modules/zod/src/v4/locales/ka.ts +5 -0
- package/node_modules/zod/src/v4/locales/km.ts +5 -0
- package/node_modules/zod/src/v4/locales/kn.ts +126 -0
- package/node_modules/zod/src/v4/locales/ko.ts +5 -0
- package/node_modules/zod/src/v4/locales/lt.ts +4 -0
- package/node_modules/zod/src/v4/locales/mk.ts +5 -0
- package/node_modules/zod/src/v4/locales/ms.ts +5 -0
- package/node_modules/zod/src/v4/locales/ne.ts +128 -0
- package/node_modules/zod/src/v4/locales/nl.ts +5 -0
- package/node_modules/zod/src/v4/locales/nn.ts +121 -0
- package/node_modules/zod/src/v4/locales/no.ts +7 -2
- package/node_modules/zod/src/v4/locales/ota.ts +5 -0
- package/node_modules/zod/src/v4/locales/pl.ts +5 -0
- package/node_modules/zod/src/v4/locales/ps.ts +5 -0
- package/node_modules/zod/src/v4/locales/pt-BR.ts +161 -0
- package/node_modules/zod/src/v4/locales/pt.ts +101 -58
- package/node_modules/zod/src/v4/locales/ro.ts +3 -0
- package/node_modules/zod/src/v4/locales/ru.ts +12 -0
- package/node_modules/zod/src/v4/locales/sk.ts +123 -0
- package/node_modules/zod/src/v4/locales/sl.ts +5 -0
- package/node_modules/zod/src/v4/locales/sv.ts +7 -2
- package/node_modules/zod/src/v4/locales/ta.ts +5 -0
- package/node_modules/zod/src/v4/locales/tg.ts +135 -0
- package/node_modules/zod/src/v4/locales/th.ts +5 -0
- package/node_modules/zod/src/v4/locales/tk.ts +113 -0
- package/node_modules/zod/src/v4/locales/tr.ts +5 -0
- package/node_modules/zod/src/v4/locales/uk.ts +5 -0
- package/node_modules/zod/src/v4/locales/ur.ts +5 -0
- package/node_modules/zod/src/v4/locales/uz.ts +3 -0
- package/node_modules/zod/src/v4/locales/vi.ts +5 -0
- package/node_modules/zod/src/v4/locales/yo.ts +5 -0
- package/node_modules/zod/src/v4/locales/zh-CN.ts +5 -0
- package/node_modules/zod/src/v4/locales/zh-TW.ts +5 -0
- package/node_modules/zod/src/v4/mini/checks.ts +1 -0
- package/node_modules/zod/src/v4/mini/deep-partial.ts +73 -0
- package/node_modules/zod/src/v4/mini/external.ts +12 -1
- package/node_modules/zod/src/v4/mini/in-out.ts +45 -0
- package/node_modules/zod/src/v4/mini/parse.ts +2 -0
- package/node_modules/zod/src/v4/mini/schemas.ts +167 -63
- package/node_modules/zod/src/v4/mini/tests/apply.test.ts +33 -0
- package/node_modules/zod/src/v4/mini/tests/assignability.test.ts +62 -1
- package/node_modules/zod/src/v4/mini/tests/checks.test.ts +14 -0
- package/node_modules/zod/src/v4/mini/tests/codec.test.ts +35 -1
- package/node_modules/zod/src/v4/mini/tests/computed.test.ts +11 -17
- package/node_modules/zod/src/v4/mini/tests/cyclic-data.test.ts +84 -0
- package/node_modules/zod/src/v4/mini/tests/deep-partial.test.ts +54 -0
- package/node_modules/zod/src/v4/mini/tests/error.test.ts +23 -4
- package/node_modules/zod/src/v4/mini/tests/functions.test.ts +9 -0
- package/node_modules/zod/src/v4/mini/tests/index.test.ts +158 -5
- package/node_modules/zod/src/v4/mini/tests/number.test.ts +14 -0
- package/node_modules/zod/src/v4/mini/tests/object.test.ts +65 -0
- package/node_modules/zod/src/v4/mini/tests/recursive-types.test.ts +16 -0
- package/node_modules/zod/src/v4/mini/tests/string.test.ts +44 -0
- package/node_modules/zod/v3/ZodError.cjs +41 -12
- package/node_modules/zod/v3/ZodError.d.cts +1 -1
- package/node_modules/zod/v3/ZodError.d.ts +1 -1
- package/node_modules/zod/v3/ZodError.js +22 -12
- package/node_modules/zod/v3/errors.cjs +19 -0
- package/node_modules/zod/v3/external.cjs +19 -0
- package/node_modules/zod/v3/helpers/enumUtil.cjs +19 -0
- package/node_modules/zod/v3/helpers/errorUtil.cjs +20 -1
- package/node_modules/zod/v3/helpers/errorUtil.js +1 -1
- package/node_modules/zod/v3/helpers/parseUtil.cjs +19 -0
- package/node_modules/zod/v3/helpers/partialUtil.cjs +19 -0
- package/node_modules/zod/v3/helpers/typeAliases.cjs +19 -0
- package/node_modules/zod/v3/helpers/util.cjs +19 -0
- package/node_modules/zod/v3/index.cjs +19 -0
- package/node_modules/zod/v3/standard-schema.cjs +19 -0
- package/node_modules/zod/v3/types.cjs +26 -5
- package/node_modules/zod/v3/types.js +7 -5
- package/node_modules/zod/v4/classic/checks.cjs +21 -1
- package/node_modules/zod/v4/classic/checks.d.cts +1 -1
- package/node_modules/zod/v4/classic/checks.d.ts +1 -1
- package/node_modules/zod/v4/classic/checks.js +1 -1
- package/node_modules/zod/v4/classic/coerce.cjs +19 -0
- package/node_modules/zod/v4/classic/compat.cjs +19 -0
- package/node_modules/zod/v4/classic/compat.d.cts +9 -11
- package/node_modules/zod/v4/classic/compat.d.ts +9 -11
- package/node_modules/zod/v4/classic/deep-partial.cjs +58 -0
- package/node_modules/zod/v4/classic/deep-partial.d.cts +14 -0
- package/node_modules/zod/v4/classic/deep-partial.d.ts +14 -0
- package/node_modules/zod/v4/classic/deep-partial.js +13 -0
- package/node_modules/zod/v4/classic/errors.cjs +62 -34
- package/node_modules/zod/v4/classic/errors.d.cts +3 -4
- package/node_modules/zod/v4/classic/errors.d.ts +3 -4
- package/node_modules/zod/v4/classic/errors.js +43 -34
- package/node_modules/zod/v4/classic/external.cjs +51 -27
- package/node_modules/zod/v4/classic/external.d.cts +5 -2
- package/node_modules/zod/v4/classic/external.d.ts +5 -2
- package/node_modules/zod/v4/classic/external.js +5 -8
- package/node_modules/zod/v4/classic/from-json-schema.cjs +376 -75
- package/node_modules/zod/v4/classic/from-json-schema.js +357 -75
- package/node_modules/zod/v4/classic/in-out.cjs +82 -0
- package/node_modules/zod/v4/classic/in-out.d.cts +8 -0
- package/node_modules/zod/v4/classic/in-out.d.ts +8 -0
- package/node_modules/zod/v4/classic/in-out.js +36 -0
- package/node_modules/zod/v4/classic/index.cjs +21 -2
- package/node_modules/zod/v4/classic/index.d.cts +1 -2
- package/node_modules/zod/v4/classic/index.d.ts +1 -2
- package/node_modules/zod/v4/classic/index.js +2 -2
- package/node_modules/zod/v4/classic/iso.cjs +30 -22
- package/node_modules/zod/v4/classic/iso.d.cts +2 -17
- package/node_modules/zod/v4/classic/iso.d.ts +2 -17
- package/node_modules/zod/v4/classic/iso.js +2 -17
- package/node_modules/zod/v4/classic/parse.cjs +23 -1
- package/node_modules/zod/v4/classic/parse.d.cts +17 -4
- package/node_modules/zod/v4/classic/parse.d.ts +17 -4
- package/node_modules/zod/v4/classic/parse.js +1 -0
- package/node_modules/zod/v4/classic/schemas.cjs +591 -426
- package/node_modules/zod/v4/classic/schemas.d.cts +68 -19
- package/node_modules/zod/v4/classic/schemas.d.ts +68 -19
- package/node_modules/zod/v4/classic/schemas.js +564 -424
- package/node_modules/zod/v4/core/api.cjs +66 -24
- package/node_modules/zod/v4/core/api.d.cts +22 -12
- package/node_modules/zod/v4/core/api.d.ts +22 -12
- package/node_modules/zod/v4/core/api.js +44 -24
- package/node_modules/zod/v4/core/checks.cjs +88 -128
- package/node_modules/zod/v4/core/checks.d.cts +29 -13
- package/node_modules/zod/v4/core/checks.d.ts +29 -13
- package/node_modules/zod/v4/core/checks.js +68 -127
- package/node_modules/zod/v4/core/compile.cjs +1908 -0
- package/node_modules/zod/v4/core/compile.d.cts +65 -0
- package/node_modules/zod/v4/core/compile.d.ts +65 -0
- package/node_modules/zod/v4/core/compile.js +1858 -0
- package/node_modules/zod/v4/core/core.cjs +101 -19
- package/node_modules/zod/v4/core/core.d.cts +16 -4
- package/node_modules/zod/v4/core/core.d.ts +16 -4
- package/node_modules/zod/v4/core/core.js +83 -20
- package/node_modules/zod/v4/core/doc.cjs +31 -9
- package/node_modules/zod/v4/core/doc.d.cts +3 -1
- package/node_modules/zod/v4/core/doc.d.ts +3 -1
- package/node_modules/zod/v4/core/doc.js +12 -9
- package/node_modules/zod/v4/core/errors.cjs +126 -25
- package/node_modules/zod/v4/core/errors.d.cts +4 -0
- package/node_modules/zod/v4/core/errors.d.ts +4 -0
- package/node_modules/zod/v4/core/errors.js +107 -25
- package/node_modules/zod/v4/core/index.cjs +24 -1
- package/node_modules/zod/v4/core/index.d.cts +3 -0
- package/node_modules/zod/v4/core/index.d.ts +3 -0
- package/node_modules/zod/v4/core/index.js +3 -0
- package/node_modules/zod/v4/core/json-schema-generator.cjs +24 -1
- package/node_modules/zod/v4/core/json-schema-generator.d.cts +2 -2
- package/node_modules/zod/v4/core/json-schema-generator.d.ts +2 -2
- package/node_modules/zod/v4/core/json-schema-generator.js +6 -2
- package/node_modules/zod/v4/core/json-schema-processors.cjs +441 -156
- package/node_modules/zod/v4/core/json-schema-processors.d.cts +16 -0
- package/node_modules/zod/v4/core/json-schema-processors.d.ts +16 -0
- package/node_modules/zod/v4/core/json-schema-processors.js +400 -158
- package/node_modules/zod/v4/core/json-schema.cjs +19 -0
- package/node_modules/zod/v4/core/json-schema.d.cts +2 -1
- package/node_modules/zod/v4/core/json-schema.d.ts +2 -1
- package/node_modules/zod/v4/core/memoizer.cjs +360 -0
- package/node_modules/zod/v4/core/memoizer.d.cts +15 -0
- package/node_modules/zod/v4/core/memoizer.d.ts +15 -0
- package/node_modules/zod/v4/core/memoizer.js +311 -0
- package/node_modules/zod/v4/core/parse.cjs +148 -46
- package/node_modules/zod/v4/core/parse.d.cts +14 -11
- package/node_modules/zod/v4/core/parse.d.ts +14 -11
- package/node_modules/zod/v4/core/parse.js +127 -45
- package/node_modules/zod/v4/core/regexes.cjs +54 -17
- package/node_modules/zod/v4/core/regexes.d.cts +5 -0
- package/node_modules/zod/v4/core/regexes.d.ts +5 -0
- package/node_modules/zod/v4/core/regexes.js +32 -15
- package/node_modules/zod/v4/core/registries.cjs +19 -0
- package/node_modules/zod/v4/core/registries.js +2 -2
- package/node_modules/zod/v4/core/schemas.cjs +785 -386
- package/node_modules/zod/v4/core/schemas.d.cts +123 -34
- package/node_modules/zod/v4/core/schemas.d.ts +123 -34
- package/node_modules/zod/v4/core/schemas.js +753 -386
- package/node_modules/zod/v4/core/standard-schema.cjs +19 -0
- package/node_modules/zod/v4/core/to-json-schema.cjs +269 -45
- package/node_modules/zod/v4/core/to-json-schema.d.cts +45 -5
- package/node_modules/zod/v4/core/to-json-schema.d.ts +45 -5
- package/node_modules/zod/v4/core/to-json-schema.js +247 -44
- package/node_modules/zod/v4/core/util.cjs +372 -157
- package/node_modules/zod/v4/core/util.d.cts +79 -1
- package/node_modules/zod/v4/core/util.d.ts +79 -1
- package/node_modules/zod/v4/core/util.js +341 -156
- package/node_modules/zod/v4/core/versions.cjs +21 -2
- package/node_modules/zod/v4/core/versions.d.cts +1 -1
- package/node_modules/zod/v4/core/versions.d.ts +1 -1
- package/node_modules/zod/v4/core/versions.js +2 -2
- package/node_modules/zod/v4/core/visit.cjs +214 -0
- package/node_modules/zod/v4/core/visit.d.cts +30 -0
- package/node_modules/zod/v4/core/visit.d.ts +30 -0
- package/node_modules/zod/v4/core/visit.js +169 -0
- package/node_modules/zod/v4/index.cjs +34 -5
- package/node_modules/zod/v4/index.d.cts +2 -2
- package/node_modules/zod/v4/index.d.ts +2 -2
- package/node_modules/zod/v4/index.js +3 -2
- package/node_modules/zod/v4/locales/ar.cjs +5 -0
- package/node_modules/zod/v4/locales/ar.js +5 -0
- package/node_modules/zod/v4/locales/az.cjs +5 -0
- package/node_modules/zod/v4/locales/az.js +5 -0
- package/node_modules/zod/v4/locales/be.cjs +12 -0
- package/node_modules/zod/v4/locales/be.js +12 -0
- package/node_modules/zod/v4/locales/bg.cjs +5 -0
- package/node_modules/zod/v4/locales/bg.js +5 -0
- package/node_modules/zod/v4/locales/bn.cjs +140 -0
- package/node_modules/zod/v4/locales/bn.d.cts +5 -0
- package/node_modules/zod/v4/locales/bn.d.ts +4 -0
- package/node_modules/zod/v4/locales/bn.js +113 -0
- package/node_modules/zod/v4/locales/ca.cjs +5 -0
- package/node_modules/zod/v4/locales/ca.js +5 -0
- package/node_modules/zod/v4/locales/ckb.cjs +160 -0
- package/node_modules/zod/v4/locales/ckb.d.cts +5 -0
- package/node_modules/zod/v4/locales/ckb.d.ts +4 -0
- package/node_modules/zod/v4/locales/ckb.js +133 -0
- package/node_modules/zod/v4/locales/cs.cjs +5 -0
- package/node_modules/zod/v4/locales/cs.js +5 -0
- package/node_modules/zod/v4/locales/da.cjs +7 -2
- package/node_modules/zod/v4/locales/da.js +7 -2
- package/node_modules/zod/v4/locales/de.cjs +5 -0
- package/node_modules/zod/v4/locales/de.js +5 -0
- package/node_modules/zod/v4/locales/el.cjs +3 -0
- package/node_modules/zod/v4/locales/el.js +3 -0
- package/node_modules/zod/v4/locales/en.cjs +16 -4
- package/node_modules/zod/v4/locales/en.js +16 -4
- package/node_modules/zod/v4/locales/eo.cjs +5 -0
- package/node_modules/zod/v4/locales/eo.js +5 -0
- package/node_modules/zod/v4/locales/es.cjs +4 -0
- package/node_modules/zod/v4/locales/es.js +4 -0
- package/node_modules/zod/v4/locales/fa.cjs +5 -0
- package/node_modules/zod/v4/locales/fa.js +5 -0
- package/node_modules/zod/v4/locales/fi.cjs +5 -0
- package/node_modules/zod/v4/locales/fi.js +5 -0
- package/node_modules/zod/v4/locales/fr-CA.cjs +5 -0
- package/node_modules/zod/v4/locales/fr-CA.js +5 -0
- package/node_modules/zod/v4/locales/fr.cjs +18 -14
- package/node_modules/zod/v4/locales/fr.js +18 -14
- package/node_modules/zod/v4/locales/gu.cjs +140 -0
- package/node_modules/zod/v4/locales/gu.d.cts +5 -0
- package/node_modules/zod/v4/locales/gu.d.ts +4 -0
- package/node_modules/zod/v4/locales/gu.js +113 -0
- package/node_modules/zod/v4/locales/he.cjs +7 -0
- package/node_modules/zod/v4/locales/he.js +7 -0
- package/node_modules/zod/v4/locales/hi.cjs +138 -0
- package/node_modules/zod/v4/locales/hi.d.cts +5 -0
- package/node_modules/zod/v4/locales/hi.d.ts +4 -0
- package/node_modules/zod/v4/locales/hi.js +111 -0
- package/node_modules/zod/v4/locales/hr.cjs +4 -0
- package/node_modules/zod/v4/locales/hr.js +4 -0
- package/node_modules/zod/v4/locales/hu.cjs +5 -0
- package/node_modules/zod/v4/locales/hu.js +5 -0
- package/node_modules/zod/v4/locales/hy.cjs +11 -0
- package/node_modules/zod/v4/locales/hy.js +11 -0
- package/node_modules/zod/v4/locales/id.cjs +5 -0
- package/node_modules/zod/v4/locales/id.js +5 -0
- package/node_modules/zod/v4/locales/index.cjs +43 -2
- package/node_modules/zod/v4/locales/index.d.cts +11 -0
- package/node_modules/zod/v4/locales/index.d.ts +11 -0
- package/node_modules/zod/v4/locales/index.js +11 -0
- package/node_modules/zod/v4/locales/is.cjs +5 -0
- package/node_modules/zod/v4/locales/is.js +5 -0
- package/node_modules/zod/v4/locales/it.cjs +5 -0
- package/node_modules/zod/v4/locales/it.js +5 -0
- package/node_modules/zod/v4/locales/ja.cjs +5 -0
- package/node_modules/zod/v4/locales/ja.js +5 -0
- package/node_modules/zod/v4/locales/ka.cjs +5 -0
- package/node_modules/zod/v4/locales/ka.js +5 -0
- package/node_modules/zod/v4/locales/km.cjs +5 -0
- package/node_modules/zod/v4/locales/km.js +5 -0
- package/node_modules/zod/v4/locales/kn.cjs +143 -0
- package/node_modules/zod/v4/locales/kn.d.cts +5 -0
- package/node_modules/zod/v4/locales/kn.d.ts +4 -0
- package/node_modules/zod/v4/locales/kn.js +116 -0
- package/node_modules/zod/v4/locales/ko.cjs +5 -0
- package/node_modules/zod/v4/locales/ko.js +5 -0
- package/node_modules/zod/v4/locales/lt.cjs +4 -0
- package/node_modules/zod/v4/locales/lt.js +4 -0
- package/node_modules/zod/v4/locales/mk.cjs +5 -0
- package/node_modules/zod/v4/locales/mk.js +5 -0
- package/node_modules/zod/v4/locales/ms.cjs +5 -0
- package/node_modules/zod/v4/locales/ms.js +5 -0
- package/node_modules/zod/v4/locales/ne.cjs +138 -0
- package/node_modules/zod/v4/locales/ne.d.cts +5 -0
- package/node_modules/zod/v4/locales/ne.d.ts +4 -0
- package/node_modules/zod/v4/locales/ne.js +111 -0
- package/node_modules/zod/v4/locales/nl.cjs +5 -0
- package/node_modules/zod/v4/locales/nl.js +5 -0
- package/node_modules/zod/v4/locales/nn.cjs +140 -0
- package/node_modules/zod/v4/locales/nn.d.cts +5 -0
- package/node_modules/zod/v4/locales/nn.d.ts +4 -0
- package/node_modules/zod/v4/locales/nn.js +113 -0
- package/node_modules/zod/v4/locales/no.cjs +7 -2
- package/node_modules/zod/v4/locales/no.js +7 -2
- package/node_modules/zod/v4/locales/ota.cjs +5 -0
- package/node_modules/zod/v4/locales/ota.js +5 -0
- package/node_modules/zod/v4/locales/pl.cjs +5 -0
- package/node_modules/zod/v4/locales/pl.js +5 -0
- package/node_modules/zod/v4/locales/ps.cjs +5 -0
- package/node_modules/zod/v4/locales/ps.js +5 -0
- package/node_modules/zod/v4/locales/pt-BR.cjs +170 -0
- package/node_modules/zod/v4/locales/pt-BR.d.cts +5 -0
- package/node_modules/zod/v4/locales/pt-BR.d.ts +4 -0
- package/node_modules/zod/v4/locales/pt-BR.js +143 -0
- package/node_modules/zod/v4/locales/pt.cjs +89 -55
- package/node_modules/zod/v4/locales/pt.js +89 -55
- package/node_modules/zod/v4/locales/ro.cjs +3 -0
- package/node_modules/zod/v4/locales/ro.js +3 -0
- package/node_modules/zod/v4/locales/ru.cjs +12 -0
- package/node_modules/zod/v4/locales/ru.js +12 -0
- package/node_modules/zod/v4/locales/sk.cjs +143 -0
- package/node_modules/zod/v4/locales/sk.d.cts +5 -0
- package/node_modules/zod/v4/locales/sk.d.ts +4 -0
- package/node_modules/zod/v4/locales/sk.js +116 -0
- package/node_modules/zod/v4/locales/sl.cjs +5 -0
- package/node_modules/zod/v4/locales/sl.js +5 -0
- package/node_modules/zod/v4/locales/sv.cjs +7 -2
- package/node_modules/zod/v4/locales/sv.js +7 -2
- package/node_modules/zod/v4/locales/ta.cjs +5 -0
- package/node_modules/zod/v4/locales/ta.js +5 -0
- package/node_modules/zod/v4/locales/tg.cjs +144 -0
- package/node_modules/zod/v4/locales/tg.d.cts +5 -0
- package/node_modules/zod/v4/locales/tg.d.ts +4 -0
- package/node_modules/zod/v4/locales/tg.js +117 -0
- package/node_modules/zod/v4/locales/th.cjs +5 -0
- package/node_modules/zod/v4/locales/th.js +5 -0
- package/node_modules/zod/v4/locales/tk.cjs +134 -0
- package/node_modules/zod/v4/locales/tk.d.cts +5 -0
- package/node_modules/zod/v4/locales/tk.d.ts +4 -0
- package/node_modules/zod/v4/locales/tk.js +107 -0
- package/node_modules/zod/v4/locales/tr.cjs +5 -0
- package/node_modules/zod/v4/locales/tr.js +5 -0
- package/node_modules/zod/v4/locales/uk.cjs +5 -0
- package/node_modules/zod/v4/locales/uk.js +5 -0
- package/node_modules/zod/v4/locales/ur.cjs +5 -0
- package/node_modules/zod/v4/locales/ur.js +5 -0
- package/node_modules/zod/v4/locales/uz.cjs +3 -0
- package/node_modules/zod/v4/locales/uz.js +3 -0
- package/node_modules/zod/v4/locales/vi.cjs +5 -0
- package/node_modules/zod/v4/locales/vi.js +5 -0
- package/node_modules/zod/v4/locales/yo.cjs +5 -0
- package/node_modules/zod/v4/locales/yo.js +5 -0
- package/node_modules/zod/v4/locales/zh-CN.cjs +5 -0
- package/node_modules/zod/v4/locales/zh-CN.js +5 -0
- package/node_modules/zod/v4/locales/zh-TW.cjs +5 -0
- package/node_modules/zod/v4/locales/zh-TW.js +5 -0
- package/node_modules/zod/v4/mini/checks.cjs +21 -1
- package/node_modules/zod/v4/mini/checks.d.cts +1 -1
- package/node_modules/zod/v4/mini/checks.d.ts +1 -1
- package/node_modules/zod/v4/mini/checks.js +1 -1
- package/node_modules/zod/v4/mini/coerce.cjs +19 -0
- package/node_modules/zod/v4/mini/deep-partial.cjs +58 -0
- package/node_modules/zod/v4/mini/deep-partial.d.cts +14 -0
- package/node_modules/zod/v4/mini/deep-partial.d.ts +14 -0
- package/node_modules/zod/v4/mini/deep-partial.js +13 -0
- package/node_modules/zod/v4/mini/external.cjs +33 -1
- package/node_modules/zod/v4/mini/external.d.cts +5 -2
- package/node_modules/zod/v4/mini/external.d.ts +5 -2
- package/node_modules/zod/v4/mini/external.js +3 -1
- package/node_modules/zod/v4/mini/in-out.cjs +82 -0
- package/node_modules/zod/v4/mini/in-out.d.cts +8 -0
- package/node_modules/zod/v4/mini/in-out.d.ts +8 -0
- package/node_modules/zod/v4/mini/in-out.js +36 -0
- package/node_modules/zod/v4/mini/index.cjs +19 -0
- package/node_modules/zod/v4/mini/iso.cjs +19 -0
- package/node_modules/zod/v4/mini/parse.cjs +22 -1
- package/node_modules/zod/v4/mini/parse.d.cts +1 -1
- package/node_modules/zod/v4/mini/parse.d.ts +1 -1
- package/node_modules/zod/v4/mini/parse.js +1 -1
- package/node_modules/zod/v4/mini/schemas.cjs +117 -53
- package/node_modules/zod/v4/mini/schemas.d.cts +49 -14
- package/node_modules/zod/v4/mini/schemas.d.ts +49 -14
- package/node_modules/zod/v4/mini/schemas.js +92 -51
- package/node_modules/zod/v4-mini/index.cjs +19 -0
- package/openclaw.plugin.json +21 -1
- package/package.json +10 -8
- package/node_modules/@openclaw/fs-safe/dist/absolute-path.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/advanced.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/archive-crc32.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/archive-deadline.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/archive-entry.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/archive-errors.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/archive-gzip-tail.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/archive-input.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/archive-kind.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/archive-limits.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/archive-merge.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/archive-native.d.ts +0 -20
- package/node_modules/@openclaw/fs-safe/dist/archive-native.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/archive-native.js +0 -107
- package/node_modules/@openclaw/fs-safe/dist/archive-options.d.ts +0 -21
- package/node_modules/@openclaw/fs-safe/dist/archive-options.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/archive-parser-errors.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/archive-plan.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/archive-policy.d.ts +0 -22
- package/node_modules/@openclaw/fs-safe/dist/archive-policy.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/archive-policy.js +0 -38
- package/node_modules/@openclaw/fs-safe/dist/archive-read.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/archive-staging.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/archive-tar-inspect.d.ts +0 -7
- package/node_modules/@openclaw/fs-safe/dist/archive-tar-inspect.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/archive-tar-inspect.js +0 -59
- package/node_modules/@openclaw/fs-safe/dist/archive-tar-stream.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/archive-tar-wasm.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/archive-tar.d.ts +0 -19
- package/node_modules/@openclaw/fs-safe/dist/archive-tar.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/archive-tar.js +0 -21
- package/node_modules/@openclaw/fs-safe/dist/archive-zip-admission.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/archive-zip-count.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/archive-zip-directory.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/archive-zip-entry.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/archive-zip-integrity.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/archive-zip-names.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/archive-zip-preflight.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/archive.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/async-lock.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/atomic.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/bounded-read-stream.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/bounded-read.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/byte-budget.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/config.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/containment.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/deny-mutations.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/device-path.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/directory-durability.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/directory-guard.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/directory-mode-node.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/directory-mode-owner.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/durability.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/error-detail.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/errors.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/file-hash.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/file-identity.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/file-lock-sync.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/file-lock.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/file-observation.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/file-store-boundary.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/file-store-limit.d.ts +0 -2
- package/node_modules/@openclaw/fs-safe/dist/file-store-limit.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/file-store-limit.js +0 -8
- package/node_modules/@openclaw/fs-safe/dist/file-store-prune.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/file-store-sync-write.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/file-store.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/file-sync.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/filename.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/fs.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/guarded-mkdir.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/guarded-mutation.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/home-dir.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/index.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/install-path.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/json-document-store.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/json-durable-queue-directory.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/json-durable-queue-ownership.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/json-durable-queue.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/json-store.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/json-stringify.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/json.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/local-file-access.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/local-roots.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/lock-config.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/move-path-cleanup.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/move-path.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/native-binding.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/native-config.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/native-operations.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/native-pinned-write-windows.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/native-pinned-write.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/native-staged-file.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/native.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/opened-file-failure.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/opened-realpath.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/output.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/owner-dacl.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/path-policy.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/path.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/permission-exec.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/permissions-public.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/permissions-windows.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/permissions.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/pinned-open.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/pinned-operation.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/pinned-write.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/private-directory.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/private-temp-workspace.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/publish-file-failure.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/publish-file.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/read-open-flags.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/read-opened-file.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/regular-file.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/replace-directory.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/replace-file-copy-fallback.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/replace-file-copy-source.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/replace-file-descriptor.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/replace-file-rename-policy.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/replace-file-temp-owner.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/replace-file.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/root-context.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/root-errors.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/root-file.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/root-impl.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/root-path-existing.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/root-path-symlink.d.ts +0 -7
- package/node_modules/@openclaw/fs-safe/dist/root-path-symlink.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/root-path-symlink.js +0 -35
- package/node_modules/@openclaw/fs-safe/dist/root-path.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/root-paths.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/root-walk.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/root-write-mode.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/root-write-verification.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/root.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/safe-path-segment.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/secret-file.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/secret-read-async.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/secret-read-policy.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/secret.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/secure-file.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/secure-temp-dir.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/sibling-staged-file.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/sibling-temp.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-acquire.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-handle.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-policy.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-reclaim.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-root.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-types.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/sidecar-lock.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/staged-directory.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/staged-file-types.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/store.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/strict-file-identity.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/string-coerce.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/suppressed-error.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/symlink-parents.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/temp-cleanup.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/temp-target.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/temp-workspace-owner.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/temp.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/test-hooks.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/text-atomic.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/timing.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/trash.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/types.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/walk.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/windows-command.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/windows-owner.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/write-open-flags.d.ts.map +0 -1
- package/node_modules/@openclaw/fs-safe/dist/write-queue.d.ts.map +0 -1
- package/node_modules/jszip/.github/workflows/pr.yaml +0 -58
- package/node_modules/jszip/.jekyll-metadata +0 -0
- package/node_modules/jszip/.travis.yml +0 -17
- package/node_modules/jszip/deps.js +0 -37
- package/node_modules/jszip/graph.svg +0 -601
- package/node_modules/zod/src/v4/core/config.ts +0 -15
- /package/node_modules/@openclaw/fs-safe/dist/{archive-options.js → pinned-write-types.js} +0 -0
|
@@ -15,7 +15,7 @@ consumer Rust build.
|
|
|
15
15
|
import { configureFsSafeNative } from "@openclaw/fs-safe/config";
|
|
16
16
|
|
|
17
17
|
configureFsSafeNative({ mode: "auto" }); // default
|
|
18
|
-
configureFsSafeNative({ mode: "off" }); //
|
|
18
|
+
configureFsSafeNative({ mode: "off" }); // disable the addon; reject native-only operations
|
|
19
19
|
configureFsSafeNative({ mode: "require" }); // fail closed when the binding is unavailable
|
|
20
20
|
```
|
|
21
21
|
|
|
@@ -25,17 +25,45 @@ The equivalent environment variables are `FS_SAFE_NATIVE_MODE` and `OPENCLAW_FS_
|
|
|
25
25
|
|
|
26
26
|
| Mode | Behavior |
|
|
27
27
|
|---|---|
|
|
28
|
-
| `auto` | Prefer native primitives when the current platform package loads; otherwise
|
|
29
|
-
| `off` | Do not load a native package. Use
|
|
28
|
+
| `auto` | Prefer native primitives when the current platform package loads; otherwise use supported fallbacks and reject native-only operations. |
|
|
29
|
+
| `off` | Do not load a native package. Use supported fallbacks and reject native-only operations deterministically. |
|
|
30
30
|
| `require` | Throw `FsSafeError("helper-unavailable")` instead of falling back when an operation needs the native binding and it cannot load. |
|
|
31
31
|
|
|
32
|
-
TAR
|
|
33
|
-
of the same Rust parser
|
|
34
|
-
|
|
35
|
-
|
|
32
|
+
Plain TAR, gzip, zstd, and bzip2 extraction and bounded entry reads use a bundled,
|
|
33
|
+
import-free WASM build of the same Rust TAR parser when native support is absent
|
|
34
|
+
or disabled. Zstd/bzip2 codecs are bundled alongside the parser; gzip uses Node's
|
|
35
|
+
built-in decoder. These archive fallbacks require no runtime interpreter or
|
|
36
|
+
download. `off` disables the optional native filesystem helper, not the bundled
|
|
37
|
+
WASM. `auto` prefers native and does not retry a native operation failure through
|
|
38
|
+
WASM; `require` still rejects an unavailable native binding. ZIP fallback still
|
|
39
|
+
requires optional `jszip`. `inspectTarArchive()` remains limited to plain TAR
|
|
40
|
+
and gzip.
|
|
41
|
+
|
|
42
|
+
Windows security operations can use the package's readable PowerShell/C# scripts
|
|
43
|
+
in `auto` and `off`, subject to the [Windows security fallback prerequisites](install.md#windows-security-fallback).
|
|
44
|
+
|
|
45
|
+
On Bun macOS/Linux, the [runtime path adapter](install.md#bun-runtime) uses the
|
|
46
|
+
same Rust addon for system canonicalization in `auto` and `require`. No JIT is
|
|
47
|
+
needed. With `off` or a missing addon in `auto`, Bun's own resolver retains its
|
|
48
|
+
path and permission limitations. Canonicalization in `require` fails with
|
|
49
|
+
`helper-unavailable` if the addon or its canonicalizer is missing, including
|
|
50
|
+
when admitting a temp workspace. Containment and identity checks stay intact.
|
|
36
51
|
|
|
37
52
|
Configure the mode once during startup. Loading is lazy and cached; changing from `auto` to `require` after a failed load changes failure policy but does not repeatedly probe the binary.
|
|
38
53
|
|
|
54
|
+
Native-created descriptors retain their originating native close operation through
|
|
55
|
+
normal and error cleanup, including later mode changes. Node-created roots and
|
|
56
|
+
directory handles keep Node's close operation, and borrowed handles keep their
|
|
57
|
+
caller-owned lifetime. This preserves Node worker-thread descriptor tracking
|
|
58
|
+
without unmanaged-descriptor warnings. A helper missing native close support is
|
|
59
|
+
unavailable before descriptor allocation.
|
|
60
|
+
|
|
61
|
+
Close retained native resources and let in-flight operations finish before
|
|
62
|
+
forcibly terminating a worker. Native-created descriptors are not registered
|
|
63
|
+
with Node's automatic worker-exit cleanup; `Worker.terminate()` can leave them
|
|
64
|
+
open until process exit. The native close operation handles explicit cleanup,
|
|
65
|
+
not forced worker termination.
|
|
66
|
+
|
|
39
67
|
[`tempWorkspace()` and its scoped/sync variants](temp.md#private-temp-workspaces)
|
|
40
68
|
remain available in every mode. Their default compatible cleanup uses guarded
|
|
41
69
|
JavaScript quarantine when owned native tree removal is unavailable.
|
|
@@ -55,20 +83,51 @@ change the mode policy of existing fallback-capable APIs.
|
|
|
55
83
|
|
|
56
84
|
## Native boundary
|
|
57
85
|
|
|
86
|
+
The internal Darwin descriptor ACL inspector requires its matching native
|
|
87
|
+
capability in both `auto` and `require`; `off`, a missing package, or an older
|
|
88
|
+
binding without `inspectDarwinAcl` rejects with `helper-unavailable`. Inspection
|
|
89
|
+
failure or malformed facts reject with `permission-unverified`; there is no
|
|
90
|
+
mode-bit or pathname fallback for this capability. Clone admission uses a fused
|
|
91
|
+
descriptor-bound metadata and ACL observation, then compares immutable receipts
|
|
92
|
+
with fresh no-follow pathname identity fences; pathnames never authorize ACL
|
|
93
|
+
state. The payload ACL-clear readback is part of that fused observation. Once
|
|
94
|
+
a clone payload exists, normalization and verification failures become terminal
|
|
95
|
+
`EIO` errors (with the underlying status and detail retained), not capability
|
|
96
|
+
signals that permit an ordinary-copy retry. Checked cleanup cannot undo that
|
|
97
|
+
terminal classification.
|
|
98
|
+
This addition does not change other APIs' native-mode or permission contracts.
|
|
99
|
+
|
|
58
100
|
The native layer exposes policy-free filesystem mechanisms: beneath-root
|
|
59
101
|
open/mkdir/link, replace and no-replace rename, identity reads, archive decode/execution,
|
|
60
|
-
clone/copy/hash workers, and Windows security descriptor calls. The TypeScript
|
|
102
|
+
clone/copy/hash workers, POSIX canonicalization, and Windows security descriptor calls. The TypeScript
|
|
61
103
|
layer owns policy, retries, filters, budgets, modes, cleanup, error
|
|
62
104
|
normalization, and the decision to fall back.
|
|
63
105
|
|
|
64
|
-
- Linux uses `openat2` with `RESOLVE_BENEATH | RESOLVE_NO_MAGICLINKS`, `renameat`, and `renameat2(RENAME_NOREPLACE)`. Owned-tree cleanup enumerates and unlinks through retained directory descriptors and rejects device crossings.
|
|
65
|
-
- macOS 15.4 and newer prefer `O_RESOLVE_BENEATH`; older kernels resolve components with `O_NOFOLLOW` and restart in-root symlinks from the pinned root descriptor. Both routes use an `F_GETPATH` post-open escape detector and report `best-effort` because directory rename races are not atomic with that check. Publication uses `renameat` for replacement and `renameatx_np(RENAME_EXCL)` for no-replace; owned-tree cleanup uses descriptor-relative `openat`/`unlinkat`.
|
|
66
|
-
- Windows uses handle-relative `NtCreateFile`, rejects reparse points during root-bounded traversal, uses `FileRenameInfoEx` with replacement selected explicitly by the TypeScript policy layer
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
106
|
+
- Linux uses `openat2` with `RESOLVE_BENEATH | RESOLVE_NO_MAGICLINKS`, `renameat`, and `renameat2(RENAME_NOREPLACE)`. Direct-child no-replace renames borrow already-retained parent descriptors; deeper relative paths retain the guarded reopen. Owned-tree cleanup enumerates and unlinks through retained directory descriptors and rejects device crossings.
|
|
107
|
+
- macOS 15.4 and newer prefer `O_RESOLVE_BENEATH`; older kernels resolve components with `O_NOFOLLOW` and restart in-root symlinks from the pinned root descriptor. Both routes use an `F_GETPATH` post-open escape detector and report `best-effort` because directory rename races are not atomic with that check. Direct-child no-replace renames borrow already-retained parents without another `F_GETPATH`; deeper paths retain the guarded reopen. Publication uses `renameat` for replacement and `renameatx_np(RENAME_EXCL)` for no-replace; owned-tree cleanup uses descriptor-relative `openat`/`unlinkat`.
|
|
108
|
+
- Windows uses handle-relative `NtCreateFile`, rejects reparse points during root-bounded traversal, and uses `FileRenameInfoEx` with replacement selected explicitly by the TypeScript policy layer. The dedicated retained-directory `renameNoReplaceWithIdentity` primitive compares its required exact source receipt with the handle opened for rename before mutation. Its internal mismatch status is normalized to public `path-mismatch`; the legacy four-argument `renameNoReplace` export and its other callers are unchanged. Owned trees are deleted through exact opened handles with `FileDispositionInfoEx`; symlink/reparse entries in owned trees are removed as leaves and never traversed. Descriptors crossing N-API are converted only by the host executable's paired `uv_get_osfhandle` and `uv_open_osfhandle` exports. A runtime without both exports is unsupported for these native operations; the binding never guesses a raw HANDLE or uses a foreign CRT descriptor table. Descriptor-producing operations also require that same host's synchronous libuv close and request-management APIs before exporting an owned descriptor.
|
|
109
|
+
|
|
110
|
+
`replaceDirectoryAtomic()` requires `renameNoReplaceWithIdentity` before it
|
|
111
|
+
creates a missing target parent. On POSIX the dedicated entry point keeps the
|
|
112
|
+
existing pre-dispatch exact receipt fence but dispatches direct-child names
|
|
113
|
+
through the retained parents without another receipt, duplicate, reopen, or
|
|
114
|
+
macOS `F_GETPATH`; the documented final source-name substitution window remains
|
|
115
|
+
there. Deeper names retain guarded parent traversal.
|
|
116
|
+
|
|
117
|
+
Native primitives back create-only and replacing pinned writes, no-clobber
|
|
118
|
+
`Root.move()`, async sidecar creation, guarded publication, archive acceleration,
|
|
119
|
+
and direct Windows ACL operations. Windows secure-file reads require
|
|
120
|
+
descriptor-bound owner/DACL facts. In native `auto` or `off` mode, a missing
|
|
121
|
+
binding or capability can use a packaged PowerShell script that inspects the
|
|
122
|
+
borrowed handle. Raw owner/DACL inspection and private-directory creation also support
|
|
123
|
+
this fallback, subject to the [Windows security fallback prerequisites](install.md#windows-security-fallback).
|
|
124
|
+
Each capability emits a path-free warning once per process and adds PowerShell
|
|
125
|
+
startup and compilation overhead per call. Native `require` rejects missing
|
|
126
|
+
capabilities, and native operation failures remain terminal. No-clobber moves fail with
|
|
127
|
+
`helper-unavailable` when descriptor-relative parent admission or the atomic
|
|
128
|
+
no-replace rename is unavailable; they never use a check followed by a replacing
|
|
129
|
+
rename. Equivalent JavaScript paths remain available for documented
|
|
130
|
+
fallback-capable features. See [Native architecture](native.md#javascript-fallback-guarantees-and-delta)
|
|
72
131
|
for the exact difference.
|
|
73
132
|
|
|
74
133
|
The guarded JavaScript mutation path is detection-based, not containment-atomic.
|
|
@@ -17,7 +17,7 @@ guarded JavaScript path. Native loading is lazy; installs do not compile Rust,
|
|
|
17
17
|
run postinstall code, or fetch binaries at runtime. Seven exact-version optional
|
|
18
18
|
packages are filtered by OS, CPU, and Linux libc, so an installation receives
|
|
19
19
|
only its matching prebuilt binding.
|
|
20
|
-
Native-only formats
|
|
20
|
+
Native-only formats fail explicitly
|
|
21
21
|
instead of substituting a weaker implementation.
|
|
22
22
|
|
|
23
23
|
## The beneath model
|
|
@@ -50,15 +50,56 @@ whether a path, archive entry, mode, owner, or cleanup policy is acceptable.
|
|
|
50
50
|
race-atomic. macOS uses `renameatx_np(RENAME_EXCL)` and permits
|
|
51
51
|
`fclonefileat` in an owned, non-shared parent. The clone is normalized inside
|
|
52
52
|
a private staging directory: flags, ACLs, extended attributes, and broad mode
|
|
53
|
-
bits are cleared before no-replace publication.
|
|
53
|
+
bits are cleared before no-replace publication. Clone admission obtains mode,
|
|
54
|
+
owner, exact identity, flags, and ACL state together from the retained descriptor;
|
|
55
|
+
immutable receipts are compared across the private staging operation and against
|
|
56
|
+
fresh no-follow pathname identity reads. Any extended entry on the target parent
|
|
57
|
+
or private staging directory is rejected before cloning bytes. The payload's
|
|
58
|
+
cleared ACL and normalized descriptor facts are verified before publication and
|
|
59
|
+
again, with a fresh published-name identity fence, before its descriptor is
|
|
60
|
+
returned. Unsupported admission before payload
|
|
61
|
+
creation or an unsupported clone syscall may still select the documented
|
|
62
|
+
ordinary-copy path. After the clone creates bytes, normalization and security
|
|
63
|
+
verification failures report terminal `EIO`, retaining the original error
|
|
64
|
+
detail; successful cleanup does not make them eligible for ordinary-copy retry.
|
|
65
|
+
Cleanup failures remain secondary diagnostics, and already-terminal publication
|
|
66
|
+
errors such as `EEXIST` retain their status.
|
|
54
67
|
- Windows uses handle-relative `NtCreateFile` with `OBJ_DONT_REPARSE` and
|
|
55
68
|
`FILE_OPEN_REPARSE_POINT`, then explicitly rejects reparse points. Rename and
|
|
56
69
|
hardlink operations stay rooted in already-open handles. Owner/DACL reads
|
|
57
70
|
use `GetSecurityInfo`; private directories receive their protected DACL in
|
|
58
|
-
|
|
71
|
+
an exclusive, handle-relative `NtCreateFile` call. Their created handles remain
|
|
72
|
+
open through ACL and pathname-association checks and own any failure cleanup.
|
|
73
|
+
N-API descriptors cross into and out of
|
|
74
|
+
this layer only through the host executable's paired libuv descriptor bridge;
|
|
75
|
+
missing or partial exports fail with `ENOTSUP` instead of trying a raw HANDLE
|
|
76
|
+
or add-on CRT descriptor namespace.
|
|
77
|
+
|
|
78
|
+
The internal macOS `inspectDarwinAcl(fd)` capability reports `absent`, `empty`,
|
|
79
|
+
or `present` for the opened object's extended ACL. It synchronously borrows the
|
|
80
|
+
caller's descriptor, preserving its file position and POSIX record locks, and
|
|
81
|
+
never reopens a pathname. Keep the descriptor open until inspection returns.
|
|
82
|
+
Darwin's `acl_get_entry` returns
|
|
83
|
+
zero for an entry; end-of-list is accepted only for the first entry of a valid,
|
|
84
|
+
privately owned empty ACL. Unsupported, malformed, and failed inspection is not
|
|
85
|
+
reported as absence. These facts do not classify individual ACE permissions or
|
|
86
|
+
prove volume ownership enforcement; each caller applies its own security policy.
|
|
59
87
|
|
|
60
88
|
## Archives
|
|
61
89
|
|
|
90
|
+
Native ZIP and TAR entry reads retain a private, unpooled input Buffer in
|
|
91
|
+
the async reader. ZIP reuses its parsed directory; TAR retains admitted member
|
|
92
|
+
offsets. TypeScript validates and selects the requested member before reading. The internal binding borrows that allocation: it must never be
|
|
93
|
+
mutated or detached while the reader or a read task exists. The public API only
|
|
94
|
+
accepts a pathname and owns this buffer exclusively. An N-API reference keeps
|
|
95
|
+
the bytes alive; a mutex serializes access to the retained ZIP cursor. Plain
|
|
96
|
+
TAR copies only the selected range after complete admission, while gzip, zstd,
|
|
97
|
+
and bzip2 replay bounded decompression and validate the full physical stream.
|
|
98
|
+
Concurrent TAR reads share immutable input and own separate decoder state.
|
|
99
|
+
Each output owns a new vector, which N-API transfers to Node without a second
|
|
100
|
+
payload copy on runtimes supporting external buffers. No entry-read path
|
|
101
|
+
requires temporary-file staging. Extraction retains its private staged input.
|
|
102
|
+
|
|
62
103
|
Rust streams ZIP and TAR payloads, including gzip, zstd, and bzip2. It first
|
|
63
104
|
returns a bounded manifest. TypeScript applies the shared path, filter, strip,
|
|
64
105
|
mode, and byte policies and returns an index-bound extraction plan. Rust then
|
|
@@ -74,6 +115,17 @@ the guarded Node staging/publication boundary. ZIP behavior is unchanged.
|
|
|
74
115
|
`maxMetaEntryBytes` bounds bodies before allocation; unsupported global/old
|
|
75
116
|
metadata and sparse forms fail closed. See [bounded local PAX support](archive.md#bounded-local-pax-support).
|
|
76
117
|
|
|
118
|
+
The bundled module also compiles the same zstd and bzip2 codec implementations
|
|
119
|
+
used by native. In `off` or missing-native `auto`, those decoders feed the shared
|
|
120
|
+
TAR parser through fixed 64 KiB windows in one import-free WASM session with a
|
|
121
|
+
256 MiB linear-memory ceiling. Gzip retains Node's built-in decoder. Complete
|
|
122
|
+
container and TAR admission precedes policy evaluation and guarded publication;
|
|
123
|
+
concatenated compressed members and zstd skippable frames are consumed through
|
|
124
|
+
physical EOF. No runtime command, interpreter, download, or consumer compilation
|
|
125
|
+
is needed for these archive routes. `require` stays strict, and available native
|
|
126
|
+
operation failures do not retry through WASM. Public `inspectTarArchive()` still
|
|
127
|
+
accepts only plain TAR/gzip; ZIP fallback still requires optional JSZip.
|
|
128
|
+
|
|
77
129
|
Every raw pass receives only TypeScript's resolved `maxEntries`,
|
|
78
130
|
`maxMetaEntryBytes`, and `maxDecodedBytes`. Shared resolution caps metadata and
|
|
79
131
|
decoded byte fields at JavaScript's safe-integer maximum and entry counts at
|
|
@@ -112,18 +164,44 @@ All routes preserve `wx` semantics and the same source/target identity and
|
|
|
112
164
|
SHA-256 fencing. Native hashing and Linux whole-file copying run on N-API async
|
|
113
165
|
workers rather than the JavaScript event loop.
|
|
114
166
|
|
|
167
|
+
Linux range copying confirms every zero-byte result with a positioned source
|
|
168
|
+
read at the current transfer offset, including after earlier calls copied data.
|
|
169
|
+
If readable bytes remain, automatic Root copying resumes its byte loop from
|
|
170
|
+
that offset; exclusive publication removes its partial target before retrying
|
|
171
|
+
the guarded byte-copy fallback. EOF checks preserve descriptor cursors and do
|
|
172
|
+
not bypass the byte limit.
|
|
173
|
+
|
|
115
174
|
## Mode semantics
|
|
116
175
|
|
|
117
176
|
| Mode | Native loading | Fallback |
|
|
118
177
|
|---|---|---|
|
|
119
|
-
| `auto` | Try once, cache the result | Use guarded JavaScript when
|
|
178
|
+
| `auto` | Try once, cache the result | Use guarded JavaScript when safe; reject native-only operations |
|
|
120
179
|
| `require` | Try once, cache the result | Throw `FsSafeError("helper-unavailable")` |
|
|
121
|
-
| `off` | Never attempt a binding load |
|
|
180
|
+
| `off` | Never attempt a binding load | Use guarded JavaScript when safe; reject native-only operations |
|
|
122
181
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
182
|
+
`sha256FileSync()` is a synchronous Node implementation in all three modes and
|
|
183
|
+
does not load the binding. Use asynchronous `sha256File()` for native hashing
|
|
184
|
+
and cancellation that can respond while JavaScript callbacks run.
|
|
185
|
+
|
|
186
|
+
Features without a safe fallback, including no-clobber
|
|
187
|
+
`Root.move()` and
|
|
188
|
+
[retained-directory staging](staged-file.md), fail with `helper-unavailable`
|
|
189
|
+
when native support is absent or off. Staging is currently Linux/macOS only and
|
|
190
|
+
rejects Windows with `unsupported-platform`.
|
|
191
|
+
|
|
192
|
+
Windows raw owner/DACL inspection, private-directory creation, and secure-file
|
|
193
|
+
descriptor inspection can use a package-shipped, readable `.ps1` driver and
|
|
194
|
+
adjacent `.cs` source in `auto` or `off` mode when their binding or capability is
|
|
195
|
+
unavailable. System Windows PowerShell runs the fixed driver with `-File`;
|
|
196
|
+
paths remain data, with no runtime-generated helper script or encoded launcher.
|
|
197
|
+
The [Windows security fallback prerequisites](install.md#windows-security-fallback)
|
|
198
|
+
apply, and unsupported or disallowed command execution fails closed. This route
|
|
199
|
+
preserves raw ACL facts, private DACLs at creation, and descriptor-bound secure
|
|
200
|
+
reads, and emits a path-free `FS_SAFE_NATIVE_FALLBACK` warning once per capability
|
|
201
|
+
per process. Each call adds PowerShell startup and compilation overhead.
|
|
202
|
+
`require` rejects missing capabilities without a command, and an available native operation's
|
|
203
|
+
failure never triggers this fallback. See [Permissions](permissions.md) and
|
|
204
|
+
[Secure file reads](secure-file.md) for error and platform contracts.
|
|
127
205
|
|
|
128
206
|
The staged-file owner also serves POSIX native pinned writes, including streaming.
|
|
129
207
|
Unpublished files remain at `0600`; requested modes are applied through the
|
|
@@ -153,20 +231,34 @@ that fallback does not apply to POSIX no-read modes.
|
|
|
153
231
|
|
|
154
232
|
## JavaScript fallback guarantees and delta
|
|
155
233
|
|
|
234
|
+
Policy-bound parent creation can refresh exact directory facts through the
|
|
235
|
+
retained POSIX descriptor. The optional native observer compares descriptor and
|
|
236
|
+
no-follow pathname metadata and verifies the descriptor's canonical path before
|
|
237
|
+
and after the observation. Ordinary paths can share that observation within one
|
|
238
|
+
synchronous admission phase; callbacks, mutations, and later phases require fresh
|
|
239
|
+
evidence. Unsupported helpers retain the guarded pathname checks. Policy and
|
|
240
|
+
denied-path decisions remain in TypeScript.
|
|
241
|
+
|
|
156
242
|
Public policy does not change with the selected mechanism: traversal and link
|
|
157
243
|
rejection, archive filters/limits/modes, exclusive target creation, source and
|
|
158
244
|
target identity fencing, publication cleanup receipts, and secret/lock policy
|
|
159
245
|
remain TypeScript-owned. What changes is the syscall strength or availability:
|
|
160
246
|
|
|
247
|
+
The table compares underlying mechanisms. On Node, public `Root.open()`,
|
|
248
|
+
`Root.read()`, and `Root.openWritable()` use guarded Node file opens and report
|
|
249
|
+
`containment: "best-effort"` in every native mode. `require` checks availability
|
|
250
|
+
when an operation requests native support; it does not upgrade those results.
|
|
251
|
+
See [Root containment guarantees](security-model.md#containment-guarantees-by-platform).
|
|
252
|
+
|
|
161
253
|
| Capability | Native path | Guarded JavaScript path |
|
|
162
254
|
|---|---|---|
|
|
163
|
-
| Root
|
|
255
|
+
| Native beneath opens and Root mutations | Descriptor-relative beneath operations. Pinned writes create parents and publish both replacement and no-replace targets relative to open directory descriptors. No-clobber `Root.move()` admits both parents and uses the native no-replace rename. Native `openBeneath()` reports `kernel-atomic` on Linux and `best-effort` on macOS and Windows. macOS uses `O_RESOLVE_BENEATH` when available plus an `F_GETPATH` detector, while Windows rejects reparse traversal in the object-manager call. | Reports `best-effort`: component-wise alias checks, no-follow opens where Node exposes them, private temp/rename, and post-operation identity verification. No-clobber `Root.move()` is unsupported because a check followed by a replacing rename is unsafe. A same-privilege peer can replace a writable parent after a guard assertion but before Node resolves another pathname mutation; the mutation may land outside the intended root before the post-check detects it. |
|
|
164
256
|
| ZIP/TAR/gzip | Rust streaming decode and fd-relative output creation. | Optional JSZip or bundled WASM TAR into guarded private staging, then the same guarded merge policy. |
|
|
165
|
-
| Zstd/bzip2 TAR |
|
|
257
|
+
| Zstd/bzip2 TAR | Rust streaming decode and fd-relative output creation. | Bundled WASM codecs feed the shared Rust TAR parser, then guarded private staging and the same merge policy; no optional codec dependency. |
|
|
166
258
|
| Publication copy | Clone, Linux `copy_file_range`, async native SHA-256. | Exclusive `wx` byte loop and Node SHA-256 with the same content/identity fences. |
|
|
167
259
|
| `rename-noreplace` | Atomic platform no-replace rename. | Unsupported; no emulation by check-then-rename. |
|
|
168
|
-
| Windows DACL read | Direct `GetSecurityInfo`; the public facts API exposes ordered basic allow/deny ACE SIDs, masks, and decoded flags without trust policy.
|
|
169
|
-
| Windows private directory | Creation-time protected DACL. |
|
|
260
|
+
| Windows DACL read | Direct `GetSecurityInfo`; the public facts API exposes ordered basic allow/deny ACE SIDs, masks, and decoded flags without trust policy. Secure-file reads query the borrowed open descriptor and compare its 32-bit volume serial and 64-bit file-index projection with Node's bigint receipt. | The packaged PowerShell/C# bridge preserves raw facts and inspects the borrowed descriptor for secure reads, with the same Node identity comparison; its command failures reject. Structured .NET pathname reporting retains its separate compatibility query. |
|
|
261
|
+
| Windows private directory | Creation-time protected DACL. | The packaged PowerShell/C# bridge applies the protected DACL at creation and retains exact handles through identity validation and failure cleanup. Command failures reject. |
|
|
170
262
|
|
|
171
263
|
Use `off` in CI to keep the fallback contract exercised. Use `require` when a
|
|
172
264
|
deployment depends on the stronger mechanism or a native-only feature; do not
|
|
@@ -175,8 +267,9 @@ infer native loading from timing.
|
|
|
175
267
|
## Loader security
|
|
176
268
|
|
|
177
269
|
Importing fs-safe never executes a child process. Linux libc selection uses
|
|
178
|
-
the Node process report,
|
|
179
|
-
|
|
270
|
+
the Node process report, then the ELF `PT_INTERP` field of `process.execPath`,
|
|
271
|
+
then conventional musl library filenames. An installed compatibility loader
|
|
272
|
+
does not override the running executable's interpreter. If all probes are inconclusive, the
|
|
180
273
|
loader conservatively attempts the glibc package and lets normal module loading
|
|
181
274
|
fail into `auto` fallback. The loader requires only the package selected from
|
|
182
275
|
the detected target; it never probes unrelated packages, downloads code, or
|
|
@@ -35,6 +35,7 @@ type ExternalFileWriteOptions<T = void> = {
|
|
|
35
35
|
maxBytes?: number;
|
|
36
36
|
mode?: number;
|
|
37
37
|
staging?: "workspace" | "sibling"; // default: "workspace"
|
|
38
|
+
producerIsolation?: "private-directory"; // opt-in for sibling staging
|
|
38
39
|
fallbackFileName?: string; // safe staged-name fallback
|
|
39
40
|
};
|
|
40
41
|
|
|
@@ -48,6 +49,12 @@ The requested `path` must name a file. Missing destination parents are created
|
|
|
48
49
|
by the helper because the operation is "produce this output file under the
|
|
49
50
|
root"; callers should choose the filename before calling this API.
|
|
50
51
|
|
|
52
|
+
The helper reads each option once before its first asynchronous operation.
|
|
53
|
+
Changing the options object after invocation does not change the selected
|
|
54
|
+
writer, staging mode, isolation, filename fallback, byte limit, or final mode
|
|
55
|
+
for that write. Workspace writers retain the original options object as their
|
|
56
|
+
callback receiver; sibling writers retain the internal staging receiver.
|
|
57
|
+
|
|
51
58
|
`maxBytes` must be a non-negative safe integer or positive `Infinity`; zero is an active cap and `Infinity` disables it. Invalid values reject before the producer or filesystem staging runs.
|
|
52
59
|
|
|
53
60
|
Use `maxBytes` when the external producer can create arbitrarily large files,
|
|
@@ -60,7 +67,7 @@ hazards but does not trim Windows-normalized trailing dots or spaces; reject or
|
|
|
60
67
|
rewrite those when cross-platform filename uniqueness matters.
|
|
61
68
|
`staging: "workspace"` passes the sanitized basename to the producer.
|
|
62
69
|
`staging: "sibling"` embeds that basename in its randomized temporary name.
|
|
63
|
-
When the complete temporary component would exceed 255 bytes under NFC or NFD,
|
|
70
|
+
When the complete temporary component would exceed 255 bytes as written or under NFC or NFD,
|
|
64
71
|
only the embedded tail is shortened, preserving its extension when possible;
|
|
65
72
|
short callback paths remain unchanged. The final target and returned `path` use
|
|
66
73
|
the destination basename, sanitized
|
|
@@ -68,16 +75,26 @@ when needed as described above. Guarded temporary files used only inside
|
|
|
68
75
|
fs-safe have independent names so their length does not grow with the
|
|
69
76
|
destination basename.
|
|
70
77
|
|
|
78
|
+
On Windows, `rootDir` and every target parent reject NTFS alternate-stream and
|
|
79
|
+
directory-index namespace spellings such as `file:stream` and
|
|
80
|
+
`dir::$INDEX_ALLOCATION`. A colon in only the requested basename still follows
|
|
81
|
+
the documented portable filename sanitization above instead of being treated
|
|
82
|
+
as a raw stream path. Ordinary colon-bearing POSIX roots and parents remain
|
|
83
|
+
valid.
|
|
84
|
+
|
|
71
85
|
## Choosing a staging mode
|
|
72
86
|
|
|
73
87
|
`staging: "workspace"` is the default. The producer writes in private temp
|
|
74
88
|
storage, then fs-safe copies through the guarded root boundary. Choose it when
|
|
75
89
|
the temp and destination filesystems may differ, or when an externally produced
|
|
76
90
|
partial file must never appear in the destination directory. The final target
|
|
77
|
-
still appears only after guarded finalization.
|
|
91
|
+
still appears only after guarded finalization. Its internal `tempFile()` does
|
|
92
|
+
not expose `cleanupSafety` through this API and uses compatible cleanup, with
|
|
93
|
+
the final check-to-pathname-recursive-removal gap documented in
|
|
94
|
+
[`tempFile`](temp.md#tempfile).
|
|
78
95
|
|
|
79
|
-
`staging: "sibling"` gives the producer a randomized temp path in
|
|
80
|
-
directory. Choose it only when that directory itself is the approved writable
|
|
96
|
+
By default, `staging: "sibling"` gives the producer a randomized temp path in
|
|
97
|
+
the target directory. Choose it only when that directory itself is the approved writable
|
|
81
98
|
boundary and same-filesystem atomic replacement is required. After the callback
|
|
82
99
|
returns, fs-safe pins and validates the staged regular file, rejects hardlinks
|
|
83
100
|
and size-limit violations, applies `mode`, fsyncs it, and atomically renames it
|
|
@@ -91,11 +108,48 @@ cleanup retry.
|
|
|
91
108
|
Sibling staging shares the [callback sibling owner](temp.md#sibling-temp-writes):
|
|
92
109
|
it checks exact pre-open, descriptor, and current-path identities, retains the
|
|
93
110
|
descriptor through publication, and never chmods or reads a replacement by path.
|
|
94
|
-
|
|
95
|
-
throws before admission. Native-off and Windows
|
|
96
|
-
the platform limits and non-atomic
|
|
111
|
+
Without producer isolation, cleanup preserves unverified paths, including partial
|
|
112
|
+
output when the callback throws before admission. Native-off and Windows
|
|
113
|
+
operation remain supported with the platform limits and non-atomic
|
|
114
|
+
rename/unlink identity checks described there.
|
|
97
115
|
When `mode` is omitted, output-sibling staging preserves the producer's mode.
|
|
98
116
|
|
|
117
|
+
Add `producerIsolation: "private-directory"` to sibling staging when the
|
|
118
|
+
producer can leave partial output before throwing. It receives an initially
|
|
119
|
+
absent file path inside a private child workspace under the target parent, on
|
|
120
|
+
the target filesystem. Directory cleanup ownership is captured before the
|
|
121
|
+
callback. A callback exception triggers owned workspace cleanup, including
|
|
122
|
+
partial output, subject to directory identity checks and I/O failures.
|
|
123
|
+
After success, an available native helper uses guarded no-replace `Root.move`.
|
|
124
|
+
With native mode off, the helper opens and identity-fences the completed regular
|
|
125
|
+
file, creates the randomized sibling through an atomic no-clobber hard link,
|
|
126
|
+
verifies its temporary two-link state, then removes the private name. Windows
|
|
127
|
+
first transfers the pin to an independently verified sibling descriptor so the
|
|
128
|
+
source name can disappear before workspace cleanup, including on runtimes with
|
|
129
|
+
legacy deletion behavior. If that unlink clears the producer's read-only
|
|
130
|
+
attribute, the retained descriptor restores it and the helper verifies mode and
|
|
131
|
+
identity before continuing. This keeps the handoff zero-copy while preserving the
|
|
132
|
+
ordinary retained-descriptor, mode,
|
|
133
|
+
file-sync, and final-rename lifecycle. Escaping symlinks still fail with
|
|
134
|
+
`path-alias`; filesystems without hard-link support fail with
|
|
135
|
+
`helper-unavailable`.
|
|
136
|
+
|
|
137
|
+
Exact bigint parent and workspace identities are rechecked before moving
|
|
138
|
+
output to the sibling path to reject observed replacements. Cleanup uses the
|
|
139
|
+
compatible [`withTempFile` ownership contract](temp.md#withtempfile); this
|
|
140
|
+
output option does not expose `cleanupSafety: "require-bounded"`. A moved or
|
|
141
|
+
replaced parent or workspace can leave artifacts, and a workspace substituted
|
|
142
|
+
in the final check-to-pathname-recursive-removal gap can redirect traversal.
|
|
143
|
+
The option does not promise cleanup through a retained directory after a
|
|
144
|
+
rename. The existing Windows and JavaScript pathname-guard limitations remain,
|
|
145
|
+
with no additional permissions or durability guarantee. Native-off publication
|
|
146
|
+
is supported only where hard links are available. See the
|
|
147
|
+
[producer-isolation contract](temp.md#sibling-temp-writes)
|
|
148
|
+
for cleanup and pathname-race details. The option affects only `staging: "sibling"`;
|
|
149
|
+
with `staging: "workspace"`, it is redundant and harmless because the producer
|
|
150
|
+
already uses a private workspace. Omitting it leaves both staging defaults
|
|
151
|
+
unchanged.
|
|
152
|
+
|
|
99
153
|
## Why not pass the final path to the library?
|
|
100
154
|
|
|
101
155
|
If a target parent can be swapped after validation, handing an external library
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# Path case probing
|
|
2
|
+
|
|
3
|
+
`probePathCaseInsensitiveSync()` observes whether a path's lookup location
|
|
4
|
+
folds ASCII case. It returns `true`, `false`, or `undefined` when the observation
|
|
5
|
+
cannot establish an answer. It does not infer a filesystem property from the
|
|
6
|
+
operating system or cache its result.
|
|
7
|
+
|
|
8
|
+
```ts
|
|
9
|
+
import { probePathCaseInsensitiveSync } from "@openclaw/fs-safe/advanced";
|
|
10
|
+
|
|
11
|
+
const insensitive = probePathCaseInsensitiveSync("/srv/data/future.json", {
|
|
12
|
+
allowTemporaryProbe: false,
|
|
13
|
+
});
|
|
14
|
+
if (insensitive === undefined) {
|
|
15
|
+
// The application decides how to handle an unavailable observation.
|
|
16
|
+
}
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Lookup location
|
|
20
|
+
|
|
21
|
+
The input is resolved with Node's `path.resolve()`. Existing targets, including
|
|
22
|
+
directories and final symlinks, are first compared by basename in their parent.
|
|
23
|
+
The probe does not follow a final symlink to decide the target's case behavior.
|
|
24
|
+
Parent aliases are followed. For a missing path, it walks to the nearest existing
|
|
25
|
+
directory whose metadata can be read, without creating the missing directories.
|
|
26
|
+
An unreadable directory listing returns `undefined`.
|
|
27
|
+
|
|
28
|
+
The probe checks existing directory entries before considering a temporary
|
|
29
|
+
file. Separately listed case variants count as distinct entries even when they
|
|
30
|
+
are hardlinks to the same inode. Identity comparisons retain bigint precision;
|
|
31
|
+
unknown Windows identities do not count as matches. The original entry is
|
|
32
|
+
rechecked after looking up its case variant, so its disappearance or replacement
|
|
33
|
+
invalidates the observation. A detected directory replacement also returns
|
|
34
|
+
`undefined`.
|
|
35
|
+
|
|
36
|
+
## Temporary probes and cleanup
|
|
37
|
+
|
|
38
|
+
`allowTemporaryProbe` defaults to `true`. When existing entries give no answer,
|
|
39
|
+
the helper exclusively creates one empty `.fs-safe-case-probe-*` file in the
|
|
40
|
+
selected directory at mode `0o600`. It uses the existing temporary-file owner
|
|
41
|
+
to retain the descriptor and exact cleanup identity. Successful ordinary
|
|
42
|
+
completion removes the probe and closes the descriptor.
|
|
43
|
+
|
|
44
|
+
Set `allowTemporaryProbe: false` for strictly read-only observation. In that
|
|
45
|
+
mode an empty directory, or one with no useful ASCII-case names, returns
|
|
46
|
+
`undefined` without creating a temporary file. Temporary probing can change
|
|
47
|
+
directory timestamps and trigger filesystem watchers even when cleanup succeeds.
|
|
48
|
+
|
|
49
|
+
Operational failures, unverified identities, changed entries, and cleanup
|
|
50
|
+
failures return `undefined`. A substituted or hardlinked temporary entry is
|
|
51
|
+
preserved. When cleanup fails operationally, the existing owner retains its
|
|
52
|
+
identity-bound process-exit retry. A creation whose identity cannot be obtained
|
|
53
|
+
may leave an empty file; the helper never guesses cleanup ownership. Therefore
|
|
54
|
+
`undefined` does not promise that no temporary artifact remains.
|
|
55
|
+
|
|
56
|
+
## Limits
|
|
57
|
+
|
|
58
|
+
This is a local ASCII-case observation, not a Unicode-normalization test,
|
|
59
|
+
filesystem-wide guarantee, lock, or authorization receipt. Directory enumeration
|
|
60
|
+
and metadata lookups are separate operations. Concurrent changes can invalidate
|
|
61
|
+
or immediately stale a result, and the final identity check and unlink are not
|
|
62
|
+
an atomic conditional deletion. Use temporary probing only where creating a
|
|
63
|
+
temporary file is permitted. The caller retains any admission, serialization,
|
|
64
|
+
fallback, or later mutation policy.
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# Resolving an existing path prefix
|
|
2
|
+
|
|
3
|
+
`resolvePathPrefixSync()` follows filesystem path components until the first
|
|
4
|
+
missing entry. It returns a canonical existing prefix and the unprocessed
|
|
5
|
+
suffix separately, including dangling symlink targets.
|
|
6
|
+
|
|
7
|
+
```ts
|
|
8
|
+
import { resolvePathPrefixSync, type ResolvedPathPrefix } from "@openclaw/fs-safe/advanced";
|
|
9
|
+
|
|
10
|
+
const observed: ResolvedPathPrefix = resolvePathPrefixSync("/srv/data/future/file.json");
|
|
11
|
+
// When /srv/data exists but future does not:
|
|
12
|
+
// observed.existingPath is the canonical spelling of /srv/data.
|
|
13
|
+
// observed.unresolvedSegments is ["future", "file.json"].
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
The result has three readonly fields:
|
|
17
|
+
|
|
18
|
+
| Field | Meaning |
|
|
19
|
+
| --- | --- |
|
|
20
|
+
| `absolutePath` | Input anchored to the current directory or Windows drive, with raw path components retained and Windows separators converted to backslashes. |
|
|
21
|
+
| `existingPath` | Existing prefix canonicalized by fs-safe's native-realpath owner. This may be a file when the entire path exists. |
|
|
22
|
+
| `unresolvedSegments` | Components from the first missing entry onward, after expanding any earlier symlinks. Empty when the entire path exists. |
|
|
23
|
+
|
|
24
|
+
## Physical traversal and missing paths
|
|
25
|
+
|
|
26
|
+
The helper resolves `link/..` from the link's physical target. It does not use
|
|
27
|
+
`path.resolve()` on the full input or a symlink target, because lexical
|
|
28
|
+
normalization would erase that traversal. Relative inputs use the current
|
|
29
|
+
directory; Windows drive-relative inputs use Node's current directory for that
|
|
30
|
+
drive. A root-relative Windows symlink target retains its containing link's
|
|
31
|
+
drive or share root. Windows junctions and full UNC share roots are supported.
|
|
32
|
+
|
|
33
|
+
At the first `ENOENT`, traversal stops. A suffix such as
|
|
34
|
+
`missing/../live.sqlite` remains `["missing", "..", "live.sqlite"]`, even if
|
|
35
|
+
`live.sqlite` exists beside the missing component. Dot components, repeated
|
|
36
|
+
separators, and a trailing separator in the unresolved suffix are retained.
|
|
37
|
+
Normalizing that suffix would invent an alias to a file the filesystem cannot
|
|
38
|
+
reach through the missing directory. The caller owns any application-specific
|
|
39
|
+
comparison or prospective-path policy.
|
|
40
|
+
|
|
41
|
+
## Failures and limits
|
|
42
|
+
|
|
43
|
+
Only `ENOENT` from component inspection produces a missing suffix. Permission,
|
|
44
|
+
I/O, non-directory traversal, symlink-reading, and final canonicalization
|
|
45
|
+
failures propagate. A vanished symlink that was already observed is an error,
|
|
46
|
+
not an unprocessed missing component. NUL bytes reject with `invalid-path`.
|
|
47
|
+
|
|
48
|
+
Resolution rejects with `ELOOP` after 64 symlink expansions or a repeated
|
|
49
|
+
resolution state. The state retains exact bigint device/inode identity and
|
|
50
|
+
the remaining suffix, so revisiting a link with a shorter suffix is permitted.
|
|
51
|
+
Traversing through a non-directory, including `file/..`, `file/.`, or `file/`,
|
|
52
|
+
rejects with `ENOTDIR`.
|
|
53
|
+
|
|
54
|
+
Dot and parent components require the directory's search permission before
|
|
55
|
+
they are collapsed. Native realpath alone does not establish this permission
|
|
56
|
+
on every platform. Empty components from repeated or trailing separators do
|
|
57
|
+
not introduce a `.` lookup.
|
|
58
|
+
|
|
59
|
+
Raw component queues of at most 32 entries retain the legacy small-array
|
|
60
|
+
consumption path. After both the initial parse and every symlink expansion, a
|
|
61
|
+
longer queue uses forward cursor bookkeeping instead of moving the unprocessed
|
|
62
|
+
suffix for every component. The fixed small-queue bound limits repeated front
|
|
63
|
+
removal while retaining legacy shift-based consumption for shallow paths. This
|
|
64
|
+
asymptotic bound is not a platform performance result; performance acceptance
|
|
65
|
+
requires separate benchmark evidence. Callers should still apply their own
|
|
66
|
+
input-size limits: the helper is synchronous, retains the raw suffix, and
|
|
67
|
+
performs filesystem work for each non-empty existing component.
|
|
68
|
+
|
|
69
|
+
This is a read-only path observation. It neither pins files nor creates a root
|
|
70
|
+
boundary, authorizes access, or guarantees a consistent snapshot during
|
|
71
|
+
concurrent changes. Results can become stale immediately. Use a guarded Root
|
|
72
|
+
operation for subsequent access to untrusted paths; keep any database ownership,
|
|
73
|
+
cache invalidation, and mutation policy with the caller. Native configuration
|
|
74
|
+
and Bun realpath limitations follow the existing [runtime contract](install.md#bun-runtime).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# pathScope()
|
|
2
2
|
|
|
3
|
-
`pathScope()`
|
|
3
|
+
`pathScope()` prepares absolute paths and returns plain `{ ok, path }` results. `resolve()` and `resolveAll()` check lexical containment without touching the filesystem; `existing()`, `files()`, and `writable()` add the filesystem checks described below. Use it to prepare paths before handing them to another library, whose file-opening and mutation behavior still applies.
|
|
4
4
|
|
|
5
5
|
```ts
|
|
6
6
|
import { pathScope } from "@openclaw/fs-safe/advanced";
|