Ana içeriğe geç

OPFS Dosya API'si

@grant CAT.agent.opfs

OPFS (Origin Private File System) dosya API'si, bir betiğin Agent çalışma alanındaki dosyaları okumasını ve yazmasını sağlar. Tüm yollar agents/workspace/ dizinine göredir.

write — bir dosya yaz

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

Parametreler:

ParametreTürAçıklama
pathstringDosya yolu (zorunlu); iç içe dizinleri destekler
contentstring | BlobDosya içeriği

Desteklenen content biçimleri:

BiçimAçıklama
Düz dizeUTF-8 metin dosyası olarak kaydedilir
Veri URL'si dizesiOtomatik olarak çözülür ve ikili olarak kaydedilir (örn. data:image/png;base64,...)
Blob nesnesiDoğrudan kaydedilen ikili veri

WriteResult döndürür:

AlanTürAçıklama
pathstringDosyanın kaydedildiği yol
sizenumberDosya boyutu (bayt)
// Bir metin dosyası yaz
await CAT.agent.opfs.write("data/config.json", JSON.stringify({ key: "value" }));

// Bir ikili dosya yaz (veri URL'si)
const canvas = document.createElement("canvas");
const dataUrl = canvas.toDataURL("image/png");
await CAT.agent.opfs.write("images/chart.png", dataUrl);

Üst dizinler yoksa otomatik olarak oluşturulur. Dosya zaten varsa içeriği üzerine yazılır.

read — bir dosyayı oku

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

Parametreler:

ParametreTürVarsayılanAçıklama
pathstringDosya yolu (zorunlu)
format"text" | "blob""text"Okuma biçimi

ReadResult döndürür:

AlanTürNe zaman varAçıklama
pathstringher zamandosya yolu
sizenumberher zamanDosya boyutu
contentstringformat="text"Dosya metin içeriği
dataBlobformat="blob"Dosyanın Blob nesnesi (yapılandırılmış klonlama ile aktarılır)
mimeTypestringformat="blob"Otomatik algılanan MIME türü

İki okuma modu:

// Metin modu — JSON ve metin dosyaları için uygundur
const config = await CAT.agent.opfs.read("data/config.json");
const data = JSON.parse(config.content);

// Blob modu — görseller ve ikili dosyalar için uygundur
const image = await CAT.agent.opfs.read("images/chart.png", "blob");
// image.data gerçek bir Blob nesnesidir (kapsam kısıtlı bir blob: URL değil)
// İhtiyaç duyan herhangi bir bağlamda URL.createObjectURL(image.data)
// ile yerel bir URL oluşturun veya Blob'u kabul eden herhangi bir API'ye doğrudan verin

Otomatik MIME türü algılama:

UzantıMIME türü
.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
diğerapplication/octet-stream

list — bir dizini listele

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

Parametreler:

ParametreTürVarsayılanAçıklama
pathstring""Dizin yolu; boş bir dize kök dizin anlamına gelir

FileEntry[] döndürür:

AlanTürAçıklama
namestringDosya/dizin adı
type"file" | "directory"Tür
sizenumberDosya boyutu (yalnızca file türü)
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 — bir dosyayı veya dizini sil

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

Bir dizini ve içindeki her şeyi yinelemeli olarak silmeyi destekler.

Döndürür:

{ success: true }

readAttachment — bir eki oku

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

Bir sohbetten ek verilerini (görseller, dosyalar vb.) okur. Ek kimliği, bir mesajdaki ContentBlock.attachmentId değerinden gelir.

Parametreler:

ParametreTürAçıklama
attachmentIdstringEk kimliği (zorunlu)

Döndürür:

AlanTürAçıklama
idstringEk kimliği
dataBlobEk ikili verisi
sizenumberDosya boyutu (bayt)
mimeTypestringMIME türü
// AI'nın bir sohbette oluşturduğu bir görüntü ekini oku
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 verileriyle çalışma

  • read(path, "blob"), yapılandırılmış klonlama ile aktarılan gerçek bir Blob nesnesi döndürür — eklentinin kaynağına kapsamlanmış bir blob: URL değil, bu nedenle bağlamlar arası erişim kısıtlaması konusunda endişelenmenize gerek yoktur
  • Bir sayfada kullanılabilir geçici bir URL almak için URL.createObjectURL(result.data) çağrısı yapın; işiniz bittiğinde URL.revokeObjectURL() çağrısı yapın
  • Blob'u kabul eden herhangi bir Web API'sine de doğrudan iletebilirsiniz (örn. fetch'in body değeri, FormData.append, <input type="file"> için bir DataTransfer)