Commit Graph

22 Commits

Author SHA1 Message Date
marcus.hinz 387a9e964a poolSyncDir konfigurierbar: Pool-Runtime-Verlinkung nur bei gesetztem Sync-Ordner (settings.json), Ziel <poolSyncDir>/<pool> statt hartem ~/claude-projects/pool; ungesetzt bleibt alles lokal 2026-07-05 15:51:31 +02:00
marcus.hinz 0ebdaf0460 Projektordner im ⚙︎-Dialog änderbar: Registry-Eintrag neu zuordnen, autoMemoryDirectory + Edit-Permission ziehen auf den neuen Root um; gesperrt bei laufender Session 2026-07-05 15:37:49 +02:00
marcus.hinz 2075f9aa71 Working-folder-Anzeige im ⚙︎-Dialog: Projektordner zuerst (fest), dann Zusatzordner mit Entfernen; Label oben ausgerichtet; Projektpfade überall ~-kontrahiert 2026-07-05 15:33:47 +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 65e9df131f Terminal öffnet als aktives Fenster: Starter tritt Aktivierung per yieldActivationToApplicationWithBundleIdentifier ab, Terminal-Prozess aktiviert sich beim Ready-Event (kooperative Aktivierung seit macOS 14) 2026-07-05 14:09:30 +02:00
marcus.hinz ec3d2f4fb3 Projekt-Registry statt festem ~/claude-projects-Root: projects.json (Name → Pfad, ~-relativ) mit Alt-Layout-Fallback; Ordner frei mappbar (add/remove_project, Wizard-Ablageort); Session-Sync per Projekt-Repo (add/commit/pull --rebase/push) statt git-sync-Skript; README + GitHub-Release-Fassung 2026-07-05 13:58:52 +02:00
marcus.hinz ddd8984462 Tray-Menü: Aktionswörter raus — Status-Punkt (grün = läuft) ganz links im Menü-Icon, daneben Projekt-Icon, Label nur der Name 2026-07-05 13:13:44 +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 69fa8b338c Terminal-Start übersteht nicht ladbares Dock-Icon (z. B. TCC-geschützter Pfad) — Meldung statt Panic 2026-07-05 12:47:34 +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 23aa315b8f Terminal: Output-Batching (8 ms) + helle Themes, Projekt-Icons in der Liste, neues App-Icon inkl. Tray-Template, build.sh: Dev-Bundle nach .noindex 2026-07-05 12:16:16 +02:00
marcus.hinz 09488ae5ea Pool-Runtime (projects/todos/history) als Symlinks ins synced Repo, auch bei Pool-Anlage 2026-07-04 20:28:12 +02:00
marcus.hinz 3e022311ee Ghostty raus, Session-Watcher mit Sync-Opt-in, Tooltip WKWebView-tauglich
- Ghostty komplett entfernt: bundle_id/ghostty_running/open_project/start_project
  weg, is_running nur noch über terminal_pids; restart_project über das interne
  Terminal (kill_terminals + open_terminal) statt osascript-Quit
- Session-Watcher im Tray-Prozess: synct das claude-projects-Repo bei
  Session-Ende (Prozess verschwindet, greift auch bei HUP/Kill)
- Sync als Opt-in (~/.config/ai-control/settings.json, default aus) und nur
  wenn ein Git-Repo vorhanden ist; Commands sync_setting/set_sync_setting
- Löschen-Button in der Pool-Übersicht gesperrt bei laufendem Projekt, Grund per
  CSS-Hover-Pop (WKWebView zeigt keine nativen title-Tooltips)
2026-07-04 19:09:06 +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 42d975874e Projekt-Wizard und Projekt löschen
- create_project_full: Scaffold nach 08-07-Muster (memory/, Sentinel-
  .gitignore, settings.json mit autoMemoryDirectory/Permissions/pool-guard-
  Hook, ai-control.json mit Pool/Terminal); Arbeitsordner anlegen oder
  vorhandenen verknuepfen, Pruefung vor dem Anlegen; ersetzt create_project
- Wizard-Dialog: Name, Pool, Arbeitsordner (keiner/anlegen/Picker),
  Terminal-Titel + Theme
- delete_project: Guard bei laufender Session, optional Arbeitsordner
  mitloeschen (additionalDirectories, via project_work_dirs); Papierkorb-
  Button mit Bestaetigungs-Dialog inkl. Checkbox und Pfadliste
- 8 neue Tests (36 gesamt), i18n de/en
2026-07-04 14:26:10 +02:00
marcus.hinz f8fcd8d033 Verbrauch-Tab: Tokens/Kosten pro Pool und Projekt aus Transcripts
- usage_stats: streamt <pool>/projects/*/*.jsonl, zählt message.usage,
  Dedup über message.id+requestId, Zeitfilter (eigener RFC3339-Parser),
  Projektpfad-Mapping wie claudes Ordnerkodierung
- Preistabelle je Modell (Fable/Opus/Sonnet/Haiku, Cache 1.25x/0.1x),
  Kosten als API-Gegenwert ausgewiesen
- UI-Tab mit 7/30-Tage-Filter: Pool-Zeilen aggregiert, Projekte
  aufklappbar darunter, Summenzeile; i18n de/en
- Tests: Aggregation+Dedup+Zeitfilter, leerer Fall, parse_ts-Referenz
2026-07-04 14:10:53 +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 9b008cbf51 Pools: löschbar mit Zuordnungs-Auflösung, Neuanmelden über Keychain, Key-Status
- delete_pool löst Projektzuordnungen (Terminal-Config bleibt), Dialog
  zeigt betroffene Projekte
- oauth_login: nur bei ungenutztem Pool, löscht vorher den suffixierten
  Keychain-Eintrag; Warn-Dialog mit keychain_status; oauth_refresh raus
- PoolInfo.hasCredentials: apikey-Dateicheck; Button Key ändern/eintragen,
  einheitliche Button-Breite
- Starten deaktiviert ohne Pool bzw. ohne Key (Tooltip unterscheidet)
- Icon-Pfad im Terminal-Dialog gekürzt mit Hover-Popover
2026-07-04 13:27:54 +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