Перейти до основного вмісту

Файловий 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Розмір файлу (байти)
// Запис текстового файлу
await CAT.agent.opfs.write("data/config.json", JSON.stringify({ key: "value" }));

// Запис бінарного файлу (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" | "blob""text"Формат читання

Повертає ReadResult:

ПолеТипКоли присутнєОпис
pathstringзавждишлях до файлу
sizenumberзавждиРозмір файлу
contentstringformat="text"Текстовий вміст файлу
dataBlobformat="blob"Об'єкт Blob файлу (передається через структуроване клонування)
mimeTypestringformat="blob"Автоматично визначений тип MIME

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

// Текстовий режим — підходить для JSON і текстових файлів
const config = await CAT.agent.opfs.read("data/config.json");
const data = JSON.parse(config.content);

// Режим Blob — підходить для зображень і бінарних файлів
const image = await CAT.agent.opfs.read("images/chart.png", "blob");
// image.data — це справжній об'єкт Blob (не blob: URL з обмеженням області)
// Створіть локальний URL за допомогою URL.createObjectURL(image.data) у будь-якому
// контексті, якому він потрібен, або передайте Blob безпосередньо в будь-який API, що його приймає

Автоматичне визначення типу 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Розмір файлу (байти)
mimeTypestringТип MIME
// Читання зображення-вкладення, створеного AI у розмові
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

  • read(path, "blob") повертає справжній об'єкт Blob, переданий через структуроване клонування — не blob: URL з обмеженням походження розширення, тому немає обмежень доступу між контекстами
  • Щоб отримати тимчасовий URL, придатний для використання на сторінці, викличте URL.createObjectURL(result.data); коли закінчите, викличте URL.revokeObjectURL()
  • Ви також можете передати Blob безпосередньо в будь-який веб-API, який приймає Blob/File (напр. body у fetch, FormData.append, DataTransfer для <input type="file">)