@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.
Files changed (1292) hide show
  1. package/assets/activity.svg +3 -0
  2. package/assets/icon.png +0 -0
  3. package/dist/index.js +49 -75
  4. package/node_modules/@openclaw/fs-safe/CHANGELOG.md +487 -0
  5. package/node_modules/@openclaw/fs-safe/LICENSE +1 -0
  6. package/node_modules/@openclaw/fs-safe/README.md +106 -16
  7. package/node_modules/@openclaw/fs-safe/dist/absolute-path.d.ts +0 -1
  8. package/node_modules/@openclaw/fs-safe/dist/absolute-path.js +30 -14
  9. package/node_modules/@openclaw/fs-safe/dist/advanced.d.ts +13 -3
  10. package/node_modules/@openclaw/fs-safe/dist/advanced.js +11 -1
  11. package/node_modules/@openclaw/fs-safe/dist/archive-crc32.d.ts +0 -1
  12. package/node_modules/@openclaw/fs-safe/dist/archive-crc32.js +6 -1
  13. package/node_modules/@openclaw/fs-safe/dist/archive-deadline.d.ts +0 -1
  14. package/node_modules/@openclaw/fs-safe/dist/archive-deadline.js +23 -25
  15. package/node_modules/@openclaw/fs-safe/dist/archive-durability.d.ts +23 -0
  16. package/node_modules/@openclaw/fs-safe/dist/archive-durability.js +180 -0
  17. package/node_modules/@openclaw/fs-safe/dist/archive-entry.d.ts +0 -1
  18. package/node_modules/@openclaw/fs-safe/dist/archive-entry.js +8 -8
  19. package/node_modules/@openclaw/fs-safe/dist/archive-errors.d.ts +0 -1
  20. package/node_modules/@openclaw/fs-safe/dist/archive-gzip-tail.d.ts +3 -1
  21. package/node_modules/@openclaw/fs-safe/dist/archive-gzip-tail.js +33 -8
  22. package/node_modules/@openclaw/fs-safe/dist/archive-input.d.ts +0 -1
  23. package/node_modules/@openclaw/fs-safe/dist/archive-input.js +14 -8
  24. package/node_modules/@openclaw/fs-safe/dist/archive-kind.d.ts +0 -2
  25. package/node_modules/@openclaw/fs-safe/dist/archive-kind.js +8 -19
  26. package/node_modules/@openclaw/fs-safe/dist/archive-limits.d.ts +0 -1
  27. package/node_modules/@openclaw/fs-safe/dist/archive-merge.d.ts +8 -4
  28. package/node_modules/@openclaw/fs-safe/dist/archive-merge.js +185 -59
  29. package/node_modules/@openclaw/fs-safe/dist/archive-parser-errors.d.ts +0 -1
  30. package/node_modules/@openclaw/fs-safe/dist/archive-parser.wasm +0 -0
  31. package/node_modules/@openclaw/fs-safe/dist/archive-plan.d.ts +72 -2
  32. package/node_modules/@openclaw/fs-safe/dist/archive-plan.js +86 -22
  33. package/node_modules/@openclaw/fs-safe/dist/archive-read.d.ts +0 -1
  34. package/node_modules/@openclaw/fs-safe/dist/archive-read.js +132 -114
  35. package/node_modules/@openclaw/fs-safe/dist/archive-staging.d.ts +6 -4
  36. package/node_modules/@openclaw/fs-safe/dist/archive-staging.js +100 -42
  37. package/node_modules/@openclaw/fs-safe/dist/archive-tar-stream.d.ts +14 -5
  38. package/node_modules/@openclaw/fs-safe/dist/archive-tar-stream.js +68 -36
  39. package/node_modules/@openclaw/fs-safe/dist/archive-tar-wasm.d.ts +17 -6
  40. package/node_modules/@openclaw/fs-safe/dist/archive-tar-wasm.js +129 -25
  41. package/node_modules/@openclaw/fs-safe/dist/archive-zip-admission.d.ts +2 -3
  42. package/node_modules/@openclaw/fs-safe/dist/archive-zip-admission.js +50 -14
  43. package/node_modules/@openclaw/fs-safe/dist/archive-zip-count.d.ts +0 -1
  44. package/node_modules/@openclaw/fs-safe/dist/archive-zip-count.js +21 -1
  45. package/node_modules/@openclaw/fs-safe/dist/archive-zip-directory.d.ts +7 -1
  46. package/node_modules/@openclaw/fs-safe/dist/archive-zip-directory.js +38 -3
  47. package/node_modules/@openclaw/fs-safe/dist/archive-zip-entry.d.ts +6 -3
  48. package/node_modules/@openclaw/fs-safe/dist/archive-zip-entry.js +24 -9
  49. package/node_modules/@openclaw/fs-safe/dist/archive-zip-integrity.d.ts +0 -1
  50. package/node_modules/@openclaw/fs-safe/dist/archive-zip-integrity.js +3 -4
  51. package/node_modules/@openclaw/fs-safe/dist/archive-zip-loader.d.ts +8 -0
  52. package/node_modules/@openclaw/fs-safe/dist/archive-zip-loader.js +147 -0
  53. package/node_modules/@openclaw/fs-safe/dist/archive-zip-manifest.d.ts +4 -0
  54. package/node_modules/@openclaw/fs-safe/dist/archive-zip-manifest.js +22 -0
  55. package/node_modules/@openclaw/fs-safe/dist/archive-zip-names.d.ts +7 -2
  56. package/node_modules/@openclaw/fs-safe/dist/archive-zip-names.js +67 -18
  57. package/node_modules/@openclaw/fs-safe/dist/archive-zip-preflight.d.ts +2 -4
  58. package/node_modules/@openclaw/fs-safe/dist/archive-zip-preflight.js +4 -35
  59. package/node_modules/@openclaw/fs-safe/dist/archive.d.ts +8 -6
  60. package/node_modules/@openclaw/fs-safe/dist/archive.js +225 -171
  61. package/node_modules/@openclaw/fs-safe/dist/async-lock.d.ts +0 -1
  62. package/node_modules/@openclaw/fs-safe/dist/atomic.d.ts +3 -2
  63. package/node_modules/@openclaw/fs-safe/dist/bounded-read-stream.d.ts +0 -2
  64. package/node_modules/@openclaw/fs-safe/dist/bounded-read-stream.js +0 -6
  65. package/node_modules/@openclaw/fs-safe/dist/bounded-read.d.ts +12 -1
  66. package/node_modules/@openclaw/fs-safe/dist/bounded-read.js +83 -46
  67. package/node_modules/@openclaw/fs-safe/dist/byte-budget.d.ts +0 -1
  68. package/node_modules/@openclaw/fs-safe/dist/byte-view.d.ts +2 -0
  69. package/node_modules/@openclaw/fs-safe/dist/byte-view.js +13 -0
  70. package/node_modules/@openclaw/fs-safe/dist/clone-metadata.d.ts +19 -0
  71. package/node_modules/@openclaw/fs-safe/dist/clone-metadata.js +36 -0
  72. package/node_modules/@openclaw/fs-safe/dist/config.d.ts +0 -1
  73. package/node_modules/@openclaw/fs-safe/dist/containment.d.ts +0 -1
  74. package/node_modules/@openclaw/fs-safe/dist/copy-file-input.d.ts +21 -0
  75. package/node_modules/@openclaw/fs-safe/dist/copy-file-input.js +71 -0
  76. package/node_modules/@openclaw/fs-safe/dist/copy-policy.d.ts +2 -0
  77. package/node_modules/@openclaw/fs-safe/dist/copy-policy.js +8 -0
  78. package/node_modules/@openclaw/fs-safe/dist/copy-publication.d.ts +20 -0
  79. package/node_modules/@openclaw/fs-safe/dist/copy-publication.js +33 -0
  80. package/node_modules/@openclaw/fs-safe/dist/copy-tree-portable.d.ts +8 -0
  81. package/node_modules/@openclaw/fs-safe/dist/copy-tree-portable.js +245 -0
  82. package/node_modules/@openclaw/fs-safe/dist/copy.d.ts +15 -0
  83. package/node_modules/@openclaw/fs-safe/dist/copy.js +143 -0
  84. package/node_modules/@openclaw/fs-safe/dist/create-owned-file.d.ts +7 -0
  85. package/node_modules/@openclaw/fs-safe/dist/create-owned-file.js +16 -0
  86. package/node_modules/@openclaw/fs-safe/dist/create.d.ts +17 -0
  87. package/node_modules/@openclaw/fs-safe/dist/create.js +388 -0
  88. package/node_modules/@openclaw/fs-safe/dist/creation-boundary.d.ts +60 -0
  89. package/node_modules/@openclaw/fs-safe/dist/creation-boundary.js +371 -0
  90. package/node_modules/@openclaw/fs-safe/dist/deny-mutations.d.ts +2 -3
  91. package/node_modules/@openclaw/fs-safe/dist/deny-mutations.js +61 -35
  92. package/node_modules/@openclaw/fs-safe/dist/device-path.d.ts +0 -1
  93. package/node_modules/@openclaw/fs-safe/dist/device-path.js +5 -3
  94. package/node_modules/@openclaw/fs-safe/dist/directory-durability.d.ts +7 -8
  95. package/node_modules/@openclaw/fs-safe/dist/directory-durability.js +48 -61
  96. package/node_modules/@openclaw/fs-safe/dist/directory-entry-path.d.ts +2 -0
  97. package/node_modules/@openclaw/fs-safe/dist/directory-entry-path.js +21 -0
  98. package/node_modules/@openclaw/fs-safe/dist/directory-guard.d.ts +31 -7
  99. package/node_modules/@openclaw/fs-safe/dist/directory-guard.js +136 -39
  100. package/node_modules/@openclaw/fs-safe/dist/directory-mode-node.d.ts +14 -1
  101. package/node_modules/@openclaw/fs-safe/dist/directory-mode-node.js +125 -9
  102. package/node_modules/@openclaw/fs-safe/dist/directory-mode-owner.d.ts +0 -1
  103. package/node_modules/@openclaw/fs-safe/dist/directory-mode-owner.js +5 -5
  104. package/node_modules/@openclaw/fs-safe/dist/directory-receipt.d.ts +23 -0
  105. package/node_modules/@openclaw/fs-safe/dist/directory-receipt.js +123 -0
  106. package/node_modules/@openclaw/fs-safe/dist/durability.d.ts +3 -3
  107. package/node_modules/@openclaw/fs-safe/dist/durability.js +1 -1
  108. package/node_modules/@openclaw/fs-safe/dist/effective-uid.d.ts +1 -0
  109. package/node_modules/@openclaw/fs-safe/dist/effective-uid.js +25 -0
  110. package/node_modules/@openclaw/fs-safe/dist/error-detail.d.ts +0 -1
  111. package/node_modules/@openclaw/fs-safe/dist/error-detail.js +4 -1
  112. package/node_modules/@openclaw/fs-safe/dist/errors.d.ts +0 -1
  113. package/node_modules/@openclaw/fs-safe/dist/file-cleanup.d.ts +19 -0
  114. package/node_modules/@openclaw/fs-safe/dist/file-cleanup.js +81 -0
  115. package/node_modules/@openclaw/fs-safe/dist/file-contents.d.ts +5 -0
  116. package/node_modules/@openclaw/fs-safe/dist/file-contents.js +40 -0
  117. package/node_modules/@openclaw/fs-safe/dist/file-handle-transfer.d.ts +15 -0
  118. package/node_modules/@openclaw/fs-safe/dist/file-handle-transfer.js +190 -0
  119. package/node_modules/@openclaw/fs-safe/dist/file-hash.d.ts +9 -3
  120. package/node_modules/@openclaw/fs-safe/dist/file-hash.js +273 -50
  121. package/node_modules/@openclaw/fs-safe/dist/file-identity.d.ts +0 -1
  122. package/node_modules/@openclaw/fs-safe/dist/file-identity.js +18 -4
  123. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-acquisition.d.ts +22 -0
  124. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-acquisition.js +98 -0
  125. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-admission.d.ts +17 -0
  126. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-admission.js +54 -0
  127. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-acquire.d.ts +3 -0
  128. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-acquire.js +303 -0
  129. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-arbitration.d.ts +17 -0
  130. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-arbitration.js +66 -0
  131. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-held.d.ts +32 -0
  132. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-held.js +395 -0
  133. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-io.d.ts +43 -0
  134. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-io.js +209 -0
  135. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-mutation.d.ts +16 -0
  136. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-mutation.js +275 -0
  137. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-options.d.ts +19 -0
  138. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-options.js +58 -0
  139. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-registration.d.ts +1 -0
  140. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-registration.js +90 -0
  141. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root.d.ts +36 -0
  142. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root.js +288 -0
  143. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-stale-admission.d.ts +19 -0
  144. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-stale-admission.js +199 -0
  145. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync.d.ts +4 -22
  146. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync.js +226 -234
  147. package/node_modules/@openclaw/fs-safe/dist/file-lock.d.ts +0 -1
  148. package/node_modules/@openclaw/fs-safe/dist/file-lock.js +29 -9
  149. package/node_modules/@openclaw/fs-safe/dist/file-observation.d.ts +1 -2
  150. package/node_modules/@openclaw/fs-safe/dist/file-store-boundary.d.ts +9 -4
  151. package/node_modules/@openclaw/fs-safe/dist/file-store-boundary.js +69 -81
  152. package/node_modules/@openclaw/fs-safe/dist/file-store-prune.d.ts +0 -1
  153. package/node_modules/@openclaw/fs-safe/dist/file-store-prune.js +20 -6
  154. package/node_modules/@openclaw/fs-safe/dist/file-store-sync-directory.d.ts +15 -0
  155. package/node_modules/@openclaw/fs-safe/dist/file-store-sync-directory.js +319 -0
  156. package/node_modules/@openclaw/fs-safe/dist/file-store-sync-write.d.ts +1 -1
  157. package/node_modules/@openclaw/fs-safe/dist/file-store-sync-write.js +74 -73
  158. package/node_modules/@openclaw/fs-safe/dist/file-store.d.ts +4 -1
  159. package/node_modules/@openclaw/fs-safe/dist/file-store.js +71 -66
  160. package/node_modules/@openclaw/fs-safe/dist/file-sync.d.ts +0 -1
  161. package/node_modules/@openclaw/fs-safe/dist/filename.d.ts +1 -1
  162. package/node_modules/@openclaw/fs-safe/dist/filename.js +83 -36
  163. package/node_modules/@openclaw/fs-safe/dist/fs.d.ts +0 -1
  164. package/node_modules/@openclaw/fs-safe/dist/fs.js +3 -3
  165. package/node_modules/@openclaw/fs-safe/dist/guarded-mkdir.d.ts +12 -1
  166. package/node_modules/@openclaw/fs-safe/dist/guarded-mkdir.js +227 -33
  167. package/node_modules/@openclaw/fs-safe/dist/guarded-mutation.d.ts +2 -7
  168. package/node_modules/@openclaw/fs-safe/dist/guarded-mutation.js +15 -16
  169. package/node_modules/@openclaw/fs-safe/dist/guest-dispatch-python.d.ts +1 -0
  170. package/node_modules/@openclaw/fs-safe/dist/guest-dispatch-python.js +68 -0
  171. package/node_modules/@openclaw/fs-safe/dist/guest-native-python.d.ts +3 -0
  172. package/node_modules/@openclaw/fs-safe/dist/guest-native-python.js +135 -0
  173. package/node_modules/@openclaw/fs-safe/dist/guest.d.ts +8 -0
  174. package/node_modules/@openclaw/fs-safe/dist/guest.js +424 -0
  175. package/node_modules/@openclaw/fs-safe/dist/home-dir.d.ts +0 -1
  176. package/node_modules/@openclaw/fs-safe/dist/home-dir.js +81 -16
  177. package/node_modules/@openclaw/fs-safe/dist/index.d.ts +9 -7
  178. package/node_modules/@openclaw/fs-safe/dist/install-path.d.ts +6 -1
  179. package/node_modules/@openclaw/fs-safe/dist/install-path.js +73 -31
  180. package/node_modules/@openclaw/fs-safe/dist/json-document-store.d.ts +3 -1
  181. package/node_modules/@openclaw/fs-safe/dist/json-document-store.js +23 -15
  182. package/node_modules/@openclaw/fs-safe/dist/json-durable-queue-directory.d.ts +13 -1
  183. package/node_modules/@openclaw/fs-safe/dist/json-durable-queue-directory.js +137 -3
  184. package/node_modules/@openclaw/fs-safe/dist/json-durable-queue-ownership.d.ts +8 -2
  185. package/node_modules/@openclaw/fs-safe/dist/json-durable-queue-ownership.js +153 -90
  186. package/node_modules/@openclaw/fs-safe/dist/json-durable-queue-read.d.ts +5 -0
  187. package/node_modules/@openclaw/fs-safe/dist/json-durable-queue-read.js +65 -0
  188. package/node_modules/@openclaw/fs-safe/dist/json-durable-queue.d.ts +1 -2
  189. package/node_modules/@openclaw/fs-safe/dist/json-durable-queue.js +93 -261
  190. package/node_modules/@openclaw/fs-safe/dist/json-store.d.ts +0 -1
  191. package/node_modules/@openclaw/fs-safe/dist/json-store.js +4 -1
  192. package/node_modules/@openclaw/fs-safe/dist/json-stringify.d.ts +0 -1
  193. package/node_modules/@openclaw/fs-safe/dist/json.d.ts +0 -1
  194. package/node_modules/@openclaw/fs-safe/dist/json.js +90 -110
  195. package/node_modules/@openclaw/fs-safe/dist/local-file-access.d.ts +0 -1
  196. package/node_modules/@openclaw/fs-safe/dist/local-file-access.js +7 -10
  197. package/node_modules/@openclaw/fs-safe/dist/local-file-descriptor.d.ts +16 -0
  198. package/node_modules/@openclaw/fs-safe/dist/local-file-descriptor.js +84 -0
  199. package/node_modules/@openclaw/fs-safe/dist/local-roots.d.ts +0 -1
  200. package/node_modules/@openclaw/fs-safe/dist/local-roots.js +63 -38
  201. package/node_modules/@openclaw/fs-safe/dist/lock-config.d.ts +0 -1
  202. package/node_modules/@openclaw/fs-safe/dist/move-path-cleanup.d.ts +7 -20
  203. package/node_modules/@openclaw/fs-safe/dist/move-path-cleanup.js +100 -37
  204. package/node_modules/@openclaw/fs-safe/dist/move-path-stage.d.ts +7 -0
  205. package/node_modules/@openclaw/fs-safe/dist/move-path-stage.js +56 -0
  206. package/node_modules/@openclaw/fs-safe/dist/move-path.d.ts +0 -1
  207. package/node_modules/@openclaw/fs-safe/dist/move-path.js +120 -64
  208. package/node_modules/@openclaw/fs-safe/dist/mutation-authority.d.ts +8 -0
  209. package/node_modules/@openclaw/fs-safe/dist/mutation-authority.js +36 -0
  210. package/node_modules/@openclaw/fs-safe/dist/native-binding.d.ts +71 -2
  211. package/node_modules/@openclaw/fs-safe/dist/native-binding.js +8 -1
  212. package/node_modules/@openclaw/fs-safe/dist/native-config.d.ts +0 -1
  213. package/node_modules/@openclaw/fs-safe/dist/native-directory-observation.d.ts +16 -0
  214. package/node_modules/@openclaw/fs-safe/dist/native-directory-observation.js +37 -0
  215. package/node_modules/@openclaw/fs-safe/dist/native-fallback-warning.d.ts +3 -0
  216. package/node_modules/@openclaw/fs-safe/dist/native-fallback-warning.js +11 -0
  217. package/node_modules/@openclaw/fs-safe/dist/native-operations.d.ts +1 -7
  218. package/node_modules/@openclaw/fs-safe/dist/native-operations.js +6 -27
  219. package/node_modules/@openclaw/fs-safe/dist/native-parent-admission.d.ts +34 -0
  220. package/node_modules/@openclaw/fs-safe/dist/native-parent-admission.js +147 -0
  221. package/node_modules/@openclaw/fs-safe/dist/native-pinned-write-windows.d.ts +2 -4
  222. package/node_modules/@openclaw/fs-safe/dist/native-pinned-write-windows.js +194 -38
  223. package/node_modules/@openclaw/fs-safe/dist/native-pinned-write.d.ts +1 -2
  224. package/node_modules/@openclaw/fs-safe/dist/native-pinned-write.js +360 -49
  225. package/node_modules/@openclaw/fs-safe/dist/native-policy-directory-observation.d.ts +11 -0
  226. package/node_modules/@openclaw/fs-safe/dist/native-policy-directory-observation.js +61 -0
  227. package/node_modules/@openclaw/fs-safe/dist/native-policy-parent-windows.d.ts +13 -0
  228. package/node_modules/@openclaw/fs-safe/dist/native-policy-parent-windows.js +209 -0
  229. package/node_modules/@openclaw/fs-safe/dist/native-rename-outcome.d.ts +3 -0
  230. package/node_modules/@openclaw/fs-safe/dist/native-rename-outcome.js +8 -0
  231. package/node_modules/@openclaw/fs-safe/dist/native-staged-file.d.ts +23 -9
  232. package/node_modules/@openclaw/fs-safe/dist/native-staged-file.js +180 -100
  233. package/node_modules/@openclaw/fs-safe/dist/native.d.ts +1 -2
  234. package/node_modules/@openclaw/fs-safe/dist/native.js +9 -4
  235. package/node_modules/@openclaw/fs-safe/dist/opened-file-failure.d.ts +1 -2
  236. package/node_modules/@openclaw/fs-safe/dist/opened-file-failure.js +3 -2
  237. package/node_modules/@openclaw/fs-safe/dist/opened-realpath.d.ts +0 -1
  238. package/node_modules/@openclaw/fs-safe/dist/opened-realpath.js +16 -6
  239. package/node_modules/@openclaw/fs-safe/dist/output.d.ts +2 -1
  240. package/node_modules/@openclaw/fs-safe/dist/output.js +28 -12
  241. package/node_modules/@openclaw/fs-safe/dist/overwrite-file-handle.d.ts +7 -0
  242. package/node_modules/@openclaw/fs-safe/dist/overwrite-file-handle.js +46 -0
  243. package/node_modules/@openclaw/fs-safe/dist/owner-dacl.d.ts +0 -1
  244. package/node_modules/@openclaw/fs-safe/dist/owner-dacl.js +12 -4
  245. package/node_modules/@openclaw/fs-safe/dist/path-case.d.ts +6 -0
  246. package/node_modules/@openclaw/fs-safe/dist/path-case.js +136 -0
  247. package/node_modules/@openclaw/fs-safe/dist/path-policy.d.ts +0 -1
  248. package/node_modules/@openclaw/fs-safe/dist/path-policy.js +7 -2
  249. package/node_modules/@openclaw/fs-safe/dist/path-prefix.d.ts +6 -0
  250. package/node_modules/@openclaw/fs-safe/dist/path-prefix.js +104 -0
  251. package/node_modules/@openclaw/fs-safe/dist/path-scope-lexical.d.ts +13 -0
  252. package/node_modules/@openclaw/fs-safe/dist/path-scope-lexical.js +37 -0
  253. package/node_modules/@openclaw/fs-safe/dist/path-segment-route.d.ts +6 -0
  254. package/node_modules/@openclaw/fs-safe/dist/path-segment-route.js +24 -0
  255. package/node_modules/@openclaw/fs-safe/dist/path-suffix-aliases.d.ts +11 -0
  256. package/node_modules/@openclaw/fs-safe/dist/path-suffix-aliases.js +394 -0
  257. package/node_modules/@openclaw/fs-safe/dist/path.d.ts +0 -1
  258. package/node_modules/@openclaw/fs-safe/dist/path.js +40 -7
  259. package/node_modules/@openclaw/fs-safe/dist/permission-exec.d.ts +2 -1
  260. package/node_modules/@openclaw/fs-safe/dist/permission-exec.js +144 -21
  261. package/node_modules/@openclaw/fs-safe/dist/permissions-public.d.ts +0 -1
  262. package/node_modules/@openclaw/fs-safe/dist/permissions-windows.d.ts +2 -10
  263. package/node_modules/@openclaw/fs-safe/dist/permissions-windows.js +106 -83
  264. package/node_modules/@openclaw/fs-safe/dist/permissions.d.ts +0 -1
  265. package/node_modules/@openclaw/fs-safe/dist/permissions.js +37 -30
  266. package/node_modules/@openclaw/fs-safe/dist/pinned-mutation-admission.d.ts +24 -0
  267. package/node_modules/@openclaw/fs-safe/dist/pinned-mutation-admission.js +419 -0
  268. package/node_modules/@openclaw/fs-safe/dist/pinned-mutation-observation.d.ts +38 -0
  269. package/node_modules/@openclaw/fs-safe/dist/pinned-mutation-observation.js +205 -0
  270. package/node_modules/@openclaw/fs-safe/dist/pinned-mutation-shared-route.d.ts +24 -0
  271. package/node_modules/@openclaw/fs-safe/dist/pinned-mutation-shared-route.js +70 -0
  272. package/node_modules/@openclaw/fs-safe/dist/pinned-open.d.ts +7 -1
  273. package/node_modules/@openclaw/fs-safe/dist/pinned-open.js +35 -10
  274. package/node_modules/@openclaw/fs-safe/dist/pinned-operation.d.ts +1 -2
  275. package/node_modules/@openclaw/fs-safe/dist/pinned-operation.js +4 -17
  276. package/node_modules/@openclaw/fs-safe/dist/pinned-write-input.d.ts +3 -0
  277. package/node_modules/@openclaw/fs-safe/dist/pinned-write-input.js +35 -0
  278. package/node_modules/@openclaw/fs-safe/dist/pinned-write-mode.d.ts +4 -0
  279. package/node_modules/@openclaw/fs-safe/dist/pinned-write-mode.js +31 -0
  280. package/node_modules/@openclaw/fs-safe/dist/pinned-write-staged.d.ts +5 -0
  281. package/node_modules/@openclaw/fs-safe/dist/pinned-write-staged.js +185 -0
  282. package/node_modules/@openclaw/fs-safe/dist/pinned-write-types.d.ts +68 -0
  283. package/node_modules/@openclaw/fs-safe/dist/pinned-write.d.ts +6 -30
  284. package/node_modules/@openclaw/fs-safe/dist/pinned-write.js +202 -154
  285. package/node_modules/@openclaw/fs-safe/dist/positional-read.d.ts +8 -0
  286. package/node_modules/@openclaw/fs-safe/dist/positional-read.js +36 -0
  287. package/node_modules/@openclaw/fs-safe/dist/private-directory.d.ts +0 -1
  288. package/node_modules/@openclaw/fs-safe/dist/private-directory.js +20 -4
  289. package/node_modules/@openclaw/fs-safe/dist/private-producer-handoff-sync.d.ts +3 -0
  290. package/node_modules/@openclaw/fs-safe/dist/private-producer-handoff-sync.js +72 -0
  291. package/node_modules/@openclaw/fs-safe/dist/private-producer-handoff.d.ts +53 -0
  292. package/node_modules/@openclaw/fs-safe/dist/private-producer-handoff.js +358 -0
  293. package/node_modules/@openclaw/fs-safe/dist/private-temp-workspace.d.ts +2 -40
  294. package/node_modules/@openclaw/fs-safe/dist/private-temp-workspace.js +145 -103
  295. package/node_modules/@openclaw/fs-safe/dist/publish-copy-stage.d.ts +13 -0
  296. package/node_modules/@openclaw/fs-safe/dist/publish-copy-stage.js +56 -0
  297. package/node_modules/@openclaw/fs-safe/dist/publish-file-failure.d.ts +0 -1
  298. package/node_modules/@openclaw/fs-safe/dist/publish-file.d.ts +2 -4
  299. package/node_modules/@openclaw/fs-safe/dist/publish-file.js +110 -144
  300. package/node_modules/@openclaw/fs-safe/dist/read-open-flags.d.ts +0 -1
  301. package/node_modules/@openclaw/fs-safe/dist/read-opened-file.d.ts +0 -1
  302. package/node_modules/@openclaw/fs-safe/dist/realpath.d.ts +3 -0
  303. package/node_modules/@openclaw/fs-safe/dist/realpath.js +43 -0
  304. package/node_modules/@openclaw/fs-safe/dist/recursive-mkdir-path.d.ts +2 -0
  305. package/node_modules/@openclaw/fs-safe/dist/recursive-mkdir-path.js +8 -0
  306. package/node_modules/@openclaw/fs-safe/dist/regular-file.d.ts +0 -1
  307. package/node_modules/@openclaw/fs-safe/dist/regular-file.js +127 -201
  308. package/node_modules/@openclaw/fs-safe/dist/replace-directory.d.ts +0 -1
  309. package/node_modules/@openclaw/fs-safe/dist/replace-directory.js +269 -24
  310. package/node_modules/@openclaw/fs-safe/dist/replace-file-copy-fallback.d.ts +0 -1
  311. package/node_modules/@openclaw/fs-safe/dist/replace-file-copy-fallback.js +130 -120
  312. package/node_modules/@openclaw/fs-safe/dist/replace-file-copy-source.d.ts +0 -1
  313. package/node_modules/@openclaw/fs-safe/dist/replace-file-copy-source.js +36 -42
  314. package/node_modules/@openclaw/fs-safe/dist/replace-file-descriptor.d.ts +0 -1
  315. package/node_modules/@openclaw/fs-safe/dist/replace-file-descriptor.js +16 -17
  316. package/node_modules/@openclaw/fs-safe/dist/replace-file-mode.d.ts +2 -0
  317. package/node_modules/@openclaw/fs-safe/dist/replace-file-mode.js +10 -0
  318. package/node_modules/@openclaw/fs-safe/dist/replace-file-rename-policy.d.ts +1 -3
  319. package/node_modules/@openclaw/fs-safe/dist/replace-file-temp-owner.d.ts +18 -22
  320. package/node_modules/@openclaw/fs-safe/dist/replace-file-temp-owner.js +123 -143
  321. package/node_modules/@openclaw/fs-safe/dist/replace-file.d.ts +4 -4
  322. package/node_modules/@openclaw/fs-safe/dist/replace-file.js +58 -51
  323. package/node_modules/@openclaw/fs-safe/dist/retained-directory-replacement.d.ts +25 -0
  324. package/node_modules/@openclaw/fs-safe/dist/retained-directory-replacement.js +193 -0
  325. package/node_modules/@openclaw/fs-safe/dist/root-boundary.d.ts +29 -0
  326. package/node_modules/@openclaw/fs-safe/dist/root-boundary.js +186 -0
  327. package/node_modules/@openclaw/fs-safe/dist/root-context.d.ts +15 -10
  328. package/node_modules/@openclaw/fs-safe/dist/root-context.js +133 -42
  329. package/node_modules/@openclaw/fs-safe/dist/root-create-input.d.ts +16 -0
  330. package/node_modules/@openclaw/fs-safe/dist/root-create-input.js +93 -0
  331. package/node_modules/@openclaw/fs-safe/dist/root-directory-creation.d.ts +12 -0
  332. package/node_modules/@openclaw/fs-safe/dist/root-directory-creation.js +225 -0
  333. package/node_modules/@openclaw/fs-safe/dist/root-directory-list.d.ts +38 -0
  334. package/node_modules/@openclaw/fs-safe/dist/root-directory-list.js +382 -0
  335. package/node_modules/@openclaw/fs-safe/dist/root-directory.d.ts +22 -0
  336. package/node_modules/@openclaw/fs-safe/dist/root-directory.js +141 -0
  337. package/node_modules/@openclaw/fs-safe/dist/root-entries.d.ts +10 -0
  338. package/node_modules/@openclaw/fs-safe/dist/root-entries.js +61 -0
  339. package/node_modules/@openclaw/fs-safe/dist/root-errors.d.ts +10 -6
  340. package/node_modules/@openclaw/fs-safe/dist/root-errors.js +32 -15
  341. package/node_modules/@openclaw/fs-safe/dist/root-file-final-admission.d.ts +20 -0
  342. package/node_modules/@openclaw/fs-safe/dist/root-file-final-admission.js +86 -0
  343. package/node_modules/@openclaw/fs-safe/dist/root-file.d.ts +2 -1
  344. package/node_modules/@openclaw/fs-safe/dist/root-file.js +113 -25
  345. package/node_modules/@openclaw/fs-safe/dist/root-impl.d.ts +17 -63
  346. package/node_modules/@openclaw/fs-safe/dist/root-impl.js +803 -590
  347. package/node_modules/@openclaw/fs-safe/dist/root-move-noreplace.d.ts +15 -0
  348. package/node_modules/@openclaw/fs-safe/dist/root-move-noreplace.js +205 -0
  349. package/node_modules/@openclaw/fs-safe/dist/root-move-preflight.d.ts +7 -0
  350. package/node_modules/@openclaw/fs-safe/dist/root-move-preflight.js +16 -0
  351. package/node_modules/@openclaw/fs-safe/dist/root-observed-path.d.ts +8 -0
  352. package/node_modules/@openclaw/fs-safe/dist/root-observed-path.js +93 -0
  353. package/node_modules/@openclaw/fs-safe/dist/root-options.d.ts +84 -0
  354. package/node_modules/@openclaw/fs-safe/dist/root-options.js +18 -0
  355. package/node_modules/@openclaw/fs-safe/dist/root-path-errors.d.ts +12 -0
  356. package/node_modules/@openclaw/fs-safe/dist/root-path-errors.js +22 -0
  357. package/node_modules/@openclaw/fs-safe/dist/root-path-existing.d.ts +10 -1
  358. package/node_modules/@openclaw/fs-safe/dist/root-path-existing.js +133 -41
  359. package/node_modules/@openclaw/fs-safe/dist/root-path-observation.d.ts +62 -0
  360. package/node_modules/@openclaw/fs-safe/dist/root-path-observation.js +180 -0
  361. package/node_modules/@openclaw/fs-safe/dist/root-path-stat.d.ts +4 -0
  362. package/node_modules/@openclaw/fs-safe/dist/root-path-stat.js +151 -0
  363. package/node_modules/@openclaw/fs-safe/dist/root-path.d.ts +14 -1
  364. package/node_modules/@openclaw/fs-safe/dist/root-path.js +292 -330
  365. package/node_modules/@openclaw/fs-safe/dist/root-paths-lexical.d.ts +8 -0
  366. package/node_modules/@openclaw/fs-safe/dist/root-paths-lexical.js +22 -0
  367. package/node_modules/@openclaw/fs-safe/dist/root-paths.d.ts +3 -30
  368. package/node_modules/@openclaw/fs-safe/dist/root-paths.js +89 -174
  369. package/node_modules/@openclaw/fs-safe/dist/root-public-types.d.ts +11 -0
  370. package/node_modules/@openclaw/fs-safe/dist/root-public-types.js +1 -0
  371. package/node_modules/@openclaw/fs-safe/dist/root-read-admission.d.ts +25 -0
  372. package/node_modules/@openclaw/fs-safe/dist/root-read-admission.js +86 -0
  373. package/node_modules/@openclaw/fs-safe/dist/root-remove-identity.d.ts +14 -0
  374. package/node_modules/@openclaw/fs-safe/dist/root-remove-identity.js +87 -0
  375. package/node_modules/@openclaw/fs-safe/dist/root-remove-receipt.d.ts +16 -0
  376. package/node_modules/@openclaw/fs-safe/dist/root-remove-receipt.js +37 -0
  377. package/node_modules/@openclaw/fs-safe/dist/root-remove.d.ts +6 -0
  378. package/node_modules/@openclaw/fs-safe/dist/root-remove.js +464 -0
  379. package/node_modules/@openclaw/fs-safe/dist/root-symlink-policy.d.ts +13 -0
  380. package/node_modules/@openclaw/fs-safe/dist/root-symlink-policy.js +34 -0
  381. package/node_modules/@openclaw/fs-safe/dist/root-walk.d.ts +6 -6
  382. package/node_modules/@openclaw/fs-safe/dist/root-walk.js +116 -51
  383. package/node_modules/@openclaw/fs-safe/dist/root-write-admission.d.ts +65 -0
  384. package/node_modules/@openclaw/fs-safe/dist/root-write-admission.js +304 -0
  385. package/node_modules/@openclaw/fs-safe/dist/root-write-compatibility.d.ts +11 -0
  386. package/node_modules/@openclaw/fs-safe/dist/root-write-compatibility.js +23 -0
  387. package/node_modules/@openclaw/fs-safe/dist/root-write-complete-parent.d.ts +41 -0
  388. package/node_modules/@openclaw/fs-safe/dist/root-write-complete-parent.js +180 -0
  389. package/node_modules/@openclaw/fs-safe/dist/root-write-lock-binding.d.ts +14 -0
  390. package/node_modules/@openclaw/fs-safe/dist/root-write-lock-binding.js +162 -0
  391. package/node_modules/@openclaw/fs-safe/dist/root-write-mode.d.ts +2 -1
  392. package/node_modules/@openclaw/fs-safe/dist/root-write-mode.js +22 -11
  393. package/node_modules/@openclaw/fs-safe/dist/root-write-publication.d.ts +23 -0
  394. package/node_modules/@openclaw/fs-safe/dist/root-write-publication.js +85 -0
  395. package/node_modules/@openclaw/fs-safe/dist/root-write-verification.d.ts +1 -2
  396. package/node_modules/@openclaw/fs-safe/dist/root-write-verification.js +35 -37
  397. package/node_modules/@openclaw/fs-safe/dist/root.d.ts +2 -4
  398. package/node_modules/@openclaw/fs-safe/dist/safe-path-segment.d.ts +1 -2
  399. package/node_modules/@openclaw/fs-safe/dist/safe-path-segment.js +5 -6
  400. package/node_modules/@openclaw/fs-safe/dist/secret-file.d.ts +1 -1
  401. package/node_modules/@openclaw/fs-safe/dist/secret-file.js +60 -52
  402. package/node_modules/@openclaw/fs-safe/dist/secret-read-async.d.ts +0 -1
  403. package/node_modules/@openclaw/fs-safe/dist/secret-read-async.js +13 -28
  404. package/node_modules/@openclaw/fs-safe/dist/secret-read-policy.d.ts +6 -3
  405. package/node_modules/@openclaw/fs-safe/dist/secret-read-policy.js +31 -3
  406. package/node_modules/@openclaw/fs-safe/dist/secret.d.ts +0 -1
  407. package/node_modules/@openclaw/fs-safe/dist/secure-file-windows.d.ts +10 -0
  408. package/node_modules/@openclaw/fs-safe/dist/secure-file-windows.js +88 -0
  409. package/node_modules/@openclaw/fs-safe/dist/secure-file.d.ts +1 -2
  410. package/node_modules/@openclaw/fs-safe/dist/secure-file.js +143 -28
  411. package/node_modules/@openclaw/fs-safe/dist/secure-temp-dir.d.ts +6 -4
  412. package/node_modules/@openclaw/fs-safe/dist/secure-temp-dir.js +122 -101
  413. package/node_modules/@openclaw/fs-safe/dist/secure-temp-repair.d.ts +34 -0
  414. package/node_modules/@openclaw/fs-safe/dist/secure-temp-repair.js +110 -0
  415. package/node_modules/@openclaw/fs-safe/dist/sibling-staged-file.d.ts +4 -2
  416. package/node_modules/@openclaw/fs-safe/dist/sibling-staged-file.js +215 -57
  417. package/node_modules/@openclaw/fs-safe/dist/sibling-temp.d.ts +2 -1
  418. package/node_modules/@openclaw/fs-safe/dist/sibling-temp.js +64 -27
  419. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-acquire.d.ts +2 -29
  420. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-acquire.js +298 -192
  421. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-admission-context.d.ts +18 -0
  422. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-admission-context.js +60 -0
  423. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-admission-parser.d.ts +42 -0
  424. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-admission-parser.js +113 -0
  425. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-admission.d.ts +31 -0
  426. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-admission.js +1 -0
  427. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-handle.d.ts +3 -1
  428. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-handle.js +6 -0
  429. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-policy.d.ts +6 -1
  430. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-policy.js +45 -3
  431. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-reclaim.d.ts +10 -6
  432. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-reclaim.js +106 -36
  433. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-registration.d.ts +13 -0
  434. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-registration.js +47 -0
  435. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-root.d.ts +0 -1
  436. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-root.js +5 -2
  437. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-stale-admission.d.ts +38 -0
  438. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-stale-admission.js +228 -0
  439. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-target.d.ts +7 -0
  440. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-target.js +55 -0
  441. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-types.d.ts +22 -17
  442. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock.d.ts +0 -1
  443. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock.js +47 -32
  444. package/node_modules/@openclaw/fs-safe/dist/staged-directory.d.ts +18 -7
  445. package/node_modules/@openclaw/fs-safe/dist/staged-directory.js +98 -10
  446. package/node_modules/@openclaw/fs-safe/dist/staged-file-settlement.d.ts +16 -0
  447. package/node_modules/@openclaw/fs-safe/dist/staged-file-settlement.js +57 -0
  448. package/node_modules/@openclaw/fs-safe/dist/staged-file-types.d.ts +0 -1
  449. package/node_modules/@openclaw/fs-safe/dist/stat-observation.d.ts +10 -0
  450. package/node_modules/@openclaw/fs-safe/dist/stat-observation.js +64 -0
  451. package/node_modules/@openclaw/fs-safe/dist/store.d.ts +0 -1
  452. package/node_modules/@openclaw/fs-safe/dist/strict-file-identity.d.ts +1 -2
  453. package/node_modules/@openclaw/fs-safe/dist/strict-file-identity.js +41 -4
  454. package/node_modules/@openclaw/fs-safe/dist/string-coerce.d.ts +0 -1
  455. package/node_modules/@openclaw/fs-safe/dist/suppressed-error.d.ts +0 -1
  456. package/node_modules/@openclaw/fs-safe/dist/symlink-parents.d.ts +0 -1
  457. package/node_modules/@openclaw/fs-safe/dist/symlink-parents.js +9 -29
  458. package/node_modules/@openclaw/fs-safe/dist/temp-cleanup.d.ts +0 -1
  459. package/node_modules/@openclaw/fs-safe/dist/temp-cleanup.js +3 -2
  460. package/node_modules/@openclaw/fs-safe/dist/temp-target.d.ts +16 -13
  461. package/node_modules/@openclaw/fs-safe/dist/temp-target.js +120 -19
  462. package/node_modules/@openclaw/fs-safe/dist/temp-workspace-admission.d.ts +14 -0
  463. package/node_modules/@openclaw/fs-safe/dist/temp-workspace-admission.js +392 -0
  464. package/node_modules/@openclaw/fs-safe/dist/temp-workspace-child-admission.d.ts +23 -0
  465. package/node_modules/@openclaw/fs-safe/dist/temp-workspace-child-admission.js +151 -0
  466. package/node_modules/@openclaw/fs-safe/dist/temp-workspace-descriptor.d.ts +42 -0
  467. package/node_modules/@openclaw/fs-safe/dist/temp-workspace-descriptor.js +342 -0
  468. package/node_modules/@openclaw/fs-safe/dist/temp-workspace-owner.d.ts +8 -7
  469. package/node_modules/@openclaw/fs-safe/dist/temp-workspace-owner.js +156 -73
  470. package/node_modules/@openclaw/fs-safe/dist/temp-workspace-types.d.ts +39 -0
  471. package/node_modules/@openclaw/fs-safe/dist/temp-workspace-types.js +1 -0
  472. package/node_modules/@openclaw/fs-safe/dist/temp.d.ts +1 -2
  473. package/node_modules/@openclaw/fs-safe/dist/temp.js +1 -1
  474. package/node_modules/@openclaw/fs-safe/dist/test-hooks.d.ts +7 -1
  475. package/node_modules/@openclaw/fs-safe/dist/text-atomic.d.ts +0 -1
  476. package/node_modules/@openclaw/fs-safe/dist/text-atomic.js +3 -1
  477. package/node_modules/@openclaw/fs-safe/dist/timing.d.ts +1 -1
  478. package/node_modules/@openclaw/fs-safe/dist/timing.js +25 -6
  479. package/node_modules/@openclaw/fs-safe/dist/trash.d.ts +0 -1
  480. package/node_modules/@openclaw/fs-safe/dist/trash.js +61 -13
  481. package/node_modules/@openclaw/fs-safe/dist/types.d.ts +0 -1
  482. package/node_modules/@openclaw/fs-safe/dist/unicode-path.d.ts +2 -0
  483. package/node_modules/@openclaw/fs-safe/dist/unicode-path.js +16 -0
  484. package/node_modules/@openclaw/fs-safe/dist/walk.d.ts +5 -2
  485. package/node_modules/@openclaw/fs-safe/dist/walk.js +47 -47
  486. package/node_modules/@openclaw/fs-safe/dist/windows-command.d.ts +0 -1
  487. package/node_modules/@openclaw/fs-safe/dist/windows-owner.d.ts +9 -13
  488. package/node_modules/@openclaw/fs-safe/dist/windows-owner.js +36 -61
  489. package/node_modules/@openclaw/fs-safe/dist/windows-path-alias.d.ts +39 -0
  490. package/node_modules/@openclaw/fs-safe/dist/windows-path-alias.js +122 -0
  491. package/node_modules/@openclaw/fs-safe/dist/windows-path-syntax.d.ts +5 -0
  492. package/node_modules/@openclaw/fs-safe/dist/windows-path-syntax.js +21 -0
  493. package/node_modules/@openclaw/fs-safe/dist/windows-security-bridge.cs +336 -0
  494. package/node_modules/@openclaw/fs-safe/dist/windows-security-bridge.ps1 +15 -0
  495. package/node_modules/@openclaw/fs-safe/dist/windows-security-command.d.ts +25 -0
  496. package/node_modules/@openclaw/fs-safe/dist/windows-security-command.js +363 -0
  497. package/node_modules/@openclaw/fs-safe/dist/windows-security-facts.d.ts +5 -0
  498. package/node_modules/@openclaw/fs-safe/dist/windows-security-facts.js +108 -0
  499. package/node_modules/@openclaw/fs-safe/dist/write-file-handle.d.ts +13 -0
  500. package/node_modules/@openclaw/fs-safe/dist/write-file-handle.js +49 -0
  501. package/node_modules/@openclaw/fs-safe/dist/write-open-flags.d.ts +0 -1
  502. package/node_modules/@openclaw/fs-safe/dist/write-open-flags.js +1 -9
  503. package/node_modules/@openclaw/fs-safe/dist/write-queue.d.ts +0 -1
  504. package/node_modules/@openclaw/fs-safe/dist/write-queue.js +1 -4
  505. package/node_modules/@openclaw/fs-safe/docs/advanced.md +123 -7
  506. package/node_modules/@openclaw/fs-safe/docs/archive.md +227 -42
  507. package/node_modules/@openclaw/fs-safe/docs/atomic.md +199 -12
  508. package/node_modules/@openclaw/fs-safe/docs/config.md +7 -2
  509. package/node_modules/@openclaw/fs-safe/docs/contributing.md +88 -6
  510. package/node_modules/@openclaw/fs-safe/docs/copy.md +197 -0
  511. package/node_modules/@openclaw/fs-safe/docs/creation.md +132 -0
  512. package/node_modules/@openclaw/fs-safe/docs/directory-identity.md +85 -0
  513. package/node_modules/@openclaw/fs-safe/docs/durability.md +130 -5
  514. package/node_modules/@openclaw/fs-safe/docs/entries.md +109 -0
  515. package/node_modules/@openclaw/fs-safe/docs/errors.md +18 -10
  516. package/node_modules/@openclaw/fs-safe/docs/file-contents.md +68 -0
  517. package/node_modules/@openclaw/fs-safe/docs/file-store.md +112 -6
  518. package/node_modules/@openclaw/fs-safe/docs/filename.md +21 -7
  519. package/node_modules/@openclaw/fs-safe/docs/guest.md +146 -0
  520. package/node_modules/@openclaw/fs-safe/docs/in-place-write.md +81 -0
  521. package/node_modules/@openclaw/fs-safe/docs/index.md +2 -0
  522. package/node_modules/@openclaw/fs-safe/docs/install-path.md +61 -15
  523. package/node_modules/@openclaw/fs-safe/docs/install.md +69 -10
  524. package/node_modules/@openclaw/fs-safe/docs/json-store.md +20 -1
  525. package/node_modules/@openclaw/fs-safe/docs/json.md +16 -4
  526. package/node_modules/@openclaw/fs-safe/docs/local-roots.md +10 -1
  527. package/node_modules/@openclaw/fs-safe/docs/migrating-to-0.5.md +15 -6
  528. package/node_modules/@openclaw/fs-safe/docs/migrating-to-0.6.md +9 -4
  529. package/node_modules/@openclaw/fs-safe/docs/mutation-policy-proof.md +69 -0
  530. package/node_modules/@openclaw/fs-safe/docs/native-helper.md +75 -16
  531. package/node_modules/@openclaw/fs-safe/docs/native.md +108 -15
  532. package/node_modules/@openclaw/fs-safe/docs/output.md +61 -7
  533. package/node_modules/@openclaw/fs-safe/docs/path-case.md +64 -0
  534. package/node_modules/@openclaw/fs-safe/docs/path-prefix.md +74 -0
  535. package/node_modules/@openclaw/fs-safe/docs/path-scope.md +1 -1
  536. package/node_modules/@openclaw/fs-safe/docs/path-suffix-aliases.md +204 -0
  537. package/node_modules/@openclaw/fs-safe/docs/path.md +16 -5
  538. package/node_modules/@openclaw/fs-safe/docs/permissions.md +106 -20
  539. package/node_modules/@openclaw/fs-safe/docs/positional-read.md +63 -0
  540. package/node_modules/@openclaw/fs-safe/docs/private-file-store.md +14 -0
  541. package/node_modules/@openclaw/fs-safe/docs/public-api.md +51 -2
  542. package/node_modules/@openclaw/fs-safe/docs/quickstart.md +1 -1
  543. package/node_modules/@openclaw/fs-safe/docs/reading.md +16 -3
  544. package/node_modules/@openclaw/fs-safe/docs/regular-file.md +3 -0
  545. package/node_modules/@openclaw/fs-safe/docs/root.md +294 -15
  546. package/node_modules/@openclaw/fs-safe/docs/secret-file.md +28 -2
  547. package/node_modules/@openclaw/fs-safe/docs/secure-file.md +28 -16
  548. package/node_modules/@openclaw/fs-safe/docs/security-model.md +90 -9
  549. package/node_modules/@openclaw/fs-safe/docs/sidecar-lock.md +163 -7
  550. package/node_modules/@openclaw/fs-safe/docs/staged-file.md +16 -6
  551. package/node_modules/@openclaw/fs-safe/docs/store.md +35 -2
  552. package/node_modules/@openclaw/fs-safe/docs/temp.md +313 -29
  553. package/node_modules/@openclaw/fs-safe/docs/test-hooks.md +14 -0
  554. package/node_modules/@openclaw/fs-safe/docs/timing.md +2 -0
  555. package/node_modules/@openclaw/fs-safe/docs/types.md +35 -12
  556. package/node_modules/@openclaw/fs-safe/docs/walk.md +128 -6
  557. package/node_modules/@openclaw/fs-safe/docs/writing.md +314 -20
  558. package/node_modules/@openclaw/fs-safe/package.json +33 -20
  559. package/node_modules/@openclaw/fs-safe-darwin-arm64/fs-safe-native.node +0 -0
  560. package/node_modules/@openclaw/fs-safe-darwin-arm64/package.json +1 -1
  561. package/node_modules/@openclaw/fs-safe-darwin-x64/fs-safe-native.node +0 -0
  562. package/node_modules/@openclaw/fs-safe-darwin-x64/package.json +1 -1
  563. package/node_modules/@openclaw/fs-safe-linux-arm64-gnu/fs-safe-native.node +0 -0
  564. package/node_modules/@openclaw/fs-safe-linux-arm64-gnu/package.json +1 -1
  565. package/node_modules/@openclaw/fs-safe-linux-arm64-musl/fs-safe-native.node +0 -0
  566. package/node_modules/@openclaw/fs-safe-linux-arm64-musl/package.json +1 -1
  567. package/node_modules/@openclaw/fs-safe-linux-x64-gnu/fs-safe-native.node +0 -0
  568. package/node_modules/@openclaw/fs-safe-linux-x64-gnu/package.json +1 -1
  569. package/node_modules/@openclaw/fs-safe-linux-x64-musl/fs-safe-native.node +0 -0
  570. package/node_modules/@openclaw/fs-safe-linux-x64-musl/package.json +1 -1
  571. package/node_modules/@openclaw/fs-safe-win32-x64-msvc/fs-safe-native.node +0 -0
  572. package/node_modules/@openclaw/fs-safe-win32-x64-msvc/package.json +1 -1
  573. package/node_modules/jszip/.github/FUNDING.yml +1 -0
  574. package/node_modules/jszip/.github/actions/setup/action.yml +23 -0
  575. package/node_modules/jszip/.github/workflows/benchmark.yml +38 -0
  576. package/node_modules/jszip/.github/workflows/main.yml +55 -0
  577. package/node_modules/jszip/CHANGES.md +6 -0
  578. package/node_modules/jszip/dist/jszip.js +28 -19
  579. package/node_modules/jszip/dist/jszip.min.js +2 -2
  580. package/node_modules/jszip/index.d.ts +14 -0
  581. package/node_modules/jszip/lib/index.js +1 -1
  582. package/node_modules/jszip/lib/utils.js +26 -17
  583. package/node_modules/jszip/package.json +2 -2
  584. package/node_modules/p-limit/index.d.ts +1 -1
  585. package/node_modules/p-limit/index.js +6 -1
  586. package/node_modules/p-limit/package.json +1 -1
  587. package/node_modules/p-limit/readme.md +8 -0
  588. package/node_modules/zod/README.md +29 -2
  589. package/node_modules/zod/compile.cjs +96 -0
  590. package/node_modules/zod/compile.d.cts +1 -0
  591. package/node_modules/zod/compile.d.ts +1 -0
  592. package/node_modules/zod/compile.js +52 -0
  593. package/node_modules/zod/index.cjs +21 -2
  594. package/node_modules/zod/index.d.cts +1 -2
  595. package/node_modules/zod/index.d.ts +1 -2
  596. package/node_modules/zod/index.js +5 -2
  597. package/node_modules/zod/locales/index.cjs +19 -0
  598. package/node_modules/zod/mini/index.cjs +19 -0
  599. package/node_modules/zod/package.json +20 -8
  600. package/node_modules/zod/src/compile.ts +56 -0
  601. package/node_modules/zod/src/index.ts +5 -2
  602. package/node_modules/zod/src/v3/ZodError.ts +22 -12
  603. package/node_modules/zod/src/v3/helpers/errorUtil.ts +1 -1
  604. package/node_modules/zod/src/v3/tests/error.test.ts +35 -0
  605. package/node_modules/zod/src/v3/tests/intersection.test.ts +18 -0
  606. package/node_modules/zod/src/v3/tests/language-server.test.ts +1 -2
  607. package/node_modules/zod/src/v3/tests/object.test.ts +3 -6
  608. package/node_modules/zod/src/v3/tests/readonly.test.ts +0 -80
  609. package/node_modules/zod/src/v3/tests/string.test.ts +6 -0
  610. package/node_modules/zod/src/v3/types.ts +5 -5
  611. package/node_modules/zod/src/v4/classic/checks.ts +1 -0
  612. package/node_modules/zod/src/v4/classic/compat.ts +26 -18
  613. package/node_modules/zod/src/v4/classic/deep-partial.ts +76 -0
  614. package/node_modules/zod/src/v4/classic/errors.ts +59 -44
  615. package/node_modules/zod/src/v4/classic/external.ts +14 -9
  616. package/node_modules/zod/src/v4/classic/from-json-schema.ts +363 -78
  617. package/node_modules/zod/src/v4/classic/in-out.ts +45 -0
  618. package/node_modules/zod/src/v4/classic/index.ts +2 -2
  619. package/node_modules/zod/src/v4/classic/iso.ts +2 -72
  620. package/node_modules/zod/src/v4/classic/parse.ts +10 -4
  621. package/node_modules/zod/src/v4/classic/schemas.ts +640 -375
  622. package/node_modules/zod/src/v4/classic/tests/apply.test.ts +27 -0
  623. package/node_modules/zod/src/v4/classic/tests/array.test.ts +2 -2
  624. package/node_modules/zod/src/v4/classic/tests/assignability.test.ts +186 -0
  625. package/node_modules/zod/src/v4/classic/tests/bigint.test.ts +36 -1
  626. package/node_modules/zod/src/v4/classic/tests/catch.test.ts +278 -0
  627. package/node_modules/zod/src/v4/classic/tests/codec-examples.test.ts +1 -2
  628. package/node_modules/zod/src/v4/classic/tests/codec.test.ts +2 -1
  629. package/node_modules/zod/src/v4/classic/tests/continuability.test.ts +3 -3
  630. package/node_modules/zod/src/v4/classic/tests/credit-card.test.ts +76 -0
  631. package/node_modules/zod/src/v4/classic/tests/cyclic-data.test.ts +985 -0
  632. package/node_modules/zod/src/v4/classic/tests/date.test.ts +30 -0
  633. package/node_modules/zod/src/v4/classic/tests/datetime.test.ts +32 -18
  634. package/node_modules/zod/src/v4/classic/tests/deep-partial.test.ts +380 -0
  635. package/node_modules/zod/src/v4/classic/tests/default-locale.test.ts +32 -0
  636. package/node_modules/zod/src/v4/classic/tests/default.test.ts +46 -0
  637. package/node_modules/zod/src/v4/classic/tests/detached-methods.test.ts +31 -7
  638. package/node_modules/zod/src/v4/classic/tests/discriminated-unions.test.ts +261 -13
  639. package/node_modules/zod/src/v4/classic/tests/enum.test.ts +20 -0
  640. package/node_modules/zod/src/v4/classic/tests/error-utils.test.ts +112 -2
  641. package/node_modules/zod/src/v4/classic/tests/error.test.ts +403 -6
  642. package/node_modules/zod/src/v4/classic/tests/from-json-schema.test.ts +582 -10
  643. package/node_modules/zod/src/v4/classic/tests/function.test.ts +31 -0
  644. package/node_modules/zod/src/v4/classic/tests/global-config.test.ts +2 -9
  645. package/node_modules/zod/src/v4/classic/tests/hash.test.ts +1 -2
  646. package/node_modules/zod/src/v4/classic/tests/iban.test.ts +81 -0
  647. package/node_modules/zod/src/v4/classic/tests/in-out.test.ts +159 -0
  648. package/node_modules/zod/src/v4/classic/tests/index.test.ts +21 -2
  649. package/node_modules/zod/src/v4/classic/tests/instance-footprint.test.ts +319 -0
  650. package/node_modules/zod/src/v4/classic/tests/instanceof.test.ts +67 -0
  651. package/node_modules/zod/src/v4/classic/tests/intersection.test.ts +136 -0
  652. package/node_modules/zod/src/v4/classic/tests/issue-schema.test.ts +215 -0
  653. package/node_modules/zod/src/v4/classic/tests/jitless-allows-eval.test.ts +3 -10
  654. package/node_modules/zod/src/v4/classic/tests/lazy.test.ts +36 -1
  655. package/node_modules/zod/src/v4/classic/tests/literal.test.ts +12 -1
  656. package/node_modules/zod/src/v4/classic/tests/map.test.ts +12 -0
  657. package/node_modules/zod/src/v4/classic/tests/number.test.ts +85 -9
  658. package/node_modules/zod/src/v4/classic/tests/object.test.ts +301 -12
  659. package/node_modules/zod/src/v4/classic/tests/optin-ladder.test.ts +235 -0
  660. package/node_modules/zod/src/v4/classic/tests/optional.test.ts +49 -16
  661. package/node_modules/zod/src/v4/classic/tests/partial.test.ts +51 -4
  662. package/node_modules/zod/src/v4/classic/tests/prefault.test.ts +70 -0
  663. package/node_modules/zod/src/v4/classic/tests/preprocess-types.test.ts +20 -2
  664. package/node_modules/zod/src/v4/classic/tests/properties.test.ts +141 -0
  665. package/node_modules/zod/src/v4/classic/tests/readonly.test.ts +0 -68
  666. package/node_modules/zod/src/v4/classic/tests/record.test.ts +186 -18
  667. package/node_modules/zod/src/v4/classic/tests/recursive-types.test.ts +79 -3
  668. package/node_modules/zod/src/v4/classic/tests/redos.test.ts +68 -0
  669. package/node_modules/zod/src/v4/classic/tests/refine.test.ts +60 -0
  670. package/node_modules/zod/src/v4/classic/tests/set.test.ts +9 -0
  671. package/node_modules/zod/src/v4/classic/tests/standard-schema.test.ts +19 -0
  672. package/node_modules/zod/src/v4/classic/tests/string.test.ts +222 -6
  673. package/node_modules/zod/src/v4/classic/tests/stringbool.test.ts +18 -0
  674. package/node_modules/zod/src/v4/classic/tests/template-literal.test.ts +44 -3
  675. package/node_modules/zod/src/v4/classic/tests/to-json-schema.test.ts +1812 -204
  676. package/node_modules/zod/src/v4/classic/tests/tuple.test.ts +45 -30
  677. package/node_modules/zod/src/v4/classic/tests/union.test.ts +39 -2
  678. package/node_modules/zod/src/v4/classic/tests/validate.test.ts +645 -0
  679. package/node_modules/zod/src/v4/classic/tests/validations.test.ts +2 -2
  680. package/node_modules/zod/src/v4/core/api.ts +87 -35
  681. package/node_modules/zod/src/v4/core/checks.ts +119 -146
  682. package/node_modules/zod/src/v4/core/compile.ts +2313 -0
  683. package/node_modules/zod/src/v4/core/core.ts +99 -22
  684. package/node_modules/zod/src/v4/core/doc.ts +17 -9
  685. package/node_modules/zod/src/v4/core/errors.ts +113 -25
  686. package/node_modules/zod/src/v4/core/index.ts +3 -0
  687. package/node_modules/zod/src/v4/core/json-schema-generator.ts +8 -3
  688. package/node_modules/zod/src/v4/core/json-schema-processors.ts +424 -156
  689. package/node_modules/zod/src/v4/core/json-schema.ts +2 -1
  690. package/node_modules/zod/src/v4/core/memoizer.ts +331 -0
  691. package/node_modules/zod/src/v4/core/parse.ts +164 -50
  692. package/node_modules/zod/src/v4/core/regexes.ts +42 -15
  693. package/node_modules/zod/src/v4/core/registries.ts +2 -2
  694. package/node_modules/zod/src/v4/core/schemas.ts +1000 -538
  695. package/node_modules/zod/src/v4/core/tests/cached.test.ts +54 -0
  696. package/node_modules/zod/src/v4/core/tests/compile-differential.test.ts +1004 -0
  697. package/node_modules/zod/src/v4/core/tests/compile-generative.test.ts +445 -0
  698. package/node_modules/zod/src/v4/core/tests/compile-global.test.ts +89 -0
  699. package/node_modules/zod/src/v4/core/tests/compile-off-by-default.test.ts +26 -0
  700. package/node_modules/zod/src/v4/core/tests/compile-stats.test.ts +34 -0
  701. package/node_modules/zod/src/v4/core/tests/compile.test.ts +2036 -0
  702. package/node_modules/zod/src/v4/core/tests/email-regex.test.ts +140 -0
  703. package/node_modules/zod/src/v4/core/tests/locales/el.test.ts +1 -2
  704. package/node_modules/zod/src/v4/core/tests/locales/es.test.ts +1 -2
  705. package/node_modules/zod/src/v4/core/tests/locales/fr.test.ts +3 -3
  706. package/node_modules/zod/src/v4/core/tests/locales/parity.test.ts +42 -0
  707. package/node_modules/zod/src/v4/core/tests/locales/tg.test.ts +85 -0
  708. package/node_modules/zod/src/v4/core/tests/locales/tk.test.ts +69 -0
  709. package/node_modules/zod/src/v4/core/tests/polyfill-collision.test.ts +46 -0
  710. package/node_modules/zod/src/v4/core/tests/treeshake.test.ts +51 -0
  711. package/node_modules/zod/src/v4/core/tests/url-no-canparse.test.ts +133 -0
  712. package/node_modules/zod/src/v4/core/to-json-schema.ts +283 -48
  713. package/node_modules/zod/src/v4/core/util.ts +454 -157
  714. package/node_modules/zod/src/v4/core/versions.ts +2 -2
  715. package/node_modules/zod/src/v4/core/visit.ts +193 -0
  716. package/node_modules/zod/src/v4/index.ts +3 -3
  717. package/node_modules/zod/src/v4/locales/ar.ts +5 -0
  718. package/node_modules/zod/src/v4/locales/az.ts +5 -0
  719. package/node_modules/zod/src/v4/locales/be.ts +12 -0
  720. package/node_modules/zod/src/v4/locales/bg.ts +5 -0
  721. package/node_modules/zod/src/v4/locales/bn.ts +123 -0
  722. package/node_modules/zod/src/v4/locales/ca.ts +5 -0
  723. package/node_modules/zod/src/v4/locales/ckb.ts +140 -0
  724. package/node_modules/zod/src/v4/locales/cs.ts +5 -0
  725. package/node_modules/zod/src/v4/locales/da.ts +7 -2
  726. package/node_modules/zod/src/v4/locales/de.ts +5 -0
  727. package/node_modules/zod/src/v4/locales/el.ts +3 -0
  728. package/node_modules/zod/src/v4/locales/en.ts +17 -4
  729. package/node_modules/zod/src/v4/locales/eo.ts +5 -0
  730. package/node_modules/zod/src/v4/locales/es.ts +4 -0
  731. package/node_modules/zod/src/v4/locales/fa.ts +5 -0
  732. package/node_modules/zod/src/v4/locales/fi.ts +5 -0
  733. package/node_modules/zod/src/v4/locales/fr-CA.ts +5 -0
  734. package/node_modules/zod/src/v4/locales/fr.ts +21 -14
  735. package/node_modules/zod/src/v4/locales/gu.ts +123 -0
  736. package/node_modules/zod/src/v4/locales/he.ts +8 -1
  737. package/node_modules/zod/src/v4/locales/hi.ts +126 -0
  738. package/node_modules/zod/src/v4/locales/hr.ts +4 -0
  739. package/node_modules/zod/src/v4/locales/hu.ts +5 -0
  740. package/node_modules/zod/src/v4/locales/hy.ts +11 -0
  741. package/node_modules/zod/src/v4/locales/id.ts +5 -0
  742. package/node_modules/zod/src/v4/locales/index.ts +11 -0
  743. package/node_modules/zod/src/v4/locales/is.ts +5 -0
  744. package/node_modules/zod/src/v4/locales/it.ts +5 -0
  745. package/node_modules/zod/src/v4/locales/ja.ts +5 -0
  746. package/node_modules/zod/src/v4/locales/ka.ts +5 -0
  747. package/node_modules/zod/src/v4/locales/km.ts +5 -0
  748. package/node_modules/zod/src/v4/locales/kn.ts +126 -0
  749. package/node_modules/zod/src/v4/locales/ko.ts +5 -0
  750. package/node_modules/zod/src/v4/locales/lt.ts +4 -0
  751. package/node_modules/zod/src/v4/locales/mk.ts +5 -0
  752. package/node_modules/zod/src/v4/locales/ms.ts +5 -0
  753. package/node_modules/zod/src/v4/locales/ne.ts +128 -0
  754. package/node_modules/zod/src/v4/locales/nl.ts +5 -0
  755. package/node_modules/zod/src/v4/locales/nn.ts +121 -0
  756. package/node_modules/zod/src/v4/locales/no.ts +7 -2
  757. package/node_modules/zod/src/v4/locales/ota.ts +5 -0
  758. package/node_modules/zod/src/v4/locales/pl.ts +5 -0
  759. package/node_modules/zod/src/v4/locales/ps.ts +5 -0
  760. package/node_modules/zod/src/v4/locales/pt-BR.ts +161 -0
  761. package/node_modules/zod/src/v4/locales/pt.ts +101 -58
  762. package/node_modules/zod/src/v4/locales/ro.ts +3 -0
  763. package/node_modules/zod/src/v4/locales/ru.ts +12 -0
  764. package/node_modules/zod/src/v4/locales/sk.ts +123 -0
  765. package/node_modules/zod/src/v4/locales/sl.ts +5 -0
  766. package/node_modules/zod/src/v4/locales/sv.ts +7 -2
  767. package/node_modules/zod/src/v4/locales/ta.ts +5 -0
  768. package/node_modules/zod/src/v4/locales/tg.ts +135 -0
  769. package/node_modules/zod/src/v4/locales/th.ts +5 -0
  770. package/node_modules/zod/src/v4/locales/tk.ts +113 -0
  771. package/node_modules/zod/src/v4/locales/tr.ts +5 -0
  772. package/node_modules/zod/src/v4/locales/uk.ts +5 -0
  773. package/node_modules/zod/src/v4/locales/ur.ts +5 -0
  774. package/node_modules/zod/src/v4/locales/uz.ts +3 -0
  775. package/node_modules/zod/src/v4/locales/vi.ts +5 -0
  776. package/node_modules/zod/src/v4/locales/yo.ts +5 -0
  777. package/node_modules/zod/src/v4/locales/zh-CN.ts +5 -0
  778. package/node_modules/zod/src/v4/locales/zh-TW.ts +5 -0
  779. package/node_modules/zod/src/v4/mini/checks.ts +1 -0
  780. package/node_modules/zod/src/v4/mini/deep-partial.ts +73 -0
  781. package/node_modules/zod/src/v4/mini/external.ts +12 -1
  782. package/node_modules/zod/src/v4/mini/in-out.ts +45 -0
  783. package/node_modules/zod/src/v4/mini/parse.ts +2 -0
  784. package/node_modules/zod/src/v4/mini/schemas.ts +167 -63
  785. package/node_modules/zod/src/v4/mini/tests/apply.test.ts +33 -0
  786. package/node_modules/zod/src/v4/mini/tests/assignability.test.ts +62 -1
  787. package/node_modules/zod/src/v4/mini/tests/checks.test.ts +14 -0
  788. package/node_modules/zod/src/v4/mini/tests/codec.test.ts +35 -1
  789. package/node_modules/zod/src/v4/mini/tests/computed.test.ts +11 -17
  790. package/node_modules/zod/src/v4/mini/tests/cyclic-data.test.ts +84 -0
  791. package/node_modules/zod/src/v4/mini/tests/deep-partial.test.ts +54 -0
  792. package/node_modules/zod/src/v4/mini/tests/error.test.ts +23 -4
  793. package/node_modules/zod/src/v4/mini/tests/functions.test.ts +9 -0
  794. package/node_modules/zod/src/v4/mini/tests/index.test.ts +158 -5
  795. package/node_modules/zod/src/v4/mini/tests/number.test.ts +14 -0
  796. package/node_modules/zod/src/v4/mini/tests/object.test.ts +65 -0
  797. package/node_modules/zod/src/v4/mini/tests/recursive-types.test.ts +16 -0
  798. package/node_modules/zod/src/v4/mini/tests/string.test.ts +44 -0
  799. package/node_modules/zod/v3/ZodError.cjs +41 -12
  800. package/node_modules/zod/v3/ZodError.d.cts +1 -1
  801. package/node_modules/zod/v3/ZodError.d.ts +1 -1
  802. package/node_modules/zod/v3/ZodError.js +22 -12
  803. package/node_modules/zod/v3/errors.cjs +19 -0
  804. package/node_modules/zod/v3/external.cjs +19 -0
  805. package/node_modules/zod/v3/helpers/enumUtil.cjs +19 -0
  806. package/node_modules/zod/v3/helpers/errorUtil.cjs +20 -1
  807. package/node_modules/zod/v3/helpers/errorUtil.js +1 -1
  808. package/node_modules/zod/v3/helpers/parseUtil.cjs +19 -0
  809. package/node_modules/zod/v3/helpers/partialUtil.cjs +19 -0
  810. package/node_modules/zod/v3/helpers/typeAliases.cjs +19 -0
  811. package/node_modules/zod/v3/helpers/util.cjs +19 -0
  812. package/node_modules/zod/v3/index.cjs +19 -0
  813. package/node_modules/zod/v3/standard-schema.cjs +19 -0
  814. package/node_modules/zod/v3/types.cjs +26 -5
  815. package/node_modules/zod/v3/types.js +7 -5
  816. package/node_modules/zod/v4/classic/checks.cjs +21 -1
  817. package/node_modules/zod/v4/classic/checks.d.cts +1 -1
  818. package/node_modules/zod/v4/classic/checks.d.ts +1 -1
  819. package/node_modules/zod/v4/classic/checks.js +1 -1
  820. package/node_modules/zod/v4/classic/coerce.cjs +19 -0
  821. package/node_modules/zod/v4/classic/compat.cjs +19 -0
  822. package/node_modules/zod/v4/classic/compat.d.cts +9 -11
  823. package/node_modules/zod/v4/classic/compat.d.ts +9 -11
  824. package/node_modules/zod/v4/classic/deep-partial.cjs +58 -0
  825. package/node_modules/zod/v4/classic/deep-partial.d.cts +14 -0
  826. package/node_modules/zod/v4/classic/deep-partial.d.ts +14 -0
  827. package/node_modules/zod/v4/classic/deep-partial.js +13 -0
  828. package/node_modules/zod/v4/classic/errors.cjs +62 -34
  829. package/node_modules/zod/v4/classic/errors.d.cts +3 -4
  830. package/node_modules/zod/v4/classic/errors.d.ts +3 -4
  831. package/node_modules/zod/v4/classic/errors.js +43 -34
  832. package/node_modules/zod/v4/classic/external.cjs +51 -27
  833. package/node_modules/zod/v4/classic/external.d.cts +5 -2
  834. package/node_modules/zod/v4/classic/external.d.ts +5 -2
  835. package/node_modules/zod/v4/classic/external.js +5 -8
  836. package/node_modules/zod/v4/classic/from-json-schema.cjs +376 -75
  837. package/node_modules/zod/v4/classic/from-json-schema.js +357 -75
  838. package/node_modules/zod/v4/classic/in-out.cjs +82 -0
  839. package/node_modules/zod/v4/classic/in-out.d.cts +8 -0
  840. package/node_modules/zod/v4/classic/in-out.d.ts +8 -0
  841. package/node_modules/zod/v4/classic/in-out.js +36 -0
  842. package/node_modules/zod/v4/classic/index.cjs +21 -2
  843. package/node_modules/zod/v4/classic/index.d.cts +1 -2
  844. package/node_modules/zod/v4/classic/index.d.ts +1 -2
  845. package/node_modules/zod/v4/classic/index.js +2 -2
  846. package/node_modules/zod/v4/classic/iso.cjs +30 -22
  847. package/node_modules/zod/v4/classic/iso.d.cts +2 -17
  848. package/node_modules/zod/v4/classic/iso.d.ts +2 -17
  849. package/node_modules/zod/v4/classic/iso.js +2 -17
  850. package/node_modules/zod/v4/classic/parse.cjs +23 -1
  851. package/node_modules/zod/v4/classic/parse.d.cts +17 -4
  852. package/node_modules/zod/v4/classic/parse.d.ts +17 -4
  853. package/node_modules/zod/v4/classic/parse.js +1 -0
  854. package/node_modules/zod/v4/classic/schemas.cjs +591 -426
  855. package/node_modules/zod/v4/classic/schemas.d.cts +68 -19
  856. package/node_modules/zod/v4/classic/schemas.d.ts +68 -19
  857. package/node_modules/zod/v4/classic/schemas.js +564 -424
  858. package/node_modules/zod/v4/core/api.cjs +66 -24
  859. package/node_modules/zod/v4/core/api.d.cts +22 -12
  860. package/node_modules/zod/v4/core/api.d.ts +22 -12
  861. package/node_modules/zod/v4/core/api.js +44 -24
  862. package/node_modules/zod/v4/core/checks.cjs +88 -128
  863. package/node_modules/zod/v4/core/checks.d.cts +29 -13
  864. package/node_modules/zod/v4/core/checks.d.ts +29 -13
  865. package/node_modules/zod/v4/core/checks.js +68 -127
  866. package/node_modules/zod/v4/core/compile.cjs +1908 -0
  867. package/node_modules/zod/v4/core/compile.d.cts +65 -0
  868. package/node_modules/zod/v4/core/compile.d.ts +65 -0
  869. package/node_modules/zod/v4/core/compile.js +1858 -0
  870. package/node_modules/zod/v4/core/core.cjs +101 -19
  871. package/node_modules/zod/v4/core/core.d.cts +16 -4
  872. package/node_modules/zod/v4/core/core.d.ts +16 -4
  873. package/node_modules/zod/v4/core/core.js +83 -20
  874. package/node_modules/zod/v4/core/doc.cjs +31 -9
  875. package/node_modules/zod/v4/core/doc.d.cts +3 -1
  876. package/node_modules/zod/v4/core/doc.d.ts +3 -1
  877. package/node_modules/zod/v4/core/doc.js +12 -9
  878. package/node_modules/zod/v4/core/errors.cjs +126 -25
  879. package/node_modules/zod/v4/core/errors.d.cts +4 -0
  880. package/node_modules/zod/v4/core/errors.d.ts +4 -0
  881. package/node_modules/zod/v4/core/errors.js +107 -25
  882. package/node_modules/zod/v4/core/index.cjs +24 -1
  883. package/node_modules/zod/v4/core/index.d.cts +3 -0
  884. package/node_modules/zod/v4/core/index.d.ts +3 -0
  885. package/node_modules/zod/v4/core/index.js +3 -0
  886. package/node_modules/zod/v4/core/json-schema-generator.cjs +24 -1
  887. package/node_modules/zod/v4/core/json-schema-generator.d.cts +2 -2
  888. package/node_modules/zod/v4/core/json-schema-generator.d.ts +2 -2
  889. package/node_modules/zod/v4/core/json-schema-generator.js +6 -2
  890. package/node_modules/zod/v4/core/json-schema-processors.cjs +441 -156
  891. package/node_modules/zod/v4/core/json-schema-processors.d.cts +16 -0
  892. package/node_modules/zod/v4/core/json-schema-processors.d.ts +16 -0
  893. package/node_modules/zod/v4/core/json-schema-processors.js +400 -158
  894. package/node_modules/zod/v4/core/json-schema.cjs +19 -0
  895. package/node_modules/zod/v4/core/json-schema.d.cts +2 -1
  896. package/node_modules/zod/v4/core/json-schema.d.ts +2 -1
  897. package/node_modules/zod/v4/core/memoizer.cjs +360 -0
  898. package/node_modules/zod/v4/core/memoizer.d.cts +15 -0
  899. package/node_modules/zod/v4/core/memoizer.d.ts +15 -0
  900. package/node_modules/zod/v4/core/memoizer.js +311 -0
  901. package/node_modules/zod/v4/core/parse.cjs +148 -46
  902. package/node_modules/zod/v4/core/parse.d.cts +14 -11
  903. package/node_modules/zod/v4/core/parse.d.ts +14 -11
  904. package/node_modules/zod/v4/core/parse.js +127 -45
  905. package/node_modules/zod/v4/core/regexes.cjs +54 -17
  906. package/node_modules/zod/v4/core/regexes.d.cts +5 -0
  907. package/node_modules/zod/v4/core/regexes.d.ts +5 -0
  908. package/node_modules/zod/v4/core/regexes.js +32 -15
  909. package/node_modules/zod/v4/core/registries.cjs +19 -0
  910. package/node_modules/zod/v4/core/registries.js +2 -2
  911. package/node_modules/zod/v4/core/schemas.cjs +785 -386
  912. package/node_modules/zod/v4/core/schemas.d.cts +123 -34
  913. package/node_modules/zod/v4/core/schemas.d.ts +123 -34
  914. package/node_modules/zod/v4/core/schemas.js +753 -386
  915. package/node_modules/zod/v4/core/standard-schema.cjs +19 -0
  916. package/node_modules/zod/v4/core/to-json-schema.cjs +269 -45
  917. package/node_modules/zod/v4/core/to-json-schema.d.cts +45 -5
  918. package/node_modules/zod/v4/core/to-json-schema.d.ts +45 -5
  919. package/node_modules/zod/v4/core/to-json-schema.js +247 -44
  920. package/node_modules/zod/v4/core/util.cjs +372 -157
  921. package/node_modules/zod/v4/core/util.d.cts +79 -1
  922. package/node_modules/zod/v4/core/util.d.ts +79 -1
  923. package/node_modules/zod/v4/core/util.js +341 -156
  924. package/node_modules/zod/v4/core/versions.cjs +21 -2
  925. package/node_modules/zod/v4/core/versions.d.cts +1 -1
  926. package/node_modules/zod/v4/core/versions.d.ts +1 -1
  927. package/node_modules/zod/v4/core/versions.js +2 -2
  928. package/node_modules/zod/v4/core/visit.cjs +214 -0
  929. package/node_modules/zod/v4/core/visit.d.cts +30 -0
  930. package/node_modules/zod/v4/core/visit.d.ts +30 -0
  931. package/node_modules/zod/v4/core/visit.js +169 -0
  932. package/node_modules/zod/v4/index.cjs +34 -5
  933. package/node_modules/zod/v4/index.d.cts +2 -2
  934. package/node_modules/zod/v4/index.d.ts +2 -2
  935. package/node_modules/zod/v4/index.js +3 -2
  936. package/node_modules/zod/v4/locales/ar.cjs +5 -0
  937. package/node_modules/zod/v4/locales/ar.js +5 -0
  938. package/node_modules/zod/v4/locales/az.cjs +5 -0
  939. package/node_modules/zod/v4/locales/az.js +5 -0
  940. package/node_modules/zod/v4/locales/be.cjs +12 -0
  941. package/node_modules/zod/v4/locales/be.js +12 -0
  942. package/node_modules/zod/v4/locales/bg.cjs +5 -0
  943. package/node_modules/zod/v4/locales/bg.js +5 -0
  944. package/node_modules/zod/v4/locales/bn.cjs +140 -0
  945. package/node_modules/zod/v4/locales/bn.d.cts +5 -0
  946. package/node_modules/zod/v4/locales/bn.d.ts +4 -0
  947. package/node_modules/zod/v4/locales/bn.js +113 -0
  948. package/node_modules/zod/v4/locales/ca.cjs +5 -0
  949. package/node_modules/zod/v4/locales/ca.js +5 -0
  950. package/node_modules/zod/v4/locales/ckb.cjs +160 -0
  951. package/node_modules/zod/v4/locales/ckb.d.cts +5 -0
  952. package/node_modules/zod/v4/locales/ckb.d.ts +4 -0
  953. package/node_modules/zod/v4/locales/ckb.js +133 -0
  954. package/node_modules/zod/v4/locales/cs.cjs +5 -0
  955. package/node_modules/zod/v4/locales/cs.js +5 -0
  956. package/node_modules/zod/v4/locales/da.cjs +7 -2
  957. package/node_modules/zod/v4/locales/da.js +7 -2
  958. package/node_modules/zod/v4/locales/de.cjs +5 -0
  959. package/node_modules/zod/v4/locales/de.js +5 -0
  960. package/node_modules/zod/v4/locales/el.cjs +3 -0
  961. package/node_modules/zod/v4/locales/el.js +3 -0
  962. package/node_modules/zod/v4/locales/en.cjs +16 -4
  963. package/node_modules/zod/v4/locales/en.js +16 -4
  964. package/node_modules/zod/v4/locales/eo.cjs +5 -0
  965. package/node_modules/zod/v4/locales/eo.js +5 -0
  966. package/node_modules/zod/v4/locales/es.cjs +4 -0
  967. package/node_modules/zod/v4/locales/es.js +4 -0
  968. package/node_modules/zod/v4/locales/fa.cjs +5 -0
  969. package/node_modules/zod/v4/locales/fa.js +5 -0
  970. package/node_modules/zod/v4/locales/fi.cjs +5 -0
  971. package/node_modules/zod/v4/locales/fi.js +5 -0
  972. package/node_modules/zod/v4/locales/fr-CA.cjs +5 -0
  973. package/node_modules/zod/v4/locales/fr-CA.js +5 -0
  974. package/node_modules/zod/v4/locales/fr.cjs +18 -14
  975. package/node_modules/zod/v4/locales/fr.js +18 -14
  976. package/node_modules/zod/v4/locales/gu.cjs +140 -0
  977. package/node_modules/zod/v4/locales/gu.d.cts +5 -0
  978. package/node_modules/zod/v4/locales/gu.d.ts +4 -0
  979. package/node_modules/zod/v4/locales/gu.js +113 -0
  980. package/node_modules/zod/v4/locales/he.cjs +7 -0
  981. package/node_modules/zod/v4/locales/he.js +7 -0
  982. package/node_modules/zod/v4/locales/hi.cjs +138 -0
  983. package/node_modules/zod/v4/locales/hi.d.cts +5 -0
  984. package/node_modules/zod/v4/locales/hi.d.ts +4 -0
  985. package/node_modules/zod/v4/locales/hi.js +111 -0
  986. package/node_modules/zod/v4/locales/hr.cjs +4 -0
  987. package/node_modules/zod/v4/locales/hr.js +4 -0
  988. package/node_modules/zod/v4/locales/hu.cjs +5 -0
  989. package/node_modules/zod/v4/locales/hu.js +5 -0
  990. package/node_modules/zod/v4/locales/hy.cjs +11 -0
  991. package/node_modules/zod/v4/locales/hy.js +11 -0
  992. package/node_modules/zod/v4/locales/id.cjs +5 -0
  993. package/node_modules/zod/v4/locales/id.js +5 -0
  994. package/node_modules/zod/v4/locales/index.cjs +43 -2
  995. package/node_modules/zod/v4/locales/index.d.cts +11 -0
  996. package/node_modules/zod/v4/locales/index.d.ts +11 -0
  997. package/node_modules/zod/v4/locales/index.js +11 -0
  998. package/node_modules/zod/v4/locales/is.cjs +5 -0
  999. package/node_modules/zod/v4/locales/is.js +5 -0
  1000. package/node_modules/zod/v4/locales/it.cjs +5 -0
  1001. package/node_modules/zod/v4/locales/it.js +5 -0
  1002. package/node_modules/zod/v4/locales/ja.cjs +5 -0
  1003. package/node_modules/zod/v4/locales/ja.js +5 -0
  1004. package/node_modules/zod/v4/locales/ka.cjs +5 -0
  1005. package/node_modules/zod/v4/locales/ka.js +5 -0
  1006. package/node_modules/zod/v4/locales/km.cjs +5 -0
  1007. package/node_modules/zod/v4/locales/km.js +5 -0
  1008. package/node_modules/zod/v4/locales/kn.cjs +143 -0
  1009. package/node_modules/zod/v4/locales/kn.d.cts +5 -0
  1010. package/node_modules/zod/v4/locales/kn.d.ts +4 -0
  1011. package/node_modules/zod/v4/locales/kn.js +116 -0
  1012. package/node_modules/zod/v4/locales/ko.cjs +5 -0
  1013. package/node_modules/zod/v4/locales/ko.js +5 -0
  1014. package/node_modules/zod/v4/locales/lt.cjs +4 -0
  1015. package/node_modules/zod/v4/locales/lt.js +4 -0
  1016. package/node_modules/zod/v4/locales/mk.cjs +5 -0
  1017. package/node_modules/zod/v4/locales/mk.js +5 -0
  1018. package/node_modules/zod/v4/locales/ms.cjs +5 -0
  1019. package/node_modules/zod/v4/locales/ms.js +5 -0
  1020. package/node_modules/zod/v4/locales/ne.cjs +138 -0
  1021. package/node_modules/zod/v4/locales/ne.d.cts +5 -0
  1022. package/node_modules/zod/v4/locales/ne.d.ts +4 -0
  1023. package/node_modules/zod/v4/locales/ne.js +111 -0
  1024. package/node_modules/zod/v4/locales/nl.cjs +5 -0
  1025. package/node_modules/zod/v4/locales/nl.js +5 -0
  1026. package/node_modules/zod/v4/locales/nn.cjs +140 -0
  1027. package/node_modules/zod/v4/locales/nn.d.cts +5 -0
  1028. package/node_modules/zod/v4/locales/nn.d.ts +4 -0
  1029. package/node_modules/zod/v4/locales/nn.js +113 -0
  1030. package/node_modules/zod/v4/locales/no.cjs +7 -2
  1031. package/node_modules/zod/v4/locales/no.js +7 -2
  1032. package/node_modules/zod/v4/locales/ota.cjs +5 -0
  1033. package/node_modules/zod/v4/locales/ota.js +5 -0
  1034. package/node_modules/zod/v4/locales/pl.cjs +5 -0
  1035. package/node_modules/zod/v4/locales/pl.js +5 -0
  1036. package/node_modules/zod/v4/locales/ps.cjs +5 -0
  1037. package/node_modules/zod/v4/locales/ps.js +5 -0
  1038. package/node_modules/zod/v4/locales/pt-BR.cjs +170 -0
  1039. package/node_modules/zod/v4/locales/pt-BR.d.cts +5 -0
  1040. package/node_modules/zod/v4/locales/pt-BR.d.ts +4 -0
  1041. package/node_modules/zod/v4/locales/pt-BR.js +143 -0
  1042. package/node_modules/zod/v4/locales/pt.cjs +89 -55
  1043. package/node_modules/zod/v4/locales/pt.js +89 -55
  1044. package/node_modules/zod/v4/locales/ro.cjs +3 -0
  1045. package/node_modules/zod/v4/locales/ro.js +3 -0
  1046. package/node_modules/zod/v4/locales/ru.cjs +12 -0
  1047. package/node_modules/zod/v4/locales/ru.js +12 -0
  1048. package/node_modules/zod/v4/locales/sk.cjs +143 -0
  1049. package/node_modules/zod/v4/locales/sk.d.cts +5 -0
  1050. package/node_modules/zod/v4/locales/sk.d.ts +4 -0
  1051. package/node_modules/zod/v4/locales/sk.js +116 -0
  1052. package/node_modules/zod/v4/locales/sl.cjs +5 -0
  1053. package/node_modules/zod/v4/locales/sl.js +5 -0
  1054. package/node_modules/zod/v4/locales/sv.cjs +7 -2
  1055. package/node_modules/zod/v4/locales/sv.js +7 -2
  1056. package/node_modules/zod/v4/locales/ta.cjs +5 -0
  1057. package/node_modules/zod/v4/locales/ta.js +5 -0
  1058. package/node_modules/zod/v4/locales/tg.cjs +144 -0
  1059. package/node_modules/zod/v4/locales/tg.d.cts +5 -0
  1060. package/node_modules/zod/v4/locales/tg.d.ts +4 -0
  1061. package/node_modules/zod/v4/locales/tg.js +117 -0
  1062. package/node_modules/zod/v4/locales/th.cjs +5 -0
  1063. package/node_modules/zod/v4/locales/th.js +5 -0
  1064. package/node_modules/zod/v4/locales/tk.cjs +134 -0
  1065. package/node_modules/zod/v4/locales/tk.d.cts +5 -0
  1066. package/node_modules/zod/v4/locales/tk.d.ts +4 -0
  1067. package/node_modules/zod/v4/locales/tk.js +107 -0
  1068. package/node_modules/zod/v4/locales/tr.cjs +5 -0
  1069. package/node_modules/zod/v4/locales/tr.js +5 -0
  1070. package/node_modules/zod/v4/locales/uk.cjs +5 -0
  1071. package/node_modules/zod/v4/locales/uk.js +5 -0
  1072. package/node_modules/zod/v4/locales/ur.cjs +5 -0
  1073. package/node_modules/zod/v4/locales/ur.js +5 -0
  1074. package/node_modules/zod/v4/locales/uz.cjs +3 -0
  1075. package/node_modules/zod/v4/locales/uz.js +3 -0
  1076. package/node_modules/zod/v4/locales/vi.cjs +5 -0
  1077. package/node_modules/zod/v4/locales/vi.js +5 -0
  1078. package/node_modules/zod/v4/locales/yo.cjs +5 -0
  1079. package/node_modules/zod/v4/locales/yo.js +5 -0
  1080. package/node_modules/zod/v4/locales/zh-CN.cjs +5 -0
  1081. package/node_modules/zod/v4/locales/zh-CN.js +5 -0
  1082. package/node_modules/zod/v4/locales/zh-TW.cjs +5 -0
  1083. package/node_modules/zod/v4/locales/zh-TW.js +5 -0
  1084. package/node_modules/zod/v4/mini/checks.cjs +21 -1
  1085. package/node_modules/zod/v4/mini/checks.d.cts +1 -1
  1086. package/node_modules/zod/v4/mini/checks.d.ts +1 -1
  1087. package/node_modules/zod/v4/mini/checks.js +1 -1
  1088. package/node_modules/zod/v4/mini/coerce.cjs +19 -0
  1089. package/node_modules/zod/v4/mini/deep-partial.cjs +58 -0
  1090. package/node_modules/zod/v4/mini/deep-partial.d.cts +14 -0
  1091. package/node_modules/zod/v4/mini/deep-partial.d.ts +14 -0
  1092. package/node_modules/zod/v4/mini/deep-partial.js +13 -0
  1093. package/node_modules/zod/v4/mini/external.cjs +33 -1
  1094. package/node_modules/zod/v4/mini/external.d.cts +5 -2
  1095. package/node_modules/zod/v4/mini/external.d.ts +5 -2
  1096. package/node_modules/zod/v4/mini/external.js +3 -1
  1097. package/node_modules/zod/v4/mini/in-out.cjs +82 -0
  1098. package/node_modules/zod/v4/mini/in-out.d.cts +8 -0
  1099. package/node_modules/zod/v4/mini/in-out.d.ts +8 -0
  1100. package/node_modules/zod/v4/mini/in-out.js +36 -0
  1101. package/node_modules/zod/v4/mini/index.cjs +19 -0
  1102. package/node_modules/zod/v4/mini/iso.cjs +19 -0
  1103. package/node_modules/zod/v4/mini/parse.cjs +22 -1
  1104. package/node_modules/zod/v4/mini/parse.d.cts +1 -1
  1105. package/node_modules/zod/v4/mini/parse.d.ts +1 -1
  1106. package/node_modules/zod/v4/mini/parse.js +1 -1
  1107. package/node_modules/zod/v4/mini/schemas.cjs +117 -53
  1108. package/node_modules/zod/v4/mini/schemas.d.cts +49 -14
  1109. package/node_modules/zod/v4/mini/schemas.d.ts +49 -14
  1110. package/node_modules/zod/v4/mini/schemas.js +92 -51
  1111. package/node_modules/zod/v4-mini/index.cjs +19 -0
  1112. package/openclaw.plugin.json +21 -1
  1113. package/package.json +10 -8
  1114. package/node_modules/@openclaw/fs-safe/dist/absolute-path.d.ts.map +0 -1
  1115. package/node_modules/@openclaw/fs-safe/dist/advanced.d.ts.map +0 -1
  1116. package/node_modules/@openclaw/fs-safe/dist/archive-crc32.d.ts.map +0 -1
  1117. package/node_modules/@openclaw/fs-safe/dist/archive-deadline.d.ts.map +0 -1
  1118. package/node_modules/@openclaw/fs-safe/dist/archive-entry.d.ts.map +0 -1
  1119. package/node_modules/@openclaw/fs-safe/dist/archive-errors.d.ts.map +0 -1
  1120. package/node_modules/@openclaw/fs-safe/dist/archive-gzip-tail.d.ts.map +0 -1
  1121. package/node_modules/@openclaw/fs-safe/dist/archive-input.d.ts.map +0 -1
  1122. package/node_modules/@openclaw/fs-safe/dist/archive-kind.d.ts.map +0 -1
  1123. package/node_modules/@openclaw/fs-safe/dist/archive-limits.d.ts.map +0 -1
  1124. package/node_modules/@openclaw/fs-safe/dist/archive-merge.d.ts.map +0 -1
  1125. package/node_modules/@openclaw/fs-safe/dist/archive-native.d.ts +0 -20
  1126. package/node_modules/@openclaw/fs-safe/dist/archive-native.d.ts.map +0 -1
  1127. package/node_modules/@openclaw/fs-safe/dist/archive-native.js +0 -107
  1128. package/node_modules/@openclaw/fs-safe/dist/archive-options.d.ts +0 -21
  1129. package/node_modules/@openclaw/fs-safe/dist/archive-options.d.ts.map +0 -1
  1130. package/node_modules/@openclaw/fs-safe/dist/archive-parser-errors.d.ts.map +0 -1
  1131. package/node_modules/@openclaw/fs-safe/dist/archive-plan.d.ts.map +0 -1
  1132. package/node_modules/@openclaw/fs-safe/dist/archive-policy.d.ts +0 -22
  1133. package/node_modules/@openclaw/fs-safe/dist/archive-policy.d.ts.map +0 -1
  1134. package/node_modules/@openclaw/fs-safe/dist/archive-policy.js +0 -38
  1135. package/node_modules/@openclaw/fs-safe/dist/archive-read.d.ts.map +0 -1
  1136. package/node_modules/@openclaw/fs-safe/dist/archive-staging.d.ts.map +0 -1
  1137. package/node_modules/@openclaw/fs-safe/dist/archive-tar-inspect.d.ts +0 -7
  1138. package/node_modules/@openclaw/fs-safe/dist/archive-tar-inspect.d.ts.map +0 -1
  1139. package/node_modules/@openclaw/fs-safe/dist/archive-tar-inspect.js +0 -59
  1140. package/node_modules/@openclaw/fs-safe/dist/archive-tar-stream.d.ts.map +0 -1
  1141. package/node_modules/@openclaw/fs-safe/dist/archive-tar-wasm.d.ts.map +0 -1
  1142. package/node_modules/@openclaw/fs-safe/dist/archive-tar.d.ts +0 -19
  1143. package/node_modules/@openclaw/fs-safe/dist/archive-tar.d.ts.map +0 -1
  1144. package/node_modules/@openclaw/fs-safe/dist/archive-tar.js +0 -21
  1145. package/node_modules/@openclaw/fs-safe/dist/archive-zip-admission.d.ts.map +0 -1
  1146. package/node_modules/@openclaw/fs-safe/dist/archive-zip-count.d.ts.map +0 -1
  1147. package/node_modules/@openclaw/fs-safe/dist/archive-zip-directory.d.ts.map +0 -1
  1148. package/node_modules/@openclaw/fs-safe/dist/archive-zip-entry.d.ts.map +0 -1
  1149. package/node_modules/@openclaw/fs-safe/dist/archive-zip-integrity.d.ts.map +0 -1
  1150. package/node_modules/@openclaw/fs-safe/dist/archive-zip-names.d.ts.map +0 -1
  1151. package/node_modules/@openclaw/fs-safe/dist/archive-zip-preflight.d.ts.map +0 -1
  1152. package/node_modules/@openclaw/fs-safe/dist/archive.d.ts.map +0 -1
  1153. package/node_modules/@openclaw/fs-safe/dist/async-lock.d.ts.map +0 -1
  1154. package/node_modules/@openclaw/fs-safe/dist/atomic.d.ts.map +0 -1
  1155. package/node_modules/@openclaw/fs-safe/dist/bounded-read-stream.d.ts.map +0 -1
  1156. package/node_modules/@openclaw/fs-safe/dist/bounded-read.d.ts.map +0 -1
  1157. package/node_modules/@openclaw/fs-safe/dist/byte-budget.d.ts.map +0 -1
  1158. package/node_modules/@openclaw/fs-safe/dist/config.d.ts.map +0 -1
  1159. package/node_modules/@openclaw/fs-safe/dist/containment.d.ts.map +0 -1
  1160. package/node_modules/@openclaw/fs-safe/dist/deny-mutations.d.ts.map +0 -1
  1161. package/node_modules/@openclaw/fs-safe/dist/device-path.d.ts.map +0 -1
  1162. package/node_modules/@openclaw/fs-safe/dist/directory-durability.d.ts.map +0 -1
  1163. package/node_modules/@openclaw/fs-safe/dist/directory-guard.d.ts.map +0 -1
  1164. package/node_modules/@openclaw/fs-safe/dist/directory-mode-node.d.ts.map +0 -1
  1165. package/node_modules/@openclaw/fs-safe/dist/directory-mode-owner.d.ts.map +0 -1
  1166. package/node_modules/@openclaw/fs-safe/dist/durability.d.ts.map +0 -1
  1167. package/node_modules/@openclaw/fs-safe/dist/error-detail.d.ts.map +0 -1
  1168. package/node_modules/@openclaw/fs-safe/dist/errors.d.ts.map +0 -1
  1169. package/node_modules/@openclaw/fs-safe/dist/file-hash.d.ts.map +0 -1
  1170. package/node_modules/@openclaw/fs-safe/dist/file-identity.d.ts.map +0 -1
  1171. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync.d.ts.map +0 -1
  1172. package/node_modules/@openclaw/fs-safe/dist/file-lock.d.ts.map +0 -1
  1173. package/node_modules/@openclaw/fs-safe/dist/file-observation.d.ts.map +0 -1
  1174. package/node_modules/@openclaw/fs-safe/dist/file-store-boundary.d.ts.map +0 -1
  1175. package/node_modules/@openclaw/fs-safe/dist/file-store-limit.d.ts +0 -2
  1176. package/node_modules/@openclaw/fs-safe/dist/file-store-limit.d.ts.map +0 -1
  1177. package/node_modules/@openclaw/fs-safe/dist/file-store-limit.js +0 -8
  1178. package/node_modules/@openclaw/fs-safe/dist/file-store-prune.d.ts.map +0 -1
  1179. package/node_modules/@openclaw/fs-safe/dist/file-store-sync-write.d.ts.map +0 -1
  1180. package/node_modules/@openclaw/fs-safe/dist/file-store.d.ts.map +0 -1
  1181. package/node_modules/@openclaw/fs-safe/dist/file-sync.d.ts.map +0 -1
  1182. package/node_modules/@openclaw/fs-safe/dist/filename.d.ts.map +0 -1
  1183. package/node_modules/@openclaw/fs-safe/dist/fs.d.ts.map +0 -1
  1184. package/node_modules/@openclaw/fs-safe/dist/guarded-mkdir.d.ts.map +0 -1
  1185. package/node_modules/@openclaw/fs-safe/dist/guarded-mutation.d.ts.map +0 -1
  1186. package/node_modules/@openclaw/fs-safe/dist/home-dir.d.ts.map +0 -1
  1187. package/node_modules/@openclaw/fs-safe/dist/index.d.ts.map +0 -1
  1188. package/node_modules/@openclaw/fs-safe/dist/install-path.d.ts.map +0 -1
  1189. package/node_modules/@openclaw/fs-safe/dist/json-document-store.d.ts.map +0 -1
  1190. package/node_modules/@openclaw/fs-safe/dist/json-durable-queue-directory.d.ts.map +0 -1
  1191. package/node_modules/@openclaw/fs-safe/dist/json-durable-queue-ownership.d.ts.map +0 -1
  1192. package/node_modules/@openclaw/fs-safe/dist/json-durable-queue.d.ts.map +0 -1
  1193. package/node_modules/@openclaw/fs-safe/dist/json-store.d.ts.map +0 -1
  1194. package/node_modules/@openclaw/fs-safe/dist/json-stringify.d.ts.map +0 -1
  1195. package/node_modules/@openclaw/fs-safe/dist/json.d.ts.map +0 -1
  1196. package/node_modules/@openclaw/fs-safe/dist/local-file-access.d.ts.map +0 -1
  1197. package/node_modules/@openclaw/fs-safe/dist/local-roots.d.ts.map +0 -1
  1198. package/node_modules/@openclaw/fs-safe/dist/lock-config.d.ts.map +0 -1
  1199. package/node_modules/@openclaw/fs-safe/dist/move-path-cleanup.d.ts.map +0 -1
  1200. package/node_modules/@openclaw/fs-safe/dist/move-path.d.ts.map +0 -1
  1201. package/node_modules/@openclaw/fs-safe/dist/native-binding.d.ts.map +0 -1
  1202. package/node_modules/@openclaw/fs-safe/dist/native-config.d.ts.map +0 -1
  1203. package/node_modules/@openclaw/fs-safe/dist/native-operations.d.ts.map +0 -1
  1204. package/node_modules/@openclaw/fs-safe/dist/native-pinned-write-windows.d.ts.map +0 -1
  1205. package/node_modules/@openclaw/fs-safe/dist/native-pinned-write.d.ts.map +0 -1
  1206. package/node_modules/@openclaw/fs-safe/dist/native-staged-file.d.ts.map +0 -1
  1207. package/node_modules/@openclaw/fs-safe/dist/native.d.ts.map +0 -1
  1208. package/node_modules/@openclaw/fs-safe/dist/opened-file-failure.d.ts.map +0 -1
  1209. package/node_modules/@openclaw/fs-safe/dist/opened-realpath.d.ts.map +0 -1
  1210. package/node_modules/@openclaw/fs-safe/dist/output.d.ts.map +0 -1
  1211. package/node_modules/@openclaw/fs-safe/dist/owner-dacl.d.ts.map +0 -1
  1212. package/node_modules/@openclaw/fs-safe/dist/path-policy.d.ts.map +0 -1
  1213. package/node_modules/@openclaw/fs-safe/dist/path.d.ts.map +0 -1
  1214. package/node_modules/@openclaw/fs-safe/dist/permission-exec.d.ts.map +0 -1
  1215. package/node_modules/@openclaw/fs-safe/dist/permissions-public.d.ts.map +0 -1
  1216. package/node_modules/@openclaw/fs-safe/dist/permissions-windows.d.ts.map +0 -1
  1217. package/node_modules/@openclaw/fs-safe/dist/permissions.d.ts.map +0 -1
  1218. package/node_modules/@openclaw/fs-safe/dist/pinned-open.d.ts.map +0 -1
  1219. package/node_modules/@openclaw/fs-safe/dist/pinned-operation.d.ts.map +0 -1
  1220. package/node_modules/@openclaw/fs-safe/dist/pinned-write.d.ts.map +0 -1
  1221. package/node_modules/@openclaw/fs-safe/dist/private-directory.d.ts.map +0 -1
  1222. package/node_modules/@openclaw/fs-safe/dist/private-temp-workspace.d.ts.map +0 -1
  1223. package/node_modules/@openclaw/fs-safe/dist/publish-file-failure.d.ts.map +0 -1
  1224. package/node_modules/@openclaw/fs-safe/dist/publish-file.d.ts.map +0 -1
  1225. package/node_modules/@openclaw/fs-safe/dist/read-open-flags.d.ts.map +0 -1
  1226. package/node_modules/@openclaw/fs-safe/dist/read-opened-file.d.ts.map +0 -1
  1227. package/node_modules/@openclaw/fs-safe/dist/regular-file.d.ts.map +0 -1
  1228. package/node_modules/@openclaw/fs-safe/dist/replace-directory.d.ts.map +0 -1
  1229. package/node_modules/@openclaw/fs-safe/dist/replace-file-copy-fallback.d.ts.map +0 -1
  1230. package/node_modules/@openclaw/fs-safe/dist/replace-file-copy-source.d.ts.map +0 -1
  1231. package/node_modules/@openclaw/fs-safe/dist/replace-file-descriptor.d.ts.map +0 -1
  1232. package/node_modules/@openclaw/fs-safe/dist/replace-file-rename-policy.d.ts.map +0 -1
  1233. package/node_modules/@openclaw/fs-safe/dist/replace-file-temp-owner.d.ts.map +0 -1
  1234. package/node_modules/@openclaw/fs-safe/dist/replace-file.d.ts.map +0 -1
  1235. package/node_modules/@openclaw/fs-safe/dist/root-context.d.ts.map +0 -1
  1236. package/node_modules/@openclaw/fs-safe/dist/root-errors.d.ts.map +0 -1
  1237. package/node_modules/@openclaw/fs-safe/dist/root-file.d.ts.map +0 -1
  1238. package/node_modules/@openclaw/fs-safe/dist/root-impl.d.ts.map +0 -1
  1239. package/node_modules/@openclaw/fs-safe/dist/root-path-existing.d.ts.map +0 -1
  1240. package/node_modules/@openclaw/fs-safe/dist/root-path-symlink.d.ts +0 -7
  1241. package/node_modules/@openclaw/fs-safe/dist/root-path-symlink.d.ts.map +0 -1
  1242. package/node_modules/@openclaw/fs-safe/dist/root-path-symlink.js +0 -35
  1243. package/node_modules/@openclaw/fs-safe/dist/root-path.d.ts.map +0 -1
  1244. package/node_modules/@openclaw/fs-safe/dist/root-paths.d.ts.map +0 -1
  1245. package/node_modules/@openclaw/fs-safe/dist/root-walk.d.ts.map +0 -1
  1246. package/node_modules/@openclaw/fs-safe/dist/root-write-mode.d.ts.map +0 -1
  1247. package/node_modules/@openclaw/fs-safe/dist/root-write-verification.d.ts.map +0 -1
  1248. package/node_modules/@openclaw/fs-safe/dist/root.d.ts.map +0 -1
  1249. package/node_modules/@openclaw/fs-safe/dist/safe-path-segment.d.ts.map +0 -1
  1250. package/node_modules/@openclaw/fs-safe/dist/secret-file.d.ts.map +0 -1
  1251. package/node_modules/@openclaw/fs-safe/dist/secret-read-async.d.ts.map +0 -1
  1252. package/node_modules/@openclaw/fs-safe/dist/secret-read-policy.d.ts.map +0 -1
  1253. package/node_modules/@openclaw/fs-safe/dist/secret.d.ts.map +0 -1
  1254. package/node_modules/@openclaw/fs-safe/dist/secure-file.d.ts.map +0 -1
  1255. package/node_modules/@openclaw/fs-safe/dist/secure-temp-dir.d.ts.map +0 -1
  1256. package/node_modules/@openclaw/fs-safe/dist/sibling-staged-file.d.ts.map +0 -1
  1257. package/node_modules/@openclaw/fs-safe/dist/sibling-temp.d.ts.map +0 -1
  1258. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-acquire.d.ts.map +0 -1
  1259. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-handle.d.ts.map +0 -1
  1260. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-policy.d.ts.map +0 -1
  1261. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-reclaim.d.ts.map +0 -1
  1262. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-root.d.ts.map +0 -1
  1263. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-types.d.ts.map +0 -1
  1264. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock.d.ts.map +0 -1
  1265. package/node_modules/@openclaw/fs-safe/dist/staged-directory.d.ts.map +0 -1
  1266. package/node_modules/@openclaw/fs-safe/dist/staged-file-types.d.ts.map +0 -1
  1267. package/node_modules/@openclaw/fs-safe/dist/store.d.ts.map +0 -1
  1268. package/node_modules/@openclaw/fs-safe/dist/strict-file-identity.d.ts.map +0 -1
  1269. package/node_modules/@openclaw/fs-safe/dist/string-coerce.d.ts.map +0 -1
  1270. package/node_modules/@openclaw/fs-safe/dist/suppressed-error.d.ts.map +0 -1
  1271. package/node_modules/@openclaw/fs-safe/dist/symlink-parents.d.ts.map +0 -1
  1272. package/node_modules/@openclaw/fs-safe/dist/temp-cleanup.d.ts.map +0 -1
  1273. package/node_modules/@openclaw/fs-safe/dist/temp-target.d.ts.map +0 -1
  1274. package/node_modules/@openclaw/fs-safe/dist/temp-workspace-owner.d.ts.map +0 -1
  1275. package/node_modules/@openclaw/fs-safe/dist/temp.d.ts.map +0 -1
  1276. package/node_modules/@openclaw/fs-safe/dist/test-hooks.d.ts.map +0 -1
  1277. package/node_modules/@openclaw/fs-safe/dist/text-atomic.d.ts.map +0 -1
  1278. package/node_modules/@openclaw/fs-safe/dist/timing.d.ts.map +0 -1
  1279. package/node_modules/@openclaw/fs-safe/dist/trash.d.ts.map +0 -1
  1280. package/node_modules/@openclaw/fs-safe/dist/types.d.ts.map +0 -1
  1281. package/node_modules/@openclaw/fs-safe/dist/walk.d.ts.map +0 -1
  1282. package/node_modules/@openclaw/fs-safe/dist/windows-command.d.ts.map +0 -1
  1283. package/node_modules/@openclaw/fs-safe/dist/windows-owner.d.ts.map +0 -1
  1284. package/node_modules/@openclaw/fs-safe/dist/write-open-flags.d.ts.map +0 -1
  1285. package/node_modules/@openclaw/fs-safe/dist/write-queue.d.ts.map +0 -1
  1286. package/node_modules/jszip/.github/workflows/pr.yaml +0 -58
  1287. package/node_modules/jszip/.jekyll-metadata +0 -0
  1288. package/node_modules/jszip/.travis.yml +0 -17
  1289. package/node_modules/jszip/deps.js +0 -37
  1290. package/node_modules/jszip/graph.svg +0 -601
  1291. package/node_modules/zod/src/v4/core/config.ts +0 -15
  1292. /package/node_modules/@openclaw/fs-safe/dist/{archive-options.js → pinned-write-types.js} +0 -0
