toolcraft 0.0.749 → 0.0.751

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 (374) hide show
  1. package/composition.json +23 -3
  2. package/dist/composition.json +23 -3
  3. package/dist/human-in-loop/approvals-commands.d.ts +1 -1
  4. package/dist/index.d.ts +1 -262
  5. package/dist/index.js +1 -573
  6. package/dist/runtime-platform.d.ts +2 -0
  7. package/dist/runtime-platform.js +2 -0
  8. package/dist/runtime-platform.workerd.d.ts +3 -0
  9. package/dist/runtime-platform.workerd.js +10 -0
  10. package/dist/runtime.d.ts +262 -0
  11. package/dist/runtime.js +576 -0
  12. package/node_modules/@noble/hashes/LICENSE +21 -0
  13. package/node_modules/@noble/hashes/README.md +478 -0
  14. package/node_modules/@noble/hashes/_blake.d.ts +20 -0
  15. package/node_modules/@noble/hashes/_blake.js +59 -0
  16. package/node_modules/@noble/hashes/_md.d.ts +95 -0
  17. package/node_modules/@noble/hashes/_md.js +209 -0
  18. package/node_modules/@noble/hashes/_u64.d.ts +36 -0
  19. package/node_modules/@noble/hashes/_u64.js +77 -0
  20. package/node_modules/@noble/hashes/argon2.d.ts +148 -0
  21. package/node_modules/@noble/hashes/argon2.js +577 -0
  22. package/node_modules/@noble/hashes/blake1.d.ts +162 -0
  23. package/node_modules/@noble/hashes/blake1.js +630 -0
  24. package/node_modules/@noble/hashes/blake2.d.ts +203 -0
  25. package/node_modules/@noble/hashes/blake2.js +573 -0
  26. package/node_modules/@noble/hashes/blake3.d.ts +68 -0
  27. package/node_modules/@noble/hashes/blake3.js +310 -0
  28. package/node_modules/@noble/hashes/eskdf.d.ts +91 -0
  29. package/node_modules/@noble/hashes/eskdf.js +225 -0
  30. package/node_modules/@noble/hashes/hkdf.d.ts +70 -0
  31. package/node_modules/@noble/hashes/hkdf.js +152 -0
  32. package/node_modules/@noble/hashes/hmac.d.ts +50 -0
  33. package/node_modules/@noble/hashes/hmac.js +93 -0
  34. package/node_modules/@noble/hashes/index.d.ts +1 -0
  35. package/node_modules/@noble/hashes/index.js +34 -0
  36. package/node_modules/@noble/hashes/legacy.d.ts +107 -0
  37. package/node_modules/@noble/hashes/legacy.js +348 -0
  38. package/node_modules/@noble/hashes/package.json +91 -0
  39. package/node_modules/@noble/hashes/pbkdf2.d.ts +66 -0
  40. package/node_modules/@noble/hashes/pbkdf2.js +176 -0
  41. package/node_modules/@noble/hashes/scrypt.d.ts +98 -0
  42. package/node_modules/@noble/hashes/scrypt.js +304 -0
  43. package/node_modules/@noble/hashes/sha2.d.ts +176 -0
  44. package/node_modules/@noble/hashes/sha2.js +446 -0
  45. package/node_modules/@noble/hashes/sha3-addons.d.ts +533 -0
  46. package/node_modules/@noble/hashes/sha3-addons.js +973 -0
  47. package/node_modules/@noble/hashes/sha3.d.ts +208 -0
  48. package/node_modules/@noble/hashes/sha3.js +475 -0
  49. package/node_modules/@noble/hashes/src/_blake.ts +67 -0
  50. package/node_modules/@noble/hashes/src/_md.ts +227 -0
  51. package/node_modules/@noble/hashes/src/_u64.ts +111 -0
  52. package/node_modules/@noble/hashes/src/argon2.ts +693 -0
  53. package/node_modules/@noble/hashes/src/blake1.ts +677 -0
  54. package/node_modules/@noble/hashes/src/blake2.ts +648 -0
  55. package/node_modules/@noble/hashes/src/blake3.ts +344 -0
  56. package/node_modules/@noble/hashes/src/eskdf.ts +265 -0
  57. package/node_modules/@noble/hashes/src/hkdf.ts +161 -0
  58. package/node_modules/@noble/hashes/src/hmac.ts +130 -0
  59. package/node_modules/@noble/hashes/src/index.ts +33 -0
  60. package/node_modules/@noble/hashes/src/legacy.ts +361 -0
  61. package/node_modules/@noble/hashes/src/pbkdf2.ts +219 -0
  62. package/node_modules/@noble/hashes/src/scrypt.ts +375 -0
  63. package/node_modules/@noble/hashes/src/sha2.ts +486 -0
  64. package/node_modules/@noble/hashes/src/sha3-addons.ts +1157 -0
  65. package/node_modules/@noble/hashes/src/sha3.ts +525 -0
  66. package/node_modules/@noble/hashes/src/utils.ts +978 -0
  67. package/node_modules/@noble/hashes/src/webcrypto.ts +283 -0
  68. package/node_modules/@noble/hashes/utils.d.ts +560 -0
  69. package/node_modules/@noble/hashes/utils.js +687 -0
  70. package/node_modules/@noble/hashes/webcrypto.d.ts +121 -0
  71. package/node_modules/@noble/hashes/webcrypto.js +228 -0
  72. package/node_modules/@poe-code/agent-mcp-config/dist/apply.js +23 -9
  73. package/node_modules/@poe-code/config-mutations/README.md +2 -0
  74. package/node_modules/@poe-code/config-mutations/dist/execution/apply-mutation.js +4 -5
  75. package/node_modules/@poe-code/config-mutations/dist/execution/path-utils.d.ts +3 -4
  76. package/node_modules/@poe-code/config-mutations/dist/execution/path-utils.js +3 -3
  77. package/node_modules/@poe-code/config-mutations/dist/template/render.js +1 -1
  78. package/node_modules/@poe-code/config-mutations/dist/testing/mock-fs.d.ts +2 -2
  79. package/node_modules/@poe-code/config-mutations/dist/testing/mock-fs.js +3 -6
  80. package/node_modules/@poe-code/config-mutations/dist/types.d.ts +4 -2
  81. package/node_modules/@poe-code/process-runner/README.md +2 -1
  82. package/node_modules/@poe-code/process-runner/dist/transfer-filesystem.d.ts +1 -0
  83. package/node_modules/@poe-code/process-runner/dist/transfer-filesystem.js +1 -0
  84. package/node_modules/@poe-code/process-runner/dist/transfer-filesystem.workerd.d.ts +2 -0
  85. package/node_modules/@poe-code/process-runner/dist/transfer-filesystem.workerd.js +1 -0
  86. package/node_modules/@poe-code/process-runner/dist/types.d.ts +1 -1
  87. package/node_modules/@poe-code/process-runner/dist/workspace-transfer.d.ts +6 -5
  88. package/node_modules/@poe-code/process-runner/dist/workspace-transfer.js +67 -29
  89. package/node_modules/@poe-code/process-runner/package.json +13 -0
  90. package/node_modules/@poe-code/safe-fs/LICENSE +21 -0
  91. package/node_modules/@poe-code/safe-fs/PROVENANCE.json +428 -0
  92. package/node_modules/@poe-code/safe-fs/README.md +411 -0
  93. package/node_modules/@poe-code/safe-fs/dist/bridge/confinement.d.ts +3 -0
  94. package/node_modules/@poe-code/safe-fs/dist/bridge/confinement.js +171 -0
  95. package/node_modules/@poe-code/safe-fs/dist/bridge/filesystem.d.ts +93 -0
  96. package/node_modules/@poe-code/safe-fs/dist/bridge/filesystem.js +453 -0
  97. package/node_modules/@poe-code/safe-fs/dist/bridge/index.d.ts +7 -0
  98. package/node_modules/@poe-code/safe-fs/dist/bridge/index.js +19 -0
  99. package/node_modules/@poe-code/safe-fs/dist/bridge/stats.d.ts +4 -0
  100. package/node_modules/@poe-code/safe-fs/dist/bridge/stats.js +37 -0
  101. package/node_modules/@poe-code/safe-fs/dist/bridge/types.d.ts +81 -0
  102. package/node_modules/@poe-code/safe-fs/dist/bridge/types.js +1 -0
  103. package/node_modules/@poe-code/safe-fs/dist/bridge/values.d.ts +6 -0
  104. package/node_modules/@poe-code/safe-fs/dist/bridge/values.js +65 -0
  105. package/node_modules/@poe-code/safe-fs/dist/config/memory.d.ts +3 -0
  106. package/node_modules/@poe-code/safe-fs/dist/config/memory.js +7 -0
  107. package/node_modules/@poe-code/safe-fs/dist/config/real.d.ts +5 -0
  108. package/node_modules/@poe-code/safe-fs/dist/config/real.js +16 -0
  109. package/node_modules/@poe-code/safe-fs/dist/config/registry.d.ts +2 -0
  110. package/node_modules/@poe-code/safe-fs/dist/config/registry.js +15 -0
  111. package/node_modules/@poe-code/safe-fs/dist/config.d.ts +15 -0
  112. package/node_modules/@poe-code/safe-fs/dist/config.js +46 -0
  113. package/node_modules/@poe-code/safe-fs/dist/config.node.d.ts +2 -0
  114. package/node_modules/@poe-code/safe-fs/dist/config.node.js +11 -0
  115. package/node_modules/@poe-code/safe-fs/dist/config.portable.d.ts +3 -0
  116. package/node_modules/@poe-code/safe-fs/dist/config.portable.js +9 -0
  117. package/node_modules/@poe-code/safe-fs/dist/contracts/abort.d.ts +5 -0
  118. package/node_modules/@poe-code/safe-fs/dist/contracts/abort.js +34 -0
  119. package/node_modules/@poe-code/safe-fs/dist/contracts/cleanup.d.ts +1 -0
  120. package/node_modules/@poe-code/safe-fs/dist/contracts/cleanup.js +9 -0
  121. package/node_modules/@poe-code/safe-fs/dist/contracts/descriptor.d.ts +38 -0
  122. package/node_modules/@poe-code/safe-fs/dist/contracts/descriptor.js +1 -0
  123. package/node_modules/@poe-code/safe-fs/dist/contracts/errors.d.ts +53 -0
  124. package/node_modules/@poe-code/safe-fs/dist/contracts/errors.js +99 -0
  125. package/node_modules/@poe-code/safe-fs/dist/contracts/filesystem.d.ts +379 -0
  126. package/node_modules/@poe-code/safe-fs/dist/contracts/filesystem.js +1 -0
  127. package/node_modules/@poe-code/safe-fs/dist/contracts/index.d.ts +6 -0
  128. package/node_modules/@poe-code/safe-fs/dist/contracts/index.js +6 -0
  129. package/node_modules/@poe-code/safe-fs/dist/contracts/io.d.ts +12 -0
  130. package/node_modules/@poe-code/safe-fs/dist/contracts/io.js +321 -0
  131. package/node_modules/@poe-code/safe-fs/dist/contracts/object.d.ts +134 -0
  132. package/node_modules/@poe-code/safe-fs/dist/contracts/object.js +97 -0
  133. package/node_modules/@poe-code/safe-fs/dist/contracts/path.d.ts +3 -0
  134. package/node_modules/@poe-code/safe-fs/dist/contracts/path.js +2 -0
  135. package/node_modules/@poe-code/safe-fs/dist/contracts/portable-path.d.ts +21 -0
  136. package/node_modules/@poe-code/safe-fs/dist/contracts/portable-path.js +78 -0
  137. package/node_modules/@poe-code/safe-fs/dist/contracts/virtual-path.d.ts +15 -0
  138. package/node_modules/@poe-code/safe-fs/dist/contracts/virtual-path.js +162 -0
  139. package/node_modules/@poe-code/safe-fs/dist/core.d.ts +19 -0
  140. package/node_modules/@poe-code/safe-fs/dist/core.js +17 -0
  141. package/node_modules/@poe-code/safe-fs/dist/fs/capabilities.d.ts +10 -0
  142. package/node_modules/@poe-code/safe-fs/dist/fs/capabilities.js +216 -0
  143. package/node_modules/@poe-code/safe-fs/dist/fs/conditional-chmod.d.ts +7 -0
  144. package/node_modules/@poe-code/safe-fs/dist/fs/conditional-chmod.js +19 -0
  145. package/node_modules/@poe-code/safe-fs/dist/fs/descriptor.d.ts +21 -0
  146. package/node_modules/@poe-code/safe-fs/dist/fs/descriptor.js +279 -0
  147. package/node_modules/@poe-code/safe-fs/dist/fs/devices/index.d.ts +59 -0
  148. package/node_modules/@poe-code/safe-fs/dist/fs/devices/index.js +875 -0
  149. package/node_modules/@poe-code/safe-fs/dist/fs/devices/path.d.ts +7 -0
  150. package/node_modules/@poe-code/safe-fs/dist/fs/devices/path.js +250 -0
  151. package/node_modules/@poe-code/safe-fs/dist/fs/devices/stream.d.ts +6 -0
  152. package/node_modules/@poe-code/safe-fs/dist/fs/devices/stream.js +136 -0
  153. package/node_modules/@poe-code/safe-fs/dist/fs/directory-admission.d.ts +3 -0
  154. package/node_modules/@poe-code/safe-fs/dist/fs/directory-admission.js +14 -0
  155. package/node_modules/@poe-code/safe-fs/dist/fs/memory/atomic-view.d.ts +11 -0
  156. package/node_modules/@poe-code/safe-fs/dist/fs/memory/atomic-view.js +13 -0
  157. package/node_modules/@poe-code/safe-fs/dist/fs/memory/index.d.ts +186 -0
  158. package/node_modules/@poe-code/safe-fs/dist/fs/memory/index.js +3771 -0
  159. package/node_modules/@poe-code/safe-fs/dist/fs/memory/ledger.d.ts +26 -0
  160. package/node_modules/@poe-code/safe-fs/dist/fs/memory/ledger.js +96 -0
  161. package/node_modules/@poe-code/safe-fs/dist/fs/memory/limits.d.ts +13 -0
  162. package/node_modules/@poe-code/safe-fs/dist/fs/memory/limits.js +26 -0
  163. package/node_modules/@poe-code/safe-fs/dist/fs/memory/missing-target.d.ts +15 -0
  164. package/node_modules/@poe-code/safe-fs/dist/fs/memory/missing-target.js +144 -0
  165. package/node_modules/@poe-code/safe-fs/dist/fs/mount/comparison.d.ts +19 -0
  166. package/node_modules/@poe-code/safe-fs/dist/fs/mount/comparison.js +118 -0
  167. package/node_modules/@poe-code/safe-fs/dist/fs/mount/identity.d.ts +6 -0
  168. package/node_modules/@poe-code/safe-fs/dist/fs/mount/identity.js +29 -0
  169. package/node_modules/@poe-code/safe-fs/dist/fs/mount/index.d.ts +74 -0
  170. package/node_modules/@poe-code/safe-fs/dist/fs/mount/index.js +1291 -0
  171. package/node_modules/@poe-code/safe-fs/dist/fs/object-authority.d.ts +27 -0
  172. package/node_modules/@poe-code/safe-fs/dist/fs/object-authority.js +287 -0
  173. package/node_modules/@poe-code/safe-fs/dist/fs/object-publication/index.d.ts +45 -0
  174. package/node_modules/@poe-code/safe-fs/dist/fs/object-publication/index.js +531 -0
  175. package/node_modules/@poe-code/safe-fs/dist/fs/overlay/index.d.ts +87 -0
  176. package/node_modules/@poe-code/safe-fs/dist/fs/overlay/index.js +1185 -0
  177. package/node_modules/@poe-code/safe-fs/dist/fs/overlay/memory-publication.d.ts +42 -0
  178. package/node_modules/@poe-code/safe-fs/dist/fs/overlay/memory-publication.js +558 -0
  179. package/node_modules/@poe-code/safe-fs/dist/fs/path-namespace.d.ts +4 -0
  180. package/node_modules/@poe-code/safe-fs/dist/fs/path-namespace.js +63 -0
  181. package/node_modules/@poe-code/safe-fs/dist/fs/quota/index.d.ts +12 -0
  182. package/node_modules/@poe-code/safe-fs/dist/fs/quota/index.js +520 -0
  183. package/node_modules/@poe-code/safe-fs/dist/fs/readonly/index.d.ts +37 -0
  184. package/node_modules/@poe-code/safe-fs/dist/fs/readonly/index.js +208 -0
  185. package/node_modules/@poe-code/safe-fs/dist/fs/real/allocation.d.ts +1 -0
  186. package/node_modules/@poe-code/safe-fs/dist/fs/real/allocation.js +8 -0
  187. package/node_modules/@poe-code/safe-fs/dist/fs/real/index.d.ts +105 -0
  188. package/node_modules/@poe-code/safe-fs/dist/fs/real/index.js +1259 -0
  189. package/node_modules/@poe-code/safe-fs/dist/fs/s3/authority.d.ts +7 -0
  190. package/node_modules/@poe-code/safe-fs/dist/fs/s3/authority.js +38 -0
  191. package/node_modules/@poe-code/safe-fs/dist/fs/s3/filesystem.d.ts +130 -0
  192. package/node_modules/@poe-code/safe-fs/dist/fs/s3/filesystem.js +1137 -0
  193. package/node_modules/@poe-code/safe-fs/dist/fs/s3/http/bytes.d.ts +1 -0
  194. package/node_modules/@poe-code/safe-fs/dist/fs/s3/http/bytes.js +9 -0
  195. package/node_modules/@poe-code/safe-fs/dist/fs/s3/http/index.d.ts +2 -0
  196. package/node_modules/@poe-code/safe-fs/dist/fs/s3/http/index.js +1 -0
  197. package/node_modules/@poe-code/safe-fs/dist/fs/s3/http/request-fetch.d.ts +15 -0
  198. package/node_modules/@poe-code/safe-fs/dist/fs/s3/http/request-fetch.js +74 -0
  199. package/node_modules/@poe-code/safe-fs/dist/fs/s3/http/request-node.d.ts +4 -0
  200. package/node_modules/@poe-code/safe-fs/dist/fs/s3/http/request-node.js +111 -0
  201. package/node_modules/@poe-code/safe-fs/dist/fs/s3/http/request.d.ts +17 -0
  202. package/node_modules/@poe-code/safe-fs/dist/fs/s3/http/request.js +89 -0
  203. package/node_modules/@poe-code/safe-fs/dist/fs/s3/http/signature.d.ts +20 -0
  204. package/node_modules/@poe-code/safe-fs/dist/fs/s3/http/signature.js +76 -0
  205. package/node_modules/@poe-code/safe-fs/dist/fs/s3/http/transport.d.ts +3 -0
  206. package/node_modules/@poe-code/safe-fs/dist/fs/s3/http/transport.js +478 -0
  207. package/node_modules/@poe-code/safe-fs/dist/fs/s3/http/types.d.ts +30 -0
  208. package/node_modules/@poe-code/safe-fs/dist/fs/s3/http/types.js +1 -0
  209. package/node_modules/@poe-code/safe-fs/dist/fs/s3/http/xml.d.ts +14 -0
  210. package/node_modules/@poe-code/safe-fs/dist/fs/s3/http/xml.js +192 -0
  211. package/node_modules/@poe-code/safe-fs/dist/fs/s3/index.d.ts +8 -0
  212. package/node_modules/@poe-code/safe-fs/dist/fs/s3/index.js +4 -0
  213. package/node_modules/@poe-code/safe-fs/dist/fs/s3/key-order.d.ts +2 -0
  214. package/node_modules/@poe-code/safe-fs/dist/fs/s3/key-order.js +11 -0
  215. package/node_modules/@poe-code/safe-fs/dist/fs/s3/manifest-admission.d.ts +8 -0
  216. package/node_modules/@poe-code/safe-fs/dist/fs/s3/manifest-admission.js +167 -0
  217. package/node_modules/@poe-code/safe-fs/dist/fs/s3/mock.d.ts +48 -0
  218. package/node_modules/@poe-code/safe-fs/dist/fs/s3/mock.js +249 -0
  219. package/node_modules/@poe-code/safe-fs/dist/fs/s3/namespace.d.ts +13 -0
  220. package/node_modules/@poe-code/safe-fs/dist/fs/s3/namespace.js +400 -0
  221. package/node_modules/@poe-code/safe-fs/dist/fs/s3/registry.d.ts +10 -0
  222. package/node_modules/@poe-code/safe-fs/dist/fs/s3/registry.js +73 -0
  223. package/node_modules/@poe-code/safe-fs/dist/fs/s3/transport.d.ts +103 -0
  224. package/node_modules/@poe-code/safe-fs/dist/fs/s3/transport.js +28 -0
  225. package/node_modules/@poe-code/safe-fs/dist/fs/scoped.d.ts +19 -0
  226. package/node_modules/@poe-code/safe-fs/dist/fs/scoped.js +663 -0
  227. package/node_modules/@poe-code/safe-fs/dist/fs/staging-ancestry.d.ts +8 -0
  228. package/node_modules/@poe-code/safe-fs/dist/fs/staging-ancestry.js +115 -0
  229. package/node_modules/@poe-code/safe-fs/dist/fs/staging-cleanup.d.ts +5 -0
  230. package/node_modules/@poe-code/safe-fs/dist/fs/staging-cleanup.js +63 -0
  231. package/node_modules/@poe-code/safe-fs/dist/fs/webdav/index.d.ts +2 -0
  232. package/node_modules/@poe-code/safe-fs/dist/fs/webdav/index.js +1 -0
  233. package/node_modules/@poe-code/safe-fs/dist/fs/webdav/resource-id.d.ts +18 -0
  234. package/node_modules/@poe-code/safe-fs/dist/fs/webdav/resource-id.js +109 -0
  235. package/node_modules/@poe-code/safe-fs/dist/fs/webdav/webdav.d.ts +141 -0
  236. package/node_modules/@poe-code/safe-fs/dist/fs/webdav/webdav.js +1377 -0
  237. package/node_modules/@poe-code/safe-fs/dist/fs/webdav/xml.d.ts +15 -0
  238. package/node_modules/@poe-code/safe-fs/dist/fs/webdav/xml.js +59 -0
  239. package/node_modules/@poe-code/safe-fs/dist/index.d.ts +25 -0
  240. package/node_modules/@poe-code/safe-fs/dist/index.js +21 -0
  241. package/node_modules/@poe-code/safe-fs/dist/native/fs-seek/linux-x64-glibc.node +0 -0
  242. package/node_modules/@poe-code/safe-fs/dist/native/fs-seek/loader.d.ts +5 -0
  243. package/node_modules/@poe-code/safe-fs/dist/native/fs-seek/loader.mjs +120 -0
  244. package/node_modules/@poe-code/safe-fs/dist/native/fs-seek/manifest.json +46 -0
  245. package/node_modules/@poe-code/safe-fs/dist/node/filesystem.d.ts +19 -0
  246. package/node_modules/@poe-code/safe-fs/dist/node/filesystem.js +30 -0
  247. package/node_modules/@poe-code/safe-fs/dist/node/host.d.ts +3 -0
  248. package/node_modules/@poe-code/safe-fs/dist/node/host.js +78 -0
  249. package/node_modules/@poe-code/safe-fs/dist/node/index.d.ts +3 -0
  250. package/node_modules/@poe-code/safe-fs/dist/node/index.js +2 -0
  251. package/node_modules/@poe-code/safe-fs/dist/node/native-seek-unavailable.d.ts +1 -0
  252. package/node_modules/@poe-code/safe-fs/dist/node/native-seek-unavailable.js +5 -0
  253. package/node_modules/@poe-code/safe-fs/dist/node/native-seek.d.ts +3 -0
  254. package/node_modules/@poe-code/safe-fs/dist/node/native-seek.js +54 -0
  255. package/node_modules/@poe-code/safe-fs/dist/node/stats.d.ts +1 -0
  256. package/node_modules/@poe-code/safe-fs/dist/node/stats.js +1 -0
  257. package/node_modules/@poe-code/safe-fs/dist/node/values.d.ts +1 -0
  258. package/node_modules/@poe-code/safe-fs/dist/node/values.js +1 -0
  259. package/node_modules/@poe-code/safe-fs/dist/node-host.d.ts +1 -0
  260. package/node_modules/@poe-code/safe-fs/dist/node-host.js +1 -0
  261. package/node_modules/@poe-code/safe-fs/dist/node-unavailable.d.ts +1 -0
  262. package/node_modules/@poe-code/safe-fs/dist/node-unavailable.js +1 -0
  263. package/node_modules/@poe-code/safe-fs/dist/package.json +29 -0
  264. package/node_modules/@poe-code/safe-fs/dist/platform/browser-path.d.ts +1 -0
  265. package/node_modules/@poe-code/safe-fs/dist/platform/browser-path.js +1 -0
  266. package/node_modules/@poe-code/safe-fs/dist/platform/browser.d.ts +26 -0
  267. package/node_modules/@poe-code/safe-fs/dist/platform/browser.js +58 -0
  268. package/node_modules/@poe-code/safe-fs/dist/platform/node-path.d.ts +1 -0
  269. package/node_modules/@poe-code/safe-fs/dist/platform/node-path.js +1 -0
  270. package/node_modules/@poe-code/safe-fs/dist/platform/node.d.ts +26 -0
  271. package/node_modules/@poe-code/safe-fs/dist/platform/node.js +64 -0
  272. package/node_modules/@poe-code/safe-fs/dist/platform/transport-budget.d.ts +9 -0
  273. package/node_modules/@poe-code/safe-fs/dist/platform/transport-budget.js +17 -0
  274. package/node_modules/@poe-code/safe-fs/dist/python/emscripten.d.ts +15 -0
  275. package/node_modules/@poe-code/safe-fs/dist/python/emscripten.js +357 -0
  276. package/node_modules/@poe-code/safe-fs/dist/python/filesystem.d.ts +51 -0
  277. package/node_modules/@poe-code/safe-fs/dist/python/filesystem.js +243 -0
  278. package/node_modules/@poe-code/safe-fs/dist/python/flags.d.ts +3 -0
  279. package/node_modules/@poe-code/safe-fs/dist/python/flags.js +14 -0
  280. package/node_modules/@poe-code/safe-fs/dist/python/index.d.ts +9 -0
  281. package/node_modules/@poe-code/safe-fs/dist/python/index.js +5 -0
  282. package/node_modules/@poe-code/safe-fs/dist/python/native.d.ts +18 -0
  283. package/node_modules/@poe-code/safe-fs/dist/python/native.js +446 -0
  284. package/node_modules/@poe-code/safe-fs/dist/python/request.d.ts +2 -0
  285. package/node_modules/@poe-code/safe-fs/dist/python/request.js +61 -0
  286. package/node_modules/@poe-code/safe-fs/dist/python/stat.d.ts +8 -0
  287. package/node_modules/@poe-code/safe-fs/dist/python/stat.js +34 -0
  288. package/node_modules/@poe-code/safe-fs/dist/runtime-core.d.ts +27 -0
  289. package/node_modules/@poe-code/safe-fs/dist/runtime-core.js +57 -0
  290. package/node_modules/@poe-code/safe-fs/dist/testing/atomic-filesystem.d.ts +16 -0
  291. package/node_modules/@poe-code/safe-fs/dist/testing/atomic-filesystem.js +496 -0
  292. package/node_modules/@poe-code/safe-fs/dist/testing/object-io-control.d.ts +23 -0
  293. package/node_modules/@poe-code/safe-fs/dist/testing/object-io-control.js +39 -0
  294. package/node_modules/@poe-code/safe-fs/dist/testing/object-io-metrics.d.ts +31 -0
  295. package/node_modules/@poe-code/safe-fs/dist/testing/object-io-metrics.js +143 -0
  296. package/node_modules/@poe-code/safe-fs/dist/testing/object-publication.d.ts +19 -0
  297. package/node_modules/@poe-code/safe-fs/dist/testing/object-publication.js +209 -0
  298. package/node_modules/@poe-code/safe-fs/dist/xml.d.ts +1 -0
  299. package/node_modules/@poe-code/safe-fs/dist/xml.js +1 -0
  300. package/node_modules/@poe-code/safe-fs/package.json +189 -0
  301. package/node_modules/@poe-code/task-list/README.md +2 -0
  302. package/node_modules/@poe-code/task-list/dist/backends/gh-issues-client.d.ts +1 -1
  303. package/node_modules/@poe-code/task-list/dist/backends/gh-issues-client.js +11 -4
  304. package/node_modules/@poe-code/task-list/dist/backends/markdown-dir.js +2 -2
  305. package/node_modules/@poe-code/task-list/dist/backends/utils.js +5 -7
  306. package/node_modules/@poe-code/task-list/dist/backends/yaml-file.js +1 -1
  307. package/node_modules/@poe-code/task-list/dist/default-host.d.ts +2 -0
  308. package/node_modules/@poe-code/task-list/dist/default-host.js +2 -0
  309. package/node_modules/@poe-code/task-list/dist/default-host.workerd.d.ts +4 -0
  310. package/node_modules/@poe-code/task-list/dist/default-host.workerd.js +6 -0
  311. package/node_modules/@poe-code/task-list/dist/filesystem.d.ts +3 -0
  312. package/node_modules/@poe-code/task-list/dist/filesystem.js +32 -0
  313. package/node_modules/@poe-code/task-list/dist/move.js +3 -3
  314. package/node_modules/@poe-code/task-list/dist/open.js +2 -5
  315. package/node_modules/@poe-code/task-list/dist/paths.d.ts +12 -0
  316. package/node_modules/@poe-code/task-list/dist/paths.js +7 -0
  317. package/node_modules/@poe-code/task-list/dist/types.d.ts +6 -5
  318. package/node_modules/@poe-code/task-list/package.json +9 -0
  319. package/node_modules/@poe-code/terminal-text/LICENSE +21 -0
  320. package/node_modules/@poe-code/terminal-text/README.md +12 -0
  321. package/node_modules/@poe-code/terminal-text/dist/index.d.ts +2 -0
  322. package/node_modules/@poe-code/terminal-text/dist/index.js +20 -0
  323. package/node_modules/@poe-code/terminal-text/package.json +22 -0
  324. package/node_modules/@poe-code/xml-ast/LICENSE +21 -0
  325. package/node_modules/@poe-code/xml-ast/README.md +28 -0
  326. package/node_modules/@poe-code/xml-ast/dist/index.d.ts +47 -0
  327. package/node_modules/@poe-code/xml-ast/dist/index.js +635 -0
  328. package/node_modules/@poe-code/xml-ast/package.json +25 -0
  329. package/node_modules/auth-store/README.md +35 -0
  330. package/node_modules/auth-store/dist/index.browser.d.ts +4 -0
  331. package/node_modules/auth-store/dist/index.browser.js +2 -0
  332. package/node_modules/auth-store/dist/provider-store.d.ts +1 -1
  333. package/node_modules/auth-store/dist/safe-fs-secret-store.d.ts +21 -0
  334. package/node_modules/auth-store/dist/safe-fs-secret-store.js +119 -0
  335. package/node_modules/auth-store/dist/secret-store.d.ts +12 -0
  336. package/node_modules/auth-store/dist/secret-store.js +1 -0
  337. package/node_modules/auth-store/dist/transaction-lock.d.ts +2 -4
  338. package/node_modules/auth-store/dist/types.d.ts +2 -9
  339. package/node_modules/auth-store/package.json +16 -2
  340. package/node_modules/tiny-http-mcp-server/dist/composition.json +16 -1
  341. package/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/README.md +25 -0
  342. package/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/client/authorization-state.js +4 -4
  343. package/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/client/default-oauth-client-provider.js +6 -40
  344. package/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/client/oauth-form.d.ts +10 -0
  345. package/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/client/oauth-form.js +20 -0
  346. package/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/client/pkce.js +4 -3
  347. package/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/client/register-client.d.ts +14 -0
  348. package/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/client/register-client.js +53 -0
  349. package/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/client/resumable.d.ts +16 -2
  350. package/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/client/resumable.js +29 -9
  351. package/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/client/revoke-token.d.ts +12 -0
  352. package/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/client/revoke-token.js +23 -0
  353. package/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/client/token-endpoint.js +6 -19
  354. package/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/http-fetch.js +1 -1
  355. package/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/index.browser.d.ts +6 -2
  356. package/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/index.browser.js +5 -1
  357. package/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/index.d.ts +5 -2
  358. package/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/index.js +4 -1
  359. package/node_modules/tiny-http-mcp-server/package.json +4 -4
  360. package/node_modules/tiny-mcp-client/README.md +2 -0
  361. package/node_modules/tiny-mcp-client/dist/index.browser.d.ts +25 -23
  362. package/node_modules/tiny-mcp-client/dist/index.browser.js +116 -1
  363. package/node_modules/tiny-mcp-client/dist/index.d.ts +25 -23
  364. package/node_modules/tiny-mcp-client/dist/index.js +1034 -561
  365. package/node_modules/tiny-mcp-client/package.json +15 -0
  366. package/node_modules/tiny-stdio-mcp-server/dist/composition.json +1 -1
  367. package/node_modules/toolcraft-design/dist/components/table.js +6 -0
  368. package/node_modules/toolcraft-design/dist/escape-terminal-text.d.ts +1 -2
  369. package/node_modules/toolcraft-design/dist/escape-terminal-text.js +1 -20
  370. package/node_modules/toolcraft-design/dist/terminal-markdown/parser/frontmatter.js +2 -1
  371. package/node_modules/toolcraft-design/dist/terminal-markdown/parser.js +2 -1
  372. package/node_modules/toolcraft-schema/dist/json-schema/utils.js +3 -0
  373. package/node_modules/toolcraft-schema/package.json +1 -1
  374. package/package.json +32 -7
