{"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../src/cache/policy.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC;AAErE,eAAO,MAAM,iBAAiB,EAAE,SAAS,UAAU,EAAwD,CAAC;AAE5G,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAEvD,MAAM,WAAW,UAAU;IAC1B,KAAK,EAAE,UAAU,CAAC;IAClB,iEAAiE;IACjE,KAAK,EAAE,MAAM,CAAC;IACd,wEAAwE;IACxE,UAAU,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC3B,SAAS,EAAE,cAAc,CAAC;IAC1B,6EAA6E;IAC7E,mBAAmB,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,cAAc;IAC9B,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,MAAM,EAAE,WAAW,CAAC;CACpB;AAED,wBAAgB,aAAa,IAAI,WAAW,CAE3C;AAGD,MAAM,WAAW,gBAAgB;IAChC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,MAAM,CAAC;CAC5B;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,gBAAgB,GAAG,MAAM,CAE5D;AAGD,MAAM,WAAW,uBAAuB;IACvC,WAAW,EAAE,cAAc,CAAC;IAC5B,+DAA+D;IAC/D,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB;uDACmD;IACnD,oBAAoB,CAAC,EAAE,cAAc,CAAC;CACtC;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,uBAAuB,GAAG,cAAc,CAI7E;AAED,+EAA+E;AAC/E,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAyBzD;AAGD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,GAAG,gBAAgB,CAMjE","sourcesContent":["// T-001: CachePolicy shape + layered breakpoint ordering contract.\n// T-003: Single breakpoint per layer, layer isolation invariant.\nimport type { Usage } from \"../types.js\";\n\nexport type CacheLayer = \"tools\" | \"system\" | \"project\" | \"messages\";\n\nexport const CACHE_LAYER_ORDER: readonly CacheLayer[] = [\"tools\", \"system\", \"project\", \"messages\"] as const;\n\nexport type CacheRetention = \"long\" | \"short\" | \"none\";\n\nexport interface LayerBlock {\n\tlayer: CacheLayer;\n\t/** Canonical UTF-8 bytes that form the layer's stable prefix. */\n\tbytes: string;\n\t/** At most one breakpoint per layer on breakpoint-capable providers. */\n\tbreakpoint?: boolean;\n}\n\nexport interface CachePolicy {\n\tretention: CacheRetention;\n\t/** If true, the provider supports explicit breakpoints (Anthropic-style). */\n\tsupportsBreakpoints: boolean;\n}\n\nexport interface LayeredPayload {\n\tlayers: LayerBlock[];\n\tpolicy: CachePolicy;\n}\n\nexport function defaultPolicy(): CachePolicy {\n\treturn { retention: \"short\", supportsBreakpoints: false };\n}\n\n// T-044, T-046: unified token-usage shape exposed by every adapter.\nexport interface CacheUsageReport {\n\tcachedInputTokens: number;\n\tcacheWriteTokens: number;\n\tuncachedInputTokens: number;\n}\n\nexport function totalInputTokens(u: CacheUsageReport): number {\n\treturn u.cachedInputTokens + u.uncachedInputTokens;\n}\n\n// T-047, T-048, T-049: per-call retention resolution.\nexport interface RetentionResolveContext {\n\troleDefault: CacheRetention;\n\t/** CLI flag --cache=long|short|none overrides role default. */\n\tcliFlag?: CacheRetention;\n\t/** CaveKit phase override takes precedence over role default but\n\t *  is still overridden by an explicit CLI flag. */\n\tcavekitPhaseOverride?: CacheRetention;\n}\n\nexport function resolveRetention(ctx: RetentionResolveContext): CacheRetention {\n\tif (ctx.cliFlag) return ctx.cliFlag;\n\tif (ctx.cavekitPhaseOverride) return ctx.cavekitPhaseOverride;\n\treturn ctx.roleDefault;\n}\n\n/** Enforce R1: at most one breakpoint per layer, layers in canonical order. */\nexport function validateLayers(layers: LayerBlock[]): void {\n\tconst seen = new Set<CacheLayer>();\n\tfor (const block of layers) {\n\t\tif (seen.has(block.layer)) {\n\t\t\tthrow new Error(`cache: duplicate layer ${block.layer}`);\n\t\t}\n\t\tseen.add(block.layer);\n\t}\n\tconst order = layers.map((l) => CACHE_LAYER_ORDER.indexOf(l.layer));\n\tfor (let i = 1; i < order.length; i++) {\n\t\tif (order[i] < order[i - 1]) {\n\t\t\tthrow new Error(`cache: layers out of canonical order: ${layers.map((l) => l.layer).join(\",\")}`);\n\t\t}\n\t}\n\tconst breakpointsPerLayer = new Map<CacheLayer, number>();\n\tfor (const block of layers) {\n\t\tif (block.breakpoint) {\n\t\t\tbreakpointsPerLayer.set(block.layer, (breakpointsPerLayer.get(block.layer) ?? 0) + 1);\n\t\t}\n\t}\n\tfor (const [layer, count] of breakpointsPerLayer) {\n\t\tif (count > 1) {\n\t\t\tthrow new Error(`cache: layer ${layer} has ${count} breakpoints, max 1`);\n\t\t}\n\t}\n}\n\n// T-041/T-042: convert provider Usage to CacheUsageReport.\nexport function usageToCacheReport(usage: Usage): CacheUsageReport {\n\treturn {\n\t\tcachedInputTokens: usage.cacheRead,\n\t\tcacheWriteTokens: usage.cacheWrite,\n\t\tuncachedInputTokens: Math.max(0, usage.input),\n\t};\n}\n"]}