@@ -0,0 +1,81 @@
1
+ ---
2
+ title: In-place writes
3
+ description: "Replace bytes through a borrowed file handle while preserving its inode and attempting rollback on failure."
4
+ ---
5
+
6
+ # In-place writes
7
+
8
+ `overwriteFileHandle()` replaces a regular file's contents through a handle the
9
+ caller already owns. Use it when replacing the inode would break hardlinked
10
+ aliases, or when an existing writable file lives in a directory where the caller
11
+ cannot create a sibling temporary file.
12
+
13
+ ```ts
14
+ import { open } from "node:fs/promises";
15
+ import { overwriteFileHandle } from "@openclaw/fs-safe/advanced";
16
+
17
+ const handle = await open(filePath, "r+");
18
+ try {
19
+ await overwriteFileHandle(handle, Buffer.from(nextContents, "utf8"), {
20
+ beforeWrite: () => assertCurrentOwner(),
21
+ });
22
+ } finally {
23
+ await handle.close();
24
+ }
25
+ ```
26
+
27
+ ## Contract
28
+
29
+ ```ts
30
+ overwriteFileHandle(
31
+ handle: FileHandle,
32
+ data: Uint8Array,
33
+ options?: { beforeWrite?: () => void },
34
+ ): Promise<void>;
35
+ ```
36
+
37
+ The handle must be readable and writable, refer to a regular file, and have been
38
+ opened **without append mode**. Node cannot portably inspect a handle's append
39
+ flag, and some operating systems ignore positioned-write offsets for append
40
+ handles. Opening, path admission, symlink and hardlink policy, and closing remain
41
+ the caller's responsibility. The helper never reopens or replaces the inode,
42
+ changes the handle's current position, or closes it. Every hardlinked alias sees
43
+ the in-place changes.
44
+
45
+ The payload is borrowed, including its byte offset and length. Keep it unchanged,
46
+ attached, and accessible until the returned promise settles. Do not close the
47
+ handle or run concurrent I/O against the file, including through other aliases,
48
+ during preparation, writing, or rollback. This helper does not acquire a lock.
49
+
50
+ ## Preparation, ordering, and failure
51
+
52
+ The helper checks the file type and original size, then saves only the prefix
53
+ that will be overwritten: `min(data.byteLength, originalSize)` bytes. A short
54
+ prefix read fails with `FsSafeError("read-failed")` before writing. Memory for the
55
+ backup is bounded by that prefix length; a short replacement of a large file does
56
+ not read or buffer the untouched tail.
57
+
58
+ After preparation, `beforeWrite` runs synchronously once. A thrown value is
59
+ propagated unchanged without any file mutation. A Promise or thenable return is
60
+ rejected with `TypeError`; asynchronous callbacks cannot admit a write. Once
61
+ admitted, the operation finishes the write or its failure recovery without
62
+ calling `beforeWrite` again. This callback is a whole-operation admission point,
63
+ not the per-mutation `assertBeforeMutation` callback used by Root operations.
64
+ It must not change the file, handle, or payload. There is no cancellation option.
65
+
66
+ For growth, additional tail bytes are written before the existing prefix is
67
+ touched. The prefix is then overwritten, completing partial writes. For shrinkage,
68
+ truncation is last. If a write or truncation fails, the helper attempts to restore
69
+ the saved prefix, if touched, and the original length. It waits for both recovery
70
+ attempts and then rethrows the original error, even when recovery also fails.
71
+ Zero-progress writes fail with `FsSafeError("helper-failed")`.
72
+
73
+ Recovery is best effort, not atomic publication or a crash-recovery guarantee.
74
+ Other observers can see intermediate contents; failed recovery can leave partial
75
+ bytes. The helper does not chmod or synchronize the file or its directory.
76
+ Normal filesystem effects such as timestamp updates or clearing special mode
77
+ bits can still occur. Callers own any durability or broader transaction policy.
78
+
79
+ The implementation uses Node positional reads and writes in every native mode;
80
+ it does not load a native binding. Prefer [`Root.write`](writing.md) when atomic
81
+ replacement and root-based path admission are the intended contract.
@@ -52,6 +52,7 @@ await fs.remove("notes/archive/today.txt");
52
52
  |---|---|
