<!-- task=m-node-multi-target-serving-foundation/06+02,04_commands_caps plan=2 tag=REVIEW_REVIEW_API -->

# Plan - REVIEW_REVIEW_API

## 이 파일을 읽는 구현 에이전트에게

이 plan은 `code_review_local_G08_1.log`의 Required 지적만 해결한다. 구현 중 사용자에게 직접 묻지 말고, 사용자 전용 blocker가 있으면 `CODE_REVIEW-local-G08.md`의 `사용자 리뷰 요청` 섹션에 근거와 재개 조건을 기록한 뒤 멈춘다.

## Roadmap Targets

- Milestone: `agent-roadmap/phase/inference-provider-extension/milestones/node-multi-target-serving-foundation.md`
- Task ids:
  - `commands-caps`: `CAPABILITIES`, `SESSION_LIST`, `USAGE_STATUS`, provider passthrough command가 여러 adapter/profile/model target에서 모호하지 않은 결과를 반환한다.
- Completion mode: check-on-pass

## 배경

G08 구현은 `/api/*` passthrough target 보존과 `/status` header의 adapter 표시를 해결했다. 하지만 non-usage node command renderer는 여전히 `NodeCommandView.Adapter`를 버린다.

실제 `./scripts/e2e-smoke.sh` 출력에서도 다음처럼 adapter가 header에 없다.

```text
[node0-capabilities] target=fake-cli session=default
[node0-sessions] target=fake-cli session=session2
```

## 범위 결정 근거

- 서비스 DTO와 proto/runtime 경계는 이미 adapter/target/session을 보존한다. 이번 작업은 ops console formatter의 표시 누락만 보완한다.
- `USAGE_STATUS`는 G08에서 이미 보완됐으므로 수정하지 않는다.
- provider passthrough, Ollama context 정책, command concurrency는 범위 밖이다.

## 구현 체크리스트

- [ ] `FormatNodeCommandView`가 capabilities/session/transport 결과 header에 adapter/target/session identity를 함께 표시한다.
- [ ] capabilities, structured sessions, transport formatter 테스트가 adapter header를 검증한다.
- [ ] 최종 검증 명령을 실행한다.
- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.

### [REVIEW_REVIEW_API-1] Non-Usage Command Header Identity

- 문제: `apps/edge/internal/opsconsole/status.go:89`의 `FormatNodeCommandView`가 `view.Adapter`를 출력하지 않는다. `/capabilities`, `/sessions`, `/transport` 결과가 같은 target/session을 여러 adapter instance가 공유하는 환경에서 모호하다.
- 해결 방법: `FormatNodeCommandView` header를 예를 들어 `[node0-capabilities] adapter=cli@local target=codex session=default` 형태로 바꾼다. 빈 adapter는 그대로 빈 문자열로 출력해 DTO 값을 숨기지 않는다.
- 수정 파일:
  - `apps/edge/internal/opsconsole/status.go`
  - `apps/edge/internal/opsconsole/console_test.go`
- 테스트 작성:
  - `TestFormatNodeCommandView_RendersSortedResult`에 `Adapter: "cli@local"`을 넣고 header에 `adapter=cli@local target=codex session=default`가 있는지 검증한다.
  - `TestFormatNodeCommandView_RendersStructuredSessions`에 adapter assertion을 추가한다.
  - `TestFormatNodeCommandView_RendersTransportStatusKeys`도 header adapter를 검증한다.
- 중간 검증:
  - `go test -count=1 ./apps/edge/internal/opsconsole`

## 최종 검증

```bash
go test -count=1 ./apps/edge/internal/opsconsole
./scripts/e2e-smoke.sh
```

`./scripts/e2e-smoke.sh` 출력에서 `/capabilities`, `/sessions`, `/transport` 결과 header가 adapter/target/session을 모두 표시하는지 확인하고, 실제 stdout/stderr를 `CODE_REVIEW-local-G08.md`에 붙여 넣는다.

