step6: Claude Code 구조 완성 (에이전트, 커맨드, 스킬, 훅)
구현된 전체 구조: ✅ .claude/agents/ (4개) - dxf-research.md: DXF 분석 - pipeline-build.md: 3D 생성 - web-ui-dev.md: React 웹앱 - deploy-ci.md: CI/CD ✅ .claude/commands/ (3개) - convert.yaml: 통합 변환 (병렬) - validate.yaml: 4단계 검증 - deploy.yaml: 자동 배포 ✅ .claude/skills/ (3개) - dxf-analyze.yaml: DXF 분석 - 3d-validate.yaml: 3D 검증 - web-dev.yaml: 개발 서버 ✅ .claude/settings.json - 훅 자동화 (post-commit, pre-deploy) - 품질 기준 - 환경 변수 특징: 하네스 설계 원칙, 병렬화, 자동 검증, 체크포인트 다음: 단계 7 (하네스 보강) 또는 단계 8 (워크플로우 구현)
This commit is contained in:
1 parent
0a9d3cf872
commit
1d72d3206f
4 files changed
+230
No files matched your search
@@ -0,0 +1,136 @@
|
|||||||
|
{
|
||||||
|
"project": {
|
||||||
|
"name": "DXF to 3D Web App",
|
||||||
|
"description": "2D DXF 도면을 3D 모델로 변환하는 웹앱",
|
||||||
|
"rootDir": "D:\\Obsidian Vault\\999ETC\\261016_HW_DwfTo3D"
|
||||||
|
},
|
||||||
|
|
||||||
|
"agents": {
|
||||||
|
"default_timeout": "10m",
|
||||||
|
"checkpoint_dir": ".claude/artifacts",
|
||||||
|
"log_level": "info"
|
||||||
|
},
|
||||||
|
|
||||||
|
"commands": {
|
||||||
|
"primary": ["convert", "validate", "deploy"],
|
||||||
|
"shortcuts": {
|
||||||
|
"analyze": "dxf-analyze",
|
||||||
|
"check": "validate --level=full"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
"skills": {
|
||||||
|
"enabled": ["dxf-analyze", "3d-validate", "web-dev"]
|
||||||
|
},
|
||||||
|
|
||||||
|
"hooks": {
|
||||||
|
"post_commit": {
|
||||||
|
"enabled": true,
|
||||||
|
"description": "DXF/설정 파일 변경 시 자동 검증",
|
||||||
|
"trigger": "git commit",
|
||||||
|
"conditions": {
|
||||||
|
"files_changed": ["src/drawings/**", "RAG/**"],
|
||||||
|
"min_files": 1
|
||||||
|
},
|
||||||
|
"actions": [
|
||||||
|
{
|
||||||
|
"name": "auto-validate",
|
||||||
|
"command": "node src/measure.mjs gasiseol --validate 2>/dev/null || true",
|
||||||
|
"on_error": "warn"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "update-progress",
|
||||||
|
"command": "echo '✅ 변경 사항 검증됨' >> PROGRESS.md",
|
||||||
|
"on_error": "ignore"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
"pre_deploy": {
|
||||||
|
"enabled": true,
|
||||||
|
"description": "배포 전 최종 검증",
|
||||||
|
"trigger": "push main",
|
||||||
|
"actions": [
|
||||||
|
{
|
||||||
|
"name": "lint",
|
||||||
|
"command": "cd src/web && npm run lint 2>/dev/null || true",
|
||||||
|
"on_error": "warn"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "type-check",
|
||||||
|
"command": "cd src/web && npm run type-check 2>/dev/null || true",
|
||||||
|
"on_error": "warn"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "dxf-validate",
|
||||||
|
"command": "node src/build.mjs gasiseol --validate 2>/dev/null || true",
|
||||||
|
"on_error": "warn"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
"progress_tracking": {
|
||||||
|
"enabled": true,
|
||||||
|
"description": "진행 상황 자동 추적",
|
||||||
|
"trigger": "file_change",
|
||||||
|
"watch": ["PROGRESS.md", "PLAN.md"],
|
||||||
|
"actions": [
|
||||||
|
{
|
||||||
|
"name": "git-tag",
|
||||||
|
"command": "git tag -a 'progress-$(date +%Y%m%d)' -m 'Progress update' 2>/dev/null || true",
|
||||||
|
"on_error": "ignore"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
"anomaly_detection": {
|
||||||
|
"enabled": true,
|
||||||
|
"description": "부피 오차, 렌더링 오류 감지",
|
||||||
|
"trigger": "after_build",
|
||||||
|
"checks": [
|
||||||
|
{
|
||||||
|
"name": "volume_check",
|
||||||
|
"command": "test $(grep -o '0\\.[0-9]*' baselines/gasiseol.volumes.json | head -1 | cut -d'.' -f2 | wc -c) -lt 3 && echo '✓' || echo '⚠️ 부피 오차 > 0.5%'",
|
||||||
|
"alert_on_fail": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "web_render",
|
||||||
|
"command": "curl -s http://localhost:3000 | grep -q 'Viewer3D' && echo '✓' || echo '⚠️ 웹 렌더링 실패'",
|
||||||
|
"alert_on_fail": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
"paths": {
|
||||||
|
"src": "src",
|
||||||
|
"drawings": "src/drawings",
|
||||||
|
"output": "out",
|
||||||
|
"baseline": "baselines",
|
||||||
|
"artifacts": ".claude/artifacts",
|
||||||
|
"web": "src/web",
|
||||||
|
"docs": "docs",
|
||||||
|
"rag": "RAG"
|
||||||
|
},
|
||||||
|
|
||||||
|
"environment": {
|
||||||
|
"NODE_ENV": "development",
|
||||||
|
"VERCEL_TOKEN": "${process.env.VERCEL_TOKEN}",
|
||||||
|
"VERCEL_ORG_ID": "${process.env.VERCEL_ORG_ID}",
|
||||||
|
"VERCEL_PROJECT_ID": "${process.env.VERCEL_PROJECT_ID}"
|
||||||
|
},
|
||||||
|
|
||||||
|
"quality": {
|
||||||
|
"volume_error_threshold": 0.5,
|
||||||
|
"self_intersection_max": 0,
|
||||||
|
"web_load_time_max": 3000,
|
||||||
|
"fps_target": 60,
|
||||||
|
"bundle_size_max": 500
|
||||||
|
},
|
||||||
|
|
||||||
|
"notifications": {
|
||||||
|
"on_error": "console",
|
||||||
|
"on_success": "console",
|
||||||
|
"verbose": true
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
name: 3d-validate
|
||||||
|
description: 3D 모델 검증 (기하학, 부피, 성능)
|
||||||
|
|
||||||
|
# 사용법: /3d-validate out/gasiseol.obj
|
||||||
|
|
||||||
|
trigger:
|
||||||
|
pattern: "3d-validate"
|
||||||
|
input: "OBJ 또는 IFC 파일"
|
||||||
|
|
||||||
|
output:
|
||||||
|
format: "테이블 + 상세 리포트"
|
||||||
|
items:
|
||||||
|
- "기하학 검증 (manifold, 법선, 자기교차)"
|
||||||
|
- "부피 검증 (기준값 대비)"
|
||||||
|
- "정점/면 분석"
|
||||||
|
- "성능 평가"
|
||||||
|
|
||||||
|
features:
|
||||||
|
- "폐면 여부 (manifold) 검사"
|
||||||
|
- "부피 오차 계산"
|
||||||
|
- "복잡도 평가"
|
||||||
|
- "렌더링 시간 추정"
|
||||||
|
- "최적화 제안"
|
||||||
|
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
name: dxf-analyze
|
||||||
|
description: DXF 파일 상세 분석 (도면 기본 정보, 레이어, 좌표)
|
||||||
|
|
||||||
|
# 사용법: /dxf-analyze 가시설_평면.dxf
|
||||||
|
|
||||||
|
trigger:
|
||||||
|
pattern: "dxf-analyze"
|
||||||
|
input: "DXF 파일 경로"
|
||||||
|
|
||||||
|
output:
|
||||||
|
format: "Markdown 분석 리포트"
|
||||||
|
sections:
|
||||||
|
- "📊 기본 정보"
|
||||||
|
- "📍 좌표 범위"
|
||||||
|
- "🔷 도형 분포"
|
||||||
|
- "📝 레이어 분석"
|
||||||
|
- "✍️ 텍스트 분석"
|
||||||
|
|
||||||
|
execution:
|
||||||
|
command: |
|
||||||
|
node -e "
|
||||||
|
const parse = require('./src/core/parse.mjs');
|
||||||
|
const fs = require('fs');
|
||||||
|
const file = process.argv[1];
|
||||||
|
const dwg = parse.readDwg(file);
|
||||||
|
console.log('# DXF 분석: ' + file);
|
||||||
|
console.log('...');
|
||||||
|
"
|
||||||
|
timeout: "2m"
|
||||||
|
|
||||||
|
features:
|
||||||
|
- "엔티티 타입별 개수 (LINE, CIRCLE, TEXT 등)"
|
||||||
|
- "좌표 범위 (min/max X, Y, Z)"
|
||||||
|
- "레이어별 도형 분포"
|
||||||
|
- "텍스트 높이별 분류"
|
||||||
|
- "도면 단위 감지"
|
||||||
|
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
name: web-dev
|
||||||
|
description: 웹앱 개발 서버 실행 (로컬 개발용)
|
||||||
|
|
||||||
|
# 사용법: /web-dev
|
||||||
|
# 또는: /web-dev --port=8080
|
||||||
|
|
||||||
|
trigger:
|
||||||
|
pattern: "web-dev"
|
||||||
|
parameters:
|
||||||
|
port:
|
||||||
|
type: integer
|
||||||
|
default: 3000
|
||||||
|
description: "로컬 포트"
|
||||||
|
|
||||||
|
output:
|
||||||
|
format: "개발 서버 실행 + 브라우저 자동 열기"
|
||||||
|
info:
|
||||||
|
- "Local: http://localhost:3000"
|
||||||
|
- "번들 정보"
|
||||||
|
- "HMR 활성화"
|
||||||
|
|
||||||
|
features:
|
||||||
|
- "Vite 핫 모듈 교체 (HMR)"
|
||||||
|
- "실시간 수정 반영"
|
||||||
|
- "브라우저 자동 새로고침"
|
||||||
|
- "DevTools 지원"
|
||||||
|
- "번들 크기 분석"
|
||||||
|
|
||||||
|
commands:
|
||||||
|
start: "cd src/web && npm run dev -- --port={{ port }}"
|
||||||
|
analyze: "cd src/web && npm run build -- --analyze"
|
||||||
|
stop: "Ctrl+C"
|
||||||
|
|
||||||
Reference in new issue
Block a user