Architecture: - director_v2: always-on brain, produces DirectorPlan with tool_sequence - thinker_v2: pure executor, runs tools from DirectorPlan - interpreter_v1: factual result summarizer, no hallucination - v2_director_drives graph: Input -> Director -> Thinker -> Output Infrastructure: - Split into 3 pods: cog-frontend (nginx), cog-runtime (FastAPI), cog-mcp (SSE proxy) - MCP survives runtime restarts (separate pod, proxies via HTTP) - Async send pipeline: /api/send/check -> /api/send -> /api/result with progress - Zero-downtime rolling updates (maxUnavailable: 0) - Dynamic graph visualization (fetched from API, not hardcoded) Tests: 22 new mocked unit tests (director_v2: 7, thinker_v2: 8, interpreter_v1: 7) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
47 lines
1.5 KiB
Python
47 lines
1.5 KiB
Python
"""Node modules — versioned nodes + shared (unversioned) nodes."""
|
|
|
|
# Shared nodes (pure code, no LLM, no versioning)
|
|
from .sensor import SensorNode
|
|
from .ui import UINode
|
|
|
|
# Versioned nodes — v1 (current)
|
|
from .input_v1 import InputNode as InputNodeV1
|
|
from .thinker_v1 import ThinkerNode as ThinkerNodeV1
|
|
from .output_v1 import OutputNode as OutputNodeV1
|
|
from .memorizer_v1 import MemorizerNode as MemorizerNodeV1
|
|
from .director_v1 import DirectorNode as DirectorNodeV1
|
|
|
|
# Versioned nodes — v2
|
|
from .director_v2 import DirectorV2Node
|
|
from .thinker_v2 import ThinkerV2Node
|
|
from .interpreter_v1 import InterpreterNode
|
|
|
|
# Default aliases (used by runtime.py until engine.py takes over)
|
|
InputNode = InputNodeV1
|
|
ThinkerNode = ThinkerNodeV1
|
|
OutputNode = OutputNodeV1
|
|
MemorizerNode = MemorizerNodeV1
|
|
DirectorNode = DirectorNodeV1
|
|
|
|
# Registry — engine.py uses this to look up node classes by name
|
|
NODE_REGISTRY = {
|
|
"sensor": SensorNode,
|
|
"ui": UINode,
|
|
"input_v1": InputNodeV1,
|
|
"thinker_v1": ThinkerNodeV1,
|
|
"output_v1": OutputNodeV1,
|
|
"memorizer_v1": MemorizerNodeV1,
|
|
"director_v1": DirectorNodeV1,
|
|
"director_v2": DirectorV2Node,
|
|
"thinker_v2": ThinkerV2Node,
|
|
"interpreter_v1": InterpreterNode,
|
|
}
|
|
|
|
__all__ = [
|
|
"SensorNode", "UINode",
|
|
"InputNodeV1", "ThinkerNodeV1", "OutputNodeV1", "MemorizerNodeV1", "DirectorNodeV1",
|
|
"DirectorV2Node", "ThinkerV2Node", "InterpreterNode",
|
|
"InputNode", "ThinkerNode", "OutputNode", "MemorizerNode", "DirectorNode",
|
|
"NODE_REGISTRY",
|
|
]
|