"""pathways.nodes - Node types for pathways.

Six node types:

IO:
- InputNode: Declares pathway inputs with optional schema validation
- OutputNode: Declares pathway outputs with mapping from upstream nodes

PROCESSING:
- LLMNode: Direct LLM generation (the only node that costs money)
- ToolNode: Deterministic function call with Jinja2-templated args

FLOW CONTROL:
- ApprovalNode: Human-in-the-loop approval gate
- ForEachNode: Iterate a list, run a sub-pathway per item

COMPOSITION:
- PathwayNode: Nest one pathway inside another as a single node

NodeTypeRegistry is NOT re-exported here. Import it directly:
    from core.pathways.nodes.registry import NodeTypeRegistry
"""

from core.pathways.models.tool import (
    ToolCall,
    ToolCallPlan,
    ToolExecutionResult,
    ToolResult,
)
from core.pathways.nodes.approval import ApprovalNode
from core.pathways.nodes.base import NodeBase
from core.pathways.nodes.execution import (
    PathwayEvent,
    PathwayMetrics,
    PathwayRecord,
    PathwayStatus,
)
from core.pathways.nodes.for_each import ForEachNode
from core.pathways.nodes.foundational import InputNode, OutputNode
from core.pathways.nodes.llm import LLMNode
from core.pathways.nodes.sub_pathway import PathwayNode
from core.pathways.nodes.tool import ToolNode

__all__ = [
    "ApprovalNode",
    "ForEachNode",
    "InputNode",
    "LLMNode",
    "NodeBase",
    "OutputNode",
    "PathwayEvent",
    "PathwayMetrics",
    "PathwayNode",
    "PathwayRecord",
    "PathwayStatus",
    "ToolCall",
    "ToolCallPlan",
    "ToolExecutionResult",
    "ToolNode",
    "ToolResult",
]
