From 34ed5bb399980bb8b9392fd7eebb465180a98d6d Mon Sep 17 00:00:00 2001 From: Kit Langton Date: Fri, 24 Jul 2026 13:01:51 -0400 Subject: [PATCH] refactor(core): simplify prompt cache diagnostics --- .../src/session/prompt-cache-diagnostics.ts | 4 +-- .../test/prompt-cache-diagnostics.test.ts | 30 ++++--------------- 2 files changed, 8 insertions(+), 26 deletions(-) diff --git a/packages/core/src/session/prompt-cache-diagnostics.ts b/packages/core/src/session/prompt-cache-diagnostics.ts index 81397668c3..99ab54576a 100644 --- a/packages/core/src/session/prompt-cache-diagnostics.ts +++ b/packages/core/src/session/prompt-cache-diagnostics.ts @@ -1,7 +1,7 @@ export * as PromptCacheDiagnostics from "./prompt-cache-diagnostics" -import { createHash } from "node:crypto" import type { LLMRequest } from "@opencode-ai/ai" +import { Hash } from "@opencode-ai/util/hash" interface Entry { readonly label: string @@ -26,7 +26,7 @@ export type Comparison = readonly label: string } -const hash = (value: unknown) => createHash("sha256").update(JSON.stringify(value)).digest("hex").slice(0, 16) +const hash = (value: unknown) => Hash.sha256(JSON.stringify(value)).slice(0, 16) export function snapshot(request: LLMRequest): Snapshot { return { diff --git a/packages/core/test/prompt-cache-diagnostics.test.ts b/packages/core/test/prompt-cache-diagnostics.test.ts index 104878ca7a..4049c99465 100644 --- a/packages/core/test/prompt-cache-diagnostics.test.ts +++ b/packages/core/test/prompt-cache-diagnostics.test.ts @@ -16,6 +16,8 @@ const request = LLM.request({ prompt: "First", tools: [tool], }) +const compare = (current: LLMRequest) => + PromptCacheDiagnostics.compare(PromptCacheDiagnostics.snapshot(request), PromptCacheDiagnostics.snapshot(current)) describe("PromptCacheDiagnostics", () => { test("distinguishes initial and stable requests", () => { @@ -26,33 +28,18 @@ describe("PromptCacheDiagnostics", () => { test("recognizes append-only history", () => { const current = LLMRequest.update(request, { messages: [...request.messages, Message.assistant("Second")] }) - expect( - PromptCacheDiagnostics.compare( - PromptCacheDiagnostics.snapshot(request), - PromptCacheDiagnostics.snapshot(current), - ), - ).toEqual({ status: "append-only", previousMessages: 1, currentMessages: 2 }) + expect(compare(current)).toEqual({ status: "append-only", previousMessages: 1, currentMessages: 2 }) }) test("detects cache-sensitive setting changes", () => { const current = LLMRequest.update(request, { generation: GenerationOptions.make({ temperature: 0.5 }) }) - expect( - PromptCacheDiagnostics.compare( - PromptCacheDiagnostics.snapshot(request), - PromptCacheDiagnostics.snapshot(current), - ), - ).toEqual({ status: "changed", component: "settings", index: 0, label: "model settings" }) + expect(compare(current)).toEqual({ status: "changed", component: "settings", index: 0, label: "model settings" }) }) test("finds the first changed prefix component", () => { const changedTool = ToolDefinition.make({ ...tool, description: "Read one file" }) const current = LLMRequest.update(request, { tools: [changedTool] }) - expect( - PromptCacheDiagnostics.compare( - PromptCacheDiagnostics.snapshot(request), - PromptCacheDiagnostics.snapshot(current), - ), - ).toMatchObject({ status: "changed", component: "tools", index: 0, label: "read" }) + expect(compare(current)).toEqual({ status: "changed", component: "tools", index: 0, label: "read" }) }) test("treats appended tools as a prefix change", () => { @@ -62,11 +49,6 @@ describe("PromptCacheDiagnostics", () => { inputSchema: { type: "object", properties: {} }, }) const current = LLMRequest.update(request, { tools: [...request.tools, write] }) - expect( - PromptCacheDiagnostics.compare( - PromptCacheDiagnostics.snapshot(request), - PromptCacheDiagnostics.snapshot(current), - ), - ).toMatchObject({ status: "changed", component: "tools", index: 1, label: "write" }) + expect(compare(current)).toEqual({ status: "changed", component: "tools", index: 1, label: "write" }) }) })