| name | dd-test |
| description | Test dding-dong notifications interactively. Play each event one by one, replay or skip. 알림 인터랙티브 테스트. Use when the user says '알림 테스트', 'test notification', 'test sound', '소리 테스트'. |
| allowed-tools | ["Bash","Read","Edit","AskUserQuestion"] |
dding-dong 인터랙티브 알림 테스트
이벤트별로 하나씩 재생하고, 사용자가 다시 듣기/다음/건너뛰기를 선택할 수 있는 인터랙티브 테스트.
1단계: 팩 정보 확인
현재 활성 사운드 팩을 확인합니다:
node "${CLAUDE_PLUGIN_ROOT}/scripts/pack-wizard.mjs" discover --cwd "${PROJECT_DIR}"
출력에서 [active]로 표시된 팩 이름과 경로를 파악합니다.
그리고 활성 팩이 TTS 팩인지 확인합니다:
ls "${PROJECT_DIR}/.dding-dong/packs/"*"/.tts-config.json" 2>/dev/null || echo "NOT_TTS"
TTS 팩 여부를 기억해두세요 (이후 "재생성" 선택지 제공 여부에 사용).
TTS 팩인 경우, 활성 팩 경로의 .tts-config.json을 Read로 읽어서 다음을 파악합니다:
voice_mode: "clone" 또는 "custom"
model: 사용 모델명
ref_audio, ref_text: 참조 음성 (clone 모드)
speaker: 화자명 (custom 모드)
events.<이벤트명>.text: 각 이벤트의 현재 텍스트
events.<이벤트명>.instruct: 감정/스타일 지시 (custom 모드, 선택)
events.<이벤트명>.output_file: 출력 파일명
이 정보를 이후 "재생성" 서브플로우에서 사용합니다.
2단계: 이벤트별 인터랙티브 루프
테스트할 이벤트 목록:
- 인자가 있으면 (
${ARGUMENTS}): 해당 이벤트만 테스트
- 인자가 없으면:
task.complete, task.error, input.required, session.start, session.end 순서대로
각 이벤트마다 다음을 반복합니다:
2-1. 이벤트 재생
node "${CLAUDE_PLUGIN_ROOT}/scripts/notify.mjs" test <이벤트명>
재생 후 사용자에게 결과를 안내합니다:
2-2. 사용자 선택 (AskUserQuestion)
AskUserQuestion으로 다음 선택지를 제공합니다:
이벤트가 여러 개인 경우:
- 🔄 다시 듣기 — 같은 이벤트를 다시 재생
- ⏭️ 다음 — 다음 이벤트로 이동
- ⏹️ 건너뛰기 — 나머지 이벤트를 건너뛰고 종료
이벤트가 1개뿐인 경우:
- 🔄 다시 듣기 — 같은 이벤트를 다시 재생
- ✅ 완료 — 테스트 종료
TTS 팩이 활성화된 경우 추가 선택지:
- 🔁 재생성 — TTS 음성을 다시 생성하고 싶을 때
2-3. 선택에 따른 처리
- 다시 듣기: 2-1로 돌아가 같은 이벤트를 다시 재생
- 다음/완료: 다음 이벤트로 진행 (또는 종료)
- 건너뛰기: 루프를 즉시 종료하고 3단계로 이동
- 재생성: 아래 "2-4. 인라인 재생성" 서브플로우를 실행
2-4. 인라인 재생성 (TTS 팩 전용)
"재생성"을 선택하면, 해당 이벤트의 TTS 음성을 즉시 다시 생성합니다.
2-4-1. TTS 환경 확인
node "${CLAUDE_PLUGIN_ROOT}/skills/dd-tts-pack/scripts/check-env.mjs"
출력 JSON의 all_ok를 확인합니다.
all_ok: false → "TTS 환경이 준비되지 않았습니다. /dding-dong:dd-tts-pack으로 환경을 설정해주세요." 안내 후 2-2 선택지로 돌아감 (테스트는 계속)
all_ok: true → python_path를 기억하고 다음 단계로 진행
2-4-2. 텍스트 변경 여부
현재 이벤트의 텍스트를 보여주고 AskUserQuestion으로 질문합니다:
현재 텍스트: "<.tts-config.json의 해당 이벤트 text>"
선택지:
- 그대로 재생성 — 현재 텍스트로 바로 재생성
- 텍스트 변경 — 새 텍스트를 입력받음
"텍스트 변경" 선택 시:
- AskUserQuestion으로 새 텍스트를 입력받습니다 (Other 입력 유도)
.tts-config.json의 해당 이벤트 text 필드를 Edit로 업데이트합니다
2-4-3. generate-tts.py 실행
1단계에서 읽은 .tts-config.json 설정과 2-4-1의 python_path를 사용합니다.
clone 모드:
<python_path> "${CLAUDE_PLUGIN_ROOT}/skills/dd-tts-pack/scripts/generate-tts.py" \
--voice-mode clone --mode preview \
--model "<model>" \
--ref-audio "<활성팩경로>/<ref_audio>" \
--ref-text "<ref_text>" \
--text "<이벤트 텍스트>" \
--language "<language>" \
--output "<활성팩경로>/<output_file>"
custom 모드:
<python_path> "${CLAUDE_PLUGIN_ROOT}/skills/dd-tts-pack/scripts/generate-tts.py" \
--voice-mode custom --mode preview \
--model "<model>" \
--speaker "<speaker>" \
--text "<이벤트 텍스트>" \
--instruct "<instruct>" \
--language "<language>" \
--output "<활성팩경로>/<output_file>"
주의: --instruct는 .tts-config.json에 instruct 필드가 있을 때만 포함합니다.
생성 결과 JSON의 ok 필드를 확인합니다:
ok: true → "✅ 재생성 완료" 안내 후 2-4-4로 진행
ok: false → 에러 메시지를 표시하고 2-2 선택지로 돌아감
2-4-4. 재생 및 루프 복귀
재생성된 음성을 즉시 재생합니다:
node "${CLAUDE_PLUGIN_ROOT}/scripts/notify.mjs" test <이벤트명>
재생 후 "🔔 <이벤트명> 재생성 후 재생 완료" 안내와 함께 2-2 선택지로 돌아갑니다.
3단계: 완료 안내
모든 이벤트 테스트가 끝나면 다음을 안내합니다:
✅ 알림 테스트 완료!
관련 명령어:
/dding-dong:dd-sounds — 사운드 팩 변경
/dding-dong:dd-config — 알림 설정 변경
/dding-dong:dd-doctor — 알림 문제 진단
결과 안내 참고
소리/알림이 재생되지 않는 경우:
- 설정에서 비활성화되어 있을 수 있습니다.
/dding-dong:dd-config show로 확인하세요.
- 사운드 플레이어/알림 도구가 설치되지 않았을 수 있습니다.
/dding-dong:dd-doctor로 진단하세요.