diff --git a/README.md b/README.md index 2a281480..4f8f90dd 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@

- English | 繁體中文 + English | Traditional Chinese

@@ -17,9 +17,9 @@

- OSS Release Gate - CI - Node Version + OSS Release Gate + CI + Node Version Go Version Desktop Platform Mobile Platform @@ -29,9 +29,10 @@

Product PreviewKey Features • - Developer Quick StartOSS Boundaries • - Contributing + Developer Quick Start • + Contributing • + Community & Social

--- @@ -43,13 +44,13 @@ contributions. This repository provides one public local source-build and package-verification path; it does not publish official signed installers, mobile store builds, auto-updates, or hosted services. -| Surface | Current OSS scope | -| ------------ | -------------------------------------------------------------- | -| Desktop | macOS and Windows application runtime | -| Mobile | iOS and Android application runtime | -| Linux | Local source-build and package verification only | -| Network | Foreground sync over the same LAN | -| Distribution | Community source builds and locally produced packages/binaries | +| Surface | Current OSS scope | +| --------------- | -------------------------------------------------------------- | +| 💻 Desktop | macOS and Windows application runtime | +| 📱 Mobile | iOS and Android application runtime | +| 🐧 Linux | Local source-build and package verification only | +| 🌐 Network | Foreground sync over the same LAN | +| 📦 Distribution | Community source builds and locally produced packages/binaries | ## 📸 Product Preview @@ -79,24 +80,17 @@ mobile store builds, auto-updates, or hosted services. > **Local-LAN Open-Source Core** > > - Foreground automatic sync works without sign-in or an account service. -> - The upload set comes only from the mobile photo-library scan and local -> pending queue; there is no manual file-selection fallback. +> - The upload set comes only from the mobile photo-library scan and local pending queue; there is no manual file-selection fallback. > - The queue is read-only, and each phone uploads one file at a time. -> - Missing non-OSS modules or account-service state do not block foreground LAN -> pairing and sync. +> - Missing non-OSS modules or account-service state do not block foreground LAN pairing and sync. > [!WARNING] > **Not Included In This Repository** > -> - Remote access, cloud relay, tunnel credentials, official accounts, and silent -> background continuation are unavailable and remain disabled. -> - Official signing, notarization, mobile store distribution, package upload, -> and auto-update infrastructure are not provided. -> - The source package does not redistribute Apple Bonjour for Windows. It uses -> a locally installed/configured Bonjour runtime when available, otherwise the -> zeroconf-compatible fallback. -> - Linux remains a local build and package-verification target, not a supported -> desktop user surface. +> - Remote access, cloud relay, tunnel credentials, official accounts, and silent background continuation are unavailable and remain disabled. +> - Official signing, notarization, mobile store distribution, package upload, and auto-update infrastructure are not provided. +> - The source package does not redistribute Apple Bonjour for Windows. It uses a locally installed/configured Bonjour runtime when available, otherwise the zeroconf-compatible fallback. +> - Linux remains a local build and package-verification target, not a supported desktop user surface. ## 🚀 Developer Quick Start @@ -104,6 +98,9 @@ This is a contributor workflow, not an end-user installer. See the [release playbook](./docs/release/release-playbook.md) for local package builds and platform-specific verification. +
+💻 Setup & Start Commands + ```bash # 1. Enable the repository's pinned pnpm version and install dependencies corepack enable @@ -117,10 +114,15 @@ pnpm --filter @lynavo-drive/design-tokens build pnpm dev:desktop ``` +
+ The Electron window opens automatically, and the desktop app starts the sidecar. To run a mobile client, keep the desktop running and use another terminal: +
+📱 Mobile Development Commands + ```bash # Start Metro pnpm dev:mobile @@ -131,6 +133,8 @@ pnpm --filter @lynavo-drive/mobile ios pnpm dev:mobile:android ``` +
+ Platform prerequisites still apply: iOS requires macOS, Xcode, and CocoaPods; Android requires Android Studio plus the Android SDK/NDK. @@ -147,23 +151,23 @@ Pair the applications:
🔍 View Troubleshooting Guide & Common FAQs -### 1. The mobile app cannot find my desktop client (mDNS discovery failure) +### 📡 1. The mobile app cannot find my desktop client (mDNS discovery failure) - **Check Network**: Ensure both mobile and desktop are on the same local LAN. - **Windows Firewall**: Verify that Windows Defender Firewall allows incoming traffic for ports `39593` (TCP/LMUP file transport) and `39594` (HTTP API). - **Bonjour Runtime**: The OSS build doesn't redistribute Apple Bonjour. Ensure Bonjour is installed on Windows, or rely on the zeroconf-compatible fallback. -### 2. Why are some of my iCloud photos stuck/not transferring? +### ☁️ 2. Why are some of my iCloud photos stuck/not transferring? - Photos marked with `iCloud` must be exported from the Apple Photos cloud repository before transfer. - While in `cloud_downloading` or `preparing` states, the phone is downloading the high-res original asset to local storage. Transfer begins automatically once complete. -### 3. Can I manually select which photos/videos to sync? +### 📸 3. Can I manually select which photos/videos to sync? - No. Automatic upload is driven by the mobile photo-library scan and strictly read-only pending queue. Checkbox picking is not part of the OSS workflow. -### 4. What happens when the desktop sleeps or connection drops? +### 💤 4. What happens when the desktop sleeps or connection drops? - LAN transfers will interrupt. With the mobile app in the foreground, the unfinished queue continues after the desktop wakes and LAN connectivity is @@ -173,40 +177,64 @@ Pair the applications:
-## 🛠️ Tech Stack - -| Layer | Technology | -| -------------- | ---------------------------------------------------------- | -| Monorepo | pnpm 10 + turborepo 2.8 | -| Desktop | Electron 41 + electron-vite 5 + electron-builder 26 | -| Desktop UI | React 18.3 + zustand 5 + Tailwind CSS v4 | -| Mobile | React Native 0.84.1 + React 19 (iOS / Android) | -| iOS Native | Swift `SyncEngine` + BGTask + PhotoKit + Network.framework | -| Android Native | Kotlin bridge + NativeSyncEngine / MediaStore / NsdManager | -| Sidecar | Go 1.25.6 + SQLite + WebSocket | -| Shared | `@lynavo-drive/contracts` + `@lynavo-drive/design-tokens` | -| Test | vitest 4.1 + jest + `go test` | - ## 🏗️ Architecture Overview -```text -Mobile (RN UI on iOS / Android) - ├── iOS: Swift SyncEngine - └── Android: Kotlin NativeSyncEngine - ├── Bonjour/mDNS discover - ├── LMUP/TCP :39593 - └── Presence/HTTP :39594 - │ - ▼ -Desktop (Electron + Go sidecar, macOS / Windows) - ├── Electron: UI shell, window, bridge, sidecar lifecycle - ├── Sidecar HTTP API / WebSocket - ├── LMUP file receiver - ├── SQLite - └── Filesystem / shared directory detection +```mermaid +flowchart TD + subgraph Mobile["📱 Mobile Client (iOS / Android)"] + RN["React Native UI"] + subgraph SE["Native Sync Engine"] + iOS["iOS (Swift)"] + Android["Android (Kotlin)"] + end + end + + subgraph Desktop["💻 Desktop App (macOS / Windows)"] + Electron["Electron Shell (React 18 UI)"] + Preload["Preload Bridge"] + subgraph Sidecar["Go Sidecar"] + HTTP["HTTP API & WebSockets (Port 39594)"] + LMUP["LMUP Receiver (Port 39593)"] + DB[("SQLite DB")] + FS["Filesystem Shared Dirs"] + end + end + + %% Communication Links + RN <--> Preload + Preload <--> Electron + Electron <--> HTTP + + %% Network Sync Channels + SE -- "mDNS Discovery / Pairing" --> HTTP + SE -- "Presence & Metadata (HTTP/WS)" --> HTTP + SE -- "Incremental Media Sync (LMUP/TCP)" --> LMUP + + classDef mobile fill:#fff0f5,stroke:#db7093,stroke-width:1px; + classDef desktop fill:#f0f8ff,stroke:#4682b4,stroke-width:1px; + classDef sidecar fill:#f5fffa,stroke:#2e8b57,stroke-width:1px; + class Mobile,RN,SE,iOS,Android mobile; + class Desktop,Electron,Preload desktop; + class Sidecar,HTTP,LMUP,DB,FS sidecar; ``` -## ⚙️ Prerequisites +## 🔧 Technical Infrastructure + +### 🛠️ Tech Stack + +| Layer | Technology | +| ----------------- | ---------------------------------------------------------- | +| 📦 Monorepo | pnpm 10 + turborepo 2.8 | +| 💻 Desktop | Electron 41 + electron-vite 5 + electron-builder 26 | +| 🎨 Desktop UI | React 18.3 + zustand 5 + Tailwind CSS v4 | +| 📱 Mobile | React Native 0.84.1 + React 19 (iOS / Android) | +| 🍎 iOS Native | Swift `SyncEngine` + BGTask + PhotoKit + Network.framework | +| 🤖 Android Native | Kotlin bridge + NativeSyncEngine / MediaStore / NsdManager | +| ⚡ Sidecar | Go 1.25.6 + SQLite + WebSocket | +| 🔗 Shared | `@lynavo-drive/contracts` + `@lynavo-drive/design-tokens` | +| 🧪 Test | vitest 4.1 + jest + `go test` | + +### ⚙️ Prerequisites - **macOS or Windows** (desktop currently supports macOS / Windows; Linux is only for local build / package verification; iOS builds still require macOS + @@ -223,7 +251,7 @@ Desktop (Electron + Go sidecar, macOS / Windows) -## 💻 Common Commands +### 💻 Common Commands
🛠️ View Developer Command Reference @@ -256,7 +284,7 @@ pnpm check
-## 📦 OSS Build & Package Verification +### 📦 OSS Build & Package Verification This OSS repository keeps contributor-local source-build paths and GitHub-hosted, secret-free unsigned build/package verification. Hosted outputs @@ -305,7 +333,7 @@ OSS build-verification outputs and include SHA-256 checksums; see the [release playbook](./docs/release/release-playbook.md) for the exact asset list, warnings, and maintainer procedure. -## 📁 Project Structure +### 📁 Project Structure
📂 View Directory Structure Map @@ -351,21 +379,21 @@ lynavo-drive/ ## 📄 Documentation Reference -- Development constraints and operating rules: [`AGENTS.md`](./AGENTS.md) -- System overview: [`docs/architecture/system-overview.md`](./docs/architecture/system-overview.md) -- Sync state machine: [`docs/architecture/sync-state-machine.md`](./docs/architecture/sync-state-machine.md) -- Data model and statistics semantics: [`docs/architecture/data-model.md`](./docs/architecture/data-model.md) -- Troubleshooting guide: [`docs/operations/troubleshooting.md`](./docs/operations/troubleshooting.md) -- Mobile diagnostics package: [`docs/operations/mobile-diagnostics.md`](./docs/operations/mobile-diagnostics.md) -- Sidecar runbook: [`docs/operations/sidecar-runbook.md`](./docs/operations/sidecar-runbook.md) -- Product constraints, OSS boundaries, and non-goals: [`docs/product/constraints.md`](./docs/product/constraints.md) -- OSS build verification playbook: [`docs/release/release-playbook.md`](./docs/release/release-playbook.md) -- OSS verification matrix: [`docs/testing/oss-verification-matrix.md`](./docs/testing/oss-verification-matrix.md) -- Security policy: [`SECURITY.md`](./SECURITY.md) -- Privacy notice: [`PRIVACY.md`](./PRIVACY.md) -- Contributing guide: [`CONTRIBUTING.md`](./CONTRIBUTING.md) -- Code of conduct: [`CODE_OF_CONDUCT.md`](./CODE_OF_CONDUCT.md) -- Third-party notices: [`THIRD_PARTY_NOTICES.md`](./THIRD_PARTY_NOTICES.md) +- ⚙️ Development constraints and operating rules: [`AGENTS.md`](./AGENTS.md) +- 📘 System overview: [`docs/architecture/system-overview.md`](./docs/architecture/system-overview.md) +- 🔄 Sync state machine: [`docs/architecture/sync-state-machine.md`](./docs/architecture/sync-state-machine.md) +- 📊 Data model and statistics semantics: [`docs/architecture/data-model.md`](./docs/architecture/data-model.md) +- 🔧 Troubleshooting guide: [`docs/operations/troubleshooting.md`](./docs/operations/troubleshooting.md) +- 📱 Mobile diagnostics package: [`docs/operations/mobile-diagnostics.md`](./docs/operations/mobile-diagnostics.md) +- ⚡ Sidecar runbook: [`docs/operations/sidecar-runbook.md`](./docs/operations/sidecar-runbook.md) +- 🛡️ Product constraints, OSS boundaries, and non-goals: [`docs/product/constraints.md`](./docs/product/constraints.md) +- 📦 OSS build verification playbook: [`docs/release/release-playbook.md`](./docs/release/release-playbook.md) +- 🔬 OSS verification matrix: [`docs/testing/oss-verification-matrix.md`](./docs/testing/oss-verification-matrix.md) +- 🔒 Security policy: [`SECURITY.md`](./SECURITY.md) +- 🕵️ Privacy notice: [`PRIVACY.md`](./PRIVACY.md) +- 🤝 Contributing guide: [`CONTRIBUTING.md`](./CONTRIBUTING.md) +- 📜 Code of conduct: [`CODE_OF_CONDUCT.md`](./CODE_OF_CONDUCT.md) +- 📄 Third-party notices: [`THIRD_PARTY_NOTICES.md`](./THIRD_PARTY_NOTICES.md) ## 💡 Contributing @@ -374,12 +402,18 @@ Community contributions are welcome. To get started: 1. **Fork the Repository**: Create a personal fork and clone it locally. 2. **Set Up the Workspace**: Follow the [Developer Quick Start](#-developer-quick-start) and install the toolchain required by the platform you plan to change. 3. **Verify Your Change**: Run focused tests first, then the applicable repository checks before submitting a pull request: - ```bash - pnpm test - pnpm typecheck - pnpm format:check - pnpm gate:release - ``` + +
+⚙️ Verification Commands + +```bash +pnpm test +pnpm typecheck +pnpm format:check +pnpm gate:release +``` + +
For detailed coding standards, project layouts, and process rules, check out our [Contributing Guidelines](./CONTRIBUTING.md) and [Code of Conduct](./CODE_OF_CONDUCT.md). @@ -388,6 +422,12 @@ For detailed coding standards, project layouts, and process rules, check out our - [Request a feature](https://github.com/lynavo/lynavo-drive/issues/new?labels=enhancement) - [Report a vulnerability privately](https://github.com/lynavo/lynavo-drive/security/advisories/new) instead of posting exploitable details in a public issue. -## ⚖️ License +## 🌐 Community & Social + +Follow project news and updates across these channels: -MIT. See [`LICENSE`](./LICENSE). +- [![X](https://img.shields.io/badge/X-%23000000?style=flat-square&logo=x&logoColor=white)](https://x.com/founder_im63606) — [@founder_im63606](https://x.com/founder_im63606) +- [![Mastodon](https://img.shields.io/badge/Mastodon-%236364FF?style=flat-square&logo=mastodon&logoColor=white)](https://mastodon.social/@ViviDrop) — [@ViviDrop](https://mastodon.social/@ViviDrop) +- [![Bluesky](https://img.shields.io/badge/Bluesky-%230085FF?style=flat-square&logo=bluesky&logoColor=white)](https://bsky.app/profile/vividrop.bsky.social) — [@vividrop.bsky.social](https://bsky.app/profile/vividrop.bsky.social) +- [![LinkedIn](https://img.shields.io/badge/LinkedIn-%230077B5?style=flat-square&logo=linkedin&logoColor=white)](https://www.linkedin.com/in/lynavo-lynavo-1273322b6/) — [Lynavo](https://www.linkedin.com/in/lynavo-lynavo-1273322b6/) +- [![YouTube](https://img.shields.io/badge/YouTube-%23FF0000?style=flat-square&logo=youtube&logoColor=white)](https://www.youtube.com/channel/UCMcYmWmPMzQ5N8bHFffnldQ) — [YouTube Channel](https://www.youtube.com/channel/UCMcYmWmPMzQ5N8bHFffnldQ) diff --git a/README.zh-Hant.md b/README.zh-Hant.md index 3151f4b6..11857fff 100644 --- a/README.zh-Hant.md +++ b/README.zh-Hant.md @@ -17,8 +17,9 @@

- OSS Release Gate - Node Version + OSS Release Gate + CI + Node Version Go Version Desktop Platform Mobile Platform @@ -28,9 +29,10 @@

產品預覽主要功能 • - 開發者快速開始開源邊界 • - 參與貢獻 + 開發者快速開始 • + 參與貢獻 • + 社群與社群媒體

--- @@ -39,13 +41,13 @@ Lynavo Drive 已完成主要功能,並開放社群從原始碼建置與參與貢獻。本儲存庫只提供一套公開的本機原始碼建置與套件驗證流程;不發布官方簽署的安裝程式、行動應用程式商店版本、自動更新或託管服務。 -| 使用範圍 | 目前的開源版本支援範圍 | -| -------- | -------------------------------------------------- | -| 桌面端 | macOS 與 Windows 應用程式執行環境 | -| 行動端 | iOS 與 Android 應用程式執行環境 | -| Linux | 僅供本機原始碼建置與套件驗證 | -| 網路 | 同一區域網路中的前景同步 | -| 發布方式 | 社群原始碼建置,以及在本機產生的套件/二進位執行檔 | +| 使用範圍 | 目前的開源版本支援範圍 | +| ----------- | -------------------------------------------------- | +| 💻 桌面端 | macOS 與 Windows 應用程式執行環境 | +| 📱 行動端 | iOS 與 Android 應用程式執行環境 | +| 🐧 Linux | 僅供本機原始碼建置與套件驗證 | +| 🌐 網路 | 同一區域網路中的前景同步 | +| 📦 發布方式 | 社群原始碼建置,以及在本機產生的套件/二進位執行檔 | ## 📸 產品預覽 @@ -84,6 +86,9 @@ Lynavo Drive 已完成主要功能,並開放社群從原始碼建置與參與 這是提供給貢獻者的開發流程,不是一般使用者安裝程式。本機套件建置與各平台驗證方式請參閱[發布手冊](./docs/release/release-playbook.md)。 +
+💻 安裝與啟動指令 + ```bash # 1. 啟用儲存庫指定的 pnpm 版本並安裝相依套件 corepack enable @@ -97,10 +102,15 @@ pnpm --filter @lynavo-drive/design-tokens build pnpm dev:desktop ``` +
+ Electron 視窗會自動開啟,桌面端應用程式會啟動側車服務 (Sidecar)。 若要執行行動端,請保持桌面端運作,並開啟另一個終端機: +
+📱 行動端開發指令 + ```bash # 啟動 Metro pnpm dev:mobile @@ -111,6 +121,8 @@ pnpm --filter @lynavo-drive/mobile ios pnpm dev:mobile:android ``` +
+ 仍需準備各平台開發工具:iOS 需要 macOS、Xcode 與 CocoaPods;Android 需要 Android Studio 及 Android SDK/NDK。 配對應用程式: @@ -125,22 +137,22 @@ pnpm dev:mobile:android
🔍 檢視疑難排解指南與常見問題 -### 1. 行動端應用程式找不到我的桌面裝置(mDNS 裝置探索失敗) +### 📡 1. 行動端應用程式找不到我的桌面裝置(mDNS 裝置探索失敗) - **檢查網路**:確保行動端和桌面端皆處於同一個區域網路 (LAN)。 - **Windows 防火牆**:驗證 Windows Defender 防火牆是否允許連接埠 `39593` (TCP/LMUP 檔案傳輸) 和 `39594` (HTTP API) 的連入流量。 - **Bonjour 執行環境**:開源建置版本不重新散布 Apple Bonjour。請確認 Windows 已安裝 Bonjour,否則使用相容於 zeroconf 的備援方案。 -### 2. 為什麼我的一些 iCloud 照片卡住 / 無法傳輸? +### ☁️ 2. 為什麼我的一些 iCloud 照片卡住 / 無法傳輸? - 標記為 `iCloud` 的照片在傳輸前,必須先從 Apple Photos 雲端儲存庫中匯出。 - 在 `cloud_downloading` 或 `preparing` 狀態下,手機正在將高解析度的原始內容下載至本機儲存空間。下載完成後會自動開始傳輸。 -### 3. 我可以手動選擇要同步哪些照片 / 影片嗎? +### 📸 3. 我可以手動選擇要同步哪些照片 / 影片嗎? - 不行。自動上傳由行動端相簿掃描及嚴格唯讀的待處理佇列驅動,開源流程不提供核取方塊選取功能。 -### 4. 當桌面端進入睡眠狀態或連線中斷時會發生什麼事? +### 💤 4. 當桌面端進入睡眠狀態或連線中斷時會發生什麼事? - 區域網路傳輸會中斷。當行動應用程式位於前景時,桌面端喚醒並恢復區域網路連線後,會繼續處理未完成的佇列。 - 開源執行環境不提供靜默背景續傳。 @@ -148,40 +160,64 @@ pnpm dev:mobile:android
-## 🛠️ 技術架構 - -| 層級 | 技術 | -| ------------------ | ---------------------------------------------------------- | -| Monorepo | pnpm 10 + turborepo 2.8 | -| 桌面端 | Electron 41 + electron-vite 5 + electron-builder 26 | -| 桌面端 UI | React 18.3 + zustand 5 + Tailwind CSS v4 | -| 行動端 | React Native 0.84.1 + React 19 (iOS / Android) | -| iOS 原生 | Swift `SyncEngine` + BGTask + PhotoKit + Network.framework | -| Android 原生 | Kotlin 橋接 + NativeSyncEngine / MediaStore / NsdManager | -| 側車服務 (Sidecar) | Go 1.25.6 + SQLite + WebSocket | -| 共用套件 | `@lynavo-drive/contracts` + `@lynavo-drive/design-tokens` | -| 測試 | vitest 4.1 + jest + `go test` | - ## 🏗️ 架構概覽 -```text -Mobile (RN UI on iOS / Android) - ├── iOS: Swift SyncEngine - └── Android: Kotlin NativeSyncEngine - ├── Bonjour/mDNS discover - ├── LMUP/TCP :39593 - └── Presence/HTTP :39594 - │ - ▼ -Desktop (Electron + Go sidecar, macOS / Windows) - ├── Electron: UI shell, window, bridge, sidecar lifecycle - ├── Sidecar HTTP API / WebSocket - ├── LMUP file receiver - ├── SQLite - └── Filesystem / shared directory detection +```mermaid +flowchart TD + subgraph Mobile["📱 行動端 (iOS / Android)"] + RN["React Native UI"] + subgraph SE["原生同步引擎"] + iOS["iOS (Swift)"] + Android["Android (Kotlin)"] + end + end + + subgraph Desktop["💻 桌面端 (macOS / Windows)"] + Electron["Electron 外殼 (React 18 UI)"] + Preload["預載橋接 (Preload Bridge)"] + subgraph Sidecar["Go 側車服務 (Sidecar)"] + HTTP["HTTP API 與 WebSocket (連接埠 39594)"] + LMUP["LMUP 接收器 (連接埠 39593)"] + DB[("SQLite 資料庫")] + FS["檔案系統共用目錄"] + end + end + + %% Communication Links + RN <--> Preload + Preload <--> Electron + Electron <--> HTTP + + %% Network Sync Channels + SE -- "mDNS 探索 / 配對" --> HTTP + SE -- "在線狀態與元資料 (HTTP/WS)" --> HTTP + SE -- "增量媒體同步 (LMUP/TCP)" --> LMUP + + classDef mobile fill:#fff0f5,stroke:#db7093,stroke-width:1px; + classDef desktop fill:#f0f8ff,stroke:#4682b4,stroke-width:1px; + classDef sidecar fill:#f5fffa,stroke:#2e8b57,stroke-width:1px; + class Mobile,RN,SE,iOS,Android mobile; + class Desktop,Electron,Preload desktop; + class Sidecar,HTTP,LMUP,DB,FS sidecar; ``` -## ⚙️ 系統需求 +## 🔧 技術基礎設施 + +### 🛠️ 技術架構 + +| 層級 | 技術 | +| --------------------- | ---------------------------------------------------------- | +| 📦 Monorepo | pnpm 10 + turborepo 2.8 | +| 💻 桌面端 | Electron 41 + electron-vite 5 + electron-builder 26 | +| 🎨 桌面端 UI | React 18.3 + zustand 5 + Tailwind CSS v4 | +| 📱 行動端 | React Native 0.84.1 + React 19 (iOS / Android) | +| 🍎 iOS 原生 | Swift `SyncEngine` + BGTask + PhotoKit + Network.framework | +| 🤖 Android 原生 | Kotlin 橋接 + NativeSyncEngine / MediaStore / NsdManager | +| ⚡ 側車服務 (Sidecar) | Go 1.25.6 + SQLite + WebSocket | +| 🔗 共用套件 | `@lynavo-drive/contracts` + `@lynavo-drive/design-tokens` | +| 🧪 測試 | vitest 4.1 + jest + `go test` | + +### ⚙️ 系統需求 - **macOS 或 Windows**(桌面端目前支援 macOS / Windows;Linux 僅用於本機建置 / 套件驗證;iOS 建置仍需要 macOS + Xcode) - **Node.js** >= 22.12.0 @@ -196,7 +232,7 @@ Desktop (Electron + Go sidecar, macOS / Windows)
-## 💻 常用指令 +### 💻 常用指令
🛠️ 檢視開發者指令參考 @@ -229,9 +265,9 @@ pnpm check
-## 📦 開源版本建置與套件驗證 +### 📦 開源版本建置與套件驗證 -此開源儲存庫保留本機原始碼建置與套件驗證流程。 +此開源儲存庫保留本機原始碼建置與套件驗證流程,以及在 GitHub 上執行、無需儲存庫秘密金鑰 (Secret-free) 的未簽署建置與套件驗證。託管的建置輸出僅為驗證產物,並非官方簽署的發布版本。Linux 僅用於本機驗證,並非支援的桌面端使用者平台。
🔬 檢視驗證與建置管道 @@ -260,9 +296,13 @@ pnpm --filter @lynavo-drive/desktop package:linux -- --arch=arm64
-`release` 設定檔只會注入 `LYNAVO_RELEASE_CHANNEL` 與本機建置設定,並只選擇本機建置 / 套件指令。 +`release` 設定檔只會注入 `LYNAVO_RELEASE_CHANNEL` 與本機建置設定,並只選擇本機建置/套件指令。 + +GitHub 裝載的工作流程 (Workflows) 可能在無儲存庫秘密金鑰的情況下,使用公開的原始碼調用這些指令。第三方或外部建置服務、程式碼簽署、公證、商店上傳、自動更新以及私有發布基礎設施皆在此開源基準之外。 -## 📁 專案結構 +`OSS Draft Release` 工作流程接受符合 `vX.Y.Z` 的穩定標籤 (Tags),從該標籤提交重建完整的驗證組套,並建立或更新 GitHub 草稿版本 (Draft Release)。手動派發僅限建置。發布的檔案為未簽署的開源建置驗證輸出,並包含 SHA-256 校驗和;有關確切的資產清單、警示和維護者程序,請參閱[發布手冊](./docs/release/release-playbook.md)。 + +### 📁 專案結構
📂 檢視目錄結構圖 @@ -305,21 +345,21 @@ lynavo-drive/ ## 📄 文件參考 -- 開發限制與營運規則:[`AGENTS.md`](./AGENTS.md) -- 系統概覽:[`docs/architecture/system-overview.md`](./docs/architecture/system-overview.md) -- 同步狀態機:[`docs/architecture/sync-state-machine.md`](./docs/architecture/sync-state-machine.md) -- 資料模型與統計語義:[`docs/architecture/data-model.md`](./docs/architecture/data-model.md) -- 疑難排解指南:[`docs/operations/troubleshooting.md`](./docs/operations/troubleshooting.md) -- 行動端診斷套件:[`docs/operations/mobile-diagnostics.md`](./docs/operations/mobile-diagnostics.md) -- 側車服務 (Sidecar) 運作手冊:[`docs/operations/sidecar-runbook.md`](./docs/operations/sidecar-runbook.md) -- 產品限制、開源邊界與非目標:[`docs/product/constraints.md`](./docs/product/constraints.md) -- 開源版本建置驗證手冊:[`docs/release/release-playbook.md`](./docs/release/release-playbook.md) -- 開源驗證矩陣:[`docs/testing/oss-verification-matrix.md`](./docs/testing/oss-verification-matrix.md) -- 安全性政策:[`SECURITY.md`](./SECURITY.md) -- 隱私權聲明:[`PRIVACY.md`](./PRIVACY.md) -- 貢獻指南:[`CONTRIBUTING.md`](./CONTRIBUTING.md) -- 行為準則:[`CODE_OF_CONDUCT.md`](./CODE_OF_CONDUCT.md) -- 第三方聲明:[`THIRD_PARTY_NOTICES.md`](./THIRD_PARTY_NOTICES.md) +- ⚙️ 開發限制與營運規則:[`AGENTS.md`](./AGENTS.md) +- 📘 系統概覽:[`docs/architecture/system-overview.md`](./docs/architecture/system-overview.md) +- 🔄 同步狀態機:[`docs/architecture/sync-state-machine.md`](./docs/architecture/sync-state-machine.md) +- 📊 資料模型與統計語義:[`docs/architecture/data-model.md`](./docs/architecture/data-model.md) +- 🔧 疑難排解指南:[`docs/operations/troubleshooting.md`](./docs/operations/troubleshooting.md) +- 📱 行動端診斷套件:[`docs/operations/mobile-diagnostics.md`](./docs/operations/mobile-diagnostics.md) +- ⚡ 側車服務 (Sidecar) 運作手冊:[`docs/operations/sidecar-runbook.md`](./docs/operations/sidecar-runbook.md) +- 🛡️ 產品限制、開源邊界與非目標:[`docs/product/constraints.md`](./docs/product/constraints.md) +- 📦 開源版本建置驗證手冊:[`docs/release/release-playbook.md`](./docs/release/release-playbook.md) +- 🔬 開源驗證矩陣:[`docs/testing/oss-verification-matrix.md`](./docs/testing/oss-verification-matrix.md) +- 🔒 安全性政策:[`SECURITY.md`](./SECURITY.md) +- 🕵️ 隱私權聲明:[`PRIVACY.md`](./PRIVACY.md) +- 🤝 貢獻指南:[`CONTRIBUTING.md`](./CONTRIBUTING.md) +- 📜 行為準則:[`CODE_OF_CONDUCT.md`](./CODE_OF_CONDUCT.md) +- 📄 第三方聲明:[`THIRD_PARTY_NOTICES.md`](./THIRD_PARTY_NOTICES.md) ## 💡 參與貢獻 @@ -328,12 +368,18 @@ lynavo-drive/ 1. **Fork 本儲存庫**:建立個人 Fork 並複製到本機。 2. **設定開發工作區**:依照[開發者快速開始](#-開發者快速開始),安裝預計修改平台所需的開發工具。 3. **驗證變更**:先執行聚焦測試,再於提交 pull request 前執行適用的儲存庫檢查: - ```bash - pnpm test - pnpm typecheck - pnpm format:check - pnpm gate:release - ``` + +
+⚙️ 驗證指令 + +```bash +pnpm test +pnpm typecheck +pnpm format:check +pnpm gate:release +``` + +
詳細的程式撰寫規範、專案結構與開發流程,請參閱[貢獻指南](./CONTRIBUTING.md)及[行為準則](./CODE_OF_CONDUCT.md)。 @@ -342,6 +388,12 @@ lynavo-drive/ - [提出功能建議](https://github.com/lynavo/lynavo-drive/issues/new?labels=enhancement) - [私下回報安全漏洞](https://github.com/lynavo/lynavo-drive/security/advisories/new),請勿在公開 issue 張貼可被利用的漏洞細節。 -## ⚖️ 授權條款 +## 🌐 社群與社群媒體 + +透過以下管道追蹤專案消息與最新動態: -MIT。請參閱 [`LICENSE`](./LICENSE)。 +- [![X](https://img.shields.io/badge/X-%23000000?style=flat-square&logo=x&logoColor=white)](https://x.com/founder_im63606) — [@founder_im63606](https://x.com/founder_im63606) +- [![Mastodon](https://img.shields.io/badge/Mastodon-%236364FF?style=flat-square&logo=mastodon&logoColor=white)](https://mastodon.social/@ViviDrop) — [@ViviDrop](https://mastodon.social/@ViviDrop) +- [![Bluesky](https://img.shields.io/badge/Bluesky-%230085FF?style=flat-square&logo=bluesky&logoColor=white)](https://bsky.app/profile/vividrop.bsky.social) — [@vividrop.bsky.social](https://bsky.app/profile/vividrop.bsky.social) +- [![LinkedIn](https://img.shields.io/badge/LinkedIn-%230077B5?style=flat-square&logo=linkedin&logoColor=white)](https://www.linkedin.com/in/lynavo-lynavo-1273322b6/) — [Lynavo](https://www.linkedin.com/in/lynavo-lynavo-1273322b6/) +- [![YouTube](https://img.shields.io/badge/YouTube-%23FF0000?style=flat-square&logo=youtube&logoColor=white)](https://www.youtube.com/channel/UCMcYmWmPMzQ5N8bHFffnldQ) — [YouTube 頻道](https://www.youtube.com/channel/UCMcYmWmPMzQ5N8bHFffnldQ) diff --git a/docs/superpowers/plans/2026-07-16-readme-beautification.md b/docs/superpowers/plans/2026-07-16-readme-beautification.md new file mode 100644 index 00000000..0607d6b0 --- /dev/null +++ b/docs/superpowers/plans/2026-07-16-readme-beautification.md @@ -0,0 +1,95 @@ +# README Beautification Implementation Plan + +> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. + +**Goal:** Beautify and modernize the main README.md and the Traditional Chinese translation README.zh-Hant.md. + +**Architecture:** Update files directly in the repository. Use uniform flat-square badges, GitHub-specific markdown Alert formats, collapsible `
` blocks for verbose sections, and replace ASCII diagrams with high-fidelity Mermaid.js flowcharts. + +**Tech Stack:** Markdown, Mermaid.js, Prettier. + +--- + +### Task 1: Beautify English README + +**Files:** + +- Modify: `README.md` + +- [ ] **Step 1: Apply markdown upgrades to README.md** + + Modify the `README.md` file using the following improvements: + - Center-align the top branding: Banner, logo, title, description, and badges. + - Upgrade badges to a uniform flat-square style. + - Wrap the "Project Status" table in a clean description. + - Render the visual diagram using a styled Mermaid flowchart showing the connection ports `39593` (LMUP/TCP) and `39594` (HTTP API). + - Use GitHub-style `[!IMPORTANT]` and `[!WARNING]` alerts to emphasize OSS boundaries. + - Group technical environment/setup commands under a single `🔧 Technical Infrastructure` heading. + - Wrap the project directory structure map and development command references inside collapsible `
` blocks. + - Add flat-square brand shields for each connection/channel under `## 🌐 Community & Social`. + - Ensure the `## ⚖️ License` section is completely removed. + - Add Emoji icons to the "Project Status" table (Surface column), "Tech Stack" table (Layer column), Documentation Reference list, and FAQs headings as outlined in the design spec. + - Keep the entire document strictly in English. + +- [ ] **Step 2: Run formatting checks on the main README** + + Run: `pnpm format:check` + Expected: Return success or format command pass. + +- [ ] **Step 3: Commit the main README changes** + + Run: + + ```bash + git add README.md + git commit -m "docs: beautify and modernize main README.md with community shields and emoji icons" + ``` + +--- + +### Task 2: Beautify Traditional Chinese README + +**Files:** + +- Modify: `README.zh-Hant.md` + +- [ ] **Step 1: Apply markdown upgrades to README.zh-Hant.md** + + Modify the `README.zh-Hant.md` file using the exact same structural layout, Mermaid flowchart, collapsible `
` components, and Alert blocks as Task 1, translating any newly added English labels (like "Technical Infrastructure" and section names) into Traditional Chinese. + - Add flat-square brand shields for each connection/channel under `## 🌐 社群與社群媒體`. + - Ensure the `## ⚖️ 授權條款` section is completely removed. + - Add Emoji icons to the "Project Status" table, "Tech Stack" table, Documentation Reference list, and FAQs headings matching the English layout (with appropriate Traditional Chinese localizations). + - Keep the entire document strictly in Traditional Chinese. + +- [ ] **Step 2: Run formatting checks on the Traditional Chinese README** + + Run: `pnpm format:check` + Expected: Return success or format command pass. + +- [ ] **Step 3: Commit the Traditional Chinese README changes** + + Run: + + ```bash + git add README.zh-Hant.md + git commit -m "docs: beautify and synchronize Traditional Chinese README with community shields and emoji icons" + ``` + +--- + +### Task 3: Full Validation & Verification + +**Files:** + +- Validate: `README.md` +- Validate: `README.zh-Hant.md` + +- [ ] **Step 1: Check format validation for all modified files** + + Run: `pnpm format:check` + Expected: PASS + +- [ ] **Step 2: Verify git status is clean** + + Run: `git status` + Expected: Working tree clean (all changes committed). diff --git a/docs/superpowers/specs/2026-07-16-readme-beautification-design.md b/docs/superpowers/specs/2026-07-16-readme-beautification-design.md new file mode 100644 index 00000000..eac3c8ff --- /dev/null +++ b/docs/superpowers/specs/2026-07-16-readme-beautification-design.md @@ -0,0 +1,127 @@ +# README Beautification & Modernization Spec + +This document outlines the design and plan for beautifying `README.md` and `README.zh-Hant.md` to present a modern, premium layout, clear technical information, and a high-fidelity Mermaid.js architecture diagram. + +## Goals + +1. **Modern Layout**: Enhance typography, use uniform badges, and structure sections using clear visual hierarchies. +2. **Interactive Diagrams**: Replace the text-based ASCII diagram with a dynamic Mermaid.js flowchart mapping mobile-desktop relationships and communications. +3. **Structured Collapse**: Wrap long logs, folder structures, and developer commands in `
` blocks to keep the page clean and scannable. +4. **Bilingual Sync**: Fully align `README.md` (English) and `README.zh-Hant.md` (Traditional Chinese) in terms of structure and updates. + +## Technical Details + +### 1. Badges & Header + +- Align the headers, logos, and badges at the top center. +- Use uniform flat-square style shields for all badges: + - OSS Release Gate: `https://github.com/lynavo/lynavo-drive/actions/workflows/oss-release-gate.yml/badge.svg` + - Node.js: `>= 22.12.0` (green/blue logo) + - Go: `>= 1.25.6` (00ADD8 logo) + - Platform: macOS | Windows (lightgrey) + - Mobile: iOS | Android (lightgrey) + - License: MIT (green) + +### 2. Architecture Diagram (Mermaid) + +Replace ASCII with: + +```mermaid +flowchart TD + subgraph Mobile["📱 Mobile Client (iOS / Android)"] + RN["React Native UI"] + subgraph SE["Native Sync Engine"] + iOS["iOS (Swift)"] + Android["Android (Kotlin)"] + end + end + + subgraph Desktop["💻 Desktop App (macOS / Windows)"] + Electron["Electron Shell (React 18 UI)"] + Preload["Preload Bridge"] + subgraph Sidecar["Go Sidecar"] + HTTP["HTTP API & WebSockets (Port 39594)"] + LMUP["LMUP Receiver (Port 39593)"] + DB[("SQLite DB")] + FS["Filesystem Shared Dirs"] + end + end + + %% Communication Links + RN <--> Preload + Preload <--> Electron + Electron <--> HTTP + + %% Network Sync Channels + SE -- "mDNS Discovery / Pairing" --> HTTP + SE -- "Presence & Metadata (HTTP/WS)" --> HTTP + SE -- "Incremental Media Sync (LMUP/TCP)" --> LMUP + + classDef mobile fill:#fff0f5,stroke:#db7093,stroke-width:1px; + classDef desktop fill:#f0f8ff,stroke:#4682b4,stroke-width:1px; + classDef sidecar fill:#f5fffa,stroke:#2e8b57,stroke-width:1px; + class Mobile,RN,SE,iOS,Android mobile; + class Desktop,Electron,Preload desktop; + class Sidecar,HTTP,LMUP,DB,FS sidecar; +``` + +### 3. OSS Boundaries + +Format the open-source gates using GitHub Alerts: + +- `[!IMPORTANT]` for Local-LAN open-source core details. +- `[!WARNING]` for out-of-scope non-OSS boundaries (such as remote connection, cloud relay, store distribution, etc.). + +### 4. Technical Infrastructure Section + +Group the following sub-headings under a single unified section: + +- **Prerequisites** +- **Tech Stack** +- **Common Commands** +- **Project Structure** +- **OSS Build & Package Verification** + Fold long listings (like commands, package verification, folder map) inside `
` blocks. + +### 5. Community & Social Shields + +- Replace text links in the "Community & Social" (or "社群與社群媒體") section with modern flat-square brand badges: + - X: `[![X](https://img.shields.io/badge/X-%23000000?style=flat-square&logo=x&logoColor=white)](https://x.com/founder_im63606)` + - Mastodon: `[![Mastodon](https://img.shields.io/badge/Mastodon-%236364FF?style=flat-square&logo=mastodon&logoColor=white)](https://mastodon.social/@ViviDrop)` + - Bluesky: `[![Bluesky](https://img.shields.io/badge/Bluesky-%230085FF?style=flat-square&logo=bluesky&logoColor=white)](https://bsky.app/profile/vividrop.bsky.social)` + - LinkedIn: `[![LinkedIn](https://img.shields.io/badge/LinkedIn-%230077B5?style=flat-square&logo=linkedin&logoColor=white)](https://www.linkedin.com/in/lynavo-lynavo-1273322b6/)` + - YouTube: `[![YouTube](https://img.shields.io/badge/YouTube-%23FF0000?style=flat-square&logo=youtube&logoColor=white)](https://www.youtube.com/channel/UCMcYmWmPMzQ5N8bHFffnldQ)` + +### 6. Emoji Icons Enhancements + +Add clear visual Emoji icons to: + +- **Project Status Table (Surface column)**: + - `💻 Desktop` / `💻 桌面端` + - `📱 Mobile` / `📱 行動端` + - `🐧 Linux` / `🐧 Linux` + - `🌐 Network` / `🌐 網路` + - `📦 Distribution` / `📦 發布方式` +- **Tech Stack Table (Layer column)**: + - `📦 Monorepo` + - `💻 Desktop` + - `🎨 Desktop UI` + - `📱 Mobile` + - `🍎 iOS Native` + - `🤖 Android Native` + - `⚡ Sidecar` / `⚡ 側車服務 (Sidecar)` + - `🔗 Shared` / `🔗 共用套件` + - `🧪 Test` / `🧪 測試` +- **Documentation Reference List**: Add document type icons (e.g. `⚙️`, `📘`, `🔄`, `📊`, `🔧`, `📱`, `⚡`, `🛡️`, `📦`, `🔬`, `🔒`, `🕵️`, `🤝`, `📜`, `📄`) before the descriptions. +- **FAQs & Troubleshooting H3 Headings**: Add category/topic icons (e.g. `📡`, `☁️`, `📸`, `💤`) to the questions. + +### 7. License Removal + +- Note that the "License" and "授權條款" sections have been explicitly removed. + +## Execution Checklist + +- [ ] Update `README.md` (English only, no Chinese) to add community shields, table/list/FAQ emoji icons, and ensure no License section. +- [ ] Update `README.zh-Hant.md` (Traditional Chinese only) to add community shields, table/list/FAQ emoji icons, and ensure no License section. +- [ ] Verify formatting and markdown structure in both files. +- [ ] Run `pnpm format:check` to ensure no linting/formatting regression.