From 6c765ff7b524aefbcfd65a6146cdd6dfef0d5801 Mon Sep 17 00:00:00 2001 From: marcus hinz Date: Mon, 20 Jul 2026 13:37:02 +0200 Subject: [PATCH] =?UTF-8?q?Projekt=20l=C3=B6schen=20in=20drei=20Stufen=20m?= =?UTF-8?q?it=20Artefakt-Vorschau;=20Listen-Scroll=20gefixt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Eskalationsleiter: 'integration' nimmt nur die ai-control-Spuren zurück (Registry, .ai-control/, Archiv-Rechte + Todo-Hook in settings.json, Panel-Dateien, .desktop — Ordner, memory/ und Claude-Code-Grundgerüst bleiben), 'archive' löscht zusätzlich das Archiv, 'full' den Projekt- ordner mit Arbeitsordner-Flag. delete_preview liefert die konkrete Artefaktliste; der Dialog zeigt sie je Stufe. Ersetzt delete_project/ remove_project (Handler, App-ACL-Manifest und Capability nachgezogen). Außerdem: main scrollt nicht mehr — Toolbars und Fehlerzeile stehen, nur die Listen scrollen (alle drei Tabs, .list-scroll). --- src-tauri/build.rs | 68 +++++- src-tauri/capabilities/main.json | 58 +++++ src-tauri/capabilities/panel.json | 39 ++++ .../capabilities/{default.json => popup.json} | 16 +- src-tauri/capabilities/terminal.json | 47 +++++ .../autogenerated/add_project.toml | 11 + .../autogenerated/add_work_dir.toml | 11 + .../autogenerated/archive_docs_cmd.toml | 11 + .../autogenerated/assign_pool.toml | 11 + .../autogenerated/clear_archive_home_cmd.toml | 11 + .../autogenerated/commands_delete.toml | 11 + .../autogenerated/commands_read.toml | 11 + .../autogenerated/create_apikey_pool.toml | 11 + .../autogenerated/create_oauth_pool.toml | 11 + .../autogenerated/create_project_full.toml | 11 + .../autogenerated/delete_pool.toml | 11 + .../autogenerated/delete_preview.toml | 11 + .../autogenerated/delete_project.toml | 11 + .../autogenerated/delete_project_scoped.toml | 11 + .../autogenerated/keychain_status.toml | 11 + .../autogenerated/link_pool_runtime.toml | 11 + .../permissions/autogenerated/list_pools.toml | 11 + .../autogenerated/list_projects.toml | 11 + .../autogenerated/oauth_login.toml | 11 + .../autogenerated/open_main_window.toml | 11 + .../autogenerated/open_panel_window.toml | 11 + .../autogenerated/open_terminal.toml | 11 + .../autogenerated/panel_archive_cmd.toml | 11 + .../autogenerated/panel_archive_dir_cmd.toml | 11 + .../permissions/autogenerated/panel_load.toml | 11 + .../permissions/autogenerated/panel_read.toml | 11 + .../permissions/autogenerated/panel_set.toml | 11 + .../permissions/autogenerated/pool_label.toml | 11 + .../autogenerated/project_icon.toml | 11 + .../autogenerated/project_work_dirs.toml | 11 + .../permissions/autogenerated/quit_app.toml | 11 + .../autogenerated/remove_project.toml | 11 + .../autogenerated/remove_work_dir.toml | 11 + .../autogenerated/rename_pool.toml | 11 + .../autogenerated/restart_project.toml | 11 + .../autogenerated/reveal_path_cmd.toml | 11 + .../autogenerated/search_read.toml | 11 + .../permissions/autogenerated/search_run.toml | 11 + .../permissions/autogenerated/set_apikey.toml | 11 + .../autogenerated/set_archive_home_cmd.toml | 11 + .../autogenerated/set_project_dir.toml | 11 + .../autogenerated/set_sync_setting.toml | 11 + .../autogenerated/set_terminal_config.toml | 11 + .../autogenerated/set_terminal_font_size.toml | 11 + .../permissions/autogenerated/set_todo.toml | 11 + .../autogenerated/spellcheck_lang.toml | 11 + .../autogenerated/start_or_focus_cmd.toml | 11 + .../autogenerated/stop_project.toml | 11 + .../autogenerated/sync_setting.toml | 11 + .../permissions/autogenerated/term_log.toml | 11 + .../autogenerated/term_resize.toml | 11 + .../permissions/autogenerated/term_start.toml | 11 + .../permissions/autogenerated/term_write.toml | 11 + .../autogenerated/terminal_font_size.toml | 11 + .../permissions/autogenerated/todo_state.toml | 11 + .../autogenerated/unassign_pool.toml | 11 + .../autogenerated/usage_stats.toml | 11 + .../permissions/autogenerated/wiki_open.toml | 11 + .../permissions/autogenerated/wiki_read.toml | 11 + src-tauri/src/app.rs | 4 +- src-tauri/src/commands.rs | 37 ++-- src-tauri/src/domain/project.rs | 199 ++++++++++++++++-- src-tauri/tauri.conf.json | 3 +- src/components/PoolList.vue | 4 +- src/components/ProjectList.vue | 162 ++++++++++---- src/components/UsageList.vue | 4 +- src/i18n.ts | 50 +++-- src/style.css | 12 +- 73 files changed, 1250 insertions(+), 102 deletions(-) create mode 100644 src-tauri/capabilities/main.json create mode 100644 src-tauri/capabilities/panel.json rename src-tauri/capabilities/{default.json => popup.json} (65%) create mode 100644 src-tauri/capabilities/terminal.json create mode 100644 src-tauri/permissions/autogenerated/add_project.toml create mode 100644 src-tauri/permissions/autogenerated/add_work_dir.toml create mode 100644 src-tauri/permissions/autogenerated/archive_docs_cmd.toml create mode 100644 src-tauri/permissions/autogenerated/assign_pool.toml create mode 100644 src-tauri/permissions/autogenerated/clear_archive_home_cmd.toml create mode 100644 src-tauri/permissions/autogenerated/commands_delete.toml create mode 100644 src-tauri/permissions/autogenerated/commands_read.toml create mode 100644 src-tauri/permissions/autogenerated/create_apikey_pool.toml create mode 100644 src-tauri/permissions/autogenerated/create_oauth_pool.toml create mode 100644 src-tauri/permissions/autogenerated/create_project_full.toml create mode 100644 src-tauri/permissions/autogenerated/delete_pool.toml create mode 100644 src-tauri/permissions/autogenerated/delete_preview.toml create mode 100644 src-tauri/permissions/autogenerated/delete_project.toml create mode 100644 src-tauri/permissions/autogenerated/delete_project_scoped.toml create mode 100644 src-tauri/permissions/autogenerated/keychain_status.toml create mode 100644 src-tauri/permissions/autogenerated/link_pool_runtime.toml create mode 100644 src-tauri/permissions/autogenerated/list_pools.toml create mode 100644 src-tauri/permissions/autogenerated/list_projects.toml create mode 100644 src-tauri/permissions/autogenerated/oauth_login.toml create mode 100644 src-tauri/permissions/autogenerated/open_main_window.toml create mode 100644 src-tauri/permissions/autogenerated/open_panel_window.toml create mode 100644 src-tauri/permissions/autogenerated/open_terminal.toml create mode 100644 src-tauri/permissions/autogenerated/panel_archive_cmd.toml create mode 100644 src-tauri/permissions/autogenerated/panel_archive_dir_cmd.toml create mode 100644 src-tauri/permissions/autogenerated/panel_load.toml create mode 100644 src-tauri/permissions/autogenerated/panel_read.toml create mode 100644 src-tauri/permissions/autogenerated/panel_set.toml create mode 100644 src-tauri/permissions/autogenerated/pool_label.toml create mode 100644 src-tauri/permissions/autogenerated/project_icon.toml create mode 100644 src-tauri/permissions/autogenerated/project_work_dirs.toml create mode 100644 src-tauri/permissions/autogenerated/quit_app.toml create mode 100644 src-tauri/permissions/autogenerated/remove_project.toml create mode 100644 src-tauri/permissions/autogenerated/remove_work_dir.toml create mode 100644 src-tauri/permissions/autogenerated/rename_pool.toml create mode 100644 src-tauri/permissions/autogenerated/restart_project.toml create mode 100644 src-tauri/permissions/autogenerated/reveal_path_cmd.toml create mode 100644 src-tauri/permissions/autogenerated/search_read.toml create mode 100644 src-tauri/permissions/autogenerated/search_run.toml create mode 100644 src-tauri/permissions/autogenerated/set_apikey.toml create mode 100644 src-tauri/permissions/autogenerated/set_archive_home_cmd.toml create mode 100644 src-tauri/permissions/autogenerated/set_project_dir.toml create mode 100644 src-tauri/permissions/autogenerated/set_sync_setting.toml create mode 100644 src-tauri/permissions/autogenerated/set_terminal_config.toml create mode 100644 src-tauri/permissions/autogenerated/set_terminal_font_size.toml create mode 100644 src-tauri/permissions/autogenerated/set_todo.toml create mode 100644 src-tauri/permissions/autogenerated/spellcheck_lang.toml create mode 100644 src-tauri/permissions/autogenerated/start_or_focus_cmd.toml create mode 100644 src-tauri/permissions/autogenerated/stop_project.toml create mode 100644 src-tauri/permissions/autogenerated/sync_setting.toml create mode 100644 src-tauri/permissions/autogenerated/term_log.toml create mode 100644 src-tauri/permissions/autogenerated/term_resize.toml create mode 100644 src-tauri/permissions/autogenerated/term_start.toml create mode 100644 src-tauri/permissions/autogenerated/term_write.toml create mode 100644 src-tauri/permissions/autogenerated/terminal_font_size.toml create mode 100644 src-tauri/permissions/autogenerated/todo_state.toml create mode 100644 src-tauri/permissions/autogenerated/unassign_pool.toml create mode 100644 src-tauri/permissions/autogenerated/usage_stats.toml create mode 100644 src-tauri/permissions/autogenerated/wiki_open.toml create mode 100644 src-tauri/permissions/autogenerated/wiki_read.toml diff --git a/src-tauri/build.rs b/src-tauri/build.rs index 795b9b7..9caf6db 100644 --- a/src-tauri/build.rs +++ b/src-tauri/build.rs @@ -1,3 +1,69 @@ fn main() { - tauri_build::build() + // 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", + "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", + "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"); } diff --git a/src-tauri/capabilities/main.json b/src-tauri/capabilities/main.json new file mode 100644 index 0000000..d6a5354 --- /dev/null +++ b/src-tauri/capabilities/main.json @@ -0,0 +1,58 @@ +{ + "$schema": "../gen/schemas/desktop-schema.json", + "identifier": "main", + "description": "Hauptfenster: komplette Projekt-/Pool-Verwaltung.", + "windows": [ + "main" + ], + "permissions": [ + "core:default", + "core:window:allow-start-dragging", + "core:window:allow-set-size", + "core:window:allow-set-position", + "core:window:allow-outer-position", + "core:window:allow-inner-size", + "core:window:allow-minimize", + "core:window:allow-toggle-maximize", + "core:window:allow-close", + "core:window:allow-hide", + "core:window:allow-start-resize-dragging", + "autostart:default", + "dialog:default", + "clipboard-manager:allow-write-text", + "allow-list-projects", + "allow-create-project-full", + "allow-add-project", + "allow-project-work-dirs", + "allow-set-project-dir", + "allow-add-work-dir", + "allow-remove-work-dir", + "allow-list-pools", + "allow-create-oauth-pool", + "allow-create-apikey-pool", + "allow-rename-pool", + "allow-delete-pool", + "allow-assign-pool", + "allow-unassign-pool", + "allow-set-terminal-config", + "allow-project-icon", + "allow-todo-state", + "allow-set-todo", + "allow-usage-stats", + "allow-stop-project", + "allow-restart-project", + "allow-open-terminal", + "allow-sync-setting", + "allow-set-sync-setting", + "allow-link-pool-runtime", + "allow-oauth-login", + "allow-keychain-status", + "allow-set-apikey", + "allow-panel-archive-dir-cmd", + "allow-set-archive-home-cmd", + "allow-clear-archive-home-cmd", + "allow-archive-docs-cmd", + "allow-delete-preview", + "allow-delete-project-scoped" + ] +} diff --git a/src-tauri/capabilities/panel.json b/src-tauri/capabilities/panel.json new file mode 100644 index 0000000..718d442 --- /dev/null +++ b/src-tauri/capabilities/panel.json @@ -0,0 +1,39 @@ +{ + "$schema": "../gen/schemas/desktop-schema.json", + "identifier": "panel", + "description": "Abgelöstes Panel-Fenster: nur Panel-/Archiv-Kanäle, keine PTY, keine Verwaltung.", + "windows": [ + "panel-*" + ], + "permissions": [ + "core:default", + "core:window:allow-start-dragging", + "core:window:allow-set-size", + "core:window:allow-set-position", + "core:window:allow-outer-position", + "core:window:allow-inner-size", + "core:window:allow-minimize", + "core:window:allow-toggle-maximize", + "core:window:allow-close", + "core:window:allow-hide", + "core:window:allow-start-resize-dragging", + "autostart:default", + "dialog:default", + "clipboard-manager:allow-write-text", + "allow-commands-delete", + "allow-commands-read", + "allow-list-projects", + "allow-panel-archive-cmd", + "allow-panel-archive-dir-cmd", + "allow-panel-load", + "allow-panel-read", + "allow-panel-set", + "allow-reveal-path-cmd", + "allow-search-read", + "allow-search-run", + "allow-spellcheck-lang", + "allow-term-log", + "allow-wiki-open", + "allow-wiki-read" + ] +} diff --git a/src-tauri/capabilities/default.json b/src-tauri/capabilities/popup.json similarity index 65% rename from src-tauri/capabilities/default.json rename to src-tauri/capabilities/popup.json index a7b2aa9..6d8c6bd 100644 --- a/src-tauri/capabilities/default.json +++ b/src-tauri/capabilities/popup.json @@ -1,12 +1,9 @@ { "$schema": "../gen/schemas/desktop-schema.json", - "identifier": "default", - "description": "enables the default permissions", + "identifier": "popup", + "description": "Tray-Popup: Projektliste anzeigen und starten.", "windows": [ - "main", - "popup", - "term-*", - "panel-*" + "popup" ], "permissions": [ "core:default", @@ -22,6 +19,11 @@ "core:window:allow-start-resize-dragging", "autostart:default", "dialog:default", - "clipboard-manager:allow-write-text" + "clipboard-manager:allow-write-text", + "allow-list-projects", + "allow-project-icon", + "allow-start-or-focus-cmd", + "allow-open-main-window", + "allow-quit-app" ] } diff --git a/src-tauri/capabilities/terminal.json b/src-tauri/capabilities/terminal.json new file mode 100644 index 0000000..3c62493 --- /dev/null +++ b/src-tauri/capabilities/terminal.json @@ -0,0 +1,47 @@ +{ + "$schema": "../gen/schemas/desktop-schema.json", + "identifier": "terminal", + "description": "Terminal-Fenster: PTY und angedocktes Panel.", + "windows": [ + "term-*" + ], + "permissions": [ + "core:default", + "core:window:allow-start-dragging", + "core:window:allow-set-size", + "core:window:allow-set-position", + "core:window:allow-outer-position", + "core:window:allow-inner-size", + "core:window:allow-minimize", + "core:window:allow-toggle-maximize", + "core:window:allow-close", + "core:window:allow-hide", + "core:window:allow-start-resize-dragging", + "autostart:default", + "dialog:default", + "clipboard-manager:allow-write-text", + "allow-commands-delete", + "allow-commands-read", + "allow-list-projects", + "allow-open-panel-window", + "allow-panel-archive-cmd", + "allow-panel-archive-dir-cmd", + "allow-panel-load", + "allow-panel-read", + "allow-panel-set", + "allow-pool-label", + "allow-project-icon", + "allow-reveal-path-cmd", + "allow-search-read", + "allow-search-run", + "allow-set-terminal-font-size", + "allow-spellcheck-lang", + "allow-term-log", + "allow-term-resize", + "allow-term-start", + "allow-term-write", + "allow-terminal-font-size", + "allow-wiki-open", + "allow-wiki-read" + ] +} diff --git a/src-tauri/permissions/autogenerated/add_project.toml b/src-tauri/permissions/autogenerated/add_project.toml new file mode 100644 index 0000000..a5bc3e2 --- /dev/null +++ b/src-tauri/permissions/autogenerated/add_project.toml @@ -0,0 +1,11 @@ +# Automatically generated - DO NOT EDIT! + +[[permission]] +identifier = "allow-add-project" +description = "Enables the add_project command without any pre-configured scope." +commands.allow = ["add_project"] + +[[permission]] +identifier = "deny-add-project" +description = "Denies the add_project command without any pre-configured scope." +commands.deny = ["add_project"] diff --git a/src-tauri/permissions/autogenerated/add_work_dir.toml b/src-tauri/permissions/autogenerated/add_work_dir.toml new file mode 100644 index 0000000..95df190 --- /dev/null +++ b/src-tauri/permissions/autogenerated/add_work_dir.toml @@ -0,0 +1,11 @@ +# Automatically generated - DO NOT EDIT! + +[[permission]] +identifier = "allow-add-work-dir" +description = "Enables the add_work_dir command without any pre-configured scope." +commands.allow = ["add_work_dir"] + +[[permission]] +identifier = "deny-add-work-dir" +description = "Denies the add_work_dir command without any pre-configured scope." +commands.deny = ["add_work_dir"] diff --git a/src-tauri/permissions/autogenerated/archive_docs_cmd.toml b/src-tauri/permissions/autogenerated/archive_docs_cmd.toml new file mode 100644 index 0000000..109d091 --- /dev/null +++ b/src-tauri/permissions/autogenerated/archive_docs_cmd.toml @@ -0,0 +1,11 @@ +# Automatically generated - DO NOT EDIT! + +[[permission]] +identifier = "allow-archive-docs-cmd" +description = "Enables the archive_docs_cmd command without any pre-configured scope." +commands.allow = ["archive_docs_cmd"] + +[[permission]] +identifier = "deny-archive-docs-cmd" +description = "Denies the archive_docs_cmd command without any pre-configured scope." +commands.deny = ["archive_docs_cmd"] diff --git a/src-tauri/permissions/autogenerated/assign_pool.toml b/src-tauri/permissions/autogenerated/assign_pool.toml new file mode 100644 index 0000000..7a0140f --- /dev/null +++ b/src-tauri/permissions/autogenerated/assign_pool.toml @@ -0,0 +1,11 @@ +# Automatically generated - DO NOT EDIT! + +[[permission]] +identifier = "allow-assign-pool" +description = "Enables the assign_pool command without any pre-configured scope." +commands.allow = ["assign_pool"] + +[[permission]] +identifier = "deny-assign-pool" +description = "Denies the assign_pool command without any pre-configured scope." +commands.deny = ["assign_pool"] diff --git a/src-tauri/permissions/autogenerated/clear_archive_home_cmd.toml b/src-tauri/permissions/autogenerated/clear_archive_home_cmd.toml new file mode 100644 index 0000000..23d953e --- /dev/null +++ b/src-tauri/permissions/autogenerated/clear_archive_home_cmd.toml @@ -0,0 +1,11 @@ +# Automatically generated - DO NOT EDIT! + +[[permission]] +identifier = "allow-clear-archive-home-cmd" +description = "Enables the clear_archive_home_cmd command without any pre-configured scope." +commands.allow = ["clear_archive_home_cmd"] + +[[permission]] +identifier = "deny-clear-archive-home-cmd" +description = "Denies the clear_archive_home_cmd command without any pre-configured scope." +commands.deny = ["clear_archive_home_cmd"] diff --git a/src-tauri/permissions/autogenerated/commands_delete.toml b/src-tauri/permissions/autogenerated/commands_delete.toml new file mode 100644 index 0000000..ca4705d --- /dev/null +++ b/src-tauri/permissions/autogenerated/commands_delete.toml @@ -0,0 +1,11 @@ +# Automatically generated - DO NOT EDIT! + +[[permission]] +identifier = "allow-commands-delete" +description = "Enables the commands_delete command without any pre-configured scope." +commands.allow = ["commands_delete"] + +[[permission]] +identifier = "deny-commands-delete" +description = "Denies the commands_delete command without any pre-configured scope." +commands.deny = ["commands_delete"] diff --git a/src-tauri/permissions/autogenerated/commands_read.toml b/src-tauri/permissions/autogenerated/commands_read.toml new file mode 100644 index 0000000..3594d23 --- /dev/null +++ b/src-tauri/permissions/autogenerated/commands_read.toml @@ -0,0 +1,11 @@ +# Automatically generated - DO NOT EDIT! + +[[permission]] +identifier = "allow-commands-read" +description = "Enables the commands_read command without any pre-configured scope." +commands.allow = ["commands_read"] + +[[permission]] +identifier = "deny-commands-read" +description = "Denies the commands_read command without any pre-configured scope." +commands.deny = ["commands_read"] diff --git a/src-tauri/permissions/autogenerated/create_apikey_pool.toml b/src-tauri/permissions/autogenerated/create_apikey_pool.toml new file mode 100644 index 0000000..43d846d --- /dev/null +++ b/src-tauri/permissions/autogenerated/create_apikey_pool.toml @@ -0,0 +1,11 @@ +# Automatically generated - DO NOT EDIT! + +[[permission]] +identifier = "allow-create-apikey-pool" +description = "Enables the create_apikey_pool command without any pre-configured scope." +commands.allow = ["create_apikey_pool"] + +[[permission]] +identifier = "deny-create-apikey-pool" +description = "Denies the create_apikey_pool command without any pre-configured scope." +commands.deny = ["create_apikey_pool"] diff --git a/src-tauri/permissions/autogenerated/create_oauth_pool.toml b/src-tauri/permissions/autogenerated/create_oauth_pool.toml new file mode 100644 index 0000000..f154fbf --- /dev/null +++ b/src-tauri/permissions/autogenerated/create_oauth_pool.toml @@ -0,0 +1,11 @@ +# Automatically generated - DO NOT EDIT! + +[[permission]] +identifier = "allow-create-oauth-pool" +description = "Enables the create_oauth_pool command without any pre-configured scope." +commands.allow = ["create_oauth_pool"] + +[[permission]] +identifier = "deny-create-oauth-pool" +description = "Denies the create_oauth_pool command without any pre-configured scope." +commands.deny = ["create_oauth_pool"] diff --git a/src-tauri/permissions/autogenerated/create_project_full.toml b/src-tauri/permissions/autogenerated/create_project_full.toml new file mode 100644 index 0000000..80314f0 --- /dev/null +++ b/src-tauri/permissions/autogenerated/create_project_full.toml @@ -0,0 +1,11 @@ +# Automatically generated - DO NOT EDIT! + +[[permission]] +identifier = "allow-create-project-full" +description = "Enables the create_project_full command without any pre-configured scope." +commands.allow = ["create_project_full"] + +[[permission]] +identifier = "deny-create-project-full" +description = "Denies the create_project_full command without any pre-configured scope." +commands.deny = ["create_project_full"] diff --git a/src-tauri/permissions/autogenerated/delete_pool.toml b/src-tauri/permissions/autogenerated/delete_pool.toml new file mode 100644 index 0000000..3d98137 --- /dev/null +++ b/src-tauri/permissions/autogenerated/delete_pool.toml @@ -0,0 +1,11 @@ +# Automatically generated - DO NOT EDIT! + +[[permission]] +identifier = "allow-delete-pool" +description = "Enables the delete_pool command without any pre-configured scope." +commands.allow = ["delete_pool"] + +[[permission]] +identifier = "deny-delete-pool" +description = "Denies the delete_pool command without any pre-configured scope." +commands.deny = ["delete_pool"] diff --git a/src-tauri/permissions/autogenerated/delete_preview.toml b/src-tauri/permissions/autogenerated/delete_preview.toml new file mode 100644 index 0000000..cc89e06 --- /dev/null +++ b/src-tauri/permissions/autogenerated/delete_preview.toml @@ -0,0 +1,11 @@ +# Automatically generated - DO NOT EDIT! + +[[permission]] +identifier = "allow-delete-preview" +description = "Enables the delete_preview command without any pre-configured scope." +commands.allow = ["delete_preview"] + +[[permission]] +identifier = "deny-delete-preview" +description = "Denies the delete_preview command without any pre-configured scope." +commands.deny = ["delete_preview"] diff --git a/src-tauri/permissions/autogenerated/delete_project.toml b/src-tauri/permissions/autogenerated/delete_project.toml new file mode 100644 index 0000000..7ed910a --- /dev/null +++ b/src-tauri/permissions/autogenerated/delete_project.toml @@ -0,0 +1,11 @@ +# Automatically generated - DO NOT EDIT! + +[[permission]] +identifier = "allow-delete-project" +description = "Enables the delete_project command without any pre-configured scope." +commands.allow = ["delete_project"] + +[[permission]] +identifier = "deny-delete-project" +description = "Denies the delete_project command without any pre-configured scope." +commands.deny = ["delete_project"] diff --git a/src-tauri/permissions/autogenerated/delete_project_scoped.toml b/src-tauri/permissions/autogenerated/delete_project_scoped.toml new file mode 100644 index 0000000..2ec3363 --- /dev/null +++ b/src-tauri/permissions/autogenerated/delete_project_scoped.toml @@ -0,0 +1,11 @@ +# Automatically generated - DO NOT EDIT! + +[[permission]] +identifier = "allow-delete-project-scoped" +description = "Enables the delete_project_scoped command without any pre-configured scope." +commands.allow = ["delete_project_scoped"] + +[[permission]] +identifier = "deny-delete-project-scoped" +description = "Denies the delete_project_scoped command without any pre-configured scope." +commands.deny = ["delete_project_scoped"] diff --git a/src-tauri/permissions/autogenerated/keychain_status.toml b/src-tauri/permissions/autogenerated/keychain_status.toml new file mode 100644 index 0000000..2b08b05 --- /dev/null +++ b/src-tauri/permissions/autogenerated/keychain_status.toml @@ -0,0 +1,11 @@ +# Automatically generated - DO NOT EDIT! + +[[permission]] +identifier = "allow-keychain-status" +description = "Enables the keychain_status command without any pre-configured scope." +commands.allow = ["keychain_status"] + +[[permission]] +identifier = "deny-keychain-status" +description = "Denies the keychain_status command without any pre-configured scope." +commands.deny = ["keychain_status"] diff --git a/src-tauri/permissions/autogenerated/link_pool_runtime.toml b/src-tauri/permissions/autogenerated/link_pool_runtime.toml new file mode 100644 index 0000000..3170dea --- /dev/null +++ b/src-tauri/permissions/autogenerated/link_pool_runtime.toml @@ -0,0 +1,11 @@ +# Automatically generated - DO NOT EDIT! + +[[permission]] +identifier = "allow-link-pool-runtime" +description = "Enables the link_pool_runtime command without any pre-configured scope." +commands.allow = ["link_pool_runtime"] + +[[permission]] +identifier = "deny-link-pool-runtime" +description = "Denies the link_pool_runtime command without any pre-configured scope." +commands.deny = ["link_pool_runtime"] diff --git a/src-tauri/permissions/autogenerated/list_pools.toml b/src-tauri/permissions/autogenerated/list_pools.toml new file mode 100644 index 0000000..5584d0e --- /dev/null +++ b/src-tauri/permissions/autogenerated/list_pools.toml @@ -0,0 +1,11 @@ +# Automatically generated - DO NOT EDIT! + +[[permission]] +identifier = "allow-list-pools" +description = "Enables the list_pools command without any pre-configured scope." +commands.allow = ["list_pools"] + +[[permission]] +identifier = "deny-list-pools" +description = "Denies the list_pools command without any pre-configured scope." +commands.deny = ["list_pools"] diff --git a/src-tauri/permissions/autogenerated/list_projects.toml b/src-tauri/permissions/autogenerated/list_projects.toml new file mode 100644 index 0000000..7075df1 --- /dev/null +++ b/src-tauri/permissions/autogenerated/list_projects.toml @@ -0,0 +1,11 @@ +# Automatically generated - DO NOT EDIT! + +[[permission]] +identifier = "allow-list-projects" +description = "Enables the list_projects command without any pre-configured scope." +commands.allow = ["list_projects"] + +[[permission]] +identifier = "deny-list-projects" +description = "Denies the list_projects command without any pre-configured scope." +commands.deny = ["list_projects"] diff --git a/src-tauri/permissions/autogenerated/oauth_login.toml b/src-tauri/permissions/autogenerated/oauth_login.toml new file mode 100644 index 0000000..87cb019 --- /dev/null +++ b/src-tauri/permissions/autogenerated/oauth_login.toml @@ -0,0 +1,11 @@ +# Automatically generated - DO NOT EDIT! + +[[permission]] +identifier = "allow-oauth-login" +description = "Enables the oauth_login command without any pre-configured scope." +commands.allow = ["oauth_login"] + +[[permission]] +identifier = "deny-oauth-login" +description = "Denies the oauth_login command without any pre-configured scope." +commands.deny = ["oauth_login"] diff --git a/src-tauri/permissions/autogenerated/open_main_window.toml b/src-tauri/permissions/autogenerated/open_main_window.toml new file mode 100644 index 0000000..e7a77b7 --- /dev/null +++ b/src-tauri/permissions/autogenerated/open_main_window.toml @@ -0,0 +1,11 @@ +# Automatically generated - DO NOT EDIT! + +[[permission]] +identifier = "allow-open-main-window" +description = "Enables the open_main_window command without any pre-configured scope." +commands.allow = ["open_main_window"] + +[[permission]] +identifier = "deny-open-main-window" +description = "Denies the open_main_window command without any pre-configured scope." +commands.deny = ["open_main_window"] diff --git a/src-tauri/permissions/autogenerated/open_panel_window.toml b/src-tauri/permissions/autogenerated/open_panel_window.toml new file mode 100644 index 0000000..022861e --- /dev/null +++ b/src-tauri/permissions/autogenerated/open_panel_window.toml @@ -0,0 +1,11 @@ +# Automatically generated - DO NOT EDIT! + +[[permission]] +identifier = "allow-open-panel-window" +description = "Enables the open_panel_window command without any pre-configured scope." +commands.allow = ["open_panel_window"] + +[[permission]] +identifier = "deny-open-panel-window" +description = "Denies the open_panel_window command without any pre-configured scope." +commands.deny = ["open_panel_window"] diff --git a/src-tauri/permissions/autogenerated/open_terminal.toml b/src-tauri/permissions/autogenerated/open_terminal.toml new file mode 100644 index 0000000..9f01587 --- /dev/null +++ b/src-tauri/permissions/autogenerated/open_terminal.toml @@ -0,0 +1,11 @@ +# Automatically generated - DO NOT EDIT! + +[[permission]] +identifier = "allow-open-terminal" +description = "Enables the open_terminal command without any pre-configured scope." +commands.allow = ["open_terminal"] + +[[permission]] +identifier = "deny-open-terminal" +description = "Denies the open_terminal command without any pre-configured scope." +commands.deny = ["open_terminal"] diff --git a/src-tauri/permissions/autogenerated/panel_archive_cmd.toml b/src-tauri/permissions/autogenerated/panel_archive_cmd.toml new file mode 100644 index 0000000..2302b4a --- /dev/null +++ b/src-tauri/permissions/autogenerated/panel_archive_cmd.toml @@ -0,0 +1,11 @@ +# Automatically generated - DO NOT EDIT! + +[[permission]] +identifier = "allow-panel-archive-cmd" +description = "Enables the panel_archive_cmd command without any pre-configured scope." +commands.allow = ["panel_archive_cmd"] + +[[permission]] +identifier = "deny-panel-archive-cmd" +description = "Denies the panel_archive_cmd command without any pre-configured scope." +commands.deny = ["panel_archive_cmd"] diff --git a/src-tauri/permissions/autogenerated/panel_archive_dir_cmd.toml b/src-tauri/permissions/autogenerated/panel_archive_dir_cmd.toml new file mode 100644 index 0000000..a9c3a9e --- /dev/null +++ b/src-tauri/permissions/autogenerated/panel_archive_dir_cmd.toml @@ -0,0 +1,11 @@ +# Automatically generated - DO NOT EDIT! + +[[permission]] +identifier = "allow-panel-archive-dir-cmd" +description = "Enables the panel_archive_dir_cmd command without any pre-configured scope." +commands.allow = ["panel_archive_dir_cmd"] + +[[permission]] +identifier = "deny-panel-archive-dir-cmd" +description = "Denies the panel_archive_dir_cmd command without any pre-configured scope." +commands.deny = ["panel_archive_dir_cmd"] diff --git a/src-tauri/permissions/autogenerated/panel_load.toml b/src-tauri/permissions/autogenerated/panel_load.toml new file mode 100644 index 0000000..8e40bd2 --- /dev/null +++ b/src-tauri/permissions/autogenerated/panel_load.toml @@ -0,0 +1,11 @@ +# Automatically generated - DO NOT EDIT! + +[[permission]] +identifier = "allow-panel-load" +description = "Enables the panel_load command without any pre-configured scope." +commands.allow = ["panel_load"] + +[[permission]] +identifier = "deny-panel-load" +description = "Denies the panel_load command without any pre-configured scope." +commands.deny = ["panel_load"] diff --git a/src-tauri/permissions/autogenerated/panel_read.toml b/src-tauri/permissions/autogenerated/panel_read.toml new file mode 100644 index 0000000..5b92fd3 --- /dev/null +++ b/src-tauri/permissions/autogenerated/panel_read.toml @@ -0,0 +1,11 @@ +# Automatically generated - DO NOT EDIT! + +[[permission]] +identifier = "allow-panel-read" +description = "Enables the panel_read command without any pre-configured scope." +commands.allow = ["panel_read"] + +[[permission]] +identifier = "deny-panel-read" +description = "Denies the panel_read command without any pre-configured scope." +commands.deny = ["panel_read"] diff --git a/src-tauri/permissions/autogenerated/panel_set.toml b/src-tauri/permissions/autogenerated/panel_set.toml new file mode 100644 index 0000000..2c4702e --- /dev/null +++ b/src-tauri/permissions/autogenerated/panel_set.toml @@ -0,0 +1,11 @@ +# Automatically generated - DO NOT EDIT! + +[[permission]] +identifier = "allow-panel-set" +description = "Enables the panel_set command without any pre-configured scope." +commands.allow = ["panel_set"] + +[[permission]] +identifier = "deny-panel-set" +description = "Denies the panel_set command without any pre-configured scope." +commands.deny = ["panel_set"] diff --git a/src-tauri/permissions/autogenerated/pool_label.toml b/src-tauri/permissions/autogenerated/pool_label.toml new file mode 100644 index 0000000..142e067 --- /dev/null +++ b/src-tauri/permissions/autogenerated/pool_label.toml @@ -0,0 +1,11 @@ +# Automatically generated - DO NOT EDIT! + +[[permission]] +identifier = "allow-pool-label" +description = "Enables the pool_label command without any pre-configured scope." +commands.allow = ["pool_label"] + +[[permission]] +identifier = "deny-pool-label" +description = "Denies the pool_label command without any pre-configured scope." +commands.deny = ["pool_label"] diff --git a/src-tauri/permissions/autogenerated/project_icon.toml b/src-tauri/permissions/autogenerated/project_icon.toml new file mode 100644 index 0000000..d27be15 --- /dev/null +++ b/src-tauri/permissions/autogenerated/project_icon.toml @@ -0,0 +1,11 @@ +# Automatically generated - DO NOT EDIT! + +[[permission]] +identifier = "allow-project-icon" +description = "Enables the project_icon command without any pre-configured scope." +commands.allow = ["project_icon"] + +[[permission]] +identifier = "deny-project-icon" +description = "Denies the project_icon command without any pre-configured scope." +commands.deny = ["project_icon"] diff --git a/src-tauri/permissions/autogenerated/project_work_dirs.toml b/src-tauri/permissions/autogenerated/project_work_dirs.toml new file mode 100644 index 0000000..f3d566d --- /dev/null +++ b/src-tauri/permissions/autogenerated/project_work_dirs.toml @@ -0,0 +1,11 @@ +# Automatically generated - DO NOT EDIT! + +[[permission]] +identifier = "allow-project-work-dirs" +description = "Enables the project_work_dirs command without any pre-configured scope." +commands.allow = ["project_work_dirs"] + +[[permission]] +identifier = "deny-project-work-dirs" +description = "Denies the project_work_dirs command without any pre-configured scope." +commands.deny = ["project_work_dirs"] diff --git a/src-tauri/permissions/autogenerated/quit_app.toml b/src-tauri/permissions/autogenerated/quit_app.toml new file mode 100644 index 0000000..fb10775 --- /dev/null +++ b/src-tauri/permissions/autogenerated/quit_app.toml @@ -0,0 +1,11 @@ +# Automatically generated - DO NOT EDIT! + +[[permission]] +identifier = "allow-quit-app" +description = "Enables the quit_app command without any pre-configured scope." +commands.allow = ["quit_app"] + +[[permission]] +identifier = "deny-quit-app" +description = "Denies the quit_app command without any pre-configured scope." +commands.deny = ["quit_app"] diff --git a/src-tauri/permissions/autogenerated/remove_project.toml b/src-tauri/permissions/autogenerated/remove_project.toml new file mode 100644 index 0000000..a72877f --- /dev/null +++ b/src-tauri/permissions/autogenerated/remove_project.toml @@ -0,0 +1,11 @@ +# Automatically generated - DO NOT EDIT! + +[[permission]] +identifier = "allow-remove-project" +description = "Enables the remove_project command without any pre-configured scope." +commands.allow = ["remove_project"] + +[[permission]] +identifier = "deny-remove-project" +description = "Denies the remove_project command without any pre-configured scope." +commands.deny = ["remove_project"] diff --git a/src-tauri/permissions/autogenerated/remove_work_dir.toml b/src-tauri/permissions/autogenerated/remove_work_dir.toml new file mode 100644 index 0000000..330bf21 --- /dev/null +++ b/src-tauri/permissions/autogenerated/remove_work_dir.toml @@ -0,0 +1,11 @@ +# Automatically generated - DO NOT EDIT! + +[[permission]] +identifier = "allow-remove-work-dir" +description = "Enables the remove_work_dir command without any pre-configured scope." +commands.allow = ["remove_work_dir"] + +[[permission]] +identifier = "deny-remove-work-dir" +description = "Denies the remove_work_dir command without any pre-configured scope." +commands.deny = ["remove_work_dir"] diff --git a/src-tauri/permissions/autogenerated/rename_pool.toml b/src-tauri/permissions/autogenerated/rename_pool.toml new file mode 100644 index 0000000..a028a4a --- /dev/null +++ b/src-tauri/permissions/autogenerated/rename_pool.toml @@ -0,0 +1,11 @@ +# Automatically generated - DO NOT EDIT! + +[[permission]] +identifier = "allow-rename-pool" +description = "Enables the rename_pool command without any pre-configured scope." +commands.allow = ["rename_pool"] + +[[permission]] +identifier = "deny-rename-pool" +description = "Denies the rename_pool command without any pre-configured scope." +commands.deny = ["rename_pool"] diff --git a/src-tauri/permissions/autogenerated/restart_project.toml b/src-tauri/permissions/autogenerated/restart_project.toml new file mode 100644 index 0000000..8d3524d --- /dev/null +++ b/src-tauri/permissions/autogenerated/restart_project.toml @@ -0,0 +1,11 @@ +# Automatically generated - DO NOT EDIT! + +[[permission]] +identifier = "allow-restart-project" +description = "Enables the restart_project command without any pre-configured scope." +commands.allow = ["restart_project"] + +[[permission]] +identifier = "deny-restart-project" +description = "Denies the restart_project command without any pre-configured scope." +commands.deny = ["restart_project"] diff --git a/src-tauri/permissions/autogenerated/reveal_path_cmd.toml b/src-tauri/permissions/autogenerated/reveal_path_cmd.toml new file mode 100644 index 0000000..9860680 --- /dev/null +++ b/src-tauri/permissions/autogenerated/reveal_path_cmd.toml @@ -0,0 +1,11 @@ +# Automatically generated - DO NOT EDIT! + +[[permission]] +identifier = "allow-reveal-path-cmd" +description = "Enables the reveal_path_cmd command without any pre-configured scope." +commands.allow = ["reveal_path_cmd"] + +[[permission]] +identifier = "deny-reveal-path-cmd" +description = "Denies the reveal_path_cmd command without any pre-configured scope." +commands.deny = ["reveal_path_cmd"] diff --git a/src-tauri/permissions/autogenerated/search_read.toml b/src-tauri/permissions/autogenerated/search_read.toml new file mode 100644 index 0000000..a285dd7 --- /dev/null +++ b/src-tauri/permissions/autogenerated/search_read.toml @@ -0,0 +1,11 @@ +# Automatically generated - DO NOT EDIT! + +[[permission]] +identifier = "allow-search-read" +description = "Enables the search_read command without any pre-configured scope." +commands.allow = ["search_read"] + +[[permission]] +identifier = "deny-search-read" +description = "Denies the search_read command without any pre-configured scope." +commands.deny = ["search_read"] diff --git a/src-tauri/permissions/autogenerated/search_run.toml b/src-tauri/permissions/autogenerated/search_run.toml new file mode 100644 index 0000000..9ea4b41 --- /dev/null +++ b/src-tauri/permissions/autogenerated/search_run.toml @@ -0,0 +1,11 @@ +# Automatically generated - DO NOT EDIT! + +[[permission]] +identifier = "allow-search-run" +description = "Enables the search_run command without any pre-configured scope." +commands.allow = ["search_run"] + +[[permission]] +identifier = "deny-search-run" +description = "Denies the search_run command without any pre-configured scope." +commands.deny = ["search_run"] diff --git a/src-tauri/permissions/autogenerated/set_apikey.toml b/src-tauri/permissions/autogenerated/set_apikey.toml new file mode 100644 index 0000000..f54e665 --- /dev/null +++ b/src-tauri/permissions/autogenerated/set_apikey.toml @@ -0,0 +1,11 @@ +# Automatically generated - DO NOT EDIT! + +[[permission]] +identifier = "allow-set-apikey" +description = "Enables the set_apikey command without any pre-configured scope." +commands.allow = ["set_apikey"] + +[[permission]] +identifier = "deny-set-apikey" +description = "Denies the set_apikey command without any pre-configured scope." +commands.deny = ["set_apikey"] diff --git a/src-tauri/permissions/autogenerated/set_archive_home_cmd.toml b/src-tauri/permissions/autogenerated/set_archive_home_cmd.toml new file mode 100644 index 0000000..81e64a2 --- /dev/null +++ b/src-tauri/permissions/autogenerated/set_archive_home_cmd.toml @@ -0,0 +1,11 @@ +# Automatically generated - DO NOT EDIT! + +[[permission]] +identifier = "allow-set-archive-home-cmd" +description = "Enables the set_archive_home_cmd command without any pre-configured scope." +commands.allow = ["set_archive_home_cmd"] + +[[permission]] +identifier = "deny-set-archive-home-cmd" +description = "Denies the set_archive_home_cmd command without any pre-configured scope." +commands.deny = ["set_archive_home_cmd"] diff --git a/src-tauri/permissions/autogenerated/set_project_dir.toml b/src-tauri/permissions/autogenerated/set_project_dir.toml new file mode 100644 index 0000000..6c8679f --- /dev/null +++ b/src-tauri/permissions/autogenerated/set_project_dir.toml @@ -0,0 +1,11 @@ +# Automatically generated - DO NOT EDIT! + +[[permission]] +identifier = "allow-set-project-dir" +description = "Enables the set_project_dir command without any pre-configured scope." +commands.allow = ["set_project_dir"] + +[[permission]] +identifier = "deny-set-project-dir" +description = "Denies the set_project_dir command without any pre-configured scope." +commands.deny = ["set_project_dir"] diff --git a/src-tauri/permissions/autogenerated/set_sync_setting.toml b/src-tauri/permissions/autogenerated/set_sync_setting.toml new file mode 100644 index 0000000..94632b9 --- /dev/null +++ b/src-tauri/permissions/autogenerated/set_sync_setting.toml @@ -0,0 +1,11 @@ +# Automatically generated - DO NOT EDIT! + +[[permission]] +identifier = "allow-set-sync-setting" +description = "Enables the set_sync_setting command without any pre-configured scope." +commands.allow = ["set_sync_setting"] + +[[permission]] +identifier = "deny-set-sync-setting" +description = "Denies the set_sync_setting command without any pre-configured scope." +commands.deny = ["set_sync_setting"] diff --git a/src-tauri/permissions/autogenerated/set_terminal_config.toml b/src-tauri/permissions/autogenerated/set_terminal_config.toml new file mode 100644 index 0000000..72a329b --- /dev/null +++ b/src-tauri/permissions/autogenerated/set_terminal_config.toml @@ -0,0 +1,11 @@ +# Automatically generated - DO NOT EDIT! + +[[permission]] +identifier = "allow-set-terminal-config" +description = "Enables the set_terminal_config command without any pre-configured scope." +commands.allow = ["set_terminal_config"] + +[[permission]] +identifier = "deny-set-terminal-config" +description = "Denies the set_terminal_config command without any pre-configured scope." +commands.deny = ["set_terminal_config"] diff --git a/src-tauri/permissions/autogenerated/set_terminal_font_size.toml b/src-tauri/permissions/autogenerated/set_terminal_font_size.toml new file mode 100644 index 0000000..f11d993 --- /dev/null +++ b/src-tauri/permissions/autogenerated/set_terminal_font_size.toml @@ -0,0 +1,11 @@ +# Automatically generated - DO NOT EDIT! + +[[permission]] +identifier = "allow-set-terminal-font-size" +description = "Enables the set_terminal_font_size command without any pre-configured scope." +commands.allow = ["set_terminal_font_size"] + +[[permission]] +identifier = "deny-set-terminal-font-size" +description = "Denies the set_terminal_font_size command without any pre-configured scope." +commands.deny = ["set_terminal_font_size"] diff --git a/src-tauri/permissions/autogenerated/set_todo.toml b/src-tauri/permissions/autogenerated/set_todo.toml new file mode 100644 index 0000000..3e50cb2 --- /dev/null +++ b/src-tauri/permissions/autogenerated/set_todo.toml @@ -0,0 +1,11 @@ +# Automatically generated - DO NOT EDIT! + +[[permission]] +identifier = "allow-set-todo" +description = "Enables the set_todo command without any pre-configured scope." +commands.allow = ["set_todo"] + +[[permission]] +identifier = "deny-set-todo" +description = "Denies the set_todo command without any pre-configured scope." +commands.deny = ["set_todo"] diff --git a/src-tauri/permissions/autogenerated/spellcheck_lang.toml b/src-tauri/permissions/autogenerated/spellcheck_lang.toml new file mode 100644 index 0000000..8238d60 --- /dev/null +++ b/src-tauri/permissions/autogenerated/spellcheck_lang.toml @@ -0,0 +1,11 @@ +# Automatically generated - DO NOT EDIT! + +[[permission]] +identifier = "allow-spellcheck-lang" +description = "Enables the spellcheck_lang command without any pre-configured scope." +commands.allow = ["spellcheck_lang"] + +[[permission]] +identifier = "deny-spellcheck-lang" +description = "Denies the spellcheck_lang command without any pre-configured scope." +commands.deny = ["spellcheck_lang"] diff --git a/src-tauri/permissions/autogenerated/start_or_focus_cmd.toml b/src-tauri/permissions/autogenerated/start_or_focus_cmd.toml new file mode 100644 index 0000000..f04e137 --- /dev/null +++ b/src-tauri/permissions/autogenerated/start_or_focus_cmd.toml @@ -0,0 +1,11 @@ +# Automatically generated - DO NOT EDIT! + +[[permission]] +identifier = "allow-start-or-focus-cmd" +description = "Enables the start_or_focus_cmd command without any pre-configured scope." +commands.allow = ["start_or_focus_cmd"] + +[[permission]] +identifier = "deny-start-or-focus-cmd" +description = "Denies the start_or_focus_cmd command without any pre-configured scope." +commands.deny = ["start_or_focus_cmd"] diff --git a/src-tauri/permissions/autogenerated/stop_project.toml b/src-tauri/permissions/autogenerated/stop_project.toml new file mode 100644 index 0000000..b7b571a --- /dev/null +++ b/src-tauri/permissions/autogenerated/stop_project.toml @@ -0,0 +1,11 @@ +# Automatically generated - DO NOT EDIT! + +[[permission]] +identifier = "allow-stop-project" +description = "Enables the stop_project command without any pre-configured scope." +commands.allow = ["stop_project"] + +[[permission]] +identifier = "deny-stop-project" +description = "Denies the stop_project command without any pre-configured scope." +commands.deny = ["stop_project"] diff --git a/src-tauri/permissions/autogenerated/sync_setting.toml b/src-tauri/permissions/autogenerated/sync_setting.toml new file mode 100644 index 0000000..3f5141a --- /dev/null +++ b/src-tauri/permissions/autogenerated/sync_setting.toml @@ -0,0 +1,11 @@ +# Automatically generated - DO NOT EDIT! + +[[permission]] +identifier = "allow-sync-setting" +description = "Enables the sync_setting command without any pre-configured scope." +commands.allow = ["sync_setting"] + +[[permission]] +identifier = "deny-sync-setting" +description = "Denies the sync_setting command without any pre-configured scope." +commands.deny = ["sync_setting"] diff --git a/src-tauri/permissions/autogenerated/term_log.toml b/src-tauri/permissions/autogenerated/term_log.toml new file mode 100644 index 0000000..235a0a9 --- /dev/null +++ b/src-tauri/permissions/autogenerated/term_log.toml @@ -0,0 +1,11 @@ +# Automatically generated - DO NOT EDIT! + +[[permission]] +identifier = "allow-term-log" +description = "Enables the term_log command without any pre-configured scope." +commands.allow = ["term_log"] + +[[permission]] +identifier = "deny-term-log" +description = "Denies the term_log command without any pre-configured scope." +commands.deny = ["term_log"] diff --git a/src-tauri/permissions/autogenerated/term_resize.toml b/src-tauri/permissions/autogenerated/term_resize.toml new file mode 100644 index 0000000..ba7b616 --- /dev/null +++ b/src-tauri/permissions/autogenerated/term_resize.toml @@ -0,0 +1,11 @@ +# Automatically generated - DO NOT EDIT! + +[[permission]] +identifier = "allow-term-resize" +description = "Enables the term_resize command without any pre-configured scope." +commands.allow = ["term_resize"] + +[[permission]] +identifier = "deny-term-resize" +description = "Denies the term_resize command without any pre-configured scope." +commands.deny = ["term_resize"] diff --git a/src-tauri/permissions/autogenerated/term_start.toml b/src-tauri/permissions/autogenerated/term_start.toml new file mode 100644 index 0000000..79568cd --- /dev/null +++ b/src-tauri/permissions/autogenerated/term_start.toml @@ -0,0 +1,11 @@ +# Automatically generated - DO NOT EDIT! + +[[permission]] +identifier = "allow-term-start" +description = "Enables the term_start command without any pre-configured scope." +commands.allow = ["term_start"] + +[[permission]] +identifier = "deny-term-start" +description = "Denies the term_start command without any pre-configured scope." +commands.deny = ["term_start"] diff --git a/src-tauri/permissions/autogenerated/term_write.toml b/src-tauri/permissions/autogenerated/term_write.toml new file mode 100644 index 0000000..d9090a4 --- /dev/null +++ b/src-tauri/permissions/autogenerated/term_write.toml @@ -0,0 +1,11 @@ +# Automatically generated - DO NOT EDIT! + +[[permission]] +identifier = "allow-term-write" +description = "Enables the term_write command without any pre-configured scope." +commands.allow = ["term_write"] + +[[permission]] +identifier = "deny-term-write" +description = "Denies the term_write command without any pre-configured scope." +commands.deny = ["term_write"] diff --git a/src-tauri/permissions/autogenerated/terminal_font_size.toml b/src-tauri/permissions/autogenerated/terminal_font_size.toml new file mode 100644 index 0000000..f09d657 --- /dev/null +++ b/src-tauri/permissions/autogenerated/terminal_font_size.toml @@ -0,0 +1,11 @@ +# Automatically generated - DO NOT EDIT! + +[[permission]] +identifier = "allow-terminal-font-size" +description = "Enables the terminal_font_size command without any pre-configured scope." +commands.allow = ["terminal_font_size"] + +[[permission]] +identifier = "deny-terminal-font-size" +description = "Denies the terminal_font_size command without any pre-configured scope." +commands.deny = ["terminal_font_size"] diff --git a/src-tauri/permissions/autogenerated/todo_state.toml b/src-tauri/permissions/autogenerated/todo_state.toml new file mode 100644 index 0000000..f59a2a0 --- /dev/null +++ b/src-tauri/permissions/autogenerated/todo_state.toml @@ -0,0 +1,11 @@ +# Automatically generated - DO NOT EDIT! + +[[permission]] +identifier = "allow-todo-state" +description = "Enables the todo_state command without any pre-configured scope." +commands.allow = ["todo_state"] + +[[permission]] +identifier = "deny-todo-state" +description = "Denies the todo_state command without any pre-configured scope." +commands.deny = ["todo_state"] diff --git a/src-tauri/permissions/autogenerated/unassign_pool.toml b/src-tauri/permissions/autogenerated/unassign_pool.toml new file mode 100644 index 0000000..43c7fb9 --- /dev/null +++ b/src-tauri/permissions/autogenerated/unassign_pool.toml @@ -0,0 +1,11 @@ +# Automatically generated - DO NOT EDIT! + +[[permission]] +identifier = "allow-unassign-pool" +description = "Enables the unassign_pool command without any pre-configured scope." +commands.allow = ["unassign_pool"] + +[[permission]] +identifier = "deny-unassign-pool" +description = "Denies the unassign_pool command without any pre-configured scope." +commands.deny = ["unassign_pool"] diff --git a/src-tauri/permissions/autogenerated/usage_stats.toml b/src-tauri/permissions/autogenerated/usage_stats.toml new file mode 100644 index 0000000..41621ba --- /dev/null +++ b/src-tauri/permissions/autogenerated/usage_stats.toml @@ -0,0 +1,11 @@ +# Automatically generated - DO NOT EDIT! + +[[permission]] +identifier = "allow-usage-stats" +description = "Enables the usage_stats command without any pre-configured scope." +commands.allow = ["usage_stats"] + +[[permission]] +identifier = "deny-usage-stats" +description = "Denies the usage_stats command without any pre-configured scope." +commands.deny = ["usage_stats"] diff --git a/src-tauri/permissions/autogenerated/wiki_open.toml b/src-tauri/permissions/autogenerated/wiki_open.toml new file mode 100644 index 0000000..fac8f82 --- /dev/null +++ b/src-tauri/permissions/autogenerated/wiki_open.toml @@ -0,0 +1,11 @@ +# Automatically generated - DO NOT EDIT! + +[[permission]] +identifier = "allow-wiki-open" +description = "Enables the wiki_open command without any pre-configured scope." +commands.allow = ["wiki_open"] + +[[permission]] +identifier = "deny-wiki-open" +description = "Denies the wiki_open command without any pre-configured scope." +commands.deny = ["wiki_open"] diff --git a/src-tauri/permissions/autogenerated/wiki_read.toml b/src-tauri/permissions/autogenerated/wiki_read.toml new file mode 100644 index 0000000..882185a --- /dev/null +++ b/src-tauri/permissions/autogenerated/wiki_read.toml @@ -0,0 +1,11 @@ +# Automatically generated - DO NOT EDIT! + +[[permission]] +identifier = "allow-wiki-read" +description = "Enables the wiki_read command without any pre-configured scope." +commands.allow = ["wiki_read"] + +[[permission]] +identifier = "deny-wiki-read" +description = "Denies the wiki_read command without any pre-configured scope." +commands.deny = ["wiki_read"] diff --git a/src-tauri/src/app.rs b/src-tauri/src/app.rs index a162d27..0f5eddd 100644 --- a/src-tauri/src/app.rs +++ b/src-tauri/src/app.rs @@ -247,8 +247,8 @@ fn invoke_handlers() -> impl Fn(tauri::ipc::Invoke) -> bool + Send + commands::list_projects, commands::create_project_full, commands::add_project, - commands::remove_project, - commands::delete_project, + commands::delete_preview, + commands::delete_project_scoped, commands::project_work_dirs, commands::set_project_dir, commands::add_work_dir, diff --git a/src-tauri/src/commands.rs b/src-tauri/src/commands.rs index 3c4d593..8d58224 100644 --- a/src-tauri/src/commands.rs +++ b/src-tauri/src/commands.rs @@ -13,12 +13,12 @@ use crate::domain::pool::{ link_pool_runtime_in, list_pools_in, read_pool, rename_pool_in, set_apikey_in, PoolInfo, }; use crate::domain::project::{ - add_project_in, add_work_dir_in, assign_pool_in, create_project_full_in, delete_project_in, - display_name_in, is_running, kill_terminals, list_projects_in, project_work_dirs_in, - read_project_config_in, remove_work_dir_in, resolve_icon_path, running_projects_using_pool, - set_project_dir_in, set_terminal_config_in, unassign_pool_in, Project, TerminalConfig, + add_project_in, add_work_dir_in, assign_pool_in, create_project_full_in, delete_preview_in, + delete_project_scoped_in, display_name_in, is_running, kill_terminals, list_projects_in, + project_work_dirs_in, read_project_config_in, remove_work_dir_in, resolve_icon_path, + running_projects_using_pool, set_project_dir_in, set_terminal_config_in, unassign_pool_in, + DeletePreview, Project, TerminalConfig, }; -use crate::domain::registry::unregister_project; use crate::domain::settings; use crate::domain::todo::{set_todo_in, todo_state_in}; use crate::domain::usage::{usage_stats_in, UsageRow}; @@ -60,16 +60,6 @@ pub(crate) fn add_project(path: String) -> Result<(), String> { add_project_in(&Paths::real(), &path) } -/// Projekt aus der Registry nehmen; der Ordner bleibt unangetastet. -#[tauri::command] -pub(crate) fn remove_project(project: String) -> Result<(), String> { - if is_running(&project) { - let name = display_name_in(&Paths::real(), &project)?; - return Err(format!("{name} läuft noch — erst beenden")); - } - unregister_project(&Paths::real(), &project) -} - /// Projektordner neu zuordnen; bei laufender Session gesperrt. #[tauri::command] pub(crate) fn set_project_dir(project: String, dir: String) -> Result<(), String> { @@ -90,13 +80,26 @@ pub(crate) fn remove_work_dir(project: String, dir: String) -> Result<(), String remove_work_dir_in(&Paths::real(), &project, &dir) } +/// Artefakt-Vorschau für den Lösch-Dialog. #[tauri::command] -pub(crate) fn delete_project(project: String, delete_work_dirs: bool) -> Result<(), String> { +pub(crate) fn delete_preview(project: String) -> Result { + delete_preview_in(&Paths::real(), &project) +} + +/// Löschen in drei Stufen: "integration" (nur ai-control-Spuren), +/// "archive" (zusätzlich Archiv), "full" (zusätzlich Projektordner, +/// Arbeitsordner per Flag). +#[tauri::command] +pub(crate) fn delete_project_scoped( + project: String, + scope: String, + delete_work_dirs: bool, +) -> Result<(), String> { if is_running(&project) { let name = display_name_in(&Paths::real(), &project)?; return Err(format!("{name} läuft noch — erst beenden")); } - delete_project_in(&Paths::real(), &project, delete_work_dirs) + delete_project_scoped_in(&Paths::real(), &project, &scope, delete_work_dirs) } #[tauri::command] diff --git a/src-tauri/src/domain/project.rs b/src-tauri/src/domain/project.rs index c5de90a..b9f0326 100644 --- a/src-tauri/src/domain/project.rs +++ b/src-tauri/src/domain/project.rs @@ -499,27 +499,125 @@ pub(crate) fn project_work_dirs_in(paths: &Paths, name: &str) -> Result, + pub(crate) archive_docs: usize, + pub(crate) work_dirs: Vec, +} + +pub(crate) fn delete_preview_in(paths: &Paths, project: &str) -> Result { + check_name(project)?; + let dir = project_dir(paths, project)?; + let cfg = read_project_config_in(paths, project)?; + let archive_docs = match cfg.archive_home.as_deref() { + Some(a) => { + let home = expand_home(paths, a); + if home.is_dir() { + crate::domain::archive_index::scan_archive(&home)?.len() + } else { + 0 + } + } + None => 0, + }; + Ok(DeletePreview { + name: cfg.name.clone().unwrap_or_else(|| project.to_string()), + project_dir: contract_home(paths, &dir), + ai_control_dir: dir.join(PROJECT_CONFIG_DIR).is_dir(), + archive_permission: cfg.archive_home.is_some(), + todo_hook: crate::domain::todo::todo_state_in(paths, project)?, + panel_files: session_files(paths, project).iter().filter(|f| f.is_file()).count(), + archive_home: cfg.archive_home.clone(), + archive_docs, + work_dirs: project_work_dirs_in(paths, project)?, + }) +} + +/// Flüchtige Panel-Kanaldateien des Projekts unter ~/.config/ai-control/panels. +fn session_files(paths: &Paths, project: &str) -> [PathBuf; 4] { + let panels = paths.config_dir().join("panels"); + [ + panels.join(format!("{project}.md")), + panels.join(format!("{project}.commands.jsonl")), + panels.join(format!("{project}.search.json")), + panels.join(format!("{project}.wiki.json")), + ] +} + +/// Löscht ein Projekt in drei Stufen (Eskalationsleiter, jede schließt die +/// vorige ein): +/// - "integration": nur die ai-control-Spuren — Registry, .ai-control/, +/// Archiv-Rechte und Todo-Hook in der settings.json, Panel-Dateien, +/// .desktop. Ordner, memory/ und das Claude-Code-Grundgerüst der +/// settings.json bleiben. +/// - "archive": zusätzlich der Archiv-Ordner samt Dokumenten. +/// - "full": zusätzlich der Projektordner; Arbeitsordner per Flag. +pub(crate) fn delete_project_scoped_in( paths: &Paths, - name: &str, + project: &str, + scope: &str, delete_work_dirs: bool, ) -> Result<(), String> { - check_name(name)?; - let dir = project_dir(paths, name)?; + check_name(project)?; + let dir = project_dir(paths, project)?; if !dir.is_dir() { - return Err(format!("Projekt nicht gefunden: {name}")); + return Err(format!("Projektordner nicht gefunden: {}", dir.display())); } - if delete_work_dirs { - for wd in project_work_dirs_in(paths, name)? { - let wd_path = expand_home(paths, &wd); - fs::remove_dir_all(&wd_path).map_err(|e| format!("{}: {e}", wd_path.display()))?; + let cfg = read_project_config_in(paths, project)?; + + // Archiv vor der Integration räumen — Stufe 1 löscht die Config, die den + // Pfad kennt. + if scope == "archive" || scope == "full" { + if let Some(a) = cfg.archive_home.as_deref() { + let home = expand_home(paths, a); + if home.is_dir() { + fs::remove_dir_all(&home).map_err(|e| format!("{}: {e}", home.display()))?; + } } } - fs::remove_dir_all(&dir).map_err(|e| format!("{}: {e}", dir.display()))?; - crate::domain::registry::unregister_project(paths, name)?; - crate::platform::remove_terminal_desktop(paths, name); + + match scope { + "integration" | "archive" => { + if let Some(a) = cfg.archive_home.as_deref() { + crate::domain::archive::remove_archive_permission(paths, project, a)?; + } + if crate::domain::todo::todo_state_in(paths, project)? { + crate::domain::todo::set_todo_in(paths, project, false)?; + } + let ac = dir.join(PROJECT_CONFIG_DIR); + if ac.is_dir() { + fs::remove_dir_all(&ac).map_err(|e| format!("{}: {e}", ac.display()))?; + } + } + "full" => { + if delete_work_dirs { + for wd in project_work_dirs_in(paths, project)? { + let wd_path = expand_home(paths, &wd); + fs::remove_dir_all(&wd_path).map_err(|e| format!("{}: {e}", wd_path.display()))?; + } + } + fs::remove_dir_all(&dir).map_err(|e| format!("{}: {e}", dir.display()))?; + } + other => return Err(format!("unbekannter Lösch-Umfang: {other}")), + } + + for f in session_files(paths, project) { + if f.is_file() { + fs::remove_file(&f).map_err(|e| format!("{}: {e}", f.display()))?; + } + } + crate::domain::registry::unregister_project(paths, project)?; + crate::platform::remove_terminal_desktop(paths, project); Ok(()) } @@ -1149,7 +1247,7 @@ mod tests { fn projekt_loeschen() { let p = tmp_paths(); create_project(&p, "proj").unwrap(); - delete_project_in(&p, "proj", false).unwrap(); + delete_project_scoped_in(&p, "proj", "full", false).unwrap(); assert!(!p.projects_dir().join("proj").exists()); } @@ -1158,7 +1256,7 @@ mod tests { let p = tmp_paths(); let id = create_project_full_in(&p, "proj", None, None, Some("~/projects/proj"), true, TerminalConfig::default(), false) .unwrap(); - delete_project_in(&p, &id, false).unwrap(); + delete_project_scoped_in(&p, &id, "full", false).unwrap(); assert!(!p.projects_dir().join("proj").exists()); assert!(p.home.join("projects").join("proj").is_dir()); } @@ -1168,7 +1266,7 @@ mod tests { let p = tmp_paths(); let id = create_project_full_in(&p, "proj", None, None, Some("~/projects/proj"), true, TerminalConfig::default(), false) .unwrap(); - delete_project_in(&p, &id, true).unwrap(); + delete_project_scoped_in(&p, &id, "full", true).unwrap(); assert!(!p.projects_dir().join("proj").exists()); assert!(!p.home.join("projects").join("proj").exists()); } @@ -1179,7 +1277,7 @@ mod tests { let id = create_project_full_in(&p, "proj", None, None, Some("~/projects/proj"), true, TerminalConfig::default(), false) .unwrap(); fs::remove_dir_all(p.home.join("projects").join("proj")).unwrap(); - assert!(delete_project_in(&p, &id, true).is_err()); + assert!(delete_project_scoped_in(&p, &id, "full", true).is_err()); } #[test] @@ -1276,9 +1374,72 @@ mod tests { assert!(read_for_panel_in(&p, "proj", "/dev/zero").is_err()); } + /// Stufe „nur Integration": ai-control-Spuren weg, Ordner und + /// Claude-Code-Bestand bleiben. + #[test] + fn loeschen_nur_integration() { + let p = tmp_paths(); + let id = create_project_full_in(&p, "proj", None, None, None, false, TerminalConfig::default(), true) + .unwrap(); + let dir = p.projects_dir().join("proj"); + // Archiv-Home samt Permission wie über die UI gesetzt + let mut cfg = read_project_config_in(&p, &id).unwrap(); + cfg.archive_home = Some("~/archiv/proj".into()); + write_project_config_in(&p, &id, &cfg).unwrap(); + crate::domain::archive::add_archive_permission(&p, &id, "~/archiv/proj").unwrap(); + fs::create_dir_all(p.home.join("archiv/proj")).unwrap(); + fs::write(p.home.join("archiv/proj/doc.md"), "inhalt").unwrap(); + // flüchtige Panel-Datei + fs::create_dir_all(p.config_dir().join("panels")).unwrap(); + fs::write(p.config_dir().join("panels").join(format!("{id}.md")), "x").unwrap(); + + let preview = delete_preview_in(&p, &id).unwrap(); + assert!(preview.ai_control_dir && preview.archive_permission && preview.todo_hook); + assert_eq!(preview.panel_files, 1); + assert_eq!(preview.archive_docs, 1); + + delete_project_scoped_in(&p, &id, "integration", false).unwrap(); + + assert!(dir.is_dir()); + assert!(!dir.join(PROJECT_CONFIG_DIR).exists()); + let sp = fs::read_to_string(settings_path(&dir)).unwrap(); + assert!(!sp.contains("archiv/proj")); + assert!(!sp.contains("OFFENE-PUNKTE.md")); // Hook weg (leere Hook-Liste darf bleiben) + assert!(sp.contains("autoMemoryDirectory")); // Claude-Code-Bestand bleibt + assert!(dir.join(crate::domain::todo::TODO_FILE).is_file()); // Nutzerinhalt bleibt + assert!(p.home.join("archiv/proj/doc.md").is_file()); // Archiv bleibt + assert!(!p.config_dir().join("panels").join(format!("{id}.md")).exists()); + assert!(load_registry(&p).unwrap().is_empty()); + } + + /// Stufe „Integration & Archiv": zusätzlich stirbt der Archiv-Ordner. + #[test] + fn loeschen_integration_und_archiv() { + let p = tmp_paths(); + let id = create_project_full_in(&p, "proj", None, None, None, false, TerminalConfig::default(), false) + .unwrap(); + let mut cfg = read_project_config_in(&p, &id).unwrap(); + cfg.archive_home = Some("~/archiv/proj".into()); + write_project_config_in(&p, &id, &cfg).unwrap(); + fs::create_dir_all(p.home.join("archiv/proj")).unwrap(); + + delete_project_scoped_in(&p, &id, "archive", false).unwrap(); + + assert!(p.projects_dir().join("proj").is_dir()); + assert!(!p.home.join("archiv/proj").exists()); + assert!(load_registry(&p).unwrap().is_empty()); + } + + #[test] + fn loeschen_unbekannter_umfang_scheitert() { + let p = tmp_paths(); + create_project(&p, "proj").unwrap(); + assert!(delete_project_scoped_in(&p, "proj", "halb", false).is_err()); + } + #[test] fn projekt_loeschen_unbekannt_scheitert() { let p = tmp_paths(); - assert!(delete_project_in(&p, "gibtsnicht", false).is_err()); + assert!(delete_project_scoped_in(&p, "gibtsnicht", "full", false).is_err()); } } diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 88b128e..468235d 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -13,7 +13,8 @@ "macOSPrivateApi": true, "windows": [], "security": { - "csp": null + "csp": "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; connect-src ipc: http://ipc.localhost", + "devCsp": "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; connect-src ipc: http://ipc.localhost ws://localhost:1420 http://localhost:1420" } }, "bundle": { diff --git a/src/components/PoolList.vue b/src/components/PoolList.vue index 5e46407..7d57593 100644 --- a/src/components/PoolList.vue +++ b/src/components/PoolList.vue @@ -201,7 +201,8 @@ onMounted(refresh);

{{ error }}

- +
+
@@ -268,6 +269,7 @@ onMounted(refresh);
+

{{ $t("pools.empty") }}

diff --git a/src/components/ProjectList.vue b/src/components/ProjectList.vue index b113bba..21ad331 100644 --- a/src/components/ProjectList.vue +++ b/src/components/ProjectList.vue @@ -379,10 +379,25 @@ async function createProject() { } } +interface DeletePreview { + name: string; + projectDir: string; + aiControlDir: boolean; + archivePermission: boolean; + todoHook: boolean; + panelFiles: number; + archiveHome: string | null; + archiveDocs: number; + workDirs: string[]; +} + +// Eskalationsleiter: jede Stufe schließt die vorige ein. +type DeleteScope = "integration" | "archive" | "full"; + interface PendingDelete { id: string; - name: string; - workDirs: string[]; + preview: DeletePreview; + scope: DeleteScope; deleteWorkDirs: boolean; } @@ -391,10 +406,8 @@ const pendingDelete = ref(null); async function askDelete(p: Project) { error.value = ""; try { - const workDirs = await invoke("project_work_dirs", { - project: p.id, - }); - pendingDelete.value = { id: p.id, name: p.name, workDirs, deleteWorkDirs: false }; + const preview = await invoke("delete_preview", { project: p.id }); + pendingDelete.value = { id: p.id, preview, scope: "integration", deleteWorkDirs: false }; } catch (e) { error.value = String(e); } @@ -403,9 +416,10 @@ async function askDelete(p: Project) { async function confirmDelete() { const d = pendingDelete.value!; try { - await invoke("delete_project", { + await invoke("delete_project_scoped", { project: d.id, - deleteWorkDirs: d.deleteWorkDirs, + scope: d.scope, + deleteWorkDirs: d.scope === "full" && d.deleteWorkDirs, }); pendingDelete.value = null; await refresh(); @@ -415,19 +429,6 @@ async function confirmDelete() { } } -// Nur den Registry-Eintrag entfernen; der Ordner bleibt. -async function unlinkProject() { - const d = pendingDelete.value!; - try { - await invoke("remove_project", { project: d.id }); - pendingDelete.value = null; - await refresh(); - } catch (e) { - error.value = String(e); - pendingDelete.value = null; - } -} - let timer: number; onMounted(() => { refresh(); @@ -447,6 +448,7 @@ onUnmounted(() => window.clearInterval(timer));

