@yanglaofish/fishtools 0.4.0 → 0.5.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.
- package/README.md +33 -5
- package/bin/fst.js +1 -1
- package/manual/README.md +33 -5
- package/manual/docs/deployment.md +3 -3
- package/manual/docs/kernel-generation.md +97 -0
- package/manual/docs/modules.md +57 -0
- package/manual/docs/plugin-development.md +120 -10
- package/manual/docs/releases.md +12 -0
- package/manual/docs/research/2026-10-11-plugin-kernel-capabilities.md +6 -6
- package/manual/docs/roadmap.md +14 -3
- package/manual/docs/superpowers/plans/2026-10-09-workflow-mvp.md +5 -5
- package/manual/docs/superpowers/plans/2026-10-11-public-plugin-fixes.md +2 -2
- package/manual/docs/superpowers/plans/2026-10-12-kernel-generation.md +22 -0
- package/manual/docs/superpowers/plans/2026-10-12-modular-kernel.md +40 -0
- package/manual/docs/superpowers/reviews/2026-10-12-kernel-generation-review.md +27 -0
- package/manual/docs/superpowers/reviews/2026-10-12-modular-kernel-review.md +32 -0
- package/manual/docs/superpowers/reviews/2026-10-13-kernel-runtime-release-review.md +19 -0
- package/manual/docs/superpowers/specs/2026-10-12-action-network-policy-design.md +52 -0
- package/manual/docs/superpowers/specs/2026-10-12-kernel-generation-design.md +38 -0
- package/manual/docs/superpowers/specs/2026-10-12-modular-kernel-design.md +70 -0
- package/manual/docs/superpowers/specs/2026-10-12-plugin-readiness-design.md +21 -0
- package/manual/docs/superpowers/specs/2026-10-12-runtime-maintenance-granularity-design.md +35 -0
- package/manual/docs/superpowers/specs/2026-10-12-workflow-variation-design.md +19 -0
- package/manual/docs/verification.md +42 -2
- package/manual/packages/core/README.md +44 -0
- package/manual/packages/core/package.json +38 -0
- package/manual/packages/core/src/application.js +242 -85
- package/manual/packages/core/src/bundle.js +2 -0
- package/manual/packages/core/src/development-watch-worker.js +69 -0
- package/manual/packages/core/src/development.js +146 -0
- package/manual/packages/core/src/environments.js +2 -0
- package/manual/packages/core/src/export-snapshot.js +42 -0
- package/manual/packages/core/src/plugin-update.js +108 -0
- package/manual/packages/core/src/process.js +2 -0
- package/manual/packages/core/src/resources.js +31 -0
- package/manual/packages/core/src/version.js +2 -0
- package/manual/packages/fst-cli/LICENSE +21 -0
- package/manual/packages/fst-cli/README.md +54 -0
- package/{node_modules/@mytools/core → manual/packages/fst-cli}/bin/fst.js +55 -23
- package/manual/packages/fst-cli/package.json +49 -0
- package/manual/packages/fst-cli/src/development.js +53 -0
- package/{node_modules/@mytools/core → manual/packages/fst-cli}/src/terminal/model.js +1 -1
- package/{node_modules/@mytools/core → manual/packages/fst-cli}/src/terminal/navigation.js +1 -1
- package/{node_modules/@mytools/core → manual/packages/fst-cli}/src/terminal/presentation.js +9 -1
- package/{node_modules/@mytools/core → manual/packages/fst-cli}/src/terminal/run-feed.js +31 -5
- package/{node_modules/@mytools/core → manual/packages/fst-cli}/src/terminal/run-viewer.js +9 -7
- package/{node_modules/@mytools/core → manual/packages/fst-cli}/src/terminal/schema.js +1 -1
- package/manual/packages/{core → fst-cli}/src/terminal/session.js +137 -9
- package/manual/packages/{core → fst-cli}/src/terminal/view.js +20 -3
- package/{node_modules/@mytools/core → manual/packages/fst-cli}/src/terminal/workflow-menu.js +17 -2
- package/manual/packages/fst-devtools/LICENSE +21 -0
- package/manual/packages/fst-devtools/README.md +28 -0
- package/manual/packages/fst-devtools/package.json +29 -0
- package/{node_modules/@mytools/core → manual/packages/fst-devtools}/src/documentation.js +3 -1
- package/manual/packages/fst-devtools/src/plugin-quality.js +136 -0
- package/{node_modules/@mytools/core → manual/packages/fst-devtools}/src/plugin-tools.js +24 -5
- package/manual/packages/fst-logs/LICENSE +21 -0
- package/manual/packages/fst-logs/README.md +56 -0
- package/manual/packages/fst-logs/package.json +24 -0
- package/manual/packages/fst-logs/src/log-bounds.js +91 -0
- package/manual/packages/fst-logs/src/run-logs.js +239 -0
- package/manual/packages/fst-platform/LICENSE +21 -0
- package/manual/packages/fst-platform/README.md +67 -0
- package/manual/packages/fst-platform/package.json +33 -0
- package/manual/packages/fst-platform/src/bundle.js +17 -0
- package/manual/packages/fst-platform/src/environments.js +67 -0
- package/manual/packages/fst-platform/src/file-probe-engine.js +183 -0
- package/manual/packages/fst-platform/src/file-probe-worker.js +43 -0
- package/manual/packages/fst-platform/src/file-probe.js +6 -0
- package/manual/packages/fst-platform/src/json.js +5 -0
- package/manual/packages/fst-platform/src/network.js +199 -0
- package/manual/packages/fst-platform/src/npm.js +11 -0
- package/manual/packages/fst-platform/src/process.js +110 -0
- package/manual/packages/fst-plugin/LICENSE +21 -0
- package/manual/packages/fst-plugin/README.md +29 -0
- package/manual/packages/fst-plugin/package.json +29 -0
- package/{node_modules/@mytools/core → manual/packages/fst-plugin}/src/contracts.js +30 -3
- package/manual/packages/fst-plugin/src/host.js +232 -0
- package/manual/packages/fst-plugin/src/loader.js +21 -0
- package/manual/packages/fst-plugin/src/privileges.js +91 -0
- package/{node_modules/@mytools/core → manual/packages/fst-plugin}/src/runtime.js +20 -4
- package/manual/packages/fst-workflow/LICENSE +21 -0
- package/manual/packages/fst-workflow/README.md +28 -0
- package/manual/packages/fst-workflow/package.json +24 -0
- package/{node_modules/@mytools/core → manual/packages/fst-workflow}/src/control.js +3 -2
- package/manual/packages/{core → fst-workflow}/src/engine.js +2 -2
- package/manual/packages/fst-workspace/LICENSE +21 -0
- package/manual/packages/fst-workspace/README.md +32 -0
- package/manual/packages/fst-workspace/package.json +34 -0
- package/{node_modules/@mytools/core → manual/packages/fst-workspace}/src/bundle-workspace.js +1 -1
- package/manual/packages/fst-workspace/src/index.js +3 -0
- package/{node_modules/@mytools/core → manual/packages/fst-workspace}/src/plugins.js +6 -36
- package/{node_modules/@mytools/core → manual/packages/fst-workspace}/src/workflows.js +40 -7
- package/manual/packages/pack/LICENSE +21 -0
- package/manual/packages/pack/README.md +31 -0
- package/manual/packages/pack/archive.js +15 -0
- package/manual/packages/pack/dependencies.js +105 -0
- package/manual/packages/pack/environments.js +50 -0
- package/manual/packages/pack/index.js +103 -0
- package/manual/packages/pack/package.json +29 -0
- package/manual/packages/pack/runtime.js +61 -0
- package/manual/packages/sdk/README.md +31 -0
- package/manual/packages/sdk/conditions.js +1 -0
- package/manual/packages/sdk/package.json +23 -1
- package/manual/plugins/web/README.md +29 -0
- package/manual/tests/application.test.js +6 -4
- package/node_modules/@mytools/core/README.md +44 -0
- package/node_modules/@mytools/core/package.json +17 -17
- package/node_modules/@mytools/core/src/application.js +242 -85
- package/node_modules/@mytools/core/src/bundle.js +2 -17
- package/node_modules/@mytools/core/src/development-watch-worker.js +69 -0
- package/node_modules/@mytools/core/src/development.js +146 -0
- package/node_modules/@mytools/core/src/environments.js +2 -67
- package/node_modules/@mytools/core/src/export-snapshot.js +42 -0
- package/node_modules/@mytools/core/src/plugin-update.js +108 -0
- package/node_modules/@mytools/core/src/process.js +2 -80
- package/node_modules/@mytools/core/src/version.js +1 -1
- package/node_modules/@mytools/fst-cli/LICENSE +21 -0
- package/node_modules/@mytools/fst-cli/README.md +54 -0
- package/node_modules/@mytools/fst-cli/bin/fst.js +124 -0
- package/node_modules/@mytools/fst-cli/package.json +49 -0
- package/node_modules/@mytools/fst-cli/src/cli-run.js +12 -0
- package/node_modules/@mytools/fst-cli/src/development.js +53 -0
- package/node_modules/@mytools/fst-cli/src/terminal/conditions.js +32 -0
- package/node_modules/@mytools/fst-cli/src/terminal/log-viewer.js +45 -0
- package/node_modules/@mytools/fst-cli/src/terminal/model.js +104 -0
- package/node_modules/@mytools/fst-cli/src/terminal/navigation.js +17 -0
- package/node_modules/@mytools/fst-cli/src/terminal/presentation.js +50 -0
- package/{manual/packages/core → node_modules/@mytools/fst-cli}/src/terminal/run-feed.js +31 -5
- package/node_modules/@mytools/fst-cli/src/terminal/run-presentation.js +60 -0
- package/node_modules/@mytools/fst-cli/src/terminal/run-viewer.js +106 -0
- package/node_modules/@mytools/fst-cli/src/terminal/schema.js +52 -0
- package/node_modules/@mytools/{core → fst-cli}/src/terminal/session.js +137 -9
- package/node_modules/@mytools/fst-cli/src/terminal/theme.js +29 -0
- package/node_modules/@mytools/{core → fst-cli}/src/terminal/view.js +20 -3
- package/node_modules/@mytools/fst-cli/src/terminal/workflow-menu.js +65 -0
- package/node_modules/@mytools/fst-devtools/LICENSE +21 -0
- package/node_modules/@mytools/fst-devtools/README.md +28 -0
- package/node_modules/@mytools/fst-devtools/package.json +29 -0
- package/node_modules/@mytools/fst-devtools/src/documentation.js +67 -0
- package/node_modules/@mytools/fst-devtools/src/plugin-quality.js +136 -0
- package/node_modules/@mytools/fst-devtools/src/plugin-tools.js +152 -0
- package/node_modules/@mytools/fst-logs/LICENSE +21 -0
- package/node_modules/@mytools/fst-logs/README.md +56 -0
- package/node_modules/@mytools/fst-logs/package.json +24 -0
- package/node_modules/@mytools/fst-logs/src/log-bounds.js +91 -0
- package/node_modules/@mytools/fst-logs/src/markdown-log.js +55 -0
- package/node_modules/@mytools/fst-logs/src/run-logs.js +239 -0
- package/node_modules/@mytools/fst-platform/LICENSE +21 -0
- package/node_modules/@mytools/fst-platform/README.md +67 -0
- package/node_modules/@mytools/fst-platform/package.json +33 -0
- package/node_modules/@mytools/fst-platform/src/bundle.js +17 -0
- package/node_modules/@mytools/fst-platform/src/environments.js +67 -0
- package/node_modules/@mytools/fst-platform/src/file-probe-engine.js +183 -0
- package/node_modules/@mytools/fst-platform/src/file-probe-worker.js +43 -0
- package/node_modules/@mytools/fst-platform/src/file-probe.js +6 -0
- package/node_modules/@mytools/fst-platform/src/json.js +5 -0
- package/node_modules/@mytools/fst-platform/src/network.js +199 -0
- package/node_modules/@mytools/fst-platform/src/npm.js +11 -0
- package/node_modules/@mytools/fst-platform/src/process.js +110 -0
- package/node_modules/@mytools/fst-plugin/LICENSE +21 -0
- package/node_modules/@mytools/fst-plugin/README.md +29 -0
- package/node_modules/@mytools/fst-plugin/package.json +29 -0
- package/node_modules/@mytools/fst-plugin/src/contracts.js +86 -0
- package/node_modules/@mytools/fst-plugin/src/host.js +232 -0
- package/node_modules/@mytools/fst-plugin/src/loader.js +21 -0
- package/node_modules/@mytools/fst-plugin/src/privileges.js +91 -0
- package/{manual/packages/core → node_modules/@mytools/fst-plugin}/src/runtime.js +20 -4
- package/node_modules/@mytools/fst-workflow/LICENSE +21 -0
- package/node_modules/@mytools/fst-workflow/README.md +28 -0
- package/node_modules/@mytools/fst-workflow/package.json +24 -0
- package/node_modules/@mytools/fst-workflow/src/control.js +64 -0
- package/node_modules/@mytools/{core → fst-workflow}/src/engine.js +2 -2
- package/node_modules/@mytools/fst-workspace/LICENSE +21 -0
- package/node_modules/@mytools/fst-workspace/README.md +32 -0
- package/node_modules/@mytools/fst-workspace/package.json +34 -0
- package/node_modules/@mytools/fst-workspace/src/bundle-workspace.js +39 -0
- package/node_modules/@mytools/fst-workspace/src/index.js +3 -0
- package/node_modules/@mytools/fst-workspace/src/plugin-installations.js +84 -0
- package/node_modules/@mytools/fst-workspace/src/plugins.js +35 -0
- package/node_modules/@mytools/fst-workspace/src/project.js +29 -0
- package/node_modules/@mytools/fst-workspace/src/workflows.js +150 -0
- package/node_modules/@mytools/fst-workspace/templates/control-demo.yaml +47 -0
- package/node_modules/@mytools/fst-workspace/templates/hello.yaml +35 -0
- package/node_modules/@mytools/fst-workspace/templates/python-check.yaml +26 -0
- package/node_modules/@mytools/fst-workspace/templates/system-check.yaml +11 -0
- package/node_modules/@mytools/pack/README.md +31 -0
- package/node_modules/@mytools/pack/dependencies.js +7 -2
- package/node_modules/@mytools/pack/environments.js +1 -1
- package/node_modules/@mytools/pack/index.js +33 -25
- package/node_modules/@mytools/pack/package.json +29 -1
- package/node_modules/@mytools/sdk/README.md +31 -0
- package/node_modules/@mytools/sdk/conditions.js +1 -0
- package/node_modules/@mytools/sdk/diagnostics.js +27 -0
- package/node_modules/@mytools/sdk/package.json +23 -1
- package/node_modules/@mytools/sdk/schema-path.js +31 -0
- package/node_modules/@mytools/sdk/validation.js +78 -0
- package/node_modules/@mytools/web/README.md +29 -0
- package/node_modules/@mytools/web/package.json +7 -0
- package/node_modules/@mytools/web/public/THIRD_PARTY_NOTICES.txt +1398 -1199
- package/node_modules/@mytools/web/public/assets/index-BaVzHycP.js +70 -0
- package/node_modules/@mytools/web/public/assets/index-DA8Ae92t.css +1 -0
- package/node_modules/@mytools/web/public/index.html +2 -2
- package/node_modules/@mytools/web/server.js +24 -17
- package/node_modules/@mytools/web/src/model.js +84 -0
- package/node_modules/acorn/CHANGELOG.md +1012 -0
- package/node_modules/acorn/LICENSE +21 -0
- package/node_modules/acorn/README.md +309 -0
- package/node_modules/acorn/bin/acorn +4 -0
- package/node_modules/acorn/dist/acorn.d.mts +897 -0
- package/node_modules/acorn/dist/acorn.d.ts +897 -0
- package/node_modules/acorn/dist/acorn.js +6370 -0
- package/node_modules/acorn/dist/acorn.mjs +6341 -0
- package/node_modules/acorn/dist/bin.js +90 -0
- package/node_modules/acorn/package.json +50 -0
- package/node_modules/{minipass-flush/node_modules/minipass → tar}/node_modules/yallist/README.md +8 -7
- package/node_modules/tar/node_modules/yallist/package.json +68 -0
- package/node_modules/yallist/README.md +7 -8
- package/node_modules/yallist/package.json +12 -51
- package/package.json +131 -115
- package/manual/packages/core/src/host.js +0 -139
- package/node_modules/@mytools/core/src/host.js +0 -139
- package/node_modules/@mytools/core/src/run-logs.js +0 -63
- package/node_modules/@mytools/web/public/assets/index-DT2B4tMV.js +0 -70
- package/node_modules/@mytools/web/public/assets/index-vuZvrUTT.css +0 -1
- package/node_modules/minipass-flush/node_modules/minipass/node_modules/yallist/package.json +0 -29
- /package/{node_modules/@mytools/core → manual/packages/fst-cli}/src/cli-run.js +0 -0
- /package/{node_modules/@mytools/core → manual/packages/fst-cli}/src/terminal/conditions.js +0 -0
- /package/{node_modules/@mytools/core → manual/packages/fst-cli}/src/terminal/log-viewer.js +0 -0
- /package/{node_modules/@mytools/core → manual/packages/fst-cli}/src/terminal/run-presentation.js +0 -0
- /package/{node_modules/@mytools/core → manual/packages/fst-cli}/src/terminal/theme.js +0 -0
- /package/{node_modules/@mytools/core → manual/packages/fst-logs}/src/markdown-log.js +0 -0
- /package/{node_modules/@mytools/core → manual/packages/fst-workspace}/src/plugin-installations.js +0 -0
- /package/{node_modules/@mytools/core → manual/packages/fst-workspace}/src/project.js +0 -0
- /package/{node_modules/@mytools/core → manual/packages/fst-workspace}/templates/control-demo.yaml +0 -0
- /package/{node_modules/@mytools/core → manual/packages/fst-workspace}/templates/hello.yaml +0 -0
- /package/{node_modules/@mytools/core → manual/packages/fst-workspace}/templates/python-check.yaml +0 -0
- /package/{node_modules/@mytools/core → manual/packages/fst-workspace}/templates/system-check.yaml +0 -0
- /package/{node_modules/@mytools/core/src → manual/packages/sdk}/diagnostics.js +0 -0
- /package/{node_modules/@mytools/core/src → manual/packages/sdk}/schema-path.js +0 -0
- /package/{node_modules/@mytools/core/src → manual/packages/sdk}/validation.js +0 -0
- /package/node_modules/{yallist → tar/node_modules/yallist}/LICENSE.md +0 -0
- /package/node_modules/{yallist → tar/node_modules/yallist}/dist/commonjs/index.d.ts +0 -0
- /package/node_modules/{yallist → tar/node_modules/yallist}/dist/commonjs/index.d.ts.map +0 -0
- /package/node_modules/{yallist → tar/node_modules/yallist}/dist/commonjs/index.js +0 -0
- /package/node_modules/{yallist → tar/node_modules/yallist}/dist/commonjs/index.js.map +0 -0
- /package/node_modules/{yallist → tar/node_modules/yallist}/dist/commonjs/package.json +0 -0
- /package/node_modules/{yallist → tar/node_modules/yallist}/dist/esm/index.d.ts +0 -0
- /package/node_modules/{yallist → tar/node_modules/yallist}/dist/esm/index.d.ts.map +0 -0
- /package/node_modules/{yallist → tar/node_modules/yallist}/dist/esm/index.js +0 -0
- /package/node_modules/{yallist → tar/node_modules/yallist}/dist/esm/index.js.map +0 -0
- /package/node_modules/{yallist → tar/node_modules/yallist}/dist/esm/package.json +0 -0
- /package/node_modules/{minipass-flush/node_modules/minipass/node_modules/yallist → yallist}/LICENSE +0 -0
- /package/node_modules/{minipass-flush/node_modules/minipass/node_modules/yallist → yallist}/iterator.js +0 -0
- /package/node_modules/{minipass-flush/node_modules/minipass/node_modules/yallist → yallist}/yallist.js +0 -0
|
@@ -52,12 +52,12 @@ Fishtools 核对基线:`838d572f0eff85f759b3c1118abb9dda616a4113`。
|
|
|
52
52
|
|
|
53
53
|
| 公共能力 | 当前状态及证据 | 建议补齐的契约 |
|
|
54
54
|
| --- | --- | --- |
|
|
55
|
-
| 插件加载、依赖、生命周期和共享服务 | 已有:[host.js](../../packages/
|
|
56
|
-
| 动作发现、调用与结果校验 | 已有 catalog、invoke、commands、input/output:[host.js](../../packages/
|
|
57
|
-
| 顺序、分支、并行、条件停止 | 已有:[engine.js](../../packages/
|
|
58
|
-
| 会话与插件状态存储 | 尚无持久会话;[terminal/view.js](../../packages/
|
|
59
|
-
| 执行记录、日志和用户输出 | 已有 run、events、run.md、log/print:[application.js](../../packages/core/src/application.js)、[run-feed.js](../../packages/
|
|
60
|
-
| 公共交互与界面扩展 | 插件交互命令已有 input/select/show/confirm:[terminal/session.js](../../packages/
|
|
55
|
+
| 插件加载、依赖、生命周期和共享服务 | 已有:[host.js](../../packages/fst-plugin/src/host.js)、[runtime.js](../../packages/fst-plugin/src/runtime.js) | 继续使用 Cordis;新增订阅、Hook、面板注册也跟随插件作用域注销 |
|
|
56
|
+
| 动作发现、调用与结果校验 | 已有 catalog、invoke、commands、input/output:[host.js](../../packages/fst-plugin/src/host.js) | 稳定的第三方调用门面;身份和调用归属由内核赋值,统一经过 Hook/授权/日志 |
|
|
57
|
+
| 顺序、分支、并行、条件停止 | 已有:[engine.js](../../packages/fst-workflow/src/engine.js) | 沿用现有控制节点和状态,不为 LLM 另造一套编排协议 |
|
|
58
|
+
| 会话与插件状态存储 | 尚无持久会话;[terminal/view.js](../../packages/fst-cli/src/terminal/view.js) 的命令历史在内存中 | 延迟落盘、会话索引、恢复、按插件命名空间存储数据和版本;工作区状态与会话状态分开 |
|
|
59
|
+
| 执行记录、日志和用户输出 | 已有 run、events、run.md、log/print:[application.js](../../packages/core/src/application.js)、[run-feed.js](../../packages/fst-cli/src/terminal/run-feed.js) | 统一事件版本与顺序号;进度更新、结果摘要、产物引用;历史与实时使用相同渲染输入 |
|
|
60
|
+
| 公共交互与界面扩展 | 插件交互命令已有 input/select/show/confirm:[terminal/session.js](../../packages/fst-cli/src/terminal/session.js) | 能力查询、结构化确认/表单/详情;由内核仲裁并发提问和焦点;动作与 Hook 可通过统一请求通道交互 |
|
|
61
61
|
| 执行 Hook | 仅有生命周期回调和运行事件订阅 | 注册前置决策与后置通知;过滤范围、超时、取消、顺序、异常归属和注销契约 |
|
|
62
62
|
| 授权请求、模式和审计 | 尚无统一机制 | 操作与资源范围声明、允许/拒绝/询问/无意见、用户规则与可选决策插件、真实 TUI 请求 |
|
|
63
63
|
| 受管进程与后台工作 | 已有 runProcess、取消/超时、stdout/stderr;运行可在主面板持续显示 | 给受管操作接入权限与调用归属;长期后台任务句柄随后按实际需要增加,不立刻建设新调度系统 |
|
package/manual/docs/roadmap.md
CHANGED
|
@@ -4,7 +4,15 @@
|
|
|
4
4
|
|
|
5
5
|
## 当前所处阶段
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
### Issue #3 本轮增量与后续演进(2026-10-12,尚未发布)
|
|
8
|
+
|
|
9
|
+
- 本轮实现:有限 `plugin lint`、`validate` 的运行返回值边界提示、`/logs` 与 `/config` 按需查看日志文件体积。补充不可信路径、网络挂载、异步取消与进程输出上限的开发约定。完整范围和验收见 [验收记录](verification.md)。
|
|
10
|
+
- 不采纳:将合法布尔 schema 判错、关键词猜平台、自动补空标题/平台或 additionalProperties:false。Windows CP936 中文乱码尚未在本地受支持 Node 版本复现,不自动改为 GBK 输出。
|
|
11
|
+
- **大日志治理**:现已由 logs 统一负责完整落盘、有界事件/步骤摘要、历史分页、写入队列和磁盘预算;platform 的显式 stream 模式关闭完整缓冲并提供背压。依赖完整 stdout 的业务保持严格缓冲模式。
|
|
12
|
+
- **开发自动重载**:现已提供 `fst --watch` 与 `fst --watch web`,合并源码修改、等待任务空闲、关闭旧宿主并启动新进程;支持完整 ESM 依赖刷新、启动失败修复恢复、关闭预算和 Web 重连。运行中无缝替换和插件内存迁移仍不在本阶段范围内。
|
|
13
|
+
- **隔离文件探测**:现已实现 `ctx.fs.stat/readDirectory`,独立 Node 进程执行 I/O,支持超时/取消、并发和排队预算、远程路径策略及结构化诊断。未确认回收的 worker 继续占预算。真实故障挂载仍需现场验证,底层不可中断 I/O 不保证立即回收。
|
|
14
|
+
|
|
15
|
+
0.4.0 已发布,包含 GitHub #1/#2 的插件创建、校验、源码引用、批次回收、状态目录、环境候选及编码/契约修复。见[本轮规范](superpowers/specs/2026-10-12-plugin-developer-experience.md)、[实施计划](superpowers/plans/2026-10-12-plugin-developer-experience.md)与[验收记录](verification.md),发布结果见[版本记录](releases.md)。运行时热重载、长度条件、截断模式及平台拒绝策略留待后续。以下“本地试用”描述记录之前日志阶段的历史过程。
|
|
8
16
|
|
|
9
17
|
当前增量:TUI 日志阅读与导航修复,处于**本地试用、待用户体验确认**阶段。首页 F4 进入统一运行记录,支持多个工作流的多次执行;不使用 `/resume`,避免与未来 LLM 会话恢复混淆。实时与历史使用同一阅读面板,默认简洁结果/错误,完整诊断按需查看。试用方式见 README,用户确认前不发布新版本。
|
|
10
18
|
|
|
@@ -22,7 +30,7 @@
|
|
|
22
30
|
|
|
23
31
|
| 原始任务 | 当前状态 | 证据与剩余范围 |
|
|
24
32
|
| --- | --- | --- |
|
|
25
|
-
| 1. SDK、Host、工作流模型与执行 |
|
|
33
|
+
| 1. SDK、Host、工作流模型与执行 | 首版完成,已扩展服务管理和模块拆分 | `packages/sdk`、`fst-plugin`、`fst-workflow`、`fst-workspace`;动作/子流程、引用校验、失败停止、共享服务与受管清理;[模块架构](modules.md) |
|
|
26
34
|
| 2. 应用服务、CLI、外部插件 | 首版完成 | `application.js`、`plugins.js`、`process.js`;安装、配置、日志、取消及仓库外插件接入 |
|
|
27
35
|
| 3. 官方环境检查和示例 | 首版完成,硬件验证有缺口 | `plugins/environment`、`plugins/examples`;真实 NPU 验证未完成 |
|
|
28
36
|
| 4. 自包含分发 | 首版完成,已扩展 | `packages/pack`;按工作流依赖收集、Windows/Linux 包、Docker 挂载;现默认完整可编辑工具 |
|
|
@@ -76,7 +84,7 @@
|
|
|
76
84
|
| --- | --- | --- | --- |
|
|
77
85
|
| N1. Cordis 服务与生命周期 | 插件之间共享能力、依赖就绪、关闭清理与失败定位 | 已实现,本地与便携包验收通过 | 提供者/消费者示例、61 项测试、维护模式、Web 资源归属;远端 CI 见验收记录 |
|
|
78
86
|
| 控制流与运行观察增量 | 条件、并行、提前结束、实时子进程日志和双界面观察 | 当前源码本地验收通过,未声明发布 | 控制协议、取消首因、递归依赖、真实界面操作及 Windows/Linux 验收与发布记录 |
|
|
79
|
-
| N2. 第三方开发体验 |
|
|
87
|
+
| N2. 第三方开发体验 | 可独立使用的模板、示例和接入契约测试 | 离线手册、脚手架、validate/lint、link 开发重载均已实现;类型声明仍待单独规划 | 仓库外作者仅按文档完成动作插件、服务插件与打包;契约检查不承担业务平台认证 |
|
|
80
88
|
| N3. 真实业务插件验证 | 用实际业务检验服务契约,例如 SSH 连接与远程检查共享 | 候选方向,具体插件待实际需求确定 | 两个独立插件复用同一服务,包含取消、错误、关闭与离线分发测试 |
|
|
81
89
|
| N4. 按需求扩展 | LLM/外部 Agent、Kubernetes、多机能力等 | 方向记录,未作实施承诺 | 每个扩展单独明确场景、接口和验收,不进入核心的默认依赖 |
|
|
82
90
|
|
|
@@ -90,3 +98,6 @@ N1 的历史验收对应提交 `061f0e4`,[Windows / Ubuntu CI](https://github.
|
|
|
90
98
|
- 分发和工作区:`deployment.md`
|
|
91
99
|
- 实测范围与缺口:`verification.md`
|
|
92
100
|
- 历史初始设计:`superpowers/specs/2026-10-09-workflow-cli-design.md`
|
|
101
|
+
## 当前完整能力阶段
|
|
102
|
+
|
|
103
|
+
承接十一模块拆分,大日志流式落盘与有界缓存/分页、源码监听开发重载、隔离文件探测现已落实到源码。CLI/TUI/Web 已接入。详细行为与边界见 [完整能力指南](kernel-generation.md),本地验收记录见 [verification](verification.md)。运行中无缝升级、真实故障 NFS/SMB 现场验证、远端 CI 和正式发布分别记录,不从本地实现推定完成。
|
|
@@ -34,12 +34,12 @@
|
|
|
34
34
|
## 文件结构
|
|
35
35
|
|
|
36
36
|
- `packages/sdk/`:插件定义与公共协议。
|
|
37
|
-
- `packages/
|
|
38
|
-
- `packages/
|
|
39
|
-
- `packages/
|
|
40
|
-
- `packages/
|
|
37
|
+
- `packages/fst-plugin/src/host.js`:Cordis 生命周期、插件动作目录。
|
|
38
|
+
- `packages/fst-workspace/src/workflows.js`:存取、静态校验、引用与闭包。
|
|
39
|
+
- `packages/fst-workflow/src/engine.js`:执行快照、顺序调用、日志和取消。
|
|
40
|
+
- `packages/fst-platform/src/process.js`:无 Shell 的程序调用及回收。
|
|
41
41
|
- `packages/core/src/application.js`:共用应用服务。
|
|
42
|
-
- `packages/
|
|
42
|
+
- `packages/fst-workspace/src/plugins.js`:安装、移除与锁定外部插件。
|
|
43
43
|
- `packages/pack/`:生产依赖收集、运行时和归档,独立于执行包。
|
|
44
44
|
- `packages/core/bin/flow.js`:CLI。
|
|
45
45
|
- `plugins/environment/`:目标环境检查。
|
|
@@ -18,9 +18,9 @@
|
|
|
18
18
|
|
|
19
19
|
## 任务与验收
|
|
20
20
|
|
|
21
|
-
1. `packages/
|
|
21
|
+
1. `packages/fst-platform/src/process.js`、`tests/process.test.js`:先复现相对 executable 与 cwd 不一致;验证含空格目录、相对 PATH、绝对程序、缺失程序、取消和超时。修复只影响查找基准,不修改全局 cwd。
|
|
22
22
|
2. `packages/pack/index.js`、`tests/service-pack.test.js`:外部 Web 插件加传递依赖;验证选中 Web 导出、便携包含/不包含 Web、工作流确实依赖 Web 时保留;生成独立包并实际加载调用服务,缺失提供者仍给明确错误。
|
|
23
|
-
3. `packages/
|
|
23
|
+
3. `packages/sdk/validation.js`、`tests/application.test.js`:真实安装带 $id 的配置插件、升级、安装无关插件及移除;验证新旧同 ID schema 不串用、嵌套本地 $ref 仍有效、无效值仍拒绝。
|
|
24
24
|
4. 跑相关回归及 Windows/WSL 验证,独立审查修复 diff;更新文档与验收记录,提交本地分支。
|
|
25
25
|
|
|
26
26
|
## 审查重点
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# 完整内核代际演进实施计划
|
|
2
|
+
|
|
3
|
+
**目标:** 完成大日志、开发自动重载、隔离文件探测三个子项目,并贯通 CLI/TUI/Web 与分发。
|
|
4
|
+
|
|
5
|
+
**规范:** [完整能力阶段设计](../specs/2026-10-12-kernel-generation-design.md)。用户已要求完整继续实施;按既有授权推进。
|
|
6
|
+
|
|
7
|
+
**执行:** 使用 dispatching-parallel-agents 分配彼此不重叠的底层模块,主执行者负责进程流和应用/界面整合;每项先运行失败测试再实现。最终一次独立整分支审查。
|
|
8
|
+
|
|
9
|
+
**约束:** 中文文档和注释;保留原 buffer 语义;不删除用户数据;十一模块单向依赖;新接口通过 exports;Node 24.15.0;生产输出不能静默截断。
|
|
10
|
+
|
|
11
|
+
## 任务与文件
|
|
12
|
+
|
|
13
|
+
- [x] 日志:`packages/fst-logs/src/run-logs.js` 及私有辅助文件,`tests/log-streaming.test.js`。实现 bounded cache、受限写入队列、磁盘预算与 `page`。只改本模块与自身测试/README。兼容现有日志测试。
|
|
14
|
+
- [x] 文件探测:`packages/fst-platform/src/file-probe.js`、`file-probe-worker.js`,`tests/file-probe.test.js`、fixture。实现隔离 I/O、并发/排队/超时/取消/回收预算;公开 `/fs`。只改这些文件和平台 manifest。
|
|
15
|
+
- [x] 开发监听:新增 `packages/core/src/development.js` 和私有 worker/support、`packages/fst-cli/src/development.js`,修改 CLI 入口;`tests/development-watch.test.js`。监督进程等待 idle 后重启、失败恢复与回收;不直接修改 application.js,约定读取 app.developmentStatus()。
|
|
16
|
+
- [x] 主线进程与应用:`fst-platform/src/process.js`、core/application.js、fst-plugin/host.js;进程 stream 背压、ctx.fs、日志策略/分页接口、历史缓存预算与 developmentStatus。新增集成测试。
|
|
17
|
+
- [x] 界面:TUI 有界 RunFeed 与完整日志分页入口;Web 日志分页和开发重连;CLI logs 查询。测试真实功能和保留现有交互。
|
|
18
|
+
- [x] 验收:各任务定向测试、全量测试、npm 构建及离线验收、整分支独立审查、文档更新和本地提交。
|
|
19
|
+
|
|
20
|
+
## 审查重点
|
|
21
|
+
|
|
22
|
+
生产环境慢写入导致队列增长;超大单条事件;UTF-8 分页切断;超时但未退出的 worker;用户关闭时排队请求;业务运行中的多次源码修改;启动错误后修复;CLI/TUI/Web 同时复用日志策略;新 worker 进入 npm 文件清单。
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# FST 模块化内核实施计划
|
|
2
|
+
|
|
3
|
+
> 执行方式:使用 superpowers:executing-plans 在当前会话逐项实施,完成后进行独立整分支审查。用户已授权开始演进;保留当前工作目录,在专用 Git 分支实施。
|
|
4
|
+
|
|
5
|
+
**目标:** 建立十一模块的职责与单向依赖,迁移实际实现和测试,保持产品交付兼容。
|
|
6
|
+
|
|
7
|
+
**架构:** SDK 共享契约;platform/logs/workflow/plugin/workspace 提供能力;core 组合;CLI/Web 展示;devtools/pack 负责开发与发行。
|
|
8
|
+
|
|
9
|
+
**技术栈:** Node >=24.15.0、ESM、npm workspaces、node:test,保留现有依赖版本。
|
|
10
|
+
|
|
11
|
+
**设计:** [模块化内核](../specs/2026-10-12-modular-kernel-design.md)
|
|
12
|
+
|
|
13
|
+
## 全局约束
|
|
14
|
+
|
|
15
|
+
中文文档与注释;不改 SDK_VERSION、用户配置格式、日志格式或公开 npm 包名;不删除用户数据;内部包禁止循环与跨包私有路径导入。
|
|
16
|
+
|
|
17
|
+
## 审查重点
|
|
18
|
+
|
|
19
|
+
从已安装聚合包再次导出时的模块根目录解析;只读包对打包工具的裁剪;Web 生命周期与服务调用兼容;日志落盘失败和并发关闭;模板与离线文档资源路径。
|
|
20
|
+
|
|
21
|
+
## 任务
|
|
22
|
+
|
|
23
|
+
- [x] 1. 包结构与架构约束:新增 tests/modules.test.js,观察缺少新包/错误依赖时失败;迁移文件并为各包设置 exports、生产依赖和中文 README;同步 lock。
|
|
24
|
+
- [x] 2. 真实职责迁移:日志模块提供运行写入器与快照;core 移除写日志细节;插件宿主接受独立项目上下文;pack 接受受限导出视图和发行根。新增真实行为测试,先失败后实现。
|
|
25
|
+
- [x] 3. 消费者和交付迁移:CLI、Web、测试、脚本改走公开入口;CLI 启动器、模板、离线文档与许可收集同步更新。保留已有 core 公开子入口。
|
|
26
|
+
- [x] 4. 运行定向和完整测试、构建 npm 开发归档、离线安装与再次导出;独立审查整分支,补回归并修复。记录验收与模块维护规则,提交本地分支。
|
|
27
|
+
|
|
28
|
+
## 执行记录
|
|
29
|
+
|
|
30
|
+
- 已建立基线:上一阶段提交 2d3316b,完整 241 项测试通过。本轮先执行架构失败测试再迁移。
|
|
31
|
+
- 架构约束先因缺包和 exports 失败;迁移 36 个实现文件、建立十一模块后通过。接口测试先失败后实现;日志与应用行为定向 34/34,CLI/开发插件/文档定向 20/20,打包与依赖定向 7/7 通过。
|
|
32
|
+
- 第一次 npm 构建和完整回归 247/247 通过;独立审查发现日志保存失败可能导致 Web 进程退出、Web model 发布文件缺失。两项先复现,再修复,定向 29/29 通过。详见[审查记录](../reviews/2026-10-12-modular-kernel-review.md)。
|
|
33
|
+
- 修复后重新构建 npm 归档,284 个生产包;以该归档完成最终全量 **250/250**,零失败、零跳过,153.0 秒。全部任务完成,本地分支保留,未推送或发布。
|
|
34
|
+
|
|
35
|
+
## 实施裁定
|
|
36
|
+
|
|
37
|
+
- core 对 pack 使用可选 peer 依赖,普通聚合包包含 pack,只读包省略该依赖边。原因:保持只读裁剪和可编辑包再导出能力。代价:需要真实归档与安装测试维护依赖配置。
|
|
38
|
+
- core 向 pack 提供声明快照及 CLI 发行根目录,pack 不依赖 CLI 实现。原因:避免包依赖循环。代价:发行布局改变时同步快照根目录及交付测试。
|
|
39
|
+
- 保留原目录的专用分支,并在验证后整体提交实现。原因:跨包迁移、依赖和消费方同步才能形成可运行提交;设计已独立提交。
|
|
40
|
+
- 日志保存失败的未处理拒绝虽有历史成因,本阶段主动修复。原因:本轮明确要求写入失败可观察且不能产生未处理拒绝;core 负责运行状态,logs 负责写入失败传播。
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# 完整内核演进审查
|
|
2
|
+
|
|
3
|
+
基线 `4d34df6`,分支 `codex/kernel-generation-complete`;依据[完整能力规范](../specs/2026-10-12-kernel-generation-design.md)进行 Standards / Spec 双轴独立评审,覆盖工作树新增文件。
|
|
4
|
+
|
|
5
|
+
## Standards
|
|
6
|
+
|
|
7
|
+
最终独立静态评审未发现阻断的硬规则问题:公开 exports、依赖方向、中文注释文档和本地分支符合约束。
|
|
8
|
+
|
|
9
|
+
一个非阻断判断项:CLI 开发入口直接操作 TerminalSession 的 exiting/dirty 和 TerminalView 的 pending,与现有退出协调存在耦合。建议后续由会话暴露区分主动退出和开发重启的接口;本轮保留两者不同取消策略,有关闭失败、等待空闲和界面清理回归。
|
|
10
|
+
|
|
11
|
+
首轮审查发现 journal.finish 后自动清理失败会再次 append,触发 LOG_CLOSED 并将成功业务标成失败。已先复现,再改为保存 LOG_PRUNE_FAILED 维护警告,TUI/Web 可见,业务结果保留。
|
|
12
|
+
|
|
13
|
+
## Spec
|
|
14
|
+
|
|
15
|
+
最终独立静态评审未发现新的重要需求偏差。核对 stream 背压与超时、日志缓存/队列/磁盘预算、开发进程等待空闲与失败恢复、ctx.fs 取消及关闭归属。
|
|
16
|
+
|
|
17
|
+
主线复核额外完成回归修复:并发输出淘汰后的 TUI 空转录块增长;步骤事件被淘汰后误报待执行;巨大事件预览丢失序号;日志保存失败的运行未执行缓存预算;子进程退出后的最后一个流式消费者失去超时保护。独立步骤摘要受预算限制,无法确认时明确显示“摘要已省略”。
|
|
18
|
+
|
|
19
|
+
启动期间关闭监督器的静态疑虑经真实子进程验证未复现,未据此增加重复重启逻辑。
|
|
20
|
+
|
|
21
|
+
## 验证与限制
|
|
22
|
+
|
|
23
|
+
完整测试 308 项:307 通过、0 失败、1 Windows 文件符号链接权限跳过,168.3 秒。包含 npm 离线发布预演、空缓存安装、新 worker 文件检查、安装后真实隔离探测、CLI 分页和再次导出。
|
|
24
|
+
|
|
25
|
+
真实浏览器验证长日志分页、成功步骤状态、源码更新后的连接恢复、草稿保留和读取原运行日志。目录 junction 和模拟不可回收 worker 测试实际执行;真实故障 NFS/SMB、远端 Linux CI 不作为本地证据声称通过。
|
|
26
|
+
|
|
27
|
+
汇总:Standards 已确认回归 1 项已修,保留非阻断维护建议 1 项;Spec 最终重要未解决问题 0 项。
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# 模块化内核整分支审查
|
|
2
|
+
|
|
3
|
+
## 范围与方式
|
|
4
|
+
|
|
5
|
+
- 基线:`2d3316b`;分支:`codex/modular-kernel-evolution`。
|
|
6
|
+
- 按 executing-plans / requesting-code-review,由无会话历史的独立审查者检查整个工作区(包括未跟踪新包),只读审查,无二次委派。
|
|
7
|
+
- 规范:[设计](../specs/2026-10-12-modular-kernel-design.md);[实施计划](../plans/2026-10-12-modular-kernel.md)。
|
|
8
|
+
- 重点:模块依赖方向、日志持久化、应用生命周期、导出快照、npm/便携入口与离线资料。
|
|
9
|
+
|
|
10
|
+
## 审查结果与处理
|
|
11
|
+
|
|
12
|
+
没有发现 Critical;发现一项 Important 和一项 Minor,均采纳。
|
|
13
|
+
|
|
14
|
+
| 级别 | 问题 | 复现与修复 |
|
|
15
|
+
| --- | --- | --- |
|
|
16
|
+
| Important | Web 只获取运行 ID、不消费 done;最终日志写入失败导致外层 Promise 未处理拒绝,记录仍显示 succeeded | 新增真实 HTTP 子进程测试,严格拒绝模式下制造 result.json 写入失败,修复前进程退出;core 立即观察 done 拒绝,在运行记录显示 LOG_WRITE_FAILED 并保留原 done 拒绝与业务错误原因。修复后进程存活且 API 可查询失败 |
|
|
17
|
+
| Minor | Web 声明的 `/model` 入口未被 files 收集 | 用真实 npm-packlist 检查十一模块全部 exports,修复前只缺 Web model;files 精确加入 src/model.js,避免带入整套前端开发源码 |
|
|
18
|
+
|
|
19
|
+
失败测试先运行,8 项中 2 项失败,分别对应上述两项;修复后补充保留业务错误的测试,日志、接口、Web 与架构定向测试 **29/29 通过**。
|
|
20
|
+
|
|
21
|
+
## 审查认可的边界
|
|
22
|
+
|
|
23
|
+
实现迁移实际职责,pack 不再反向导入 core;日志缓存与写入由 logs 持有。保留 core 原公开兼容入口、SDK_VERSION 和产品版本,分发入口、模板与文档同步迁移。
|
|
24
|
+
|
|
25
|
+
## 未独立验证的范围与裁定
|
|
26
|
+
|
|
27
|
+
- 全量测试与 npm 安装:审查者按委托未重复执行,采用主执行者的完整验证记录,见[验收记录](../../verification.md)。
|
|
28
|
+
- Linux 原生运行:本地 Windows 仅核对入口和路径;未将历史 Linux CI 结果当成本轮证据,后续推送再执行双平台 CI。
|
|
29
|
+
- 任意第三方插件:无法穷尽外部使用。普通动作不再隐式获得 application 是设计允许的边界调整;Web 服务兼容应用接口。
|
|
30
|
+
- 大日志治理与安全沙箱:本阶段设计排除,不将其列为已完成能力。
|
|
31
|
+
|
|
32
|
+
初始审查判定需修复后才能合并。执行者已完成一次修复及上述回归;最终完整构建和测试以验收记录为准。本轮保留本地分支,不自动合并、推送或发布。
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# 0.5.0 内核运行能力双轴审查
|
|
2
|
+
|
|
3
|
+
固定基线 `002260b`,分支 `codex/kernel-runtime-readiness`。依据用户要求、四份 2026-10-12 设计规范及仓库模块边界,分别审查 Standards(实现约束)与 Spec(功能要求)。审查先于发布,修复后对工作树再次独立复核。
|
|
4
|
+
|
|
5
|
+
## Standards
|
|
6
|
+
|
|
7
|
+
- 项目代理、插件及日志配置保存前缺少原文件备份:已统一在工作区锁内写入 `.flow/backups/`,保存接口返回路径,CLI/TUI/Web 在适用入口展示。覆盖保存工作流也会先备份原 YAML。
|
|
8
|
+
- 插件状态切换成功后旧安装租约清理失败,原先会把已提交更新误报为失败:已改为发出清理告警并保留租约,应用关闭时可再次清理。日志保留设置已保存但清理失败时,也单独报告警告。
|
|
9
|
+
- 网络规则曾通过宿主的应用服务隐式读取:现由 core 显式传给宿主。终端插件详情仍直接读取宿主定义以展示作者声明,属于非阻断的接口收敛建议。
|
|
10
|
+
|
|
11
|
+
## Spec
|
|
12
|
+
|
|
13
|
+
- 卸载扫描曾发生在变更锁外:现与工作流保存、复制、删除共用工作区锁,锁内重新检查全部引用,并用并发回归覆盖。
|
|
14
|
+
- 配置或插件状态落盘失败且宿主恢复失败时,应用原本仍可能运行:现标记宿主不可运行,重启核对后才能继续。
|
|
15
|
+
- TUI/Web 代理页现列出每个插件和动作的最终模式,并指出仍指向已删除插件或动作的规则;报告不读取代理凭据。
|
|
16
|
+
- 必经动作权限不足时,现仍创建失败运行记录与日志事件;Web 插件详情显示权限原因、状态和处理提示。
|
|
17
|
+
- 全量测试发现关闭后能力列表回归:恢复为已关闭宿主返回空列表,失败恢复后的不可运行保护仍保留。
|
|
18
|
+
|
|
19
|
+
两轴最终只读复核均未发现阻断发布的未解决问题。验证命令及结果记录见[验收记录](../../verification.md)。
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# 动作级代理策略设计
|
|
2
|
+
|
|
3
|
+
## 目标与现状
|
|
4
|
+
|
|
5
|
+
用户需要在保持离线打包可用的同时,为不同插件、同一插件的不同动作分别选择是否使用代理。成功标准是下载动作可走指定代理,本地动作可直连,两者并发时互不影响;设置可从终端和 Web 查看、修改,运行包无需保存代理凭据。
|
|
6
|
+
|
|
7
|
+
当前 `fst-platform.runProcess` 可以接收子进程环境,npm 自行识别代理环境变量;插件宿主没有统一的 HTTP 请求接口或代理策略。直接改全局环境或全局 HTTP dispatcher 会使并发动作互相污染,因此采用每次调用独立选路的模块。仅依赖用户设置环境变量则无法提供动作粒度。
|
|
8
|
+
|
|
9
|
+
## 工作区策略
|
|
10
|
+
|
|
11
|
+
在 `flow.project.json` 增加可选 `network`。缺省策略为 `inherit`,保留现有子进程继承环境的行为。优先级固定为:动作覆盖、插件默认、工作区默认。策略值只能是 `inherit`、`direct` 或引用现有代理配置的 `profile`;没有规则时使用 `inherit`。
|
|
12
|
+
|
|
13
|
+
```json
|
|
14
|
+
{
|
|
15
|
+
"network": {
|
|
16
|
+
"default": { "mode": "inherit" },
|
|
17
|
+
"profiles": {
|
|
18
|
+
"lab": {
|
|
19
|
+
"httpUrl": "http://127.0.0.1:7890",
|
|
20
|
+
"httpsUrl": "http://127.0.0.1:7890",
|
|
21
|
+
"noProxy": "localhost,127.0.0.1"
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
"plugins": {
|
|
25
|
+
"@example/network": {
|
|
26
|
+
"default": { "mode": "direct" },
|
|
27
|
+
"actions": {
|
|
28
|
+
"download": { "mode": "profile", "profile": "lab" }
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
每个代理配置的 HTTP、HTTPS 和 NO_PROXY 字段可分别使用直接值 `httpUrl`、`httpsUrl`、`noProxy`,或环境变量引用 `httpEnv`、`httpsEnv`、`noProxyEnv`;同一字段只能选一种来源。代理 URL 支持 `http:`、`https:`;直接 URL 禁止用户名和口令,有凭据的代理使用环境变量,变量值不写入工作区。HTTP 或 HTTPS 代理值至少要有一个;HTTPS 目标未配置专用 HTTPS 代理时沿用 HTTP 代理,HTTP 目标只使用 HTTP 代理。缺失或无效时在动作开始前报出配置名称及修复办法,不回显 URL 中的凭据。配置写入时验证模式、配置名称和标识格式;未安装的插件或动作规则仍可保留,界面标注为失效引用并允许清理。运行时再次验证环境变量的实际值。
|
|
37
|
+
|
|
38
|
+
## 运行接口与边界
|
|
39
|
+
|
|
40
|
+
`fst-platform` 提供一个网络选路模块,负责解析策略、创建和回收每次请求使用的 HTTP dispatcher,并构造子进程环境。`fst-plugin` 在绑定动作上下文时提供 `ctx.http.fetch(url, options)`,默认继承当前动作的取消信号,默认超时 30 秒并允许插件显式设置更长超时。`inherit` 读取宿主进程的代理环境,`direct` 使用直连 dispatcher,`profile` 使用选中配置中的代理。`direct` 仅关闭代理,仍允许直接联网。同一运行内并发动作各自使用其选中的 dispatcher,不修改 `process.env` 或全局 dispatcher。使用 per-request dispatcher 的可行性由 [Undici 官方文档](https://github.com/nodejs/undici/blob/main/docs/docs/api/EnvHttpProxyAgent.md)支持。
|
|
41
|
+
|
|
42
|
+
现有 `ctx.runProcess` 保留原有参数和默认行为,并按动作策略处理 HTTP_PROXY、HTTPS_PROXY、ALL_PROXY、NO_PROXY 及其小写形式:`inherit` 原样继承;`direct` 从子进程环境移除这些变量;`profile` 注入配置值和 NO_PROXY。对受管理的 Node 子进程,`profile` 同时启用 `NODE_USE_ENV_PROXY=1`。插件显式传入的其他环境变量仍保留。独立斜杠命令及插件服务使用插件默认策略;映射到动作的命令使用该动作策略。
|
|
43
|
+
|
|
44
|
+
动作级保证适用于 `ctx.http.fetch` 和 `ctx.runProcess`。插件直接调用全局 `fetch`、自建 HTTP 客户端或直接读写 `process.env` 时,不承诺遵循动作规则;开发文档和插件检查会明确这一点。代理规则只决定选路,不把插件代码当作安全沙箱。运行日志记录模式与配置名称,不记录 URL、凭据或完整子进程环境。
|
|
45
|
+
|
|
46
|
+
`core` 在启动一次运行时固定其网络策略快照;之后修改配置只影响新运行。长期运行的插件服务在重新启动后应用新策略。`app.networkPolicy()` 返回可展示的规则,`app.configureNetworkPolicy(next)` 原子写入工作区文件并做并发更新检查。TUI 的 `/config` 提供工作区、插件和动作三级设置;Web 提供对应的查看及更新入口,均显示最终生效模式。只读运行包允许查看和使用随包策略,不允许修改。
|
|
47
|
+
|
|
48
|
+
## 打包、错误与验收
|
|
49
|
+
|
|
50
|
+
打包把所选工作流涉及的插件代理规则、无凭据 URL 和环境变量名称写入运行包,环境变量的值不进入包、清单或日志。纯本地工作流无需网络或代理即可打包和运行。运行包中的代理动作在启动时读取目标机器环境;缺失时明确报错。打包阶段不发起代理连通性请求。
|
|
51
|
+
|
|
52
|
+
验收使用本地 HTTP 目标和代理模拟器验证 `inherit`、`direct`、`profile`,同插件不同动作并发隔离,NO_PROXY,取消与超时,子进程环境,缺失/无效配置,TUI/Web 配置,以及运行包中没有凭据。回归测试确认旧插件未配置 `network` 时的子进程行为保持。
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# 内核代际演进:完整能力阶段
|
|
2
|
+
|
|
3
|
+
## 用户目标与执行授权
|
|
4
|
+
|
|
5
|
+
用户要求继续完成整个代际演进。承接已完成的十一模块拆分,本阶段交付此前明确留下的三项能力:大日志治理、开发源码自动重载、隔离文件探测。沿现有分支基线 4d34df6 创建 codex/kernel-generation-complete;不迁移或删除用户数据。
|
|
6
|
+
|
|
7
|
+
采用模块内深接口,各模块实现可以独立测试,应用和界面最后整合。既有严格 stdout 缓冲行为保留,新接口是显式选择,不能把不完整 JSON 冒充完整业务结果。
|
|
8
|
+
|
|
9
|
+
## 1. 进程输出与日志
|
|
10
|
+
|
|
11
|
+
- platform.runProcess 增加 `outputMode:'buffer'|'stream'`,默认 buffer 保持现有 OUTPUT_LIMIT;stream 必须有 onOutput,关闭完整收集、使用背压逐块回调,仅返回有限 stdout/stderr 尾部及明确 outputTruncated/字节计数。编码、取消、超时、退出码和错误传播保持。
|
|
12
|
+
- logs 默认缓存最多 1000 事件、1 MiB,单条预览最多 64 KiB。完整事件和 Markdown 持续写入磁盘;缓存淘汰带 eventCount、eventsTruncated 等标记。单次运行总日志字节可配置上限,默认不主动丢弃磁盘内容;超限明确报错,不能静默丢失。
|
|
13
|
+
- 不等待 ctx.log 的插件不能无限排队:写入队列有字节预算,超过预算返回可观察拒绝,完成时同样失败。顺序写入、失败保护和业务文件保留继续有效。
|
|
14
|
+
- `createRunLogs().page(id,{cursor,limit})` 按字节分页读取 Markdown,返回 `{text,cursor,nextCursor,hasMore,totalBytes}`;限制单页最大 256 KiB,处理 UTF-8 边界。允许当前未完成运行但验证归属,历史旧日志兼容读取。
|
|
15
|
+
- core 的内存运行历史有数量预算;活跃运行不丢弃。业务执行所需的输入输出保持完整,不用日志摘要替代工作流数据。CLI/TUI/Web 的日志展示只保留有限事件,完整正文通过分页读取。
|
|
16
|
+
|
|
17
|
+
## 2. 文件探测隔离
|
|
18
|
+
|
|
19
|
+
- platform 提供 `createFileProbe({timeout,maxConcurrent,maxPending,allowRemote})`,方法 `stat(path,{signal,timeout})`、`readDirectory(path,{signal,timeout,limit})`、`close()`、`status()`。
|
|
20
|
+
- 文件操作在独立 Node 子进程执行;主进程计时/取消,限制活跃子进程和排队请求,超时尝试终止并保留未回收进程预算,不能无限补充。
|
|
21
|
+
- 返回结构化状态 `ok/missing/timedOut/cancelled/skipped/error`,含 incomplete/reason。默认跳过显式 UNC/设备网络路径;本地挂载无法仅靠字符串识别,仍受超时保护。目录列表有条目上限,不递归,不读取文件内容。
|
|
22
|
+
- `ctx.fs` 绑定当前运行 signal,并由 app.close 释放;测试使用真实子进程,阻塞行为通过测试 fixture 验证超时与资源上限。明确底层内核 I/O 可能不能立即回收,不声称安全沙箱。
|
|
23
|
+
|
|
24
|
+
## 3. 开发自动重载
|
|
25
|
+
|
|
26
|
+
- 交付 `fst --watch`(交互终端)和 `fst --watch web`。监督进程监听开发 link 源目录,合并连续修改;子进程负责实际应用,源码变化后等待当前运行/管理操作结束,再关闭应用并以新进程加载完整 ESM 依赖图。
|
|
27
|
+
- 使用新进程,避免只对入口添加时间戳而遗漏被导入子模块。不迁移插件内存状态,保留磁盘工作区与配置;不默认强制中断业务运行。
|
|
28
|
+
- 启动失败后监督进程继续监听,修复源码再次启动;关闭有明确超时和强制终止回报,终止失败占用预算、不启动重叠宿主。退出监督进程关闭监听及子进程。
|
|
29
|
+
- Web 使用同一端口和令牌,前端可显示断开/恢复并重新加载目录。TUI 在重启时结束旧终端并重新启动;尚未保存的编辑草稿不承诺跨重启保留,开发模式明确提示。
|
|
30
|
+
- 开发模式显式启用;生产默认启动方式不变。只读包不启用源码监听。
|
|
31
|
+
|
|
32
|
+
## 验收
|
|
33
|
+
|
|
34
|
+
真实输出超过 4 MiB:stream 成功落盘且缓存有界,buffer 继续报 OUTPUT_LIMIT;慢写入背压、错误与取消;历史分页中文边界;日志队列/磁盘预算;HTTP 与终端入口。
|
|
35
|
+
|
|
36
|
+
隔离探测覆盖普通目录、缺失、UNC 跳过、取消、超时、并发与未回收预算。热重载覆盖入口和依赖文件变化、忙碌等待、连续保存合并、启动失败修复、清理超时、退出回收及 Web 重连。
|
|
37
|
+
|
|
38
|
+
完成后跑完整测试、Web/许可构建、npm 离线安装和便携再次导出;独立审查并修复,再提交本地分支。远端 CI 与正式版本发布不冒充本地验收。
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# FST 模块化内核演进设计
|
|
2
|
+
|
|
3
|
+
## 目标与授权
|
|
4
|
+
|
|
5
|
+
用户已确认将 core 拆为八个职责模块,并明确保留 Web、SDK、Pack,要求开始代际演进。目标是按模块分工、定位问题和持续升级。本阶段完成模块化基础及真实职责迁移,保持既有工作流、插件协议、CLI/Web 和分发兼容。
|
|
6
|
+
|
|
7
|
+
采用同仓库 workspace、多包单向依赖、统一产品交付。公开 npm 仍为 `@yanglaofish/fishtools`;现有 `@mytools/core`、`@mytools/sdk`、`@mytools/pack`、`@mytools/web` 的名称保持,七个新模块采用 `@mytools/fst-*`。这些均为内部包,本轮不独立发布、不变更 SDK_VERSION 和数据格式。
|
|
8
|
+
|
|
9
|
+
## 模块与接口
|
|
10
|
+
|
|
11
|
+
| 逻辑模块 | 目录 | 公开接口与职责 |
|
|
12
|
+
| --- | --- | --- |
|
|
13
|
+
| fst-core | packages/core | createApplication,运行协调、依赖组合、应用关闭 |
|
|
14
|
+
| fst-sdk | packages/sdk | definePlugin、FlowError;schema、引用、错误记录和条件操作符共享契约 |
|
|
15
|
+
| fst-platform | packages/fst-platform | runProcess、环境解析、readJson、npm;操作系统能力 |
|
|
16
|
+
| fst-logs | packages/fst-logs | createRunLogs;运行日志写入器、历史读取、保留、体积统计 |
|
|
17
|
+
| fst-workflow | packages/fst-workflow | runWorkflow、条件与步骤结构检查;执行语义 |
|
|
18
|
+
| fst-plugin | packages/fst-plugin | createHost、loadPlugin、声明校验;插件装载与服务生命周期 |
|
|
19
|
+
| fst-workspace | packages/fst-workspace | WorkflowStore、项目初始化、安装批次/租约、开发引用、bundle 工作区 |
|
|
20
|
+
| fst-devtools | packages/fst-devtools | createPlugin、validatePluginDirectory、lintPluginDirectory、离线文档 |
|
|
21
|
+
| fst-cli | packages/fst-cli | fst 命令、startTerminal 与终端公开测试接口 |
|
|
22
|
+
| fst-pack | packages/pack | 导出计划、归档、依赖收集;接受有界应用导出视图 |
|
|
23
|
+
| fst-web | plugins/web | 官方 Web 插件、HTTP 与前端;使用应用提供的交互接口 |
|
|
24
|
+
|
|
25
|
+
每个包用 package.json exports 限定 Interface,README 记录职责、依赖、验证入口与维护归属。未指定实际 GitHub 维护者,因此不虚构 CODEOWNERS 用户;先按模块建立责任文档。
|
|
26
|
+
|
|
27
|
+
## 依赖规则
|
|
28
|
+
|
|
29
|
+
1. SDK 为基础层,不依赖其他 FST 包。主入口维持轻量,schema 校验器通过子入口加载。
|
|
30
|
+
2. platform、logs、workflow 依赖 SDK;plugin 依赖 SDK/platform;workspace 依赖 SDK/platform/plugin/workflow。
|
|
31
|
+
3. devtools 依赖 SDK/platform/plugin;pack 依赖 SDK/platform/devtools。pack 不 import core,不通过相对路径访问其他包源码。
|
|
32
|
+
4. core 组合 workspace/plugin/workflow/platform/logs/pack。CLI 依赖 core 和管理/开发工具模块。Web 仅依赖 SDK 和通过调用参数提供的应用 Interface。
|
|
33
|
+
5. 禁止跨包 `../other/src/...` 或未声明依赖;架构测试检查包图无环、内部导入可解析及 exports 有效。
|
|
34
|
+
6. 打包要携带的 CLI/core 是发行载荷,在调用时提供入口根目录;pack 不反向依赖 CLI/core 的实现。
|
|
35
|
+
|
|
36
|
+
## 真正迁移的职责
|
|
37
|
+
|
|
38
|
+
### 日志
|
|
39
|
+
|
|
40
|
+
日志的串行写入、事件缓存和快照投影收拢至 fst-logs。core 持有运行控制器和状态协调,调用日志模块的开始、追加、完成、快照 Interface。保留现有事件/Markdown/结果格式、清理保护和同步异常语义;写入失败必须可观察,不能产生未处理拒绝。
|
|
41
|
+
|
|
42
|
+
本阶段不新增截断/轮转行为。后续大日志的持续落盘、内存摘要、分页由 fst-logs 演进,platform 只提供可背压的输出流。
|
|
43
|
+
|
|
44
|
+
### 插件与应用
|
|
45
|
+
|
|
46
|
+
宿主的普通动作上下文只接收 projectDir、只读标记及必要能力;Web 等现有服务仍通过兼容 application Interface 工作。避免为了读取项目路径而让普通动作自动取得应用所有管理方法。SDK、动作输入输出、runtime 生命周期保持兼容。
|
|
47
|
+
|
|
48
|
+
### 导出
|
|
49
|
+
|
|
50
|
+
core 提供工作流闭包、插件目录/声明、配置、基础运行包路径、发行入口根等限定视图;pack 不操作活跃宿主或运行实例。既有 app.pack/app.packPlan 调用保持。
|
|
51
|
+
|
|
52
|
+
### 工作区
|
|
53
|
+
|
|
54
|
+
安装状态、租约、批次回收和项目文件操作保持在 workspace;插件加载移到 plugin,npm 与通用 JSON 文件读取移到 platform,从而避免 workspace/plugin 相互依赖。WorkflowStore 负责持久化和闭包解析,workflow 包提供执行语义。
|
|
55
|
+
|
|
56
|
+
## 兼容与恢复
|
|
57
|
+
|
|
58
|
+
- 新分支基于 `2d3316b`;每阶段提交,可回退代码提交。不迁移或删除用户 `.flow`、业务结果、配置及现有安装批次。
|
|
59
|
+
- core 的已有公开 process/bundle/environments 导出保留转发;源码私有路径在仓库测试、脚本和文档中统一迁移。
|
|
60
|
+
- fst 的实际入口改至 fst-cli,npm 聚合包及 Windows/Linux 启动器、发行测试同步迁移。
|
|
61
|
+
- 工作区模板随 workspace 包,离线文档携带新模块的引用源文件;从仓库和从已安装包都能查找资料。
|
|
62
|
+
- Web 保持官方插件与同一构建流程。只读导出保持不能安装、修改工作流、重新打包的约束。
|
|
63
|
+
|
|
64
|
+
## 验收
|
|
65
|
+
|
|
66
|
+
架构约束先失败再实现;现有 241 项行为回归迁移至公开 Interface。新增日志写入器与应用能力隔离测试;运行完整 npm test、Web/许可构建、npm 离线安装与再导出,确认新依赖完整进入产物。审查整个分支,修复重要问题后提交。不自动推送或发布新版本。
|
|
67
|
+
|
|
68
|
+
## 后续阶段
|
|
69
|
+
|
|
70
|
+
大日志治理、开发自动重启、隔离文件探测分别在 logs、core/plugin、platform 设计实施;本阶段不将这些尚未完成的能力标为已交付。
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# 插件权限预检与卸载影响设计
|
|
2
|
+
|
|
3
|
+
## 目标与现状
|
|
4
|
+
|
|
5
|
+
内核和离线运行包应能以普通用户运行。若某个插件动作要求 root、管理员权限或特定资源,用户应在执行前看到原因和处理办法,避免到工作流中途才等待交互提权或碰到权限错误。TUI 已能卸载自行安装或链接的插件,但目前仅作笼统确认;工作流可能在卸载后失去动作。
|
|
6
|
+
|
|
7
|
+
## 权限声明与检查
|
|
8
|
+
|
|
9
|
+
插件按动作声明可选的 `requirements.privilege`,按 `linux`、`win32` 写明 `level`(Linux 可用 `user`、`root`、`resource`;Windows 可用 `user`、`administrator`、`resource`)、原因和处理提示。例如 `requirements:{privilege:{linux:{level:'root',reason:'需要配置系统网络',remediation:'使用有相应权限的运行环境'}}}`。非 `user` 级必须填写原因和提示。`root` 仅用于无条件要求 Linux root 身份的动作;条件性提权、设备组、文件 ACL 和 Linux capability 等写成 `resource`,说明具体要求,并由动作探针检查。插件级声明可作为默认值,动作声明按平台覆盖它。独立命令及服务使用插件级要求,映射到动作的命令使用动作要求。旧插件缺少字段时保持兼容,界面显示“未声明”;新插件骨架和开发文档要求作者填写,`plugin validate/lint` 检查字段合法性并提示缺失。
|
|
10
|
+
|
|
11
|
+
`fst-plugin` 暴露纯数据的有效要求,`fst-platform` 提供宿主权限探测。`checkWorkflow` 在解析全部子流程后收集每个动作的静态要求,不执行动态探针。启动运行前,对不受条件分支或 `when` 控制的必经动作检查可确定的缺口;可能跳过的动作先列为提醒,到真正执行前再检查。Linux 上明确声明 `root` 且当前 UID 非 0 时,必经动作在启动前报 `INSUFFICIENT_PRIVILEGE`,列出动作、原因和处理提示。Windows 管理员状态或资源权限无法可靠确定时报告“待确认”,不假称已经满足;插件服务在启动前检查其插件级静态要求。
|
|
12
|
+
|
|
13
|
+
`resource` 和 Windows `administrator` 声明必须配套插件或动作 `preflight(input,{platform,signal,fs})`,返回 `{status:'ok'|'blocked'|'unknown',reason?,remediation?}`;插件服务调用时 `input` 为 `{}`。上下文只提供只读文件探测,不提供 `runProcess`、日志或插件服务。宿主在输入已知、动作执行之前调用;`blocked` 阻止该步骤,`unknown` 默认报 `PRIVILEGE_UNVERIFIED`。`app.startRun` 和 `app.startCommand` 可显式传入 `allowUnknownPrivileges:true`,允许该次运行在记录提醒后继续;TUI/Web 提供确认选项,CLI 用 `--allow-unverified-privileges`。动态输入依赖前序输出时,探针在对应步骤开始前运行。宿主传入取消信号并设置 5 秒超时,探针不得修改环境或等待交互式提权。动作元数据对外只暴露声明,不包含 `preflight` 函数。`preflight` 仍是可信插件代码;超时不能强行停止同步死循环,开发文档明确这一限制。旧插件未声明要求时只显示“未声明”,不因缺少探针而中断原有工作流。
|
|
14
|
+
|
|
15
|
+
检查失败生成可识别的错误及日志事件;TUI、Web、CLI 的工作流检查与插件详情展示同一份诊断。`ctx.runProcess` 的默认超时继续保护受管理的外部命令;插件文档要求提权命令使用非交互方式并在失败时返回可操作错误。内核不执行自动 sudo,打包清单记录被选工作流的已声明权限需求,便于部署前核对。
|
|
16
|
+
|
|
17
|
+
## 卸载前的影响检查
|
|
18
|
+
|
|
19
|
+
`core` 在移除插件前递归扫描所有已保存工作流的顺序、分支及并行步骤,列出直接引用该插件动作的工作流;同时检查其他已安装插件的依赖声明。默认拒绝移除仍被引用的插件,并返回工作流 ID 和动作名。用户若明确选择“仍要移除”,可以仅越过工作流引用检查,工作流文件保持原样;其他插件依赖和活动 Web 提供者的限制不能越过。扫描失败时终止移除,不能在无法判断影响时继续。
|
|
20
|
+
|
|
21
|
+
TUI 显示受影响工作流后再次确认;CLI `fst plugin remove <id> --force` 和 Web 卸载入口提供等价显式选择。卸载前后不删除工作流、运行记录或插件状态备份。验收覆盖嵌套引用、无引用正常移除、受影响拒绝与显式继续、插件间依赖、活动 Web、只读包,以及 Linux 权限不足的提前失败和未知状态的准确提示。
|
|
@@ -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,50 @@
|
|
|
1
|
-
#
|
|
1
|
+
# 验收记录
|
|
2
|
+
|
|
3
|
+
## 0.5.0 发布前验证(2026-10-13)
|
|
4
|
+
|
|
5
|
+
- 分支 `codex/kernel-runtime-readiness`,固定基线 `002260b`。完成动作级代理、权限预检、工作流复制与删除、引用保护、定向插件更新及恢复;双轴审查与修复见[审查记录](superpowers/reviews/2026-10-13-kernel-runtime-release-review.md)。
|
|
6
|
+
- 审查补齐项目配置及工作流覆盖保存的备份、卸载期间的并发保护、恢复失败后的停止运行、代理实际生效模式和失效引用提示,以及权限不足时的失败日志。原有宿主关闭后能力列表行为已恢复。
|
|
7
|
+
- Windows Node 24.15.0 上 `npm run dist:npm` 成功;最终 npm 归档 `dist/yanglaofish-fishtools-0.5.0.tgz` 为 9,750,617 字节,收集 284 个生产包。Web 构建成功;仅有第三方 `use client` 指令提示。
|
|
8
|
+
- 设置 `FISHTOOLS_TEST_NPM_ARCHIVE` 指向最终归档后运行完整 `npm test`,**374 项:373 通过、0 失败、1 跳过**,164.2 秒。覆盖 npm 离线全局安装、脱离源码运行、再次导出、代理规则、权限、备份与并发卸载。跳过的是本机未开放文件符号链接权限的 Windows 用例;目录 junction 仍执行。
|
|
9
|
+
- 本节仅记录本地 Windows 验证。Linux 与 Windows 的远端发布门禁、npm 实际发布和 GitHub Release 以 `v0.5.0` 工作流结果为准。
|
|
10
|
+
|
|
11
|
+
## 完整内核能力演进(2026-10-12,本地未发布)
|
|
12
|
+
|
|
13
|
+
- 分支 `codex/kernel-generation-complete`,基线 `4d34df6`,设计计划提交 `4ba6037`。承接十一模块拆分,实现大日志落盘/摘要/分页、开发自动重载、隔离文件探测;见[能力指南](kernel-generation.md)与[双轴审查记录](superpowers/reviews/2026-10-12-kernel-generation-review.md)。
|
|
14
|
+
- 实际超过 5 MiB 输出,stream 完整交给消费者落盘,背压、有限尾部、取消和最后一块消费者超时验证通过;buffer 保留 OUTPUT_LIMIT。CLI/TUI/Web 贯通完整日志分页,运行事件和独立步骤摘要分别有预算。
|
|
15
|
+
- 文件探测验证普通目录、缺失、UNC 跳过、取消、超时、并发/排队及未回收占用。开发重载用真实子进程验证依赖文件更新、连续保存、业务空闲等待、启动失败修复、关闭错误及超时,以及 Web 端口和令牌保持。
|
|
16
|
+
- `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 提示不影响构建成功。
|
|
17
|
+
- 真实浏览器执行 800 条中文日志,正文 413628 字节;游标 0 → 65536 → 131071 → 196606 正常翻页,步骤显示成功。链接源码更新后同一页面自动重连,未保存的标题草稿保留,原运行日志仍可读取。临时服务器已关闭;本地截图 `.cache/generation-web-verified.png`。
|
|
18
|
+
- 本轮是 Windows、Node 24.15.0 验收。普通文件 symlink 因权限跳过,目录 junction 测试实际执行。真实故障 NFS/SMB 与远端 Linux CI 未执行;不承诺内核 I/O 立即可杀、运行中无缝升级或 TUI 未保存草稿跨重启保留。未提升版本、推送、发布或升级全局安装。
|
|
19
|
+
|
|
20
|
+
## 十一模块内核演进(2026-10-12,本地未发布)
|
|
21
|
+
|
|
22
|
+
- 分支 `codex/modular-kernel-evolution`,基线 `2d3316b`;设计提交 `7485ba5`。新增 platform、logs、workflow、plugin、workspace、devtools、CLI 七个内部包,加现有 core、SDK、pack、Web 共十一模块。参见[模块架构](modules.md)及各包 README。
|
|
23
|
+
- 迁移 36 个实现文件;包声明 exports 和生产依赖,架构测试验证普通/peer 依赖无环、禁止跨包私有导入、全部公开入口进入 npm 文件清单。core 兼容子入口和公开 npm 名称保持,SDK_VERSION、产品版本与用户数据格式未变。
|
|
24
|
+
- 日志缓存、串行写入和快照归 logs;普通动作上下文不再默认附带 application,Web 服务接口保持;pack 接收声明快照,不访问活动 host/store。普通发行包含可选 pack,只读发行裁剪它;两种载荷均有实际运行测试。
|
|
25
|
+
- 独立整分支审查发现一项 Important、一项 Minor,均先复现再修复:日志保存失败时 Web 的未处理拒绝,以及 Web model 公开入口未进入发布文件。定向 **29/29** 通过,详见[审查与裁定](superpowers/reviews/2026-10-12-modular-kernel-review.md)。
|
|
26
|
+
- 修复后 `npm run dist:npm` 成功;开发归档 `dist/yanglaofish-fishtools-0.4.0.tgz` 为 **9,675,198 字节,284 个生产包**。包含 Web 构建与许可收集;第三方 `use client` 提示仍存在,无构建错误。
|
|
27
|
+
- 设置 `FISHTOOLS_TEST_NPM_ARCHIVE` 指向该修复后归档,完整 `npm test` **250/250 通过**,零失败、零跳过,153.0 秒。覆盖离线全局安装、脱离源码运行、外部插件安装、再次导出、便携包运行与内部 npm;日志失败测试通过真实 Web HTTP API 和严格未处理拒绝模式验证进程存活。
|
|
28
|
+
- 这是 Windows/Node 24.15.0 本地验收;没有执行本轮远端 Linux CI,没有推送或发布。归档仍使用开发中的 0.4.0 版本号,不替换已发布版本。大日志持续落盘/内存摘要、热重载、隔离网络文件探测仍为后续阶段。
|
|
29
|
+
|
|
30
|
+
## Issue #3 正文与评论增量(2026-10-12,本地未发布)
|
|
31
|
+
|
|
32
|
+
- 分支 `codex/issue-3-assessment`,基线 `7d9b21f`。重新读取 [issue 正文与评论](https://github.com/yanglaofish/Fishtools/issues/3),按用户“合理就改”授权落实有限质量检查、validate 边界说明与日志体积可见性。
|
|
33
|
+
- 新增 `plugin lint`:元信息、嵌套字段标题、布尔 schema 提示、AST 直接 console.log 与可识别运行依赖检查;源码不自动修改。validate 的运行返回值说明放在 `notes`,JSON 可直接解析。
|
|
34
|
+
- `/logs` 和 `/config` 新增按需体积统计,包括未结束运行,跳过目录/文件链接及非 UUID 目录,不读取正文或删除业务文件。共享目录、文件长度快照与没有单次运行上限均明确说明。
|
|
35
|
+
- 独立审查发现两项 P2 与一项 P3:Draft-07 元组/contains/dependencies 漏递归、日志根链接跟随、UUID 名称过滤过宽。三项均先新增失败复现,再修复;独立复核通过。修复后的定向检查 **17/17** 通过。
|
|
36
|
+
- 最终重新构建 `npm run dist:npm` 成功,开发归档 9,643,345 字节、277 个包,包含 Acorn。构建仍有第三方 `use client` 指令提示,无构建错误;另在仓库外解压开发归档,执行 create → lint --json,确认新增工具与依赖可用。
|
|
37
|
+
- 使用最终开发归档设置 `FISHTOOLS_TEST_NPM_ARCHIVE` 后完整 `npm test` **241/241 通过**,零失败、零跳过,175.6 秒;包含 npm 离线安装、脱离源码运行和再次导出。本节仅记录本地 Windows 验收,未执行本轮远端双平台 CI。
|
|
38
|
+
- 实测子进程输出 5 MiB 触发默认 `OUTPUT_LIMIT`,这是每流 4 MiB 的既有严格缓冲策略,不是 run.md 文件截断阈值。日志持续增长与内存缓存仍需治理;路线图已明确持久化/摘要/保留/分页归 logs 模块、进程模块提供输出流。
|
|
39
|
+
- 网络挂载补充文档约定与取消局限;未实现 ctx.fs、隔离文件探测、热重载或大日志流式治理。CP936 中文乱码在本地 Node 24.15.0 的实际 CMD TTY 和 UTF-8 重定向测试中未复现,未改输出编码。未升级版本、推送或发布;同名 0.4.0 本地归档仅为开发验收,不替换已发布版本。
|
|
2
40
|
|
|
3
41
|
## 0.4.0 发布前验证(2026-10-12)
|
|
4
42
|
|
|
5
43
|
- 用户授权使用 `code-review` 验证处理后推送和发包。以 `v0.3.0` 为固定基线并行审查 Standards / Spec;记录见[双轴审查](superpowers/reviews/2026-10-12-plugin-release-review.md)。两个独立 P2 均已先失败复现再修复:可空对象的动态字段解析,以及 Windows 候选解释器错误优先搜索宿主启动目录。
|
|
6
44
|
- `npm run dist:npm` 构建成功,版本和 CLI 同步为 0.4.0;归档含 276 个包。设置 `FISHTOOLS_TEST_NPM_ARCHIVE` 指向该归档后,完整 `npm test` **230/230 通过**,零失败、零跳过,159.3 秒,包括离线全局安装、脱离源码调用和再次导出。
|
|
7
|
-
-
|
|
45
|
+
- 输出默认值迁移、源码引用需重启、旧版宿主清理前退出等说明已更新。
|
|
46
|
+
- 提交 `f529244` 的[正式发布工作流](https://github.com/yanglaofish/Fishtools/actions/runs/38206420406)全部成功:Windows/Ubuntu 各 **230/230**,两平台自包含包及无 Node 的断网只读 Debian 容器检查通过;[普通分支 CI](https://github.com/yanglaofish/Fishtools/actions/runs/38206420482)也成功。
|
|
47
|
+
- 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
48
|
|
|
9
49
|
## 2026-10-12 第三方插件开发体验(本地未发布)
|
|
10
50
|
|