German translations of the seven user-facing docs under docs/de/
All checks were successful
CD / Build and push images (push) Successful in 1m10s
CD / Deploy to Test (push) Successful in 10s
CD / Smoke tests against Test (push) Successful in 1m14s
CD / Promote to Int (push) Successful in 11s
CI / Lint, typecheck, test (push) Successful in 4m6s
CI / Build container images (push) Has been skipped
CI / Auth e2e pack (push) Successful in 5m35s
CI / Import/export fidelity gate (push) Successful in 48s
All checks were successful
CD / Build and push images (push) Successful in 1m10s
CD / Deploy to Test (push) Successful in 10s
CD / Smoke tests against Test (push) Successful in 1m14s
CD / Promote to Int (push) Successful in 11s
CI / Lint, typecheck, test (push) Successful in 4m6s
CI / Build container images (push) Has been skipped
CI / Auth e2e pack (push) Successful in 5m35s
CI / Import/export fidelity gate (push) Successful in 48s
Mirrors the English tree (docs/de/{features.md,manual/*,developer/
extending.md}) so relative links between translated guides resolve
within the German set; links into untranslated areas (self-hosting,
architecture, deploy) point at the English files and say so. Every
quoted UI label matches the actual German interface strings. Each
pair of files cross-links the other language; English stays
authoritative when the two diverge.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EwZ4jR4KFAPvpjWevfUGX1
This commit is contained in:
parent
627f128ab8
commit
baebd79cc8
@ -36,7 +36,8 @@ offline support.
|
|||||||
|
|
||||||
- **What is Dorfteich?** — [`docs/features.md`](docs/features.md)
|
- **What is Dorfteich?** — [`docs/features.md`](docs/features.md)
|
||||||
- **Manuals** (user / pond admin / site admin / API / MCP) —
|
- **Manuals** (user / pond admin / site admin / API / MCP) —
|
||||||
[`docs/manual/`](docs/manual/README.md)
|
[`docs/manual/`](docs/manual/README.md), auf Deutsch:
|
||||||
|
[`docs/de/`](docs/de/manual/README.md)
|
||||||
- **Extending it** (plugins, core) —
|
- **Extending it** (plugins, core) —
|
||||||
[`docs/developer/extending.md`](docs/developer/extending.md)
|
[`docs/developer/extending.md`](docs/developer/extending.md)
|
||||||
- **Running it** — [`docs/self-hosting/`](docs/self-hosting/README.md)
|
- **Running it** — [`docs/self-hosting/`](docs/self-hosting/README.md)
|
||||||
|
|||||||
167
docs/de/developer/extending.md
Normal file
167
docs/de/developer/extending.md
Normal file
@ -0,0 +1,167 @@
|
|||||||
|
# Entwicklerhandbuch — Dorfteich erweitern
|
||||||
|
|
||||||
|
_Englisches Original: [docs/developer/extending.md](../../developer/extending.md)_
|
||||||
|
|
||||||
|
Zwei Wege, Dorfteich mehr beizubringen: ein **Plugin** schreiben (kein
|
||||||
|
Fork, kein Redeploy, konstruktionsbedingt sicher) oder am **Kern**
|
||||||
|
mitarbeiten. Beginne mit einem Plugin, außer du musst ändern, wie das
|
||||||
|
Produkt selbst funktioniert.
|
||||||
|
|
||||||
|
## Ein Plugin schreiben
|
||||||
|
|
||||||
|
Lies einmal
|
||||||
|
[`docs/architecture/plugin-architecture.md`](../../architecture/plugin-architecture.md)
|
||||||
|
(englisch) — das ist der Vertrag. Die Kurzfassung:
|
||||||
|
|
||||||
|
Ein Plugin ist ein ZIP mit einer `manifest.json`, einem einzelnen
|
||||||
|
ES-Modul-Bundle `plugin.js`, optional `styles.css`, `i18n/*.json` und
|
||||||
|
`assets/…`. Es steuert einen oder mehrere **Erweiterungspunkte** bei:
|
||||||
|
|
||||||
|
| Typ | Du baust | Beispiel |
|
||||||
|
| -------------- | -------------------------------------------------------------- | ---------------------- |
|
||||||
|
| `sectionStyle` | benannte CSS-Stile für Inhaltsabschnitte (ganz ohne Code) | `section-styles-basic` |
|
||||||
|
| `pageTool` | ein Nur-Lese-Widget im Seiten-Werkzeuge-Panel | `toc`, `page-index` |
|
||||||
|
| `block` | ein eigener Editor-Block mit eigenen Daten und Bearbeitungs-UI | `mermaid`, `drawio` |
|
||||||
|
|
||||||
|
### Die Sandbox — was dein Code kann und was nicht
|
||||||
|
|
||||||
|
Dein `plugin.js` läuft in einem `<iframe sandbox="allow-scripts">` mit
|
||||||
|
opakem Origin und strikter CSP: **keine Cookies, kein Storage, kein
|
||||||
|
Eltern-DOM, Netzwerk/Frames nur zu deinen eigenen gebündelten Assets** —
|
||||||
|
nie zur API oder einem externen Host. Alles andere läuft über die
|
||||||
|
typisierte RPC des SDK, ausgeführt mit den Berechtigungen der
|
||||||
|
_betrachtenden Person_:
|
||||||
|
|
||||||
|
```ts
|
||||||
|
import { createPlugin, windowTransport } from '@dorfteich/plugin-sdk';
|
||||||
|
|
||||||
|
const { host } = createPlugin({
|
||||||
|
transport: windowTransport({
|
||||||
|
target: { postMessage: (m) => window.parent.postMessage(m, '*') },
|
||||||
|
source: window,
|
||||||
|
}),
|
||||||
|
onRender: async (ctx) => {
|
||||||
|
const outline = await host.readCurrentPage.getOutline();
|
||||||
|
document.body.textContent = outline.map((e) => e.text).join('\n');
|
||||||
|
void host.ui.resize(document.body.scrollHeight + 16);
|
||||||
|
},
|
||||||
|
onEdit: async (ctx) => {
|
||||||
|
/* Block-Plugins: Bearbeitungs-UI; persistieren via host.blockData.setData(...) */
|
||||||
|
},
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
Fähigkeiten, die du im Manifest unter `permissions` deklarieren kannst,
|
||||||
|
und was sie freischalten: `readCurrentPage` (Gliederung/Inhalt/
|
||||||
|
Metadaten), `readPond` (Seitenlisten + Inhalte), `readBlock`
|
||||||
|
(Block-Lesezugriffe über Seiten hinweg), `blockData`
|
||||||
|
(`getData`/`setData` deines Blocks — Schreibzugriffe werden normale
|
||||||
|
Dokumentänderungen, repliziert und versioniert), `ui` (`resize`,
|
||||||
|
`openPage`, `toast`, `scrollToHeading`,
|
||||||
|
`enterFullscreen`/`exitFullscreen`). Aufrufe außerhalb des deklarierten
|
||||||
|
Satzes werden zur Laufzeit abgelehnt.
|
||||||
|
|
||||||
|
### Block-Plugins in drei Sätzen
|
||||||
|
|
||||||
|
Der Host mountet deinen Frame pro Block und ruft `render` (Ansicht)
|
||||||
|
oder `edit` (die Person hat den Bearbeiten-Knopf des Blocks gedrückt).
|
||||||
|
Persistiere `{ …deineDaten }` via `host.blockData.setData` — die Frames
|
||||||
|
der Mitarbeitenden rendern live neu, wenn sich die Daten unter ihnen
|
||||||
|
ändern. Lege neben deinen Quelldaten einen statischen Schnappschuss ab
|
||||||
|
(z. B. einen `svg`-String): Exporte und die öffentliche Ansicht zeigen
|
||||||
|
ihn über die `fallback`-Mechanik des Manifests, ohne je Plugin-Code
|
||||||
|
auszuführen.
|
||||||
|
|
||||||
|
### Gebündelte Apps und Vollbild
|
||||||
|
|
||||||
|
Ein Plugin darf eine ganze Unter-Anwendung als Assets mitbringen und in
|
||||||
|
einem Kind-iframe seines eigenen Asset-Pfads ausführen — so bettet das
|
||||||
|
`drawio`-Plugin den echten draw.io-Editor ein. Kombiniere das mit
|
||||||
|
`host.ui.enterFullscreen()` für Editoren, die den ganzen Bildschirm
|
||||||
|
brauchen. Größen-Limits: 64 MiB ZIP, 256 MiB entpackt.
|
||||||
|
|
||||||
|
### Entwickeln und ausliefern
|
||||||
|
|
||||||
|
Die Referenz-Plugins unter `packages/plugins/` sind die Vorlagen —
|
||||||
|
kopiere das nächstliegende. Jedes hat ein `build.mjs`, das
|
||||||
|
`src/plugin.ts` mit esbuild bündelt und das installierbare ZIP nach
|
||||||
|
`dist/` packt:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
cd packages/plugins/<dein-plugin>
|
||||||
|
pnpm build # → dist/<id>-<version>.zip
|
||||||
|
```
|
||||||
|
|
||||||
|
Installiere das ZIP über Admin → Plugins (oder die Dropzone), öffne die
|
||||||
|
gesandboxte Vorschau unter `/admin/plugins/<id>/preview`, iteriere. Das
|
||||||
|
Install-Gate validiert Struktur, Manifest, Größe und CSS-Scoping und
|
||||||
|
lehnt mit einem präzisen Fehlercode ab. Ein Update veröffentlichen =
|
||||||
|
gleiche ID, höhere Version.
|
||||||
|
|
||||||
|
Konventionen, die im Review durchgesetzt werden: UI-Strings über die
|
||||||
|
`i18n/`-Dateien des Plugins in **beiden** Sprachen `de` und `en`; der
|
||||||
|
Fallback muss in einem gedruckten Dokument Sinn ergeben.
|
||||||
|
|
||||||
|
## Am Kern arbeiten
|
||||||
|
|
||||||
|
### Der Stack auf einen Blick
|
||||||
|
|
||||||
|
TypeScript-Monorepo (pnpm-Workspaces): `apps/api` (NestJS + Prisma,
|
||||||
|
PostgreSQL), `apps/collab` (Hocuspocus/Yjs-Echtzeit-Server), `apps/web`
|
||||||
|
(React + Vite + TipTap), `apps/backup` (Backup-Sidecar),
|
||||||
|
`packages/shared` (Typen, Schemas, Editor-Schema, i18n-Kataloge),
|
||||||
|
`packages/plugin-sdk`, `packages/plugins/*`.
|
||||||
|
Architektur-Entscheidungen liegen in
|
||||||
|
[`docs/architecture/adr/`](../../architecture/adr/) — lies das
|
||||||
|
zutreffende ADR, bevor du ein Subsystem anfasst; `docs/architecture/`
|
||||||
|
hat die Tiefenbohrungen (Berechtigungen, Datenmodell,
|
||||||
|
Echtzeit-Zusammenarbeit, Sicherheit, Plugins; alles englisch).
|
||||||
|
|
||||||
|
### Eine Entwicklungsumgebung bekommen
|
||||||
|
|
||||||
|
```sh
|
||||||
|
pnpm install
|
||||||
|
cd deploy/compose && cp .env.example .env
|
||||||
|
# Voll containerisierter Dev-Stack (Hot Reload; der erste Start installiert die Abhängigkeiten):
|
||||||
|
docker compose -f docker-compose.yml -f compose.dev.yml up
|
||||||
|
# → web http://localhost:5173, api :3001, db :5434
|
||||||
|
```
|
||||||
|
|
||||||
|
Schnellstes Feedback: nur die Datenbank in Docker, web/api nativ — das
|
||||||
|
genaue Rezept steht am Kopf von
|
||||||
|
[`deploy/compose/compose.dev.yml`](../../../deploy/compose/compose.dev.yml).
|
||||||
|
Fixture-Nutzer/-Teiche einspielen mit
|
||||||
|
`pnpm --filter @dorfteich/api db:seed` (Fixture-Passwort: siehe
|
||||||
|
`apps/api/prisma/seed.ts`).
|
||||||
|
|
||||||
|
### Die Gates, die jede Änderung bestehen muss
|
||||||
|
|
||||||
|
```sh
|
||||||
|
pnpm lint # ESLint + Prettier — keine Pipes, die Exit-Codes verschlucken
|
||||||
|
pnpm typecheck
|
||||||
|
pnpm test # überall vitest; DB-gestützte Suiten brauchen TEST_DATABASE_URL
|
||||||
|
pnpm i18n:check # jeder UI-String in de UND en
|
||||||
|
```
|
||||||
|
|
||||||
|
DB-gestützte Tests laufen gegen die Compose-Dev-Datenbank:
|
||||||
|
`TEST_DATABASE_URL=postgresql://dorfteich:dorfteich@localhost:5434/dorfteich pnpm test`.
|
||||||
|
Playwright-e2e-Packs liegen in `apps/web/e2e/` und laufen gegen einen
|
||||||
|
lokal geseedeten Stack (das genaue Rezept: `.gitea/workflows/ci.yml`).
|
||||||
|
|
||||||
|
### Hausregeln, die du vor deinem ersten PR kennen solltest
|
||||||
|
|
||||||
|
- **Berechtigungen**: Beantworte eine Zugriffsfrage nie außerhalb des
|
||||||
|
`PermissionService`/der Routen-Dekoratoren; verweigertes Lesen ist
|
||||||
|
404, verweigertes Schreiben auf Lesbarem ist 403
|
||||||
|
([permissions.md](../../architecture/permissions.md)).
|
||||||
|
- **i18n**: keine hart codierten UI-Strings; Keys nach
|
||||||
|
`packages/shared/i18n/{de,en}/…` (ADR 0012).
|
||||||
|
- **Keine Anfragen an Dritte** aus dem Produkt, niemals — Schriften,
|
||||||
|
Editoren, alles wird selbst gehostet ausgeliefert (ADR 0016 setzt den
|
||||||
|
Präzedenzfall).
|
||||||
|
- **Migrationen**: additiv und innerhalb eines Minor-Releases
|
||||||
|
umkehrbar; das QA-Gate der Release-Pipeline spielt ein Upgrade vom
|
||||||
|
vorherigen Release gegen echte Daten nach.
|
||||||
|
- **Verträge dokumentieren**: Alles, was zwei Services teilen
|
||||||
|
(Status-Dateien, NOTIFY-Kanäle, Wire-Typen), lebt in
|
||||||
|
`packages/shared` mit einem Kommentar, wer liest und wer schreibt.
|
||||||
125
docs/de/features.md
Normal file
125
docs/de/features.md
Normal file
@ -0,0 +1,125 @@
|
|||||||
|
# Dorfteich — was es ist und warum du es haben willst
|
||||||
|
|
||||||
|
_Englisches Original: [docs/features.md](../features.md)_
|
||||||
|
|
||||||
|
Dorfteich ist ein Open-Source-Wiki für Menschen, die gemeinsam denken
|
||||||
|
und schreiben wollen — in Echtzeit, auf dem eigenen Server, ohne ihr
|
||||||
|
Wissen einem Cloud-Konzern zu überlassen.
|
||||||
|
|
||||||
|
Der Name kommt vom Dorfteich: dem Ort, an dem das ganze Dorf
|
||||||
|
zusammenkommt. Dein Wiki ist in **Teiche** gegliedert — ein persönlicher
|
||||||
|
Teich für jedes Mitglied, dazu gemeinsame Teiche für Teams, Vereine,
|
||||||
|
Familien oder Projekte.
|
||||||
|
|
||||||
|
## Gemeinsam schreiben, live
|
||||||
|
|
||||||
|
- **Echtzeit-Zusammenarbeit.** Öffne dieselbe Seite wie deine Kollegin
|
||||||
|
und seht euch gegenseitig tippen — mit benannten Cursorn und einer
|
||||||
|
Anwesenheitsleiste, die zeigt, wer auf der Seite ist. Kein Sperren,
|
||||||
|
keine „Jemand anderes bearbeitet gerade"-Dialoge, keine verlorenen
|
||||||
|
Änderungen.
|
||||||
|
- **Funktioniert offline.** Tippe weiter, wenn die Verbindung abreißt;
|
||||||
|
deine Änderungen fließen automatisch wieder ein, sobald du online bist.
|
||||||
|
- **Ein freundlicher Editor.** Überschriften, Listen, Aufgabenlisten,
|
||||||
|
Tabellen, Zitate, Code-Blöcke und Bilder — mit vollem
|
||||||
|
**Markdown**-Roundtrip: Was du schreibst, kann das System jederzeit
|
||||||
|
wieder als sauberes Markdown verlassen.
|
||||||
|
- **Wikilinks.** Tippe `[[seiten-name]]`, um Seiten zu verlinken. Links
|
||||||
|
auf Seiten, die es noch nicht gibt, werden für dich gesammelt — ein
|
||||||
|
Klick legt sie an. „Verlinkt von" zeigt dir, wo jede Seite referenziert
|
||||||
|
wird.
|
||||||
|
|
||||||
|
## Nie wieder etwas verlieren
|
||||||
|
|
||||||
|
- **Versionsverlauf.** Jede Seite behält automatische Schnappschüsse und
|
||||||
|
zusätzlich benannte Versionen, die du selbst speicherst. Vergleiche,
|
||||||
|
sieh, wer beigetragen hat, und stelle jeden früheren Stand wieder her —
|
||||||
|
Wiederherstellungen erscheinen live in jedem offenen Editor.
|
||||||
|
- **Papierkorb mit Schonfrist.** Gelöschte Seiten liegen in einem
|
||||||
|
Papierkorb pro Teich und lassen sich wochenlang wiederherstellen,
|
||||||
|
bevor sie endgültig entfernt werden.
|
||||||
|
- **Echte Backups.** Nächtliche Datenbank- und Datei-Backups, optional
|
||||||
|
externe Kopien auf eine **Nextcloud** deiner Wahl und eine getestete
|
||||||
|
Ein-Klick-Wiederherstellung — inklusive dokumentiertem Weg, eine
|
||||||
|
Instanz aus dem Nichts wieder aufzubauen.
|
||||||
|
|
||||||
|
## Organisieren, wie du denkst
|
||||||
|
|
||||||
|
- **Labels**, auf Wunsch hierarchisch, um einen Teich beliebig zu
|
||||||
|
gliedern — und um Zugriffsregeln zu begrenzen (siehe unten).
|
||||||
|
- **Schnelle Volltextsuche** über alles, was du lesen darfst —
|
||||||
|
unempfindlich gegen Akzente und Umlaute, mit Teilwort-Treffern.
|
||||||
|
- **Inhaltsverzeichnis, Seitenindizes, Diagramme** und mehr über
|
||||||
|
mitgelieferte Plugins (siehe „Erweiterbar" unten).
|
||||||
|
|
||||||
|
## Teile genau so viel, wie du willst
|
||||||
|
|
||||||
|
- **Feingranulare Berechtigungen.** Vergib Lese- oder Schreibrechte pro
|
||||||
|
Teich, pro Label oder pro Seite — an einzelne Personen, an alle
|
||||||
|
angemeldeten Mitglieder oder ans öffentliche Internet. Deny-Regeln
|
||||||
|
schneiden Ausnahmen heraus. Ein eingebauter Inspektor („Effektive
|
||||||
|
Rechte") erklärt, _warum_ jemand eine Seite sehen kann oder nicht.
|
||||||
|
- **Öffentliche Seiten.** Veröffentliche ausgewählte Seiten schreibgeschützt
|
||||||
|
für die Welt, mit sauberen URLs — der Rest des Teichs bleibt privat.
|
||||||
|
- **Kommentare.** Diskutiere in Threads direkt neben dem Inhalt, erledige,
|
||||||
|
was geklärt ist, und entscheide pro Teich, ob alle Lesenden oder nur
|
||||||
|
Bearbeitende kommentieren dürfen.
|
||||||
|
- **Benachrichtigungen unter deiner Kontrolle.** Beobachte Seiten oder
|
||||||
|
ganze Teiche, nutze den In-App-Posteingang und wähle E-Mail-Digests
|
||||||
|
(stündlich, täglich oder aus) — mit funktionierendem Abmeldelink.
|
||||||
|
|
||||||
|
## Deine Dokumente kommen und gehen frei
|
||||||
|
|
||||||
|
- **Import** von Word- (`.docx`), LibreOffice- (`.odt`) und
|
||||||
|
Markdown-Dateien — eingebettete Bilder inklusive.
|
||||||
|
- **Export** jeder Seite als Markdown, Word, LibreOffice oder **PDF**
|
||||||
|
(mit der Typografie deines Teichs) und jedes Teichs als ZIP aus
|
||||||
|
Markdown-Dateien. Kein Lock-in, niemals.
|
||||||
|
|
||||||
|
## Maschinen sind auch willkommen — zu deinen Bedingungen
|
||||||
|
|
||||||
|
- **REST-API.** Eine saubere, token-authentifizierte öffentliche API zum
|
||||||
|
Lesen, Schreiben, Suchen, Labeln und Kommentieren — mit
|
||||||
|
OpenAPI-Beschreibung. Tokens tragen exakt die Berechtigungen ihrer
|
||||||
|
Besitzerin, nie mehr.
|
||||||
|
- **Eingebauter MCP-Endpoint.** Verbinde Claude Code oder einen anderen
|
||||||
|
MCP-fähigen KI-Assistenten direkt mit deinem Wiki — er kann suchen,
|
||||||
|
lesen und (wenn du es erlaubst) Seiten schreiben. Beide Schnittstellen
|
||||||
|
sind **standardmäßig aus**, und jeder Teich stimmt separat zu.
|
||||||
|
|
||||||
|
## Erweiterbar, aber sicher
|
||||||
|
|
||||||
|
- **Plugins** ergänzen Block-Typen (Mermaid-Diagramme, vollwertiges
|
||||||
|
**draw.io**-Bearbeiten), Seiten-Werkzeuge (Inhaltsverzeichnis,
|
||||||
|
Seitenindex) und Abschnitts-Stile. Jedes Plugin läuft in einer strikten
|
||||||
|
Sandbox: keine Cookies, kein Storage, kein Netzwerk — es kann nie mehr
|
||||||
|
lesen als die Person, die es gerade ansieht.
|
||||||
|
- Referenz-Plugins werden mitgeliefert und dienen zugleich als
|
||||||
|
dokumentierte Vorlagen für eigene Plugins.
|
||||||
|
|
||||||
|
## Privat by design
|
||||||
|
|
||||||
|
- **Selbst gehostet.** Ein `docker compose up`, ein freundlicher
|
||||||
|
Einrichtungsassistent beim ersten Start — und es gehört dir. Alles,
|
||||||
|
Schriften eingeschlossen, wird von deiner eigenen Domain ausgeliefert:
|
||||||
|
Seiten stellen **null Anfragen an Dritte**.
|
||||||
|
- **DSGVO-freundlich.** Impressums- und Datenschutzseiten sind eingebaut
|
||||||
|
(mit Vorlagen), persönliche Daten als ZIP exportierbar, Konto-Löschung
|
||||||
|
mit inhaltserhaltender Pseudonymisierung und ein Audit-Log der
|
||||||
|
administrativen Aktionen.
|
||||||
|
- **Zweisprachig.** Die gesamte Oberfläche spricht Deutsch und Englisch;
|
||||||
|
jede Person wählt ihre Sprache selbst.
|
||||||
|
|
||||||
|
## Ehrlicher Betrieb
|
||||||
|
|
||||||
|
- Health-Endpoints, die „down" von „degraded" unterscheiden, ein
|
||||||
|
Admin-System-Panel mit Job-Status, Backup-Zustand, Audit-Log und
|
||||||
|
Speicherübersicht, monatliche automatisierte Restore-Übungen — der
|
||||||
|
Betreiber kann _beweisen_, dass die Backups funktionieren, statt nur
|
||||||
|
zu hoffen.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
_Dorfteich ist MIT-lizenzierte Open-Source-Software. Wer Docker
|
||||||
|
betreiben kann, kann Dorfteich betreiben — siehe
|
||||||
|
[Self-Hosting](../self-hosting/README.md) (englisch)._
|
||||||
20
docs/de/manual/README.md
Normal file
20
docs/de/manual/README.md
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
# Dorfteich-Handbücher
|
||||||
|
|
||||||
|
_Englisches Original: [docs/manual/README.md](../../manual/README.md)_
|
||||||
|
|
||||||
|
Nutzer-Dokumentation, nach Zielgruppe. (Das englische Original ist bei
|
||||||
|
Abweichungen maßgeblich.)
|
||||||
|
|
||||||
|
| Handbuch | Für |
|
||||||
|
| ----------------------------------------------- | ----------------------------------------------- |
|
||||||
|
| [Feature-Überblick](../features.md) | alle, die wissen wollen, was Dorfteich ist |
|
||||||
|
| [Benutzerhandbuch](user-guide.md) | Mitglieder im Alltag |
|
||||||
|
| [Teich-Admin-Handbuch](pond-admin-guide.md) | Personen, die einen Teich verwalten |
|
||||||
|
| [Site-Admin-Handbuch](site-admin-guide.md) | Instanz-Administratorinnen und -Administratoren |
|
||||||
|
| [API-Handbuch](api-guide.md) | Skripte und Integrationen |
|
||||||
|
| [MCP-Handbuch](mcp-guide.md) | KI-Assistenten anbinden |
|
||||||
|
| [Entwicklerhandbuch](../developer/extending.md) | Plugin-Autoren und Kern-Mitwirkende |
|
||||||
|
|
||||||
|
Eine Instanz betreiben (Installation, Update, Backup, Monitoring):
|
||||||
|
[Self-Hosting](../../self-hosting/README.md) (englisch). Interna:
|
||||||
|
[Architektur](../../architecture/README.md) (englisch).
|
||||||
142
docs/de/manual/api-guide.md
Normal file
142
docs/de/manual/api-guide.md
Normal file
@ -0,0 +1,142 @@
|
|||||||
|
# API-Handbuch
|
||||||
|
|
||||||
|
_Englisches Original: [docs/manual/api-guide.md](../../manual/api-guide.md)_
|
||||||
|
|
||||||
|
Wie du aus Skripten und Integrationen mit Dorfteich sprichst. Die
|
||||||
|
öffentliche REST-API liegt unter `/api/public/v1`; ihre
|
||||||
|
maschinenlesbare Beschreibung wird unter `/api/public/v1/openapi.json`
|
||||||
|
ausgeliefert.
|
||||||
|
|
||||||
|
## Einschalten
|
||||||
|
|
||||||
|
Die API ist **standardmäßig aus**, und zwar doppelt:
|
||||||
|
|
||||||
|
1. Ein **Site-Admin** aktiviert den Instanz-Schalter (Admin →
|
||||||
|
Einstellungen → Öffentliche API).
|
||||||
|
2. Jeder **Teich**, der erreichbar sein soll, stimmt zu
|
||||||
|
(Teich-Einstellungen → „Diesen Teich über die öffentliche API
|
||||||
|
freigeben").
|
||||||
|
|
||||||
|
Alles Nicht-Freigeschaltete antwortet mit `404` — ununterscheidbar von
|
||||||
|
einer Instanz ohne dieses Feature.
|
||||||
|
|
||||||
|
## Persönliche API-Tokens
|
||||||
|
|
||||||
|
Tokens legst du unter **Einstellungen → API-Tokens** an: ein Name, ein
|
||||||
|
Scope (`read` oder `read+write`), ein optionales Ablaufdatum und
|
||||||
|
optional eine Beschränkung auf ausgewählte Teiche. Das Geheimnis
|
||||||
|
(`dt_pat_…`) wird **ein einziges Mal** angezeigt — sofort kopieren.
|
||||||
|
Tokens sind widerrufbar und zeigen ihre letzte Verwendung.
|
||||||
|
|
||||||
|
Ein Token handelt **als du**: Es kann exakt lesen und schreiben, was du
|
||||||
|
kannst, eingeengt durch seinen Scope und die Teich-Beschränkung — nie
|
||||||
|
mehr. Die Token-Verwaltung selbst verlangt immer die Browser-Sitzung;
|
||||||
|
ein geleaktes Token kann keine neuen Tokens erzeugen.
|
||||||
|
|
||||||
|
Authentifiziere dich mit einem Bearer-Header:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
curl -H "Authorization: Bearer dt_pat_..." \
|
||||||
|
https://wiki.example.com/api/public/v1/me
|
||||||
|
```
|
||||||
|
|
||||||
|
`GET /me` ist der Smoke-Test — er liefert dein Benutzerkonto, den
|
||||||
|
Token-Scope und eine etwaige Teich-Beschränkung.
|
||||||
|
|
||||||
|
## Lesen
|
||||||
|
|
||||||
|
```sh
|
||||||
|
# Die Teiche, die dieses Token erreicht
|
||||||
|
curl -H "$AUTH" https://wiki.example.com/api/public/v1/ponds
|
||||||
|
|
||||||
|
# Seiten eines Teichs: Slug, Titel, Labels, Zeitstempel
|
||||||
|
curl -H "$AUTH" https://wiki.example.com/api/public/v1/ponds/team/pages
|
||||||
|
|
||||||
|
# Eine Seite — Markdown-Quelle UND gerendertes, bereinigtes HTML
|
||||||
|
curl -H "$AUTH" https://wiki.example.com/api/public/v1/ponds/team/pages/meeting-notes
|
||||||
|
|
||||||
|
# Volltextsuche (optional ?pond=<slug>&label=<labelId>)
|
||||||
|
curl -H "$AUTH" "https://wiki.example.com/api/public/v1/search?q=seerose"
|
||||||
|
|
||||||
|
# Der ganze Teich als Markdown-ZIP
|
||||||
|
curl -H "$AUTH" -o team.zip \
|
||||||
|
https://wiki.example.com/api/public/v1/ponds/team/export/markdown
|
||||||
|
```
|
||||||
|
|
||||||
|
Such-Snippets markieren Treffer mit `**…**`; Ergebnisse tragen Teich-
|
||||||
|
und Seiten-Slugs für Folgeaufrufe.
|
||||||
|
|
||||||
|
## Schreiben (braucht den `write`-Scope)
|
||||||
|
|
||||||
|
```sh
|
||||||
|
# Eine Seite aus Markdown anlegen
|
||||||
|
curl -H "$AUTH" -H 'Content-Type: application/json' \
|
||||||
|
-d '{"title": "Meeting notes", "markdown": "# Agenda\n\n- Enten\n"}' \
|
||||||
|
https://wiki.example.com/api/public/v1/ponds/team/pages
|
||||||
|
|
||||||
|
# Umbenennen und/oder den Inhalt ERSETZEN
|
||||||
|
curl -X PATCH -H "$AUTH" -H 'Content-Type: application/json' \
|
||||||
|
-d '{"markdown": "Neuer Inhalt."}' \
|
||||||
|
https://wiki.example.com/api/public/v1/ponds/team/pages/meeting-notes
|
||||||
|
|
||||||
|
# Eine Seite in den Papierkorb verschieben
|
||||||
|
curl -X DELETE -H "$AUTH" \
|
||||||
|
https://wiki.example.com/api/public/v1/ponds/team/pages/meeting-notes
|
||||||
|
```
|
||||||
|
|
||||||
|
Ein Inhalts-`PATCH` **ersetzt** die ganze Seite. Er wird durch das
|
||||||
|
lebendige kollaborative Dokument angewandt: Wer die Seite in diesem
|
||||||
|
Moment bearbeitet, sieht die Änderung erscheinen, nichts spaltet sich
|
||||||
|
ab, und der vorherige Stand bleibt als wiederherstellbarer
|
||||||
|
Schnappschuss im Versionsverlauf (das Update selbst erscheint als
|
||||||
|
Version namens „API update").
|
||||||
|
|
||||||
|
## Labels
|
||||||
|
|
||||||
|
```sh
|
||||||
|
GET /ponds/{pond}/labels # der Label-Baum
|
||||||
|
POST /ponds/{pond}/labels # {name, color?, parentId?}
|
||||||
|
PATCH /ponds/{pond}/labels/{labelId} # umbenennen/umfärben/verschieben in einem Aufruf
|
||||||
|
DELETE /ponds/{pond}/labels/{labelId}
|
||||||
|
PUT /ponds/{pond}/pages/{page}/labels/{labelId} # zuweisen
|
||||||
|
DELETE /ponds/{pond}/pages/{page}/labels/{labelId} # entfernen
|
||||||
|
```
|
||||||
|
|
||||||
|
Die Verwaltung des Label-Baums braucht Teich-Admin-Rechte (wie in der
|
||||||
|
App).
|
||||||
|
|
||||||
|
## Kommentare
|
||||||
|
|
||||||
|
```sh
|
||||||
|
GET /ponds/{pond}/pages/{page}/comments?filter=all|open|resolved
|
||||||
|
POST /ponds/{pond}/pages/{page}/comments # {body, parentId?} — Markdown
|
||||||
|
POST /ponds/{pond}/pages/{page}/comments/{id}/resolve
|
||||||
|
DELETE /ponds/{pond}/pages/{page}/comments/{id}/resolve # wieder öffnen
|
||||||
|
```
|
||||||
|
|
||||||
|
Die Kommentar-Richtlinie des Teichs gilt exakt wie in der App.
|
||||||
|
|
||||||
|
## Fehler, Limits, Semantik
|
||||||
|
|
||||||
|
- Fehler tragen den einheitlichen Body `{ "code": "...", "message":
|
||||||
|
"...", "details": {...} }`. Der `code` ist stabil und maschinell
|
||||||
|
prüfbar.
|
||||||
|
- **404 vs. 403**: Was du nicht _lesen_ darfst, antwortet 404 (die
|
||||||
|
Existenz bleibt verborgen — auch Teiche ohne API-Freigabe); ein
|
||||||
|
Schreibzugriff auf etwas, das du lesen, aber nicht ändern darfst,
|
||||||
|
antwortet 403. Ein Token ohne `write`-Scope bekommt auf jeder
|
||||||
|
Schreibroute `403 scope_required`.
|
||||||
|
- **Rate-Limit** pro Token; `429`-Antworten tragen einen
|
||||||
|
`Retry-After`-Header.
|
||||||
|
- Nirgendwo sind Cookies im Spiel — es gibt keine CSRF-Angriffsfläche,
|
||||||
|
und Browser-Sitzungen können die öffentliche API nicht aufrufen.
|
||||||
|
|
||||||
|
## (Noch) außerhalb des Umfangs
|
||||||
|
|
||||||
|
Anhang-Upload, Versions-Endpoints und Webhooks sind bewusst nicht Teil
|
||||||
|
von v1.
|
||||||
|
|
||||||
|
_Die Betreiber-Sicht auf dasselbe Feature (Schalter,
|
||||||
|
Sicherheitshinweise):
|
||||||
|
[`docs/self-hosting/public-api.md`](../../self-hosting/public-api.md)
|
||||||
|
(englisch)._
|
||||||
105
docs/de/manual/mcp-guide.md
Normal file
105
docs/de/manual/mcp-guide.md
Normal file
@ -0,0 +1,105 @@
|
|||||||
|
# MCP-Handbuch — deine KI mit Dorfteich verbinden
|
||||||
|
|
||||||
|
_Englisches Original: [docs/manual/mcp-guide.md](../../manual/mcp-guide.md)_
|
||||||
|
|
||||||
|
Dorfteich bringt seinen eigenen [MCP](https://modelcontextprotocol.io)-
|
||||||
|
Endpoint unter `/api/mcp` mit (Streamable HTTP). Jeder MCP-fähige
|
||||||
|
Assistent — Claude Code, Claude Desktop über eine Bridge und andere —
|
||||||
|
kann dein Wiki durchsuchen, lesen und (wenn du es erlaubst) beschreiben,
|
||||||
|
mit **exakt deinen Berechtigungen**. Es läuft kein zusätzlicher Server:
|
||||||
|
Der Endpoint ist Teil der Instanz.
|
||||||
|
|
||||||
|
## Einschalten
|
||||||
|
|
||||||
|
Wie die REST-API ist MCP **standardmäßig aus** und hat **eigene,
|
||||||
|
unabhängige Schalter**:
|
||||||
|
|
||||||
|
1. **Site-Admin**: Admin → Einstellungen → Öffentliche API →
|
||||||
|
„Eingebauten MCP-Endpoint aktivieren".
|
||||||
|
2. **Jeder Teich**, den der Assistent sehen soll: Teich-Einstellungen →
|
||||||
|
„Diesen Teich für KI-Assistenten freigeben (MCP)".
|
||||||
|
|
||||||
|
Ein Teich ohne Freigabe ist für MCP-Clients unsichtbar — selbst für
|
||||||
|
dein eigenes Token.
|
||||||
|
|
||||||
|
## Ein Token besorgen
|
||||||
|
|
||||||
|
MCP nutzt dieselben **persönlichen API-Tokens** wie die REST-API: Lege
|
||||||
|
eins unter **Einstellungen → API-Tokens** an. Wähle den Scope bewusst:
|
||||||
|
|
||||||
|
- `read` — der Assistent kann auflisten, lesen und suchen, sonst nichts.
|
||||||
|
- `read+write` — er darf zusätzlich Seiten anlegen/ändern, kommentieren
|
||||||
|
und Labels setzen.
|
||||||
|
|
||||||
|
Erwäge, das Token auf genau die Teiche zu beschränken, in denen der
|
||||||
|
Assistent arbeiten soll.
|
||||||
|
|
||||||
|
## Claude Code verbinden
|
||||||
|
|
||||||
|
```sh
|
||||||
|
claude mcp add --transport http dorfteich https://wiki.example.com/api/mcp \
|
||||||
|
--header "Authorization: Bearer dt_pat_..."
|
||||||
|
```
|
||||||
|
|
||||||
|
Das war's — Claude Code listet die Tools beim nächsten Start. Reine
|
||||||
|
Stdio-Clients überbrücken mit `mcp-remote`:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"mcpServers": {
|
||||||
|
"dorfteich": {
|
||||||
|
"command": "npx",
|
||||||
|
"args": [
|
||||||
|
"mcp-remote",
|
||||||
|
"https://wiki.example.com/api/mcp",
|
||||||
|
"--header",
|
||||||
|
"Authorization: Bearer dt_pat_..."
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Was der Assistent kann
|
||||||
|
|
||||||
|
| Tool | Tut |
|
||||||
|
| -------------------------------------------- | --------------------------------------------- |
|
||||||
|
| `list_ponds` | die Teiche, die dieses Token erreicht |
|
||||||
|
| `list_pages(pond)` | Seiten mit Slug, Titel, Labels, Zeitstempeln |
|
||||||
|
| `read_page(pond, page)` | eine Seite als Markdown plus Metadaten |
|
||||||
|
| `search(query, pond?, label?)` | Volltextsuche mit Snippets |
|
||||||
|
| `create_page(pond, title, markdown)` | neue Seite aus Markdown _(write)_ |
|
||||||
|
| `update_page(pond, page, markdown?, title?)` | umbenennen und/oder Inhalt ersetzen _(write)_ |
|
||||||
|
| `add_comment(pond, page, text)` | eine Seite kommentieren _(write)_ |
|
||||||
|
| `list_labels(pond)` | der Label-Baum des Teichs |
|
||||||
|
| `set_page_labels(pond, page, labelIds)` | die Labels einer Seite ersetzen _(write)_ |
|
||||||
|
| `export_pond(pond)` | ein Download-Link für den Markdown-ZIP-Export |
|
||||||
|
|
||||||
|
Inhalts-Updates nehmen denselben kollaborativen Weg wie menschliche
|
||||||
|
Bearbeitungen: Offene Editoren konvergieren live, und der vorherige
|
||||||
|
Stand bleibt im Versionsverlauf — eine KI-Änderung lässt sich immer wie
|
||||||
|
jede andere Änderung prüfen und zurücknehmen.
|
||||||
|
|
||||||
|
## Gut zu wissen
|
||||||
|
|
||||||
|
- **Die Berechtigungen sind deine.** Der Assistent sieht genau die
|
||||||
|
Seiten, die dein Konto lesen darf; Label-Regeln,
|
||||||
|
öffentlich/privat — alles gilt unverändert.
|
||||||
|
- **Jeder Schreibzugriff wird audit-geloggt**, dem Token zugeordnet —
|
||||||
|
im Audit-Log des Site-Admins steht, was der Assistent geändert hat.
|
||||||
|
- **Rate-limitiert** pro Token; ein außer Kontrolle geratener Agent
|
||||||
|
bekommt `429`, keine geschmolzene Instanz.
|
||||||
|
- **Zustandslos**: Jede Anfrage steht für sich; das Widerrufen des
|
||||||
|
Tokens unter Einstellungen → API-Tokens schneidet den Assistenten
|
||||||
|
sofort ab.
|
||||||
|
- Der Endpoint spricht MCP über Streamable HTTP (POST). GET/SSE-
|
||||||
|
Session-Resumption wird nicht angeboten — Clients fallen auf reines
|
||||||
|
Request/Response zurück, was jeder aktuelle Client unterstützt.
|
||||||
|
|
||||||
|
## Eine sinnvolle erste Sitzung
|
||||||
|
|
||||||
|
Bitte deinen Assistenten um `list_ponds`, dann `search` nach etwas, von
|
||||||
|
dem du weißt, dass es da ist, `read_page` darauf — und mit einem
|
||||||
|
Write-Token: eine neue Seite entwerfen. Sieh dir danach den
|
||||||
|
Versionsverlauf der Seite an: Du findest die Änderung des Assistenten
|
||||||
|
als normale, wiederherstellbare Version.
|
||||||
120
docs/de/manual/pond-admin-guide.md
Normal file
120
docs/de/manual/pond-admin-guide.md
Normal file
@ -0,0 +1,120 @@
|
|||||||
|
# Teich-Admin-Handbuch
|
||||||
|
|
||||||
|
_Englisches Original: [docs/manual/pond-admin-guide.md](../../manual/pond-admin-guide.md)_
|
||||||
|
|
||||||
|
Was du an einem Teich konfigurieren kannst, den du verwaltest.
|
||||||
|
Teich-Admin bist du auf deinem persönlichen Teich und auf jedem Teich,
|
||||||
|
auf dem du die Rolle `pond_admin` hast. All das liegt hinter dem
|
||||||
|
**Zahnrad-Symbol** in der Kopfleiste (sichtbar auf Teich-Routen, wenn
|
||||||
|
du den Teich verändern darfst).
|
||||||
|
|
||||||
|
## Teiche in einer Minute
|
||||||
|
|
||||||
|
Jedes Mitglied bekommt automatisch einen **persönlichen Teich**.
|
||||||
|
Zusätzliche **gemeinsame Teiche** legst du über **„+ Neuer Teich"** am
|
||||||
|
unteren Ende des Teich-Umschalters in der Kopfleiste an (oder über die
|
||||||
|
API, `POST /api/v1/ponds`); sie unterliegen dem Pro-Person-Kontingent
|
||||||
|
des Site-Admins („Zusätzliche geteilte Teiche pro Person", Standard 0).
|
||||||
|
Wer den Teich anlegt, wird sein Teich-Admin.
|
||||||
|
|
||||||
|
## Name, Beschreibung, Darstellung
|
||||||
|
|
||||||
|
- **Name und Beschreibung** des Teichs.
|
||||||
|
- **Schriften**: Wähle pro Teich Schriften für Überschriften, Fließtext
|
||||||
|
und Code aus dem eingebauten, selbst gehosteten Katalog (stöbern unter
|
||||||
|
`/fonts`) — sie gelten für die App-Ansicht, öffentliche Seiten und
|
||||||
|
PDF-Exporte.
|
||||||
|
- **Seitenleisten-Sortierung** für alle: A–Z, Erstellungsdatum oder
|
||||||
|
manuelle Reihenfolge.
|
||||||
|
|
||||||
|
## Mitglieder und Rollen
|
||||||
|
|
||||||
|
Der Abschnitt **Mitglieder** verwaltet, wer im Teich ist:
|
||||||
|
|
||||||
|
| Rolle | Darf |
|
||||||
|
| ------------ | ---------------------------------------------------------- |
|
||||||
|
| `reader` | Seiten lesen (soweit die Regeln es erlauben) |
|
||||||
|
| `editor` | Seiten lesen + schreiben, Dateien hochladen |
|
||||||
|
| `pond_admin` | alles, einschließlich Einstellungen, Mitglieder und Labels |
|
||||||
|
|
||||||
|
Die Mitgliederzahl begrenzen die Instanz-Kontingente (Bearbeiter/Leser
|
||||||
|
pro Teich). Auch persönliche Teiche nehmen Mitglieder auf — genau so
|
||||||
|
teilst du deinen.
|
||||||
|
|
||||||
|
## Zugriffsregeln (das Kleingedruckte)
|
||||||
|
|
||||||
|
Über die reine Mitgliedschaft hinaus bearbeitet der Abschnitt
|
||||||
|
**Zugriffsregeln** die Berechtigungen direkt. Eine Regel besteht aus:
|
||||||
|
_Subjekt_ (eine Person, alle Angemeldeten oder die Öffentlichkeit) +
|
||||||
|
_Recht_ (Leser/Bearbeiter/Teich-Admin) + _Geltungsbereich_ (ganzer
|
||||||
|
Teich, ein Label oder eine Seite) + _Wirkung_ (erlauben oder verbieten).
|
||||||
|
|
||||||
|
- **Label-Regeln** sind das Power-Tool: Gib den vertraulichen Seiten das
|
||||||
|
Label „Vorstand" und erlaube nur den Vorstandsmitgliedern dieses
|
||||||
|
Label — oder verbiete ein Label jemandem, der sonst alles lesen darf.
|
||||||
|
- **Öffentliche Seiten:** Eine _Erlauben, Leser, öffentlich_-Regel auf
|
||||||
|
einer Seite (oder einem Label) veröffentlicht sie schreibgeschützt
|
||||||
|
unter `/public/<teich>/<seite>`.
|
||||||
|
- Verbieten schlägt Erlauben; verweigertes Lesen sieht aus wie „nicht
|
||||||
|
gefunden" (das System verrät nie, was existiert).
|
||||||
|
- Der Inspektor **„Effektive Rechte"** auf einer Seite erklärt das
|
||||||
|
wirksame Ergebnis für jede Person — nutze ihn immer, wenn dich eine
|
||||||
|
Regel-Kombination überrascht.
|
||||||
|
|
||||||
|
## Labels
|
||||||
|
|
||||||
|
Verwalte den Label-Baum des Teichs (anlegen, umbenennen, umfärben,
|
||||||
|
verschachteln, verschieben, löschen). Das Löschen eines Labels, das
|
||||||
|
noch auf Seiten liegt, fragt nach. Labels erscheinen auch im
|
||||||
|
Label-Wähler der Seiten; dort ist das Anlegen neuer Labels dir
|
||||||
|
vorbehalten.
|
||||||
|
|
||||||
|
## Kommentar-Richtlinie
|
||||||
|
|
||||||
|
Wähle, ob **alle mit Lesezugriff** kommentieren dürfen oder **nur
|
||||||
|
Bearbeitende**. Bestehende Kommentare bleiben so oder so lesbar.
|
||||||
|
|
||||||
|
## Den Teich beobachten
|
||||||
|
|
||||||
|
Die Glocke im Kopf der Teich-Einstellungen beobachtet den ganzen Teich
|
||||||
|
— du wirst über jede Seitenänderung und jeden Kommentar darin
|
||||||
|
benachrichtigt.
|
||||||
|
|
||||||
|
## Plugins
|
||||||
|
|
||||||
|
Plugins, die der Site-Admin mit Modus _Optional_ installiert hat,
|
||||||
|
erscheinen hier mit einem Schalter pro Teich. _Erforderliche_ Plugins
|
||||||
|
sind immer aktiv; _deaktivierte_ tauchen gar nicht auf. (Welche Plugins
|
||||||
|
es gibt und was sie tun:
|
||||||
|
[Site-Admin-Handbuch](site-admin-guide.md#plugins).)
|
||||||
|
|
||||||
|
## Maschinenzugriff: API- und MCP-Freigabe
|
||||||
|
|
||||||
|
Zwei getrennte Schalter geben diesen Teich für Token-Zugriff frei —
|
||||||
|
**beide standardmäßig aus**, und beide nur wirksam, wenn der Site-Admin
|
||||||
|
den passenden Instanz-Schalter aktiviert hat:
|
||||||
|
|
||||||
|
- **Öffentliche REST-API** (`apiEnabled`): Skripte und Integrationen
|
||||||
|
erreichen den Teich mit persönlichen API-Tokens — mit exakt den
|
||||||
|
Berechtigungen der Token-Besitzerin.
|
||||||
|
- **MCP / KI-Assistenten** (`mcpEnabled`): MCP-Clients wie Claude Code
|
||||||
|
erreichen den Teich auf demselben Weg.
|
||||||
|
|
||||||
|
Ein Teich ohne Freigabe ist über diese Schnittstellen unsichtbar —
|
||||||
|
selbst für die Tokens der eigenen Mitglieder.
|
||||||
|
|
||||||
|
## Dateien
|
||||||
|
|
||||||
|
Die **Dateiverwaltung** listet die Uploads des Teichs mit ihrer
|
||||||
|
Verwendung (welche Seite sie referenziert) und lässt dich verwaiste
|
||||||
|
Dateien löschen. Der Speicher zählt gegen das Kontingent des Teichs;
|
||||||
|
die aktuelle Nutzung wird angezeigt.
|
||||||
|
|
||||||
|
## Export und Löschung
|
||||||
|
|
||||||
|
- **Export**: der ganze Teich als ZIP aus Markdown-Dateien plus Medien.
|
||||||
|
- **Teich löschen**: Die Gefahren-Sektion am Ende der
|
||||||
|
Teich-Einstellungen verschiebt einen gemeinsamen Teich in den
|
||||||
|
Instanz-Papierkorb (zur Bestätigung den Teichnamen eintippen); ein
|
||||||
|
Site-Admin kann ihn wiederherstellen. Dein persönlicher Teich lässt
|
||||||
|
sich nicht löschen — er ist das Zuhause deines Kontos.
|
||||||
149
docs/de/manual/site-admin-guide.md
Normal file
149
docs/de/manual/site-admin-guide.md
Normal file
@ -0,0 +1,149 @@
|
|||||||
|
# Site-Admin-Handbuch
|
||||||
|
|
||||||
|
_Englisches Original: [docs/manual/site-admin-guide.md](../../manual/site-admin-guide.md)_
|
||||||
|
|
||||||
|
Wie du eine Dorfteich-Instanz aus dem Browser verwaltest. Installation,
|
||||||
|
Updates und Betrieb auf Host-Ebene behandelt das
|
||||||
|
[Self-Hosting-Handbuch](../../self-hosting/README.md) (englisch); hier
|
||||||
|
geht es um die beiden Admin-Seiten: **Admin → Einstellungen** (`/admin`)
|
||||||
|
und **Admin → System** (`/admin/system`).
|
||||||
|
|
||||||
|
Ein Site-Admin sieht und darf alles — nutze für die tägliche Arbeit ein
|
||||||
|
normales Konto.
|
||||||
|
|
||||||
|
## Erster Kontakt: der Einrichtungsassistent
|
||||||
|
|
||||||
|
Eine frische Instanz begrüßt dich mit einem Assistenten in sechs
|
||||||
|
Schritten: Sprache → das Site-Admin-Konto → Instanzname und
|
||||||
|
Standardsprache → SMTP-Relay (mit Live-Testmail; überspringbar) →
|
||||||
|
Registrierungsmodus → fertig. Bis er abgeschlossen ist, antwortet die
|
||||||
|
Instanz auf alles mit `503 setup_required`. Unbeaufsichtigte
|
||||||
|
Installationen befüllen den Assistenten vorab über
|
||||||
|
`SETUP_ADMIN_*`-Umgebungsvariablen.
|
||||||
|
|
||||||
|
## Admin → Einstellungen
|
||||||
|
|
||||||
|
### Instanz
|
||||||
|
|
||||||
|
- **Name** (erscheint in der Kopfleiste und in Mails) und
|
||||||
|
**Standardsprache** (gilt für anonyme Besucher und server-gerenderte
|
||||||
|
Seiten).
|
||||||
|
- **Registrierungsmodus**: `open` (jeder darf sich registrieren, mit
|
||||||
|
E-Mail-Bestätigung) oder `closed` (nur bestehende Konten melden sich
|
||||||
|
an).
|
||||||
|
|
||||||
|
### Kontingente
|
||||||
|
|
||||||
|
Instanzweite Standardwerte: Bearbeiter/Leser pro Teich, zusätzliche
|
||||||
|
geteilte Teiche pro Person (Standard 0 — erhöhe ihn oder vergib
|
||||||
|
Pro-Person-Overrides, damit Leute gemeinsame Teiche anlegen können),
|
||||||
|
Speicher pro Teich, maximale Dateigröße. Der **Kontingent-Manager**
|
||||||
|
darunter setzt Overrides pro Person/Teich, die die Standardwerte
|
||||||
|
überstimmen.
|
||||||
|
|
||||||
|
### Uploads
|
||||||
|
|
||||||
|
Die Allow-Liste der Nicht-Bild-Dateiendungen, die Nutzer anhängen
|
||||||
|
dürfen, und die SVG-Richtlinie (`sanitize` entfernt Skripte aus
|
||||||
|
hochgeladenen SVGs, `reject` lehnt sie ab).
|
||||||
|
|
||||||
|
### Öffentliche API und MCP
|
||||||
|
|
||||||
|
Zwei unabhängige Hauptschalter, beide **standardmäßig aus**:
|
||||||
|
|
||||||
|
- **Öffentliche REST-API**: erlaubt Nutzern, persönliche API-Tokens
|
||||||
|
anzulegen und `/api/public/v1` zu verwenden (siehe das
|
||||||
|
[API-Handbuch](api-guide.md)).
|
||||||
|
- **Eingebauter MCP-Endpoint**: stellt `/api/mcp` für KI-Assistenten
|
||||||
|
bereit ([MCP-Handbuch](mcp-guide.md)).
|
||||||
|
|
||||||
|
Keiner der Schalter wirkt allein pro Teich — jeder Teich stimmt
|
||||||
|
zusätzlich über seine Teich-Einstellungen zu. Aus heißt: Die Endpoints
|
||||||
|
antworten mit 404.
|
||||||
|
|
||||||
|
### Rechtsseiten
|
||||||
|
|
||||||
|
Impressum und Datenschutzerklärung als Markdown, veröffentlicht unter
|
||||||
|
`/legal/imprint` und `/legal/privacy` und aus jeder Fußzeile verlinkt.
|
||||||
|
Eine Vorlage mit Prüf-Checkliste liegt in
|
||||||
|
[`docs/self-hosting/legal-template.md`](../../self-hosting/legal-template.md).
|
||||||
|
Bis sie konfiguriert sind, zeigen die Seiten einen Hinweis (und dir ein
|
||||||
|
Warnbanner).
|
||||||
|
|
||||||
|
### Backups
|
||||||
|
|
||||||
|
Siehe **Admin → System → Backups** unten.
|
||||||
|
|
||||||
|
### Plugins
|
||||||
|
|
||||||
|
Installiere Plugins per ZIP-Upload (alternativ: das ZIP in den
|
||||||
|
`_dropzone/`-Ordner auf dem Plugins-Volume legen — ein Watcher
|
||||||
|
installiert es binnen Sekunden und verschiebt abgelehnte Pakete mit
|
||||||
|
Begründung nach `_quarantine/`).
|
||||||
|
|
||||||
|
Jedes installierte Plugin hat einen **Instanz-Modus**:
|
||||||
|
|
||||||
|
| Modus | Bedeutung |
|
||||||
|
| ---------- | ---------------------------------------------------- |
|
||||||
|
| `disabled` | überall inaktiv (der Standard nach dem Installieren) |
|
||||||
|
| `optional` | Teich-Admins entscheiden pro Teich |
|
||||||
|
| `required` | in jedem Teich aktiv, kein Opt-out |
|
||||||
|
|
||||||
|
Jedes Plugin hat eine gesandboxte **Vorschau**-Seite zum Ausprobieren
|
||||||
|
vor dem Aktivieren. Deinstallieren ist blockiert, solange ein Plugin
|
||||||
|
`required` ist; Dokumente behalten ihre Plugin-Blöcke in jedem Fall und
|
||||||
|
zeigen den Fallback-Text des Plugins, wenn es fehlt.
|
||||||
|
|
||||||
|
Mitgelieferte Referenz-Plugins: `toc` (Inhaltsverzeichnis),
|
||||||
|
`page-index` (label-gefilterte Seitenliste), `mermaid`
|
||||||
|
(Diagramm-Blöcke), `drawio` (vollwertiges draw.io-Bearbeiten),
|
||||||
|
`section-styles-basic` (farbige Hinweiskästen).
|
||||||
|
|
||||||
|
### Personen
|
||||||
|
|
||||||
|
Die Personenverwaltung: Konten suchen, deaktivieren/aktivieren,
|
||||||
|
Bestätigungsmails erneut senden, Site-Admins ernennen/absetzen und
|
||||||
|
Konten löschen. Die Löschung bietet **Pseudonymisierung** an: Das Konto
|
||||||
|
und seine persönlichen Daten verschwinden, aber geteilte Inhalte
|
||||||
|
überleben, einem neutralen Platzhalter zugeschrieben. Schutzmechanismen
|
||||||
|
verhindern, dich selbst zu deaktivieren oder den letzten Site-Admin zu
|
||||||
|
entfernen.
|
||||||
|
|
||||||
|
## Admin → System
|
||||||
|
|
||||||
|
Der Blick des Betreibers auf einen Schirm:
|
||||||
|
|
||||||
|
- **Wartungsjobs**: jeder Wartungsjob (Papierkorb-Bereinigung,
|
||||||
|
Versions-Ausdünnung, Seiten-Kompaktierung, Datenexport-Bereinigung,
|
||||||
|
Benachrichtigungs-Digests) mit Takt, letztem Lauf, Dauer und Ergebnis
|
||||||
|
— plus manuellem **Ausführen**-Knopf (selbst audit-geloggt).
|
||||||
|
- **Backups**: Die Status-Karte spiegelt den letzten Lauf des Sidecars
|
||||||
|
und sein Frische-Urteil, mit einem **Jetzt sichern**-Knopf. Darunter:
|
||||||
|
- **Backup-Einstellungen**: lokale Aufbewahrung (überstimmt den
|
||||||
|
Container-Standard) und das **Nextcloud-Ziel** — Server-Adresse,
|
||||||
|
Benutzername, App-Passwort (liegt im dateibasierten Secret-Store auf
|
||||||
|
dem Secrets-Volume, nie in der Datenbank), Ordner, Upload-Zeitplan
|
||||||
|
(nach jedem Backup / wöchentlich / manuell), entfernte Aufbewahrung
|
||||||
|
und ein **Verbindung testen**-Knopf, der die Zugangsdaten prüft und
|
||||||
|
den Ordner anlegt.
|
||||||
|
- **Wiederherstellung**: listet lokale und Nextcloud-Sets; beim
|
||||||
|
Wiederherstellen tippst du die Backup-ID zur Bestätigung ein, dann
|
||||||
|
geht die Instanz in den Wartungsmodus, stellt sich wieder her und
|
||||||
|
startet neu. Alles Weitere zu Backups (Spiegel auf einen privaten
|
||||||
|
Host, Disaster Recovery) steht im
|
||||||
|
[Self-Hosting-Handbuch](../../self-hosting/README.md#backups--restore)
|
||||||
|
und im [Restore-Runbook](../../operations/restore-runbook.md)
|
||||||
|
(beide englisch).
|
||||||
|
- **Audit-Log**: administrative und Auth-Ereignisse (Zugriffsregeln,
|
||||||
|
Mitglieder, Personenverwaltung, Kontingente, Plugins, Einstellungen,
|
||||||
|
Einrichtung, Tokens, API-Schreibzugriffe, Backup-Aktionen) mit
|
||||||
|
Filtern nach Akteur/Aktion/Zeit, 50 pro Seite.
|
||||||
|
- **Speicher**: die zwanzig größten Teiche und die Instanz-Summe.
|
||||||
|
|
||||||
|
## Health, Monitoring, Go-Live
|
||||||
|
|
||||||
|
- `GET /api/v1/readyz` ist die Eigendiagnose der Instanz; überwache sie
|
||||||
|
(Down-vs.-Degraded-Semantik und ein fertiges Monitor-Set:
|
||||||
|
[`deploy/monitoring.md`](../../../deploy/monitoring.md)).
|
||||||
|
- Go-Live-Checkliste für eine frische Produktionsinstanz:
|
||||||
|
[`deploy/go-live.md`](../../../deploy/go-live.md).
|
||||||
136
docs/de/manual/user-guide.md
Normal file
136
docs/de/manual/user-guide.md
Normal file
@ -0,0 +1,136 @@
|
|||||||
|
# Benutzerhandbuch
|
||||||
|
|
||||||
|
_Englisches Original: [docs/manual/user-guide.md](../../manual/user-guide.md)_
|
||||||
|
|
||||||
|
Wie du dich als normales Mitglied im Dorfteich zurechtfindest. Für die
|
||||||
|
Teich-Konfiguration siehe das
|
||||||
|
[Teich-Admin-Handbuch](pond-admin-guide.md), für die Verwaltung der
|
||||||
|
Instanz das [Site-Admin-Handbuch](site-admin-guide.md).
|
||||||
|
|
||||||
|
## Registrieren und anmelden
|
||||||
|
|
||||||
|
- **Registrieren** (sofern die Instanz die offene Registrierung
|
||||||
|
erlaubt): Benutzername, E-Mail, Anzeigename, Passwort, Sprache. Du
|
||||||
|
bestätigst deine E-Mail über den Link in der Bestätigungsmail; dabei
|
||||||
|
entsteht auch dein **persönlicher Teich** — dein eigener Raum, den nur
|
||||||
|
du siehst, bis du ihn teilst.
|
||||||
|
- **Anmelden** mit Benutzername _oder_ E-Mail. Passwort vergessen? Die
|
||||||
|
Anmeldeseite hat einen Link zum Zurücksetzen (setzt voraus, dass die
|
||||||
|
Instanz Mail-Versand konfiguriert hat).
|
||||||
|
- Deine Sitzungen findest du unter **Einstellungen → Aktive Sitzungen**;
|
||||||
|
dort kannst du jedes Gerät abmelden.
|
||||||
|
|
||||||
|
## Teiche und Seiten
|
||||||
|
|
||||||
|
- Der **Teich-Umschalter** in der Kopfleiste bringt dich zwischen den
|
||||||
|
Teichen hin und her, die du sehen kannst — und **„+ Neuer Teich"** an
|
||||||
|
seinem unteren Ende legt einen neuen gemeinsamen Teich an (begrenzt
|
||||||
|
durch ein Kontingent, das der Site-Admin setzt). Die **Seitenleiste**
|
||||||
|
listet die Seiten des aktuellen Teichs — sortiere sie A–Z, nach
|
||||||
|
Erstellungsdatum oder ziehe sie in eine manuelle Reihenfolge (der
|
||||||
|
Sortiermodus ist eine Teich-Einstellung).
|
||||||
|
- **+ Neue Seite** am unteren Ende der Seitenleiste legt eine Seite an.
|
||||||
|
Seiten-Adressen sind lesbar: `/p/<teich>/<seite>`.
|
||||||
|
- Der **Papierkorb**-Link sitzt ganz unten in der Seitenleiste:
|
||||||
|
Gelöschte Seiten lassen sich dort wiederherstellen, bis die
|
||||||
|
Aufbewahrungsfrist endet.
|
||||||
|
|
||||||
|
## Der Editor
|
||||||
|
|
||||||
|
Klicke auf das **Stift-Symbol** in der Kopfleiste, um eine Seite
|
||||||
|
zwischen Lesen und Bearbeiten umzuschalten. Im Bearbeitungsmodus bietet
|
||||||
|
eine Werkzeugleiste Absatz-Stile (Überschrift 1–4),
|
||||||
|
fett/kursiv/durchgestrichen/Inline-Code, Aufzählungs-, nummerierte und
|
||||||
|
Aufgabenlisten, Zitate, Code-Blöcke, Trennlinien, Bilder und Tabellen.
|
||||||
|
Die Werkzeugleiste bleibt beim Scrollen sichtbar.
|
||||||
|
|
||||||
|
- **Alle bearbeiten gemeinsam.** Andere Personen auf der Seite
|
||||||
|
erscheinen in der Anwesenheitsleiste in der Kopfleiste und als
|
||||||
|
benannte Cursor im Text. Es gibt keinen Speichern-Knopf für den Inhalt
|
||||||
|
— jeder Tastendruck wird gespeichert und live repliziert.
|
||||||
|
- **Offline?** Das Status-Symbol in der Fußzeile (unten links) zeigt
|
||||||
|
deine Verbindung. Du kannst offline weitertippen; die Änderungen
|
||||||
|
synchronisieren sich beim Wiederverbinden.
|
||||||
|
- **Markdown rein, Markdown raus.** Du kannst Markdown einfügen oder
|
||||||
|
tippen; die Seite lässt sich jederzeit wieder als Markdown kopieren
|
||||||
|
oder herunterladen (**…**-Menü → Als Markdown kopieren/herunterladen).
|
||||||
|
- **Wikilinks:** Tippe `[[seiten-slug]]` oder
|
||||||
|
`[[seiten-slug|angezeigter Text]]`. Links auf Seiten, die es noch
|
||||||
|
nicht gibt, listet die Teich-Startseite unter „Fehlende Seiten" — ein
|
||||||
|
Klick legt das Ziel an. Das Panel **„Verlinkt von"** einer Seite zeigt
|
||||||
|
jede Seite, die auf sie verweist.
|
||||||
|
- **Bilder und Anhänge:** Füge Bilder direkt per Einfügen oder Ziehen in
|
||||||
|
den Text ein. Andere Dateitypen (PDFs usw., soweit die Instanz sie
|
||||||
|
erlaubt) hängst du über das **Büroklammer-Symbol** an die Seite.
|
||||||
|
- **Benannte Versionen:** Das **Speichern-Symbol** im Bearbeitungsmodus
|
||||||
|
legt einen benannten Schnappschuss an („vor dem großen Umbau"). Das
|
||||||
|
**Verlauf-Symbol** listet alle Versionen — automatische und benannte —
|
||||||
|
mit ihren Mitwirkenden; du kannst jede Version ansehen und
|
||||||
|
wiederherstellen. Wiederherstellen löscht nie den Verlauf.
|
||||||
|
|
||||||
|
## Die Seiten-Aktionen in der Kopfleiste
|
||||||
|
|
||||||
|
Bei geöffneter Seite findest du neben dem Stift: **Beobachten** (Glocke
|
||||||
|
für diese Seite), **Kommentare** (mit Zähler für Ungelesenes),
|
||||||
|
**Anhänge**, **Seiten-Werkzeuge** (Inhaltsverzeichnis, Seitenindex —
|
||||||
|
sofern aktiviert), **Labels**, **Verlauf** und das **…**-Menü (Markdown
|
||||||
|
kopieren/herunterladen, Export nach Word/LibreOffice/PDF, Löschen).
|
||||||
|
|
||||||
|
## Labels
|
||||||
|
|
||||||
|
Öffne das **Label-Symbol**, um die Seite zu verschlagworten. Du kannst
|
||||||
|
bestehende Labels wählen oder direkt ein neues anlegen (das Anlegen ist
|
||||||
|
Teich-Admins vorbehalten). Labels ordnen Seiten und können
|
||||||
|
Zugriffsregeln tragen — eine Seite erbt jede Regel ihrer Labels.
|
||||||
|
|
||||||
|
## Suche
|
||||||
|
|
||||||
|
Das Suchfeld in der Kopfleiste durchsucht jede Seite, die du lesen
|
||||||
|
darfst, über alle Teiche hinweg — tolerant gegenüber Akzenten („Baume"
|
||||||
|
findet „Bäume") und Teilwörtern. Letzte Suchen werden gemerkt (und
|
||||||
|
lassen sich löschen).
|
||||||
|
|
||||||
|
## Kommentare
|
||||||
|
|
||||||
|
Das **Sprechblasen-Symbol** öffnet das Kommentar-Panel: Threads mit
|
||||||
|
einer Antwort-Ebene, Markdown möglich, Bearbeiten und Löschen für
|
||||||
|
eigene Kommentare, **Erledigen** klappt abgeschlossene Diskussionen
|
||||||
|
weg. Ob alle Lesenden oder nur Bearbeitende kommentieren dürfen, ist
|
||||||
|
eine Teich-Einstellung.
|
||||||
|
|
||||||
|
## Beobachten, Benachrichtigungen, Digests
|
||||||
|
|
||||||
|
- **Beobachte** eine Seite (Glocke in den Seiten-Aktionen) oder einen
|
||||||
|
ganzen Teich (Glocke im Kopf der Teich-Einstellungen), um über
|
||||||
|
Änderungen und Kommentare benachrichtigt zu werden. Standardmäßig
|
||||||
|
beobachtest du automatisch Seiten, die du anlegst oder kommentierst —
|
||||||
|
beide Schalter liegen unter **Einstellungen → Profil**.
|
||||||
|
- Die **Glocke in der Kopfleiste** ist dein
|
||||||
|
Benachrichtigungs-Posteingang; Einträge verlinken direkt auf die
|
||||||
|
Änderung (Kommentar-Benachrichtigungen öffnen das Panel).
|
||||||
|
- **E-Mail-Digests** bündeln ungelesene Benachrichtigungen stündlich
|
||||||
|
oder täglich — einstellbar unter Einstellungen, abbestellbar direkt
|
||||||
|
aus jeder Digest-Mail.
|
||||||
|
|
||||||
|
## Import und Export
|
||||||
|
|
||||||
|
- **Dokument importieren** (Link in der Seitenleiste): `.docx`, `.odt`
|
||||||
|
oder `.md` wird zu einer neuen Seite, eingebettete Bilder inklusive.
|
||||||
|
- **Seite exportieren**: „…"-Menü → Markdown / Word / LibreOffice /
|
||||||
|
PDF. **Teich exportieren**: Teich-Einstellungen → ZIP aller Seiten,
|
||||||
|
die du lesen darfst, als Markdown plus Medien.
|
||||||
|
|
||||||
|
## Deine Einstellungen (oben rechts → Einstellungen)
|
||||||
|
|
||||||
|
Profil (Anzeigename, E-Mail, Sprache, Beobachten-Voreinstellungen,
|
||||||
|
Digest-Frequenz), Passwort, aktive Sitzungen, deine beobachteten Seiten
|
||||||
|
und Teiche, **API-Tokens** (für Skripte und KI-Assistenten — siehe das
|
||||||
|
[API-Handbuch](api-guide.md) und das [MCP-Handbuch](mcp-guide.md)) und
|
||||||
|
**Meine Daten exportieren**: ein ZIP mit deinen Profildaten und dem
|
||||||
|
vollständigen Inhalt deiner eigenen Teiche.
|
||||||
|
|
||||||
|
## Öffentliche Seiten
|
||||||
|
|
||||||
|
Hat ein Teich-Admin eine Seite öffentlich geschaltet, ist sie ohne Konto
|
||||||
|
unter `/public/<teich>/<seite>` lesbar — mit der Typografie des Teichs
|
||||||
|
und einem Link auf die Rechtsseiten der Instanz.
|
||||||
@ -1,5 +1,7 @@
|
|||||||
# Developer guide — extending Dorfteich
|
# Developer guide — extending Dorfteich
|
||||||
|
|
||||||
|
_Deutsche Fassung: [docs/de/developer/extending.md](../de/developer/extending.md)_
|
||||||
|
|
||||||
Two ways to make Dorfteich do more: write a **plugin** (no fork, no
|
Two ways to make Dorfteich do more: write a **plugin** (no fork, no
|
||||||
redeploy, safe by construction) or contribute to the **core**. Start
|
redeploy, safe by construction) or contribute to the **core**. Start
|
||||||
with a plugin unless you need to change how the product itself works.
|
with a plugin unless you need to change how the product itself works.
|
||||||
|
|||||||
@ -1,5 +1,7 @@
|
|||||||
# Dorfteich — what it is and why you might want it
|
# Dorfteich — what it is and why you might want it
|
||||||
|
|
||||||
|
_Deutsche Fassung: [docs/de/features.md](de/features.md)_
|
||||||
|
|
||||||
Dorfteich is an open-source wiki for people who want to think and write
|
Dorfteich is an open-source wiki for people who want to think and write
|
||||||
together — in real time, on their own server, without handing their
|
together — in real time, on their own server, without handing their
|
||||||
knowledge to a cloud company.
|
knowledge to a cloud company.
|
||||||
|
|||||||
@ -1,7 +1,8 @@
|
|||||||
# Dorfteich manuals
|
# Dorfteich manuals
|
||||||
|
|
||||||
User-facing documentation, by audience. (German translations are
|
User-facing documentation, by audience. German translations live in
|
||||||
planned; English is authoritative for now.)
|
[`docs/de/`](../de/manual/README.md); English is authoritative when the
|
||||||
|
two diverge.
|
||||||
|
|
||||||
| Guide | For |
|
| Guide | For |
|
||||||
| -------------------------------------------- | ------------------------------------ |
|
| -------------------------------------------- | ------------------------------------ |
|
||||||
|
|||||||
@ -1,5 +1,7 @@
|
|||||||
# API guide
|
# API guide
|
||||||
|
|
||||||
|
_Deutsche Fassung: [docs/de/manual/api-guide.md](../de/manual/api-guide.md)_
|
||||||
|
|
||||||
How to talk to Dorfteich from scripts and integrations. The public REST
|
How to talk to Dorfteich from scripts and integrations. The public REST
|
||||||
API lives at `/api/public/v1`; its machine-readable description is
|
API lives at `/api/public/v1`; its machine-readable description is
|
||||||
served at `/api/public/v1/openapi.json`.
|
served at `/api/public/v1/openapi.json`.
|
||||||
|
|||||||
@ -1,5 +1,7 @@
|
|||||||
# MCP guide — connecting your AI to Dorfteich
|
# MCP guide — connecting your AI to Dorfteich
|
||||||
|
|
||||||
|
_Deutsche Fassung: [docs/de/manual/mcp-guide.md](../de/manual/mcp-guide.md)_
|
||||||
|
|
||||||
Dorfteich ships its own [MCP](https://modelcontextprotocol.io) endpoint
|
Dorfteich ships its own [MCP](https://modelcontextprotocol.io) endpoint
|
||||||
at `/api/mcp` (Streamable HTTP). Any MCP-capable assistant — Claude
|
at `/api/mcp` (Streamable HTTP). Any MCP-capable assistant — Claude
|
||||||
Code, Claude Desktop via a bridge, and others — can search, read, and
|
Code, Claude Desktop via a bridge, and others — can search, read, and
|
||||||
|
|||||||
@ -1,5 +1,7 @@
|
|||||||
# Pond-admin guide
|
# Pond-admin guide
|
||||||
|
|
||||||
|
_Deutsche Fassung: [docs/de/manual/pond-admin-guide.md](../de/manual/pond-admin-guide.md)_
|
||||||
|
|
||||||
What you can configure on a pond you administer. You are a pond admin on
|
What you can configure on a pond you administer. You are a pond admin on
|
||||||
your own personal pond and on every pond where you hold the
|
your own personal pond and on every pond where you hold the
|
||||||
`pond_admin` role. All of this lives behind the **gear icon** in the top
|
`pond_admin` role. All of this lives behind the **gear icon** in the top
|
||||||
|
|||||||
@ -1,5 +1,7 @@
|
|||||||
# Site-admin guide
|
# Site-admin guide
|
||||||
|
|
||||||
|
_Deutsche Fassung: [docs/de/manual/site-admin-guide.md](../de/manual/site-admin-guide.md)_
|
||||||
|
|
||||||
How to administer a Dorfteich instance from the browser. Installation,
|
How to administer a Dorfteich instance from the browser. Installation,
|
||||||
updates, and host-level operations are covered by the
|
updates, and host-level operations are covered by the
|
||||||
[self-hosting guide](../self-hosting/README.md); this guide is about the
|
[self-hosting guide](../self-hosting/README.md); this guide is about the
|
||||||
|
|||||||
@ -1,5 +1,7 @@
|
|||||||
# User guide
|
# User guide
|
||||||
|
|
||||||
|
_Deutsche Fassung: [docs/de/manual/user-guide.md](../de/manual/user-guide.md)_
|
||||||
|
|
||||||
How to find your way around Dorfteich as a regular member. For pond
|
How to find your way around Dorfteich as a regular member. For pond
|
||||||
configuration see the [pond-admin guide](pond-admin-guide.md); for
|
configuration see the [pond-admin guide](pond-admin-guide.md); for
|
||||||
instance administration the [site-admin guide](site-admin-guide.md).
|
instance administration the [site-admin guide](site-admin-guide.md).
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user