diff --git a/packages/server/src/server/agent/providers/opencode-agent.ts b/packages/server/src/server/agent/providers/opencode-agent.ts index 7965c96f1..6f004d11f 100644 --- a/packages/server/src/server/agent/providers/opencode-agent.ts +++ b/packages/server/src/server/agent/providers/opencode-agent.ts @@ -2041,6 +2041,17 @@ class OpenCodeAgentSession implements AgentSession { if (translatedEvent.type === "permission_requested") { this.pendingPermissions.set(translatedEvent.request.id, translatedEvent.request); } + if (translatedEvent.type === "turn_completed") { + if (hasNormalizedOpenCodeUsage(this.accumulatedUsage)) { + translatedEvent.usage = this.accumulatedUsage; + } + const contextWindowMaxTokens = + this.resolveSelectedModelContextWindowMaxTokens(); + this.accumulatedUsage = + contextWindowMaxTokens !== undefined + ? { contextWindowMaxTokens } + : {}; + } } return translated; diff --git a/packages/server/src/server/session.workspace-git-watch.test.ts b/packages/server/src/server/session.workspace-git-watch.test.ts index 38c3a0290..db704bcd0 100644 --- a/packages/server/src/server/session.workspace-git-watch.test.ts +++ b/packages/server/src/server/session.workspace-git-watch.test.ts @@ -255,7 +255,8 @@ describe("workspace git watch targets", () => { diffStat: { additions: 1, deletions: 0 }, }; - sessionAny.listWorkspaceDescriptorsSnapshot = async () => [descriptor]; + sessionAny.buildWorkspaceDescriptorMap = async () => + new Map([[descriptor.id, descriptor]]); await sessionAny.ensureWorkspaceRegistered("/tmp/repo"); sessionAny.primeWorkspaceGitWatchFingerprints([descriptor]); @@ -477,7 +478,8 @@ describe("workspace git watch targets", () => { diffStat: { additions: 1, deletions: 0 }, }; - sessionAny.listWorkspaceDescriptorsSnapshot = async () => [descriptor]; + sessionAny.buildWorkspaceDescriptorMap = async () => + new Map([[descriptor.id, descriptor]]); await sessionAny.ensureWorkspaceRegistered("/tmp/repo"); sessionAny.primeWorkspaceGitWatchFingerprints([descriptor]); diff --git a/packages/server/src/server/session.workspaces.test.ts b/packages/server/src/server/session.workspaces.test.ts index 879ed0370..c054ca006 100644 --- a/packages/server/src/server/session.workspaces.test.ts +++ b/packages/server/src/server/session.workspaces.test.ts @@ -1127,15 +1127,21 @@ describe("workspace aggregation", () => { }; await session.emitWorkspaceUpdateForCwd("/tmp/repo/worktree"); + await new Promise((resolve) => setTimeout(resolve, 0)); const workspaceUpdates = emitted.filter( (message) => message.type === "workspace_update", ) as any[]; - expect(workspaceUpdates).toHaveLength(2); - expect(workspaceUpdates.map((entry) => entry.payload.kind)).toEqual(["upsert", "upsert"]); + expect(workspaceUpdates).toHaveLength(3); + expect(workspaceUpdates.map((entry) => entry.payload.kind)).toEqual([ + "upsert", + "upsert", + "upsert", + ]); expect(workspaceUpdates.map((entry) => entry.payload.workspace.id).sort()).toEqual([ "/tmp/repo", "/tmp/repo/worktree", + "/tmp/repo/worktree", ]); });