diff --git a/packages/coding-agent/test/task/autoload-skills.test.ts b/packages/coding-agent/test/task/autoload-skills.test.ts index 21ac76e33..2796182d8 100644 --- a/packages/coding-agent/test/task/autoload-skills.test.ts +++ b/packages/coding-agent/test/task/autoload-skills.test.ts @@ -55,6 +55,7 @@ function createMockSession( getLastAssistantMessage: () => state.messages[state.messages.length - 1], abort: async () => {}, dispose: async () => {}, + setIrcWakeTurnObserver: () => {}, } as unknown as AgentSession; } diff --git a/packages/coding-agent/test/task/executor-async-quiescence.test.ts b/packages/coding-agent/test/task/executor-async-quiescence.test.ts index 25c3b3d90..c4bcd0ce5 100644 --- a/packages/coding-agent/test/task/executor-async-quiescence.test.ts +++ b/packages/coding-agent/test/task/executor-async-quiescence.test.ts @@ -146,6 +146,7 @@ function createAsyncSession( }, dispose: async () => {}, }; + session.setIrcWakeTurnObserver = () => {}; harness.session = session as unknown as AgentSession; return harness; } diff --git a/packages/coding-agent/test/task/executor-launch-startup.test.ts b/packages/coding-agent/test/task/executor-launch-startup.test.ts index 525a492b2..c78ae9ac2 100644 --- a/packages/coding-agent/test/task/executor-launch-startup.test.ts +++ b/packages/coding-agent/test/task/executor-launch-startup.test.ts @@ -1,6 +1,7 @@ import { afterEach, expect, it, vi } from "bun:test"; import { AuthStorage } from "@oh-my-pi/pi-ai"; import { ModelRegistry } from "@oh-my-pi/pi-coding-agent/config/model-registry"; +import { ExtensionRuntime } from "@oh-my-pi/pi-coding-agent/extensibility/extensions/loader"; import type { CreateAgentSessionResult } from "@oh-my-pi/pi-coding-agent/sdk"; import * as sdkModule from "@oh-my-pi/pi-coding-agent/sdk"; import type { AgentSession, AgentSessionEvent } from "@oh-my-pi/pi-coding-agent/session/agent-session"; @@ -66,16 +67,18 @@ it("overlaps registry refresh with session-file opening and session setup", asyn getLastAssistantMessage: () => undefined, abort: async () => {}, dispose: async () => {}, + setIrcWakeTurnObserver: () => {}, } as unknown as AgentSession; vi.spyOn(sdkModule, "createAgentSession").mockImplementation(async () => { sessionCreationStarted.resolve(); sessionCreated = true; - return { + const result: CreateAgentSessionResult = { session, - extensionsResult: {}, + extensionsResult: { extensions: [], errors: [], runtime: new ExtensionRuntime() }, setToolUIContext: () => {}, eventBus: new EventBus(), - } as unknown as CreateAgentSessionResult; + }; + return result; }); const run = runSubprocess({ diff --git a/packages/coding-agent/test/task/executor-pass-through.test.ts b/packages/coding-agent/test/task/executor-pass-through.test.ts index b6a52a0e9..47d697645 100644 --- a/packages/coding-agent/test/task/executor-pass-through.test.ts +++ b/packages/coding-agent/test/task/executor-pass-through.test.ts @@ -50,6 +50,7 @@ function createMockSession(onPrompt: (params: { emit: (event: AgentSessionEvent) abort: async () => {}, dispose: async () => {}, }; + session.setIrcWakeTurnObserver = () => {}; return session as unknown as AgentSession; } diff --git a/packages/coding-agent/test/task/executor-prewalk.test.ts b/packages/coding-agent/test/task/executor-prewalk.test.ts index 9096c2124..6b5b31535 100644 --- a/packages/coding-agent/test/task/executor-prewalk.test.ts +++ b/packages/coding-agent/test/task/executor-prewalk.test.ts @@ -74,6 +74,7 @@ function yieldEmittingSession( abort: async () => {}, dispose: async () => {}, }; + session.setIrcWakeTurnObserver = () => {}; return session as unknown as AgentSession; } diff --git a/packages/coding-agent/test/task/executor-recent-output.test.ts b/packages/coding-agent/test/task/executor-recent-output.test.ts index 8ba18a942..3d1230b7a 100644 --- a/packages/coding-agent/test/task/executor-recent-output.test.ts +++ b/packages/coding-agent/test/task/executor-recent-output.test.ts @@ -196,6 +196,7 @@ function createScriptedSession( // AgentSession is a concrete class; the executor consumes only this // structural subset. Deliberate documented test-double escape hatch, // mirroring test/task/executor-pass-through.test.ts. + session.setIrcWakeTurnObserver = () => {}; return { session: session as unknown as AgentSession, emitted: emittedGate.promise }; } diff --git a/packages/coding-agent/test/task/executor-soft-budget.test.ts b/packages/coding-agent/test/task/executor-soft-budget.test.ts index 7fbd28c57..a495ede1a 100644 --- a/packages/coding-agent/test/task/executor-soft-budget.test.ts +++ b/packages/coding-agent/test/task/executor-soft-budget.test.ts @@ -63,6 +63,7 @@ function createMockSession( }; const session: Partial = { + setIrcWakeTurnObserver: () => {}, state: { messages: [] } as never, agent: { state: { systemPrompt: ["test"] } } as never, model: { api: "anthropic-messages" } as never, diff --git a/packages/coding-agent/test/task/executor-subagent-reminders.test.ts b/packages/coding-agent/test/task/executor-subagent-reminders.test.ts index 5ae3d5cfb..7a85093cf 100644 --- a/packages/coding-agent/test/task/executor-subagent-reminders.test.ts +++ b/packages/coding-agent/test/task/executor-subagent-reminders.test.ts @@ -81,6 +81,7 @@ function createMockSession( dispose: async () => {}, }; + session.setIrcWakeTurnObserver = () => {}; return session as unknown as AgentSession; } diff --git a/packages/coding-agent/test/task/executor-wall-clock.test.ts b/packages/coding-agent/test/task/executor-wall-clock.test.ts index 0780d8cf9..b03267093 100644 --- a/packages/coding-agent/test/task/executor-wall-clock.test.ts +++ b/packages/coding-agent/test/task/executor-wall-clock.test.ts @@ -31,6 +31,7 @@ function createHangingSession(): HangingSessionHandle { let abortCount = 0; const { promise: hang, resolve: releaseHang } = Promise.withResolvers(); const session: Partial = { + setIrcWakeTurnObserver: () => {}, state: { messages: [] } as never, agent: { state: { systemPrompt: ["test"] } } as never, extensionRunner: undefined as never, @@ -121,6 +122,7 @@ describe("runSubprocess wall clock (task.maxRuntimeMs)", () => { // hang; we only need to assert that NO timeout fires when maxRuntimeMs=0. const settings = Settings.isolated({ "task.maxRuntimeMs": 0 }); const fastSession: Partial = { + setIrcWakeTurnObserver: () => {}, state: { messages: [] } as never, agent: { state: { systemPrompt: ["test"] } } as never, extensionRunner: undefined as never, @@ -209,6 +211,7 @@ describe("runSubprocess wall clock (task.maxRuntimeMs)", () => { const lateDisposed = Promise.withResolvers(); const lateSession = { dispose: async () => lateDisposed.resolve(), + setIrcWakeTurnObserver: () => {}, } as unknown as AgentSession; let lateInstall = registry.get("late-generation"); vi.spyOn(sdkModule, "createAgentSession").mockImplementation(async (options = {}) => { @@ -245,7 +248,10 @@ describe("runSubprocess wall clock (task.maxRuntimeMs)", () => { const cancelled = await run; expect(cancelled.aborted).toBe(true); - const replacementSession = { dispose: async () => {} } as unknown as AgentSession; + const replacementSession = { + dispose: async () => {}, + setIrcWakeTurnObserver: () => {}, + } as unknown as AgentSession; const replacement = registry.register({ id: "late-generation", displayName: "replacement B", @@ -272,6 +278,7 @@ describe("runSubprocess wall clock (task.maxRuntimeMs)", () => { let listenerRef: ((event: AgentSessionEvent) => void) | undefined; let abortCount = 0; const session: Partial = { + setIrcWakeTurnObserver: () => {}, state: { messages: [] } as never, agent: { state: { systemPrompt: ["test"] } } as never, extensionRunner: undefined as never, @@ -350,6 +357,7 @@ describe("runSubprocess wall clock (task.maxRuntimeMs)", () => { let abortCount = 0; let abortCountBeforeYieldExecutionEnd: number | undefined; const session: Partial = { + setIrcWakeTurnObserver: () => {}, state: { messages: [] } as never, agent: { state: { systemPrompt: ["test"] } } as never, extensionRunner: undefined as never, @@ -450,6 +458,7 @@ describe("runSubprocess wall clock (task.maxRuntimeMs)", () => { let abortCountBeforeValidYieldExecutionEnd: number | undefined; const promptCalls: Array<{ text: string; options?: PromptOptions }> = []; const session: Partial = { + setIrcWakeTurnObserver: () => {}, state: { messages: [] } as never, agent: { state: { systemPrompt: ["test"] } } as never, extensionRunner: undefined as never, @@ -580,6 +589,7 @@ describe("runSubprocess wall clock (task.maxRuntimeMs)", () => { let abortCountBeforeYieldExecutionEnd: number | undefined; let abortCountAfterFollowingTurn: number | undefined; const session: Partial = { + setIrcWakeTurnObserver: () => {}, state: { messages: [] } as never, agent: { state: { systemPrompt: ["test"] } } as never, extensionRunner: undefined as never, @@ -663,6 +673,7 @@ describe("runSubprocess wall clock (task.maxRuntimeMs)", () => { // executor must surface it on SingleResult.contextTokens. const settings = Settings.isolated({ "task.maxRuntimeMs": 0 }); const fastSession: Partial = { + setIrcWakeTurnObserver: () => {}, state: { messages: [] } as never, agent: { state: { systemPrompt: ["test"] } } as never, extensionRunner: undefined as never, diff --git a/packages/coding-agent/test/task/subagent-lsp.test.ts b/packages/coding-agent/test/task/subagent-lsp.test.ts index 050bca485..85961c2bc 100644 --- a/packages/coding-agent/test/task/subagent-lsp.test.ts +++ b/packages/coding-agent/test/task/subagent-lsp.test.ts @@ -85,6 +85,7 @@ function createYieldingSession(): AgentSession { getLastAssistantMessage: () => state.messages[state.messages.length - 1], abort: async () => {}, dispose: async () => {}, + setIrcWakeTurnObserver: () => {}, } as unknown as AgentSession; } diff --git a/packages/coding-agent/test/task/task-guards.test.ts b/packages/coding-agent/test/task/task-guards.test.ts index 52cea2a99..53ed3ccef 100644 --- a/packages/coding-agent/test/task/task-guards.test.ts +++ b/packages/coding-agent/test/task/task-guards.test.ts @@ -76,6 +76,7 @@ function createFakeSession(config: FakeSessionConfig = {}): FakeSessionHandle { if (!config.hang) releaseHang(); const session: Partial = { + setIrcWakeTurnObserver: () => {}, state: { messages: [] } as never, agent: { state: { systemPrompt: ["test"] } } as never, extensionRunner: undefined as never, @@ -108,6 +109,7 @@ function createFakeSession(config: FakeSessionConfig = {}): FakeSessionHandle { releaseHang(); }, dispose: async () => {}, + setIrcWakeTurnObserver: () => {}, }; return { session: session as AgentSession,