toolcraft 0.0.749 → 0.0.750

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,81 @@
1
+ import type { FileSystem, FsOptions } from "../contracts/filesystem.js";
2
+ export interface FsBridgeCodec {
3
+ isEncoding(encoding: string): boolean;
4
+ encode(text: string, encoding: string): Uint8Array;
5
+ decode(bytes: Uint8Array, encoding: string): string;
6
+ }
7
+ export interface FsBridgeOptions {
8
+ readonly codec: FsBridgeCodec;
9
+ readonly cwd?: string;
10
+ /** Optional confinement boundary; defaults to cwd. */
11
+ readonly root?: string;
12
+ readonly signal?: AbortSignal;
13
+ /** Trusted per-read backend byte cap, enforced before copying or decoding. */
14
+ readonly readFileMaxBytes?: number;
15
+ /** Reserve host resources; release after decoding and actual backend settlement, including cancellation. */
16
+ readonly reserveReadFile?: () => () => void;
17
+ }
18
+ export interface FsBridgeFileSystem extends FileSystem {
19
+ rmdir?(path: string, options?: FsOptions): Promise<void>;
20
+ }
21
+ export type FsBridgeEncoding = "ascii" | "utf8" | "utf-8" | "utf16le" | "utf-16le" | "ucs2" | "ucs-2" | "base64" | "base64url" | "latin1" | "binary" | "hex";
22
+ export interface ObjectEncodingOptions {
23
+ encoding?: FsBridgeEncoding | null | undefined;
24
+ }
25
+ export type BufferEncodingOption = "buffer" | {
26
+ encoding: "buffer";
27
+ };
28
+ export type Mode = number | string;
29
+ export interface MakeDirectoryOptions {
30
+ recursive?: boolean | undefined;
31
+ mode?: Mode | undefined;
32
+ }
33
+ export interface StatOptions {
34
+ bigint?: boolean | undefined;
35
+ }
36
+ export interface FsBridgePredicates {
37
+ isFile(): boolean;
38
+ isDirectory(): boolean;
39
+ isSymbolicLink(): boolean;
40
+ isBlockDevice(): boolean;
41
+ isCharacterDevice(): boolean;
42
+ isFIFO(): boolean;
43
+ isSocket(): boolean;
44
+ }
45
+ export interface FsBridgeStats extends FsBridgePredicates {
46
+ dev: number;
47
+ ino: number;
48
+ mode: number;
49
+ nlink: number;
50
+ uid: number;
51
+ gid: number;
52
+ rdev: number;
53
+ size: number;
54
+ blksize: number;
55
+ blocks: number;
56
+ atimeMs: number;
57
+ mtimeMs: number;
58
+ ctimeMs: number;
59
+ birthtimeMs: number;
60
+ atime: Date;
61
+ mtime: Date;
62
+ ctime: Date;
63
+ birthtime: Date;
64
+ }
65
+ export interface FsBridgeDirent<Name extends string | Uint8Array = string> extends FsBridgePredicates {
66
+ name: Name;
67
+ parentPath: string;
68
+ path: string;
69
+ }
70
+ export interface BridgePrimitives<Binary extends Uint8Array> {
71
+ readonly codec: FsBridgeCodec;
72
+ copyBytes(bytes: Uint8Array): Binary;
73
+ pathValue?(value: unknown): unknown;
74
+ randomSuffix(): string;
75
+ readonly paths: {
76
+ isAbsolute(path: string): boolean;
77
+ dirname(path: string): string;
78
+ relative(from: string, to: string): string;
79
+ resolve(cwd: string, ...paths: string[]): string;
80
+ };
81
+ }
@@ -0,0 +1,6 @@
1
+ export declare function record(value: unknown, name: string): Record<string, unknown>;
2
+ export declare function onlyKeys(value: Record<string, unknown>, allowed: readonly string[]): void;
3
+ export declare function booleanValue(value: unknown, fallback?: boolean): boolean;
4
+ export declare function abortError(): Error;
5
+ export declare function checkSignal(signal: AbortSignal | undefined): void;
6
+ export declare function withSignal<Value>(signal: AbortSignal | undefined, operation: () => Promise<Value>): Promise<Value>;
@@ -0,0 +1,65 @@
1
+ export function record(value, name) {
2
+ if (typeof value !== "object" || value === null || Array.isArray(value)) {
3
+ throw new TypeError(`${name} must be a plain object`);
4
+ }
5
+ const prototype = Object.getPrototypeOf(value);
6
+ if (prototype !== Object.prototype && prototype !== null) {
7
+ throw new TypeError(`${name} must be a plain object`);
8
+ }
9
+ const result = {};
10
+ for (const key of Reflect.ownKeys(value)) {
11
+ const descriptor = Object.getOwnPropertyDescriptor(value, key);
12
+ if (typeof key !== "string" || descriptor === undefined || !("value" in descriptor)) {
13
+ throw new TypeError(`${name} must contain only string-keyed data properties`);
14
+ }
15
+ Object.defineProperty(result, key, {
16
+ value: descriptor.value,
17
+ enumerable: true,
18
+ configurable: true,
19
+ writable: true,
20
+ });
21
+ }
22
+ return result;
23
+ }
24
+ export function onlyKeys(value, allowed) {
25
+ for (const key of Object.keys(value)) {
26
+ if (!allowed.includes(key))
27
+ throw new TypeError(`Unsupported option: ${key}`);
28
+ }
29
+ }
30
+ export function booleanValue(value, fallback = false) {
31
+ if (value === undefined)
32
+ return fallback;
33
+ if (typeof value !== "boolean")
34
+ throw new TypeError("Expected a boolean option");
35
+ return value;
36
+ }
37
+ export function abortError() {
38
+ return Object.assign(new Error("The operation was aborted"), {
39
+ name: "AbortError",
40
+ code: "ABORT_ERR",
41
+ });
42
+ }
43
+ export function checkSignal(signal) {
44
+ if (signal?.aborted)
45
+ throw abortError();
46
+ }
47
+ export async function withSignal(signal, operation) {
48
+ checkSignal(signal);
49
+ if (signal === undefined)
50
+ return operation();
51
+ let onAbort = () => undefined;
52
+ const cancelled = new Promise((_resolve, reject) => {
53
+ onAbort = () => reject(abortError());
54
+ signal.addEventListener("abort", onAbort, { once: true });
55
+ });
56
+ try {
57
+ return await Promise.race([Promise.resolve().then(() => {
58
+ checkSignal(signal);
59
+ return operation();
60
+ }), cancelled]);
61
+ }
62
+ finally {
63
+ signal.removeEventListener("abort", onAbort);
64
+ }
65
+ }
@@ -0,0 +1,3 @@
1
+ import type { FileSystemFactory } from "../contracts/filesystem.js";
2
+ import type { FileSystemAdapterDescriptor } from "../config.js";
3
+ export declare function createMemoryFileSystemAdapter(create: FileSystemFactory): FileSystemAdapterDescriptor;
@@ -0,0 +1,7 @@
1
+ import { normalizeMemoryFileSystemLimits } from "../fs/memory/limits.js";
2
+ export function createMemoryFileSystemAdapter(create) {
3
+ return {
4
+ validateOptions: normalizeMemoryFileSystemLimits,
5
+ create
6
+ };
7
+ }
@@ -0,0 +1,5 @@
1
+ import type { FileSystemFactory } from "../contracts/filesystem.js";
2
+ import { type FileSystemAdapterDescriptor } from "../config.js";
3
+ export declare function createRealFileSystemAdapter(create: (options: {
4
+ readonly root: string;
5
+ }) => ReturnType<FileSystemFactory>): FileSystemAdapterDescriptor;
@@ -0,0 +1,16 @@
1
+ import { readConfigRecord } from "../config.js";
2
+ export function createRealFileSystemAdapter(create) {
3
+ return {
4
+ validateOptions(options) {
5
+ const record = readConfigRecord(options, "real option", ["root"]);
6
+ if (typeof record.root !== "string" ||
7
+ !record.root.startsWith("/") ||
8
+ record.root.includes("\0")) {
9
+ throw new TypeError("adapter.options.root must be an absolute host directory");
10
+ }
11
+ },
12
+ create(options) {
13
+ return create({ root: options.root });
14
+ }
15
+ };
16
+ }
@@ -0,0 +1,2 @@
1
+ import type { FileSystemAdapterRegistry } from "../config.js";
2
+ export declare function extendAdapterRegistry(defaults: FileSystemAdapterRegistry, extensions?: FileSystemAdapterRegistry): FileSystemAdapterRegistry;
@@ -0,0 +1,15 @@
1
+ export function extendAdapterRegistry(defaults, extensions) {
2
+ if (extensions !== undefined &&
3
+ (extensions === null ||
4
+ typeof extensions.get !== "function" ||
5
+ typeof extensions[Symbol.iterator] !== "function")) {
6
+ throw new TypeError("registry must be a filesystem adapter map.");
7
+ }
8
+ const registry = new Map(defaults);
9
+ for (const [name, descriptor] of extensions ?? []) {
10
+ if (registry.has(name))
11
+ throw new TypeError(`Filesystem adapter already registered: ${name}`);
12
+ registry.set(name, descriptor);
13
+ }
14
+ return registry;
15
+ }
@@ -0,0 +1,15 @@
1
+ import type { FileSystem, FileSystemFactory } from "./contracts/filesystem.js";
2
+ export type FileSystemConfig = {
3
+ readonly type: string;
4
+ readonly options?: Readonly<Record<string, unknown>>;
5
+ };
6
+ export type FileSystemAdapterDescriptor = {
7
+ readonly validateOptions: (options: Readonly<Record<string, unknown>>) => void;
8
+ readonly create: FileSystemFactory;
9
+ };
10
+ export type FileSystemAdapterRegistry = ReadonlyMap<string, FileSystemAdapterDescriptor>;
11
+ export declare function readConfigRecord(value: unknown, label: string, keys?: readonly string[]): Readonly<Record<string, unknown>>;
12
+ export declare function validateFileSystemConfig(value: unknown): FileSystemConfig;
13
+ export declare function createFileSystem(config: FileSystemConfig, options: {
14
+ registry: FileSystemAdapterRegistry;
15
+ }): Promise<FileSystem>;
@@ -0,0 +1,46 @@
1
+ export function readConfigRecord(value, label, keys) {
2
+ if (typeof value !== "object" || value === null || Array.isArray(value)) {
3
+ throw new TypeError(`${label} must be a record.`);
4
+ }
5
+ const prototype = Object.getPrototypeOf(value);
6
+ if (prototype !== Object.prototype && prototype !== null) {
7
+ throw new TypeError(`${label} must be a plain record.`);
8
+ }
9
+ const record = Object.create(null);
10
+ for (const key of Reflect.ownKeys(value)) {
11
+ if (typeof key !== "string" || (keys !== undefined && !keys.includes(key))) {
12
+ throw new TypeError(`Unknown ${label}: ${String(key)}`);
13
+ }
14
+ const property = Object.getOwnPropertyDescriptor(value, key);
15
+ if (!("value" in property))
16
+ throw new TypeError(`${label}.${key} must be a data property.`);
17
+ record[key] = property.value;
18
+ }
19
+ return Object.freeze(record);
20
+ }
21
+ export function validateFileSystemConfig(value) {
22
+ const config = readConfigRecord(value, "filesystem config", ["type", "options"]);
23
+ if (typeof config.type !== "string" || config.type.trim().length === 0) {
24
+ throw new TypeError("Filesystem adapter type must be a nonempty string.");
25
+ }
26
+ return {
27
+ type: config.type,
28
+ ...(config.options === undefined
29
+ ? {}
30
+ : { options: readConfigRecord(config.options, "filesystem options") })
31
+ };
32
+ }
33
+ export async function createFileSystem(config, options) {
34
+ const validated = validateFileSystemConfig(config);
35
+ const creation = readConfigRecord(options, "filesystem creation option", ["registry"]);
36
+ const registry = creation.registry;
37
+ if (registry === undefined || registry === null || typeof registry.get !== "function") {
38
+ throw new TypeError("registry must be a filesystem adapter map.");
39
+ }
40
+ const descriptor = registry.get(validated.type);
41
+ if (descriptor === undefined)
42
+ throw new TypeError(`Unknown filesystem adapter: ${validated.type}`);
43
+ const adapterOptions = validated.options ?? Object.freeze(Object.create(null));
44
+ descriptor.validateOptions(adapterOptions);
45
+ return await descriptor.create(adapterOptions);
46
+ }
@@ -0,0 +1,2 @@
1
+ import type { FileSystemAdapterRegistry } from "./config.js";
2
+ export declare function createNodeFileSystemAdapterRegistry(extensions?: FileSystemAdapterRegistry): FileSystemAdapterRegistry;
@@ -0,0 +1,11 @@
1
+ import { extendAdapterRegistry } from "./config/registry.js";
2
+ import { createMemoryFileSystemAdapter } from "./config/memory.js";
3
+ import { createRealFileSystemAdapter } from "./config/real.js";
4
+ import { createMemoryFileSystem } from "./fs/memory/index.js";
5
+ import { createRealFileSystem } from "./fs/real/index.js";
6
+ export function createNodeFileSystemAdapterRegistry(extensions) {
7
+ return extendAdapterRegistry(new Map([
8
+ ["memory", createMemoryFileSystemAdapter(createMemoryFileSystem)],
9
+ ["real", createRealFileSystemAdapter(createRealFileSystem)]
10
+ ]), extensions);
11
+ }
@@ -0,0 +1,3 @@
1
+ import type { FileSystemAdapterRegistry } from "./config.js";
2
+ /** Portable defaults never grant access to the host filesystem. */
3
+ export declare function createPortableFileSystemAdapterRegistry(extensions?: FileSystemAdapterRegistry): FileSystemAdapterRegistry;
@@ -0,0 +1,9 @@
1
+ import { createMemoryFileSystemAdapter } from "./config/memory.js";
2
+ import { extendAdapterRegistry } from "./config/registry.js";
3
+ import { createMemoryFileSystem } from "./fs/memory/index.js";
4
+ /** Portable defaults never grant access to the host filesystem. */
5
+ export function createPortableFileSystemAdapterRegistry(extensions) {
6
+ return extendAdapterRegistry(new Map([
7
+ ["memory", createMemoryFileSystemAdapter(createMemoryFileSystem)]
8
+ ]), extensions);
9
+ }
@@ -0,0 +1,5 @@
1
+ export interface AbortSignalScope {
2
+ readonly signal: AbortSignal;
3
+ dispose(): void;
4
+ }
5
+ export declare function composeAbortSignals(signals: readonly AbortSignal[]): AbortSignalScope;
@@ -0,0 +1,34 @@
1
+ export function composeAbortSignals(signals) {
2
+ const controller = new AbortController();
3
+ const listeners = new Map();
4
+ const dispose = () => {
5
+ for (const [signal, listener] of listeners)
6
+ signal.removeEventListener("abort", listener);
7
+ listeners.clear();
8
+ };
9
+ for (const signal of signals) {
10
+ if (signal.aborted) {
11
+ controller.abort(signal.reason);
12
+ return { signal: controller.signal, dispose };
13
+ }
14
+ }
15
+ try {
16
+ for (const signal of new Set(signals)) {
17
+ const listener = () => {
18
+ dispose();
19
+ controller.abort(signal.reason);
20
+ };
21
+ listeners.set(signal, listener);
22
+ signal.addEventListener("abort", listener, { once: true });
23
+ if (signal.aborted)
24
+ listener();
25
+ if (controller.signal.aborted)
26
+ break;
27
+ }
28
+ }
29
+ catch (error) {
30
+ dispose();
31
+ throw error;
32
+ }
33
+ return { signal: controller.signal, dispose };
34
+ }
@@ -0,0 +1 @@
1
+ export declare function finishCleanup(cleanup: () => unknown, failed: boolean): Promise<void>;
@@ -0,0 +1,9 @@
1
+ export async function finishCleanup(cleanup, failed) {
2
+ try {
3
+ await cleanup();
4
+ }
5
+ catch (error) {
6
+ if (!failed)
7
+ throw error;
8
+ }
9
+ }
@@ -0,0 +1,38 @@
1
+ import type { FileStat, FsOptions } from "./filesystem.js";
2
+ export interface OpenFileOptions extends FsOptions {
3
+ readonly access: "read" | "write" | "readwrite";
4
+ readonly creation?: "never" | "ifMissing" | "exclusive";
5
+ readonly truncate?: boolean;
6
+ readonly append?: boolean;
7
+ /** Atomically reject a final symlink; parent symlinks still follow provider policy. */
8
+ readonly noFollow?: boolean;
9
+ readonly mode?: number;
10
+ /** Apply mode exactly to new entries, without an additional host umask. */
11
+ readonly exactMode?: boolean;
12
+ readonly synchronization?: "data" | "all";
13
+ }
14
+ export interface FileDescriptorCapabilities {
15
+ readonly noFollow?: boolean;
16
+ readonly publication?: "conditional";
17
+ readonly position?: boolean;
18
+ readonly readObservation?: boolean;
19
+ readonly openTruncate?: boolean;
20
+ readonly positionedRead: boolean;
21
+ readonly positionedWrite: boolean;
22
+ readonly positionedAppendWrite?: boolean;
23
+ readonly delegateZeroLengthWrite?: boolean;
24
+ readonly truncate: boolean;
25
+ readonly synchronization: "none" | "volatile" | "storage";
26
+ }
27
+ export interface FileDescriptor {
28
+ readonly capabilities: FileDescriptorCapabilities;
29
+ getPosition?(options?: FsOptions): Promise<number>;
30
+ probeRead?(options?: FsOptions): Promise<"ready" | "blocked" | "unknown">;
31
+ stat(options?: FsOptions): Promise<FileStat>;
32
+ read(buffer: Uint8Array, position: number | null, options?: FsOptions): Promise<number>;
33
+ write(buffer: Uint8Array, position: number | null, options?: FsOptions): Promise<number>;
34
+ truncate(length: number, options?: FsOptions): Promise<void>;
35
+ sync(dataOnly: boolean, options?: FsOptions): Promise<void>;
36
+ /** Cancel cooperative close-time publication, while still releasing resources. */
37
+ close(options?: FsOptions): Promise<void>;
38
+ }
@@ -0,0 +1,53 @@
1
+ import type { PlatformErrno } from "#safe-fs-platform";
2
+ export type { PlatformErrno } from "#safe-fs-platform";
3
+ declare const descriptions: {
4
+ readonly EACCES: "permission denied";
5
+ readonly EAGAIN: "resource temporarily unavailable";
6
+ readonly EBADF: "bad file descriptor";
7
+ readonly EBUSY: "resource busy or locked";
8
+ readonly ECANCELED: "operation canceled";
9
+ readonly EEXIST: "file already exists";
10
+ readonly EFBIG: "file too large";
11
+ readonly EILSEQ: "invalid or incomplete multibyte or wide character";
12
+ readonly EINTR: "interrupted system call";
13
+ readonly EINVAL: "invalid argument";
14
+ readonly EIO: "input/output error";
15
+ readonly EISDIR: "illegal operation on a directory";
16
+ readonly ELOOP: "too many symbolic links encountered";
17
+ readonly EMFILE: "too many open files";
18
+ readonly ENAMETOOLONG: "name too long";
19
+ readonly ENFILE: "file table overflow";
20
+ readonly ENOENT: "no such file or directory";
21
+ readonly ENOMEM: "not enough memory";
22
+ readonly ENOSPC: "no space left on device";
23
+ readonly ENOSYS: "function not implemented";
24
+ readonly ENOTDIR: "not a directory";
25
+ readonly ENOTEMPTY: "directory not empty";
26
+ readonly ENOTSUP: "operation not supported";
27
+ readonly EOPNOTSUPP: "operation not supported";
28
+ readonly EPERM: "operation not permitted";
29
+ readonly EPIPE: "broken pipe";
30
+ readonly EROFS: "read-only file system";
31
+ readonly ESPIPE: "illegal seek";
32
+ readonly ETIMEDOUT: "operation timed out";
33
+ readonly EXDEV: "cross-device link not permitted";
34
+ };
35
+ export type ErrnoCode = keyof typeof descriptions;
36
+ export interface FsErrorOptions extends ErrorOptions {
37
+ readonly syscall?: string;
38
+ readonly path?: string;
39
+ readonly dest?: string;
40
+ readonly message?: string;
41
+ }
42
+ export declare class FsError extends Error {
43
+ static [Symbol.hasInstance](value: unknown): boolean;
44
+ readonly code: ErrnoCode;
45
+ readonly errno: PlatformErrno;
46
+ readonly syscall?: string;
47
+ readonly path?: string;
48
+ readonly dest?: string;
49
+ constructor(code: ErrnoCode, options?: FsErrorOptions);
50
+ }
51
+ export declare function isErrnoCode(code: unknown): code is ErrnoCode;
52
+ export declare function isFsError(error: unknown, code?: ErrnoCode): error is FsError;
53
+ export declare function toFsError(error: unknown, options?: FsErrorOptions): FsError;
@@ -0,0 +1,99 @@
1
+ import { platform } from "#safe-fs-platform";
2
+ const descriptions = {
3
+ EACCES: "permission denied",
4
+ EAGAIN: "resource temporarily unavailable",
5
+ EBADF: "bad file descriptor",
6
+ EBUSY: "resource busy or locked",
7
+ ECANCELED: "operation canceled",
8
+ EEXIST: "file already exists",
9
+ EFBIG: "file too large",
10
+ EILSEQ: "invalid or incomplete multibyte or wide character",
11
+ EINTR: "interrupted system call",
12
+ EINVAL: "invalid argument",
13
+ EIO: "input/output error",
14
+ EISDIR: "illegal operation on a directory",
15
+ ELOOP: "too many symbolic links encountered",
16
+ EMFILE: "too many open files",
17
+ ENAMETOOLONG: "name too long",
18
+ ENFILE: "file table overflow",
19
+ ENOENT: "no such file or directory",
20
+ ENOMEM: "not enough memory",
21
+ ENOSPC: "no space left on device",
22
+ ENOSYS: "function not implemented",
23
+ ENOTDIR: "not a directory",
24
+ ENOTEMPTY: "directory not empty",
25
+ ENOTSUP: "operation not supported",
26
+ EOPNOTSUPP: "operation not supported",
27
+ EPERM: "operation not permitted",
28
+ EPIPE: "broken pipe",
29
+ EROFS: "read-only file system",
30
+ ESPIPE: "illegal seek",
31
+ ETIMEDOUT: "operation timed out",
32
+ EXDEV: "cross-device link not permitted",
33
+ };
34
+ const FS_ERROR_BRAND = Symbol.for("@poe-code/safe-fs.FsError");
35
+ export class FsError extends Error {
36
+ static [Symbol.hasInstance](value) {
37
+ if (typeof value !== "object" || value === null)
38
+ return false;
39
+ if (this !== FsError)
40
+ return Function.prototype[Symbol.hasInstance].call(this, value);
41
+ if (Function.prototype[Symbol.hasInstance].call(FsError, value))
42
+ return true;
43
+ const record = value;
44
+ return record[FS_ERROR_BRAND] === true && isErrnoCode(record.code);
45
+ }
46
+ code;
47
+ errno;
48
+ syscall;
49
+ path;
50
+ dest;
51
+ constructor(code, options = {}) {
52
+ if (!isErrnoCode(code))
53
+ throw new TypeError(`Unsupported errno code: ${String(code)}`);
54
+ const errno = platform.errno(code);
55
+ const operation = options.syscall ? `, ${options.syscall}` : "";
56
+ const path = options.path === undefined ? "" : ` '${options.path}'`;
57
+ const destination = options.dest === undefined ? "" : ` -> '${options.dest}'`;
58
+ const errorConstructor = Error;
59
+ const prevStackLimit = errorConstructor.stackTraceLimit;
60
+ errorConstructor.stackTraceLimit = 0;
61
+ try {
62
+ super(`${code}: ${options.message ?? descriptions[code]}${operation}${path}${destination}`, options);
63
+ }
64
+ finally {
65
+ errorConstructor.stackTraceLimit = prevStackLimit;
66
+ }
67
+ Object.defineProperty(this, FS_ERROR_BRAND, { value: true, enumerable: false, configurable: false, writable: false });
68
+ this.name = "FsError";
69
+ this.code = code;
70
+ this.errno = errno;
71
+ if (options.syscall !== undefined)
72
+ this.syscall = options.syscall;
73
+ if (options.path !== undefined)
74
+ this.path = options.path;
75
+ if (options.dest !== undefined)
76
+ this.dest = options.dest;
77
+ }
78
+ }
79
+ export function isErrnoCode(code) {
80
+ return typeof code === "string" && Object.hasOwn(descriptions, code);
81
+ }
82
+ export function isFsError(error, code) {
83
+ return error instanceof FsError && (code === undefined || error.code === code);
84
+ }
85
+ export function toFsError(error, options = {}) {
86
+ if (error instanceof FsError && Object.keys(options).length === 0)
87
+ return error;
88
+ const source = typeof error === "object" && error !== null
89
+ ? error
90
+ : {};
91
+ const details = {
92
+ ...(typeof source.syscall === "string" ? { syscall: source.syscall } : {}),
93
+ ...(typeof source.path === "string" ? { path: source.path } : {}),
94
+ ...(typeof source.dest === "string" ? { dest: source.dest } : {}),
95
+ cause: error,
96
+ ...options,
97
+ };
98
+ return new FsError(isErrnoCode(source.code) ? source.code : "EIO", details);
99
+ }