diff --git a/agent-ops/roadmap/ROADMAP.md b/agent-ops/roadmap/ROADMAP.md index 31ff0c4..0c82f78 100644 --- a/agent-ops/roadmap/ROADMAP.md +++ b/agent-ops/roadmap/ROADMAP.md @@ -39,8 +39,7 @@ RAG, context 구성/압축, web search, MCP 정책, tool policy, output validati ### Control Plane과 Portal 운영 -- [Flutter-first Portal 마이그레이션](milestones/flutter-first-portal-migration.md) - 상태: 계획; 목표: IOP Portal의 장기 UI 기준을 Flutter 앱으로 정하고 Next.js scaffold를 제품 경로에서 제거하거나 격리한다. -- [Control Plane과 Portal](milestones/control-plane-portal.md) - 상태: 계획; 목표: 여러 Edge를 연결하고 관찰하며 Edge 설정 변경, 명령 전달, 이벤트 수신을 담당하는 중앙 제어면과 Web Portal 운영면을 구축한다. +- [Control Plane과 Portal](milestones/control-plane-portal.md) - 상태: 진행 중; 목표: 여러 Edge를 연결하고 관찰하며 Edge 설정 변경, 명령 전달, 이벤트 수신을 담당하는 중앙 제어면과 Flutter Portal 운영면을 구축한다. - [정책, 이력, 감사](milestones/policy-history-audit.md) - 상태: 계획; 목표: 권한, 정책, 실행 이력, 감사 로그를 제품 운영에 필요한 수준으로 확장한다. - [Multi-Edge 운영](milestones/multi-edge-operations.md) - 상태: 계획; 목표: 여러 Edge group을 관찰하고 운영하는 fleet-level 기능을 구축한다. @@ -49,6 +48,7 @@ RAG, context 구성/압축, web search, MCP 정책, tool policy, output validati - Edge-Node 실행 스켈레톤 - 상태: 완료; 아카이브일: 2026-05-24; 요약: Edge와 Node 사이의 등록, 설정 전달, adapter execution, event streaming, command 응답을 한 실행 흐름으로 검증했다.; 핵심 산출물/근거: `go test ./...`, `make test-e2e`, field smoke 기준 통과.; 후속 영향: Edge 입력 표면과 CLI Automation Runtime 안정화의 기반이 됐다. - Edge 입력 표면 - 상태: 완료; 아카이브일: 2026-05-24; 요약: OpenAI-compatible API와 A2A JSON-RPC API를 Edge 내부 `adapter + target` 실행 경로로 수렴시켰다.; 핵심 산출물/근거: OpenAI-compatible/A2A baseline과 `make test-e2e`의 Ollama 보조 smoke 통과.; 후속 영향: Responses API 확장은 모델 서빙과 부하 라우팅 Milestone에서 다룬다. - CLI Automation Runtime 안정화 - 상태: 완료; 아카이브일: 2026-05-24; 요약: one-shot, persistent terminal, opencode SSE, codex exec 계열 CLI 실행 모드를 같은 adapter execution 모델 안에서 안정화했다.; 핵심 산출물/근거: `go test ./...`, mock smoke, `codex|opencode|antigravity|claude|claude-tui` profile smoke 통과.; 후속 영향: 원격 터미널 브리지 POC로 이어진다. +- Flutter-first Portal 마이그레이션 - 상태: 완료; 아카이브일: 2026-05-24; 요약: Next.js `apps/web` scaffold를 제거하고 `apps/portal` Flutter 앱, Flutter Web compose 배포 흐름, Portal-Control Plane proto-socket WS hello 기반을 세웠다.; 핵심 산출물/근거: `apps/portal`, `apps/portal/Dockerfile`, `bin/web.sh`, `docker-compose.yml`, `go test ./apps/control-plane/...`, `flutter test`, `make portal-build-web` 통과.; 후속 영향: Control Plane과 Portal Milestone이 Flutter Portal 기준으로 진행 중 상태가 됐다. ## 로딩 정책 diff --git a/agent-ops/roadmap/milestones/flutter-first-portal-migration.md b/agent-ops/roadmap/archive/2026/05/flutter-first-portal-migration.md similarity index 72% rename from agent-ops/roadmap/milestones/flutter-first-portal-migration.md rename to agent-ops/roadmap/archive/2026/05/flutter-first-portal-migration.md index 5c196f4..19b8f2f 100644 --- a/agent-ops/roadmap/milestones/flutter-first-portal-migration.md +++ b/agent-ops/roadmap/archive/2026/05/flutter-first-portal-migration.md @@ -11,7 +11,7 @@ Control Plane과 Portal 운영 ## 상태 -계획 +완료 ## 구현 잠금 @@ -30,22 +30,22 @@ Control Plane과 Portal 운영 ## 필수 기능 -- [ ] [ui-source] Flutter 앱을 IOP Portal UI source of truth로 선언하고 Next.js를 기준 구현에서 제외한다. -- [ ] [next-retire] `apps/web`의 TypeScript/Next.js scaffold와 npm 기반 제품 UI 경로를 삭제한다. -- [ ] [proto-ws] Portal-Control Plane wire 경계는 proto-socket WebSocket/WSS를 기본으로 둔다. -- [ ] [dart-web-transport] Flutter Web 브라우저 타깃에서 사용할 proto-socket Dart browser WebSocket transport 기준을 마련한다. -- [ ] [entrypoints] `bin/web.sh`, compose web service, Portal 검증 명령이 Flutter-first 구조와 충돌하지 않게 정리한다. -- [ ] [docker-flutter-web] 기존 Next.js Docker 배포를 Flutter Web build 산출물 서빙 흐름으로 교체한다. -- [ ] [contract-gen] IOP protobuf 계약을 Flutter/Dart client가 소비할 생성물과 parser map 기준으로 정리한다. +- [x] [ui-source] Flutter 앱을 IOP Portal UI source of truth로 선언하고 Next.js를 기준 구현에서 제외한다. +- [x] [next-retire] `apps/web`의 TypeScript/Next.js scaffold와 npm 기반 제품 UI 경로를 삭제한다. +- [x] [proto-ws] Portal-Control Plane wire 경계는 proto-socket WebSocket/WSS를 기본으로 둔다. +- [x] [dart-web-transport] Flutter Web 브라우저 타깃에서 사용할 proto-socket Dart browser WebSocket transport 기준을 마련한다. +- [x] [entrypoints] `bin/web.sh`, compose web service, Portal 검증 명령이 Flutter-first 구조와 충돌하지 않게 정리한다. +- [x] [docker-flutter-web] 기존 Next.js Docker 배포를 Flutter Web build 산출물 서빙 흐름으로 교체한다. +- [x] [contract-gen] IOP protobuf 계약을 Flutter/Dart client가 소비할 생성물과 parser map 기준으로 정리한다. ## 완료 기준 -- [ ] 로드맵과 Portal 관련 문서에서 Next.js가 장기 제품 UI 기준 구현으로 설명되지 않는다. -- [ ] Flutter 앱이 모바일/데스크톱/웹 Portal의 기준 클라이언트로 설명된다. -- [ ] proto-socket WS/WSS가 Portal-Control Plane 통신의 기본 transport로 문서화된다. -- [ ] Flutter Web 브라우저 타깃에서 `dart:io` 의존 없이 WebSocket binary frame을 쓰는 경로가 정해져 있다. -- [ ] `apps/web`에 TypeScript/Next.js 제품 UI 코드와 npm 기반 배포 경로가 남아 있지 않다. -- [ ] Docker compose의 `web` 서비스가 Flutter Web 산출물을 빌드/서빙하는 흐름으로 동작한다. +- [x] 로드맵과 Portal 관련 문서에서 Next.js가 장기 제품 UI 기준 구현으로 설명되지 않는다. +- [x] Flutter 앱이 모바일/데스크톱/웹 Portal의 기준 클라이언트로 설명된다. +- [x] proto-socket WS/WSS가 Portal-Control Plane 통신의 기본 transport로 문서화된다. +- [x] Flutter Web 브라우저 타깃에서 `dart:io` 의존 없이 WebSocket binary frame을 쓰는 경로가 정해져 있다. +- [x] `apps/web`에 TypeScript/Next.js 제품 UI 코드와 npm 기반 배포 경로가 남아 있지 않다. +- [x] Docker compose의 `web` 서비스가 Flutter Web 산출물을 빌드/서빙하는 흐름으로 동작한다. ## 범위 제외 @@ -57,10 +57,11 @@ Control Plane과 Portal 운영 ## 작업 컨텍스트 -- 관련 경로: `apps/web/`, `apps/control-plane/`, `bin/web.sh`, `docker-compose.yml`, `apps/web/Dockerfile`, `proto/iop/`, `../proto-socket/dart/`, `../proto-socket/go/` +- 관련 경로: `apps/portal/`, `apps/control-plane/`, `bin/web.sh`, `docker-compose.yml`, `apps/portal/Dockerfile`, `proto/iop/`, `../proto-socket/dart/`, `../proto-socket/go/` - 표준선(선택): 앱은 필수 제품 표면이므로 Flutter를 Portal UI source of truth로 둔다. Next.js는 제품 UI 기준 구현으로 키우지 않는다. - 표준선(선택): proto-socket은 TCP뿐 아니라 WebSocket/WSS를 지원한다. Go 구현에는 `NewWsServer`, `DialWs`, `NewWsServerTLS`, `DialWss`가 있고 Dart 구현에는 `WsProtobufClient`, `WsProtobufServer`가 있다. - 표준선(선택): 현재 Dart proto-socket WebSocket 구현은 `dart:io` 기반이므로 mobile/desktop/server에는 맞지만 Flutter Web 브라우저 타깃에는 조건부 browser WebSocket transport가 필요하다. - 선행 작업: Specialized Agent proto-socket 연결 기반 - 후속 작업: Control Plane과 Portal, 정책/이력/감사 +- 검증: `go test ./apps/control-plane/...`, `flutter test`, `make portal-build-web` - 확인 필요: 없음 diff --git a/agent-ops/roadmap/current.md b/agent-ops/roadmap/current.md index 85dec3c..a216d97 100644 --- a/agent-ops/roadmap/current.md +++ b/agent-ops/roadmap/current.md @@ -2,10 +2,10 @@ ## 활성 Milestone -- Flutter-first Portal 마이그레이션: agent-ops/roadmap/milestones/flutter-first-portal-migration.md - 원격 터미널 브리지 POC: agent-ops/roadmap/milestones/remote-terminal-bridge-poc.md - Specialized Agent proto-socket 연결 기반: agent-ops/roadmap/milestones/specialized-agent-proto-socket-foundation.md - Agent Bootstrap과 OTO 등록: agent-ops/roadmap/milestones/agent-bootstrap-oto-enrollment.md +- Control Plane과 Portal: agent-ops/roadmap/milestones/control-plane-portal.md ## 선택 규칙 diff --git a/agent-ops/roadmap/milestones/control-plane-portal.md b/agent-ops/roadmap/milestones/control-plane-portal.md index 18ca460..2d74664 100644 --- a/agent-ops/roadmap/milestones/control-plane-portal.md +++ b/agent-ops/roadmap/milestones/control-plane-portal.md @@ -2,7 +2,7 @@ ## 목표 -여러 Edge를 연결하고 관찰하며 Edge 설정 변경, 명령 전달, 이벤트 수신을 담당하는 Control Plane과 Web Portal 운영면을 구축한다. +여러 Edge를 연결하고 관찰하며 Edge 설정 변경, 명령 전달, 이벤트 수신을 담당하는 Control Plane과 Flutter Portal 운영면을 구축한다. Portal은 NomadCode 전용 화면이 아니라 IOP가 독립적으로 운영되기 위한 범용 운영/UX 계층으로 둔다. ## 단계 @@ -11,7 +11,7 @@ Control Plane과 Portal 운영 ## 상태 -계획 +진행 중 ## 구현 잠금 @@ -25,7 +25,7 @@ Control Plane과 Portal 운영 - Control Plane Go server의 Edge connection 관리 - Portal-Control Plane, Control Plane-Edge IOP Wire Protocol 확장 -- Web Portal의 Runtime/Automation/Serving 운영 화면 기초 +- Flutter Portal의 Runtime/Automation/Serving 운영 화면 기초 - Edge 상태 조회, 설정 변경, 명령 전달, 이벤트 수신 - Edge agent 생성과 bootstrap command 발급 상태 조회/관리 - remote terminal bridge session 생성/조회/권한 확인 표면 @@ -35,16 +35,18 @@ Control Plane과 Portal 운영 - [ ] [edge-mediated] Control Plane은 Node를 직접 연결하거나 직접 스케줄링하지 않는다. - [ ] [portal-via-cp] Portal은 Control Plane을 통해 Edge 운영 상태를 조회한다. -- [ ] [portal-boundary] Portal은 IOP 자체 운영 UI/UX이며 NomadCode에 맞춘 전용 shell로 만들지 않는다. -- [ ] [server-bridge] 브라우저 직접 TCP가 어려운 구간은 Control Plane server-side bridge를 둔다. -- [ ] [http-boundary] `net/http`는 health/readiness/bootstrap 같은 보조 endpoint 용도로 유지한다. +- [x] [portal-boundary] Portal은 IOP 자체 운영 UI/UX이며 NomadCode에 맞춘 전용 shell로 만들지 않는다. +- [x] [server-bridge] 브라우저 직접 TCP가 어려운 구간은 Control Plane server-side bridge를 둔다. +- [x] [portal-wire-hello] Portal-Control Plane proto-socket WebSocket hello handshake scaffold가 구현되고 테스트되어 있다. +- [x] [http-boundary] `net/http`는 health/readiness/bootstrap 같은 보조 endpoint 용도로 유지한다. ## 완료 기준 - [ ] Control Plane이 하나 이상의 Edge 연결 상태를 조회할 수 있다. - [ ] Portal이 Edge/Node/agent 상태를 사용자에게 보여줄 수 있다. - [ ] Edge 명령 전달과 이벤트 수신 흐름이 IOP Wire Protocol 기준으로 문서화된다. -- [ ] Control Plane과 Web의 배포/검증 절차가 `docs/deploy-dev.md`와 일치한다. +- [x] Control Plane과 Flutter Portal의 배포/검증 절차가 `docs/deploy-dev.md`와 일치한다. +- [x] Portal-Control Plane proto-socket WebSocket hello handshake가 Control Plane과 Portal 테스트에서 검증된다. ## 범위 제외 @@ -56,8 +58,9 @@ Control Plane과 Portal 운영 ## 작업 컨텍스트 -- 관련 경로: `apps/control-plane`, `apps/web`, `apps/control-plane/README.md`, `apps/web/README.md`, `docs/deploy-dev.md` +- 관련 경로: `apps/control-plane`, `apps/portal`, `apps/control-plane/README.md`, `apps/portal/README.md`, `docs/deploy-dev.md`, `docker-compose.yml`, `bin/web.sh` - 표준선(선택): Control Plane은 Node를 직접 스케줄링하지 않고 Edge를 통해 관찰/제어한다. -- 선행 작업: Agent Bootstrap과 OTO 등록, 정책/이력/감사 일부 기준 +- 표준선(선택): Portal-Control Plane의 첫 wire surface는 `/portal` WebSocket의 hello handshake이며, Edge 운영 조회와 명령 전달은 후속 IOP Wire Protocol 확장에서 붙인다. +- 선행 작업: Flutter-first Portal 마이그레이션, Agent Bootstrap과 OTO 등록, 정책/이력/감사 일부 기준 - 후속 작업: Multi-Edge 운영 - 확인 필요: Portal 첫 화면 범위, Control Plane-Edge wire 우선순위, NomadCode 전용 UX 제외 기준