Перейти к основному содержимому

API файлов OPFS

@grant CAT.agent.opfs

API файлов OPFS (Origin Private File System) позволяет скрипту читать и записывать файлы в рабочем пространстве Agent. Все пути относительны к каталогу agents/workspace/.

write — записать файл

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

Параметры:

ПараметрТипОписание
pathstringПуть к файлу (обязательно); поддерживаются вложенные каталоги
contentstring | BlobСодержимое файла

Поддерживаемые форматы content:

ФорматОписание
Обычная строкаСохраняется как текстовый файл UTF-8
Строка data URLАвтоматически декодируется и сохраняется как бинарные данные (например, data:image/png;base64,...)
Объект BlobСохраняется напрямую как бинарные данные

Возвращаемое значение, WriteResult:

ПолеТипОписание
pathstringПуть, по которому сохранён файл
sizenumberРазмер файла в байтах
// Write a text file
await CAT.agent.opfs.write("data/config.json", JSON.stringify({ key: "value" }));

// Write a binary file (data URL)
const canvas = document.createElement("canvas");
const dataUrl = canvas.toDataURL("image/png");
await CAT.agent.opfs.write("images/chart.png", dataUrl);

Если родительские каталоги в пути не существуют, они создаются автоматически. Если файл уже существует, его содержимое перезаписывается.

read — прочитать файл

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

Параметры:

ПараметрТипПо умолчаниюОписание
pathstringПуть к файлу (обязательно)
format"text" | "bloburl""text"Формат чтения

Возвращаемое значение, ReadResult:

ПолеТипУсловиеОписание
pathstringВсегдаПуть к файлу
sizenumberВсегдаРазмер файла
contentstringformat="text"Текстовое содержимое файла
blobUrlstringformat="bloburl"Blob URL
mimeTypestringformat="bloburl"MIME-тип

Два режима чтения:

// Text mode — good for JSON and text files
const config = await CAT.agent.opfs.read("data/config.json");
const data = JSON.parse(config.content);

// Blob URL mode — good for images and binary files
const image = await CAT.agent.opfs.read("images/chart.png", "bloburl");
// image.blobUrl = "blob:chrome-extension://xxx/yyy"
// This URL can be used inside an executeScript call in the ISOLATED world

Автоматически распознаваемые MIME-типы:

Расширение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
Другоеapplication/octet-stream

list — список каталога

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

Параметры:

ПараметрТипПо умолчаниюОписание
pathstring""Путь к каталогу; пустая строка означает корневой каталог

Возвращаемое значение, FileEntry[]:

ПолеТипОписание
namestringИмя файла/каталога
type"file" | "directory"Тип
sizenumberРазмер файла (только для типа 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 — удалить файл или каталог

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

Поддерживает рекурсивное удаление каталога и всего его содержимого.

Возвращаемое значение:

{ success: true }

readAttachment — прочитать вложение

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

Читает данные вложений (изображения, файлы и т.д.) из диалога. ID вложения берётся из ContentBlock.attachmentId в сообщении.

Параметры:

ПараметрТипОписание
attachmentIdstringID вложения (обязательно)

Возвращаемое значение:

ПолеТипОписание
idstringID вложения
dataBlobБинарные данные вложения
sizenumberРазмер файла в байтах
mimeTypestringMIME-тип
// Read an image attachment generated by the AI in a conversation
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(`Attachment size: ${attachment.size}, type: ${attachment.mimeType}`);
}

Замечания по использованию Blob URL

  • Blob URL имеют вид blob:chrome-extension://xxx/yyy
  • Можно использовать только в мире ISOLATED (окружение executeScript по умолчанию)
  • Blob URL расширения недоступны из мира MAIN (окружение страницы)
  • Время жизни blob URL привязано к сессии расширения
// Correct: use the blob URL in the ISOLATED world
const img = await CAT.agent.opfs.read("images/photo.png", "bloburl");
await CAT.agent.dom.executeScript(`
const img = document.createElement("img");
img.src = "${img.blobUrl}";
document.body.appendChild(img);
`, { world: "ISOLATED" });

// Wrong: not accessible from the MAIN world
await CAT.agent.dom.executeScript(`
fetch("${img.blobUrl}") // this will fail!
`, { world: "MAIN" });