{{ error }}

+
@@ -516,6 +518,7 @@ onUnmounted(() => window.clearInterval(timer));
+
@@ -619,30 +622,76 @@ onUnmounted(() => window.clearInterval(timer));
-

{{ $t("projects.deleteTitle", { name: pendingDelete.name }) }}

-

{{ $t("projects.deleteWarning", { name: pendingDelete.name }) }}

- -

{{ $t("projects.unlinkHint") }}

+

{{ $t("projects.deleteTitle", { name: pendingDelete.preview.name }) }}

+ + + + + + +

{{ $t("projects.deletePreviewTitle") }}

+
    +
  • {{ $t("projects.artRegistry") }}
  • +
  • {{ $t("projects.artAiControl") }}
  • +
  • {{ $t("projects.artArchivePerm") }}
  • +
  • {{ $t("projects.artTodoHook") }}
  • +
  • + {{ $t("projects.artPanelFiles", pendingDelete.preview.panelFiles) }} +
  • +
  • {{ $t("projects.artDesktop") }}
  • +
  • + {{ $t("projects.artArchive", { path: pendingDelete.preview.archiveHome }) }} + ({{ $t("projects.docCount", pendingDelete.preview.archiveDocs) }}) +
  • +
  • + {{ $t("projects.artProjectDir", { path: pendingDelete.preview.projectDir }) }} +
  • + +
+
-
@@ -784,6 +833,39 @@ onUnmounted(() => window.clearInterval(timer));