update domain rules for edge and node
This commit is contained in:
parent
aa6b76eb01
commit
4752a14dae
2 changed files with 20 additions and 7 deletions
|
|
@ -22,17 +22,23 @@
|
|||
|
||||
## 주요 구성 요소
|
||||
|
||||
- `transport.Server` — proto-socket TCP 서버 wrapper
|
||||
- `node.Registry` — 연결된 node의 `NodeEntry` 저장/조회
|
||||
- `transport.Server` — proto-socket TCP 서버 wrapper; NodeStore와 Registry를 모두 주입받아 등록 흐름을 처리
|
||||
- `node.Registry` — 연결된 node의 `NodeEntry` 저장/조회 (ID·alias 이중 인덱스, 동시성 안전)
|
||||
- `node.NodeEntry` — node ID, alias, TCP client 정보
|
||||
- `node.NodeStore` — 사전 등록된 `NodeRecord`를 token/ID로 조회; 설정 파일에서 seed
|
||||
- `node.NodeRecord` — 사전 등록된 node 정의 (ID, alias, token, adapter/runtime config)
|
||||
- `node.BuildConfigPayload()` — `NodeRecord`의 adapter 설정을 proto `NodeConfigPayload`로 변환하는 mapper
|
||||
- `bootstrap.Module` — edge 서버와 metrics lifecycle 구성
|
||||
- `consoleEventRouter` — console 모드에서 run event를 표준 출력으로 라우팅 (`cmd/edge/`)
|
||||
|
||||
## 유지할 패턴
|
||||
|
||||
- edge는 사전 등록된 node 정의를 검증하고 연결 상태를 registry에 반영하는 역할을 먼저 안정화한다.
|
||||
- 외부 OpenAI-compatible HTTP API는 node/transport 안정화 이후 확장한다.
|
||||
- node가 연결 직후 RegisterRequest를 보내고 edge가 RegisterResponse로 중앙 설정을 응답하는 흐름을 유지한다.
|
||||
- registry는 동시성 안전성을 유지하고 외부로 내부 map을 노출하지 않는다.
|
||||
- Registry는 동시성 안전성을 유지하고 외부로 내부 map을 노출하지 않는다.
|
||||
- NodeStore는 설정 파일에서 한 번 seed되며 런타임 중 변경하지 않는다; token 중복·빈 token은 LoadFromConfig에서 즉시 거부한다.
|
||||
- adapter config 변환(mapper)은 `node.BuildConfigPayload()`에서만 수행하고 transport 레이어에 변환 로직을 두지 않는다.
|
||||
|
||||
## 다른 도메인과의 경계
|
||||
|
||||
|
|
|
|||
|
|
@ -28,16 +28,23 @@
|
|||
- `runtime.Adapter` — 모델/CLI 실행 어댑터 계약
|
||||
- `runtime.Router` — 실행 요청을 구체적인 `ExecutionSpec`으로 변환하는 계약
|
||||
- `node.Node` — `transport.Handler` 구현체이자 실행 파이프라인 조정자
|
||||
- `transport.Session` — edge와 연결된 node 세션 및 실행 취소 함수 관리
|
||||
- `adapters.Registry` — 사용 가능한 node 어댑터 등록/조회
|
||||
- `node.runManager` — run ID 기준 `runHandle`(cancel, done) 등록/해제/취소 관리; `node.Node` 내부에서만 사용
|
||||
- `transport.Session` — edge와 연결된 node 세션 및 메시지 처리
|
||||
- `adapters.Registry` — 어댑터 등록/조회 및 `LifecycleAdapter` start/stop lifecycle 관리 (실패 시 역순 롤백)
|
||||
- `adapters.LifecycleAdapter` — start/stop lifecycle이 필요한 어댑터의 optional 인터페이스
|
||||
- `adapters.BuildFromPayload()` — edge에서 받은 `NodeConfigPayload`로 `Registry`를 초기화하는 factory
|
||||
- `adapters/cli/status` — claude/codex/gemini CLI 상태 파서 (사용량 한도, reset 시각 등)
|
||||
- `adapters/cli.lineEmitter` — stdout 한 줄을 파싱해 `RuntimeEvent`를 반환하는 내부 인터페이스; `emitters.go`에서 format별로 등록
|
||||
- `store.Store` — 실행 상태와 결과 저장
|
||||
|
||||
## 유지할 패턴
|
||||
|
||||
- `runtime` 패키지에는 도메인 타입과 인터페이스를 두고 구체 구현 의존성을 넣지 않는다.
|
||||
- transport/proto 타입은 `node.Node` 경계에서 runtime 타입으로 변환한다.
|
||||
- 어댑터 추가 시 `runtime.Adapter`를 구현하고 bootstrap registry에 등록한다.
|
||||
- 실행 취소는 run ID 기준으로 세션에 등록하고 실행 종료 시 반드시 해제한다.
|
||||
- 어댑터 추가 시 `runtime.Adapter`를 구현하고 `adapters.BuildFromPayload()` 또는 bootstrap registry에 등록한다.
|
||||
- 실행 취소는 run ID 기준으로 `runManager`에 등록하고 실행 종료 시 반드시 `deregister`로 해제한다.
|
||||
- `adapters.Registry`의 start/stop은 bootstrap lifecycle에서만 호출하고 개별 adapter에서 직접 호출하지 않는다.
|
||||
- cli adapter의 출력 format별 파싱 로직은 `lineEmitter` 구현체로 분리하고 `node.Node`에 분기문으로 박지 않는다.
|
||||
- node 내부 변경은 가능한 대상 패키지 테스트를 먼저 추가하거나 갱신한다.
|
||||
|
||||
## 다른 도메인과의 경계
|
||||
|
|
|
|||
Loading…
Reference in a new issue