64 lines
2.4 KiB
JavaScript
64 lines
2.4 KiB
JavaScript
import { ATTACHMENTS_RUNTIME_DESCRIPTION } from "../../prompts/prompts.js";
|
|
/**
|
|
* Attachments Runtime Provider
|
|
*
|
|
* OPTIONAL provider that provides file access APIs to sandboxed code.
|
|
* Only needed when attachments are present.
|
|
* Attachments are read-only snapshot data - no messaging needed.
|
|
*/
|
|
export class AttachmentsRuntimeProvider {
|
|
constructor(attachments) {
|
|
this.attachments = attachments;
|
|
}
|
|
getData() {
|
|
const attachmentsData = this.attachments.map((a) => ({
|
|
id: a.id,
|
|
fileName: a.fileName,
|
|
mimeType: a.mimeType,
|
|
size: a.size,
|
|
content: a.content,
|
|
extractedText: a.extractedText,
|
|
}));
|
|
return { attachments: attachmentsData };
|
|
}
|
|
getRuntime() {
|
|
// This function will be stringified, so no external references!
|
|
// These functions read directly from window.attachments
|
|
// Works both online AND offline (no messaging needed!)
|
|
return (_sandboxId) => {
|
|
window.listAttachments = () => (window.attachments || []).map((a) => ({
|
|
id: a.id,
|
|
fileName: a.fileName,
|
|
mimeType: a.mimeType,
|
|
size: a.size,
|
|
}));
|
|
window.readTextAttachment = (attachmentId) => {
|
|
const a = (window.attachments || []).find((x) => x.id === attachmentId);
|
|
if (!a)
|
|
throw new Error("Attachment not found: " + attachmentId);
|
|
if (a.extractedText)
|
|
return a.extractedText;
|
|
try {
|
|
return atob(a.content);
|
|
}
|
|
catch {
|
|
throw new Error("Failed to decode text content for: " + attachmentId);
|
|
}
|
|
};
|
|
window.readBinaryAttachment = (attachmentId) => {
|
|
const a = (window.attachments || []).find((x) => x.id === attachmentId);
|
|
if (!a)
|
|
throw new Error("Attachment not found: " + attachmentId);
|
|
const bin = atob(a.content);
|
|
const bytes = new Uint8Array(bin.length);
|
|
for (let i = 0; i < bin.length; i++)
|
|
bytes[i] = bin.charCodeAt(i);
|
|
return bytes;
|
|
};
|
|
};
|
|
}
|
|
getDescription() {
|
|
return ATTACHMENTS_RUNTIME_DESCRIPTION;
|
|
}
|
|
}
|
|
//# sourceMappingURL=AttachmentsRuntimeProvider.js.map
|