Skip to content

设计与实现

返回总览

这一页只看已经写进源码的设计图与流程图

先把功能面摊开,再顺着一次运行走到底

覆盖范围

“覆盖率 100%” 在这页里的含义,是覆盖当前仓库已经对外成立的核心能力面,而不是去画尚未实现的未来规划

功能面关键入口对应图表
工作流 DSLdefineWorkflow defineSteps defineStep.*总览图、分层设计图
kit 组装与运行时createWorkflowKit executeWorkflow总览图、分层设计图、主流程图
步骤调度与节点执行graph/scheduler nodes/*分层设计图、主流程图
CLI 参数桥接createWorkflowCliBridgeCLI 桥接流程图
命令步骤集成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 负责 contextvaluesresultscontext.tools
  • storage 负责 history checkpoint logs 三类持久化
  • shared 放跨层类型、错误、国际化、时区和文件工具

3. 一次运行的主流程图

createWorkflowKit().run() 之后,主链路大致按这个顺序推进

Loading diagram…

这里最要紧的是三条支线

  1. history 解决“以前填过什么”
  2. checkpoint 解决“上次停在哪”
  3. logs 解决“这次发生了什么”

4. 恢复与失败处理流程图

主流程图已经带到失败分支,这里把恢复链路单独拆开

Loading diagram…

这一段真正解决的是两件事

  • 下次运行要不要接着上次走
  • 这次失败后要不要把现场完整留下来

5. CLI 参数桥接流程图

这一段只讲 createWorkflowCliBridge

Loading diagram…

它的重点不在“再造一套参数系统”,而在复用同一份步骤定义

  • workflow 仍然只维护一套 step DSL
  • CLI 只是把部分输入步骤提前填进 initialValues
  • 交互式运行和脚本式运行因此共享同一个执行核心

6. 命令步骤流程图

命令步骤最容易变复杂,所以单独拆一张图

Loading diagram…

这一层把几件原本容易散开的事情收在一起

  • command 适合一条 shell 文本
  • scriptFile 适合仓库里已有脚本
  • run(context, io) 适合多步控制和上下文联动
  • renderertty 决定输出呈现
  • retry parallel allowFailure 决定执行策略

7. 状态与持久化关系图

这一张只看状态,不碰 UI

Loading diagram…

三类持久化各管一件事

类型保存什么典型用途
historyvalues 快照重跑相似 workflow
checkpointvalues + results + completedStepIds从失败或取消处恢复
logsevents 以及收尾后的 values results analysis留档、排障、审计

8. 模板、插件、国际化扩展图

这一张把“复用”和“扩展”放到一起看

Loading diagram…

这一层的取舍很直接

  • 模板解决“流程骨架复用”
  • 插件解决“运行时能力复用”
  • 国际化和时区不改变调度结构,但会影响交互文案、日志落盘和快照元数据

9. 读图顺序

第一次读源码时,按问题推进会比按目录硬读顺很多

  1. 先看总览图,知道仓库把哪些功能接到了一起
  2. 再看分层设计图,知道各目录职责落点
  3. 然后看主流程图,理解一次运行的生命周期
  4. 接着按需要进入 CLI、命令、持久化、扩展四张专题图

10. 结论

clack-kit 的核心设计不是把终端流程做成一个通用图引擎,而是围绕“终端 workflow”这个对象,稳定地接入五类能力

  • DSL 定义
  • 交互与命令执行
  • 运行时上下文
  • 可选持久化
  • 可控扩展点

因此最值得记住的不是某一个模块名,而是这条总链路

workflow definition -> kit -> engine -> scheduler -> nodes -> values/results/events -> history/checkpoint/logs