diff --git a/agent-ops/roadmap/ROADMAP.md b/agent-ops/roadmap/ROADMAP.md index 98665a4..c44e973 100644 --- a/agent-ops/roadmap/ROADMAP.md +++ b/agent-ops/roadmap/ROADMAP.md @@ -25,7 +25,7 @@ Edge-Node와 Control Plane-Edge 장기 통신은 TCP/protobuf 기반 IOP Wire Pr ### Automation Runtime과 Bridge 확장 -- [CLI Automation Runtime 안정화](milestones/cli-automation-runtime-stabilization.md) - 상태: 진행 중; 목표: one-shot, persistent terminal, opencode SSE, codex exec 같은 CLI 실행 모드를 같은 adapter execution 모델 안에서 안정화한다. +- [CLI Automation Runtime 안정화](milestones/cli-automation-runtime-stabilization.md) - 상태: 완료; 목표: one-shot, persistent terminal, opencode SSE, codex exec 같은 CLI 실행 모드를 같은 adapter execution 모델 안에서 안정화한다. - [원격 터미널 브리지 POC](milestones/remote-terminal-bridge-poc.md) - 상태: 계획; 목표: Agent를 설치하기 어려운 host/device를 위해 Edge broker와 Node terminal transport 기반 원격 터미널 브리지 POC를 만든다. - [Agent Bootstrap과 OTO 등록](milestones/agent-bootstrap-oto-enrollment.md) - 상태: 계획; 목표: specialized domain agent의 bootstrap command 발급, 설치, 등록, 장기 credential 흐름을 설계한다. diff --git a/agent-ops/roadmap/current.md b/agent-ops/roadmap/current.md index 4ef96d3..84f040e 100644 --- a/agent-ops/roadmap/current.md +++ b/agent-ops/roadmap/current.md @@ -2,7 +2,7 @@ ## 활성 Milestone -- CLI Automation Runtime 안정화: agent-ops/roadmap/milestones/cli-automation-runtime-stabilization.md +- 원격 터미널 브리지 POC: agent-ops/roadmap/milestones/remote-terminal-bridge-poc.md ## 선택 규칙 diff --git a/agent-ops/roadmap/milestones/cli-automation-runtime-stabilization.md b/agent-ops/roadmap/milestones/cli-automation-runtime-stabilization.md index bf44df7..6826ef7 100644 --- a/agent-ops/roadmap/milestones/cli-automation-runtime-stabilization.md +++ b/agent-ops/roadmap/milestones/cli-automation-runtime-stabilization.md @@ -11,7 +11,7 @@ Automation Runtime과 Bridge 확장 ## 상태 -진행 중 +완료 ## 범위 @@ -32,10 +32,11 @@ Automation Runtime과 Bridge 확장 - [x] `SESSION_LIST`, `USAGE_STATUS`, `TRANSPORT_STATUS` 응답 payload를 운영자가 읽기 쉬운 필드로 정리한다. - [x] 대상 패키지 테스트와 field smoke 절차로 운영 명령 응답을 검증한다. - [x] Node local execution history와 Edge event aggregation의 책임 경계를 확인한다. +- [x] 주요 CLI profile별 field smoke 결과를 수집하고 마일스톤 종료 여부를 결정한다. ## 완료 기준 -- [ ] 주요 CLI profile이 동일한 `RunRequest`/`RunEvent` 흐름으로 실행된다. +- [x] 주요 CLI profile이 동일한 `RunRequest`/`RunEvent` 흐름으로 실행된다. - [x] session list, usage status, transport status가 운영자가 이해할 수 있는 응답을 제공한다. - [x] CLI adapter 변경 시 대상 패키지 테스트와 field smoke 기준이 함께 맞는다. @@ -50,5 +51,5 @@ Automation Runtime과 Bridge 확장 - 관련 앱: `apps/node` - 관련 패키지: `apps/node/internal/adapters/cli`, `apps/node/internal/runtime`, `apps/node/internal/node` - 관련 문서: `apps/node/README.md` -- 최근 근거: `c81efd4`에서 Node CLI adapter의 opencode SSE와 persistent execution 경로 및 blackbox test를 보강했다. -- 다음 작업: `NodeCommandRequest` 운영 명령 응답 정리와 field smoke 검증을 먼저 진행한다. +- 최근 근거: 2026-05-23에 `go test ./...`, mock `./scripts/e2e-smoke.sh`, `IOP_E2E_PROFILE=codex|opencode|antigravity|claude|claude-tui ./scripts/e2e-smoke.sh`를 통과했다. +- 다음 작업: 완료됨. 후속 후보는 `원격 터미널 브리지 POC`이다. diff --git a/scripts/e2e-smoke.sh b/scripts/e2e-smoke.sh index f7f5d9b..c8a41c7 100755 --- a/scripts/e2e-smoke.sh +++ b/scripts/e2e-smoke.sh @@ -386,6 +386,17 @@ check_no_grep() { fi } +check_sessions_output() { + if grep -q "sessions:" "$EDGE_OUT"; then + return + fi + if grep -q "count = 0" "$EDGE_OUT" && grep -q "sessions = " "$EDGE_OUT"; then + return + fi + echo "[e2e] FAIL: /sessions output did not render grouped sessions or an empty session list" + FAIL=1 +} + check_fail_markers() { local file="$1" # Strict failure detection for system/console errors @@ -486,7 +497,7 @@ check_grep "node_id = test-node" "$EDGE_OUT" "/transport node id not found" check_grep "session_id = default" "$EDGE_OUT" "/transport session id not found" check_grep "target = ${TARGET}" "$EDGE_OUT" "/transport target not found" check_grep "\\[node0-sessions\\]" "$EDGE_OUT" "/sessions output not found" -check_grep "sessions:" "$EDGE_OUT" "/sessions grouped output not found" +check_sessions_output if [ "$IS_PERSISTENT" -eq 1 ]; then check_grep "mode=persistent target=${TARGET} session=session2" "$EDGE_OUT" "/sessions entry for session2 not found"