paperclipai/paperclip · error
Unsupported storage response body.
Error message
Unsupported storage response body.
What it means
Transport-shape guard when reading an S3 response body: the returned body object exposes none of the recognized consumption interfaces (web stream, arrayBuffer, etc.), so the SDK response cannot be converted to a Buffer by any known strategy.
Solutions
- Retry; if it persists, check the storage backend configuration for the instance.
Defensive patterns
Strategy: fallback
When it happens
Trigger: Thrown at cli/src/commands/worktree.ts:347 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of paperclipai/paperclip@01ad858492 (2026-08-18).
Data as JSON: /api/errors/771b27994f73428e.
Report an issue: GitHub.
Appendix: source
Thrown at cli/src/commands/worktree.ts:380
transformToWebStream?: () => ReadableStream<Uint8Array>;
arrayBuffer?: () => Promise<ArrayBuffer>;
};
if (typeof candidate.transformToWebStream === "function") {
const webStream = candidate.transformToWebStream();
const reader = webStream.getReader();
const chunks: Uint8Array[] = [];
while (true) {
const { done, value } = await reader.read();
if (done) break;
if (value) chunks.push(value);
}
return Buffer.concat(chunks.map((chunk) => Buffer.from(chunk)));
}
if (typeof candidate.arrayBuffer === "function") {
return Buffer.from(await candidate.arrayBuffer());
}
throw new Error("Unsupported storage response body.");
}
function normalizeS3Prefix(prefix: string | undefined): string {
if (!prefix) return "";
return prefix.trim().replace(/^\/+/, "").replace(/\/+$/, "");
}
function buildS3ObjectKey(prefix: string, objectKey: string): string {
return prefix ? `${prefix}/${objectKey}` : objectKey;
}
const dynamicImport = new Function("specifier", "return import(specifier);") as (specifier: string) => Promise<any>;
function createConfiguredStorageFromPaperclipConfig(config: PaperclipConfig): ConfiguredStorage {
if (config.storage.provider === "local_disk") {
const baseDir = expandHomePrefix(config.storage.localDisk.baseDir);
return {
async getObject(companyId: string, objectKey: string) {View on GitHub (pinned to 01ad858492)