라우트 맵
앱 셸
섹션 제목: “앱 셸”앱 셸(ControlCenterLayout)은 ShellRoute를 통해 워크스페이스 안의 모든 라우트를 감쌉니다. 셸 안에 있는 모든 목적지는 /workspaces/:workspaceId/… 형태로 워크스페이스 접두사가 붙으며, URL의 워크스페이스 id가 활성 워크스페이스에 대한 단일 진실 공급원입니다. 접두사가 없는 것은 컨텍스트 이전 표면뿐입니다. /splash, /onboarding, /signed-out 그리고 접두사 없는 /workspaces 선택기이며, 모두 셸 밖의 전체 화면입니다.
게이트는 로그인한 사용자에게 forge가 하나 이상 연결되어 있고 워크스페이스가 하나 이상 존재할 때 완료됩니다.
자격 증명이 없는 경우와 설정이 없는 경우는 서로 다른 화면이며, 이를 가르는 기준은 호출자 자신의 identity.me에서 읽은 users.onboarding_finished_at입니다 — “워크스페이스가 존재함”은 아닙니다. 누군가 자신이 만들지 않은 워크스페이스에 초대되는 순간 그것은 틀린 판단이 되기 때문입니다. forge가 연결되어 있지 않으면, 온보딩을 마친 계정은 다시 인증하러 /signed-out으로 가고 마치지 않은 계정은 /onboarding으로 갑니다. 플래그를 아직 알 수 없는 동안에는 가드가 추측하는 대신 스플래시를 붙잡고 있는데, 온보딩 밖으로 다시 리디렉션하는 일은 결코 없기 때문입니다.
접두사 없는 라우트
섹션 제목: “접두사 없는 라우트”| 경로 | 화면 |
|---|---|
/splash |
온보딩 게이트를 판정하는 시작 스플래시 |
/onboarding |
forge 연결, 워크스페이스 생성 또는 참여, 샌드박스, 기본 어댑터, 마지막으로 음성. 계정이 이미 워크스페이스에 속해 있으면 워크스페이스 단계는 생략됩니다 |
/signed-out |
다시 인증합니다. 설정이 렌더링하는 것과 같은 코드 호스팅 카드가 표시되며, 단계 표시줄도 계속 버튼도 없습니다 — forge가 응답하면 라우터가 스스로 빠져나갑니다 |
/workspaces |
워크스페이스 목록 및 선택기 |
/workspaces/:workspaceId |
/workspaces/:workspaceId/inbox로 리디렉션합니다 |
워크스페이스 라우트
섹션 제목: “워크스페이스 라우트”아래 경로는 /workspaces/:workspaceId 접두사를 생략합니다.
| 경로 | 쿼리 매개변수 | 화면 |
|---|---|---|
/inbox |
— | 통합 받은편지함: 리뷰 수명주기로 분류된 PR과 운영자를 막고 있는 비 PR 작업을 함께 보여 줍니다. 가드 이후의 진입 라우트이며, 접두사만 있는 /workspaces/:workspaceId는 여기로 리디렉션합니다 |
/spaces |
— | 스페이스 표면, 선택된 스페이스 없음 |
/spaces/:spaceId |
?m=<messageId>, ?tab=<key> |
스페이스 하나. m은 메시지로 딥 링크하며, 열 때 한 번 소비됩니다 |
/tickets |
— | 티켓 보드 |
/tickets/:ticketId |
— | 티켓 마스터-디테일 |
/projects/:projectId |
— | 프로젝트 개요 |
/pull-requests |
?repo=<owner/name> |
PR 목록. repo는 왼쪽 레일에서 해당 리포지토리를 선택합니다 |
/pull-requests/compose |
?space=<spaceId> |
새 풀 리퀘스트 작성. space는 격리된 워크트리가 브랜치를 제공하는 스페이스를 지정합니다 |
/pull-requests/:owner/:repo/:prNumber |
?tab=<key>, ?comment=<id> |
diff 뷰어가 있는 PR 상세. comment는 댓글 하나의 숫자 REST id입니다 |
/pipelines |
— | 파이프라인 실행 목록 |
/pipelines/run |
?templateId=<id> |
수동 실행 런처 |
/pipelines/:runId |
— | 파이프라인 실행 상세(단계 타임라인) |
/plans |
— | Plan Studio 허브: 활성 플랜, 플랜 문서, 플레이북 |
/plans/:kind/:id |
— | 플랜 하나를 위한 Plan Studio. kind는 orchestration 또는 document입니다 |
/meetings |
— | 회의 목록 |
/meetings/record |
— | 실시간 회의 녹음 화면 |
/meetings/:meetingId |
— | 회의 상세: 노트, 트랜스크립트, 액션 아이템, 결정 사항 |
/calendar |
— | 캘린더: 월, 주, 일정 보기 |
/calendar/:eventId |
— | 캘린더 이벤트 상세(형제 라우트이며 캘린더 페이지 키를 공유합니다) |
/newsfeed |
— | 뉴스피드 목록 |
/newsfeed/article/:articleId |
— | 기사 리더 |
/observability |
— | 옵저버빌리티 허브: 워크스페이스 실행 로그 피드 위에 사용량, 인사이트, 실시간, 품질 탭이 있습니다. 기본값은 사용량 탭입니다 |
/users/:login |
— | GitHub 사용자 프로필 |
/teams/:organization/:slug |
— | GitHub 조직 팀 프로필 |
/api-keys |
— | API 키 관리. 탐색 진입점이 없습니다 — URL로만 접근할 수 있습니다 |
/settings/… |
— | 설정 화면(아래) |
대화와 스레드는 자체 라우트가 없습니다 — 스레드는 /spaces/:spaceId 안의 대화이며, URL로 주소를 지정하는 대신 편집기 탭으로 열립니다.
/dashboard 라우트는 없으며 대시보드 화면도 없습니다. 분석 표면은 /observability이며, 사이드바 하단에서 들어갑니다.
사이드바에 “플랜” 항목은 없습니다. Plan Studio는 플랜을 만들어 낸 대화에서 그 플랜의 행으로부터 편집기 탭으로 열립니다. /plans와 /plans/:kind/:id는 딥 링크입니다.
/observability와 /pull-requests/compose는 라우트 제목 또는 브레드크럼 레지스트리에 항목이 없으므로, 둘 다 창 제목에 앱 이름만 표시하고 브레드크럼 경로도 표시하지 않습니다.
설정 라우트
섹션 제목: “설정 라우트”/settings는 /settings/you/appearance로 리디렉션합니다. 사이드바의 설정 버튼과 Cmd/Ctrl + ,는 둘 다 /settings/you/appearance로 이동합니다.
설정 경로는 범위별로 네임스페이스가 나뉘며 — you/, workspace/, server/ — 이 세그먼트가 변경이 누구에게 영향을 주는지 나타냅니다. 두 경로는 네임스페이스 도입 이전의 것으로 URL에 범위가 붙지 않습니다: /settings/memory와 /settings/pipelines.
| 경로 | 화면 |
|---|---|
/settings/you/appearance |
테마, 언어, 타이포그래피, 편집기 테마(설정의 기본 화면) |
/settings/you/notifications |
이벤트별 토글, 방해 금지 시간 |
/settings/you/keybindings |
키보드 단축키 레퍼런스(읽기 전용) |
/settings/you/audio |
마이크, 받아쓰기, 회의 감지, 사운드스케이프 출력 |
/settings/you/devices |
페어링된 휴대폰과 원격 제어 |
/settings/you/newsfeed |
피드 관리: 소스, 새로고침, 읽음 상태 |
워크스페이스
섹션 제목: “워크스페이스”| 경로 | 화면 |
|---|---|
/settings/workspace/profile |
이 워크스페이스의 프로필과 신원: 이름, git 작성자, 코드 호스팅, 캘린더 |
/settings/workspace/general |
이름, 로고, 시크릿 글롭, 리뷰 동시성, 브랜치 이름 지정, 동기화 상태, 채팅 브리지, 위험 영역 |
/settings/workspace/meetings |
회의 노트 템플릿과 저장된 음성 프로필 |
/settings/workspace/members |
멤버 명단, 초대, 감사 기록. 감사 기록은 선택적 ?cursor=로 페이지를 나눕니다 |
/settings/workspace/repositories |
이 워크스페이스에 등록된 리포지토리 |
/settings/workspace/agents |
등록된 에이전트 아이덴티티 |
/settings/workspace/skills |
스킬 구성 |
/settings/memory |
워크스페이스 메모리: 팩트, 정책, 지식 그래프 |
/settings/workspace/permissions |
에이전트 권한: 가드레일 매트릭스와 가정 시나리오 프로브 |
/settings/pipelines |
파이프라인 템플릿 |
/settings/pipelines/:templateId |
파이프라인 템플릿 편집기(드래그 앤 드롭 캔버스) |
| 경로 | 화면 |
|---|---|
/settings/server/connection |
연결 및 상태 |
/settings/server/sso |
싱글 사인온(SAML, OIDC, SCIM 프로비저닝) |
/settings/server/providers |
모델 제공업체와 어댑터 |
/settings/server/mcp |
내장 및 외부 MCP 서버 |
/settings/server/voice |
음성 및 회의 모델(ASR, 화자 분리) |
/settings/server/rigs |
리그: 이 호스트가 부팅할 수 있는 것, 베이스 이미지, 사용자 지정 이미지, 실행 중인 머신 |
/settings/server/sandbox |
샌드박스 실행 권한: 에이전트가 여러분의 리포지토리 작업 복사본에서 실행할 수 있는 프로그램 |
/settings/server/diagnostics |
진단 및 개인정보 보호: 샌드박싱, 임베딩, 로깅, 충돌 보고 |
/settings/server/backup |
백업 및 복원: 설치 스냅샷, 워크스페이스별 내보내기, 가져오기 및 삭제 |
/settings/server/about |
정보 및 업데이트 |
lib/features/settings/settings_nav.dart의 kSettingsNav가 이 목록의 단일 진실 공급원입니다. settings_nav_test.dart는 고유 id, 고유 라우트, 평탄화된 J/K 순서, 그리고 세 범위를 고정합니다. 등록된 모든 GoRoute를 순회하지는 않습니다.
라우트 구성
섹션 제목: “라우트 구성”| 항목 | 파일 |
|---|---|
| 라우터 | lib/router/app_router.dart |
| 라우트 빌더 | lib/router/routes.dart |
| 인증 가드 | lib/router/guards.dart |
| 온보딩 게이트 | lib/features/auth/providers/onboarding_providers.dart |
| 설정 탐색 | lib/features/settings/settings_nav.dart |