For AI agents: fetch the complete documentation index at /llms.txt, the full documentation corpus at /llms-full.txt, the agent skill at /skill.md, or this page as Markdown at /ko/docs/desktop/internals.md (or send Accept: text/markdown).
데스크톱 셸 내부
부트 페이지, 탐색 게이트, 플러그인 스택, 구성 참조.
부트 페이지
창은 먼저 apps/desktop/ui의 번들 페이지를 로드합니다. 주입된 __SUPASTACK_APP_URL__을 읽고, 10초 타임아웃으로 백엔드를 탐색하고, 도달 가능하면 그쪽으로 전달합니다. 도달할 수 없는 백엔드는 Can't reach host 상태를 렌더링하고 Retry는 네트워크 복구 시에도 실행되므로 콜드 스타트에서 빈 창이 나타나지 않습니다. ?target= 쿼리 매개변수로 일반 브라우저에서 페이지를 시험할 수 있습니다.
네이티브 기능은 IPC가 아니라 플러그인입니다
셸은 커스텀 커맨드를 등록하지 않습니다 — 모든 네이티브 기능은 Tauri 플러그인을 통해 도착합니다. deep-link 기능이 포함된 single-instance(Windows와 Linux에서 두 번째 실행 인수를 라우팅), deep-link, window-state(geometry만 — 줌과 채널은 자체 사이드카를 유지), opener, dialog, process(업데이트 후 재시작), updater, autostart, global-shortcut, 그리고 tray-icon 기능입니다. 셸을 확장한다는 것은 webview UI를 포크하는 것이 아니라 플러그인과 권한을 추가하는 것입니다.
탐색 게이트
탐색은 번들 셸 페이지, 개발 서버 오리진, 정확히 구성된 앱 오리진 안에만 유지됩니다. 자격 증명 없는 HTTP(S), mailto:, tel: 링크는 opener 플러그인을 통해 시스템 브라우저로 나가고, 다른 모든 스킴은 취소됩니다. 창이 생기기 전에 도착한 딥 링크는 관리 상태에 버퍼링되었다가 창이 생기면 적용됩니다.
구성과 capability 참조
tauri.conf.json은 productName, version(릴리스 전에 올리세요 — 워크플로가 재정의할 수 있습니다), identifier(check:release-config는 com.supastack.desktop에서 바꿀 것을 요구), supastack 딥 링크 스킴, updater sentinel 블록, 번들 대상, placeholder 아이콘을 설정합니다. capabilities/default.json은 core:default와 opener:allow-open-url을 부여합니다 — 새 플러그인이 더 필요할 때만 넓히세요.
셸 테스트 방법
corepack pnpm --filter @supastack/desktop test는 부트 페이지를 문법 검사하고 URL 해석, 딥 링크, 줌, 채널 로직을 다루는 Rust 단위 스위트를 실행합니다. typecheck는 cargo check를 실행합니다. JavaScript 릴리스 스크립트는 저장소의 vitest 스위트가 커버하고, CI 파이프라인은 모든 변경에 대해 세 운영 체제에서 실제 설치 프로그램을 빌드합니다.
corepack pnpm --filter @supastack/desktop typecheck
corepack pnpm --filter @supastack/desktop test
corepack pnpm --filter @supastack/desktop check:release-config검증 및 문제 해결
src-tauri를 건드린 후 패키지 스위트를 실행하고, 각 대상 OS에서 네이티브 동작을 수동으로 확인하세요 — 단위 검사는 창이 아니라 규칙을 증명합니다. 새 셸 동작은 플러그인과 메뉴 항목 안에 두어 webview가 평범한 웹 앱으로 유지되게 하세요.