53
53
  | [`root()`](root.md) | One boundary for read/write/move/remove and bounded recursive walking inside a trusted directory. |
54
54
  | [`@openclaw/fs-safe/config`](config.md) | Process-global native helper and lock-option defaults. |
55
+ | [`@openclaw/fs-safe/guest`](guest.md) | Python filesystem source for caller-owned guest transports, with admitted roots and descriptor-relative operations. |
55
56
  | [Native helper policy](native-helper.md) | Choose `auto`, `off`, or `require` for platform-native primitives. |
56
57
  | [Native architecture](native.md) | Understand the thin syscall layer, beneath model, platform mechanisms, and fallback boundary. |
57
58
  | [`replaceFileAtomic`](atomic.md) | Sibling-temp + rename, fsync hooks, mode preservation, copy fallback. |
@@ -65,6 +66,7 @@ await fs.remove("notes/archive/today.txt");
65
66
  | [`tempWorkspace`](temp.md) | 0700 scratch dir with auto-cleanup. |
66
67
  | [`readSecureFile`](secure-file.md) | Absolute file reads with fd pinning, permissions, owner, size, and timeout checks. |
67
68
  | [`walkDirectory` / `Root.walk`](walk.md) | Standalone inventories plus root-bounded pruning, budgets, and partial-error reporting. |
