{"record":{"id":"4340f999e1464cf4","repo":"JuliusBrussee/caveman","slug":"cave-context-body-missing-tool-definition-name","errorCode":null,"errorMessage":"cave_context_body_missing:tool.${definition.name}","messagePattern":"cave_context_body_missing:tool\\.(.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/agent/src/runtime.ts","lineNumber":3817,"sourceCode":"\nfunction validatedToolSchemaBytes(output: Uint8Array, segmentID: string): Uint8Array {\n  const parsed = JSON.parse(new TextDecoder().decode(output)) as unknown;\n  if (!isRecord(parsed) || typeof parsed.name !== \"string\" ||\n      typeof parsed.description !== \"string\" || !isRecord(parsed.input)) {\n    throw new Error(`tool_schema_transform_invalid:${segmentID}`);\n  }\n  return output;\n}\n\nfunction providerToolDefinition(\n  definition: ToolDefinition,\n  lowered: LoweredContext,\n  appliedPlan: AppliedPlan,\n): { description: string; input: TSchema } {\n  const segment = lowered.ir.segments.find((item) => item.id === `tool.${definition.name}`);\n  if (!segment) throw new Error(`cave_context_segment_missing:tool.${definition.name}`);\n  const body = appliedPlan.bodies.get(segment.bodyHandle);\n  if (!body) throw new Error(`cave_context_body_missing:tool.${definition.name}`);\n  const parsed = JSON.parse(new TextDecoder().decode(body)) as unknown;\n  if (!isRecord(parsed) || parsed.name !== definition.name ||\n      typeof parsed.description !== \"string\" || !isRecord(parsed.input)) {\n    throw new Error(`cave_tool_schema_invalid:${definition.name}`);\n  }\n  return { description: parsed.description, input: parsed.input as TSchema };\n}\n\nfunction admitSubagent(state: InvocationState): () => void {\n  const ledger = state.ledger;\n  if (ledger.maxInvocations !== undefined && ledger.admitted >= ledger.maxInvocations) {\n    ledger.invocationRejections++;\n    throw new Error(\"cave_subagent_invocation_limit\");\n  }\n  if (ledger.maxConcurrent !== undefined && ledger.active >= ledger.maxConcurrent) {\n    ledger.concurrencyRejections++;\n    throw new Error(\"cave_subagent_concurrency_limit\");\n  }","sourceCodeStart":3799,"sourceCodeEnd":3835,"githubUrl":"https://github.com/JuliusBrussee/caveman/blob/27d5a3981a347890211bb1bf2439e5c821a63bc9/packages/agent/src/runtime.ts#L3799-L3835","documentation":"Error \"cave_context_body_missing:tool.${definition.name}\" thrown in JuliusBrussee/caveman.","triggerScenarios":"Thrown at packages/agent/src/runtime.ts:3817 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["The context body for the named tool is missing; ensure the tool schema body is materialized before assembly."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"27d5a3981a347890211bb1bf2439e5c821a63bc9","analyzedAt":"2026-08-15T09:26:11.751Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}