Saltar al contenido principal

API de Archivos OPFS

@grant CAT.agent.opfs

La API de archivos OPFS (Origin Private File System) permite a un script leer y escribir archivos en el espacio de trabajo de Agent. Todas las rutas son relativas al directorio agents/workspace/.

write — escribir un archivo

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

Parámetros:

ParámetroTipoDescripción
pathstringRuta del archivo (obligatoria); soporta directorios anidados
contentstring | BlobContenido del archivo

Formatos de content soportados:

FormatoDescripción
Cadena de texto planoGuardado como archivo de texto UTF-8
Cadena Data URLDecodificado automáticamente y guardado como binario (ej. data:image/png;base64,...)
Objeto BlobDatos binarios guardados directamente

Devuelve WriteResult:

CampoTipoDescripción
pathstringRuta donde se guardó el archivo
sizenumberTamaño del archivo (bytes)
// Escribir un archivo de texto
await CAT.agent.opfs.write("data/config.json", JSON.stringify({ key: "value" }));

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

Los directorios padre se crean automáticamente si no existen. Si el archivo ya existe, su contenido se sobrescribe.

read — leer un archivo

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

Parámetros:

ParámetroTipoPredeterminadoDescripción
pathstringRuta del archivo (obligatoria)
format"text" | "blob""text"Formato de lectura

Devuelve ReadResult:

CampoTipoCuando está presenteDescripción
pathstringsiempreruta del archivo
sizenumbersiempreTamaño del archivo
contentstringformat="text"Contenido de texto del archivo
dataBlobformat="blob"El objeto Blob del archivo (transferido por clonación estructurada)
mimeTypestringformat="blob"Tipo MIME detectado automáticamente

Dos modos de lectura:

// Modo texto — adecuado para archivos JSON y de texto
const config = await CAT.agent.opfs.read("data/config.json");
const data = JSON.parse(config.content);

// Modo Blob — adecuado para imágenes y archivos binarios
const image = await CAT.agent.opfs.read("images/chart.png", "blob");
// image.data es un objeto Blob real (no una URL blob: restringida por ámbito)
// Cree una URL local con URL.createObjectURL(image.data) en cualquier
// contexto que la necesite, o pase el Blob directamente a cualquier API que lo acepte

Detección automática de tipo MIME:

ExtensiónTipo 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
otroapplication/octet-stream

list — listar un directorio

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

Parámetros:

ParámetroTipoPredeterminadoDescripción
pathstring""Ruta del directorio; una cadena vacía significa el directorio raíz

Devuelve FileEntry[]:

CampoTipoDescripción
namestringNombre del archivo/directorio
type"file" | "directory"Tipo
sizenumberTamaño del archivo (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} bytes)`);
} else {
console.log(`${entry.name}/`);
}
}

delete — eliminar un archivo o directorio

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

Soporta eliminación recursiva de un directorio y todo su contenido.

Devuelve:

{ success: true }

readAttachment — leer un archivo adjunto

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

Lee datos de archivos adjuntos (imágenes, archivos, etc.) de una conversación. El ID del archivo adjunto proviene de ContentBlock.attachmentId en un mensaje.

Parámetros:

ParámetroTipoDescripción
attachmentIdstringID del archivo adjunto (obligatorio)

Devuelve:

CampoTipoDescripción
idstringID del archivo adjunto
dataBlobDatos binarios del archivo adjunto
sizenumberTamaño del archivo (bytes)
mimeTypestringTipo MIME
// Leer un archivo adjunto de imagen que la IA generó en una conversación
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(`Tamaño del adjunto: ${attachment.size}, tipo: ${attachment.mimeType}`);
}

Trabajar con datos Blob

  • read(path, "blob") devuelve un objeto Blob real transferido por clonación estructurada — no es una URL blob: restringida al ámbito de la extensión, por lo que no hay restricciones de acceso entre contextos
  • Para obtener una URL temporal usable en una página, llame a URL.createObjectURL(result.data); llame a URL.revokeObjectURL() cuando termine
  • También puede pasar el Blob directamente a cualquier API web que acepte un Blob/File (por ejemplo, el body de fetch, FormData.append, un DataTransfer para <input type="file">)