JuliusBrussee/caveman · error · Error
value is not JSON-serializable
Error message
value is not JSON-serializable
What it means
Error "value is not JSON-serializable" thrown in JuliusBrussee/caveman.
Source
Thrown at packages/sdk/typescript/src/index.ts:1940
const prefixHash = sha256Hex(prefixBytes);
const assemblyHeader = `v1;slots=${ordered.length};prefix=${prefixHash.slice(0, 12)};vbb=1`;
assemblyRequestHeaders.set(request, assemblyHeader);
return {
request,
headers: { "x-cave-assembly": assemblyHeader },
prefixHash,
breakpoints,
stableTokens: Math.ceil(new TextEncoder().encode(prefixBytes).length / 4),
tokenBasis: "estimated_bytes_div_4",
basis: "inferred",
volatileBelowBreakpoint: true
};
}
function canonicalJSON(value: unknown): string {
const raw = JSON.stringify(value);
if (raw === undefined) throw new Error("value is not JSON-serializable");
return stableStringify(JSON.parse(raw));
}
function cloneCanonical(value: unknown): unknown {
return JSON.parse(canonicalJSON(value)) as unknown;
}
function assemblyText(value: unknown): string {
return typeof value === "string" ? value : canonicalJSON(value);
}
async function cavePlan(cave: Cave): Promise<CavePlan> {
// `/sdk/v1/cave-plan` is a gateway-owned project-key route. `controlURL` is
// reserved for control-api `/api/v1/*` surfaces and must never redirect this
// call to a route that service does not expose.
const response = await caveFetch(cave, `${cave.options.baseURL}/sdk/v1/cave-plan`, {
method: "GET",
headers: otlpHeaders(cave)View on GitHub (pinned to 27d5a3981a)
Solutions
- Pass a JSON-serializable value (no functions, symbols, or cyclic structures).
When it happens
Trigger: Thrown at packages/sdk/typescript/src/index.ts:1940 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of JuliusBrussee/caveman@27d5a3981a (2026-08-15).
Data as JSON: /api/errors/59d5bd171cc58c6e.
Report an issue: GitHub.