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:
@@ -138,6 +138,105 @@ class ListRecentInput(BaseModel):
|
||||
mode: str = Field("opened", description="'opened' (history) or 'modified'")
|
||||
|
||||
|
||||
# ── D. Mutations ───────────────────────────────────────────────────────────
|
||||
|
||||
|
||||
class CreateFileInput(BaseModel):
|
||||
"""Create a new text file in a vault."""
|
||||
|
||||
vault: str = Field(..., description="Vault name")
|
||||
path: str = Field(..., description="Vault-relative path of the new file")
|
||||
content: str = Field("", description="Initial file content")
|
||||
|
||||
|
||||
class CreateDirectoryInput(BaseModel):
|
||||
"""Create a new directory in a vault."""
|
||||
|
||||
vault: str = Field(..., description="Vault name")
|
||||
path: str = Field(..., description="Vault-relative path of the new directory")
|
||||
|
||||
|
||||
class EditFileInput(BaseModel):
|
||||
"""Overwrite the full content of an existing file."""
|
||||
|
||||
vault: str = Field(..., description="Vault name")
|
||||
path: str = Field(..., description="Vault-relative file path")
|
||||
content: str = Field(..., description="New full content of the file")
|
||||
|
||||
|
||||
class AppendToFileInput(BaseModel):
|
||||
"""Append text to the end of an existing file."""
|
||||
|
||||
vault: str = Field(..., description="Vault name")
|
||||
path: str = Field(..., description="Vault-relative file path")
|
||||
content: str = Field(..., description="Text to append")
|
||||
|
||||
|
||||
class RenameFileInput(BaseModel):
|
||||
"""Rename a file in place (same parent directory)."""
|
||||
|
||||
vault: str = Field(..., description="Vault name")
|
||||
path: str = Field(..., description="Current vault-relative file path")
|
||||
new_name: str = Field(..., description="New file name (no directory separator)")
|
||||
|
||||
|
||||
class RenameDirectoryInput(BaseModel):
|
||||
"""Rename a directory in place (same parent directory)."""
|
||||
|
||||
vault: str = Field(..., description="Vault name")
|
||||
path: str = Field(..., description="Current vault-relative directory path")
|
||||
new_name: str = Field(..., description="New directory name (no directory separator)")
|
||||
|
||||
|
||||
class MovePathInput(BaseModel):
|
||||
"""Move a file or directory to another directory within the same vault."""
|
||||
|
||||
vault: str = Field(..., description="Vault name")
|
||||
source_path: str = Field(..., description="Current vault-relative path of the file/directory")
|
||||
destination_dir: str = Field("", description="Target directory path (empty = vault root)")
|
||||
|
||||
|
||||
class ReplaceInFilesInput(BaseModel):
|
||||
"""Find and replace text across vault files (destructive, dry-run by default)."""
|
||||
|
||||
find: str = Field(..., min_length=1, description="Text or pattern to search for")
|
||||
replace: str = Field("", description="Replacement text")
|
||||
vault: str = Field("all", description="Vault name or 'all'")
|
||||
case_sensitive: bool = Field(False, description="Match case")
|
||||
whole_word: bool = Field(False, description="Match whole words only")
|
||||
regex: bool = Field(False, description="Treat 'find' as a regular expression")
|
||||
include_paths: str | None = Field(None, description="Comma-separated glob patterns to include")
|
||||
exclude_paths: str | None = Field(None, description="Comma-separated glob patterns to exclude")
|
||||
replace_all: bool = Field(False, description="Apply the replacement (otherwise only preview)")
|
||||
dry_run: bool | None = Field(
|
||||
None,
|
||||
description="Preview matches without writing. Defaults to the opposite of replace_all.",
|
||||
)
|
||||
|
||||
|
||||
class DeleteFileInput(BaseModel):
|
||||
"""Delete a file from a vault (destructive)."""
|
||||
|
||||
vault: str = Field(..., description="Vault name")
|
||||
path: str = Field(..., description="Vault-relative file path")
|
||||
|
||||
|
||||
class DeleteDirectoryInput(BaseModel):
|
||||
"""Delete a directory from a vault (destructive)."""
|
||||
|
||||
vault: str = Field(..., description="Vault name")
|
||||
path: str = Field(..., description="Vault-relative directory path")
|
||||
recursive: bool = Field(True, description="Delete non-empty directories recursively")
|
||||
|
||||
|
||||
class RestoreBackupInput(BaseModel):
|
||||
"""Restore a file from one of its backup versions."""
|
||||
|
||||
vault: str = Field(..., description="Vault name")
|
||||
path: str = Field(..., description="Vault-relative file path")
|
||||
version: int = Field(..., description="Backup timestamp to restore")
|
||||
|
||||
|
||||
class ToolResult(BaseModel):
|
||||
"""Uniform result returned by :func:`backend.tools.registry.call_tool`."""
|
||||
|
||||
|
||||
Reference in New Issue
Block a user