Some checks failed
CI Pipeline / Code Quality & Typecheck (push) Waiting to run
CI Pipeline / Test Suite (macos-latest) (push) Blocked by required conditions
CI Pipeline / Test Suite (ubuntu-latest) (push) Blocked by required conditions
CI Pipeline / Test Suite (windows-latest) (push) Blocked by required conditions
CI Pipeline / Build Validation (admin) (push) Blocked by required conditions
CI Pipeline / Build Validation (desktop) (push) Blocked by required conditions
Deploy Landing Page / deploy (push) Blocked by required conditions
Deploy Landing Page / build (push) Waiting to run
Release & Packaging Pipeline / Build & Publish Admin Docker Image (push) Failing after 8s
Release & Code Signing CA Pipeline / build-and-sign-windows (push) Failing after 1m51s
Build macOS / Build & Package (macOS) (push) Failing after 4s
Build macOS / Build & Package (macOS)-1 (push) Failing after 5s
Release & Code Signing CA Pipeline / build-and-sign-macos (push) Failing after 3s
Release & Packaging Pipeline / Package macOS Desktop App (push) Failing after 4s
Release & Packaging Pipeline / Package Windows Desktop App (push) Failing after 2m28s
Release & Packaging Pipeline / Publish Official GitHub Release (push) Has been skipped
2.6 KiB
2.6 KiB
Windows 데스크톱 앱 실행 및 Electron GUI 환경 지침
1. Windows 데스크톱 윈도우 스테이션 격리 (CRITICAL)
- 배경: AI 에이전트 CLI(Antigravity 등) 내부의 도구 실행(
run_command) 환경은 보안 격리 가상 데스크톱(WinSta0\exebox-...)에서 동작한다. - 현상: 에이전트 서브쉘에서 Electron GUI 앱을 실행하면 프로세스는 정상 구동되고 로그도 정상(
Main window shown)이지만, 사용자의 실제 모니터 화면(WinSta0\Default)에는 창이 물리적으로 보이지 않는다. - 규칙:
- 에이전트가 단독으로 GUI 창을 사용자 화면에 띄우려고 무리하게 백그라운드 구동을 반복하지 말 것.
- GUI 테스트/실행이 필요할 때는 사용자가 직접 외부 터미널 또는 파일 탐색기에서
run-desktop.bat또는pnpm --filter @d3ro/desktop dev를 실행하도록 안내한다.
2. Electron 단일 인스턴스 잠금 (Single Instance Lock) & 사일런트 종료 방지
- 앱 식별자 명시:
src/main/index.ts최상단에서app.requestSingleInstanceLock()호출 전에 반드시app.setName('d3ro-voice')와app.setAppUserModelId('kr.twentyoz.d3ro-voice')를 선언하여 일반 'Electron' 프로세스와의 식별자 충돌을 방지한다. - 사일런트 종료 방지: 개발 환경(
!app.isPackaged)에서 락 파일 잔여물로 인해 무조건 사일런트 종료(app.quit())되는 일이 없도록 보호 처리를 유지한다. - 실행 스크립트 선제 정리:
run-desktop.bat에는 잔여 프로세스 및 stalelockfile정리가 포함되어 있어야 한다.
3. 오디오 장치 탐색 동기 블로킹 금지
- Windows 마이크 디바이스 열거 시
execSync를 절대 사용하지 않는다. (Windows 환경에서 5초ETIMEDOUT메인 이벤트루프 프리징 유발) - 반드시
child_process.exec비동기 논블로킹 및 3초 타임아웃, 기본 마이크 폴백 구조를 유지한다.
4. GPU 하드웨어 가속 충돌 및 투명 창 방지
- NVIDIA 드라이버, Razer Chroma, Oculus 등의 훅 소프트웨어로 인해 창이 투명/블랭크 처리되는 문제를 방지하기 위해
app.disableHardwareAcceleration()및disable-gpu스위치를 유지한다.
5. 윈도우 화면 배치 및 작업표시줄 등록
screen.getPrimaryDisplay().workAreaSize를 기준으로(x, y)중앙 좌표를 명시 계산하여 다중 모니터 이탈을 방지한다.setSkipTaskbar(false)로 작업표시줄 노출을 보장하고,ready-to-show에서show(),restore(),focus(),flashFrame(true)를 순차 실행한다.