diff --git a/src/main/pi/agent-status-extension-omp-lifecycle.test.ts b/src/main/pi/agent-status-extension-omp-lifecycle.test.ts index e759217cd63..89f8c94d9a5 100644 --- a/src/main/pi/agent-status-extension-omp-lifecycle.test.ts +++ b/src/main/pi/agent-status-extension-omp-lifecycle.test.ts @@ -86,4 +86,22 @@ describe('OMP agent_end contract', () => { vi.useRealTimers() } }) + + it('preserves non-terminal agent_end handling for Pi and Prime', async () => { + vi.useFakeTimers() + try { + for (const kind of ['pi', 'prime-agent'] as const) { + const harness = createAgentStatusExtensionHarness({ kind }) + const context = { isIdle: vi.fn(() => true) } + + await harness.callHook('agent_end', { willContinue: true }, context) + await vi.advanceTimersByTimeAsync(1_000) + + expect(postedHookNames(harness.fetchMock)).toEqual([]) + expect(context.isIdle).not.toHaveBeenCalled() + } + } finally { + vi.useRealTimers() + } + }) }) diff --git a/src/main/pi/agent-status-handler-source.ts b/src/main/pi/agent-status-handler-source.ts index 4eb4feac96c..71bcbf96534 100644 --- a/src/main/pi/agent-status-handler-source.ts +++ b/src/main/pi/agent-status-handler-source.ts @@ -171,8 +171,11 @@ export function getPiAgentStatusHandlerSourceLines(kind: PiAgentKind): string[] '', " pi.on('agent_end', (event, ctx) => {", ...captureSessionMetadata, + ' if (event?.willContinue === true) {', + ' clearPendingAgentEndCheck()', + ' return', + ' }', ' if (isOmpRuntime()) {', - ' if (event?.willContinue === true) return', ' postAgentEndOnce()', ' return', ' }',