store

package
v0.0.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 9, 2026 License: MIT Imports: 13 Imported by: 0

Documentation

Overview

Package store 是 ~/.conduct 下的托管工作流 store:纯文件、按名寻址,无数据库。

只负责持久化与系统元数据(createdAt / updatedAt)的写入;定义的语义校验由 workflow.Validate 在命令层把关(store 不重复校验,见各 CLI 命令)。

Index

Constants

This section is empty.

Variables

View Source
var (
	// ErrRunExists 表示目标 run id 已被占用(不覆盖历史)。
	ErrRunExists = errors.New("运行已存在")
	// ErrRunNotExist 表示目标运行记录不存在。
	ErrRunNotExist = errors.New("运行不存在")
	// ErrSummaryNotExist 表示 run-summary.md 尚未生成(多为 running 期,收尾节点还没写)。
	// 供 handler 映射 404,与「运行本身不存在」区分。
	ErrSummaryNotExist = errors.New("运行总结尚未生成")
)
View Source
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 Default

func Default() (*Store, error)

Default 返回生产 store,根目录固定为 ~/.conduct。

func New

func New(root string) *Store

New 用给定根目录构造 store。

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

func (s *Store) CountProgress(id string) (int, error)

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

func (s *Store) CountTrace(id string) (int, error)

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

func (s *Store) CreateRun(record *run.Record) error

CreateRun 新建一次运行的目录并写入初始 run.json(开跑即写,status=running)+ 空 trace.jsonl。 目录已存在即报错(run id 撞车不静默覆盖历史)。

func (*Store) Delete

func (s *Store) Delete(name string) error

Delete 删除一份工作流;不存在时返回 ErrNotExist。

func (*Store) Exists

func (s *Store) Exists(name string) bool

Exists 报告某名字的工作流是否已入库。非法名一律视为不存在(不触碰文件系统)。

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

func (s *Store) ListRuns() ([]*run.Record, []error, error)

ListRuns 列出全部运行记录,按 startedAt 倒序(新在前);目录不存在返回空。 单个 run.json 损坏不连累其余:跳过并计入 skipped。

func (*Store) Load

func (s *Store) Load(name string) (*workflow.Definition, error)

Load 读入一份工作流;不存在时返回 ErrNotExist。

func (*Store) LoadRun

func (s *Store) LoadRun(id string) (*run.Record, error)

LoadRun 读入某 run 的 run.json;不存在时返回 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

func (s *Store) ReadSummary(id string) (string, error)

ReadSummary 读 run-summary.md 全文;尚未生成(running 期收尾节点还没写)返回 ErrSummaryNotExist。 WriteSummary 走 atomicWrite(rename 原子),故不存在读到半文件的情况。

func (*Store) RemoveRun added in v0.0.2

func (s *Store) RemoveRun(id string) error

RemoveRun 删除一条运行记录的整个目录(runs/<id>/,三件套连同目录一并移除);不存在时返回 ErrRunNotExist。id 非法(防路径穿越)时报错。其它运行分毫不动——各 run 靠自身快照自解释、互不依赖。

func (*Store) RemoveSummary added in v0.0.2

func (s *Store) RemoveSummary(id string) error

RemoveSummary 删除某 run 的 run-summary.md;文件不存在视为已删除,供 resume 切回 running 时清理旧终态报告。

func (*Store) Rename

func (s *Store) Rename(oldName, newName string) error

Rename 改名:old 须存在、new 须未占用;保留 createdAt、重戳 updatedAt、改内部 name。

func (*Store) Save

func (s *Store) Save(def *workflow.Definition) error

Save 覆盖既有工作流(edit):保留原 createdAt、重戳 updatedAt。

func (*Store) SummaryPath

func (s *Store) SummaryPath(id string) (string, error)

SummaryPath 返回某 run 的 run-summary.md 绝对路径(供 CLI 收尾提示);id 非法时报错。

func (*Store) WriteRun

func (s *Store) WriteRun(record *run.Record) error

WriteRun 原子重写 run.json(增量更新 artifacts / 收尾写终态都走它)。

func (*Store) WriteSummary

func (s *Store) WriteSummary(id, markdown string) error

WriteSummary 写 run-summary.md(收尾生成)。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL