File size: 2,182 Bytes
96e57e5
76e192b
 
e526aa8
a9561a2
 
ee30fd7
37f9abc
 
8778e44
 
0d054b5
8778e44
 
 
0d054b5
ee30fd7
0d054b5
872f80c
0d054b5
 
 
878b473
 
 
 
 
0d054b5
 
 
ee30fd7
76e192b
96e57e5
 
 
 
76e192b
0d054b5
 
 
 
 
 
 
b40eaae
0d054b5
ee30fd7
96e57e5
0d054b5
 
76e192b
 
 
c6231ab
 
 
 
 
 
76e192b
0d054b5
 
76e192b
96e57e5
76e192b
8778e44
 
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
62
63
64
65
66
67
68
from multi_agent_sdlc.transitions import create_prepare_retest_node
from multi_agent_sdlc.reviewer import reviewer_node
from multi_agent_sdlc.agents.tester.routing import route_after_tester
from multi_agent_sdlc.tools.tester.registry import TESTER_TOOLS
from multi_agent_sdlc.agents.coder.node import coder_node
from multi_agent_sdlc.agents.planner.node import planner_node
from multi_agent_sdlc.agents.tester.node import tester_node
from multi_agent_sdlc.agents.coder.routing import route_after_coder
from multi_agent_sdlc.tools.coder.registry import CODER_TOOLS
from langgraph.graph import END, START, StateGraph
from .state import DevState
from langgraph.prebuilt import ToolNode


def build_graph():

    builder = StateGraph(DevState)
    coder_tool_node = ToolNode(
        CODER_TOOLS,
        messages_key="coder_messages",
        handle_tool_errors=True,
    )
    tester_tool_node = ToolNode(
        TESTER_TOOLS,
        messages_key="tester_messages",
        handle_tool_errors=True,
    )
    builder.add_node("planner", planner_node)
    builder.add_node("coder", coder_node)
    builder.add_node("coder_tools", coder_tool_node)
    builder.add_node("tester", tester_node)
    builder.add_node("tester_tools", tester_tool_node)
    builder.add_node(
        "prepare_retest",
        create_prepare_retest_node,
    )
    builder.add_node("reviewer", reviewer_node)

    builder.add_edge(START, "planner")
    builder.add_edge("planner", "coder")
    builder.add_conditional_edges(
        "coder",
        route_after_coder,
        {
            "coder": "coder",
            "coder_tools": "coder_tools",
            "tester": "tester",
            "prepare_retest": "prepare_retest",
        },
    )
    builder.add_conditional_edges(
        "tester",
        route_after_tester,
        {
            "tester_tools": "tester_tools",
            "reviewer": "reviewer",
            "coder": "coder",
            "tester": "tester",
        },
    )

    builder.add_edge("coder_tools", "coder")
    builder.add_edge("tester_tools", "tester")
    builder.add_edge("prepare_retest", "tester")
    builder.add_edge("reviewer", END)

    return builder.compile()