Documentation
¶
Overview ¶
Package store 是 ~/.conduct 下的托管工作流 store:纯文件、按名寻址,无数据库。
只负责持久化与系统元数据(createdAt / updatedAt)的写入;定义的语义校验由 workflow.Validate 在命令层把关(store 不重复校验,见各 CLI 命令)。
Index ¶
- Variables
- type Store
- func (s *Store) AppendTrace(id string, entry run.TraceEntry) (err error)
- func (s *Store) CountProgress(id string) (int, error)
- func (s *Store) CountTrace(id string) (int, error)
- func (s *Store) Create(def *workflow.Definition) error
- func (s *Store) CreateRun(record *run.Record) error
- func (s *Store) Delete(name string) error
- func (s *Store) Exists(name string) bool
- func (s *Store) List() ([]*workflow.Definition, []error, error)
- func (s *Store) ListRuns() ([]*run.Record, []error, error)
- func (s *Store) Load(name string) (*workflow.Definition, error)
- func (s *Store) LoadRun(id string) (*run.Record, error)
- func (s *Store) LoadTrace(id string) ([]run.TraceEntry, error)
- func (s *Store) ReadSummary(id string) (string, error)
- func (s *Store) RemoveRun(id string) error
- func (s *Store) RemoveSummary(id string) error
- func (s *Store) Rename(oldName, newName string) error
- func (s *Store) Save(def *workflow.Definition) error
- func (s *Store) SummaryPath(id string) (string, error)
- func (s *Store) WriteRun(record *run.Record) error
- func (s *Store) WriteSummary(id, markdown string) error
Constants ¶
This section is empty.
Variables ¶
var ( // ErrRunExists 表示目标 run id 已被占用(不覆盖历史)。 ErrRunExists = errors.New("运行已存在") // ErrRunNotExist 表示目标运行记录不存在。 ErrRunNotExist = errors.New("运行不存在") // ErrSummaryNotExist 表示 run-summary.md 尚未生成(多为 running 期,收尾节点还没写)。 // 供 handler 映射 404,与「运行本身不存在」区分。 ErrSummaryNotExist = errors.New("运行总结尚未生成") )
var ( // ErrExists 表示目标工作流名已被占用。 ErrExists = errors.New("工作流已存在") // ErrNotExist 表示目标工作流不存在。 ErrNotExist = errors.New("工作流不存在") )
Functions ¶
This section is empty.
Types ¶
type Store ¶
type Store struct {
// contains filtered or unexported fields
}
Store 指向一个工作流 store 根目录(生产为 ~/.conduct,测试可指向临时目录)。
func (*Store) AppendTrace ¶
func (s *Store) AppendTrace(id string, entry run.TraceEntry) (err error)
AppendTrace 向 trace.jsonl 追加一条步骤记录(单行 JSON)。
func (*Store) CountProgress ¶ added in v0.0.2
CountProgress 统计一次运行的进度分子 k = trace 中「唯一 stepIndex 且(最后一次记录)success」的步数 (去重逻辑同 run.ProgressCount)。列表页为每个 run 算进度时用它替代 CountTrace 的数行数——resume 保留 失败行 + 续写补跑行会让同一 stepIndex 出现多条,数行数会使 k 越过分母 N;按 stepIndex 去重保 k ≤ N。 逐行流式解析、只取 stepIndex/success 两字段(不 materialize MB 级 input/output);行读取健壮性同 LoadTrace(只认完整行、容忍 \r\n、末尾半行丢弃不报损坏)。文件缺失视为 0。
func (*Store) CountTrace ¶
CountTrace 统计某 run 的 trace 完整行数(= 落盘的物理记录条数,含 resume 后同一 stepIndex 的多条)。 只数 '\n' 字节、绝不解析 JSON——单行可达 MB 级,全量 LoadTrace 只为数行数会拖垮列表。 文件缺失视为 0;末尾无换行的半行(正在写入)自然不计入。 注意:进度分子 k 已改用按 stepIndex 去重的 CountProgress(防 resume 后 k>N,见其文档与 cli-runtime.md 〈run resume〉),本函数数的是全量物理行数,语义是「已落盘多少条 trace」,非「完成到第几步」。
func (*Store) Create ¶
func (s *Store) Create(def *workflow.Definition) error
Create 新建一份工作流:要求 def.Name 已设且未占用;写入 createdAt / updatedAt 与规范化形态。
func (*Store) CreateRun ¶
CreateRun 新建一次运行的目录并写入初始 run.json(开跑即写,status=running)+ 空 trace.jsonl。 目录已存在即报错(run id 撞车不静默覆盖历史)。
func (*Store) List ¶
func (s *Store) List() ([]*workflow.Definition, []error, error)
List 列出 store 内全部工作流,按 updatedAt 倒序(最近修改在前,updatedAt 相同再按 name 升序兜底); store 为空 / 目录尚未创建时返回空切片、不报错。单个文件解析失败不连累其余:跳过并计入第二个返回值 skipped(每项一个解析错误),由调用方决定如何告警。第三个返回值仅在目录不可读等致命情形非 nil。
排序须先加载各 workflow 取 updatedAt 再排(而非加载前按名排)——与 ListRuns 的时间倒序同一「最近优先」 心智,但比较字段是 updatedAt(不复用比较 startedAt 的 startedAfter)。一处改则 CLI workflow list 与 UI 工作流列表(handleListWorkflows 直接沿用本顺序、前端不二次排序)同源同序。
func (*Store) ListRuns ¶
ListRuns 列出全部运行记录,按 startedAt 倒序(新在前);目录不存在返回空。 单个 run.json 损坏不连累其余:跳过并计入 skipped。
func (*Store) Load ¶
func (s *Store) Load(name string) (*workflow.Definition, error)
Load 读入一份工作流;不存在时返回 ErrNotExist。
func (*Store) LoadTrace ¶
func (s *Store) LoadTrace(id string) ([]run.TraceEntry, error)
LoadTrace 读入某 run 的 trace.jsonl(逐行解析);文件缺失视为空 trace(尚未写入任何步骤)。 用 bufio.Reader.ReadBytes('\n') 而非 Scanner:单行产物可达 MB 级,Scanner 的 token 上限会 ErrTooLong 崩; 且只解析以换行结尾的完整行——末尾无换行的残块视为「正在写入的半行」丢弃,不当成损坏报错。
func (*Store) ReadSummary ¶
ReadSummary 读 run-summary.md 全文;尚未生成(running 期收尾节点还没写)返回 ErrSummaryNotExist。 WriteSummary 走 atomicWrite(rename 原子),故不存在读到半文件的情况。
func (*Store) RemoveRun ¶ added in v0.0.2
RemoveRun 删除一条运行记录的整个目录(runs/<id>/,三件套连同目录一并移除);不存在时返回 ErrRunNotExist。id 非法(防路径穿越)时报错。其它运行分毫不动——各 run 靠自身快照自解释、互不依赖。
func (*Store) RemoveSummary ¶ added in v0.0.2
RemoveSummary 删除某 run 的 run-summary.md;文件不存在视为已删除,供 resume 切回 running 时清理旧终态报告。
func (*Store) Save ¶
func (s *Store) Save(def *workflow.Definition) error
Save 覆盖既有工作流(edit):保留原 createdAt、重戳 updatedAt。
func (*Store) SummaryPath ¶
SummaryPath 返回某 run 的 run-summary.md 绝对路径(供 CLI 收尾提示);id 非法时报错。
func (*Store) WriteSummary ¶
WriteSummary 写 run-summary.md(收尾生成)。