diff --git a/docs/reference.md b/docs/reference.md new file mode 100644 index 000000000..3347407f8 --- /dev/null +++ b/docs/reference.md @@ -0,0 +1,165 @@ +# Technical reference + +[Back to the product overview](../readme.md) + +## 🔗 Routes and URL parameters + +| Route | What it is | +| --------------------- | ------------------------------------------------------------------ | +| `/` | Landing page. No editor bundle is loaded until you open something. | +| `/editor` | The editor. | +| `/history` | Documents this browser is holding (see below). | +| `/help`, `/changelog` | Generated from the markdown under `content/`. | + +Parameters on `/editor`: + +| Parameter | Description | +| -------------- | ------------------------------------------------------------------------------------------------------------------------ | +| `src=` | Open a document from a URL (the URL must allow CORS) | +| `file=` | Same, legacy spelling; wins if both are present | +| `new=docx` | Start a blank document (`docx`, `xlsx`, `pptx`) | +| `saved=` | Reopen one of this browser's saved documents — the editor puts its own id here, so a reload returns to the same document | +| `readonly=1` | Open for viewing: editing and export are disabled | +| `embed=1` | Embed mode; the host page drives the editor over postMessage | +| `locale=zh-CN` | Interface language | + +## 🔐 Local editing and data handling + +Editing and conversion run locally. Where the browser allows it, saving writes +straight back into the file you picked, so the document lives in your own file +system and not in a downloads folder. Two things are kept in the browser +itself, and both are yours to remove: + +- **Copies of what you edited.** While you work, the editor saves the document + into this browser (IndexedDB) so a refresh, a closed tab or a crash does not + cost you the work. Reopening the editor offers it back. These copies exist so + you can pick up where you left off — they are not a backup, so keep exporting + anything you want to keep. +- **Seven days, then gone.** Each document is deleted automatically seven days + after you last edited or opened it, whether or not you come back. + +[`/history`](https://edit.chaxus.com/history) lists what is stored, with a +delete on every row, a delete-all, and a switch to turn autosave off entirely. +Deleting there takes effect immediately. On a shared machine, that is the page +to visit. + +The optional AI assistant is off by default. With an on-device model, document content stays on your device. When you connect an AI service, the content needed for your request is sent to that service. Browser dictation may use an online speech service. In embed mode, exported files are returned to the parent application, which controls subsequent uploads. + +## 🧩 Embedding via iframe + +Embed the editor and drive it over postMessage. The usual split is: your system +handles auth and storage, the iframe handles editing. + +```html + +``` + +```js +// Open a document +iframe.contentWindow.postMessage( + { id: '1', type: 'document:open-url', payload: { url: 'https://example.com/doc.xlsx' } }, + 'https://your-deployment', +); + +// Listen for the result +window.addEventListener('message', (e) => { + if (e.data?.type === 'document:opened') console.log('Ready to edit'); + if (e.data?.type === 'document:saved') uploadFile(e.data.payload.file); +}); +``` + +Embedded editors keep no local history — the document belongs to the host page. + +→ **[Full API reference](embed-api.md)** — every message type, the origin +allowlist, read-only mode and the save flow. + +Also available as a component: this project powers the document preview in +[@ranui/preview](https://www.npmjs.com/package/@ranui/preview) +([docs](https://chaxus.github.io/ran/src/ranui/preview/)). + +## 🚀 Deployment + +A static build — no runtime, no database. + +```bash +pnpm build # outputs to dist/ +``` + +### Static hosting (Cloudflare Pages, Nginx, Vercel, Netlify…) + +Upload `dist/`. `public/_headers` carries the caching contract the site expects +(hashed assets immutable, service worker never cached); hosts that ignore it +still work, they just revalidate more. + +For Nginx, serve `index.html` as the fallback for unknown routes: + +```nginx +location / { + root /var/www/document; + try_files $uri $uri/ /index.html; +} +``` + +### GitHub Pages + +`.github/workflows/pages-build-site.yml` builds and deploys on push to `main`. +Enable Pages in the repository settings with **GitHub Actions** as the source. + +### Docker + +```bash +# Basic +docker run -d --name document -p 8080:80 ghcr.io/ranuts/document:latest + +# With HTTPS and basic auth +docker run -d --name document -p 443:443 \ + -v /path/to/certs:/ssl \ + -e SERVER_BASIC_AUTH='user:$2y$...' \ + -e SERVER_HTTP2_TLS=true \ + -e SERVER_HTTP2_TLS_CERT=/ssl/cert.pem \ + -e SERVER_HTTP2_TLS_KEY=/ssl/key.pem \ + ghcr.io/ranuts/document:latest +``` + +`SERVER_BASIC_AUTH` takes a BCrypt hash. Keep it single-quoted in shell commands +so `$` characters stay literal. Caching for the image is configured in `sws.toml`. + +## 🔤 Fonts + +The vendored OnlyOffice build ships its font library in `public/fonts/`, indexed +by `public/sdkjs/common/AllFonts.js`. Fonts are fetched on demand — a document +only pulls the ones it actually uses. + +→ **[Font management guide](fonts.md)** — the indexed catalog's wire +format, the registries, and adding fonts with `bin/font-catalog.mjs`. + +## 🛠 Development + +```bash +pnpm install --frozen-lockfile +pnpm run dev # dev server +pnpm run build # production build (bin/build.sh) +pnpm run lint # oxlint + tsc + docker config +pnpm run test # unit tests (Vitest) +pnpm run test:e2e # end-to-end tests (Playwright, real editor + real WASM) +``` + +The end-to-end suite drives the real editor and the real converter rather than +mocks, including document round trips, the embed protocol and the recovery +flow. [`explorations/`](explorations/) records why each non-obvious piece is the way it is — +worth a look before changing the editor integration. + +## WebMCP agent tools + +Where the browser supports it, the page registers tools an in-browser agent can +call directly instead of driving the UI: `open_document_url`, +`open_document_buffer`, `create_document`, `save_document`, `get_document_text`, +`set_readonly`, `get_document_state`. The browser fetches and converts files +locally; an external agent controls how it handles returned content. Where +the API is absent, this is a no-op. + +Tools are available on top-level editor pages when the browser provides the WebMCP API. Direct full-text reading currently supports word-processing documents; other document types can be exported with `save_document` for the agent to read. diff --git a/readme.de.md b/readme.de.md index e2a1e8882..5b9311eaf 100644 --- a/readme.de.md +++ b/readme.de.md @@ -1,7 +1,3 @@ -

- Document Editor -

- # Online-Dokumenteneditor

@@ -17,10 +13,8 @@ Live site - - AI Assistant: Experimental Beta -

+

English | 简体中文 | @@ -32,69 +26,35 @@ فارسی