@@ -0,0 +1,321 @@
1
+ import { FsError } from "./errors.js";
2
+ import { finishCleanup } from "./cleanup.js";
3
+ let sharedTextEncoder;
4
+ const EMPTY_BYTES = new Uint8Array(0);
5
+ const DONE_RESULT = Object.freeze({ done: true, value: undefined });
6
+ const RESOLVED_DONE = Promise.resolve(DONE_RESULT);
7
+ const readBytesSignal = Symbol.for("safe-fs.readBytesSignal");
8
+ const EMPTY_BYTE_ITERATOR = Object.freeze({
9
+ [Symbol.asyncIterator]() { return this; },
10
+ tryNextSync() { return DONE_RESULT; },
11
+ next() { return RESOLVED_DONE; },
12
+ return() { return RESOLVED_DONE; },
13
+ });
14
+ const EMPTY_BYTE_SOURCE = Object.freeze({
15
+ [Symbol.asyncIterator]() { return EMPTY_BYTE_ITERATOR; },
16
+ });
17
+ const noop = () => { };
18
+ class SingleChunkByteIterator {
19
+ constructor(bytes) {
20
+ this.bytes = bytes;
21
+ this.consumed = false;
22
+ }
23
+ [Symbol.asyncIterator]() {
24
+ return this;
25
+ }
26
+ tryNextSync() {
27
+ if (this.consumed)
28
+ return DONE_RESULT;
29
+ this.consumed = true;
30
+ return { done: false, value: this.bytes };
31
+ }
32
+ next() {
33
+ if (this.consumed)
34
+ return RESOLVED_DONE;
35
+ this.consumed = true;
36
+ return Promise.resolve({ done: false, value: this.bytes });
37
+ }
38
+ return() {
39
+ this.consumed = true;
40
+ return RESOLVED_DONE;
41
+ }
42
+ }
43
+ class SingleChunkByteSource {
44
+ constructor(bytes) {
45
+ this.bytes = bytes;
46
+ }
47
+ [Symbol.asyncIterator]() {
48
+ return new SingleChunkByteIterator(this.bytes);
49
+ }
50
+ }
51
+ export function toByteSource(input) {
52
+ if (typeof input !== "string" && !(input instanceof Uint8Array)) {
53
+ throw new TypeError("Byte source input must be a string or Uint8Array");
54
+ }
55
+ if (typeof input === "string") {
56
+ if (input.length === 0)
57
+ return EMPTY_BYTE_SOURCE;
58
+ }
59
+ else if (input.byteLength === 0) {
60
+ return EMPTY_BYTE_SOURCE;
61
+ }
62
+ const bytes = typeof input === "string" ? (sharedTextEncoder ??= new TextEncoder()).encode(input) : new Uint8Array(input);
63
+ return new SingleChunkByteSource(bytes);
64
+ }
65
+ export async function collectBytes(source, options) {
66
+ if (options.maxBytes !== undefined && options.maxBytes !== Infinity && (!Number.isSafeInteger(options.maxBytes) || options.maxBytes < 0)) {
67
+ throw new RangeError("maxBytes must be a nonnegative safe integer");
68
+ }
69
+ if (options.maxMemoryBytes !== undefined && options.maxMemoryBytes !== Infinity && (!Number.isSafeInteger(options.maxMemoryBytes) || options.maxMemoryBytes < 0)) {
70
+ throw new RangeError("maxMemoryBytes must be a nonnegative safe integer or Infinity");
71
+ }
72
+ const memoryLimit = options.maxMemoryBytes ?? Infinity;
73
+ let reserved = 0;
74
+ let inputBytes = 0;
75
+ let buffer = new Uint8Array(0);
76
+ let size = 0;
77
+ function reserve(bytes) {
78
+ if (bytes > memoryLimit - reserved) {
79
+ throw new FsError("EFBIG", { syscall: "collectBytes", message: "collection exceeds memory budget" });
80
+ }
81
+ reserved += bytes;
82
+ }
83
+ options.signal?.throwIfAborted();
84
+ for await (const chunk of readBytes(source, options.signal)) {
85
+ reserved -= inputBytes;
86
+ inputBytes = 0;
87
+ if (chunk.byteLength > (options.maxBytes ?? Infinity) - size) {
88
+ throw new FsError("EFBIG", { syscall: "collectBytes", message: "output exceeds maxBytes" });
89
+ }
90
+ // A small view can retain a large backing buffer. Keep this reservation
91
+ // while awaiting the next chunk, including while its source is suspended.
92
+ reserve(chunk.buffer.byteLength);
93
+ inputBytes = chunk.buffer.byteLength;
94
+ const nextSize = size + chunk.byteLength;
95
+ if (nextSize > buffer.byteLength) {
96
+ const capacity = Math.min(options.maxBytes ?? Infinity, Math.max(nextSize, buffer.byteLength * 2));
97
+ // Admit both generations before allocation. Do not fall back to repeated
98
+ // exact-size growth when geometric growth exceeds the budget.
99
+ reserve(capacity);
100
+ const replacement = new Uint8Array(capacity);
101
+ replacement.set(buffer.subarray(0, size));
102
+ reserved -= buffer.byteLength;
103
+ buffer = replacement;
104
+ }
105
+ buffer.set(chunk, size);
106
+ size = nextSize;
107
+ }
108
+ options.signal?.throwIfAborted();
109
+ return buffer.subarray(0, size);
110
+ }
111
+ /** Subscribe when supported; callers must still check cancellation at operation boundaries. */
112
+ export function listenForAbort(signal, listener) {
113
+ let callback = listener;
114
+ const onAbort = () => callback?.();
115
+ const dispose = () => {
116
+ // Release operation state even when a frozen host refuses removal.
117
+ callback = undefined;
118
+ try {
119
+ signal.removeEventListener("abort", onAbort);
120
+ }
121
+ catch (error) {
122
+ if (!(error instanceof TypeError) || Object.isExtensible(signal))
123
+ throw error;
124
+ }
125
+ };
126
+ try {
127
+ signal.addEventListener("abort", onAbort, { once: true });
128
+ }
129
+ catch (error) {
130
+ // Frozen hosts may register before failing to update their bookkeeping.
131
+ dispose();
132
+ if (!(error instanceof TypeError) || Object.isExtensible(signal))
133
+ throw error;
134
+ }
135
+ return dispose;
136
+ }
137
+ async function abortable(operation, signal) {
138
+ signal?.throwIfAborted();
139
+ if (!signal)
140
+ return operation();
141
+ return new Promise((resolve, reject) => {
142
+ const dispose = listenForAbort(signal, () => {
143
+ dispose();
144
+ reject(signal.reason);
145
+ });
146
+ try {
147
+ Promise.resolve(operation()).then((result) => {
148
+ dispose();
149
+ resolve(result);
150
+ }, (error) => {
151
+ dispose();
152
+ reject(error);
153
+ });
154
+ }
155
+ catch (error) {
156
+ dispose();
157
+ reject(error);
158
+ }
159
+ });
160
+ }
161
+ class ReadBytesGenerator {
162
+ constructor(source, signal) {
163
+ this.source = source;
164
+ this.abortSignal = signal;
165
+ this.iterator = undefined;
166
+ this.nativeAbort = false;
167
+ this.finished = false;
168
+ this.closing = undefined;
169
+ this.turn = undefined;
170
+ this.readingSync = false;
171
+ this.syncFailure = undefined;
172
+ }
173
+ get [readBytesSignal]() {
174
+ return this.abortSignal;
175
+ }
176
+ [Symbol.asyncIterator]() {
177
+ return this;
178
+ }
179
+ _schedule(action) {
180
+ const previous = this.turn;
181
+ let release;
182
+ const reserved = new Promise(resolve => { release = resolve; });
183
+ // Reserve before calling a producer, which may synchronously reenter us.
184
+ this.turn = reserved;
185
+ const result = previous
186
+ ? previous.then(action)
187
+ : this.readingSync
188
+ ? Promise.resolve().then(action)
189
+ : action();
190
+ const finish = () => {
191
+ if (this.turn === reserved)
192
+ this.turn = undefined;
193
+ release();
194
+ };
195
+ void result.then(finish, finish);
196
+ return result;
197
+ }
198
+ _ensureIterator() {
199
+ let it = this.iterator;
200
+ if (!it) {
201
+ const signal = this.abortSignal;
202
+ signal?.throwIfAborted();
203
+ it = this.source[Symbol.asyncIterator]();
204
+ this.iterator = it;
205
+ this.nativeAbort = signal !== undefined && it.abortSignal === signal;
206
+ }
207
+ return it;
208
+ }
209
+ async _cleanupIterator(failed) {
210
+ const signal = this.abortSignal;
211
+ if (!this.finished && this.iterator?.return) {
212
+ this.finished = true;
213
+ const it = this.iterator;
214
+ const cleanup = new Promise(resolve => { resolve(it.return()); });
215
+ if (signal?.aborted)
216
+ void cleanup.catch(noop);
217
+ else
218
+ this.closing = abortable(() => cleanup, signal).then(noop);
219
+ }
220
+ else {
221
+ this.finished = true;
222
+ }
223
+ if (this.closing) {
224
+ const pending = this.closing;
225
+ try {
226
+ await finishCleanup(() => pending, failed);
227
+ }
228
+ finally {
229
+ if (this.closing === pending)
230
+ this.closing = undefined;
231
+ }
232
+ }
233
+ }
234
+ tryNextSync() {
235
+ if (this.turn || this.readingSync || this.syncFailure)
236
+ return undefined;
237
+ if (this.finished)
238
+ return DONE_RESULT;
239
+ this.readingSync = true;
240
+ try {
241
+ const it = this._ensureIterator();
242
+ if (typeof it.tryNextSync !== "function")
243
+ return undefined;
244
+ const signal = this.abortSignal;
245
+ signal?.throwIfAborted();
246
+ const syncResult = it.tryNextSync();
247
+ signal?.throwIfAborted();
248
+ if (syncResult === undefined)
249
+ return undefined;
250
+ if (syncResult.done) {
251
+ this.finished = true;
252
+ return DONE_RESULT;
253
+ }
254
+ if (!(syncResult.value instanceof Uint8Array))
255
+ throw new TypeError("Byte sources must yield Uint8Array chunks");
256
+ return syncResult;
257
+ }
258
+ catch (error) {
259
+ this.syncFailure = { reason: error };
260
+ return undefined;
261
+ }
262
+ finally {
263
+ this.readingSync = false;
264
+ }
265
+ }
266
+ async _runNext() {
267
+ if (this.finished)
268
+ return DONE_RESULT;
269
+ try {
270
+ if (this.syncFailure) {
271
+ const { reason } = this.syncFailure;
272
+ this.syncFailure = undefined;
273
+ throw reason;
274
+ }
275
+ const it = this._ensureIterator();
276
+ const signal = this.abortSignal;
277
+ signal?.throwIfAborted();
278
+ const syncResult = typeof it.tryNextSync === "function" ? it.tryNextSync() : undefined;
279
+ const result = syncResult ?? (this.nativeAbort ? await it.next() : await abortable(() => it.next(), signal));
280
+ signal?.throwIfAborted();
281
+ if (result.done) {
282
+ this.finished = true;
283
+ return DONE_RESULT;
284
+ }
285
+ if (!(result.value instanceof Uint8Array))
286
+ throw new TypeError("Byte sources must yield Uint8Array chunks");
287
+ return result;
288
+ }
289
+ catch (error) {
290
+ await this._cleanupIterator(true);
291
+ throw error;
292
+ }
293
+ }
294
+ next() {
295
+ if (this.finished && !this.turn && !this.readingSync && !this.syncFailure && !this.closing)
296
+ return RESOLVED_DONE;
297
+ return this._schedule(() => this._runNext());
298
+ }
299
+ return(value) {
300
+ if ((this.finished || !this.iterator?.return) && !this.turn && !this.readingSync && !this.closing && value === undefined) {
301
+ this.finished = true;
302
+ return RESOLVED_DONE;
303
+ }
304
+ return this._schedule(async () => {
305
+ await this._cleanupIterator(false);
306
+ return { done: true, value: await value };
307
+ });
308
+ }
309
+ throw(error) {
310
+ return this._schedule(async () => {
311
+ await this._cleanupIterator(true);
312
+ throw error;
313
+ });
314
+ }
315
+ }
316
+ export function readBytes(source, signal) {
317
+ if (signal !== undefined && source[readBytesSignal] === signal) {
318
+ return source;
319
+ }
320
+ return new ReadBytesGenerator(source, signal);
321
+ }
@@ -0,0 +1,134 @@
1
+ import type { FileType, FsOptions, ReadDirectoryOptions } from "./filesystem.js";
2
+ /** Owned Unix path bytes. No decoding, normalization, or namespace authorization. */
3
+ export declare class BytePath {
4
+ #private;
5
+ constructor(value: Uint8Array);
6
+ bytes(): Uint8Array;
7
+ }
8
+ /** JSON representation: octets, never a UTF-8 replacement string. */
9
+ export declare function encodeBytePath(path: BytePath): number[];
10
+ export declare function decodeBytePath(value: unknown): BytePath;
11
+ /** Admit legacy numbers before conversion; native off_t profile is signed 64-bit. */
12
+ export declare function fileOffset(value: number | bigint): bigint;
13
+ export declare function encodeFileOffset(value: bigint): string;
14
+ export declare function decodeFileOffset(value: unknown): bigint;
15
+ export type SpecialFileType = "character" | "fifo" | "socket";
16
+ export type ObjectFileType = FileType | SpecialFileType;
17
+ export interface ExactFileStat {
18
+ readonly type: ObjectFileType;
19
+ readonly size: bigint;
20
+ readonly allocatedBytes?: bigint;
21
+ /** Observed link count, including zero for an unlinked retained object; not identity. */
22
+ readonly nlink?: bigint;
23
+ readonly mode?: number;
24
+ readonly uid?: number;
25
+ readonly gid?: number;
26
+ readonly atimeNs?: bigint;
27
+ readonly mtimeNs?: bigint;
28
+ readonly ctimeNs?: bigint;
29
+ }
30
+ /** Metadata updates affect the retained object. No implicit recursive/path fallback. */
31
+ export interface ObjectMetadata {
32
+ readonly mode?: number;
33
+ readonly uid?: number;
34
+ readonly gid?: number;
35
+ readonly atimeNs?: bigint;
36
+ readonly mtimeNs?: bigint;
37
+ }
38
+ export interface ExactFileReadHandle {
39
+ stat(options?: FsOptions): Promise<ExactFileStat>;
40
+ read(position: bigint, maxBytes: number, options?: FsOptions): Promise<Uint8Array>;
41
+ }
42
+ export interface ExactFileResizeHandle {
43
+ stat(options?: FsOptions): Promise<ExactFileStat>;
44
+ truncate(length: bigint, options?: FsOptions): Promise<void>;
45
+ }
46
+ /** Cursor operation on the same retained open description. Aliases share its
47
+ * cursor; close ownership remains with the enclosing handle. No numeric fallback. */
48
+ export interface ExactFileSeekHandle {
49
+ seek(position: bigint, options?: FsOptions): Promise<void>;
50
+ }
51
+ export interface OpenFileObjectOptions extends FsOptions {
52
+ /** Default read; retained handle access is independent of hardlink identity. */
53
+ readonly access?: "read" | "write" | "readwrite";
54
+ /** Separately authorized native endpoint; omission never admits a special file. */
55
+ readonly special?: SpecialFileType;
56
+ }
57
+ /** Native creation admission on the same object that is returned. Exclusive
58
+ * flags refuse every existing entry, including a symlink, without mutation.
59
+ * w truncates during acquisition; a preserves existing bytes. Failure after a
60
+ * completed truncation does not roll it back. Backend root/mount/readonly/quota
61
+ * policy applies before acquisition; no caller-side existence or stat probe. */
62
+ export interface CreateFileObjectOptions extends FsOptions {
63
+ readonly flag: "w" | "wx" | "a" | "ax";
64
+ readonly access?: "read" | "write" | "readwrite";
65
+ readonly mode?: number;
66
+ }
67
+ export interface RetainedFileObject {
68
+ /** Qualified retained identity: aliases share this token while any retain exists.
69
+ * Tokens cannot collide across unrelated backend/mount authorities and are never
70
+ * derived from paths or unqualified stat tuples. They are NOT wire identifiers. */
71
+ readonly identity: object | symbol;
72
+ readonly type: ObjectFileType;
73
+ stat(options?: FsOptions): Promise<ExactFileStat>;
74
+ read?(position: bigint, maxBytes: number, options?: FsOptions): Promise<Uint8Array>;
75
+ write?(position: bigint, bytes: Uint8Array, options?: FsOptions): Promise<number>;
76
+ /** Choose EOF and append on this retained object as one backend operation.
77
+ * Return actual settled byte progress; never implement with caller-side stat/write. */
78
+ append?(bytes: Uint8Array, options?: FsOptions): Promise<number>;
79
+ truncate?(length: bigint, options?: FsOptions): Promise<void>;
80
+ /** Each field requires backend support; unsupported fields reject ENOTSUP. */
81
+ metadata?(changes: ObjectMetadata, options?: FsOptions): Promise<void>;
82
+ /** Link the retained object, not its former pathname. Preserve EXDEV/EPERM. */
83
+ link?(destination: BytePath, options?: FsOptions): Promise<void>;
84
+ close(): Promise<void>;
85
+ }
86
+ export interface CreatedFileObject extends RetainedFileObject {
87
+ /** Receipt from acquisition, never inferred from a later pathname probe. */
88
+ readonly creation: "created" | "opened" | "truncated";
89
+ }
90
+ /** Optional stronger byte namespace. Absence is unsupported, not string fallback.
91
+ * Implementations retain objects atomically, enforce mount/root permissions and
92
+ * validate requested endpoint kinds before any potentially blocking acquisition. */
93
+ export interface ObjectFileSystem {
94
+ readonly specialFiles?: Readonly<Partial<Record<SpecialFileType, boolean>>>;
95
+ open(path: BytePath, options?: OpenFileObjectOptions): Promise<RetainedFileObject>;
96
+ /** Optional qualified create/open/truncate primitive. Mode is used for newly
97
+ * created files only. Defaults for access/mode belong to the backend. a/ax
98
+ * do not synthesize retained append support or an append cursor. */
99
+ create?(path: BytePath, options: CreateFileObjectOptions): Promise<CreatedFileObject>;
100
+ /** A receipt describes this operation's actual namespace effect, not a later
101
+ * pathname probe. Omission means unknown; identical-object renames may be no-ops. */
102
+ rename?(source: BytePath, destination: BytePath, options?: FsOptions): Promise<void | {
103
+ readonly moved: boolean;
104
+ }>;
105
+ unlink?(path: BytePath, options?: FsOptions): Promise<void>;
106
+ readdir?(path: BytePath, options?: ReadDirectoryOptions): Promise<readonly {
107
+ readonly name: BytePath;
108
+ readonly type: ObjectFileType;
109
+ }[]>;
110
+ }
111
+ export interface WireObjectDirectoryEntry {
112
+ readonly name: readonly number[];
113
+ readonly type: ObjectFileType;
114
+ }
115
+ export interface WireObjectHandle {
116
+ readonly handle: string;
117
+ readonly object: string;
118
+ }
119
+ export type WireExactFileStat = Omit<ExactFileStat, "size" | "allocatedBytes" | "nlink" | "atimeNs" | "mtimeNs" | "ctimeNs"> & {
120
+ readonly size: string;
121
+ readonly allocatedBytes?: string;
122
+ readonly nlink?: string;
123
+ readonly atimeNs?: string;
124
+ readonly mtimeNs?: string;
125
+ readonly ctimeNs?: string;
126
+ };
127
+ export type WireObjectMetadata = Omit<ObjectMetadata, "atimeNs" | "mtimeNs"> & {
128
+ readonly atimeNs?: string;
129
+ readonly mtimeNs?: string;
130
+ };
131
+ export declare function encodeObjectMetadata(value: ObjectMetadata): WireObjectMetadata;
132
+ export declare function decodeObjectMetadata(value: unknown): ObjectMetadata;
133
+ /** Signed nanoseconds since Unix epoch; admit exact values before serialization. */
134
+ export declare function encodeFileTimestamp(value: bigint): string;
@@ -0,0 +1,97 @@
1
+ import { FsError } from "./errors.js";
2
+ /** Owned Unix path bytes. No decoding, normalization, or namespace authorization. */
3
+ export class BytePath {
4
+ #value;
5
+ constructor(value) {
6
+ if (!(value instanceof Uint8Array)) {
7
+ throw new FsError("EINVAL", { syscall: "bytePath" });
8
+ }
9
+ this.#value = new Uint8Array(value);
10
+ if (this.#value.length === 0 || this.#value.includes(0)) {
11
+ throw new FsError("EINVAL", { syscall: "bytePath" });
12
+ }
13
+ }
14
+ bytes() { return this.#value.slice(); }
15
+ }
16
+ /** JSON representation: octets, never a UTF-8 replacement string. */
17
+ export function encodeBytePath(path) {
18
+ return Array.from(BytePath.prototype.bytes.call(path));
19
+ }
20
+ export function decodeBytePath(value) {
21
+ if (!Array.isArray(value))
22
+ throw new FsError("EINVAL", { syscall: "bytePath" });
23
+ const octets = Array.from({ length: value.length }, (_, index) => {
24
+ if (!Object.hasOwn(value, index))
25
+ throw new FsError("EINVAL", { syscall: "bytePath" });
26
+ return value[index];
27
+ });
28
+ if (octets.some(byte => !Number.isInteger(byte) || byte < 0 || byte > 255)) {
29
+ throw new FsError("EINVAL", { syscall: "bytePath" });
30
+ }
31
+ return new BytePath(Uint8Array.from(octets));
32
+ }
33
+ /** Admit legacy numbers before conversion; native off_t profile is signed 64-bit. */
34
+ export function fileOffset(value) {
35
+ if (typeof value !== "bigint" && (typeof value !== "number" || !Number.isSafeInteger(value))) {
36
+ throw new FsError("EINVAL", { syscall: "offset" });
37
+ }
38
+ const exact = BigInt(value);
39
+ if (exact < 0n || exact > 9223372036854775807n)
40
+ throw new FsError("EINVAL", { syscall: "offset" });
41
+ return exact;
42
+ }
43
+ export function encodeFileOffset(value) {
44
+ if (typeof value !== "bigint")
45
+ throw new FsError("EINVAL", { syscall: "offset" });
46
+ return fileOffset(value).toString();
47
+ }
48
+ export function decodeFileOffset(value) {
49
+ if (typeof value !== "string" || value.length === 0 || value.length > 19 ||
50
+ (value.length > 1 && value[0] === "0") || [...value].some(char => char < "0" || char > "9")) {
51
+ throw new FsError("EINVAL", { syscall: "offset" });
52
+ }
53
+ return fileOffset(BigInt(value));
54
+ }
55
+ export function encodeObjectMetadata(value) {
56
+ const { atimeNs, mtimeNs, ...rest } = value;
57
+ const wire = {
58
+ ...rest,
59
+ ...(atimeNs === undefined ? {} : { atimeNs: encodeFileTimestamp(atimeNs) }),
60
+ ...(mtimeNs === undefined ? {} : { mtimeNs: encodeFileTimestamp(mtimeNs) }),
61
+ };
62
+ decodeObjectMetadata(wire);
63
+ return wire;
64
+ }
65
+ export function decodeObjectMetadata(value) {
66
+ if (typeof value !== "object" || value === null || Array.isArray(value))
67
+ throw new FsError("EINVAL");
68
+ const result = {};
69
+ for (const [key, field] of Object.entries(value)) {
70
+ if (key === "atimeNs" || key === "mtimeNs") {
71
+ if (typeof field !== "string" || field.length === 0 || field.length > 20)
72
+ throw new FsError("EINVAL");
73
+ const digits = field.startsWith("-") ? field.slice(1) : field;
74
+ if (digits.length === 0 || [...digits].some(char => char < "0" || char > "9"))
75
+ throw new FsError("EINVAL");
76
+ const exact = BigInt(field);
77
+ if (exact.toString() !== field || exact < -9223372036854775808n || exact > 9223372036854775807n)
78
+ throw new FsError("EINVAL");
79
+ result[key] = exact;
80
+ }
81
+ else if (key === "mode" || key === "uid" || key === "gid") {
82
+ if (typeof field !== "number" || !Number.isSafeInteger(field) || field < 0 || field > (key === "mode" ? 0o7777 : 4294967294))
83
+ throw new FsError("EINVAL");
84
+ result[key] = field;
85
+ }
86
+ else {
87
+ throw new FsError("ENOTSUP");
88
+ }
89
+ }
90
+ return result;
91
+ }
92
+ /** Signed nanoseconds since Unix epoch; admit exact values before serialization. */
93
+ export function encodeFileTimestamp(value) {
94
+ if (typeof value !== "bigint" || value < -9223372036854775808n || value > 9223372036854775807n)
95
+ throw new FsError("EINVAL");
96
+ return value.toString();
97
+ }
@@ -0,0 +1,3 @@
1
+ export { assertPathWithin, isPathWithin, normalizePath, relativePath, resolvePath, validatePath } from "./virtual-path.js";
2
+ export { posixPath, basename, dirname, extname, joinPath, isAbsolutePath } from "./portable-path.js";
3
+ export type { PathLimits } from "./virtual-path.js";
@@ -0,0 +1,2 @@
1
+ export { assertPathWithin, isPathWithin, normalizePath, relativePath, resolvePath, validatePath } from "./virtual-path.js";
2
+ export { posixPath, basename, dirname, extname, joinPath, isAbsolutePath } from "./portable-path.js";
@@ -0,0 +1,21 @@
1
+ import { dirname as virtualDirname } from "./virtual-path.js";
2
+ export declare function basename(path: string, suffix?: string): string;
3
+ export declare const dirname: typeof virtualDirname;
4
+ export declare function extname(path: string): string;
5
+ export declare function isAbsolutePath(path: string): boolean;
6
+ export declare function joinPath(...paths: string[]): string;
7
+ declare function resolve(...paths: string[]): string;
8
+ declare function relative(from: string, to: string): string;
9
+ export declare const posixPath: Readonly<{
10
+ basename: typeof basename;
11
+ dirname: typeof virtualDirname;
12
+ extname: typeof extname;
13
+ join: typeof joinPath;
14
+ isAbsolute: typeof isAbsolutePath;
15
+ normalize: typeof joinPath;
16
+ resolve: typeof resolve;
17
+ relative: typeof relative;
18
+ sep: "/";
19
+ delimiter: ":";
20
+ }>;
21
+ export {};
@@ -0,0 +1,78 @@
1
+ import { dirname as virtualDirname } from "./virtual-path.js";
2
+ function assertString(value) {
3
+ if (typeof value !== "string")
4
+ throw new TypeError("path must be a string");
5
+ }
6
+ export function basename(path, suffix = "") {
7
+ assertString(path);
8
+ assertString(suffix);
9
+ if (suffix && path === suffix)
10
+ return "";
11
+ let end = path.length;
12
+ while (end > 0 && path[end - 1] === "/")
13
+ end--;
14
+ if (end === 0 && suffix && suffix.length <= path.length)
15
+ return path;
16
+ const start = path.lastIndexOf("/", end - 1) + 1;
17
+ const base = path.slice(start, end);
18
+ if (suffix.length > base.length && suffix.length <= path.length && suffix.endsWith(base))
19
+ return path.slice(start);
20
+ return suffix && suffix.length < base.length && base.endsWith(suffix)
21
+ ? base.slice(0, -suffix.length)
22
+ : base;
23
+ }
24
+ export const dirname = virtualDirname;
25
+ export function extname(path) {
26
+ const base = basename(path);
27
+ const position = base.lastIndexOf(".");
28
+ return position <= 0 || base === ".." ? "" : base.slice(position);
29
+ }
30
+ export function isAbsolutePath(path) {
31
+ assertString(path);
32
+ return path.startsWith("/");
33
+ }
34
+ export function joinPath(...paths) {
35
+ for (const path of paths)
36
+ assertString(path);
37
+ const joined = paths.filter(Boolean).join("/");
38
+ if (!joined)
39
+ return ".";
40
+ const absolute = joined.startsWith("/");
41
+ const components = [];
42
+ for (const component of joined.split("/")) {
43
+ if (!component || component === ".")
44
+ continue;
45
+ if (component === "..") {
46
+ if (components.length && components.at(-1) !== "..")
47
+ components.pop();
48
+ else if (!absolute)
49
+ components.push(component);
50
+ }
51
+ else
52
+ components.push(component);
53
+ }
54
+ const result = `${absolute ? "/" : ""}${components.join("/")}` || ".";
55
+ return joined.endsWith("/") && result !== "/" ? `${result}/` : result;
56
+ }
57
+ // Portable paths have a stable root instead of a process working directory.
58
+ function resolve(...paths) {
59
+ let joined = "/";
60
+ for (const path of paths) {
61
+ assertString(path);
62
+ joined = path.startsWith("/") ? path : `${joined}/${path}`;
63
+ }
64
+ const normalized = joinPath(joined);
65
+ return normalized.length > 1 && normalized.endsWith("/") ? normalized.slice(0, -1) : normalized;
66
+ }
67
+ function relative(from, to) {
68
+ const source = resolve(from).split("/").filter(Boolean);
69
+ const target = resolve(to).split("/").filter(Boolean);
70
+ let common = 0;
71
+ while (common < source.length && common < target.length && source[common] === target[common])
72
+ common++;
73
+ return [...Array(source.length - common).fill(".."), ...target.slice(common)].join("/");
74
+ }
75
+ export const posixPath = Object.freeze({
76
+ basename, dirname, extname, join: joinPath, isAbsolute: isAbsolutePath,
77
+ normalize: joinPath, resolve, relative, sep: "/", delimiter: ":"
78
+ });
@@ -0,0 +1,15 @@
1
+ export declare const MAX_PATH_BYTES: number;
2
+ export declare const MAX_PATH_COMPONENTS: number;
3
+ export interface PathLimits {
4
+ readonly maxPathBytes?: number | undefined;
5
+ readonly maxPathComponents?: number | undefined;
6
+ }
7
+ export declare function pathByteLength(path: string): number;
8
+ export declare function validatePath(path: string, limits?: PathLimits | number): void;
9
+ export declare function resolvePath2(cwd: string, path0: string): string;
10
+ export declare function resolvePath(cwd: string, ...paths: string[]): string;
11
+ export declare function normalizePath(path: string, cwd?: string): string;
12
+ export declare function dirname(path: string): string;
13
+ export declare function relativePath(from: string, to: string): string;
14
+ export declare function isPathWithin(root: string, path: string): boolean;
15
+ export declare function assertPathWithin(root: string, path: string): string;