diff --git a/README.ja.md b/README.ja.md index 725e92ca..5fc17732 100644 --- a/README.ja.md +++ b/README.ja.md @@ -161,44 +161,57 @@ curl -fsSL https://edgeever.org/install.sh | bash --- -## データ移行と高度な活用 +## 高度な設定と管理 -### 移行 +### データのバックアップ、書き出しと移行 -他のプラットフォームから EdgeEver へ移す場合は、次の短いガイドを見てください。 +日常のバックアップ、インスタンス間のスムーズな移行、既存のノートアプリからの乗り換えなど、EdgeEver は信頼性の高い完全なデータ流通を提供します: -- **Evernote からの移行**: [docs/evernote-migration-guide.md](docs/evernote-migration-guide.md) -- **flomo からの移行**: [docs/flomo-migration-guide.md](docs/flomo-migration-guide.md) -- **Memos からの移行**: [docs/memos-migration-guide.md](docs/memos-migration-guide.md) -- **Notion からの移行**: [docs/notion-migration-guide.md](docs/notion-migration-guide.md) +- **EdgeEver ネイティブのバックアップと復元**:アプリ内の **プロフィール** -> **インポートとエクスポート** から、いつでも EdgeEver ZIP アーカイブを書き出し、または取り込めます。解凍後の `notes/` ディレクトリには Markdown ファイルと添付がそのまま保持され、ローカル保管や直接閲覧に利用できます。内部の構造化メタデータにより、異なる EdgeEver インスタンス間でも無劣化で完全復元が可能です。取り込み時は無関係な既存データを残し、同一 ID のノートを自動で上書き更新します。 +- **サードパーティ製ノートからのスムーズな移行**: + - **Evernote からの移行**: [docs/evernote-migration-guide.md](docs/evernote-migration-guide.md) + - **flomo からの移行**: [docs/flomo-migration-guide.md](docs/flomo-migration-guide.md) + - **Memos からの移行**: [docs/memos-migration-guide.md](docs/memos-migration-guide.md) + - **Notion からの移行**: [docs/notion-migration-guide.md](docs/notion-migration-guide.md) -### MCP +### AI と MCP プロトコル連携 **プロフィール** -> **API / MCP** で API トークンを作成し、ワンクリックで Remote MCP 設定をコピーすることで、Claude Code、Cursor、Antigravity、OpenClaw などの AI Agent がアカウント権限の範囲内で知識ベースを安全に管理できます。テキストノート、図のノート(マインドマップ、フローチャート、アーキテクチャ図)、多次元テーブルノート、ネイティブポスターノートの完全な CRUD に対応し、Agent はノートブック階層、タグ、添付ファイル、履歴バージョン、ノートテンプレート、AI 指示の管理も行えます。 > 💡 **着想:** > AI を知識の整理役と創作の相棒にしてください。構想をインタラクティブなマインドマップ、フローチャート、アーキテクチャ図、多次元テーブルへ瞬時に落とし込み、Agent に私有の文脈を渡せます。EdgeEver のリッチテキストと美しい体裁と組み合わせることで、AI が手伝った内容は、整った、いつでも配布できる高品質な知識資産になります。 -### 複数アカウントとストレージ使用量 +### 複数アカウントとストレージ管理 導入後、1 インスタンスで複数アカウントのログインができます。 インスタンス管理者は **プロフィール** -> **ユーザーアカウント** でメンバーの作成、無効化、パスワードリセットができます。メンバーごとにノートブック、ノート、添付、ゴミ箱、インポート / エクスポート、MCP トークンが分離されます。また、直感的なストレージ使用量ダッシュボードにより、インスタンス全体および各アカウントの添付ファイル容量をリアルタイムで把握できます。 -### 高度なオブジェクトストレージとサードパーティ画像ホスティング +### ストレージ拡張とサードパーティ画像ホスティング - **OSS オブジェクトストレージ**:インスタンスのオーナーは **設定 → 詳細 → OSS オブジェクトストレージ** で S3 互換ストレージを設定できます。切り替えは既存添付を移さず、影響しません。 - **デスクトップ版 PicGo 連携**:デスクトップ版ではローカルの PicGo クライアントと連携可能で、ノート内の画像を GitHub、SM.MS、又拍雲、七牛雲や自前ホストへ直接アップロードでき、セルフホスト環境のストレージと帯域消費を節約できます。 -### プラグインとテーマ +### プラグインとカスタムテーマ Web とデスクトップは機能プラグインとカスタムテーマに対応し、公式マーケット、GitHub、Manifest URL から手軽に導入でき、作業領域を通じて同期されます。開発者は `@edgeever/plugin-api` で拡張できます。詳細は [plugin development guide](docs/plugin-development.md) と [marketplace submission policy](docs/plugin-marketplace-policy.md) を参照してください。 --- -## 開発者ガイドとアーキテクチャ +## 開発者ガイドと貢献 -### 技術スタック +### クイックスタート + +```sh +bun install +bun run dev +``` + +ローカル開発は自動ログインします。新しいデータベースの初期アカウントは `owner` / `edgeever-local-dev` です。ログイン画面を試すときはログアウトしてください。 + +### アーキテクチャ設計と技術スタック + +#### 技術スタック選定 - Bun workspace の monorepo。Web、API、公式サイト、共有型パッケージ。 - フロントエンド: Vite、React、React Router、TanStack Query、Tailwind CSS、shadcn/ui、Radix UI。 @@ -210,16 +223,7 @@ Web とデスクトップは機能プラグインとカスタムテーマに対 - バックエンド: Hono / Zod の業務アプリ 1 式。REST API と Remote MCP。Cloudflare は Workers / D1 / R2、Docker は Bun / SQLite / ローカルファイルまたは S3。 - 公式サイト: `apps/site` の Astro 静的サイト。Cloudflare Pages に出せます。 -### クイックスタート - -```sh -bun install -bun run dev -``` - -ローカル開発は自動ログインします。新しいデータベースの初期アカウントは `owner` / `edgeever-local-dev` です。ログイン画面を試すときはログアウトしてください。 - -### リポジトリ構成 +#### リポジトリ構成 ```text apps/web Vite + React フロントエンド、PWA、オフライン下書き、同期キュー @@ -240,34 +244,33 @@ docs アーキテクチャ、移行、導入の文書 wrangler.toml Cloudflare Workers、Assets、D1、R2 の設定 ``` -### 内容の形式 +#### データストレージモデル -EdgeEver はノート本文を 3 つの形で持ちます。 +EdgeEver はエディタの描画性能、データポータビリティ、および全文検索の高速性を両立するため、ノート本文をデータベース内で同時に 3 つの形で保持します: ```text -content_json TipTap/ProseMirror 文書。エディタの正本 -content_markdown API、Agent、取り込み、書き出し -content_text 検索、要約、索引 +content_json TipTap/ProseMirror 文書、エディタの正本 +content_markdown API、Agent、書き出し、外部エコシステム連携用 +content_text 全文検索、要約生成、索引 ``` -**プロフィール** -> **インポートとエクスポート** から EdgeEver ZIP を書き出し、または取り込めます。`notes/` は Markdown として読め、持ち出せます。構造化データは EdgeEver インスタンス間の完全復元に使います。取り込みは関係ない対象データを残し、同じ EdgeEver ID の記録は上書きします。 +### コアメカニズムと設計上の決定 -### 画像圧縮 +- **クライアント側での静默圧縮**:Cloudflare Workers などの Serverless ランタイムで画像トランスコードを行い計算枠を消費するのを防ぐため、画像圧縮は Web クライアント側のアップロード前に完結させます(PNG/JPEG/WebP/AVIF を WebP に変換、長辺 2560px 制限;サイズが小さくならなければ原画像を維持)。サーバー側の REST API や MCP アップロードはクライアントから受け取った内容をそのまま格納します。 +- **オフライン優先と同期のタイミング**:Web、PWA、デスクトップは、ユーザーの編集が 30 秒間止まった段階で増分を自動アップロードし、フォアグラウンド表示中は 5 分ごとにクラウドの変更を確認します。ウィンドウへのフォーカス復帰や手動更新時は即座に同期されます。開発者は [`apps/web/src/lib/workspace-refresh.ts`](apps/web/src/lib/workspace-refresh.ts) 内の定数(`DEFERRED_MEMO_SYNC_DELAY_MS` および `BACKGROUND_WORKSPACE_REFRESH_INTERVAL_MS`)で調整できます。 -画像圧縮は Web クライアントがアップロード前に行い、**ノート内画像を圧縮** の設定で制御します。オンのとき、PNG、JPEG、WebP、AVIF は得があれば WebP にし、長辺を `2560px` までにします。小さくならなければ原ファイルを残します。 +### コードへの貢献 -Worker 側の画像処理は避け、計算と画像処理枠を抑えます。REST API と MCP のアップロードは、クライアントが渡した内容を追加圧縮せず保存します。 +コミュニティからの貢献を歓迎します!貢献の際は以下の約束にご協力ください: -### 同期のタイミング - -Web、PWA、デスクトップは、編集が 30 秒止まったあとでノートをアップロードし、表示中は 5 分ごとに遠隔の変更を見ます。フォーカスと手動更新はすぐです。`DEFERRED_MEMO_SYNC_DELAY_MS` と `BACKGROUND_WORKSPACE_REFRESH_INTERVAL_MS` は [`apps/web/src/lib/workspace-refresh.ts`](apps/web/src/lib/workspace-refresh.ts) で変えられます。 +- コードを提出する前に [Contribution Guide](CONTRIBUTING.md) をご一読ください。 +- **本番導入とブランチの分離**:自身の GitHub Fork を EdgeEver のオンライン導入用にも使用している場合、その `main` ブランチはデプロイ専用のクリーンな状態に維持してください。機能開発やプルリクエスト作成は必ず公式の `upstream/main` から作成した別ブランチで行い、デプロイ用 `main` での直接作業や Sync fork は避けてください。 --- ## コミュニティとフィードバック -- 不具合、機能要望、導入の問題: [GitHub Issues](https://github.com/tianma-if/edgeever/issues) -- コード貢献: [Contribution Guide](CONTRIBUTING.md) を読んでください。Fork を EdgeEver の導入にも使う場合、その `main` は導入専用にしてください。同期、開発、Pull Request は公式 `upstream/main` から切った別ブランチで行い、導入用 `main` では開発も Sync fork もしないでください。 +- **不具合報告と機能要望**:不具合や機能要望、導入に関する疑問は [GitHub Issues](https://github.com/tianma-if/edgeever/issues) へ投稿してください。 ### Telegram コミュニティ diff --git a/README.md b/README.md index 2511652d..af977a1d 100644 --- a/README.md +++ b/README.md @@ -162,31 +162,33 @@ After installation, updates run automatically each day by default. To update man --- -## Migration & Advanced Setup +## Advanced Configuration & Management -### Migration +### Data Backup, Export & Migration -If you want to migrate notes from other platforms to EdgeEver, please refer to the following simple migration guides: +Whether for routine data backups, seamless cross-instance migration, or switching from existing note platforms, EdgeEver provides reliable, complete data mobility: -- **Evernote Migration**: Please refer to [docs/evernote-migration-guide.md](docs/evernote-migration-guide.md) -- **flomo Migration**: Please refer to [docs/flomo-migration-guide.md](docs/flomo-migration-guide.md) -- **Memos Migration**: Please refer to [docs/memos-migration-guide.md](docs/memos-migration-guide.md) -- **Notion Migration**: Please refer to [docs/notion-migration-guide.md](docs/notion-migration-guide.md) +- **EdgeEver Native Backup & Restore**: In the app, go to **Profile** -> **Import and export** to export or import an EdgeEver ZIP archive at any time. The extracted `notes/` directory keeps clean plaintext Markdown files and attachments for local archival or direct reading, while internal structured metadata enables lossless full restoration across different EdgeEver instances. Importing preserves existing unrelated data on the target instance and automatically overwrites records with matching IDs. +- **Smooth Migration from Third-Party Apps**: + - **Evernote Migration**: Please refer to [docs/evernote-migration-guide.md](docs/evernote-migration-guide.md) + - **flomo Migration**: Please refer to [docs/flomo-migration-guide.md](docs/flomo-migration-guide.md) + - **Memos Migration**: Please refer to [docs/memos-migration-guide.md](docs/memos-migration-guide.md) + - **Notion Migration**: Please refer to [docs/notion-migration-guide.md](docs/notion-migration-guide.md) -### MCP +### AI & MCP Protocol Integration Create an API token in **Profile** -> **API / MCP** and copy the Remote MCP configuration in one click to let AI Agents such as Claude Code, Cursor, Antigravity, and OpenClaw securely manage your knowledge base within account permissions. EdgeEver supports full CRUD for text notes, visual diagram notes (mind maps, flowcharts, and architecture diagrams), structured table notes, and native poster notes. Agents can also manage notebook hierarchies, tags, attachments, revision history, note templates, and AI instructions. > 💡 **Inspiration:** > Make AI your true knowledge orchestrator and creative co-pilot—instantly turn concepts into interactive mind maps, flowcharts, architecture diagrams, and structured tables, while supplying private context to your AI Agents. Paired with EdgeEver’s powerful rich-text editing and elegant typography, AI-assisted content becomes beautifully structured, polished, and publication-ready knowledge assets. -### Multi-Account Login & Storage Usage +### Multi-Account Login & Storage Management Once deployed, a single instance supports multi-account login. The instance administrator can create, disable, or reset member accounts in **Profile** -> **User accounts**. Each member gets a fully isolated personal workspace, including notebooks, notes, attachments, Trash, import/export, and MCP tokens. An intuitive storage usage dashboard provides real-time visibility into attachment storage consumed across the whole instance as well as per account. -### Advanced Object Storage & Third-Party Image Hosting +### Storage Extension & Third-Party Image Hosting - **OSS Object Storage**: The instance owner can configure S3-compatible object storage under **Settings → Advanced → OSS object storage**. Changing storage does not migrate or affect existing attachments. - **Desktop PicGo Integration**: The desktop app optionally integrates with a local PicGo client service, uploading inserted images directly to GitHub, SM.MS, Upyun, Qiniu, or custom image hosts to minimize self-hosted storage and bandwidth consumption. @@ -197,9 +199,20 @@ Web and desktop apps support functional plugins and custom themes, installable f --- -## Developer Guide & Architecture +## Developer Guide & Contributing -### Tech Stack +### Quick Start + +```sh +bun install +bun run dev +``` + +Local development signs in automatically; fresh databases use `owner` / `edgeever-local-dev`. Log out to test the login screen. + +### Architecture & Tech Stack + +#### Tech Stack - Bun workspace monorepo with Web, API, official site, and shared type package. - Frontend: Vite, React, React Router, TanStack Query, Tailwind CSS, shadcn/ui, and Radix UI. @@ -211,16 +224,7 @@ Web and desktop apps support functional plugins and custom themes, installable f - Backend: one Hono/Zod business application with REST API and Remote MCP; Cloudflare uses Workers/D1/R2, while Docker uses Bun/SQLite/local files or S3. - Official site: Astro static site in `apps/site`, deployable to Cloudflare Pages. -### Quick Start - -```sh -bun install -bun run dev -``` - -Local development signs in automatically; fresh databases use `owner` / `edgeever-local-dev`. Log out to test the login screen. - -### Project Structure +#### Project Structure ```text apps/web Vite + React frontend, PWA, offline drafts, and sync queue @@ -241,34 +245,33 @@ docs Architecture, migration, and deployment docs wrangler.toml Cloudflare Workers, Assets, D1, R2 configuration ``` -### Content Formats +#### Data Storage Model -EdgeEver stores note content in three forms: +EdgeEver persists note content simultaneously across three formats to balance editing performance, open portability, and full-text search speed: ```text content_json TipTap/ProseMirror document, the editor source of truth -content_markdown API, Agent, import, and export format -content_text Search, summary, and indexing text +content_markdown API, Agent, export, and external ecosystem interoperability +content_text Full-text search, summary generation, and indexing ``` -Open **Profile** -> **Import and export** to export or import an EdgeEver ZIP. Its `notes/` directory is directly readable and portable as Markdown, while its structured data supports complete recovery between EdgeEver instances. Import preserves unrelated target data and overwrites records with matching EdgeEver IDs. +### Core Mechanisms & Design Decisions -### Image Compression +- **Client-Side Silent Compression**: To avoid consuming compute quota on serverless runtimes like Cloudflare Workers, image compression occurs in the Web client before upload (converting PNG/JPEG/WebP/AVIF to WebP when beneficial, max edge 2560px; original retained if compression does not reduce size). REST API and MCP endpoints store client-supplied binaries directly without additional server-side transcoding. +- **Offline-First & Sync Timing**: Web, PWA, and desktop clients automatically upload memo edits after 30 seconds of typing inactivity, and poll for remote changes every 5 minutes while visible; window refocus and manual refresh remain immediate. Configurable via `DEFERRED_MEMO_SYNC_DELAY_MS` and `BACKGROUND_WORKSPACE_REFRESH_INTERVAL_MS` in [`apps/web/src/lib/workspace-refresh.ts`](apps/web/src/lib/workspace-refresh.ts). -Image compression happens in the Web client before upload and is controlled by the **Compress note images** setting. When enabled, PNG, JPEG, WebP, and AVIF files are converted to WebP when beneficial, with the longest edge limited to `2560px`. If compression does not reduce size, the original file is kept. +### Contributing Code -EdgeEver avoids Worker-side image processing to reduce compute and image-processing quota usage. REST API and MCP upload paths store the file content provided by the client without additional server-side compression. +Community contributions are warmly welcome! Please keep the following guidelines in mind: -### Sync Timing - -Web, PWA, and desktop upload memo edits after 30 seconds of inactivity and check for remote changes every 5 minutes while visible; focus and manual refresh remain immediate. Adjust `DEFERRED_MEMO_SYNC_DELAY_MS` and `BACKGROUND_WORKSPACE_REFRESH_INTERVAL_MS` in [`apps/web/src/lib/workspace-refresh.ts`](apps/web/src/lib/workspace-refresh.ts). +- Please review the [Contribution Guide](CONTRIBUTING.md) before submitting code. +- **Deployment Isolation**: If your GitHub Fork is also used to deploy EdgeEver, keep its `main` branch clean and deployment-only. Create a dedicated branch from official `upstream/main` for features/fixes and pull requests; do not develop on or run Sync fork directly on the deployment `main`. --- ## Community and Feedback -- Bugs, feature requests, and deployment issues: [GitHub Issues](https://github.com/tianma-if/edgeever/issues) -- Code contributions: read the [Contribution Guide](CONTRIBUTING.md). If your Fork is also used to deploy EdgeEver, keep its `main` branch deployment-only. Create a separate branch from the official `upstream/main` for synchronization, development, and pull requests; do not develop on or Sync fork the deployment `main`. +- **Issues & Suggestions**: For bugs, feature requests, and deployment questions, please submit to [GitHub Issues](https://github.com/tianma-if/edgeever/issues) to help the community build searchable solutions. ### Telegram Community diff --git a/README.pl-PL.md b/README.pl-PL.md index f17a5568..dbf8bd9d 100644 --- a/README.pl-PL.md +++ b/README.pl-PL.md @@ -162,31 +162,33 @@ Po instalacji aktualizacje domyślnie uruchamiają się codziennie. Aby zaktuali --- -## Migracja danych i konfiguracja zaawansowana +## Zaawansowana konfiguracja i zarządzanie -### Migracja +### Kopia zapasowa, eksport i migracja danych -Jeśli chcesz przenieść notatki z innej aplikacji do EdgeEver, skorzystaj z poniższych przewodników (obecnie po angielsku): +Zarówno przy codziennych kopiach zapasowych, bezproblemowej migracji między instancjami, jak i przenoszeniu notatek z innych platform, EdgeEver zapewnia niezawodny i pełny transfer danych: -- **Evernote**: [docs/evernote-migration-guide.md](docs/evernote-migration-guide.md) -- **flomo**: [docs/flomo-migration-guide.md](docs/flomo-migration-guide.md) -- **Memos**: [docs/memos-migration-guide.md](docs/memos-migration-guide.md) -- **Notion**: [docs/notion-migration-guide.md](docs/notion-migration-guide.md) +- **Natywne kopie zapasowe i przywracanie EdgeEver**: W aplikacji w **Profil → Import i eksport** można w każdej chwili wyeksportować lub zaimportować archiwum ZIP EdgeEver. Rozpakowany katalog `notes/` zawiera bezpośrednio czytelne pliki Markdown oraz załączniki do lokalnego archiwizowania, a wewnętrzne dane strukturalne pozwalają na bezstratne i pełne odtworzenie bazy na innej instancji EdgeEver. Podczas importu zachowywane są istniejące, niezwiązane dane na instancji docelowej, a rekordy o tych samych identyfikatorach są automatycznie aktualizowane. +- **Płynna migracja z innych platform**: + - **Evernote**: [docs/evernote-migration-guide.md](docs/evernote-migration-guide.md) + - **flomo**: [docs/flomo-migration-guide.md](docs/flomo-migration-guide.md) + - **Memos**: [docs/memos-migration-guide.md](docs/memos-migration-guide.md) + - **Notion**: [docs/notion-migration-guide.md](docs/notion-migration-guide.md) -### MCP +### Integracja z AI i protokołem MCP Utwórz token API w **Profil → API / MCP** i skopiuj konfigurację Remote MCP jednym kliknięciem. Agenci AI, tacy jak Claude Code, Cursor, Antigravity i OpenClaw, będą mogli bezpiecznie zarządzać Twoją bazą wiedzy w zakresie uprawnień konta. EdgeEver obsługuje pełne tworzenie, odczyt, edycję i usuwanie notatek tekstowych, diagramów (map myśli, schematów blokowych i diagramów architektury), tabel strukturalnych oraz natywnych notatek plakatowych. Agenci mogą też zarządzać strukturą notatników, tagami, załącznikami, historią wersji, szablonami i instrukcjami AI. > 💡 **Inspiracja:** > Użyj AI jako pomocnika w porządkowaniu wiedzy: zamieniaj pomysły w interaktywne mapy myśli, diagramy i tabele, dostarczając agentom własny kontekst. Edytor tekstu sformatowanego i typografia EdgeEver pomagają dopracować wynik do postaci gotowej do publikacji. -### Logowanie wielu użytkowników i zużycie miejsca +### Logowanie wielu użytkowników i zarządzanie miejscem Jedna instancja obsługuje wiele kont. Administrator może tworzyć i wyłączać konta oraz resetować ich hasła w **Profil → Członkowie**. Każdy użytkownik otrzymuje odizolowaną przestrzeń z notatnikami, notatkami, załącznikami, Koszem, importem i eksportem oraz tokenami MCP. Przejrzysty panel zużycia miejsca pozwala na bieżąco monitorować przestrzeń zajmowaną przez załączniki w całej instancji i na poszczególnych kontach. -### Zaawansowane przechowywanie plików i zewnętrzny hosting obrazów +### Rozszerzenia pamięci masowej i zewnętrzny hosting obrazów - **Magazyn obiektów OSS**: Właściciel instancji może skonfigurować magazyn zgodny z S3 w **Profil → Zaawansowane → Magazyn obiektów OSS**. Zmiana magazynu nie przenosi istniejących załączników ani ich nie modyfikuje. - **Integracja z PicGo na komputerze**: Aplikacja desktopowa opcjonalnie współpracuje z lokalną usługą PicGo, przesyłając wstawiane obrazy bezpośrednio do GitHuba, SM.MS, Upyun, Qiniu lub własnego hostingu, co ogranicza zużycie miejsca i transferu we własnym środowisku. @@ -197,9 +199,20 @@ Aplikacje Web i desktopowa obsługują wtyczki oraz własne motywy, instalowane --- -## Przewodnik dla deweloperów i architektura +## Przewodnik dla deweloperów i współtworzenie -### Stos technologiczny +### Szybki start + +```sh +bun install +bun run dev +``` + +W lokalnym środowisku deweloperskim logowanie następuje automatycznie. Nowa baza używa danych `owner` / `edgeever-local-dev`. Wyloguj się, aby sprawdzić ekran logowania. + +### Architektura i stos technologiczny + +#### Stos technologiczny - Monorepo oparte na Bun z aplikacją Web, API, oficjalną stroną i pakietem współdzielonych typów. - Interfejs: Vite, React, React Router, TanStack Query, Tailwind CSS, shadcn/ui i Radix UI. @@ -211,16 +224,7 @@ Aplikacje Web i desktopowa obsługują wtyczki oraz własne motywy, instalowane - Backend: jedna aplikacja biznesowa Hono/Zod z REST API i Remote MCP. Cloudflare używa Workers/D1/R2, a Docker używa Bun/SQLite oraz plików lokalnych lub S3. - Oficjalna strona: statyczna witryna Astro w `apps/site`, wdrażana niezależnie na Cloudflare Pages. -### Szybki start - -```sh -bun install -bun run dev -``` - -W lokalnym środowisku deweloperskim logowanie następuje automatycznie. Nowa baza używa danych `owner` / `edgeever-local-dev`. Wyloguj się, aby sprawdzić ekran logowania. - -### Struktura projektu +#### Struktura projektu ```text apps/web Interfejs Vite + React, PWA, wersje robocze offline i kolejka synchronizacji @@ -241,34 +245,33 @@ docs Dokumentacja architektury, migracji i wdrażania wrangler.toml Konfiguracja Cloudflare Workers, Assets, D1 i R2 ``` -### Formaty treści +#### Model przechowywania danych -Treść notatki jest przechowywana w trzech postaciach: +EdgeEver przechowuje treść notatki jednocześnie w trzech formatach, aby pogodzić wydajność edycji, otwartość danych i szybkość wyszukiwania pełnotekstowego: ```text -content_json Dokument TipTap/ProseMirror, główne źródło dla edytora -content_markdown Format API, agentów, importu i eksportu -content_text Tekst do wyszukiwania, podsumowań i indeksowania +content_json Dokument TipTap/ProseMirror, autorytatywny format dla edytora +content_markdown Format API, agentów, eksportu i integracji z zewnętrznym ekosystemem +content_text Format do wyszukiwania pełnotekstowego, podsumowań i indeksowania ``` -W **Profil → Import i eksport** można wyeksportować lub zaimportować archiwum ZIP EdgeEver. Katalog `notes/` zawiera czytelne pliki Markdown, a dane strukturalne pozwalają całkowicie odtworzyć instancję. Import zachowuje niezwiązane dane w instancji docelowej i nadpisuje rekordy o tych samych identyfikatorach EdgeEver. +### Kluczowe mechanizmy i decyzje projektowe -### Kompresja obrazów +- **Cicha kompresja po stronie klienta**: Aby uniknąć zużywania limitów obliczeniowych na środowiskach Serverless (np. Cloudflare Workers), kompresja obrazów odbywa się w całości w kliencie Web przed wysłaniem (konwersja PNG/JPEG/WebP/AVIF na WebP, ograniczenie dłuższego boku do 2560px; brak powiększenia rozmiaru zachowuje oryginał). Punkty końcowe REST API i MCP zapisują bezpośrednio oryginalną treść otrzymaną od klienta. +- **Offline-first i harmonogram synchronizacji**: Aplikacje Web, PWA i desktopowe przesyłają zmiany automatycznie po 30 sekundach braku aktywności w pisaniu, a przy widocznym oknie sprawdzają zmiany w chmurze co 5 minut. Ponowne przejście do aplikacji lub ręczne odświeżenie natychmiast synchronizuje dane. Wartości te można konfigurować przez `DEFERRED_MEMO_SYNC_DELAY_MS` i `BACKGROUND_WORKSPACE_REFRESH_INTERVAL_MS` w [`apps/web/src/lib/workspace-refresh.ts`](apps/web/src/lib/workspace-refresh.ts). -Obrazy są kompresowane przed przesłaniem w aplikacji Web; steruje tym ustawienie **Kompresuj obrazy w notatkach**. Po włączeniu pliki PNG, JPEG, WebP i AVIF są konwertowane na WebP, jeśli zmniejsza to ich rozmiar. Najdłuższy bok jest ograniczony do `2560px`. Gdy kompresja nie daje oszczędności, aplikacja zachowuje oryginał. +### Współtworzenie kodu -EdgeEver nie przetwarza obrazów po stronie Workera, co ogranicza zużycie zasobów obliczeniowych i limitów przetwarzania. Przesyłanie przez REST API i MCP przechowuje plik otrzymany od klienta bez dodatkowej kompresji na serwerze. +Serdecznie zapraszamy społeczność do współtworzenia projektu! Przed przesłaniem kodu pamiętaj o poniższych zasadach: -### Czas synchronizacji - -Aplikacje Web, PWA i desktopowa przesyłają zmiany notatek po 30 sekundach bezczynności i sprawdzają zmiany zdalne co 5 minut, gdy są widoczne. Ponowne przejście do aplikacji i ręczne odświeżenie działają od razu. Parametry `DEFERRED_MEMO_SYNC_DELAY_MS` i `BACKGROUND_WORKSPACE_REFRESH_INTERVAL_MS` znajdują się w [`apps/web/src/lib/workspace-refresh.ts`](apps/web/src/lib/workspace-refresh.ts). +- Przed wniesieniem zmian przeczytaj [poradnik współtworzenia](CONTRIBUTING.md). +- **Izolacja wdrożenia i gałęzi**: Jeśli Twój GitHub Fork służy również do wdrożenia EdgeEver online, pozostaw jego gałąź `main` wyłącznie do wdrożeń. Do prac rozwojowych i pull requestów utwórz osobną gałąź od oficjalnego `upstream/main`; nie twórz zmian bezpośrednio na gałęzi `main` ani nie wykonuj na niej opcji Sync fork. --- ## Społeczność i opinie -- Błędy, propozycje funkcji i problemy z wdrożeniem zgłaszaj przez [GitHub Issues](https://github.com/tianma-if/edgeever/issues). -- Przed wniesieniem zmian przeczytaj [poradnik współtworzenia](CONTRIBUTING.md). Jeśli Twój Fork służy również do wdrożenia EdgeEver, pozostaw jego gałąź `main` wyłącznie do wdrożeń. Do synchronizacji, prac rozwojowych i pull requestów utwórz osobną gałąź od oficjalnego `upstream/main`; nie rozwijaj aplikacji ani nie używaj opcji Sync fork na wdrożeniowej gałęzi `main`. +- **Zgłaszanie uwag i propozycji**: Błędy, propozycje funkcji i pytania dotyczące wdrożenia zgłaszaj przez [GitHub Issues](https://github.com/tianma-if/edgeever/issues). ### Społeczność na Telegramie diff --git a/README.zh-CN.md b/README.zh-CN.md index 9bdec86d..9325005c 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -160,44 +160,57 @@ curl -fsSL https://edgeever.org/install.sh | bash --- -## 数据迁移与进阶使用 +## 进阶配置与管理 -### 导入与迁移 (Migration) +### 数据导入导出与备份 -如果你想从其他笔记软件迁移到 EdgeEver,请参考以下极简迁移指引: +无论是日常数据备份、跨实例无缝迁移,还是从已有笔记平台迁入,EdgeEver 均提供完整可靠的数据流转方案: -- **印象笔记(Evernote)的迁入**:请参考 [docs/evernote-migration-guide.md](docs/evernote-migration-guide.md) -- **flomo 笔记的迁入**:请参考 [docs/flomo-migration-guide.md](docs/flomo-migration-guide.md) -- **Memos 笔记的迁入**:请参考 [docs/memos-migration-guide.md](docs/memos-migration-guide.md) -- **Notion 笔记的迁入**:请参考 [docs/notion-migration-guide.md](docs/notion-migration-guide.md) +- **EdgeEver 原生备份与还原**:在应用内进入 **个人中心** -> **导入与导出**,可随时导出或导入 EdgeEver ZIP 档案包。解压后的 `notes/` 目录保留清晰的纯文本 Markdown 文件与附件,可直接用于本地归档或独立阅读;内部结构化元数据则支持在不同 EdgeEver 实例间无损全量还原。导入时保留目标实例的既有数据,同 ID 内容自动覆盖更新。 +- **第三方笔记平滑迁入**: + - **印象笔记(Evernote)迁入**:请参考 [docs/evernote-migration-guide.md](docs/evernote-migration-guide.md) + - **flomo 笔记迁入**:请参考 [docs/flomo-migration-guide.md](docs/flomo-migration-guide.md) + - **Memos 笔记迁入**:请参考 [docs/memos-migration-guide.md](docs/memos-migration-guide.md) + - **Notion 笔记迁入**:请参考 [docs/notion-migration-guide.md](docs/notion-migration-guide.md) -### MCP +### AI 与 MCP 协议互联 在 **个人中心** -> **API / MCP** 中创建 API Token 并一键复制 Remote MCP 配置,即可让 Claude Code、Cursor、Antigravity、OpenClaw 等 AI Agent 在账号授权范围内安全管理你的知识库。系统支持文本笔记、图表笔记(思维导图、流程图与架构图)、多维表格笔记与原生海报笔记的完整增删改查,Agent 还可管理笔记本目录、标签、附件、历史版本、笔记模板与 AI 指令。 > 💡 **场景启发:** > 让 AI 真正成为你的知识管家与创作外脑——不仅能将方案秒级生成为可交互的思维导图、流程图、架构图与多维表格,还能为 AI Agent 提供私有知识上下文。依托 EdgeEver 强大的富文本编辑与精美排版能力,AI 协同沉淀的不再是冰冷文本,而是结构工整、排版优雅、随时可一键分发的高品质知识资产。 -### 多账号登录与存储用量 +### 多账号登录与存储管理 部署完成后,单个实例支持多账号登录。 实例管理员可以在 **个人中心** -> **账号管理** 中创建、停用成员账号或重置密码。每个成员拥有完全隔离的个人空间,包括笔记本、笔记、附件、回收站、导入导出和 MCP Token 等。系统同时提供直观的存储用量面板,可实时掌握实例整体与各账号的附件存储占用明细。 -### 高级对象存储与第三方图床 +### 存储扩展与第三方图床 - **OSS 对象存储**:实例 Owner 可在**设置 → 高级设置 → OSS 对象存储**中配置兼容 S3 API 的对象存储。切换存储不会迁移或影响已有附件。 - **桌面端 PicGo 图床**:桌面端支持可选接入本机 PicGo 客户端服务,在笔记中插入图片时可直接上传至 GitHub、SM.MS、又拍云、七牛云或自建图床,进一步减少自托管实例的存储开销与流量占用。 -### 插件与主题 +### 插件与个性化主题 Web 与桌面端支持功能插件与个性化主题,可从官方市场、GitHub 或 Manifest 地址一键安装,并随工作区跨端同步。开发者可使用 `@edgeever/plugin-api` 扩展能力,详见[插件开发文档](docs/plugin-development.zh-CN.md)与[官方插件市场上架政策](docs/plugin-marketplace-policy.zh-CN.md)。 --- -## 开发者指南与架构 +## 开发者指南与贡献 -### 技术栈 +### 快速开始 + +```sh +bun install +bun run dev +``` + +本地开发默认自动登录,首次账号为 `owner` / `edgeever-local-dev`;测试登录页可主动退出登录。 + +### 架构设计与技术栈 + +#### 技术栈选型 - Bun workspace monorepo,包含 Web、API、官网与共享类型包。 - 前端:Vite、React、React Router、TanStack Query,UI 基于 Tailwind CSS、shadcn/ui、Radix UI。 @@ -209,16 +222,7 @@ Web 与桌面端支持功能插件与个性化主题,可从官方市场、GitH - 后端:一套基于 Hono/Zod 的业务应用,提供 REST API 与 Remote MCP;Cloudflare 使用 Workers/D1/R2,Docker 使用 Bun/SQLite/本地文件或 S3。 - 官网:Astro 静态站点,位于 `apps/site`,可独立构建并部署到 Cloudflare Pages。 -### 快速开始 - -```sh -bun install -bun run dev -``` - -本地开发默认自动登录,首次账号为 `owner` / `edgeever-local-dev`;测试登录页可主动退出登录。 - -### 目录结构 +#### 目录结构 ```text apps/web Vite + React 前端、PWA、离线草稿与同步队列 @@ -239,34 +243,33 @@ docs 架构、迁移与部署文档 wrangler.toml Cloudflare Workers、Assets、D1、R2 配置 ``` -### 内容格式 +#### 数据存储模型 -EdgeEver 同时保存三种内容形态: +EdgeEver 在数据库中同时保存三种内容形态,以兼顾编辑性能、开放性与全库检索效率: ```text content_json TipTap/ProseMirror 文档,编辑器权威格式 -content_markdown API、Agent、导入导出使用 -content_text 搜索、摘要和索引使用 +content_markdown API、Agent、导入导出与外部生态消费格式 +content_text 全文搜索、摘要与快速索引使用 ``` -请打开 **我的** -> **导入与导出**,导出或导入 EdgeEver ZIP。压缩包中的 `notes/` 目录可直接作为 Markdown 阅读和迁移,结构化数据则用于在 EdgeEver 实例之间完整恢复;导入时目标实例中的无关数据会保留,相同 EdgeEver ID 的内容会被覆盖。 +### 核心机制与设计决策 -### 图片压缩规则 +- **端侧静默压缩**:为避免在 Serverless(如 Cloudflare Worker)上执行图片转码消耗宝贵的计算额度,图片压缩全部放在 Web 客户端上传前完成(PNG/JPEG/WebP/AVIF 转 WebP,最大边限制 2560px;不减小体积则保留原图)。服务端 REST API 与 MCP 接口直接入库客户端传输的原始内容。 +- **离线优先与同步时序**:Web、PWA 与桌面端会在用户停止编辑 30 秒后自动上传增量,并在前台页面可见时每 5 分钟拉取一次云端变更;窗口重聚焦或手动刷新时立即同步。开发者可在 [`apps/web/src/lib/workspace-refresh.ts`](apps/web/src/lib/workspace-refresh.ts) 中调整相关时序常量(`DEFERRED_MEMO_SYNC_DELAY_MS` 与 `BACKGROUND_WORKSPACE_REFRESH_INTERVAL_MS`)。 -图片压缩仅在 Web 端上传前执行,由设置页的“压缩笔记内图片”开关控制。启用后,浏览器会把 PNG、JPEG、WebP、AVIF 尝试压缩为 WebP,并将最长边限制在 `2560px` 以内;如果压缩结果不比原图小,则保留原图。 +### 参与代码贡献 -Cloudflare Worker 侧执行图片处理会消耗计算/图片处理额度,因此 EdgeEver 将图片压缩放在 Web 客户端完成;REST API 或 MCP 上传入口会按客户端提供的文件内容直接入库,不再由服务端自动压缩。 +我们非常欢迎社区贡献!贡献前请留意以下约定: -### 同步时序 - -Web、PWA 与桌面端会在停止编辑 30 秒后上传笔记,并在页面可见时每 5 分钟检查云端变更;窗口聚焦与手动刷新仍会立即拉取。可在 [`apps/web/src/lib/workspace-refresh.ts`](apps/web/src/lib/workspace-refresh.ts) 中调整 `DEFERRED_MEMO_SYNC_DELAY_MS` 和 `BACKGROUND_WORKSPACE_REFRESH_INTERVAL_MS`。 +- 提交代码前请仔细阅读 [贡献代码须知](CONTRIBUTING.zh-CN.md)。 +- **分支与部署隔离**:如果您的 GitHub Fork 同时用于在线部署 EdgeEver,请将 `main` 分支严格保留为只读部署分支;请从官方 `upstream/main` 创建新分支进行功能开发并提交 Pull Request,严禁在部署用的 `main` 分支上直接修改代码或执行 Sync fork。 --- ## 社区与反馈 -- Bug、功能建议和部署问题请优先提交 [GitHub Issues](https://github.com/tianma-if/edgeever/issues),方便后续用户检索和复用解决方案。 -- 贡献代码前请阅读[贡献代码须知](CONTRIBUTING.zh-CN.md)。如果您的 Fork 同时用于部署 EdgeEver,请将 `main` 分支仅用于部署;从官方 `upstream/main` 新建独立分支,在该分支中同步上游、开发并提交 Pull Request,不要在部署用的 `main` 上开发或执行 Sync fork。 +- **问题反馈与功能建议**:遇到 Bug、功能建议或部署疑问,请优先提交 [GitHub Issues](https://github.com/tianma-if/edgeever/issues),方便社区沉淀并检索解决方案。