summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAdam <[email protected]>2026-02-08 06:36:53 -0600
committerGitHub <[email protected]>2026-02-08 12:36:53 +0000
commit7c6b8d7a8a7180f330b83b736c46a62fb5f91258 (patch)
tree3b3a7ffa34518153402f7dbdc3491a14acac08f4
parent4187a5fe7fadcf52515ef491d61224ae9a01968b (diff)
downloadopencode-7c6b8d7a8a7180f330b83b736c46a62fb5f91258.tar.gz
opencode-7c6b8d7a8a7180f330b83b736c46a62fb5f91258.zip
fix(ui): context stale in prompt input (#12695)
-rw-r--r--packages/app/src/components/session/session-context-metrics.test.ts9
-rw-r--r--packages/app/src/components/session/session-context-metrics.ts14
2 files changed, 6 insertions, 17 deletions
diff --git a/packages/app/src/components/session/session-context-metrics.test.ts b/packages/app/src/components/session/session-context-metrics.test.ts
index 68903a455..e90df9a94 100644
--- a/packages/app/src/components/session/session-context-metrics.test.ts
+++ b/packages/app/src/components/session/session-context-metrics.test.ts
@@ -79,15 +79,16 @@ describe("getSessionContextMetrics", () => {
expect(metrics.context?.usage).toBeNull()
})
- test("memoizes by message and provider array identity", () => {
+ test("recomputes when message array is mutated in place", () => {
const messages = [assistant("a1", { input: 10, output: 10, reasoning: 10, read: 10, write: 10 }, 0.25)]
const providers = [{ id: "openai", models: {} }]
const one = getSessionContextMetrics(messages, providers)
+ messages.push(assistant("a2", { input: 100, output: 20, reasoning: 0, read: 0, write: 0 }, 0.75))
const two = getSessionContextMetrics(messages, providers)
- const three = getSessionContextMetrics([...messages], providers)
- expect(two).toBe(one)
- expect(three).not.toBe(one)
+ expect(one.context?.message.id).toBe("a1")
+ expect(two.context?.message.id).toBe("a2")
+ expect(two.totalCost).toBe(1)
})
})
diff --git a/packages/app/src/components/session/session-context-metrics.ts b/packages/app/src/components/session/session-context-metrics.ts
index 2b6edbd95..357205afb 100644
--- a/packages/app/src/components/session/session-context-metrics.ts
+++ b/packages/app/src/components/session/session-context-metrics.ts
@@ -34,8 +34,6 @@ type Metrics = {
context: Context | undefined
}
-const cache = new WeakMap<Message[], WeakMap<Provider[], Metrics>>()
-
const tokenTotal = (msg: AssistantMessage) => {
return msg.tokens.input + msg.tokens.output + msg.tokens.reasoning + msg.tokens.cache.read + msg.tokens.cache.write
}
@@ -80,15 +78,5 @@ const build = (messages: Message[], providers: Provider[]): Metrics => {
}
export function getSessionContextMetrics(messages: Message[], providers: Provider[]) {
- const byProvider = cache.get(messages)
- if (byProvider) {
- const hit = byProvider.get(providers)
- if (hit) return hit
- }
-
- const value = build(messages, providers)
- const next = byProvider ?? new WeakMap<Provider[], Metrics>()
- next.set(providers, value)
- if (!byProvider) cache.set(messages, next)
- return value
+ return build(messages, providers)
}