From fa15dbc5ec7f5b7698ff4cdd418400b373bc3964 Mon Sep 17 00:00:00 2001 From: Kit Langton Date: Sun, 10 May 2026 12:25:44 -0400 Subject: [PATCH] Migrate compaction process tests (#26723) --- .../opencode/test/session/compaction.test.ts | 149 ++++++++---------- 1 file changed, 63 insertions(+), 86 deletions(-) diff --git a/packages/opencode/test/session/compaction.test.ts b/packages/opencode/test/session/compaction.test.ts index 2b03e35944..990733dbd9 100644 --- a/packages/opencode/test/session/compaction.test.ts +++ b/packages/opencode/test/session/compaction.test.ts @@ -285,7 +285,7 @@ function runtime( } const deps = Layer.mergeAll( - ProviderTest.fake().layer, + wide().layer, layer("continue"), Agent.defaultLayer, Plugin.defaultLayer, @@ -882,55 +882,42 @@ describe("session.compaction.process", () => { }), ) - test("publishes compacted event on continue", async () => { - await using tmp = await tmpdir() - await WithInstance.provide({ - directory: tmp.path, - fn: async () => { - const session = await svc.create({}) - const msg = await user(session.id, "hello") - const msgs = await svc.messages({ sessionID: session.id }) - const done = defer() - let seen = false - const rt = runtime("continue", Plugin.defaultLayer, wide()) - let unsub: (() => void) | undefined - try { - unsub = await rt.runPromise( - Bus.Service.use((svc) => - svc.subscribeCallback(SessionCompaction.Event.Compacted, (evt) => { - if (evt.properties.sessionID !== session.id) return - seen = true - done.resolve() - }), - ), - ) + it.instance( + "publishes compacted event on continue", + Effect.gen(function* () { + const bus = yield* Bus.Service + const ssn = yield* SessionNs.Service + const session = yield* ssn.create({}) + const msg = yield* createUserMessage(session.id, "hello") + const msgs = yield* ssn.messages({ sessionID: session.id }) + const done = defer() + let seen = false + const unsub = yield* bus.subscribeCallback(SessionCompaction.Event.Compacted, (evt) => { + if (evt.properties.sessionID !== session.id) return + seen = true + done.resolve() + }) + yield* Effect.addFinalizer(() => Effect.sync(unsub)) - const result = await rt.runPromise( - SessionCompaction.Service.use((svc) => - svc.process({ - parentID: msg.id, - messages: msgs, - sessionID: session.id, - auto: false, - }), - ), - ) + const result = yield* SessionCompaction.use.process({ + parentID: msg.id, + messages: msgs, + sessionID: session.id, + auto: false, + }) - await Promise.race([ - done.promise, - wait(500).then(() => { - throw new Error("timed out waiting for compacted event") - }), - ]) - expect(result).toBe("continue") - expect(seen).toBe(true) - } finally { - unsub?.() - await rt.dispose() - } - }, - }) - }) + yield* Effect.promise(() => + Promise.race([ + done.promise, + wait(500).then(() => { + throw new Error("timed out waiting for compacted event") + }), + ]), + ) + expect(result).toBe("continue") + expect(seen).toBe(true) + }), + ) test("marks summary message as errored on compact result", async () => { await using tmp = await tmpdir() @@ -970,46 +957,36 @@ describe("session.compaction.process", () => { }) }) - test("adds synthetic continue prompt when auto is enabled", async () => { - await using tmp = await tmpdir() - await WithInstance.provide({ - directory: tmp.path, - fn: async () => { - const session = await svc.create({}) - const msg = await user(session.id, "hello") - const rt = runtime("continue", Plugin.defaultLayer, wide()) - try { - const msgs = await svc.messages({ sessionID: session.id }) - const result = await rt.runPromise( - SessionCompaction.Service.use((svc) => - svc.process({ - parentID: msg.id, - messages: msgs, - sessionID: session.id, - auto: true, - }), - ), - ) + it.instance( + "adds synthetic continue prompt when auto is enabled", + Effect.gen(function* () { + const ssn = yield* SessionNs.Service + const session = yield* ssn.create({}) + const msg = yield* createUserMessage(session.id, "hello") + const msgs = yield* ssn.messages({ sessionID: session.id }) - const all = await svc.messages({ sessionID: session.id }) - const last = all.at(-1) + const result = yield* SessionCompaction.use.process({ + parentID: msg.id, + messages: msgs, + sessionID: session.id, + auto: true, + }) - expect(result).toBe("continue") - expect(last?.info.role).toBe("user") - expect(last?.parts[0]).toMatchObject({ - type: "text", - synthetic: true, - metadata: { compaction_continue: true }, - }) - if (last?.parts[0]?.type === "text") { - expect(last.parts[0].text).toContain("Continue if you have next steps") - } - } finally { - await rt.dispose() - } - }, - }) - }) + const all = yield* ssn.messages({ sessionID: session.id }) + const last = all.at(-1) + + expect(result).toBe("continue") + expect(last?.info.role).toBe("user") + expect(last?.parts[0]).toMatchObject({ + type: "text", + synthetic: true, + metadata: { compaction_continue: true }, + }) + if (last?.parts[0]?.type === "text") { + expect(last.parts[0].text).toContain("Continue if you have next steps") + } + }), + ) test("persists tail_start_id for retained recent turns", async () => { await using tmp = await tmpdir()