@openclaw/signal 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 (1331) hide show
  1. package/assets/activity.svg +40 -0
  2. package/assets/icon.png +0 -0
  3. package/dist/{accounts-DO4HMqaK.js → .setup/accounts-BV6tDOTc.mjs} +20 -5
  4. package/dist/.setup/api-B9-B1L7Q.mjs +17 -0
  5. package/dist/.setup/api-CGh4eWR8.mjs +12 -0
  6. package/dist/{approval-auth-pNCKKotV.js → .setup/approval-auth-BBI9BTRm.mjs} +3 -3
  7. package/dist/{approval-handler.runtime-DCPJkIqo.js → .setup/approval-handler.runtime-C3vN5OWd.mjs} +11 -11
  8. package/dist/{approval-reactions-CjhdkJ8P.js → .setup/approval-reactions-DDQvPP_z.mjs} +14 -14
  9. package/dist/{channel-CyQvEuyA.js → .setup/channel-DhzTcFsK.mjs} +56 -33
  10. package/dist/{channel.runtime--koF_1H0.js → .setup/channel.runtime-CG79z_Vy.mjs} +3 -3
  11. package/dist/{client-B3C0ciqU.js → .setup/client-BseAt7F7.mjs} +311 -41
  12. package/dist/{client-adapter-CNc5wzzs.js → .setup/client-adapter-dvFa47YL.mjs} +1 -1
  13. package/dist/{config-schema-DfEbpMVQ.js → .setup/config-schema-aQwwMGUj.mjs} +19 -3
  14. package/dist/{doctor-contract-api-D0SnglP4.js → .setup/doctor-contract-api-Rbq_sRTI.mjs} +79 -15
  15. package/dist/{install-signal-cli-QlEIfWBv.js → .setup/install-signal-cli-BDbzFcU2.mjs} +30 -61
  16. package/dist/{monitor-BiNWxMB3.js → .setup/monitor-Dnz6Ygz5.mjs} +39 -26
  17. package/dist/{probe-kOJqyjWz.js → .setup/probe-DXT2eLnw.mjs} +3 -3
  18. package/dist/{question-reactions-BFR9Mf-O.js → .setup/question-reactions-C8cSEjVf.mjs} +3 -3
  19. package/dist/{reaction-runtime-api-CWqDv5-q.js → .setup/reaction-runtime-api-BnQGHcrB.mjs} +6 -5
  20. package/dist/{rpc-context-dXSy4NtF.js → .setup/rpc-context-CwwADZ1b.mjs} +1 -1
  21. package/dist/{send-Bz0x0JC1.js → .setup/send-B78M_eFp.mjs} +7 -6
  22. package/dist/{send.runtime-CeV1p7Sq.js → .setup/send.runtime-CLnCWvrM.mjs} +1 -1
  23. package/dist/{transport-detection-Do2pYMAH.js → .setup/transport-detection-CoiRl7Gx.mjs} +60 -26
  24. package/dist/{transport-detection.runtime-QasZp3BE.js → .setup/transport-detection.runtime-Tlhuv3T_.mjs} +1 -1
  25. package/dist/{transport-policy-DxvSMHp9.js → .setup/transport-policy-5VSnj5ma.mjs} +2 -33
  26. package/dist/.setup/transport-probes.runtime-WprAyBbL.mjs +2 -0
  27. package/dist/.setup/transport-url-CAC0JcuI.mjs +55 -0
  28. package/dist/api.js +11 -16
  29. package/dist/channel-config-api.js +1 -1
  30. package/dist/channel-plugin-api.js +1 -1
  31. package/dist/contract-api.js +4 -4
  32. package/dist/doctor-contract-api.js +1 -1
  33. package/dist/reaction-runtime-api.js +1 -1
  34. package/dist/runtime-api.js +9 -9
  35. package/dist/setup-entry.js +2 -1
  36. package/node_modules/@openclaw/fs-safe/CHANGELOG.md +1187 -0
  37. package/node_modules/@openclaw/fs-safe/LICENSE +22 -0
  38. package/node_modules/@openclaw/fs-safe/README.md +654 -0
  39. package/node_modules/@openclaw/fs-safe/SECURITY.md +45 -0
  40. package/node_modules/@openclaw/fs-safe/dist/absolute-path.d.ts +32 -0
  41. package/node_modules/@openclaw/fs-safe/dist/absolute-path.js +323 -0
  42. package/node_modules/@openclaw/fs-safe/dist/advanced.d.ts +36 -0
  43. package/node_modules/@openclaw/fs-safe/dist/advanced.js +38 -0
  44. package/node_modules/@openclaw/fs-safe/dist/archive-crc32.d.ts +1 -0
  45. package/node_modules/@openclaw/fs-safe/dist/archive-crc32.js +19 -0
  46. package/node_modules/@openclaw/fs-safe/dist/archive-deadline.d.ts +11 -0
  47. package/node_modules/@openclaw/fs-safe/dist/archive-deadline.js +101 -0
  48. package/node_modules/@openclaw/fs-safe/dist/archive-durability.d.ts +23 -0
  49. package/node_modules/@openclaw/fs-safe/dist/archive-durability.js +180 -0
  50. package/node_modules/@openclaw/fs-safe/dist/archive-entry.d.ts +13 -0
  51. package/node_modules/@openclaw/fs-safe/dist/archive-entry.js +85 -0
  52. package/node_modules/@openclaw/fs-safe/dist/archive-errors.d.ts +12 -0
  53. package/node_modules/@openclaw/fs-safe/dist/archive-errors.js +23 -0
  54. package/node_modules/@openclaw/fs-safe/dist/archive-gzip-tail.d.ts +20 -0
  55. package/node_modules/@openclaw/fs-safe/dist/archive-gzip-tail.js +99 -0
  56. package/node_modules/@openclaw/fs-safe/dist/archive-input.d.ts +18 -0
  57. package/node_modules/@openclaw/fs-safe/dist/archive-input.js +98 -0
  58. package/node_modules/@openclaw/fs-safe/dist/archive-kind.d.ts +7 -0
  59. package/node_modules/@openclaw/fs-safe/dist/archive-kind.js +71 -0
  60. package/node_modules/@openclaw/fs-safe/dist/archive-limits.d.ts +56 -0
  61. package/node_modules/@openclaw/fs-safe/dist/archive-limits.js +131 -0
  62. package/node_modules/@openclaw/fs-safe/dist/archive-merge.d.ts +22 -0
  63. package/node_modules/@openclaw/fs-safe/dist/archive-merge.js +283 -0
  64. package/node_modules/@openclaw/fs-safe/dist/archive-parser-errors.d.ts +1 -0
  65. package/node_modules/@openclaw/fs-safe/dist/archive-parser-errors.js +12 -0
  66. package/node_modules/@openclaw/fs-safe/dist/archive-parser.wasm +0 -0
  67. package/node_modules/@openclaw/fs-safe/dist/archive-plan.d.ts +90 -0
  68. package/node_modules/@openclaw/fs-safe/dist/archive-plan.js +119 -0
  69. package/node_modules/@openclaw/fs-safe/dist/archive-read.d.ts +5 -0
  70. package/node_modules/@openclaw/fs-safe/dist/archive-read.js +243 -0
  71. package/node_modules/@openclaw/fs-safe/dist/archive-staging.d.ts +33 -0
  72. package/node_modules/@openclaw/fs-safe/dist/archive-staging.js +308 -0
  73. package/node_modules/@openclaw/fs-safe/dist/archive-tar-stream.d.ts +27 -0
  74. package/node_modules/@openclaw/fs-safe/dist/archive-tar-stream.js +127 -0
  75. package/node_modules/@openclaw/fs-safe/dist/archive-tar-wasm.d.ts +29 -0
  76. package/node_modules/@openclaw/fs-safe/dist/archive-tar-wasm.js +203 -0
  77. package/node_modules/@openclaw/fs-safe/dist/archive-zip-admission.d.ts +7 -0
  78. package/node_modules/@openclaw/fs-safe/dist/archive-zip-admission.js +96 -0
  79. package/node_modules/@openclaw/fs-safe/dist/archive-zip-count.d.ts +1 -0
  80. package/node_modules/@openclaw/fs-safe/dist/archive-zip-count.js +160 -0
  81. package/node_modules/@openclaw/fs-safe/dist/archive-zip-directory.d.ts +21 -0
  82. package/node_modules/@openclaw/fs-safe/dist/archive-zip-directory.js +263 -0
  83. package/node_modules/@openclaw/fs-safe/dist/archive-zip-entry.d.ts +24 -0
  84. package/node_modules/@openclaw/fs-safe/dist/archive-zip-entry.js +42 -0
  85. package/node_modules/@openclaw/fs-safe/dist/archive-zip-integrity.d.ts +4 -0
  86. package/node_modules/@openclaw/fs-safe/dist/archive-zip-integrity.js +40 -0
  87. package/node_modules/@openclaw/fs-safe/dist/archive-zip-loader.d.ts +8 -0
  88. package/node_modules/@openclaw/fs-safe/dist/archive-zip-loader.js +147 -0
  89. package/node_modules/@openclaw/fs-safe/dist/archive-zip-manifest.d.ts +4 -0
  90. package/node_modules/@openclaw/fs-safe/dist/archive-zip-manifest.js +22 -0
  91. package/node_modules/@openclaw/fs-safe/dist/archive-zip-names.d.ts +17 -0
  92. package/node_modules/@openclaw/fs-safe/dist/archive-zip-names.js +149 -0
  93. package/node_modules/@openclaw/fs-safe/dist/archive-zip-preflight.d.ts +5 -0
  94. package/node_modules/@openclaw/fs-safe/dist/archive-zip-preflight.js +13 -0
  95. package/node_modules/@openclaw/fs-safe/dist/archive.d.ts +17 -0
  96. package/node_modules/@openclaw/fs-safe/dist/archive.js +329 -0
  97. package/node_modules/@openclaw/fs-safe/dist/async-lock.d.ts +1 -0
  98. package/node_modules/@openclaw/fs-safe/dist/async-lock.js +17 -0
  99. package/node_modules/@openclaw/fs-safe/dist/atomic.d.ts +6 -0
  100. package/node_modules/@openclaw/fs-safe/dist/atomic.js +4 -0
  101. package/node_modules/@openclaw/fs-safe/dist/bounded-read-stream.d.ts +2 -0
  102. package/node_modules/@openclaw/fs-safe/dist/bounded-read-stream.js +15 -0
  103. package/node_modules/@openclaw/fs-safe/dist/bounded-read.d.ts +25 -0
  104. package/node_modules/@openclaw/fs-safe/dist/bounded-read.js +143 -0
  105. package/node_modules/@openclaw/fs-safe/dist/byte-budget.d.ts +3 -0
  106. package/node_modules/@openclaw/fs-safe/dist/byte-budget.js +9 -0
  107. package/node_modules/@openclaw/fs-safe/dist/byte-view.d.ts +2 -0
  108. package/node_modules/@openclaw/fs-safe/dist/byte-view.js +13 -0
  109. package/node_modules/@openclaw/fs-safe/dist/clone-metadata.d.ts +19 -0
  110. package/node_modules/@openclaw/fs-safe/dist/clone-metadata.js +36 -0
  111. package/node_modules/@openclaw/fs-safe/dist/config.d.ts +2 -0
  112. package/node_modules/@openclaw/fs-safe/dist/config.js +2 -0
  113. package/node_modules/@openclaw/fs-safe/dist/containment.d.ts +1 -0
  114. package/node_modules/@openclaw/fs-safe/dist/containment.js +1 -0
  115. package/node_modules/@openclaw/fs-safe/dist/copy-file-input.d.ts +21 -0
  116. package/node_modules/@openclaw/fs-safe/dist/copy-file-input.js +71 -0
  117. package/node_modules/@openclaw/fs-safe/dist/copy-policy.d.ts +2 -0
  118. package/node_modules/@openclaw/fs-safe/dist/copy-policy.js +8 -0
  119. package/node_modules/@openclaw/fs-safe/dist/copy-publication.d.ts +20 -0
  120. package/node_modules/@openclaw/fs-safe/dist/copy-publication.js +33 -0
  121. package/node_modules/@openclaw/fs-safe/dist/copy-tree-portable.d.ts +8 -0
  122. package/node_modules/@openclaw/fs-safe/dist/copy-tree-portable.js +245 -0
  123. package/node_modules/@openclaw/fs-safe/dist/copy.d.ts +15 -0
  124. package/node_modules/@openclaw/fs-safe/dist/copy.js +143 -0
  125. package/node_modules/@openclaw/fs-safe/dist/create-owned-file.d.ts +7 -0
  126. package/node_modules/@openclaw/fs-safe/dist/create-owned-file.js +16 -0
  127. package/node_modules/@openclaw/fs-safe/dist/create.d.ts +17 -0
  128. package/node_modules/@openclaw/fs-safe/dist/create.js +388 -0
  129. package/node_modules/@openclaw/fs-safe/dist/creation-boundary.d.ts +60 -0
  130. package/node_modules/@openclaw/fs-safe/dist/creation-boundary.js +371 -0
  131. package/node_modules/@openclaw/fs-safe/dist/deny-mutations.d.ts +11 -0
  132. package/node_modules/@openclaw/fs-safe/dist/deny-mutations.js +95 -0
  133. package/node_modules/@openclaw/fs-safe/dist/device-path.d.ts +14 -0
  134. package/node_modules/@openclaw/fs-safe/dist/device-path.js +139 -0
  135. package/node_modules/@openclaw/fs-safe/dist/directory-durability.d.ts +43 -0
  136. package/node_modules/@openclaw/fs-safe/dist/directory-durability.js +286 -0
  137. package/node_modules/@openclaw/fs-safe/dist/directory-entry-path.d.ts +2 -0
  138. package/node_modules/@openclaw/fs-safe/dist/directory-entry-path.js +21 -0
  139. package/node_modules/@openclaw/fs-safe/dist/directory-guard.d.ts +55 -0
  140. package/node_modules/@openclaw/fs-safe/dist/directory-guard.js +179 -0
  141. package/node_modules/@openclaw/fs-safe/dist/directory-mode-node.d.ts +21 -0
  142. package/node_modules/@openclaw/fs-safe/dist/directory-mode-node.js +209 -0
  143. package/node_modules/@openclaw/fs-safe/dist/directory-mode-owner.d.ts +20 -0
  144. package/node_modules/@openclaw/fs-safe/dist/directory-mode-owner.js +78 -0
  145. package/node_modules/@openclaw/fs-safe/dist/directory-receipt.d.ts +23 -0
  146. package/node_modules/@openclaw/fs-safe/dist/directory-receipt.js +123 -0
  147. package/node_modules/@openclaw/fs-safe/dist/durability.d.ts +4 -0
  148. package/node_modules/@openclaw/fs-safe/dist/durability.js +3 -0
  149. package/node_modules/@openclaw/fs-safe/dist/effective-uid.d.ts +1 -0
  150. package/node_modules/@openclaw/fs-safe/dist/effective-uid.js +25 -0
  151. package/node_modules/@openclaw/fs-safe/dist/error-detail.d.ts +2 -0
  152. package/node_modules/@openclaw/fs-safe/dist/error-detail.js +13 -0
  153. package/node_modules/@openclaw/fs-safe/dist/errors.d.ts +13 -0
  154. package/node_modules/@openclaw/fs-safe/dist/errors.js +26 -0
  155. package/node_modules/@openclaw/fs-safe/dist/file-cleanup.d.ts +19 -0
  156. package/node_modules/@openclaw/fs-safe/dist/file-cleanup.js +81 -0
  157. package/node_modules/@openclaw/fs-safe/dist/file-contents.d.ts +5 -0
  158. package/node_modules/@openclaw/fs-safe/dist/file-contents.js +40 -0
  159. package/node_modules/@openclaw/fs-safe/dist/file-handle-transfer.d.ts +15 -0
  160. package/node_modules/@openclaw/fs-safe/dist/file-handle-transfer.js +190 -0
  161. package/node_modules/@openclaw/fs-safe/dist/file-hash.d.ts +16 -0
  162. package/node_modules/@openclaw/fs-safe/dist/file-hash.js +296 -0
  163. package/node_modules/@openclaw/fs-safe/dist/file-identity.d.ts +7 -0
  164. package/node_modules/@openclaw/fs-safe/dist/file-identity.js +48 -0
  165. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-acquisition.d.ts +22 -0
  166. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-acquisition.js +98 -0
  167. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-admission.d.ts +17 -0
  168. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-admission.js +54 -0
  169. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-acquire.d.ts +3 -0
  170. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-acquire.js +303 -0
  171. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-arbitration.d.ts +17 -0
  172. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-arbitration.js +66 -0
  173. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-held.d.ts +32 -0
  174. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-held.js +395 -0
  175. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-io.d.ts +43 -0
  176. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-io.js +209 -0
  177. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-mutation.d.ts +16 -0
  178. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-mutation.js +275 -0
  179. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-options.d.ts +19 -0
  180. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-options.js +58 -0
  181. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-registration.d.ts +1 -0
  182. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-registration.js +90 -0
  183. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root.d.ts +36 -0
  184. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root.js +288 -0
  185. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-stale-admission.d.ts +19 -0
  186. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-stale-admission.js +199 -0
  187. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync.d.ts +17 -0
  188. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync.js +341 -0
  189. package/node_modules/@openclaw/fs-safe/dist/file-lock.d.ts +23 -0
  190. package/node_modules/@openclaw/fs-safe/dist/file-lock.js +66 -0
  191. package/node_modules/@openclaw/fs-safe/dist/file-observation.d.ts +8 -0
  192. package/node_modules/@openclaw/fs-safe/dist/file-observation.js +22 -0
  193. package/node_modules/@openclaw/fs-safe/dist/file-store-boundary.d.ts +38 -0
  194. package/node_modules/@openclaw/fs-safe/dist/file-store-boundary.js +177 -0
  195. package/node_modules/@openclaw/fs-safe/dist/file-store-prune.d.ts +11 -0
  196. package/node_modules/@openclaw/fs-safe/dist/file-store-prune.js +109 -0
  197. package/node_modules/@openclaw/fs-safe/dist/file-store-sync-directory.d.ts +15 -0
  198. package/node_modules/@openclaw/fs-safe/dist/file-store-sync-directory.js +319 -0
  199. package/node_modules/@openclaw/fs-safe/dist/file-store-sync-write.d.ts +9 -0
  200. package/node_modules/@openclaw/fs-safe/dist/file-store-sync-write.js +128 -0
  201. package/node_modules/@openclaw/fs-safe/dist/file-store.d.ts +65 -0
  202. package/node_modules/@openclaw/fs-safe/dist/file-store.js +362 -0
  203. package/node_modules/@openclaw/fs-safe/dist/file-sync.d.ts +4 -0
  204. package/node_modules/@openclaw/fs-safe/dist/file-sync.js +19 -0
  205. package/node_modules/@openclaw/fs-safe/dist/filename.d.ts +8 -0
  206. package/node_modules/@openclaw/fs-safe/dist/filename.js +138 -0
  207. package/node_modules/@openclaw/fs-safe/dist/fs.d.ts +12 -0
  208. package/node_modules/@openclaw/fs-safe/dist/fs.js +30 -0
  209. package/node_modules/@openclaw/fs-safe/dist/guarded-mkdir.d.ts +25 -0
  210. package/node_modules/@openclaw/fs-safe/dist/guarded-mkdir.js +281 -0
  211. package/node_modules/@openclaw/fs-safe/dist/guarded-mutation.d.ts +32 -0
  212. package/node_modules/@openclaw/fs-safe/dist/guarded-mutation.js +81 -0
  213. package/node_modules/@openclaw/fs-safe/dist/guest-dispatch-python.d.ts +1 -0
  214. package/node_modules/@openclaw/fs-safe/dist/guest-dispatch-python.js +68 -0
  215. package/node_modules/@openclaw/fs-safe/dist/guest-native-python.d.ts +3 -0
  216. package/node_modules/@openclaw/fs-safe/dist/guest-native-python.js +135 -0
  217. package/node_modules/@openclaw/fs-safe/dist/guest.d.ts +8 -0
  218. package/node_modules/@openclaw/fs-safe/dist/guest.js +424 -0
  219. package/node_modules/@openclaw/fs-safe/dist/home-dir.d.ts +11 -0
  220. package/node_modules/@openclaw/fs-safe/dist/home-dir.js +149 -0
  221. package/node_modules/@openclaw/fs-safe/dist/index.d.ts +9 -0
  222. package/node_modules/@openclaw/fs-safe/dist/index.js +5 -0
  223. package/node_modules/@openclaw/fs-safe/dist/install-path.d.ts +25 -0
  224. package/node_modules/@openclaw/fs-safe/dist/install-path.js +136 -0
  225. package/node_modules/@openclaw/fs-safe/dist/json-document-store.d.ts +37 -0
  226. package/node_modules/@openclaw/fs-safe/dist/json-document-store.js +105 -0
  227. package/node_modules/@openclaw/fs-safe/dist/json-durable-queue-directory.d.ts +14 -0
  228. package/node_modules/@openclaw/fs-safe/dist/json-durable-queue-directory.js +154 -0
  229. package/node_modules/@openclaw/fs-safe/dist/json-durable-queue-ownership.d.ts +23 -0
  230. package/node_modules/@openclaw/fs-safe/dist/json-durable-queue-ownership.js +355 -0
  231. package/node_modules/@openclaw/fs-safe/dist/json-durable-queue-read.d.ts +5 -0
  232. package/node_modules/@openclaw/fs-safe/dist/json-durable-queue-read.js +65 -0
  233. package/node_modules/@openclaw/fs-safe/dist/json-durable-queue.d.ts +45 -0
  234. package/node_modules/@openclaw/fs-safe/dist/json-durable-queue.js +215 -0
  235. package/node_modules/@openclaw/fs-safe/dist/json-store.d.ts +8 -0
  236. package/node_modules/@openclaw/fs-safe/dist/json-store.js +15 -0
  237. package/node_modules/@openclaw/fs-safe/dist/json-stringify.d.ts +1 -0
  238. package/node_modules/@openclaw/fs-safe/dist/json-stringify.js +7 -0
  239. package/node_modules/@openclaw/fs-safe/dist/json.d.ts +49 -0
  240. package/node_modules/@openclaw/fs-safe/dist/json.js +323 -0
  241. package/node_modules/@openclaw/fs-safe/dist/local-file-access.d.ts +8 -0
  242. package/node_modules/@openclaw/fs-safe/dist/local-file-access.js +84 -0
  243. package/node_modules/@openclaw/fs-safe/dist/local-file-descriptor.d.ts +16 -0
  244. package/node_modules/@openclaw/fs-safe/dist/local-file-descriptor.js +84 -0
  245. package/node_modules/@openclaw/fs-safe/dist/local-roots.d.ts +25 -0
  246. package/node_modules/@openclaw/fs-safe/dist/local-roots.js +160 -0
  247. package/node_modules/@openclaw/fs-safe/dist/lock-config.d.ts +9 -0
  248. package/node_modules/@openclaw/fs-safe/dist/lock-config.js +12 -0
  249. package/node_modules/@openclaw/fs-safe/dist/move-path-cleanup.d.ts +30 -0
  250. package/node_modules/@openclaw/fs-safe/dist/move-path-cleanup.js +224 -0
  251. package/node_modules/@openclaw/fs-safe/dist/move-path-stage.d.ts +7 -0
  252. package/node_modules/@openclaw/fs-safe/dist/move-path-stage.js +56 -0
  253. package/node_modules/@openclaw/fs-safe/dist/move-path.d.ts +20 -0
  254. package/node_modules/@openclaw/fs-safe/dist/move-path.js +390 -0
  255. package/node_modules/@openclaw/fs-safe/dist/mutation-authority.d.ts +8 -0
  256. package/node_modules/@openclaw/fs-safe/dist/mutation-authority.js +36 -0
  257. package/node_modules/@openclaw/fs-safe/dist/native-binding.d.ts +162 -0
  258. package/node_modules/@openclaw/fs-safe/dist/native-binding.js +8 -0
  259. package/node_modules/@openclaw/fs-safe/dist/native-config.d.ts +16 -0
  260. package/node_modules/@openclaw/fs-safe/dist/native-config.js +71 -0
  261. package/node_modules/@openclaw/fs-safe/dist/native-directory-observation.d.ts +16 -0
  262. package/node_modules/@openclaw/fs-safe/dist/native-directory-observation.js +37 -0
  263. package/node_modules/@openclaw/fs-safe/dist/native-fallback-warning.d.ts +3 -0
  264. package/node_modules/@openclaw/fs-safe/dist/native-fallback-warning.js +11 -0
  265. package/node_modules/@openclaw/fs-safe/dist/native-operations.d.ts +15 -0
  266. package/node_modules/@openclaw/fs-safe/dist/native-operations.js +111 -0
  267. package/node_modules/@openclaw/fs-safe/dist/native-parent-admission.d.ts +34 -0
  268. package/node_modules/@openclaw/fs-safe/dist/native-parent-admission.js +147 -0
  269. package/node_modules/@openclaw/fs-safe/dist/native-pinned-write-windows.d.ts +6 -0
  270. package/node_modules/@openclaw/fs-safe/dist/native-pinned-write-windows.js +252 -0
  271. package/node_modules/@openclaw/fs-safe/dist/native-pinned-write.d.ts +4 -0
  272. package/node_modules/@openclaw/fs-safe/dist/native-pinned-write.js +472 -0
  273. package/node_modules/@openclaw/fs-safe/dist/native-policy-directory-observation.d.ts +11 -0
  274. package/node_modules/@openclaw/fs-safe/dist/native-policy-directory-observation.js +61 -0
  275. package/node_modules/@openclaw/fs-safe/dist/native-policy-parent-windows.d.ts +13 -0
  276. package/node_modules/@openclaw/fs-safe/dist/native-policy-parent-windows.js +209 -0
  277. package/node_modules/@openclaw/fs-safe/dist/native-rename-outcome.d.ts +3 -0
  278. package/node_modules/@openclaw/fs-safe/dist/native-rename-outcome.js +8 -0
  279. package/node_modules/@openclaw/fs-safe/dist/native-staged-file.d.ts +45 -0
  280. package/node_modules/@openclaw/fs-safe/dist/native-staged-file.js +442 -0
  281. package/node_modules/@openclaw/fs-safe/dist/native.d.ts +13 -0
  282. package/node_modules/@openclaw/fs-safe/dist/native.js +209 -0
  283. package/node_modules/@openclaw/fs-safe/dist/opened-file-failure.d.ts +7 -0
  284. package/node_modules/@openclaw/fs-safe/dist/opened-file-failure.js +46 -0
  285. package/node_modules/@openclaw/fs-safe/dist/opened-realpath.d.ts +15 -0
  286. package/node_modules/@openclaw/fs-safe/dist/opened-realpath.js +102 -0
  287. package/node_modules/@openclaw/fs-safe/dist/output.d.ts +16 -0
  288. package/node_modules/@openclaw/fs-safe/dist/output.js +139 -0
  289. package/node_modules/@openclaw/fs-safe/dist/overwrite-file-handle.d.ts +7 -0
  290. package/node_modules/@openclaw/fs-safe/dist/overwrite-file-handle.js +46 -0
  291. package/node_modules/@openclaw/fs-safe/dist/owner-dacl.d.ts +30 -0
  292. package/node_modules/@openclaw/fs-safe/dist/owner-dacl.js +36 -0
  293. package/node_modules/@openclaw/fs-safe/dist/path-case.d.ts +6 -0
  294. package/node_modules/@openclaw/fs-safe/dist/path-case.js +136 -0
  295. package/node_modules/@openclaw/fs-safe/dist/path-policy.d.ts +24 -0
  296. package/node_modules/@openclaw/fs-safe/dist/path-policy.js +49 -0
  297. package/node_modules/@openclaw/fs-safe/dist/path-prefix.d.ts +6 -0
  298. package/node_modules/@openclaw/fs-safe/dist/path-prefix.js +104 -0
  299. package/node_modules/@openclaw/fs-safe/dist/path-scope-lexical.d.ts +13 -0
  300. package/node_modules/@openclaw/fs-safe/dist/path-scope-lexical.js +37 -0
  301. package/node_modules/@openclaw/fs-safe/dist/path-segment-route.d.ts +6 -0
  302. package/node_modules/@openclaw/fs-safe/dist/path-segment-route.js +24 -0
  303. package/node_modules/@openclaw/fs-safe/dist/path-suffix-aliases.d.ts +11 -0
  304. package/node_modules/@openclaw/fs-safe/dist/path-suffix-aliases.js +394 -0
  305. package/node_modules/@openclaw/fs-safe/dist/path.d.ts +20 -0
  306. package/node_modules/@openclaw/fs-safe/dist/path.js +169 -0
  307. package/node_modules/@openclaw/fs-safe/dist/permission-exec.d.ts +26 -0
  308. package/node_modules/@openclaw/fs-safe/dist/permission-exec.js +197 -0
  309. package/node_modules/@openclaw/fs-safe/dist/permissions-public.d.ts +3 -0
  310. package/node_modules/@openclaw/fs-safe/dist/permissions-public.js +3 -0
  311. package/node_modules/@openclaw/fs-safe/dist/permissions-windows.d.ts +51 -0
  312. package/node_modules/@openclaw/fs-safe/dist/permissions-windows.js +319 -0
  313. package/node_modules/@openclaw/fs-safe/dist/permissions.d.ts +59 -0
  314. package/node_modules/@openclaw/fs-safe/dist/permissions.js +132 -0
  315. package/node_modules/@openclaw/fs-safe/dist/pinned-mutation-admission.d.ts +24 -0
  316. package/node_modules/@openclaw/fs-safe/dist/pinned-mutation-admission.js +419 -0
  317. package/node_modules/@openclaw/fs-safe/dist/pinned-mutation-observation.d.ts +38 -0
  318. package/node_modules/@openclaw/fs-safe/dist/pinned-mutation-observation.js +205 -0
  319. package/node_modules/@openclaw/fs-safe/dist/pinned-mutation-shared-route.d.ts +24 -0
  320. package/node_modules/@openclaw/fs-safe/dist/pinned-mutation-shared-route.js +70 -0
  321. package/node_modules/@openclaw/fs-safe/dist/pinned-open.d.ts +30 -0
  322. package/node_modules/@openclaw/fs-safe/dist/pinned-open.js +99 -0
  323. package/node_modules/@openclaw/fs-safe/dist/pinned-operation.d.ts +1 -0
  324. package/node_modules/@openclaw/fs-safe/dist/pinned-operation.js +22 -0
  325. package/node_modules/@openclaw/fs-safe/dist/pinned-write-input.d.ts +3 -0
  326. package/node_modules/@openclaw/fs-safe/dist/pinned-write-input.js +35 -0
  327. package/node_modules/@openclaw/fs-safe/dist/pinned-write-mode.d.ts +4 -0
  328. package/node_modules/@openclaw/fs-safe/dist/pinned-write-mode.js +31 -0
  329. package/node_modules/@openclaw/fs-safe/dist/pinned-write-staged.d.ts +5 -0
  330. package/node_modules/@openclaw/fs-safe/dist/pinned-write-staged.js +185 -0
  331. package/node_modules/@openclaw/fs-safe/dist/pinned-write-types.d.ts +68 -0
  332. package/node_modules/@openclaw/fs-safe/dist/pinned-write-types.js +1 -0
  333. package/node_modules/@openclaw/fs-safe/dist/pinned-write.d.ts +12 -0
  334. package/node_modules/@openclaw/fs-safe/dist/pinned-write.js +300 -0
  335. package/node_modules/@openclaw/fs-safe/dist/positional-read.d.ts +8 -0
  336. package/node_modules/@openclaw/fs-safe/dist/positional-read.js +36 -0
  337. package/node_modules/@openclaw/fs-safe/dist/private-directory.d.ts +4 -0
  338. package/node_modules/@openclaw/fs-safe/dist/private-directory.js +30 -0
  339. package/node_modules/@openclaw/fs-safe/dist/private-producer-handoff-sync.d.ts +3 -0
  340. package/node_modules/@openclaw/fs-safe/dist/private-producer-handoff-sync.js +72 -0
  341. package/node_modules/@openclaw/fs-safe/dist/private-producer-handoff.d.ts +53 -0
  342. package/node_modules/@openclaw/fs-safe/dist/private-producer-handoff.js +358 -0
  343. package/node_modules/@openclaw/fs-safe/dist/private-temp-workspace.d.ts +7 -0
  344. package/node_modules/@openclaw/fs-safe/dist/private-temp-workspace.js +341 -0
  345. package/node_modules/@openclaw/fs-safe/dist/publish-copy-stage.d.ts +13 -0
  346. package/node_modules/@openclaw/fs-safe/dist/publish-copy-stage.js +56 -0
  347. package/node_modules/@openclaw/fs-safe/dist/publish-file-failure.d.ts +27 -0
  348. package/node_modules/@openclaw/fs-safe/dist/publish-file-failure.js +22 -0
  349. package/node_modules/@openclaw/fs-safe/dist/publish-file.d.ts +19 -0
  350. package/node_modules/@openclaw/fs-safe/dist/publish-file.js +332 -0
  351. package/node_modules/@openclaw/fs-safe/dist/read-open-flags.d.ts +7 -0
  352. package/node_modules/@openclaw/fs-safe/dist/read-open-flags.js +13 -0
  353. package/node_modules/@openclaw/fs-safe/dist/read-opened-file.d.ts +20 -0
  354. package/node_modules/@openclaw/fs-safe/dist/read-opened-file.js +18 -0
  355. package/node_modules/@openclaw/fs-safe/dist/realpath.d.ts +3 -0
  356. package/node_modules/@openclaw/fs-safe/dist/realpath.js +43 -0
  357. package/node_modules/@openclaw/fs-safe/dist/recursive-mkdir-path.d.ts +2 -0
  358. package/node_modules/@openclaw/fs-safe/dist/recursive-mkdir-path.js +8 -0
  359. package/node_modules/@openclaw/fs-safe/dist/regular-file.d.ts +37 -0
  360. package/node_modules/@openclaw/fs-safe/dist/regular-file.js +317 -0
  361. package/node_modules/@openclaw/fs-safe/dist/replace-directory.d.ts +6 -0
  362. package/node_modules/@openclaw/fs-safe/dist/replace-directory.js +287 -0
  363. package/node_modules/@openclaw/fs-safe/dist/replace-file-copy-fallback.d.ts +38 -0
  364. package/node_modules/@openclaw/fs-safe/dist/replace-file-copy-fallback.js +341 -0
  365. package/node_modules/@openclaw/fs-safe/dist/replace-file-copy-source.d.ts +20 -0
  366. package/node_modules/@openclaw/fs-safe/dist/replace-file-copy-source.js +101 -0
  367. package/node_modules/@openclaw/fs-safe/dist/replace-file-descriptor.d.ts +50 -0
  368. package/node_modules/@openclaw/fs-safe/dist/replace-file-descriptor.js +160 -0
  369. package/node_modules/@openclaw/fs-safe/dist/replace-file-mode.d.ts +2 -0
  370. package/node_modules/@openclaw/fs-safe/dist/replace-file-mode.js +10 -0
  371. package/node_modules/@openclaw/fs-safe/dist/replace-file-rename-policy.d.ts +5 -0
  372. package/node_modules/@openclaw/fs-safe/dist/replace-file-rename-policy.js +30 -0
  373. package/node_modules/@openclaw/fs-safe/dist/replace-file-temp-owner.d.ts +49 -0
  374. package/node_modules/@openclaw/fs-safe/dist/replace-file-temp-owner.js +356 -0
  375. package/node_modules/@openclaw/fs-safe/dist/replace-file.d.ts +58 -0
  376. package/node_modules/@openclaw/fs-safe/dist/replace-file.js +336 -0
  377. package/node_modules/@openclaw/fs-safe/dist/retained-directory-replacement.d.ts +25 -0
  378. package/node_modules/@openclaw/fs-safe/dist/retained-directory-replacement.js +193 -0
  379. package/node_modules/@openclaw/fs-safe/dist/root-boundary.d.ts +29 -0
  380. package/node_modules/@openclaw/fs-safe/dist/root-boundary.js +186 -0
  381. package/node_modules/@openclaw/fs-safe/dist/root-context.d.ts +43 -0
  382. package/node_modules/@openclaw/fs-safe/dist/root-context.js +232 -0
  383. package/node_modules/@openclaw/fs-safe/dist/root-create-input.d.ts +16 -0
  384. package/node_modules/@openclaw/fs-safe/dist/root-create-input.js +93 -0
  385. package/node_modules/@openclaw/fs-safe/dist/root-directory-creation.d.ts +12 -0
  386. package/node_modules/@openclaw/fs-safe/dist/root-directory-creation.js +225 -0
  387. package/node_modules/@openclaw/fs-safe/dist/root-directory-list.d.ts +38 -0
  388. package/node_modules/@openclaw/fs-safe/dist/root-directory-list.js +382 -0
  389. package/node_modules/@openclaw/fs-safe/dist/root-directory.d.ts +22 -0
  390. package/node_modules/@openclaw/fs-safe/dist/root-directory.js +141 -0
  391. package/node_modules/@openclaw/fs-safe/dist/root-entries.d.ts +10 -0
  392. package/node_modules/@openclaw/fs-safe/dist/root-entries.js +61 -0
  393. package/node_modules/@openclaw/fs-safe/dist/root-errors.d.ts +16 -0
  394. package/node_modules/@openclaw/fs-safe/dist/root-errors.js +92 -0
  395. package/node_modules/@openclaw/fs-safe/dist/root-file-final-admission.d.ts +20 -0
  396. package/node_modules/@openclaw/fs-safe/dist/root-file-final-admission.js +86 -0
  397. package/node_modules/@openclaw/fs-safe/dist/root-file.d.ts +46 -0
  398. package/node_modules/@openclaw/fs-safe/dist/root-file.js +208 -0
  399. package/node_modules/@openclaw/fs-safe/dist/root-impl.d.ts +117 -0
  400. package/node_modules/@openclaw/fs-safe/dist/root-impl.js +1443 -0
  401. package/node_modules/@openclaw/fs-safe/dist/root-move-noreplace.d.ts +15 -0
  402. package/node_modules/@openclaw/fs-safe/dist/root-move-noreplace.js +205 -0
  403. package/node_modules/@openclaw/fs-safe/dist/root-move-preflight.d.ts +7 -0
  404. package/node_modules/@openclaw/fs-safe/dist/root-move-preflight.js +16 -0
  405. package/node_modules/@openclaw/fs-safe/dist/root-observed-path.d.ts +8 -0
  406. package/node_modules/@openclaw/fs-safe/dist/root-observed-path.js +93 -0
  407. package/node_modules/@openclaw/fs-safe/dist/root-options.d.ts +84 -0
  408. package/node_modules/@openclaw/fs-safe/dist/root-options.js +18 -0
  409. package/node_modules/@openclaw/fs-safe/dist/root-path-errors.d.ts +12 -0
  410. package/node_modules/@openclaw/fs-safe/dist/root-path-errors.js +22 -0
  411. package/node_modules/@openclaw/fs-safe/dist/root-path-existing.d.ts +12 -0
  412. package/node_modules/@openclaw/fs-safe/dist/root-path-existing.js +160 -0
  413. package/node_modules/@openclaw/fs-safe/dist/root-path-observation.d.ts +62 -0
  414. package/node_modules/@openclaw/fs-safe/dist/root-path-observation.js +180 -0
  415. package/node_modules/@openclaw/fs-safe/dist/root-path-stat.d.ts +4 -0
  416. package/node_modules/@openclaw/fs-safe/dist/root-path-stat.js +151 -0
  417. package/node_modules/@openclaw/fs-safe/dist/root-path.d.ts +53 -0
  418. package/node_modules/@openclaw/fs-safe/dist/root-path.js +443 -0
  419. package/node_modules/@openclaw/fs-safe/dist/root-paths-lexical.d.ts +8 -0
  420. package/node_modules/@openclaw/fs-safe/dist/root-paths-lexical.js +22 -0
  421. package/node_modules/@openclaw/fs-safe/dist/root-paths.d.ts +62 -0
  422. package/node_modules/@openclaw/fs-safe/dist/root-paths.js +296 -0
  423. package/node_modules/@openclaw/fs-safe/dist/root-public-types.d.ts +11 -0
  424. package/node_modules/@openclaw/fs-safe/dist/root-public-types.js +1 -0
  425. package/node_modules/@openclaw/fs-safe/dist/root-read-admission.d.ts +25 -0
  426. package/node_modules/@openclaw/fs-safe/dist/root-read-admission.js +86 -0
  427. package/node_modules/@openclaw/fs-safe/dist/root-remove-identity.d.ts +14 -0
  428. package/node_modules/@openclaw/fs-safe/dist/root-remove-identity.js +87 -0
  429. package/node_modules/@openclaw/fs-safe/dist/root-remove-receipt.d.ts +16 -0
  430. package/node_modules/@openclaw/fs-safe/dist/root-remove-receipt.js +37 -0
  431. package/node_modules/@openclaw/fs-safe/dist/root-remove.d.ts +6 -0
  432. package/node_modules/@openclaw/fs-safe/dist/root-remove.js +464 -0
  433. package/node_modules/@openclaw/fs-safe/dist/root-symlink-policy.d.ts +13 -0
  434. package/node_modules/@openclaw/fs-safe/dist/root-symlink-policy.js +34 -0
  435. package/node_modules/@openclaw/fs-safe/dist/root-walk.d.ts +41 -0
  436. package/node_modules/@openclaw/fs-safe/dist/root-walk.js +198 -0
  437. package/node_modules/@openclaw/fs-safe/dist/root-write-admission.d.ts +65 -0
  438. package/node_modules/@openclaw/fs-safe/dist/root-write-admission.js +304 -0
  439. package/node_modules/@openclaw/fs-safe/dist/root-write-compatibility.d.ts +11 -0
  440. package/node_modules/@openclaw/fs-safe/dist/root-write-compatibility.js +23 -0
  441. package/node_modules/@openclaw/fs-safe/dist/root-write-complete-parent.d.ts +41 -0
  442. package/node_modules/@openclaw/fs-safe/dist/root-write-complete-parent.js +180 -0
  443. package/node_modules/@openclaw/fs-safe/dist/root-write-lock-binding.d.ts +14 -0
  444. package/node_modules/@openclaw/fs-safe/dist/root-write-lock-binding.js +162 -0
  445. package/node_modules/@openclaw/fs-safe/dist/root-write-mode.d.ts +7 -0
  446. package/node_modules/@openclaw/fs-safe/dist/root-write-mode.js +72 -0
  447. package/node_modules/@openclaw/fs-safe/dist/root-write-publication.d.ts +23 -0
  448. package/node_modules/@openclaw/fs-safe/dist/root-write-publication.js +85 -0
  449. package/node_modules/@openclaw/fs-safe/dist/root-write-verification.d.ts +11 -0
  450. package/node_modules/@openclaw/fs-safe/dist/root-write-verification.js +95 -0
  451. package/node_modules/@openclaw/fs-safe/dist/root.d.ts +2 -0
  452. package/node_modules/@openclaw/fs-safe/dist/root.js +1 -0
  453. package/node_modules/@openclaw/fs-safe/dist/safe-path-segment.d.ts +11 -0
  454. package/node_modules/@openclaw/fs-safe/dist/safe-path-segment.js +74 -0
  455. package/node_modules/@openclaw/fs-safe/dist/secret-file.d.ts +25 -0
  456. package/node_modules/@openclaw/fs-safe/dist/secret-file.js +337 -0
  457. package/node_modules/@openclaw/fs-safe/dist/secret-read-async.d.ts +3 -0
  458. package/node_modules/@openclaw/fs-safe/dist/secret-read-async.js +58 -0
  459. package/node_modules/@openclaw/fs-safe/dist/secret-read-policy.d.ts +20 -0
  460. package/node_modules/@openclaw/fs-safe/dist/secret-read-policy.js +68 -0
  461. package/node_modules/@openclaw/fs-safe/dist/secret.d.ts +3 -0
  462. package/node_modules/@openclaw/fs-safe/dist/secret.js +3 -0
  463. package/node_modules/@openclaw/fs-safe/dist/secure-file-windows.d.ts +10 -0
  464. package/node_modules/@openclaw/fs-safe/dist/secure-file-windows.js +88 -0
  465. package/node_modules/@openclaw/fs-safe/dist/secure-file.d.ts +31 -0
  466. package/node_modules/@openclaw/fs-safe/dist/secure-file.js +297 -0
  467. package/node_modules/@openclaw/fs-safe/dist/secure-temp-dir.d.ts +29 -0
  468. package/node_modules/@openclaw/fs-safe/dist/secure-temp-dir.js +181 -0
  469. package/node_modules/@openclaw/fs-safe/dist/secure-temp-repair.d.ts +34 -0
  470. package/node_modules/@openclaw/fs-safe/dist/secure-temp-repair.js +110 -0
  471. package/node_modules/@openclaw/fs-safe/dist/sibling-staged-file.d.ts +17 -0
  472. package/node_modules/@openclaw/fs-safe/dist/sibling-staged-file.js +301 -0
  473. package/node_modules/@openclaw/fs-safe/dist/sibling-temp.d.ts +28 -0
  474. package/node_modules/@openclaw/fs-safe/dist/sibling-temp.js +132 -0
  475. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-acquire.d.ts +4 -0
  476. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-acquire.js +442 -0
  477. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-admission-context.d.ts +18 -0
  478. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-admission-context.js +60 -0
  479. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-admission-parser.d.ts +42 -0
  480. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-admission-parser.js +113 -0
  481. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-admission.d.ts +31 -0
  482. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-admission.js +1 -0
  483. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-handle.d.ts +26 -0
  484. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-handle.js +48 -0
  485. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-policy.d.ts +19 -0
  486. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-policy.js +113 -0
  487. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-reclaim.d.ts +67 -0
  488. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-reclaim.js +375 -0
  489. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-registration.d.ts +13 -0
  490. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-registration.js +47 -0
  491. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-root.d.ts +2 -0
  492. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-root.js +79 -0
  493. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-stale-admission.d.ts +38 -0
  494. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-stale-admission.js +228 -0
  495. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-target.d.ts +7 -0
  496. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-target.js +55 -0
  497. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-types.d.ts +68 -0
  498. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-types.js +1 -0
  499. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock.d.ts +13 -0
  500. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock.js +280 -0
  501. package/node_modules/@openclaw/fs-safe/dist/staged-directory.d.ts +27 -0
  502. package/node_modules/@openclaw/fs-safe/dist/staged-directory.js +148 -0
  503. package/node_modules/@openclaw/fs-safe/dist/staged-file-settlement.d.ts +16 -0
  504. package/node_modules/@openclaw/fs-safe/dist/staged-file-settlement.js +57 -0
  505. package/node_modules/@openclaw/fs-safe/dist/staged-file-types.d.ts +55 -0
  506. package/node_modules/@openclaw/fs-safe/dist/staged-file-types.js +1 -0
  507. package/node_modules/@openclaw/fs-safe/dist/stat-observation.d.ts +10 -0
  508. package/node_modules/@openclaw/fs-safe/dist/stat-observation.js +64 -0
  509. package/node_modules/@openclaw/fs-safe/dist/store.d.ts +3 -0
  510. package/node_modules/@openclaw/fs-safe/dist/store.js +3 -0
  511. package/node_modules/@openclaw/fs-safe/dist/strict-file-identity.d.ts +5 -0
  512. package/node_modules/@openclaw/fs-safe/dist/strict-file-identity.js +88 -0
  513. package/node_modules/@openclaw/fs-safe/dist/string-coerce.d.ts +4 -0
  514. package/node_modules/@openclaw/fs-safe/dist/string-coerce.js +16 -0
  515. package/node_modules/@openclaw/fs-safe/dist/suppressed-error.d.ts +5 -0
  516. package/node_modules/@openclaw/fs-safe/dist/suppressed-error.js +15 -0
  517. package/node_modules/@openclaw/fs-safe/dist/symlink-parents.d.ts +11 -0
  518. package/node_modules/@openclaw/fs-safe/dist/symlink-parents.js +58 -0
  519. package/node_modules/@openclaw/fs-safe/dist/temp-cleanup.d.ts +13 -0
  520. package/node_modules/@openclaw/fs-safe/dist/temp-cleanup.js +88 -0
  521. package/node_modules/@openclaw/fs-safe/dist/temp-target.d.ts +31 -0
  522. package/node_modules/@openclaw/fs-safe/dist/temp-target.js +238 -0
  523. package/node_modules/@openclaw/fs-safe/dist/temp-workspace-admission.d.ts +14 -0
  524. package/node_modules/@openclaw/fs-safe/dist/temp-workspace-admission.js +392 -0
  525. package/node_modules/@openclaw/fs-safe/dist/temp-workspace-child-admission.d.ts +23 -0
  526. package/node_modules/@openclaw/fs-safe/dist/temp-workspace-child-admission.js +151 -0
  527. package/node_modules/@openclaw/fs-safe/dist/temp-workspace-descriptor.d.ts +42 -0
  528. package/node_modules/@openclaw/fs-safe/dist/temp-workspace-descriptor.js +342 -0
  529. package/node_modules/@openclaw/fs-safe/dist/temp-workspace-owner.d.ts +24 -0
  530. package/node_modules/@openclaw/fs-safe/dist/temp-workspace-owner.js +403 -0
  531. package/node_modules/@openclaw/fs-safe/dist/temp-workspace-types.d.ts +39 -0
  532. package/node_modules/@openclaw/fs-safe/dist/temp-workspace-types.js +1 -0
  533. package/node_modules/@openclaw/fs-safe/dist/temp.d.ts +3 -0
  534. package/node_modules/@openclaw/fs-safe/dist/temp.js +2 -0
  535. package/node_modules/@openclaw/fs-safe/dist/test-hooks.d.ts +31 -0
  536. package/node_modules/@openclaw/fs-safe/dist/test-hooks.js +13 -0
  537. package/node_modules/@openclaw/fs-safe/dist/text-atomic.d.ts +13 -0
  538. package/node_modules/@openclaw/fs-safe/dist/text-atomic.js +16 -0
  539. package/node_modules/@openclaw/fs-safe/dist/timing.d.ts +8 -0
  540. package/node_modules/@openclaw/fs-safe/dist/timing.js +59 -0
  541. package/node_modules/@openclaw/fs-safe/dist/trash.d.ts +4 -0
  542. package/node_modules/@openclaw/fs-safe/dist/trash.js +219 -0
  543. package/node_modules/@openclaw/fs-safe/dist/types.d.ts +22 -0
  544. package/node_modules/@openclaw/fs-safe/dist/types.js +1 -0
  545. package/node_modules/@openclaw/fs-safe/dist/unicode-path.d.ts +2 -0
  546. package/node_modules/@openclaw/fs-safe/dist/unicode-path.js +16 -0
  547. package/node_modules/@openclaw/fs-safe/dist/walk.d.ts +40 -0
  548. package/node_modules/@openclaw/fs-safe/dist/walk.js +207 -0
  549. package/node_modules/@openclaw/fs-safe/dist/windows-command.d.ts +1 -0
  550. package/node_modules/@openclaw/fs-safe/dist/windows-command.js +34 -0
  551. package/node_modules/@openclaw/fs-safe/dist/windows-owner.d.ts +28 -0
  552. package/node_modules/@openclaw/fs-safe/dist/windows-owner.js +101 -0
  553. package/node_modules/@openclaw/fs-safe/dist/windows-path-alias.d.ts +39 -0
  554. package/node_modules/@openclaw/fs-safe/dist/windows-path-alias.js +122 -0
  555. package/node_modules/@openclaw/fs-safe/dist/windows-path-syntax.d.ts +5 -0
  556. package/node_modules/@openclaw/fs-safe/dist/windows-path-syntax.js +21 -0
  557. package/node_modules/@openclaw/fs-safe/dist/windows-security-bridge.cs +336 -0
  558. package/node_modules/@openclaw/fs-safe/dist/windows-security-bridge.ps1 +15 -0
  559. package/node_modules/@openclaw/fs-safe/dist/windows-security-command.d.ts +25 -0
  560. package/node_modules/@openclaw/fs-safe/dist/windows-security-command.js +363 -0
  561. package/node_modules/@openclaw/fs-safe/dist/windows-security-facts.d.ts +5 -0
  562. package/node_modules/@openclaw/fs-safe/dist/windows-security-facts.js +108 -0
  563. package/node_modules/@openclaw/fs-safe/dist/write-file-handle.d.ts +13 -0
  564. package/node_modules/@openclaw/fs-safe/dist/write-file-handle.js +49 -0
  565. package/node_modules/@openclaw/fs-safe/dist/write-open-flags.d.ts +4 -0
  566. package/node_modules/@openclaw/fs-safe/dist/write-open-flags.js +27 -0
  567. package/node_modules/@openclaw/fs-safe/dist/write-queue.d.ts +1 -0
  568. package/node_modules/@openclaw/fs-safe/dist/write-queue.js +15 -0
  569. package/node_modules/@openclaw/fs-safe/docs/advanced.md +269 -0
  570. package/node_modules/@openclaw/fs-safe/docs/archive.md +843 -0
  571. package/node_modules/@openclaw/fs-safe/docs/assets/readme-banner.jpg +0 -0
  572. package/node_modules/@openclaw/fs-safe/docs/atomic.md +521 -0
  573. package/node_modules/@openclaw/fs-safe/docs/config.md +136 -0
  574. package/node_modules/@openclaw/fs-safe/docs/contributing.md +262 -0
  575. package/node_modules/@openclaw/fs-safe/docs/copy.md +197 -0
  576. package/node_modules/@openclaw/fs-safe/docs/creation.md +132 -0
  577. package/node_modules/@openclaw/fs-safe/docs/directory-identity.md +85 -0
  578. package/node_modules/@openclaw/fs-safe/docs/durability.md +438 -0
  579. package/node_modules/@openclaw/fs-safe/docs/entries.md +109 -0
  580. package/node_modules/@openclaw/fs-safe/docs/errors.md +240 -0
  581. package/node_modules/@openclaw/fs-safe/docs/file-contents.md +68 -0
  582. package/node_modules/@openclaw/fs-safe/docs/file-store.md +364 -0
  583. package/node_modules/@openclaw/fs-safe/docs/filename.md +110 -0
  584. package/node_modules/@openclaw/fs-safe/docs/guest.md +146 -0
  585. package/node_modules/@openclaw/fs-safe/docs/in-place-write.md +81 -0
  586. package/node_modules/@openclaw/fs-safe/docs/index.md +86 -0
  587. package/node_modules/@openclaw/fs-safe/docs/install-path.md +216 -0
  588. package/node_modules/@openclaw/fs-safe/docs/install.md +222 -0
  589. package/node_modules/@openclaw/fs-safe/docs/json-store.md +240 -0
  590. package/node_modules/@openclaw/fs-safe/docs/json.md +225 -0
  591. package/node_modules/@openclaw/fs-safe/docs/local-roots.md +150 -0
  592. package/node_modules/@openclaw/fs-safe/docs/migrating-to-0.5.md +205 -0
  593. package/node_modules/@openclaw/fs-safe/docs/migrating-to-0.6.md +48 -0
  594. package/node_modules/@openclaw/fs-safe/docs/mutation-policy-proof.md +69 -0
  595. package/node_modules/@openclaw/fs-safe/docs/native-helper.md +177 -0
  596. package/node_modules/@openclaw/fs-safe/docs/native.md +289 -0
  597. package/node_modules/@openclaw/fs-safe/docs/output.md +193 -0
  598. package/node_modules/@openclaw/fs-safe/docs/path-case.md +64 -0
  599. package/node_modules/@openclaw/fs-safe/docs/path-prefix.md +74 -0
  600. package/node_modules/@openclaw/fs-safe/docs/path-scope.md +159 -0
  601. package/node_modules/@openclaw/fs-safe/docs/path-suffix-aliases.md +204 -0
  602. package/node_modules/@openclaw/fs-safe/docs/path.md +219 -0
  603. package/node_modules/@openclaw/fs-safe/docs/permissions.md +286 -0
  604. package/node_modules/@openclaw/fs-safe/docs/positional-read.md +63 -0
  605. package/node_modules/@openclaw/fs-safe/docs/private-file-store.md +68 -0
  606. package/node_modules/@openclaw/fs-safe/docs/public-api.md +161 -0
  607. package/node_modules/@openclaw/fs-safe/docs/quickstart.md +154 -0
  608. package/node_modules/@openclaw/fs-safe/docs/reading.md +196 -0
  609. package/node_modules/@openclaw/fs-safe/docs/regular-file.md +193 -0
  610. package/node_modules/@openclaw/fs-safe/docs/root.md +545 -0
  611. package/node_modules/@openclaw/fs-safe/docs/secret-file.md +299 -0
  612. package/node_modules/@openclaw/fs-safe/docs/secure-file.md +112 -0
  613. package/node_modules/@openclaw/fs-safe/docs/security-model.md +269 -0
  614. package/node_modules/@openclaw/fs-safe/docs/sidecar-lock.md +595 -0
  615. package/node_modules/@openclaw/fs-safe/docs/staged-file.md +192 -0
  616. package/node_modules/@openclaw/fs-safe/docs/store.md +127 -0
  617. package/node_modules/@openclaw/fs-safe/docs/temp.md +760 -0
  618. package/node_modules/@openclaw/fs-safe/docs/test-hooks.md +110 -0
  619. package/node_modules/@openclaw/fs-safe/docs/testing.md +189 -0
  620. package/node_modules/@openclaw/fs-safe/docs/timing.md +123 -0
  621. package/node_modules/@openclaw/fs-safe/docs/types.md +211 -0
  622. package/node_modules/@openclaw/fs-safe/docs/walk.md +250 -0
  623. package/node_modules/@openclaw/fs-safe/docs/writing.md +641 -0
  624. package/node_modules/@openclaw/fs-safe/package.json +200 -0
  625. package/node_modules/@openclaw/fs-safe-darwin-arm64/fs-safe-native.node +0 -0
  626. package/node_modules/@openclaw/fs-safe-darwin-arm64/package.json +29 -0
  627. package/node_modules/@openclaw/fs-safe-darwin-x64/fs-safe-native.node +0 -0
  628. package/node_modules/@openclaw/fs-safe-darwin-x64/package.json +29 -0
  629. package/node_modules/@openclaw/fs-safe-linux-arm64-gnu/fs-safe-native.node +0 -0
  630. package/node_modules/@openclaw/fs-safe-linux-arm64-gnu/package.json +32 -0
  631. package/node_modules/@openclaw/fs-safe-linux-arm64-musl/fs-safe-native.node +0 -0
  632. package/node_modules/@openclaw/fs-safe-linux-arm64-musl/package.json +32 -0
  633. package/node_modules/@openclaw/fs-safe-linux-x64-gnu/fs-safe-native.node +0 -0
  634. package/node_modules/@openclaw/fs-safe-linux-x64-gnu/package.json +32 -0
  635. package/node_modules/@openclaw/fs-safe-linux-x64-musl/fs-safe-native.node +0 -0
  636. package/node_modules/@openclaw/fs-safe-linux-x64-musl/package.json +32 -0
  637. package/node_modules/@openclaw/fs-safe-win32-x64-msvc/fs-safe-native.node +0 -0
  638. package/node_modules/@openclaw/fs-safe-win32-x64-msvc/package.json +29 -0
  639. package/node_modules/core-util-is/LICENSE +19 -0
  640. package/node_modules/core-util-is/README.md +3 -0
  641. package/node_modules/core-util-is/lib/util.js +107 -0
  642. package/node_modules/core-util-is/package.json +38 -0
  643. package/node_modules/immediate/LICENSE.txt +20 -0
  644. package/node_modules/immediate/README.md +93 -0
  645. package/node_modules/immediate/dist/immediate.js +75 -0
  646. package/node_modules/immediate/dist/immediate.min.js +1 -0
  647. package/node_modules/immediate/lib/browser.js +69 -0
  648. package/node_modules/immediate/lib/index.js +73 -0
  649. package/node_modules/immediate/package.json +42 -0
  650. package/node_modules/inherits/LICENSE +16 -0
  651. package/node_modules/inherits/README.md +42 -0
  652. package/node_modules/inherits/inherits.js +9 -0
  653. package/node_modules/inherits/inherits_browser.js +27 -0
  654. package/node_modules/inherits/package.json +29 -0
  655. package/node_modules/isarray/.npmignore +1 -0
  656. package/node_modules/isarray/.travis.yml +4 -0
  657. package/node_modules/isarray/Makefile +6 -0
  658. package/node_modules/isarray/README.md +60 -0
  659. package/node_modules/isarray/component.json +19 -0
  660. package/node_modules/isarray/index.js +5 -0
  661. package/node_modules/isarray/package.json +45 -0
  662. package/node_modules/isarray/test.js +20 -0
  663. package/node_modules/jszip/.codeclimate.yml +16 -0
  664. package/node_modules/jszip/.editorconfig +8 -0
  665. package/node_modules/jszip/.eslintrc.js +43 -0
  666. package/node_modules/jszip/.github/FUNDING.yml +1 -0
  667. package/node_modules/jszip/.github/actions/setup/action.yml +23 -0
  668. package/node_modules/jszip/.github/workflows/benchmark.yml +38 -0
  669. package/node_modules/jszip/.github/workflows/main.yml +55 -0
  670. package/node_modules/jszip/CHANGES.md +210 -0
  671. package/node_modules/jszip/LICENSE.markdown +651 -0
  672. package/node_modules/jszip/README.markdown +33 -0
  673. package/node_modules/jszip/dist/jszip.js +11586 -0
  674. package/node_modules/jszip/dist/jszip.min.js +13 -0
  675. package/node_modules/jszip/index.d.ts +344 -0
  676. package/node_modules/jszip/lib/base64.js +106 -0
  677. package/node_modules/jszip/lib/compressedObject.js +74 -0
  678. package/node_modules/jszip/lib/compressions.js +14 -0
  679. package/node_modules/jszip/lib/crc32.js +77 -0
  680. package/node_modules/jszip/lib/defaults.js +11 -0
  681. package/node_modules/jszip/lib/external.js +18 -0
  682. package/node_modules/jszip/lib/flate.js +85 -0
  683. package/node_modules/jszip/lib/generate/ZipFileWorker.js +539 -0
  684. package/node_modules/jszip/lib/generate/index.js +57 -0
  685. package/node_modules/jszip/lib/index.js +55 -0
  686. package/node_modules/jszip/lib/license_header.js +11 -0
  687. package/node_modules/jszip/lib/load.js +88 -0
  688. package/node_modules/jszip/lib/nodejs/NodejsStreamInputAdapter.js +74 -0
  689. package/node_modules/jszip/lib/nodejs/NodejsStreamOutputAdapter.js +42 -0
  690. package/node_modules/jszip/lib/nodejsUtils.js +57 -0
  691. package/node_modules/jszip/lib/object.js +384 -0
  692. package/node_modules/jszip/lib/readable-stream-browser.js +10 -0
  693. package/node_modules/jszip/lib/reader/ArrayReader.js +57 -0
  694. package/node_modules/jszip/lib/reader/DataReader.js +116 -0
  695. package/node_modules/jszip/lib/reader/NodeBufferReader.js +19 -0
  696. package/node_modules/jszip/lib/reader/StringReader.js +38 -0
  697. package/node_modules/jszip/lib/reader/Uint8ArrayReader.js +22 -0
  698. package/node_modules/jszip/lib/reader/readerFor.js +28 -0
  699. package/node_modules/jszip/lib/signature.js +7 -0
  700. package/node_modules/jszip/lib/stream/ConvertWorker.js +26 -0
  701. package/node_modules/jszip/lib/stream/Crc32Probe.js +24 -0
  702. package/node_modules/jszip/lib/stream/DataLengthProbe.js +29 -0
  703. package/node_modules/jszip/lib/stream/DataWorker.js +116 -0
  704. package/node_modules/jszip/lib/stream/GenericWorker.js +263 -0
  705. package/node_modules/jszip/lib/stream/StreamHelper.js +214 -0
  706. package/node_modules/jszip/lib/support.js +38 -0
  707. package/node_modules/jszip/lib/utf8.js +275 -0
  708. package/node_modules/jszip/lib/utils.js +510 -0
  709. package/node_modules/jszip/lib/zipEntries.js +261 -0
  710. package/node_modules/jszip/lib/zipEntry.js +293 -0
  711. package/node_modules/jszip/lib/zipObject.js +133 -0
  712. package/node_modules/jszip/package.json +67 -0
  713. package/node_modules/jszip/sponsors.md +21 -0
  714. package/node_modules/jszip/tsconfig.json +101 -0
  715. package/node_modules/jszip/vendor/FileSaver.js +247 -0
  716. package/node_modules/lie/README.md +62 -0
  717. package/node_modules/lie/dist/lie.js +350 -0
  718. package/node_modules/lie/dist/lie.min.js +1 -0
  719. package/node_modules/lie/dist/lie.polyfill.js +358 -0
  720. package/node_modules/lie/dist/lie.polyfill.min.js +1 -0
  721. package/node_modules/lie/lib/browser.js +273 -0
  722. package/node_modules/lie/lib/index.js +298 -0
  723. package/node_modules/lie/license.md +7 -0
  724. package/node_modules/lie/lie.d.ts +244 -0
  725. package/node_modules/lie/package.json +69 -0
  726. package/node_modules/lie/polyfill.js +4 -0
  727. package/node_modules/pako/CHANGELOG.md +164 -0
  728. package/node_modules/pako/LICENSE +21 -0
  729. package/node_modules/pako/README.md +191 -0
  730. package/node_modules/pako/dist/pako.js +6818 -0
  731. package/node_modules/pako/dist/pako.min.js +1 -0
  732. package/node_modules/pako/dist/pako_deflate.js +3997 -0
  733. package/node_modules/pako/dist/pako_deflate.min.js +1 -0
  734. package/node_modules/pako/dist/pako_inflate.js +3300 -0
  735. package/node_modules/pako/dist/pako_inflate.min.js +1 -0
  736. package/node_modules/pako/index.js +14 -0
  737. package/node_modules/pako/lib/deflate.js +400 -0
  738. package/node_modules/pako/lib/inflate.js +423 -0
  739. package/node_modules/pako/lib/utils/common.js +105 -0
  740. package/node_modules/pako/lib/utils/strings.js +187 -0
  741. package/node_modules/pako/lib/zlib/README +59 -0
  742. package/node_modules/pako/lib/zlib/adler32.js +51 -0
  743. package/node_modules/pako/lib/zlib/constants.js +68 -0
  744. package/node_modules/pako/lib/zlib/crc32.js +59 -0
  745. package/node_modules/pako/lib/zlib/deflate.js +1874 -0
  746. package/node_modules/pako/lib/zlib/gzheader.js +58 -0
  747. package/node_modules/pako/lib/zlib/inffast.js +345 -0
  748. package/node_modules/pako/lib/zlib/inflate.js +1556 -0
  749. package/node_modules/pako/lib/zlib/inftrees.js +343 -0
  750. package/node_modules/pako/lib/zlib/messages.js +32 -0
  751. package/node_modules/pako/lib/zlib/trees.js +1222 -0
  752. package/node_modules/pako/lib/zlib/zstream.js +47 -0
  753. package/node_modules/pako/package.json +44 -0
  754. package/node_modules/process-nextick-args/index.js +45 -0
  755. package/node_modules/process-nextick-args/license.md +19 -0
  756. package/node_modules/process-nextick-args/package.json +25 -0
  757. package/node_modules/process-nextick-args/readme.md +18 -0
  758. package/node_modules/readable-stream/.travis.yml +34 -0
  759. package/node_modules/readable-stream/CONTRIBUTING.md +38 -0
  760. package/node_modules/readable-stream/GOVERNANCE.md +136 -0
  761. package/node_modules/readable-stream/LICENSE +47 -0
  762. package/node_modules/readable-stream/README.md +58 -0
  763. package/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md +60 -0
  764. package/node_modules/readable-stream/duplex-browser.js +1 -0
  765. package/node_modules/readable-stream/duplex.js +1 -0
  766. package/node_modules/readable-stream/lib/_stream_duplex.js +131 -0
  767. package/node_modules/readable-stream/lib/_stream_passthrough.js +47 -0
  768. package/node_modules/readable-stream/lib/_stream_readable.js +1019 -0
  769. package/node_modules/readable-stream/lib/_stream_transform.js +214 -0
  770. package/node_modules/readable-stream/lib/_stream_writable.js +685 -0
  771. package/node_modules/readable-stream/lib/internal/streams/BufferList.js +78 -0
  772. package/node_modules/readable-stream/lib/internal/streams/destroy.js +84 -0
  773. package/node_modules/readable-stream/lib/internal/streams/stream-browser.js +1 -0
  774. package/node_modules/readable-stream/lib/internal/streams/stream.js +1 -0
  775. package/node_modules/readable-stream/package.json +52 -0
  776. package/node_modules/readable-stream/passthrough.js +1 -0
  777. package/node_modules/readable-stream/readable-browser.js +7 -0
  778. package/node_modules/readable-stream/readable.js +19 -0
  779. package/node_modules/readable-stream/transform.js +1 -0
  780. package/node_modules/readable-stream/writable-browser.js +1 -0
  781. package/node_modules/readable-stream/writable.js +8 -0
  782. package/node_modules/safe-buffer/LICENSE +21 -0
  783. package/node_modules/safe-buffer/README.md +584 -0
  784. package/node_modules/safe-buffer/index.d.ts +187 -0
  785. package/node_modules/safe-buffer/index.js +62 -0
  786. package/node_modules/safe-buffer/package.json +37 -0
  787. package/node_modules/setimmediate/LICENSE.txt +20 -0
  788. package/node_modules/setimmediate/package.json +30 -0
  789. package/node_modules/setimmediate/setImmediate.js +186 -0
  790. package/node_modules/string_decoder/.travis.yml +50 -0
  791. package/node_modules/string_decoder/LICENSE +48 -0
  792. package/node_modules/string_decoder/README.md +47 -0
  793. package/node_modules/string_decoder/lib/string_decoder.js +296 -0
  794. package/node_modules/string_decoder/package.json +31 -0
  795. package/node_modules/util-deprecate/History.md +16 -0
  796. package/node_modules/util-deprecate/LICENSE +24 -0
  797. package/node_modules/util-deprecate/README.md +53 -0
  798. package/node_modules/util-deprecate/browser.js +67 -0
  799. package/node_modules/util-deprecate/node.js +6 -0
  800. package/node_modules/util-deprecate/package.json +27 -0
  801. package/node_modules/zod/README.md +29 -2
  802. package/node_modules/zod/compile.cjs +96 -0
  803. package/node_modules/zod/compile.d.cts +1 -0
  804. package/node_modules/zod/compile.d.ts +1 -0
  805. package/node_modules/zod/compile.js +52 -0
  806. package/node_modules/zod/index.cjs +21 -2
  807. package/node_modules/zod/index.d.cts +1 -2
  808. package/node_modules/zod/index.d.ts +1 -2
  809. package/node_modules/zod/index.js +5 -2
  810. package/node_modules/zod/locales/index.cjs +19 -0
  811. package/node_modules/zod/mini/index.cjs +19 -0
  812. package/node_modules/zod/package.json +20 -8
  813. package/node_modules/zod/src/compile.ts +56 -0
  814. package/node_modules/zod/src/index.ts +5 -2
  815. package/node_modules/zod/src/v3/ZodError.ts +22 -12
  816. package/node_modules/zod/src/v3/helpers/errorUtil.ts +1 -1
  817. package/node_modules/zod/src/v3/tests/error.test.ts +35 -0
  818. package/node_modules/zod/src/v3/tests/intersection.test.ts +18 -0
  819. package/node_modules/zod/src/v3/tests/language-server.test.ts +1 -2
  820. package/node_modules/zod/src/v3/tests/object.test.ts +3 -6
  821. package/node_modules/zod/src/v3/tests/readonly.test.ts +0 -80
  822. package/node_modules/zod/src/v3/tests/string.test.ts +6 -0
  823. package/node_modules/zod/src/v3/types.ts +5 -5
  824. package/node_modules/zod/src/v4/classic/checks.ts +1 -0
  825. package/node_modules/zod/src/v4/classic/compat.ts +26 -18
  826. package/node_modules/zod/src/v4/classic/deep-partial.ts +76 -0
  827. package/node_modules/zod/src/v4/classic/errors.ts +59 -44
  828. package/node_modules/zod/src/v4/classic/external.ts +14 -9
  829. package/node_modules/zod/src/v4/classic/from-json-schema.ts +363 -78
  830. package/node_modules/zod/src/v4/classic/in-out.ts +45 -0
  831. package/node_modules/zod/src/v4/classic/index.ts +2 -2
  832. package/node_modules/zod/src/v4/classic/iso.ts +2 -72
  833. package/node_modules/zod/src/v4/classic/parse.ts +10 -4
  834. package/node_modules/zod/src/v4/classic/schemas.ts +640 -375
  835. package/node_modules/zod/src/v4/classic/tests/apply.test.ts +27 -0
  836. package/node_modules/zod/src/v4/classic/tests/array.test.ts +2 -2
  837. package/node_modules/zod/src/v4/classic/tests/assignability.test.ts +186 -0
  838. package/node_modules/zod/src/v4/classic/tests/bigint.test.ts +36 -1
  839. package/node_modules/zod/src/v4/classic/tests/catch.test.ts +278 -0
  840. package/node_modules/zod/src/v4/classic/tests/codec-examples.test.ts +1 -2
  841. package/node_modules/zod/src/v4/classic/tests/codec.test.ts +2 -1
  842. package/node_modules/zod/src/v4/classic/tests/continuability.test.ts +3 -3
  843. package/node_modules/zod/src/v4/classic/tests/credit-card.test.ts +76 -0
  844. package/node_modules/zod/src/v4/classic/tests/cyclic-data.test.ts +985 -0
  845. package/node_modules/zod/src/v4/classic/tests/date.test.ts +30 -0
  846. package/node_modules/zod/src/v4/classic/tests/datetime.test.ts +32 -18
  847. package/node_modules/zod/src/v4/classic/tests/deep-partial.test.ts +380 -0
  848. package/node_modules/zod/src/v4/classic/tests/default-locale.test.ts +32 -0
  849. package/node_modules/zod/src/v4/classic/tests/default.test.ts +46 -0
  850. package/node_modules/zod/src/v4/classic/tests/detached-methods.test.ts +31 -7
  851. package/node_modules/zod/src/v4/classic/tests/discriminated-unions.test.ts +261 -13
  852. package/node_modules/zod/src/v4/classic/tests/enum.test.ts +20 -0
  853. package/node_modules/zod/src/v4/classic/tests/error-utils.test.ts +112 -2
  854. package/node_modules/zod/src/v4/classic/tests/error.test.ts +403 -6
  855. package/node_modules/zod/src/v4/classic/tests/from-json-schema.test.ts +582 -10
  856. package/node_modules/zod/src/v4/classic/tests/function.test.ts +31 -0
  857. package/node_modules/zod/src/v4/classic/tests/global-config.test.ts +2 -9
  858. package/node_modules/zod/src/v4/classic/tests/hash.test.ts +1 -2
  859. package/node_modules/zod/src/v4/classic/tests/iban.test.ts +81 -0
  860. package/node_modules/zod/src/v4/classic/tests/in-out.test.ts +159 -0
  861. package/node_modules/zod/src/v4/classic/tests/index.test.ts +21 -2
  862. package/node_modules/zod/src/v4/classic/tests/instance-footprint.test.ts +319 -0
  863. package/node_modules/zod/src/v4/classic/tests/instanceof.test.ts +67 -0
  864. package/node_modules/zod/src/v4/classic/tests/intersection.test.ts +136 -0
  865. package/node_modules/zod/src/v4/classic/tests/issue-schema.test.ts +215 -0
  866. package/node_modules/zod/src/v4/classic/tests/jitless-allows-eval.test.ts +3 -10
  867. package/node_modules/zod/src/v4/classic/tests/lazy.test.ts +36 -1
  868. package/node_modules/zod/src/v4/classic/tests/literal.test.ts +12 -1
  869. package/node_modules/zod/src/v4/classic/tests/map.test.ts +12 -0
  870. package/node_modules/zod/src/v4/classic/tests/number.test.ts +85 -9
  871. package/node_modules/zod/src/v4/classic/tests/object.test.ts +301 -12
  872. package/node_modules/zod/src/v4/classic/tests/optin-ladder.test.ts +235 -0
  873. package/node_modules/zod/src/v4/classic/tests/optional.test.ts +49 -16
  874. package/node_modules/zod/src/v4/classic/tests/partial.test.ts +51 -4
  875. package/node_modules/zod/src/v4/classic/tests/prefault.test.ts +70 -0
  876. package/node_modules/zod/src/v4/classic/tests/preprocess-types.test.ts +20 -2
  877. package/node_modules/zod/src/v4/classic/tests/properties.test.ts +141 -0
  878. package/node_modules/zod/src/v4/classic/tests/readonly.test.ts +0 -68
  879. package/node_modules/zod/src/v4/classic/tests/record.test.ts +186 -18
  880. package/node_modules/zod/src/v4/classic/tests/recursive-types.test.ts +79 -3
  881. package/node_modules/zod/src/v4/classic/tests/redos.test.ts +68 -0
  882. package/node_modules/zod/src/v4/classic/tests/refine.test.ts +60 -0
  883. package/node_modules/zod/src/v4/classic/tests/set.test.ts +9 -0
  884. package/node_modules/zod/src/v4/classic/tests/standard-schema.test.ts +19 -0
  885. package/node_modules/zod/src/v4/classic/tests/string.test.ts +222 -6
  886. package/node_modules/zod/src/v4/classic/tests/stringbool.test.ts +18 -0
  887. package/node_modules/zod/src/v4/classic/tests/template-literal.test.ts +44 -3
  888. package/node_modules/zod/src/v4/classic/tests/to-json-schema.test.ts +1812 -204
  889. package/node_modules/zod/src/v4/classic/tests/tuple.test.ts +45 -30
  890. package/node_modules/zod/src/v4/classic/tests/union.test.ts +39 -2
  891. package/node_modules/zod/src/v4/classic/tests/validate.test.ts +645 -0
  892. package/node_modules/zod/src/v4/classic/tests/validations.test.ts +2 -2
  893. package/node_modules/zod/src/v4/core/api.ts +87 -35
  894. package/node_modules/zod/src/v4/core/checks.ts +119 -146
  895. package/node_modules/zod/src/v4/core/compile.ts +2313 -0
  896. package/node_modules/zod/src/v4/core/core.ts +99 -22
  897. package/node_modules/zod/src/v4/core/doc.ts +17 -9
  898. package/node_modules/zod/src/v4/core/errors.ts +113 -25
  899. package/node_modules/zod/src/v4/core/index.ts +3 -0
  900. package/node_modules/zod/src/v4/core/json-schema-generator.ts +8 -3
  901. package/node_modules/zod/src/v4/core/json-schema-processors.ts +424 -156
  902. package/node_modules/zod/src/v4/core/json-schema.ts +2 -1
  903. package/node_modules/zod/src/v4/core/memoizer.ts +331 -0
  904. package/node_modules/zod/src/v4/core/parse.ts +164 -50
  905. package/node_modules/zod/src/v4/core/regexes.ts +42 -15
  906. package/node_modules/zod/src/v4/core/registries.ts +2 -2
  907. package/node_modules/zod/src/v4/core/schemas.ts +1000 -538
  908. package/node_modules/zod/src/v4/core/tests/cached.test.ts +54 -0
  909. package/node_modules/zod/src/v4/core/tests/compile-differential.test.ts +1004 -0
  910. package/node_modules/zod/src/v4/core/tests/compile-generative.test.ts +445 -0
  911. package/node_modules/zod/src/v4/core/tests/compile-global.test.ts +89 -0
  912. package/node_modules/zod/src/v4/core/tests/compile-off-by-default.test.ts +26 -0
  913. package/node_modules/zod/src/v4/core/tests/compile-stats.test.ts +34 -0
  914. package/node_modules/zod/src/v4/core/tests/compile.test.ts +2036 -0
  915. package/node_modules/zod/src/v4/core/tests/email-regex.test.ts +140 -0
  916. package/node_modules/zod/src/v4/core/tests/locales/el.test.ts +1 -2
  917. package/node_modules/zod/src/v4/core/tests/locales/es.test.ts +1 -2
  918. package/node_modules/zod/src/v4/core/tests/locales/fr.test.ts +3 -3
  919. package/node_modules/zod/src/v4/core/tests/locales/parity.test.ts +42 -0
  920. package/node_modules/zod/src/v4/core/tests/locales/tg.test.ts +85 -0
  921. package/node_modules/zod/src/v4/core/tests/locales/tk.test.ts +69 -0
  922. package/node_modules/zod/src/v4/core/tests/polyfill-collision.test.ts +46 -0
  923. package/node_modules/zod/src/v4/core/tests/treeshake.test.ts +51 -0
  924. package/node_modules/zod/src/v4/core/tests/url-no-canparse.test.ts +133 -0
  925. package/node_modules/zod/src/v4/core/to-json-schema.ts +283 -48
  926. package/node_modules/zod/src/v4/core/util.ts +454 -157
  927. package/node_modules/zod/src/v4/core/versions.ts +2 -2
  928. package/node_modules/zod/src/v4/core/visit.ts +193 -0
  929. package/node_modules/zod/src/v4/index.ts +3 -3
  930. package/node_modules/zod/src/v4/locales/ar.ts +5 -0
  931. package/node_modules/zod/src/v4/locales/az.ts +5 -0
  932. package/node_modules/zod/src/v4/locales/be.ts +12 -0
  933. package/node_modules/zod/src/v4/locales/bg.ts +5 -0
  934. package/node_modules/zod/src/v4/locales/bn.ts +123 -0
  935. package/node_modules/zod/src/v4/locales/ca.ts +5 -0
  936. package/node_modules/zod/src/v4/locales/ckb.ts +140 -0
  937. package/node_modules/zod/src/v4/locales/cs.ts +5 -0
  938. package/node_modules/zod/src/v4/locales/da.ts +7 -2
  939. package/node_modules/zod/src/v4/locales/de.ts +5 -0
  940. package/node_modules/zod/src/v4/locales/el.ts +3 -0
  941. package/node_modules/zod/src/v4/locales/en.ts +17 -4
  942. package/node_modules/zod/src/v4/locales/eo.ts +5 -0
  943. package/node_modules/zod/src/v4/locales/es.ts +4 -0
  944. package/node_modules/zod/src/v4/locales/fa.ts +5 -0
  945. package/node_modules/zod/src/v4/locales/fi.ts +5 -0
  946. package/node_modules/zod/src/v4/locales/fr-CA.ts +5 -0
  947. package/node_modules/zod/src/v4/locales/fr.ts +21 -14
  948. package/node_modules/zod/src/v4/locales/gu.ts +123 -0
  949. package/node_modules/zod/src/v4/locales/he.ts +8 -1
  950. package/node_modules/zod/src/v4/locales/hi.ts +126 -0
  951. package/node_modules/zod/src/v4/locales/hr.ts +4 -0
  952. package/node_modules/zod/src/v4/locales/hu.ts +5 -0
  953. package/node_modules/zod/src/v4/locales/hy.ts +11 -0
  954. package/node_modules/zod/src/v4/locales/id.ts +5 -0
  955. package/node_modules/zod/src/v4/locales/index.ts +11 -0
  956. package/node_modules/zod/src/v4/locales/is.ts +5 -0
  957. package/node_modules/zod/src/v4/locales/it.ts +5 -0
  958. package/node_modules/zod/src/v4/locales/ja.ts +5 -0
  959. package/node_modules/zod/src/v4/locales/ka.ts +5 -0
  960. package/node_modules/zod/src/v4/locales/km.ts +5 -0
  961. package/node_modules/zod/src/v4/locales/kn.ts +126 -0
  962. package/node_modules/zod/src/v4/locales/ko.ts +5 -0
  963. package/node_modules/zod/src/v4/locales/lt.ts +4 -0
  964. package/node_modules/zod/src/v4/locales/mk.ts +5 -0
  965. package/node_modules/zod/src/v4/locales/ms.ts +5 -0
  966. package/node_modules/zod/src/v4/locales/ne.ts +128 -0
  967. package/node_modules/zod/src/v4/locales/nl.ts +5 -0
  968. package/node_modules/zod/src/v4/locales/nn.ts +121 -0
  969. package/node_modules/zod/src/v4/locales/no.ts +7 -2
  970. package/node_modules/zod/src/v4/locales/ota.ts +5 -0
  971. package/node_modules/zod/src/v4/locales/pl.ts +5 -0
  972. package/node_modules/zod/src/v4/locales/ps.ts +5 -0
  973. package/node_modules/zod/src/v4/locales/pt-BR.ts +161 -0
  974. package/node_modules/zod/src/v4/locales/pt.ts +101 -58
  975. package/node_modules/zod/src/v4/locales/ro.ts +3 -0
  976. package/node_modules/zod/src/v4/locales/ru.ts +12 -0
  977. package/node_modules/zod/src/v4/locales/sk.ts +123 -0
  978. package/node_modules/zod/src/v4/locales/sl.ts +5 -0
  979. package/node_modules/zod/src/v4/locales/sv.ts +7 -2
  980. package/node_modules/zod/src/v4/locales/ta.ts +5 -0
  981. package/node_modules/zod/src/v4/locales/tg.ts +135 -0
  982. package/node_modules/zod/src/v4/locales/th.ts +5 -0
  983. package/node_modules/zod/src/v4/locales/tk.ts +113 -0
  984. package/node_modules/zod/src/v4/locales/tr.ts +5 -0
  985. package/node_modules/zod/src/v4/locales/uk.ts +5 -0
  986. package/node_modules/zod/src/v4/locales/ur.ts +5 -0
  987. package/node_modules/zod/src/v4/locales/uz.ts +3 -0
  988. package/node_modules/zod/src/v4/locales/vi.ts +5 -0
  989. package/node_modules/zod/src/v4/locales/yo.ts +5 -0
  990. package/node_modules/zod/src/v4/locales/zh-CN.ts +5 -0
  991. package/node_modules/zod/src/v4/locales/zh-TW.ts +5 -0
  992. package/node_modules/zod/src/v4/mini/checks.ts +1 -0
  993. package/node_modules/zod/src/v4/mini/deep-partial.ts +73 -0
  994. package/node_modules/zod/src/v4/mini/external.ts +12 -1
  995. package/node_modules/zod/src/v4/mini/in-out.ts +45 -0
  996. package/node_modules/zod/src/v4/mini/parse.ts +2 -0
  997. package/node_modules/zod/src/v4/mini/schemas.ts +167 -63
  998. package/node_modules/zod/src/v4/mini/tests/apply.test.ts +33 -0
  999. package/node_modules/zod/src/v4/mini/tests/assignability.test.ts +62 -1
  1000. package/node_modules/zod/src/v4/mini/tests/checks.test.ts +14 -0
  1001. package/node_modules/zod/src/v4/mini/tests/codec.test.ts +35 -1
  1002. package/node_modules/zod/src/v4/mini/tests/computed.test.ts +11 -17
  1003. package/node_modules/zod/src/v4/mini/tests/cyclic-data.test.ts +84 -0
  1004. package/node_modules/zod/src/v4/mini/tests/deep-partial.test.ts +54 -0
  1005. package/node_modules/zod/src/v4/mini/tests/error.test.ts +23 -4
  1006. package/node_modules/zod/src/v4/mini/tests/functions.test.ts +9 -0
  1007. package/node_modules/zod/src/v4/mini/tests/index.test.ts +158 -5
  1008. package/node_modules/zod/src/v4/mini/tests/number.test.ts +14 -0
  1009. package/node_modules/zod/src/v4/mini/tests/object.test.ts +65 -0
  1010. package/node_modules/zod/src/v4/mini/tests/recursive-types.test.ts +16 -0
  1011. package/node_modules/zod/src/v4/mini/tests/string.test.ts +44 -0
  1012. package/node_modules/zod/v3/ZodError.cjs +41 -12
  1013. package/node_modules/zod/v3/ZodError.d.cts +1 -1
  1014. package/node_modules/zod/v3/ZodError.d.ts +1 -1
  1015. package/node_modules/zod/v3/ZodError.js +22 -12
  1016. package/node_modules/zod/v3/errors.cjs +19 -0
  1017. package/node_modules/zod/v3/external.cjs +19 -0
  1018. package/node_modules/zod/v3/helpers/enumUtil.cjs +19 -0
  1019. package/node_modules/zod/v3/helpers/errorUtil.cjs +20 -1
  1020. package/node_modules/zod/v3/helpers/errorUtil.js +1 -1
  1021. package/node_modules/zod/v3/helpers/parseUtil.cjs +19 -0
  1022. package/node_modules/zod/v3/helpers/partialUtil.cjs +19 -0
  1023. package/node_modules/zod/v3/helpers/typeAliases.cjs +19 -0
  1024. package/node_modules/zod/v3/helpers/util.cjs +19 -0
  1025. package/node_modules/zod/v3/index.cjs +19 -0
  1026. package/node_modules/zod/v3/standard-schema.cjs +19 -0
  1027. package/node_modules/zod/v3/types.cjs +26 -5
  1028. package/node_modules/zod/v3/types.js +7 -5
  1029. package/node_modules/zod/v4/classic/checks.cjs +21 -1
  1030. package/node_modules/zod/v4/classic/checks.d.cts +1 -1
  1031. package/node_modules/zod/v4/classic/checks.d.ts +1 -1
  1032. package/node_modules/zod/v4/classic/checks.js +1 -1
  1033. package/node_modules/zod/v4/classic/coerce.cjs +19 -0
  1034. package/node_modules/zod/v4/classic/compat.cjs +19 -0
  1035. package/node_modules/zod/v4/classic/compat.d.cts +9 -11
  1036. package/node_modules/zod/v4/classic/compat.d.ts +9 -11
  1037. package/node_modules/zod/v4/classic/deep-partial.cjs +58 -0
  1038. package/node_modules/zod/v4/classic/deep-partial.d.cts +14 -0
  1039. package/node_modules/zod/v4/classic/deep-partial.d.ts +14 -0
  1040. package/node_modules/zod/v4/classic/deep-partial.js +13 -0
  1041. package/node_modules/zod/v4/classic/errors.cjs +62 -34
  1042. package/node_modules/zod/v4/classic/errors.d.cts +3 -4
  1043. package/node_modules/zod/v4/classic/errors.d.ts +3 -4
  1044. package/node_modules/zod/v4/classic/errors.js +43 -34
  1045. package/node_modules/zod/v4/classic/external.cjs +51 -27
  1046. package/node_modules/zod/v4/classic/external.d.cts +5 -2
  1047. package/node_modules/zod/v4/classic/external.d.ts +5 -2
  1048. package/node_modules/zod/v4/classic/external.js +5 -8
  1049. package/node_modules/zod/v4/classic/from-json-schema.cjs +376 -75
  1050. package/node_modules/zod/v4/classic/from-json-schema.js +357 -75
  1051. package/node_modules/zod/v4/classic/in-out.cjs +82 -0
  1052. package/node_modules/zod/v4/classic/in-out.d.cts +8 -0
  1053. package/node_modules/zod/v4/classic/in-out.d.ts +8 -0
  1054. package/node_modules/zod/v4/classic/in-out.js +36 -0
  1055. package/node_modules/zod/v4/classic/index.cjs +21 -2
  1056. package/node_modules/zod/v4/classic/index.d.cts +1 -2
  1057. package/node_modules/zod/v4/classic/index.d.ts +1 -2
  1058. package/node_modules/zod/v4/classic/index.js +2 -2
  1059. package/node_modules/zod/v4/classic/iso.cjs +30 -22
  1060. package/node_modules/zod/v4/classic/iso.d.cts +2 -17
  1061. package/node_modules/zod/v4/classic/iso.d.ts +2 -17
  1062. package/node_modules/zod/v4/classic/iso.js +2 -17
  1063. package/node_modules/zod/v4/classic/parse.cjs +23 -1
  1064. package/node_modules/zod/v4/classic/parse.d.cts +17 -4
  1065. package/node_modules/zod/v4/classic/parse.d.ts +17 -4
  1066. package/node_modules/zod/v4/classic/parse.js +1 -0
  1067. package/node_modules/zod/v4/classic/schemas.cjs +591 -426
  1068. package/node_modules/zod/v4/classic/schemas.d.cts +68 -19
  1069. package/node_modules/zod/v4/classic/schemas.d.ts +68 -19
  1070. package/node_modules/zod/v4/classic/schemas.js +564 -424
  1071. package/node_modules/zod/v4/core/api.cjs +66 -24
  1072. package/node_modules/zod/v4/core/api.d.cts +22 -12
  1073. package/node_modules/zod/v4/core/api.d.ts +22 -12
  1074. package/node_modules/zod/v4/core/api.js +44 -24
  1075. package/node_modules/zod/v4/core/checks.cjs +88 -128
  1076. package/node_modules/zod/v4/core/checks.d.cts +29 -13
  1077. package/node_modules/zod/v4/core/checks.d.ts +29 -13
  1078. package/node_modules/zod/v4/core/checks.js +68 -127
  1079. package/node_modules/zod/v4/core/compile.cjs +1908 -0
  1080. package/node_modules/zod/v4/core/compile.d.cts +65 -0
  1081. package/node_modules/zod/v4/core/compile.d.ts +65 -0
  1082. package/node_modules/zod/v4/core/compile.js +1858 -0
  1083. package/node_modules/zod/v4/core/core.cjs +101 -19
  1084. package/node_modules/zod/v4/core/core.d.cts +16 -4
  1085. package/node_modules/zod/v4/core/core.d.ts +16 -4
  1086. package/node_modules/zod/v4/core/core.js +83 -20
  1087. package/node_modules/zod/v4/core/doc.cjs +31 -9
  1088. package/node_modules/zod/v4/core/doc.d.cts +3 -1
  1089. package/node_modules/zod/v4/core/doc.d.ts +3 -1
  1090. package/node_modules/zod/v4/core/doc.js +12 -9
  1091. package/node_modules/zod/v4/core/errors.cjs +126 -25
  1092. package/node_modules/zod/v4/core/errors.d.cts +4 -0
  1093. package/node_modules/zod/v4/core/errors.d.ts +4 -0
  1094. package/node_modules/zod/v4/core/errors.js +107 -25
  1095. package/node_modules/zod/v4/core/index.cjs +24 -1
  1096. package/node_modules/zod/v4/core/index.d.cts +3 -0
  1097. package/node_modules/zod/v4/core/index.d.ts +3 -0
  1098. package/node_modules/zod/v4/core/index.js +3 -0
  1099. package/node_modules/zod/v4/core/json-schema-generator.cjs +24 -1
  1100. package/node_modules/zod/v4/core/json-schema-generator.d.cts +2 -2
  1101. package/node_modules/zod/v4/core/json-schema-generator.d.ts +2 -2
  1102. package/node_modules/zod/v4/core/json-schema-generator.js +6 -2
  1103. package/node_modules/zod/v4/core/json-schema-processors.cjs +441 -156
  1104. package/node_modules/zod/v4/core/json-schema-processors.d.cts +16 -0
  1105. package/node_modules/zod/v4/core/json-schema-processors.d.ts +16 -0
  1106. package/node_modules/zod/v4/core/json-schema-processors.js +400 -158
  1107. package/node_modules/zod/v4/core/json-schema.cjs +19 -0
  1108. package/node_modules/zod/v4/core/json-schema.d.cts +2 -1
  1109. package/node_modules/zod/v4/core/json-schema.d.ts +2 -1
  1110. package/node_modules/zod/v4/core/memoizer.cjs +360 -0
  1111. package/node_modules/zod/v4/core/memoizer.d.cts +15 -0
  1112. package/node_modules/zod/v4/core/memoizer.d.ts +15 -0
  1113. package/node_modules/zod/v4/core/memoizer.js +311 -0
  1114. package/node_modules/zod/v4/core/parse.cjs +148 -46
  1115. package/node_modules/zod/v4/core/parse.d.cts +14 -11
  1116. package/node_modules/zod/v4/core/parse.d.ts +14 -11
  1117. package/node_modules/zod/v4/core/parse.js +127 -45
  1118. package/node_modules/zod/v4/core/regexes.cjs +54 -17
  1119. package/node_modules/zod/v4/core/regexes.d.cts +5 -0
  1120. package/node_modules/zod/v4/core/regexes.d.ts +5 -0
  1121. package/node_modules/zod/v4/core/regexes.js +32 -15
  1122. package/node_modules/zod/v4/core/registries.cjs +19 -0
  1123. package/node_modules/zod/v4/core/registries.js +2 -2
  1124. package/node_modules/zod/v4/core/schemas.cjs +785 -386
  1125. package/node_modules/zod/v4/core/schemas.d.cts +123 -34
  1126. package/node_modules/zod/v4/core/schemas.d.ts +123 -34
  1127. package/node_modules/zod/v4/core/schemas.js +753 -386
  1128. package/node_modules/zod/v4/core/standard-schema.cjs +19 -0
  1129. package/node_modules/zod/v4/core/to-json-schema.cjs +269 -45
  1130. package/node_modules/zod/v4/core/to-json-schema.d.cts +45 -5
  1131. package/node_modules/zod/v4/core/to-json-schema.d.ts +45 -5
  1132. package/node_modules/zod/v4/core/to-json-schema.js +247 -44
  1133. package/node_modules/zod/v4/core/util.cjs +372 -157
  1134. package/node_modules/zod/v4/core/util.d.cts +79 -1
  1135. package/node_modules/zod/v4/core/util.d.ts +79 -1
  1136. package/node_modules/zod/v4/core/util.js +341 -156
  1137. package/node_modules/zod/v4/core/versions.cjs +21 -2
  1138. package/node_modules/zod/v4/core/versions.d.cts +1 -1
  1139. package/node_modules/zod/v4/core/versions.d.ts +1 -1
  1140. package/node_modules/zod/v4/core/versions.js +2 -2
  1141. package/node_modules/zod/v4/core/visit.cjs +214 -0
  1142. package/node_modules/zod/v4/core/visit.d.cts +30 -0
  1143. package/node_modules/zod/v4/core/visit.d.ts +30 -0
  1144. package/node_modules/zod/v4/core/visit.js +169 -0
  1145. package/node_modules/zod/v4/index.cjs +34 -5
  1146. package/node_modules/zod/v4/index.d.cts +2 -2
  1147. package/node_modules/zod/v4/index.d.ts +2 -2
  1148. package/node_modules/zod/v4/index.js +3 -2
  1149. package/node_modules/zod/v4/locales/ar.cjs +5 -0
  1150. package/node_modules/zod/v4/locales/ar.js +5 -0
  1151. package/node_modules/zod/v4/locales/az.cjs +5 -0
  1152. package/node_modules/zod/v4/locales/az.js +5 -0
  1153. package/node_modules/zod/v4/locales/be.cjs +12 -0
  1154. package/node_modules/zod/v4/locales/be.js +12 -0
  1155. package/node_modules/zod/v4/locales/bg.cjs +5 -0
  1156. package/node_modules/zod/v4/locales/bg.js +5 -0
  1157. package/node_modules/zod/v4/locales/bn.cjs +140 -0
  1158. package/node_modules/zod/v4/locales/bn.d.cts +5 -0
  1159. package/node_modules/zod/v4/locales/bn.d.ts +4 -0
  1160. package/node_modules/zod/v4/locales/bn.js +113 -0
  1161. package/node_modules/zod/v4/locales/ca.cjs +5 -0
  1162. package/node_modules/zod/v4/locales/ca.js +5 -0
  1163. package/node_modules/zod/v4/locales/ckb.cjs +160 -0
  1164. package/node_modules/zod/v4/locales/ckb.d.cts +5 -0
  1165. package/node_modules/zod/v4/locales/ckb.d.ts +4 -0
  1166. package/node_modules/zod/v4/locales/ckb.js +133 -0
  1167. package/node_modules/zod/v4/locales/cs.cjs +5 -0
  1168. package/node_modules/zod/v4/locales/cs.js +5 -0
  1169. package/node_modules/zod/v4/locales/da.cjs +7 -2
  1170. package/node_modules/zod/v4/locales/da.js +7 -2
  1171. package/node_modules/zod/v4/locales/de.cjs +5 -0
  1172. package/node_modules/zod/v4/locales/de.js +5 -0
  1173. package/node_modules/zod/v4/locales/el.cjs +3 -0
  1174. package/node_modules/zod/v4/locales/el.js +3 -0
  1175. package/node_modules/zod/v4/locales/en.cjs +16 -4
  1176. package/node_modules/zod/v4/locales/en.js +16 -4
  1177. package/node_modules/zod/v4/locales/eo.cjs +5 -0
  1178. package/node_modules/zod/v4/locales/eo.js +5 -0
  1179. package/node_modules/zod/v4/locales/es.cjs +4 -0
  1180. package/node_modules/zod/v4/locales/es.js +4 -0
  1181. package/node_modules/zod/v4/locales/fa.cjs +5 -0
  1182. package/node_modules/zod/v4/locales/fa.js +5 -0
  1183. package/node_modules/zod/v4/locales/fi.cjs +5 -0
  1184. package/node_modules/zod/v4/locales/fi.js +5 -0
  1185. package/node_modules/zod/v4/locales/fr-CA.cjs +5 -0
  1186. package/node_modules/zod/v4/locales/fr-CA.js +5 -0
  1187. package/node_modules/zod/v4/locales/fr.cjs +18 -14
  1188. package/node_modules/zod/v4/locales/fr.js +18 -14
  1189. package/node_modules/zod/v4/locales/gu.cjs +140 -0
  1190. package/node_modules/zod/v4/locales/gu.d.cts +5 -0
  1191. package/node_modules/zod/v4/locales/gu.d.ts +4 -0
  1192. package/node_modules/zod/v4/locales/gu.js +113 -0
  1193. package/node_modules/zod/v4/locales/he.cjs +7 -0
  1194. package/node_modules/zod/v4/locales/he.js +7 -0
  1195. package/node_modules/zod/v4/locales/hi.cjs +138 -0
  1196. package/node_modules/zod/v4/locales/hi.d.cts +5 -0
  1197. package/node_modules/zod/v4/locales/hi.d.ts +4 -0
  1198. package/node_modules/zod/v4/locales/hi.js +111 -0
  1199. package/node_modules/zod/v4/locales/hr.cjs +4 -0
  1200. package/node_modules/zod/v4/locales/hr.js +4 -0
  1201. package/node_modules/zod/v4/locales/hu.cjs +5 -0
  1202. package/node_modules/zod/v4/locales/hu.js +5 -0
  1203. package/node_modules/zod/v4/locales/hy.cjs +11 -0
  1204. package/node_modules/zod/v4/locales/hy.js +11 -0
  1205. package/node_modules/zod/v4/locales/id.cjs +5 -0
  1206. package/node_modules/zod/v4/locales/id.js +5 -0
  1207. package/node_modules/zod/v4/locales/index.cjs +43 -2
  1208. package/node_modules/zod/v4/locales/index.d.cts +11 -0
  1209. package/node_modules/zod/v4/locales/index.d.ts +11 -0
  1210. package/node_modules/zod/v4/locales/index.js +11 -0
  1211. package/node_modules/zod/v4/locales/is.cjs +5 -0
  1212. package/node_modules/zod/v4/locales/is.js +5 -0
  1213. package/node_modules/zod/v4/locales/it.cjs +5 -0
  1214. package/node_modules/zod/v4/locales/it.js +5 -0
  1215. package/node_modules/zod/v4/locales/ja.cjs +5 -0
  1216. package/node_modules/zod/v4/locales/ja.js +5 -0
  1217. package/node_modules/zod/v4/locales/ka.cjs +5 -0
  1218. package/node_modules/zod/v4/locales/ka.js +5 -0
  1219. package/node_modules/zod/v4/locales/km.cjs +5 -0
  1220. package/node_modules/zod/v4/locales/km.js +5 -0
  1221. package/node_modules/zod/v4/locales/kn.cjs +143 -0
  1222. package/node_modules/zod/v4/locales/kn.d.cts +5 -0
  1223. package/node_modules/zod/v4/locales/kn.d.ts +4 -0
  1224. package/node_modules/zod/v4/locales/kn.js +116 -0
  1225. package/node_modules/zod/v4/locales/ko.cjs +5 -0
  1226. package/node_modules/zod/v4/locales/ko.js +5 -0
  1227. package/node_modules/zod/v4/locales/lt.cjs +4 -0
  1228. package/node_modules/zod/v4/locales/lt.js +4 -0
  1229. package/node_modules/zod/v4/locales/mk.cjs +5 -0
  1230. package/node_modules/zod/v4/locales/mk.js +5 -0
  1231. package/node_modules/zod/v4/locales/ms.cjs +5 -0
  1232. package/node_modules/zod/v4/locales/ms.js +5 -0
  1233. package/node_modules/zod/v4/locales/ne.cjs +138 -0
  1234. package/node_modules/zod/v4/locales/ne.d.cts +5 -0
  1235. package/node_modules/zod/v4/locales/ne.d.ts +4 -0
  1236. package/node_modules/zod/v4/locales/ne.js +111 -0
  1237. package/node_modules/zod/v4/locales/nl.cjs +5 -0
  1238. package/node_modules/zod/v4/locales/nl.js +5 -0
  1239. package/node_modules/zod/v4/locales/nn.cjs +140 -0
  1240. package/node_modules/zod/v4/locales/nn.d.cts +5 -0
  1241. package/node_modules/zod/v4/locales/nn.d.ts +4 -0
  1242. package/node_modules/zod/v4/locales/nn.js +113 -0
  1243. package/node_modules/zod/v4/locales/no.cjs +7 -2
  1244. package/node_modules/zod/v4/locales/no.js +7 -2
  1245. package/node_modules/zod/v4/locales/ota.cjs +5 -0
  1246. package/node_modules/zod/v4/locales/ota.js +5 -0
  1247. package/node_modules/zod/v4/locales/pl.cjs +5 -0
  1248. package/node_modules/zod/v4/locales/pl.js +5 -0
  1249. package/node_modules/zod/v4/locales/ps.cjs +5 -0
  1250. package/node_modules/zod/v4/locales/ps.js +5 -0
  1251. package/node_modules/zod/v4/locales/pt-BR.cjs +170 -0
  1252. package/node_modules/zod/v4/locales/pt-BR.d.cts +5 -0
  1253. package/node_modules/zod/v4/locales/pt-BR.d.ts +4 -0
  1254. package/node_modules/zod/v4/locales/pt-BR.js +143 -0
  1255. package/node_modules/zod/v4/locales/pt.cjs +89 -55
  1256. package/node_modules/zod/v4/locales/pt.js +89 -55
  1257. package/node_modules/zod/v4/locales/ro.cjs +3 -0
  1258. package/node_modules/zod/v4/locales/ro.js +3 -0
  1259. package/node_modules/zod/v4/locales/ru.cjs +12 -0
  1260. package/node_modules/zod/v4/locales/ru.js +12 -0
  1261. package/node_modules/zod/v4/locales/sk.cjs +143 -0
  1262. package/node_modules/zod/v4/locales/sk.d.cts +5 -0
  1263. package/node_modules/zod/v4/locales/sk.d.ts +4 -0
  1264. package/node_modules/zod/v4/locales/sk.js +116 -0
  1265. package/node_modules/zod/v4/locales/sl.cjs +5 -0
  1266. package/node_modules/zod/v4/locales/sl.js +5 -0
  1267. package/node_modules/zod/v4/locales/sv.cjs +7 -2
  1268. package/node_modules/zod/v4/locales/sv.js +7 -2
  1269. package/node_modules/zod/v4/locales/ta.cjs +5 -0
  1270. package/node_modules/zod/v4/locales/ta.js +5 -0
  1271. package/node_modules/zod/v4/locales/tg.cjs +144 -0
  1272. package/node_modules/zod/v4/locales/tg.d.cts +5 -0
  1273. package/node_modules/zod/v4/locales/tg.d.ts +4 -0
  1274. package/node_modules/zod/v4/locales/tg.js +117 -0
  1275. package/node_modules/zod/v4/locales/th.cjs +5 -0
  1276. package/node_modules/zod/v4/locales/th.js +5 -0
  1277. package/node_modules/zod/v4/locales/tk.cjs +134 -0
  1278. package/node_modules/zod/v4/locales/tk.d.cts +5 -0
  1279. package/node_modules/zod/v4/locales/tk.d.ts +4 -0
  1280. package/node_modules/zod/v4/locales/tk.js +107 -0
  1281. package/node_modules/zod/v4/locales/tr.cjs +5 -0
  1282. package/node_modules/zod/v4/locales/tr.js +5 -0
  1283. package/node_modules/zod/v4/locales/uk.cjs +5 -0
  1284. package/node_modules/zod/v4/locales/uk.js +5 -0
  1285. package/node_modules/zod/v4/locales/ur.cjs +5 -0
  1286. package/node_modules/zod/v4/locales/ur.js +5 -0
  1287. package/node_modules/zod/v4/locales/uz.cjs +3 -0
  1288. package/node_modules/zod/v4/locales/uz.js +3 -0
  1289. package/node_modules/zod/v4/locales/vi.cjs +5 -0
  1290. package/node_modules/zod/v4/locales/vi.js +5 -0
  1291. package/node_modules/zod/v4/locales/yo.cjs +5 -0
  1292. package/node_modules/zod/v4/locales/yo.js +5 -0
  1293. package/node_modules/zod/v4/locales/zh-CN.cjs +5 -0
  1294. package/node_modules/zod/v4/locales/zh-CN.js +5 -0
  1295. package/node_modules/zod/v4/locales/zh-TW.cjs +5 -0
  1296. package/node_modules/zod/v4/locales/zh-TW.js +5 -0
  1297. package/node_modules/zod/v4/mini/checks.cjs +21 -1
  1298. package/node_modules/zod/v4/mini/checks.d.cts +1 -1
  1299. package/node_modules/zod/v4/mini/checks.d.ts +1 -1
  1300. package/node_modules/zod/v4/mini/checks.js +1 -1
  1301. package/node_modules/zod/v4/mini/coerce.cjs +19 -0
  1302. package/node_modules/zod/v4/mini/deep-partial.cjs +58 -0
  1303. package/node_modules/zod/v4/mini/deep-partial.d.cts +14 -0
  1304. package/node_modules/zod/v4/mini/deep-partial.d.ts +14 -0
  1305. package/node_modules/zod/v4/mini/deep-partial.js +13 -0
  1306. package/node_modules/zod/v4/mini/external.cjs +33 -1
  1307. package/node_modules/zod/v4/mini/external.d.cts +5 -2
  1308. package/node_modules/zod/v4/mini/external.d.ts +5 -2
  1309. package/node_modules/zod/v4/mini/external.js +3 -1
  1310. package/node_modules/zod/v4/mini/in-out.cjs +82 -0
  1311. package/node_modules/zod/v4/mini/in-out.d.cts +8 -0
  1312. package/node_modules/zod/v4/mini/in-out.d.ts +8 -0
  1313. package/node_modules/zod/v4/mini/in-out.js +36 -0
  1314. package/node_modules/zod/v4/mini/index.cjs +19 -0
  1315. package/node_modules/zod/v4/mini/iso.cjs +19 -0
  1316. package/node_modules/zod/v4/mini/parse.cjs +22 -1
  1317. package/node_modules/zod/v4/mini/parse.d.cts +1 -1
  1318. package/node_modules/zod/v4/mini/parse.d.ts +1 -1
  1319. package/node_modules/zod/v4/mini/parse.js +1 -1
  1320. package/node_modules/zod/v4/mini/schemas.cjs +117 -53
  1321. package/node_modules/zod/v4/mini/schemas.d.cts +49 -14
  1322. package/node_modules/zod/v4/mini/schemas.d.ts +49 -14
  1323. package/node_modules/zod/v4/mini/schemas.js +92 -51
  1324. package/node_modules/zod/v4-mini/index.cjs +19 -0
  1325. package/openclaw.plugin.json +35 -42
  1326. package/package.json +10 -6
  1327. package/dist/transport-probes.runtime-DV7x4VWu.js +0 -2
  1328. package/node_modules/zod/src/v4/core/config.ts +0 -15
  1329. /package/dist/{identity-YXPmgFMu.js → .setup/identity-YXPmgFMu.mjs} +0 -0
  1330. /package/dist/{normalize-l_b99hap.js → .setup/normalize-l_b99hap.mjs} +0 -0
  1331. /package/dist/{rolldown-runtime-8H4AJuhK.js → .setup/rolldown-runtime-8H4AJuhK.mjs} +0 -0
