프로젝트 소개

이것은 DeepSeek Harness(dsh)를 안드로이드 휴대폰으로 옮긴 셸 애플리케이션입니다. 앱 이름은 DeepCode, 패키지 이름은 com.dsharnessmobile.shell, 현재 버전은 0.14.0-preview이며, 내장 엔진은 @deepseek-ai/dsh 0.1.5-rc.1입니다. 핵심 개념은 '압축 해제 즉시 실행'입니다. APK 내부에 xz 압축된 Termux 런타임 스냅샷이 포함되어 있으며, node, git, bash, coreutils, dsh, 플러그인, pnpm, python/perl/ruby가 들어 있습니다. 첫 실행 시 압축 해제에 2-4분이 걸리며, 이후 엔진은 127.0.0.1:3080에서 수신 대기하며 완전히 오프라인으로 실행됩니다. 사용자가 별도로 Termux 앱을 설치할 필요가 없습니다. 런타임 및 수명 주기 측면에서 매니페스트 기반 온라인 런타임 업데이트를 지원합니다. 다운로드, sha256 검증, 원자적 전환, 자동 재시작을 수행하며, 트리 교체는 단일 트랜잭션 작업으로 중단 시 롤백이 가능하고 사용자 데이터(세션, 첨부 파일, 설정, 자격 증명, 작업 공간)는 건드리지 않습니다. APK 자체 업데이트는 시작 화면에서 '업데이트 확인'을 수동으로 눌러야만 트리거되며 자동 확인은 하지 않습니다. GitHub 최신 릴리스를 확인하고 기기 ABI에 맞는 자산을 매칭합니다. 유지 메커니즘에는 전면 서비스, 5초 워치독(중단된 엔진 자동 재시작), 3초 UI 폴링, 충돌 시 폴백 게이트가 포함됩니다. 또한 엔진이 실행되지 않을 때도 문제를 진단할 수 있는 독립적인 bash 대화형 콘솔이 있습니다. AI 브라우저는 메인 인터페이스와 완전히 격리된 두 번째 WebView 작업 공간입니다. AI는 여러 탭을 열 수 있고 사람도 직접 볼 수 있습니다. 해상도는 CSS 뷰포트에 따라 주입되며, window.innerWidth는 요청된 값과 정확히 일치합니다. PC/휴대폰 신원 전환을 지원합니다. 가상 화면 기능은 Shizuku 권한 채널을 통해 독립 화면을 만들어 타사 앱을 실행하며, 사용자 전면을 차지하지 않고 단일 인스턴스 상한은 1개입니다. 화면 간 실행은 셸 측 Shizuku UserService의 am start --display 경로를 사용합니다. 가상 화면에서의 좌표 입력은 절대 x/y와 screenId를 사용하며, 실제 화면을 잘못 터치하는 것을 방지하기 위해 정규화된 좌표는 명시적으로 거부됩니다. 스크린샷은 대상 displayId에 저장되고 해당 화면 자체의 픽셀을 해상도 앵커로 사용합니다. 가상 화면은 10분 동안 유휴 상태이면 자동으로 회수됩니다. 휴대폰 제어는 접근성과 Shizuku 이중 채널을 제공합니다. 접근성 채널은 의미 트리와 ref 동작을 담당하고, Shizuku 채널은 uid 2000으로 screencap, uiautomator, dumpsys, input 등의 읽기 전용 및 입력 명령을 실행하며 시스템 구성 쓰기 영역은 모두 거부합니다. 첨부 파일 및 파일 관련, 종이클립 위로 올리기 메뉴에서 한 번 클릭하면 '첨부 파일 업로드/이미지 업로드'가 나타나며 각각 시스템 파일 선택기와 시스템 앨범을 사용합니다. '다른 앱으로 열기/공유'를 통해 파일을 세션에 직접 전달할 수 있으며, 자동으로 임시 작업 공간을 만들고 7일 TTL로 정리합니다. SAF 브리지는 선택한 디렉토리를 실제 경로로 매핑할 수 있습니다. 브리지 프로토콜 v1은 51개의 @JavascriptInterface 메서드를 노출하며, 페이지는 androidBridge.version을 기준으로 기능 감지를 수행하므로 APK와 dsh 버전이 분리됩니다. 모델이 볼 수 있는 도구는 모두 플러그인에서 제공되며 현재 45개입니다. 능력 그룹별로 점진적으로 공개되며, 먼저 android_capabilities를 호출하여 잠금을 해제해야 합니다. phone, browser, virtual-display 등의 그룹으로 나뉩니다. 권한에는 INTERNET, POST_NOTIFICATIONS, 전면 서비스, MANAGE_EXTERNAL_STORAGE, REQUEST_INSTALL_PACKAGES가 포함됩니다. 가상 화면과 특권 셸은 사용자가 직접 Shizuku를 설치하고 권한을 부여해야 합니다. 배포는 arm64와 x86_64 이중 ABI 패키지를 제공하며, ABI는 기기와 일치해야 합니다. 그렇지 않으면 엔진 시작 시 충돌합니다. 빌드에는 JDK 17+, Android SDK(compileSdk 36)가 필요하며, Gradle 8.11.1은 wrapper가 제공합니다. 스냅샷 빌드와 패키징은 조정 저장소에서 완료됩니다. README에는 내장 플러그인 마켓의 대부분 타사 플러그인이 휴대폰에서 사용 가능하지 않을 가능성이 높고 버그가 있을 가능성이 크다는 명확한 경고가 있습니다. 베타 단계에서는 사용성 검증과 피드백에 중점을 두며, 프로덕션 의존성으로는 권장되지 않습니다. 프로젝트는 MIT 라이선스를 사용하며 GPL 규정 준수 처리를 수행했습니다.