Files
AI/ontology_platform/web/frontend/public/locales/en/common.json

173 lines
5.8 KiB
JSON
Raw Normal View History

Phase 0.5: React UI 기반 계층 구축 — API 클라이언트 + TanStack Query + shadcn UI 1. 서버/UI 상태 분리 (선택지 B 채택) - ontologySlice: entities/relations 등 서버 상태 제거 → OntologyDraft(편집 폼)만 - crawlSlice: progress/stats/logs 제거 → CrawlUiState(토글/확장 상태)만 - 서버 상태는 전부 TanStack Query로 이전 2. API 클라이언트 계층 (src/lib/api/) - client.ts: fetch 래퍼 + Zod 스키마 검증 + ApiError - projects.ts: projectsApi.list/detail/create + 도메인 스키마 3. TanStack Query 훅 (src/hooks/) - useProjects, useProject, useCreateProject - queryKeys 팩토리로 키 일관성 4. shadcn 스타일 UI 프리미티브 (src/components/ui/) - button, card, skeleton - lib/utils.ts: cn() helper (clsx + tailwind-merge) 5. 레이아웃 (src/components/layout/) - AppShell: 축소 가능 Sidebar + Header + Outlet - App.tsx 라우트를 AppShell로 중첩 6. DashboardPage End-to-end 연결 - useProjects()로 백엔드 /projects 호출 - loading skeleton / error+retry / empty state / 카드 그리드 4가지 상태 모두 처리 7. i18n locale 파일 추가 - public/locales/ko/common.json (한국어) - public/locales/en/common.json (영문 fallback) - 키: nav.*, dashboard.*, common.*, app.* 8. 레거시 정리 - vanilla JS/CSS 24개 → src/legacy/로 git mv - tailwind content를 *.{ts,tsx}로 좁혀 legacy 제외 다음 단계: Phase 1 — OnboardingPage 파일 업로드 + useCreateProject 연결 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 14:17:26 +09:00
{
"app": {
"title": "Ontology Builder",
"subtitle": "AI-powered ontology construction"
},
"nav": {
"dashboard": "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": "New Project",
Phase 0.5: React UI 기반 계층 구축 — API 클라이언트 + TanStack Query + shadcn UI 1. 서버/UI 상태 분리 (선택지 B 채택) - ontologySlice: entities/relations 등 서버 상태 제거 → OntologyDraft(편집 폼)만 - crawlSlice: progress/stats/logs 제거 → CrawlUiState(토글/확장 상태)만 - 서버 상태는 전부 TanStack Query로 이전 2. API 클라이언트 계층 (src/lib/api/) - client.ts: fetch 래퍼 + Zod 스키마 검증 + ApiError - projects.ts: projectsApi.list/detail/create + 도메인 스키마 3. TanStack Query 훅 (src/hooks/) - useProjects, useProject, useCreateProject - queryKeys 팩토리로 키 일관성 4. shadcn 스타일 UI 프리미티브 (src/components/ui/) - button, card, skeleton - lib/utils.ts: cn() helper (clsx + tailwind-merge) 5. 레이아웃 (src/components/layout/) - AppShell: 축소 가능 Sidebar + Header + Outlet - App.tsx 라우트를 AppShell로 중첩 6. DashboardPage End-to-end 연결 - useProjects()로 백엔드 /projects 호출 - loading skeleton / error+retry / empty state / 카드 그리드 4가지 상태 모두 처리 7. i18n locale 파일 추가 - public/locales/ko/common.json (한국어) - public/locales/en/common.json (영문 fallback) - 키: nav.*, dashboard.*, common.*, app.* 8. 레거시 정리 - vanilla JS/CSS 24개 → src/legacy/로 git mv - tailwind content를 *.{ts,tsx}로 좁혀 legacy 제외 다음 단계: Phase 1 — OnboardingPage 파일 업로드 + useCreateProject 연결 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 14:17:26 +09:00
"sources": "Sources",
"crawl": "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": "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": "Editor",
Phase 0.5: React UI 기반 계층 구축 — API 클라이언트 + TanStack Query + shadcn UI 1. 서버/UI 상태 분리 (선택지 B 채택) - ontologySlice: entities/relations 등 서버 상태 제거 → OntologyDraft(편집 폼)만 - crawlSlice: progress/stats/logs 제거 → CrawlUiState(토글/확장 상태)만 - 서버 상태는 전부 TanStack Query로 이전 2. API 클라이언트 계층 (src/lib/api/) - client.ts: fetch 래퍼 + Zod 스키마 검증 + ApiError - projects.ts: projectsApi.list/detail/create + 도메인 스키마 3. TanStack Query 훅 (src/hooks/) - useProjects, useProject, useCreateProject - queryKeys 팩토리로 키 일관성 4. shadcn 스타일 UI 프리미티브 (src/components/ui/) - button, card, skeleton - lib/utils.ts: cn() helper (clsx + tailwind-merge) 5. 레이아웃 (src/components/layout/) - AppShell: 축소 가능 Sidebar + Header + Outlet - App.tsx 라우트를 AppShell로 중첩 6. DashboardPage End-to-end 연결 - useProjects()로 백엔드 /projects 호출 - loading skeleton / error+retry / empty state / 카드 그리드 4가지 상태 모두 처리 7. i18n locale 파일 추가 - public/locales/ko/common.json (한국어) - public/locales/en/common.json (영문 fallback) - 키: nav.*, dashboard.*, common.*, app.* 8. 레거시 정리 - vanilla JS/CSS 24개 → src/legacy/로 git mv - tailwind content를 *.{ts,tsx}로 좁혀 legacy 제외 다음 단계: Phase 1 — OnboardingPage 파일 업로드 + useCreateProject 연결 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 14:17:26 +09:00
"review": "Review",
"toggleSidebar": "Toggle sidebar"
},
"dashboard": {
"title": "Ontology Builder",
"subtitle": "Build and manage domain ontologies with AI-powered extraction",
"newProject": "New Project",
"projects": "Projects",
"projectCount": "{{count}} total",
"loadFailed": "Failed to load projects",
"empty": {
"title": "No projects yet",
"hint": "Create your first project to start building an ontology"
}
},
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": "Create New Project",
"formTitle": "Choose Ontology Domain",
"formDesc": "Pick the domain of ontology you want to build and give your project a name.",
"projectName": "Project Name",
"projectNameHint": "Letters, digits, _ and - only (2~64 chars)",
"domain": "Domain",
"domainSummary": "{{entities}} entity types · {{predicates}} predicates",
"submit": "Create Project",
"created": "Project created: {{name}}",
"createFailed": "Create failed: {{msg}}"
},
"sources": {
"title": "Configure Sources",
"next": "Proceed to Crawl",
"listTitle": "Registered Sources",
"listDesc": "Reference sites used for ontology construction",
"empty": "No sources yet. Add one using the form on the right.",
"addTitle": "Add Source",
"addDesc": "Enter information about the reference site",
"name": "Name",
"type": "Type",
"baseUrl": "Base URL",
"trust": "Trust",
"rateLimit": "rate/min",
"respectRobots": "Respect robots.txt",
"add": "Add Source",
"delete": "Delete",
"confirmDelete": "Delete source '{{name}}'?",
"added": "Source added: {{name}}",
"addFailed": "Add failed: {{msg}}",
"deleted": "Source deleted: {{name}}",
"deleteFailed": "Delete failed: {{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": "Autonomous Research",
"formTitle": "Research Settings",
"formDesc": "AI follows links from a seed to autonomously expand the ontology",
"source": "Source",
"pickSource": "Pick a source...",
"goal": "Goal",
"goalPlaceholder": "e.g. Collect note compositions and seasonal recommendations of popular perfume brands",
"seedUrl": "Seed URL",
"optional": "optional",
"maxSteps": "Max Steps",
"maxBranch": "Branch Width",
"maxDepth": "Max Depth",
"minRelevance": "Min Relevance",
"sameDomainOnly": "Same domain only",
"start": "Start Research",
"runningHint": "This may take a while. Don't close the page until it finishes.",
"runningTitle": "AI is researching...",
"completed": "Research completed",
"failed": "Failed: {{msg}}",
"doneHint": "Done",
"idleHint": "Start research on the left to see results here",
"resultTitle": "Latest Result",
"resultDesc": "Outcome of the research run in this session",
"stepsTaken": "Steps",
"pagesVisited": "Pages",
"entitiesFound": "Entities",
"claimsAdded": "Claims",
"rawResult": "Raw JSON",
"historyTitle": "Session History",
"historyDesc": "Past research sessions for this project",
"historyEmpty": "No sessions yet",
"pages": "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": "Ontology Editor",
"entitiesTab": "Entities",
"claimsTab": "Claims",
"bulkTab": "JSON Bulk",
"addEntity": "Add Entity",
"addEntityDesc": "Pick from the domain's entity_types",
"entityType": "Type",
"pickType": "Pick type...",
"entityName": "Name",
"add": "Add",
"entitiesList": "Entities",
"entityCount": "{{count}} total",
"entitiesEmpty": "No entities yet",
"entityAdded": "Entity added: {{name}}",
"entityAddFailed": "Add failed: {{msg}}",
"confirmDeleteEntity": "Delete entity '{{name}}'?",
"addClaim": "Add Claim",
"addClaimDesc": "Subject-Predicate-Object form",
"source": "Source",
"pickSource": "Pick source...",
"subject": "Subject",
"pickSubject": "Pick entity...",
"predicate": "Predicate",
"pickPredicate": "Pick predicate...",
"objectKind": "Object kind",
"objectEntity": "Other entity",
"objectValue": "Literal value",
"pickObject": "Pick entity...",
"confidence": "Confidence",
"claimsList": "Claims",
"claimCount": "{{count}} total",
"claimsEmpty": "No claims yet",
"claimAdded": "Claim added",
"claimAddFailed": "Add failed: {{msg}}",
"confirmDeleteClaim": "Delete this claim?",
"bulkTitle": "JSON Bulk Input",
"bulkDesc": "JSON of shape { entities: [{ entity_type, name, metadata? }] }",
"bulkSubmit": "Bulk Add",
"bulkAdded": "{{count}} entities added"
},
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": "Seed Crawl",
"formTitle": "Crawl Settings",
"formDesc": "Start from a seed URL and follow links to extract information",
"source": "Source",
"pickSource": "Pick a source...",
"noSources": "No sources registered. Add a reference source first.",
"addSource": "Add Source",
"seedUrl": "Seed URL",
"maxDepth": "Max Depth",
"maxPages": "Max Pages",
"sameDomainOnly": "Same domain only",
"start": "Start Crawl",
"started": "Crawl started (job #{{id}})",
"startFailed": "Start failed: {{msg}}",
"cancel": "Cancel",
"cancelRequested": "Cancel requested",
"cancelFailed": "Cancel failed: {{msg}}",
"progressTitle": "Progress",
"idleHint": "Enter a seed URL and start the crawl",
"visited": "Visited",
"queued": "Queued",
"analyzed": "Analyzed",
"latestPage": "Latest Page",
"errorsCount": "{{count}} errors",
"doneHint": "Crawl complete. Go review the results.",
"review": "Review"
},
Phase 0.5: React UI 기반 계층 구축 — API 클라이언트 + TanStack Query + shadcn UI 1. 서버/UI 상태 분리 (선택지 B 채택) - ontologySlice: entities/relations 등 서버 상태 제거 → OntologyDraft(편집 폼)만 - crawlSlice: progress/stats/logs 제거 → CrawlUiState(토글/확장 상태)만 - 서버 상태는 전부 TanStack Query로 이전 2. API 클라이언트 계층 (src/lib/api/) - client.ts: fetch 래퍼 + Zod 스키마 검증 + ApiError - projects.ts: projectsApi.list/detail/create + 도메인 스키마 3. TanStack Query 훅 (src/hooks/) - useProjects, useProject, useCreateProject - queryKeys 팩토리로 키 일관성 4. shadcn 스타일 UI 프리미티브 (src/components/ui/) - button, card, skeleton - lib/utils.ts: cn() helper (clsx + tailwind-merge) 5. 레이아웃 (src/components/layout/) - AppShell: 축소 가능 Sidebar + Header + Outlet - App.tsx 라우트를 AppShell로 중첩 6. DashboardPage End-to-end 연결 - useProjects()로 백엔드 /projects 호출 - loading skeleton / error+retry / empty state / 카드 그리드 4가지 상태 모두 처리 7. i18n locale 파일 추가 - public/locales/ko/common.json (한국어) - public/locales/en/common.json (영문 fallback) - 키: nav.*, dashboard.*, common.*, app.* 8. 레거시 정리 - vanilla JS/CSS 24개 → src/legacy/로 git mv - tailwind content를 *.{ts,tsx}로 좁혀 legacy 제외 다음 단계: Phase 1 — OnboardingPage 파일 업로드 + useCreateProject 연결 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 14:17:26 +09:00
"common": {
"retry": "Retry",
"cancel": "Cancel",
"next": "Next",
"back": "Back",
"complete": "Complete"
}
}