Skip to content

[Hardening] Harden API request transport and base URL resolution #8

@Hanjo92

Description

@Hanjo92

Summary / 요약

jules_api.py의 API 호출 경로를 더 안전하게 보강합니다. 현재 .envJULES_API_BASE_URL이 기대대로 반영되지 않을 수 있고, API 응답이 지연되거나 JSON이 아닐 때 CLI가 깔끔하게 실패하지 못할 수 있습니다.

Risk Or Quality Gap / 리스크 또는 품질 공백

  • DEFAULT_BASE_URL은 모듈 import 시점에 os.environ에서 읽히지만, .env 로딩은 main()에서 나중에 수행됩니다. 따라서 .env에 둔 JULES_API_BASE_URL override가 무시될 수 있습니다.
  • api_request()urllib.request.urlopen()에 timeout을 넘기지 않아 네트워크 지연 시 명령이 오래 멈출 수 있습니다.
  • 성공 응답이 malformed JSON이면 json.loads() 예외가 그대로 노출될 수 있습니다.

Proposed Hardening / 제안 보강

  • base URL을 .env 로딩 이후에 평가하도록 build_url() 또는 별도 getter에서 resolve합니다.
  • API 요청에 명시적인 per-request timeout을 둡니다.
  • 빈 응답, HTTP 오류, URL 오류, malformed/non-JSON 응답을 사용자 친화적인 CLI 오류로 정리합니다.
  • 관련 단위 테스트를 추가합니다.

Verification Plan / 검증 계획

  • .env 또는 환경변수의 JULES_API_BASE_URL이 실제 URL 생성에 반영되는지 테스트합니다.
  • urlopen timeout 인자가 전달되는지 테스트합니다.
  • invalid JSON 응답이 traceback 대신 명확한 오류 메시지로 실패하는지 테스트합니다.
  • python3 -m py_compile google-jules-control/scripts/jules_api.py
  • python3 -m unittest discover -s tests

Acceptance Criteria / 완료 기준

  • .envJULES_API_BASE_URL override가 helper 실행에서 반영된다.
  • API 요청은 명시적인 timeout을 사용한다.
  • malformed/non-JSON 응답이 명확한 CLI 오류로 처리된다.
  • 관련 회귀 테스트가 추가된다.

References / 참고 자료

  • google-jules-control/scripts/jules_api.py: DEFAULT_BASE_URL, load_dotenv(), build_url(), api_request()
  • 분석일: 2026-04-24

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:apiJules API helper and CLI behaviorenhancementNew feature or requestpriority:p0Highest priority / blocks safe operations

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions