summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authoropencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>2026-03-03 03:53:50 +0000
committeropencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>2026-03-03 03:53:50 +0000
commite41b53504f193de3e6799836e53c7400952a4d2c (patch)
treec0013d8be04610b5b57cd1e14a99a13d4a923904
parent96d6fb78da2b75806ffd94ec87c913c412db8896 (diff)
downloadopencode-e41b53504f193de3e6799836e53c7400952a4d2c.tar.gz
opencode-e41b53504f193de3e6799836e53c7400952a4d2c.zip
chore: generate
-rw-r--r--packages/opencode/src/provider/provider.ts9
-rw-r--r--packages/opencode/test/session/session.test.ts128
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 },
+ )
})