Files
claude-ai-control/memory/archiv-wiki-konzept.md
T
2026-07-24 21:42:30 +02:00

37 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
name: archiv-wiki-konzept
description: "Archiv als kleines Wiki im Panel: Live-Rendering Markdown→HTML mit Wikilinks/Backlinks/Startseite; explizites publish (statischer Export) später; Konzeptphase, kein Go"
metadata:
node_type: memory
type: project
originSessionId: ab462db0-45d2-4935-b32e-4ce2fafda1ae
modified: 2026-07-24T10:38:01.085Z
---
Marcus' Entscheidung (2026-07-19): Das Panel-Archiv bekommt eine Wiki-Schicht — **erst mal nur live**, ein explizites `publish` (statischer HTML-Export) kommt später als eigenes Kommando.
- **Live-Rendering:** Panel rendert archivierte Markdown-Dokumente zu HTML; HTML ist reine Darstellung, nichts wird gespeichert.
- **Wikilinks:** `[[dokument-name]]` wird beim Rendern als Link aufgelöst; Klick lädt das Ziel über den `path`-Parameter von write_panel (derselbe Mechanismus wie der Treffer-Klick aus `search_archive`, [[archiv-suchindex-konzept]]). Namensauflösung über den Dokument-Index ([[dokument-index-konzept]]); Backlinks fallen als Nebenprodukt der Indizierung ab.
- **Einstiegsseite:** Index-/Startseite pro Archiv (generiert aus dem Dokument-Index oder gepflegte `index.md`).
- **Später — publish:** statisches HTML aus dem Archiv generieren; abgeleitete Daten wie der Suchindex (reproduzierbar, nie gesynct), standalone im Browser lesbar.
Fügt sich in das Modell aus [[archiv-home-konzept]]: alle Funktionen lokal, gesynct nur Markdown-Nutzdaten.
Stand 2026-07-19 (zweiter Umbau nach UI-Kritik „strukturlos, keine Nutzerführung"): Das Wiki hat einen **eigenen vierten Tab** mit eigenem Puffer (`<project>.wiki.json`, env `AI_CONTROL_WIKI`, Event `wiki-update`) — der Entwurf wird nicht mehr verdrängt. `archive_page` liefert strukturierte Daten (`WikiPage`: Ordner-Gruppen neueste zuerst, Tag-Zähler; `kind` page/doc), `wiki_doc` ein Dokument mit Frontmatter-gestripptem Markdown + Backlinks; `resolve`/`resolve_path`/`panel_load` sind ersetzt. `src/wiki-view.ts` rendert: Kopf (Titel #tag/Archiv, Home-Pfad, Dokumentzahl), Tag-Chips mit „Alle", Ordner-Eyebrows, klickbare Dokumentzeilen, Dokumentseite mit „‹ Archiv"-Rücksprung und Backlinks-Fußzeile, Leerzustand mit Anleitung; Klick auf den leeren Wiki-Tab lädt die Übersicht automatisch. Wikilinks, Chips und Suchtreffer öffnen alle über `wiki_open` im Wiki-Tab.
Dritter Umbau am selben Tag (in der App verifiziert, Commits 994d507 + 81a663e auf lintus): **Tab-Leiste im Fenster-Header** beider Fenster — `Befehle │ Dokument · Wiki · Suche │` rechtsbündig vor Pool-Badge bzw. Fensterknöpfen; „Entwurf" heißt überall „Dokument". Das abgelöste Fenster ist unter Linux rahmenlos mit eigener 40-px-Kopfleiste (Andocken/Min/Max/Schließen), Theme-gekoppelt über gemeinsames `src/themes.ts`; beide Fenster mit 1-px-Rahmen in Theme-Rahmenfarbe. Archivieren flusht offene Bearbeitung (`view.flush()`), Tab-Wechsel speichert statt zu blockieren, Fehler erscheinen als Panel-Toast (`panelToast`). Such-Tab hat ein Suchfeld: Live-Suche ab 3 Zeichen mit 300-ms-Debounce und Auto-Präfix (`arch``arch*`), Enter wörtlich; läuft über Tauri-Kommando `search_run` durch dieselbe FTS5-Engine wie `search_archive`. Refinement-Runde + Folge-Fixes (Commits 286513d, in der App verifiziert bis auf die letzten Fixes): Slug transliteriert Umlaute; aktiver Tab mit Akzent/Unterstrich, kein aktiver Tab bei zugeklapptem Panel; Suche mit Live-Update beim Löschen, `#tag`-Filter, Treffer öffnen im Dokument-Tab (`panel_load`, Frontmatter gestrippt), Wiki-Sprung-Button im Dokument; Archiv-Formular (Ordner/Beschreibung/Tags) am Archiv-Button; Wiki-Übersicht mit Zuletzt-Sektion + Backlink-Zählern; Panel-Farben als CSS-Variablen, `applyTheme` leitet sie pro Theme ab; Fenster: Doppelklick maximiert, gelöstes Fenster merkt Geometrie. **Archiv pro Projekt wähl-/abwählbar** im Einstellungsdialog (setzt/entfernt archiveHome + Permissions; `require_archive_home` legt den Ordner an); ohne Archiv zeigt das Panel nur Befehle│Dokument. **Frontend-Tests**: vitest + happy-dom, 27 Tests (`npm test`) über Modus-/Such-/Wiki-/Editor-/Formular-Logik. Panel-Hänger beim Ablösen geklärt: fehlende Window-ACL (set-position/outer-position/inner-size) killte den Fensterstart; zusätzlich `open_panel_window` async und JS-Fehler-Spiegelung ins Dev-Log. Offen: `publish`, macOS/Windows-Angleich. Teil des „Textpanel viel besser machen"-Blocks ([[command-panel-konzept]]).
Navigator-Umbau (2026-07-23, nach Marcus' Ansage, unversioniert): Wiki-Tab ist jetzt ein Ordner-Navigator — Baum links zeigt NUR Ordner (Wurzelknoten „Archiv", details auf-/zuklappbar, Name-Klick wählt aus ohne zu klappen, Stift = Inline-Umbenennen via archive_move_folder), rechts IMMER die flache Liste des direkten Ordnerinhalts (keine Teilbäume, keine Tags/Chips/Zuletzt — Suche nur im Such-Tab). Zeilen: Klick öffnet wie ein Suchtreffer im Dokument-Tab (openDoc mit `home/relpath`), Hover-Aktionen umbenennen (inline) und löschen. Wiki-Dokumentseite komplett entfernt (WikiDocPage/wiki_doc → resolve_doc); wiki_open mit Dokumentname lädt in den Panel-Puffer (panel-update), nur `tag:`-Ziele schreiben noch den Wiki-Puffer; #panel-wiki-jump öffnet die Übersicht. WikiDocEntry trägt relpath, WikiPage ohne recent/tree. Backend `domain/archive_ops.rs`: move_doc/rename_doc/delete_doc/move_folder, Pfade strikt unter Archiv-Home, kein Überschreiben; Commands archive_move/archive_rename/archive_delete/archive_move_folder (build.rs-ACL, Capabilities panel+terminal) schreiben danach die frische Übersicht. Umbenennen erhält den Zeitstempel, sluggt den Namen; Backlinks auf den alten Namen werden nicht umgeschrieben (↩-Zähler an Zeilen bleibt). Außerdem: Ablösen des Panels übergibt den aktiven Tab (open_panel_window mode-Param → URL). 110 Rust-/60 Frontend-Tests; App-Verifikation und Commit stehen aus.
Anlegen + Write-back (2026-07-23, unversioniert): Plus im Baum-Kopf legt Ordner an (`archive_create_folder`, auch dokumentlose Ordner erscheinen jetzt in der Übersicht — folder_paths in archive_index), Plus im Listenkopf legt Dokumente an (`archive_create_doc`): Dateiname nur `<slug>.md` OHNE Datumsstempel (Marcus' Ansage), Datum steht im Frontmatter-`created` (doc_entry-Fallback fürs Listen-Datum); beides über ein kleines Formular oben in der Liste (.wiki-form: Feld + Anlegen/Abbrechen — Marcus wollte ausdrücklich ein normales Formular, kein Inline-Verwandeln). **Write-back**: Quell-Verknüpfung `<panel>.md.source` (paths::panel_source_file) — panel_load/wiki_open/create_doc setzen sie, panel_set schreibt den Body dann in die Archiv-Datei zurück (archive_ops::write_body, Frontmatter bleibt); gelöst durch MCP write_panel und beim Session-Start (term_start), rename/move/move_folder ziehen sie nach (relink/relink_folder), delete löst sie. create_doc schreibt bewusst NICHT den Wiki-Puffer (zwei Puffer-Events würden um den aktiven Tab rennen) — stattdessen lädt der Wiki-Tab die Übersicht jetzt bei JEDEM Aktivieren frisch (onActivate ohne empty()-Guard). 113 Rust-/63 Frontend-Tests, vue-tsc sauber. Navigator-Umbau + Anlegen/Write-back committet und gepusht als f58b988 auf lintus (2026-07-23).
Richtungswechsel (2026-07-24, Marcus' Entscheidung): **Obsidian statt eigenem Navigator** — das Archiv-Home ist ein Vault (reines Markdown + Frontmatter), Obsidian übernimmt die komplette Mensch-Seite (Navigation, Anlegen, Umbenennen, Backlinks, Graph). Steuerung: `obsidian://open` plugin-frei; Sprung zu Überschrift/Block + Commands via Advanced URI; Schließen/Fernsteuerung via Local REST API (Token in `.obsidian/plugins/obsidian-local-rest-api/data.json`, von ai-control generierbar). Bootstrap komplett automatisierbar: Vault-Registry `~/.config/obsidian/obsidian.json` (nicht bei laufendem Obsidian schreiben), Plugins als Dateien nach `.obsidian/plugins/<id>/` + `community-plugins.json`, alles vault-lokal — kein Eingriff in fremde Vaults; Restricted-Mode-Erstbestätigung ungeklärt (Test nötig), REST-Port pro Projekt eindeutig setzen. **Aufräumen umgesetzt (2026-07-24, uncommitted)**: Wiki-Tab komplett raus (wiki-view.ts+Test, wikiTab, Wiki-Puffer/AI_CONTROL_WIKI/wiki-update, .wiki-CSS, #panel-wiki-jump, tabWiki/openInWiki/wiki-Messages), Backend-CRUD raus (archive_ops nur noch write_body; Commands archive_move/rename/delete/move_folder/create_folder/create_doc aus build.rs/Capabilities/app.rs; relink/relink_folder), archive_page/WikiPage/folder_paths/doc_entry/Doc.created raus, show_archive (MCP) raus, utc_now_iso raus, frontmatter wieder privat; wiki_open nur noch Wikilink→Dokument-Tab; ModuleCtx ohne openWiki. Bleibt: Befehle│Dokument│Suche, archive_panel/search_archive, Write-back (panel_source, write_body). 104 Rust-/50 Frontend-Tests, vue-tsc sauber. Über den Dokument-Tab „sprechen wir noch mal".
Obsidian-Wizard umgesetzt (2026-07-24, uncommitted, Build gebaut): Modul „obsidian" (Opt-in, requires_archive, keine Tabs/Tools) — Anhaken im Settings-Dialog öffnet den Wizard (ProjectList.vue, Ref `obsWizard`; Vorsicht: `wizard` ist dort der Projekt-Anlege-Wizard). Vier Checks (App native/flatpak/snap, Vault-Registry, Plugins, REST+Port) + Aktionen Einrichten/Öffnen/Testen. Backend: domain/obsidian.rs (bootstrap_vault merged community-plugins + data.json, Token 64-hex nur wenn leer, ports_for FNV → Paar 2720027981, register_vault atomar/idempotent, rest_access, uri_encode), Commands obsidian_status/setup/open/verify in commands.rs (setup verweigert bei laufendem Obsidian; verify = HTTP-GET 127.0.0.1:insecurePort mit Bearer, std-TcpStream), Platform-Fns obsidian_config_candidates/install/running/open_uri je OS. Plugins gebündelt via include_bytes aus src-tauri/resources/obsidian/: Advanced URI 1.47.0, Local REST API 5.0.0 („with MCP", data.json-Keys apiKey/port/insecurePort/enableInsecureServer, behält gesetzten apiKey).
**Obsidian VERWORFEN, Trilium wird versucht (2026-07-24 nachmittags, Marcus' Entscheidung).** Ablauf der Eskalation: (a) Modul-Haken schrieb `modules.obsidian: true` sofort in die Config (Sofort-Schreiber wie alle Modul-Schalter) — bei abgebrochenem Install blieb das Projekt als „eingerichtet" markiert → Marcus: Config-Einträge IMMER erst nach erfolgreichem Setup schreiben, vorher alles zurückrollen (gilt als Muster für jeden künftigen Wizard). (b) Flatpak als Install-Weg verboten; Download-Seite als Ersatz abgelehnt. (c) Eigene zentral verwaltete Obsidian-Kopie (AppImage extrahiert) scheiterte an Marcus' Anforderungen: parallele Instanzen PFLICHT, keine undokumentierten Features (XDG_CONFIG_HOME/--user-data-dir), niemals in die Config einer fremden Instanz schreiben — zusammen unerfüllbar, Obsidian hat keine dokumentierte Config-Trennung. → Alternativen-Runde: Trilium/TriliumNext (ETAPI, TRILIUM_DATA_DIR dokumentiert), Joplin (--profile, Data-API), SiYuan. **Marcus wählt Trilium-Versuch**; wichtig ihm: kein Pures-Markdown-Dogma (das war meine unterstellte Anforderung — Trilium speichert HTML in SQLite, MD nur Import/Export), Remote/Publish geht (Server-Modus, Sync, /share/…). Aufräumen erledigt: gesamte Obsidian-Integration entfernt (obsidian.rs, Commands, Platform-Fns, gebündelte Plugins, Wizard-UI/CSS, Capabilities, Messages), Archiv-Modul + Settings-Archivzeile + set/change/clear_archive_home wiederhergestellt (Stand Befehle│Dokument│Suche, Treffer → Dokument-Tab); validate_archive_home als neue Extraktion behalten. 104 Rust-/50 Frontend-Tests, vue-tsc sauber. Misc-Config bereinigt (modules.obsidian entfernt). Offen: Trilium-Konzept (Systemlast Desktop 200400 MB vs. Server ~100200 MB pro Instanz; eBooks kann es nicht — PDF-Vorschau ja, EPUB nein).
Wizard-Runde II nach Marcus' Kritik (2026-07-24, uncommitted, Build gebaut — historisch, Code inzwischen wieder entfernt): Der Erstlauf war auf dem eigenen Projekt gelaufen — Spuren zurückgesetzt (archive/.obsidian gelöscht, Vault-Registry geleert, modules.obsidian aus der Projekt-Config). Umbau danach: (1) Wizard-UI nach der UI-Guideline vom 23. (`.obs-dialog`: 14 px Basis, 12 px Meta, Zeilen ≥28 px, 24-px-Marken, 4-px-Skala, min(44rem,94vw)); (2) Setup hart gesperrt ohne installierte App — Backend-Check in obsidian_setup + disabled-Buttons, dazu Install-Angebot mit kopierbarem Befehl (obsidian_install_hint je OS: flatpak/brew/winget) und „Neu prüfen"; (3) Vault-Ordner wird IM Wizard erfragt (Pfad-Zeile + Ordner-Dialog, vorbelegt mit archiveHome; obsidian_setup nimmt `dir` und läuft über change_project_archive_home ohne Migration), status_for läuft ohne Home (archive_home/vault_name Option); (4) altes Archiv-Modul raus: ModuleDesc „archive" gestrichen, archive_panel/search_archive + Such-Puffer hängen am obsidian-Modul (Opt-in), Archiv-Zeile im Settings-Dialog + set/change/clear_archive_home_cmd + Wechsel-Dialog entfernt (change_project_archive_home bleibt, clear_ gelöscht); (5) Such-Treffer öffnen in Obsidian: search-view liefert relpath, obsidian_open hat `file`-Param (obsidian://open?vault&file, .md gestrippt), ctx.openDoc entfernt. Marcus' Ansage außerdem: Dokument-Tab fliegt raus („irritiert mehr als er hilft") — noch NICHT umgesetzt, hängt am write_panel/archive_panel-Gespräch. 109 Rust-/50 Frontend-Tests, vue-tsc sauber, deb/rpm gebaut; App-Test durch Marcus offen (inkl. Frage Restricted-Mode-Erstbestätigung).
Marcus' Urteil nach dem Install (2026-07-23): Panel-/Navigator-UI insgesamt „völlig unübersichtlich und viel zu klein", Handling passt nicht — eine grundlegende UI-Überarbeitung steht an, ausdrücklich auf später verschoben. Kein frontend-design-Skill installiert (nur artifact-design verfügbar). UI-Recherche als Guideline im Projekt-Archiv: `design/2026-07-23_1715-ui-guideline-ai-control-panel.md` (1314 px Basis, Zeilen 2832 px, 4-px-Spacing, 24-px-Hit-Targets, modale Dialoge statt In-situ, keine Hover-only-Aktionen). Für den Start geplant (Plan gezeigt, noch kein Go): panel-dialog.ts als modaler Dialog für Anlegen/Umbenennen im Navigator + Dokumenttitel beim Öffnen übernehmen (`# <Frontmatter-Titel>` voranstellen, wenn Body ohne Überschrift; neue Dokumente starten mit `# <Name>`).