df828daea9
Wer claude schon benutzt, hat einen fertigen Login in ~/.claude. Bisher begann ai-control trotzdem bei null: jeder Pool war ein neu angelegtes Verzeichnis, der erste Sessionstart verlangte /login. Ein Pool kann jetzt stattdessen auf ein bestehendes Verzeichnis zeigen. pool.json trägt dafür optional `dir` (home-kontrahiert). Der Pool-Ordner ist dann nur die Hülle für diese Datei; pool_config_dir() löst auf und ist die einzige Stelle, über die Sessionstart, Verbrauchsstatistik, Panel-Provisionierung und Keychain-Name gehen. Zeigt ein Pool auf claudes Default-Verzeichnis, bleibt CLAUDE_CONFIG_DIR ungesetzt: claude nimmt dieses Verzeichnis von sich aus und damit den unsuffixierten Keychain-Eintrag, an dem der bestehende Login hängt (am Keychain gegengeprüft — "Claude Code-credentials" ohne Suffix neben den suffixierten Pool-Einträgen). Ein Verweis auf ein anderes Verzeichnis setzt die Variable wie gewohnt. Das verwiesene Verzeichnis gehört der App nicht: dort entsteht nur die Panel-Ausstattung (Skill, MCP-Eintrag, Freigabe-Ergänzung, alles additiv), keine settings.json-Grundausstattung. Löschen trifft nur die Hülle; Runtime-Symlinks und das Zurücksetzen des Keychain-Eintrags sind gesperrt. Ein Verzeichnis kann nur ein Pool belegen, Ziele innerhalb von pools/ sind ausgeschlossen. In der UI erscheint der Knopf nur, wenn ~/.claude existiert und noch kein Pool darauf zeigt; die Liste zeigt den Pfad unter dem Namen und statt "Zurücksetzen" den Hinweis, dass die Anmeldung claude gehört. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
73 lines
1.9 KiB
Rust
73 lines
1.9 KiB
Rust
fn main() {
|
|
// App-ACL-Manifest: erzeugt pro Command allow-/deny-Permissions. Sobald das
|
|
// Manifest existiert, gilt deny-by-default — jedes Command muss in einer
|
|
// Capability einem Fenster zugeteilt sein (capabilities/*.json), sonst
|
|
// lehnt Tauri den Aufruf ab. Neue Commands hier UND in der passenden
|
|
// Capability eintragen.
|
|
tauri_build::try_build(
|
|
tauri_build::Attributes::new().app_manifest(tauri_build::AppManifest::new().commands(&[
|
|
"list_projects",
|
|
"create_project_full",
|
|
"add_project",
|
|
"delete_preview",
|
|
"delete_project_scoped",
|
|
"project_work_dirs",
|
|
"set_project_dir",
|
|
"add_work_dir",
|
|
"remove_work_dir",
|
|
"list_pools",
|
|
"create_oauth_pool",
|
|
"create_apikey_pool",
|
|
"create_reference_pool",
|
|
"default_config_dir",
|
|
"rename_pool",
|
|
"delete_pool",
|
|
"assign_pool",
|
|
"unassign_pool",
|
|
"set_terminal_config",
|
|
"project_icon",
|
|
"pool_label",
|
|
"todo_state",
|
|
"set_todo",
|
|
"usage_stats",
|
|
"stop_project",
|
|
"restart_project",
|
|
"start_or_focus_cmd",
|
|
"open_main_window",
|
|
"quit_app",
|
|
"sync_setting",
|
|
"set_sync_setting",
|
|
"terminal_font_size",
|
|
"set_terminal_font_size",
|
|
"link_pool_runtime",
|
|
"oauth_login",
|
|
"keychain_status",
|
|
"set_apikey",
|
|
"panel_archive_dir_cmd",
|
|
"panel_archive_cmd",
|
|
"set_archive_home_cmd",
|
|
"change_archive_home_cmd",
|
|
"clear_archive_home_cmd",
|
|
"archive_docs_cmd",
|
|
"reveal_path_cmd",
|
|
"spellcheck_lang",
|
|
"open_terminal",
|
|
"term_start",
|
|
"term_log",
|
|
"term_write",
|
|
"term_resize",
|
|
"panel_read",
|
|
"commands_read",
|
|
"commands_delete",
|
|
"panel_set",
|
|
"search_read",
|
|
"search_run",
|
|
"panel_load",
|
|
"wiki_read",
|
|
"wiki_open",
|
|
"open_panel_window",
|
|
])),
|
|
)
|
|
.expect("tauri-build");
|
|
}
|