<!-- task=m-agent-registration-capability-boundary/02+01_command_adapter plan=0 tag=REFACTOR -->

# Plan - REFACTOR Command Capability Adapter

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

`CODE_REVIEW-*-G??.md`의 구현 에이전트 소유 섹션 작성이 필수 마지막 단계다. 선행 `01_agent_port`의 `complete.log`가 없으면 구현을 시작하지 말고 blocker를 review stub에 기록한다.

## 배경

agent 도메인이 command catalog를 직접 해석하지 않게 하려면 command 도메인 쪽 adapter가 agent port를 구현해야 한다. 이 subtask는 command registry/catalog 조회 책임을 command domain 파일로 이동한다.

## 사용자 리뷰 요청 흐름

구현 중 blocker는 active review stub의 `사용자 리뷰 요청` 섹션에 기록한다. 직접 사용자 prompt는 금지이며 code-review가 user review 여부를 결정한다.

## Roadmap Targets

- Milestone: `agent-roadmap/phase/message-based-build-agent/milestones/agent-registration-capability-boundary.md`
- Task ids:
  - `command-adapter`: command catalog 조회와 `registerAllCommands()` 호출을 command domain adapter 뒤로 이동한다.
- Completion mode: check-on-pass

## 분석 결과

### 읽은 파일

- `apps/runner/lib/oto/agent/registration_client.dart`
- `apps/runner/lib/oto/commands/command.dart`
- `apps/runner/lib/oto/commands/command_catalog.dart`
- `apps/runner/lib/oto/commands/command_registry.dart`
- `apps/runner/test/oto_command_catalog_test.dart`
- `agent-test/local/command-smoke.md`
- `agent-ops/rules/project/domain/command/rules.md`

### 테스트 환경 규칙

`test_env=local`. command-smoke에 따라 `cd apps/runner && dart analyze`와 `cd apps/runner && dart test test/oto_command_catalog_test.dart test/oto_command_runtime_test.dart`가 기준이다. 이 subtask는 catalog adapter라 `oto_command_catalog_test.dart`가 focused test다.

### 테스트 커버리지 공백

- command catalog 자체는 [oto_command_catalog_test.dart](/config/workspace/oto/apps/runner/test/oto_command_catalog_test.dart:519)에서 stable field를 검증한다.
- 신규 adapter가 agent port를 구현하는지는 현재 테스트가 없으므로 command catalog test에 command type list parity test를 추가해야 한다.

### 심볼 참조

rename/removal 없음. 신규 adapter class만 추가한다.

### 분할 판단

multi-plan의 두 번째 subtask다. `02+01_command_adapter`는 predecessor `01_agent_port`의 active/archive `complete.log`가 필요하다. 현재 계획 작성 시점에는 predecessor가 아직 완료되지 않았으므로 구현 agent는 시작 전 다시 확인해야 한다.

### 범위 결정 근거

이 subtask는 command domain adapter 추가와 command catalog test만 다룬다. `OtoServerRegistrationClient` production default wiring은 `03`에서 처리한다.

### 빌드 등급

`local-G05`: command domain 내부 adapter와 focused catalog test로 검증 가능하다.

## 의존 관계 및 구현 순서

`01_agent_port`의 `complete.log`가 필요하다. 없으면 구현하지 않고 review stub의 사용자 리뷰 요청이 아니라 계획/의존 blocker로 기록한다.

## 구현 체크리스트

- [ ] 선행 `agent-task/m-agent-registration-capability-boundary/01_agent_port/**/complete.log` 존재를 확인한다.
- [ ] command domain에 agent port 구현 adapter를 추가한다.
- [ ] adapter가 `registerAllCommands()` 호출 후 `Command.catalogRows`에서 type만 안정적으로 산출하게 한다.
- [ ] command catalog test에 adapter command type parity test를 추가한다.
- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.

### [REFACTOR-1] Command Adapter

문제: [registration_client.dart](/config/workspace/oto/apps/runner/lib/oto/agent/registration_client.dart:246)가 command registry/catalog 호출을 agent 도메인 내부에서 수행한다.

해결 방법: `apps/runner/lib/oto/commands/runner_command_capability_provider.dart`를 추가하고 `RunnerCapabilityProvider`를 구현한다.

```dart
class CommandCatalogRunnerCapabilityProvider implements RunnerCapabilityProvider {
  const CommandCatalogRunnerCapabilityProvider();

  @override
  RunnerCapabilitySnapshot snapshot() {
    registerAllCommands();
    return RunnerCapabilitySnapshot(
      name: otoRunnerCapabilityName,
      version: otoRunnerCapabilityVersion,
      commandTypes: Command.catalogRows.map((row) => row['type']!),
    );
  }
}
```

수정 파일 및 체크리스트:

- [ ] `apps/runner/lib/oto/commands/runner_command_capability_provider.dart` 추가
- [ ] `apps/runner/test/oto_command_catalog_test.dart` adapter parity test 추가

테스트 작성: 작성. adapter output과 `Command.catalogRows.map(type)`이 일치하는지 검증한다.

중간 검증:

```bash
cd apps/runner && dart test test/oto_command_catalog_test.dart
```

## 수정 파일 요약

| 파일 | 항목 |
|------|------|
| `apps/runner/lib/oto/commands/runner_command_capability_provider.dart` | REFACTOR-1 |
| `apps/runner/test/oto_command_catalog_test.dart` | REFACTOR-1 |

## 최종 검증

```bash
cd apps/runner && dart analyze
cd apps/runner && dart test test/oto_command_catalog_test.dart test/oto_command_runtime_test.dart
```

모든 코드 변경 완료 후 반드시 `CODE_REVIEW-*-G??.md`의 구현 에이전트 소유 섹션을 채운다. 이 파일 작성이 구현의 마지막 단계다.
