thedotmack/claude-mem · info
claude-mem: banner frame decoding failed, skipping banner:
Error message
claude-mem: banner frame decoding failed, skipping banner:
What it means
A console.warn from the npx CLI's banner player: inflateRawSync over the base64-embedded BANNER payload threw. The banner is purely decorative, so the code deliberately fails open — frames becomes [] and playBanner() skips the animation instead of breaking the CLI. Seeing this warning means the published bundle's embedded frames are corrupted or the zlib/base64 layer mismatched.
Source
Thrown at src/npx-cli/banner.ts:38
if (!truecolor) return '\x1b[38;5;215m';
const r = Math.min(255, Math.round(255 * brightness));
const g = Math.min(255, Math.round(180 * brightness));
const b = Math.min(255, Math.round(122 * brightness));
return `\x1b[38;2;${r};${g};${b}m`;
}
let frames: string[] | null = null;
function getFrames(): string[] {
if (frames) return frames;
// Banner is decorative — if frame payload decoding fails for any reason
// (corrupted bundle, mismatched zlib, etc.) we must not break the CLI.
// Fail open by returning an empty frame list; playBanner() bails on empty.
try {
const raw = inflateRawSync(Buffer.from(BANNER.compressed, 'base64')).toString('utf8');
frames = raw.split(FRAME_SEP).filter(Boolean);
} catch (error) {
const err = error instanceof Error ? error : new Error(String(error));
console.warn('claude-mem: banner frame decoding failed, skipping banner:', err);
frames = [];
}
return frames;
}
/** One character of a parsed frame plus whether it sits inside an accent span. */
export interface FrameCell {
ch: string;
accent: boolean;
}
/**
* Parse a raw span-marked frame (`<x>…</x>` accent markers, `\n` row
* separators) into per-character cells carrying an accent flag. Span state
* carries across newlines, matching the original single-pass styling.
*/
export function parseFrameCells(frame: string): FrameCell[][] {
const rows: FrameCell[][] = [[]];View on GitHub (pinned to 8bc631a71a)
Solutions
- Ignore it — cosmetic only, all CLI commands still run
- Clear the npm cache and reinstall (npm cache clean --force; npx claude-mem@latest …) to get a clean bundle
- If it persists on every machine, report a packaging bug — the embedded BANNER payload is malformed in that release
Defensive patterns
Strategy: fallback
Prevention
- No action needed — the CLI already fails open and skips the banner
- Clear npm cache and reinstall if the warning repeats, to rule out a truncated package
- Report persistent occurrences upstream so the release's embedded BANNER payload gets fixed
When it happens
Trigger: A corrupted or partially-downloaded package in the npm cache (truncated base64 payload); a bundling change that altered BANNER.compressed between encode and decode; manual tampering with the bundle.
Common situations: Flaky network producing a truncated package tarball; using a forked/rebundled claude-mem where the banner asset pipeline changed; disk corruption in ~/.npm/_cacche. Functionality is unaffected apart from the animation.
AI-assisted analysis of thedotmack/claude-mem@8bc631a71a (2026-08-20).
Data as JSON: /api/errors/d3232d9d9eda385f.
Report an issue: GitHub.