স্কিপ করে মূল কন্টেন্ট এ যান

OPFS ফাইল API

@grant CAT.agent.opfs

OPFS (Origin Private File System) ফাইল API একটি স্ক্রিপ্টকে Agent ওয়ার্কস্পেসে ফাইল পড়তে ও লিখতে দেয়। সমস্ত পথ agents/workspace/ ডিরেক্টরির সাপেক্ষে।

write — একটি ফাইল লিখুন

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

প্যারামিটার:

প্যারামিটারধরনবর্ণনা
pathstringফাইলের পথ (প্রয়োজনীয়); নেস্টেড ডিরেক্টরি সমর্থন করে
contentstring | Blobফাইলের বিষয়বস্তু

সমর্থিত content ফরম্যাট:

ফরম্যাটবর্ণনা
সাধারণ স্ট্রিংUTF-8 টেক্সট ফাইল হিসাবে সংরক্ষিত
ডেটা URL স্ট্রিংস্বয়ংক্রিয়ভাবে ডিকোড হয়ে বাইনারি হিসাবে সংরক্ষিত (যেমন data:image/png;base64,...)
Blob অবজেক্টবাইনারি ডেটা সরাসরি সংরক্ষিত

WriteResult ফিরিয়ে দেয়:

ফিল্ডধরনবর্ণনা
pathstringফাইলটি যে পথে সংরক্ষিত হয়েছে
sizenumberফাইলের আকার (বাইট)
// একটি টেক্সট ফাইল লিখুন
await CAT.agent.opfs.write("data/config.json", JSON.stringify({ key: "value" }));

// একটি বাইনারি ফাইল লিখুন (ডেটা 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 অবজেক্ট (structured clone-এর মাধ্যমে স্থানান্তরিত)
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.createObjectURL(image.data) দিয়ে একটি লোকাল URL তৈরি করুন,
// অথবা 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);

একটি কথোপকথন থেকে সংযুক্তি ডেটা (ছবি, ফাইল ইত্যাদি) পড়ে। সংযুক্তি আইডি একটি বার্তায় ContentBlock.attachmentId থেকে আসে।

প্যারামিটার:

প্যারামিটারধরনবর্ণনা
attachmentIdstringসংযুক্তি আইডি (প্রয়োজনীয়)

ফিরিয়ে দেয়:

ফিল্ডধরনবর্ণনা
idstringসংযুক্তি আইডি
dataBlobসংযুক্তি বাইনারি ডেটা
sizenumberফাইলের আকার (বাইট)
mimeTypestringMIME ধরন
// কথোপকথনে 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.mimeType}`);
}

Blob ডেটার সাথে কাজ

  • read(path, "blob") একটি প্রকৃত Blob অবজেক্ট ফিরিয়ে দেয় যা structured clone-এর মাধ্যমে স্থানান্তরিত হয় — এক্সটেনশনের উৎসে সীমাবদ্ধ blob: URL নয়, তাই নিয়ে চিন্তা করার কোনো ক্রস-প্রসঙ্গ অ্যাক্সেস সীমাবদ্ধতা নেই
  • একটি পৃষ্ঠায় ব্যবহারযোগ্য অস্থায়ী URL পেতে, URL.createObjectURL(result.data) কল করুন; কাজ শেষ হলে URL.revokeObjectURL() কল করুন
  • আপনি Blob-টি সরাসরি যেকোনো Web API-তে দিতে পারেন যা একটি Blob/File গ্রহণ করে (যেমন fetch-এর body, FormData.append, <input type="file">-এর জন্য একটি DataTransfer)