Passa al contenuto principale

API File OPFS

@grant CAT.agent.opfs

L'API file OPFS (Origin Private File System) permette a uno script di leggere e scrivere file nello spazio di lavoro di Agent. Tutti i percorsi sono relativi alla directory agents/workspace/.

write — scrivere un file

const result = await CAT.agent.opfs.write(path, content);

Parametri:

ParametroTipoDescrizione
pathstringPercorso del file (obbligatorio); supporta directory annidate
contentstring | BlobContenuto del file

Formati content supportati:

FormatoDescrizione
Stringa di testo puroSalvato come file di testo UTF-8
Stringa Data URLDecodificato automaticamente e salvato come binario (es. data:image/png;base64,...)
Oggetto BlobDati binari salvati direttamente

Restituisce WriteResult:

CampoTipoDescrizione
pathstringPercorso dove il file è stato salvato
sizenumberDimensione del file (byte)
// Scrivere un file di testo
await CAT.agent.opfs.write("data/config.json", JSON.stringify({ key: "value" }));

// Scrivere un file binario (Data URL)
const canvas = document.createElement("canvas");
const dataUrl = canvas.toDataURL("image/png");
await CAT.agent.opfs.write("images/chart.png", dataUrl);

Le directory padre vengono create automaticamente se non esistono. Se il file esiste già, il suo contenuto viene sovrascritto.

read — leggere un file

const result = await CAT.agent.opfs.read(path, format?);

Parametri:

ParametroTipoPredefinitoDescrizione
pathstringPercorso del file (obbligatorio)
format"text" | "blob""text"Formato di lettura

Restituisce ReadResult:

CampoTipoQuando presenteDescrizione
pathstringsemprepercorso del file
sizenumbersempreDimensione del file
contentstringformat="text"Contenuto testuale del file
dataBlobformat="blob"L'oggetto Blob del file (trasferito tramite clonazione strutturata)
mimeTypestringformat="blob"Tipo MIME rilevato automaticamente

Due modalità di lettura:

// Modalità testo — adatta per file JSON e di testo
const config = await CAT.agent.opfs.read("data/config.json");
const data = JSON.parse(config.content);

// Modalità Blob — adatta per immagini e file binari
const image = await CAT.agent.opfs.read("images/chart.png", "blob");
// image.data è un vero oggetto Blob (non una URL blob: limitata allo scope)
// Crea una URL locale con URL.createObjectURL(image.data) in qualsiasi
// contesto ne abbia bisogno, oppure passa il Blob direttamente a qualsiasi API che lo accetti

Rilevamento automatico del tipo MIME:

EstensioneTipo MIME
.jpg / .jpegimage/jpeg
.pngimage/png
.gifimage/gif
.webpimage/webp
.svgimage/svg+xml
.mp3audio/mpeg
.wavaudio/wav
.mp4video/mp4
.pdfapplication/pdf
.jsonapplication/json
.txttext/plain
.htmltext/html
.csstext/css
.jsapplication/javascript
altroapplication/octet-stream

list — elencare una directory

const entries = await CAT.agent.opfs.list(path?);

Parametri:

ParametroTipoPredefinitoDescrizione
pathstring""Percorso della directory; una stringa vuota significa la directory radice

Restituisce FileEntry[]:

CampoTipoDescrizione
namestringNome del file/directory
type"file" | "directory"Tipo
sizenumberDimensione del file (solo tipo file)
const entries = await CAT.agent.opfs.list("data/");
for (const entry of entries) {
if (entry.type === "file") {
console.log(`${entry.name} (${entry.size} byte)`);
} else {
console.log(`${entry.name}/`);
}
}

delete — eliminare un file o directory

const result = await CAT.agent.opfs.delete(path);

Supporta l'eliminazione ricorsiva di una directory e di tutto il suo contenuto.

Restituisce:

{ success: true }

readAttachment — leggere un allegato

const result = await CAT.agent.opfs.readAttachment(attachmentId);

Legge i dati degli allegati (immagini, file, ecc.) da una conversazione. L'ID dell'allegato proviene da ContentBlock.attachmentId in un messaggio.

Parametri:

ParametroTipoDescrizione
attachmentIdstringID dell'allegato (obbligatorio)

Restituisce:

CampoTipoDescrizione
idstringID dell'allegato
dataBlobDati binari dell'allegato
sizenumberDimensione del file (byte)
mimeTypestringTipo MIME
// Leggere un allegato immagine che l'AI ha generato in una conversazione
const messages = await conv.getMessages();
const lastMsg = messages[messages.length - 1];
const imageBlock = lastMsg.content.find(b => b.type === "image");
if (imageBlock) {
const attachment = await CAT.agent.opfs.readAttachment(imageBlock.attachmentId);
console.log(`Dimensione allegato: ${attachment.size}, tipo: ${attachment.mimeType}`);
}

Lavorare con dati Blob

  • read(path, "blob") restituisce un vero oggetto Blob trasferito tramite clonazione strutturata — non è un URL blob: limitato allo scope dell'estensione, quindi non ci sono restrizioni di accesso tra contesti
  • Per ottenere un URL temporaneo utilizzabile in una pagina, chiamare URL.createObjectURL(result.data); chiamare URL.revokeObjectURL() quando si è finito
  • È possibile passare il Blob direttamente a qualsiasi API Web che accetti un Blob/File (ad es. il body di fetch, FormData.append, un DataTransfer per <input type="file">)