diff --git a/packages/opencode/src/session/prompt.ts b/packages/opencode/src/session/prompt.ts index 431189d19cc0..d86d45860794 100644 --- a/packages/opencode/src/session/prompt.ts +++ b/packages/opencode/src/session/prompt.ts @@ -1527,6 +1527,9 @@ NOTE: At any point in time through this workflow you should feel free to ask the continue } + // Notify plugins that the turn is complete + yield* bus.publish(Session.Event.TurnCompleted, { sessionID }) + yield* compaction.prune({ sessionID }).pipe(Effect.ignore, Effect.forkIn(scope)) return yield* lastAssistant(sessionID) }, diff --git a/packages/opencode/src/session/session.ts b/packages/opencode/src/session/session.ts index ba144da9f030..cb9e60cd8f53 100644 --- a/packages/opencode/src/session/session.ts +++ b/packages/opencode/src/session/session.ts @@ -250,6 +250,12 @@ export const Event = { error: z.lazy(() => MessageV2.Assistant.shape.error), }), ), + TurnCompleted: BusEvent.define( + "session.turn.completed", + z.object({ + sessionID: SessionID.zod, + }), + ), } export function plan(input: { slug: string; time: { created: number } }) {