/** * buildCacheSubflow — the per-turn prompt-cache decision, as ONE subflow. * * Collapses the cache machinery into a single `sf-cache` boundary so the * agent chart reads cleanly (one "Cache" box you can drill into) while the * execution tree stays honest: * * decideCacheMarkers → CacheGate (decider) → ApplyMarkers / SkipCaching * * Layering (see src/cache/types.ts): * - This subflow is the provider-AGNOSTIC DECISION layer — it only computes * and gates provider-neutral `CacheMarker[]`. It knows nothing about any * provider. * - The provider-SPECIFIC MECHANISM (Anthropic `cache_control`, OpenAI * automatic, …) is the attached provider's `CacheStrategy`, selected by * `provider.name`, applied later when the request is built. * * Why `UpdateSkillHistory` is NOT in here: the `skillHistory` rolling window * must persist across loop iterations. Keeping `UpdateSkillHistory` in the * main loop (just before this subflow) lets `skillHistory` live in the parent * scope without round-tripping through this subflow's in/out mappers — the * subflow stays pure (reads the turn's state, writes only `cacheMarkers`). * * Deps-free: every input (`activeInjections`, `iteration`, `skillHistory`, * `recentHitRate`, `systemPromptCachePolicy`, …) is supplied by the PARENT's * `inputMapper` at the mount site; the output is just `cacheMarkers`. */ import { type FlowChart } from 'footprintjs'; /** * Build the `sf-cache` subflow chart. Called by `buildAgentChart` and * `buildDynamicAgentChart` and mounted via `addSubFlowChartNext( * SUBFLOW_IDS.CACHE, buildCacheSubflow(), 'Cache', { inputMapper, * outputMapper, arrayMerge: Replace })`. */ export declare function buildCacheSubflow(): FlowChart;