feat: refactor node spec and add mcp tools (#244)

* refactor: carve out extraction panel

* refactor: create spec versions for node types

* refactor: create a GenericNode and remove custom nodes

* feat: add python and typescript sdk

* add dograh sdk

* fix: fetch draft workflow definition over published one

* fix: fix routes of SDKs to use code gen

* chore: remove doclink dependency to reduce image size

* chore: format files

* chore: bump pipecat

* feat: let mcp fetch archived workflows on demand

* chore: fix tests

* feat: add sdk documentation

* chore: change banner and add badge
This commit is contained in:
Abhishek 2026-04-21 07:56:16 +05:30 committed by GitHub
parent 0a61ef295f
commit 00a1a22b74
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
162 changed files with 14355 additions and 3554 deletions

View file

@ -14,14 +14,17 @@ from unittest.mock import Mock
import pytest
from api.services.workflow.dto import (
AgentNodeData,
AgentRFNode,
EdgeDataDTO,
EndCallNodeData,
EndCallRFNode,
ExtractionVariableDTO,
NodeDataDTO,
NodeType,
Position,
ReactFlowDTO,
RFEdgeDTO,
RFNodeDTO,
StartCallNodeData,
StartCallRFNode,
VariableType,
)
from api.services.workflow.workflow import WorkflowGraph
@ -252,11 +255,10 @@ def simple_workflow() -> WorkflowGraph:
"""
dto = ReactFlowDTO(
nodes=[
RFNodeDTO(
StartCallRFNode(
id="start",
type=NodeType.startNode,
position=Position(x=0, y=0),
data=NodeDataDTO(
data=StartCallNodeData(
name="Start Call",
prompt=START_CALL_SYSTEM_PROMPT,
is_start=True,
@ -273,11 +275,10 @@ def simple_workflow() -> WorkflowGraph:
],
),
),
RFNodeDTO(
EndCallRFNode(
id="end",
type=NodeType.endNode,
position=Position(x=0, y=200),
data=NodeDataDTO(
data=EndCallNodeData(
name="End Call",
prompt=END_CALL_SYSTEM_PROMPT,
is_end=True,
@ -317,11 +318,10 @@ def three_node_workflow() -> WorkflowGraph:
"""
dto = ReactFlowDTO(
nodes=[
RFNodeDTO(
StartCallRFNode(
id="start",
type=NodeType.startNode,
position=Position(x=0, y=0),
data=NodeDataDTO(
data=StartCallNodeData(
name="Start Call",
prompt=START_CALL_SYSTEM_PROMPT,
is_start=True,
@ -338,11 +338,10 @@ def three_node_workflow() -> WorkflowGraph:
],
),
),
RFNodeDTO(
AgentRFNode(
id="agent",
type=NodeType.agentNode,
position=Position(x=0, y=200),
data=NodeDataDTO(
data=AgentNodeData(
name="Collect Info",
prompt=AGENT_SYSTEM_PROMPT,
allow_interrupt=False,
@ -358,11 +357,10 @@ def three_node_workflow() -> WorkflowGraph:
],
),
),
RFNodeDTO(
EndCallRFNode(
id="end",
type=NodeType.endNode,
position=Position(x=0, y=400),
data=NodeDataDTO(
data=EndCallNodeData(
name="End Call",
prompt=END_CALL_SYSTEM_PROMPT,
is_end=True,
@ -411,11 +409,10 @@ def three_node_workflow_extraction_start_only() -> WorkflowGraph:
"""
dto = ReactFlowDTO(
nodes=[
RFNodeDTO(
StartCallRFNode(
id="start",
type=NodeType.startNode,
position=Position(x=0, y=0),
data=NodeDataDTO(
data=StartCallNodeData(
name="Start Call",
prompt=START_CALL_SYSTEM_PROMPT,
is_start=True,
@ -432,11 +429,10 @@ def three_node_workflow_extraction_start_only() -> WorkflowGraph:
],
),
),
RFNodeDTO(
AgentRFNode(
id="agent",
type=NodeType.agentNode,
position=Position(x=0, y=200),
data=NodeDataDTO(
data=AgentNodeData(
name="Collect Info",
prompt=AGENT_SYSTEM_PROMPT,
allow_interrupt=False,
@ -444,11 +440,10 @@ def three_node_workflow_extraction_start_only() -> WorkflowGraph:
extraction_enabled=False, # Explicitly disabled for testing
),
),
RFNodeDTO(
EndCallRFNode(
id="end",
type=NodeType.endNode,
position=Position(x=0, y=400),
data=NodeDataDTO(
data=EndCallNodeData(
name="End Call",
prompt=END_CALL_SYSTEM_PROMPT,
is_end=True,
@ -493,11 +488,10 @@ def three_node_workflow_no_variable_extraction() -> WorkflowGraph:
"""
dto = ReactFlowDTO(
nodes=[
RFNodeDTO(
StartCallRFNode(
id="start",
type=NodeType.startNode,
position=Position(x=0, y=0),
data=NodeDataDTO(
data=StartCallNodeData(
name="Start Call",
prompt=START_CALL_SYSTEM_PROMPT,
is_start=True,
@ -506,11 +500,10 @@ def three_node_workflow_no_variable_extraction() -> WorkflowGraph:
extraction_enabled=False,
),
),
RFNodeDTO(
AgentRFNode(
id="agent",
type=NodeType.agentNode,
position=Position(x=0, y=200),
data=NodeDataDTO(
data=AgentNodeData(
name="Collect Info",
prompt=AGENT_SYSTEM_PROMPT,
allow_interrupt=False,
@ -518,11 +511,10 @@ def three_node_workflow_no_variable_extraction() -> WorkflowGraph:
extraction_enabled=False, # Explicitly disabled for testing
),
),
RFNodeDTO(
EndCallRFNode(
id="end",
type=NodeType.endNode,
position=Position(x=0, y=400),
data=NodeDataDTO(
data=EndCallNodeData(
name="End Call",
prompt=END_CALL_SYSTEM_PROMPT,
is_end=True,