콘텐츠로 이동

대시보드 실행

게이트웨이 또는 데몬을 시작하고, 18개 라우트로 구성된 웹 대시보드를 열어 첫 번째 기기를 페어링합니다.

대시보드는 revka 바이너리에 내장된 React 웹 UI입니다. 게이트웨이가 REST API와 동일한 주소로 서비스하며, 기기 페어링을 통해 획득한 베어러 토큰을 사용해 해당 API를 통해서만 런타임과 통신합니다. 이 가이드는 게이트웨이를 실행하고, 브라우저를 페어링하며, 18개 라우트 내비게이션을 안내합니다. 대시보드를 처음 열거나 새 기기를 페어링할 때 활용하십시오.

설치부터 브라우저 페어링까지의 빠른 경로만 필요하다면 퀵스타트에서 몇 가지 명령으로 완료할 수 있습니다. 각 라우트의 기능을 페이지별로 살펴보려면 대시보드 개요를 참조하십시오.

대시보드를 실행하려면 호스트 프로세스가 필요합니다. 두 가지 옵션이 있습니다.

  • revka gateway — 대시보드, REST API, Server-Sent Events 스트림, WebSocket 엔드포인트만 시작합니다.
  • revka daemon — 게이트웨이와 함께 구성된 모든 채널, 하트비트, cron 스케줄러를 하나의 감시 프로세스로 실행하는 전체 런타임입니다.

로컬 대시보드 작업에는 revka gateway만으로 충분합니다. UI와 함께 채널 및 예약 작업을 실행하려면 revka daemon(또는 OS 서비스)을 사용하십시오.

Terminal window
revka gateway # foreground, dashboard + API only
revka gateway start --host 127.0.0.1 --port 42617
revka gateway restart # graceful restart

기본적으로 게이트웨이는 127.0.0.1에 바인딩됩니다. 리슨 포트는 설정 파일([gateway].port)에서 가져오며, 초기 빠른 설정 시 8080이 기록되고 내장 스키마 기본값은 42617입니다. 프로세스는 시작 시 URL을 출력합니다. 런타임 모드 및 서비스 등록은 revka gateway, daemon & service백그라운드 서비스로 실행에서 다룹니다.

브라우저를 열기 전에 게이트웨이가 정상 동작하는지 확인하십시오. 공개 헬스 엔드포인트는 인증 없이 사용 가능하며 비밀 정보를 노출하지 않습니다.

Terminal window
curl http://127.0.0.1:42617/health
# {"status":"ok","paired":true,"require_pairing":true,"runtime":{...}}

대시보드 빌드가 번들되어 있지 않으면 게이트웨이는 UI 라우트에 대해 대시보드 사용 불가 응답을 반환하지만, API, WebSocket, 페어링, 헬스, 웹훅 라우트는 계속 동작합니다. 내장 빌드 대신 파일시스템 빌드를 서비스하려면 REVKA_WEB_ROOT 또는 [gateway].web_root를 설정하십시오. 아래 대시보드 개발 섹션을 참조하십시오.

  1. 호스트 프로세스를 시작하고 출력된 URL을 확인합니다.

    Terminal window
    revka gateway
  2. 게이트웨이 주소에서 대시보드를 엽니다. 루트 경로가 React 앱을 서비스합니다.

    http://127.0.0.1:42617/
  3. 브라우저를 페어링합니다. Revka는 기본적으로 require_pairing = true로 동작하므로, 첫 번째 접속 시 일회용 코드를 베어러 토큰으로 교환하는 로그인 게이트가 표시됩니다. localhost 및 원격 플로우 모두 대시보드 페어링 및 인증을 참조하십시오.

  4. 대시보드 페이지에 착지합니다. 페어링 후 /dashboard로 이동합니다. 이곳은 라이브 실행 DAG, 위험/에이전트/명령 레일, 최근 실행 내역, 감사 체인 배지가 있는 운영자 개요 페이지입니다. 왼쪽 사이드바에서 다른 모든 화면에 접근할 수 있습니다.

