- 자동화 테스트 스위트 전체 통과 확인 (1,286+ 테스트)
- init 명령어가 정상 동작하는지 확인
- 다국어 지원이 제대로 되는지 확인
- 설치 스크립트 검증
- release.yml CI 워크플로우 검증
# 전체 테스트 (1,286+ tests)
cargo test --workspace
# 빠른 타입 체크
cargo check --all-targets
# 린트
cargo clippy --all-targets
# 빌드 확인 (일상 개발용)
cargo build --profile dev-release -p cratos
# 릴리스 빌드 (배포용, ~10분)
cargo build --release
# CLI 도움말 확인
cargo run -- --help
cargo run -- init --help확인 항목:
- 테스트 전체 통과 (1,286+ tests, 0 failures)
- clippy 경고 없음
- 빌드 성공
- init 명령어가 help에 표시됨
-
--lang옵션이 표시됨
# 영어 강제
cargo run -- init --lang en
# 한국어 강제
cargo run -- init --lang ko
# 시스템 언어 감지 (LANG 환경변수 기반)
LANG=ko_KR.UTF-8 cargo run -- init
LANG=en_US.UTF-8 cargo run -- init확인 항목:
-
--lang en→ 영어 출력 -
--lang ko→ 한국어 출력 -
LANG=ko_KR→ 한국어 자동 감지 -
LANG=en_US→ 영어 자동 감지
# .env 파일이 있는 상태에서 실행
echo "TEST=1" > .env
cargo run -- init --lang en
# "Overwrite?" 프롬프트가 나와야 함확인 항목:
- 기존 .env 존재 시 덮어쓰기 확인 프롬프트
- "No" 선택 시 취소 메시지
- "Yes" 선택 시 진행
cargo run -- init --lang en
# Step 1에서 "Skip Telegram setup?" → Yes확인 항목:
- 건너뛰기 후 Step 2로 진행
- 최종 .env에
# TELEGRAM_BOT_TOKEN=주석 처리
각 프로바이더 선택 후 확인:
| 프로바이더 | 예상 env_var | 확인 |
|---|---|---|
| OpenRouter | OPENROUTER_API_KEY |
[ ] |
| Groq | GROQ_API_KEY |
[ ] |
| Google AI | GEMINI_API_KEY (or GOOGLE_API_KEY) |
[ ] |
| OpenAI | OPENAI_API_KEY |
[ ] |
| Anthropic | ANTHROPIC_API_KEY |
[ ] |
| DeepSeek | DEEPSEEK_API_KEY |
[ ] |
| Ollama | OLLAMA_BASE_URL |
[ ] |
# Ollama 테스트 (Ollama 실행 중일 때)
ollama serve &
cargo run -- init --lang en
# Ollama 선택 → 연결 성공해야 함
# Ollama 테스트 (Ollama 미실행)
pkill ollama
cargo run -- init --lang en
# Ollama 선택 → 연결 실패 + "Continue anyway?" 프롬프트확인 항목:
- Ollama 실행 중 → 연결 성공
- Ollama 미실행 → 연결 실패 메시지 + 계속 진행 옵션
cargo run -- init --lang en
# 유효한 토큰 입력 → 성공
# 잘못된 토큰 입력 → 실패 + "Continue anyway?"확인 항목:
- 유효한 토큰 → "Success!"
- 잘못된 토큰 → "Failed" + 계속 옵션
# shellcheck으로 문법 검사
shellcheck scripts/install.sh
# 실행 권한 확인
ls -la scripts/install.sh
# -rwxr-xr-x 이어야 함# 스크립트 내용 확인 (실행 없이)
cat scripts/install.sh
# 플랫폼 감지 함수 테스트
bash -c 'source scripts/install.sh; detect_os'
bash -c 'source scripts/install.sh; detect_arch'
bash -c 'source scripts/install.sh; get_target'# PowerShell에서 문법 검사
$script = Get-Content scripts/install.ps1 -Raw
[System.Management.Automation.PSParser]::Tokenize($script, [ref]$null)# yamllint 설치 (brew install yamllint)
yamllint .github/workflows/release.ymlrelease.yml에서 다음 타겟 확인:
| Target | OS Runner | 확인 |
|---|---|---|
x86_64-apple-darwin |
macos-13 |
[ ] |
aarch64-apple-darwin |
macos-14 |
[ ] |
x86_64-unknown-linux-gnu |
ubuntu-latest |
[ ] |
aarch64-unknown-linux-gnu |
ubuntu-latest + cross |
[ ] |
x86_64-pc-windows-msvc |
windows-latest |
[ ] |
# 현재 플랫폼 빌드
cargo build --release
# 다른 타겟 빌드 (rustup target add 필요)
rustup target add aarch64-apple-darwin
cargo build --release --target aarch64-apple-darwin# init 완료 후
cat .env
# 예상 구조:
# - LLM Provider 섹션
# - CRATOS_LLM__DEFAULT_PROVIDER 설정
# - Telegram 섹션
# - Server 섹션 (HOST, PORT)
# - Logging 섹션 (RUST_LOG)
# - Default Persona 섹션확인 항목:
- 주석이 적절히 포함됨
- 섹션 구분이 명확함
- 민감 정보가 올바르게 저장됨
| 카테고리 | 위치 | 설명 |
|---|---|---|
| 도구 레지스트리 | crates/cratos-tools/src/builtins/mod.rs |
23개 빌트인 도구 등록 및 카운트 검증 |
| 개별 도구 | crates/cratos-tools/src/builtins/*.rs |
도구별 정의, 입력 검증, 보안 테스트 |
| 오케스트레이터 | crates/cratos-core/src/orchestrator/tests.rs |
설정, 입력, 에러 새니타이즈, tool refusal 휴리스틱 |
| 새니타이즈 | crates/cratos-core/src/orchestrator/sanitize.rs |
is_tool_refusal, is_fake_tool_use_text, 에러 새니타이즈 |
| 통합 테스트 | tests/integration_test.rs |
크레이트 간 통합 (LLM, 도구, 리플레이, 채널) |
| LLM 프로바이더 | crates/cratos-llm/src/ |
모델 티어, 라우팅 규칙, 프로바이더 설정 |
| 리플레이 | crates/cratos-replay/src/ |
이벤트 스토어, 실행 생명주기 |
| 스킬 | crates/cratos-skills/src/ |
스킬 생성, 라우팅, 레지스트리 |
| 메모리 | crates/cratos-memory/src/ |
Graph RAG, 대화 메모리 |
| 보안 | crates/cratos-core/src/security/ |
레이트 리미터, 서킷 브레이커 |
통합 테스트(tests/integration_test.rs)에서 검증하는 전체 도구 목록:
file_read, file_write, file_list, http_get, http_post, exec, bash,
git_status, git_commit, git_branch, git_diff, git_push, git_clone, git_log,
github_api, browser, wol, config, web_search, agent_cli,
send_file, image_generate, app_control
주의: 도구 추가/제거 시 3곳 동기화 필수:
crates/cratos-tools/src/builtins/mod.rs— 등록 + 테스트 카운트tests/integration_test.rs—expected_tools배열 및 카운트- 도구별 테스트 파일
# 도구 레지스트리 테스트만
cargo test -p cratos-tools
# 오케스트레이터 테스트만
cargo test -p cratos-core
# 통합 테스트만
cargo test --test integration_test
# 특정 테스트 함수
cargo test test_tool_registry_with_builtins
cargo test test_tool_refusal
cargo test test_fake_tool_use_detectionWorkflow Engine은 제거되었으며, 자율 ReAct 루프로 대체되었습니다. 관련 테스트:
| 테스트 | 검증 내용 |
|---|---|
test_tool_refusal_* |
LLM이 도구 호출 없이 짧은 텍스트만 반환하는 경우 감지 |
test_fake_tool_use_detection |
[Used 1 tool: browser:OK] 같은 가짜 도구 사용 텍스트 감지 |
test_sanitize_error_for_user |
경로 등 민감 정보 마스킹 |
test_sanitize_for_session_memory |
프롬프트 인젝션 방지 |
test_orchestrator_config_failure_limits |
연속/총 실패 횟수 제한 설정 |
test_max_execution_secs_default |
실행 타임아웃 기본값 (180초) |
참고:
is_tool_refusal함수는sanitize.rs에 있지만 테스트는orchestrator/tests.rs에 있습니다.
app_control은 macOS AppleScript/JXA 자동화 도구로, RiskLevel::High로 분류됩니다.
# app_control 테스트
cargo test -p cratos-tools app_control테스트 항목:
- 도구 정의 (이름, 설명, 파라미터 스키마)
- 보안 검증 (
BLOCKED_PATTERNS:do shell script,System Preferences,password등 차단)
tests/integration_test.rs에서 크레이트 간 통합을 검증합니다:
- LLM 라우터: 프로바이더 설정, 라우팅 규칙, 모델 티어별 기본 모델
- 도구 레지스트리: 23개 빌트인 도구 등록 확인, 스키마 검증
- 리플레이: 실행 생명주기, 이벤트 타입, 상태 전이
- 오케스트레이터: 입력 생성, 세션 키, 설정
- 채널: 메시지 정규화 (Telegram, Slack)
- 보안: 레이트 리미터, 서킷 브레이커, 메트릭
# 1. 깨끗한 상태에서 시작
rm -f .env
# 2. init로 설정
cargo run -- init --lang ko
# 3. doctor로 검증
cargo run -- doctor
# 4. serve 시작 (Ctrl+C로 종료)
cargo run -- serve확인 항목:
- init → .env 생성
- doctor → 설정 검증 통과
- serve → 서버 시작 성공
cargo run -- init --lang en
# API 키 입력에서 빈 값 입력 시 → 재입력 요청cargo run -- init --lang en
# 중간에 Ctrl+C → 깔끔하게 종료cargo run -- init --lang fr
# → 영어로 폴백 (기본값)## 환경
- OS:
- Rust 버전:
- 명령어:
## 예상 동작
## 실제 동작
## 재현 단계
1.
2.
3.
## 로그/스크린샷