{"version":3,"file":"layers.d.ts","sourceRoot":"","sources":["../../src/cache/layers.ts"],"names":[],"mappings":"AAEA,OAAO,EAEN,KAAK,UAAU,EACf,KAAK,WAAW,EAEhB,KAAK,cAAc,EAEnB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAwB,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAE7E,MAAM,WAAW,aAAa;IAC7B,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,EAAE,WAAW,CAAC;CACpB;AAED;uEACuE;AACvE,wBAAgB,eAAe,CAAC,KAAK,EAAE,aAAa,GAAG,cAAc,CA2BpE;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,UAAU,GAAG,MAAM,CAG7E;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,UAAU,GAAG,MAAM,CAE5E;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,cAAc,GAAG,UAAU,EAAE,CAEnE;AAED,wBAAgB,cAAc,IAAI,SAAS,UAAU,EAAE,CAEtD","sourcesContent":["// T-002: Assemble tools/system/project/messages layers in strict order.\nimport { createHash } from \"node:crypto\";\nimport {\n\tCACHE_LAYER_ORDER,\n\ttype CacheLayer,\n\ttype CachePolicy,\n\ttype LayerBlock,\n\ttype LayeredPayload,\n\tvalidateLayers,\n} from \"./policy.js\";\nimport { serializeToolSchemas, type ToolSchema } from \"./tool-serializer.js\";\n\nexport interface AssembleInput {\n\ttools: ToolSchema[];\n\tsystem: string;\n\tproject?: string;\n\tmessages: string[];\n\tpolicy: CachePolicy;\n}\n\n/** Produce the canonical 4-layer payload. Non-breakpoint providers\n *  still receive the same 4 blocks (just without breakpoint flags). */\nexport function assembleLayered(input: AssembleInput): LayeredPayload {\n\tconst layers: LayerBlock[] = [];\n\tlayers.push({\n\t\tlayer: \"tools\",\n\t\tbytes: serializeToolSchemas(input.tools),\n\t\tbreakpoint: input.policy.supportsBreakpoints,\n\t});\n\tlayers.push({\n\t\tlayer: \"system\",\n\t\tbytes: input.system,\n\t\tbreakpoint: input.policy.supportsBreakpoints,\n\t});\n\tif (input.project !== undefined) {\n\t\tlayers.push({\n\t\t\tlayer: \"project\",\n\t\t\tbytes: input.project,\n\t\t\tbreakpoint: input.policy.supportsBreakpoints,\n\t\t});\n\t}\n\tlayers.push({\n\t\tlayer: \"messages\",\n\t\tbytes: JSON.stringify(input.messages),\n\t\t// messages layer: one breakpoint at the tail on breakpoint providers\n\t\tbreakpoint: input.policy.supportsBreakpoints,\n\t});\n\tvalidateLayers(layers);\n\treturn { layers, policy: input.policy };\n}\n\nexport function layerBytes(payload: LayeredPayload, layer: CacheLayer): string {\n\tconst block = payload.layers.find((l) => l.layer === layer);\n\treturn block ? block.bytes : \"\";\n}\n\nexport function layerHash(payload: LayeredPayload, layer: CacheLayer): string {\n\treturn createHash(\"sha256\").update(layerBytes(payload, layer)).digest(\"hex\");\n}\n\nexport function layersInOrder(payload: LayeredPayload): CacheLayer[] {\n\treturn payload.layers.map((l) => l.layer);\n}\n\nexport function canonicalOrder(): readonly CacheLayer[] {\n\treturn CACHE_LAYER_ORDER;\n}\n"]}