-Bearbeiten Sie Word-, Excel- und PowerPoint-Dateien und kommentieren Sie PDFs direkt im Browser. Eine Office-Installation oder ein Konto ist nicht erforderlich. Bearbeitung und Konvertierung erfolgen lokal; bei Bedarf können Sie den experimentellen KI-Assistenten aktivieren. - -**Live-Website: [edit.chaxus.com](https://edit.chaxus.com/)** +**Ein quelloffener Dokumentenarbeitsplatz für dich und deine KI-Agenten.** ---- +Word, Excel und PowerPoint im Browser öffnen, bearbeiten, konvertieren und speichern sowie PDFs kommentieren. Die grundlegende Dokumentenverarbeitung läuft lokal, ohne Konto oder Office-Installation. -## ✨ Funktionen +Nutze optionale KI-Unterstützung (Experimental Beta), Dokumentenwerkzeuge für Browser-Agenten über WebMCP oder die PWA-Installation. Zwischengespeicherte Editor-Ressourcen funktionieren offline; du kannst den Editor auch selbst hosten oder in deine App einbetten. -- 🔒 **Lokale Bearbeitung** — Konvertierung, Bearbeitung und Export erfolgen im Browser; Sie wählen, wo optionale KI-Anfragen verarbeitet werden -- 📝 **Echtes Bearbeiten, keine Vorschau** — DOCX, XLSX, PPTX und CSV, dazu ODF, RTF, TXT und die alten Binärformate; PDFs lassen sich öffnen und kommentieren -- 🕓 **Arbeit fortsetzen** — Lokale Wiederherstellungskopien helfen beim erneuten Öffnen; sie werden 7 Tage aufbewahrt und können jederzeit gelöscht werden ([Einzelheiten](#-lokale-bearbeitung-und-datenverarbeitung)) -- 📴 **Funktioniert offline** — als PWA installierbar; zwischengespeicherte Editor-Ressourcen sind offline nutzbar; nicht gespeicherte Ressourcen und entfernte Dateien benötigen Netz -- 🌍 **Mehrsprachig** — 7 Oberflächensprachen für die Website, 45 für den Editor selbst -- 🧩 **Einbettbar** — vollständige postMessage-API für die iframe-Integration -- ✨ **KI-Dokumentassistent (Experimental Beta)** — Texte entwerfen, Tabellen bearbeiten, Folien erstellen und Fragen zu PDFs stellen – mit einem lokalen Modell oder Ihrem eigenen KI-Dienst. -- 🤖 **Bereit für Agenten** — stellt WebMCP-Werkzeuge bereit, mit denen ein KI-Agent im Browser Dokumente öffnen, umwandeln und lesen kann -- 🚀 **Überall betreibbar** — ein statischer Build; ein Verzeichnis hinter irgendeinem Webserver +**Online ausprobieren: [edit.chaxus.com](https://edit.chaxus.com/)** --- -## KI-Dokumentassistent (Experimental Beta) - -Beschreiben Sie die Aufgabe und prüfen Sie das Ergebnis im Dokument. Entwerfen Sie einen Text, füllen Sie eine Spalte, erstellen Sie eine Folie oder stellen Sie Fragen zur aktuellen PDF-Seite. Prüfen oder verwerfen Sie Änderungsvorschläge; angewendete Änderungen können Sie rückgängig machen. - -**Noch experimentell.** Antworten und Änderungen können falsch sein. Prüfen Sie wichtige Ergebnisse. Der Assistent ist standardmäßig deaktiviert. Wählen Sie ein lokales Modell oder Ihren eigenen KI-Dienst. Externe Dienste erhalten die für Ihre Anfrage benötigten Inhalte. - -| Word | Excel | -| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [![Entwerfen, einfügen, zusammenfassen und rückgängig machen](docs/media/ai-demos/word-ai.jpg)](https://github.com/user-attachments/assets/8d1d6386-e33a-45f2-b968-b8695c8f7da9) | [![Ausfüllen, berechnen, sortieren und rückgängig machen](docs/media/ai-demos/excel-ai.jpg)](https://github.com/user-attachments/assets/5bb253d7-3cc5-4f31-989e-0c88dcb1615c) | -| **Entwerfen, einfügen, zusammenfassen und rückgängig machen** | **Ausfüllen, berechnen, sortieren und rückgängig machen** | -| PowerPoint | PDF | -| [![Erstellen, duplizieren und rückgängig machen](docs/media/ai-demos/pptx-ai.jpg)](https://github.com/user-attachments/assets/db3fc7a7-b54e-4147-a7ca-e7f16243618e) | [![Lesen, Fragen stellen und Notizen prüfen](docs/media/ai-demos/pdf-ai.jpg)](https://github.com/user-attachments/assets/f01c2da6-0669-4111-87c1-c4440f4a60e9) | -| **Erstellen, duplizieren und rückgängig machen** | **Lesen, Fragen stellen und Notizen prüfen** | - -Klicken Sie auf eine Vorschau, um einen vollständigen Ablauf in normaler Geschwindigkeit mit Zeit zum Lesen der Ergebnisse anzusehen. Die englischen Videos verwenden das lokale Qwen3-4B-Modell und fiktive Informationen. Das Modell ist vor Beginn der Aufnahme geladen; die Antwortzeit hängt von Modell und Gerät ab. - -[Videos, englische Untertitel und Beschreibungen](docs/media/ai-demos/README.md) +## ✨ Funktionen -PDF-Funktionen nutzen auswählbaren Text der aktuellen Seite und Seitennotizen. Sie erkennen keinen Text in gescannten Bildern und schreiben keinen PDF-Fließtext um. - ---- +- **Lokal bearbeiten und konvertieren.** Dokumente werden auf deinem Gerät verarbeitet, ohne erforderlichen Upload. +- **Flexibel speichern.** Direkt in die gewählte Datei, wenn der Browser es unterstützt, sonst als Download. Öffne zuletzt bearbeitete Dokumente aus diesem Browser erneut. +- **Mit KI arbeiten (Experimental Beta).** Texte entwerfen und überarbeiten, Tabellendaten bearbeiten, Folien erstellen oder Fragen zur aktuellen PDF-Seite stellen. Änderungen vor dem Anwenden prüfen. +- **Agenten nutzen Dokumentenwerkzeuge.** In [WebMCP](docs/reference.md#webmcp-agent-tools)-kompatiblen Browsern können KI-Agenten Dateien öffnen, konvertieren und exportieren sowie Text aus Textdokumenten lesen. +- **Als PWA installieren.** Wie eine App nutzen; zwischengespeicherte Editor-Ressourcen funktionieren auch offline. +- **Selbst hosten oder einbetten.** Als statische Website betreiben oder über die iframe-API in deine App integrieren. ## 🚀 Schnellstart -**Einfach nutzen:** [edit.chaxus.com](https://edit.chaxus.com/) — nichts zu installieren. +[Neues Dokument](https://edit.chaxus.com/editor?new=docx&locale=de-DE) · [Neue Tabelle](https://edit.chaxus.com/editor?new=xlsx&locale=de-DE) · [Neue Präsentation](https://edit.chaxus.com/editor?new=pptx&locale=de-DE) -**Selbst betreiben mit Docker:** +Oder selbst betreiben: ```bash docker run -d --name document -p 8080:80 ghcr.io/ranuts/document:latest ``` -**Aus dem Quelltext starten:** - -```bash -git clone https://github.com/ranuts/document.git -cd document -pnpm install -pnpm run dev -``` - ---- - ## 📄 Formate | Art | Bearbeiten | Öffnet außerdem | @@ -104,182 +64,63 @@ pnpm run dev | Präsentationen | `.pptx` | `.ppt` `.odp` | | PDF | kommentieren, ausfüllen, exportieren | `.pdf` | -Alles davon lässt sich als PDF exportieren. CSV behält beim Export seine Kodierung -(UTF-8, GB18030 und Latin-1 werden beim Öffnen erkannt). - ---- - -## 🔗 Routen und URL-Parameter - -| Route | Was es ist | -| --------------------- | ---------------------------------------------------------------- | -| `/` | Startseite. Der Editor wird erst geladen, wenn Sie etwas öffnen. | -| `/editor` | Der Editor. | -| `/history` | Dokumente, die dieser Browser aufbewahrt (siehe unten). | -| `/help`, `/changelog` | Erzeugt aus dem Markdown unter `content/`. | +Unterstützte Dokumente lassen sich als PDF exportieren. -Parameter für `/editor`: - -| Parameter | Beschreibung | -| ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `src=` | Ein Dokument von einer URL öffnen (die URL muss CORS erlauben) | -| `file=` | Dasselbe in alter Schreibweise; gewinnt, wenn beide gesetzt sind | -| `new=docx` | Ein leeres Dokument anlegen (`docx`, `xlsx`, `pptx`) | -| `doc=` | Ein Dokument aus dem Verlauf dieses Browsers erneut öffnen — der Editor trägt hier seine eigene ID ein, ein Neuladen kehrt also zum selben Dokument zurück | -| `readonly=1` | Nur zum Ansehen öffnen: Bearbeiten und Exportieren sind deaktiviert | -| `embed=1` | Einbettmodus; die einbettende Seite steuert den Editor über postMessage | -| `locale=de` | Sprache der Oberfläche | - ---- +Mehrsprachige Oberflächen, helle und dunkle Designs sowie schreibgeschützte Vorschauen werden ebenfalls unterstützt. ## 🔐 Lokale Bearbeitung und Datenverarbeitung -Bearbeitung und Konvertierung laufen lokal. Zwei Dinge bleiben lokal liegen, und beide -können Sie selbst entfernen: +Wiederherstellungskopien bleiben nach dem letzten Bearbeiten oder Öffnen 7 Tage in diesem Browser. Lösche sie unter [Gespeicherte Dokumente](https://edit.chaxus.com/history). Sie sind kein Backup; exportiere wichtige Dateien. -- **Kopien dessen, was Sie bearbeitet haben.** Während Sie arbeiten, sichert der Editor - das Dokument in diesem Browser (IndexedDB), damit ein Neuladen, ein geschlossener Tab - oder ein Absturz die Arbeit nicht kostet. Beim nächsten Öffnen bietet er sie wieder an. - Diese Kopien sind dazu da, dass Sie weitermachen können — sie sind keine Sicherung, - exportieren Sie also weiterhin alles, was Sie behalten wollen. -- **Sieben Tage, dann weg.** Jedes Dokument wird sieben Tage nach der letzten Bearbeitung - oder Öffnung automatisch gelöscht, ob Sie zurückkommen oder nicht. +Externe KI-Dienste erhalten die für deine Anfrage benötigten Inhalte. Gerätemodelle verarbeiten sie lokal. Diktieren kann einen Online-Sprachdienst nutzen; eingebettete Exporte verarbeitet die Host-App. -[`/history`](https://edit.chaxus.com/history) listet auf, was gespeichert ist, mit einem -Löschen pro Zeile, einem Alles-Löschen und einem Schalter, der das automatische Speichern -ganz abstellt. Löschen wirkt dort sofort. Auf einem gemeinsam genutzten Rechner ist das -die Seite, die man aufsucht. +Der gewählte Browser-KI-Agent bestimmt, wie er die von Dokumentenwerkzeugen zurückgegebenen Inhalte verarbeitet. -Der KI-Assistent ist standardmäßig deaktiviert. Mit einem lokalen Modell bleiben Inhalte auf Ihrem Gerät. Wenn Sie Ihren eigenen KI-Dienst verbinden, erhält dieser die für Ihre Anfrage benötigten Inhalte. Die Browser-Diktierfunktion kann einen Online-Spracherkennungsdienst nutzen. Im eingebetteten Modus gehen Exporte an die übergeordnete Anwendung, die weitere Uploads kontrolliert. +## Dokumentation und Integration ---- - -## 🧩 Einbetten per iframe +[Benutzerhandbuch](https://edit.chaxus.com/de/help) · [Hosting, URLs und Integration](docs/reference.md) · [Einbettungs-API](docs/embed-api.md) · [Schriften](docs/fonts.md) -Betten Sie den Editor ein und steuern Sie ihn über postMessage. Die übliche Aufteilung: -Ihr System kümmert sich um Anmeldung und Speicherung, das iframe ums Bearbeiten. +Offline sind zwischengespeicherte Editor-Ressourcen nötig. Nicht gespeicherte Ressourcen und entfernte Dateien benötigen eine Verbindung. -```html - -``` - -```js -// Ein Dokument öffnen -iframe.contentWindow.postMessage( - { id: '1', type: 'document:open-url', payload: { url: 'https://example.com/doc.xlsx' } }, - 'https://your-deployment', -); - -// Auf das Ergebnis hören -window.addEventListener('message', (e) => { - if (e.data?.type === 'document:opened') console.log('Bereit zum Bearbeiten'); - if (e.data?.type === 'document:saved') uploadFile(e.data.payload.file); -}); -``` - -Eingebettete Editoren führen keinen lokalen Verlauf — das Dokument gehört der -einbettenden Seite. - -→ **[Vollständige API-Referenz](docs/embed-api.md)** — jeder Nachrichtentyp, die -Origin-Freigabeliste, der Nur-Lesen-Modus und der Speicherablauf. - -Auch als Komponente verfügbar: Dieses Projekt treibt die Dokumentvorschau in -[@ranui/preview](https://www.npmjs.com/package/@ranui/preview) an -([Dokumentation](https://chaxus.github.io/ran/src/ranui/preview/)). - ---- - -## 🚀 Bereitstellung - -Ein statischer Build — keine Laufzeitumgebung, keine Datenbank. - -```bash -pnpm build # landet in dist/ -``` - -### Statisches Hosting (Cloudflare Pages, Nginx, Vercel, Netlify …) - -`dist/` hochladen. In `public/_headers` steht die Caching-Vereinbarung, von der die Seite -ausgeht (Assets mit Hash unveränderlich, Service Worker niemals im Cache); Hoster, die das -ignorieren, funktionieren trotzdem — sie prüfen nur häufiger nach. - -Bei Nginx `index.html` als Rückfallebene für unbekannte Routen ausliefern: - -```nginx -location / { - root /var/www/document; - try_files $uri $uri/ /index.html; -} -``` - -### GitHub Pages - -`.github/workflows/pages-build-site.yml` baut und veröffentlicht bei jedem Push auf `main`. -Aktivieren Sie Pages in den Repository-Einstellungen mit **GitHub Actions** als Quelle. +## KI-Dokumentassistent (Experimental Beta) -### Docker +Texte entwerfen und überarbeiten, Tabellendaten bearbeiten, Folien erstellen oder Fragen zur aktuellen PDF-Seite stellen. Änderungen vor dem Anwenden prüfen und bei Bedarf rückgängig machen. -```bash -# Einfach -docker run -d --name document -p 8080:80 ghcr.io/ranuts/document:latest +Wähle ein Modell auf deinem Gerät oder verbinde deinen eigenen KI-Dienst. In unterstützten Browsern kannst du Eingaben diktieren. -# Mit HTTPS und Basic Auth -docker run -d --name document -p 443:443 \ - -v /path/to/certs:/ssl \ - -e SERVER_BASIC_AUTH='user:$2y$...' \ - -e SERVER_HTTP2_TLS=true \ - -e SERVER_HTTP2_TLS_CERT=/ssl/cert.pem \ - -e SERVER_HTTP2_TLS_KEY=/ssl/key.pem \ - ghcr.io/ranuts/document:latest -``` +**Experimental Beta.** Standardmäßig deaktiviert. Antworten und Änderungen können falsch sein; wichtige Ergebnisse prüfen. -`SERVER_BASIC_AUTH` erwartet einen BCrypt-Hash; die `$`-Zeichen fürs Shell-Escaping -verdoppeln. Das Caching des Images wird in `sws.toml` festgelegt. +
+Vier Demos ansehen ---- +| Word | Excel | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [![Entwerfen, einfügen, zusammenfassen und rückgängig machen](docs/media/ai-demos/word-ai.jpg)](https://github.com/user-attachments/assets/8d1d6386-e33a-45f2-b968-b8695c8f7da9) | [![Ausfüllen, berechnen, sortieren und rückgängig machen](docs/media/ai-demos/excel-ai.jpg)](https://github.com/user-attachments/assets/5bb253d7-3cc5-4f31-989e-0c88dcb1615c) | +| **Entwerfen, einfügen, zusammenfassen und rückgängig machen** | **Ausfüllen, berechnen, sortieren und rückgängig machen** | +| PowerPoint | PDF | +| [![Erstellen, duplizieren und rückgängig machen](docs/media/ai-demos/pptx-ai.jpg)](https://github.com/user-attachments/assets/db3fc7a7-b54e-4147-a7ca-e7f16243618e) | [![Lesen, Fragen stellen und Notizen prüfen](docs/media/ai-demos/pdf-ai.jpg)](https://github.com/user-attachments/assets/f01c2da6-0669-4111-87c1-c4440f4a60e9) | +| **Erstellen, duplizieren und rückgängig machen** | **Lesen, Fragen stellen und Notizen prüfen** | -## 🔤 Schriften +Vollständige Abläufe in normaler Geschwindigkeit, auf Englisch mit bereits geladenem lokalem Qwen3 4B. Antwortzeiten hängen von Modell und Gerät ab. -Der mitgelieferte OnlyOffice-Build bringt seine Schriftbibliothek in `public/fonts/` mit, -indiziert über `public/sdkjs/common/AllFonts.js`. Schriften werden bei Bedarf geholt — ein -Dokument lädt nur die, die es tatsächlich verwendet. +[Videos, Untertitel und Beschreibungen](docs/media/ai-demos/README.md) -→ **[Leitfaden zur Schriftverwaltung](docs/fonts.md)** — das Format des indizierten -Katalogs, die Registries und das Hinzufügen von Schriften mit `bin/font-catalog.mjs`. +PDF-Unterstützung gilt für auswählbaren Text und Seitennotizen, nicht für Texterkennung in Scans oder das Umschreiben des PDF-Inhalts. ---- +
## 🛠 Entwicklung +Aus dem Quellcode starten: + ```bash +git clone https://github.com/ranuts/document.git +cd document pnpm install --frozen-lockfile -pnpm run dev # Entwicklungsserver -pnpm run build # Produktions-Build (bin/build.sh) -pnpm run lint # oxlint + tsc + Docker-Konfiguration -pnpm run test # Unit-Tests (Vitest) -pnpm run test:e2e # End-to-End-Tests (Playwright, echter Editor + echtes WASM) +pnpm run dev ``` -Die End-to-End-Suite fährt den echten Editor und den echten Konverter statt Mocks, samt -Dokument-Rundläufen, dem Einbettprotokoll und dem Wiederherstellungsablauf. -`docs/explorations/` hält fest, warum jede nicht offensichtliche Stelle so ist, wie sie -ist — ein Blick lohnt sich, bevor Sie die Editor-Integration anfassen. - ---- - -## 🤖 KI-Agenten im Browser (WebMCP) - -Wo der Browser es unterstützt, meldet die Seite Werkzeuge an, die ein Agent direkt -aufrufen kann, statt die Oberfläche zu bedienen: `open_document_url`, -`open_document_buffer`, `create_document`, `save_document`, `get_document_text`, -`set_readonly`, `get_document_state`. Die Dokumente verlassen das Gerät auch dabei nicht — -der Browser holt und wandelt sie selbst. Fehlt die API, passiert schlicht nichts. - ---- +Feedback und Beiträge sind willkommen: [Issues](https://github.com/ranuts/document/issues) · [Pull requests](https://github.com/ranuts/document/pulls) ## 📚 Aufgebaut auf @@ -288,15 +129,12 @@ der Browser holt und wandelt sie selbst. Fehlt die API, passiert schlicht nichts - [ranui / ranuts](https://github.com/chaxus/ran) — das Designsystem und die Werkzeuge, mit denen diese Seite gebaut ist - [se-office](https://github.com/Qihoo360/se-office), [onlyoffice-web-local](https://github.com/sweetwisdom/onlyoffice-web-local) — Vorarbeiten dazu, OnlyOffice ohne Dokumentserver zu betreiben -## 🤝 Mitwirken - -Issues und Pull Requests sind willkommen. `main` ist geschützt: Arbeiten Sie auf einem -Branch und öffnen Sie einen PR, der Lint, Unit-Tests und drei End-to-End-Suites ausführt -(Entwicklungsserver, Cloudflare-Pages-Verhalten und das Produktions-Docker-Image). - ## 📄 Lizenz -[AGPL-3.0](LICENSE). +[AGPL-3.0](LICENSE) · [NOTICE](NOTICE) + +
+Upstream-Hinweise und Marken Dieses Projekt ist eine veränderte Version der ONLYOFFICE-Editoren (sdkjs und web-apps, Copyright Ascensio System SIA). Die Oberfläche verwendet neutrale @@ -317,3 +155,5 @@ Quellverweisen kennzeichnen die zugrunde liegende Technik, nicht unsere Marke. PWA-Installation und Browser-Tabs verwenden ein unabhängig gezeichnetes, neutrales Dokumentsymbol ohne Upstream-Logo, Markenzeichen oder Projektinitialen. + +
diff --git a/readme.es.md b/readme.es.md index 086a453ec..d039ebddd 100644 --- a/readme.es.md +++ b/readme.es.md @@ -1,7 +1,3 @@ -

- Document Editor -

- # Editor de documentos en línea

@@ -17,10 +13,8 @@ Live site - - AI Assistant: Experimental Beta -

+

English | 简体中文 | @@ -32,69 +26,35 @@ فارسی

-Edita archivos de Word, Excel y PowerPoint, y anota PDF directamente en el navegador. No necesitas instalar Office ni crear una cuenta. La edición y conversión se realizan localmente; puedes activar el asistente experimental de IA cuando lo necesites. - -**Sitio en línea: [edit.chaxus.com](https://edit.chaxus.com/)** +**Un espacio de documentos de código abierto para ti y tus agentes de IA.** ---- +Abre, edita, convierte y guarda Word, Excel y PowerPoint, y añade anotaciones a PDF en el navegador. El procesamiento básico de documentos es local, sin cuenta ni instalación de Office. -## ✨ Características +Usa asistencia de IA opcional (Experimental Beta), herramientas de documentos para agentes mediante WebMCP o la instalación como PWA. Los recursos del editor en caché funcionan sin conexión; también puedes alojarlo tú mismo o integrarlo en tu aplicación. -- 🔒 **Edición local** — la conversión, edición y exportación se realizan en el navegador; tú eliges dónde se procesan las solicitudes opcionales de IA -- 📝 **Edición de verdad, no una vista previa** — DOCX, XLSX, PPTX y CSV, además de ODF, RTF, TXT y los antiguos formatos binarios; los PDF se abren y se pueden anotar -- 🕓 **Retoma tu trabajo** — las copias de recuperación locales ayudan a reabrir las ediciones recientes; se conservan 7 días y puedes borrarlas cuando quieras ([detalles](#-edición-local-y-tratamiento-de-datos)) -- 📴 **Funciona sin conexión** — se instala como PWA; los recursos del editor en caché se reutilizan sin conexión; los recursos no almacenados y archivos remotos requieren red -- 🌍 **Multilingüe** — 7 idiomas de interfaz para el sitio y 45 para el editor -- 🧩 **Integrable** — API completa de postMessage para integrarlo en un iframe -- ✨ **Asistente de documentos con IA (Experimental Beta)** — Redacta textos, trabaja con tablas, crea diapositivas y pregunta sobre PDF con un modelo local o tu propio servicio de IA. -- 🤖 **Preparado para agentes** — expone herramientas WebMCP para que un agente de IA del navegador abra, convierta y lea documentos -- 🚀 **Se despliega en cualquier sitio** — una compilación estática; una carpeta de archivos detrás de cualquier servidor web +**Probar en línea: [edit.chaxus.com](https://edit.chaxus.com/)** --- -## Asistente de documentos con IA (Experimental Beta) - -Describe lo que necesitas y comprueba el resultado en el documento. Redacta un texto, rellena una columna, crea una diapositiva o pregunta sobre la página actual de un PDF. Revisa o cancela las propuestas; puedes deshacer los cambios aplicados. - -**Todavía experimental.** Las respuestas y los cambios pueden ser incorrectos. Comprueba los resultados importantes. El asistente está desactivado por defecto. Elige un modelo local o conecta tu propio servicio de IA. Los servicios externos reciben el contenido necesario para tu solicitud. - -| Word | Excel | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [![Redactar, insertar, resumir y deshacer](docs/media/ai-demos/word-ai.jpg)](https://github.com/user-attachments/assets/8d1d6386-e33a-45f2-b968-b8695c8f7da9) | [![Rellenar, calcular, ordenar y deshacer](docs/media/ai-demos/excel-ai.jpg)](https://github.com/user-attachments/assets/5bb253d7-3cc5-4f31-989e-0c88dcb1615c) | -| **Redactar, insertar, resumir y deshacer** | **Rellenar, calcular, ordenar y deshacer** | -| PowerPoint | PDF | -| [![Crear, duplicar y deshacer](docs/media/ai-demos/pptx-ai.jpg)](https://github.com/user-attachments/assets/db3fc7a7-b54e-4147-a7ca-e7f16243618e) | [![Leer, preguntar y revisar notas](docs/media/ai-demos/pdf-ai.jpg)](https://github.com/user-attachments/assets/f01c2da6-0669-4111-87c1-c4440f4a60e9) | -| **Crear, duplicar y deshacer** | **Leer, preguntar y revisar notas** | - -Haz clic en una vista previa para ver un flujo completo a velocidad normal, con tiempo para leer los resultados. Los vídeos usan la interfaz en inglés, Qwen3 4B local e información ficticia. El modelo ya está cargado al comenzar; los tiempos de respuesta dependen del modelo y del dispositivo. - -[Vídeos, subtítulos en inglés y descripciones](docs/media/ai-demos/README.md) +## ✨ Características -La asistencia para PDF usa el texto seleccionable de la página actual y notas de página. No reconoce el texto de imágenes escaneadas ni reescribe el cuerpo del PDF. - ---- +- **Edición y conversión local.** Los documentos se procesan en tu dispositivo sin necesidad de subirlos para editar o convertir. +- **Guarda como prefieras.** En el archivo elegido cuando el navegador lo permite, o mediante descarga. Retoma documentos recientes desde este navegador. +- **Trabaja con IA (Experimental Beta).** Redacta y mejora textos, trabaja con datos de hojas de cálculo, crea diapositivas o pregunta sobre la página PDF actual. Revisa los cambios antes de aplicarlos. +- **Los agentes usan herramientas de documentos.** En navegadores compatibles con [WebMCP](docs/reference.md#webmcp-agent-tools), los agentes de IA pueden abrir, convertir y exportar archivos, y leer texto de documentos de texto. +- **Instálalo como PWA.** Úsalo como una aplicación; los recursos del editor en caché funcionan sin conexión. +- **Alójalo o intégralo.** Despliega un sitio estático o integra el editor en tu aplicación mediante la API de iframe. ## 🚀 Empezar -**Usarlo tal cual:** [edit.chaxus.com](https://edit.chaxus.com/) — nada que instalar. +[Nuevo documento](https://edit.chaxus.com/editor?new=docx&locale=es-ES) · [Nueva hoja de cálculo](https://edit.chaxus.com/editor?new=xlsx&locale=es-ES) · [Nueva presentación](https://edit.chaxus.com/editor?new=pptx&locale=es-ES) -**Alojarlo tú con Docker:** +O ejecuta tu propia copia: ```bash docker run -d --name document -p 8080:80 ghcr.io/ranuts/document:latest ``` -**Ejecutarlo desde el código:** - -```bash -git clone https://github.com/ranuts/document.git -cd document -pnpm install -pnpm run dev -``` - ---- - ## 📄 Formatos | Tipo | Editar | También abre | @@ -104,181 +64,63 @@ pnpm run dev | Presentaciones | `.pptx` | `.ppt` `.odp` | | PDF | anotar, rellenar, exportar | `.pdf` | -Todos ellos se pueden exportar a PDF. El CSV mantiene su codificación al salir (al abrirlo -se detectan UTF-8, GB18030 y Latin-1). - ---- - -## 🔗 Rutas y parámetros de URL - -| Ruta | Qué es | -| --------------------- | ------------------------------------------------------------- | -| `/` | Página de inicio. No se carga el editor hasta que abres algo. | -| `/editor` | El editor. | -| `/history` | Documentos que guarda este navegador (más abajo). | -| `/help`, `/changelog` | Se generan a partir del markdown de `content/`. | +Los documentos compatibles se pueden exportar a PDF. -Parámetros de `/editor`: - -| Parámetro | Descripción | -| ------------ | -------------------------------------------------------------------------------------------------------------------------------------- | -| `src=` | Abrir un documento desde una URL (esa URL debe permitir CORS) | -| `file=` | Lo mismo, en la grafía antigua; si están los dos, gana este | -| `new=docx` | Empezar un documento en blanco (`docx`, `xlsx`, `pptx`) | -| `doc=` | Reabrir un documento del historial de este navegador: el editor pone aquí su propio id, así que al recargar vuelves al mismo documento | -| `readonly=1` | Abrir solo para ver: la edición y la exportación quedan deshabilitadas | -| `embed=1` | Modo integrado; la página anfitriona maneja el editor por postMessage | -| `locale=es` | Idioma de la interfaz | - ---- +También admite interfaces multilingües, temas claro y oscuro y vista previa de solo lectura. ## 🔐 Edición local y tratamiento de datos -La edición y la conversión se realizan localmente. Solo quedan dos cosas guardadas en local, y las -dos puedes borrarlas tú: +Las copias de recuperación se conservan en este navegador durante 7 días desde la última edición o apertura. Puedes eliminarlas en [Documentos guardados](https://edit.chaxus.com/history). No son una copia de seguridad; exporta los archivos importantes. -- **Copias de lo que has editado.** Mientras trabajas, el editor guarda el documento en este - navegador (IndexedDB) para que recargar, cerrar una pestaña o un fallo no te cuesten el - trabajo. Al volver a abrir el editor te lo ofrece de nuevo. Estas copias existen para que - puedas retomar lo que estabas haciendo: no son una copia de seguridad, así que sigue - exportando lo que quieras conservar. -- **Siete días y desaparecen.** Cada documento se borra automáticamente siete días después - de la última vez que lo editaste o lo abriste, vuelvas o no. +Los servicios de IA externos reciben el contenido necesario para tu solicitud. Los modelos locales lo procesan en tu dispositivo. El dictado puede usar un servicio de voz en línea; la aplicación anfitriona gestiona las exportaciones integradas. -[`/history`](https://edit.chaxus.com/history) muestra lo que hay guardado, con un botón de -borrar en cada fila, otro para borrarlo todo y un interruptor para desactivar por completo -el guardado automático. Borrar ahí surte efecto de inmediato. En un ordenador compartido, -esa es la página a la que ir. +El agente de IA del navegador que elijas controla cómo procesa el contenido devuelto por las herramientas de documentos. -El asistente de IA está desactivado por defecto. Con un modelo local, el contenido permanece en tu dispositivo. Si conectas tu propio servicio de IA, el contenido necesario para la solicitud se envía a ese servicio. El dictado del navegador puede usar un servicio de reconocimiento de voz en línea. En modo integrado, los archivos exportados vuelven a la aplicación anfitriona, que controla las subidas posteriores. +## Documentación e integración ---- - -## 🧩 Integración mediante iframe +[Guía de uso](https://edit.chaxus.com/es/help) · [Alojamiento, URL e integración](docs/reference.md) · [API de integración](docs/embed-api.md) · [Fuentes](docs/fonts.md) -Integra el editor y manéjalo por postMessage. El reparto habitual: tu sistema se encarga de -la autenticación y el almacenamiento, y el iframe de la edición. +El uso sin conexión requiere recursos del editor en caché. Los recursos no guardados y los archivos remotos necesitan conexión. -```html - -``` - -```js -// Abrir un documento -iframe.contentWindow.postMessage( - { id: '1', type: 'document:open-url', payload: { url: 'https://example.com/doc.xlsx' } }, - 'https://your-deployment', -); - -// Escuchar el resultado -window.addEventListener('message', (e) => { - if (e.data?.type === 'document:opened') console.log('Listo para editar'); - if (e.data?.type === 'document:saved') uploadFile(e.data.payload.file); -}); -``` - -Los editores integrados no guardan historial local: el documento es de la página anfitriona. - -→ **[Referencia completa de la API](docs/embed-api.md)** — todos los tipos de mensaje, la -lista de orígenes permitidos, el modo de solo lectura y el flujo de guardado. - -También disponible como componente: este proyecto es lo que mueve la vista previa de -documentos de [@ranui/preview](https://www.npmjs.com/package/@ranui/preview) -([documentación](https://chaxus.github.io/ran/src/ranui/preview/)). - ---- - -## 🚀 Despliegue - -Una compilación estática: sin runtime y sin base de datos. - -```bash -pnpm build # se genera en dist/ -``` - -### Alojamiento estático (Cloudflare Pages, Nginx, Vercel, Netlify…) - -Sube `dist/`. En `public/_headers` está el acuerdo de caché que el sitio da por hecho (los -recursos con hash son inmutables, el service worker no se cachea nunca); los alojamientos -que lo ignoran también funcionan, solo revalidan más a menudo. - -En Nginx, sirve `index.html` como respaldo para las rutas desconocidas: - -```nginx -location / { - root /var/www/document; - try_files $uri $uri/ /index.html; -} -``` - -### GitHub Pages - -`.github/workflows/pages-build-site.yml` compila y publica en cada push a `main`. Activa -Pages en los ajustes del repositorio con **GitHub Actions** como origen. +## Asistente de documentos con IA (Experimental Beta) -### Docker +Redacta y mejora textos, trabaja con datos de hojas de cálculo, crea diapositivas o pregunta sobre la página PDF actual. Revisa los cambios antes de aplicarlos y deshazlos cuando lo necesites. -```bash -# Básico -docker run -d --name document -p 8080:80 ghcr.io/ranuts/document:latest +Elige un modelo local o conecta tu propio servicio de IA. Puedes dictar instrucciones en navegadores con entrada de voz. -# Con HTTPS y autenticación básica -docker run -d --name document -p 443:443 \ - -v /path/to/certs:/ssl \ - -e SERVER_BASIC_AUTH='user:$2y$...' \ - -e SERVER_HTTP2_TLS=true \ - -e SERVER_HTTP2_TLS_CERT=/ssl/cert.pem \ - -e SERVER_HTTP2_TLS_KEY=/ssl/key.pem \ - ghcr.io/ranuts/document:latest -``` +**Experimental Beta.** Desactivado por defecto. Las respuestas y los cambios pueden ser incorrectos; comprueba los resultados importantes. -`SERVER_BASIC_AUTH` espera un hash BCrypt; duplica los caracteres `$` para escaparlos en el -shell. El caché de la imagen se configura en `sws.toml`. +
+Ver las cuatro demos ---- +| Word | Excel | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [![Redactar, insertar, resumir y deshacer](docs/media/ai-demos/word-ai.jpg)](https://github.com/user-attachments/assets/8d1d6386-e33a-45f2-b968-b8695c8f7da9) | [![Rellenar, calcular, ordenar y deshacer](docs/media/ai-demos/excel-ai.jpg)](https://github.com/user-attachments/assets/5bb253d7-3cc5-4f31-989e-0c88dcb1615c) | +| **Redactar, insertar, resumir y deshacer** | **Rellenar, calcular, ordenar y deshacer** | +| PowerPoint | PDF | +| [![Crear, duplicar y deshacer](docs/media/ai-demos/pptx-ai.jpg)](https://github.com/user-attachments/assets/db3fc7a7-b54e-4147-a7ca-e7f16243618e) | [![Leer, preguntar y revisar notas](docs/media/ai-demos/pdf-ai.jpg)](https://github.com/user-attachments/assets/f01c2da6-0669-4111-87c1-c4440f4a60e9) | +| **Crear, duplicar y deshacer** | **Leer, preguntar y revisar notas** | -## 🔤 Tipografías +Flujos completos a velocidad normal, en inglés y con el modelo local Qwen3 4B ya cargado. Los tiempos de respuesta varían según el modelo y el dispositivo. -La compilación de OnlyOffice incluida trae su biblioteca de fuentes en `public/fonts/`, -indexada por `public/sdkjs/common/AllFonts.js`. Las fuentes se piden bajo demanda: un -documento solo descarga las que realmente usa. +[Vídeos, subtítulos y descripciones](docs/media/ai-demos/README.md) -→ **[Guía de gestión de fuentes](docs/fonts.md)** — el formato del catálogo indexado, los -registros y cómo añadir fuentes con `bin/font-catalog.mjs`. +La asistencia PDF admite texto seleccionable y notas de página, no reconoce texto en imágenes escaneadas ni reescribe el cuerpo del PDF. ---- +
## 🛠 Desarrollo +Ejecutar desde el código: + ```bash +git clone https://github.com/ranuts/document.git +cd document pnpm install --frozen-lockfile -pnpm run dev # servidor de desarrollo -pnpm run build # compilación de producción (bin/build.sh) -pnpm run lint # oxlint + tsc + configuración de docker -pnpm run test # pruebas unitarias (Vitest) -pnpm run test:e2e # pruebas de extremo a extremo (Playwright, editor real + WASM real) +pnpm run dev ``` -La suite de extremo a extremo mueve el editor real y el convertidor real en lugar de -simulaciones, incluidos los viajes de ida y vuelta de documentos, el protocolo de -integración y el flujo de recuperación. `docs/explorations/` deja por escrito por qué cada -pieza poco evidente es como es: merece una lectura antes de tocar la integración del editor. - ---- - -## 🤖 Agentes de IA en el navegador (WebMCP) - -Donde el navegador lo admite, la página registra herramientas que un agente puede invocar -directamente en vez de manejar la interfaz: `open_document_url`, `open_document_buffer`, -`create_document`, `save_document`, `get_document_text`, `set_readonly`, -`get_document_state`. Los documentos siguen sin salir del dispositivo: es el propio -navegador quien los descarga y los convierte. Donde no existe esa API, no ocurre nada. - ---- +Se agradecen comentarios y contribuciones: [Issues](https://github.com/ranuts/document/issues) · [Pull requests](https://github.com/ranuts/document/pulls) ## 📚 Construido sobre @@ -287,16 +129,12 @@ navegador quien los descarga y los convierte. Donde no existe esa API, no ocurre - [ranui / ranuts](https://github.com/chaxus/ran) — el sistema de diseño y las utilidades con las que está hecho este sitio - [se-office](https://github.com/Qihoo360/se-office), [onlyoffice-web-local](https://github.com/sweetwisdom/onlyoffice-web-local) — trabajos previos sobre cómo usar OnlyOffice sin servidor de documentos -## 🤝 Colaborar - -Las incidencias y los pull requests son bienvenidos. `main` está protegida: trabaja en una -rama y abre un PR, que ejecuta el lint, las pruebas unitarias y tres suites de extremo a -extremo (servidor de desarrollo, comportamiento de Cloudflare Pages e imagen Docker de -producción). - ## 📄 Licencia -[AGPL-3.0](LICENSE). +[AGPL-3.0](LICENSE) · [NOTICE](NOTICE) + +
+Avisos del proyecto original y marcas Este proyecto es una versión modificada de los editores ONLYOFFICE (sdkjs y web-apps, copyright de Ascensio System SIA). La interfaz utiliza nombres @@ -317,3 +155,5 @@ no la marca de este proyecto. La instalación PWA y las pestañas del navegador usan un icono de documento neutral dibujado de forma independiente, sin logotipos, marcas ni iniciales del proyecto. + +
diff --git a/readme.fa.md b/readme.fa.md index eea2edebb..699c35593 100644 --- a/readme.fa.md +++ b/readme.fa.md @@ -1,7 +1,3 @@ -

- Document Editor -

- # ویرایشگر آنلاین سند

@@ -17,10 +13,8 @@ Live site - - AI Assistant: Experimental Beta -

+

English | 简体中文 | @@ -32,69 +26,35 @@ فارسی

-فایل‌های Word، Excel و PowerPoint را ویرایش کنید و روی PDF یادداشت بگذارید؛ همه در مرورگر. به نصب Office یا ساخت حساب نیاز ندارید. ویرایش و تبدیل روی دستگاه انجام می‌شود و در صورت نیاز می‌توانید دستیار آزمایشی هوش مصنوعی را روشن کنید. - -**نشانی سایت: [edit.chaxus.com](https://edit.chaxus.com/)** +**فضای کار متن‌باز اسناد، برای شما و عامل‌های هوش مصنوعی شما.** ---- +فایل‌های Word، Excel و PowerPoint را در مرورگر باز، ویرایش، تبدیل و ذخیره کنید و به PDF یادداشت اضافه کنید. پردازش پایهٔ سندها محلی است و به حساب کاربری یا نصب Office نیاز ندارد. -## ✨ ویژگی‌ها +دستیار اختیاری هوش مصنوعی (Experimental Beta)، فراخوانی ابزارهای سند توسط عامل‌ها از طریق WebMCP و نصب به‌صورت PWA پشتیبانی می‌شوند. منابع کش‌شدهٔ ویرایشگر آفلاین کار می‌کنند؛ می‌توانید آن را خودتان میزبانی یا در برنامهٔ خود جاسازی کنید. -- 🔒 **ویرایش محلی** — تبدیل، ویرایش و خروجی گرفتن در مرورگر انجام می‌شود؛ محل پردازش درخواست‌های اختیاری هوش مصنوعی را خودتان انتخاب می‌کنید -- 📝 **ویرایش واقعی، نه پیش‌نمایش** — DOCX، XLSX، PPTX و CSV، به‌همراه ODF، RTF، TXT و قالب‌های دودویی قدیمی؛ PDF باز می‌شود و می‌توان روی آن یادداشت گذاشت -- 🕓 **ادامهٔ کار اخیر** — نسخه‌های بازیابی در مرورگر به باز کردن دوبارهٔ ویرایش‌ها کمک می‌کنند؛ ۷ روز نگهداری می‌شوند و هر زمان قابل حذف هستند ([جزئیات](#-ویرایش-محلی-و-نحوهٔ-پردازش-داده‌ها)) -- 📴 **آفلاین هم کار می‌کند** — به‌صورت PWA نصب‌شدنی است؛ منابع ذخیره‌شدهٔ ویرایشگر آفلاین قابل استفاده‌اند؛ منابع ذخیره‌نشده و فایل‌های راه دور به شبکه نیاز دارند -- 🌍 **چندزبانه** — ۷ زبان برای رابط سایت و ۴۵ زبان برای خود ویرایشگر -- 🧩 **قابل جاسازی** — رابط برنامه‌نویسی کامل postMessage برای یکپارچه‌سازی در iframe -- ✨ **دستیار هوش مصنوعی (Experimental Beta)** — با مدل محلی یا سرویس هوش مصنوعی خود، متن بنویسید، با جدول کار کنید، اسلاید بسازید و دربارهٔ PDF سؤال بپرسید. -- 🤖 **آمادهٔ عامل‌ها** — ابزارهای WebMCP را در دسترس می‌گذارد تا عامل هوش مصنوعی درون مرورگر بتواند سند را باز کند، تبدیل کند و بخواند -- 🚀 **همه‌جا قابل استقرار** — یک ساخت ایستا؛ پوشه‌ای از پرونده‌ها پشت هر کارساز وب +**امتحان آنلاین: [edit.chaxus.com](https://edit.chaxus.com/)** --- -## دستیار هوش مصنوعی (Experimental Beta) - -خواستهٔ خود را بنویسید و نتیجه را در سند ببینید. متن تهیه کنید، یک ستون را پر کنید، اسلاید بسازید یا دربارهٔ صفحهٔ فعلی PDF سؤال بپرسید. پیشنهادها را بررسی و اعمال یا لغو کنید؛ پس از اعمال نیز می‌توانید تغییر را برگردانید. - -**این قابلیت هنوز آزمایشی است.** پاسخ‌ها و تغییرات ممکن است اشتباه باشند. نتایج مهم را بررسی کنید. دستیار به‌صورت پیش‌فرض خاموش است. مدل محلی یا سرویس هوش مصنوعی خود را انتخاب کنید. محتوای لازم برای درخواست به سرویس خارجی انتخاب‌شده فرستاده می‌شود. - -| Word | Excel | -| --------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [![نوشتن، درج، خلاصه‌سازی و بازگردانی](docs/media/ai-demos/word-ai.jpg)](https://github.com/user-attachments/assets/8d1d6386-e33a-45f2-b968-b8695c8f7da9) | [![پر کردن، محاسبه، مرتب‌سازی و بازگردانی](docs/media/ai-demos/excel-ai.jpg)](https://github.com/user-attachments/assets/5bb253d7-3cc5-4f31-989e-0c88dcb1615c) | -| **نوشتن، درج، خلاصه‌سازی و بازگردانی** | **پر کردن، محاسبه، مرتب‌سازی و بازگردانی** | -| PowerPoint | PDF | -| [![ساختن، تکثیر و بازگردانی](docs/media/ai-demos/pptx-ai.jpg)](https://github.com/user-attachments/assets/db3fc7a7-b54e-4147-a7ca-e7f16243618e) | [![خواندن، پرسیدن و بررسی یادداشت](docs/media/ai-demos/pdf-ai.jpg)](https://github.com/user-attachments/assets/f01c2da6-0669-4111-87c1-c4440f4a60e9) | -| **ساختن، تکثیر و بازگردانی** | **خواندن، پرسیدن و بررسی یادداشت** | - -برای دیدن یک روند کامل با سرعت عادی و زمان کافی برای خواندن نتایج، روی پیش‌نمایش کلیک کنید. ویدیوها با رابط انگلیسی، مدل محلی Qwen3 4B و اطلاعات ساختگی ضبط شده‌اند. مدل پیش از شروع ضبط بارگذاری شده است؛ زمان پاسخ به مدل و دستگاه بستگی دارد. - -[ویدیوها، زیرنویس انگلیسی و توضیحات](docs/media/ai-demos/README.md) +## ✨ ویژگی‌ها -قابلیت‌های PDF از متن قابل انتخاب صفحهٔ فعلی و یادداشت‌های صفحه استفاده می‌کنند. متن تصاویر اسکن‌شده را تشخیص نمی‌دهند و متن اصلی PDF را بازنویسی نمی‌کنند. - ---- +- **ویرایش و تبدیل محلی.** سندها روی دستگاه شما پردازش می‌شوند؛ ویرایش و تبدیل نیازی به بارگذاری سند ندارد. +- **ذخیره به انتخاب شما.** در مرورگرهای سازگار در فایل انتخاب‌شده ذخیره کنید یا خروجی را دانلود کنید. کارهای اخیر را در همین مرورگر ادامه دهید. +- **کار با هوش مصنوعی (Experimental Beta).** متن بنویسید و اصلاح کنید، داده‌های صفحه‌گسترده را پردازش کنید، اسلاید بسازید یا دربارهٔ صفحهٔ فعلی PDF بپرسید. تغییرات را پیش از اعمال بررسی کنید. +- **عامل‌ها ابزارهای سند را فراخوانی می‌کنند.** در مرورگرهای سازگار با [WebMCP](docs/reference.md#webmcp-agent-tools)، عامل‌های هوش مصنوعی می‌توانند فایل‌ها را باز، تبدیل و خروجی بگیرند و متن سندهای متنی را بخوانند. +- **نصب به‌صورت PWA.** مانند یک برنامه استفاده کنید؛ منابع کش‌شدهٔ ویرایشگر به‌صورت آفلاین هم کار می‌کنند. +- **میزبانی یا جاسازی.** یک سایت ایستا میزبانی کنید یا ویرایشگر را با API مبتنی بر iframe در برنامهٔ خود قرار دهید. ## 🚀 شروع سریع -**همین‌طور استفاده کنید:** [edit.chaxus.com](https://edit.chaxus.com/) — چیزی برای نصب نیست. +[سند جدید](https://edit.chaxus.com/editor?new=docx&locale=en) · [صفحه‌گستردهٔ جدید](https://edit.chaxus.com/editor?new=xlsx&locale=en) · [ارائهٔ جدید](https://edit.chaxus.com/editor?new=pptx&locale=en) -**میزبانی خودتان با Docker:** +یا نسخهٔ خود را اجرا کنید: ```bash docker run -d --name document -p 8080:80 ghcr.io/ranuts/document:latest ``` -**اجرا از روی کد:** - -```bash -git clone https://github.com/ranuts/document.git -cd document -pnpm install -pnpm run dev -``` - ---- - ## 📄 قالب‌ها | گونه | ویرایش | باز کردن | @@ -104,179 +64,63 @@ pnpm run dev | ارائه | `.pptx` | `.ppt` `.odp` | | PDF | یادداشت، پر کردن، برون‌بری | `.pdf` | -همهٔ اینها را می‌توان به PDF برون‌بری کرد. CSV هنگام خروج رمزگذاری خود را نگه می‌دارد -(هنگام باز کردن، UTF-8، GB18030 و Latin-1 تشخیص داده می‌شوند). - ---- - -## 🔗 مسیرها و پارامترهای نشانی - -| مسیر | چیست | -| --------------------- | ----------------------------------------------------------- | -| `/` | صفحهٔ آغازین. تا چیزی باز نکنید، ویرایشگر بارگذاری نمی‌شود. | -| `/editor` | خود ویرایشگر. | -| `/history` | سندهایی که این مرورگر نگه داشته است (پایین‌تر). | -| `/help`, `/changelog` | از روی مارک‌داون‌های `content/` ساخته می‌شوند. | +سندهای پشتیبانی‌شده را می‌توان به PDF خروجی گرفت. -پارامترهای `/editor`: - -| پارامتر | توضیح | -| ------------ | ------------------------------------------------------------------------------------------------------------------------------- | -| `src=` | باز کردن سند از یک نشانی (آن نشانی باید CORS را اجازه دهد) | -| `file=` | همان، با املای قدیمی؛ اگر هر دو باشند این یکی برنده است | -| `new=docx` | ساختن سند خالی (`docx`، `xlsx`، `pptx`) | -| `doc=` | باز کردن دوبارهٔ سندی از تاریخچهٔ این مرورگر — ویرایشگر شناسهٔ خودش را اینجا می‌گذارد، پس بارگذاری دوباره به همان سند برمی‌گردد | -| `readonly=1` | باز کردن فقط برای دیدن: ویرایش و برون‌بری غیرفعال می‌شوند | -| `embed=1` | حالت جاسازی؛ صفحهٔ میزبان ویرایشگر را با postMessage هدایت می‌کند | -| `locale=fa` | زبان رابط | - ---- +رابط چندزبانه، پوستهٔ روشن و تیره و پیش‌نمایش فقط‌خواندنی نیز پشتیبانی می‌شوند. ## 🔐 ویرایش محلی و نحوهٔ پردازش داده‌ها -ویرایش و تبدیل سندها به‌صورت محلی انجام می‌شود. تنها دو چیز به‌طور محلی نگه داشته می‌شود و هر دو را -خودتان می‌توانید پاک کنید: +نسخه‌های بازیابی تا ۷ روز پس از آخرین ویرایش یا بازکردن در این مرورگر می‌مانند. در [سندهای ذخیره‌شده](https://edit.chaxus.com/history) حذفشان کنید. این نسخه‌ها پشتیبان نیستند؛ فایل‌های مهم را خروجی بگیرید. -- **نسخه‌هایی از آنچه ویرایش کرده‌اید.** هنگام کار، ویرایشگر سند را در همین مرورگر - (IndexedDB) ذخیره می‌کند تا بارگذاری دوباره، بستن زبانه یا از کار افتادن مرورگر کارتان را - از بین نبرد. بار بعد که ویرایشگر را باز کنید، همان را به شما پیشنهاد می‌دهد. این نسخه‌ها - برای آن‌اند که کار نیمه‌تمام را پی بگیرید — پشتیبان نیستند، پس هر چه را می‌خواهید نگه - دارید برون‌بری کنید. -- **هفت روز، و بعد رفته.** هر سند هفت روز پس از آخرین ویرایش یا باز کردنش خودبه‌خود پاک - می‌شود، چه برگردید و چه برنگردید. +سرویس‌های بیرونی هوش مصنوعی محتوای لازم برای درخواست را دریافت می‌کنند. مدل‌های روی دستگاه آن را محلی پردازش می‌کنند. دیکته ممکن است از سرویس گفتار آنلاین استفاده کند؛ خروجی جاسازی‌شده را برنامهٔ میزبان مدیریت می‌کند. -[`/history`](https://edit.chaxus.com/history) آنچه را ذخیره شده فهرست می‌کند؛ در هر سطر -دکمهٔ پاک کردن هست، یک «پاک کردن همه» و کلیدی برای خاموش کردن کامل ذخیرهٔ خودکار. پاک کردن -از آنجا بی‌درنگ اثر می‌کند. روی رایانهٔ مشترک، همین صفحه جایی است که باید سر بزنید. +عامل هوش مصنوعی مرورگر که انتخاب می‌کنید، شیوهٔ پردازش محتوای بازگردانده‌شده توسط ابزارهای سند را کنترل می‌کند. -دستیار هوش مصنوعی به‌صورت پیش‌فرض خاموش است. با مدل محلی، محتوا روی دستگاه شما می‌ماند. اگر سرویس هوش مصنوعی خود را متصل کنید، محتوای لازم برای درخواست به آن سرویس فرستاده می‌شود. قابلیت گفتار مرورگر ممکن است از سرویس تشخیص گفتار آنلاین استفاده کند. در حالت تعبیه‌شده، فایل‌های خروجی به برنامهٔ میزبان برمی‌گردند و میزبان ارسال‌های بعدی را مدیریت می‌کند. +## مستندات و یکپارچه‌سازی ---- - -## 🧩 جاسازی با iframe +[راهنمای کاربر](https://edit.chaxus.com/help) · [میزبانی، نشانی‌ها و یکپارچه‌سازی](docs/reference.md) · [API جاسازی](docs/embed-api.md) · [قلم‌ها](docs/fonts.md) -ویرایشگر را جاسازی کنید و با postMessage هدایتش کنید. تقسیم کار معمول این است: سامانهٔ شما -احراز هویت و ذخیره‌سازی را بر عهده می‌گیرد و iframe ویرایش را. +استفادهٔ آفلاین به منابع کش‌شدهٔ ویرایشگر نیاز دارد. منابع کش‌نشده و فایل‌های راه دور همچنان به شبکه نیاز دارند. -```html - -``` - -```js -// باز کردن یک سند -iframe.contentWindow.postMessage( - { id: '1', type: 'document:open-url', payload: { url: 'https://example.com/doc.xlsx' } }, - 'https://your-deployment', -); - -// شنیدن نتیجه -window.addEventListener('message', (e) => { - if (e.data?.type === 'document:opened') console.log('آمادهٔ ویرایش'); - if (e.data?.type === 'document:saved') uploadFile(e.data.payload.file); -}); -``` - -ویرایشگر جاسازی‌شده تاریخچهٔ محلی نگه نمی‌دارد — سند از آنِ صفحهٔ میزبان است. - -→ **[مرجع کامل API](docs/embed-api.md)** — همهٔ گونه‌های پیام، فهرست مبدأهای مجاز، حالت -فقط‌خواندنی و روند ذخیره. - -به‌صورت مؤلفه هم در دسترس است: همین پروژه پیش‌نمایش سند را در -[@ranui/preview](https://www.npmjs.com/package/@ranui/preview) -([مستندات](https://chaxus.github.io/ran/src/ranui/preview/)) به کار می‌اندازد. - ---- - -## 🚀 استقرار - -یک ساخت ایستا — بدون زمان اجرا، بدون پایگاه داده. - -```bash -pnpm build # خروجی در dist/ -``` - -### میزبانی ایستا (Cloudflare Pages، Nginx، Vercel، Netlify و…) - -`dist/` را بارگذاری کنید. `public/_headers` قرارداد حافظهٔ نهانی را دارد که سایت بر آن -حساب می‌کند (دارایی‌های هش‌دار تغییرناپذیر، سرویس‌ورکر هرگز در حافظهٔ نهان). میزبان‌هایی که -آن را نادیده بگیرند باز هم کار می‌کنند، فقط بیشتر بازبینی می‌کنند. - -در Nginx، `index.html` را به‌عنوان پاسخ پیش‌فرض مسیرهای ناشناخته سرو کنید: - -```nginx -location / { - root /var/www/document; - try_files $uri $uri/ /index.html; -} -``` - -### GitHub Pages - -`.github/workflows/pages-build-site.yml` با هر push به `main` می‌سازد و منتشر می‌کند. در -تنظیمات مخزن، Pages را با منبع **GitHub Actions** روشن کنید. +## دستیار هوش مصنوعی (Experimental Beta) -### Docker +متن بنویسید و اصلاح کنید، با داده‌های صفحه‌گسترده کار کنید، اسلاید بسازید یا دربارهٔ صفحهٔ فعلی PDF بپرسید. تغییرات را پیش از اعمال بررسی کنید و در صورت نیاز برگردانید. -```bash -# ساده -docker run -d --name document -p 8080:80 ghcr.io/ranuts/document:latest +مدل روی دستگاه را انتخاب کنید یا سرویس هوش مصنوعی خود را وصل کنید. در مرورگرهای دارای ورودی گفتار می‌توانید فرمان‌ها را دیکته کنید. -# با HTTPS و احراز هویت پایه -docker run -d --name document -p 443:443 \ - -v /path/to/certs:/ssl \ - -e SERVER_BASIC_AUTH='user:$2y$...' \ - -e SERVER_HTTP2_TLS=true \ - -e SERVER_HTTP2_TLS_CERT=/ssl/cert.pem \ - -e SERVER_HTTP2_TLS_KEY=/ssl/key.pem \ - ghcr.io/ranuts/document:latest -``` +**Experimental Beta.** به‌طور پیش‌فرض خاموش است. پاسخ‌ها و تغییرات ممکن است اشتباه باشند؛ نتایج مهم را بررسی کنید. -`SERVER_BASIC_AUTH` یک هش BCrypt می‌گیرد؛ برای گریز در پوسته، نویسه‌های `$` را دوبرابر -کنید. تنظیم حافظهٔ نهان تصویر در `sws.toml` است. +
+دیدن چهار نمایش ---- +| Word | Excel | +| --------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [![نوشتن، درج، خلاصه‌سازی و بازگردانی](docs/media/ai-demos/word-ai.jpg)](https://github.com/user-attachments/assets/8d1d6386-e33a-45f2-b968-b8695c8f7da9) | [![پر کردن، محاسبه، مرتب‌سازی و بازگردانی](docs/media/ai-demos/excel-ai.jpg)](https://github.com/user-attachments/assets/5bb253d7-3cc5-4f31-989e-0c88dcb1615c) | +| **نوشتن، درج، خلاصه‌سازی و بازگردانی** | **پر کردن، محاسبه، مرتب‌سازی و بازگردانی** | +| PowerPoint | PDF | +| [![ساختن، تکثیر و بازگردانی](docs/media/ai-demos/pptx-ai.jpg)](https://github.com/user-attachments/assets/db3fc7a7-b54e-4147-a7ca-e7f16243618e) | [![خواندن، پرسیدن و بررسی یادداشت](docs/media/ai-demos/pdf-ai.jpg)](https://github.com/user-attachments/assets/f01c2da6-0669-4111-87c1-c4440f4a60e9) | +| **ساختن، تکثیر و بازگردانی** | **خواندن، پرسیدن و بررسی یادداشت** | -## 🔤 قلم‌ها +گردش‌کارهای کامل با سرعت عادی، رابط انگلیسی و مدل محلی Qwen3 4B از پیش بارگذاری‌شده. زمان پاسخ به مدل و دستگاه بستگی دارد. -ساخت همراه OnlyOffice کتابخانهٔ قلم‌هایش را در `public/fonts/` می‌آورد که با -`public/sdkjs/common/AllFonts.js` نمایه شده است. قلم‌ها در زمان نیاز گرفته می‌شوند — هر سند -تنها همان‌هایی را می‌گیرد که واقعاً به کار می‌برد. +[ویدئوها، زیرنویس‌ها و توضیحات](docs/media/ai-demos/README.md) -→ **[راهنمای مدیریت قلم‌ها](docs/fonts.md)** — قالب کاتالوگ نمایه‌شده، ثبت‌ها، و افزودن قلم -با `bin/font-catalog.mjs`. +کمک PDF برای متن قابل‌انتخاب و یادداشت صفحه است، نه تشخیص متن تصاویر اسکن‌شده یا بازنویسی متن اصلی PDF. ---- +
## 🛠 توسعه +اجرا از کد منبع: + ```bash +git clone https://github.com/ranuts/document.git +cd document pnpm install --frozen-lockfile -pnpm run dev # کارساز توسعه -pnpm run build # ساخت تولیدی (bin/build.sh) -pnpm run lint # oxlint + tsc + بررسی پیکربندی docker -pnpm run test # آزمون‌های واحد (Vitest) -pnpm run test:e2e # آزمون‌های سرتاسری (Playwright، ویرایشگر واقعی + WASM واقعی) +pnpm run dev ``` -مجموعهٔ سرتاسری به‌جای بدل‌ها، ویرایشگر و مبدل واقعی را به کار می‌اندازد؛ شامل رفت‌وبرگشت -سند، پروتکل جاسازی و روند بازیابی. در `docs/explorations/` نوشته شده که هر بخش غیربدیهی چرا -این‌گونه است — پیش از دست بردن در یکپارچگی ویرایشگر، خواندنش می‌ارزد. - ---- - -## 🤖 عامل‌های هوش مصنوعی در مرورگر (WebMCP) - -جایی که مرورگر پشتیبانی کند، صفحه ابزارهایی را ثبت می‌کند که عامل به‌جای کار کردن با رابط -کاربری مستقیماً آنها را فرا می‌خواند: `open_document_url`، `open_document_buffer`، -`create_document`، `save_document`، `get_document_text`، `set_readonly`، -`get_document_state`. در این حالت هم سندها دستگاه را ترک نمی‌کنند — خود مرورگر آنها را -می‌گیرد و تبدیل می‌کند. جایی که این API نباشد، هیچ اتفاقی نمی‌افتد. - ---- +بازخورد و مشارکت خوش‌آمد است: [Issues](https://github.com/ranuts/document/issues) · [Pull requests](https://github.com/ranuts/document/pulls) ## 📚 بر پایهٔ @@ -285,15 +129,12 @@ pnpm run test:e2e # آزمون‌های سرتاسری (Playwright، وی - [ranui / ranuts](https://github.com/chaxus/ran) — سامانهٔ طراحی و ابزارهایی که این سایت با آنها ساخته شده - [se-office](https://github.com/Qihoo360/se-office)، [onlyoffice-web-local](https://github.com/sweetwisdom/onlyoffice-web-local) — کارهای پیشین در اجرای OnlyOffice بدون کارساز سند -## 🤝 مشارکت - -از Issue و Pull Request استقبال می‌شود. شاخهٔ `main` محافظت‌شده است: روی یک شاخه کار کنید و -PR باز کنید تا lint، آزمون‌های واحد و سه مجموعهٔ سرتاسری (کارساز توسعه، رفتار Cloudflare -Pages و تصویر تولیدی Docker) اجرا شوند. - ## 📄 پروانه -[AGPL-3.0](LICENSE). +[AGPL-3.0](LICENSE) · [NOTICE](NOTICE) + +
+اطلاعیه‌ها و علائم تجاری پروژهٔ اصلی این پروژه نسخهٔ تغییریافتهٔ ویرایشگرهای ONLYOFFICE (sdkjs و web-apps، با حق نشر Ascensio System SIA) است. رابط کاربری از نام‌های کاربردی خنثی استفاده می‌کند و نشان محصول @@ -310,3 +151,5 @@ ONLYOFFICE علامت تجاری Ascensio System SIA است. این پروژه برای نصب PWA و زبانه‌های مرورگر از نماد خنثی سند با طراحی مستقل استفاده می‌شود. این نماد شامل لوگو، علامت تجاری بالادستی یا حروف اختصاری پروژه نیست. + +
diff --git a/readme.ja.md b/readme.ja.md index 94fa2608a..f4ea4ba8f 100644 --- a/readme.ja.md +++ b/readme.ja.md @@ -1,7 +1,3 @@ -

- Document Editor -

- # オンライン ドキュメント エディター

@@ -17,10 +13,8 @@ Live site - - AI Assistant: Experimental Beta -

+

English | 简体中文 | @@ -32,69 +26,35 @@ فارسی

-ブラウザーで Word・Excel・PowerPoint を編集し、PDF に注釈を付けられます。Office のインストールやアカウントは不要です。日常の編集と変換は端末上で行われ、必要に応じて実験的な AI アシスタントを有効にできます。 - -**公開サイト: [edit.chaxus.com](https://edit.chaxus.com/)** +**あなたと AI エージェントのための、オープンソースの文書ワークスペース。** ---- +ブラウザーで Word、Excel、PowerPoint を開き、編集・変換・保存し、PDF に注釈を追加。基本的な文書処理は端末内で行い、アカウントも Office のインストールも不要です。 -## ✨ 特長 +必要に応じて AI アシスタント(Experimental Beta)、WebMCP によるエージェントの文書ツール呼び出し、PWA インストールを利用できます。キャッシュ済みの編集リソースはオフラインでも使え、自分でホストしたりアプリに組み込んだりできます。 -- 🔒 **ローカル編集** — 変換、編集、書き出しはブラウザー内で行われます。任意の AI リクエストの処理先は自分で選べます -- 📝 **プレビューではなく本物の編集** — DOCX・XLSX・PPTX・CSV に加え、ODF・RTF・TXT と旧来のバイナリ形式にも対応。PDF は開いて注釈を付けられます -- 🕓 **最近の作業を再開** — ブラウザー内の復元用コピーは 7 日間保管され、いつでも削除できます ([詳しく](#-ローカル編集とデータの扱い)) -- 📴 **オフラインでも動く** — PWA としてインストール可能。キャッシュ済みの編集用リソースはオフラインで再利用できます。未取得のリソースと外部ファイルにはネットワークが必要です -- 🌍 **多言語** — サイトの表示言語は 7 種類、エディター自体は 45 種類 -- 🧩 **組み込める** — iframe 連携のための postMessage API を完備 -- ✨ **AI 文書アシスタント (Experimental Beta)** — ローカルモデルまたは自分の AI サービスで、文章の作成、表の操作、スライド作成、PDF への質問を支援します。 -- 🤖 **エージェント対応** — WebMCP ツールを公開し、ブラウザー内の AI エージェントがドキュメントを開く・変換する・読むことができます -- 🚀 **どこにでも配置できる** — 静的ビルド。任意の Web サーバーに置くファイル群です +**オンラインで試す:[edit.chaxus.com](https://edit.chaxus.com/)** --- -## AI 文書アシスタント (Experimental Beta) - -要望を入力すると、文書の中で結果を確認できます。文章を作成し、列にデータを入力し、スライドを追加し、PDF の現在のページについて質問できます。変更案を確認して適用し、不要な案はキャンセルできます。適用後は元に戻すこともできます。 - -**実験的な機能です。** 回答や変更が誤っている場合があります。重要な結果は確認してください。初期状態では無効です。ローカルモデルを選ぶか、自分の AI サービスに接続できます。外部サービスにはリクエストに必要な内容が送信されます。 - -| Word | Excel | -| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | -| [![作成・挿入・要約・取り消し](docs/media/ai-demos/word-ai.jpg)](https://github.com/user-attachments/assets/8d1d6386-e33a-45f2-b968-b8695c8f7da9) | [![入力・計算・並べ替え・取り消し](docs/media/ai-demos/excel-ai.jpg)](https://github.com/user-attachments/assets/5bb253d7-3cc5-4f31-989e-0c88dcb1615c) | -| **作成・挿入・要約・取り消し** | **入力・計算・並べ替え・取り消し** | -| PowerPoint | PDF | -| [![作成・複製・取り消し](docs/media/ai-demos/pptx-ai.jpg)](https://github.com/user-attachments/assets/db3fc7a7-b54e-4147-a7ca-e7f16243618e) | [![読み取り・質問・メモの確認](docs/media/ai-demos/pdf-ai.jpg)](https://github.com/user-attachments/assets/f01c2da6-0669-4111-87c1-c4440f4a60e9) | -| **作成・複製・取り消し** | **読み取り・質問・メモの確認** | - -プレビューをクリックすると、結果を読む時間を確保した通常速度の一連の操作を視聴できます。英語の画面、ローカルの Qwen3 4B、架空の情報を使用しています。録画開始時にはモデルを読み込み済みです。応答速度はモデルと端末によって異なります。 - -[動画・英語字幕・説明](docs/media/ai-demos/README.md) +## ✨ 特長 -PDF は現在のページの選択可能な文字とページメモに対応します。スキャン画像の文字認識や PDF 本文の書き換えには対応していません。 - ---- +- **ローカルで編集・変換。** 文書を端末内で処理。編集や変換のためのアップロードは不要です。 +- **好きな方法で保存。** 対応ブラウザーでは選んだファイルに保存、それ以外はダウンロード。このブラウザーで最近の作業を再開できます。 +- **AI と作業(Experimental Beta)。** 文章の下書きや推敲、表のデータ操作、スライド作成、現在の PDF ページへの質問に。変更を確認してから適用できます。 +- **エージェントから文書ツールを呼び出し。** [WebMCP](docs/reference.md#webmcp-agent-tools) 対応ブラウザーでは、AI エージェントが文書を開き、変換・書き出しを行い、文字文書の本文を読めます。 +- **PWA としてインストール。** アプリのように使え、キャッシュ済みの編集リソースはオフラインでも利用できます。 +- **自分でホスト・組み込み。** 静的サイトとして配信するか、iframe API でアプリに組み込めます。 ## 🚀 はじめかた -**そのまま使う:** [edit.chaxus.com](https://edit.chaxus.com/) — インストール不要です。 +[文書を作成](https://edit.chaxus.com/editor?new=docx&locale=ja-JP) · [表計算を作成](https://edit.chaxus.com/editor?new=xlsx&locale=ja-JP) · [スライドを作成](https://edit.chaxus.com/editor?new=pptx&locale=ja-JP) -**Docker で自分で動かす:** +自分の環境で実行するには: ```bash docker run -d --name document -p 8080:80 ghcr.io/ranuts/document:latest ``` -**ソースから動かす:** - -```bash -git clone https://github.com/ranuts/document.git -cd document -pnpm install -pnpm run dev -``` - ---- - ## 📄 対応形式 | 種類 | 編集 | 開くだけなら | @@ -104,179 +64,63 @@ pnpm run dev | プレゼンテーション | `.pptx` | `.ppt` `.odp` | | PDF | 注釈・入力・書き出し | `.pdf` | -いずれも PDF に書き出せます。CSV は書き出し時も元の文字コードを保ちます(開くときに -UTF-8・GB18030・Latin-1 を判別します)。 - ---- - -## 🔗 ルートと URL パラメーター - -| ルート | 内容 | -| --------------------- | ---------------------------------------------------------------- | -| `/` | ランディングページ。何かを開くまでエディターは読み込まれません。 | -| `/editor` | エディター本体。 | -| `/history` | このブラウザーが保持しているドキュメント(下記参照)。 | -| `/help`, `/changelog` | `content/` 以下の Markdown から生成されます。 | +対応文書は PDF に書き出せます。 -`/editor` のパラメーター: - -| パラメーター | 説明 | -| ------------ | ------------------------------------------------------------------------------------------------------------------------------------ | -| `src=` | URL からドキュメントを開く(その URL が CORS を許可している必要があります) | -| `file=` | 同じ意味の旧表記。両方あるとこちらが優先されます | -| `new=docx` | 空のドキュメントを新規作成(`docx`・`xlsx`・`pptx`) | -| `doc=` | このブラウザーの履歴からドキュメントを再度開く。エディターが自身の ID をここに入れるため、再読み込みしても同じドキュメントに戻ります | -| `readonly=1` | 閲覧専用で開く。編集と書き出しは無効になります | -| `embed=1` | 埋め込みモード。親ページが postMessage でエディターを操作します | -| `locale=ja` | 表示言語 | - ---- +多言語 UI、ライト・ダークテーマ、読み取り専用プレビューにも対応しています。 ## 🔐 ローカル編集とデータの扱い -編集と変換は端末上で行われます。端末に残るのは次の 2 つだけで、 -どちらもご自身で削除できます。 +復元用コピーは最後の編集・閲覧から 7 日間、このブラウザーに保存されます。[保存済み文書](https://edit.chaxus.com/history)から削除できます。バックアップではないため、大切なファイルは書き出してください。 -- **編集したものの控え。** 作業中、エディターはドキュメントをこのブラウザー(IndexedDB)に - 保存します。再読み込みしても、タブを閉じても、クラッシュしても作業が失われないためです。 - 次にエディターを開いたときに復元を提案します。これは作業を再開するためのものであり、 - バックアップではありません。残したいものは書き出してください。 -- **7 日で消えます。** 各ドキュメントは、最後に編集または開いた日から 7 日後に、 - あなたが戻ってこなくても自動的に削除されます。 +外部 AI サービスにはリクエストに必要な内容が送信されます。端末内モデルはローカルで処理します。音声入力はオンライン音声サービスを使う場合があり、埋め込み時の書き出しはホストアプリが扱います。 -[`/history`](https://edit.chaxus.com/history) に保管中のものが一覧で表示されます。 -各行の削除、まとめて削除、自動保存を完全に切るスイッチがあります。ここでの削除は -すぐに反映されます。共用のパソコンでは、まずこのページをご覧ください。 +ブラウザーの AI エージェントは、文書ツールから受け取った内容の処理方法を管理します。 -AI アシスタントは初期状態では無効です。ローカルモデルでは内容を端末上で処理します。自分の AI サービスに接続すると、リクエストに必要な内容は選択したサービスへ送信されます。音声入力ではブラウザーがオンラインの音声認識サービスを使う場合があります。埋め込みモードでは書き出したファイルを親アプリへ返し、その後のアップロードは親アプリが管理します。 +## ドキュメントと連携 ---- - -## 🧩 iframe への組み込み +[使い方](https://edit.chaxus.com/ja/help) · [ホスティング・URL・連携](docs/reference.md) · [埋め込み API](docs/embed-api.md) · [フォント](docs/fonts.md) -エディターを埋め込み、postMessage で操作します。よくある分担は、認証と保存は自社システム、 -編集は iframe、という形です。 +オフライン利用にはキャッシュ済みの編集リソースが必要です。未取得のリソースやリモートファイルには通信が必要です。 -```html - -``` - -```js -// ドキュメントを開く -iframe.contentWindow.postMessage( - { id: '1', type: 'document:open-url', payload: { url: 'https://example.com/doc.xlsx' } }, - 'https://your-deployment', -); - -// 結果を受け取る -window.addEventListener('message', (e) => { - if (e.data?.type === 'document:opened') console.log('編集できます'); - if (e.data?.type === 'document:saved') uploadFile(e.data.payload.file); -}); -``` - -埋め込みモードのエディターはローカルに履歴を残しません。ドキュメントは親ページのものだからです。 - -→ **[API 仕様の全文](docs/embed-api.md)** — すべてのメッセージ種別、オリジンの許可リスト、 -読み取り専用モード、保存の流れ。 - -コンポーネントとしても提供しています。このプロジェクトは -[@ranui/preview](https://www.npmjs.com/package/@ranui/preview) -([ドキュメント](https://chaxus.github.io/ran/src/ranui/preview/))のドキュメントプレビューを支えています。 - ---- - -## 🚀 デプロイ - -静的ビルドです。ランタイムもデータベースもありません。 - -```bash -pnpm build # dist/ に出力されます -``` - -### 静的ホスティング(Cloudflare Pages・Nginx・Vercel・Netlify など) - -`dist/` をアップロードしてください。`public/_headers` にサイトが前提とするキャッシュの -取り決めが書かれています(ハッシュ付きアセットは不変、Service Worker は決してキャッシュしない)。 -これを読まないホストでも動作しますが、再検証の回数が増えます。 - -Nginx では、未知のルートのフォールバックとして `index.html` を返してください。 - -```nginx -location / { - root /var/www/document; - try_files $uri $uri/ /index.html; -} -``` - -### GitHub Pages - -`.github/workflows/pages-build-site.yml` が `main` への push でビルドとデプロイを行います。 -リポジトリの設定で Pages を有効にし、ソースに **GitHub Actions** を選んでください。 +## AI 文書アシスタント (Experimental Beta) -### Docker +文章の下書きや推敲、表のデータ操作、スライド作成、現在の PDF ページへの質問に。変更を確認してから適用し、必要なら元に戻せます。 -```bash -# 基本 -docker run -d --name document -p 8080:80 ghcr.io/ranuts/document:latest +端末内モデルを選ぶか、自分の AI サービスに接続できます。対応ブラウザーでは音声入力も使えます。 -# HTTPS と Basic 認証つき -docker run -d --name document -p 443:443 \ - -v /path/to/certs:/ssl \ - -e SERVER_BASIC_AUTH='user:$2y$...' \ - -e SERVER_HTTP2_TLS=true \ - -e SERVER_HTTP2_TLS_CERT=/ssl/cert.pem \ - -e SERVER_HTTP2_TLS_KEY=/ssl/key.pem \ - ghcr.io/ranuts/document:latest -``` +**Experimental Beta.** 初期状態では無効です。回答や変更が間違うことがあるため、重要な結果は確認してください。 -`SERVER_BASIC_AUTH` には BCrypt ハッシュを渡します。シェルのエスケープのため `$` は -二重にしてください。イメージのキャッシュ設定は `sws.toml` にあります。 +
+4 つのデモを見る ---- +| Word | Excel | +| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | +| [![作成・挿入・要約・取り消し](docs/media/ai-demos/word-ai.jpg)](https://github.com/user-attachments/assets/8d1d6386-e33a-45f2-b968-b8695c8f7da9) | [![入力・計算・並べ替え・取り消し](docs/media/ai-demos/excel-ai.jpg)](https://github.com/user-attachments/assets/5bb253d7-3cc5-4f31-989e-0c88dcb1615c) | +| **作成・挿入・要約・取り消し** | **入力・計算・並べ替え・取り消し** | +| PowerPoint | PDF | +| [![作成・複製・取り消し](docs/media/ai-demos/pptx-ai.jpg)](https://github.com/user-attachments/assets/db3fc7a7-b54e-4147-a7ca-e7f16243618e) | [![読み取り・質問・メモの確認](docs/media/ai-demos/pdf-ai.jpg)](https://github.com/user-attachments/assets/f01c2da6-0669-4111-87c1-c4440f4a60e9) | +| **作成・複製・取り消し** | **読み取り・質問・メモの確認** | -## 🔤 フォント +英語 UI、読み込み済みのローカル Qwen3 4B モデルで通常速度の全工程を収録。応答時間はモデルと端末によって異なります。 -同梱の OnlyOffice ビルドは、フォントライブラリを `public/fonts/` に置き、 -`public/sdkjs/common/AllFonts.js` で索引しています。フォントは必要になった時点で -取得されるため、ドキュメントが実際に使うものだけが読み込まれます。 +[動画・字幕・説明](docs/media/ai-demos/README.md) -→ **[フォント管理ガイド](docs/fonts.md)** — 索引付きカタログのワイヤ形式、各レジストリ、 -`bin/font-catalog.mjs` を使ったフォントの追加方法。 +PDF は選択可能な文字とページ注釈に対応。スキャン画像の文字認識や本文の書き換えには対応しません。 ---- +
## 🛠 開発 +ソースから実行: + ```bash +git clone https://github.com/ranuts/document.git +cd document pnpm install --frozen-lockfile -pnpm run dev # 開発サーバー -pnpm run build # 本番ビルド(bin/build.sh) -pnpm run lint # oxlint + tsc + docker の設定確認 -pnpm run test # ユニットテスト(Vitest) -pnpm run test:e2e # エンドツーエンドテスト(Playwright、実際のエディターと実際の WASM) +pnpm run dev ``` -エンドツーエンドのテストはモックではなく本物のエディターとコンバーターを動かします。 -ドキュメントの往復、埋め込みプロトコル、復元の流れまで含みます。`docs/explorations/` には、 -一見不可解な実装がなぜそうなっているのかが記録されています。エディター連携に手を入れる前に -目を通す価値があります。 - ---- - -## 🤖 ブラウザー内 AI エージェント(WebMCP) - -ブラウザーが対応していれば、画面を操作する代わりにエージェントが直接呼び出せるツールを -ページが登録します。`open_document_url`・`open_document_buffer`・`create_document`・ -`save_document`・`get_document_text`・`set_readonly`・`get_document_state` です。 -この場合もドキュメントは端末から出ません。取得も変換もブラウザー自身が行います。 -API がない環境では何も起きません。 - ---- +フィードバックや貢献を歓迎します: [Issues](https://github.com/ranuts/document/issues) · [Pull requests](https://github.com/ranuts/document/pulls) ## 📚 土台にしているもの @@ -285,15 +129,12 @@ API がない環境では何も起きません。 - [ranui / ranuts](https://github.com/chaxus/ran) — このサイトを組み立てているデザインシステムとユーティリティ - [se-office](https://github.com/Qihoo360/se-office)、[onlyoffice-web-local](https://github.com/sweetwisdom/onlyoffice-web-local) — ドキュメントサーバーなしで OnlyOffice を動かす先行事例 -## 🤝 コントリビューション - -Issue と Pull Request を歓迎します。`main` は保護されています。ブランチで作業して -PR を作成してください。lint、ユニットテスト、3 種類のエンドツーエンドテスト(開発サーバー、 -Cloudflare Pages の挙動、本番 Docker イメージ)が実行されます。 - ## 📄 ライセンス -[AGPL-3.0](LICENSE)。 +[AGPL-3.0](LICENSE) · [NOTICE](NOTICE) + +
+上流の告知と商標 本プロジェクトは ONLYOFFICE エディター(sdkjs と web-apps、著作権者 Ascensio System SIA)の変更版です。画面には中立的な機能名を使用し、製品ロゴやブランドの @@ -310,3 +151,5 @@ ONLYOFFICE は Ascensio System SIA の商標です。本プロジェクトは公 含まれる名称は上流の技術を示すもので、本プロジェクトのブランドではありません。 PWA とブラウザーのタブには、独自に描いた中立的な文書アイコンを使用します。上流のロゴ、商標、プロジェクトの頭文字は含みません。 + +
diff --git a/readme.ko.md b/readme.ko.md index 4ff19a21f..7baeac602 100644 --- a/readme.ko.md +++ b/readme.ko.md @@ -1,7 +1,3 @@ -

- Document Editor -

- # 온라인 문서 편집기

@@ -17,10 +13,8 @@ Live site - - AI Assistant: Experimental Beta -

+

English | 简体中文 | @@ -32,69 +26,35 @@ فارسی

-브라우저에서 Word, Excel, PowerPoint를 편집하고 PDF에 주석을 추가하세요. Office 설치나 계정이 필요하지 않습니다. 일반 편집과 변환은 기기에서 처리하며, 필요할 때 실험적인 AI 도우미를 켤 수 있습니다. - -**서비스 주소: [edit.chaxus.com](https://edit.chaxus.com/)** +**사용자와 AI 에이전트를 위한 오픈 소스 문서 작업 공간.** ---- +브라우저에서 Word, Excel, PowerPoint를 열고 편집·변환·저장하며 PDF에 주석을 추가하세요. 기본 문서 처리는 기기에서 이루어지며 계정이나 Office 설치가 필요 없습니다. -## ✨ 특징 +선택형 AI 도우미(Experimental Beta), WebMCP를 통한 에이전트의 문서 도구 호출, PWA 설치를 지원합니다. 캐시된 편집기 리소스는 오프라인에서 사용할 수 있고, 자체 호스팅하거나 앱에 임베드할 수도 있습니다. -- 🔒 **로컬 편집** — 변환, 편집, 내보내기는 브라우저에서 처리하며, 선택적 AI 요청의 처리 위치는 직접 선택합니다 -- 📝 **미리보기가 아니라 진짜 편집** — DOCX, XLSX, PPTX, CSV와 함께 ODF, RTF, TXT 및 옛 바이너리 형식까지. PDF는 열어서 주석을 달 수 있습니다 -- 🕓 **최근 작업 이어가기** — 브라우저의 복구 사본은 7일간 보관되며 언제든 삭제할 수 있습니다 ([자세히](#-로컬-편집과-데이터-처리)) -- 📴 **오프라인에서도 동작** — PWA로 설치할 수 있고 캐시된 편집기 리소스를 오프라인에서 재사용합니다. 캐시되지 않은 리소스와 원격 파일에는 네트워크가 필요합니다 -- 🌍 **다국어** — 사이트 인터페이스 7개 언어, 편집기 자체는 45개 언어 -- 🧩 **임베드 가능** — iframe 연동을 위한 완전한 postMessage API -- ✨ **AI 문서 도우미 (Experimental Beta)** — 로컬 모델이나 자신의 AI 서비스로 글 작성, 표 작업, 슬라이드 생성, PDF 질문을 지원합니다. -- 🤖 **에이전트 지원** — WebMCP 도구를 공개해 브라우저 안의 AI 에이전트가 문서를 열고, 변환하고, 읽을 수 있습니다 -- 🚀 **어디에나 배포** — 정적 빌드. 아무 웹 서버 뒤에 두면 되는 파일 묶음입니다 +**온라인으로 사용: [edit.chaxus.com](https://edit.chaxus.com/)** --- -## AI 문서 도우미 (Experimental Beta) - -원하는 작업을 입력하고 문서에서 결과를 확인하세요. 글을 작성하고, 열을 채우고, 슬라이드를 만들거나 PDF의 현재 페이지에 대해 질문할 수 있습니다. 변경안을 검토해 적용하거나 취소하고, 적용한 뒤에는 실행 취소할 수 있습니다. - -**실험적 기능입니다.** 답변과 수정이 틀릴 수 있으므로 중요한 결과를 확인하세요. 기본적으로 꺼져 있습니다. 로컬 모델을 선택하거나 자신의 AI 서비스에 연결할 수 있습니다. 외부 서비스에는 요청에 필요한 내용이 전송됩니다. - -| Word | Excel | -| ---------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | -| [![초안 작성·삽입·요약·실행 취소](docs/media/ai-demos/word-ai.jpg)](https://github.com/user-attachments/assets/8d1d6386-e33a-45f2-b968-b8695c8f7da9) | [![입력·계산·정렬·실행 취소](docs/media/ai-demos/excel-ai.jpg)](https://github.com/user-attachments/assets/5bb253d7-3cc5-4f31-989e-0c88dcb1615c) | -| **초안 작성·삽입·요약·실행 취소** | **입력·계산·정렬·실행 취소** | -| PowerPoint | PDF | -| [![만들기·복제·실행 취소](docs/media/ai-demos/pptx-ai.jpg)](https://github.com/user-attachments/assets/db3fc7a7-b54e-4147-a7ca-e7f16243618e) | [![읽기·질문·메모 검토](docs/media/ai-demos/pdf-ai.jpg)](https://github.com/user-attachments/assets/f01c2da6-0669-4111-87c1-c4440f4a60e9) | -| **만들기·복제·실행 취소** | **읽기·질문·메모 검토** | - -미리보기를 클릭하면 결과를 읽을 시간을 충분히 둔 전체 작업을 정상 속도로 볼 수 있습니다. 영어 화면, 로컬 Qwen3 4B와 가상의 자료를 사용했습니다. 녹화 시작 전에 모델을 불러왔으며, 응답 속도는 모델과 기기에 따라 다릅니다. - -[영상, 영어 자막과 설명](docs/media/ai-demos/README.md) +## ✨ 특징 -PDF 기능은 현재 페이지의 선택 가능한 텍스트와 페이지 메모를 지원합니다. 스캔 이미지의 텍스트를 인식하거나 PDF 본문을 다시 쓰지는 않습니다. - ---- +- **로컬 편집과 변환.** 문서를 기기에서 처리하므로 편집과 변환을 위해 업로드할 필요가 없습니다. +- **원하는 방식으로 저장.** 지원되는 브라우저에서는 선택한 파일에 저장하고, 그 외에는 다운로드합니다. 이 브라우저에서 최근 작업을 다시 열 수 있습니다. +- **AI와 함께 작업 (Experimental Beta).** 글 초안과 수정, 표 데이터 처리, 슬라이드 생성, 현재 PDF 페이지에 대한 질문을 지원합니다. 변경 내용을 확인한 뒤 적용하세요. +- **에이전트가 문서 도구 호출.** [WebMCP](docs/reference.md#webmcp-agent-tools) 지원 브라우저에서는 AI 에이전트가 파일을 열고 변환하고 내보내며, 텍스트 문서의 본문을 읽을 수 있습니다. +- **PWA로 설치.** 앱처럼 사용하고 캐시된 편집기 리소스를 오프라인에서 이용할 수 있습니다. +- **자체 호스팅과 통합.** 정적 사이트로 배포하거나 iframe API로 앱에 임베드하세요. ## 🚀 빠른 시작 -**그냥 쓰기:** [edit.chaxus.com](https://edit.chaxus.com/) — 설치할 것이 없습니다. +[새 문서](https://edit.chaxus.com/editor?new=docx&locale=ko-KR) · [새 스프레드시트](https://edit.chaxus.com/editor?new=xlsx&locale=ko-KR) · [새 프레젠테이션](https://edit.chaxus.com/editor?new=pptx&locale=ko-KR) -**Docker로 직접 운영하기:** +직접 실행할 수도 있습니다: ```bash docker run -d --name document -p 8080:80 ghcr.io/ranuts/document:latest ``` -**소스에서 실행하기:** - -```bash -git clone https://github.com/ranuts/document.git -cd document -pnpm install -pnpm run dev -``` - ---- - ## 📄 지원 형식 | 종류 | 편집 | 열기만 가능 | @@ -104,178 +64,63 @@ pnpm run dev | 프레젠테이션 | `.pptx` | `.ppt` `.odp` | | PDF | 주석, 양식 작성, 내보내기 | `.pdf` | -모두 PDF로 내보낼 수 있습니다. CSV는 내보낼 때도 원래 인코딩을 유지합니다(열 때 UTF-8, -GB18030, Latin-1을 판별합니다). - ---- - -## 🔗 경로와 URL 매개변수 - -| 경로 | 설명 | -| --------------------- | --------------------------------------------------------- | -| `/` | 첫 화면. 무언가를 열기 전에는 편집기를 내려받지 않습니다. | -| `/editor` | 편집기. | -| `/history` | 이 브라우저가 보관 중인 문서(아래 참조). | -| `/help`, `/changelog` | `content/` 아래의 마크다운에서 생성됩니다. | +지원 문서를 PDF로 내보낼 수 있습니다. -`/editor`의 매개변수: - -| 매개변수 | 설명 | -| ------------ | -------------------------------------------------------------------------------------------------------------- | -| `src=` | URL에서 문서 열기(해당 URL이 CORS를 허용해야 합니다) | -| `file=` | 같은 뜻의 옛 표기. 둘 다 있으면 이쪽이 우선합니다 | -| `new=docx` | 빈 문서 새로 만들기(`docx`, `xlsx`, `pptx`) | -| `doc=` | 이 브라우저의 기록에서 문서를 다시 열기. 편집기가 자기 ID를 여기에 넣으므로 새로 고쳐도 같은 문서로 돌아옵니다 | -| `readonly=1` | 보기 전용으로 열기. 편집과 내보내기가 꺼집니다 | -| `embed=1` | 임베드 모드. 호스트 페이지가 postMessage로 편집기를 조종합니다 | -| `locale=ko` | 인터페이스 언어 | - ---- +다국어 UI, 밝은 테마와 어두운 테마, 읽기 전용 미리보기도 지원합니다. ## 🔐 로컬 편집과 데이터 처리 -편집과 변환은 기기에서 수행됩니다. 기기에 남는 것은 두 가지뿐이고, 둘 다 직접 지울 수 있습니다. +복구 사본은 마지막 편집 또는 열기 후 7일 동안 이 브라우저에 보관됩니다. [저장된 문서](https://edit.chaxus.com/history)에서 삭제할 수 있습니다. 백업이 아니므로 중요한 파일은 내보내세요. -- **편집한 것의 사본.** 작업하는 동안 편집기는 문서를 이 브라우저(IndexedDB)에 저장합니다. - 새로 고침, 탭 닫기, 브라우저 멈춤이 작업을 앗아가지 않게 하기 위해서입니다. 편집기를 다시 - 열면 그 사본을 되돌려 줍니다. 이 사본은 하던 일을 이어가기 위한 것이지 백업이 아닙니다. - 보관하고 싶은 것은 계속 내보내 두세요. -- **7일 뒤에는 사라집니다.** 각 문서는 마지막으로 편집하거나 연 날로부터 7일 뒤, 다시 오지 - 않더라도 자동으로 삭제됩니다. +외부 AI 서비스에는 요청에 필요한 내용이 전송됩니다. 기기 내 모델은 로컬에서 처리합니다. 음성 입력은 온라인 서비스를 사용할 수 있고, 임베드 내보내기는 호스트 앱이 처리합니다. -[`/history`](https://edit.chaxus.com/history)에 보관 중인 목록이 있습니다. 줄마다 삭제 -버튼이 있고, 전체 삭제와 자동 저장을 아예 끄는 스위치도 있습니다. 여기서 지우면 즉시 -반영됩니다. 공용 컴퓨터라면 먼저 들러야 할 페이지입니다. +문서 도구가 반환한 내용의 후속 처리는 사용하는 브라우저 AI 에이전트가 관리합니다. -AI 도우미는 기본적으로 꺼져 있습니다. 로컬 모델을 사용하면 내용은 기기에서 처리합니다. 자신의 AI 서비스에 연결하면 요청에 필요한 내용은 선택한 서비스로 전송됩니다. 브라우저 음성 입력은 온라인 음성 인식 서비스를 이용할 수 있습니다. 임베드 모드에서는 내보낸 파일을 부모 앱으로 반환하며, 이후 업로드는 부모 앱이 관리합니다. +## 문서 및 통합 ---- - -## 🧩 iframe으로 임베드하기 +[사용 안내](https://edit.chaxus.com/ko/help) · [호스팅, URL 및 통합](docs/reference.md) · [임베드 API](docs/embed-api.md) · [글꼴](docs/fonts.md) -편집기를 임베드하고 postMessage로 조종합니다. 흔한 분담은 인증과 저장은 내 시스템이, -편집은 iframe이 맡는 형태입니다. +오프라인 사용에는 캐시된 편집기 리소스가 필요합니다. 캐시되지 않은 리소스와 원격 파일에는 네트워크가 필요합니다. -```html - -``` - -```js -// 문서 열기 -iframe.contentWindow.postMessage( - { id: '1', type: 'document:open-url', payload: { url: 'https://example.com/doc.xlsx' } }, - 'https://your-deployment', -); - -// 결과 받기 -window.addEventListener('message', (e) => { - if (e.data?.type === 'document:opened') console.log('편집할 수 있습니다'); - if (e.data?.type === 'document:saved') uploadFile(e.data.payload.file); -}); -``` - -임베드된 편집기는 로컬 기록을 남기지 않습니다. 문서는 호스트 페이지의 것이기 때문입니다. - -→ **[전체 API 문서](docs/embed-api.md)** — 모든 메시지 종류, 오리진 허용 목록, -읽기 전용 모드, 저장 흐름. - -컴포넌트로도 제공합니다. 이 프로젝트가 -[@ranui/preview](https://www.npmjs.com/package/@ranui/preview) -([문서](https://chaxus.github.io/ran/src/ranui/preview/))의 문서 미리보기를 구동합니다. - ---- - -## 🚀 배포 - -정적 빌드입니다. 런타임도 데이터베이스도 없습니다. - -```bash -pnpm build # dist/ 에 출력됩니다 -``` - -### 정적 호스팅(Cloudflare Pages, Nginx, Vercel, Netlify 등) - -`dist/`를 올리면 됩니다. `public/_headers`에 이 사이트가 전제하는 캐시 규약이 들어 있습니다 -(해시가 붙은 자산은 불변, 서비스 워커는 절대 캐시하지 않음). 이를 읽지 않는 호스트에서도 -동작하지만 재검증이 잦아집니다. - -Nginx에서는 알 수 없는 경로의 대체로 `index.html`을 내주세요. - -```nginx -location / { - root /var/www/document; - try_files $uri $uri/ /index.html; -} -``` - -### GitHub Pages - -`.github/workflows/pages-build-site.yml`이 `main`에 push할 때 빌드와 배포를 수행합니다. -저장소 설정에서 Pages를 켜고 소스를 **GitHub Actions**로 지정하세요. +## AI 문서 도우미 (Experimental Beta) -### Docker +글 초안과 수정, 표 데이터 처리, 슬라이드 생성, 현재 PDF 페이지에 대한 질문을 지원합니다. 변경 내용을 확인한 뒤 적용하고 필요하면 실행 취소하세요. -```bash -# 기본 -docker run -d --name document -p 8080:80 ghcr.io/ranuts/document:latest +기기 내 모델을 선택하거나 자체 AI 서비스에 연결하세요. 지원되는 브라우저에서는 음성 입력도 사용할 수 있습니다. -# HTTPS와 기본 인증 포함 -docker run -d --name document -p 443:443 \ - -v /path/to/certs:/ssl \ - -e SERVER_BASIC_AUTH='user:$2y$...' \ - -e SERVER_HTTP2_TLS=true \ - -e SERVER_HTTP2_TLS_CERT=/ssl/cert.pem \ - -e SERVER_HTTP2_TLS_KEY=/ssl/key.pem \ - ghcr.io/ranuts/document:latest -``` +**Experimental Beta.** 기본적으로 꺼져 있습니다. 답변과 수정이 틀릴 수 있으므로 중요한 결과는 확인하세요. -`SERVER_BASIC_AUTH`에는 BCrypt 해시를 넣습니다. 셸 이스케이프를 위해 `$`는 두 번 씁니다. -이미지의 캐시 설정은 `sws.toml`에 있습니다. +
+네 가지 데모 보기 ---- +| Word | Excel | +| ---------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | +| [![초안 작성·삽입·요약·실행 취소](docs/media/ai-demos/word-ai.jpg)](https://github.com/user-attachments/assets/8d1d6386-e33a-45f2-b968-b8695c8f7da9) | [![입력·계산·정렬·실행 취소](docs/media/ai-demos/excel-ai.jpg)](https://github.com/user-attachments/assets/5bb253d7-3cc5-4f31-989e-0c88dcb1615c) | +| **초안 작성·삽입·요약·실행 취소** | **입력·계산·정렬·실행 취소** | +| PowerPoint | PDF | +| [![만들기·복제·실행 취소](docs/media/ai-demos/pptx-ai.jpg)](https://github.com/user-attachments/assets/db3fc7a7-b54e-4147-a7ca-e7f16243618e) | [![읽기·질문·메모 검토](docs/media/ai-demos/pdf-ai.jpg)](https://github.com/user-attachments/assets/f01c2da6-0669-4111-87c1-c4440f4a60e9) | +| **만들기·복제·실행 취소** | **읽기·질문·메모 검토** | -## 🔤 글꼴 +영어 UI와 미리 로드한 로컬 Qwen3 4B 모델로 전체 작업을 정상 속도로 녹화했습니다. 응답 시간은 모델과 기기에 따라 달라집니다. -함께 넣은 OnlyOffice 빌드는 글꼴 라이브러리를 `public/fonts/`에 두고 -`public/sdkjs/common/AllFonts.js`로 색인합니다. 글꼴은 필요할 때 받아오므로, 문서가 실제로 -쓰는 것만 내려받습니다. +[영상, 자막 및 설명](docs/media/ai-demos/README.md) -→ **[글꼴 관리 안내](docs/fonts.md)** — 색인 카탈로그의 형식, 각 레지스트리, -`bin/font-catalog.mjs`로 글꼴 추가하기. +PDF는 선택 가능한 텍스트와 페이지 메모를 지원하며, 스캔 이미지 문자 인식이나 본문 수정은 지원하지 않습니다. ---- +
## 🛠 개발 +소스에서 실행: + ```bash +git clone https://github.com/ranuts/document.git +cd document pnpm install --frozen-lockfile -pnpm run dev # 개발 서버 -pnpm run build # 프로덕션 빌드(bin/build.sh) -pnpm run lint # oxlint + tsc + docker 설정 검사 -pnpm run test # 단위 테스트(Vitest) -pnpm run test:e2e # 종단 간 테스트(Playwright, 실제 편집기 + 실제 WASM) +pnpm run dev ``` -종단 간 테스트는 모의 객체가 아니라 진짜 편집기와 진짜 변환기를 돌립니다. 문서 왕복, -임베드 프로토콜, 복구 흐름까지 포함합니다. `docs/explorations/`에는 언뜻 이해하기 어려운 -구현이 왜 그렇게 되어 있는지가 기록되어 있습니다. 편집기 연동을 건드리기 전에 읽어 볼 -가치가 있습니다. - ---- - -## 🤖 브라우저 AI 에이전트(WebMCP) - -브라우저가 지원하는 경우, 페이지는 에이전트가 화면을 조작하는 대신 직접 호출할 수 있는 -도구를 등록합니다. `open_document_url`, `open_document_buffer`, `create_document`, -`save_document`, `get_document_text`, `set_readonly`, `get_document_state`입니다. -이때도 문서는 기기를 떠나지 않습니다. 내려받기와 변환을 브라우저가 직접 하기 때문입니다. -해당 API가 없는 환경에서는 아무 일도 일어나지 않습니다. - ---- +피드백과 기여를 환영합니다: [Issues](https://github.com/ranuts/document/issues) · [Pull requests](https://github.com/ranuts/document/pulls) ## 📚 기반 @@ -284,15 +129,12 @@ pnpm run test:e2e # 종단 간 테스트(Playwright, 실제 편집기 + - [ranui / ranuts](https://github.com/chaxus/ran) — 이 사이트를 이루는 디자인 시스템과 유틸리티 - [se-office](https://github.com/Qihoo360/se-office), [onlyoffice-web-local](https://github.com/sweetwisdom/onlyoffice-web-local) — 문서 서버 없이 OnlyOffice를 돌린 선행 사례 -## 🤝 기여 - -이슈와 풀 리퀘스트를 환영합니다. `main`은 보호되어 있으니 브랜치에서 작업하고 PR을 -열어 주세요. lint, 단위 테스트, 세 가지 종단 간 테스트(개발 서버, Cloudflare Pages 동작, -프로덕션 Docker 이미지)가 실행됩니다. - ## 📄 라이선스 -[AGPL-3.0](LICENSE). +[AGPL-3.0](LICENSE) · [NOTICE](NOTICE) + +
+상위 프로젝트 고지 및 상표 이 프로젝트는 ONLYOFFICE 편집기(sdkjs 및 web-apps, 저작권자 Ascensio System SIA)의 수정 버전입니다. 화면에는 중립적인 기능 이름을 사용하며 제품 로고나 브랜드 홍보를 @@ -308,3 +150,5 @@ ONLYOFFICE는 Ascensio System SIA의 상표입니다. 이 프로젝트는 공식 원본 기술을 식별하기 위한 것이며 이 프로젝트의 브랜드가 아닙니다. PWA 설치와 브라우저 탭에는 독립적으로 그린 중립적인 문서 아이콘을 사용합니다. 업스트림 로고, 상표 또는 프로젝트 이니셜은 포함하지 않습니다. + +
diff --git a/readme.md b/readme.md index 9ee1ee0dc..9ae5d88ea 100644 --- a/readme.md +++ b/readme.md @@ -1,7 +1,3 @@ -

- Document Editor -

- # Online Document Editor

@@ -17,9 +13,6 @@ Live site - - AI Assistant: Experimental Beta -

@@ -33,72 +26,35 @@ فارسی

-Edit Word, Excel and PowerPoint files, and annotate PDFs—all in your browser. -No Office installation or account required. Everyday editing stays local; turn on -an experimental AI assistant to draft content, work with data and create slides. +**An open source document workspace for you and your AI agents.** -**Live site: [edit.chaxus.com](https://edit.chaxus.com/)** +Open, edit, convert and save Word, Excel and PowerPoint files, and annotate PDFs in your browser. Core document processing runs locally, with no account or Office installation required. ---- +Use optional AI assistance (Experimental Beta), let browser agents call document tools through WebMCP, or install it as a PWA. Cached editor resources work offline; you can also self-host or embed the editor in your app. -## ✨ Features - -- 🔒 **Local editing** — conversion, editing and export happen in the browser; you choose where optional AI requests are processed -- 📝 **Editable office files** — DOCX, XLSX, PPTX and CSV, plus ODF, RTF, TXT and the legacy binary formats; PDFs open and can be annotated -- 💾 **Save where you want** — choose a save location and keep saving to it where supported; other browsers download your exports -- 🕓 **Resume your work** — local recovery copies help you reopen recent edits; kept for 7 days and deletable any time ([details](#-local-editing-and-data-handling)) -- 📴 **Works offline** — installable as a PWA; cached editor resources can be reused offline; uncached assets and remote files still require a network -- 🌍 **Multi-language** — 7 languages end to end (English, 中文, 日本語, Deutsch, Español, 한국어, Português): the pages, the app UI and the editor all follow the one you pick; the editor itself ships 45 -- 🧩 **Embeddable** — full postMessage API for iframe integration -- ✨ **AI document assistant (Experimental Beta)** — draft and polish text, fill spreadsheets, create slides and ask about PDFs; use an on-device model or your own AI service -- 🤖 **Agent-ready** — exposes WebMCP tools so a browser AI agent can open, convert and read documents -- 🚀 **Deploy anywhere** — a static build; a directory of files behind any web server +**Try it online: [edit.chaxus.com](https://edit.chaxus.com/)** --- -## AI document assistant (Experimental Beta) - -**Say what you need. See the result in your document.** Draft an update, fill a column, create a slide or ask about the current PDF page. The assistant works alongside the editor: inspect changes, cancel suggestions and use Undo after applying. - -**Still experimental.** Answers and edits can be wrong; check important results. The assistant is off by default. Choose an on-device model or connect your own AI service. External services receive the content needed for your request. - -| Word | Excel | -| ------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [![Draft, write, summarize and undo](docs/media/ai-demos/word-ai.jpg)](https://github.com/user-attachments/assets/8d1d6386-e33a-45f2-b968-b8695c8f7da9) | [![Fill, calculate, sort and undo](docs/media/ai-demos/excel-ai.jpg)](https://github.com/user-attachments/assets/5bb253d7-3cc5-4f31-989e-0c88dcb1615c) | -| **Draft, write, summarize and undo** | **Fill, calculate, sort and undo** | -| PowerPoint | PDF | -| [![Create, duplicate and undo](docs/media/ai-demos/pptx-ai.jpg)](https://github.com/user-attachments/assets/db3fc7a7-b54e-4147-a7ca-e7f16243618e) | [![Read, ask questions and review notes](docs/media/ai-demos/pdf-ai.jpg)](https://github.com/user-attachments/assets/f01c2da6-0669-4111-87c1-c4440f4a60e9) | -| **Create, duplicate and undo** | **Read, ask questions and review notes** | - -Click a preview to watch a complete workflow at normal speed, with time to read the results. English demos use the local Qwen3 4B model and fictional information. The model is already loaded when each recording starts; response times vary by model and device. - -[Videos, English captions and text descriptions](docs/media/ai-demos/README.md) · [User guide](https://edit.chaxus.com/ai-document-assistant) - -PDF assistance works with selectable text on the current page and page notes. It does not recognize text in scanned images or rewrite PDF body text. +## ✨ Features ---- +- **Edit locally.** Open, edit and convert documents on your device, without a required document upload. +- **Save your way.** Write back to your chosen file where supported, or download an export. Reopen recent work from this browser. +- **Work with AI (Experimental Beta).** Draft and refine text, work with spreadsheet data, create slides or ask about the current PDF page. Review changes before applying them. +- **Let agents handle documents.** In [WebMCP](docs/reference.md#webmcp-agent-tools)-compatible browsers, AI agents can open, convert and export files, and read text from word-processing documents. +- **Install as a PWA.** Use it as an app; cached editor resources can work offline. +- **Host or embed it.** Self-host a static site or add the editor to your app through its iframe API. ## 🚀 Quick start -**Use it:** [edit.chaxus.com](https://edit.chaxus.com/) — nothing to install. +[New document](https://edit.chaxus.com/editor?new=docx&locale=en) · [New spreadsheet](https://edit.chaxus.com/editor?new=xlsx&locale=en) · [New presentation](https://edit.chaxus.com/editor?new=pptx&locale=en) -**Self-host with Docker:** +Or run your own copy: ```bash docker run -d --name document -p 8080:80 ghcr.io/ranuts/document:latest ``` -**Run from source:** - -```bash -git clone https://github.com/ranuts/document.git -cd document -pnpm install -pnpm run dev -``` - ---- - ## 📄 Formats | Kind | Edit | Also opens | @@ -108,184 +64,63 @@ pnpm run dev | Presentations | `.pptx` | `.ppt` `.odp` | | PDF | annotate, fill, export | `.pdf` | -Any of them can be exported to PDF. CSV keeps its encoding on the way back out -(UTF-8, GB18030 and Latin-1 are sniffed on open). - ---- - -## 🔗 Routes and URL parameters - -| Route | What it is | -| --------------------- | ------------------------------------------------------------------ | -| `/` | Landing page. No editor bundle is loaded until you open something. | -| `/editor` | The editor. | -| `/history` | Documents this browser is holding (see below). | -| `/help`, `/changelog` | Generated from the markdown under `content/`. | +Export supported documents to PDF. -Parameters on `/editor`: - -| Parameter | Description | -| -------------- | ------------------------------------------------------------------------------------------------------------------------ | -| `src=` | Open a document from a URL (the URL must allow CORS) | -| `file=` | Same, legacy spelling; wins if both are present | -| `new=docx` | Start a blank document (`docx`, `xlsx`, `pptx`) | -| `saved=` | Reopen one of this browser's saved documents — the editor puts its own id here, so a reload returns to the same document | -| `readonly=1` | Open for viewing: editing and export are disabled | -| `embed=1` | Embed mode; the host page drives the editor over postMessage | -| `locale=zh-CN` | Interface language | - ---- +Multilingual interfaces, light and dark themes, and read-only preview are also supported. ## 🔐 Local editing and data handling -Editing and conversion run locally. Where the browser allows it, saving writes -straight back into the file you picked, so the document lives in your own file -system and not in a downloads folder. Two things are kept in the browser -itself, and both are yours to remove: - -- **Copies of what you edited.** While you work, the editor saves the document - into this browser (IndexedDB) so a refresh, a closed tab or a crash does not - cost you the work. Reopening the editor offers it back. These copies exist so - you can pick up where you left off — they are not a backup, so keep exporting - anything you want to keep. -- **Seven days, then gone.** Each document is deleted automatically seven days - after you last edited or opened it, whether or not you come back. - -[`/history`](https://edit.chaxus.com/history) lists what is stored, with a -delete on every row, a delete-all, and a switch to turn autosave off entirely. -Deleting there takes effect immediately. On a shared machine, that is the page -to visit. - -The optional AI assistant is off by default. With an on-device model, document content stays on your device. When you connect an AI service, the content needed for your request is sent to that service. Browser dictation may use an online speech service. In embed mode, exported files are returned to the parent application, which controls subsequent uploads. - ---- - -## 🧩 Embedding via iframe - -Embed the editor and drive it over postMessage. The usual split is: your system -handles auth and storage, the iframe handles editing. - -```html - -``` - -```js -// Open a document -iframe.contentWindow.postMessage( - { id: '1', type: 'document:open-url', payload: { url: 'https://example.com/doc.xlsx' } }, - 'https://your-deployment', -); - -// Listen for the result -window.addEventListener('message', (e) => { - if (e.data?.type === 'document:opened') console.log('Ready to edit'); - if (e.data?.type === 'document:saved') uploadFile(e.data.payload.file); -}); -``` - -Embedded editors keep no local history — the document belongs to the host page. - -→ **[Full API reference](docs/embed-api.md)** — every message type, the origin -allowlist, read-only mode and the save flow. - -Also available as a component: this project powers the document preview in -[@ranui/preview](https://www.npmjs.com/package/@ranui/preview) -([docs](https://chaxus.github.io/ran/src/ranui/preview/)). - ---- - -## 🚀 Deployment - -A static build — no runtime, no database. - -```bash -pnpm build # outputs to dist/ -``` +Recovery copies stay in this browser for 7 days after the last edit or open. Delete them in [Saved documents](https://edit.chaxus.com/history). Export anything you want to keep; recovery is not a backup. -### Static hosting (Cloudflare Pages, Nginx, Vercel, Netlify…) +Optional AI services receive the content needed for your request. On-device models keep it local. Browser dictation may use an online speech service; embedded exports are handled by the host app. -Upload `dist/`. `public/_headers` carries the caching contract the site expects -(hashed assets immutable, service worker never cached); hosts that ignore it -still work, they just revalidate more. +Your chosen browser AI agent controls how it handles content returned by document tools. -For Nginx, serve `index.html` as the fallback for unknown routes: +## Documentation -```nginx -location / { - root /var/www/document; - try_files $uri $uri/ /index.html; -} -``` +[User guide](https://edit.chaxus.com/help) · [Self-hosting, URLs and integration](docs/reference.md) · [Embedding API](docs/embed-api.md) · [Fonts](docs/fonts.md) -### GitHub Pages +Offline use needs cached editor assets; uncached resources and remote files still need a network. -`.github/workflows/pages-build-site.yml` builds and deploys on push to `main`. -Enable Pages in the repository settings with **GitHub Actions** as the source. +## AI document assistant (Experimental Beta) -### Docker +Draft and refine text, work with spreadsheet data, create slides or ask about the current PDF page. Review changes before applying and use Undo when needed. -```bash -# Basic -docker run -d --name document -p 8080:80 ghcr.io/ranuts/document:latest +Choose an on-device model or connect your own AI service. Dictate prompts where the browser supports speech input. -# With HTTPS and basic auth -docker run -d --name document -p 443:443 \ - -v /path/to/certs:/ssl \ - -e SERVER_BASIC_AUTH='user:$2y$...' \ - -e SERVER_HTTP2_TLS=true \ - -e SERVER_HTTP2_TLS_CERT=/ssl/cert.pem \ - -e SERVER_HTTP2_TLS_KEY=/ssl/key.pem \ - ghcr.io/ranuts/document:latest -``` +**Experimental Beta.** Off by default. Answers and edits can be wrong; check important results. -`SERVER_BASIC_AUTH` takes a BCrypt hash; double the `$` characters for shell -escaping. Caching for the image is configured in `sws.toml`. +
+Watch the four demos ---- +| Word | Excel | +| ------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [![Draft, write, summarize and undo](docs/media/ai-demos/word-ai.jpg)](https://github.com/user-attachments/assets/8d1d6386-e33a-45f2-b968-b8695c8f7da9) | [![Fill, calculate, sort and undo](docs/media/ai-demos/excel-ai.jpg)](https://github.com/user-attachments/assets/5bb253d7-3cc5-4f31-989e-0c88dcb1615c) | +| **Draft, write, summarize and undo** | **Fill, calculate, sort and undo** | +| PowerPoint | PDF | +| [![Create, duplicate and undo](docs/media/ai-demos/pptx-ai.jpg)](https://github.com/user-attachments/assets/db3fc7a7-b54e-4147-a7ca-e7f16243618e) | [![Read, ask questions and review notes](docs/media/ai-demos/pdf-ai.jpg)](https://github.com/user-attachments/assets/f01c2da6-0669-4111-87c1-c4440f4a60e9) | +| **Create, duplicate and undo** | **Read, ask questions and review notes** | -## 🔤 Fonts +Complete workflows at normal speed, recorded in English with a loaded local Qwen3 4B model. Response times vary by model and device. -The vendored OnlyOffice build ships its font library in `public/fonts/`, indexed -by `public/sdkjs/common/AllFonts.js`. Fonts are fetched on demand — a document -only pulls the ones it actually uses. +[Videos, captions and text descriptions](docs/media/ai-demos/README.md) -→ **[Font management guide](docs/fonts.md)** — the indexed catalog's wire -format, the registries, and adding fonts with `bin/font-catalog.mjs`. +PDF assistance covers selectable text and page notes, not scanned-image text or rewriting PDF body text. ---- +
## 🛠 Development +Run from source: + ```bash +git clone https://github.com/ranuts/document.git +cd document pnpm install --frozen-lockfile -pnpm run dev # dev server -pnpm run build # production build (bin/build.sh) -pnpm run lint # oxlint + tsc + docker config -pnpm run test # unit tests (Vitest) -pnpm run test:e2e # end-to-end tests (Playwright, real editor + real WASM) +pnpm run dev ``` -The end-to-end suite drives the real editor and the real converter rather than -mocks, including document round trips, the embed protocol and the recovery -flow. `docs/explorations/` records why each non-obvious piece is the way it is — -worth a look before changing the editor integration. - ---- - -## 🤖 Browser AI agents (WebMCP) - -Where the browser supports it, the page registers tools an in-browser agent can -call directly instead of driving the UI: `open_document_url`, -`open_document_buffer`, `create_document`, `save_document`, `get_document_text`, -`set_readonly`, `get_document_state`. Documents still never leave the device — -the browser fetches and converts them itself. Where the API is absent, this is -a no-op. - ---- +Feedback and contributions are welcome: [Issues](https://github.com/ranuts/document/issues) · [Pull requests](https://github.com/ranuts/document/pulls) ## 📚 Built on @@ -294,15 +129,12 @@ a no-op. - [ranui / ranuts](https://github.com/chaxus/ran) — the design system and utilities this site is built with - [se-office](https://github.com/Qihoo360/se-office), [onlyoffice-web-local](https://github.com/sweetwisdom/onlyoffice-web-local) — prior art for running OnlyOffice without a document server -## 🤝 Contributing - -Issues and pull requests are welcome. `main` is protected: work on a branch and -open a PR, which runs lint, unit tests and three end-to-end suites (dev server, -Cloudflare Pages semantics, and the production Docker image). - ## 📄 License -[AGPL-3.0](LICENSE). +[AGPL-3.0](LICENSE) · [NOTICE](NOTICE) + +
+Upstream notices and trademarks This project is a modified version of the ONLYOFFICE editors (sdkjs and web-apps, copyright Ascensio System SIA). Its interface uses neutral descriptions without @@ -322,3 +154,5 @@ upstream technology, not this project's brand. PWA installation and browser tabs use an independently drawn, neutral document icon. It contains no upstream logo, trademark or project initials. + +
diff --git a/readme.pt.md b/readme.pt.md index 5c22b2c71..e95fe632f 100644 --- a/readme.pt.md +++ b/readme.pt.md @@ -1,7 +1,3 @@ -

- Document Editor -

- # Editor de documentos online

@@ -17,10 +13,8 @@ Live site - - AI Assistant: Experimental Beta -

+

English | 简体中文 | @@ -32,69 +26,35 @@ فارسی

-Edite ficheiros do Word, Excel e PowerPoint e anote PDFs diretamente no navegador. Não é preciso instalar o Office nem criar uma conta. A edição e conversão são locais; pode ativar o assistente experimental de IA quando precisar. - -**Site: [edit.chaxus.com](https://edit.chaxus.com/)** +**Um espaço de documentos de código aberto para si e os seus agentes de IA.** ---- +Abra, edite, converta e guarde Word, Excel e PowerPoint e anote PDFs no navegador. O processamento básico de documentos é local, sem conta nem instalação do Office. -## ✨ Funcionalidades +Utilize assistência de IA opcional (Experimental Beta), ferramentas de documentos para agentes através do WebMCP ou a instalação como PWA. Os recursos do editor em cache funcionam offline; também pode hospedar o editor ou incorporá-lo na sua aplicação. -- 🔒 **Edição local** — a conversão, edição e exportação acontecem no navegador; escolhe onde os pedidos opcionais de IA são processados -- 📝 **Edição a sério, não pré-visualização** — DOCX, XLSX, PPTX e CSV, além de ODF, RTF, TXT e os antigos formatos binários; os PDF abrem e podem ser anotados -- 🕓 **Retome o trabalho** — as cópias de recuperação locais ajudam a reabrir as edições recentes; ficam guardadas 7 dias e podem ser apagadas a qualquer momento ([pormenores](#-edição-local-e-tratamento-de-dados)) -- 📴 **Funciona sem ligação** — instalável como PWA; os recursos do editor em cache podem ser reutilizados offline; recursos não guardados e ficheiros remotos precisam de rede -- 🌍 **Multilingue** — 7 idiomas de interface para o site e 45 para o editor -- 🧩 **Incorporável** — API completa de postMessage para integração em iframe -- ✨ **Assistente de documentos com IA (Experimental Beta)** — Crie textos, trabalhe com tabelas, gere slides e faça perguntas sobre PDFs com um modelo local ou seu próprio serviço de IA. -- 🤖 **Pronto para agentes** — expõe ferramentas WebMCP para que um agente de IA do navegador abra, converta e leia documentos -- 🚀 **Implanta-se em qualquer lado** — uma compilação estática; uma pasta de ficheiros atrás de qualquer servidor web +**Experimentar online: [edit.chaxus.com](https://edit.chaxus.com/)** --- -## Assistente de documentos com IA (Experimental Beta) - -Descreva o que precisa e confira o resultado no documento. Crie um texto, preencha uma coluna, gere um slide ou faça perguntas sobre a página atual de um PDF. Revise ou cancele as sugestões; as alterações aplicadas podem ser desfeitas. - -**Ainda experimental.** As respostas e alterações podem estar erradas. Confira os resultados importantes. O assistente vem desativado. Escolha um modelo local ou conecte seu próprio serviço de IA. Serviços externos recebem o conteúdo necessário para sua solicitação. - -| Word | Excel | -| ----------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [![Redigir, inserir, resumir e desfazer](docs/media/ai-demos/word-ai.jpg)](https://github.com/user-attachments/assets/8d1d6386-e33a-45f2-b968-b8695c8f7da9) | [![Preencher, calcular, ordenar e desfazer](docs/media/ai-demos/excel-ai.jpg)](https://github.com/user-attachments/assets/5bb253d7-3cc5-4f31-989e-0c88dcb1615c) | -| **Redigir, inserir, resumir e desfazer** | **Preencher, calcular, ordenar e desfazer** | -| PowerPoint | PDF | -| [![Criar, duplicar e desfazer](docs/media/ai-demos/pptx-ai.jpg)](https://github.com/user-attachments/assets/db3fc7a7-b54e-4147-a7ca-e7f16243618e) | [![Ler, perguntar e rever notas](docs/media/ai-demos/pdf-ai.jpg)](https://github.com/user-attachments/assets/f01c2da6-0669-4111-87c1-c4440f4a60e9) | -| **Criar, duplicar e desfazer** | **Ler, perguntar e rever notas** | - -Clique numa prévia para assistir a um fluxo completo em velocidade normal, com tempo para ler os resultados. Os vídeos usam a interface em inglês, Qwen3 4B local e informações fictícias. O modelo já está carregado no início; o tempo de resposta depende do modelo e do dispositivo. - -[Vídeos, legendas em inglês e descrições](docs/media/ai-demos/README.md) +## ✨ Funcionalidades -A assistência para PDF usa o texto selecionável da página atual e notas de página. Não reconhece texto em imagens digitalizadas nem reescreve o corpo do PDF. - ---- +- **Edição e conversão local.** Os documentos são processados no dispositivo sem precisar de upload para editar ou converter. +- **Guarde como preferir.** No ficheiro escolhido quando o navegador permite, ou por download. Retome documentos recentes neste navegador. +- **Trabalhe com IA (Experimental Beta).** Redija e melhore textos, trabalhe com dados de folhas de cálculo, crie diapositivos ou faça perguntas sobre a página PDF atual. Reveja as alterações antes de aplicar. +- **Agentes usam ferramentas de documentos.** Em navegadores compatíveis com [WebMCP](docs/reference.md#webmcp-agent-tools), os agentes de IA podem abrir, converter e exportar ficheiros e ler texto de documentos de texto. +- **Instale como PWA.** Utilize como uma aplicação; os recursos do editor em cache funcionam offline. +- **Hospede ou incorpore.** Publique um site estático ou incorpore o editor na sua aplicação através da API de iframe. ## 🚀 Começar -**Usar já:** [edit.chaxus.com](https://edit.chaxus.com/) — nada a instalar. +[Novo documento](https://edit.chaxus.com/editor?new=docx&locale=pt-PT) · [Nova folha de cálculo](https://edit.chaxus.com/editor?new=xlsx&locale=pt-PT) · [Nova apresentação](https://edit.chaxus.com/editor?new=pptx&locale=pt-PT) -**Alojar por si com Docker:** +Ou execute a sua própria cópia: ```bash docker run -d --name document -p 8080:80 ghcr.io/ranuts/document:latest ``` -**Correr a partir do código:** - -```bash -git clone https://github.com/ranuts/document.git -cd document -pnpm install -pnpm run dev -``` - ---- - ## 📄 Formatos | Tipo | Editar | Também abre | @@ -104,181 +64,63 @@ pnpm run dev | Apresentações | `.pptx` | `.ppt` `.odp` | | PDF | anotar, preencher, exportar | `.pdf` | -Qualquer um deles pode ser exportado para PDF. O CSV mantém a codificação à saída (na -abertura são detetados UTF-8, GB18030 e Latin-1). - ---- - -## 🔗 Rotas e parâmetros de URL - -| Rota | O que é | -| --------------------- | ----------------------------------------------------------------- | -| `/` | Página inicial. O editor só é carregado quando abre alguma coisa. | -| `/editor` | O editor. | -| `/history` | Documentos que este navegador tem guardados (ver abaixo). | -| `/help`, `/changelog` | Gerados a partir do markdown em `content/`. | +Os documentos compatíveis podem ser exportados para PDF. -Parâmetros de `/editor`: - -| Parâmetro | Descrição | -| ------------ | --------------------------------------------------------------------------------------------------------------------------------------- | -| `src=` | Abrir um documento a partir de um URL (esse URL tem de permitir CORS) | -| `file=` | O mesmo, na grafia antiga; se ambos existirem, prevalece este | -| `new=docx` | Criar um documento em branco (`docx`, `xlsx`, `pptx`) | -| `doc=` | Reabrir um documento do histórico deste navegador — o editor coloca aqui o seu próprio id, por isso recarregar volta ao mesmo documento | -| `readonly=1` | Abrir só para consulta: edição e exportação ficam desativadas | -| `embed=1` | Modo incorporado; a página anfitriã comanda o editor por postMessage | -| `locale=pt` | Idioma da interface | - ---- +Também suporta interfaces multilingues, temas claro e escuro e pré-visualização só de leitura. ## 🔐 Edição local e tratamento de dados -A edição e a conversão são realizadas localmente. Só ficam duas coisas guardadas localmente, -e ambas pode remover: +As cópias de recuperação ficam neste navegador durante 7 dias após a última edição ou abertura. Apague-as em [Documentos guardados](https://edit.chaxus.com/history). Não são um backup; exporte os ficheiros importantes. -- **Cópias daquilo que editou.** Enquanto trabalha, o editor guarda o documento neste - navegador (IndexedDB) para que recarregar, fechar um separador ou uma falha não lhe custem - o trabalho. Ao reabrir o editor, ele volta a oferecê-las. Estas cópias existem para poder - retomar o que estava a meio — não são uma cópia de segurança, por isso continue a exportar - tudo o que quiser guardar. -- **Sete dias e desaparecem.** Cada documento é apagado automaticamente sete dias depois da - última vez que o editou ou abriu, quer volte ou não. +Os serviços de IA externos recebem o conteúdo necessário para o pedido. Os modelos locais processam-no no dispositivo. O ditado pode usar um serviço de voz online; a aplicação anfitriã trata as exportações incorporadas. -[`/history`](https://edit.chaxus.com/history) lista o que está guardado, com um botão de -eliminar em cada linha, um para eliminar tudo e um interruptor para desligar por completo a -gravação automática. Eliminar ali tem efeito imediato. Num computador partilhado, é a página -a visitar. +O agente de IA do navegador escolhido controla como processa o conteúdo devolvido pelas ferramentas de documentos. -O assistente de IA vem desativado. Com um modelo local, o conteúdo fica no seu dispositivo. Ao ligar o seu próprio serviço de IA, o conteúdo necessário para o pedido é enviado a esse serviço. O ditado do navegador pode usar um serviço de reconhecimento de voz online. No modo incorporado, os ficheiros exportados voltam à aplicação anfitriã, que controla os envios posteriores. +## Documentação e integração ---- - -## 🧩 Incorporar num iframe +[Guia de utilização](https://edit.chaxus.com/pt/help) · [Hospedagem, URLs e integração](docs/reference.md) · [API de incorporação](docs/embed-api.md) · [Tipos de letra](docs/fonts.md) -Incorpore o editor e comande-o por postMessage. A divisão habitual é: o seu sistema trata da -autenticação e do armazenamento, o iframe trata da edição. +A utilização offline exige recursos do editor em cache. Recursos não guardados e ficheiros remotos precisam de ligação. -```html - -``` - -```js -// Abrir um documento -iframe.contentWindow.postMessage( - { id: '1', type: 'document:open-url', payload: { url: 'https://example.com/doc.xlsx' } }, - 'https://your-deployment', -); - -// Ouvir o resultado -window.addEventListener('message', (e) => { - if (e.data?.type === 'document:opened') console.log('Pronto a editar'); - if (e.data?.type === 'document:saved') uploadFile(e.data.payload.file); -}); -``` - -Os editores incorporados não mantêm histórico local — o documento pertence à página anfitriã. - -→ **[Referência completa da API](docs/embed-api.md)** — todos os tipos de mensagem, a lista -de origens permitidas, o modo de leitura e o fluxo de gravação. - -Também disponível como componente: é este projeto que move a pré-visualização de documentos -do [@ranui/preview](https://www.npmjs.com/package/@ranui/preview) -([documentação](https://chaxus.github.io/ran/src/ranui/preview/)). - ---- - -## 🚀 Implantação - -Uma compilação estática — sem runtime, sem base de dados. - -```bash -pnpm build # sai para dist/ -``` - -### Alojamento estático (Cloudflare Pages, Nginx, Vercel, Netlify…) - -Carregue `dist/`. O ficheiro `public/_headers` traz o contrato de cache que o site pressupõe -(recursos com hash imutáveis, service worker nunca em cache); alojamentos que o ignorem -continuam a funcionar, apenas revalidam mais vezes. - -No Nginx, sirva `index.html` como alternativa para rotas desconhecidas: - -```nginx -location / { - root /var/www/document; - try_files $uri $uri/ /index.html; -} -``` - -### GitHub Pages - -`.github/workflows/pages-build-site.yml` compila e publica a cada push para `main`. Ative as -Pages nas definições do repositório com **GitHub Actions** como origem. +## Assistente de documentos com IA (Experimental Beta) -### Docker +Redija e melhore textos, trabalhe com dados de folhas de cálculo, crie diapositivos ou faça perguntas sobre a página PDF atual. Reveja as alterações antes de aplicar e desfaça-as quando necessário. -```bash -# Básico -docker run -d --name document -p 8080:80 ghcr.io/ranuts/document:latest +Escolha um modelo local ou ligue o seu próprio serviço de IA. Pode ditar instruções em navegadores com entrada de voz. -# Com HTTPS e autenticação básica -docker run -d --name document -p 443:443 \ - -v /path/to/certs:/ssl \ - -e SERVER_BASIC_AUTH='user:$2y$...' \ - -e SERVER_HTTP2_TLS=true \ - -e SERVER_HTTP2_TLS_CERT=/ssl/cert.pem \ - -e SERVER_HTTP2_TLS_KEY=/ssl/key.pem \ - ghcr.io/ranuts/document:latest -``` +**Experimental Beta.** Desativado por predefinição. Respostas e alterações podem estar erradas; confirme resultados importantes. -`SERVER_BASIC_AUTH` recebe um hash BCrypt; duplique os caracteres `$` para os escapar na -shell. A cache da imagem é configurada em `sws.toml`. +
+Ver as quatro demos ---- +| Word | Excel | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [![Redigir, inserir, resumir e desfazer](docs/media/ai-demos/word-ai.jpg)](https://github.com/user-attachments/assets/8d1d6386-e33a-45f2-b968-b8695c8f7da9) | [![Preencher, calcular, ordenar e desfazer](docs/media/ai-demos/excel-ai.jpg)](https://github.com/user-attachments/assets/5bb253d7-3cc5-4f31-989e-0c88dcb1615c) | +| **Redigir, inserir, resumir e desfazer** | **Preencher, calcular, ordenar e desfazer** | +| PowerPoint | PDF | +| [![Criar, duplicar e desfazer](docs/media/ai-demos/pptx-ai.jpg)](https://github.com/user-attachments/assets/db3fc7a7-b54e-4147-a7ca-e7f16243618e) | [![Ler, perguntar e rever notas](docs/media/ai-demos/pdf-ai.jpg)](https://github.com/user-attachments/assets/f01c2da6-0669-4111-87c1-c4440f4a60e9) | +| **Criar, duplicar e desfazer** | **Ler, perguntar e rever notas** | -## 🔤 Tipos de letra +Fluxos completos à velocidade normal, em inglês, com o modelo local Qwen3 4B já carregado. O tempo de resposta depende do modelo e do dispositivo. -A compilação do OnlyOffice incluída traz a biblioteca de tipos de letra em `public/fonts/`, -indexada por `public/sdkjs/common/AllFonts.js`. Os tipos de letra são obtidos a pedido — um -documento só descarrega aqueles que realmente usa. +[Vídeos, legendas e descrições](docs/media/ai-demos/README.md) -→ **[Guia de gestão de tipos de letra](docs/fonts.md)** — o formato do catálogo indexado, os -registos e como acrescentar tipos de letra com `bin/font-catalog.mjs`. +O PDF suporta texto selecionável e notas de página, não reconhece texto em imagens digitalizadas nem reescreve o corpo do PDF. ---- +
## 🛠 Desenvolvimento +Executar a partir do código: + ```bash +git clone https://github.com/ranuts/document.git +cd document pnpm install --frozen-lockfile -pnpm run dev # servidor de desenvolvimento -pnpm run build # compilação de produção (bin/build.sh) -pnpm run lint # oxlint + tsc + configuração do docker -pnpm run test # testes unitários (Vitest) -pnpm run test:e2e # testes de ponta a ponta (Playwright, editor real + WASM real) +pnpm run dev ``` -A suíte de ponta a ponta usa o editor verdadeiro e o conversor verdadeiro em vez de -simulações, incluindo idas e voltas de documentos, o protocolo de incorporação e o fluxo de -recuperação. `docs/explorations/` regista por que razão cada peça menos óbvia é como é — -vale a pena ler antes de mexer na integração do editor. - ---- - -## 🤖 Agentes de IA no navegador (WebMCP) - -Onde o navegador o suporta, a página regista ferramentas que um agente pode invocar -diretamente em vez de manobrar a interface: `open_document_url`, `open_document_buffer`, -`create_document`, `save_document`, `get_document_text`, `set_readonly`, -`get_document_state`. Também aqui os documentos não saem do dispositivo — é o próprio -navegador que os obtém e converte. Onde a API não existe, nada acontece. - ---- +Comentários e contribuições são bem-vindos: [Issues](https://github.com/ranuts/document/issues) · [Pull requests](https://github.com/ranuts/document/pulls) ## 📚 Construído sobre @@ -287,15 +129,12 @@ navegador que os obtém e converte. Onde a API não existe, nada acontece. - [ranui / ranuts](https://github.com/chaxus/ran) — o sistema de design e os utilitários com que este site é feito - [se-office](https://github.com/Qihoo360/se-office), [onlyoffice-web-local](https://github.com/sweetwisdom/onlyoffice-web-local) — trabalho anterior sobre usar o OnlyOffice sem servidor de documentos -## 🤝 Contribuir - -Issues e pull requests são bem-vindos. O `main` está protegido: trabalhe num ramo e abra um -PR, que corre o lint, os testes unitários e três suítes de ponta a ponta (servidor de -desenvolvimento, comportamento do Cloudflare Pages e imagem Docker de produção). - ## 📄 Licença -[AGPL-3.0](LICENSE). +[AGPL-3.0](LICENSE) · [NOTICE](NOTICE) + +
+Avisos do projeto original e marcas Este projeto é uma versão modificada dos editores ONLYOFFICE (sdkjs e web-apps, copyright de Ascensio System SIA). A interface usa nomes funcionais neutros, sem @@ -315,3 +154,5 @@ não a marca deste projeto. A instalação PWA e as abas do navegador usam um ícone de documento neutro desenhado de forma independente, sem logótipos, marcas ou iniciais do projeto. + +
diff --git a/readme.zh.md b/readme.zh.md index 729131c92..9e12feb26 100644 --- a/readme.zh.md +++ b/readme.zh.md @@ -1,7 +1,3 @@ -

- Document Editor -

- # 在线文档编辑器

@@ -17,9 +13,6 @@ 在线站点 - - AI 助手:实验性功能 -

@@ -33,71 +26,35 @@ فارسی

-在浏览器里编辑 Word、Excel 和 PowerPoint,或为 PDF 添加批注,无需安装 Office 或注册账号。 -日常编辑与转换在本地完成;也可以开启实验性 AI 助手,用自然语言起草内容、处理表格和创建幻灯片。 +**开源文档工作台,为你和 AI Agent 准备。** -**线上地址:[edit.chaxus.com](https://edit.chaxus.com/)** +在浏览器里打开、编辑、转换并保存 Word、Excel 和 PowerPoint,为 PDF 添加批注。基础文档处理在本地完成,无需注册或安装 Office。 ---- +支持可选 AI 助手(Experimental Beta)、WebMCP Agent 调用和 PWA 安装;已缓存的编辑器资源可离线使用,也可自行部署或嵌入应用。 -## ✨ 主要特性 - -- 🔒 **本地编辑** — 文档转换、编辑与导出在浏览器内完成;可选 AI 服务的数据去向由你选择 -- 📝 **直接编辑 Office 文件** — DOCX、XLSX、PPTX、CSV,另支持 ODF、RTF、TXT 与旧版二进制格式;PDF 可打开并批注 -- 💾 **保存到你选择的位置** — 支持的浏览器可持续写回所选位置;其它浏览器会下载导出的文件 -- 🕓 **继续最近的工作** — 浏览器内的恢复副本帮助你重新打开最近的编辑,保留 7 天,随时可删除([说明](#-本地编辑与数据去向)) -- 📴 **可离线使用** — 可安装为 PWA,已缓存的编辑器资源可离线复用;未缓存的资源和远程文件仍需联网 -- 🌍 **多语言** — 站点界面 7 种语言,编辑器界面 45 种 -- 🧩 **可嵌入** — 完整的 iframe postMessage API -- ✨ **AI 文档助手(Experimental Beta)** — 起草与润色文字、填写表格、创建幻灯片、询问 PDF;支持本机模型或自己的 AI 服务 -- 🤖 **面向 Agent** — 提供 WebMCP 工具,浏览器内的 AI Agent 可直接打开、转换、读取文档 -- 🚀 **随处部署** — 纯静态产物,放在任意 Web 服务器后面即可 +**在线体验:[edit.chaxus.com](https://edit.chaxus.com/)** --- -## AI 文档助手 (Experimental Beta) - -**把要求说出来,在文档里完成。** 起草一份更新、填写一列数据、创建幻灯片,或询问 PDF 当前页的内容。助手与编辑器协作,你可以检查修改、取消建议,或在应用后撤销。 - -**仍属实验性功能。** 回答和修改可能有误,请核对重要结果。助手默认关闭;可选择本机模型,或连接自己的 AI 服务。使用外部服务时,请求内容会发送给所选服务。 - -| Word | Excel | -| --------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | -| [![起草、写入、摘要与撤销](docs/media/ai-demos/word-ai.jpg)](https://github.com/user-attachments/assets/8d1d6386-e33a-45f2-b968-b8695c8f7da9) | [![填充、求和、排序与撤销](docs/media/ai-demos/excel-ai.jpg)](https://github.com/user-attachments/assets/5bb253d7-3cc5-4f31-989e-0c88dcb1615c) | -| **起草、写入、摘要与撤销** | **填充、求和、排序与撤销** | -| PowerPoint | PDF | -| [![创建、复制与撤销](docs/media/ai-demos/pptx-ai.jpg)](https://github.com/user-attachments/assets/db3fc7a7-b54e-4147-a7ca-e7f16243618e) | [![读取、问答与批注预览](docs/media/ai-demos/pdf-ai.jpg)](https://github.com/user-attachments/assets/f01c2da6-0669-4111-87c1-c4440f4a60e9) | -| **创建、复制与撤销** | **读取、问答与批注预览** | - -点击预览观看正常速度的完整操作,每一步都留有阅读结果的时间。视频使用英文界面、本机 Qwen3 4B 与虚构资料录制,开始时模型已加载;实际响应速度取决于模型和设备。 - -[视频、英文字幕与文字说明](docs/media/ai-demos/README.md) · [使用指南](https://edit.chaxus.com/zh-CN/ai-document-assistant) - -PDF 功能面向当前页可选中的文字与页面批注;暂不识别扫描图片中的文字,也不改写 PDF 正文。 +## ✨ 主要特性 ---- +- **本地编辑与转换。** 文档处理在你的设备上完成,无需上传文档即可编辑和转换。 +- **自由保存,继续工作。** 浏览器支持时可存回选定文件,也可下载导出;从当前浏览器恢复最近的编辑。 +- **与 AI 协作(Experimental Beta)。** 起草和润色文字、处理表格数据、创建幻灯片,或询问当前 PDF 页面的内容;审阅后再应用修改。 +- **让 Agent 调用文档工具。** 支持 [WebMCP](docs/reference.md#webmcp-agent-tools) 的浏览器中,AI Agent 可打开、转换、导出文档,读取文字文档正文。 +- **安装为 PWA。** 像应用一样使用,已缓存的编辑器资源可离线复用。 +- **自行部署与集成。** 可作为静态站点部署,也可通过 iframe API 嵌入你的应用。 ## 🚀 快速开始 -**直接使用:**[edit.chaxus.com](https://edit.chaxus.com/),无需安装。 +[新建文档](https://edit.chaxus.com/editor?new=docx&locale=zh-CN) · [新建表格](https://edit.chaxus.com/editor?new=xlsx&locale=zh-CN) · [新建演示](https://edit.chaxus.com/editor?new=pptx&locale=zh-CN) -**用 Docker 自建:** +也可以运行自己的版本: ```bash docker run -d --name document -p 8080:80 ghcr.io/ranuts/document:latest ``` -**从源码运行:** - -```bash -git clone https://github.com/ranuts/document.git -cd document -pnpm install -pnpm run dev -``` - ---- - ## 📄 支持的格式 | 类型 | 可编辑 | 也能打开 | @@ -107,169 +64,63 @@ pnpm run dev | 演示 | `.pptx` | `.ppt` `.odp` | | PDF | 批注、填写、导出 | `.pdf` | -以上都可以导出为 PDF。CSV 存回时保持原编码(打开时会依次嗅探 UTF-8、GB18030、Latin-1)。 - ---- - -## 🔗 路由与 URL 参数 - -| 路由 | 说明 | -| --------------------- | ---------------------------------------- | -| `/` | 落地页。不打开文档就不会加载编辑器代码。 | -| `/editor` | 编辑器。 | -| `/history` | 本机浏览器当前保存的文档(见下)。 | -| `/help`、`/changelog` | 由 `content/` 下的 markdown 生成。 | +支持的文档可导出为 PDF。 -`/editor` 的参数: - -| 参数 | 说明 | -| -------------- | ------------------------------------------------------------------------ | -| `src=` | 从 URL 打开文档(该 URL 需允许 CORS) | -| `file=` | 同上,旧写法;两者同时存在时以它为准 | -| `new=docx` | 新建空白文档(`docx`、`xlsx`、`pptx`) | -| `saved=` | 打开本机保存的某一篇——编辑器会把自己的 id 写在这里,因此刷新会回到同一篇 | -| `readonly=1` | 只读打开:禁用编辑与导出 | -| `embed=1` | 嵌入模式,由宿主页面通过 postMessage 驱动 | -| `locale=zh-CN` | 界面语言 | - ---- +还支持多语言界面、明暗主题和只读预览。 ## 🔐 本地编辑与数据去向 -文档编辑和转换在本地完成。在浏览器支持的情况下,保存会直接写回你选定的那个文件, -文档因此留在你自己的文件系统里,而不是下载目录里。浏览器本身还会保留两样东西, -且都可以由你删除: - -- **你编辑过的文档副本**:编辑过程中,编辑器会把文档保存进这个浏览器(IndexedDB), - 刷新、误关标签页、浏览器崩溃都不会让工作白做,重新打开编辑器会提示你接着编辑。 - 这些副本是为了让你接着做没做完的事,不是备份——想长期保留请导出到电脑。 -- **七天后自动删除**:每篇文档在你最后一次编辑或打开的七天后自动删除,不需要你做任何事。 - -[`/history`](https://edit.chaxus.com/history) 列出当前保存了哪些文档,每一行都能删除, -也可以一次全部删除,还能直接关掉自动保存。在那里删除立即生效。共用电脑上,先看这一页。 - -AI 助手默认关闭,目前属于实验性功能。选择本机模型时,内容在此设备处理;连接自己的 AI 服务时,请求内容会发送给所选服务。浏览器听写可能通过在线语音服务识别。嵌入模式会把导出文件返回给父应用,后续是否上传由父应用决定。 - ---- - -## 🧩 通过 iframe 嵌入 - -嵌入编辑器并用 postMessage 驱动。常见分工是:你的系统负责鉴权与存储,iframe 只负责编辑。 - -```html - -``` - -```js -// 打开文档 -iframe.contentWindow.postMessage( - { id: '1', type: 'document:open-url', payload: { url: 'https://example.com/doc.xlsx' } }, - 'https://your-deployment', -); - -// 监听结果 -window.addEventListener('message', (e) => { - if (e.data?.type === 'document:opened') console.log('可以编辑了'); - if (e.data?.type === 'document:saved') uploadFile(e.data.payload.file); -}); -``` - -嵌入模式下不会写入本地历史——那份文档属于宿主页面。 - -→ **[完整 API 文档](docs/embed-api.zh.md)** — 全部消息类型、来源白名单、只读模式与保存流程。 - -也可以作为组件使用:本项目为 -[@ranui/preview](https://www.npmjs.com/package/@ranui/preview) -提供文档预览能力([组件文档](https://chaxus.github.io/ran/src/ranui/preview/))。 - ---- - -## 🚀 部署 - -纯静态产物——没有运行时,没有数据库。 - -```bash -pnpm build # 产物在 dist/ -``` +恢复副本保存在当前浏览器,最后编辑或打开后保留 7 天,可在[已保存的文档](https://edit.chaxus.com/history)中删除。恢复副本不是备份,重要文件请及时导出。 -### 静态托管(Cloudflare Pages、Nginx、Vercel、Netlify……) +使用外部 AI 服务时,请求所需内容会发送到该服务;本机模型在设备上处理。浏览器听写可能使用在线语音服务,嵌入模式下的导出由宿主应用处理。 -上传 `dist/` 即可。`public/_headers` 里写着本站期望的缓存契约(带哈希的资源永久缓存、 -service worker 永不缓存);不支持该文件的托管也能跑,只是会多做校验。 +浏览器 AI Agent 对文档工具返回内容的后续处理,由所用 Agent 决定。 -Nginx 需要把 `index.html` 作为未知路由的兜底: +## 文档与集成 -```nginx -location / { - root /var/www/document; - try_files $uri $uri/ /index.html; -} -``` +[使用指南](https://edit.chaxus.com/zh-CN/help) · [自行部署、URL 参数与集成](docs/reference.md) · [嵌入 API](docs/embed-api.zh.md) · [字体管理](docs/fonts.zh.md) -### GitHub Pages +离线使用需要已缓存的编辑器资源,未缓存的资源和远程文件仍需联网。 -`.github/workflows/pages-build-site.yml` 会在推送到 `main` 时构建并部署。 -在仓库设置里启用 Pages,来源选 **GitHub Actions**。 +## AI 文档助手 (Experimental Beta) -### Docker +起草和润色文字、处理表格数据、创建幻灯片,或询问当前 PDF 页面的内容。先审阅修改建议,再决定是否应用;需要时可撤销。 -```bash -# 基础用法 -docker run -d --name document -p 8080:80 ghcr.io/ranuts/document:latest +可选择本机模型或连接自己的 AI 服务;浏览器支持时可通过语音输入指令。 -# 带 HTTPS 与基础认证 -docker run -d --name document -p 443:443 \ - -v /path/to/certs:/ssl \ - -e SERVER_BASIC_AUTH='user:$2y$...' \ - -e SERVER_HTTP2_TLS=true \ - -e SERVER_HTTP2_TLS_CERT=/ssl/cert.pem \ - -e SERVER_HTTP2_TLS_KEY=/ssl/key.pem \ - ghcr.io/ranuts/document:latest -``` +**Experimental Beta.** 默认关闭。回答和修改可能有误,请核对重要结果。 -`SERVER_BASIC_AUTH` 接受 BCrypt 哈希;shell 里需要把 `$` 写成 `$$` 转义。 -镜像自身的缓存策略在 `sws.toml`。 +
+观看四段功能演示 ---- +| Word | Excel | +| --------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | +| [![起草、写入、摘要与撤销](docs/media/ai-demos/word-ai.jpg)](https://github.com/user-attachments/assets/8d1d6386-e33a-45f2-b968-b8695c8f7da9) | [![填充、求和、排序与撤销](docs/media/ai-demos/excel-ai.jpg)](https://github.com/user-attachments/assets/5bb253d7-3cc5-4f31-989e-0c88dcb1615c) | +| **起草、写入、摘要与撤销** | **填充、求和、排序与撤销** | +| PowerPoint | PDF | +| [![创建、复制与撤销](docs/media/ai-demos/pptx-ai.jpg)](https://github.com/user-attachments/assets/db3fc7a7-b54e-4147-a7ca-e7f16243618e) | [![读取、问答与批注预览](docs/media/ai-demos/pdf-ai.jpg)](https://github.com/user-attachments/assets/f01c2da6-0669-4111-87c1-c4440f4a60e9) | +| **创建、复制与撤销** | **读取、问答与批注预览** | -## 🔤 字体 +英文界面下的完整流程,按正常速度录制;本机 Qwen3 4B 模型已提前加载,响应时间随模型和设备而变化。 -随附的 OnlyOffice 构建把字体库放在 `public/fonts/`,由 -`public/sdkjs/common/AllFonts.js` 建立索引。字体按需拉取——一篇文档只会下载它真正用到的那些。 +[视频、字幕和文字说明](docs/media/ai-demos/README.md) -→ **[字体管理指南](docs/fonts.zh.md)** — 索引字体目录的线格式、各处注册表, -以及如何用 `bin/font-catalog.mjs` 添加字体。 +PDF 助手支持当前页可选文字和页面便笺,不识别扫描图片中的文字,也不改写 PDF 正文。 ---- +
## 🛠 开发 +从源码运行: + ```bash +git clone https://github.com/ranuts/document.git +cd document pnpm install --frozen-lockfile -pnpm run dev # 开发服务器 -pnpm run build # 生产构建(bin/build.sh) -pnpm run lint # oxlint + tsc + docker 配置检查 -pnpm run test # 单元测试(Vitest) -pnpm run test:e2e # 端到端测试(Playwright,真实编辑器 + 真实 WASM) +pnpm run dev ``` -端到端测试跑的是真实编辑器和真实转换器,不是 mock,覆盖文档往返、嵌入协议与恢复流程。 -`docs/explorations/` 记录了每一处不显然的设计为什么是现在这样——改编辑器集成之前值得先读。 - ---- - -## 🤖 浏览器 AI Agent(WebMCP) - -在支持该能力的浏览器上,页面会注册一组工具,浏览器内的 Agent 可以直接调用,而不必去"看"和"点" -界面:`open_document_url`、`open_document_buffer`、`create_document`、`save_document`、 -`get_document_text`、`set_readonly`、`get_document_state`。文档同样不会离开设备——由浏览器 -自己抓取和转换。浏览器没有这套 API 时整体无操作,对普通用户零影响。 - ---- +欢迎反馈和贡献: [Issues](https://github.com/ranuts/document/issues) · [Pull requests](https://github.com/ranuts/document/pulls) ## 📚 基于这些项目 @@ -278,14 +129,12 @@ pnpm run test:e2e # 端到端测试(Playwright,真实编辑器 + 真 - [ranui / ranuts](https://github.com/chaxus/ran) — 本站使用的设计体系与工具库 - [se-office](https://github.com/Qihoo360/se-office)、[onlyoffice-web-local](https://github.com/sweetwisdom/onlyoffice-web-local) — 无文档服务器运行 OnlyOffice 的先行方案 -## 🤝 贡献 - -欢迎提 Issue 和 PR。`main` 受保护:请在分支上开发并提 PR,CI 会跑 lint、单元测试, -以及三套端到端测试(开发服务器、Cloudflare Pages 语义、生产 Docker 镜像)。 - ## 📄 许可证 -[AGPL-3.0](LICENSE)。 +[AGPL-3.0](LICENSE) · [NOTICE](NOTICE) + +
+上游声明与商标说明 本项目是 ONLYOFFICE 编辑器(sdkjs 与 web-apps,版权归 Ascensio System SIA) 的修改版本。界面采用中性功能名称,不展示产品 logo 或品牌宣传。版权、许可证、 @@ -300,3 +149,5 @@ ONLYOFFICE 是 Ascensio System SIA 的商标。本项目并非官方 ONLYOFFICE 上游技术来源,不作为本项目品牌。 PWA 安装和浏览器标签页使用独立绘制的中性文档图标,不含上游 logo、商标或项目字母标识。 + +