workflow

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: 7 Imported by: 0

Documentation

Overview

Package workflow 承载 workflow 定义的数据模型、落盘校验与展开算法。

已实现:

  • definition.go:workflow 定义 schema(节点、评测官、engineConfig 判别联合)与严格解析 / 规范化;
  • validate.go:落盘校验(结构、id、engineConfig 能力表、循环互斥、redoTarget 回跳、模板引用);
  • expand.go:把节点图展开成确定性的线性执行步骤序列(in-place 内循环 + jump-back 段循环)。

待移植(run 批):

  • render:模板变量({{sys.x}} / {{nodeId}})替换;
  • 主循环:串联各步产物与反馈,逐步驱动 engine 包中的引擎执行。

Index

Constants

View Source
const (
	StepTypeAgent     = "agent"     // 节点主体
	StepTypeEvaluator = "evaluator" // 评测官
)

执行步骤的两种类型(ExecutionStep.Type / trace 的 type 字段取值)。集中定义避免魔法串拼错。

View Source
const DefaultEvaluatorPrompt = "" /* 132-byte string literal not displayed */

DefaultEvaluatorPrompt 是首次挂载 evaluator 时自动补的默认评测提示词(自包含、不写 {{<节点id>}} 自引用)。

Variables

This section is empty.

Functions

func Render

func Render(template string, sysVars, artifacts map[string]string, validNodeID func(string) bool) string

Render 把 promptTemplate 里的变量引用替换为运行时值,语义与 Validate 的 templateVariablePattern 同源(移植自 Python 原型 render_template):

  • \{{key}} → 字面量 {{key}}(转义,不替换)
  • {{sys.x}} → sysVars["x"];未注入则保留字面量 {{sys.x}}(fail-loud,不静默成空)
  • {{nodeId}} → artifacts[nodeId];合法节点但未跑 → 空串
  • 其余 → 保留字面量(非法引用不静默吞)

sysVars 以裸名为键("userPrompt" / "cwd",不含 "sys." 前缀)。validNodeID 判定某 id 是否为定义内的合法节点(与 Validate 用同一判定,避免把非法引用当节点渲染成空串)。

func Validate

func Validate(def *Definition) error

Validate 是 ValidateStructured 的字符串化包装:把每条 Problem 拼成 "<path>: <message>"、换行连接返回, 输出与历史逐字一致(各调用方仍按整串比对 / 子串断言)。无错误返回 nil。

func ValidateName

func ValidateName(name string) error

ValidateName 校验工作流名是否合法。正则已禁掉路径分隔符(`/` `\`),额外拒绝 `.` / `..` 这两个目录特殊名,杜绝按名寻址时越出 store 目录。

Types

type Definition

type Definition struct {
	Name      string `json:"name"`
	CreatedAt string `json:"createdAt"`
	UpdatedAt string `json:"updatedAt"`
	Nodes     []Node `json:"nodes"`
}

Definition 是一份完整的工作流记录:系统管理的元数据 + 用户编写的节点定义。 name / createdAt / updatedAt 由 store 写入,nodes 是定义主体。

func ParseDefinition

func ParseDefinition(data []byte) (*Definition, error)

ParseDefinition 严格解析一份导入定义:拒绝未知字段(fail-loud,尽早暴露拼写错误)。 只做 JSON 结构解析,语义校验见 Validate。

func Scaffold

func Scaffold() *Definition

Scaffold 返回一份最小可用的骨架定义(单节点、claude-code、透传用户需求)。 name 与时间戳由 store 写入。

func (*Definition) CopyAs added in v0.0.2

func (d *Definition) CopyAs(name string) *Definition

CopyAs 从本定义深拷出一份名为 name 的新定义(造变体):只带 name 与深拷来的 nodes, 不携带时间戳(CreatedAt / UpdatedAt 留空,交给 store.Create 重戳当前时刻)。 nodes 必须深拷——Node 内含指针字段(EngineConfig / Evaluator / LoopCount),逐个 new 一份, 避免新旧定义共享底层指针后互相串改。CLI `workflow copy` 与 UI 复制端点共用此方法。

func (*Definition) Normalize

func (d *Definition) Normalize()

Normalize 补齐规范化默认值:带 evaluator / redoTarget 的节点若未写 loopCount,则补为 1。

type EngineConfig

type EngineConfig struct {
	Model           string `json:"model,omitempty"`
	Effort          string `json:"effort,omitempty"`          // 仅 claude-code
	ReasoningEffort string `json:"reasoningEffort,omitempty"` // qoder / codex
}

EngineConfig 是引擎专属的调优载荷,其合法字段由所属 Node/Evaluator 的 engine 决定 (判别联合,见 engine 包的能力表与 Validate)。所有字段选填。

type Evaluator

type Evaluator struct {
	Engine         string        `json:"engine"`
	EngineConfig   *EngineConfig `json:"engineConfig,omitempty"`
	PromptTemplate string        `json:"promptTemplate"`
}

Evaluator 是节点内联的评测官,触发 in-place 内循环;engine + engineConfig 同构于 Node。

type ExecutionStep

type ExecutionStep struct {
	Type      string // StepTypeAgent | StepTypeEvaluator
	NodeID    string
	Iteration int
}

ExecutionStep 是展开后的单个执行步骤。

func Expand

func Expand(nodes []Node) []ExecutionStep

Expand 把节点图展开成确定性的线性执行序列,含两种循环模式:

  • evaluator(in-place 内循环):同一节点「写 → 评 → 改」重复 loopCount 轮,末轮不再评;
  • redoTarget(jump-back 段循环):本节点跑完跳回 redoTarget,把二者之间的整段重跑 loopCount 轮。

从 Python 原型 paw_workflow.py:expand_workflow 移植,保持相同语义(含对前向 / 非法 redoTarget 退化为单次的兜底)。假定节点结构已通过 Validate;对非法输入仍尽量优雅降级。

type Node

type Node struct {
	ID             string        `json:"id"`
	DisplayName    string        `json:"displayName"`
	Engine         string        `json:"engine"`
	EngineConfig   *EngineConfig `json:"engineConfig,omitempty"`
	PromptTemplate string        `json:"promptTemplate"`
	Evaluator      *Evaluator    `json:"evaluator,omitempty"`
	RedoTarget     string        `json:"redoTarget,omitempty"`
	LoopCount      *int          `json:"loopCount,omitempty"`
}

Node 是工作流的单个节点。evaluator 与 redoTarget 互斥(见 Validate)。

type Problem

type Problem struct {
	Path    string
	Message string
}

Problem 是一条字段级校验错误:Path 为出错字段的点路径(如 "nodes[0].id" / "nodes[0]" / "nodes"), Message 为不含路径前缀的纯消息。供编辑器把「点校验错误 → 定位到对应字段」建立在结构而非文案格式上。

func ValidateStructured

func ValidateStructured(def *Definition) []Problem

ValidateStructured 对一份定义执行落盘校验,逐条收集字段级错误后一并返回(承 spec〈落盘校验规则〉, 比 Python 原型更严:额外强制 id 唯一、redoTarget 存在且前向、模板引用存在)。不修改 def。 返回空切片表示校验通过。Validate 是它的字符串化 thin wrapper。

Jump to

Keyboard shortcuts

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