// ─── 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\nREPLACE:\n" }, 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"], }, }, }, ];