flow

package
v0.7.5 Latest Latest
Warning

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

Go to latest
Published: Aug 2, 2026 License: Apache-2.0 Imports: 4 Imported by: 0

Documentation

Overview

Package flow 实现垂类路由:Host 根据事实决定下一个调哪个子代理做什么。

设计原则:

  • Route 是纯函数:输入 State,输出 *Instruction。无 IO、无 Store 调用,可单测。
  • State 由 LoadState(非纯)从 Store 构造,一次性把路由需要的事实读齐。
  • 返回 nil 是合法的:表示当前没有可由确定性事实推出的 Worker 指令; Engine 再按终态、启动补裁或等待用户干预处理。

Router 覆盖的是"查表型"决策(每章下一步、弧末后处理、队列驱动), 不覆盖"语义理解型"决策(选规划师、处理用户 Steer、输出总结)。

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func StartsForwardChapter

func StartsForwardChapter(inst *Instruction, progress *domain.Progress, pending *domain.PendingCommit) bool

StartsForwardChapter 判断一条指令是否会开始尚未完成的正向新章。 它只读事实,不决定是否放行;Task/Reason 文案不参与判断。

Types

type AdvanceHoldResolution

type AdvanceHoldResolution int

AdvanceHoldResolution 是一次性暂停在当前事实下的处理结果。

const (
	AdvanceHoldKeep AdvanceHoldResolution = iota
	AdvanceHoldConsume
	AdvanceHoldConsumeAndStop
)

func ResolveAdvanceHold

func ResolveAdvanceHold(hold *domain.AdvanceHold, progress *domain.Progress) (AdvanceHoldResolution, error)

ResolveAdvanceHold 纯函数解析一次性暂停。未知条件和缺失事实显式报错, 不允许按“继续运行”静默降级。

type Instruction

type Instruction struct {
	Agent   string // architect_long / architect_short / writer / editor
	Task    string // 给子代理的任务描述
	Reason  string // 路由理由(用于事件、日志与失败裁定)
	Chapter int    // writer 任务涉及的章节号(续写/重写/打磨);0 表示不涉及(editor/architect 任务)
}

Instruction 指示 Engine 下一步直接运行的 Worker 与任务。

func Route

func Route(s State) *Instruction

Route 根据事实返回下一步确定性指令;返回 nil 由 Engine 按调用上下文处理。

决策优先级(互斥,自上而下匹配第一个):

  1. Phase=Complete → nil(Host 确定性输出总结)
  2. 规划期设定缺项且规划师可判定 → 同一规划师补齐;否则 nil(Engine 启动补裁)
  3. PendingRewrites 非空 → writer 按队列重写/打磨
  4. Flow=Reviewing → nil(dormant:当前无写入者,评审期 Flow 实为 writing)
  5. Flow=Steering → nil(用户干预处理中)
  6. 弧末评审缺失 → editor(arc review)
  7. 弧末评审有但弧摘要缺失 → editor(arc summary)
  8. 卷末弧摘要有但卷摘要缺失 → editor(volume summary)
  9. 下一弧是骨架 → architect_long(expand_arc)

10. 卷末需决策下一卷 → architect_long(append_volume / complete_book) 11. 非分层全局审阅到期 → editor(global review) 12. 非分层大纲已耗尽 → architect(决定完结或续接大纲) 13. 其它 → writer(写 next_chapter)

type State

type State struct {
	Progress *domain.Progress

	// 上一个已完成章节(Progress.CompletedChapters 末尾);为 0 表示尚未开始写作。
	LastCompleted int

	// 上一章的弧边界信息;IsArcEnd=false 时其他字段无意义。
	// 当 LastCompleted=0 或非 Layered 模式时应为 nil。
	ArcBoundary *storepkg.ArcBoundary

	// 弧末后处理的三个事实:评审 / 弧摘要 / 卷摘要是否已完成。
	HasArcReview     bool
	HasArcSummary    bool
	HasVolumeSummary bool

	// 基础设定缺项(规划阶段的补齐信号)。
	FoundationMissing []string

	// 已落盘的规划级别(save_foundation 落 scale 时写入 RunMeta)。
	// 空 = 首次规划尚未产出任何设定,规划师身份不可判定。
	PlanningTier domain.PlanningTier

	// 非分层书:最近完成章是否已有 scope=global 的全局审阅
	//(仅在 ShouldReview 触发点有意义;分层书恒 false)。
	HasGlobalReview bool
}

State 是 Route 的输入:所有事实必须在此显式声明,禁止 Route 内部读 Store。

func LoadState

func LoadState(store *storepkg.Store) (State, error)

LoadState 从 Store 读取 Route 所需的全部事实。 这是路由的"IO 边界":所有读取集中在这里,Route 保持纯。 任何读取失败都返回错误;损坏的工件与“尚未生成”是两种不同事实,Router 不得 在不完整快照上继续派单。

Jump to

Keyboard shortcuts

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