대시보드는 REST API를 통해 게이트웨이와 통신하며, 모든 /api/* 요청에는 Authorization: Bearer <token>이 포함됩니다. 이 토큰은 일회용 6자리 페어링 코드에서 생성됩니다. 페어링은 네트워크상의 알 수 없는 브라우저가 에이전트를 조작하는 것을 방지합니다.

코드를 획득하는 방법은 브라우저의 위치에 따라 다릅니다.

  • Localhost — 로그인 화면이 GET /pair/code에서 현재 코드를 자동으로 가져와 큰 고정폭 배지로 표시합니다. 이를 복사해 입력란에 붙여넣으면 됩니다.
  • 원격 — 코드는 원격 브라우저에 표시되지 않습니다. 터미널(또는 CLI)에서 6자리 코드를 확인해 직접 입력하십시오.

CLI에서 언제든지 코드를 확인하거나 갱신할 수 있습니다.

Terminal window
revka gateway get-paircode # show the current code
revka gateway get-paircode --new # rotate to a fresh code

코드를 제출하면 대시보드가 페어링 엔드포인트를 호출하고 반환된 토큰을 localStorage에 저장합니다.

POST /pair
X-Pairing-Code: 123456
{
"paired": true,
"persisted": true,
"token": "<bearer-token>",
"message": "Save this token — use it as Authorization: Bearer <token>"
}

대시보드 UI는 더 풍부한 JSON 페어링 경로를 사용하며, 기기 레지스트리에 기기 메타데이터를 기록해 해당 기기가 페어링 페이지에 표시됩니다.

POST /api/pair
Content-Type: application/json
{ "code": "123456", "device_name": "My laptop", "device_type": "desktop", "hardware": "macOS" }

기기가 하나 페어링된 후에는 데몬을 재시작하지 않고도 페어링 페이지(/pairing)에서 새 기기용 코드를 생성할 수 있습니다. POST /api/pairing/initiate를 호출해 QR 코드와 복사 가능한 코드를 렌더링합니다. 새 기기에서 QR을 스캔하거나 코드를 입력하면 되며, 기기는 나중에 언제든지 취소할 수 있습니다.

작업Method + path인증
페어링된 기기 목록 조회GET /api/devicesBearer
새 코드 생성POST /api/pairing/initiateBearer
기기 취소DELETE /api/devices/{id}Bearer
기기 토큰 갱신POST /api/devices/{id}/token/rotateBearer
현재 코드 조회 (시작 시)GET /pair/code없음

QR 페이로드는 모바일 클라이언트가 직접 파싱할 수 있는 JSON 문자열입니다.

{ "v": 1, "type": "revka-pair", "host": "<origin><basePath>", "code": "123456" }

페어링은 속도 제한과 무차별 대입 잠금으로 보호됩니다. 전체 인증 모델은 페어링 & 인증비밀, 페어링 & 기기 인증을 참조하십시오.

대시보드는 세 개의 레이블된 섹션으로 구성된 왼쪽 고정 레일로 정리되어 있습니다. 항목을 클릭하면 해당 페이지로 이동하고, 접기 화살표를 클릭하면 아이콘 전용 모드로 전환됩니다. 접힘/펼침 상태는 revka-sidebar-collapsed 키로 localStorage에 유지됩니다.

세 섹션과 해당 라우트는 다음과 같습니다.

  • Orchestration — Dashboard /dashboard, Workflows /workflows, Agents /agents, Canvas /canvas, Teams /teams
  • Operations — Assets /assets, Skills /skills, Tools /tools, Integrations /integrations, Cron /cron, Pairing /pairing, Config /config, Cost /cost, Skins /skins
  • Inspection — Memory /memory, Logs /logs, Audit /audit, Doctor /doctor

헤더에는 테마/스킨 전환 버튼, 언어 전환기, 운영자 채팅 어시스턴트를 여는 버튼도 있습니다. 운영자 채팅 어시스턴트는 모든 페이지에서 접근 가능한 채팅, 터미널, 코드 탭이 있는 플로팅 패널입니다.

18개의 탐색 가능한 라우트가 있습니다. 각 항목은 상세 레퍼런스 페이지로 연결됩니다.

라우트페이지기능
/dashboard대시보드 개요라이브 실행 DAG, 위험/에이전트/명령 레일, 최근 실행, 감사 체인 배지
/workflows워크플로우 & 에디터워크플로우 정의 탐색, 생성, 편집, 실행, 폐기, 삭제; AI 지원 Architect 에디터
/agents에이전트에이전트 정의 CRUD (ID, 소울, 전문성, 에이전트 유형, 아바타)
/canvas캔버스에이전트가 WebSocket을 통해 HTML/텍스트 프레임을 푸시하는 라이브 시각적 작업 공간
/teams관계 엣지로 에이전트를 위임 토폴로지로 그룹화
/assets에셋Kumiho 에셋 매니저: 프로젝트, 스페이스, 아이템, 리비전, 아티팩트, 번들, 엣지
/skills스킬스킬 레지스트리와 ClawHub 마켓플레이스 및 GitHub 인스톨러
/tools도구에이전트(MCP) 도구 및 발견된 CLI 바이너리의 읽기 전용 레퍼런스
/integrations통합상태 배지가 있는 채널/커넥터의 읽기 전용 카탈로그
/cronCron예약된 에이전트 및 셸 작업 관리; 작업별 실행 기록
/pairing페어링코드 생성, QR 표시, 갱신, 페어링된 기기 취소
/config설정구조화된 양식 또는 원시 소스 에디터로 config.toml 조회/편집; MCP 서버 CRUD
/cost비용세션, 일별, 월별 지출 및 모델별 세부 내역
/skins스킨UI 스킨 패키지 탐색, 활성화, 업로드, 삭제
/memory메모리Kumiho 메모리의 force-directed 그래프; 종류/스페이스별 필터링, 노드 검사
/logs로그일시 정지 및 유형 필터링이 가능한 데몬의 라이브 SSE 이벤트 스트림
/audit감사원클릭 체인 검증이 가능한 변조 방지 감사 로그 뷰어
/doctor닥터OK/WARN/ERROR 결과를 서브시스템별로 그룹화한 온디맨드 진단

대시보드 개요에서 각 화면을 심층적으로 살펴보고, 워크플로우, 에디터 & 실행, 에이전트, 팀 & 캔버스, 에셋 & 메모리 탐색기, 로그, 감사, 닥터, 페어링 & 스킨에서 워크플로우, 에이전트, 에셋, 검사 페이지로 바로 이동하십시오.

대시보드는 저장소의 web/ 디렉터리에 있는 React + TypeScript + Tailwind + Vite 앱입니다. 게이트웨이와 프론트엔드는 독립적으로 개발됩니다. 일반 cargo build는 Rust 전용으로 npm을 실행하지 않습니다. UI 자체를 편집하는 경우에만 이 섹션이 필요합니다.

  1. 게이트웨이를 실행합니다 (터미널 하나).

    Terminal window
    cargo run -- gateway start
  2. Vite 개발 서버를 실행합니다 (두 번째 터미널).

    Terminal window
    cd web
    npm ci
    npm run dev
  3. Vite 개발 UI를 엽니다 (http://127.0.0.1:5173). Vite는 기본적으로 /api, /ws, /pair, /health, /admin 경로를 http://127.0.0.1:42617로 프록시합니다. 게이트웨이가 다른 위치에서 실행 중이라면 npm run dev 실행 전에 REVKA_GATEWAY_URL=http://host:port를 설정하십시오.

바이너리에 임베딩하지 않고 Rust 게이트웨이가 로컬 빌드를 서비스하도록 하려면 파일시스템 웹 루트를 지정하십시오.

Terminal window
cd web
npm ci
npm run build
cd ..
$env:REVKA_WEB_ROOT = "$PWD/web/dist"
cargo run -- gateway start

동등한 설정 키는 다음과 같습니다.

[gateway]
web_root = "/absolute/path/to/revka/web/dist"

대시보드 에셋은 다음 순서로 결정됩니다. REVKA_WEB_ROOT(설정되어 있고 비어 있지 않은 경우) → [gateway].web_root → 내장된 web/dist 빌드 → 대시보드 사용 불가 응답. 파일시스템 서비스는 설정된 루트를 정규화하고 경로 탐색을 거부합니다. assets/ 하위의 해시된 에셋은 불변 캐시 헤더를 받고, index.htmlno-cache로 제공됩니다.

공식 릴리스 빌드의 경우, 릴리스 바이너리를 컴파일하기 전에 프론트엔드를 빌드해 임베딩되도록 하십시오.

Terminal window
cd web
npm ci
npm run build
cd ..
cargo build --release --locked

build.rs는 더 이상 기본적으로 프론트엔드를 빌드하지 않습니다. 이전 cargo 트리거 플로우를 복원하려면 cargo build 전에 REVKA_BUILD_WEB=1을 설정하십시오.

  • 대시보드에 “dashboard unavailable” 페이지가 표시됩니다. 웹 빌드가 번들되어 있지 않거나 찾을 수 없습니다. REVKA_WEB_ROOT/[gateway].web_root를 확인하거나 web/dist를 빌드하십시오. API, 페어링, 헬스 라우트는 그 동안에도 계속 동작합니다.
  • 페어링 입력란이 코드를 거부합니다. revka gateway get-paircode --new로 코드를 갱신하고 다시 시도하십시오. 코드는 일회용이며 페어링 후 소비됩니다.
  • 정상 동작하던 모든 요청이 401을 반환합니다. 토큰이 무효화되었습니다(기기 취소 또는 토큰 갱신). 브라우저를 재페어링하십시오.
  • 다른 머신에서 게이트웨이에 접근할 수 없습니다. 기본 바인딩은 루프백 전용입니다. allow_public_bind = true를 설정하거나 터널로 앞단을 구성하십시오.

구조화된 진단을 위해 대시보드 내 닥터 페이지를 실행하거나 CLI에서 revka doctor를 실행하십시오.