@yanglaofish/fishtools 0.4.0 → 0.5.1

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 (262) hide show
  1. package/README.md +33 -5
  2. package/bin/fst.js +1 -1
  3. package/manual/README.md +33 -5
  4. package/manual/docs/deployment.md +3 -3
  5. package/manual/docs/kernel-generation.md +97 -0
  6. package/manual/docs/modules.md +57 -0
  7. package/manual/docs/plugin-development.md +120 -10
  8. package/manual/docs/releases.md +24 -0
  9. package/manual/docs/research/2026-10-11-plugin-kernel-capabilities.md +6 -6
  10. package/manual/docs/roadmap.md +14 -3
  11. package/manual/docs/superpowers/plans/2026-10-09-workflow-mvp.md +5 -5
  12. package/manual/docs/superpowers/plans/2026-10-11-public-plugin-fixes.md +2 -2
  13. package/manual/docs/superpowers/plans/2026-10-12-kernel-generation.md +22 -0
  14. package/manual/docs/superpowers/plans/2026-10-12-modular-kernel.md +40 -0
  15. package/manual/docs/superpowers/reviews/2026-10-12-kernel-generation-review.md +27 -0
  16. package/manual/docs/superpowers/reviews/2026-10-12-modular-kernel-review.md +32 -0
  17. package/manual/docs/superpowers/reviews/2026-10-13-0.5.0-followup-review.md +67 -0
  18. package/manual/docs/superpowers/reviews/2026-10-13-kernel-runtime-release-review.md +19 -0
  19. package/manual/docs/superpowers/specs/2026-10-12-action-network-policy-design.md +52 -0
  20. package/manual/docs/superpowers/specs/2026-10-12-kernel-generation-design.md +38 -0
  21. package/manual/docs/superpowers/specs/2026-10-12-modular-kernel-design.md +70 -0
  22. package/manual/docs/superpowers/specs/2026-10-12-plugin-readiness-design.md +21 -0
  23. package/manual/docs/superpowers/specs/2026-10-12-runtime-maintenance-granularity-design.md +35 -0
  24. package/manual/docs/superpowers/specs/2026-10-12-workflow-variation-design.md +19 -0
  25. package/manual/docs/verification.md +55 -2
  26. package/manual/packages/core/README.md +44 -0
  27. package/manual/packages/core/package.json +38 -0
  28. package/manual/packages/core/src/application.js +251 -85
  29. package/manual/packages/core/src/bundle.js +2 -0
  30. package/manual/packages/core/src/development-watch-worker.js +69 -0
  31. package/manual/packages/core/src/development.js +146 -0
  32. package/manual/packages/core/src/environments.js +2 -0
  33. package/manual/packages/core/src/export-snapshot.js +42 -0
  34. package/manual/packages/core/src/plugin-update.js +108 -0
  35. package/manual/packages/core/src/process.js +2 -0
  36. package/manual/packages/core/src/resources.js +31 -0
  37. package/manual/packages/core/src/version.js +2 -0
  38. package/manual/packages/fst-cli/LICENSE +21 -0
  39. package/manual/packages/fst-cli/README.md +59 -0
  40. package/{node_modules/@mytools/core → manual/packages/fst-cli}/bin/fst.js +55 -23
  41. package/manual/packages/fst-cli/package.json +50 -0
  42. package/manual/packages/fst-cli/src/development.js +53 -0
  43. package/{node_modules/@mytools/core → manual/packages/fst-cli}/src/terminal/model.js +1 -1
  44. package/{node_modules/@mytools/core → manual/packages/fst-cli}/src/terminal/navigation.js +1 -1
  45. package/{node_modules/@mytools/core → manual/packages/fst-cli}/src/terminal/presentation.js +9 -1
  46. package/manual/packages/fst-cli/src/terminal/run-feed.js +119 -0
  47. package/{node_modules/@mytools/core → manual/packages/fst-cli}/src/terminal/run-viewer.js +9 -7
  48. package/{node_modules/@mytools/core → manual/packages/fst-cli}/src/terminal/schema.js +1 -1
  49. package/manual/packages/{core → fst-cli}/src/terminal/session.js +137 -9
  50. package/manual/packages/{core → fst-cli}/src/terminal/view.js +20 -3
  51. package/{node_modules/@mytools/core → manual/packages/fst-cli}/src/terminal/workflow-menu.js +17 -2
  52. package/manual/packages/fst-devtools/LICENSE +21 -0
  53. package/manual/packages/fst-devtools/README.md +28 -0
  54. package/manual/packages/fst-devtools/package.json +29 -0
  55. package/{node_modules/@mytools/core → manual/packages/fst-devtools}/src/documentation.js +3 -1
  56. package/manual/packages/fst-devtools/src/plugin-quality.js +136 -0
  57. package/{node_modules/@mytools/core → manual/packages/fst-devtools}/src/plugin-tools.js +24 -5
  58. package/manual/packages/fst-logs/LICENSE +21 -0
  59. package/manual/packages/fst-logs/README.md +67 -0
  60. package/manual/packages/fst-logs/package.json +26 -0
  61. package/manual/packages/fst-logs/src/log-bounds.js +91 -0
  62. package/manual/packages/fst-logs/src/run-logs.js +224 -0
  63. package/manual/packages/fst-logs/src/run-preview.js +18 -0
  64. package/manual/packages/fst-logs/src/step-summaries.js +28 -0
  65. package/manual/packages/fst-platform/LICENSE +21 -0
  66. package/manual/packages/fst-platform/README.md +73 -0
  67. package/manual/packages/fst-platform/package.json +33 -0
  68. package/manual/packages/fst-platform/src/bundle.js +17 -0
  69. package/manual/packages/fst-platform/src/environments.js +67 -0
  70. package/manual/packages/fst-platform/src/file-probe-engine.js +183 -0
  71. package/manual/packages/fst-platform/src/file-probe-worker.js +43 -0
  72. package/manual/packages/fst-platform/src/file-probe.js +6 -0
  73. package/manual/packages/fst-platform/src/json.js +5 -0
  74. package/manual/packages/fst-platform/src/network.js +199 -0
  75. package/manual/packages/fst-platform/src/npm.js +11 -0
  76. package/manual/packages/fst-platform/src/process.js +110 -0
  77. package/manual/packages/fst-plugin/LICENSE +21 -0
  78. package/manual/packages/fst-plugin/README.md +29 -0
  79. package/manual/packages/fst-plugin/package.json +29 -0
  80. package/{node_modules/@mytools/core → manual/packages/fst-plugin}/src/contracts.js +30 -3
  81. package/manual/packages/fst-plugin/src/host.js +235 -0
  82. package/manual/packages/fst-plugin/src/loader.js +21 -0
  83. package/manual/packages/fst-plugin/src/privileges.js +91 -0
  84. package/{node_modules/@mytools/core → manual/packages/fst-plugin}/src/runtime.js +27 -8
  85. package/manual/packages/fst-workflow/LICENSE +21 -0
  86. package/manual/packages/fst-workflow/README.md +28 -0
  87. package/manual/packages/fst-workflow/package.json +24 -0
  88. package/{node_modules/@mytools/core → manual/packages/fst-workflow}/src/control.js +3 -2
  89. package/manual/packages/{core → fst-workflow}/src/engine.js +2 -2
  90. package/manual/packages/fst-workspace/LICENSE +21 -0
  91. package/manual/packages/fst-workspace/README.md +32 -0
  92. package/manual/packages/fst-workspace/package.json +34 -0
  93. package/{node_modules/@mytools/core → manual/packages/fst-workspace}/src/bundle-workspace.js +1 -1
  94. package/manual/packages/fst-workspace/src/index.js +3 -0
  95. package/{node_modules/@mytools/core → manual/packages/fst-workspace}/src/plugins.js +6 -36
  96. package/{node_modules/@mytools/core → manual/packages/fst-workspace}/src/workflows.js +40 -7
  97. package/manual/packages/pack/LICENSE +21 -0
  98. package/manual/packages/pack/README.md +31 -0
  99. package/manual/packages/pack/archive.js +15 -0
  100. package/manual/packages/pack/dependencies.js +105 -0
  101. package/manual/packages/pack/environments.js +50 -0
  102. package/manual/packages/pack/index.js +103 -0
  103. package/manual/packages/pack/package.json +29 -0
  104. package/manual/packages/pack/runtime.js +61 -0
  105. package/manual/packages/sdk/README.md +31 -0
  106. package/manual/packages/sdk/conditions.js +1 -0
  107. package/manual/packages/sdk/package.json +23 -1
  108. package/manual/plugins/web/README.md +29 -0
  109. package/manual/tests/application.test.js +6 -4
  110. package/node_modules/@mytools/core/README.md +44 -0
  111. package/node_modules/@mytools/core/package.json +17 -17
  112. package/node_modules/@mytools/core/src/application.js +251 -85
  113. package/node_modules/@mytools/core/src/bundle.js +2 -17
  114. package/node_modules/@mytools/core/src/development-watch-worker.js +69 -0
  115. package/node_modules/@mytools/core/src/development.js +146 -0
  116. package/node_modules/@mytools/core/src/environments.js +2 -67
  117. package/node_modules/@mytools/core/src/export-snapshot.js +42 -0
  118. package/node_modules/@mytools/core/src/plugin-update.js +108 -0
  119. package/node_modules/@mytools/core/src/process.js +2 -80
  120. package/node_modules/@mytools/core/src/version.js +1 -1
  121. package/node_modules/@mytools/fst-cli/LICENSE +21 -0
  122. package/node_modules/@mytools/fst-cli/README.md +59 -0
  123. package/node_modules/@mytools/fst-cli/bin/fst.js +124 -0
  124. package/node_modules/@mytools/fst-cli/package.json +50 -0
  125. package/node_modules/@mytools/fst-cli/src/cli-run.js +12 -0
  126. package/node_modules/@mytools/fst-cli/src/development.js +53 -0
  127. package/node_modules/@mytools/fst-cli/src/terminal/conditions.js +32 -0
  128. package/node_modules/@mytools/fst-cli/src/terminal/log-viewer.js +45 -0
  129. package/node_modules/@mytools/fst-cli/src/terminal/model.js +104 -0
  130. package/node_modules/@mytools/fst-cli/src/terminal/navigation.js +17 -0
  131. package/node_modules/@mytools/fst-cli/src/terminal/presentation.js +50 -0
  132. package/node_modules/@mytools/fst-cli/src/terminal/run-feed.js +119 -0
  133. package/node_modules/@mytools/fst-cli/src/terminal/run-presentation.js +60 -0
  134. package/node_modules/@mytools/fst-cli/src/terminal/run-viewer.js +106 -0
  135. package/node_modules/@mytools/fst-cli/src/terminal/schema.js +52 -0
  136. package/node_modules/@mytools/{core → fst-cli}/src/terminal/session.js +137 -9
  137. package/node_modules/@mytools/fst-cli/src/terminal/theme.js +29 -0
  138. package/node_modules/@mytools/{core → fst-cli}/src/terminal/view.js +20 -3
  139. package/node_modules/@mytools/fst-cli/src/terminal/workflow-menu.js +65 -0
  140. package/node_modules/@mytools/fst-devtools/LICENSE +21 -0
  141. package/node_modules/@mytools/fst-devtools/README.md +28 -0
  142. package/node_modules/@mytools/fst-devtools/package.json +29 -0
  143. package/node_modules/@mytools/fst-devtools/src/documentation.js +67 -0
  144. package/node_modules/@mytools/fst-devtools/src/plugin-quality.js +136 -0
  145. package/node_modules/@mytools/fst-devtools/src/plugin-tools.js +152 -0
  146. package/node_modules/@mytools/fst-logs/LICENSE +21 -0
  147. package/node_modules/@mytools/fst-logs/README.md +67 -0
  148. package/node_modules/@mytools/fst-logs/package.json +26 -0
  149. package/node_modules/@mytools/fst-logs/src/log-bounds.js +91 -0
  150. package/node_modules/@mytools/fst-logs/src/markdown-log.js +55 -0
  151. package/node_modules/@mytools/fst-logs/src/run-logs.js +224 -0
  152. package/node_modules/@mytools/fst-logs/src/run-preview.js +18 -0
  153. package/node_modules/@mytools/fst-logs/src/step-summaries.js +28 -0
  154. package/node_modules/@mytools/fst-platform/LICENSE +21 -0
  155. package/node_modules/@mytools/fst-platform/README.md +73 -0
  156. package/node_modules/@mytools/fst-platform/package.json +33 -0
  157. package/node_modules/@mytools/fst-platform/src/bundle.js +17 -0
  158. package/node_modules/@mytools/fst-platform/src/environments.js +67 -0
  159. package/node_modules/@mytools/fst-platform/src/file-probe-engine.js +183 -0
  160. package/node_modules/@mytools/fst-platform/src/file-probe-worker.js +43 -0
  161. package/node_modules/@mytools/fst-platform/src/file-probe.js +6 -0
  162. package/node_modules/@mytools/fst-platform/src/json.js +5 -0
  163. package/node_modules/@mytools/fst-platform/src/network.js +199 -0
  164. package/node_modules/@mytools/fst-platform/src/npm.js +11 -0
  165. package/node_modules/@mytools/fst-platform/src/process.js +110 -0
  166. package/node_modules/@mytools/fst-plugin/LICENSE +21 -0
  167. package/node_modules/@mytools/fst-plugin/README.md +29 -0
  168. package/node_modules/@mytools/fst-plugin/package.json +29 -0
  169. package/node_modules/@mytools/fst-plugin/src/contracts.js +86 -0
  170. package/node_modules/@mytools/fst-plugin/src/host.js +235 -0
  171. package/node_modules/@mytools/fst-plugin/src/loader.js +21 -0
  172. package/node_modules/@mytools/fst-plugin/src/privileges.js +91 -0
  173. package/{manual/packages/core → node_modules/@mytools/fst-plugin}/src/runtime.js +27 -8
  174. package/node_modules/@mytools/fst-workflow/LICENSE +21 -0
  175. package/node_modules/@mytools/fst-workflow/README.md +28 -0
  176. package/node_modules/@mytools/fst-workflow/package.json +24 -0
  177. package/node_modules/@mytools/fst-workflow/src/control.js +64 -0
  178. package/node_modules/@mytools/{core → fst-workflow}/src/engine.js +2 -2
  179. package/node_modules/@mytools/fst-workspace/LICENSE +21 -0
  180. package/node_modules/@mytools/fst-workspace/README.md +32 -0
  181. package/node_modules/@mytools/fst-workspace/package.json +34 -0
  182. package/node_modules/@mytools/fst-workspace/src/bundle-workspace.js +39 -0
  183. package/node_modules/@mytools/fst-workspace/src/index.js +3 -0
  184. package/node_modules/@mytools/fst-workspace/src/plugin-installations.js +84 -0
  185. package/node_modules/@mytools/fst-workspace/src/plugins.js +35 -0
  186. package/node_modules/@mytools/fst-workspace/src/project.js +29 -0
  187. package/node_modules/@mytools/fst-workspace/src/workflows.js +150 -0
  188. package/node_modules/@mytools/fst-workspace/templates/control-demo.yaml +47 -0
  189. package/node_modules/@mytools/fst-workspace/templates/hello.yaml +35 -0
  190. package/node_modules/@mytools/fst-workspace/templates/python-check.yaml +26 -0
  191. package/node_modules/@mytools/fst-workspace/templates/system-check.yaml +11 -0
  192. package/node_modules/@mytools/pack/README.md +31 -0
  193. package/node_modules/@mytools/pack/dependencies.js +7 -2
  194. package/node_modules/@mytools/pack/environments.js +1 -1
  195. package/node_modules/@mytools/pack/index.js +33 -25
  196. package/node_modules/@mytools/pack/package.json +29 -1
  197. package/node_modules/@mytools/sdk/README.md +31 -0
  198. package/node_modules/@mytools/sdk/conditions.js +1 -0
  199. package/node_modules/@mytools/sdk/diagnostics.js +27 -0
  200. package/node_modules/@mytools/sdk/package.json +23 -1
  201. package/node_modules/@mytools/sdk/schema-path.js +31 -0
  202. package/node_modules/@mytools/sdk/validation.js +78 -0
  203. package/node_modules/@mytools/web/README.md +29 -0
  204. package/node_modules/@mytools/web/package.json +7 -0
  205. package/node_modules/@mytools/web/public/THIRD_PARTY_NOTICES.txt +1440 -1240
  206. package/node_modules/@mytools/web/public/assets/index-BaVzHycP.js +70 -0
  207. package/node_modules/@mytools/web/public/assets/index-DA8Ae92t.css +1 -0
  208. package/node_modules/@mytools/web/public/index.html +2 -2
  209. package/node_modules/@mytools/web/server.js +24 -17
  210. package/node_modules/@mytools/web/src/model.js +84 -0
  211. package/node_modules/acorn/CHANGELOG.md +1012 -0
  212. package/node_modules/acorn/LICENSE +21 -0
  213. package/node_modules/acorn/README.md +309 -0
  214. package/node_modules/acorn/bin/acorn +4 -0
  215. package/node_modules/acorn/dist/acorn.d.mts +897 -0
  216. package/node_modules/acorn/dist/acorn.d.ts +897 -0
  217. package/node_modules/acorn/dist/acorn.js +6370 -0
  218. package/node_modules/acorn/dist/acorn.mjs +6341 -0
  219. package/node_modules/acorn/dist/bin.js +90 -0
  220. package/node_modules/acorn/package.json +50 -0
  221. package/node_modules/{minipass-flush/node_modules/minipass → tar}/node_modules/yallist/README.md +8 -7
  222. package/node_modules/tar/node_modules/yallist/package.json +68 -0
  223. package/node_modules/yallist/README.md +7 -8
  224. package/node_modules/yallist/package.json +12 -51
  225. package/package.json +131 -115
  226. package/manual/packages/core/src/host.js +0 -139
  227. package/manual/packages/core/src/terminal/run-feed.js +0 -78
  228. package/node_modules/@mytools/core/src/host.js +0 -139
  229. package/node_modules/@mytools/core/src/run-logs.js +0 -63
  230. package/node_modules/@mytools/core/src/terminal/run-feed.js +0 -78
  231. package/node_modules/@mytools/web/public/assets/index-DT2B4tMV.js +0 -70
  232. package/node_modules/@mytools/web/public/assets/index-vuZvrUTT.css +0 -1
  233. package/node_modules/minipass-flush/node_modules/minipass/node_modules/yallist/package.json +0 -29
  234. /package/{node_modules/@mytools/core → manual/packages/fst-cli}/src/cli-run.js +0 -0
  235. /package/{node_modules/@mytools/core → manual/packages/fst-cli}/src/terminal/conditions.js +0 -0
  236. /package/{node_modules/@mytools/core → manual/packages/fst-cli}/src/terminal/log-viewer.js +0 -0
  237. /package/{node_modules/@mytools/core → manual/packages/fst-cli}/src/terminal/run-presentation.js +0 -0
  238. /package/{node_modules/@mytools/core → manual/packages/fst-cli}/src/terminal/theme.js +0 -0
  239. /package/{node_modules/@mytools/core → manual/packages/fst-logs}/src/markdown-log.js +0 -0
  240. /package/{node_modules/@mytools/core → manual/packages/fst-workspace}/src/plugin-installations.js +0 -0
  241. /package/{node_modules/@mytools/core → manual/packages/fst-workspace}/src/project.js +0 -0
  242. /package/{node_modules/@mytools/core → manual/packages/fst-workspace}/templates/control-demo.yaml +0 -0
  243. /package/{node_modules/@mytools/core → manual/packages/fst-workspace}/templates/hello.yaml +0 -0
  244. /package/{node_modules/@mytools/core → manual/packages/fst-workspace}/templates/python-check.yaml +0 -0
  245. /package/{node_modules/@mytools/core → manual/packages/fst-workspace}/templates/system-check.yaml +0 -0
  246. /package/{node_modules/@mytools/core/src → manual/packages/sdk}/diagnostics.js +0 -0
  247. /package/{node_modules/@mytools/core/src → manual/packages/sdk}/schema-path.js +0 -0
  248. /package/{node_modules/@mytools/core/src → manual/packages/sdk}/validation.js +0 -0
  249. /package/node_modules/{yallist → tar/node_modules/yallist}/LICENSE.md +0 -0
  250. /package/node_modules/{yallist → tar/node_modules/yallist}/dist/commonjs/index.d.ts +0 -0
  251. /package/node_modules/{yallist → tar/node_modules/yallist}/dist/commonjs/index.d.ts.map +0 -0
  252. /package/node_modules/{yallist → tar/node_modules/yallist}/dist/commonjs/index.js +0 -0
  253. /package/node_modules/{yallist → tar/node_modules/yallist}/dist/commonjs/index.js.map +0 -0
  254. /package/node_modules/{yallist → tar/node_modules/yallist}/dist/commonjs/package.json +0 -0
  255. /package/node_modules/{yallist → tar/node_modules/yallist}/dist/esm/index.d.ts +0 -0
  256. /package/node_modules/{yallist → tar/node_modules/yallist}/dist/esm/index.d.ts.map +0 -0
  257. /package/node_modules/{yallist → tar/node_modules/yallist}/dist/esm/index.js +0 -0
  258. /package/node_modules/{yallist → tar/node_modules/yallist}/dist/esm/index.js.map +0 -0
  259. /package/node_modules/{yallist → tar/node_modules/yallist}/dist/esm/package.json +0 -0
  260. /package/node_modules/{minipass-flush/node_modules/minipass/node_modules/yallist → yallist}/LICENSE +0 -0
  261. /package/node_modules/{minipass-flush/node_modules/minipass/node_modules/yallist → yallist}/iterator.js +0 -0
  262. /package/node_modules/{minipass-flush/node_modules/minipass/node_modules/yallist → yallist}/yallist.js +0 -0
