Skip to content

feat: 에이전트 확장에 You.com 리서치/검색 도구 추가#2

Open
Emos21 wants to merge 4 commits into
koreainvestment:mainfrom
Cooperation-org:feat/youcom-research
Open

feat: 에이전트 확장에 You.com 리서치/검색 도구 추가#2
Emos21 wants to merge 4 commits into
koreainvestment:mainfrom
Cooperation-org:feat/youcom-research

Conversation

@Emos21

@Emos21 Emos21 commented Jul 9, 2026

Copy link
Copy Markdown

관련 Issue: #1

변경 내용

에이전트 확장에 You.com 리서치/검색 도구를 추가합니다. 저장소의 기존 방식(uv-run 표준 라이브러리 스크립트 + 스킬)을 그대로 따릅니다.

  • shared/scripts/youcom_research.pyuv run 스크립트, 표준 라이브러리(urllib)만 사용:
    • search "<query>" [--count N]GET https://ydc-index.io/v1/search
    • research "<query>"POST https://api.you.com/v1/research (lite)
    • Key는 환경변수 YDC_API_KEY에서 읽으며, 저장소 규칙대로 민감 값은 절대 stdout에 출력하지 않습니다. 미설정/오류 시 명확한 한국어 메시지 + 비정상 종료코드 + Key 미노출.
  • shared/skills/kis-research/SKILL.md — 기존 스킬 형식을 따르는 한국어 리서치 스킬(읽기 전용, 주문 유발 없음).
  • bin/cli.js — 스크립트 설치 목록에 youcom_research.py 추가(스크립트는 자동 탐색이 아닌 하드코딩 목록으로 설치되므로 필요).

품질 보증(엄격·심층 테스트)

  • test/test_youcom_research.py (표준 라이브러리 unittest, 네트워크 없이 mock) 67개 케이스 전부 통과: 요청 구성, 결과 매핑(웹/뉴스/필드 누락/빈/ null 방어/유니코드), 오류 경로(401/403/422/429/5xx/타임아웃/JSON 파싱 실패), 개수 상한, 대적성 입력, 그리고 모든 경로에서 API Key 미노출 전용 검증.
  • 기존 node:test CLI 테스트 38개도 그대로 통과.

개발 중 발견·수정한 실제 버그

리뷰/실측 과정에서 두 가지 실제 버그를 잡아 수정했습니다(모킹 테스트만으로는 놓쳤던 부분):

  1. 리서치 403api.you.com은 Cloudflare 뒤에 있어 Python 기본 User-Agent(Python-urllib/*)를 403으로 차단합니다(검색 도메인 ydc-index.io는 차단 안 함). 브라우저 User-Agent 헤더를 추가해 해결. 실측으로 검색은 200, 리서치는 기본 UA에서 403 → 브라우저 UA로 정상 확인.
  2. 응답 파싱 — 실제 리서치 응답은 {"output":{"content","sources"}} 중첩 구조인데 최상위에서 읽어 200에도 빈 결과를 반환하던 문제를 수정. 리서치 전용 타임아웃(120s)도 추가.

수정 후 실측: research "삼성전자 2026 2분기 실적" → 출처가 달린 실제 한국어 리서치 결과 정상 반환.

python3 test/test_youcom_research.py -v
# 실제 실행(선택):
YDC_API_KEY=<> python3 shared/scripts/youcom_research.py search "삼성전자 최근 뉴스" --count 3

English summary: Adds a You.com research/search tool for the agent extensions in the repo's own shape — a uv-run stdlib-only Python script (search -> ydc-index.io/v1/search, research -> api.you.com/v1/research) + a Korean research skill, plus registering the script in the CLI installer. Strictly follows the repo's "never print secrets to stdout" rule. 67 stdlib unittest cases (mapping, all error paths, adversarial, dedicated key-never-leaked checks) all pass; the existing 38 CLI tests still pass. Deep verification caught and fixed two real bugs a mocked-only suite missed: api.you.com's Cloudflare blocks Python's default User-Agent (403) so a browser UA was added, and the research response nests content/sources under output (top-level read returned empty on 200). Both fixed and verified live.

Emos21 added 4 commits July 9, 2026 04:50
종목·시장·뉴스를 웹에서 조사할 수 있도록 shared/scripts/youcom_research.py를
추가한다. 기존 스크립트와 동일하게 uv-run + PEP723, stdlib-only(urllib)로
작성했고, YDC_API_KEY 환경변수 미설정/HTTP 오류/타임아웃/파싱 실패 등 모든
경로에서 민감 값을 절대 출력하지 않는다.

- search: GET ydc-index.io/v1/search (X-API-Key, count 기본 10/최대 20)
- research: POST api.you.com/v1/research (input, research_effort: lite)
- 순수 포맷 함수(format_search/format_research)와 주입 가능한 http 콜러블을
  분리해 네트워크 없이 테스트 가능하도록 구성

bin/cli.js의 스크립트 설치 목록에도 추가해 설치 시 실제로 배포되도록 했다.
전략 설계 전에 종목/시장/뉴스를 You.com Search/Research로 조사하는
kis-research 스킬을 추가한다. kis-order-executor/kis-backtester와 동일한
프론트매터 형식(name/description/model: sonnet)으로 작성했고, "종목 리서치",
"관련 뉴스 조사", "시장 동향 알아봐줘", "이 종목 요즘 어때" 등 트리거를
포함한다. 조회 전용이며 주문을 유발하지 않음을 명시한다.

README.md의 Skills 표와 4개 에이전트(Claude/Cursor/Codex/Gemini) 폴더
구조 설명에도 kis-research/youcom_research.py를 반영했다.
shared/scripts/youcom_research.py에 대한 stdlib unittest(+mock, 네트워크
없음) 58개 케이스를 추가한다. format_search/format_research의 방어적
케이스(필드 누락, null, 빈/공백 스니펫, 유니코드), do_search/do_research의
요청 구성(URL/헤더/쿼리/바디), 오류 경로 전체(키 없음, 401/403/422/429/5xx,
타임아웃, JSON 파싱 실패, 예상 밖 예외), 적대적 입력(공백/초대형/비문자열
쿼리)을 다룬다.

핵심 보안 규칙 검증을 위한 TestKeyNeverLeaks를 별도로 두어, 모든 성공/실패
경로에서 API 키 문자열이 반환값과 출력 텍스트 어디에도 나타나지 않음을
확인한다. 이 과정에서 실제 버그를 발견했다: do_search/do_research가 주입된
http 콜러블의 반환값을 그대로 통과시켜, 요청 헤더를 반사하는 경우 키가
유출될 수 있었다. 반환 형태를 {"results": ...} / {"content", "sources"}로
화이트리스트하도록 수정해 재검증(58/58 통과)했다.

python3 test/test_youcom_research.py -v 로 실행 확인. npm test는 38/38로
변동 없음.
- api.you.com이 Python 기본 User-Agent를 Cloudflare에서 403 차단하므로
  브라우저 User-Agent 헤더 추가(검색에는 무해, 리서치에 필수)
- 실제 응답 형태 {"output":{"content","sources"}}에 맞게 파싱 수정
- 리서치 전용 타임아웃(120s) 및 실패 시 비정상 종료코드 처리
- 실제 중첩 응답 형태를 반영하도록 단위 테스트 보강
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant