feat: 完成aide flow程序实现

This commit is contained in:
2025-12-14 22:28:37 +08:00
parent a0c9173bc4
commit 1cf99c7b5f
11 changed files with 731 additions and 1 deletions

View File

@@ -0,0 +1,54 @@
"""流程校验:环节合法性与跳转规则。"""
from __future__ import annotations
from aide.flow.errors import FlowError
class FlowValidator:
def __init__(self, phases: list[str]):
self.phases = _normalize_phases(phases)
def validate_phase_exists(self, phase: str) -> None:
if phase not in self.phases:
raise FlowError(f"未知环节: {phase}(请检查 flow.phases 配置)")
def validate_start(self, phase: str) -> None:
self.validate_phase_exists(phase)
def validate_next_part(self, from_phase: str, to_phase: str) -> None:
self.validate_phase_exists(from_phase)
self.validate_phase_exists(to_phase)
from_index = self.phases.index(from_phase)
to_index = self.phases.index(to_phase)
if to_index != from_index + 1:
raise FlowError(
f"非法跳转: {from_phase} -> {to_phase}next-part 只能前进到相邻环节)"
)
def validate_back_part(self, from_phase: str, to_phase: str) -> None:
self.validate_phase_exists(from_phase)
self.validate_phase_exists(to_phase)
from_index = self.phases.index(from_phase)
to_index = self.phases.index(to_phase)
if to_index >= from_index:
raise FlowError(
f"非法回退: {from_phase} -> {to_phase}back-part 只能回退到之前环节)"
)
def _normalize_phases(phases: list[str]) -> list[str]:
if not isinstance(phases, list) or not phases:
raise FlowError("flow.phases 配置无效:必须为非空列表")
normalized: list[str] = []
seen: set[str] = set()
for item in phases:
if not isinstance(item, str) or not item.strip():
raise FlowError("flow.phases 配置无效:环节名必须为非空字符串")
name = item.strip()
if name in seen:
raise FlowError(f"flow.phases 配置无效:环节名重复 {name!r}")
seen.add(name)
normalized.append(name)
return normalized