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
This commit is contained in:
marcus.hinz
2026-07-04 17:21:47 +02:00
parent 42d975874e
commit 20fc8474d2
7 changed files with 381 additions and 454 deletions
+26 -18
View File
@@ -59,7 +59,7 @@ const de = {
chooseFolder: "Ordner wählen …",
create: "Anlegen",
wizardHint:
"Angelegt werden Projektordner mit memory/, Sentinel-.gitignore, settings.json mit pool-guard-Hook und die Pool-/Terminal-Zuordnung.",
"Angelegt werden Projektordner mit memory/, Sentinel-.gitignore, settings.json (Memory-Verzeichnis + Berechtigungen) und die Pool-/Terminal-Zuordnung.",
delete: "Projekt löschen",
deleteRunning: "Läuft noch — erst beenden",
deleteTitle: "{name} löschen",
@@ -67,6 +67,8 @@ const de = {
"Der Projektordner unter ~/claude-projects (inkl. memory/, Settings und Pool-Zuordnung) wird endgültig gelöscht.",
deleteWorkDirs: "Arbeitsordner mitlöschen:",
workDirsStay: "Die Arbeitsordner bleiben unangetastet.",
todo: "Todoliste",
todoDesc: "OFFENE-PUNKTE.md bei jedem Sessionstart einspielen",
},
pools: {
pool: "Pool",
@@ -74,7 +76,7 @@ const de = {
actions: "Aktionen",
newOauth: "+ oAuth",
newApikey: "+ apiKey",
relogin: "Neu anmelden",
relogin: "Zurücksetzen",
changeKey: "Key ändern",
insertKey: "Key eintragen",
delete: "Löschen",
@@ -86,22 +88,24 @@ const de = {
name: "Name",
apiKey: "API-Key",
oauthHint:
"Nach „Login starten“ öffnet sich der Browser zur Anmeldung gegen dein Abo.",
oauthWaiting: "Warte auf die Anmeldung im Browser…",
"Der Pool wird angelegt; die Anmeldung macht claude beim ersten Start selbst per /login (Browser gegen dein Abo).",
cancel: "Abbrechen",
startLogin: "Login starten",
createPool: "Anlegen",
reset: "Zurücksetzen",
save: "Speichern",
deletePool: "Pool löschen",
deleteWarning:
"Pool {name} und seine Credential-Datei werden gelöscht. Das lässt sich nicht rückgängig machen.",
deleteUnassigns: "Diese Projekte verlieren ihre Pool-Zuordnung:",
reloginTitle: "Neu anmelden {name}",
deleteBlockedTooltip:
"Löschen gesperrt — {projects} läuft gerade. Erst beenden.",
reloginTitle: "{name} zurücksetzen",
reloginWarning:
"Der im Schlüsselbund gespeicherte Zugriffstoken von {name} wird gelöscht. Danach öffnet sich der Browser zur Neuanmeldung.",
"Der im Schlüsselbund gespeicherte Zugriffstoken von {name} wird gelöscht. Beim nächsten Start verlangt claude erneut /login.",
reloginNoEntry:
"Kein Schlüsselbund-Eintrag vorhanden — es erfolgt nur die Neuanmeldung im Browser.",
"Kein Schlüsselbund-Eintrag vorhanden — beim nächsten Start meldet sich claude ohnehin per /login an.",
reloginBlocked:
"Neuanmeldung ist nur bei ungenutztem Pool möglich. Diese Projekte laufen noch:",
"Zurücksetzen ist nur bei ungenutztem Pool möglich. Diese Projekte laufen noch:",
},
};
@@ -164,7 +168,7 @@ const en: typeof de = {
chooseFolder: "Choose folder …",
create: "Create",
wizardHint:
"Creates the project folder with memory/, sentinel .gitignore, settings.json with the pool-guard hook, and the pool/terminal assignment.",
"Creates the project folder with memory/, sentinel .gitignore, settings.json (memory dir + permissions), and the pool/terminal assignment.",
delete: "Delete project",
deleteRunning: "Still running — stop it first",
deleteTitle: "Delete {name}",
@@ -172,6 +176,8 @@ const en: typeof de = {
"The project folder under ~/claude-projects (incl. memory/, settings and pool assignment) will be deleted permanently.",
deleteWorkDirs: "Also delete working folders:",
workDirsStay: "The working folders stay untouched.",
todo: "Todo list",
todoDesc: "Inject OFFENE-PUNKTE.md at every session start",
},
pools: {
pool: "Pool",
@@ -179,7 +185,7 @@ const en: typeof de = {
actions: "Actions",
newOauth: "+ oAuth",
newApikey: "+ apiKey",
relogin: "Sign in again",
relogin: "Reset",
changeKey: "Change key",
insertKey: "Insert key",
delete: "Delete",
@@ -191,22 +197,24 @@ const en: typeof de = {
name: "Name",
apiKey: "API key",
oauthHint:
"After “Start login” the browser opens to sign in against your subscription.",
oauthWaiting: "Waiting for the sign-in in the browser…",
"The pool is created; claude signs in itself on first start via /login (browser against your subscription).",
cancel: "Cancel",
startLogin: "Start login",
createPool: "Create",
reset: "Reset",
save: "Save",
deletePool: "Delete pool",
deleteWarning:
"Pool {name} and its credential file will be deleted. This cannot be undone.",
deleteUnassigns: "These projects lose their pool assignment:",
reloginTitle: "Sign in again {name}",
deleteBlockedTooltip:
"Deletion blocked — active: {projects}. Stop the session first.",
reloginTitle: "Reset {name}",
reloginWarning:
"The access token for {name} stored in the keychain will be deleted. The browser then opens for a new sign-in.",
"The access token for {name} stored in the keychain will be deleted. On the next start claude asks for /login again.",
reloginNoEntry:
"No keychain entry present — only the new sign-in happens.",
"No keychain entry present — claude signs in via /login on the next start anyway.",
reloginBlocked:
"Signing in again requires an unused pool. These projects are still running:",
"Resetting requires an unused pool. These projects are still running:",
},
};