<!-- task=m-node-multi-target-serving-foundation/04+01,02_engine_profiles plan=1 tag=REVIEW_API -->

# Plan - REVIEW_API

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

이 plan은 직전 code-review FAIL의 후속이다. 사용자에게 직접 질문하지 말고, 사용자 전용 결정이 필요하면 active `CODE_REVIEW-cloud-G08.md`의 `사용자 리뷰 요청`에 증거와 재개 조건을 기록한 뒤 멈춘다.

## 배경

`plan_cloud_G07_0.log` / `code_review_cloud_G08_0.log`에서 provider profile 실행 자체는 대체로 동작한다고 판단했지만, factory가 만든 adapter의 endpoint/profile 선택을 실행까지 검증하지 못했고 capabilities command 응답에서 `InstanceKey`가 운영 표면으로 노출되지 않는 공백이 남았다.

## Roadmap Targets

- Milestone: `agent-roadmap/phase/inference-provider-extension/milestones/node-multi-target-serving-foundation.md`
- Task ids:
  - `engine-profiles`: Ollama는 여러 `base_url`/model target과 target별 `context_size`를 지원하고, vLLM/SGLang 같은 OpenAI-compatible inference engine 연결을 같은 Node 통로에서 확장할 수 있는 provider/profile 기준이 정리되어 있다.
- Completion mode: check-on-pass

## 분석 결과

### 읽은 파일

- `agent-task/m-node-multi-target-serving-foundation/04+01,02_engine_profiles/plan_cloud_G07_0.log`
- `agent-task/m-node-multi-target-serving-foundation/04+01,02_engine_profiles/code_review_cloud_G08_0.log`
- `apps/node/internal/adapters/factory.go`
- `apps/node/internal/adapters/adapters_blackbox_test.go`
- `apps/node/internal/adapters/factory_internal_test.go`
- `apps/node/internal/adapters/ollama/ollama.go`
- `apps/node/internal/adapters/vllm/vllm.go`
- `apps/node/internal/node/node.go`
- `apps/node/internal/node/node_test.go`

### 테스트 환경 규칙

- test_env: `local`
- 대상 검증은 Node adapter/factory/node command unit test와 `go test -count=1 ./apps/node/...`다.

### 실패 원인

- `BuildFromPayload` 기반 tests가 adapter 등록 여부만 확인하고, 생성된 adapter가 실제 fake endpoint/model/context로 실행되는지 확인하지 않는다.
- `runtime.Capabilities.InstanceKey`는 adapter에서 채워지지만 `CAPABILITIES` command result map으로 전달되지 않는다.

### 범위 결정 근거

- provider production hardening, route catalog 문서 보강, OpenAI route 설정 UX는 이번 follow-up 범위 밖이다.
- factory가 만든 adapter의 endpoint/profile 보존과 command result 식별자 노출만 보강한다.

### 빌드 등급

- build: `cloud-G07`, review: `cloud-G08`. 직전 리뷰가 cloud였고 factory/command 표면 검증 공백을 닫아야 하므로 같은 route를 유지한다.

## 구현 체크리스트

- [ ] `BuildFromPayload`로 생성한 Ollama multi instance adapter가 서로 다른 fake endpoint/model/context를 사용해 실행됨을 테스트한다.
- [ ] `BuildFromPayload`로 생성한 vLLM adapter가 configured endpoint의 `/v1/chat/completions`로 streaming 실행됨을 테스트한다.
- [ ] capabilities command result에 `instance_key`를 포함하고 exact instance key 요청 테스트로 검증한다.
- [ ] 최종 검증 명령을 실행한다.
- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다.

### [REVIEW_API-1] Factory Execution Coverage

- 문제: `apps/node/internal/adapters/adapters_blackbox_test.go:84`와 `apps/node/internal/adapters/factory_internal_test.go:327`은 vLLM factory 등록만 확인한다. Ollama multi endpoint도 direct adapter 테스트만 있고 factory 경유 실행 검증이 없다.
- 해결 방법: `BuildFromPayload`로 typed adapter configs를 구성한 뒤 registry에서 exact instance key로 adapter를 꺼내 `Execute`한다. Ollama는 두 fake server가 서로 다른 model과 `num_ctx`를 받는지 확인하고, vLLM은 configured endpoint가 `stream: true` request와 SSE delta/complete를 처리하는지 확인한다.
- 수정 파일 및 체크리스트:
  - [ ] `apps/node/internal/adapters/adapters_blackbox_test.go`: factory-created Ollama/vLLM execution tests 추가.
  - [ ] 필요하면 test helper만 추가하고 production code는 건드리지 않는다.
- 테스트 작성: 추가한다. 기존 direct adapter tests와 중복되더라도 factory 경유 config 보존을 명시적으로 검증한다.
- 중간 검증:
  - `go test -count=1 ./apps/node/internal/adapters/...`

### [REVIEW_API-2] Capabilities Instance Key Surface

- 문제: `runtime.Capabilities.InstanceKey`는 채워지지만 `apps/node/internal/node/node.go:219`의 command result에는 포함되지 않아 `/capabilities` 출력에서 profile/instance key가 보이지 않는다.
- 해결 방법: capabilities command result map에 `instance_key`를 추가한다. 값은 `caps.InstanceKey`를 우선하고, 비어 있으면 요청 adapter나 capabilities adapter name 중 기존 동작과 가장 호환적인 값을 사용한다.
- 수정 파일 및 체크리스트:
  - [ ] `apps/node/internal/node/node.go`: capabilities result에 `instance_key` 추가.
  - [ ] `apps/node/internal/node/node_test.go`: exact instance key capabilities 테스트가 result의 `instance_key`를 검증하도록 갱신.
- 테스트 작성: 기존 `TestOnCommandRequest_Capabilities_ExactInstanceKey` 또는 새 테스트로 충분하다.
- 중간 검증:
  - `go test -count=1 ./apps/node/internal/node/...`

## 수정 파일 요약

| 파일 | 항목 |
|------|------|
| `apps/node/internal/adapters/adapters_blackbox_test.go` | REVIEW_API-1 |
| `apps/node/internal/node/node.go` | REVIEW_API-2 |
| `apps/node/internal/node/node_test.go` | REVIEW_API-2 |

## 최종 검증

```bash
go test -count=1 ./apps/node/internal/adapters/... ./apps/node/internal/node/...
go test -count=1 ./apps/node/...
git diff --check -- apps/node/internal/adapters apps/node/internal/node apps/node/internal/runtime
```

모든 코드 변경 완료 후 반드시 `CODE_REVIEW-cloud-G08.md`의 구현 에이전트 소유 섹션을 채운다.
