/** * Executor result cache. * * Caches successful executor results to disk to avoid redundant API calls. * Cache key v9 = sha256(model + system + prompt + cwd + allowedSkills + executor + * runtime + mocks + mocksStrict + effort + artifactContentHash + * sampleExecutionDependencyHash). * Loaded into memory on init, flushed to disk on save(). * * Prefix bumps intentionally invalidate old entries when construct-validity * dimensions enter the key: * - v2: allowedSkills / strict isolation * - v3: executor name * - v4: executor runtime fingerprint * - v5: effort(同 model/prompt 不同 effort 的输出本就该独立 cache,旧 cache 命中会让 * 报告 meta 标的 effort 跟实际跑的 effort 不一致 — 测量可比性污染); * 同时 cache.set 不再砍 turns / toolCalls — 工具类断言 + diagnostic 要看 trace, * 砍掉的话 cached rerun 会让工具断言为空、diagnostic 没真实证据,跟 cold run 不一致 * - v6: artifact 内容指纹(contentHash)。`system` 只含 SKILL.md 正文,但本地 dir-skill 的 * references/ 资产是真实运行时输入(cwd=skillRoot,agent 可读),改资产只动 contentHash、 * 不动 system → 旧 key 会命中旧输出、贴到新 artifactHashes 上,形成静默测量污染。把 * contentHash 纳入 key,资产变即重跑。git skill 的 contentHash 只随 SKILL.md 变(其资产不 * 暴露给 executor、本就不该触发重跑),口径自洽 * - v7: executor 返回值进入统一契约校验,且所有未知成本路径显式记录 provenance。 * 旧缓存缺少这些语义,不能在新报告中继续复用。 * - v8: 所有 executor 的工具身份在统一边界归一化。旧缓存里的 provider-native * 工具名不能继续参与 source-neutral 工具断言与分布统计。 * - v9: sample mock 的 `return_file` 内容指纹进入 key。只哈声明路径会在 fixture * 内容变化后错误复用旧执行结果。 */ import type { ExecutorCache } from '../types/index.js'; export declare function createCache(cacheDir: string): ExecutorCache; export declare function cacheKey(model: string, system: string, prompt: string, cwd?: string | null, allowedSkills?: string[], executor?: string, runtimeFingerprint?: string, /** Sample.mocks 序列化进 key:不同 mocks 配置必须独立 cache(否则改 mock 后老结果回来)。 * 传 undefined / [] 时为空串,跟"无 mock 跑"等价。 */ mocks?: unknown, /** Sample.mocksStrict 也进 key:strict on/off 行为不同,不能共享 cache。 */ mocksStrict?: boolean, /** Executor effort 也进 key:effort 'low'/'medium'/'high' 改变 LLM 思考预算, * 输出/工具调用/分数都可能不同,跨 effort 共享 cache 会让报告 meta 标的 effort * 跟实际生成的 effort 不一致,违反"两份报告比分数前先比 cliVersion / effort"语义。 */ effort?: string, /** artifact 内容指纹(整树 / 单文件哈)。本地 dir-skill 改 references/ 资产只动此值、不动 system, * 不进 key 会让改资产后命中旧输出 → 静默污染。空(baseline / 无 skill)等价无指纹。 */ artifactContentHash?: string, /** External sample files that can alter executor output, currently mock return_file fixtures. */ sampleExecutionDependencyHash?: string): string;