feat(ai): catalogue d'outils mutations + confirmations two-step (#79 phase D)
CI / lint (push) Successful in 59s
CI / security (push) Successful in 45s
CI / test (push) Successful in 1m22s
CI / build (push) Successful in 37s
CI / e2e (push) Successful in 10m37s
Desktop Build / build-windows (push) Canceled after 0s
Desktop Build / build-linux (push) Canceled after 0s
CI / lint (push) Successful in 59s
CI / security (push) Successful in 45s
CI / test (push) Successful in 1m22s
CI / build (push) Successful in 37s
CI / e2e (push) Successful in 10m37s
Desktop Build / build-windows (push) Canceled after 0s
Desktop Build / build-linux (push) Canceled after 0s
This commit is contained in:
@@ -139,6 +139,27 @@ class ToolContext:
|
||||
details={"vault": vault},
|
||||
)
|
||||
|
||||
def destructive_tools_enabled(self, vault: str) -> bool:
|
||||
"""Return whether destructive tools are allowed for *vault*.
|
||||
|
||||
Controlled by the per-vault ``aiDestructiveTools`` setting (default:
|
||||
enabled). Disabling it blocks delete/rename/move/find-replace tools
|
||||
while keeping create/edit/append available.
|
||||
"""
|
||||
from backend.vault_settings import get_vault_setting
|
||||
|
||||
settings = get_vault_setting(vault) or {}
|
||||
return bool(settings.get("aiDestructiveTools", True))
|
||||
|
||||
def require_destructive_allowed(self, vault: str) -> None:
|
||||
"""Raise :class:`ToolPermissionError` if destructive tools are disabled."""
|
||||
if not self.destructive_tools_enabled(vault):
|
||||
raise ToolPermissionError(
|
||||
f"Destructive tools are disabled for vault '{vault}'",
|
||||
code="destructive_tools_disabled",
|
||||
details={"vault": vault},
|
||||
)
|
||||
|
||||
|
||||
def resolve_safe_path(vault_root: Path, relative_path: str | None) -> Path:
|
||||
"""Resolve a vault-relative path, rejecting traversal outside the vault.
|
||||
|
||||
Reference in New Issue
Block a user