Skip to content

feat(cli): interactive add mode #71

@amondnet

Description

@amondnet

product_spec_domain: cli/interactive-add

Interactive Add

Track: interactive-add-20260412

Overview

ask add 명령을 인자 없이 실행하면 interactive 모드로 진입하여 프로젝트 의존성을 기반으로 라이브러리를 추천하고, 사용자가 복수 라이브러리를 선택하거나 직접 입력하여 한번에 추가할 수 있는 기능을 구현합니다.

Requirements

Functional Requirements

  • FR-1: ask add 을 인자 없이 실행하면 interactive 모드로 진입한다. 기존 ask add <spec> 동작은 그대로 유지한다.
  • FR-2: Interactive 모드 진입 시 프로젝트 파일(package.json, pyproject.toml, go.mod, Cargo.toml 등)을 기반으로 ecosystem을 자동 감지한다. 기존 detectEcosystem() 로직을 재사용한다.
  • FR-3: 감지된 ecosystem의 프로젝트 의존성(package.json dependencies, devDependencies 등)을 읽어, 아직 ask.json에 등록되지 않은 라이브러리를 추천 목록으로 표시한다.
  • FR-4: 추천 목록에서 복수 라이브러리를 선택할 수 있다 (multi-select).
  • FR-5: 추천 목록 외에 직접 spec을 텍스트로 입력할 수 있다 (예: npm:lodash, github:owner/repo@v1).
  • FR-6: 선택된 모든 라이브러리를 ask.json에 추가하고, runInstall을 실행하여 AGENTS.md 및 SKILL.md를 생성한다.
  • FR-7: 추천 시 ASK Registry에 등록된 라이브러리를 우선 표시하고, 미등록 라이브러리는 하단에 표시한다.

Non-functional Requirements

  • NFR-1: CI/non-TTY 환경에서는 interactive 모드가 실행되지 않고 에러 메시지와 함께 종료한다.
  • NFR-2: 기존 citty + consola 프레임워크를 활용하여 interactive 프롬프트를 구현한다.
  • NFR-3: Registry API 호출에 10초 timeout을 적용한다 (기존 AbortSignal.timeout 패턴).

User Stories

  • US-1: 나는 개발자로서 ask add를 실행하면, 프로젝트 의존성 중 등록되지 않은 라이브러리 목록을 보고 선택할 수 있다.
  • US-2: 나는 개발자로서 추천에 없는 라이브러리도 직접 입력하여 추가할 수 있다.
  • US-3: 나는 개발자로서 여러 라이브러리를 한번에 선택하여 배치로 추가할 수 있다.

Acceptance Criteria

  • AC-1: ask add (인자 없이) 실행 시 interactive prompt가 표시된다.
  • AC-2: ask add npm:next (인자 있음) 실행 시 기존과 동일하게 작동한다.
  • AC-3: npm 프로젝트에서 package.json 의존성 중 ask.json에 없는 항목이 추천된다.
  • AC-4: 추천 목록에서 0개 이상 선택 후 confirm하면 ask.json에 추가 + install 실행.
  • AC-5: non-TTY 환경에서 ask add (인자 없음) 실행 시 에러와 함께 종료된다.

Out of Scope

  • 기존 ask add <spec> 명령의 동작 변경
  • 의존성 버전 선택 UI (lockfile resolved version 사용)
  • PyPI, Go, Cargo 등 비-npm ecosystem의 의존성 스캔 (npm-first, 향후 확장)
  • Registry 검색/필터링 UI (추천 목록만 제공)

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions