--- ui_doc_type: component component_id: edge-selector status: 구현됨 source_evidence: - type: code path: apps/client/lib/widgets/nodes_panel.dart notes: NodesPanel renders an Active Edge dropdown and refresh action. - type: code path: apps/client/lib/widgets/runtime_panel.dart notes: RuntimePanel renders an Active Edge dropdown and refresh action. - type: code path: apps/client/lib/widgets/execution_logs_panel.dart notes: ExecutionLogsPanel renders a Filter Edge dropdown and refresh action. - type: user path: null notes: Initial scaffold requested by user. --- # Edge Selector Component ID: `edge-selector` Status: `구현됨` ## Source Evidence | Type | Path | Notes | |------|------|-------| | code | `apps/client/lib/widgets/nodes_panel.dart` | active Edge dropdown과 refresh icon을 포함한다. | | code | `apps/client/lib/widgets/runtime_panel.dart` | responsive header 안에서 active Edge dropdown과 refresh icon을 포함한다. | | code | `apps/client/lib/widgets/execution_logs_panel.dart` | filter Edge dropdown과 refresh icon을 포함한다. | | user | 없음 | 초기 agent-ui 생성을 요청했다. | ## Purpose Edge-scoped view에서 대상 Edge를 선택하고 현재 view 데이터를 갱신한다. ## Used By - `nodes`: `nodes.edge-selector` - `runtime`: `runtime.edge-selector` - `execution-logs`: `execution-logs.edge-selector` ## Anatomy - label - dropdown - refresh icon button ## Variants - active-edge: Nodes/Runtime에서 사용 - filter-edge: Execution Logs에서 사용 ## States - default - loading: view별 refresh 상태로 표시 - empty: Edge 목록이 없으면 selector를 숨기거나 안내 메시지를 표시 - error: view별 error 영역에서 처리 - disabled: 없음 ## Rules - dropdown item label은 edge name이 있으면 name, 없으면 edge id를 사용한다. - 선택 값이 목록에 없으면 첫 Edge로 fallback한다. ## Decision History - 2026-06-25: 세 개 panel에 반복되는 Edge dropdown pattern을 component로 정의했다.