@@ -0,0 +1,35 @@
1
+ # Runtime 维护粒度设计
2
+
3
+ ## 目标与问题核实
4
+
5
+ [issue #2](https://github.com/yanglaofish/Fishtools/issues/2) 报告:只要项目里存在一个声明 `runtime` 的插件,其他插件的安装、移除或配置也要求维护模式,即使这个 runtime 只发布无状态的计算服务。该反馈针对 0.3.0。当前独立 CLI 的 `plugin add/remove/link/configure` 已以管理模式启动,原复现命令不再受常驻 runtime 门禁影响;常驻 TUI/Web 的应用仍在 `assertMutable()` 中按 `host.hasRuntime` 全局拦截,问题继续存在。
6
+
7
+ 当前每次插件变更和配置变更都创建完整的新宿主,激活其全部 runtime 后才关闭旧宿主。维护门禁的真实用途是防止独占连接、后台任务等资源同时出现两份。是否声明 `runtime` 不能判断这件事;数 Cordis 句柄也不能判断插件私自创建的连接。用户需要的是:修改无关插件不停止已有服务;确实会影响有状态插件时,准确列出受影响者并安全更新。
8
+
9
+ ## 方案选择
10
+
11
+ | 方案 | 评价 |
12
+ | --- | --- |
13
+ | 增加 `gate:false`,继续整体重建宿主 | 能放行作者确认安全的纯计算服务;项目存在其他独占 runtime 时,修改无关插件依然被全局挡住;字段没有解释安全承诺。 |
14
+ | 每次先停整个旧宿主,再启动整个新宿主 | 不会双开独占资源,但任何小改动都会中断所有服务;失败后恢复也要重启所有服务。 |
15
+ | 按插件依赖计算影响范围,在同一宿主中仅替换相关作用域 | 推荐。无关服务保持运行;变更确实触及的服务依其更新策略停止、启动和恢复。实施复杂度集中在 `fst-plugin` 的生命周期模块及 `core` 的更新协调。 |
16
+
17
+ ## 作者声明与影响范围
18
+
19
+ `runtime.updatePolicy` 新增 `automatic` 或 `maintenance`,缺省 `maintenance`。`automatic` 表示作者确认:在没有在途工作流时,宿主可以短暂撤销并重建该 runtime 作用域,服务值和内存状态允许重建;纯计算服务通常适用。`maintenance` 表示更新前须告知操作者并得到该次操作的明确选择。这个字段表达生命周期承诺,不根据 `ctx.set`、dispose 回调数量或外部句柄数量自动推断。插件声明校验、脚手架和文档说明其含义;旧插件行为保持保守。
20
+
21
+ 更新规划器比较旧定义、候选定义及配置,得到新增、移除、替换和配置变化的插件 ID,再沿包 `dependencies` 与 runtime `inject/provides` 关系找传递消费者。源目录或安装批次变化本身不表示每个插件都需要重启;若安装过程中原有插件版本或依赖解析结果变化,该插件必须进入影响集合。`--watch` 的整进程开发重启仍由现有监督器处理。规划结果列出受影响插件、原因、更新策略及当前活动 Web 提供者。
22
+
23
+ 修改完全无关的动作插件时,已有 runtime 作用域、连接和服务对象保持原实例。若已有工作流或插件命令正在运行,更新仍立即拒绝并提示稍后重试;进入更新时冻结新运行。影响集合中的 runtime 若全部为 `automatic`,更新协调器按消费者先、提供者后撤销旧作用域,再按依赖顺序启动新作用域。若包含 `maintenance`,TUI/Web 显示具体插件和会中断的服务,要求对本次操作选择“临时停止这些插件并继续”;拒绝则不切换。活动 Web 的提供者或依赖者在影响集合内时,仍须先停止该 Web;无关 Web 保持可用。原有全局 `setMaintenance(boolean)` 和 CLI `--maintenance` 保留兼容,TUI 优先使用本次操作的定向维护流程。
24
+
25
+ ## 更新事务与失败处理
26
+
27
+ 候选安装批次先落到新目录;使用不激活 runtime 的候选宿主验证插件身份、配置、依赖和服务图。通过验证且满足影响范围约束后,才对当前宿主调用定向作用域更新。`fst-plugin` 负责动态注册/撤销作用域、同步动作和命令目录,并等待异步 dispose;`core` 负责冻结运行、持有项目/安装锁、调用更新和提交项目配置。锁定的 Cordis 3.18.1 已可在 `ctx.start()` 后动态注册插件并激活 ready 回调;实施时仍需覆盖服务注入、撤销与重新激活的集成测试。
28
+
29
+ 新作用域全部就绪后,才原子写入新的安装状态或配置。若激活或落盘失败,先撤销新作用域,再用仍保留的旧定义和配置恢复影响集合;恢复失败则把应用标为不可运行并报告原始错误与恢复错误,不能把半更新状态当作成功。保持未受影响作用域所引用的旧安装批次租约,直到这些作用域被替换或应用关闭;安装批次回收继续尊重租约。候选失败留下的未引用批次由现有预览、备份、回收流程处理。任何更新都不删除工作流、日志或插件状态文件。
30
+
31
+ ## 界面与验收
32
+
33
+ TUI 在变更时显示影响清单和所需操作;Web 在需要定向维护时返回结构化 `MAINTENANCE_REQUIRED` 及插件 ID,再由界面显示确认。CLI 的独立管理命令继续不启动 runtime,不额外要求交互维护。插件详情显示 `updatePolicy`;开发文档说明 `automatic` 会重建内存状态,以及无法自动识别未登记资源。
34
+
35
+ 验收覆盖:无状态 provider 及其受影响消费者声明 `automatic` 后可在线更新;有独占 runtime A 时可安装与 A 无关的 B 且 A 的服务实例不变;更新 A 或其依赖消费者时只重启影响集合;默认策略要求明确选择;活动 Web 提供者受保护;运行中更新被拒;候选校验、启动、清理和状态落盘失败均有可观察结果与恢复;旧安装批次在仍被作用域使用时不会被回收;既有 CLI 和全局维护模式行为兼容。
@@ -0,0 +1,19 @@
1
+ # 工作流复制与串行对比设计
2
+
3
+ ## 目标与现状
4
+
5
+ 用户需要保留原工作流,在副本上只修改少量参数,并把原版与副本连续运行以观察结果和耗时。现有删除操作会把 YAML 移到 `.flow/deleted-workflows`,适合恢复误删,不适合作为可编辑副本。现有引擎已经按顺序执行子工作流步骤,并记录 `durationMs`;无需新建执行调度器。
6
+
7
+ ## 复制接口
8
+
9
+ `fst-workspace.WorkflowStore` 增加 `duplicate(definition, {id, title})`:以传入的已校验工作流定义为来源,深复制输入、步骤、输出及说明,仅更改 ID 和标题。未给 ID 时生成新的 `flow-...` ID;未给标题时在原名称后加“副本”。调用方可传当前未保存的编辑草稿,以实现“改参数后另存为副本”,原文件不受影响。复制生成的子工作流引用仍指向原来的文件,已有父工作流对原版的引用也不改变。
10
+
11
+ 新文件使用排他创建,发现同名文件立即拒绝,不能通过现有可覆盖的 `save()` 写入。写入失败只清理本次尚未成功创建的新文件,不能触碰来源。返回完整的新定义及路径。只读运行包拒绝复制。`core.app.duplicateWorkflow` 是唯一应用层入口,并对输出的新工作流再次执行结构校验;复制后的正常编辑沿用现有保存接口。
12
+
13
+ TUI 的工作流编辑菜单加入“复制为新工作流”。该操作以屏幕当前草稿为来源,询问新名称,成功后打开已保存副本继续编辑;复制之前的未保存修改不会写回原文件。工作流列表也能直接复制已保存版本。CLI 增加 `fst workflow duplicate <source> --title <name> [--id <id>]`,Web 工作流列表和编辑器提供相同操作,编辑器的未保存内容也可另存为副本。界面在切换后清楚显示新 ID 和原工作流仍在。
14
+
15
+ ## 连续运行与结果
16
+
17
+ 使用现有父工作流依次加入 `./baseline.yaml` 和 `./variant.yaml` 两个子工作流步骤;两步可以绑定同一组父流程输入,各自产生独立输出。TUI/Web 在复制成功后给出创建这种父流程的操作提示,并在文档提供可运行示例。运行记录显示两个步骤的结果和耗时,业务结果继续按现有日志与输出机制持久化。性能比较记录输入和执行顺序,提醒用户多次运行并交换顺序,以降低预热与缓存的影响。
18
+
19
+ 验收覆盖从已保存工作流和未保存草稿复制、显式 ID 冲突、并发复制、故障清理、只读拒绝,以及两个子流程串行运行的输出和时长。验证删除副本不会删除原版;被父流程引用时沿用现有拒绝删除规则。
@@ -1,10 +1,63 @@
1
- # 首版验收记录
1
+ # 验收记录
2
+
3
+ ## 0.5.1 全代际复核修正(2026-10-13)
4
+
5
+ - 分支 `codex/review-0.5.0-followup`,以 0.4.0 `f529244` 至 0.5.0 后验收提交 `d26a0ee` 为固定范围执行独立 Standards / Spec 审查。
6
+ 共确认 6 项问题:直连子进程重新继承代理、清理失败后重复启动资源、嵌套 stop 的权限误拦、TUI 摘要淘汰崩溃、步骤缓存超预算、最终结果缓存超预算。
7
+ 均先失败复现再修正;修补后的两个独立复审无剩余阻断问题,详见[审查记录](superpowers/reviews/2026-10-13-0.5.0-followup-review.md)。
8
+ - logs 提供统一步骤缓存与结果投影,TUI 不重新持有完整大正文;真实 2 MiB 输入/输出验证业务 done 与完整 JSONL 不受影响。
9
+ 实际子进程验证三种代理模式、正常/失败清理恢复与 Linux 普通用户嵌套 stop 的执行边界。
10
+ - `npm run dist:npm` 成功,0.5.1 本地归档 9,757,761 字节、284 个生产包;用该归档执行完整 `npm test` **382 项:381 通过、0 失败、1 跳过**,166.0 秒。
11
+ 包括离线全局安装、脱离源码运行与再次导出。Windows 文件 symlink 权限导致一项跳过,目录 junction 回归执行。
12
+ - 产品和 CLI 同步为 0.5.1,保持工作流与内部插件 API 格式兼容。远端验证和发布尚待执行,完成后追加记录。
13
+
14
+ ## 0.5.0 发布前验证(2026-10-13)
15
+
16
+ - 分支 `codex/kernel-runtime-readiness`,固定基线 `002260b`。完成动作级代理、权限预检、工作流复制与删除、引用保护、定向插件更新及恢复;双轴审查与修复见[审查记录](superpowers/reviews/2026-10-13-kernel-runtime-release-review.md)。
17
+ - 审查补齐项目配置及工作流覆盖保存的备份、卸载期间的并发保护、恢复失败后的停止运行、代理实际生效模式和失效引用提示,以及权限不足时的失败日志。原有宿主关闭后能力列表行为已恢复。
18
+ - Windows Node 24.15.0 上 `npm run dist:npm` 成功;最终 npm 归档 `dist/yanglaofish-fishtools-0.5.0.tgz` 为 9,750,617 字节,收集 284 个生产包。Web 构建成功;仅有第三方 `use client` 指令提示。
19
+ - 设置 `FISHTOOLS_TEST_NPM_ARCHIVE` 指向最终归档后运行完整 `npm test`,**374 项:373 通过、0 失败、1 跳过**,164.2 秒。覆盖 npm 离线全局安装、脱离源码运行、再次导出、代理规则、权限、备份与并发卸载。跳过的是本机未开放文件符号链接权限的 Windows 用例;目录 junction 仍执行。
20
+ - [v0.5.0 发布工作流](https://github.com/yanglaofish/Fishtools/actions/runs/38282818908)最终全部成功:Windows **374/374**,Ubuntu **373/374**、1 项跳过;两平台便携包与无 Node 的断网只读 Linux 容器验收通过。
21
+ - npm 官方源已公开 `@yanglaofish/fishtools@0.5.0`,`latest` 指向 0.5.0;[GitHub Release](https://github.com/yanglaofish/Fishtools/releases/tag/v0.5.0)已公开,包含 npm、Windows、Linux 归档及 `SHA256SUMS`。
22
+ - npm 首次接受上传后处理超过发布脚本的 5 分钟等待上限;注册表可见后仅重试失败的发布任务,归档完整性匹配,随后完成 Release,未重复创建版本。
23
+
24
+ ## 完整内核能力演进(2026-10-12,本地未发布)
25
+
26
+ - 分支 `codex/kernel-generation-complete`,基线 `4d34df6`,设计计划提交 `4ba6037`。承接十一模块拆分,实现大日志落盘/摘要/分页、开发自动重载、隔离文件探测;见[能力指南](kernel-generation.md)与[双轴审查记录](superpowers/reviews/2026-10-12-kernel-generation-review.md)。
27
+ - 实际超过 5 MiB 输出,stream 完整交给消费者落盘,背压、有限尾部、取消和最后一块消费者超时验证通过;buffer 保留 OUTPUT_LIMIT。CLI/TUI/Web 贯通完整日志分页,运行事件和独立步骤摘要分别有预算。
28
+ - 文件探测验证普通目录、缺失、UNC 跳过、取消、超时、并发/排队及未回收占用。开发重载用真实子进程验证依赖文件更新、连续保存、业务空闲等待、启动失败修复、关闭错误及超时,以及 Web 端口和令牌保持。
29
+ - `npm run dist:npm` 成功,归档仍用开发版本名 `yanglaofish-fishtools-0.4.0.tgz`,284 个生产包。设置 `FISHTOOLS_TEST_NPM_ARCHIVE` 后完整 `npm test` **308 项:307 通过、0 失败、1 跳过**,168.3 秒。含离线发布预演、空缓存全局安装、脱离源码运行、新 worker/文档入包、安装后的隔离探测/日志分页和便携再次导出。第三方 use client 提示不影响构建成功。
30
+ - 真实浏览器执行 800 条中文日志,正文 413628 字节;游标 0 → 65536 → 131071 → 196606 正常翻页,步骤显示成功。链接源码更新后同一页面自动重连,未保存的标题草稿保留,原运行日志仍可读取。临时服务器已关闭;本地截图 `.cache/generation-web-verified.png`。
31
+ - 本轮是 Windows、Node 24.15.0 验收。普通文件 symlink 因权限跳过,目录 junction 测试实际执行。真实故障 NFS/SMB 与远端 Linux CI 未执行;不承诺内核 I/O 立即可杀、运行中无缝升级或 TUI 未保存草稿跨重启保留。未提升版本、推送、发布或升级全局安装。
32
+
33
+ ## 十一模块内核演进(2026-10-12,本地未发布)
34
+
35
+ - 分支 `codex/modular-kernel-evolution`,基线 `2d3316b`;设计提交 `7485ba5`。新增 platform、logs、workflow、plugin、workspace、devtools、CLI 七个内部包,加现有 core、SDK、pack、Web 共十一模块。参见[模块架构](modules.md)及各包 README。
36
+ - 迁移 36 个实现文件;包声明 exports 和生产依赖,架构测试验证普通/peer 依赖无环、禁止跨包私有导入、全部公开入口进入 npm 文件清单。core 兼容子入口和公开 npm 名称保持,SDK_VERSION、产品版本与用户数据格式未变。
37
+ - 日志缓存、串行写入和快照归 logs;普通动作上下文不再默认附带 application,Web 服务接口保持;pack 接收声明快照,不访问活动 host/store。普通发行包含可选 pack,只读发行裁剪它;两种载荷均有实际运行测试。
38
+ - 独立整分支审查发现一项 Important、一项 Minor,均先复现再修复:日志保存失败时 Web 的未处理拒绝,以及 Web model 公开入口未进入发布文件。定向 **29/29** 通过,详见[审查与裁定](superpowers/reviews/2026-10-12-modular-kernel-review.md)。
39
+ - 修复后 `npm run dist:npm` 成功;开发归档 `dist/yanglaofish-fishtools-0.4.0.tgz` 为 **9,675,198 字节,284 个生产包**。包含 Web 构建与许可收集;第三方 `use client` 提示仍存在,无构建错误。
40
+ - 设置 `FISHTOOLS_TEST_NPM_ARCHIVE` 指向该修复后归档,完整 `npm test` **250/250 通过**,零失败、零跳过,153.0 秒。覆盖离线全局安装、脱离源码运行、外部插件安装、再次导出、便携包运行与内部 npm;日志失败测试通过真实 Web HTTP API 和严格未处理拒绝模式验证进程存活。
41
+ - 这是 Windows/Node 24.15.0 本地验收;没有执行本轮远端 Linux CI,没有推送或发布。归档仍使用开发中的 0.4.0 版本号,不替换已发布版本。大日志持续落盘/内存摘要、热重载、隔离网络文件探测仍为后续阶段。
42
+
43
+ ## Issue #3 正文与评论增量(2026-10-12,本地未发布)
44
+
45
+ - 分支 `codex/issue-3-assessment`,基线 `7d9b21f`。重新读取 [issue 正文与评论](https://github.com/yanglaofish/Fishtools/issues/3),按用户“合理就改”授权落实有限质量检查、validate 边界说明与日志体积可见性。
46
+ - 新增 `plugin lint`:元信息、嵌套字段标题、布尔 schema 提示、AST 直接 console.log 与可识别运行依赖检查;源码不自动修改。validate 的运行返回值说明放在 `notes`,JSON 可直接解析。
47
+ - `/logs` 和 `/config` 新增按需体积统计,包括未结束运行,跳过目录/文件链接及非 UUID 目录,不读取正文或删除业务文件。共享目录、文件长度快照与没有单次运行上限均明确说明。
48
+ - 独立审查发现两项 P2 与一项 P3:Draft-07 元组/contains/dependencies 漏递归、日志根链接跟随、UUID 名称过滤过宽。三项均先新增失败复现,再修复;独立复核通过。修复后的定向检查 **17/17** 通过。
49
+ - 最终重新构建 `npm run dist:npm` 成功,开发归档 9,643,345 字节、277 个包,包含 Acorn。构建仍有第三方 `use client` 指令提示,无构建错误;另在仓库外解压开发归档,执行 create → lint --json,确认新增工具与依赖可用。
50
+ - 使用最终开发归档设置 `FISHTOOLS_TEST_NPM_ARCHIVE` 后完整 `npm test` **241/241 通过**,零失败、零跳过,175.6 秒;包含 npm 离线安装、脱离源码运行和再次导出。本节仅记录本地 Windows 验收,未执行本轮远端双平台 CI。
51
+ - 实测子进程输出 5 MiB 触发默认 `OUTPUT_LIMIT`,这是每流 4 MiB 的既有严格缓冲策略,不是 run.md 文件截断阈值。日志持续增长与内存缓存仍需治理;路线图已明确持久化/摘要/保留/分页归 logs 模块、进程模块提供输出流。
52
+ - 网络挂载补充文档约定与取消局限;未实现 ctx.fs、隔离文件探测、热重载或大日志流式治理。CP936 中文乱码在本地 Node 24.15.0 的实际 CMD TTY 和 UTF-8 重定向测试中未复现,未改输出编码。未升级版本、推送或发布;同名 0.4.0 本地归档仅为开发验收,不替换已发布版本。
2
53
 
3
54
  ## 0.4.0 发布前验证(2026-10-12)
4
55
 
5
56
  - 用户授权使用 `code-review` 验证处理后推送和发包。以 `v0.3.0` 为固定基线并行审查 Standards / Spec;记录见[双轴审查](superpowers/reviews/2026-10-12-plugin-release-review.md)。两个独立 P2 均已先失败复现再修复:可空对象的动态字段解析,以及 Windows 候选解释器错误优先搜索宿主启动目录。
6
57
  - `npm run dist:npm` 构建成功,版本和 CLI 同步为 0.4.0;归档含 276 个包。设置 `FISHTOOLS_TEST_NPM_ARCHIVE` 指向该归档后,完整 `npm test` **230/230 通过**,零失败、零跳过,159.3 秒,包括离线全局安装、脱离源码调用和再次导出。
7
- - 输出默认值迁移、源码引用需重启、旧版宿主清理前退出等说明已更新。远端双平台、便携包、Docker 及 npm 发布结果待正式发布工作流完成后追加。
58
+ - 输出默认值迁移、源码引用需重启、旧版宿主清理前退出等说明已更新。
59
+ - 提交 `f529244` 的[正式发布工作流](https://github.com/yanglaofish/Fishtools/actions/runs/38206420406)全部成功:Windows/Ubuntu 各 **230/230**,两平台自包含包及无 Node 的断网只读 Debian 容器检查通过;[普通分支 CI](https://github.com/yanglaofish/Fishtools/actions/runs/38206420482)也成功。
60
+ - npm 官方源 `latest` 已为 **0.4.0**;实际下载公开 tarball,9,494,946 字节,SHA-512 与注册表元数据一致,SHA-256 与 [Release](https://github.com/yanglaofish/Fishtools/releases/tag/v0.4.0) 的 `SHA256SUMS` 一致:`2bd9a93d32f56780994fac5d001561e6de25951290693b2397b8ea6d35fa6bc3`。Release 已公开于仓库访问范围,包含 npm、Windows、Linux 三个归档及校验文件。
8
61
 
9
62
  ## 2026-10-12 第三方插件开发体验(本地未发布)
10
63
 
@@ -0,0 +1,44 @@
1
+ # 应用内核模块
2
+
3
+ 包名:`@mytools/core`。内部 workspace 包,随 `@yanglaofish/fishtools` 统一交付。
4
+
5
+ ## 职责与边界
6
+
7
+ 组合各能力模块、协调运行与关闭、提供 CLI/Web 共用应用接口及导出声明快照。日志写入和缓存由 logs 负责;导出实现通过可选 pack 依赖加载。
8
+
9
+ 内部依赖:`@mytools/sdk`、`@mytools/fst-platform`、`@mytools/fst-logs`、`@mytools/fst-workflow`、`@mytools/fst-plugin`、`@mytools/fst-workspace`、`@mytools/pack`。
10
+ `@mytools/pack` 是可选 peer 依赖;普通发行包含它,只读发行省略它。既有 `/process`、`/bundle`、`/environments` 子入口保留兼容转发。
11
+
12
+ ## 公开入口
13
+
14
+ | 导入路径 | 实现位置 |
15
+ | --- | --- |
16
+ | `@mytools/core` | `./src/application.js` |
17
+ | `@mytools/core/version` | `./src/version.js` |
18
+ | `@mytools/core/process` | `./src/process.js` |
19
+ | `@mytools/core/environments` | `./src/environments.js` |
20
+ | `@mytools/core/bundle` | `./src/bundle.js` |
21
+ | `@mytools/core/development` | `./src/development.js` |
22
+ | `@mytools/core/package.json` | `./package.json` |
23
+
24
+ 仅依赖 exports 声明的入口,禁止消费者跨包读取 src/bin 私有文件。入口路径由本模块维护,修改协议时同步消费方回归。
25
+
26
+ ## 维护与验证
27
+
28
+ 本模块负责上述职责的实现、文档与回归;跨模块接口调整需要同时检查生产者与消费者。具体维护人员尚未指定。
29
+
30
+ 在仓库根目录执行:
31
+
32
+ ```sh
33
+ node --test tests/modules.test.js tests/application.test.js tests/lifecycle.test.js tests/module-interfaces.test.js
34
+ ```
35
+
36
+ ## 开发监督进程
37
+
38
+ `createDevelopmentSupervisor({projectDir,entry,args,env,configFile,onEvent})` 启动文件监听 worker 和应用子进程,返回 `status()`、幂等 `close()`。父进程不加载插件运行模块;每次重启使用全新的 Node 进程,完整更新 ESM 导入依赖。`bindDevelopmentChild(app,{details,closePresentation})` 通过 IPC 报告就绪,收到重启请求后等待 `app.developmentStatus()` 的运行和管理操作均为空闲,再调用 `app.close()` 及界面清理。
39
+
40
+ 监听来源为项目 `.flow/plugins.json` 的 `links`,同时监听项目配置、插件状态和显式配置覆盖文件。独立 worker 跳过 `node_modules`、`.git`、`.flow`、`dist` 及符号链接;默认限制 512 个源码目录、20000 个扫描条目和 24 层深度。超出预算或扫描超时会明确报告未完整监听,独立进程扫描避免挂载目录的 I/O 阻塞监督器。只读项目拒绝启用开发模式。
41
+
42
+ 源码变化默认合并 180 ms。关闭超时从应用报告空闲并开始关闭后计时,默认 5 秒;启动超时默认 15 秒。强制终止后最多等待 2 秒确认回收,未确认退出的子进程继续占用预算,不能启动重叠宿主。`onEvent` 提供 `ready/changed/waiting/restarting/failed/forced/blocked/watchError/closed` 等状态,启动失败保留源码监听,修复后可再次启动。
43
+
44
+ 验证:`node --test tests/development-watch.test.js` 使用真实非交互子进程验证完整模块图、忙碌等待、连续保存、源码修复、关闭与配置刷新,并验证真实 Web 重启。
@@ -0,0 +1,38 @@
1
+ {
2
+ "name": "@mytools/core",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "main": "src/application.js",
6
+ "exports": {
7
+ ".": "./src/application.js",
8
+ "./version": "./src/version.js",
9
+ "./process": "./src/process.js",
10
+ "./environments": "./src/environments.js",
11
+ "./bundle": "./src/bundle.js",
12
+ "./development": "./src/development.js",
13
+ "./package.json": "./package.json"
14
+ },
15
+ "files": [
16
+ "src",
17
+ "README.md",
18
+ "LICENSE"
19
+ ],
20
+ "license": "MIT",
21
+ "engines": {
22
+ "node": ">=24.15.0"
23
+ },
24
+ "dependencies": {
25
+ "@mytools/sdk": "0.1.0",
26
+ "@mytools/fst-platform": "0.1.0",
27
+ "@mytools/fst-logs": "0.1.0",
28
+ "@mytools/fst-workflow": "0.1.0",
29
+ "@mytools/fst-plugin": "0.1.0",
30
+ "@mytools/fst-workspace": "0.1.0"
31
+ },
32
+ "peerDependencies": {
33
+ "@mytools/pack": "0.1.0"
34
+ },
35
+ "peerDependenciesMeta": {
36
+ "@mytools/pack": {"optional": true}
37
+ }
38
+ }