69
+ | [`Root.entries`](entries.md) | Guarded nonrecursive entries, bounded name collection, and caller-owned symlink validation. |
68
70
  | [`extractArchive`](archive.md) | Policy-driven ZIP/TAR extraction with clamp/filter, metadata/path-depth, link, count, and byte limits. |
69
71
  | [Secret files](secret-file.md) | Mode-0600 credentials with size and TOCTOU defense. |
70
72
  | [Permissions](permissions.md) | POSIX mode helpers plus Windows ACL inspection, raw owner/ACE facts, remediation, and private-directory creation. |
@@ -8,6 +8,7 @@ import {
8
8
  resolveSafeInstallDir,
9
9
  safeDirName,
10
10
  safePathSegmentHashed,
11
+ safePathSegmentHashedV2,
11
12
  } from "@openclaw/fs-safe/advanced";
12
13
  ```
13
14
 
@@ -22,7 +23,7 @@ function resolveSafeInstallDir(params: {
22
23
  }): { ok: true; path: string } | { ok: false; error: string };
23
24
  ```
24
25
 
25
- Computes the absolute install directory for `id` under `baseDir`, after running `id` through `nameEncoder` (`safeDirName` by default). Verifies the result stays inside `baseDir` — anything that would escape returns `{ ok: false, error: invalidNameMessage }`.
26
+ Computes the absolute install directory for `id` under `baseDir`, after running `id` through `nameEncoder` (`safeDirName` by default). Verifies the result stays inside `baseDir` — anything that would escape returns `{ ok: false, error: invalidNameMessage }`. On Windows, contained alternate-stream and filesystem-namespace aliases are rejected with the same result.
26
27
 
