Appearance
设计与实现
这一页只看已经写进源码的设计图与流程图
先把功能面摊开,再顺着一次运行走到底
覆盖范围
“覆盖率 100%” 在这页里的含义,是覆盖当前仓库已经对外成立的核心能力面,而不是去画尚未实现的未来规划
| 功能面 | 关键入口 | 对应图表 |
|---|---|---|
| 工作流 DSL | defineWorkflow defineSteps defineStep.* | 总览图、分层设计图 |
| kit 组装与运行时 | createWorkflowKit executeWorkflow | 总览图、分层设计图、主流程图 |
| 步骤调度与节点执行 | graph/scheduler nodes/* | 分层设计图、主流程图 |
| CLI 参数桥接 | createWorkflowCliBridge | CLI 桥接流程图 |
| 命令步骤集成 | command scriptFile run(context, io) | 命令步骤流程图 |
| 运行时上下文 | context.values context.results context.tools | 分层设计图、状态与持久化图、扩展图 |
| 持久化 | history checkpoint logs | 主流程图、状态与持久化图 |
| 中断恢复与失败处理 | checkpoint saveOnFailure confirmSaveLog | 主流程图、恢复流程图 |
| 扩展能力 | templates plugins context.tools | 扩展图 |
| 国际化与时区 | locale timeZone log timestamps | 主流程图、扩展图 |
1. 总览图
先看全景
clack-kit 到底把哪些能力接到了一条终端 workflow 里
Loading diagram…
整条线压缩后,其实就是一句话
先用 DSL 定义 workflow,再由 kit 组装运行时,把交互步骤、命令步骤、状态留存和扩展点挂到同一条执行链路里
2. 分层设计图
源码入口适合从这张图开始
Loading diagram…
边界并不绕,按职责记就够了
authoring负责声明 DSL,不负责执行runtime负责组装 renderer executor stores,并驱动整次运行graph只负责调度顺序、并行分组、跳过与 checkpoint 节点推进nodes负责具体步骤实现session负责context、values、results和context.toolsstorage负责 history checkpoint logs 三类持久化shared放跨层类型、错误、国际化、时区和文件工具
3. 一次运行的主流程图
createWorkflowKit().run() 之后,主链路大致按这个顺序推进
Loading diagram…
这里最要紧的是三条支线
history解决“以前填过什么”checkpoint解决“上次停在哪”logs解决“这次发生了什么”
4. 恢复与失败处理流程图
主流程图已经带到失败分支,这里把恢复链路单独拆开
Loading diagram…
这一段真正解决的是两件事
- 下次运行要不要接着上次走
- 这次失败后要不要把现场完整留下来
5. CLI 参数桥接流程图
这一段只讲 createWorkflowCliBridge
Loading diagram…
它的重点不在“再造一套参数系统”,而在复用同一份步骤定义
- workflow 仍然只维护一套 step DSL
- CLI 只是把部分输入步骤提前填进
initialValues - 交互式运行和脚本式运行因此共享同一个执行核心
6. 命令步骤流程图
命令步骤最容易变复杂,所以单独拆一张图
Loading diagram…
这一层把几件原本容易散开的事情收在一起
command适合一条 shell 文本scriptFile适合仓库里已有脚本run(context, io)适合多步控制和上下文联动renderer与tty决定输出呈现retryparallelallowFailure决定执行策略
7. 状态与持久化关系图
这一张只看状态,不碰 UI
Loading diagram…
三类持久化各管一件事
| 类型 | 保存什么 | 典型用途 |
|---|---|---|
| history | values 快照 | 重跑相似 workflow |
| checkpoint | values + results + completedStepIds | 从失败或取消处恢复 |
| logs | events 以及收尾后的 values results analysis | 留档、排障、审计 |
8. 模板、插件、国际化扩展图
这一张把“复用”和“扩展”放到一起看
Loading diagram…
这一层的取舍很直接
- 模板解决“流程骨架复用”
- 插件解决“运行时能力复用”
- 国际化和时区不改变调度结构,但会影响交互文案、日志落盘和快照元数据
9. 读图顺序
第一次读源码时,按问题推进会比按目录硬读顺很多
- 先看总览图,知道仓库把哪些功能接到了一起
- 再看分层设计图,知道各目录职责落点
- 然后看主流程图,理解一次运行的生命周期
- 接着按需要进入 CLI、命令、持久化、扩展四张专题图
10. 结论
clack-kit 的核心设计不是把终端流程做成一个通用图引擎,而是围绕“终端 workflow”这个对象,稳定地接入五类能力
- DSL 定义
- 交互与命令执行
- 运行时上下文
- 可选持久化
- 可控扩展点
因此最值得记住的不是某一个模块名,而是这条总链路
workflow definition -> kit -> engine -> scheduler -> nodes -> values/results/events -> history/checkpoint/logs