2026-05-14 14:17:26 +09:00
|
|
|
{
|
|
|
|
|
"app": {
|
|
|
|
|
"title": "온톨로지 빌더",
|
|
|
|
|
"subtitle": "AI 기반 온톨로지 구축 플랫폼"
|
|
|
|
|
},
|
|
|
|
|
"nav": {
|
|
|
|
|
"dashboard": "대시보드",
|
Phase 1.1: 프로젝트 생성 — 폼 기반 도메인 선택 + 인라인 JSON 생성
백엔드 (crawler_platform/app/api/routes.py):
- POST /projects/inline 추가: 파일 시스템 의존 없이 JSON 본문으로 ProjectConfig 인라인 생성
- CreateProjectInlineRequest + InlineSourceConfig Pydantic 모델
- GET /domains 추가: 미리 정의된 도메인 목록 (perfume, tea, coffee, candle, supplement, gift)
- 각 도메인의 entity_types, predicates, attribute_count 반환
프론트엔드 API 레이어 (src/lib/api/):
- domains.ts: domainsApi.list + Zod 스키마
- ontology.ts: ontologyApi.get(domain) + Zod 스키마
- projects.ts: createInline() 메서드 + CreateProjectInlineRequest 타입
TanStack Query 훅 (src/hooks/):
- useDomains: 도메인 목록 (30분 staleTime)
- useOntology(domain): 도메인 상세
- useCreateProjectInline: 인라인 생성 mutation + projects 캐시 무효화
- queryKeys에 domains, ontology 키 팩토리 추가
UI 프리미티브 (src/components/ui/):
- input.tsx, label.tsx, textarea.tsx
OnboardingPage 완전 교체 (src/pages/OnboardingPage.tsx):
- react-hook-form + zod 검증 (project_name 정규식, 도메인 필수)
- 도메인 카드 그리드 선택 (entity/predicate 개수 미리보기)
- 백엔드 /projects/inline POST → 성공 시 sonner 토스트 + /sources/{name}으로 이동
- 로딩/에러/재시도 UI
기타:
- Vite proxy에 /domains prefix 추가
- i18n locale 키 onboarding.* 추가 (한/영)
다음 단계: Phase 1.2 — 온톨로지 엔티티/클레임 직접 입력 + URL 추출
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 14:46:03 +09:00
|
|
|
"onboard": "프로젝트 생성",
|
2026-05-14 14:17:26 +09:00
|
|
|
"sources": "참고 소스",
|
|
|
|
|
"crawl": "크롤 진행",
|
Phase 1.4: 자율 연구 — by-project 엔드포인트 + ResearchPage + 세션 이력
백엔드 (crawler_platform/app/api/routes.py):
- POST /research/run/by-project 추가 — config_path 의존 제거
- ResearchRunByProjectRequest: project_name 기반, DB project.config 재구성
- GraphResearchLoop 동기 실행 (장시간 가능), asdict(result) 반환
- 기존 /projects/{n}/research/sessions, /research/sessions/{job_id}는 변경 없음
프론트엔드 API (src/lib/api/):
- research.ts: researchApi.startByProject/listSessions/getSession + Zod 스키마
- 결과 페이로드는 passthrough() (백엔드 dataclass 그대로 노출)
TanStack Query 훅 (src/hooks/):
- useResearch.ts: useStartResearch, useResearchSessions, useResearchSession
- queryKeys에 research.sessions, research.session 키
ResearchPage 신규 (src/pages/ResearchPage.tsx):
- 2열 레이아웃: 좌측 연구 설정 폼 + 우측 결과/이력
- 폼: 소스 선택, goal 텍스트(필수, 3~500자), 시드 URL(선택),
max_steps/max_branch/max_depth/min_relevance, same_domain_only
react-hook-form + zod 검증
- 결과 카드: 단계/페이지/엔티티/클레임 4종 stats + raw JSON details
- 세션 이력 카드: GET /projects/{n}/research/sessions 결과 리스트
- 실행 중 안내 (장시간 가능), sonner 토스트
라우팅 & Sidebar:
- App.tsx: /research/:projectId 라우트 추가
- AppShell: 사이드바에 "자율 연구" 메뉴 (Brain 아이콘)
i18n: research.*, nav.research 키 (한/영)
다음 단계: Phase 1.5 — 엔티티/클레임 직접 입력
(백엔드 POST /projects/{n}/entities, /claims 신규 필요)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 19:01:52 +09:00
|
|
|
"research": "자율 연구",
|
Phase 1.5: 엔티티/클레임 직접 입력 — OntologyEditorPage + 3탭 (엔티티/클레임/JSON 일괄)
백엔드 (crawler_platform/app/api/routes.py):
- POST /projects/{n}/entities: 단일 엔티티 직접 생성 (upsert)
- CreateEntityRequest (entity_type, name, metadata)
- POST /projects/{n}/entities/bulk: 다수 엔티티 일괄 생성
- BulkCreateEntitiesRequest, 응답 created 수 + entities
- DELETE /projects/{n}/entities/{id}: 단일 엔티티 삭제
- POST /projects/{n}/claims: 단일 클레임 직접 생성
- CreateClaimRequest (source_name, subject_entity_id, predicate,
object_entity_id|object_value, confidence, confidence_reason, evidence_text)
- claim_hash로 중복 검출 → 있으면 confidence/메타 갱신
- status="validated_claim", extraction_method="manual"
- evidence_text 있으면 Evidence 자동 생성
- DELETE /projects/{n}/claims/{id}: 단일 클레임 삭제
프론트엔드 API (src/lib/api/):
- entities.ts: list/create/bulkCreate/delete + Zod 스키마
- claims.ts: list/create/delete + Zod 스키마 (passthrough)
TanStack Query 훅 (src/hooks/):
- useEntities.ts: useEntities, useCreateEntity, useBulkCreateEntities, useDeleteEntity
- useClaims.ts: useClaims, useCreateClaim, useDeleteClaim
- queryKeys에 entities.list, claims.list 키 팩토리
UI 프리미티브 (src/components/ui/):
- tabs.tsx: Tabs, TabsList, TabsTrigger, TabsContent (Context API 기반)
OntologyEditorPage 신규 (src/pages/):
- 3개 탭 구조:
* 엔티티 탭: 도메인의 entity_types에서 타입 선택 + 이름 입력 → 추가
+ 엔티티 목록 (max-h scroll, 타입 배지, 삭제 버튼)
* 클레임 탭: 소스/주어/술어/목적어(엔티티 or 리터럴)/신뢰도 입력
+ 클레임 목록 (S-P-O 시각화, 신뢰도, status 배지)
* JSON 일괄 탭: textarea에 { entities: [...] } 붙여넣기 → 파싱 → bulkCreate
- react-hook-form + zod 검증
- useOntology(domain)으로 entity_types/predicates 자동 로드
- 삭제 confirm 대화상자, sonner 토스트
라우팅 & Sidebar:
- App.tsx: /editor/:projectId 라우트 추가
- AppShell: 사이드바에 "온톨로지 편집" 메뉴 (Network 아이콘)
i18n: editor.*, nav.editor 키 (한/영)
UI_REBUILD_PLAN.md 업데이트:
- Phase 1.4 `00786a4` 커밋 기록
- Phase 1.5 완료 표시 + 대기 보드 Phase 2/3 재정렬
다음 단계: Phase 2 — 그래프 시각화/편집 (Cytoscape React 래퍼)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 19:10:37 +09:00
|
|
|
"editor": "온톨로지 편집",
|
2026-05-14 14:17:26 +09:00
|
|
|
"review": "결과 검토",
|
|
|
|
|
"toggleSidebar": "사이드바 토글"
|
|
|
|
|
},
|
|
|
|
|
"dashboard": {
|
|
|
|
|
"title": "온톨로지 빌더",
|
|
|
|
|
"subtitle": "도메인 온톨로지를 AI 추출로 구축하고 관리합니다",
|
|
|
|
|
"newProject": "새 프로젝트",
|
|
|
|
|
"projects": "프로젝트 목록",
|
|
|
|
|
"projectCount": "{{count}}개",
|
|
|
|
|
"loadFailed": "프로젝트를 불러오지 못했습니다",
|
|
|
|
|
"empty": {
|
|
|
|
|
"title": "아직 프로젝트가 없습니다",
|
|
|
|
|
"hint": "첫 프로젝트를 만들어 온톨로지 구축을 시작하세요"
|
|
|
|
|
}
|
|
|
|
|
},
|
Phase 1.1: 프로젝트 생성 — 폼 기반 도메인 선택 + 인라인 JSON 생성
백엔드 (crawler_platform/app/api/routes.py):
- POST /projects/inline 추가: 파일 시스템 의존 없이 JSON 본문으로 ProjectConfig 인라인 생성
- CreateProjectInlineRequest + InlineSourceConfig Pydantic 모델
- GET /domains 추가: 미리 정의된 도메인 목록 (perfume, tea, coffee, candle, supplement, gift)
- 각 도메인의 entity_types, predicates, attribute_count 반환
프론트엔드 API 레이어 (src/lib/api/):
- domains.ts: domainsApi.list + Zod 스키마
- ontology.ts: ontologyApi.get(domain) + Zod 스키마
- projects.ts: createInline() 메서드 + CreateProjectInlineRequest 타입
TanStack Query 훅 (src/hooks/):
- useDomains: 도메인 목록 (30분 staleTime)
- useOntology(domain): 도메인 상세
- useCreateProjectInline: 인라인 생성 mutation + projects 캐시 무효화
- queryKeys에 domains, ontology 키 팩토리 추가
UI 프리미티브 (src/components/ui/):
- input.tsx, label.tsx, textarea.tsx
OnboardingPage 완전 교체 (src/pages/OnboardingPage.tsx):
- react-hook-form + zod 검증 (project_name 정규식, 도메인 필수)
- 도메인 카드 그리드 선택 (entity/predicate 개수 미리보기)
- 백엔드 /projects/inline POST → 성공 시 sonner 토스트 + /sources/{name}으로 이동
- 로딩/에러/재시도 UI
기타:
- Vite proxy에 /domains prefix 추가
- i18n locale 키 onboarding.* 추가 (한/영)
다음 단계: Phase 1.2 — 온톨로지 엔티티/클레임 직접 입력 + URL 추출
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 14:46:03 +09:00
|
|
|
"onboarding": {
|
|
|
|
|
"title": "새 프로젝트 만들기",
|
|
|
|
|
"formTitle": "온톨로지 도메인 선택",
|
|
|
|
|
"formDesc": "어떤 종류의 온톨로지를 구축할지 도메인을 선택하고 프로젝트 이름을 정해주세요.",
|
|
|
|
|
"projectName": "프로젝트 이름",
|
|
|
|
|
"projectNameHint": "영문, 숫자, _ , - 만 사용 (2~64자)",
|
|
|
|
|
"domain": "도메인",
|
|
|
|
|
"domainSummary": "엔티티 {{entities}}종 · 관계 {{predicates}}개",
|
|
|
|
|
"submit": "프로젝트 만들기",
|
|
|
|
|
"created": "프로젝트가 생성되었습니다: {{name}}",
|
|
|
|
|
"createFailed": "생성 실패: {{msg}}"
|
|
|
|
|
},
|
2026-05-14 14:53:39 +09:00
|
|
|
"sources": {
|
|
|
|
|
"title": "참고 소스 설정",
|
|
|
|
|
"next": "크롤 진행",
|
|
|
|
|
"listTitle": "등록된 소스",
|
|
|
|
|
"listDesc": "프로젝트 온톨로지 구축에 사용할 참고 사이트 목록",
|
|
|
|
|
"empty": "아직 등록된 소스가 없습니다. 오른쪽 폼에서 추가하세요.",
|
|
|
|
|
"addTitle": "소스 추가",
|
|
|
|
|
"addDesc": "참고할 사이트 정보를 입력하세요",
|
|
|
|
|
"name": "이름",
|
|
|
|
|
"type": "타입",
|
|
|
|
|
"baseUrl": "Base URL",
|
|
|
|
|
"trust": "신뢰도",
|
|
|
|
|
"rateLimit": "rate/분",
|
|
|
|
|
"respectRobots": "robots.txt 준수",
|
|
|
|
|
"add": "소스 추가",
|
|
|
|
|
"delete": "삭제",
|
|
|
|
|
"confirmDelete": "정말 '{{name}}' 소스를 삭제하시겠습니까?",
|
|
|
|
|
"added": "소스가 추가되었습니다: {{name}}",
|
|
|
|
|
"addFailed": "추가 실패: {{msg}}",
|
|
|
|
|
"deleted": "소스가 삭제되었습니다: {{name}}",
|
|
|
|
|
"deleteFailed": "삭제 실패: {{msg}}"
|
|
|
|
|
},
|
Phase 1.4: 자율 연구 — by-project 엔드포인트 + ResearchPage + 세션 이력
백엔드 (crawler_platform/app/api/routes.py):
- POST /research/run/by-project 추가 — config_path 의존 제거
- ResearchRunByProjectRequest: project_name 기반, DB project.config 재구성
- GraphResearchLoop 동기 실행 (장시간 가능), asdict(result) 반환
- 기존 /projects/{n}/research/sessions, /research/sessions/{job_id}는 변경 없음
프론트엔드 API (src/lib/api/):
- research.ts: researchApi.startByProject/listSessions/getSession + Zod 스키마
- 결과 페이로드는 passthrough() (백엔드 dataclass 그대로 노출)
TanStack Query 훅 (src/hooks/):
- useResearch.ts: useStartResearch, useResearchSessions, useResearchSession
- queryKeys에 research.sessions, research.session 키
ResearchPage 신규 (src/pages/ResearchPage.tsx):
- 2열 레이아웃: 좌측 연구 설정 폼 + 우측 결과/이력
- 폼: 소스 선택, goal 텍스트(필수, 3~500자), 시드 URL(선택),
max_steps/max_branch/max_depth/min_relevance, same_domain_only
react-hook-form + zod 검증
- 결과 카드: 단계/페이지/엔티티/클레임 4종 stats + raw JSON details
- 세션 이력 카드: GET /projects/{n}/research/sessions 결과 리스트
- 실행 중 안내 (장시간 가능), sonner 토스트
라우팅 & Sidebar:
- App.tsx: /research/:projectId 라우트 추가
- AppShell: 사이드바에 "자율 연구" 메뉴 (Brain 아이콘)
i18n: research.*, nav.research 키 (한/영)
다음 단계: Phase 1.5 — 엔티티/클레임 직접 입력
(백엔드 POST /projects/{n}/entities, /claims 신규 필요)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 19:01:52 +09:00
|
|
|
"research": {
|
|
|
|
|
"title": "자율 연구",
|
|
|
|
|
"formTitle": "자율 연구 설정",
|
|
|
|
|
"formDesc": "AI가 시드에서 시작해 스스로 링크를 따라가며 온톨로지를 확장합니다",
|
|
|
|
|
"source": "참고 소스",
|
|
|
|
|
"pickSource": "소스를 선택하세요...",
|
|
|
|
|
"goal": "목표",
|
|
|
|
|
"goalPlaceholder": "예: 인기 브랜드 향수의 노트 구성과 시즌 추천 정보 수집",
|
|
|
|
|
"seedUrl": "시드 URL",
|
|
|
|
|
"optional": "선택",
|
|
|
|
|
"maxSteps": "최대 단계",
|
|
|
|
|
"maxBranch": "분기 폭",
|
|
|
|
|
"maxDepth": "최대 깊이",
|
|
|
|
|
"minRelevance": "최소 관련도",
|
|
|
|
|
"sameDomainOnly": "동일 도메인만 탐색",
|
|
|
|
|
"start": "자율 연구 시작",
|
|
|
|
|
"runningHint": "장시간 걸릴 수 있습니다. 완료될 때까지 페이지를 닫지 마세요.",
|
|
|
|
|
"runningTitle": "AI가 연구 중입니다...",
|
|
|
|
|
"completed": "자율 연구가 완료되었습니다",
|
|
|
|
|
"failed": "실패: {{msg}}",
|
|
|
|
|
"doneHint": "완료",
|
|
|
|
|
"idleHint": "왼쪽에서 자율 연구를 시작하면 결과가 여기에 표시됩니다",
|
|
|
|
|
"resultTitle": "최근 결과",
|
|
|
|
|
"resultDesc": "이번 세션에서 실행된 연구의 결과",
|
|
|
|
|
"stepsTaken": "단계",
|
|
|
|
|
"pagesVisited": "페이지",
|
|
|
|
|
"entitiesFound": "엔티티",
|
|
|
|
|
"claimsAdded": "클레임",
|
|
|
|
|
"rawResult": "원시 응답 JSON",
|
|
|
|
|
"historyTitle": "세션 이력",
|
|
|
|
|
"historyDesc": "이 프로젝트의 자율 연구 세션 기록",
|
|
|
|
|
"historyEmpty": "아직 실행된 세션이 없습니다",
|
|
|
|
|
"pages": "페이지"
|
|
|
|
|
},
|
Phase 1.5: 엔티티/클레임 직접 입력 — OntologyEditorPage + 3탭 (엔티티/클레임/JSON 일괄)
백엔드 (crawler_platform/app/api/routes.py):
- POST /projects/{n}/entities: 단일 엔티티 직접 생성 (upsert)
- CreateEntityRequest (entity_type, name, metadata)
- POST /projects/{n}/entities/bulk: 다수 엔티티 일괄 생성
- BulkCreateEntitiesRequest, 응답 created 수 + entities
- DELETE /projects/{n}/entities/{id}: 단일 엔티티 삭제
- POST /projects/{n}/claims: 단일 클레임 직접 생성
- CreateClaimRequest (source_name, subject_entity_id, predicate,
object_entity_id|object_value, confidence, confidence_reason, evidence_text)
- claim_hash로 중복 검출 → 있으면 confidence/메타 갱신
- status="validated_claim", extraction_method="manual"
- evidence_text 있으면 Evidence 자동 생성
- DELETE /projects/{n}/claims/{id}: 단일 클레임 삭제
프론트엔드 API (src/lib/api/):
- entities.ts: list/create/bulkCreate/delete + Zod 스키마
- claims.ts: list/create/delete + Zod 스키마 (passthrough)
TanStack Query 훅 (src/hooks/):
- useEntities.ts: useEntities, useCreateEntity, useBulkCreateEntities, useDeleteEntity
- useClaims.ts: useClaims, useCreateClaim, useDeleteClaim
- queryKeys에 entities.list, claims.list 키 팩토리
UI 프리미티브 (src/components/ui/):
- tabs.tsx: Tabs, TabsList, TabsTrigger, TabsContent (Context API 기반)
OntologyEditorPage 신규 (src/pages/):
- 3개 탭 구조:
* 엔티티 탭: 도메인의 entity_types에서 타입 선택 + 이름 입력 → 추가
+ 엔티티 목록 (max-h scroll, 타입 배지, 삭제 버튼)
* 클레임 탭: 소스/주어/술어/목적어(엔티티 or 리터럴)/신뢰도 입력
+ 클레임 목록 (S-P-O 시각화, 신뢰도, status 배지)
* JSON 일괄 탭: textarea에 { entities: [...] } 붙여넣기 → 파싱 → bulkCreate
- react-hook-form + zod 검증
- useOntology(domain)으로 entity_types/predicates 자동 로드
- 삭제 confirm 대화상자, sonner 토스트
라우팅 & Sidebar:
- App.tsx: /editor/:projectId 라우트 추가
- AppShell: 사이드바에 "온톨로지 편집" 메뉴 (Network 아이콘)
i18n: editor.*, nav.editor 키 (한/영)
UI_REBUILD_PLAN.md 업데이트:
- Phase 1.4 `00786a4` 커밋 기록
- Phase 1.5 완료 표시 + 대기 보드 Phase 2/3 재정렬
다음 단계: Phase 2 — 그래프 시각화/편집 (Cytoscape React 래퍼)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 19:10:37 +09:00
|
|
|
"editor": {
|
|
|
|
|
"title": "온톨로지 직접 편집",
|
|
|
|
|
"entitiesTab": "엔티티",
|
|
|
|
|
"claimsTab": "클레임",
|
|
|
|
|
"bulkTab": "JSON 일괄 입력",
|
|
|
|
|
"addEntity": "엔티티 추가",
|
|
|
|
|
"addEntityDesc": "온톨로지 도메인의 entity_types 중에서 선택",
|
|
|
|
|
"entityType": "타입",
|
|
|
|
|
"pickType": "타입 선택...",
|
|
|
|
|
"entityName": "이름",
|
|
|
|
|
"add": "추가",
|
|
|
|
|
"entitiesList": "엔티티 목록",
|
|
|
|
|
"entityCount": "{{count}}개",
|
|
|
|
|
"entitiesEmpty": "아직 등록된 엔티티가 없습니다",
|
|
|
|
|
"entityAdded": "엔티티가 추가되었습니다: {{name}}",
|
|
|
|
|
"entityAddFailed": "추가 실패: {{msg}}",
|
|
|
|
|
"confirmDeleteEntity": "엔티티 '{{name}}'을 삭제하시겠습니까?",
|
|
|
|
|
"addClaim": "클레임 추가",
|
|
|
|
|
"addClaimDesc": "주어-술어-목적어 형태로 직접 입력",
|
|
|
|
|
"source": "소스",
|
|
|
|
|
"pickSource": "소스 선택...",
|
|
|
|
|
"subject": "주어 (Subject)",
|
|
|
|
|
"pickSubject": "엔티티 선택...",
|
|
|
|
|
"predicate": "술어 (Predicate)",
|
|
|
|
|
"pickPredicate": "술어 선택...",
|
|
|
|
|
"objectKind": "목적어 유형",
|
|
|
|
|
"objectEntity": "다른 엔티티",
|
|
|
|
|
"objectValue": "리터럴 값",
|
|
|
|
|
"pickObject": "엔티티 선택...",
|
|
|
|
|
"confidence": "신뢰도",
|
|
|
|
|
"claimsList": "클레임 목록",
|
|
|
|
|
"claimCount": "{{count}}개",
|
|
|
|
|
"claimsEmpty": "아직 등록된 클레임이 없습니다",
|
|
|
|
|
"claimAdded": "클레임이 추가되었습니다",
|
|
|
|
|
"claimAddFailed": "추가 실패: {{msg}}",
|
|
|
|
|
"confirmDeleteClaim": "클레임을 삭제하시겠습니까?",
|
|
|
|
|
"bulkTitle": "JSON 일괄 입력",
|
|
|
|
|
"bulkDesc": "{ entities: [{ entity_type, name, metadata? }] } 형태의 JSON",
|
|
|
|
|
"bulkSubmit": "일괄 추가",
|
|
|
|
|
"bulkAdded": "{{count}}개 엔티티가 추가되었습니다"
|
|
|
|
|
},
|
Phase 1.3: 시드 크롤 — by-project 엔드포인트 + CrawlPage 폼/폴링/취소
세션 영구화: UI_REBUILD_PLAN.md 신설
- 사용자 비전 5가지 흐름 + Phase 보드 + 작업 재개 가이드
- 세션이 끊겨도 이 파일 + git log로 어디까지 했는지 즉시 복원
백엔드 (crawler_platform/app/api/):
- routes.py: POST /crawl-site/by-project 추가 — config_path 의존 제거
- SiteCrawlByProjectRequest: project_name 기반, DB project.config 재구성
- run_site_crawl_job이 __config_dict 메타키 인식하도록 최소 변경
- config/loader.py: project_config_from_dict() 헬퍼 추출 (DB dict ↔ ProjectConfig)
프론트엔드 API (src/lib/api/):
- crawl.ts: crawlApi.startByProject/getJob/cancel + Zod 스키마
- 종료 상태 판정 헬퍼 isCrawlTerminal()
TanStack Query 훅 (src/hooks/):
- useCrawl.ts: useStartSiteCrawl, useCrawlJob (2초 폴링, 종료 시 자동 중단), useCancelCrawl
- queryKeys에 crawl.job 키
UI 프리미티브 (src/components/ui/):
- select.tsx, progress.tsx, badge.tsx (success/warning/destructive variants 포함)
CrawlPage 완전 교체 (src/pages/):
- 2열 레이아웃: 좌측 크롤 설정 폼 + 우측 진행 상태
- 폼: 소스 선택 (드롭다운, 비어있으면 소스 추가 안내) + 시드 URL + max_depth/max_pages + same_domain_only
- react-hook-form + zod 검증
- 진행 상태: 상태 배지, 진행률 바, visited/queued/analyzed 카운터, 최근 페이지, 에러 details
- 크롤 종료시 폴링 자동 중단, 완료시 "결과 검토" 버튼
- 취소 버튼 → /crawl-site/jobs/{id}/cancel
- sonner 토스트
i18n: crawl.* 키 (한/영)
다음 단계: Phase 1.4 — 자율 연구 (POST /research/run by-project 마이그레이션 + ResearchPage)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 15:04:41 +09:00
|
|
|
"crawl": {
|
|
|
|
|
"title": "시드 크롤",
|
|
|
|
|
"formTitle": "크롤 설정",
|
|
|
|
|
"formDesc": "시드 URL에서 시작해 링크를 따라가며 정보를 추출합니다",
|
|
|
|
|
"source": "참고 소스",
|
|
|
|
|
"pickSource": "소스를 선택하세요...",
|
|
|
|
|
"noSources": "등록된 소스가 없습니다. 먼저 참고 소스를 추가하세요.",
|
|
|
|
|
"addSource": "소스 추가",
|
|
|
|
|
"seedUrl": "시드 URL",
|
|
|
|
|
"maxDepth": "최대 깊이",
|
|
|
|
|
"maxPages": "최대 페이지",
|
|
|
|
|
"sameDomainOnly": "동일 도메인만 따라가기",
|
|
|
|
|
"start": "크롤 시작",
|
|
|
|
|
"started": "크롤이 시작되었습니다 (job #{{id}})",
|
|
|
|
|
"startFailed": "시작 실패: {{msg}}",
|
|
|
|
|
"cancel": "취소",
|
|
|
|
|
"cancelRequested": "취소 요청됨",
|
|
|
|
|
"cancelFailed": "취소 실패: {{msg}}",
|
|
|
|
|
"progressTitle": "진행 상태",
|
|
|
|
|
"idleHint": "왼쪽에서 시드 URL을 입력하고 시작하세요",
|
|
|
|
|
"visited": "방문",
|
|
|
|
|
"queued": "대기",
|
|
|
|
|
"analyzed": "분석",
|
|
|
|
|
"latestPage": "최근 페이지",
|
|
|
|
|
"errorsCount": "에러 {{count}}건",
|
|
|
|
|
"doneHint": "크롤 완료. 결과 검토로 이동하세요.",
|
|
|
|
|
"review": "결과 검토"
|
|
|
|
|
},
|
2026-05-14 14:17:26 +09:00
|
|
|
"common": {
|
|
|
|
|
"retry": "다시 시도",
|
|
|
|
|
"cancel": "취소",
|
|
|
|
|
"next": "다음",
|
|
|
|
|
"back": "이전",
|
|
|
|
|
"complete": "완료"
|
|
|
|
|
}
|
|
|
|
|
}
|