AUDIT / src /lib /agentLoop /toolDefs /toolDefsVFS.ts
Arypulka98's picture
feat(audit): deploy full backend cluster node (part 3)
95eb75a verified
Raw
History Blame Contribute Delete
9.52 kB
// ─── Virtual File System tools — write/read/iterate/patch/list/delete/move/copy/info/diff/append/batch/extract/write_files ───────────────────────────────────────────────────────────
// P3-4 split da toolDefinitions.ts — DO NOT edit toolDefinitions.ts directly
// Tools (14): write_file, read_file, iterate_file, apply_patch, list_files, delete_file, move_file, copy_file, file_info, file_diff, append_to_file, batch_file_op, extract_zip, write_files
import type { ChatCompletionTool } from "openai/resources/chat/completions";
export const VFS_TOOLS: (ChatCompletionTool | undefined)[] = [
{
type: "function",
function: {
name: "write_file",
description: "Scrivi un file nel filesystem virtuale persistente. File scaricabili dall'utente.",
parameters: { type: "object", properties: { path: { type: "string", description: "Percorso (es. /output/data.csv)" }, content: { type: "string", description: "Contenuto del file" }, mime_type: { type: "string", description: "MIME type opzionale" } }, required: ["path","content"] }
}
},
{
type: "function",
function: {
name: "read_file",
description: "Leggi un file dal filesystem virtuale. Per file grandi usa offset+limit per paginare (ogni chunk è max 8000 chars).",
parameters: { type: "object", properties: { path: { type: "string", description: "Percorso file" }, offset: { type: "number", description: "Char offset da cui iniziare la lettura (default: 0). Usa per paginare file grandi." }, limit: { type: "number", description: "Numero massimo di caratteri da leggere (default: 8000). Usa con offset per paginare." } }, required: ["path"] }
}
},
{
type: "function",
function: {
name: "iterate_file",
description: "Leggi un file che hai già creato, ricevi il contenuto corrente e le istruzioni di modifica, poi riscrivi la versione aggiornata con write_file. Usa dopo create_webpage o write_file per migliorare o correggere il codice in modo incrementale.",
parameters: {
type: "object",
properties: {
path: { type: "string", description: "Percorso del file nel VFS (es. /pages/app.html)" },
instruction: { type: "string", description: "Cosa modificare (es. 'aggiungi dark mode', 'correggi il calcolo alla riga 42')" }
},
required: ["path", "instruction"]
}
}
},
{
type: "function",
function: {
name: "apply_patch",
description: "Applica una patch diff a un file esistente nel VFS. Usa diff-match-patch per modificare solo le righe necessarie invece di riscrivere il file intero. Preferisci questo tool rispetto a write_file quando devi cambiare porzioni specifiche di un file già esistente.",
parameters: {
type: "object",
properties: {
path: { type: "string", description: "Path del file target nel VFS" },
patch: { type: "string", description: "Patch in formato unified diff (@@...@@) oppure stringa di testo da cercare+rimpiazzare nel formato: SEARCH:\n<testo da trovare>\nREPLACE:\n<testo sostituto>" },
mode: { type: "string", enum: ["diff", "search_replace"], description: "Modalità: 'diff' per unified diff, 'search_replace' per ricerca/sostituzione semplice (default: search_replace)" },
},
required: ["path", "patch"],
},
},
},
{
type: "function",
function: {
name: "list_files",
description: "Elenca i file nel filesystem virtuale (VFS). Usa path per filtrare per directory (es. '/test' mostra solo /test/*). Senza path elenca tutti i file.",
parameters: { type: "object", properties: { path: { type: "string", description: "Directory da esplorare (es. '/test', '/src', '/regression'). Opzionale — senza parametro elenca tutti i file." } } }
}
},
{
type: "function",
function: {
name: "delete_file",
description: "Cancella un file dal filesystem virtuale.",
parameters: { type: "object", properties: { path: { type: "string", description: "Percorso del file da cancellare" } }, required: ["path"] }
}
},
{
type: "function",
function: {
name: "move_file",
description: "Sposta o rinomina un file nel filesystem virtuale. Legge il file sorgente, lo scrive nella destinazione e cancella il sorgente. Usa per rinominare o riorganizzare file nel VFS.",
parameters: { type: "object", properties: { from: { type: "string", description: "Percorso sorgente (es. /draft/output.txt)" }, to: { type: "string", description: "Percorso destinazione (es. /final/result.txt)" } }, required: ["from","to"] }
}
},
{
type: "function",
function: {
name: "copy_file",
description: "Copia un file nel VFS da un percorso a un altro (non distruttivo — mantiene l'originale). Usa per duplicare file prima di modificarli.",
parameters: { type: "object", properties: { from: { type: "string", description: "Percorso sorgente" }, to: { type: "string", description: "Percorso destinazione" } }, required: ["from","to"] }
}
},
{
type: "function",
function: {
name: "file_info",
description: "Mostra metadati di un file nel VFS: dimensione, righe, parole, MIME type, encoding, numero di backup disponibili.",
parameters: { type: "object", properties: { path: { type: "string", description: "Percorso del file" } }, required: ["path"] }
}
},
{
type: "function",
function: {
name: "file_diff",
description: "Confronta due file nel VFS e mostra un diff unificato riga per riga. Usa per vedere le differenze tra versioni di un file.",
parameters: { type: "object", properties: { path_a: { type: "string", description: "Primo file (originale)" }, path_b: { type: "string", description: "Secondo file (modificato)" } }, required: ["path_a","path_b"] }
}
},
{
type: "function",
function: {
name: "append_to_file",
description: "Aggiunge contenuto in coda a un file esistente nel VFS (non sovrascrive). Se il file non esiste, lo crea.",
parameters: { type: "object", properties: { path: { type: "string", description: "Percorso file" }, content: { type: "string", description: "Contenuto da aggiungere" }, separator: { type: "string", description: "Separatore tra vecchio e nuovo contenuto (default: newline)" } }, required: ["path","content"] }
}
},
{
type: "function",
function: {
name: "batch_file_op",
description: "Operazioni bulk su file nel VFS con pattern regex: copia, rinomina, cancella, elenca file corrispondenti. Usa dry_run:true per vedere cosa farebbe prima di eseguire.",
parameters: { type: "object", properties: { operation: { type: "string", enum: ["copy","delete","rename","list_matches"], description: "Operazione da eseguire" }, pattern: { type: "string", description: "Pattern regex sui path dei file (es. '\\.test\\.ts$', '^/drafts/')" }, replacement: { type: "string", description: "Stringa di rimpiazzo (per copy/rename, accetta $1 dai gruppi regex)" }, paths: { type: "array", items: { type: "string" }, description: "Lista opzionale di path su cui limitare l'operazione" }, dry_run: { type: "boolean", description: "Se true mostra cosa farebbe senza applicare (default: false)" } }, required: ["operation","pattern"] }
}
},
{
type: "function",
function: {
name: "extract_zip",
description: "Estrae il contenuto di un archivio ZIP dal VFS nelle singole directory/file. Usa dopo create_zip o clone_url_to_vfs su archivi .zip.",
parameters: { type: "object", properties: { path: { type: "string", description: "Percorso del file .zip nel VFS" }, dest_dir: { type: "string", description: "Directory di destinazione (default: stessa directory del zip senza estensione)" } }, required: ["path"] }
}
},
{
type: "function",
function: {
name: "write_files",
description:
"Scrive più file nel VFS in modo ATOMICO (o tutti o nessuno). " +
"Usa invece di N chiamate write_file sequenziali quando devi fare un refactoring " +
"su più file: se un file fallisce, NESSUN file viene scritto (rollback automatico). " +
"Max 50 file per chiamata. Supporta op=write (crea/sovrascrivi) e op=delete.",
parameters: {
type: "object",
properties: {
patches: {
type: "array",
description: "Lista di operazioni file da applicare atomicamente.",
items: {
type: "object",
properties: {
op: { type: "string", enum: ["write", "delete"], description: "Operazione: write=crea/sovrascrivi, delete=elimina" },
path: { type: "string", description: "Path del file nel VFS (es. src/App.tsx)" },
content: { type: "string", description: "Contenuto del file (richiesto per op=write)" },
type: { type: "string", description: "MIME type (default: text/plain)" },
},
required: ["op", "path"],
},
},
},
required: ["patches"],
},
},
},
];