27
28
  ```ts
28
29
  const r = resolveSafeInstallDir({
@@ -35,14 +36,17 @@ if (!r.ok) return reply(400, r.error);
35
36
  await fs.mkdir(r.path, { recursive: true });
36
37
  ```
37
38
 
38
- For ids whose default-sanitized form might collide (e.g. `"foo/bar"` and `"foo\\bar"` both map to `"foo__bar"`), pass `nameEncoder: safePathSegmentHashed` to append a content hash:
39
+ For untrusted IDs that must occupy separate install directories, pass
40
+ `nameEncoder: safePathSegmentHashedV2`. The default `safeDirName` and legacy
41
+ `safePathSegmentHashed` can map distinct IDs to the same directory; the boundary
42
+ check does not establish which ID owns an existing directory.
39
43
 
40
44
  ```ts
41
45
  const r = resolveSafeInstallDir({
42
- baseDir: "/srv/plugins",
46
+ baseDir: "/srv/plugins-v2",
43
47
  id: untrustedId,
44
48
  invalidNameMessage: "invalid plugin name",
45
- nameEncoder: safePathSegmentHashed,
49
+ nameEncoder: safePathSegmentHashedV2,
46
50
  });
47
51
  ```
48
52
 
@@ -60,7 +64,7 @@ function assertCanonicalPathWithinBase(params: {
60
64
  }): Promise<void>;
