# Autoresearch Phase 2: 멀티 입력 + 자동 실행 통합

## 배경
Phase 1(task-1090.1)에서 코어 러너 5모듈 구현 완료 (96테스트 PASS).
현재 `--test-input` 1개만 지원. 단일 입력에 과적합 위험.
제이회장님 핵심 요구: "스킬을 쓸 때마다 백그라운드에서 자동으로 돌아간다"

## Phase 2 산출물

### 1. 멀티 입력 지원
**기존 runner.py 확장** — 새 파일 불필요, runner.py에 기능 추가

**CLI 변경**:
```bash
# 기존 (유지)
python3 runner.py --skill ad-creative --test-input "단일 입력" ...

# 신규: 파일에서 여러 입력 로드
python3 runner.py --skill ad-creative --test-inputs-file skills/ad-creative/evals/test-inputs.yaml ...
```

`--test-input`과 `--test-inputs-file`은 상호 배타 (둘 중 하나 필수).

**test-inputs.yaml 포맷**:
```yaml
inputs:
  - id: insurance-fa-recruit
    text: "보험 FA 모집 광고, 타겟: 30대 보험설계사"
  - id: insurance-product-promo
    text: "삼성생명 종신보험 신상품 출시 광고"
  - id: insuwiki-landing
    text: "InsuWiki 서비스 소개 랜딩 카피"
```

**채점 방식**: 각 입력에 대해 스킬 실행 → 채점 → **전체 평균 점수** 사용
- 라운드당 N번 실행 (N = 입력 수)
- 평균 점수로 KEEP/REVERT 판정
- 로그에 입력별 개별 점수 + 평균 점수 기록

### 2. 스킬 사용 입력 자동 캡처
**신규 모듈**: `/home/jay/workspace/scripts/autoresearch/capture.py`

스킬이 실행될 때 사용된 입력을 자동으로 저장하여, autoresearch 테스트 입력으로 활용.

```python
def capture_input(skill_name: str, user_input: str, skills_dir: str = "/home/jay/workspace/skills") -> None:
    """스킬 사용 입력을 test-inputs.yaml에 추가.

    - 중복 체크 (동일 텍스트 이미 있으면 스킵)
    - 최대 20개 유지 (오래된 것 FIFO 삭제)
    - id는 timestamp 기반 자동 생성
    """
```

**호출 시점**: skill_loader.py 또는 skill_router.py에서 스킬 실행 시 capture_input() 호출하는 1줄 훅 추가.
- 경로: `/home/jay/workspace/utils/skill_loader.py` 또는 `/home/jay/workspace/memory/skill-router.py`
- 기존 코드를 최소한으로 수정 (함수 호출 1줄만 추가)
- 실패해도 스킬 실행에 영향 없도록 try-except 감싸기

### 3. autoresearch CLI 스킬
**경로**: `/home/jay/workspace/skills/autoresearch/SKILL.md`

제이회장님이나 아누가 스킬로 autoresearch를 실행할 수 있게:
```
/autoresearch ad-creative
```

SKILL.md에서 해야 할 것:
- `--skill` 파라미터를 args에서 추출
- 체크리스트 자동 탐색: `skills/<name>/evals/checklist.yaml`
- test-inputs 자동 탐색: `skills/<name>/evals/test-inputs.yaml` (없으면 --test-input 요구)
- 기본값: `--rounds 50 --target-score 0.95 --consecutive 3`
- 실행: `python3 /home/jay/workspace/scripts/autoresearch/runner.py ...`

**프론트매터**:
```yaml
---
name: autoresearch
description: "스킬 프롬프트 자동 최적화 실행. autoresearch, 스킬 최적화, 프롬프트 개선"
metadata:
  version: 1.0.0
triggers:
  - "autoresearch"
  - "스킬 최적화"
  - "프롬프트 자동 개선"
category: "system"
---
```

### 4. 완료 리포트 생성
**신규 모듈**: `/home/jay/workspace/scripts/autoresearch/reporter.py`

autoresearch 완료 후 사람이 읽을 수 있는 마크다운 보고서 생성.

```python
def generate_report(log_data: dict, output_path: str) -> str:
    """changelog JSON → 마크다운 보고서 변환

    보고서 내용:
    - 스킬명, 시작/종료 시간, 총 라운드
    - 초기 점수 → 최종 점수 (변화율)
    - 유지된 변경 목록 (가장 효과적인 변경 하이라이트)
    - 롤백된 변경 목록 (왜 실패했는지)
    - 체크리스트 항목별 통과율 변화
    - 총 비용 (토큰 사용량 → 대략적 $ 환산)
    """
```

**보고서 저장**: `skills/<name>/evals/report-<timestamp>.md`

### 5. 스케줄 실행 지원
runner.py에 `--background` 플래그 추가:

```bash
python3 runner.py --skill ad-creative --test-inputs-file ... --background
```

`--background` 모드:
- stdout을 파일로 리다이렉트 (`skills/<name>/evals/autoresearch-stdout.log`)
- 완료 시 보고서 자동 생성
- 완료 시 cokacdir --sendfile로 보고서를 텔레그램에 전송 (선택적, `--notify` 플래그)

## 구현 주의사항
1. **기존 모듈 수정 최소화**: runner.py에 멀티입력 기능 추가, 나머지는 신규 모듈
2. **기존 96개 테스트 깨지면 안 됨**: 멀티입력 추가 후에도 기존 단일입력 테스트 전부 통과해야 함
3. **skill_loader.py 수정은 1줄만**: capture 훅 삽입. 실패해도 스킬 실행에 영향 없어야 함
4. **capture.py의 FIFO**: 20개 초과 시 가장 오래된 것부터 삭제
5. **비용 환산**: Sonnet input $3/M, output $15/M. Haiku input $0.80/M, output $4/M. 이 단가로 계산.
6. **skill-registry.json에 autoresearch 스킬 등록**

## 파일 구조 (Phase 2 추가분)
```
scripts/autoresearch/
├── (기존 5개 모듈)
├── capture.py          # 스킬 사용 입력 자동 캡처
├── reporter.py         # 완료 보고서 생성
└── tests/
    ├── (기존 5개 테스트)
    ├── test_capture.py
    └── test_reporter.py

skills/autoresearch/
└── SKILL.md            # autoresearch 스킬

skills/ad-creative/evals/
├── checklist.yaml      # (Phase 1에서 생성)
└── test-inputs.yaml    # 샘플 테스트 입력
```

## 검증
1. 기존 96개 테스트 + 신규 테스트 전체 통과
2. `--test-inputs-file`로 멀티입력 dry-run 정상
3. capture.py 중복 방지/FIFO 테스트
4. reporter.py 마크다운 출력 정상
5. autoresearch 스킬 SKILL.md 파싱 정상
6. pyright 에러 0건