creatrip-agent-rules-builder
Version:
Unified converter for AI coding agent rules across Cursor, Windsurf, and Claude
150 lines • 7.58 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.createVerifyCommand = createVerifyCommand;
const commander_1 = require("commander");
const index_1 = require("../verifiers/index");
const chalk_1 = __importDefault(require("chalk"));
function createVerifyCommand() {
const command = new commander_1.Command("verify");
command
.description("원본과 생성된 파일들 간의 일관성을 검증합니다")
.option("-r, --recursive", "하위 디렉토리를 재귀적으로 탐색하여 모든 AGENTS.md 검증")
.option("--json", "JSON 형식으로 결과 출력")
.option("--quiet", "종료 코드를 제외한 모든 출력 억제")
.action(async (options) => {
const outputFormat = options.json
? "json"
: options.quiet
? "quiet"
: "human";
const rootPath = process.cwd();
const isRecursive = options.recursive || false;
try {
const results = await (0, index_1.verifyAgents)(rootPath, outputFormat, isRecursive);
if (outputFormat === "json") {
console.log(JSON.stringify(results, null, 2));
}
else if (outputFormat === "human") {
printHumanReadableResults(results, isRecursive);
}
process.exit(results.status === "pass" ? 0 : 1);
}
catch (error) {
if (!options.quiet) {
console.error(chalk_1.default.red(`오류: ${error instanceof Error ? error.message : "알 수 없는 오류"}`));
}
process.exit(1);
}
});
return command;
}
function printHumanReadableResults(results, isRecursive) {
console.log(chalk_1.default.blue("에이전트 규칙 일관성 검증 중..."));
if (!isRecursive) {
// 단일 디렉토리 모드 (기존과 동일)
const location = results.locations[0];
// 각 에이전트별 결과 출력
for (const [agentName, result] of Object.entries(location.agents)) {
if (result.passed) {
console.log(chalk_1.default.green(`✓ ${agentName}: 동기화됨`));
}
else {
const errorMsg = result.error === "content mismatch"
? "내용 불일치"
: result.error === "file not found"
? "파일 없음"
: result.error || "내용 불일치";
console.log(chalk_1.default.red(`✗ ${agentName}: ${errorMsg}`));
}
}
// 패턴 분석 결과 및 권장 사항 출력
if (location.diagnosis) {
console.log(""); // 빈 줄 추가
switch (location.diagnosis.pattern) {
case "all_synced":
console.log(chalk_1.default.green("✓ 모든 파일이 동기화되어 있습니다"));
break;
case "all_outdated":
console.log(chalk_1.default.yellow("→ 패턴 감지: 모든 파일이 오래됨"));
console.log(chalk_1.default.yellow("→ 해결방법: 'agent-rules build' 실행"));
break;
case "single_diverged":
const divergedFile = location.diagnosis.diverged?.[0];
console.log(chalk_1.default.yellow(`→ 패턴 감지: ${divergedFile} 파일만 불일치`));
console.log(chalk_1.default.yellow(`→ AGENTS.md를 수정하려던 것이 아닌지 확인하세요`));
break;
case "multiple_diverged":
console.log(chalk_1.default.yellow("→ 패턴 감지: 여러 파일 불일치"));
console.log(chalk_1.default.yellow("→ 수동 검토가 필요합니다"));
break;
}
}
// 최종 결과
console.log(""); // 빈 줄 추가
if (location.status === "pass") {
console.log(chalk_1.default.green("✓ 모든 에이전트 검증 성공"));
}
else {
console.log(chalk_1.default.red(`✗ 검증 실패: ${location.summary.total}개 중 ${location.summary.failed}개 불일치`));
}
}
else {
// 재귀 모드
console.log("");
for (const location of results.locations) {
const relativePath = location.path.replace(process.cwd(), "") || "/";
console.log(chalk_1.default.cyan(`📁 ${relativePath}`));
// 각 에이전트별 결과 출력
for (const [agentName, result] of Object.entries(location.agents)) {
if (result.passed) {
console.log(chalk_1.default.green(` ✓ ${agentName}: 동기화됨`));
}
else {
const errorMsg = result.error === "content mismatch"
? "내용 불일치"
: result.error === "file not found"
? "파일 없음"
: result.error || "내용 불일치";
console.log(chalk_1.default.red(` ✗ ${agentName}: ${errorMsg}`));
}
}
// 패턴 분석 결과
if (location.diagnosis && location.diagnosis.pattern !== "all_synced") {
switch (location.diagnosis.pattern) {
case "all_outdated":
console.log(chalk_1.default.yellow(" → 패턴 감지: 모든 파일이 오래됨"));
console.log(chalk_1.default.yellow(" → 해결방법: 'agent-rules build' 실행"));
break;
case "single_diverged":
const divergedFile = location.diagnosis.diverged?.[0];
console.log(chalk_1.default.yellow(` → 패턴 감지: ${divergedFile} 파일만 불일치`));
console.log(chalk_1.default.yellow(` → AGENTS.md를 수정하려던 것이 아닌지 확인하세요`));
break;
case "multiple_diverged":
console.log(chalk_1.default.yellow(" → 패턴 감지: 여러 파일 불일치"));
console.log(chalk_1.default.yellow(" → 수동 검토가 필요합니다"));
break;
}
}
else if (location.diagnosis?.pattern === "all_synced") {
console.log(chalk_1.default.green(" ✓ 모든 파일이 동기화되어 있습니다"));
}
console.log(""); // 위치 간 구분
}
// 전체 요약
console.log("========================================");
const failedLocations = results.locations.filter((loc) => loc.status === "fail").length;
if (results.status === "pass") {
console.log(chalk_1.default.green(`📊 전체 요약: ${results.totalLocations}개 위치 모두 동기화됨`));
console.log(chalk_1.default.green("✓ 검증 성공"));
}
else {
console.log(chalk_1.default.yellow(`📊 전체 요약: ${results.totalLocations}개 위치 중 ${failedLocations}개 불일치`));
console.log(chalk_1.default.red("✗ 검증 실패"));
}
}
}
//# sourceMappingURL=verify.js.map