@@ -0,0 +1,521 @@
1
+ # Atomic writes
2
+
3
+ `@openclaw/fs-safe/atomic` re-exports the lower-level helpers that `root()`'s write methods are built on. Reach for them when you have a path you trust and want sibling-temp + rename without setting up a `Root`, or when you need finer control over `fsync`, mode preservation, or pre-rename hooks.
4
+
5
+ ```ts
6
+ import {
7
+ replaceFileAtomic,
8
+ replaceFileAtomicSync,
9
+ writeTextAtomic,
10
+ replaceDirectoryAtomic,
11
+ movePathWithCopyFallback,
12
+ } from "@openclaw/fs-safe/atomic";
13
+ ```
14
+
15
+ ## `replaceFileAtomic` / `replaceFileAtomicSync`
16
+
17
+ Write `content` to a sibling temp file in the destination directory, apply the parent-directory and final file modes through verified descriptors, optionally `fsync` the file descriptor, optionally `fsync` the parent directory after rename, then atomically rename over the destination. No permission change follows a caller-supplied pathname.
18
+
19
+ On POSIX, the parent is opened with no-follow and directory-only flags, checked against its exact pre-open device/inode identity, and mode-adjusted through that descriptor. A replacement symlink is rejected rather than followed. If the directory cannot be opened for descriptor access, the operation fails closed instead of retrying by pathname. Windows does not enforce POSIX directory modes and Node cannot consistently open directory descriptors there, so `dirMode` is passed only to `mkdir`; no pathname `chmod` fallback is attempted.
20
+
21
+ Async replacements to the same destination are serialized inside the current process, so two overlapping `replaceFileAtomic()` calls do not interleave their temp-write/rename phases. Use a sidecar lock when multiple processes may write the same target.
22
+
23
+ Relative paths retain their literal suffix so `.` and `..` keep Node's existing
24
+ filesystem semantics. On Windows, an ordinary drive-relative destination such
25
+ as `C:.\\state.json` is captured at entry by anchoring the drive's current
26
+ directory without normalizing that suffix. The anchored absolute spelling is
27
+ used for staging, locks, callbacks, publication, and cleanup. Any additional
28
+ colon remains visible and is rejected as a filesystem namespace alias before
29
+ I/O; malformed namespace-drive spellings remain rejected.
30
+
31
+ ```ts
32
+ import { replaceFileAtomic } from "@openclaw/fs-safe/atomic";
33
+
34
+ await replaceFileAtomic({
35
+ filePath: "/srv/workspace/state.json",
36
+ content: JSON.stringify(state, null, 2),
37
+ mode: 0o600,
38
+ syncTempFile: true,
39
+ syncParentDir: true,
40
+ });
41
+ ```
42
+
43
+ ### Options
44
+
45
+ ```ts
46
+ type ReplaceFileAtomicOptions = {
47
+ filePath: string; // destination
48
+ content: string | Uint8Array;
49
+ dirMode?: number; // parent-directory mode (POSIX; default 0o700)
50
+ mode?: number; // new-file mode (default 0o600)
51
+ preserveExistingMode?: boolean; // inherit existing regular-file rwx bits; default false
52
+ tempPrefix?: string; // default ".fs-safe-replace"
53
+ renameMaxRetries?: number; // EBUSY retries; default 0
54
+ renameRetryBaseDelayMs?: number; // exponential base; default 50
55
+ copyFallbackOnPermissionError?: boolean; // default false
56
+ copyFallbackRestore?: "restore-original" | "none"; // default: "none"
57
+ maxRestoreBytes?: number; // required with "restore-original"
58
+ destinationHardlinks?: "reject"; // default unset (no destination nlink policy)
59
+ renameIdentity?: "strict" | "verify-content-with-lock"; // default "strict"
60
+ syncTempFile?: boolean; // fsync(temp) before rename, or the final file after copy fallback; default false
61
+ syncParentDir?: boolean; // fsync(parent) after rename, POSIX only; default false
62
+ throwOnCleanupError?: boolean; // report temp cleanup failure; default false
63
+ beforeRename?: (params: { filePath: string; tempPath: string }) => Promise<void>;
64
+ fileSystem?: ReplaceFileAtomicFileSystem; // injectable fs for tests
65
+ };
66
+ ```
67
+
68
+ `preserveExistingMode` snapshots only the ordinary rwx bits (`0o777`) from an
69
+ existing non-symlink regular destination. A final symlink fails with
70
+ `FsSafeError("symlink")`; a directory or other non-regular destination fails
71
+ with `FsSafeError("not-file")`. Set-user-ID, set-group-ID, and sticky bits are
72
+ never inherited. Mode inheritance does not copy ownership, ACLs, extended
73
+ attributes, or exact destination identity. Rename publication creates a new
74
+ inode; an in-place copy fallback can retain metadata already attached to its
75
+ pinned destination. The snapshot does not make replacement a compare-and-swap
76
+ operation, so the destination parent must still be protected from untrusted
77
+ concurrent namespace mutation.
78
+
79
+ ### `beforeRename`
80
+
81
+ Runs after the temp file is fully written and before the rename. Use it to take a backup snapshot, capture the about-to-be-replaced contents, or notify an observer. The helper retains the staged descriptor and exact bigint identity across the hook; replacing, deleting, hardlinking, or changing the temp entry to a non-regular file is rejected before publication:
82
+
83
+ ```ts
84
+ await replaceFileAtomic({
85
+ filePath: "/srv/workspace/config.toml",
86
+ content: rendered,
87
+ beforeRename: async ({ filePath }) => {
88
+ await fs.copyFile(filePath, `${filePath}.bak`); // snapshot existing
89
+ },
90
+ });
91
+ ```
92
+
93
+ If `beforeRename` throws, the rename is skipped and the owned temp file is removed — the destination is unchanged. Cleanup unlinks only the exact admitted single-link file; a substitute observed at the temp name is preserved and removed from cleanup authority. The same identity is rechecked before every rename retry, when entering copy fallback, and at the final name after rename. A post-rename verification failure reports the race without rolling back or deleting the published name.
94
+
95
+ JavaScript permits `beforeRename` callbacks and filesystem adapters to throw any value, including
96
+ `undefined`, `null`, `false`, signed zero, `0n`, an empty string, and `NaN`.
97
+ Atomic replacement preserves such operational failures when cleanup and close
98
+ succeed, including rename and post-rename verification failures. Rename retry
99
+ and copy-fallback classification reads the error code once without coercion;
100
+ missing or unreadable codes preserve the original failure. A rejected call has
101
+ no success receipt even if an adapter committed its rename before throwing. With
102
+ `throwOnCleanupError: true`, an additional owned-temp cleanup failure keeps the
103
+ existing cleanup wrapper whose `cause` is the original thrown value. A later
104
+ descriptor-close failure is reported in an `AggregateError`, in operation/cleanup
105
+ then close order. The default `throwOnCleanupError: false` omits only the cleanup
106
+ failure: the temp stays registered for identity-checked process-exit cleanup, the
107
+ descriptor is still closed, and a close failure remains reportable.
108
+
109
+ Identity checks and pathname rename/unlink remain separate syscalls, not atomic conditional mutations. Use an approved writable parent plus cooperative locking or OS isolation when arbitrary concurrent namespace mutation is in scope.
110
+
111
+ ### FUSE, Windows exFAT/FAT32, and unstable rename identity
112
+
113
+ Strict source-to-destination identity is the default. Some FUSE mounts assign a different inode to the destination during rename even without concurrency. Set `renameIdentity: "verify-content-with-lock"` to accept that boundary only when the re-opened no-follow destination has the exact requested SHA-256 content under an exclusive hashed sidecar lock in the destination parent. The newly accepted descriptor and identity remain pinned through parent sync and final verification. The synchronous helper provides the same policy with the synchronous lock implementation.
114
+
115
+ This is the same explicit weaker contract available on `Root` writes: cooperating writers are serialized, stale locks fail closed, and mismatched content is rejected after publication without rollback. A same-authority actor that ignores the advisory lock can still substitute another file with identical bytes, so do not use this compatibility policy in directories writable by untrusted same-UID processes.
116
+
117
+ Windows exFAT/FAT32 volumes can also change file identity during rename, depending
118
+ on the source and destination names. The destination may already contain the
119
+ requested bytes when strict verification reports `path-mismatch`. A short
120
+ temporary name alone does not guarantee stable identity for a longer destination.
121
+ For an application-controlled directory on such a volume, callers can explicitly
122
+ select `renameIdentity: "verify-content-with-lock"` on `replaceFileAtomic` or
123
+ `replaceFileAtomicSync`. Keep strict mode for directories that require the
124
+ stronger identity contract; do not automatically retry every `path-mismatch`
125
+ with the weaker policy. Staging names remain random, including custom prefixes.
126
+
127
+ To verify the built package against an actual volume, run
128
+ `node scripts/atomic-rename-compat-proof.mjs EXISTING_PARENT` after `pnpm build`.
129
+ Use a trusted parent directory that no other process can rename or modify during
130
+ the entire run, including cleanup; do not point the probe at a shared writable
131
+ volume root. Cleanup checks the created directory's identity before recursive
132
+ removal, but the check and removal are not atomic. The probe does not test safety
133
+ against hostile concurrent namespace mutation.
134
+ The probe creates and cleans up its own child directory and emits JSON without
135
+ local paths. It compares default, strict, and locked policies in both async and
136
+ sync calls, checks real rename identities and file contents, injects different-
137
+ and identical-content substitutions, checks lock cleanup, and exercises custom
138
+ prefix isolation and validation. Callback staging remains strict and can still
139
+ report identity drift; the probe records that result separately. Filesystem type
140
+ must be recorded independently; the probe does not infer it from a drive letter.
141
+
142
+ ### `EPERM` and copy fallback
143
+
144
+ On systems where `rename` fails with `EPERM`/`EEXIST`, pass
145
+ `copyFallbackOnPermissionError: true` to fall back to a non-atomic copy
146
+ replacement. The fallback removes the old destination, opens the replacement
147
+ with exclusive/no-follow flags where the platform supports them, and refuses
148
+ known symlink destinations so it does not write through a replaced destination
149
+ link.
150
+
151
+ Set `destinationHardlinks: "reject"` when an existing regular-file destination
152
+ must not have aliases. The policy reads `nlink` from a pinned destination
153
+ descriptor, not pathname metadata, before rename and rechecks it in the copy
154
+ fallback.
155
+
156
+ The asynchronous helper closes a successfully admitted hardlink-check pin
157
+ best-effort, including synchronous adapter throws and rejected close promises.
158
+ The synchronous helper reports a close failure after successful admission.
159
+
160
+ Source and pinned destination admission compare exact bigint device/inode
161
+ observations, so distinct identities that round to the same JavaScript number
162
+ cannot authorize a copy. Unknown Windows identities get one bounded reinspection
163
+ of the same descriptor or path; incomplete or inconsistent observations fail
164
+ closed without reopening. Injected filesystem adapters must honor the
165
+ `{ bigint: true }` stat option. Source admission reuses that exact pair instead
166
+ of immediately repeating it with numeric metadata.
167
+
168
+ Copy-source close is best-effort. A failed pinned-destination admission also
169
+ preserves its selected failure when close fails. These cleanup rules include
170
+ synchronous throws and rejected promises from custom asynchronous adapters.
171
+
172
+ The best-effort parent-directory synchronization helper also ignores either form
173
+ of close failure. Parent-directory mode admission and its close remain fail-closed.
174
+ A compatibility-publication handle that was not adopted also receives one
175
+ best-effort close, preserving the selected verification or previous-handle close
176
+ failure. The retained owner's close failures remain reportable.
177
+
178
+ The default `copyFallbackRestore: "none"` preserves the existing fallback
179
+ contract: a failed copy can leave a partial destination. For state files where
180
+ preserving the old bytes is more important, choose `"restore-original"` and set
181
+ an explicit `maxRestoreBytes` memory budget. If the destination exists, fs-safe
182
+ snapshots it through a pinned descriptor, overwrites and mode-adjusts through
183
+ that same descriptor, and synchronizes the result. Any write, mode, or sync
184
+ failure triggers a byte-and-mode restore and another sync through the same
185
+ descriptor.
186
+
187
+ With `syncTempFile: false`, an exclusive-create copy fallback does not report
188
+ success until its new destination writer closes successfully. This includes
189
+ `"restore-original"` when the destination did not exist. A close rejection or throw is
190
+ propagated exactly, including falsy values. The destination may already contain
191
+ all or part of the replacement, so a close failure does not prove that the old
192
+ destination survived or that the replacement was published. The outer atomic
193
+ operation still attempts identity-bound cleanup of its owned source temp; an
194
+ unverifiable or substituted temp remains preserved. If writing, mode adjustment,
195
+ or another earlier operation also fails, that earlier value remains the reported
196
+ failure and the destination close is attempted once. Successful synchronized
197
+ fallbacks and in-place `"restore-original"` replacements retain their existing best-effort final-close
198
+ handling.
199
+
200
+ Restore failures are `FsSafeError("helper-failed")` values with typed
201
+ `details.cleanup` set to `"restored"` or `"restore-failed"`. An original larger
202
+ than `maxRestoreBytes` fails with `too-large` before mutation. A missing
203
+ destination has no original to restore and follows the exclusive-create copy
204
+ fallback.
205
+
206
+ Restore snapshots use the pinned file's size as an allocation hint, with an
207
+ initial allocation capped at 16 MiB plus the overflow byte. Reads continue
208
+ through short reads and EOF, grow only as data arrives, and enforce the same
209
+ `maxRestoreBytes` budget even if the destination grows after its size was read.
210
+
211
+ ### Sync variant
212
+
213
+ `replaceFileAtomicSync` accepts the same base options, a synchronous
214
+ `beforeRename` callback, and `ReplaceFileAtomicSyncFileSystem`. Use it inside
215
+ synchronous boot paths or test setup code. It returns the same
216
+ `{ method: "rename" | "copy-fallback" }` receipt as the async variant.
217
+
218
+ ## `replaceDirectoryAtomic`
219
+
220
+ Publish one staged directory at a target without overwriting a concurrently
221
+ created entry. Despite the historical name, replacing an existing target is a
222
+ guarded two-rename protocol, not an atomic directory exchange.
223
+
224
+ ```ts
225
+ import { replaceDirectoryAtomic } from "@openclaw/fs-safe/atomic";
226
+
227
+ await replaceDirectoryAtomic({
228
+ stagedDir: "/srv/workspace/staging/snapshot-2026-05-05",
229
+ targetDir: "/srv/workspace/snapshot",
230
+ });
231
+ ```
232
+
233
+ Every publication requires the dedicated native identity-fenced,
234
+ descriptor-relative no-replace rename capability and readable retained
235
+ descriptors for the staged and target parents. Older bindings that expose only
236
+ the legacy four-argument no-replace rename fail with `helper-unavailable`
237
+ before target-parent creation or any other replacement effect. This applies
238
+ when the parents are the same or different. There is no JavaScript rename
239
+ fallback, and a cross-device rename still fails. Replacing an existing target
240
+ additionally requires usable native bounded owned-tree cleanup and a readable
241
+ retained descriptor for the original target.
242
+
243
+ If the target is absent, the helper publishes `stagedDir → targetDir` with a
244
+ single no-replace rename. If the target exists, it renames `targetDir` to a
245
+ randomized sibling backup and then renames `stagedDir → targetDir`. The target
246
+ name is temporarily absent between those two operations. A competing entry is
247
+ never overwritten. Publication rollback is attempted only when the staged
248
+ rename is known not to have committed and the target name is still absent; the
249
+ rollback itself is no-replace, so a competitor is preserved and the backup is
250
+ left for recovery.
251
+
252
+ Exact staged-directory identity and parent checks run before and after each
253
+ rename. On Windows, the native rename opens the source relative to the retained
254
+ parent, compares that handle's exact volume and file-index identity with the
255
+ pre-rename bigint receipt, and only then mutates it. POSIX does not provide a
256
+ rename operation that also compares an expected source inode, so on POSIX a
257
+ source-name substitution in the final check-to-rename gap can be moved briefly
258
+ and then detected by the post-rename verification. Similarly, a successful
259
+ rename can be followed by a verification error. Inspect the error's
260
+ `details.publication` value rather than treating rejection as proof that
261
+ publication did not happen.
262
+
263
+ A Windows source-identity mismatch is rejected before mutation, reported
264
+ publicly as `path-mismatch`, and treated as definitely uncommitted so an earlier
265
+ backup can be rolled back. Other `path-mismatch`-shaped native errors are not
266
+ assumed to be pre-commit failures; their publication outcome remains
267
+ indeterminate and observed competitors are preserved.
268
+
269
+ Any native rename error without explicit pre-dispatch provenance has an
270
+ indeterminate outcome, including ordinary errno such as `ENOENT`, `EEXIST`,
271
+ or `EACCES`: a remote filesystem may commit before losing its reply. The helper
272
+ does not guess whether that rename committed or perform another rename or
273
+ cleanup based on that guess; observed names are preserved for caller-directed
274
+ recovery. An error `details.backupPath`, when present, is only the attempted or
275
+ last-observed backup pathname. It does not prove that the path still exists or
276
+ still names the original directory.
277
+
278
+ After a verified commit, the original backup is removed through its retained
279
+ directory identity and bounded native traversal. Cleanup failures reject after
280
+ publication and can leave the backup. On POSIX, cleanup retains the
281
+ [bounded final-entry unlink limitation](temp.md#private-temp-workspaces).
282
+
283
+ Concurrent calls for the same resolved target are serialized inside the current
284
+ process so their backup, publication, and cleanup phases cannot interleave.
285
+ Other processes are not serialized; no-replace renames provide the competitor
286
+ boundary. On Windows, ordinary drive-relative staged and target paths are
287
+ anchored at entry before namespace-alias admission and resolution.
288
+ `backupPrefix`, when supplied, is sanitized as one path prefix and cannot contain
289
+ path separators or NUL bytes; the generated backup tail is randomized.
290
+
291
+ Use it when callers must publish a whole staged tree with these recovery
292
+ semantics. For single-file replacement, `replaceFileAtomic` is the right tool.
293
+
294
+ ## `writeTextAtomic`
295
+
296
+ Atomic UTF-8 text write with the same secure defaults as `writeJson`: sibling
297
+ temp file, descriptor-bound mode setting and fsync, rename, and parent fsync.
298
+ It delegates to `replaceFileAtomic()` with a smaller call shape. Use it when
299
+ you do not need replacement hooks such as `beforeRename`, `preserveExistingMode`,
300
+ or custom copy-fallback policy.
301
+
302
+ ```ts
303
+ import { writeTextAtomic } from "@openclaw/fs-safe/atomic";
304
+
305
+ await writeTextAtomic("/srv/workspace/rendered.md", rendered, {
306
+ mode: 0o600,
307
+ dirMode: 0o700,
308
+ trailingNewline: true,
309
+ });
310
+ ```
311
+
312
+ Options:
313
+
314
+ ```ts
315
+ type WriteTextAtomicOptions = {
316
+ mode?: number; // file mode (default 0o600)
317
+ dirMode?: number; // parent mode (default 0o777 masked by process umask)
318
+ trailingNewline?: boolean; // append "\n" if missing; default false
319
+ durable?: boolean; // default true; false skips temp/parent fsync
320
+ };
321
+ ```
322
+
323
+ `durable: false` keeps the sibling-temp replace/rename behavior but skips the
324
+ temp-file and parent-directory `fsync` calls. Use it only for reconstructible
325
+ metadata where lower latency matters more than crash-durability.
326
+
327
+ ## `movePathWithCopyFallback`
328
+
329
+ Rename a path. If the rename fails with `EXDEV` (cross-device), or `EPERM` on
330
+ Windows, fall back to
331
+ copying into a staged sibling path, renaming that staged path into place, and
332
+ then removing only the source entries that were copied. The fallback avoids
333
+ buffering regular files into memory and does not tighten the destination parent
334
+ directory mode. Staged file modes are applied through their still-open handles.
335
+ If descriptor-bound mode application fails, the staged path is removed and the
336
+ move fails before publication. A transient staged-path cleanup failure retains
337
+ an identity-bound process-exit cleanup retry.
338
+ The staging entry's initially admitted identity is checked before publication
339
+ and cleanup; a later substituted entry is preserved. Regular files are admitted
340
+ through their new descriptor. Node provides no creation descriptor for directories
341
+ or symlinks, so their first identity comes from an immediate pathname observation.
342
+ Replacement before that observation remains a best-effort detection gap: use a
343
+ parent protected from concurrent untrusted mutation or OS isolation. A copy write
344
+ that makes no progress rejects instead of looping indefinitely.
345
+ On POSIX, staged directory modes are applied through no-follow directory
346
+ descriptors; on Windows, Node cannot portably open those descriptors and no
347
+ pathname `chmod` fallback is attempted, so directory modes remain subject to
348
+ Windows' `mkdir(mode)` behavior. Symlink sources are copied as links rather than
349
+ followed, including when the referent is absent; only a source proven to be a
350
+ directory is dereferenced for the destination-descendant guard.
351
+
352
+ ```ts
353
+ import { movePathWithCopyFallback } from "@openclaw/fs-safe/atomic";
354
+
355
+ await movePathWithCopyFallback({
356
+ from: "/srv/cache/blob.bin",
357
+ sourceHardlinks: "reject",
358
+ to: "/srv/persistent/blob.bin",
359
+ });
360
+ ```
361
+
362
+ Use it when source and destination might live on different filesystems (containers, tmpfs, separate volumes).
363
+ On Windows, ordinary drive-relative `from` and `to` paths are anchored at entry;
364
+ publication receipts report the resulting absolute destination.
365
+ The hardlink policy is captured when the move starts. Changing or reusing the
366
+ options object later does not change the policy of an in-flight move.
367
+ `sourceHardlinks: "reject"` performs a recursive preflight capped at 50,000
368
+ entries before any mutation. Because link count and rename cannot be one atomic
369
+ portable operation, this mode always commits a fresh inode/tree through the
370
+ staged-copy route, even on one filesystem. Each regular file is checked again
371
+ after open and after copying, so a post-scan hardlink cannot become the
372
+ published target. A hardlink fails with `FsSafeError("hardlink")`; exceeding
373
+ the preflight cap fails with `FsSafeError("too-large")`.
374
+ If another writer changes source entries during the fallback, the staged copy
375
+ throws `ESTALE` before commit when possible. If the destination has already
376
+ been committed, cleanup still preserves the changed source entries and throws
377
+ `ESTALE`. Copied file and symlink manifests retain exact bigint identities and
378
+ nanosecond timestamps, so rounded file IDs cannot authorize copying or removal
379
+ of a different entry. Hardlink groups also use exact identities. Directory
380
+ manifests retain an exact bigint device/inode receipt from
381
+ copy admission. Each directory is rechecked after traversal, and the source root
382
+ is checked again before publication. Cleanup checks the same receipt before
383
+ removing children, then invokes mutation authority and rechecks the receipt and
384
+ directory type immediately before removal. Unknown Windows identity
385
+ components get at most one retry that retains known components; persistent
386
+ ambiguity fails closed before further removal. A directory that disappeared or
387
+ was replaced during child cleanup is reported as stale; an observed replacement
388
+ is preserved. Unrelated children
389
+ added to the original directory are preserved while unchanged copied children
390
+ are still removed. These pathname checks remain best-effort: they cannot make
391
+ the final identity check and removal atomic against another process.
392
+ When allowed source names are hardlinks to the same inode, each owned
393
+ unlink is verified through a remaining manifested alias and its exact resulting
394
+ identity becomes the next cleanup receipt. This accounts for the operation's
395
+ own link-count and ctime changes without suppressing unexpected external
396
+ mutations.
397
+ On Windows, opening a regular source may advance its ctime while all other
398
+ fingerprint fields match. That exception applies only to opening; post-copy
399
+ verification and cleanup retain their full fingerprint checks.
400
+ Copied aliases share each verified open-time update. Changes observed between
401
+ copies still reject instead of being mistaken for an owned open transition.
402
+
403
+ ### Mutation authority and publication receipts
404
+
405
+ Pass `assertBeforeMutation` when a move depends on a revocable lease or another
406
+ caller-owned authorization. The helper captures the callback when called and
407
+ runs it synchronously after asynchronous preparation and identity checks,
408
+ immediately before each rename, source-file or source-symlink unlink, and
409
+ source-directory removal. `assertBeforeRename` remains available for callers
410
+ that only guard publication. When both are set, the rename check runs first,
411
+ then the mutation check, without yielding before dispatch.
412
+
413
+ ```ts
414
+ type MovePathPublicationReceipt = Readonly<{
415
+ path: string;
416
+ dev: bigint;
417
+ ino: bigint;
418
+ }>;
419
+
420
+ type MovePathWithCopyFallbackOptions = {
421
+ from: string;
422
+ sourceHardlinks?: "allow" | "reject";
423
+ to: string;
424
+ assertBeforeRename?: () => void;
425
+ assertBeforeMutation?: () => void;
426
+ onDestinationPublished?: (receipt: MovePathPublicationReceipt) => void;
427
+ };
428
+ ```
429
+
430
+ Throw to refuse the next mutation. The original error is propagated, including
431
+ errors with `EXDEV` or `EPERM` codes; an authorization failure never starts a
432
+ copy fallback. A genuine rename failure may still require a second authority
433
+ check before publishing the staged copy.
434
+
435
+ All three callbacks must return `undefined` synchronously. Returning a Promise,
436
+ thenable, or any other value fails with a `TypeError`; rejected asynchronous
437
+ results are consumed. Perform asynchronous policy checks before calling the
438
+ helper and use the authority callback to recheck the current owner at each
439
+ mutation boundary. All callbacks are captured before the first await.
440
+ Copied source leaves are checked again immediately after authority returns and
441
+ before unlink is submitted. Supplying any of the three callbacks also
442
+ retains the original source-parent route and renews copied-directory ancestry
443
+ before cleanup. Substituted entries are preserved; pathname checks and unlink
444
+ remain a best-effort sequence, not atomic.
445
+
446
+ `onDestinationPublished` runs exactly once after a successful rename resolves,
447
+ before awaited post-rename directory checks or source cleanup. It receives a
448
+ frozen receipt with the resolved absolute destination path and the exact bigint
449
+ device/inode identity observed on the rename source before dispatch: the
450
+ original source for a direct rename, or the staged copy for fallback. Failed
451
+ rename attempts never emit receipts. The return contract remains `Promise<void>`.
452
+
453
+ The receipt records an observed identity, not authorization, durable storage,
454
+ or an atomic guarantee against concurrent pathname replacement. Before recovery,
455
+ recheck caller authority and compare the retained identity with a fresh bigint
456
+ stat of the destination. In particular, unknown Windows device/inode values
457
+ must not be treated as proof of ownership. Do not derive ownership from a new
458
+ post-failure snapshot alone.
459
+
460
+ A refused rename leaves the source and destination unchanged; any private
461
+ staged copy follows normal cleanup. If publication has already happened, a
462
+ callback error or later verification failure preserves the published destination
463
+ and stops further source cleanup. Revocation during cleanup leaves all
464
+ as-yet-unremoved source entries intact; entries already removed remain removed.
465
+ The caller retains the receipt even if the move later rejects and owns recovery
466
+ from this partial-move state. An observer that throws must retain its receipt
467
+ before throwing if recovery needs it.
468
+
469
+ These callbacks do not cancel already-dispatched operations or make an external
470
+ lease store atomic with the filesystem. `assertBeforeMutation` guards renames
471
+ and removal of copied source entries; private staging creation, writes, and
472
+ failed-staging cleanup remain owned by the helper. Omitting the new callbacks
473
+ preserves the existing move and source-identity behavior.
474
+
475
+ ## Difference from `root()`
476
+
477
+ | `Root` methods | `atomic` helpers |
478
+ |---|---|
479
+ | Take relative paths, bound to a `rootDir`. | Take trusted absolute or relative paths, no boundary. |
480
+ | Throw `FsSafeError` with `code`. | Throw `FsSafeError` *or* the underlying `NodeJS.ErrnoException`, depending on failure point. |
481
+ | Atomicity, mode, hooks, fsync are sane defaults. | Caller controls all of the above. |
482
+ | `mkdir`, identity check, hardlink reject built in. | No root boundary; `movePathWithCopyFallback` has explicit `sourceHardlinks` policy, while other helpers expose their own narrower checks. |
483
+
484
+ Use `Root` when the path is caller-controlled. Use `atomic` when the path is fully under your control and you want explicit knobs.
485
+
486
+ ## Test injection
487
+
488
+ Both `replaceFileAtomic` and `replaceFileAtomicSync` accept a `fileSystem` option that overrides the small set of `fs` calls they make. Pass a stub in unit tests to assert order, simulate `EPERM`, or capture the temp filename:
489
+
490
+ ```ts
491
+ const ops: string[] = [];
492
+ await replaceFileAtomic({
493
+ filePath: "/tmp/x",
494
+ content: "hi",
495
+ fileSystem: {
496
+ promises: {
497
+ ...realFs,
498
+ writeFile: async (...args) => { ops.push("write"); return realFs.writeFile(...args); },
499
+ rename: async (...args) => { ops.push("rename"); return realFs.rename(...args); },
500
+ },
501
+ },
502
+ });
503
+ ```
504
+
505
+ The synchronous injectable interface has one optional descriptor-mode operation:
506
+
507
+ ```ts
508
+ type ReplaceFileAtomicSyncFileSystem = {
509
+ // other required operations omitted
510
+ fchmodSync?: typeof import("node:fs").fchmodSync;
511
+ };
512
+ ```
513
+
514
+ The async interface already requires `open()`, whose `FileHandle` supplies `chmod()`, so injecting `node:fs` or another conforming adapter needs no new async member. The async temp owner consumes its retained handle before awaiting `close()` during publication handoff and terminal settlement: if a custom adapter releases the resource and then rejects, that rejection is reported without calling `close()` on the same retained handle again. If publication verification opened a replacement handle before the previous retained handle failed to close, the replacement receives one best-effort close attempt. On POSIX, `open()` must support no-follow directory descriptors as Node does. A custom synchronous filesystem that passes `mode`, `dirMode`, or `preserveExistingMode` must supply `fchmodSync`; omission fails before any file or directory is created and never falls back to a pathname `chmod`. Existing synchronous adapters that request none of those options may omit it; their parent is still opened and identity-checked through a no-follow directory descriptor. Injecting plain `node:fs` supports explicit file and directory modes. Older adapter literals may continue to include `chmod` or `chmodSync` for source compatibility, but those operations are ignored. Copy fallback applies the file mode through its pinned destination descriptor as well, preserving exact modes despite the process umask.
515
+
516
+ ## See also
517
+
518
+ - [`root()`](root.md) — when you want method-style writes with the boundary baked in.
519
+ - [JSON files](json.md) — JSON/text helpers built on sibling-temp replacement.
520
+ - [Temp workspaces](temp.md) — for staging-then-swap directory builds.
521
+ - [Errors](errors.md) — code union for failures.
@@ -0,0 +1,136 @@
1
+ ---
2
+ title: Config
3
+ description: "Process-global defaults for optional fs-safe helpers."
4
+ ---
5
+
6
+ # `@openclaw/fs-safe/config`
7
+
8
+ Process-global configuration knobs for optional fs-safe helpers. The native helper policy is described in the [native helper policy](native-helper.md); this page is the API reference.
9
+
10
+ ```ts
11
+ import {
12
+ configureFsSafeNative,
13
+ configureFsSafeLocks,
14
+ getFsSafeNativeConfig,
15
+ getFsSafeLockConfig,
16
+ type FsSafeLockConfig,
17
+ type FsSafeNativeConfig,
18
+ type FsSafeNativeMode,
19
+ } from "@openclaw/fs-safe/config";
20
+ ```
21
+
22
+ These functions are also re-exported from the main entry point. Prefer the subpath when you only need helper configuration and want the smallest import surface.
23
+
24
+ ## `configureFsSafeNative(config)`
25
+
26
+ ```ts
27
+ function configureFsSafeNative(config: Partial<FsSafeNativeConfig>): void;
28
+
29
+ type FsSafeNativeConfig = {
30
+ mode: FsSafeNativeMode;
31
+ };
32
+
33
+ type FsSafeNativeMode = "auto" | "off" | "require";
34
+ ```
35
+
36
+ Set the process-global loading policy. Configure once at startup, before the first filesystem operation. The binding is loaded lazily and the result is cached.
37
+
38
+ | Mode | Behavior |
39
+ |---|---|
40
+ | `auto` | Default. Prefer the platform binding and use supported fallbacks when it is unavailable. |
41
+ | `off` | Do not load the binding; use supported fallbacks and reject native-only operations. |
42
+ | `require` | Operations that need the binding raise `FsSafeError("helper-unavailable")` when it cannot load. |
43
+
44
+ Fallbacks include guarded JavaScript, the bundled TAR/gzip WASM parser, and the
45
+ [packaged Windows security scripts](install.md#windows-security-fallback).
46
+ Windows command fallbacks remain subject to normal system execution policy.
47
+
48
+ ## `getFsSafeNativeConfig()`
49
+
50
+ ```ts
51
+ function getFsSafeNativeConfig(): FsSafeNativeConfig;
52
+ ```
53
+
54
+ Return the effective configuration: programmatic overrides win, then env vars, then the package default (`auto`).
55
+
56
+ ## `configureFsSafeLocks(config)`
57
+
58
+ ```ts
59
+ function configureFsSafeLocks(config: Partial<FsSafeLockConfig>): void;
60
+
61
+ type FsSafeLockConfig = {
62
+ staleRecovery: "fail-closed" | "remove-if-unchanged";
63
+ staleMs?: number;
64
+ timeoutMs?: number;
65
+ retry?: FileLockRetryOptions;
66
+ };
67
+ ```
68
+
69
+ Set process-wide defaults for sidecar lock options. This does **not** turn locking on globally; callers still need to pass `lock: true` or a lock options object for the specific JSON store/resource that needs cross-process coordination.
70
+
71
+ `staleRecovery` defaults to `"fail-closed"`. The opt-in `"remove-if-unchanged"` mode requires caller approval and serializes the final snapshot check and unlink with an exclusive `.reclaim` guard. A reclaim guard left by a killed reclaimer fails closed and requires externally coordinated cleanup.
72
+ `staleMs` must be non-negative and not `NaN`; `Infinity` disables age-based staleness.
73
+
74
+ For a daemon that should wait briefly for normal contention but never delete a
75
+ stale owner without per-lock approval:
76
+
77
+ ```ts
78
+ configureFsSafeLocks({
79
+ staleRecovery: "fail-closed",
80
+ staleMs: 2 * 60_000,
81
+ timeoutMs: 15_000,
82
+ retry: { retries: 30, minTimeout: 50, maxTimeout: 1_000, randomize: true },
83
+ });
84
+ ```
85
+
86
+ These defaults apply to both `acquireFileLock()` / `withFileLock()` and
87
+ `acquireFileLockSync()` / `withFileLockSync()`. Each acquisition resolves
88
+ `retry`, `staleMs`, `staleRecovery`, and `timeoutMs` from the per-call option
89
+ first, then the process configuration, then the package default. Explicit zero
90
+ values are preserved. A per-call `retry` object replaces the configured object
91
+ as a whole; omitted retry fields use package defaults, not configured fields.
92
+
93
+ Individual lock calls can override any default. Switching the global stale
94
+ recovery mode does not provide the application-owned liveness proof required
95
+ by `shouldRemoveStaleLock`.
96
+
97
+ ## `getFsSafeLockConfig()`
98
+
99
+ ```ts
100
+ function getFsSafeLockConfig(): FsSafeLockConfig;
101
+ ```
102
+
103
+ Return the current sidecar lock defaults.
104
+
105
+ ## Environment variables
106
+
107
+ The same policy can be set without code:
108
+
109
+ ```bash
110
+ FS_SAFE_NATIVE_MODE=auto # auto | off | require | true | false | on | 1 | 0 | never | required
111
+ ```
112
+
113
+ `OPENCLAW_FS_SAFE_NATIVE_MODE` is accepted as an alias. Programmatic overrides via `configureFsSafeNative` always win.
114
+
115
+ ### Python-helper migration bridge
116
+
117
+ Version 0.5 detects the former `FS_SAFE_PYTHON_MODE`, `FS_SAFE_PYTHON`,
118
+ `OPENCLAW_FS_SAFE_PYTHON_MODE`, `OPENCLAW_FS_SAFE_PYTHON`,
119
+ `OPENCLAW_PINNED_PYTHON`, and `OPENCLAW_PINNED_WRITE_PYTHON` names. It emits one
120
+ `FS_SAFE_PYTHON_DEPRECATED` warning and maps `auto`, `off`, or `require` to the
121
+ same native mode; interpreter paths are ignored. The deprecated
122
+ `configureFsSafePython()` export behaves the same way.
123
+
124
+ Replace these inputs with `configureFsSafeNative()` or
125
+ `FS_SAFE_NATIVE_MODE` during the 0.5 upgrade. The bridge exists only so shipped
126
+ 0.4 configuration fails loudly and maps predictably; it is not a supported
127
+ Python execution path. Follow the [0.5 migration checklist](migrating-to-0.5.md)
128
+ for the full upgrade.
129
+
130
+ ## Related pages
131
+
132
+ - [Native helper policy](native-helper.md) — when to pick `auto`, `off`, or `require`, and what each mode protects.
133
+ - [File lock](sidecar-lock.md) — the per-resource lock API that consumes lock defaults.
134
+ - [Root API](root.md) — the API whose POSIX hardening the helper backs.
135
+ - [Errors](errors.md) — `helper-unavailable` and `helper-failed`.
136
+ - [Migrating to 0.5](migrating-to-0.5.md) — ordered consumer upgrade checklist.