19 Commits

Author SHA1 Message Date
marcus hinz 47951a615b Trilium als Archiv: verwaltete Instanz pro Projekt, MD-Archiv und Dokument-Tab entfernt
- domain/trilium.rs: Runtime-Download (gepinnt 0.104.0), Instanz pro Projekt auf 127.0.0.1
  mit FNV-Port, ETAPI (archive_note, search_notes), Token im Keyring
- Setup bis aufs Passwort automatisiert: trilium_connect macht new-document (skipDemoDb),
  set-password und ETAPI-Login; Modul-Flag erst nach Token-Erfolg
- write_panel legt direkt eine Trilium-Notiz an (text|path, folder/description/tags);
  noteopen-Kanal, das Terminal-Fenster öffnet die Notiz (ersetzt archive_panel)
- MD-Altbestand raus: archive*/wiki*, archiveHome samt Permissions, panel_set/panel_load/
  wiki_open, panel_archive*/archive_docs/*_archive_home, reveal_path, spellcheck
- Dokument-Tab raus: Panel = ToDo/Befehle/Suche + Archiv-Knopf (trilium_open);
  panel-view/archive-form gelöscht, Markup/CSS/Messages bereinigt
- Lösch-Stufe Archiv: Instanz stoppen, Trilium-Datadir und Keyring-Token löschen
2026-07-24 21:42:03 +02:00
marcusH ea08563411 Version 0.3.0, Selbstinstallation nach ~/Applications, Gatekeeper im README
Erster Start aus DMG oder Downloads bietet einmalig an, sich nach
~/Applications zu kopieren und von dort neu zu starten — der Weg dorthin
braucht kein Administrator-Passwort, anders als /Applications. Ein DMG
kann das nicht selbst leisten: der Applications-Alias darin ist ein
absoluter Symlink auf /Applications.

Die Kopie erbt per ditto die Quarantäne des Downloads, deshalb wird sie
am Ziel gelöst — sonst käme beim Neustart erneut die Gatekeeper-Warnung
für dieselbe, gerade laufende App. Ablehnen merkt sich die App
(moveOfferDismissed), im Debug-Build fragt sie nie.

README: ~/Applications als gleichwertiger Installationsort, dazu der
Weg über System-Einstellungen -> Datenschutz & Sicherheit fuer alle, die
kein Terminal aufmachen wollen.

0.8 ist fuer den Windows-Stand reserviert.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-22 10:47:36 +02:00
marcus hinz 994d5070f0 Archiv-Wiki im Panel: vier Tabs, FTS5-Suche, strukturierbares Archiv
- Archiv-Home pro Projekt (archiveHome in ai-control.json); archive_panel
  mit Ordner, Beschreibung und Schlagwörtern (Frontmatter + Zeitstempel-Stem)
- Archiv-Index (archive_index.rs): Scan mit Frontmatter, Wikilinks,
  Backlinks; Wiki-Seiten als strukturierte Daten (Übersicht/Tag-Seiten)
- FTS5-Suche (archive_search.rs, rusqlite bundled): in-memory-Index pro
  Anfrage; MCP search_archive und Panel-Suchfeld (search_run) teilen die Engine
- Panel: vier Puffer/Ansichten (Dokument, Befehle, Suche, Wiki) mit Tabs im
  Fenster-Header; gemeinsame Verdrahtung panel-wiring.ts, Kachel-CSS,
  Wiki-View mit Tag-Chips, Ordner-Sektionen und Backlinks
- Archivieren speichert offene Bearbeitung (flush); Tab-Wechsel speichert
  statt zu blockieren; Fehler sichtbar als Panel-Toast
- Abgelöstes Fenster: rahmenlos (Linux), eigene Kopfleiste mit Tabs und
  Fensterknöpfen, Theme-Kopplung über gemeinsames themes.ts
- MCP-Tools show_commands, show_archive; Befehls-History mit Kachel-Löschen
2026-07-19 15:25:40 +02:00
marcus hinz d4d455fa08 Popup-Fokus auf SNI-X11-Desktops: present() nach jedem Map
Muffin (Cinnamon) mappt das Popup ohne Fokus — das set_focus aus show_popup
läuft vor dem Map und fällt der Focus-Stealing-Prevention zum Opfer; ohne
initialen Fokus greift das Blur-Schließen nie. Ein map-event-Handler ruft
present(), GTK besorgt sich unter X11 dabei den echten Server-Timestamp.

Registriert nur unter X11 außerhalb von GNOME: auf GNOME/Wayland zeigt die
Extension das Popup, dort brach das Fokus-Grab den Klick-Weg (Ubuntu/Kubuntu).
Bestätigt auf Mint/Cinnamon, Ubuntu und Kubuntu.
2026-07-17 19:37:05 +02:00
marcus hinz 9a99bca466 Modul-Split: Fachlogik nach domain/, OS-Code nach platform/, Tauri-Verdrahtung in app.rs/commands.rs
- lib.rs nur noch Prozessrollen-Dispatch + Panic-Tracer
- KWin-Script als KDE-Pendant zur GNOME-Extension (Popup ans Zeiger-
  Rechteck), wird von deb/rpm mit ausgeliefert
- SNI-Tray auf ksni (pure Rust), appindicator-Depends entfallen
2026-07-15 20:10:33 +02:00
marcus hinz cf844c45da Linux: nativer SNI-Tray für Nicht-GNOME-Desktops, pfadtragende fs-Fehler, Panic-Tracer
- Tray verzweigt: GNOME -> Extension/D-Bus, KDE/Cinnamon/LXQt -> natives
  SNI-Tray-Icon mit Menue (libappindicator liefert keine Klick-Events)
- fs-Aufrufe nennen bei Fehlern den Pfad statt bloss 'os error 2';
  is_dir-Guard in list_pools_in und Usage-Auswertung
- Panic-Hook schreibt kopierbaren Backtrace (profile.release debug = 1)
- AppImage unter GNOME gesperrt (rfd-Dialog), Verweis auf deb/rpm
- deb/rpm liefern die GNOME-Extension mit; Appindicator als Depends
- Bundle-Targets um deb/rpm/appimage erweitert
2026-07-12 18:06:35 +02:00
marcus.hinz c39330bffb Tray auf HTML-Popup vereinheitlicht (macOS/Windows), Version 0.2.0
macOS und Windows öffnen jetzt dasselbe rahmenlose Popup-Fenster wie Linux,
ausgelöst über den nativen Tray-Klick und am Icon-rect positioniert; das
native macOS-Menü (tray_menu/menu_icon/project_icon_rgba_36/scale_rgba)
entfällt. Popup-Fenster wird plattformübergreifend gebaut, macOSPrivateApi
für die Transparenz aktiviert, Fokusverlust schließt das Popup überall.
2026-07-07 09:09:18 +02:00
marcus hinz 1df0da4d48 Linux-Port: GNOME-Popup + Tray, Terminal-Schriftgröße global
- Popup als rahmenloses Fenster mit D-Bus-Relay (popup.html/ts, Popup.vue);
  GNOME-Extension schiebt es unter den Panel-Button
- Terminal: globale Schriftgröße via settings.json (terminalFontSize),
  Zoom mit Ctrl/Cmd +/-/0 im Terminal
- trayLinux-Icon, Capabilities, App.vue/terminal.html angepasst
2026-07-06 20:08:16 +02:00
marcus.hinz 85c18eb8f0 Version 0.1.1 2026-07-05 17:03:21 +02:00
marcus.hinz 63c8062743 repository-URL: github.com/mHinz-hub/ai-control 2026-07-05 16:24:05 +02:00
marcus.hinz 0908385a9d Icons zentral unter ~/.config/ai-control/icons (pool-/repo-unabhängig), nicht ladbares Icon crasht den Tray nicht mehr; Arbeitsordner nachträglich im ⚙︎-Dialog erfassbar (additionalDirectories + Edit-Permission); Import-Button umbenannt; claudeCommand konfigurierbar + CLAUDE_CONFIG_DIR aus Pool; Pool-Tabellen-Layout; README englisch mit Screenshots; MIT-Lizenz 2026-07-05 15:19:58 +02:00
marcus.hinz e21db6845c Tray-Menü listet alle Projekte mit Icon: Klick startet („starten") oder holt das laufende Terminal nach vorn („zeigen"); Session-Watcher baut das Menü bei Status-/Listenänderung neu 2026-07-05 13:08:01 +02:00
marcus.hinz be6c56d7eb Pools: Anzeigename von Pool-ID (UUID-Ordner) getrennt + Umbenennen; API-Keys in Keychain/Keyring, Datei-Fallback nur nach Rückfrage 2026-07-05 12:16:16 +02:00
marcus.hinz 20fc8474d2 Pools initialisieren, Pool-Guard raus, Löschschutz bei laufenden Sessions
- pool-guard-Hook aus Projekt-Scaffold und allen bestehenden Projekten entfernt
- neue Pools: settings.json mit aufgeräumten UI-Defaults
  (promptSuggestionEnabled/awaySummaryEnabled aus) + CLAUDE.md
- delete_pool bricht bei laufendem zugeordnetem Projekt ab; Übersicht sperrt
  den Delete-Button und zeigt den Grund per Hover-Pop (WKWebView-tauglich)
- Running-Erkennung zentralisiert (running_projects_using_pool),
  list_pools liefert pro Pool die laufenden Projekte
- Todo-Umschalter im Projekt-Wizard/Settings
- ungenutzte Dependencies ureq/getrandom entfernt
2026-07-04 17:21:47 +02:00
marcus.hinz 62ce802465 Hand-Icon als App-/Tray-Icon, App heißt ai-control, Tests für Keychain/Key-Status
- Icons komplett aus hand.png regeneriert (tauri icon)
- Tray-Icon explizit per include_bytes (cargo trackt die Datei) und als
  Template-Icon für helle/dunkle Menüleiste; tauri-Feature image-png
- Cargo-Paket app -> ai-control, Fenstertitel ai-control
- Tests: keychain_service-Suffix gegen verifizierten Referenzwert,
  hasCredentials-Status (Key vorhanden/leer/fehlt)
2026-07-04 13:45:02 +02:00
marcus.hinz fc560d4e5f Terminal-Config (Theme/Icon/Titel), UI-Überarbeitung, i18n de/en
- Terminal-Einstellungen pro Projekt in ai-control.json: 5 Themes
  (Paletten in terminal.ts, Fenster-BG gespiegelt in terminal.rs),
  Dock-Icon (PNG/ICNS via NSApplication in RunEvent::Ready),
  Fenstertitel mit Fallback Projektname; Zahnrad-Dialog mit Datei-Picker
  (tauri-plugin-dialog)
- UI: Catppuccin-Mocha-Token, JetBrains Mono für Namen/Pfade/Chips,
  feste Tabellenspalten, Status-Punkt mit Glow, Pool-Projekte als
  Hover-Popover, Buttons ausgerichtet (Zahnrad links von Starten/Beenden)
- i18n: vue-i18n, Deutsch/Englisch, Umschalter im Header (localStorage)
- generate_context nur noch einmal expandiert (Release-Build-Fehler)
2026-07-04 12:58:25 +02:00
marcus.hinz f7473797a9 Eingebautes Terminal (xterm.js + portable-pty) und Start/Beenden-Button
- Terminal-Fenster als eigener Prozess (--terminal <projekt>) mit eigener PTY,
  startet claude-sync im Projektordner
- Projektliste: ein Button pro Zeile — grün Starten (open_terminal) bzw.
  rot Beenden (stop_project, SIGTERM auf exakte PID / Ghostty-Quit)
- is_running erfasst Ghostty oder laufenden Terminal-Prozess
- Status-Kreis ohne Prozess unsichtbar
2026-07-04 10:00:12 +02:00
marcus.hinz 70e4898259 beta-0.8 2026-07-03 20:46:26 +02:00
marcus.hinz 8b9eeb44e2 Tauri 2 + Vue 3 Grundgerüst (create-tauri-app) 2026-07-03 11:06:12 +02:00