1.0.2 ko public

스펙

RAWP-CRS

Compliance rendering specification for RAWP consumers.

7. 파일 브라우저 (File Browser)

세션 생성 전에 사용자가 노드와 에이전트를 선택한 후 작업 디렉토리(workspace_path)를 지정하기 위한 파일 브라우저 UI 규격이다. RAWP 1.0 §4.5(POST /v1/fs/browse) 및 §9.2.6(POST /v1/edge/nodes/{node_id}/fs/browse)의 응답 데이터를 시각적으로 렌더링한다.

7.1. 용도 및 진입점

파일 브라우저는 세션 생성 워크플로우에서 workspace_path를 선택하는 단계에 사용한다.

진입점: 노드 선택 → 에이전트 선택 완료 후, "작업 디렉토리 선택" 버튼 또는 자동 트리거로 모달 다이얼로그를 표시해야 한다 (MUST). 다이얼로그는 트리 뷰(§7.2), 경로 브레드크럼(§7.3), 수동 입력 필드(§7.6)를 포함한다.

초기 로딩: 다이얼로그가 열리면 path 생략 모드(루트 탐색)로 API를 호출하여 초기 트리를 구성해야 한다 (MUST).

7.2. 트리 뷰 컴포넌트

재귀적 트리 구조의 파일시스템 항목을 렌더링하는 핵심 컴포넌트다. entries 배열의 재귀 children 구조를 그대로 반영한다.

7.2.1. 항목 렌더링

각 Entry 항목은 한 줄로 렌더링하며, 다음 요소를 좌측에서 우측 순서로 배치해야 한다 (MUST):

순서 요소 규칙
1 들여쓰기 트리 깊이당 16~24px 패딩. 시각적 계층 구조를 명확히 전달한다 (MUST).
2 펼침/접기 chevron 디렉토리(directory, symlink_directory)에만 표시. (접힌 상태) / (펼친 상태). 파일 항목에는 chevron 영역만큼 빈 공간을 유지한다 (MUST).
3 아이콘 §7.2.3의 아이콘 매핑에 따라 타입별 아이콘을 표시한다 (MUST).
4 이름 entry.name을 표시한다. readable: false인 항목은 연한 색상(muted color)으로 렌더링하고 잠금 아이콘(🔒)을 우측에 병기한다 (MUST).
5 부가 정보 파일 항목에 한해 size를 사람이 읽기 쉬운 단위(KB, MB 등)로 우측 정렬 표시한다 (SHOULD).

호버 및 선택 스타일: 항목 호버 시 배경색 변경으로 포커스를 표시해야 한다 (MUST). 현재 선택된 디렉토리는 강조 배경색과 좌측 보더(2~3px, primary color)로 구분한다 (MUST).

7.2.2. 디렉토리 펼침/접기

  • chevron 클릭 또는 디렉토리 더블 클릭으로 펼침/접기를 토글한다 (MUST).
  • 이미 children이 로딩된 디렉토리는 즉시 토글한다. children이 없고 깊이 경계에 해당하는 디렉토리는 API를 재호출하여 하위를 로딩한다 (Lazy Expansion).
  • Lazy Expansion 중에는 해당 디렉토리의 chevron을 스피너로 교체하여 로딩 상태를 표시해야 한다 (MUST).
  • 로딩 실패 시 chevron을 원래 상태로 복원하고 해당 항목 하위에 인라인 에러 메시지를 표시한다 (MUST).

7.2.3. 아이콘 매핑

항목의 type 필드에 따라 아이콘을 매핑한다 (MUST):

type 아이콘 비고
directory 📁 폴더 펼친 상태 시 📂(열린 폴더)로 전환 (MAY)
file 📄 파일 확장자별 세분화는 구현에 위임 (MAY)
symlink_directory 📁↗ 폴더+링크 링크 표시를 겸한 폴더 아이콘
symlink_file 📄↗ 파일+링크 링크 표시를 겸한 파일 아이콘

아이콘 세트는 구현체의 디자인 시스템에 위임하되, 타입 간 시각적 구분이 가능해야 한다 (MUST).

7.3. 경로 브레드크럼

