@yanglaofish/fishtools 0.5.2 → 0.6.0

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 (871) hide show
  1. package/README.md +24 -12
  2. package/manual/README.md +24 -12
  3. package/manual/docs/deployment.md +3 -3
  4. package/manual/docs/examples/action-plugin/package.json +1 -1
  5. package/manual/docs/modules.md +2 -0
  6. package/manual/docs/plans/2026-10-13-effective-inputs-and-tables.md +39 -0
  7. package/manual/docs/plans/2026-10-13-plugin-defaults.md +45 -0
  8. package/manual/docs/plans/2026-10-14-issue7-recovery.md +33 -0
  9. package/manual/docs/plans/2026-10-14-issue8-10-workflows.md +26 -0
  10. package/manual/docs/plans/2026-10-14-issue9-completion.md +47 -0
  11. package/manual/docs/plans/2026-10-14-managed-execution.md +58 -0
  12. package/manual/docs/plans/2026-10-14-plugin-discovery-history.md +41 -0
  13. package/manual/docs/plans/2026-10-14-structured-reports.md +77 -0
  14. package/manual/docs/plans/2026-10-14-unreleased-review.md +47 -0
  15. package/manual/docs/plugin-development.md +175 -11
  16. package/manual/docs/releases.md +49 -6
  17. package/manual/docs/superpowers/plans/2026-10-13-command-shortcuts.md +3 -2
  18. package/manual/docs/superpowers/plans/2026-10-13-global-plugins.md +56 -0
  19. package/manual/docs/superpowers/plans/2026-10-13-tui-readable-sessions.md +21 -0
  20. package/manual/docs/superpowers/reviews/2026-10-13-0.5.3-review.md +28 -0
  21. package/manual/docs/superpowers/reviews/2026-10-13-command-shortcuts-review.md +7 -0
  22. package/manual/docs/superpowers/reviews/2026-10-13-tui-sessions-review.md +57 -0
  23. package/manual/docs/superpowers/reviews/2026-10-14-0.6.0-release-review.md +19 -0
  24. package/manual/docs/superpowers/specs/2026-10-13-issue-4-workflow-menu.md +23 -0
  25. package/manual/docs/superpowers/specs/2026-10-13-issue-5-results-and-history.md +20 -0
  26. package/manual/docs/terminal-commands.md +8 -0
  27. package/manual/docs/verification.md +47 -0
  28. package/manual/packages/core/README.md +8 -0
  29. package/manual/packages/core/package.json +1 -1
  30. package/manual/packages/core/src/application.js +108 -53
  31. package/manual/packages/core/src/development-watch-worker.js +10 -1
  32. package/manual/packages/core/src/development.js +1 -1
  33. package/manual/packages/core/src/plugin-catalog.js +60 -0
  34. package/manual/packages/core/src/plugin-loading.js +24 -0
  35. package/manual/packages/core/src/version.js +1 -1
  36. package/manual/packages/fst-cli/README.md +8 -0
  37. package/manual/packages/fst-cli/bin/fst.js +7 -6
  38. package/manual/packages/fst-cli/package.json +1 -1
  39. package/manual/packages/fst-cli/src/development.js +6 -1
  40. package/manual/packages/fst-cli/src/terminal/command-menu.js +11 -5
  41. package/manual/packages/fst-cli/src/terminal/file-autocomplete.js +106 -0
  42. package/manual/packages/fst-cli/src/terminal/log-viewer.js +4 -3
  43. package/manual/packages/fst-cli/src/terminal/navigation.js +25 -1
  44. package/manual/packages/fst-cli/src/terminal/presentation.js +5 -3
  45. package/manual/packages/fst-cli/src/terminal/report-presentation.js +38 -0
  46. package/manual/packages/fst-cli/src/terminal/result-table.js +66 -0
  47. package/manual/packages/fst-cli/src/terminal/run-feed.js +104 -23
  48. package/manual/packages/fst-cli/src/terminal/run-presentation.js +91 -14
  49. package/manual/packages/fst-cli/src/terminal/run-viewer.js +34 -15
  50. package/manual/packages/fst-cli/src/terminal/schema.js +114 -4
  51. package/manual/packages/fst-cli/src/terminal/session-history.js +82 -0
  52. package/manual/packages/fst-cli/src/terminal/session.js +158 -54
  53. package/manual/packages/fst-cli/src/terminal/view.js +108 -73
  54. package/manual/packages/fst-cli/src/terminal/workflow-menu.js +17 -10
  55. package/manual/packages/fst-devtools/README.md +2 -0
  56. package/manual/packages/fst-devtools/package.json +2 -2
  57. package/manual/packages/fst-devtools/src/plugin-quality.js +4 -1
  58. package/manual/packages/fst-devtools/src/plugin-tools.js +2 -1
  59. package/manual/packages/fst-devtools/src/process-usage.js +62 -0
  60. package/manual/packages/fst-logs/README.md +23 -2
  61. package/manual/packages/fst-logs/package.json +2 -1
  62. package/manual/packages/fst-logs/src/file-identity.js +23 -0
  63. package/manual/packages/fst-logs/src/markdown-log.js +4 -3
  64. package/manual/packages/fst-logs/src/run-logs.js +3 -2
  65. package/manual/packages/fst-logs/src/session-history.js +180 -0
  66. package/manual/packages/fst-platform/README.md +9 -0
  67. package/manual/packages/fst-platform/package.json +4 -3
  68. package/manual/packages/fst-platform/src/managed-process.js +36 -0
  69. package/manual/packages/fst-platform/src/process.js +11 -3
  70. package/manual/packages/fst-platform/src/shell.js +46 -1
  71. package/manual/packages/fst-plugin/README.md +4 -0
  72. package/manual/packages/fst-plugin/package.json +1 -1
  73. package/manual/packages/fst-plugin/src/contracts.js +3 -0
  74. package/manual/packages/fst-plugin/src/host.js +54 -31
  75. package/manual/packages/fst-plugin/src/runtime.js +14 -8
  76. package/manual/packages/fst-workflow/package.json +1 -1
  77. package/manual/packages/fst-workflow/src/engine.js +1 -1
  78. package/manual/packages/fst-workspace/README.md +6 -0
  79. package/manual/packages/fst-workspace/package.json +2 -1
  80. package/manual/packages/fst-workspace/src/plugin-registry.js +58 -0
  81. package/manual/packages/fst-workspace/src/plugins.js +10 -5
  82. package/manual/packages/fst-workspace/src/workflows.js +32 -12
  83. package/manual/packages/pack/package.json +3 -3
  84. package/manual/packages/pack/runtime-cache.js +26 -0
  85. package/manual/packages/pack/runtime.js +6 -10
  86. package/manual/packages/sdk/README.md +10 -0
  87. package/manual/packages/sdk/inputs.js +53 -0
  88. package/manual/packages/sdk/package.json +2 -0
  89. package/manual/packages/sdk/reports.js +53 -0
  90. package/manual/plugins/commands/package.json +1 -1
  91. package/node_modules/@mytools/commands/package.json +1 -1
  92. package/node_modules/@mytools/core/README.md +8 -0
  93. package/node_modules/@mytools/core/package.json +1 -1
  94. package/node_modules/@mytools/core/src/application.js +108 -53
  95. package/node_modules/@mytools/core/src/development-watch-worker.js +10 -1
  96. package/node_modules/@mytools/core/src/development.js +1 -1
  97. package/node_modules/@mytools/core/src/plugin-catalog.js +60 -0
  98. package/node_modules/@mytools/core/src/plugin-loading.js +24 -0
  99. package/node_modules/@mytools/core/src/version.js +1 -1
  100. package/node_modules/@mytools/fst-cli/README.md +8 -0
  101. package/node_modules/@mytools/fst-cli/bin/fst.js +7 -6
  102. package/node_modules/@mytools/fst-cli/package.json +1 -1
  103. package/node_modules/@mytools/fst-cli/src/development.js +6 -1
  104. package/node_modules/@mytools/fst-cli/src/terminal/command-menu.js +11 -5
  105. package/node_modules/@mytools/fst-cli/src/terminal/file-autocomplete.js +106 -0
  106. package/node_modules/@mytools/fst-cli/src/terminal/log-viewer.js +4 -3
  107. package/node_modules/@mytools/fst-cli/src/terminal/navigation.js +25 -1
  108. package/node_modules/@mytools/fst-cli/src/terminal/presentation.js +5 -3
  109. package/node_modules/@mytools/fst-cli/src/terminal/report-presentation.js +38 -0
  110. package/node_modules/@mytools/fst-cli/src/terminal/result-table.js +66 -0
  111. package/node_modules/@mytools/fst-cli/src/terminal/run-feed.js +104 -23
  112. package/node_modules/@mytools/fst-cli/src/terminal/run-presentation.js +91 -14
  113. package/node_modules/@mytools/fst-cli/src/terminal/run-viewer.js +34 -15
  114. package/node_modules/@mytools/fst-cli/src/terminal/schema.js +114 -4
  115. package/node_modules/@mytools/fst-cli/src/terminal/session-history.js +82 -0
  116. package/node_modules/@mytools/fst-cli/src/terminal/session.js +158 -54
  117. package/node_modules/@mytools/fst-cli/src/terminal/view.js +108 -73
  118. package/node_modules/@mytools/fst-cli/src/terminal/workflow-menu.js +17 -10
  119. package/node_modules/@mytools/fst-devtools/README.md +2 -0
  120. package/node_modules/@mytools/fst-devtools/package.json +2 -2
  121. package/node_modules/@mytools/fst-devtools/src/plugin-quality.js +4 -1
  122. package/node_modules/@mytools/fst-devtools/src/plugin-tools.js +2 -1
  123. package/node_modules/@mytools/fst-devtools/src/process-usage.js +62 -0
  124. package/node_modules/@mytools/fst-logs/README.md +23 -2
  125. package/node_modules/@mytools/fst-logs/package.json +2 -1
  126. package/node_modules/@mytools/fst-logs/src/file-identity.js +23 -0
  127. package/node_modules/@mytools/fst-logs/src/markdown-log.js +4 -3
  128. package/node_modules/@mytools/fst-logs/src/run-logs.js +3 -2
  129. package/node_modules/@mytools/fst-logs/src/session-history.js +180 -0
  130. package/node_modules/@mytools/fst-platform/README.md +9 -0
  131. package/node_modules/@mytools/fst-platform/node_modules/undici/LICENSE +21 -0
  132. package/node_modules/{undici/docs/docs/index.md → @mytools/fst-platform/node_modules/undici/README.md} +85 -137
  133. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/Agent.md +84 -0
  134. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/BalancedPool.md +99 -0
  135. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/CacheStorage.md +30 -0
  136. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/CacheStore.md +164 -0
  137. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/Client.md +288 -0
  138. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/ClientStats.md +27 -0
  139. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/Connector.md +115 -0
  140. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/ContentType.md +57 -0
  141. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/Cookies.md +128 -0
  142. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/Debug.md +62 -0
  143. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/DiagnosticsChannel.md +317 -0
  144. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/Dispatcher.md +1393 -0
  145. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/EnvHttpProxyAgent.md +159 -0
  146. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/Errors.md +49 -0
  147. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/EventSource.md +45 -0
  148. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/Fetch.md +60 -0
  149. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/GlobalInstallation.md +139 -0
  150. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/H2CClient.md +263 -0
  151. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/MockAgent.md +603 -0
  152. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/MockCallHistory.md +197 -0
  153. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/MockCallHistoryLog.md +43 -0
  154. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/MockClient.md +81 -0
  155. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/MockErrors.md +12 -0
  156. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/MockPool.md +555 -0
  157. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/Pool.md +84 -0
  158. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/PoolStats.md +35 -0
  159. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/ProxyAgent.md +229 -0
  160. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/RedirectHandler.md +93 -0
  161. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/RetryAgent.md +50 -0
  162. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/RetryHandler.md +118 -0
  163. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/RoundRobinPool.md +145 -0
  164. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/SnapshotAgent.md +616 -0
  165. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/Socks5ProxyAgent.md +275 -0
  166. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/Util.md +25 -0
  167. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/WebSocket.md +141 -0
  168. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/api-lifecycle.md +91 -0
  169. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/best-practices/client-certificate.md +64 -0
  170. package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/docs/docs/best-practices/crawling.md +1 -3
  171. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/best-practices/mocking-request.md +190 -0
  172. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/best-practices/proxy.md +127 -0
  173. package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/docs/docs/best-practices/undici-vs-builtin-fetch.md +8 -10
  174. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/best-practices/writing-tests.md +63 -0
  175. package/node_modules/@mytools/fst-platform/node_modules/undici/index-fetch.js +65 -0
  176. package/node_modules/@mytools/fst-platform/node_modules/undici/index.d.ts +3 -0
  177. package/node_modules/@mytools/fst-platform/node_modules/undici/index.js +234 -0
  178. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/api/abort-signal.js +59 -0
  179. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/api/api-connect.js +110 -0
  180. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/api/api-pipeline.js +252 -0
  181. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/api/api-request.js +214 -0
  182. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/api/api-stream.js +209 -0
  183. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/api/api-upgrade.js +111 -0
  184. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/api/index.js +7 -0
  185. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/api/readable.js +580 -0
  186. package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/lib/cache/memory-cache-store.js +3 -3
  187. package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/lib/cache/sqlite-cache-store.js +1 -3
  188. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/core/connect.js +153 -0
  189. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/core/constants.js +143 -0
  190. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/core/diagnostics.js +227 -0
  191. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/core/errors.js +477 -0
  192. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/core/request.js +485 -0
  193. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/core/symbols.js +75 -0
  194. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/core/tree.js +160 -0
  195. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/core/util.js +992 -0
  196. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/dispatcher/agent.js +158 -0
  197. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/dispatcher/balanced-pool.js +221 -0
  198. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/dispatcher/client-h1.js +1746 -0
  199. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/dispatcher/client-h2.js +1060 -0
  200. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/dispatcher/client.js +668 -0
  201. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/dispatcher/dispatcher-base.js +184 -0
  202. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/dispatcher/dispatcher.js +48 -0
  203. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/dispatcher/env-http-proxy-agent.js +146 -0
  204. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/dispatcher/fixed-queue.js +135 -0
  205. package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/lib/dispatcher/h2c-client.js +4 -4
  206. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/dispatcher/pool-base.js +214 -0
  207. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/dispatcher/pool.js +118 -0
  208. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/dispatcher/proxy-agent.js +319 -0
  209. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/dispatcher/retry-agent.js +35 -0
  210. package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/lib/dispatcher/round-robin-pool.js +10 -32
  211. package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/lib/dispatcher/socks5-proxy-agent.js +63 -153
  212. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/global.js +59 -0
  213. package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/lib/handler/cache-handler.js +7 -49
  214. package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/lib/handler/cache-revalidation-handler.js +0 -10
  215. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/handler/decorator-handler.js +67 -0
  216. package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/lib/handler/deduplication-handler.js +10 -29
  217. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/handler/redirect-handler.js +238 -0
  218. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/handler/retry-handler.js +504 -0
  219. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/handler/unwrap-handler.js +106 -0
  220. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/handler/wrap-handler.js +105 -0
  221. package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/lib/interceptor/cache.js +26 -79
  222. package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/lib/interceptor/decompress.js +3 -13
  223. package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/lib/interceptor/deduplicate.js +4 -5
  224. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/interceptor/dns.js +571 -0
  225. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/interceptor/dump.js +99 -0
  226. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/interceptor/redirect.js +21 -0
  227. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/interceptor/response-error.js +95 -0
  228. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/interceptor/retry.js +19 -0
  229. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/llhttp/.gitkeep +0 -0
  230. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/llhttp/constants.js +531 -0
  231. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/llhttp/llhttp-wasm.js +15 -0
  232. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/llhttp/llhttp_simd-wasm.js +15 -0
  233. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/llhttp/utils.js +12 -0
  234. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/mock/mock-agent.js +232 -0
  235. package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/lib/mock/mock-call-history.js +1 -1
  236. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/mock/mock-client.js +68 -0
  237. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/mock/mock-errors.js +29 -0
  238. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/mock/mock-interceptor.js +209 -0
  239. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/mock/mock-pool.js +68 -0
  240. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/mock/mock-symbols.js +32 -0
  241. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/mock/mock-utils.js +486 -0
  242. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/mock/pending-interceptors-formatter.js +43 -0
  243. package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/lib/mock/snapshot-agent.js +7 -25
  244. package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/lib/mock/snapshot-recorder.js +3 -38
  245. package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/lib/util/cache.js +10 -92
  246. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/util/promise.js +28 -0
  247. package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/lib/util/runtime-features.js +34 -3
  248. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/util/timers.js +425 -0
  249. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/web/cache/cache.js +864 -0
  250. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/web/cache/cachestorage.js +152 -0
  251. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/web/cache/util.js +45 -0
  252. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/web/cookies/constants.js +12 -0
  253. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/web/cookies/index.js +199 -0
  254. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/web/cookies/parse.js +314 -0
  255. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/web/cookies/util.js +352 -0
  256. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/web/eventsource/eventsource-stream.js +494 -0
  257. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/web/eventsource/eventsource.js +501 -0
  258. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/web/eventsource/util.js +29 -0
  259. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/web/fetch/LICENSE +21 -0
  260. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/web/fetch/body.js +509 -0
  261. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/web/fetch/constants.js +131 -0
  262. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/web/fetch/data-url.js +596 -0
  263. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/web/fetch/formdata-parser.js +586 -0
  264. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/web/fetch/formdata.js +259 -0
  265. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/web/fetch/global.js +40 -0
  266. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/web/fetch/headers.js +719 -0
  267. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/web/fetch/index.js +2413 -0
  268. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/web/fetch/request.js +1115 -0
  269. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/web/fetch/response.js +641 -0
  270. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/web/fetch/util.js +1522 -0
  271. package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/lib/web/infra/index.js +1 -16
  272. package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/lib/web/webidl/index.js +21 -7
  273. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/web/websocket/connection.js +339 -0
  274. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/web/websocket/constants.js +126 -0
  275. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/web/websocket/events.js +331 -0
  276. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/web/websocket/frame.js +133 -0
  277. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/web/websocket/permessage-deflate.js +105 -0
  278. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/web/websocket/receiver.js +507 -0
  279. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/web/websocket/sender.js +109 -0
  280. package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/lib/web/websocket/stream/websocketerror.js +10 -13
  281. package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/lib/web/websocket/stream/websocketstream.js +14 -29
  282. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/web/websocket/util.js +347 -0
  283. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/web/websocket/websocket.js +758 -0
  284. package/node_modules/@mytools/fst-platform/node_modules/undici/package.json +152 -0
  285. package/node_modules/@mytools/fst-platform/node_modules/undici/scripts/strip-comments.js +10 -0
  286. package/node_modules/@mytools/fst-platform/node_modules/undici/types/README.md +6 -0
  287. package/node_modules/@mytools/fst-platform/node_modules/undici/types/agent.d.ts +32 -0
  288. package/node_modules/@mytools/fst-platform/node_modules/undici/types/api.d.ts +43 -0
  289. package/node_modules/@mytools/fst-platform/node_modules/undici/types/balanced-pool.d.ts +30 -0
  290. package/node_modules/@mytools/fst-platform/node_modules/undici/types/cache.d.ts +36 -0
  291. package/node_modules/@mytools/fst-platform/node_modules/undici/types/client.d.ts +139 -0
  292. package/node_modules/@mytools/fst-platform/node_modules/undici/types/connector.d.ts +36 -0
  293. package/node_modules/@mytools/fst-platform/node_modules/undici/types/content-type.d.ts +21 -0
  294. package/node_modules/@mytools/fst-platform/node_modules/undici/types/cookies.d.ts +30 -0
  295. package/node_modules/@mytools/fst-platform/node_modules/undici/types/diagnostics-channel.d.ts +74 -0
  296. package/node_modules/@mytools/fst-platform/node_modules/undici/types/dispatcher.d.ts +275 -0
  297. package/node_modules/@mytools/fst-platform/node_modules/undici/types/env-http-proxy-agent.d.ts +22 -0
  298. package/node_modules/@mytools/fst-platform/node_modules/undici/types/errors.d.ts +177 -0
  299. package/node_modules/@mytools/fst-platform/node_modules/undici/types/eventsource.d.ts +66 -0
  300. package/node_modules/@mytools/fst-platform/node_modules/undici/types/fetch.d.ts +231 -0
  301. package/node_modules/@mytools/fst-platform/node_modules/undici/types/formdata.d.ts +114 -0
  302. package/node_modules/@mytools/fst-platform/node_modules/undici/types/global-dispatcher.d.ts +9 -0
  303. package/node_modules/@mytools/fst-platform/node_modules/undici/types/global-origin.d.ts +7 -0
  304. package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/types/h2c-client.d.ts +6 -6
  305. package/node_modules/@mytools/fst-platform/node_modules/undici/types/handlers.d.ts +14 -0
  306. package/node_modules/@mytools/fst-platform/node_modules/undici/types/header.d.ts +160 -0
  307. package/node_modules/@mytools/fst-platform/node_modules/undici/types/index.d.ts +91 -0
  308. package/node_modules/@mytools/fst-platform/node_modules/undici/types/interceptors.d.ts +82 -0
  309. package/node_modules/@mytools/fst-platform/node_modules/undici/types/mock-agent.d.ts +68 -0
  310. package/node_modules/@mytools/fst-platform/node_modules/undici/types/mock-client.d.ts +27 -0
  311. package/node_modules/@mytools/fst-platform/node_modules/undici/types/mock-errors.d.ts +12 -0
  312. package/node_modules/@mytools/fst-platform/node_modules/undici/types/mock-interceptor.d.ts +94 -0
  313. package/node_modules/@mytools/fst-platform/node_modules/undici/types/mock-pool.d.ts +27 -0
  314. package/node_modules/@mytools/fst-platform/node_modules/undici/types/patch.d.ts +29 -0
  315. package/node_modules/@mytools/fst-platform/node_modules/undici/types/pool-stats.d.ts +19 -0
  316. package/node_modules/@mytools/fst-platform/node_modules/undici/types/pool.d.ts +41 -0
  317. package/node_modules/@mytools/fst-platform/node_modules/undici/types/proxy-agent.d.ts +29 -0
  318. package/node_modules/@mytools/fst-platform/node_modules/undici/types/readable.d.ts +68 -0
  319. package/node_modules/@mytools/fst-platform/node_modules/undici/types/retry-agent.d.ts +8 -0
  320. package/node_modules/@mytools/fst-platform/node_modules/undici/types/retry-handler.d.ts +125 -0
  321. package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/types/round-robin-pool.d.ts +2 -0
  322. package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/types/snapshot-agent.d.ts +0 -4
  323. package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/types/socks5-proxy-agent.d.ts +2 -4
  324. package/node_modules/@mytools/fst-platform/node_modules/undici/types/util.d.ts +18 -0
  325. package/node_modules/@mytools/fst-platform/node_modules/undici/types/webidl.d.ts +347 -0
  326. package/node_modules/@mytools/fst-platform/node_modules/undici/types/websocket.d.ts +188 -0
  327. package/node_modules/@mytools/fst-platform/package.json +4 -3
  328. package/node_modules/@mytools/fst-platform/src/managed-process.js +36 -0
  329. package/node_modules/@mytools/fst-platform/src/process.js +11 -3
  330. package/node_modules/@mytools/fst-platform/src/shell.js +46 -1
  331. package/node_modules/@mytools/fst-plugin/README.md +4 -0
  332. package/node_modules/@mytools/fst-plugin/package.json +1 -1
  333. package/node_modules/@mytools/fst-plugin/src/contracts.js +3 -0
  334. package/node_modules/@mytools/fst-plugin/src/host.js +54 -31
  335. package/node_modules/@mytools/fst-plugin/src/runtime.js +14 -8
  336. package/node_modules/@mytools/fst-workflow/package.json +1 -1
  337. package/node_modules/@mytools/fst-workflow/src/engine.js +1 -1
  338. package/node_modules/@mytools/fst-workspace/README.md +6 -0
  339. package/node_modules/@mytools/fst-workspace/package.json +2 -1
  340. package/node_modules/@mytools/fst-workspace/src/plugin-registry.js +58 -0
  341. package/node_modules/@mytools/fst-workspace/src/plugins.js +10 -5
  342. package/node_modules/@mytools/fst-workspace/src/workflows.js +32 -12
  343. package/node_modules/@mytools/pack/package.json +3 -3
  344. package/node_modules/@mytools/pack/runtime-cache.js +26 -0
  345. package/node_modules/@mytools/pack/runtime.js +6 -10
  346. package/node_modules/@mytools/sdk/README.md +10 -0
  347. package/node_modules/@mytools/sdk/inputs.js +53 -0
  348. package/node_modules/@mytools/sdk/package.json +2 -0
  349. package/node_modules/@mytools/sdk/reports.js +53 -0
  350. package/node_modules/@mytools/web/public/THIRD_PARTY_NOTICES.txt +1197 -1207
  351. package/node_modules/@npmcli/agent/lib/agents.js +0 -10
  352. package/node_modules/@npmcli/agent/package.json +12 -11
  353. package/node_modules/@npmcli/arborist/README.md +2 -2
  354. package/node_modules/@npmcli/arborist/bin/index.js +2 -1
  355. package/node_modules/@npmcli/arborist/bin/shrinkwrap.js +7 -0
  356. package/node_modules/@npmcli/arborist/lib/arborist/build-ideal-tree.js +25 -159
  357. package/node_modules/@npmcli/arborist/lib/arborist/isolated-reifier.js +49 -11
  358. package/node_modules/@npmcli/arborist/lib/arborist/load-actual.js +0 -67
  359. package/node_modules/@npmcli/arborist/lib/arborist/load-virtual.js +37 -5
  360. package/node_modules/@npmcli/arborist/lib/arborist/rebuild.js +8 -15
  361. package/node_modules/@npmcli/arborist/lib/arborist/reify.js +42 -59
  362. package/node_modules/@npmcli/arborist/lib/consistent-resolve.js +1 -1
  363. package/node_modules/@npmcli/arborist/lib/diff.js +22 -17
  364. package/node_modules/@npmcli/arborist/lib/edge.js +2 -22
  365. package/node_modules/@npmcli/arborist/lib/index.js +0 -2
  366. package/node_modules/@npmcli/arborist/lib/isolated-classes.js +1 -4
  367. package/node_modules/@npmcli/arborist/lib/node.js +9 -13
  368. package/node_modules/@npmcli/arborist/lib/place-dep.js +0 -6
  369. package/node_modules/@npmcli/arborist/lib/printable.js +5 -0
  370. package/node_modules/@npmcli/arborist/lib/shrinkwrap.js +32 -55
  371. package/node_modules/@npmcli/arborist/package.json +26 -32
  372. package/node_modules/@npmcli/fs/lib/move-file.js +5 -5
  373. package/node_modules/@npmcli/fs/package.json +5 -5
  374. package/node_modules/@npmcli/git/package.json +12 -13
  375. package/node_modules/@npmcli/installed-package-contents/package.json +7 -7
  376. package/node_modules/@npmcli/map-workspaces/package.json +7 -7
  377. package/node_modules/@npmcli/metavuln-calculator/package.json +16 -10
  378. package/node_modules/@npmcli/name-from-folder/package.json +16 -13
  379. package/node_modules/@npmcli/node-gyp/package.json +5 -5
  380. package/node_modules/@npmcli/package-json/lib/index.js +1 -2
  381. package/node_modules/@npmcli/package-json/lib/normalize.js +22 -23
  382. package/node_modules/@npmcli/package-json/package.json +10 -11
  383. package/node_modules/@npmcli/promise-spawn/README.md +2 -1
  384. package/node_modules/@npmcli/promise-spawn/package.json +5 -5
  385. package/node_modules/@npmcli/redact/package.json +4 -4
  386. package/node_modules/@npmcli/run-script/lib/is-server-package.js +11 -0
  387. package/node_modules/@npmcli/run-script/lib/make-spawn-args.js +6 -5
  388. package/node_modules/@npmcli/run-script/lib/run-script-pkg.js +13 -4
  389. package/node_modules/@npmcli/run-script/lib/run-script.js +2 -1
  390. package/node_modules/@npmcli/run-script/package.json +11 -12
  391. package/node_modules/@sigstore/bundle/README.md +1 -1
  392. package/node_modules/@sigstore/bundle/dist/error.js +0 -1
  393. package/node_modules/@sigstore/bundle/package.json +2 -2
  394. package/node_modules/@sigstore/core/README.md +1 -1
  395. package/node_modules/@sigstore/core/dist/asn1/length.js +1 -12
  396. package/node_modules/@sigstore/core/dist/asn1/obj.js +7 -25
  397. package/node_modules/@sigstore/core/dist/asn1/parse.js +5 -24
  398. package/node_modules/@sigstore/core/package.json +2 -2
  399. package/node_modules/@sigstore/sign/README.md +1 -1
  400. package/node_modules/@sigstore/sign/dist/signer/fulcio/ephemeral.js +1 -1
  401. package/node_modules/@sigstore/sign/package.json +9 -9
  402. package/node_modules/@sigstore/tuf/README.md +1 -1
  403. package/node_modules/@sigstore/tuf/package.json +4 -4
  404. package/node_modules/@sigstore/tuf/seeds.json +1 -1
  405. package/node_modules/@sigstore/verify/README.md +1 -1
  406. package/node_modules/@sigstore/verify/dist/bundle/dsse.d.ts +0 -1
  407. package/node_modules/@sigstore/verify/dist/bundle/dsse.js +0 -6
  408. package/node_modules/@sigstore/verify/dist/bundle/message.d.ts +0 -1
  409. package/node_modules/@sigstore/verify/dist/bundle/message.js +0 -5
  410. package/node_modules/@sigstore/verify/dist/policy.d.ts +1 -1
  411. package/node_modules/@sigstore/verify/dist/policy.js +2 -0
  412. package/node_modules/@sigstore/verify/dist/shared.types.d.ts +1 -6
  413. package/node_modules/@sigstore/verify/dist/tlog/checkpoint.js +3 -17
  414. package/node_modules/@sigstore/verify/dist/tlog/hashedrekord.js +4 -4
  415. package/node_modules/@sigstore/verify/dist/tlog/index.js +1 -13
  416. package/node_modules/@sigstore/verify/dist/tlog/merkle.js +1 -12
  417. package/node_modules/@sigstore/verify/dist/verifier.js +5 -13
  418. package/node_modules/@sigstore/verify/package.json +5 -5
  419. package/node_modules/@tufjs/models/package.json +3 -3
  420. package/node_modules/abbrev/package.json +8 -9
  421. package/node_modules/agent-base/dist/helpers.d.ts +5 -0
  422. package/node_modules/agent-base/dist/helpers.d.ts.map +1 -1
  423. package/node_modules/agent-base/dist/helpers.js +34 -5
  424. package/node_modules/agent-base/dist/helpers.js.map +1 -1
  425. package/node_modules/agent-base/dist/index.d.ts +5 -1
  426. package/node_modules/agent-base/dist/index.d.ts.map +1 -1
  427. package/node_modules/agent-base/dist/index.js +40 -8
  428. package/node_modules/agent-base/dist/index.js.map +1 -1
  429. package/node_modules/agent-base/package.json +12 -12
  430. package/node_modules/bin-links/README.md +4 -5
  431. package/node_modules/bin-links/lib/fix-bin.js +1 -3
  432. package/node_modules/bin-links/lib/index.js +16 -8
  433. package/node_modules/bin-links/lib/link-mans.js +53 -0
  434. package/node_modules/bin-links/package.json +12 -11
  435. package/node_modules/cacache/lib/content/write.js +0 -2
  436. package/node_modules/cacache/lib/entry-index.js +0 -3
  437. package/node_modules/cacache/lib/rm.js +0 -1
  438. package/node_modules/cacache/lib/util/tmp.js +1 -5
  439. package/node_modules/cacache/lib/verify.js +2 -2
  440. package/node_modules/cacache/package.json +7 -7
  441. package/node_modules/cmd-shim/lib/index.js +32 -67
  442. package/node_modules/cmd-shim/package.json +5 -5
  443. package/node_modules/hosted-git-info/README.md +1 -1
  444. package/node_modules/hosted-git-info/lib/parse-url.js +3 -1
  445. package/node_modules/hosted-git-info/package.json +4 -4
  446. package/node_modules/http-proxy-agent/dist/index.d.ts +5 -8
  447. package/node_modules/http-proxy-agent/dist/index.d.ts.map +1 -1
  448. package/node_modules/http-proxy-agent/dist/index.js +42 -26
  449. package/node_modules/http-proxy-agent/dist/index.js.map +1 -1
  450. package/node_modules/http-proxy-agent/package.json +14 -15
  451. package/node_modules/https-proxy-agent/dist/index.d.ts +5 -9
  452. package/node_modules/https-proxy-agent/dist/index.d.ts.map +1 -1
  453. package/node_modules/https-proxy-agent/dist/index.js +44 -98
  454. package/node_modules/https-proxy-agent/dist/index.js.map +1 -1
  455. package/node_modules/https-proxy-agent/dist/parse-proxy-response.d.ts +3 -0
  456. package/node_modules/https-proxy-agent/dist/parse-proxy-response.d.ts.map +1 -1
  457. package/node_modules/https-proxy-agent/dist/parse-proxy-response.js +10 -3
  458. package/node_modules/https-proxy-agent/dist/parse-proxy-response.js.map +1 -1
  459. package/node_modules/https-proxy-agent/package.json +15 -16
  460. package/node_modules/ignore-walk/package.json +4 -4
  461. package/node_modules/ini/package.json +5 -5
  462. package/node_modules/ip-address/README.md +70 -70
  463. package/node_modules/ip-address/dist/ipv6.js +7 -4
  464. package/node_modules/ip-address/dist/ipv6.js.map +1 -1
  465. package/node_modules/ip-address/dist/v6/constants.d.ts +3 -0
  466. package/node_modules/ip-address/dist/v6/constants.js +3 -0
  467. package/node_modules/ip-address/dist/v6/constants.js.map +1 -1
  468. package/node_modules/ip-address/package.json +2 -1
  469. package/node_modules/json-parse-even-better-errors/lib/index.js +1 -3
  470. package/node_modules/json-parse-even-better-errors/package.json +17 -13
  471. package/node_modules/make-fetch-happen/package.json +11 -11
  472. package/node_modules/minipass-fetch/package.json +4 -4
  473. package/node_modules/node-gyp/.release-please-manifest.json +1 -1
  474. package/node_modules/node-gyp/CHANGELOG.md +0 -102
  475. package/node_modules/node-gyp/README.md +2 -3
  476. package/node_modules/node-gyp/eslint.config.js +1 -4
  477. package/node_modules/node-gyp/gyp/.release-please-manifest.json +1 -1
  478. package/node_modules/node-gyp/gyp/pylib/gyp/generator/cmake.py +19 -14
  479. package/node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py +2 -7
  480. package/node_modules/node-gyp/gyp/pyproject.toml +1 -1
  481. package/node_modules/node-gyp/lib/build.js +6 -18
  482. package/node_modules/node-gyp/lib/create-config-gypi.js +0 -5
  483. package/node_modules/node-gyp/lib/node-gyp.js +2 -9
  484. package/node_modules/node-gyp/lib/rebuild.js +3 -3
  485. package/node_modules/node-gyp/package.json +9 -11
  486. package/node_modules/nopt/README.md +4 -2
  487. package/node_modules/nopt/lib/debug.js +5 -0
  488. package/node_modules/nopt/lib/nopt-lib.js +43 -7
  489. package/node_modules/nopt/lib/nopt.js +4 -2
  490. package/node_modules/nopt/lib/type-defs.js +13 -8
  491. package/node_modules/nopt/package.json +17 -15
  492. package/node_modules/npm-bundled/package.json +6 -6
  493. package/node_modules/npm-install-checks/package.json +5 -5
  494. package/node_modules/npm-normalize-package-bin/package.json +16 -13
  495. package/node_modules/npm-package-arg/package.json +7 -7
  496. package/node_modules/npm-packlist/README.md +30 -45
  497. package/node_modules/npm-packlist/lib/index.js +47 -115
  498. package/node_modules/npm-packlist/package.json +8 -10
  499. package/node_modules/npm-pick-manifest/package.json +19 -15
  500. package/node_modules/npm-registry-fetch/lib/errors.js +3 -8
  501. package/node_modules/npm-registry-fetch/package.json +12 -12
  502. package/node_modules/pacote/lib/dir.js +5 -60
  503. package/node_modules/pacote/lib/fetcher.js +0 -4
  504. package/node_modules/pacote/lib/git.js +3 -11
  505. package/node_modules/pacote/lib/util/add-git-sha.js +1 -1
  506. package/node_modules/pacote/package.json +18 -19
  507. package/node_modules/parse-conflict-json/package.json +6 -6
  508. package/node_modules/proc-log/package.json +4 -4
  509. package/node_modules/read-cmd-shim/lib/index.js +1 -1
  510. package/node_modules/read-cmd-shim/package.json +18 -14
  511. package/node_modules/sigstore/README.md +1 -1
  512. package/node_modules/sigstore/package.json +10 -10
  513. package/node_modules/socks-proxy-agent/dist/index.d.ts +3 -1
  514. package/node_modules/socks-proxy-agent/dist/index.d.ts.map +1 -1
  515. package/node_modules/socks-proxy-agent/dist/index.js +43 -17
  516. package/node_modules/socks-proxy-agent/dist/index.js.map +1 -1
  517. package/node_modules/socks-proxy-agent/package.json +15 -15
  518. package/node_modules/ssri/package.json +4 -4
  519. package/node_modules/tuf-js/dist/config.d.ts +2 -2
  520. package/node_modules/tuf-js/dist/fetcher.d.ts +4 -4
  521. package/node_modules/tuf-js/dist/fetcher.js +16 -55
  522. package/node_modules/tuf-js/dist/updater.js +2 -2
  523. package/node_modules/tuf-js/package.json +8 -8
  524. package/node_modules/undici/README.md +72 -405
  525. package/node_modules/undici/docs/docs/api/Agent.md +41 -252
  526. package/node_modules/undici/docs/docs/api/BalancedPool.md +48 -246
  527. package/node_modules/undici/docs/docs/api/CacheStorage.md +13 -171
  528. package/node_modules/undici/docs/docs/api/Client.md +139 -395
  529. package/node_modules/undici/docs/docs/api/Connector.md +35 -118
  530. package/node_modules/undici/docs/docs/api/ContentType.md +25 -65
  531. package/node_modules/undici/docs/docs/api/Cookies.md +47 -125
  532. package/node_modules/undici/docs/docs/api/Debug.md +31 -47
  533. package/node_modules/undici/docs/docs/api/DiagnosticsChannel.md +97 -409
  534. package/node_modules/undici/docs/docs/api/DispatchInterceptor.md +60 -0
  535. package/node_modules/undici/docs/docs/api/Dispatcher.md +1011 -500
  536. package/node_modules/undici/docs/docs/api/EnvHttpProxyAgent.md +96 -105
  537. package/node_modules/undici/docs/docs/api/Errors.md +28 -528
  538. package/node_modules/undici/docs/docs/api/EventSource.md +13 -326
  539. package/node_modules/undici/docs/docs/api/Fetch.md +24 -693
  540. package/node_modules/undici/docs/docs/api/MockAgent.md +264 -346
  541. package/node_modules/undici/docs/docs/api/MockClient.md +31 -153
  542. package/node_modules/undici/docs/docs/api/MockErrors.md +5 -56
  543. package/node_modules/undici/docs/docs/api/MockPool.md +253 -324
  544. package/node_modules/undici/docs/docs/api/Pool.md +41 -235
  545. package/node_modules/undici/docs/docs/api/PoolStats.md +13 -119
  546. package/node_modules/undici/docs/docs/api/ProxyAgent.md +81 -198
  547. package/node_modules/undici/docs/docs/api/RedirectHandler.md +58 -238
  548. package/node_modules/undici/docs/docs/api/RetryAgent.md +28 -119
  549. package/node_modules/undici/docs/docs/api/RetryHandler.md +78 -161
  550. package/node_modules/undici/docs/docs/api/Util.md +11 -68
  551. package/node_modules/undici/docs/docs/api/WebSocket.md +24 -509
  552. package/node_modules/undici/docs/docs/api/api-lifecycle.md +33 -101
  553. package/node_modules/undici/docs/docs/best-practices/client-certificate.md +0 -2
  554. package/node_modules/undici/docs/docs/best-practices/mocking-request.md +2 -58
  555. package/node_modules/undici/docs/docs/best-practices/proxy.md +1 -3
  556. package/node_modules/undici/docs/docs/best-practices/writing-tests.md +0 -45
  557. package/node_modules/undici/index-fetch.js +4 -34
  558. package/node_modules/undici/index.d.ts +1 -1
  559. package/node_modules/undici/index.js +20 -87
  560. package/node_modules/undici/lib/api/abort-signal.js +0 -2
  561. package/node_modules/undici/lib/api/api-connect.js +11 -15
  562. package/node_modules/undici/lib/api/api-pipeline.js +19 -33
  563. package/node_modules/undici/lib/api/api-request.js +59 -89
  564. package/node_modules/undici/lib/api/api-stream.js +64 -114
  565. package/node_modules/undici/lib/api/api-upgrade.js +13 -26
  566. package/node_modules/undici/lib/api/readable.js +87 -317
  567. package/node_modules/undici/lib/api/util.js +93 -0
  568. package/node_modules/undici/lib/core/connect.js +125 -77
  569. package/node_modules/undici/lib/core/constants.js +9 -11
  570. package/node_modules/undici/lib/core/diagnostics.js +129 -154
  571. package/node_modules/undici/lib/core/errors.js +50 -122
  572. package/node_modules/undici/lib/core/request.js +87 -172
  573. package/node_modules/undici/lib/core/symbols.js +2 -14
  574. package/node_modules/undici/lib/core/tree.js +2 -10
  575. package/node_modules/undici/lib/core/util.js +190 -481
  576. package/node_modules/undici/lib/dispatcher/agent.js +35 -83
  577. package/node_modules/undici/lib/dispatcher/balanced-pool.js +38 -46
  578. package/node_modules/undici/lib/dispatcher/client-h1.js +199 -492
  579. package/node_modules/undici/lib/dispatcher/client-h2.js +380 -1409
  580. package/node_modules/undici/lib/dispatcher/client.js +130 -253
  581. package/node_modules/undici/lib/dispatcher/dispatcher-base.js +52 -50
  582. package/node_modules/undici/lib/dispatcher/dispatcher.js +24 -17
  583. package/node_modules/undici/lib/dispatcher/env-http-proxy-agent.js +45 -75
  584. package/node_modules/undici/lib/dispatcher/fixed-queue.js +50 -68
  585. package/node_modules/undici/lib/dispatcher/pool-base.js +54 -153
  586. package/node_modules/undici/lib/dispatcher/pool-stats.js +34 -0
  587. package/node_modules/undici/lib/dispatcher/pool.js +16 -135
  588. package/node_modules/undici/lib/dispatcher/proxy-agent.js +41 -175
  589. package/node_modules/undici/lib/dispatcher/retry-agent.js +0 -3
  590. package/node_modules/undici/lib/global.js +9 -59
  591. package/node_modules/undici/lib/handler/decorator-handler.js +15 -43
  592. package/node_modules/undici/lib/handler/redirect-handler.js +116 -127
  593. package/node_modules/undici/lib/handler/retry-handler.js +182 -398
  594. package/node_modules/undici/lib/interceptor/dns.js +47 -254
  595. package/node_modules/undici/lib/interceptor/dump.js +56 -32
  596. package/node_modules/undici/lib/interceptor/redirect-interceptor.js +21 -0
  597. package/node_modules/undici/lib/interceptor/redirect.js +14 -11
  598. package/node_modules/undici/lib/interceptor/response-error.js +22 -31
  599. package/node_modules/undici/lib/llhttp/.gitkeep +0 -0
  600. package/node_modules/undici/lib/llhttp/constants.js +193 -446
  601. package/node_modules/undici/lib/llhttp/llhttp-wasm.js +1 -11
  602. package/node_modules/undici/lib/llhttp/llhttp_simd-wasm.js +1 -11
  603. package/node_modules/undici/lib/llhttp/utils.js +12 -9
  604. package/node_modules/undici/lib/mock/mock-agent.js +22 -106
  605. package/node_modules/undici/lib/mock/mock-client.js +4 -13
  606. package/node_modules/undici/lib/mock/mock-errors.js +2 -3
  607. package/node_modules/undici/lib/mock/mock-interceptor.js +13 -33
  608. package/node_modules/undici/lib/mock/mock-pool.js +4 -13
  609. package/node_modules/undici/lib/mock/mock-symbols.js +1 -10
  610. package/node_modules/undici/lib/mock/mock-utils.js +51 -404
  611. package/node_modules/undici/lib/mock/pluralizer.js +29 -0
  612. package/node_modules/undici/lib/util/timers.js +9 -11
  613. package/node_modules/undici/lib/web/cache/cache.js +51 -63
  614. package/node_modules/undici/lib/web/cache/cachestorage.js +7 -13
  615. package/node_modules/undici/lib/web/cache/symbols.js +5 -0
  616. package/node_modules/undici/lib/web/cookies/index.js +18 -45
  617. package/node_modules/undici/lib/web/cookies/parse.js +149 -157
  618. package/node_modules/undici/lib/web/cookies/util.js +2 -4
  619. package/node_modules/undici/lib/web/eventsource/eventsource-stream.js +9 -37
  620. package/node_modules/undici/lib/web/eventsource/eventsource.js +64 -108
  621. package/node_modules/undici/lib/web/eventsource/util.js +5 -28
  622. package/node_modules/undici/lib/web/fetch/body.js +148 -173
  623. package/node_modules/undici/lib/web/fetch/constants.js +6 -13
  624. package/node_modules/undici/lib/web/fetch/data-url.js +167 -19
  625. package/node_modules/undici/lib/web/fetch/dispatcher-weakref.js +46 -0
  626. package/node_modules/undici/lib/web/fetch/file.js +126 -0
  627. package/node_modules/undici/lib/web/fetch/formdata-parser.js +117 -229
  628. package/node_modules/undici/lib/web/fetch/formdata.js +65 -85
  629. package/node_modules/undici/lib/web/fetch/headers.js +108 -143
  630. package/node_modules/undici/lib/web/fetch/index.js +446 -627
  631. package/node_modules/undici/lib/web/fetch/request.js +115 -217
  632. package/node_modules/undici/lib/web/fetch/response.js +82 -110
  633. package/node_modules/undici/lib/web/fetch/symbols.js +9 -0
  634. package/node_modules/undici/lib/web/fetch/util.js +393 -291
  635. package/node_modules/undici/lib/web/fetch/webidl.js +695 -0
  636. package/node_modules/undici/lib/web/fileapi/encoding.js +290 -0
  637. package/node_modules/undici/lib/web/fileapi/filereader.js +344 -0
  638. package/node_modules/undici/lib/web/fileapi/progressevent.js +78 -0
  639. package/node_modules/undici/lib/web/fileapi/symbols.js +10 -0
  640. package/node_modules/undici/lib/web/fileapi/util.js +391 -0
  641. package/node_modules/undici/lib/web/websocket/connection.js +160 -139
  642. package/node_modules/undici/lib/web/websocket/constants.js +10 -70
  643. package/node_modules/undici/lib/web/websocket/events.js +30 -49
  644. package/node_modules/undici/lib/web/websocket/frame.js +20 -51
  645. package/node_modules/undici/lib/web/websocket/receiver.js +87 -83
  646. package/node_modules/undici/lib/web/websocket/sender.js +13 -18
  647. package/node_modules/undici/lib/web/websocket/symbols.js +12 -0
  648. package/node_modules/undici/lib/web/websocket/util.js +90 -115
  649. package/node_modules/undici/lib/web/websocket/websocket.js +171 -359
  650. package/node_modules/undici/package.json +57 -49
  651. package/node_modules/undici/scripts/strip-comments.js +1 -3
  652. package/node_modules/undici/types/agent.d.ts +13 -12
  653. package/node_modules/undici/types/api.d.ts +26 -26
  654. package/node_modules/undici/types/balanced-pool.d.ts +12 -13
  655. package/node_modules/undici/types/client.d.ts +39 -98
  656. package/node_modules/undici/types/connector.d.ts +2 -5
  657. package/node_modules/undici/types/cookies.d.ts +1 -3
  658. package/node_modules/undici/types/diagnostics-channel.d.ts +11 -20
  659. package/node_modules/undici/types/dispatcher.d.ts +139 -136
  660. package/node_modules/undici/types/env-http-proxy-agent.d.ts +3 -4
  661. package/node_modules/undici/types/errors.d.ts +54 -86
  662. package/node_modules/undici/types/eventsource.d.ts +4 -9
  663. package/node_modules/undici/types/fetch.d.ts +25 -51
  664. package/node_modules/undici/types/file.d.ts +39 -0
  665. package/node_modules/undici/types/filereader.d.ts +54 -0
  666. package/node_modules/undici/types/formdata.d.ts +7 -7
  667. package/node_modules/undici/types/global-dispatcher.d.ts +4 -4
  668. package/node_modules/undici/types/global-origin.d.ts +5 -5
  669. package/node_modules/undici/types/handlers.d.ts +9 -10
  670. package/node_modules/undici/types/header.d.ts +1 -162
  671. package/node_modules/undici/types/index.d.ts +47 -69
  672. package/node_modules/undici/types/interceptors.d.ts +12 -62
  673. package/node_modules/undici/types/mock-agent.d.ts +27 -46
  674. package/node_modules/undici/types/mock-client.d.ts +4 -6
  675. package/node_modules/undici/types/mock-errors.d.ts +3 -3
  676. package/node_modules/undici/types/mock-interceptor.d.ts +21 -26
  677. package/node_modules/undici/types/mock-pool.d.ts +4 -6
  678. package/node_modules/undici/types/patch.d.ts +4 -0
  679. package/node_modules/undici/types/pool-stats.d.ts +8 -8
  680. package/node_modules/undici/types/pool.d.ts +14 -14
  681. package/node_modules/undici/types/proxy-agent.d.ts +6 -13
  682. package/node_modules/undici/types/readable.d.ts +16 -19
  683. package/node_modules/undici/types/retry-agent.d.ts +1 -1
  684. package/node_modules/undici/types/retry-handler.d.ts +9 -18
  685. package/node_modules/undici/types/util.d.ts +3 -3
  686. package/node_modules/undici/types/webidl.d.ts +32 -156
  687. package/node_modules/undici/types/websocket.d.ts +10 -48
  688. package/node_modules/validate-npm-package-name/package.json +4 -4
  689. package/node_modules/which/package.json +4 -4
  690. package/node_modules/write-file-atomic/package.json +4 -4
  691. package/package.json +56 -60
  692. package/node_modules/@npmcli/arborist/lib/npm-extension.js +0 -237
  693. package/node_modules/@npmcli/arborist/lib/package-extensions.js +0 -236
  694. package/node_modules/@npmcli/arborist/lib/patch.js +0 -111
  695. package/node_modules/@npmcli/arborist/lib/patched-dependencies.js +0 -168
  696. package/node_modules/cacache/lib/util/cache-dir.js +0 -29
  697. package/node_modules/diff/CONTRIBUTING.md +0 -28
  698. package/node_modules/diff/LICENSE +0 -29
  699. package/node_modules/diff/README.md +0 -388
  700. package/node_modules/diff/dist/diff.js +0 -1782
  701. package/node_modules/diff/dist/diff.min.js +0 -1
  702. package/node_modules/diff/eslint.config.mjs +0 -182
  703. package/node_modules/diff/libcjs/convert/dmp.d.ts +0 -8
  704. package/node_modules/diff/libcjs/convert/dmp.d.ts.map +0 -1
  705. package/node_modules/diff/libcjs/convert/dmp.js +0 -24
  706. package/node_modules/diff/libcjs/convert/xml.d.ts +0 -6
  707. package/node_modules/diff/libcjs/convert/xml.d.ts.map +0 -1
  708. package/node_modules/diff/libcjs/convert/xml.js +0 -34
  709. package/node_modules/diff/libcjs/diff/array.d.ts +0 -19
  710. package/node_modules/diff/libcjs/diff/array.d.ts.map +0 -1
  711. package/node_modules/diff/libcjs/diff/array.js +0 -40
  712. package/node_modules/diff/libcjs/diff/base.d.ts +0 -20
  713. package/node_modules/diff/libcjs/diff/base.d.ts.map +0 -1
  714. package/node_modules/diff/libcjs/diff/base.js +0 -265
  715. package/node_modules/diff/libcjs/diff/character.d.ts +0 -19
  716. package/node_modules/diff/libcjs/diff/character.d.ts.map +0 -1
  717. package/node_modules/diff/libcjs/diff/character.js +0 -31
  718. package/node_modules/diff/libcjs/diff/css.d.ts +0 -18
  719. package/node_modules/diff/libcjs/diff/css.d.ts.map +0 -1
  720. package/node_modules/diff/libcjs/diff/css.js +0 -34
  721. package/node_modules/diff/libcjs/diff/json.d.ts +0 -24
  722. package/node_modules/diff/libcjs/diff/json.d.ts.map +0 -1
  723. package/node_modules/diff/libcjs/diff/json.js +0 -105
  724. package/node_modules/diff/libcjs/diff/line.d.ts +0 -24
  725. package/node_modules/diff/libcjs/diff/line.d.ts.map +0 -1
  726. package/node_modules/diff/libcjs/diff/line.js +0 -89
  727. package/node_modules/diff/libcjs/diff/sentence.d.ts +0 -21
  728. package/node_modules/diff/libcjs/diff/sentence.d.ts.map +0 -1
  729. package/node_modules/diff/libcjs/diff/sentence.js +0 -67
  730. package/node_modules/diff/libcjs/diff/word.d.ts +0 -35
  731. package/node_modules/diff/libcjs/diff/word.d.ts.map +0 -1
  732. package/node_modules/diff/libcjs/diff/word.js +0 -312
  733. package/node_modules/diff/libcjs/index.d.ts +0 -20
  734. package/node_modules/diff/libcjs/index.d.ts.map +0 -1
  735. package/node_modules/diff/libcjs/index.js +0 -64
  736. package/node_modules/diff/libcjs/package.json +0 -1
  737. package/node_modules/diff/libcjs/patch/apply.d.ts +0 -62
  738. package/node_modules/diff/libcjs/patch/apply.d.ts.map +0 -1
  739. package/node_modules/diff/libcjs/patch/apply.js +0 -267
  740. package/node_modules/diff/libcjs/patch/create.d.ts +0 -122
  741. package/node_modules/diff/libcjs/patch/create.d.ts.map +0 -1
  742. package/node_modules/diff/libcjs/patch/create.js +0 -251
  743. package/node_modules/diff/libcjs/patch/line-endings.d.ts +0 -17
  744. package/node_modules/diff/libcjs/patch/line-endings.d.ts.map +0 -1
  745. package/node_modules/diff/libcjs/patch/line-endings.js +0 -61
  746. package/node_modules/diff/libcjs/patch/parse.d.ts +0 -8
  747. package/node_modules/diff/libcjs/patch/parse.d.ts.map +0 -1
  748. package/node_modules/diff/libcjs/patch/parse.js +0 -150
  749. package/node_modules/diff/libcjs/patch/reverse.d.ts +0 -9
  750. package/node_modules/diff/libcjs/patch/reverse.d.ts.map +0 -1
  751. package/node_modules/diff/libcjs/patch/reverse.js +0 -37
  752. package/node_modules/diff/libcjs/types.d.ts +0 -213
  753. package/node_modules/diff/libcjs/types.d.ts.map +0 -1
  754. package/node_modules/diff/libcjs/types.js +0 -2
  755. package/node_modules/diff/libcjs/util/array.d.ts +0 -3
  756. package/node_modules/diff/libcjs/util/array.d.ts.map +0 -1
  757. package/node_modules/diff/libcjs/util/array.js +0 -21
  758. package/node_modules/diff/libcjs/util/distance-iterator.d.ts +0 -2
  759. package/node_modules/diff/libcjs/util/distance-iterator.d.ts.map +0 -1
  760. package/node_modules/diff/libcjs/util/distance-iterator.js +0 -40
  761. package/node_modules/diff/libcjs/util/params.d.ts +0 -4
  762. package/node_modules/diff/libcjs/util/params.d.ts.map +0 -1
  763. package/node_modules/diff/libcjs/util/params.js +0 -17
  764. package/node_modules/diff/libcjs/util/string.d.ts +0 -30
  765. package/node_modules/diff/libcjs/util/string.d.ts.map +0 -1
  766. package/node_modules/diff/libcjs/util/string.js +0 -200
  767. package/node_modules/diff/libesm/convert/dmp.d.ts +0 -8
  768. package/node_modules/diff/libesm/convert/dmp.d.ts.map +0 -1
  769. package/node_modules/diff/libesm/convert/dmp.js +0 -21
  770. package/node_modules/diff/libesm/convert/xml.d.ts +0 -6
  771. package/node_modules/diff/libesm/convert/xml.d.ts.map +0 -1
  772. package/node_modules/diff/libesm/convert/xml.js +0 -31
  773. package/node_modules/diff/libesm/diff/array.d.ts +0 -19
  774. package/node_modules/diff/libesm/diff/array.d.ts.map +0 -1
  775. package/node_modules/diff/libesm/diff/array.js +0 -16
  776. package/node_modules/diff/libesm/diff/base.d.ts +0 -20
  777. package/node_modules/diff/libesm/diff/base.d.ts.map +0 -1
  778. package/node_modules/diff/libesm/diff/base.js +0 -253
  779. package/node_modules/diff/libesm/diff/character.d.ts +0 -19
  780. package/node_modules/diff/libesm/diff/character.d.ts.map +0 -1
  781. package/node_modules/diff/libesm/diff/character.js +0 -7
  782. package/node_modules/diff/libesm/diff/css.d.ts +0 -18
  783. package/node_modules/diff/libesm/diff/css.d.ts.map +0 -1
  784. package/node_modules/diff/libesm/diff/css.js +0 -10
  785. package/node_modules/diff/libesm/diff/json.d.ts +0 -24
  786. package/node_modules/diff/libesm/diff/json.d.ts.map +0 -1
  787. package/node_modules/diff/libesm/diff/json.js +0 -78
  788. package/node_modules/diff/libesm/diff/line.d.ts +0 -24
  789. package/node_modules/diff/libesm/diff/line.d.ts.map +0 -1
  790. package/node_modules/diff/libesm/diff/line.js +0 -65
  791. package/node_modules/diff/libesm/diff/sentence.d.ts +0 -21
  792. package/node_modules/diff/libesm/diff/sentence.d.ts.map +0 -1
  793. package/node_modules/diff/libesm/diff/sentence.js +0 -43
  794. package/node_modules/diff/libesm/diff/word.d.ts +0 -35
  795. package/node_modules/diff/libesm/diff/word.d.ts.map +0 -1
  796. package/node_modules/diff/libesm/diff/word.js +0 -281
  797. package/node_modules/diff/libesm/index.d.ts +0 -20
  798. package/node_modules/diff/libesm/index.d.ts.map +0 -1
  799. package/node_modules/diff/libesm/index.js +0 -30
  800. package/node_modules/diff/libesm/package.json +0 -1
  801. package/node_modules/diff/libesm/patch/apply.d.ts +0 -62
  802. package/node_modules/diff/libesm/patch/apply.d.ts.map +0 -1
  803. package/node_modules/diff/libesm/patch/apply.js +0 -257
  804. package/node_modules/diff/libesm/patch/create.d.ts +0 -122
  805. package/node_modules/diff/libesm/patch/create.d.ts.map +0 -1
  806. package/node_modules/diff/libesm/patch/create.js +0 -228
  807. package/node_modules/diff/libesm/patch/line-endings.d.ts +0 -17
  808. package/node_modules/diff/libesm/patch/line-endings.d.ts.map +0 -1
  809. package/node_modules/diff/libesm/patch/line-endings.js +0 -44
  810. package/node_modules/diff/libesm/patch/parse.d.ts +0 -8
  811. package/node_modules/diff/libesm/patch/parse.d.ts.map +0 -1
  812. package/node_modules/diff/libesm/patch/parse.js +0 -147
  813. package/node_modules/diff/libesm/patch/reverse.d.ts +0 -9
  814. package/node_modules/diff/libesm/patch/reverse.d.ts.map +0 -1
  815. package/node_modules/diff/libesm/patch/reverse.js +0 -23
  816. package/node_modules/diff/libesm/types.d.ts +0 -213
  817. package/node_modules/diff/libesm/types.d.ts.map +0 -1
  818. package/node_modules/diff/libesm/types.js +0 -1
  819. package/node_modules/diff/libesm/util/array.d.ts +0 -3
  820. package/node_modules/diff/libesm/util/array.d.ts.map +0 -1
  821. package/node_modules/diff/libesm/util/array.js +0 -17
  822. package/node_modules/diff/libesm/util/distance-iterator.d.ts +0 -2
  823. package/node_modules/diff/libesm/util/distance-iterator.d.ts.map +0 -1
  824. package/node_modules/diff/libesm/util/distance-iterator.js +0 -37
  825. package/node_modules/diff/libesm/util/params.d.ts +0 -4
  826. package/node_modules/diff/libesm/util/params.d.ts.map +0 -1
  827. package/node_modules/diff/libesm/util/params.js +0 -14
  828. package/node_modules/diff/libesm/util/string.d.ts +0 -30
  829. package/node_modules/diff/libesm/util/string.d.ts.map +0 -1
  830. package/node_modules/diff/libesm/util/string.js +0 -184
  831. package/node_modules/diff/package.json +0 -130
  832. package/node_modules/diff/release-notes.md +0 -432
  833. package/node_modules/node-gyp/commitlint.config.mjs +0 -3
  834. package/node_modules/node-gyp/gyp/commitlint.config.js +0 -6
  835. package/node_modules/node-gyp/gyp/pylib/gyp/generator/cmake_test.py +0 -105
  836. package/node_modules/node-gyp/zizmor.yml +0 -5
  837. package/node_modules/proxy-agent-negotiate/dist/index.d.ts +0 -14
  838. package/node_modules/proxy-agent-negotiate/dist/index.d.ts.map +0 -1
  839. package/node_modules/proxy-agent-negotiate/dist/index.js +0 -35
  840. package/node_modules/proxy-agent-negotiate/dist/index.js.map +0 -1
  841. package/node_modules/proxy-agent-negotiate/package.json +0 -47
  842. package/node_modules/undici/docs/docs/api/CacheStore.md +0 -360
  843. package/node_modules/undici/docs/docs/api/ClientStats.md +0 -93
  844. package/node_modules/undici/docs/docs/api/GlobalInstallation.md +0 -121
  845. package/node_modules/undici/docs/docs/api/H2CClient.md +0 -385
  846. package/node_modules/undici/docs/docs/api/Interceptors.md +0 -419
  847. package/node_modules/undici/docs/docs/api/MockCallHistory.md +0 -371
  848. package/node_modules/undici/docs/docs/api/MockCallHistoryLog.md +0 -206
  849. package/node_modules/undici/docs/docs/api/RoundRobinPool.md +0 -239
  850. package/node_modules/undici/docs/docs/api/SnapshotAgent.md +0 -361
  851. package/node_modules/undici/docs/docs/api/Socks5ProxyAgent.md +0 -256
  852. package/node_modules/undici/docs/docs/best-practices/migrating-from-v7-to-v8.md +0 -233
  853. package/node_modules/undici/docs/docs/getting-started.md +0 -281
  854. package/node_modules/undici/docs/docs/site.json +0 -125
  855. package/node_modules/undici/docs/docs/type-map.json +0 -79
  856. package/node_modules/undici/lib/dispatcher/dispatcher1-wrapper.js +0 -110
  857. package/node_modules/undici/types/dispatcher1-wrapper.d.ts +0 -7
  858. /package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/lib/core/socks5-client.js +0 -0
  859. /package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/lib/core/socks5-utils.js +0 -0
  860. /package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/lib/encoding/index.js +0 -0
  861. /package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/lib/llhttp/constants.d.ts +0 -0
  862. /package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/lib/llhttp/utils.d.ts +0 -0
  863. /package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/lib/mock/snapshot-utils.js +0 -0
  864. /package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/lib/util/date.js +0 -0
  865. /package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/lib/util/stats.js +0 -0
  866. /package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/lib/web/subresource-integrity/Readme.md +0 -0
  867. /package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/lib/web/subresource-integrity/subresource-integrity.js +0 -0
  868. /package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/types/cache-interceptor.d.ts +0 -0
  869. /package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/types/client-stats.d.ts +0 -0
  870. /package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/types/mock-call-history.d.ts +0 -0
  871. /package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/types/utility.d.ts +0 -0
