claude sync: 2026-07-24 21:42
This commit is contained in:
@@ -5,5 +5,8 @@
|
||||
"theme": "monokai",
|
||||
"icon": "icon.png"
|
||||
},
|
||||
"archiveHome": "~/claude-projects/claude-ai-control/archive"
|
||||
"archiveHome": "~/claude-projects/claude-ai-control/archive",
|
||||
"modules": {
|
||||
"todo": true
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,17 +1,5 @@
|
||||
{
|
||||
"autoMemoryDirectory": "~/claude-projects/claude-ai-control/memory",
|
||||
"hooks": {
|
||||
"SessionStart": [
|
||||
{
|
||||
"hooks": [
|
||||
{
|
||||
"command": "jq -Rs '{systemMessage: ., hookSpecificOutput:{hookEventName:\"SessionStart\", additionalContext: .}}' /home/marcuh/claude-projects/claude-ai-control/OFFENE-PUNKTE.md",
|
||||
"type": "command"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"permissions": {
|
||||
"additionalDirectories": [
|
||||
"~/projects/ai-control",
|
||||
|
||||
@@ -1,38 +0,0 @@
|
||||
# Offene Punkte — bei jedem Start prüfen und abhaken
|
||||
|
||||
Zuletzt erledigt (2026-07-21, Details in der Git-Historie beider Repos):
|
||||
Popup auf SNI-Desktops — Activate-Koordinaten als `Anchor::Click`, neue
|
||||
Cinnamon-Extension (Wayland-Platzierung, X11-Fokus gegen Muffins
|
||||
Focus-Stealing-Prevention), in deb/rpm paketiert; komplette VM-Runde
|
||||
verifiziert (Cinnamon Wayland + X11, XFCE, KDE, GNOME). Davor 2026-07-20:
|
||||
CSP, App-ACL-Manifest, Lösch-Stufen, Archiv-Wechsel mit Migration,
|
||||
macOS-API-Key ohne argv.
|
||||
|
||||
## Beobachten (nach den Umbauten vom 2026-07-20)
|
||||
|
||||
- [ ] CSP + App-ACL im Alltag: tote Buttons oder fehlende Anzeigen wären
|
||||
eine vergessene Capability-Zuteilung bzw. CSP-Fallout; die genaue
|
||||
Ablehnung steht im Terminal-Log des Debug-Builds. Seit 2026-07-21 ist
|
||||
zusätzlich `style-src 'self'` ohne unsafe-inline scharf (Styles von
|
||||
terminal/panel/popup liegen jetzt in src/*-window.css) — kaputte Optik
|
||||
in einem der drei Fenster wäre CSP-Fallout dieser Härtung; im
|
||||
installierten Build noch nicht gesehen, erst ab dem nächsten Deploy
|
||||
wirksam.
|
||||
- [ ] Lösch-Dialog Stufe „nur Integration" erst an einem Wegwerf-Projekt
|
||||
durchspielen.
|
||||
|
||||
## Release-Themen (wenn es Richtung Veröffentlichung geht)
|
||||
|
||||
- README: aiCentral-Fassung vom 2026-07-20 steht, laut Marcus geht da noch
|
||||
mal jemand drüber.
|
||||
- GNOME-Extension via deb/rpm nach /usr/share ausrollen (postinst nur GNOME,
|
||||
prerm für dconf); AppImage-Start unter GNOME ist schon gesperrt. Die
|
||||
Cinnamon-Extension liegt seit bbb06e0 im Paket; Aktivierung pro Benutzer
|
||||
(gsettings) ist noch offen — gleiches Autostart-/prerm-Thema wie GNOME.
|
||||
- macOS/Windows-Angleich der Panel-UI; `publish`-Flow.
|
||||
|
||||
## Hintergrund (unverändert gültig)
|
||||
|
||||
Pools trennen Konfiguration, nicht Zugriff: Die Keychain-Einträge sind
|
||||
bewusst promptfrei lesbar — jeder Prozess des Nutzers kann jeden Pool-Key
|
||||
lesen. So gewollt, kein Isolationsversprechen.
|
||||
@@ -1,8 +0,0 @@
|
||||
---
|
||||
title: "Ein test für's archiv"
|
||||
project: ai-control
|
||||
created: 2026-07-19T12:05:33Z
|
||||
source: ai-control
|
||||
---
|
||||
|
||||
Ein test für's archiv
|
||||
@@ -0,0 +1,222 @@
|
||||
---
|
||||
title: "Modul-System für aICentral — Entwurf"
|
||||
project: ai-control
|
||||
created: 2026-07-22T16:26:08Z
|
||||
source: ai-control
|
||||
description: "Modul-System für aICentral: Deskriptoren, Registry, Enablement, Migration in 5 Schritten, Plugin-Ausblick"
|
||||
tags: ["design", "module", "plugin", "panel", "architektur"]
|
||||
---
|
||||
|
||||
# Modul-System für aICentral — Entwurf
|
||||
|
||||
Stand 2026-07-22. Grundlage: panel-wiring.ts, commands-view.ts, mcp.rs,
|
||||
terminal.rs, app.rs, domain/project.rs (Stand 513e1a7).
|
||||
|
||||
## 1. Ziel und Abgrenzung
|
||||
|
||||
Alle Panel-Funktionen werden zu- und abwählbare **Module**; die anstehenden
|
||||
Features (ToDo-Liste, Commit-Dialog, Archiv-Ausbau, Authoring-Ansicht)
|
||||
entstehen direkt als Module. Ein System für **fremde Plugins** (zur Laufzeit
|
||||
geladener Code) wird jetzt nicht gebaut — der Entwurf legt aber die
|
||||
Schnittstellen so, dass es später ohne Umbau andockt (Abschnitt 9).
|
||||
|
||||
## 2. Bestandsaufnahme — was schon Modulform hat
|
||||
|
||||
Die vier Panel-Ansichten folgen bereits einem einheitlichen Muster, es ist
|
||||
nur nicht als Schnittstelle benannt:
|
||||
|
||||
| Baustein | draft | commands | search | wiki |
|
||||
|---|---|---|---|---|
|
||||
| Pufferdatei (Env an MCP) | AI_CONTROL_PANEL | …_COMMANDS | …_SEARCH | …_WIKI |
|
||||
| Watcher-Event | panel-update | commands-update | search-update | wiki-update |
|
||||
| View-Interface | set/flush | set/empty | set/empty | set/empty |
|
||||
| Read-Command | panel_read | commands_read | search_read | wiki_read |
|
||||
| MCP-Tools | write_panel | write/show_commands | search_archive | show_archive, archive_panel |
|
||||
|
||||
Der Datenfluss ist überall gleich: MCP-Server oder Command schreibt die
|
||||
Pufferdatei → Datei-Watcher im Terminal-Prozess emittiert `<x>-update` →
|
||||
View rendert. Es gibt auch schon ein abwählbares Modul: `archiveHome: null`
|
||||
blendet Wiki-/Suche-Tab und Archiv-Werkzeuge aus (panel-wiring.ts:45).
|
||||
Das Modul-System verallgemeinert genau diese zwei Präzedenzfälle.
|
||||
|
||||
## 3. Modulbegriff
|
||||
|
||||
Ein Modul ist ein benannter Funktionsblock mit bis zu vier Beiträgen:
|
||||
|
||||
1. **Panel-Tab** mit View (Kachel- oder Dokumentansicht)
|
||||
2. **MCP-Tools** (Angebot an claude)
|
||||
3. **Pufferdatei + Watcher-Event** (der Transportweg dazwischen)
|
||||
4. optional **Fenster/Dialoge** (z. B. Commit-Dialog)
|
||||
|
||||
Geplanter Zuschnitt:
|
||||
|
||||
| Modul | Tab | MCP-Tools | abwählbar |
|
||||
|---|---|---|---|
|
||||
| `draft` (Entwurf) | ja | write_panel | nein — Kern |
|
||||
| `commands` | ja | write_commands, show_commands | ja |
|
||||
| `archive` | Wiki + Suche | archive_panel, show_archive, search_archive | ja (heute: archiveHome) |
|
||||
| `todo` (neu) | ja | write_todos, show_todos | ja |
|
||||
| `commit` (neu) | nein, eigener Dialog | — | ja |
|
||||
| `authoring` (später) | ja | … | ja |
|
||||
|
||||
`draft` bleibt Kern: Titel, Editier-Modus, flush und das Archivieren hängen
|
||||
daran; ohne Entwurf ist das Panel leer. Alles andere ist abschaltbar.
|
||||
|
||||
## 4. Backend: Deskriptoren und eine Durchsetzungsstelle
|
||||
|
||||
Neu `domain/modules.rs`:
|
||||
|
||||
```rust
|
||||
pub(crate) struct ModuleDesc {
|
||||
pub id: &'static str, // "commands", "todo", ...
|
||||
pub default_enabled: bool,
|
||||
/// Modul setzt ein konfiguriertes archiveHome voraus.
|
||||
pub requires_archive: bool,
|
||||
pub mcp_tools: &'static [&'static str],
|
||||
/// Pufferdatei-Name im Projekt-Runtime-Ordner, None = kein Puffer.
|
||||
pub buffer: Option<&'static str>,
|
||||
}
|
||||
pub(crate) const MODULES: &[ModuleDesc] = &[ /* draft, commands, archive, todo, … */ ];
|
||||
|
||||
/// Die eine Quelle für „was ist in diesem Projekt an?“.
|
||||
pub(crate) fn enabled_modules_in(paths: &Paths, project: &str)
|
||||
-> Result<Vec<&'static str>, String>
|
||||
```
|
||||
|
||||
`enabled_modules_in` = MODULES, gefiltert durch Projekt-Config und
|
||||
`requires_archive` (Archiv-Module fallen ohne archiveHome automatisch weg —
|
||||
das ersetzt die heutige Sonderbehandlung, statt eine zweite daneben zu
|
||||
stellen). Genau drei Aufrufer:
|
||||
|
||||
1. **Tauri-Command `enabled_modules(project)`** — das Frontend fragt einmal
|
||||
beim Verdrahten.
|
||||
2. **mcp.rs `tools/list`** — die Tool-Liste wird aus
|
||||
`MODULES[…].mcp_tools` der aktiven Module gebaut (Projekt kommt wie
|
||||
heute über `AI_CONTROL_PROJECT`). claude sieht Tools abgeschalteter
|
||||
Module gar nicht erst.
|
||||
3. **mcp.rs `tools/call`** — Guard vor dem Dispatch: Tool eines inaktiven
|
||||
Moduls → Fehler „Modul X ist in diesem Projekt abgeschaltet". Nötig,
|
||||
weil eine laufende claude-Session die Tool-Liste vom Start behält.
|
||||
|
||||
Verallgemeinert wird außerdem:
|
||||
|
||||
- **terminal.rs**: die vier `spawn_file_watcher`-Zeilen werden eine Schleife
|
||||
über die aktiven Module mit Puffer; Event-Name per Konvention
|
||||
`<id>-update`, Env-Name `AI_CONTROL_<ID>`.
|
||||
- **Read-Commands**: `panel_read/commands_read/search_read/wiki_read`
|
||||
verschmelzen zu `module_read(project, module)` (alle vier sind
|
||||
„Pufferdatei als String"). `panel_set` bleibt eigenständig, es ist der
|
||||
einzige Rückkanal.
|
||||
|
||||
Statisch bleiben: `generate_handler!` (Commands aller Module sind kompiliert
|
||||
registriert; Abwahl wirkt auf Sichtbarkeit und Tools, nicht auf die
|
||||
IPC-Registrierung), die Capability-Manifeste pro Fenster und die CSP. Die
|
||||
Modul-Abwahl ist Konfiguration, keine Sicherheitsgrenze — dieselbe Linie
|
||||
wie bei den Pools (Konfiguration trennen, nicht Zugriff).
|
||||
|
||||
## 5. Frontend: Registry statt Verdrahtung von Hand
|
||||
|
||||
Neu `src/modules/` mit einem Deskriptor pro Modul:
|
||||
|
||||
```ts
|
||||
export interface PanelModule {
|
||||
id: string;
|
||||
tabLabelKey: string; // i18n-Key
|
||||
order: number; // Tab-Reihenfolge
|
||||
init(container: HTMLElement, ctx: ModuleCtx): ModuleView;
|
||||
/// Kopfzeilen-Werkzeuge des Moduls (z. B. Archivieren-Button).
|
||||
headerTools?(ctx: ModuleCtx): HTMLElement[];
|
||||
}
|
||||
export interface ModuleView { set(text: string): void; empty(): boolean; }
|
||||
export interface ModuleCtx {
|
||||
project: string;
|
||||
toast(msg: string): void;
|
||||
openDoc(path: string): void; // Dokument in den Entwurfs-Tab laden
|
||||
openWiki(name: string): void;
|
||||
}
|
||||
```
|
||||
|
||||
`panel-wiring.ts` wird generisch: `enabled_modules` abfragen, pro Modul
|
||||
Tab + Container erzeugen, `module_read` laden, `<id>-update` abonnieren,
|
||||
`initPanelMode` über die Modulliste statt über vier feste Felder. Die
|
||||
`PanelMode`-Union und die `archiveHome`-Ausblendelogik entfallen. Die
|
||||
HTML-Dateien verlieren die fest verdrahteten Tab-/Container-Elemente;
|
||||
beide Panel-Markups (angedockt/abgelöst) entstehen aus derselben Registry.
|
||||
|
||||
**Kachel-Renderer als gemeinsamer Baustein**: `commands-view.ts` wird in
|
||||
einen deklarativen Tile-Renderer zerlegt (Titel/Text/Note, Zeitmarke,
|
||||
Aktionen kopieren/löschen/öffnen, optionales Badge). Commands, ToDo
|
||||
(Due-Date-Ampel = Badge) und Suchtreffer rendern darüber — die
|
||||
ToDo-Ansicht „analog commandlist" ist dann im Wesentlichen ein
|
||||
Puffer-Format plus Badge-Logik. Das Sanitizing (stripInvisibles, kein
|
||||
innerHTML) liegt damit an einer Stelle.
|
||||
|
||||
## 6. Konfiguration
|
||||
|
||||
Projekt-Config (`.ai-control/config.json`) bekommt:
|
||||
|
||||
```json
|
||||
{ "modules": { "commands": false, "todo": true } }
|
||||
```
|
||||
|
||||
Nur Abweichungen vom Default werden gespeichert; fehlender Key = alle
|
||||
Defaults (bestehende Configs bleiben unverändert gültig, kein
|
||||
Migrationsschritt). `archiveHome` bleibt eigenständiges Feld — es ist
|
||||
Pfad-Konfiguration, das Archiv-Modul hängt über `requires_archive` daran.
|
||||
Ein Eintrag `"archive": false` schaltet das Modul trotz gesetztem
|
||||
archiveHome ab.
|
||||
|
||||
Settings-UI: im Projekt-Dialog eine Checkbox-Gruppe „Module" aus MODULES
|
||||
generiert; Archiv-Zeile kombiniert Checkbox + Pfadwahl (heutige
|
||||
Archiv-Einstellung wandert dorthin). Änderungen wirken beim nächsten
|
||||
Panel-Aufbau; eine laufende claude-Session behält ihre Tool-Liste, der
|
||||
tools/call-Guard fängt das ab.
|
||||
|
||||
## 7. Migration in Schritten
|
||||
|
||||
1. `domain/modules.rs` + `enabled_modules` + tools/list/call aus MODULES
|
||||
speisen — reine Umformung, Verhalten identisch.
|
||||
2. Frontend-Registry: die vier Bestands-Views als Deskriptoren,
|
||||
panel-wiring generisch, archiveHome-Sonderlogik durch
|
||||
`requires_archive` ersetzen. Bestehende vitest-Tests laufen gegen die
|
||||
Deskriptoren weiter.
|
||||
3. Kachel-Renderer aus commands-view extrahieren, Suche darauf umstellen.
|
||||
4. Settings-UI mit Modul-Checkboxen + `modules`-Feld in der Config.
|
||||
5. Erstes neues Modul: **ToDo** — validiert den Schnitt komplett
|
||||
(Deskriptor, Puffer, zwei MCP-Tools, Tile-Renderer mit Badge), ohne
|
||||
eine Zeile Sonderverdrahtung.
|
||||
|
||||
Schritte 1–3 sind Refactoring ohne Funktionsänderung und einzeln
|
||||
committbar; ab Schritt 4 wird das System sichtbar.
|
||||
|
||||
## 8. Auswirkung auf die geplanten Features
|
||||
|
||||
- **ToDo**: Modul nach Schema F (Schritt 5), Aufwand fast nur Puffer-Format
|
||||
und Badge.
|
||||
- **Commit-Dialog**: Modul ohne Tab — Beitrag ist ein Fenster samt
|
||||
Capability-Datei; die Abwahl blendet den Einstieg (Menü/Button) aus.
|
||||
Zeigt, dass der Modulbegriff nicht am Panel klebt.
|
||||
- **Archiv-Ausbau**: Seitennavigation, Metadaten, Ordnerverwaltung wachsen
|
||||
im Archiv-Modul, dessen Grenze (requires_archive, drei MCP-Tools,
|
||||
zwei Tabs) dann schon gezogen ist.
|
||||
- **Authoring-Ansicht**: bekommt mit der Registry eine definierte
|
||||
Andockstelle statt weiterer Handverdrahtung in zwei HTML-Dateien.
|
||||
|
||||
## 9. Ausblick fremde Plugins — drei Stufen, Empfehlung Stufe 2
|
||||
|
||||
1. **Kompilierte Module** (dieser Entwurf): Code im Repo, Registry statisch.
|
||||
2. **Prozess-Plugins**: ein externes Programm liefert einen Deskriptor
|
||||
(JSON-Manifest: id, Label, Tile-Schema, MCP-Tool-Definitionen) und
|
||||
schreibt Pufferdateien im Tile-Format; die App rendert deklarativ und
|
||||
reicht Tool-Calls per stdio durch — dasselbe Muster, mit dem claude
|
||||
heute schon angebunden ist. Kein Fremdcode im Webview, Isolation =
|
||||
Prozessgrenze, CSP und ACL bleiben unangetastet.
|
||||
3. **Geladener UI-Code** (JS/WASM im Webview): verworfen — hebelt CSP
|
||||
(`style-src 'self'` ohne unsafe-inline) und das App-ACL-Manifest aus
|
||||
und schafft genau die Angriffsfläche, die die Sicherheitsrunden
|
||||
geschlossen haben.
|
||||
|
||||
Der Entwurf hält Stufe 2 offen, ohne sie zu bauen: Deskriptor,
|
||||
Tile-Format und Puffer/Event-Konvention sind bereits die Plugin-API —
|
||||
später kommt nur ein Loader dazu, der Deskriptoren aus Manifesten statt
|
||||
aus dem Repo bezieht.
|
||||
@@ -0,0 +1,58 @@
|
||||
---
|
||||
title: "UI-Guideline — ai-control Panel"
|
||||
project: ai-control
|
||||
created: 2026-07-23T17:15:08Z
|
||||
source: ai-control
|
||||
description: "Maßstab für den Panel-/Navigator-Umbau: Schriftgrößen, Dichte, 4-px-Spacing, Dialoge statt In-situ, sichtbare Aktionen"
|
||||
tags: ["ui", "design", "guideline", "panel"]
|
||||
---
|
||||
|
||||
# UI-Guideline — ai-control Panel
|
||||
|
||||
Grundlage: Recherche 2026-07-23 (Learn UI Design, Fluent 2, WCAG, Baymard, NN/g, Notebook Navigator). Maßstab für den anstehenden UI-Umbau von Panel und Navigator.
|
||||
|
||||
## Schrift
|
||||
|
||||
- Basisgröße interaktiver Flächen: **13–14 px**; Fließtext im Dokument 14–16 px.
|
||||
- Unter 12 px nur Meta-Zeilen (Datum, Pfad, Zähler) — nie für klickbare Labels.
|
||||
- Zeilenhöhe 1.4–1.6; Überschriften ~1.3.
|
||||
|
||||
## Dichte und Maße
|
||||
|
||||
- Interaktive Listenzeilen: Zielhöhe **28–32 px** (Fluent Compact: 32 px; Standard: 40 px).
|
||||
- Alles Klickbare mindestens **24×24 px** (WCAG); kleinere Icons bekommen entsprechend Padding/Hit-Area.
|
||||
- Dichte entsteht über eine konsequente Spacing-Skala, nicht über kleinere Schrift.
|
||||
|
||||
## Spacing
|
||||
|
||||
- Durchgängige **4-px-Skala**: 4 / 8 / 12 / 16 / 24. Keine Zwischenwerte (2, 3, 6, 7 px).
|
||||
- Innenabstand von Karten/Formularen: 12–16 px; Abstand zwischen Zeilen: 4–8 px.
|
||||
|
||||
## Navigator (Wiki-Tab)
|
||||
|
||||
- Zwei-Spalten-Muster beibehalten (Ordnerbaum links, flache Liste rechts) — entspricht dem etablierten Notebook-Navigator-Muster.
|
||||
- Listenzeilen großzügig: Titel + Meta-/Vorschauzeile, klare Trennung.
|
||||
- Tastatur-Navigation: Tab wechselt die Spalte, Pfeiltasten in Baum und Liste.
|
||||
- Klick wechselt Inhalt, erhält aber Auswahl und Kontext.
|
||||
|
||||
## Dialoge statt In-situ
|
||||
|
||||
- Abgeschlossene Aufgaben mit eigener Entscheidung (Anlegen, Umbenennen, Verschieben) laufen in einem **modalen Dialog** mit Platz: Titel, beschriftetes Feld, Bestätigen/Abbrechen, Enter/Escape.
|
||||
- In-situ nur für triviale, sofort reversible Einzelfeld-Edits.
|
||||
|
||||
## Aktionen sichtbar
|
||||
|
||||
- „Hide and hover" ist ein Anti-Pattern: Zeilen-Aktionen nicht erst bei Hover einblenden.
|
||||
- Aktionen dauerhaft sichtbar (gedämpft statt versteckt) oder als Kontextmenü pro Zeile.
|
||||
|
||||
## Quellen
|
||||
|
||||
- https://www.learnui.design/blog/font-size-principles-resources.html
|
||||
- https://developerux.com/2025/02/12/typography-in-ux-best-practices-guide/
|
||||
- https://fluent2.microsoft.design/layout
|
||||
- https://mantlr.com/blog/spacing-system-cheat-sheet
|
||||
- https://blog.logrocket.com/ux-design/all-accessible-touch-target-sizes/
|
||||
- https://blog.logrocket.com/ux-design/modal-ux-best-practices/
|
||||
- https://www.eleken.co/blog-posts/modal-ux
|
||||
- https://notebooknavigator.com/
|
||||
- https://baymard.com/blog/list-items-hover-and-hit-area
|
||||
+3
-1
@@ -14,10 +14,12 @@
|
||||
- [Pool-Setup Stand](ai-control-pool-setup.md) — Stand 2026-07-20: Projekt-Config in `<projekt>/.ai-control/` (UUID-id, name, Icon), Registry UUID-geschlüsselt mit maschinenlokalem Pool; build.sh + deploy-<os>-Skripte (Linux rpm); Sicherheitsrunde II drin, Fenster-ACL deckt App-Commands nicht
|
||||
- [Linux-Umzug](linux-umzug.md) — ab 2026-07-05 laufen die Sessions auf der Linux-Box; Start per start-claude.sh (Einzeiler, Pool private); macOS-Code muss noch hinter cfg(target_os)
|
||||
- [Linux-Release-Prep](linux-release-prep.md) — Stand 0.3.0: sips erledigt, README neu; offen: Push (SSH), Deploy-Verifikationsrunde, GitHub-Publish; Account-Wechsel-Bestätigung verschoben
|
||||
- [Modul-System](modul-system.md) — umgesetzt 2026-07-22 Schritte 1-5 inkl. ToDo-Modul; 2026-07-23 ToDo-Anlegen/Bearbeiten im Panel (todos_add/todos_update), alte Hook-Todoliste komplett entfernt + alle Projekte migriert; Commit 1523856 auf lintus (2026-07-23); offen: App-Verifikation nach neuem Build
|
||||
- [Command-Panel-Konzept](command-panel-konzept.md) — umgesetzt: show_commands, Kachel-Löschen, History flüchtig; seit 2026-07-19 eigener Befehle-Tab in der Header-Tab-Leiste, in der App verifiziert
|
||||
- [Dokument-Index-Konzept](dokument-index-konzept.md) — Session-Index per Hook + persistenter Archiv-Index aus dem Watcher; Konzeptphase, kein Go
|
||||
- [Archiv-Suchindex-Konzept](archiv-suchindex-konzept.md) — umgesetzt 2026-07-19: FTS5 in-memory pro Anfrage, search_archive, Treffer-Kacheln als dritter Panel-Modus; App-Verifikation offen
|
||||
- [Archiv-Home-Konzept](archiv-home-konzept.md) — umgesetzt 2026-07-19: archiveHome (alias archiveDir), archive_panel mit folder/description/tags; HTTPS-Sync + migrate offen
|
||||
- [Archiv-Wiki-Konzept](archiv-wiki-konzept.md) — umgesetzt + UI-Umbauten + Refinement 2026-07-19: Header-Tabs, rahmenlose Fenster mit Theme-Variablen, Live-Suche mit #tag, Archiv-Formular, Archiv wähl-/abwählbar, 27 Frontend-Tests (vitest); Panel-Hänger war fehlende Window-ACL; offen: publish, macOS/Windows-Angleich
|
||||
- [Trilium-Archiv](trilium-archiv.md) — 2026-07-24: Archiv = verwaltete Trilium-Instanz pro Projekt (ETAPI, Token im Keyring, Flag erst nach Connect-Erfolg); Setup bis aufs Passwort automatisiert, MD-Altbestand + Dokument-Tab komplett raus, write_panel = Trilium-Notiz + Auto-Öffnen; uncommitted, App-Test offen; offen: mac/win-Bundles, Update-Check, MD-Migration
|
||||
- [Archiv-Wiki-Konzept](archiv-wiki-konzept.md) — 2026-07-24: Obsidian VERWORFEN (parallele Instanzen + dokumentierte Config-Trennung unerfüllbar, kein Flatpak), komplette Integration wieder ausgebaut, Archiv-Stand Befehle│Dokument│Suche wiederhergestellt; Marcus: Trilium versuchen (ETAPI, TRILIUM_DATA_DIR); Lehre: Config erst nach Setup-Erfolg schreiben; offen: Trilium-Konzept, Dokument-Tab raus (wartet auf write_panel-Gespräch)
|
||||
- [Linux-Install-TODOs](linux-install-todos.md) — GNOME- und Cinnamon-Extension via deb/rpm nach /usr/share ausrollen (postinst/prerm); AppImage-Start unter GNOME sperren mit Verweis aufs deb
|
||||
- [VM-Testflotte](vm-testflotte.md) — pkgtest-VMs: Zugang test/test + id_default, Port-Konventionen, DPMS/hostfwd/destroy-Stolperfallen
|
||||
|
||||
@@ -5,7 +5,7 @@ metadata:
|
||||
node_type: memory
|
||||
type: project
|
||||
originSessionId: ab462db0-45d2-4935-b32e-4ce2fafda1ae
|
||||
modified: 2026-07-19T15:08:23.226Z
|
||||
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.
|
||||
@@ -20,3 +20,17 @@ Fügt sich in das Modell aus [[archiv-home-konzept]]: alle Funktionen lokal, ges
|
||||
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>`).
|
||||
|
||||
@@ -5,7 +5,7 @@ metadata:
|
||||
node_type: memory
|
||||
type: feedback
|
||||
originSessionId: 1df50ef9-0b05-476b-aaae-64aae4675600
|
||||
modified: 2026-07-20T21:02:41.382Z
|
||||
modified: 2026-07-24T10:14:38.990Z
|
||||
---
|
||||
|
||||
Zwei Dinge, die Marcus wiederholt und laut einfordert:
|
||||
@@ -19,6 +19,10 @@ Zwei Dinge, die Marcus wiederholt und laut einfordert:
|
||||
2. **Verbotene Phrase „und das entscheidet es" / „das entscheidet die Sache".**
|
||||
Solche Bedeutungsschwere-Floskeln weglassen; direkt den Punkt sagen.
|
||||
|
||||
2b. **„Ehrlich" in JEDER Form verboten** — nicht nur als Einleitung: auch
|
||||
„ehrlich markiert", „ehrliche Antwort", „ehrlich gesagt". Einfach die
|
||||
Aussage bringen. (Vorfall 2026-07-24.)
|
||||
|
||||
3. **Knapp.** „DU TEXTEST MICH ZU" kommt immer wieder. Antworten kurz halten,
|
||||
kein Zutexten, keine ausgebreiteten Optionsurveys. Empfehlung geben, nicht
|
||||
alle Wege durchdeklinieren. Hängt mit [[feedback-commands-ohne-beiwerk]]
|
||||
|
||||
@@ -5,7 +5,7 @@ metadata:
|
||||
node_type: memory
|
||||
type: project
|
||||
originSessionId: f7704328-4eb4-4f0f-bf42-da68abab401d
|
||||
modified: 2026-07-22T09:46:38.087Z
|
||||
modified: 2026-07-22T10:30:59.757Z
|
||||
---
|
||||
|
||||
Stand 2026-07-22, Version 0.3.0 (upstream-Rebase auf der Linux-Box, lokal fertig):
|
||||
@@ -15,7 +15,7 @@ Stand 2026-07-22, Version 0.3.0 (upstream-Rebase auf der Linux-Box, lokal fertig
|
||||
**Offen bis Release:**
|
||||
- ~~Push~~ erledigt (Marcus, 2026-07-22). VM-Runde 0.3.0 erledigt 2026-07-22: Cinnamon-Auto-Aktivierung aus dem Paket verifiziert (X-Cinnamon/X11, Live-Load, Popup ok), GNOME-Erstinstall-Randfall bestätigt (Enable in laufender Session „does not exist", nach Re-Login automatisch aktiv), Popup-Optik unter CSP `style-src` auf beiden VMs intakt. Kosmetik: Cinnamon warnt über fehlendes `url` in metadata.json.
|
||||
- Rest der Verifikationsrunde nur auf der echten Box möglich: Deploy 0.3.0 auf dem Host, Optik Terminal-/Panel-Fenster unter CSP (braucht ein Projekt), Lösch-Dialog Stufe „nur Integration" am Wegwerf-Projekt.
|
||||
- Release-Akt: GitHub-Squash-Publish `ai-control 0.3.0` + Tag + Linux-Binaries (Ablauf im Skill git-commit, Abschnitte 2/3).
|
||||
- ~~Release-Akt~~ erledigt 2026-07-22: Squash-Commit 177b03e „ai-control 0.3.0" + Tag v0.3.0 auf github, Release mit deb (x86_64), rpm (x86_64) und macOS-DMG (aarch64, kam vom Mac). **AppImage auf Marcus' Ansage dauerhaft raus** (Build scheiterte ohnehin an linuxdeploy/strip `.relr.dyn`). Auth: classic PAT in `~/.ssh/token` (Marcus erneuert es bei Bedarf; nie Inhalt ausgeben, Push via credential-helper-Funktion, API via Header-Datei). `gh` ist auf der Box nicht installiert, github-Remote (https) jetzt konfiguriert.
|
||||
|
||||
**Verschoben (Marcus, 2026-07-22):** Account-Wechsel-Bestätigung beim Pool-Start (geldrelevant; `.claude.json`-Watcher zuerst, dann Startprüfung gegen gespeicherten `oauthAccount`) — beschlossen 2026-07-21, kommt nach dem Release.
|
||||
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
---
|
||||
name: modul-system
|
||||
description: Modul-System umgesetzt (Schritte 1-4 vom 2026-07-22); Entwurf im Archiv unter design/; ToDo-Modul noch offen
|
||||
metadata:
|
||||
node_type: memory
|
||||
type: project
|
||||
originSessionId: 88afe630-4207-4f4b-b4f6-cb8e8f55b445
|
||||
modified: 2026-07-23T09:35:53.510Z
|
||||
---
|
||||
|
||||
Modul-System (Entwurf: archive/design/2026-07-22_1626-modul-system-fuer-aicentral-entwurf.md), umgesetzt 2026-07-22, Schritte 1–4 der Migrationsliste:
|
||||
|
||||
- Backend-Registry `domain/modules.rs`: MODULES (draft=Kern, commands, archive mit requires_archive), BufferDesc (env/event/file), `active_in` als eine Enablement-Quelle; ProjectConfig-Feld `modules` (nur Abweichungen). mcp.rs: tools/list aus Registry, Guard in tools/call. terminal.rs: Puffer-Init/Env/Watcher als Schleife (bewusst alle Module, Abwahl wirkt nur auf Tools/Tabs); `buffer_read`+`enabled_modules` ersetzen die vier Read-Commands.
|
||||
- Frontend-Registry `src/modules/` (PanelTab, ModuleCtx, ModuleView); panel-wiring generiert Tabs+Container, HTML-Dateien ohne feste Tab-/Content-Elemente; MCP-Tools archiv-Module bleiben bei fehlendem Home absichtlich gelistet (Home mid-session setzbar, Tools melden selbst).
|
||||
- `src/tiles.ts`: renderTile + copyAction/deleteAction + flash/panelToast/stripInvisibles (eine Stelle); commands- und search-View rendern darüber.
|
||||
- Settings-UI: Sektion „Module" aus module_registry generiert (set_module schreibt sofort), Archiv-Pfadzeile dorthin gewandert; i18n-Namespace `modules` (pro Modul Key + `<id>Desc` in de/en nötig).
|
||||
|
||||
Alte Hook-Todoliste (OFFENE-PUNKTE.md + SessionStart-Hook) am 2026-07-23 komplett entfernt: domain/todo.rs gelöscht, Commands todo_state/set_todo raus (commands.rs, app.rs, build.rs, main.json), todo-Param aus create_project_full, todo_hook aus DeletePreview und Lösch-Flow, Wizard-/Settings-Checkbox und i18n-Keys raus. Alle Bestandsprojekte migriert (5 Projekte: 08-07, limbach, misc, robotunits, wittgenstein): Hook aus settings.json, OFFENE-PUNKTE.md gelöscht (alle waren leer), modules.todo=true in .ai-control/config.json; claude-ai-control selbst war schon umgestellt.
|
||||
|
||||
ToDo-Tab kann seit 2026-07-23 anlegen und bearbeiten: Commands `todos_add`/`todos_update` (terminal.rs, Zeilenform wie call_write_todos via todo_line/replace_todo_line, ID+ts bleiben beim Update; in build.rs-ACL und Capabilities panel/terminal eingetragen), todo-view mit „+ ToDo"-Knopf und in-flow-Formular (Text/Notiz/date-Input, Enter speichert, Esc schließt; Stift-Kachel-Aktion editAction in tiles.ts, vorbefüllt), Fehler als Toast. i18n todos.*-Keys („+ ToDo" in messages.test-Allowlist), Formular mit Abbrechen-Button (2026-07-23). 56 Frontend-/105 Rust-Tests grün; alles zusammen als Commit 1523856 auf lintus (2026-07-23). Offen: App-Verifikation nach neuem Build (installierter rpm ist der Stand von 2026-07-22, ohne Hook-Entfernung und Abbrechen-Button).
|
||||
|
||||
Schritt 5 ToDo-Modul umgesetzt (2026-07-22): persistenter Puffer `<projekt>.todos.jsonl` (BufferDesc.persistent — Session-Start legt nur an), Modul opt-in (default_enabled false), MCP write_todos (due als YYYY-MM-DD validiert, stabile IDs)/show_todos, todos_delete-Command, todo-view mit Ampel (overdue/soon≤2d/later) und Locale-Datum, Sortierung due aufsteigend dann neueste; Auto-Open beim Start wenn Modul gewählt und Liste nicht leer (Terminal + abgelöstes Fenster). BufferDesc.suffix speist session_files (Löschvorschau). 106 Backend-/52 Frontend-Tests grün; deb+rpm 0.3.0 gebaut, rpm-Install per deploy-linux.sh braucht sudo (Kachel liegt im Panel). App-Verifikation und Commit stehen aus. Erster Blick in den installierten Build (2026-07-22 abends): laut Marcus „passt noch nix" — Details offen, Fehlersuche am 2026-07-23; Kandidaten aus den Umbauten: generierte Tabs/Container (panel-wiring), CSP-/ACL-Folgen neuer Commands (buffer_read, enabled_modules, module_registry, set_module, todos_delete), Modul „todo" opt-in (Tab fehlt bis zur Wahl in den Settings — kein Fehler).
|
||||
@@ -0,0 +1,27 @@
|
||||
---
|
||||
name: trilium-archiv
|
||||
description: "Trilium ersetzt das MD-Archiv: verwaltete Server-Instanz pro Projekt (ETAPI), Modul trilium opt-in; Stand und offene Punkte"
|
||||
metadata:
|
||||
node_type: memory
|
||||
type: project
|
||||
originSessionId: fb63dbb4-5138-4ef0-adec-e73ced360279
|
||||
modified: 2026-07-24T19:42:11.781Z
|
||||
---
|
||||
|
||||
Marcus' Entscheidung 2026-07-24 (nach dem Obsidian-Aus, siehe [[archiv-wiki-konzept]]): Das Archiv ist eine **eigene Trilium-Instanz pro Projekt**, komplett von ai-control verwaltet — „alles nach Trilium" (Volltextsuche, neue Notizen, Archivieren). Kein Pures-Markdown-Dogma. Nur dokumentierte Schnittstellen: `TRILIUM_DATA_DIR`, `TRILIUM_PORT`, ETAPI (`/etapi/auth/login` → Token).
|
||||
|
||||
Spike verifiziert (Linux-Box): Server-Build v0.104.0 (92 MB tar.xz, gebündeltes Node) startet mit eigenem Datenverzeichnis + Port, zwei Instanzen parallel, ETAPI da; **~240 MB RSS pro Instanz** (gemessen). Erstinitialisierung (Dokument + Passwort) läuft über Triliums Setup-Seite im eingebetteten Fenster; ETAPI-Token danach per Login, Ablage im Keyring (Service `ai-control-trilium`), Passwort wird nie gespeichert.
|
||||
|
||||
Umgesetzt 2026-07-24 (uncommitted): `domain/trilium.rs` (Runtime-Download gepinnt v0.104.0 + SHA-256, per curl/tar; ensure_instance mit Portprüfung, Prozess-Map, stop_all bei RunEvent::Exit beider Prozessrollen; ETAPI über curl; archive_note = pulldown-cmark MD→HTML + Ordner-Pfad als find_or_create Buch-Notizen + Labels description/tag; search_notes mit `#tag=`-Filter). Commands trilium_status/setup/connect/open/disable/archive_cmd; **connect setzt das Modul-Flag erst nach Token-Erfolg** (Erst-nach-Erfolg-Muster, Lehre aus dem Obsidian-Vorfall). Fenster: `trilium-<uuid>` WebviewUrl::External auf 127.0.0.1:Port (FNV-Port 27200–27981), Notiz-Sprung per `#root/<noteId>`-eval. Modul „trilium" (Opt-in) trägt archive_panel/search_archive + Such-Puffer; MCP-Tools und search_run laufen über ETAPI; Panel-Archiv-Button → trilium_archive_cmd + Notiz öffnen; Such-Treffer-Kacheln = Titel+noteId → trilium_open. term_start fährt die Instanz bei aktivem Modul im Thread hoch. **Raus**: FTS5 (archive_search.rs + rusqlite), Archiv-Zeile im Settings-Dialog samt chooseArchive-Flow. Neue Dep pulldown-cmark (Go von Marcus, ebenso Keyring-Ablage). 99 Rust-/50 Frontend-Tests, vue-tsc sauber.
|
||||
|
||||
Nachtrag 2026-07-24 (Session 9a43fcbf, uncommitted): **Setup voll automatisiert** — Marcus' Ansage: „bis auf das Passwort automatisieren". trilium_connect macht beim Erstlauf alles per HTTP: `POST /api/setup/new-document?skipDemoDb` (Route offen solange uninitialisiert, blockiert bis DB steht), `POST /set-password` (Form password1/password2, ohne CSRF/Session solange kein Passwort gesetzt, antwortet 302), ETAPI-Login, Token→Keyring, erst dann Modul-Flag. Keine Setup-Seite im Fenster mehr; Endpoints am vendored main.cjs v0.104.0 verifiziert. **MD-Altbestand komplett raus** („Trilium als Archiv rein, alles andere raus"): archive.rs/archive_index.rs gelöscht, archiveHome-Feld + Archiv-Permissions raus, panel_set/panel_load/wiki_open/panel_archive*/archive_docs/*_archive_home/trilium_archive_cmd raus, tote Ketten reveal_path + spellcheck mit. **Dokument-Tab raus**: Panel = ToDo│Befehle│Suche + „Archiv"-Knopf (trilium_open); panel-view.ts/archive-form.ts gelöscht, requires_archive-Feld weg. **write_panel = Trilium-Notiz** (text|path + folder/description/tags, ersetzt archive_panel; first_line→mcp.rs), noteId über noteopen-Kanal → terminal.ts öffnet die Notiz im Trilium-Fenster (WICHTIG für Marcus: das eingebettete Trilium-Fenster ist ein Hauptpunkt). Lösch-Dialog-Stufe „Archiv" = Instanz stoppen + Trilium-Datadir + Keyring-Token löschen (DeletePreview.trilium_data). 85 Rust-/42 Frontend-Tests grün, Build 0.3.0 rpm/deb gebaut, Install-Kachel raus.
|
||||
|
||||
Marcus nach erstem Test („passt besser, noch lange nicht gut"), zwei Richtungen für die Fortsetzung: (1) **Trilium embedded** wie das angedockte Panel — Kind-Webview im Terminal-Fenster (Tauri-Multiwebview, Feature `unstable`); iframe fällt aus, Instanz liefert `X-Frame-Options: SAMEORIGIN` (verifiziert); Archiv-Tab schaltet den Webview, Geometrie folgt Splitter/Resize, separates Fenster entfällt — Plan gezeigt, NOCH KEIN GO. (2) **Streamlinen** („Trilium ist VIEL ZU VIEL"): Theme-Notiz `#appTheme` beim Setup per ETAPI seeden (Launcher/Ribbon/Tab-Leiste per CSS weg, Ziel Baum+Editor), Launcher-Notizen im versteckten Teilbaum aufräumen; `/share/<id>` als Read-only-Ansicht.
|
||||
|
||||
Offen:
|
||||
- App-Test durch Marcus (Wizard: Einrichten → Passwort → Verbinden vollautomatisch; write_panel → Notiz öffnet im Trilium-Fenster).
|
||||
- Notiz-Hash `#root/<noteId>` bei tiefer liegenden Notizen verifizieren.
|
||||
- macOS/Windows: keine offiziellen Server-Builds — eigene Bundles (Node + Server) in unserer Release-Pipeline bauen; Marcus' Vorgabe: alle drei OS gleich.
|
||||
- Migration bestehender MD-Archive nach Trilium ungeklärt (Lösch-Dialog räumt keine Alt-Archive mehr).
|
||||
- Update-Mechanik: Version ist gepinnt; „beim Start auf Updates prüfen" (Marcus' Wunsch aus der Obsidian-Diskussion) ist für Trilium noch nicht gebaut.
|
||||
- Committed + gepusht auf lintus als 47951a6 (2026-07-24).
|
||||
@@ -5,7 +5,7 @@ metadata:
|
||||
node_type: memory
|
||||
type: project
|
||||
originSessionId: 049c1ce5-124f-4a7c-a538-357b9c5370cb
|
||||
modified: 2026-07-22T09:46:26.860Z
|
||||
modified: 2026-07-22T10:42:44.141Z
|
||||
---
|
||||
|
||||
Test-VMs unter `qemu:///session` (Stand 2026-07-20): `pkgtest-rpm` (Basis, Cloud + GNOME + ai-control-rpm), Klone `pkgtest-kde` (Plasma-Kern), `pkgtest-cinnamon`, `pkgtest-xfce` (je Desktop-Kern, gdm als DM für alle, Session am Greeter wählen). Guest-Login `test`/`test`; SSH mit Key `~/.ssh/id_default` (Host bietet ihn nicht automatisch an).
|
||||
@@ -19,7 +19,7 @@ Test-VMs unter `qemu:///session` (Stand 2026-07-20): `pkgtest-rpm` (Basis, Cloud
|
||||
- kde-Klon hat noch e1000-NIC (~300 KiB/s), cinnamon/xfce sind auf virtio umgestellt.
|
||||
- Die Cinnamon-Session der VM ist **Wayland** (gdm-Default dort; XAUTHORITY zeigt .muffin-Xwaylandauth). Für X11-Cinnamon (Mint-Default) am Greeter die X11-Variante wählen — bisher ungetestet.
|
||||
- In pkgtest-cinnamon liegt seit dem 0.3.0-Test (2026-07-22) nur noch die paketierte Extension unter /usr/share; die manuelle Kopie in ~/.local/share ist gelöscht.
|
||||
- Seit 2026-07-22 haben pkgtest-cinnamon und pkgtest-rpm gdm-Autologin für `test` (/etc/gdm/custom.conf) — VM-Start landet direkt in der Session. Achtung: der Cinnamon-Autologin startet die **X11**-Session (X-Cinnamon), nicht mehr Wayland.
|
||||
- Test-Rückstände der 0.3.0-Runde am 2026-07-22 wieder entfernt (rpm + cinnamon): gdm-Autologin, claude-Stub, Demo-Projekt, ~/.config/ai-control, gsettings-Resets (idle-delay, lock-enabled, auf Cinnamon enabled-extensions). Alle vier VMs aus. Für Autologin-Bedarf: `AutomaticLoginEnable=True`/`AutomaticLogin=test` in /etc/gdm/custom.conf; der Cinnamon-Autologin startet die **X11**-Session (X-Cinnamon), nicht Wayland.
|
||||
- App headless in die Session starten: Env (`WAYLAND_DISPLAY`/`DISPLAY`, `XDG_RUNTIME_DIR`, `DBUS_SESSION_BUS_ADDRESS`, `XDG_CURRENT_DESKTOP`) aus /proc/<shell-pid>/environ ziehen, `setsid nohup ai-control`. Popup ohne GUI auslösen: Cinnamon/KDE/XFCE über SNI (`dbus-send … org.kde.StatusNotifierItem-<pid>-1 … Activate int32:x int32:y`), GNOME über `busctl --user call com.aicontrol.Popup /com/aicontrol/Popup com.aicontrol.Popup1 Show`. xdotool/xwininfo fehlen in den Guests, `wmctrl` ist da; dbus-send fehlt in pkgtest-rpm (busctl nehmen).
|
||||
|
||||
Offene Befunde aus dem ersten Durchlauf stehen in OFFENE-PUNKTE.md (Abschnitt VM-Tests).
|
||||
|
||||
Reference in New Issue
Block a user