mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-01 17:26:12 +00:00
mac: bundle web chat assets
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
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
|
||||
Reference in New Issue
Block a user