@@ -5,6 +5,7 @@ import {markdownHeader,markdownEvent,markdownResult} from './markdown-log.js';
5
5
  import {logPolicy,jsonSize,eventPreview} from './log-bounds.js';
6
6
  import {createStepSummaries} from './step-summaries.js';
7
7
  import {previewRun} from './run-preview.js';
8
+ import {samePathFileIdentity} from './file-identity.js';
8
9
 
9
10
  const validId=id=>typeof id==='string'&&/^[a-f0-9-]{36}$/.test(id);
10
11
  const logFiles=['run.md','events.jsonl','result.json','run.meta.json'];
@@ -33,9 +34,9 @@ export function createRunLogs(directory,{projectDir,allowLegacy=false,...options
33
34
  return dir;
34
35
  }
35
36
  async function safeFile(file){
36
- const before=await lstat(file);if(!before.isFile()||before.isSymbolicLink())throw new FlowError('日志文件无效');
37
+ const before=await lstat(file,{bigint:true});if(!before.isFile()||before.isSymbolicLink())throw new FlowError('日志文件无效');
37
38
  const handle=await open(file,'r');
38
- try{const after=await handle.stat();if(!after.isFile()||before.ino!==after.ino||before.dev!==after.dev)throw new FlowError('日志文件无效');return handle;}
39
+ try{const after=await handle.stat({bigint:true});if(!after.isFile()||!(await samePathFileIdentity(file,before,after)))throw new FlowError('日志文件无效');return handle;}
39
40
  catch(error){await handle.close();throw error;}
40
41
  }
41
42
  async function read(id){
@@ -0,0 +1,180 @@
1
+ import path from 'node:path';
2
+ import {constants} from 'node:fs';
3
+ import {lstat,mkdir,open,readdir,rename,unlink} from 'node:fs/promises';
4
+ import {randomUUID} from 'node:crypto';
5
+ import {FlowError} from '@mytools/sdk';
6
+ import {jsonSize} from './log-bounds.js';
7
+ import {samePathFileIdentity} from './file-identity.js';
8
+
9
+ const validId=id=>typeof id==='string'&&/^[a-f0-9]{8}(?:-[a-f0-9]{4}){3}-[a-f0-9]{12}$/.test(id);
10
+ const normalize=directory=>process.platform==='win32'?path.resolve(directory).toLowerCase():path.resolve(directory);
11
+ const queues=new Map();
12
+ const decoder=new TextDecoder('utf-8',{fatal:true});
13
+ const failure=(message,code,cause)=>new FlowError(message,{code,cause});
14
+ const plain=value=>value!==null&&typeof value==='object'&&!Array.isArray(value);
15
+
16
+ function checkId(id){if(!validId(id))throw failure('会话 ID 无效','SESSION_ID_INVALID');}
17
+ function checkSnapshot(record,id){
18
+ if(!plain(record)||record.schemaVersion!==1||record.id!==id||!Number.isFinite(Date.parse(record.startedAt))||!Number.isFinite(Date.parse(record.updatedAt))||Date.parse(record.updatedAt)<Date.parse(record.startedAt)||!Array.isArray(record.commandHistory)||!record.commandHistory.every(command=>typeof command==='string')||!Array.isArray(record.feed))throw failure('会话元数据格式无效','SESSION_RECORD_INVALID');
19
+ if(record.resumedFrom!==undefined&&(!validId(record.resumedFrom)||record.resumedFrom===id))throw failure('会话恢复来源 ID 无效','SESSION_RECORD_INVALID');
20
+ }
21
+ function encoded(value,limit,code){
22
+ try{
23
+ // 预估器会多计容器末尾分隔符,先用双倍预算拒绝巨大输入,再按实际 JSON 字节精确判断。
24
+ if(jsonSize(value,limit*2)>limit*2)throw failure('会话记录超过字节预算',code);
25
+ const text=JSON.stringify(value);
26
+ if(typeof text!=='string')throw failure('会话记录必须可以序列化为 JSON','SESSION_RECORD_INVALID');
27
+ if(Buffer.byteLength(text)>limit)throw failure('会话记录超过字节预算',code);
28
+ return text;
29
+ }catch(error){if(error instanceof FlowError)throw error;throw failure('会话记录不能序列化为 JSON','SESSION_RECORD_INVALID',error);}
30
+ }
31
+ function parsed(buffer){
32
+ try{return JSON.parse(decoder.decode(buffer));}
33
+ catch(error){throw failure('会话记录损坏或不是有效的 UTF-8 JSON','SESSION_RECORD_INVALID',error);}
34
+ }
35
+
36
+ export function createSessionHistory(directory,{projectDir,maxBytes=2*1024*1024,maxEntryBytes=65536,maxPageBytes=512*1024,maxPendingBytes=8*1024*1024}={}){
37
+ if(typeof directory!=='string'||!directory||typeof projectDir!=='string'||!projectDir)throw failure('会话目录和工作区目录必须为非空路径','SESSION_PATH_INVALID');
38
+ const policy={maxBytes,maxEntryBytes,maxPageBytes,maxPendingBytes};
39
+ for(const [key,value] of Object.entries(policy))if(!Number.isSafeInteger(value)||value<2)throw failure(`会话 ${key} 必须为至少 2 的整数字节数`,'SESSION_RECORD_INVALID');
40
+ if(maxPageBytes<maxEntryBytes+1)throw failure('会话分页预算必须容纳一条记录及换行','SESSION_PAGE_LIMIT');
41
+ const root=path.resolve(directory),owner=normalize(projectDir);
42
+ const location=(id,suffix)=>{checkId(id);return path.join(root,`${id}.${suffix}`);};
43
+
44
+ function queue(id,bytes,operation){
45
+ checkId(id);const key=`${normalize(root)}\0${id}`;
46
+ let state=queues.get(key);
47
+ if(!state)state={tail:Promise.resolve(),bytes:0,jobs:0};
48
+ if(state.bytes+bytes>maxPendingBytes)return Promise.reject(failure('会话待写队列超过字节预算','SESSION_QUEUE_LIMIT'));
49
+ queues.set(key,state);
50
+ state.bytes+=bytes;state.jobs++;
51
+ const job=state.tail.then(operation).finally(()=>{state.bytes-=bytes;state.jobs--;if(!state.jobs&&queues.get(key)===state)queues.delete(key);});
52
+ // 一次失败只影响对应调用,后续操作仍可以读取原文件或重试。
53
+ state.tail=job.catch(()=>{});return job;
54
+ }
55
+ async function safeRoot(create=false){
56
+ if(create)await mkdir(root,{recursive:true});
57
+ const stat=await lstat(root);
58
+ if(!stat.isDirectory()||stat.isSymbolicLink())throw failure('会话根目录无效,不能使用目录链接','SESSION_PATH_INVALID');
59
+ }
60
+ async function regular(file,missing=false){
61
+ let stat;
62
+ try{stat=await lstat(file,{bigint:true});}catch(error){if(missing&&error.code==='ENOENT')return null;throw error;}
63
+ if(!stat.isFile()||stat.isSymbolicLink())throw failure('会话文件无效,不能使用文件链接','SESSION_PATH_INVALID');
64
+ return stat;
65
+ }
66
+ async function safeFile(file,{append=false}={}){
67
+ const before=await regular(file,append);
68
+ const flags=(append?constants.O_RDWR|constants.O_APPEND|constants.O_CREAT:constants.O_RDONLY)|(constants.O_NOFOLLOW??0);
69
+ const handle=await open(file,flags,0o600);
70
+ try{
71
+ const after=await handle.stat({bigint:true}),current=await regular(file);
72
+ if(!after.isFile()||(before&&!(await samePathFileIdentity(file,before,after)))||!(await samePathFileIdentity(file,current,after)))throw failure('会话文件在访问期间发生替换','SESSION_PATH_INVALID');
73
+ return handle;
74
+ }catch(error){await handle.close();throw error;}
75
+ }
76
+ async function readRecord(id){
77
+ checkId(id);await safeRoot();const handle=await safeFile(location(id,'json'));
78
+ let record;
79
+ try{
80
+ const size=(await handle.stat()).size;
81
+ if(size>maxBytes)throw failure('会话元数据超过读取字节预算','SESSION_METADATA_LIMIT');
82
+ const buffer=Buffer.alloc(Math.min(size+1,maxBytes+1));let offset=0;
83
+ while(offset<buffer.length){const {bytesRead}=await handle.read(buffer,offset,buffer.length-offset,offset);if(!bytesRead)break;offset+=bytesRead;}
84
+ if(offset>maxBytes)throw failure('会话元数据超过读取字节预算','SESSION_METADATA_LIMIT');
85
+ record=parsed(buffer.subarray(0,offset));
86
+ }finally{await handle.close();}
87
+ checkSnapshot(record,id);
88
+ if(record.sessionOwner!==owner)throw failure('会话记录不属于此工作区','SESSION_OWNER_MISMATCH');
89
+ return record;
90
+ }
91
+ async function saveRecord(record,text){
92
+ await safeRoot(true);
93
+ let existing;
94
+ try{existing=await readRecord(record.id);}catch(error){if(error.code!=='ENOENT')throw error;}
95
+ if(existing){
96
+ if(existing.startedAt!==record.startedAt)throw failure('已有会话的开始时间不能改变;恢复会话请使用新 ID','SESSION_RECORD_INVALID');
97
+ if(Date.parse(record.updatedAt)<Date.parse(existing.updatedAt))return existing;
98
+ }else{
99
+ // 缺少元数据的旧追加日志也不能被新会话接管。
100
+ if(await regular(location(record.id,'jsonl'),true))throw failure('会话追加日志已存在但缺少有效元数据,请使用新 ID','SESSION_RECORD_INVALID');
101
+ }
102
+ const target=location(record.id,'json'),temporary=path.join(root,`.${record.id}.${randomUUID()}.tmp`);
103
+ let handle;
104
+ try{
105
+ handle=await open(temporary,'wx',0o600);await handle.writeFile(text,'utf8');await handle.sync();await handle.close();handle=null;
106
+ await safeRoot();await regular(target,true);await rename(temporary,target);
107
+ }finally{if(handle)await handle.close();try{await unlink(temporary);}catch(error){if(error.code!=='ENOENT')throw error;}}
108
+ return record;
109
+ }
110
+ async function appendRecord(id,text){
111
+ await readRecord(id);await safeRoot();const handle=await safeFile(location(id,'jsonl'),{append:true});
112
+ try{
113
+ const size=(await handle.stat()).size;
114
+ if(size){const last=Buffer.alloc(1);await handle.read(last,0,1,size-1);if(last[0]!==10)throw failure('会话追加日志末尾存在未完成记录,拒绝继续写入','SESSION_RECORD_INVALID');}
115
+ await handle.writeFile(text+'\n','utf8');await handle.sync();
116
+ }finally{await handle.close();}
117
+ }
118
+ async function readPage(id,{cursor=0,limit=100}={}){
119
+ if(!Number.isSafeInteger(cursor)||cursor<0)throw failure('会话 cursor 必须为非负整数字节位置','SESSION_CURSOR_INVALID');
120
+ if(!Number.isSafeInteger(limit)||limit<1)throw failure('会话 limit 必须为正整数条目数','SESSION_PAGE_LIMIT');
121
+ limit=Math.min(limit,200);await readRecord(id);
122
+ let handle;
123
+ try{handle=await safeFile(location(id,'jsonl'));}
124
+ catch(error){if(error.code!=='ENOENT')throw error;if(cursor!==0)throw failure('会话 cursor 超过记录长度','SESSION_CURSOR_INVALID');return {entries:[],cursor,nextCursor:0,hasMore:false,totalBytes:0};}
125
+ try{
126
+ const totalBytes=(await handle.stat()).size;
127
+ if(cursor>totalBytes)throw failure('会话 cursor 超过记录长度','SESSION_CURSOR_INVALID');
128
+ if(cursor){const previous=Buffer.alloc(1);await handle.read(previous,0,1,cursor-1);if(previous[0]!==10)throw failure('会话 cursor 必须位于完整记录边界','SESSION_CURSOR_INVALID');}
129
+ const buffer=Buffer.alloc(Math.min(maxPageBytes+1,totalBytes-cursor));let readBytes=0;
130
+ while(readBytes<buffer.length){const {bytesRead}=await handle.read(buffer,readBytes,buffer.length-readBytes,cursor+readBytes);if(!bytesRead)break;readBytes+=bytesRead;}
131
+ let offset=0;const entries=[];
132
+ while(offset<readBytes&&entries.length<limit){
133
+ const newline=buffer.indexOf(10,offset);
134
+ if(newline===-1||newline>=readBytes){
135
+ if(readBytes-offset>maxEntryBytes)throw failure('会话单条记录超过读取字节预算','SESSION_ENTRY_LIMIT');
136
+ if(cursor+readBytes<totalBytes&&entries.length)break;
137
+ throw failure('会话追加日志存在未完成记录','SESSION_RECORD_INVALID');
138
+ }
139
+ if(newline-offset>maxEntryBytes)throw failure('会话单条记录超过读取字节预算','SESSION_ENTRY_LIMIT');
140
+ if(newline+1>maxPageBytes)break;
141
+ const entry=parsed(buffer.subarray(offset,newline));
142
+ if(!plain(entry))throw failure('会话追加记录必须为 JSON 对象','SESSION_RECORD_INVALID');
143
+ entries.push(entry);offset=newline+1;
144
+ }
145
+ const nextCursor=cursor+offset;
146
+ return {entries,cursor,nextCursor,hasMore:nextCursor<totalBytes,totalBytes};
147
+ }finally{await handle.close();}
148
+ }
149
+
150
+ return {
151
+ owner,policy:Object.freeze({...policy}),
152
+ async save(snapshot){
153
+ checkId(snapshot?.id);checkSnapshot(snapshot,snapshot.id);
154
+ const text=encoded({...snapshot,sessionOwner:owner},maxBytes,'SESSION_METADATA_LIMIT'),record=JSON.parse(text);
155
+ checkSnapshot(record,record.id);return queue(record.id,Buffer.byteLength(text),()=>saveRecord(record,text));
156
+ },
157
+ async read(id){checkId(id);return queue(id,0,()=>readRecord(id));},
158
+ async list(){
159
+ let entries;
160
+ try{await safeRoot();entries=await readdir(root,{withFileTypes:true});}catch(error){if(error.code==='ENOENT')return [];throw error;}
161
+ const records=[];
162
+ for(const entry of entries){
163
+ if(!entry.isFile()||!entry.name.endsWith('.json'))continue;
164
+ const id=entry.name.slice(0,-5);if(!validId(id))continue;
165
+ try{
166
+ const record=await queue(id,0,()=>readRecord(id));
167
+ records.push({schemaVersion:1,id,sessionOwner:record.sessionOwner,startedAt:record.startedAt,updatedAt:record.updatedAt,...(record.resumedFrom?{resumedFrom:record.resumedFrom}:{}),commandCount:record.commandHistory.length,feedCount:record.feed.length});
168
+ }catch(error){if(error.code==='EACCES'||error.code==='EPERM')throw error;}
169
+ }
170
+ return records.sort((a,b)=>Date.parse(b.updatedAt)-Date.parse(a.updatedAt)||b.id.localeCompare(a.id));
171
+ },
172
+ async append(id,entry){
173
+ checkId(id);if(!plain(entry))throw failure('会话追加记录必须为 JSON 对象','SESSION_RECORD_INVALID');
174
+ const text=encoded(entry,maxEntryBytes,'SESSION_ENTRY_LIMIT');
175
+ if(!plain(JSON.parse(text)))throw failure('会话追加记录必须为 JSON 对象','SESSION_RECORD_INVALID');
176
+ return queue(id,Buffer.byteLength(text)+1,()=>appendRecord(id,text));
177
+ },
178
+ async page(id,options={}){checkId(id);return queue(id,0,()=>readPage(id,options));},
179
+ };
180
+ }
@@ -12,6 +12,7 @@
12
12
  | 导入路径 | 实现位置 |
13
13
  | --- | --- |
14
14
  | `@mytools/fst-platform` | `./src/process.js` |
15
+ | `@mytools/fst-platform/managed-process` | `./src/managed-process.js` |
15
16
  | `@mytools/fst-platform/environments` | `./src/environments.js` |
16
17
  | `@mytools/fst-platform/bundle` | `./src/bundle.js` |
17
18
  | `@mytools/fst-platform/json` | `./src/json.js` |
@@ -37,9 +38,17 @@ node --test tests/modules.test.js tests/process.test.js tests/environments.test.
37
38
 
38
39
  ## 子进程环境
39
40
 
41
+ `createProcessRunner({execute=runProcess,signal,log,audience})` 是内核调用方共用的受管包装,返回签名兼容 `runProcess(file,args,options)` 的函数。每次调用独立生成 `processId`,先写指令日志再执行自定义 onStart,先写输出日志再执行自定义 onOutput;合并调用级与上下文取消信号,不改变底层并发。插件经宿主 `ctx.runProcess` 使用,不能直接导入本入口代替上下文。权限检查由 plugin 负责,本包装不授予权限、不进行命令黑名单拦截。
42
+
43
+ 受管调用可指定 `logPolicy:false` 隐藏自动记录的参数与脚本,或 `{redactArgs:[零起算下标],omitArgs:true,omitScript:true}` 按需选择;实际参数和调用方 onStart 保留原值。有参数被隐藏时脚本也隐藏。无效策略执行前拒绝。该策略不自动识别密钥、不处理插件主动输出及已有日志;平台自动生成的进程启动失败信息也不再拼接 Execa 的完整命令行。
44
+
40
45
  `/shell` 的 `runShell(script,{shell='auto',runProcess,temporaryDir,...processOptions})` 使用唯一临时脚本文件,避免长脚本超过系统命令行长度上限,运行结束后删除本次文件。默认 Windows PowerShell / Linux sh,可选 powershell、pwsh、sh、bash;PowerShell 使用 UTF-8 BOM,其他 Shell 使用无 BOM UTF-8。插件传入 `ctx.runProcess` 与 `temporaryDir:ctx.outputDir`,保留当前代理、取消与日志规则,并兼容只读包目录。`shellInvocation` 保留构造简短命令参数的兼容接口。
41
46
 
47
+ Windows 的 `shell:'auto'` 对单行 `ipconfig` / `ipconfig.exe` 及其字面量参数(如 `ipconfig /all`)直接执行系统目录中的 `ipconfig.exe`,读取当前系统 OEM 代码页后统一解码结果和实时输出。自动适配限于 TextDecoder 支持的 OEM 866、874、932、936、949、950、65001;中文 Windows 的 OEM 936 使用 GBK。代码页探测失败或代码页不受支持(如 437、850)时保留原 Shell 路径。变量、管道、多行、重定向等脚本继续按原 PowerShell 语义执行;复杂脚本中的旧编码与 UTF-8 混合输出没有自动转码。`onStart` 的 `script` 字段保留用户原始指令,直接执行的简单命令同时记录实际程序路径和参数。
48
+
42
49
  `runProcess(file,args,{env,extendEnv=true})` 默认把 `env` 覆盖到宿主环境上。
50
+
51
+ 可选 `onStart({file,args,cwd,script?})` 在程序路径解析后、实际启动前调用并等待完成;回调失败或此时取消不会启动子进程。`args` 使用独立数组,`cwd` 是实际绝对目录,`commandText` 可补充原始 Shell 指令。宿主通过该接口保存过程记录,执行结果与输出编码仍由原有接口返回。
43
52
  当调用方已按动作代理规则构造完整环境时,传 `extendEnv:false`,防止已移除的代理变量被重新继承。
44
53
 
45
54
  缓冲模式由平台按每条输出流的原始字节计算 `maxBuffer`,默认每条流 4 MiB;超限返回 `OUTPUT_LIMIT`。
@@ -6,6 +6,7 @@
6
6
  "main": "src/process.js",
7
7
  "exports": {
8
8
  ".": "./src/process.js",
9
+ "./managed-process": "./src/managed-process.js",
9
10
  "./shell": "./src/shell.js",
10
11
  "./environments": "./src/environments.js",
11
12
  "./bundle": "./src/bundle.js",
@@ -22,13 +23,13 @@
22
23
  ],
23
24
  "license": "MIT",
24
25
  "engines": {
25
- "node": ">=24.15.0"
26
+ "node": "^22.22.2 || >=24.0.0"
26
27
  },
27
28
  "dependencies": {
28
29
  "@mytools/sdk": "0.1.0",
29
30
  "execa": "10.1.0",
30
31
  "tree-kill": "1.2.2",
31
- "undici": "^8.4.1",
32
- "which": "7.0.0"
32
+ "undici": "7.30.0",
33
+ "which": "6.0.1"
33
34
  }
34
35
  }
@@ -0,0 +1,36 @@
1
+ import {randomUUID} from 'node:crypto';
2
+ import {runProcess} from './process.js';
3
+ import {FlowError} from '@mytools/sdk';
4
+
5
+ function invocationFilter(policy,args){
6
+ if(policy===undefined)return value=>value;
7
+ const invalid=()=>{throw new FlowError('logPolicy 必须为 false 或含 redactArgs、omitArgs、omitScript 的有效对象;参数下标从 0 开始且不能越界',{code:'VALIDATION'});};
8
+ if(policy!==false&&(!policy||typeof policy!=='object'||Array.isArray(policy)))invalid();
9
+ if(policy!==false){
10
+ if(Object.keys(policy).some(key=>!['redactArgs','omitArgs','omitScript'].includes(key)))invalid();
11
+ for(const key of ['omitArgs','omitScript'])if(policy[key]!==undefined&&typeof policy[key]!=='boolean')invalid();
12
+ if(policy.redactArgs!==undefined&&(!Array.isArray(policy.redactArgs)||policy.redactArgs.some(index=>!Number.isSafeInteger(index)||index<0||index>=(args?.length??0))))invalid();
13
+ }
14
+ const omitted=policy===false||policy.omitArgs===true,indices=new Set(policy.redactArgs??[]);
15
+ const omitScript=omitted||indices.size>0||policy.omitScript===true;
16
+ return value=>({...value,
17
+ ...(Array.isArray(value.args)?{args:omitted?(value.args.length?['[参数已隐藏]']:[]):value.args.map((arg,index)=>indices.has(index)?'[已隐藏]':arg)}:{}),
18
+ ...(value.script!==undefined&&omitScript?{script:'[原始脚本已隐藏]'}:{}),
19
+ });
20
+ }
21
+
22
+ // 每次调用独立绑定日志和取消信号;共享入口不串行化进程,也不授予额外权限。
23
+ export function createProcessRunner({execute=runProcess,signal,log,audience}={}){
24
+ return (file,args,options={})=>{
25
+ const {logPolicy,...executionOptions}=options,displayInvocation=invocationFilter(logPolicy,args);
26
+ const processId=randomUUID();
27
+ const combined=signal&&options.signal?AbortSignal.any([signal,options.signal]):signal??options.signal;
28
+ return execute(file,args,{...executionOptions,signal:combined,onStart:async invocation=>{
29
+ await log?.('执行程序',displayInvocation(invocation),{kind:'process',processId});
30
+ await options.onStart?.(invocation);
31
+ },onOutput:async({stream,message})=>{
32
+ await log?.(message,undefined,{stream,processId,...(audience?{audience}:{})});
33
+ await options.onOutput?.({stream,message});
34
+ }});
35
+ };
36
+ }
@@ -5,8 +5,10 @@ import { FlowError } from '@mytools/sdk';
5
5
  import path from 'node:path';
6
6
 
7
7
  const stripFinalNewline=text=>text.endsWith('\r\n')?text.slice(0,-2):text.endsWith('\n')?text.slice(0,-1):text;
8
+ // 执行库的校验错误和启动错误都可能包含完整 argv,仅保留安全的错误代码。
9
+ const spawnFailure=(file,code='SPAWN_FAILED')=>new FlowError(`无法启动程序 ${file}:${code};请检查参数格式、执行目录、文件权限及程序依赖`,{code});
8
10
 
9
- export async function runProcess(file,args=[],{cwd,env,extendEnv=true,signal,timeout=30000,maxBuffer=4*1024*1024,encoding='utf8',onOutput,outputMode='buffer',summaryBytes=65536}={}) {
11
+ export async function runProcess(file,args=[],{cwd,env,extendEnv=true,signal,timeout=30000,maxBuffer=4*1024*1024,encoding='utf8',onOutput,onStart,commandText,outputMode='buffer',summaryBytes=65536}={}) {
10
12
  if(!['buffer','stream'].includes(outputMode))throw new TypeError('outputMode 必须为 buffer 或 stream');
11
13
  if(typeof maxBuffer!=='number'||Number.isNaN(maxBuffer)||maxBuffer<0)throw new TypeError('maxBuffer 必须为非负数,可用 Infinity 表示不限制缓冲');
12
14
  const streaming=outputMode==='stream';
@@ -33,9 +35,14 @@ export async function runProcess(file,args=[],{cwd,env,extendEnv=true,signal,tim
33
35
  if(!executable)throw Object.assign(new Error(`not found: ${file}`),{code:'ENOENT'});
34
36
  }
35
37
  catch(cause){throw new FlowError(`未找到程序:${file}`,{code:'ENOENT',details:{executable:file},cause});}
38
+ // 先保存实际程序和参数;记录失败时尚未启动进程,不留下未受管副作用。
39
+ await onStart?.({file:executable,args:[...args],cwd:path.resolve(cwd??process.cwd()),...(commandText!==undefined?{script:commandText}:{})});
40
+ if(signal?.aborted)throw new FlowError('操作已取消',{code:'CANCELLED'});
36
41
  // 平台统一收集原始字节和执行上限;Execa 的超限收集器会提前关闭管道,
37
42
  // 导致持续输出的父进程因 EPIPE 退出,taskkill 尚未遍历就失去父 PID。
38
- const child=execa(executable,args,{cwd,env,extendEnv,reject:false,windowsHide:true,maxBuffer,buffer:false,timeout:0,shell:false,encoding:'buffer',stripFinalNewline:false});
43
+ let child;
44
+ try{child=execa(executable,args,{cwd,env,extendEnv,reject:false,windowsHide:true,maxBuffer,buffer:false,timeout:0,shell:false,encoding:'buffer',stripFinalNewline:false});}
45
+ catch(error){throw spawnFailure(file,error.code);}
39
46
  let reason,killing,outputError,outputFailed=false,outputWrites=Promise.resolve();
40
47
  let markStopped;const stopped=new Promise(resolve=>{markStopped=resolve;});
41
48
  const outputBytes={stdout:0,stderr:0},tails={stdout:'',stderr:''},buffers={stdout:[],stderr:[]};let outputTruncated=false;
@@ -107,7 +114,8 @@ export async function runProcess(file,args=[],{cwd,env,extendEnv=true,signal,tim
107
114
  if(reason==='output-limit')throw new FlowError('程序输出超过上限',{code:'OUTPUT_LIMIT'});
108
115
  if(reason)throw new FlowError(reason==='cancelled'?'操作已取消':'程序运行超时',{code:reason==='cancelled'?'CANCELLED':'TIMEOUT'});
109
116
  if(result.isMaxBuffer)throw new FlowError('程序输出超过上限',{code:'OUTPUT_LIMIT'});
110
- if(result.exitCode===undefined&&result.failed)throw new FlowError(`无法启动程序 ${file}:${result.shortMessage??result.message}`,{code:result.code??'SPAWN_FAILED'});
117
+ // Execa 的短错误包含完整 argv,不能重新写回已由受管入口隐藏的敏感参数。
118
+ if(result.exitCode===undefined&&result.failed)throw spawnFailure(file,result.code);
111
119
  const decode=chunks=>stripFinalNewline(new TextDecoder(decoderEncoding).decode(Buffer.concat(chunks)));
112
120
  if(streaming)return {exitCode:result.exitCode,stdout:stripFinalNewline(tails.stdout),stderr:stripFinalNewline(tails.stderr),outputMode,outputTruncated,outputBytes};
113
121
  return {exitCode:result.exitCode,stdout:decode(buffers.stdout),stderr:decode(buffers.stderr)};
@@ -7,6 +7,8 @@ import {runProcess as executeProcess} from './process.js';
7
7
 
8
8
  const shells=new Set(['auto','powershell','pwsh','sh','bash']);
9
9
  const powerShellArgs=['-NoLogo','-NoProfile','-NonInteractive','-OutputFormat','Text'];
10
+ const windowsOemEncodings=new Map([[866,'ibm866'],[874,'windows-874'],[932,'shift_jis'],[936,'gbk'],[949,'euc-kr'],[950,'big5'],[65001,'utf-8']]);
11
+ let windowsOemCodePage;
10
12
 
11
13
  function selectShell(script,shell,platform){
12
14
  if(typeof script!=='string'||!script.trim()||script.includes('\u0000'))throw new FlowError('命令文本必须是非空字符串,且不能包含 NUL 字符',{code:'VALIDATION'});
@@ -14,6 +16,42 @@ function selectShell(script,shell,platform){
14
16
  return shell==='auto'?(platform==='win32'?'powershell':'sh'):shell;
15
17
  }
16
18
 
19
+ function ipconfigArguments(script){
20
+ // 只解析单行字面量;Shell 运算符、展开、组合引号与特殊引号均留给 PowerShell。
21
+ if(/[\r\n\u0085\u2028\u2029\u2018\u2019\u201c\u201d]/.test(script))return;
22
+ const command=/^\s*ipconfig(?:\.exe)?(?=\s|$)/i.exec(script);
23
+ if(!command)return;
24
+ let remaining=script.slice(command[0].length);const args=[];
25
+ while(remaining.trim()){
26
+ const token=/^\s+(?:'((?:[^']|'')*)'|"([^"`$]*)"|([^\s"'`$;|&<>(){}\[\]#@,]+))(?=\s|$)/.exec(remaining);
27
+ if(!token)return;
28
+ const value=token[1]!==undefined?token[1].replaceAll("''","'"):token[2]??token[3];
29
+ if(value==='--%')return;
30
+ args.push(value);remaining=remaining.slice(token[0].length);
31
+ }
32
+ return args;
33
+ }
34
+
35
+ async function ipconfigEncoding(windowsRoot,{cwd,env,extendEnv,signal,timeout}){
36
+ if(windowsOemCodePage===undefined){
37
+ // GetOEMCP 读取当前系统原生代码页,不修改控制台代码页或依赖用户的区域格式。
38
+ const source=`Add-Type -Namespace Fst -Name NativeCodePage -MemberDefinition '[System.Runtime.InteropServices.DllImport("kernel32.dll")] public static extern uint GetOEMCP();'; [Console]::WriteLine([Fst.NativeCodePage]::GetOEMCP())`;
39
+ const encoded=Buffer.from(source,'utf16le').toString('base64');
40
+ const command=`& ([ScriptBlock]::Create([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('${encoded}'))))`;
41
+ let result;
42
+ try{
43
+ result=await executeProcess(path.join(windowsRoot,'System32','WindowsPowerShell','v1.0','powershell.exe'),[...powerShellArgs,'-Command',command],{cwd,env,extendEnv,signal,timeout,maxBuffer:4096});
44
+ }catch(error){
45
+ if(error.code==='CANCELLED'||error.code==='TIMEOUT')throw error;
46
+ return;
47
+ }
48
+ if(result.exitCode!==0||!/^\d+$/.test(result.stdout.trim()))return;
49
+ windowsOemCodePage=Number(result.stdout.trim());
50
+ }
51
+ // TextDecoder 不支持 OEM 437、850 等代码页;无法准确解码时保留原 Shell 路径。
52
+ return windowsOemEncodings.get(windowsOemCodePage);
53
+ }
54
+
17
55
  function powerShellSource(script){
18
56
  // $? 在脚本最后一条命令后立即读取,避免沿用更早的外部命令退出码。
19
57
  return `[Console]::OutputEncoding = New-Object System.Text.UTF8Encoding($false)
@@ -42,6 +80,13 @@ export function shellInvocation(script,{shell='auto',platform=process.platform}=
42
80
  export async function runShell(script,{shell='auto',runProcess:execute=executeProcess,temporaryDir=tmpdir(),...processOptions}={}){
43
81
  const file=selectShell(script,shell,process.platform),powershell=file==='powershell'||file==='pwsh';
44
82
  if(processOptions.signal?.aborted)throw new FlowError('操作已取消',{code:'CANCELLED'});
83
+ if(process.platform==='win32'&&shell==='auto'){
84
+ const args=ipconfigArguments(script),windowsRoot=process.env.SystemRoot??process.env.windir;
85
+ if(args&&windowsRoot&&path.isAbsolute(windowsRoot)){
86
+ const encoding=processOptions.encoding??await ipconfigEncoding(windowsRoot,processOptions);
87
+ if(encoding)return execute(path.join(windowsRoot,'System32','ipconfig.exe'),args,{...processOptions,encoding,commandText:script});
88
+ }
89
+ }
45
90
  const directory=path.resolve(temporaryDir);
46
91
  await mkdir(directory,{recursive:true});
47
92
  const scriptFile=path.join(directory,`fst-shell-${randomUUID()}.${powershell?'ps1':'sh'}`);
@@ -53,6 +98,6 @@ export async function runShell(script,{shell='auto',runProcess:execute=executePr
53
98
  await handle.writeFile(powershell?'\uFEFF'+powerShellSource(script):script,'utf8');
54
99
  }finally{await handle.close();}
55
100
  const args=powershell?[...powerShellArgs,'-ExecutionPolicy','Bypass','-File',scriptFile]:[scriptFile];
56
- return await execute(file,args,processOptions);
101
+ return await execute(file,args,{...processOptions,commandText:script});
57
102
  }finally{await rm(scriptFile,{force:true});}
58
103
  }
@@ -20,6 +20,10 @@
20
20
 
21
21
  ## 维护与验证
22
22
 
23
+ 动作及命令的上下文 runProcess 使用 platform/managed-process 的共用包装,统一指令、输出关联与取消信号;代理仍由宿主按动作构造。权限预检发生在动作主体之前,不自动提权。共享包装不串行化调用;宿主同进程信任模型不变,开发约束不能替代安全隔离。
24
+
25
+ 动作、动作别名命令及独立交互命令共用 SDK 输入解析。顶层输入字段的 `x-fst.fromConfig` 声明先取实际插件配置,再回退到输入 schema 默认值;显式输入优先。`host.previewInput(target, input)` 返回有效值及来源,管理界面无需读取整份宿主配置。声明由 `validateDeclarations` 检查,插件加载和开发工具使用同一规则。
26
+
23
27
  本模块负责上述职责的实现、文档与回归;跨模块接口调整需要同时检查生产者与消费者。具体维护人员尚未指定。
24
28
 
25
29
  在仓库根目录执行:
@@ -18,7 +18,7 @@
18
18
  ],
19
19
  "license": "MIT",
20
20
  "engines": {
21
- "node": ">=24.15.0"
21
+ "node": "^22.22.2 || >=24.0.0"
22
22
  },
23
23
  "dependencies": {
24
24
  "@mytools/sdk": "0.1.0",
@@ -3,6 +3,7 @@ import {conditionOperators} from '@mytools/sdk/conditions';
3
3
  import {resolveSchemaPath} from '@mytools/sdk/schema-path';
4
4
  import {inside} from '@mytools/fst-platform/environments';
5
5
  import path from 'node:path';
6
+ import {validateInputRules} from '@mytools/sdk/inputs';
6
7
 
7
8
  export const builtinCommands=[
8
9
  ['workflows','选择已有工作流'],['new','新建工作流'],['add','添加插件能力或子工作流'],
@@ -37,6 +38,8 @@ function validatePrivilegeDeclarations(plugin){
37
38
  }
38
39
 
39
40
  export function validateDeclarations(plugin){
41
+ for(const [name,owner] of Object.entries(plugin.actions??{}))validateInputRules(owner?.input,plugin.config,`plugin.actions.${name}.input`);
42
+ for(const [name,owner] of Object.entries(plugin.commands??{}))if(!owner?.action)validateInputRules(owner?.input,plugin.config,`plugin.commands.${name}.input`);
40
43
  for(const [name,action] of Object.entries(plugin.actions??{})){
41
44
  if(!action||typeof action!=='object'||Array.isArray(action))throw new FlowError(`动作 ${name} 的声明必须为对象`,{code:'VALIDATION'});
42
45
  if(action.conditions!==undefined&&(!action.conditions||typeof action.conditions!=='object'||Array.isArray(action.conditions)))throw new FlowError(`动作 ${name} 的 conditions 必须为对象`,{code:'VALIDATION'});
@@ -2,37 +2,32 @@ import { Context } from 'cordis';
2
2
  import semver from 'semver';
3
3
  import { SDK_VERSION, FlowError } from '@mytools/sdk';
4
4
  import { validate, emptyObject } from '@mytools/sdk/schema';
5
+ import {resolveInput} from '@mytools/sdk/inputs';
5
6
  import {validateDeclarations,validateCommands} from './contracts.js';
6
7
  import {prepareEnvironments,platformWarnings} from '@mytools/fst-platform/environments';
7
8
  import path from 'node:path';
8
9
  import {mkdir} from 'node:fs/promises';
9
10
  import {createHash} from 'node:crypto';
10
- import {createRuntime} from './runtime.js';
11
+ import {createRuntime,validateRuntimes,validateRuntimeDeclaration} from './runtime.js';
11
12
  import {pluginError} from '@mytools/sdk/diagnostics';
12
13
  import {validateNetworkPolicy,resolveNetworkPolicy,createHttpClient,buildProcessEnv} from '@mytools/fst-platform/network';
13
14
  import {resolvePrivilegeRequirement,resolvePrivilegePreflight,checkStaticPrivilege,runPrivilegePreflight} from './privileges.js';
15
+ import {createProcessRunner} from '@mytools/fst-platform/managed-process';
14
16
 
15
17
  export async function createHost({ plugins = [], config = {}, services = {}, project,network,environmentOverrides={},runtimeEnabled=true,allowUnknownPrivileges=false } = {}) {
16
18
  const currentNetwork=()=>typeof network==='function'?network():network;
17
19
  validateNetworkPolicy(currentNetwork());
18
20
  const ctx = new Context();
19
21
  const actions = new Map();
20
- const definitions = new Map();
22
+ const definitions = validatePluginDefinitions(plugins);
21
23
  const extensions = new Map();
22
- const serviceNames = new Set();
23
- const commandNames=new Set(),commands=new Map();
24
+ const commands=new Map();
24
25
  function bindContext(context){
25
26
  const {application:ignored,...capabilities}=services;
26
27
  const bound={...capabilities,...context},execute=bound.runProcess;
27
28
  // 面向用户的输出与诊断日志共用持久化通道,只区分默认可见性。
28
29
  bound.print=(message,data)=>Promise.resolve(bound.log?.(message,data,{audience:'user'}));
29
- if(typeof execute==='function')bound.runProcess=(file,args,options={})=>{
30
- const signal=context.signal&&options.signal?AbortSignal.any([context.signal,options.signal]):context.signal??options.signal;
31
- return execute(file,args,{...options,signal,onOutput:async({stream,message})=>{
32
- await bound.log?.(message,undefined,{stream});
33
- await options.onOutput?.({stream,message});
34
- }});
35
- };
30
+ if(typeof execute==='function')bound.runProcess=createProcessRunner({execute,signal:context.signal,log:bound.log});
36
31
  return bound;
37
32
  }
38
33
  async function pluginContext(plugin,action,context){
@@ -48,6 +43,7 @@ export async function createHost({ plugins = [], config = {}, services = {}, pro
48
43
  const stateDir=projectDir&&!readOnly?path.join(projectDir,'.flow','plugin-state',createHash('sha256').update(plugin.id).digest('hex')):undefined;
49
44
  if(stateDir)await mkdir(stateDir,{recursive:true});
50
45
  for(const message of platformWarnings(plugin))await bound.log?.(message,{code:'PLATFORM_MISMATCH'},{audience:'user'});
46
+ if(plugin.root)await bound.log?.('插件文件目录',{plugin:plugin.id,directory:plugin.root},{kind:'source'});
51
47
  const environments=await prepareEnvironments(plugin,action,environmentOverrides[plugin.id],{cwd:projectDir??process.cwd()});
52
48
  context.signal?.throwIfAborted();
53
49
  const policy=context.networkPolicy??currentNetwork();
@@ -75,26 +71,8 @@ export async function createHost({ plugins = [], config = {}, services = {}, pro
75
71
  if(result.status==='unknown')await context.log?.('权限状态未确认,按本次选择继续运行',{plugin:plugin.id,action:actionName,reason:result.reason},{audience:'user'});
76
72
  return requirement;
77
73
  }
78
- for (const entry of plugins) {
79
- const plugin = entry.plugin ?? entry;
80
- validateDeclarations(plugin);validateCommands(plugin,commandNames);
81
- if (!plugin.id || definitions.has(plugin.id)) throw new FlowError(`插件标识缺失或重复:${plugin.id}`, {code:'VALIDATION'});
82
- if (!semver.satisfies(SDK_VERSION, plugin.sdk ?? '^0.1.0')) throw new FlowError(`插件 ${plugin.id} 与 SDK ${SDK_VERSION} 不兼容`, {code:'VALIDATION'});
83
- for(const [name,action] of Object.entries(plugin.actions??{})){
84
- if(typeof action?.run!=='function')throw new FlowError(`动作 ${plugin.id}:${name} 缺少执行函数`);
85
- }
86
- for(const [name,extension] of Object.entries(plugin.services??{})){
87
- if(serviceNames.has(name))throw new FlowError(`服务重复:${name}`);
88
- if(typeof extension!=='function')throw new FlowError(`服务 ${name} 缺少执行函数`);
89
- serviceNames.add(name);
90
- }
91
- definitions.set(plugin.id, {...plugin, root:entry.root});
92
- }
93
74
  const settingsById=new Map();
94
75
  for (const plugin of definitions.values()) {
95
- for (const [id, range] of Object.entries(plugin.dependencies ?? {})) {
96
- if (!definitions.has(id) || !semver.satisfies(definitions.get(id).version,range)) throw new FlowError(`插件 ${plugin.id} 缺少兼容依赖 ${id}@${range}`,{code:'VALIDATION'});
97
- }
98
76
  const settings = validate(plugin.config, config[plugin.id] ?? {}, `${plugin.id} 配置`);
99
77
  settingsById.set(plugin.id,settings);
100
78
  }
@@ -176,6 +154,12 @@ export async function createHost({ plugins = [], config = {}, services = {}, pro
176
154
  }
177
155
  },
178
156
  commands(){assertReadable();return [...commands.values()].map(({run,preflight,config,...metadata})=>structuredClone(metadata));},
157
+ previewInput(target,input={}){
158
+ assertReadable();
159
+ const owner=target.startsWith('/')?commands.get(target.slice(1)):actions.get(target);
160
+ if(!owner)throw new FlowError(`参数目标不存在:${target}`,{code:'VALIDATION'});
161
+ return resolveInput(owner.input??emptyObject,input,owner.config,{check:false,label:`${target} 输入`});
162
+ },
179
163
  async invokeCommand(name,input,context={}){
180
164
  assertHealthy();
181
165
  const command=commands.get(name);if(!command)throw new FlowError(`命令不存在:/${name}`);
@@ -185,7 +169,7 @@ export async function createHost({ plugins = [], config = {}, services = {}, pro
185
169
  try{
186
170
  const getService=runtime.bindServices(plugin.id);
187
171
  context.signal?.throwIfAborted();
188
- const checked=validate(command.input??emptyObject,input,`/${name} 输入`);
172
+ const checked=resolveInput(command.input??emptyObject,input,command.config,{label:`/${name} 输入`}).value;
189
173
  const bound=await pluginContext(plugin,undefined,context);
190
174
  let result;
191
175
  try{
@@ -204,7 +188,7 @@ export async function createHost({ plugins = [], config = {}, services = {}, pro
204
188
  try{
205
189
  const getService=runtime.bindServices(action.plugin);
206
190
  context.signal?.throwIfAborted();
207
- const checked=validate(action.input ?? emptyObject,input,`${id} 输入`);
191
+ const checked=resolveInput(action.input??emptyObject,input,action.config,{label:`${id} 输入`}).value;
208
192
  const plugin=definitions.get(action.plugin),bound=await pluginContext(plugin,action,context);
209
193
  let result;
210
194
  try{
@@ -233,3 +217,42 @@ export async function createHost({ plugins = [], config = {}, services = {}, pro
233
217
  close:()=>runtime.close(),
234
218
  };
235
219
  }
220
+
221
+ // 单插件契约检查不依赖其他插件,供启动恢复路径精确归属故障。
222
+ export function validatePluginDefinition(entry){
223
+ const plugin=entry?.plugin??entry;
224
+ if(!plugin||typeof plugin!=='object'||Array.isArray(plugin)||typeof plugin.id!=='string'||!plugin.id)throw new FlowError('插件默认导出必须是包含 id 的对象',{code:'VALIDATION'});
225
+ validateDeclarations(plugin);validateCommands(plugin,new Set());
226
+ if(!semver.satisfies(SDK_VERSION,plugin.sdk??'^0.1.0'))throw new FlowError(`插件 ${plugin.id} 与 SDK ${SDK_VERSION} 不兼容`,{code:'VALIDATION'});
227
+ for(const [name,action] of Object.entries(plugin.actions??{}))if(typeof action?.run!=='function')throw new FlowError(`动作 ${plugin.id}:${name} 缺少执行函数`,{code:'VALIDATION'});
228
+ for(const [name,extension] of Object.entries(plugin.services??{}))if(typeof extension!=='function')throw new FlowError(`服务 ${name} 缺少执行函数`,{code:'VALIDATION'});
229
+ validateRuntimeDeclaration(plugin,new Context());
230
+ return plugin;
231
+ }
232
+
233
+ // 恢复启动只豁免已确认故障的节点;其他可确定的声明和依赖错误仍明确拒绝。
234
+ export function validatePluginDefinitions(entries,{unavailable=new Set(),blocked=new Set()}={}){
235
+ const definitions=new Map(),commandNames=new Set(),serviceNames=new Set();
236
+ for(const entry of entries){
237
+ const plugin=entry.plugin??entry;
238
+ if(!plugin.id||definitions.has(plugin.id))throw new FlowError(`插件标识缺失或重复:${plugin.id}`,{code:'VALIDATION'});
239
+ if(unavailable.has(plugin.id)){definitions.set(plugin.id,{...plugin,root:entry.root});continue;}
240
+ validatePluginDefinition(entry);validateCommands(plugin,commandNames);
241
+ for(const name of Object.keys(plugin.services??{})){
242
+ if(serviceNames.has(name))throw new FlowError(`服务重复:${name}`,{code:'VALIDATION'});
243
+ serviceNames.add(name);
244
+ }
245
+ definitions.set(plugin.id,{...plugin,root:entry.root});
246
+ }
247
+ for(const plugin of definitions.values()){
248
+ // 此节点已隔离且不会执行;它的损坏依赖不能阻断其他健康插件恢复。
249
+ if(unavailable.has(plugin.id))continue;
250
+ for(const [id,range] of Object.entries(plugin.dependencies??{})){
251
+ // 无法读取目标版本时保留恢复入口;已知版本仍须满足健康消费者的声明。
252
+ if(unavailable.has(id)&&!semver.valid(definitions.get(id)?.version))continue;
253
+ if(!definitions.has(id)||!semver.satisfies(definitions.get(id).version,range))throw new FlowError(`插件 ${plugin.id} 缺少兼容依赖 ${id}@${range}`,{code:'VALIDATION'});
254
+ }
255
+ }
256
+ validateRuntimes(new Map([...definitions].filter(([id])=>!unavailable.has(id))),new Context(),{blocked});
257
+ return definitions;
258
+ }