61
65
  ```
62
66
 
63
- Throws if the candidate resolves outside `baseDir` after `realpath`. The `boundaryLabel` is included in the error message ("Invalid path: must stay within {boundaryLabel}").
67
+ Throws if the candidate resolves outside `baseDir` after `realpath`. On Windows it also throws for alternate-stream or filesystem-namespace aliases in the base, candidate, or canonical path. The `boundaryLabel` is included in the containment-shaped error message ("Invalid path: must stay within {boundaryLabel}").
64
68
 
65
69
  ```ts
66
70
  await assertCanonicalPathWithinBase({
@@ -87,11 +91,48 @@ safeDirName(""); // ""
87
91
 
88
92
  `safeDirName` does *not* try to be exhaustive about Windows-reserved names or special characters. It is purely a separator-stripping pass — `resolveSafeInstallDir` adds the boundary check on top so an `"../../etc"` input cannot escape `baseDir`.
89
93
 
90
- For stricter sanitization, use `safePathSegmentHashed`.
94
+ Use `safePathSegmentHashedV2` when distinct untrusted IDs need separate names.
95
+
96
+ ### `safePathSegmentHashedV2`
97
+
98
+ ```ts
99
+ function safePathSegmentHashedV2(input: string): string;
100
+ ```
101
+
102
+ Hashes every trimmed ID, including ordinary short names, into `id-v2-` followed
103
+ by 64 lowercase hexadecimal SHA-256 digits. The result is always 70 ASCII bytes,
104
+ contains no separators, and avoids Windows device names and ignored suffixes.
105
+ There is no readable prefix to truncate and no unchanged-name branch. Distinct
106
+ trimmed IDs, including an ID that looks like an encoded output, remain distinct
107
+ unless their full SHA-256 digests collide. The lowercase ASCII output also
108
+ preserves that distinction on case-insensitive and Unicode-normalizing volumes.
109
+
110
+ The stable V2 digest recipe is SHA-256 of the UTF-8 bytes of
111
+ `"@openclaw/fs-safe:install-path:v2\0"`, followed by the UTF-16LE bytes of
112
+ `input.trim()`, without a byte-order mark. The NUL-terminated prefix separates
113
+ this use of SHA-256 from other hash domains. UTF-16LE preserves exact JavaScript
114
+ code units, including lone surrogates. Inputs are not case-folded or Unicode
115
+ normalized. Surrounding whitespace, as removed by JavaScript `String.trim()`,
116
+ is the only intentional equivalence; internal whitespace remains significant.
117
+
118
+ ```ts
119
+ const segment = safePathSegmentHashedV2("plugin/v1"); // id-v2-<64 hex digits>
120
+ safePathSegmentHashedV2(" plugin/v1 ") === segment; // true
121
+ safePathSegmentHashedV2("Plugin/v1") === segment; // false
122
+ ```
123
+
124
+ This encoder computes a name; it does not authorize access or prove ownership
125
+ of a directory. Store the original trimmed ID in application-owned metadata and
126
+ verify it before reusing an existing install directory. Keep each install tree
127
+ on one encoding version. Switching to V2 changes existing paths: use a new base
128
+ directory or explicitly migrate directories after verifying their recorded IDs.
129
+ Do not silently fall back to a legacy path when the V2 path is missing.
91
130
 
92
131
  ### `safePathSegmentHashed`
93
132
 
94
- Returns a directory-safe segment **plus** a short content hash when sanitization changed the input or when the safe form is too long. Use this when input collisions matter:
133
+ Legacy readable encoding retained for path compatibility. It appends a short
134
+ content hash when sanitization changed the input or when the safe form is too
135
+ long; ordinary short names remain unchanged. Use V2 for new untrusted-ID mappings.
95
136
 
96
137
  ```ts
97
138
  safePathSegmentHashed("plugin-v1"); // "plugin-v1" (unchanged short input)
@@ -104,31 +145,35 @@ safePathSegmentHashed("."); // "skill-cdb4ee2aea"
104
145
 
105
146
  The sanitization is more aggressive than `safeDirName`: any character not in `[A-Za-z0-9._-]` becomes `-`, runs of `-` collapse, leading and trailing `-` are stripped, the empty/`.`/`..` fallback is `"skill"`. Long results are truncated to 50 chars before the hash is appended.
106
147
 
107
- The suffix is the first 10 hex characters of `sha256(trimmedInput)`. It makes
108
- collisions between distinct trimmed inputs unlikely, but it is a 40-bit
109
- identifier rather than a mathematical uniqueness guarantee. Inputs that differ
110
- only by surrounding whitespace intentionally map to the same output.
148
+ The suffix is the first 10 hex characters of `sha256(trimmedInput)`. This is a
149
+ 40-bit identifier, and the hash is not applied to every ID: short generated
150
+ outputs overlap with accepted literal inputs. Case variants can also share a
151
+ directory on case-insensitive filesystems. Distinct IDs can therefore alias
152
+ without a hash collision. Do not use this legacy encoder as an identity or
153
+ authorization boundary for untrusted IDs. Inputs that differ only by surrounding
154
+ whitespace intentionally map to the same output. Its output and the default
155
+ encoder selected by `resolveSafeInstallDir` remain unchanged for compatibility.
111
156
 
112
157
  ## Common patterns
113
158
 
114
159
  ### Install a plugin
115
160
 
116
161
  ```ts
117
- import { resolveSafeInstallDir, assertCanonicalPathWithinBase, safePathSegmentHashed } from "@openclaw/fs-safe/advanced";
162
+ import { resolveSafeInstallDir, assertCanonicalPathWithinBase, safePathSegmentHashedV2 } from "@openclaw/fs-safe/advanced";
118
163
  import { extractArchive } from "@openclaw/fs-safe/archive";
119
164
  import fs from "node:fs/promises";
120
165
 
121
166
  const r = resolveSafeInstallDir({
122
- baseDir: "/srv/plugins",
167
+ baseDir: "/srv/plugins-v2",
123
168
  id: untrustedName,
124
169
  invalidNameMessage: "invalid plugin name",
125
- nameEncoder: safePathSegmentHashed,
170
+ nameEncoder: safePathSegmentHashedV2,
126
171
  });
127
172
  if (!r.ok) return reply(400, r.error);
128
173
 
129
174
  await fs.mkdir(r.path, { recursive: true, mode: 0o755 });
130
175
  await assertCanonicalPathWithinBase({
131
- baseDir: "/srv/plugins",
176
+ baseDir: "/srv/plugins-v2",
132
177
  candidatePath: r.path,
133
178
  boundaryLabel: "plugin install dir",
134
179
  });
@@ -148,6 +193,7 @@ const snap = resolveSafeInstallDir({
148
193
  baseDir: "/srv/snapshots",
149
194
  id: `${runId}-${version}`,
150
195
  invalidNameMessage: "invalid snapshot id",
196
+ nameEncoder: safePathSegmentHashedV2,
151
197
  });
152
198
  if (!snap.ok) throw new Error(snap.error);
153
199
  await fs.mkdir(snap.path, { recursive: true });
@@ -31,6 +31,40 @@ node --version
31
31
  # v22.0.0 or newer
32
32
  ```
33
33
 
34
+ ## Bun runtime
35
+
36
+ Bun 1.4.2 can run the same public APIs and load the matching native package.
37
+ On macOS and Linux, fs-safe uses its Rust N-API addon to call the system
38
+ `realpath` implementation for native resolution. Ordinary resolution follows
39
+ Node's component walk, including lexical normalization of expanded symlink
40
+ targets, in Rust, with a 1,024-link expansion limit that returns `ELOOP` for
41
+ excessive or cyclic expansion. This works around Bun path-resolution defects that
42
+ otherwise reject restrictive permissions and confuse literal POSIX backslashes
43
+ with directory separators. The OS still resolves symlinks and canonical file
44
+ names; fs-safe retains its confinement and file-identity checks.
45
+
46
+ This works with `bun --jitless` and needs no runtime FFI or JIT. Use native mode
47
+ `auto` or `require` with the matching addon installed. `FS_SAFE_NATIVE_MODE=off`
48
+ still disables all addon loading; `auto` without the addon falls back to Bun's
49
+ resolver. Those configurations retain Bun 1.4.2's limitations with restrictive
50
+ permissions, sockets, literal backslashes, and symlink/parent traversal. Use
51
+ Node if you need full compatibility without the addon. On Bun POSIX, `require`
52
+ also rejects canonicalization when the addon or its canonicalizer is unavailable.
53
+
54
+ Node and Windows use their existing runtime canonicalizers. On Windows, Bun's
55
+ recursive directory creation receives an absolute spelling that preserves raw
56
+ path components, working around its rejection of existing relative `.` and `..`
57
+ directories. Windows native descriptor-relative operations require Bun to expose
58
+ the paired libuv descriptor bridge from its host executable; a missing or partial
59
+ bridge fails explicitly with `ENOTSUP`. Public paths and caller-supplied filesystem
60
+ adapters remain unchanged.
61
+
62
+ The upstream fix is tracked in [Bun #42374](https://github.com/oven-sh/bun/pull/42374).
63
+ The adapter can be removed when the supported Bun baseline includes that fix.
64
+ Run native compatibility checks with `pnpm test:bun:native` after building the
65
+ package and addon. See [contributing](contributing.md) for the Node/pnpm toolchain
66
+ and the broader diagnostic suite.
67
+
34
68
  ## TypeScript
35
69
 
36
70
  Types ship with the package — no `@types/openclaw__fs-safe` needed. The `exports` map in `package.json` provides typed entries for every subpath:
@@ -85,34 +119,59 @@ Use the main entry for the common surface, or the focused subpaths when you want
85
119
 
86
120
  ## Runtime dependencies
87
121
 
88
- `@openclaw/fs-safe` bundles an import-free WASM build of its Rust TAR parser for guarded JavaScript TAR/gzip [archive extraction](archive.md), including installs with optional dependencies omitted. ZIP fallback uses lazily loaded optional `jszip` and reports a missing-dependency error without it. Public subpaths remain safe to import with all optional dependencies omitted, but imports do not prove native availability.
122
+ `@openclaw/fs-safe` bundles an import-free WASM build of its Rust TAR parser and zstd/bzip2 codecs for guarded [archive extraction and bounded entry reads](archive.md). Plain TAR, gzip, zstd, and bzip2 work in `off` and missing-native `auto`, including installs with all optional dependencies omitted; gzip uses Node's built-in decoder. These archive fallbacks need no runtime interpreter, download, or consumer compiler. ZIP fallback uses lazily loaded optional `jszip` and reports a missing-dependency error without it. Public subpaths remain safe to import with all optional dependencies omitted, but imports do not prove native availability. Native `require` remains strict, and an available native operation's failure never triggers a WASM retry.
89
123
 
90
124
  There are no peer dependencies. Exact-version optional packages carry the seven
91
125
  native targets and npm-compatible OS, CPU, and Linux libc filters install only
92
- the matching binary. Consumers do not run a native build, download code at
126
+ the matching binary. Consumers do not run a Rust build, download code at
93
127
  runtime, or execute a postinstall step. Omitting optional dependencies keeps
94
- non-archive fallback-capable operations working in `auto` or `off`. Native-only
128
+ fallback-capable operations working in `auto` or `off`. Native-only
95
129
  features, including strict owned-tree temp cleanup, retained-directory staging,
96
- atomic `rename-noreplace`, zstd/bzip2 TAR handling, and Windows private-directory
97
- creation, remain unavailable. Operations needing the binding in `require` mode fail with
98
- `helper-unavailable` when the matching package is absent or incompatible.
130
+ and atomic `rename-noreplace` (including the default no-clobber `Root.move()`),
131
+ remain unavailable. Operations without a safe fallback fail with `helper-unavailable`
132
+ when the matching package is absent, incompatible, or disabled.
99
133
 
100
134
  Upgrading an existing 0.5 consumer? Follow [Migrating to 0.6](migrating-to-0.6.md)
101
135
  before deploying with native mode `require` or native-only features.
102
136
 
137
+ ### Windows security fallback
138
+
139
+ Windows raw owner/DACL inspection, private-directory creation, and secure-file
140
+ reads work without the addon in `auto` or `off` mode when system Windows
141
+ PowerShell and its .NET `Add-Type` compilation support are available. The package
142
+ ships a readable, fixed `.ps1` driver and adjacent `.cs` source and invokes the
143
+ driver with Windows PowerShell `-File`. Paths are passed as data. The fallback
144
+ does not generate helper scripts at runtime or use an encoded launcher.
145
+ The driver addresses built-in commands by module name and limits module
146
+ discovery to PowerShell's bundled system modules, avoiding broad command
147
+ discovery scans during each helper startup.
148
+
149
+ Normal PowerShell execution policy and Microsoft Defender policy must permit
150
+ the packaged scripts, including their use of `Add-Type`. The package does not
151
+ bypass restrictions, change policies, or add exclusions. Unsupported or
152
+ disallowed command execution fails closed.
153
+
154
+ The fallback preserves private DACLs at creation and inspects the same open
155
+ handle that supplies secure-file bytes. Each capability emits a path-free
156
+ `FS_SAFE_NATIVE_FALLBACK` warning once per process; each call adds PowerShell
157
+ startup and compilation overhead. Execution or compilation failure also fails
158
+ closed. Native `require` still rejects a missing binding or capability, and an
159
+ available native operation's error never triggers a command retry. See
160
+ [Permissions](permissions.md) and [Secure file reads](secure-file.md).
161
+
103
162
  ## Native helper policy
104
163
 
105
164
  The platform native binaries provide fd-relative open/link/mkdir primitives,
106
165
  atomic no-replace rename, and file identity checks. The default is `auto`: use
107
- the matching binary when it loads, otherwise silently keep the guarded
108
- JavaScript path. Platforms without one of the seven published targets therefore
109
- continue through the documented fallback in `auto` mode.
166
+ the matching binary when it loads, otherwise use the guarded JavaScript path
167
+ where a safe fallback exists. Native-only operations fail with
168
+ `helper-unavailable`.
110
169
 
111
170
  ```ts
112
171
  import { configureFsSafeNative } from "@openclaw/fs-safe/config";
113
172
 
114
173
  configureFsSafeNative({ mode: "auto" }); // default
115
- configureFsSafeNative({ mode: "off" }); // guarded JavaScript only
174
+ configureFsSafeNative({ mode: "off" }); // disable the addon; reject native-only operations
116
175
  configureFsSafeNative({ mode: "require" }); // fail closed if unavailable
117
176
  ```
118
177
 
@@ -1,6 +1,6 @@
1
1
  # JSON store
2
2
 
3
- `jsonStore` is exported from `@openclaw/fs-safe/store`. It is the absolute-path
3
+ `jsonStore` is exported from `@openclaw/fs-safe/store`. It is the single-path
4
4
  convenience wrapper for `fileStore(...).json(...)`: a small read-modify-write
5
5
  handle around a single JSON file. It bakes in atomic writes, explicit fallback
6
6
  reads, and optional cross-process locking via
@@ -45,6 +45,7 @@ type JsonStoreOptions<T> = {
45
45
  filePath: string;
46
46
  dirMode?: number; // default 0o700
47
47
  mode?: number; // default 0o600
48
+ durable?: boolean; // default true
48
49
  trailingNewline?: boolean; // default true
49
50
  lock?: boolean | JsonStoreLockOptions; // false / undefined = no lock
50
51
  };
@@ -70,6 +71,24 @@ type JsonStore<T> = {
70
71
 
71
72
  `jsonStore({ filePath })` resolves `rootDir = dirname(filePath)` and calls
72
73
  `fileStore({ rootDir, private: true }).json(basename(filePath), options)`.
74
+ On Windows, the factory rejects NTFS alternate-stream and directory-index
75
+ namespace spellings before preparing its private parent. An ordinary
76
+ drive-relative path is anchored at entry and `store.filePath` exposes the
77
+ resulting absolute path; ordinary colon-bearing POSIX paths remain valid.
78
+
79
+ `durable: false` keeps sibling-temp replace/rename behavior but skips the
80
+ temp-file and parent-directory `fsync` calls. Use it only for reconstructible
81
+ metadata where lower latency matters more than crash-durability. The default
82
+ is `true`, subject to platform sync support. This store-level policy applies
83
+ to `write`, `update`, and `updateOr`; these methods have no per-call options.
84
+ For `fileStore(...).json(rel, options)`, `options.durable` overrides the parent
85
+ file store's durability, while omission or `undefined` inherits it. Modes,
86
+ identity checks, mutation serialization, and sidecar locking are unchanged.
87
+
88
+ Each `write`, `update`, or `updateOr` invocation captures the retained options'
89
+ `durable` and `trailingNewline` values before queueing, locking, reading, or
90
+ calling the updater. Changes to those options affect later invocations only,
91
+ including when a mutation is waiting behind another operation.
73
92
 
74
93
  The store does **not** validate the parsed value against `T` at runtime — the cast is unchecked. Wrap with a schema (zod/valibot) if the file might be hand-edited or written by another process you don't control.
75
94
 
@@ -38,6 +38,17 @@ Use `readJson` when missing-or-malformed is a programmer error you want to surfa
38
38
 
39
39
  `JsonFileReadError` carries `cause` so you can inspect whether the underlying failure was an `ENOENT`, a `SyntaxError`, or something else.
40
40
 
41
+ On Windows, filesystem path inputs reject NTFS alternate-stream and
42
+ directory-index namespace spellings such as `file:stream` and
43
+ `dir::$INDEX_ALLOCATION`; ordinary colon-bearing POSIX names remain valid.
44
+ Standalone JSON writers preserve their released support for an ordinary
45
+ drive-relative destination by anchoring its leading drive designator at entry
46
+ without normalizing the remaining suffix. Any additional colon is still
47
+ rejected before filesystem access.
48
+ Strict standalone readers retain `JsonFileReadError` and expose the
49
+ `invalid-path` rejection as its cause, lenient `tryReadJson*` calls return
50
+ `null`, and root-bounded readers report an `open`/`validation` failure.
51
+
41
52
  ## Reading
42
53
 
43
54
  ### `readJson<T>(filePath, options?)`
@@ -135,10 +146,11 @@ where lower latency matters more than crash-durability.
135
146
 
136
147
  Synchronous variant. It pretty-prints with two spaces, appends a newline,
137
148
  creates parents at `0o700`, writes at `0o600`, and synchronizes the parent
138
- directory best-effort. File-mode tightening carries the staged bigint identity
139
- through rename and applies `fchmod` only when the reopened descriptor and current
140
- pathname still name that same single-link regular file; a swap is preserved and
141
- skips this best-effort step. It has no options bag. On `EPERM`/`EEXIST`, its legacy
149
+ directory best-effort. A retained staging descriptor carries the exact bigint
150
+ identity through rename and file-mode tightening. Publication and cleanup never
151
+ adopt a substituted temporary file: a changed identity, type or link count rejects
152
+ the write and leaves the replacement untouched. A swap detected after publication
153
+ also rejects without deleting or changing the replacement. It has no options bag. On `EPERM`/`EEXIST`, its legacy
142
154
  compatibility path removes the existing destination and retries the staged-file
143
155
  rename, so that fallback is temporarily non-atomic while retaining the staged
144
156
  file's `0600` mode; use the async `writeJson()`/`replaceFileAtomic()` surfaces
@@ -71,18 +71,27 @@ component that does not exist: dangling symlinks, descendants of dangling
71
71
  symlinks, and candidates whose existing ancestors cannot be canonicalized are
72
72
  rejected rather than treated as safe missing paths.
73
73
 
74
+ Filesystem path inputs retain symlinks and parent components until boundary
75
+ resolution, including after home expansion. A followed `link/../file` resolves
76
+ the parent of the link's target; default reads reject the link instead of
77
+ normalizing it away. File URLs retain the URL parser's normal path semantics.
78
+ An existing non-directory component cannot be traversed further, including by
79
+ `..`; the helpers reject that input instead of selecting a different file.
80
+
74
81
  ## `readLocalFileFromRoots(options)`
75
82
 
76
83
  The asynchronous helper opens the candidate through the matched [`Root`](root.md),
77
84
  so no-follow, identity, hardlink, device-path, and byte-limit checks happen at
78
85
  the read itself.
86
+ Link policies are captured once before root initialization and reused for every
87
+ candidate, so replacing options while a read is pending cannot weaken admission.
79
88
 
80
89
  ```ts
81
90
  type ReadLocalFileFromRootsOptions = LocalRootsInputOptions & {
82
91
  hardlinks?: "reject" | "allow";
83
92
  maxBytes?: number;
84
93
  nonBlockingRead?: boolean;
85
- symlinks?: "reject" | "follow-within-root";
94
+ symlinks?: "reject" | "follow-within-root" | "follow-parents-within-root";
86
95
  };
87
96
 
88
97
  type LocalRootsReadResult = ReadResult & {
@@ -88,8 +88,10 @@ await extractArchive({
88
88
  ```
89
89
 
90
90
  Returning `"skip"` rejects the archive unless `onFiltered: "skip-entry"` is
91
- explicit. Zstd and bzip2 TAR are native-only; ZIP, TAR, and gzip retain guarded
92
- JavaScript implementations. Catch `ArchiveLimitError` by its code, including
91
+ explicit. Zstd and bzip2 TAR required native support in version 0.5; current
92
+ versions also use bundled WASM codecs in `off` or missing-native `auto`, through
93
+ the same guarded TAR pipeline. ZIP fallback still requires optional JSZip.
94
+ Catch `ArchiveLimitError` by its code, including
93
95
  `archive-entry-path-components-exceeds-limit` for deep implicit-directory
94
96
  attacks. See [Archive extraction](archive.md).
95
97
 
@@ -167,10 +169,17 @@ See [File locks](sidecar-lock.md), [Secret files](secret-file.md), and
167
169
 
168
170
  ## 7. Gate native-only features
169
171
 
170
- `createPrivateDirectory()` is Windows-only and native-only because a pathname
171
- fallback cannot promise the same creation-time DACL. Zstd/bzip2 extraction and
172
- `strategy: "rename-noreplace"` are also native-only. Test the unavailable path
173
- instead of assuming installation always succeeds.
172
+ Version 0.5 required native support for `createPrivateDirectory()`. Current
173
+ releases also support a packaged PowerShell script in native `auto` and `off`
174
+ modes, retaining its creation-time protected DACL. Check the
175
+ [Windows security fallback prerequisites](install.md#windows-security-fallback)
176
+ before relying on this route. The API remains Windows-only, explicit native
177
+ `require` rejects a missing binding or capability, and native operation failures
178
+ remain terminal.
179
+ `strategy: "rename-noreplace"` remains native-only. Current zstd/bzip2 extraction
180
+ and bounded reads have bundled WASM fallbacks, while explicit native `require`
181
+ remains strict. Test unavailable native-only operations instead of assuming
182
+ installation always succeeds.
174
183
 
175
184
  ## 8. Run both behavior families in CI
176
185
 
@@ -24,10 +24,15 @@ uses native mode `require` or any native-only feature. Version 0.5 kept its
24
24
  binding in the root tarball; version 0.6 intentionally does not.
25
25
 
26
26
  Omitting optional dependencies remains supported for fallback-capable APIs in
27
- `auto` mode. It disables native-only features such as zstd/bzip2 TAR handling,
28
- retained-directory staging, atomic `rename-noreplace`, and Windows private
29
- directory creation. Native mode `require` reports `helper-unavailable` when the
30
- matching package is absent or incompatible.
27
+ `auto` mode. It disables native-only features such as retained-directory staging
28
+ and atomic `rename-noreplace`. Native mode `require`
29
+ reports `helper-unavailable` when the matching package is absent or incompatible.
30
+ Zstd/bzip2 TAR extraction and bounded reads required the binding in version 0.6;
31
+ current versions also support bundled WASM codecs in `auto` and `off` through the
32
+ same guarded TAR pipeline. ZIP fallback still requires optional JSZip.
33
+ Windows private-directory creation required the binding in version 0.6; current
34
+ releases also support [packaged Windows security scripts](install.md#windows-security-fallback)
35
+ in `auto` and `off` mode while preserving the creation-time protected DACL.
31
36
 
32
37
  ## Deployment checklist
33
38
 
@@ -0,0 +1,69 @@
1
+ # Hosted mutation-policy proof
2
+
3
+ The `mutation policy public behavior proof` workflow builds the exact event-head
4
+ package and host addon on Node 24 Linux, macOS, and Windows. Each case executes in
5
+ a fresh process, uses a private temporary fixture, and emits only a bounded,
6
+ canonical receipt. POSIX workers require both real and effective non-root UIDs.
7
+
8
+ Receipt schema `fs-safe-mutation-policy-proof-v2` deliberately does not describe
9
+ final directory emptiness as a mutation-dispatch count. Root replacement records
10
+ the unchanged contents of the original and replacement parent; denied redirect
11
+ records rejection and unchanged denied/displaced parents. The existing JS mkdir
12
+ counters name their exact child or next component. None counts native syscalls
13
+ or excludes transient mutations that leave no final trace.
14
+
15
+ ## Additional hosted cases
16
+
17
+ Each POSIX write/create/copy worker, under both native-off and native-require,
18
+ performs an eligible success control, an exact deeper-parent denial after an
19
+ earlier parent is created, a denied redirect after preflight, and a stale-parent
20
+ replacement at the public pre-mkdir authority boundary. Exact directory listings
21
+ and sentinels verify that denied/current/displaced parents contain no prohibited
22
+ child, target, or stage. Copy sources must retain their original bytes.
23
+
24
+ Redirect injection uses the existing public `@openclaw/fs-safe/test-hooks` subpath
25
+ from `dist`, not a mocked native binding. Only these isolated workers enable
26
+ `NODE_ENV=test`. The exact target and single hook visit are required. The hook is
27
+ after policy preflight but before parent admission; it must not be described as
28
+ a post-parent-admission hook. Stale replacement instead uses the public authority
29
+ callback after child-create policy admission, with an existing sentinel parent
30
+ and a still-missing child. Both implementation files that enforce the following
31
+ freshness check are hash-bound. No unchecked callback ordinal chooses a fault.
32
+
33
+ Representative POSIX `Root.write` workers refuse authority before the first mkdir,
34
+ after one parent has been created and before the next mkdir, before staging, and
35
+ immediately before publication. Epoch selection uses actual fixture state. The
36
+ publication refusal requires a real single-link, caller-owned mode-0600 stage
37
+ containing the complete payload while the destination still contains its original
38
+ sentinel. The same rejection object must escape, no callback may follow refusal,
39
+ and the owned stage must be gone before fixture teardown.
40
+
41
+ Windows workers exercise buffer `Root.write` through a stable final-file symlink,
42
+ then refuse before stage creation for a missing destination, before publishing a
43
+ complete stage to that still-missing destination, and before publishing to an
44
+ existing symlink-selected destination. Missing destinations must remain absent at
45
+ every authority callback and after refusal. The workers verify alias binding,
46
+ destination preservation, complete single-link stages, and cleanup before fixture
47
+ teardown. The default native-off and explicit
48
+ `verify-content-with-lock` native-require configurations both select the existing
49
+ Windows JS buffer writer. In native-require mode, the compatibility route loads
50
+ the addon to publish its retained sidecar lock through `Root.create`; the payload
51
+ writer remains JS. The receipt does not mislabel this as native payload
52
+ publication or evidence that content-verification fallback or lock contention
53
+ was exercised.
54
+
55
+ ## Bounds and interpretation
56
+
57
+ The receipt remains below 32 KiB, each worker has a 15-second process timeout and
58
+ 4-KiB stdout limit, and the proof step has a six-minute outer timeout. Worker I/O
59
+ and cleanup retain their existing deadlines. The canonical pending/failed receipt
60
+ is preserved if setup, a worker, provenance validation, or emission fails.
61
+ Source, built modules, the public test seam, harness helper, contract tests, and
62
+ host addon are hashed and checked again after workers.
63
+
64
+ These are deterministic representative observations, not an exhaustive race proof
65
+ or syscall audit. Existing hash-bound internal tests remain complementary for
66
+ other awaited-admission, receipt-refresh, and observation-failure interleavings.
67
+ Windows root replacement and POSIX-specific pinned routes are not claimed on
68
+ Windows. Hosted CI and exact artifact inspection are required before relying on
69
+ new receipts; the proof supplies no performance release clearance.