From 16a1fad9ad0c94f200d21c99c72fd5eb7f245811 Mon Sep 17 00:00:00 2001 From: neriousy Date: Fri, 6 Mar 2026 21:19:24 +0100 Subject: [PATCH 1/3] fix(opencode): touch session on manual summarize --- .../opencode/src/server/routes/session.ts | 1 + .../opencode/test/server/session-list.test.ts | 64 ++++++++++++++++++- 2 files changed, 64 insertions(+), 1 deletion(-) diff --git a/packages/opencode/src/server/routes/session.ts b/packages/opencode/src/server/routes/session.ts index 12938aeaba0..33b56083725 100644 --- a/packages/opencode/src/server/routes/session.ts +++ b/packages/opencode/src/server/routes/session.ts @@ -536,6 +536,7 @@ export const SessionRoutes = lazy(() => }, auto: body.auto, }) + await Session.touch(sessionID) await SessionPrompt.loop({ sessionID }) return c.json(true) }, diff --git a/packages/opencode/test/server/session-list.test.ts b/packages/opencode/test/server/session-list.test.ts index 675a89011f9..0e76b3af5f5 100644 --- a/packages/opencode/test/server/session-list.test.ts +++ b/packages/opencode/test/server/session-list.test.ts @@ -1,8 +1,11 @@ -import { describe, expect, test } from "bun:test" +import { describe, expect, spyOn, test } from "bun:test" import path from "path" import { Instance } from "../../src/project/instance" +import { Server } from "../../src/server/server" import { Session } from "../../src/session" +import { SessionPrompt } from "../../src/session/prompt" import { Log } from "../../src/util/log" +import { tmpdir } from "../fixture/fixture" const projectRoot = path.join(__dirname, "../..") Log.init({ print: false }) @@ -87,4 +90,63 @@ describe("Session.list", () => { }, }) }) + + test("manual summarize bumps updated time and reorders list", async () => { + await using tmp = await tmpdir({ git: true }) + const loop = spyOn(SessionPrompt, "loop").mockImplementation(async () => undefined as never) + + try { + const one = await Instance.provide({ + directory: tmp.path, + fn: async () => Session.create({ title: "one" }), + }) + await new Promise((resolve) => setTimeout(resolve, 5)) + const two = await Instance.provide({ + directory: tmp.path, + fn: async () => Session.create({ title: "two" }), + }) + + const before = await Instance.provide({ + directory: tmp.path, + fn: async () => Session.get(one.id), + }) + const initial = await Instance.provide({ + directory: tmp.path, + fn: async () => [...Session.list({ directory: tmp.path, limit: 2 })], + }) + expect(initial[0].id).toBe(two.id) + + await new Promise((resolve) => setTimeout(resolve, 5)) + + const app = Server.App() + const response = await app.request(`/session/${one.id}/summarize`, { + method: "POST", + headers: { + "Content-Type": "application/json", + "x-opencode-directory": tmp.path, + }, + body: JSON.stringify({ + providerID: "test", + modelID: "test", + auto: false, + }), + }) + + expect(response.status).toBe(200) + expect(await response.json()).toBe(true) + + const after = await Instance.provide({ + directory: tmp.path, + fn: async () => Session.get(one.id), + }) + const sessions = await Instance.provide({ + directory: tmp.path, + fn: async () => [...Session.list({ directory: tmp.path, limit: 2 })], + }) + expect(after.time.updated).toBeGreaterThan(before.time.updated) + expect(sessions[0].id).toBe(one.id) + } finally { + loop.mockRestore() + } + }) }) From fca483eebf5614d3431205825d16159b2160a966 Mon Sep 17 00:00:00 2001 From: neriousy Date: Fri, 6 Mar 2026 21:20:43 +0100 Subject: [PATCH 2/3] test(opencode): fix summarize regression mock typing --- packages/opencode/test/server/session-list.test.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/opencode/test/server/session-list.test.ts b/packages/opencode/test/server/session-list.test.ts index 0e76b3af5f5..52fb6567112 100644 --- a/packages/opencode/test/server/session-list.test.ts +++ b/packages/opencode/test/server/session-list.test.ts @@ -93,7 +93,9 @@ describe("Session.list", () => { test("manual summarize bumps updated time and reorders list", async () => { await using tmp = await tmpdir({ git: true }) - const loop = spyOn(SessionPrompt, "loop").mockImplementation(async () => undefined as never) + const loop = spyOn(SessionPrompt, "loop").mockImplementation( + (async () => undefined as never) as unknown as typeof SessionPrompt.loop, + ) try { const one = await Instance.provide({ From 563e1c55bf7d5866db62fb3e0ae2dcf1a030f4c5 Mon Sep 17 00:00:00 2001 From: neriousy Date: Fri, 6 Mar 2026 21:28:45 +0100 Subject: [PATCH 3/3] test(opencode): drop summarize regression test --- .../opencode/test/server/session-list.test.ts | 66 +------------------ 1 file changed, 1 insertion(+), 65 deletions(-) diff --git a/packages/opencode/test/server/session-list.test.ts b/packages/opencode/test/server/session-list.test.ts index 52fb6567112..675a89011f9 100644 --- a/packages/opencode/test/server/session-list.test.ts +++ b/packages/opencode/test/server/session-list.test.ts @@ -1,11 +1,8 @@ -import { describe, expect, spyOn, test } from "bun:test" +import { describe, expect, test } from "bun:test" import path from "path" import { Instance } from "../../src/project/instance" -import { Server } from "../../src/server/server" import { Session } from "../../src/session" -import { SessionPrompt } from "../../src/session/prompt" import { Log } from "../../src/util/log" -import { tmpdir } from "../fixture/fixture" const projectRoot = path.join(__dirname, "../..") Log.init({ print: false }) @@ -90,65 +87,4 @@ describe("Session.list", () => { }, }) }) - - test("manual summarize bumps updated time and reorders list", async () => { - await using tmp = await tmpdir({ git: true }) - const loop = spyOn(SessionPrompt, "loop").mockImplementation( - (async () => undefined as never) as unknown as typeof SessionPrompt.loop, - ) - - try { - const one = await Instance.provide({ - directory: tmp.path, - fn: async () => Session.create({ title: "one" }), - }) - await new Promise((resolve) => setTimeout(resolve, 5)) - const two = await Instance.provide({ - directory: tmp.path, - fn: async () => Session.create({ title: "two" }), - }) - - const before = await Instance.provide({ - directory: tmp.path, - fn: async () => Session.get(one.id), - }) - const initial = await Instance.provide({ - directory: tmp.path, - fn: async () => [...Session.list({ directory: tmp.path, limit: 2 })], - }) - expect(initial[0].id).toBe(two.id) - - await new Promise((resolve) => setTimeout(resolve, 5)) - - const app = Server.App() - const response = await app.request(`/session/${one.id}/summarize`, { - method: "POST", - headers: { - "Content-Type": "application/json", - "x-opencode-directory": tmp.path, - }, - body: JSON.stringify({ - providerID: "test", - modelID: "test", - auto: false, - }), - }) - - expect(response.status).toBe(200) - expect(await response.json()).toBe(true) - - const after = await Instance.provide({ - directory: tmp.path, - fn: async () => Session.get(one.id), - }) - const sessions = await Instance.provide({ - directory: tmp.path, - fn: async () => [...Session.list({ directory: tmp.path, limit: 2 })], - }) - expect(after.time.updated).toBeGreaterThan(before.time.updated) - expect(sessions[0].id).toBe(one.id) - } finally { - loop.mockRestore() - } - }) })