File size: 1,585 Bytes
726069c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
from __future__ import annotations

from dataclasses import dataclass, field


@dataclass(frozen=True)
class WorkflowNode:
    stage_key: str
    agent_key: str
    stage_index: int
    description: str


@dataclass
class WorkflowGraph:
    start_stage: str
    nodes: dict[str, WorkflowNode] = field(default_factory=dict)

    def add_node(self, node: WorkflowNode) -> None:
        self.nodes[node.stage_key] = node

    def get_node(self, stage_key: str) -> WorkflowNode:
        return self.nodes[stage_key]


def build_default_workflow_graph() -> WorkflowGraph:
    graph = WorkflowGraph(start_stage="orchestrator")
    graph.add_node(
        WorkflowNode(
            stage_key="orchestrator",
            agent_key="orchestrator",
            stage_index=0,
            description="Route the workflow to the next valid agent.",
        )
    )
    graph.add_node(
        WorkflowNode(
            stage_key="requirements",
            agent_key="requirements_analyst",
            stage_index=1,
            description="Extract structured requirements from raw scenario text.",
        )
    )
    graph.add_node(
        WorkflowNode(
            stage_key="design",
            agent_key="test_design",
            stage_index=2,
            description="Create concrete test-case designs from requirements.",
        )
    )
    graph.add_node(
        WorkflowNode(
            stage_key="review",
            agent_key="review",
            stage_index=3,
            description="Review coverage, oracle strength, and routing focus.",
        )
    )
    return graph