إنتقل إلى المحتوى الرئيسي

واجهة برمجة ملفات OPFS

@grant CAT.agent.opfs

تتيح واجهة برمجة ملفات 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: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" | "blob""text"صيغة القراءة

يرجع ReadResult:

الحقلالنوعحاضر عندماالوصف
pathstringدائماًمسار الملف
sizenumberدائماًحجم الملف
contentstringformat="text"محتوى الملف النصي
dataBlobformat="blob"كائن Blob للملف (منقول عبر clone مهيكل)
mimeTypestringformat="blob"نوع MIME المكتشف تلقائياً

وضعا القراءة:

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

// Blob mode — suited to images and binary files
const image = await CAT.agent.opfs.read("images/chart.png", "blob");
// image.data is a real Blob object (not a scope-restricted blob: URL)
// Create a local URL with URL.createObjectURL(image.data) in whatever
// context needs it, or hand the Blob directly to any API that accepts one

الكشف التلقائي عن نوع 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);

يقرأ بيانات المرفق (صور، ملفات، إلخ) من حوار. يأتي معرف المرفق من ContentBlock.attachmentId في رسالة.

المعلمات:

المعاملالنوعالوصف
attachmentIdstringمعرف المرفق (إلزامي)

يرجع:

الحقلالنوعالوصف
idstringمعرف المرفق
dataBlobالبيانات الثنائية للمرفق
sizenumberحجم الملف (بايت)
mimeTypestringنوع MIME
// Read an image attachment the AI generated 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

  • read(path, "blob") يرجع كائن Blob حقيقياً منقولاً عبر clone مهيكل — وليس رابط blob: مقيداً بأصل الإضافة، فلا توجد قيود وصول بين السياقات للقلق بشأنها
  • للحصول على رابط مؤقت قابل للاستخدام في صفحة، اتصل بـ URL.createObjectURL(result.data)؛ اتصل بـ URL.revokeObjectURL() عندما تنتهي منه
  • يمكنك أيضاً تمرير Blob مباشرة إلى أي واجهة برمجة ويب تقبل Blob/File (مثل body في fetch, FormData.append, DataTransfer لـ <input type="file">)