Chuyển tới nội dung chính

API Tệp OPFS

@grant CAT.agent.opfs

API tệp OPFS (Origin Private File System) cho phép script đọc và ghi tệp trong không gian làm việc của Agent. Tất cả đường dẫn đều tương đối so với thư mục agents/workspace/.

write — ghi tệp

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

Tham số:

Tham sốKiểuMô tả
pathstringĐường dẫn tệp (bắt buộc); hỗ trợ thư mục lồng nhau
contentstring | BlobNội dung tệp

Các định dạng content được hỗ trợ:

Định dạngMô tả
Chuỗi văn bản thuầnLưu dưới dạng tệp văn bản UTF-8
Chuỗi Data URLTự động giải mã và lưu dưới dạng nhị phân (ví dụ: data:image/png;base64,...)
Đối tượng BlobDữ liệu nhị phân được lưu trực tiếp

Trả về WriteResult:

TrườngKiểuMô tả
pathstringĐường dẫn nơi tệp đã được lưu
sizenumberKích thước tệp (byte)
// Ghi tệp văn bản
await CAT.agent.opfs.write("data/config.json", JSON.stringify({ key: "value" }));

// Ghi tệp nhị phân (Data URL)
const canvas = document.createElement("canvas");
const dataUrl = canvas.toDataURL("image/png");
await CAT.agent.opfs.write("images/chart.png", dataUrl);

Các thư mục cha được tạo tự động nếu chưa tồn tại. Nếu tệp đã tồn tại, nội dung sẽ bị ghi đè.

read — đọc tệp

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

Tham số:

Tham sốKiểuMặc địnhMô tả
pathstringĐường dẫn tệp (bắt buộc)
format"text" | "blob""text"Định dạng đọc

Trả về ReadResult:

TrườngKiểuKhi cóMô tả
pathstringluônđường dẫn tệp
sizenumberluônKích thước tệp
contentstringformat="text"Nội dung văn bản của tệp
dataBlobformat="blob"Đối tượng Blob của tệp (được truyền qua sao chép có cấu trúc)
mimeTypestringformat="blob"Loại MIME được tự động phát hiện

Hai chế độ đọc:

// Chế độ văn bản — phù hợp cho tệp JSON và văn bản
const config = await CAT.agent.opfs.read("data/config.json");
const data = JSON.parse(config.content);

// Chế độ Blob — phù hợp cho hình ảnh và tệp nhị phân
const image = await CAT.agent.opfs.read("images/chart.png", "blob");
// image.data là đối tượng Blob thực (không phải URL blob: bị giới hạn scope)
// Tạo URL tạm thời bằng URL.createObjectURL(image.data) trong bất kỳ
// ngữ cảnh nào cần nó, hoặc truyền Blob trực tiếp cho bất kỳ API nào chấp nhận Blob

Tự động phát hiện loại MIME:

Phần mở rộngLoại 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
khácapplication/octet-stream

list — liệt kê thư mục

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

Tham số:

Tham sốKiểuMặc địnhMô tả
pathstring""Đường dẫn thư mục; chuỗi rỗng nghĩa là thư mục gốc

Trả về FileEntry[]:

TrườngKiểuMô tả
namestringTên tệp/thư mục
type"file" | "directory"Loại
sizenumberKích thước tệp (chỉ loại 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 — xóa tệp hoặc thư mục

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

Hỗ trợ xóa đệ quy thư mục và tất cả nội dung bên trong.

Trả về:

{ success: true }

readAttachment — đọc tệp đính kèm

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

Đọc dữ liệu tệp đính kèm (hình ảnh, tệp, v.v.) từ cuộc trò chuyện. ID tệp đính kèm đến từ ContentBlock.attachmentId trong tin nhắn.

Tham số:

Tham sốKiểuMô tả
attachmentIdstringID tệp đính kèm (bắt buộc)

Trả về:

TrườngKiểuMô tả
idstringID tệp đính kèm
dataBlobDữ liệu nhị phân tệp đính kèm
sizenumberKích thước tệp (byte)
mimeTypestringLoại MIME
// Đọc tệp đính kèm hình ảnh mà AI đã tạo trong cuộc trò chuyệ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(`Kích thước đính kèm: ${attachment.size}, loại: ${attachment.mimeType}`);
}

Làm việc với dữ liệu Blob

  • read(path, "blob") trả về đối tượng Blob thực được truyền qua sao chép có cấu trúc — không phải URL blob: bị giới hạn scope của tiện ích mở rộng, nên không có hạn chế truy cập liên ngữ cảnh
  • Để lấy URL tạm thời có thể sử dụng trong trang, gọi URL.createObjectURL(result.data); gọi URL.revokeObjectURL() khi hoàn thành
  • Bạn cũng có thể truyền Blob trực tiếp cho bất kỳ API web nào chấp nhận Blob/File (ví dụ: body của fetch, FormData.append, DataTransfer cho <input type="file">)