メインコンテンツまでスキップ

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テキストファイルとして保存
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タイプ

2つの読み込みモード:

// テキストモード — 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} バイト)`);
} 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から取得します。

パラメータ:

パラメータ説明
attachmentIdstring添付ファイルID(必須)

返り値:

フィールド説明
idstring添付ファイルID
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オブジェクトを返します — 拡張機能のオリジンにスコープされたblob: URLではないため、クロスコンテキストアクセス制限を気にする必要はありません
  • ページで使用できる一時URLを取得するには、URL.createObjectURL(result.data)を呼び出し、使用完了後にURL.revokeObjectURL()を呼び出します
  • Blobを直接Blob/Fileを受け取るWeb APIに渡すこともできます(例:fetchbodyFormData.append<input type="file">DataTransfer