14 KiB
name, description, metadata
| name | description | metadata | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| archiv-wiki-konzept | Archiv als kleines Wiki im Panel: Live-Rendering Markdown→HTML mit Wikilinks/Backlinks/Startseite; explizites publish (statischer Export) später; Konzeptphase, kein Go |
|
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 denpath-Parameter von write_panel (derselbe Mechanismus wie der Treffer-Klick aussearch_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 27200–27981, 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 200–400 MB vs. Server ~100–200 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 (13–14 px Basis, Zeilen 28–32 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>).