diff options
| author | opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com> | 2026-03-03 03:53:50 +0000 |
|---|---|---|
| committer | opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com> | 2026-03-03 03:53:50 +0000 |
| commit | e41b53504f193de3e6799836e53c7400952a4d2c (patch) | |
| tree | c0013d8be04610b5b57cd1e14a99a13d4a923904 | |
| parent | 96d6fb78da2b75806ffd94ec87c913c412db8896 (diff) | |
| download | opencode-e41b53504f193de3e6799836e53c7400952a4d2c.tar.gz opencode-e41b53504f193de3e6799836e53c7400952a4d2c.zip | |
chore: generate
| -rw-r--r-- | packages/opencode/src/provider/provider.ts | 9 | ||||
| -rw-r--r-- | packages/opencode/test/session/session.test.ts | 128 |
2 files changed, 72 insertions, 65 deletions
diff --git a/packages/opencode/src/provider/provider.ts b/packages/opencode/src/provider/provider.ts index b480a91ea..817038365 100644 --- a/packages/opencode/src/provider/provider.ts +++ b/packages/opencode/src/provider/provider.ts @@ -557,8 +557,11 @@ export namespace Provider { const metadata = iife(() => { if (input.options?.metadata) return input.options.metadata - try { return JSON.parse(input.options?.headers?.["cf-aig-metadata"]) } - catch { return undefined } + try { + return JSON.parse(input.options?.headers?.["cf-aig-metadata"]) + } catch { + return undefined + } }) const opts = { metadata, @@ -572,7 +575,7 @@ export namespace Provider { accountId, gateway, apiKey: apiToken, - ...(Object.values(opts).some(v => v !== undefined) ? { options: opts } : {}), + ...(Object.values(opts).some((v) => v !== undefined) ? { options: opts } : {}), }) const unified = createUnified() diff --git a/packages/opencode/test/session/session.test.ts b/packages/opencode/test/session/session.test.ts index 2de94ee7e..aa9ca05d0 100644 --- a/packages/opencode/test/session/session.test.ts +++ b/packages/opencode/test/session/session.test.ts @@ -73,66 +73,70 @@ describe("session.started event", () => { }) describe("step-finish token propagation via Bus event", () => { - test("non-zero tokens propagate through PartUpdated event", async () => { - await Instance.provide({ - directory: projectRoot, - fn: async () => { - const session = await Session.create({}) - - const messageID = Identifier.ascending("message") - await Session.updateMessage({ - id: messageID, - sessionID: session.id, - role: "user", - time: { created: Date.now() }, - agent: "user", - model: { providerID: "test", modelID: "test" }, - tools: {}, - mode: "", - } as unknown as MessageV2.Info) - - let received: MessageV2.Part | undefined - const unsub = Bus.subscribe(MessageV2.Event.PartUpdated, (event) => { - received = event.properties.part - }) - - const tokens = { - total: 1500, - input: 500, - output: 800, - reasoning: 200, - cache: { read: 100, write: 50 }, - } - - const partInput = { - id: Identifier.ascending("part"), - messageID, - sessionID: session.id, - type: "step-finish" as const, - reason: "stop", - cost: 0.005, - tokens, - } - - await Session.updatePart(partInput) - - await new Promise((resolve) => setTimeout(resolve, 100)) - - expect(received).toBeDefined() - expect(received!.type).toBe("step-finish") - const finish = received as MessageV2.StepFinishPart - expect(finish.tokens.input).toBe(500) - expect(finish.tokens.output).toBe(800) - expect(finish.tokens.reasoning).toBe(200) - expect(finish.tokens.total).toBe(1500) - expect(finish.tokens.cache.read).toBe(100) - expect(finish.tokens.cache.write).toBe(50) - expect(finish.cost).toBe(0.005) - expect(received).not.toBe(partInput) - - unsub() - await Session.remove(session.id) - }, - }) - }, { timeout: 30000 }) + test( + "non-zero tokens propagate through PartUpdated event", + async () => { + await Instance.provide({ + directory: projectRoot, + fn: async () => { + const session = await Session.create({}) + + const messageID = Identifier.ascending("message") + await Session.updateMessage({ + id: messageID, + sessionID: session.id, + role: "user", + time: { created: Date.now() }, + agent: "user", + model: { providerID: "test", modelID: "test" }, + tools: {}, + mode: "", + } as unknown as MessageV2.Info) + + let received: MessageV2.Part | undefined + const unsub = Bus.subscribe(MessageV2.Event.PartUpdated, (event) => { + received = event.properties.part + }) + + const tokens = { + total: 1500, + input: 500, + output: 800, + reasoning: 200, + cache: { read: 100, write: 50 }, + } + + const partInput = { + id: Identifier.ascending("part"), + messageID, + sessionID: session.id, + type: "step-finish" as const, + reason: "stop", + cost: 0.005, + tokens, + } + + await Session.updatePart(partInput) + + await new Promise((resolve) => setTimeout(resolve, 100)) + + expect(received).toBeDefined() + expect(received!.type).toBe("step-finish") + const finish = received as MessageV2.StepFinishPart + expect(finish.tokens.input).toBe(500) + expect(finish.tokens.output).toBe(800) + expect(finish.tokens.reasoning).toBe(200) + expect(finish.tokens.total).toBe(1500) + expect(finish.tokens.cache.read).toBe(100) + expect(finish.tokens.cache.write).toBe(50) + expect(finish.cost).toBe(0.005) + expect(received).not.toBe(partInput) + + unsub() + await Session.remove(session.id) + }, + }) + }, + { timeout: 30000 }, + ) }) |
