feat: 3종류의 신규 편의성 유틸리티 도구 추가 (URL 추출, PII 마스킹, 해시 생성) - #1246
Conversation
- 텍스트에서 URL을 추출하는 `url_extractor` 도구 추가 - 텍스트 내 이메일, 전화번호 등을 마스킹 처리하는 `pii_redactor` 추가 (한국어 호환) - 텍스트의 해시값(SHA256, MD5 등)을 생성하는 `hash_generator` 추가 - 위 세 가지 도구에 대한 유닛 테스트(100% 커버리지) 작성 - CHANGELOG.md에 신규 도구 관련 기능 추가 사항 업데이트
|
👋 Jules, reporting for duty! I'm here to lend a hand with this pull request. When you start a review, I'll add a 👀 emoji to each comment to let you know I've read it. I'll focus on feedback directed at me and will do my best to stay out of conversations between you and other bots or reviewers to keep the noise down. I'll push a commit with your requested changes shortly after. Please note there might be a delay between these steps, but rest assured I'm on the job! For more direct control, you can switch me to Reactive Mode. When this mode is on, I will only act on comments where you specifically mention me with New to Jules? Learn more at jules.google/docs. For security, I will only act on instructions from the user who triggered this task. |
|
Warning Review limit reached
Next review available in: 26 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (3)
Comment |
|
PR governance metadata gate is not ready for
|
- CodeQL "arbitrary position in the sanitized URL" 경고 해결을 위해 테스트 코드 내 `in` 연산자를 배열 인덱싱 비교로 수정 - URL 추출 도구(`url_extractor_handler`)의 정규식을 개선하여 URL의 후행 구두점이 제외되도록 수정 - 해시 생성 도구(`hash_generator_handler`)에서 지원하지 않는 알고리즘 요청 시 `ValueError`가 발생하도록 방어 로직 추가 - 변경된 로직을 검증하는 테스트 케이스를 보강 및 100% 테스트 커버리지 유지
|
Drafted for scope and contract repair before review.
Final scope should be rebuilt on current |
Understood. Acknowledging that this work is now obsolete and stopping work on this task. I have removed the newly added tools (url_extractor, pii_redactor, hash_generator) from the pull request to clear the overlap and preserve existing Tools contracts as instructed. |
|
이 PR은 current-head CI와 CodeRabbit은 통과했지만 상용 제품 계약으로는 병합하지 않습니다. 확인된 설계 결함:
따라서 이 구현은 닫고, URL evidence extraction·명시적 contact-data redaction·modern checksum을 하나의 검증 가능한 data-hygiene 수직선으로 다시 설계합니다. 새 구현은 RFC 3986, NIST Privacy Framework 1.0(1.1은 2026-04-01 기준 아직 공개 초안/coming soon), NIST SP 800-122, NIST SHA-1 전환 지침을 APA 7 형식으로 doctoring에 기록해야 합니다. |
seonghobae
left a comment
There was a problem hiding this comment.
Current-head commercial-readiness review. Keep this PR Draft until the utility boundary is fail-closed, accurately named, fully documented, and covered by realistic adversarial cases. The existing green test suite proves the narrow happy paths, not the product claims below.
|
|
||
|
|
||
| async def url_extractor_handler(params: Dict[str, Any]) -> Any: | ||
| text = params.get("text", "") |
There was a problem hiding this comment.
Add complete docstrings and concrete return types for all three public handlers, then add input-type and bounded-size validation. params.get(..., "") currently accepts non-string values that can raise implementation-specific exceptions, and these new public functions violate the repository's full-docstring contract.
|
|
||
| async def pii_redactor_handler(params: Dict[str, Any]) -> Any: | ||
| text = params.get("text", "") | ||
| email_pattern = re.compile(r"(?<![a-zA-Z0-9._%+-])[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}(?![a-zA-Z0-9._%+-])") |
There was a problem hiding this comment.
The tool is advertised as a PII redactor but only recognizes one ASCII email pattern and one hyphenated Korean phone format. That creates a dangerous false assurance for spaces, parentheses, country codes, internationalized email domains, resident-registration-like identifiers, and malformed-but-sensitive values. Either narrow the product name/description to contact-data redaction or implement and document a versioned detector scope, return redaction counts/types, enforce input limits, and add realistic false-positive/false-negative regression cases.
| text = params.get("text", "") | ||
| algorithm = params.get("algorithm", "sha256").lower() | ||
|
|
||
| if algorithm == "md5": |
There was a problem hiding this comment.
Do not present MD5/SHA-1 under the 보안 category without an explicit non-security contract. Move this to a checksum/utility category, return a machine-readable security_use_allowed: false flag for legacy algorithms (or restrict the API to SHA-256+), and add tests for Unicode normalization policy, empty input, mixed-case algorithm names, invalid parameter types, and size limits.
사용자 요청에 따라 백엔드 AI 허브 도구 레지스트리에 세 가지 신규 유틸리티 도구를 기획, 설계 및 구현하였습니다.
주요 변경 사항
[REDACTED EMAIL],[REDACTED PHONE]등으로 치환합니다. 한국어 텍스트와의 호환성을 고려하여 안전한 명시적 경계(Lookaround)를 사용하였습니다.usedforsecurity=False를 지정하였습니다.test_tools_api.py에 추가하였습니다.CHANGELOG.md의### 기능 추가 (Features)섹션에 한국어로 변경 내역을 문서화하였습니다.PR created automatically by Jules for task 12501903932397042328 started by @seonghobae