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,635 @@
1
+ export class XmlLimitError extends SyntaxError {
2
+ limit;
3
+ constructor(limit, message) {
4
+ super(message);
5
+ this.limit = limit;
6
+ }
7
+ }
8
+ function* find(source, needle, start) {
9
+ const found = source.indexOf(needle, start);
10
+ const end = found < 0 ? source.length : found;
11
+ let remaining = end - start;
12
+ while (remaining >= 512) {
13
+ yield 512;
14
+ remaining -= 512;
15
+ }
16
+ if (remaining > 0)
17
+ yield remaining;
18
+ return found;
19
+ }
20
+ const xmlNamespace = "http://www.w3.org/XML/1998/namespace";
21
+ const xmlnsNamespace = "http://www.w3.org/2000/xmlns/";
22
+ function invalid(message) {
23
+ throw new SyntaxError(`Invalid XML: ${message}`);
24
+ }
25
+ function validCharacter(point) {
26
+ return point === 9 || point === 10 || point === 13
27
+ || (point >= 0x20 && point <= 0xd7ff)
28
+ || (point >= 0xe000 && point <= 0xfffd)
29
+ || (point >= 0x10000 && point <= 0x10ffff);
30
+ }
31
+ function nameStart(point) {
32
+ return point === 95 || (point >= 65 && point <= 90) || (point >= 97 && point <= 122)
33
+ || (point >= 0xc0 && point <= 0xd6) || (point >= 0xd8 && point <= 0xf6)
34
+ || (point >= 0xf8 && point <= 0x2ff) || (point >= 0x370 && point <= 0x37d)
35
+ || (point >= 0x37f && point <= 0x1fff) || (point >= 0x200c && point <= 0x200d)
36
+ || (point >= 0x2070 && point <= 0x218f) || (point >= 0x2c00 && point <= 0x2fef)
37
+ || (point >= 0x3001 && point <= 0xd7ff) || (point >= 0xf900 && point <= 0xfdcf)
38
+ || (point >= 0xfdf0 && point <= 0xfffd) || (point >= 0x10000 && point <= 0xeffff);
39
+ }
40
+ function namePart(point) {
41
+ return nameStart(point) || point === 45 || point === 46 || point === 0xb7
42
+ || (point >= 48 && point <= 57) || (point >= 0x300 && point <= 0x36f)
43
+ || (point >= 0x203f && point <= 0x2040);
44
+ }
45
+ function qualifiedNameSync(name, cache) {
46
+ if (cache.name === name)
47
+ return cache.parts;
48
+ let prefix = "";
49
+ let start = 0;
50
+ let first = true;
51
+ for (let offset = 0; offset < name.length;) {
52
+ const point = name.codePointAt(offset);
53
+ if (point === 58) {
54
+ if (start !== 0 || first)
55
+ invalid("invalid qualified name");
56
+ prefix = name.slice(0, offset);
57
+ start = offset + 1;
58
+ first = true;
59
+ }
60
+ else {
61
+ if (!(first ? nameStart(point) : namePart(point)))
62
+ invalid("invalid qualified name");
63
+ first = false;
64
+ }
65
+ offset += point > 0xffff ? 2 : 1;
66
+ }
67
+ if (first)
68
+ invalid("invalid qualified name");
69
+ const parts = [prefix, name.slice(start)];
70
+ // Retain only one short name; namespace resolution still happens per element.
71
+ if (name.length <= 512) {
72
+ cache.name = name;
73
+ cache.parts = parts;
74
+ }
75
+ return parts;
76
+ }
77
+ function* entities(text, recover) {
78
+ let result = "";
79
+ let offset = 0;
80
+ while (offset < text.length) {
81
+ const start = yield* find(text, "&", offset);
82
+ if (start < 0)
83
+ return result + text.slice(offset);
84
+ result += text.slice(offset, start);
85
+ const end = yield* find(text, ";", start + 1);
86
+ if (end < 0) {
87
+ if (!recover)
88
+ invalid("unterminated entity");
89
+ recover("unterminated entity");
90
+ return result + text.slice(start + 1);
91
+ }
92
+ const entity = text.slice(start + 1, end);
93
+ const predefined = { amp: "&", lt: "<", gt: ">", quot: '"', apos: "'" };
94
+ if (Object.hasOwn(predefined, entity))
95
+ result += predefined[entity];
96
+ else {
97
+ const hexadecimal = entity.startsWith("#x");
98
+ const digits = entity.slice(hexadecimal ? 2 : 1);
99
+ if (!entity.startsWith("#") || !digits.length) {
100
+ if (!recover)
101
+ invalid("undeclared entity");
102
+ recover("undeclared entity");
103
+ offset = end + 1;
104
+ continue;
105
+ }
106
+ let point = 0;
107
+ for (let index = 0; index < digits.length; index++) {
108
+ const code = digits.charCodeAt(index);
109
+ const digit = code >= 48 && code <= 57 ? code - 48 : hexadecimal && code >= 65 && code <= 70 ? code - 55
110
+ : hexadecimal && code >= 97 && code <= 102 ? code - 87 : -1;
111
+ if (digit < 0)
112
+ invalid("undeclared entity");
113
+ point = point * (hexadecimal ? 16 : 10) + digit;
114
+ if (point > 0x10ffff)
115
+ invalid("invalid character reference");
116
+ if ((index + 1) % 512 === 0)
117
+ yield 512;
118
+ }
119
+ if (digits.length % 512)
120
+ yield digits.length % 512;
121
+ if (!validCharacter(point))
122
+ invalid("invalid character reference");
123
+ result += String.fromCodePoint(point);
124
+ }
125
+ offset = end + 1;
126
+ }
127
+ return result;
128
+ }
129
+ function* validDeclaration(content, expectedEncoding) {
130
+ let offset = 0;
131
+ const whitespace = function* () {
132
+ const start = offset;
133
+ while (offset < content.length && " \t\n\r".includes(content[offset])) {
134
+ offset++;
135
+ if ((offset - start) % 512 === 0)
136
+ yield 512;
137
+ }
138
+ if ((offset - start) % 512)
139
+ yield (offset - start) % 512;
140
+ return offset - start;
141
+ };
142
+ const field = function* (name) {
143
+ if (content.slice(offset, offset + name.length) !== name)
144
+ return undefined;
145
+ offset += name.length;
146
+ yield name.length;
147
+ yield* whitespace();
148
+ if (content[offset++] !== "=")
149
+ return undefined;
150
+ yield* whitespace();
151
+ const quote = content[offset++];
152
+ if (quote !== "'" && quote !== '"')
153
+ return undefined;
154
+ const start = offset;
155
+ while (offset < content.length && content[offset] !== quote) {
156
+ offset++;
157
+ if ((offset - start) % 512 === 0)
158
+ yield 512;
159
+ }
160
+ if ((offset - start) % 512)
161
+ yield (offset - start) % 512;
162
+ if (offset >= content.length)
163
+ return undefined;
164
+ return content.slice(start, offset++);
165
+ };
166
+ if (!(yield* whitespace()) || (yield* field("version")) !== "1.0")
167
+ return false;
168
+ let spacing = yield* whitespace();
169
+ if (content.slice(offset, offset + 8) === "encoding") {
170
+ if (!spacing)
171
+ return false;
172
+ const encoding = yield* field("encoding");
173
+ if (encoding === undefined || encoding.length > 8 || !["utf-8", "utf-16", "utf-16le", "utf-16be"].includes(encoding.toLowerCase()))
174
+ return false;
175
+ if (expectedEncoding !== undefined && encoding.toLowerCase() !== expectedEncoding.toLowerCase()
176
+ && !(encoding.toLowerCase() === "utf-16" && (expectedEncoding === "UTF-16LE" || expectedEncoding === "UTF-16BE")))
177
+ return false;
178
+ spacing = yield* whitespace();
179
+ }
180
+ if (content.slice(offset, offset + 10) === "standalone") {
181
+ if (!spacing)
182
+ return false;
183
+ const standalone = yield* field("standalone");
184
+ if (standalone === undefined || standalone.length > 3 || !["yes", "no"].includes(standalone))
185
+ return false;
186
+ yield* whitespace();
187
+ }
188
+ return offset === content.length;
189
+ }
190
+ export function* parseXmlSteps(input, limits = {}) {
191
+ const maxDepth = limits.maxDepth ?? Infinity;
192
+ const maxNodes = limits.maxNodes ?? Infinity;
193
+ const maxAttributes = limits.maxAttributes ?? Infinity;
194
+ const retainContent = limits.retainContent !== false;
195
+ const maxContentNodes = limits.maxContentNodes ?? Infinity;
196
+ const emptyContent = Object.freeze([]);
197
+ const emptyAttributes = Object.freeze([]);
198
+ const emptyNamespaces = new Map();
199
+ const maxAttributesPerElement = limits.maxAttributesPerElement ?? Infinity;
200
+ const maxNamespaces = limits.maxNamespaces ?? Infinity;
201
+ for (const limit of [limits.maxDepth, limits.maxNodes, limits.maxAttributes, limits.maxContentNodes, limits.maxAttributesPerElement, limits.maxNamespaces]) {
202
+ if (limit !== undefined && ((limit !== Infinity && !Number.isSafeInteger(limit)) || limit < 1))
203
+ throw new RangeError("XML limits must be positive integers");
204
+ }
205
+ const maxTextLength = limits.maxTextLength ?? Infinity;
206
+ if (limits.maxTextLength !== undefined && ((maxTextLength !== Infinity && !Number.isSafeInteger(maxTextLength)) || maxTextLength < 1))
207
+ throw new RangeError("XML limits must be positive integers");
208
+ let textLength = 0;
209
+ const admitText = (text) => {
210
+ if (text.length > maxTextLength - textLength)
211
+ throw new XmlLimitError("maxTextLength", "XML text limit exceeded");
212
+ textLength += text.length;
213
+ };
214
+ const chunks = [];
215
+ const start = input.charCodeAt(0) === 0xfeff ? 1 : 0;
216
+ let chunkStart = start;
217
+ let chunkLength = 0;
218
+ let normalizedChunk = "";
219
+ // Keep validated spans intact; only changed line endings need new strings.
220
+ for (let index = start; index < input.length; index++) {
221
+ const point = input.codePointAt(index);
222
+ if (!validCharacter(point))
223
+ invalid("invalid character");
224
+ if (point === 13) {
225
+ normalizedChunk += input.slice(chunkStart, index) + "\n";
226
+ if (input.charCodeAt(index + 1) === 10)
227
+ index++;
228
+ chunkStart = index + 1;
229
+ chunkLength++;
230
+ }
231
+ else {
232
+ chunkLength += point > 0xffff ? 2 : 1;
233
+ if (point > 0xffff)
234
+ index++;
235
+ }
236
+ if (chunkLength >= 512) {
237
+ if (normalizedChunk) {
238
+ chunks.push(normalizedChunk + input.slice(chunkStart, index + 1));
239
+ normalizedChunk = "";
240
+ chunkStart = index + 1;
241
+ }
242
+ chunkLength = 0;
243
+ yield 512;
244
+ }
245
+ }
246
+ if (chunkLength)
247
+ yield chunkLength;
248
+ if (chunks.length || normalizedChunk)
249
+ chunks.push(normalizedChunk + input.slice(chunkStart));
250
+ const source = chunks.length ? chunks.join("") : input.slice(start);
251
+ const stack = [];
252
+ let root;
253
+ const prolog = [];
254
+ const epilog = [];
255
+ let declaration;
256
+ let offset = 0;
257
+ let nodes = 0;
258
+ let attributeCount = 0;
259
+ let contentNodes = 0;
260
+ let previousEmpty;
261
+ const qualifiedNames = { name: undefined, parts: undefined };
262
+ const admitContent = () => {
263
+ if (++contentNodes > maxContentNodes)
264
+ throw new XmlLimitError("maxContentNodes", "XML content node limit exceeded");
265
+ };
266
+ let pendingWork = 0;
267
+ const skipWhitespace = function* () {
268
+ const start = offset;
269
+ while (offset < source.length) {
270
+ const c = source.charCodeAt(offset);
271
+ if (c !== 32 && c !== 9 && c !== 10 && c !== 13)
272
+ break;
273
+ offset++;
274
+ pendingWork++;
275
+ if (pendingWork >= 512) {
276
+ yield 512;
277
+ pendingWork -= 512;
278
+ }
279
+ }
280
+ return offset - start;
281
+ };
282
+ const scanName = function* () {
283
+ const start = offset;
284
+ while (offset < source.length) {
285
+ const c = source.charCodeAt(offset);
286
+ if (c === 32 || c === 9 || c === 13 || c === 10 || c === 47 || c === 61 || c === 62 || c === 63)
287
+ break;
288
+ offset++;
289
+ pendingWork++;
290
+ if (pendingWork >= 512) {
291
+ yield 512;
292
+ pendingWork -= 512;
293
+ }
294
+ }
295
+ const name = source.slice(start, offset);
296
+ pendingWork += offset - start;
297
+ while (pendingWork >= 512) {
298
+ yield 512;
299
+ pendingWork -= 512;
300
+ }
301
+ const [prefix, localName] = qualifiedNameSync(name, qualifiedNames);
302
+ return [name, prefix, localName];
303
+ };
304
+ while (offset < source.length) {
305
+ pendingWork += 1;
306
+ if (pendingWork >= 512) {
307
+ while (pendingWork >= 512) {
308
+ yield 512;
309
+ pendingWork -= 512;
310
+ }
311
+ }
312
+ if (source.charCodeAt(offset) !== 60) {
313
+ const next = source.indexOf("<", offset);
314
+ const endPos = next < 0 ? source.length : next;
315
+ const text = source.slice(offset, endPos);
316
+ pendingWork += (endPos - offset) + text.length;
317
+ while (pendingWork >= 512) {
318
+ yield 512;
319
+ pendingWork -= 512;
320
+ }
321
+ if (text.indexOf("]]>") >= 0)
322
+ invalid("CDATA terminator in text");
323
+ const resolved = stack.length ? (text.indexOf("&") < 0 ? (pendingWork += text.length, text) : yield* entities(text, limits.recover)) : text;
324
+ while (pendingWork >= 512) {
325
+ yield 512;
326
+ pendingWork -= 512;
327
+ }
328
+ admitText(resolved);
329
+ const parent = stack.at(-1);
330
+ if (parent) {
331
+ parent.element.text += resolved;
332
+ if (resolved.length) {
333
+ admitContent();
334
+ if (retainContent)
335
+ parent.content.push({ kind: "text", text: resolved });
336
+ }
337
+ }
338
+ else {
339
+ for (let index = 0; index < resolved.length; index++) {
340
+ pendingWork++;
341
+ if (pendingWork >= 512) {
342
+ yield 512;
343
+ pendingWork -= 512;
344
+ }
345
+ const c = resolved.charCodeAt(index);
346
+ if (c !== 32 && c !== 9 && c !== 13 && c !== 10)
347
+ invalid("text outside the root");
348
+ }
349
+ while (pendingWork >= 512) {
350
+ yield 512;
351
+ pendingWork -= 512;
352
+ }
353
+ if (resolved.length) {
354
+ admitContent();
355
+ if (retainContent)
356
+ (root ? epilog : prolog).push({ kind: "text", text: resolved });
357
+ }
358
+ }
359
+ offset = endPos;
360
+ }
361
+ else if (source.startsWith("<!--", offset)) {
362
+ const end = yield* find(source, "-->", offset + 4);
363
+ if (end < 0 || (yield* find(source.slice(offset + 4, end), "--", 0)) >= 0 || source.slice(offset + 4, end).endsWith("-")) {
364
+ invalid("malformed comment");
365
+ }
366
+ const parent = stack.at(-1);
367
+ const text = source.slice(offset + 4, end);
368
+ admitText(text);
369
+ admitContent();
370
+ if (retainContent) {
371
+ (parent?.content ?? (root ? epilog : prolog)).push({ kind: "comment", text });
372
+ }
373
+ offset = end + 3;
374
+ }
375
+ else if (source.startsWith("<![CDATA[", offset)) {
376
+ if (!stack.length)
377
+ invalid("CDATA outside root");
378
+ const end = yield* find(source, "]]>", offset + 9);
379
+ if (end < 0)
380
+ invalid("unterminated CDATA");
381
+ const cdataText = source.slice(offset + 9, end);
382
+ admitText(cdataText);
383
+ const parent = stack.at(-1);
384
+ parent.element.text += cdataText;
385
+ admitContent();
386
+ if (retainContent)
387
+ parent.content.push({ kind: "cdata", text: cdataText });
388
+ offset = end + 3;
389
+ }
390
+ else if (source.startsWith("<?", offset)) {
391
+ const start = offset;
392
+ offset += 2;
393
+ const [target] = yield* scanName();
394
+ while (pendingWork >= 512) {
395
+ yield 512;
396
+ pendingWork -= 512;
397
+ }
398
+ const end = yield* find(source, "?>", offset);
399
+ if (end < 0)
400
+ invalid("unterminated processing instruction");
401
+ const content = source.slice(offset, end);
402
+ if (target.length === 3 && target.toLowerCase() === "xml") {
403
+ if (start !== 0 || target !== "xml"
404
+ || !(yield* validDeclaration(content, limits.expectedEncoding))) {
405
+ invalid("unsupported XML declaration");
406
+ }
407
+ if (retainContent)
408
+ declaration = source.slice(start, end + 2);
409
+ }
410
+ else if (content && !" \t\n\r".includes(content[0]))
411
+ invalid("invalid processing instruction");
412
+ if (!(target.length === 3 && target.toLowerCase() === "xml")) {
413
+ const parent = stack.at(-1);
414
+ let wsStart = 0;
415
+ while (wsStart < content.length && " \t\n\r".includes(content[wsStart]))
416
+ wsStart++;
417
+ pendingWork += wsStart;
418
+ while (pendingWork >= 512) {
419
+ yield 512;
420
+ pendingWork -= 512;
421
+ }
422
+ const text = content.slice(wsStart);
423
+ admitText(text);
424
+ admitContent();
425
+ if (retainContent) {
426
+ (parent?.content ?? (root ? epilog : prolog)).push({ kind: "processing-instruction", target, text });
427
+ }
428
+ }
429
+ offset = end + 2;
430
+ }
431
+ else if (source.startsWith("<!", offset)) {
432
+ invalid("DTD and entity declarations are forbidden");
433
+ }
434
+ else if (source.charCodeAt(offset + 1) === 47) {
435
+ offset += 2;
436
+ const [name] = yield* scanName();
437
+ yield* skipWhitespace();
438
+ while (pendingWork >= 512) {
439
+ yield 512;
440
+ pendingWork -= 512;
441
+ }
442
+ if (source[offset++] !== ">" || stack.pop()?.name !== name) {
443
+ if (!limits.recover)
444
+ invalid("mismatched closing tag");
445
+ limits.recover("mismatched closing tag");
446
+ }
447
+ }
448
+ else {
449
+ offset++;
450
+ const repeated = previousEmpty && source.startsWith(previousEmpty.suffix, offset) ? previousEmpty : undefined;
451
+ const [name, prefix, localName] = repeated
452
+ ? [repeated.name, repeated.prefix, repeated.localName]
453
+ : (yield* scanName());
454
+ if (repeated)
455
+ offset += name.length;
456
+ // Preserve scan/validation work while reusing the admitted spelling.
457
+ if (repeated)
458
+ pendingWork += name.length * 2;
459
+ while (pendingWork >= 512) {
460
+ yield 512;
461
+ pendingWork -= 512;
462
+ }
463
+ let attributes;
464
+ const attrMeta = [];
465
+ let namespaces = stack.at(-1)?.namespaces ?? new Map([["xml", xmlNamespace]]);
466
+ let ownsNamespaces = stack.length === 0;
467
+ while (!repeated) {
468
+ const ws = (yield* skipWhitespace());
469
+ while (pendingWork >= 512) {
470
+ yield 512;
471
+ pendingWork -= 512;
472
+ }
473
+ const ch = source.charCodeAt(offset);
474
+ if (ch === 47 || ch === 62 || limits.recover && offset === source.length)
475
+ break;
476
+ if (ws === 0)
477
+ invalid("attributes require whitespace");
478
+ const [attribute, attrPrefix, attrLocal] = yield* scanName();
479
+ while (pendingWork >= 512) {
480
+ yield 512;
481
+ pendingWork -= 512;
482
+ }
483
+ if (attributes?.has(attribute))
484
+ invalid("duplicate attribute");
485
+ if (++attributeCount > maxAttributes)
486
+ throw new XmlLimitError("maxAttributes", "XML attribute limit exceeded");
487
+ if ((attributes?.size ?? 0) >= maxAttributesPerElement)
488
+ throw new XmlLimitError("maxAttributesPerElement", "XML attribute limit exceeded");
489
+ yield* skipWhitespace();
490
+ if (source[offset++] !== "=")
491
+ invalid("missing attribute equals");
492
+ yield* skipWhitespace();
493
+ const quote = source[offset++];
494
+ if (quote !== '"' && quote !== "'")
495
+ invalid("unquoted attribute");
496
+ const end = source.indexOf(quote, offset);
497
+ const scanLen = (end < 0 ? source.length : end) - offset;
498
+ pendingWork += scanLen;
499
+ while (pendingWork >= 512) {
500
+ yield 512;
501
+ pendingWork -= 512;
502
+ }
503
+ if (end < 0)
504
+ invalid("unterminated attribute");
505
+ const raw = source.slice(offset, end);
506
+ pendingWork += raw.length * 2;
507
+ while (pendingWork >= 512) {
508
+ yield 512;
509
+ pendingWork -= 512;
510
+ }
511
+ if (raw.indexOf("<") >= 0)
512
+ invalid("less-than in attribute");
513
+ const normalized = /[\t\n\r]/.test(raw) ? raw.replace(/[\t\n\r]/g, " ") : raw;
514
+ const value = normalized.indexOf("&") < 0 ? (pendingWork += normalized.length, normalized) : yield* entities(normalized, limits.recover);
515
+ while (pendingWork >= 512) {
516
+ yield 512;
517
+ pendingWork -= 512;
518
+ }
519
+ admitText(value);
520
+ (attributes ??= new Map()).set(attribute, value);
521
+ attrMeta.push([attribute, attrPrefix, attrLocal]);
522
+ offset = end + 1;
523
+ if (attribute === "xmlns" || attribute.startsWith("xmlns:")) {
524
+ const nsPrefix = attribute === "xmlns" ? "" : attribute.slice(6);
525
+ if (nsPrefix === "xmlns" || value === xmlnsNamespace
526
+ || (nsPrefix === "xml") !== (value === xmlNamespace)
527
+ || (nsPrefix !== "" && value === ""))
528
+ invalid("invalid namespace binding");
529
+ if (!ownsNamespaces) {
530
+ const copy = new Map();
531
+ for (const [key, uri] of namespaces) {
532
+ copy.set(key, uri);
533
+ pendingWork += 1;
534
+ }
535
+ namespaces = copy;
536
+ ownsNamespaces = true;
537
+ }
538
+ namespaces.set(nsPrefix, value);
539
+ if (namespaces.size > maxNamespaces)
540
+ throw new XmlLimitError("maxNamespaces", "XML namespace scope limit exceeded");
541
+ }
542
+ }
543
+ if (attrMeta.length > 0) {
544
+ const expanded = attrMeta.length > 1 ? new Set() : undefined;
545
+ for (let i = 0; i < attrMeta.length; i++) {
546
+ const [attribute, attrPrefix, attrLocal] = attrMeta[i];
547
+ if (attribute === "xmlns" || attribute.startsWith("xmlns:"))
548
+ continue;
549
+ pendingWork += attribute.length;
550
+ if (attrPrefix && !namespaces.has(attrPrefix))
551
+ invalid("unbound attribute prefix");
552
+ if (expanded) {
553
+ const key = `${attrPrefix ? namespaces.get(attrPrefix) : ""}\0${attrLocal}`;
554
+ if (expanded.has(key))
555
+ invalid("duplicate expanded attribute");
556
+ expanded.add(key);
557
+ }
558
+ }
559
+ }
560
+ pendingWork += name.length;
561
+ while (pendingWork >= 512) {
562
+ yield 512;
563
+ pendingWork -= 512;
564
+ }
565
+ if (prefix === "xmlns" || (prefix && !namespaces.has(prefix)))
566
+ invalid("unbound element prefix");
567
+ if (++nodes > maxNodes)
568
+ throw new XmlLimitError("maxNodes", "XML resource limit exceeded");
569
+ if (stack.length + 1 > maxDepth)
570
+ throw new XmlLimitError("maxDepth", "XML resource limit exceeded");
571
+ const namespace = namespaces.get(prefix) ?? "";
572
+ limits.onElement?.({ name, namespace, localName }, stack.at(-1)?.element, stack.length + 1);
573
+ admitContent();
574
+ const retainedAttributes = [];
575
+ if (retainContent && attributes) {
576
+ for (let i = 0; i < attrMeta.length; i++) {
577
+ const [attribute, attrPrefix, attrLocal] = attrMeta[i];
578
+ const value = attributes.get(attribute);
579
+ admitContent();
580
+ retainedAttributes.push({ name: attribute, localName: attrLocal,
581
+ namespace: attribute === "xmlns" || attrPrefix === "xmlns" ? xmlnsNamespace : attrPrefix ? namespaces.get(attrPrefix) : "", value });
582
+ pendingWork += attribute.length + 1;
583
+ }
584
+ }
585
+ while (pendingWork >= 512) {
586
+ yield 512;
587
+ pendingWork -= 512;
588
+ }
589
+ const content = retainContent ? [] : undefined;
590
+ const element = { kind: "element", name, namespace, localName, children: [], text: "", content: content ?? emptyContent, attributes: retainContent ? retainedAttributes : emptyAttributes, namespaces: retainContent ? namespaces : emptyNamespaces, ...(root === undefined && retainContent ? { prolog, epilog, ...(declaration === undefined ? {} : { declaration }) } : {}) };
591
+ const parent = stack.at(-1);
592
+ if (parent) {
593
+ parent.element.children.push(element);
594
+ parent.content?.push(element);
595
+ }
596
+ else if (root)
597
+ invalid("multiple root elements");
598
+ else
599
+ root = element;
600
+ const empty = source[offset] === "/";
601
+ if (empty)
602
+ offset++;
603
+ if (source[offset++] !== ">") {
604
+ if (!limits.recover)
605
+ invalid("unterminated start tag");
606
+ limits.recover("unterminated start tag");
607
+ }
608
+ // Only cache compact, attribute-free spellings. Namespace resolution and
609
+ // every admission counter still run for each distinct physical element.
610
+ if (empty && !attributes && name.length <= 512 && source.slice(offset - name.length - 3, offset) === `<${name}/>`)
611
+ previousEmpty = { suffix: name + "/>", name, prefix, localName };
612
+ if (!empty)
613
+ stack.push({ element, content, name, namespaces });
614
+ }
615
+ }
616
+ if (pendingWork > 0) {
617
+ yield pendingWork;
618
+ pendingWork = 0;
619
+ }
620
+ if (!root)
621
+ invalid("incomplete document");
622
+ if (stack.length) {
623
+ if (!limits.recover)
624
+ invalid("incomplete document");
625
+ limits.recover("incomplete document");
626
+ }
627
+ return root;
628
+ }
629
+ export function parseXml(input, limits = {}) {
630
+ const parser = parseXmlSteps(input, limits);
631
+ let result = parser.next();
632
+ while (!result.done)
633
+ result = parser.next();
634
+ return result.value;
635
+ }
@@ -0,0 +1,25 @@
1
+ {
2
+ "private": true,
3
+ "license": "MIT",
4
+ "type": "module",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "exports": {
8
+ ".": {
9
+ "types": "./dist/index.d.ts",
10
+ "import": "./dist/index.js"
11
+ }
12
+ },
13
+ "files": [
14
+ "dist",
15
+ "README.md",
16
+ "LICENSE"
17
+ ],
18
+ "scripts": {
19
+ "build": "node ../../scripts/guard-package-dist.mjs && tsc",
20
+ "typecheck": "tsc --noEmit && tsc -p tsconfig.test.json",
21
+ "lint": "eslint src && npm run typecheck",
22
+ "test": "cd ../.. && vitest run packages/xml-ast",
23
+ "test:unit": "cd ../.. && vitest run packages/xml-ast"
24
+ }
25
+ }