4.4 KiB
4.4 KiB
node
목적 / 책임
Edge에 연결되어 실제 adapter execution을 수행하는 IOP 노드 에이전트 영역이다. edge에서 들어온 실행 요청을 runtime 요청으로 변환하고, 라우팅된 어댑터를 실행하며, 실행 이벤트와 현재 단계의 로컬 실행 이력을 관리한다.
포함 경로
apps/node/cmd/node/— node CLI 진입점과 서브커맨드apps/node/internal/bootstrap/— fx 의존성 주입과 adapter registry 구성apps/node/internal/node/— transport handler 구현과 실행 오케스트레이션apps/node/internal/runtime/— node 도메인 타입과 핵심 인터페이스apps/node/internal/router/— RunRequest를 ExecutionSpec으로 해석하는 라우팅apps/node/internal/transport/— edge와의 TCP/protobuf 세션 및 메시지 처리apps/node/internal/adapters/— mock/ollama/vllm/cli 실행 어댑터apps/node/internal/store/— SQLite 실행 이력 저장
제외 경로
apps/edge/— Node를 관리하는 실행 그룹 컨트롤러 영역apps/control-plane/— 여러 Edge 연결 관리와 운영 화면 제공 예정 영역apps/worker/— 비동기 작업 처리 예정 영역packages/— 여러 앱이 공유하는 공통 패키지proto/— 앱 간 메시지 계약
주요 구성 요소
runtime.Adapter— adapter target 실행 계약runtime.Router— 실행 요청을 구체적인ExecutionSpec으로 변환하는 계약node.Node—transport.Handler구현체이자 실행 파이프라인 조정자node.runManager— run ID 기준runHandle(cancel, done) 등록/해제/취소 관리;node.Node내부에서만 사용transport.Session— edge와 연결된 node 세션 및 메시지 처리adapters.Registry— 어댑터 등록/조회 및LifecycleAdapterstart/stop lifecycle 관리 (실패 시 역순 롤백)adapters.LifecycleAdapter— start/stop lifecycle이 필요한 어댑터의 optional 인터페이스adapters.BuildFromPayload()— edge에서 받은NodeConfigPayload로Registry를 초기화하는 factoryadapters/cli/status— claude/codex/gemini CLI 상태 파서 (사용량 한도, reset 시각 등)adapters/cli.lineEmitter— stdout 한 줄을 파싱해RuntimeEvent를 반환하는 내부 인터페이스;emitters.go에서 format별로 등록store.Store— 실행 상태와 결과 저장
유지할 패턴
runtime패키지에는 도메인 타입과 인터페이스를 두고 구체 구현 의존성을 넣지 않는다.- transport/proto 타입은
node.Node경계에서 runtime 타입으로 변환한다. - 내부 실행 식별자는
adapter + target을 사용한다. 외부 OpenAI-compatible API나 legacy placeholder를 제외하고model을 내부 실행 대표 용어로 되돌리지 않는다. - 어댑터 추가 시
runtime.Adapter를 구현하고adapters.BuildFromPayload()또는 bootstrap registry에 등록한다. - 실행 취소는 run ID 기준으로
runManager에 등록하고 실행 종료 시 반드시deregister로 해제한다. adapters.Registry의 start/stop은 bootstrap lifecycle에서만 호출하고 개별 adapter에서 직접 호출하지 않는다.- cli adapter의 출력 format별 파싱 로직은
lineEmitter구현체로 분리하고node.Node에 분기문으로 박지 않는다. - node 내부 변경은 가능한 대상 패키지 테스트를 먼저 추가하거나 갱신한다.
다른 도메인과의 경계
- edge: edge는 node 연결 등록, adapter/runtime 설정 전달, 라우팅 진입, stream relay를 담당한다. node는 edge가 보낸 실행 요청을 처리하고 이벤트를 돌려준다.
- platform-common: node는
packages/config,packages/observability,proto/gen/iop등을 사용하지만 공통 타입/설정 자체의 소유자는 platform-common이다. - control-plane 후보: control-plane은 Node가 아니라 Edge를 통해 시스템을 제어한다. node는 control-plane 직접 연결/직접 스케줄링을 전제로 하지 않는다.
금지 사항
- node 도메인 내부에서 gRPC, WebSocket 기본 transport, actor/FSM/plugin framework를 새 기본 구조로 도입하지 않는다.
proto/gen/iop/*.pb.go생성 파일을 직접 수정하지 않는다.- 새 어댑터 구현을
node.Node에 직접 분기문으로 박아 넣지 않는다. - placeholder 상태인 control-plane/worker 책임을 node에 임시로 흡수하지 않는다.