트리 뷰 상단에 현재 탐색 경로를 브레드크럼 형태로 표시해야 한다 (MUST).

  • 각 경로 세그먼트는 클릭 가능하며, 클릭 시 해당 레벨로 트리 뷰를 이동한다 (MUST).
  • 경로 구분자는 os_type에 따라 결정한다: unix/, windows\.
  • 루트 모드(base_path가 빈 문자열)에서는 OS 루트 아이콘(🖥 또는 컴퓨터 아이콘)을 최좌측에 표시한다 (SHOULD).
  • Windows 환경에서 드라이브 문자(C:\, D:\ 등)는 최상위 브레드크럼 세그먼트로 표시한다 (MUST).
  • 경로가 길어 한 줄을 초과할 경우, 중간 세그먼트를 으로 축약하되 첫 세그먼트와 마지막 2개 세그먼트는 항상 표시한다 (SHOULD).

7.4. 로딩 및 에러 상태

초기 로딩: 트리 뷰 영역 전체에 중앙 정렬 스피너를 표시해야 한다 (MUST). 로딩 중에도 수동 입력 필드(§7.6)는 사용 가능해야 한다 (SHOULD).

Lazy Expansion 로딩: §7.2.2에 따라 해당 디렉토리의 chevron을 스피너로 교체한다.

에러 상태:

상황 렌더링
노드 오프라인 트리 뷰 전체를 에러 패널로 교체. "노드에 연결할 수 없습니다" 메시지와 재시도 버튼 표시 (MUST).
권한 없음 (readable: false) 해당 항목에 잠금 아이콘(🔒)과 tooltip("접근 권한 없음")을 표시. 디렉토리인 경우 펼침을 비활성화 (MUST).
심링크 순환 해당 항목을 비활성(disabled) 상태로 렌더링하고 tooltip("순환 심링크")을 표시한다 (MUST).
Truncation 잘린 디렉토리 하위에 "외 N개 항목" 안내를 표시한다 (MUST). total_children_count 활용.
API 타임아웃/5xx 부분 결과가 있으면 표시하고 하단에 "일부 항목을 불러오지 못했습니다" 경고를 표시한다 (SHOULD).

7.5. 키보드 내비게이션

파일 브라우저는 WAI-ARIA Treeview 패턴을 준수해야 한다 (MUST):

동작
/ 트리 항목 간 포커스 이동
포커스된 디렉토리 펼침. 이미 펼쳐져 있으면 첫 번째 자식으로 이동
포커스된 디렉토리 접기. 이미 접혀 있으면 부모 디렉토리로 이동
Enter 포커스된 디렉토리를 workspace_path로 선택
Space 포커스된 디렉토리 펼침/접기 토글
Home 트리의 첫 번째 항목으로 이동
End 트리의 마지막 가시 항목으로 이동
Esc 파일 브라우저 다이얼로그 닫기

파일(type: "file")은 포커스는 가능하나 Enter로 선택할 수 없다 (MUST). 디렉토리만 workspace_path로 선택 가능하다.

7.6. 작업 디렉토리 선택

트리에서 선택: 디렉토리를 클릭(싱글 클릭)하면 해당 항목을 선택 상태로 표시하고, "선택" 버튼 클릭 또는 Enter 키로 확정한다 (MUST). 확정 시 선택된 디렉토리의 path를 세션 생성 폼의 workspace_path에 반영하고 다이얼로그를 닫는다.

수동 입력: 트리 뷰 하단 또는 상단에 텍스트 입력 필드를 제공해야 한다 (MUST). 사용자가 절대 경로를 직접 입력하여 workspace_path를 지정할 수 있다.

  • 입력 필드에 경로를 입력하면, 클라이언트는 해당 경로가 에이전트의 allowed_directories 범위 내인지 클라이언트 측에서 사전 검증해야 한다 (MUST).
  • 범위 밖 경로 입력 시 인라인 경고("허용된 디렉토리 범위 밖입니다")를 표시하고 선택 버튼을 비활성화한다 (MUST).
  • 유효한 경로 입력 시 트리 뷰를 해당 경로로 자동 이동하여 시각적 확인을 제공한다 (SHOULD).

7.7. 빈 상태 처리

에이전트의 allowed_directories가 빈 배열이거나 모든 경로에 접근 권한이 없는 경우, 트리 뷰 영역에 다음을 표시해야 한다 (MUST):

  • "탐색 가능한 디렉토리가 없습니다" 안내 메시지
  • 수동 입력 필드로의 안내 텍스트

allowed_directories가 미설정(제한 없음)인 경우에는 OS 루트부터 정상적으로 트리를 표시한다.

참조