From 423543530954c3724109e63434a9de53eeb572e4 Mon Sep 17 00:00:00 2001 From: cpojer Date: Tue, 17 Feb 2026 14:31:40 +0900 Subject: [PATCH] chore: Fix types in tests 26/N. --- .../pi-embedded-runner-extraparams.e2e.test.ts | 7 +++---- .../pi-embedded-runner-extraparams.live.test.ts | 2 +- ...ed-runner.applygoogleturnorderingfix.e2e.test.ts | 13 ++++++------- src/agents/pi-embedded-runner.guard.e2e.test.ts | 5 +++-- ...ed-runner.guard.waitforidle-before-flush.test.ts | 8 +++++--- .../pi-embedded-runner.splitsdktools.e2e.test.ts | 5 +++-- src/agents/pi-embedded-runner/model.test-harness.ts | 5 +++-- src/agents/pi-embedded-runner/model.test.ts | 12 ++++++------ .../run.overflow-compaction.e2e.test.ts | 10 ++++++++-- .../pi-embedded-runner/run/attempt.e2e.test.ts | 12 +++++++----- .../run/compaction-timeout.e2e.test.ts | 7 ++++--- .../pi-embedded-runner/run/payloads.e2e.test.ts | 6 +++--- ...-session-history.tool-result-details.e2e.test.ts | 4 ++-- .../tool-result-truncation.e2e.test.ts | 6 +++--- 14 files changed, 57 insertions(+), 45 deletions(-) diff --git a/src/agents/pi-embedded-runner-extraparams.e2e.test.ts b/src/agents/pi-embedded-runner-extraparams.e2e.test.ts index bec5e67f6b0..37a29e91b86 100644 --- a/src/agents/pi-embedded-runner-extraparams.e2e.test.ts +++ b/src/agents/pi-embedded-runner-extraparams.e2e.test.ts @@ -1,6 +1,5 @@ import type { StreamFn } from "@mariozechner/pi-agent-core"; import type { Context, Model, SimpleStreamOptions } from "@mariozechner/pi-ai"; -import { AssistantMessageEventStream } from "@mariozechner/pi-ai"; import { describe, expect, it } from "vitest"; import { applyExtraParamsToAgent, resolveExtraParams } from "./pi-embedded-runner.js"; @@ -77,7 +76,7 @@ describe("applyExtraParamsToAgent", () => { const payload = { store: false }; const baseStreamFn: StreamFn = (_model, _context, options) => { options?.onPayload?.(payload); - return new AssistantMessageEventStream(); + return {} as ReturnType; }; const agent = { streamFn: baseStreamFn }; applyExtraParamsToAgent(agent, undefined, params.applyProvider, params.applyModelId); @@ -90,7 +89,7 @@ describe("applyExtraParamsToAgent", () => { const calls: Array = []; const baseStreamFn: StreamFn = (_model, _context, options) => { calls.push(options); - return new AssistantMessageEventStream(); + return {} as ReturnType; }; const agent = { streamFn: baseStreamFn }; @@ -159,7 +158,7 @@ describe("applyExtraParamsToAgent", () => { const payload = { store: false }; const baseStreamFn: StreamFn = (_model, _context, options) => { options?.onPayload?.(payload); - return new AssistantMessageEventStream(); + return {} as ReturnType; }; const agent = { streamFn: baseStreamFn }; diff --git a/src/agents/pi-embedded-runner-extraparams.live.test.ts b/src/agents/pi-embedded-runner-extraparams.live.test.ts index 44600c957b3..38c500cf60d 100644 --- a/src/agents/pi-embedded-runner-extraparams.live.test.ts +++ b/src/agents/pi-embedded-runner-extraparams.live.test.ts @@ -12,7 +12,7 @@ const describeLive = LIVE && OPENAI_KEY ? describe : describe.skip; describeLive("pi embedded extra params (live)", () => { it("applies config maxTokens to openai streamFn", async () => { - const model = getModel("openai", "gpt-5.2") as Model<"openai-completions">; + const model = getModel("openai", "gpt-5.2") as unknown as Model<"openai-completions">; const cfg: OpenClawConfig = { agents: { diff --git a/src/agents/pi-embedded-runner.applygoogleturnorderingfix.e2e.test.ts b/src/agents/pi-embedded-runner.applygoogleturnorderingfix.e2e.test.ts index 8194b167223..f4807b7db29 100644 --- a/src/agents/pi-embedded-runner.applygoogleturnorderingfix.e2e.test.ts +++ b/src/agents/pi-embedded-runner.applygoogleturnorderingfix.e2e.test.ts @@ -4,13 +4,12 @@ import { describe, expect, it, vi } from "vitest"; import { applyGoogleTurnOrderingFix } from "./pi-embedded-runner.js"; describe("applyGoogleTurnOrderingFix", () => { - const makeAssistantFirst = () => - [ - { - role: "assistant", - content: [{ type: "toolCall", id: "call_1", name: "exec", arguments: {} }], - }, - ] satisfies AgentMessage[]; + const makeAssistantFirst = (): AgentMessage[] => [ + { + role: "assistant", + content: [{ type: "toolCall", id: "call_1", name: "exec", arguments: {} }], + } as unknown as AgentMessage, + ]; it("prepends a bootstrap once and records a marker for Google models", () => { const sessionManager = SessionManager.inMemory(); diff --git a/src/agents/pi-embedded-runner.guard.e2e.test.ts b/src/agents/pi-embedded-runner.guard.e2e.test.ts index 1a10d806c1f..d93a3520325 100644 --- a/src/agents/pi-embedded-runner.guard.e2e.test.ts +++ b/src/agents/pi-embedded-runner.guard.e2e.test.ts @@ -14,9 +14,10 @@ function assistantToolCall(id: string): AgentMessage { describe("guardSessionManager integration", () => { it("persists synthetic toolResult before subsequent assistant message", () => { const sm = guardSessionManager(SessionManager.inMemory()); + const appendMessage = sm.appendMessage.bind(sm) as unknown as (message: AgentMessage) => void; - sm.appendMessage(assistantToolCall("call_1")); - sm.appendMessage({ + appendMessage(assistantToolCall("call_1")); + appendMessage({ role: "assistant", content: [{ type: "text", text: "followup" }], } as AgentMessage); diff --git a/src/agents/pi-embedded-runner.guard.waitforidle-before-flush.test.ts b/src/agents/pi-embedded-runner.guard.waitforidle-before-flush.test.ts index 7ed7c04ef91..d0396039632 100644 --- a/src/agents/pi-embedded-runner.guard.waitforidle-before-flush.test.ts +++ b/src/agents/pi-embedded-runner.guard.waitforidle-before-flush.test.ts @@ -43,10 +43,11 @@ describe("flushPendingToolResultsAfterIdle", () => { it("waits for idle so real tool results can land before flush", async () => { const sm = guardSessionManager(SessionManager.inMemory()); + const appendMessage = sm.appendMessage.bind(sm) as unknown as (message: AgentMessage) => void; const idle = deferred(); const agent = { waitForIdle: () => idle.promise }; - sm.appendMessage(assistantToolCall("call_retry_1")); + appendMessage(assistantToolCall("call_retry_1")); const flushPromise = flushPendingToolResultsAfterIdle({ agent, sessionManager: sm, @@ -58,7 +59,7 @@ describe("flushPendingToolResultsAfterIdle", () => { expect(getMessages(sm).map((m) => m.role)).toEqual(["assistant"]); // Tool completes before idle wait finishes. - sm.appendMessage(toolResult("call_retry_1", "command output here")); + appendMessage(toolResult("call_retry_1", "command output here")); idle.resolve(); await flushPromise; @@ -72,10 +73,11 @@ describe("flushPendingToolResultsAfterIdle", () => { it("flushes pending tool call after timeout when idle never resolves", async () => { const sm = guardSessionManager(SessionManager.inMemory()); + const appendMessage = sm.appendMessage.bind(sm) as unknown as (message: AgentMessage) => void; vi.useFakeTimers(); const agent = { waitForIdle: () => new Promise(() => {}) }; - sm.appendMessage(assistantToolCall("call_orphan_1")); + appendMessage(assistantToolCall("call_orphan_1")); const flushPromise = flushPendingToolResultsAfterIdle({ agent, diff --git a/src/agents/pi-embedded-runner.splitsdktools.e2e.test.ts b/src/agents/pi-embedded-runner.splitsdktools.e2e.test.ts index 6195e3b812d..9a376ebf6f0 100644 --- a/src/agents/pi-embedded-runner.splitsdktools.e2e.test.ts +++ b/src/agents/pi-embedded-runner.splitsdktools.e2e.test.ts @@ -1,13 +1,14 @@ import type { AgentTool, AgentToolResult } from "@mariozechner/pi-agent-core"; +import { Type } from "@sinclair/typebox"; import { describe, expect, it } from "vitest"; import { splitSdkTools } from "./pi-embedded-runner.js"; -function createStubTool(name: string): AgentTool { +function createStubTool(name: string): AgentTool { return { name, label: name, description: "", - parameters: {}, + parameters: Type.Object({}), execute: async () => ({}) as AgentToolResult, }; } diff --git a/src/agents/pi-embedded-runner/model.test-harness.ts b/src/agents/pi-embedded-runner/model.test-harness.ts index d7f52bdd3a2..c54b56d671f 100644 --- a/src/agents/pi-embedded-runner/model.test-harness.ts +++ b/src/agents/pi-embedded-runner/model.test-harness.ts @@ -1,11 +1,12 @@ import { vi } from "vitest"; +import type { ModelDefinitionConfig } from "../../config/types.js"; import { discoverModels } from "../pi-model-discovery.js"; -export const makeModel = (id: string) => ({ +export const makeModel = (id: string): ModelDefinitionConfig => ({ id, name: id, reasoning: false, - input: ["text"] as const, + input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1, maxTokens: 1, diff --git a/src/agents/pi-embedded-runner/model.test.ts b/src/agents/pi-embedded-runner/model.test.ts index dcbf92380e2..68fab01ad6e 100644 --- a/src/agents/pi-embedded-runner/model.test.ts +++ b/src/agents/pi-embedded-runner/model.test.ts @@ -62,7 +62,7 @@ function expectUnknownModelError(provider: string, id: string) { describe("buildInlineProviderModels", () => { it("attaches provider ids to inline models", () => { - const providers = { + const providers: Parameters[0] = { " alpha ": { baseUrl: "http://alpha.local", models: [makeModel("alpha-model")] }, beta: { baseUrl: "http://beta.local", models: [makeModel("beta-model")] }, }; @@ -86,7 +86,7 @@ describe("buildInlineProviderModels", () => { }); it("inherits baseUrl from provider when model does not specify it", () => { - const providers = { + const providers: Parameters[0] = { custom: { baseUrl: "http://localhost:8000", models: [makeModel("custom-model")], @@ -100,7 +100,7 @@ describe("buildInlineProviderModels", () => { }); it("inherits api from provider when model does not specify it", () => { - const providers = { + const providers: Parameters[0] = { custom: { baseUrl: "http://localhost:8000", api: "anthropic-messages", @@ -115,7 +115,7 @@ describe("buildInlineProviderModels", () => { }); it("model-level api takes precedence over provider-level api", () => { - const providers = { + const providers: Parameters[0] = { custom: { baseUrl: "http://localhost:8000", api: "openai-responses", @@ -130,7 +130,7 @@ describe("buildInlineProviderModels", () => { }); it("inherits both baseUrl and api from provider config", () => { - const providers = { + const providers: Parameters[0] = { custom: { baseUrl: "http://localhost:10000", api: "anthropic-messages", @@ -327,7 +327,7 @@ describe("resolveModel", () => { }, }, }, - } as OpenClawConfig; + } as unknown as OpenClawConfig; expectResolvedForwardCompatFallback({ provider: "openai-codex", diff --git a/src/agents/pi-embedded-runner/run.overflow-compaction.e2e.test.ts b/src/agents/pi-embedded-runner/run.overflow-compaction.e2e.test.ts index 2e51e8a2952..22e4a5d1cb5 100644 --- a/src/agents/pi-embedded-runner/run.overflow-compaction.e2e.test.ts +++ b/src/agents/pi-embedded-runner/run.overflow-compaction.e2e.test.ts @@ -52,6 +52,7 @@ import { log } from "./logger.js"; import { runEmbeddedPiAgent } from "./run.js"; import { makeAttemptResult } from "./run.overflow-compaction.fixture.js"; import { runEmbeddedAttempt } from "./run/attempt.js"; +import type { EmbeddedRunAttemptResult } from "./run/types.js"; import { sessionLikelyHasOversizedToolResults, truncateOversizedToolResultsInSession, @@ -171,7 +172,12 @@ describe("overflow compaction in run loop", () => { .mockResolvedValueOnce( makeAttemptResult({ promptError: overflowError, - messagesSnapshot: [{ role: "assistant", content: "big tool output" }], + messagesSnapshot: [ + { + role: "assistant", + content: "big tool output", + } as unknown as EmbeddedRunAttemptResult["messagesSnapshot"][number], + ], }), ) .mockResolvedValueOnce(makeAttemptResult({ promptError: null })); @@ -362,7 +368,7 @@ describe("overflow compaction in run loop", () => { cacheWrite: 0, total: 2_000, }, - } as EmbeddedRunAttemptResult["lastAssistant"], + } as unknown as EmbeddedRunAttemptResult["lastAssistant"], }), ); diff --git a/src/agents/pi-embedded-runner/run/attempt.e2e.test.ts b/src/agents/pi-embedded-runner/run/attempt.e2e.test.ts index 0b5da8979c7..ca93113871a 100644 --- a/src/agents/pi-embedded-runner/run/attempt.e2e.test.ts +++ b/src/agents/pi-embedded-runner/run/attempt.e2e.test.ts @@ -17,8 +17,9 @@ describe("injectHistoryImagesIntoMessages", () => { const didMutate = injectHistoryImagesIntoMessages(messages, new Map([[0, [image]]])); expect(didMutate).toBe(true); - expect(Array.isArray(messages[0]?.content)).toBe(true); - const content = messages[0]?.content as Array<{ type: string; text?: string; data?: string }>; + const firstUser = messages[0] as Extract | undefined; + expect(Array.isArray(firstUser?.content)).toBe(true); + const content = firstUser?.content as Array<{ type: string; text?: string; data?: string }>; expect(content).toHaveLength(2); expect(content[0]?.type).toBe("text"); expect(content[1]).toMatchObject({ type: "image", data: "abc" }); @@ -35,7 +36,7 @@ describe("injectHistoryImagesIntoMessages", () => { const didMutate = injectHistoryImagesIntoMessages(messages, new Map([[0, [image]]])); expect(didMutate).toBe(false); - const first = messages[0]; + const first = messages[0] as Extract | undefined; if (!first || !Array.isArray(first.content)) { throw new Error("expected array content"); } @@ -47,12 +48,13 @@ describe("injectHistoryImagesIntoMessages", () => { { role: "assistant", content: "noop", - } as AgentMessage, + } as unknown as AgentMessage, ]; const didMutate = injectHistoryImagesIntoMessages(messages, new Map([[1, [image]]])); expect(didMutate).toBe(false); - expect(messages[0]?.content).toBe("noop"); + const firstAssistant = messages[0] as Extract | undefined; + expect(firstAssistant?.content).toBe("noop"); }); }); diff --git a/src/agents/pi-embedded-runner/run/compaction-timeout.e2e.test.ts b/src/agents/pi-embedded-runner/run/compaction-timeout.e2e.test.ts index ce4351e395b..7258a33baaa 100644 --- a/src/agents/pi-embedded-runner/run/compaction-timeout.e2e.test.ts +++ b/src/agents/pi-embedded-runner/run/compaction-timeout.e2e.test.ts @@ -1,3 +1,4 @@ +import type { AgentMessage } from "@mariozechner/pi-agent-core"; import { describe, expect, it } from "vitest"; import { selectCompactionTimeoutSnapshot, @@ -31,8 +32,8 @@ describe("compaction-timeout helpers", () => { }); it("uses pre-compaction snapshot when compaction timeout occurs", () => { - const pre = [{ role: "assistant", content: "pre" }] as const; - const current = [{ role: "assistant", content: "current" }] as const; + const pre = [{ role: "assistant", content: "pre" } as unknown as AgentMessage] as const; + const current = [{ role: "assistant", content: "current" } as unknown as AgentMessage] as const; const selected = selectCompactionTimeoutSnapshot({ timedOutDuringCompaction: true, preCompactionSnapshot: [...pre], @@ -46,7 +47,7 @@ describe("compaction-timeout helpers", () => { }); it("falls back to current snapshot when pre-compaction snapshot is unavailable", () => { - const current = [{ role: "assistant", content: "current" }] as const; + const current = [{ role: "assistant", content: "current" } as unknown as AgentMessage] as const; const selected = selectCompactionTimeoutSnapshot({ timedOutDuringCompaction: true, preCompactionSnapshot: null, diff --git a/src/agents/pi-embedded-runner/run/payloads.e2e.test.ts b/src/agents/pi-embedded-runner/run/payloads.e2e.test.ts index cff0921e867..046fe09dad1 100644 --- a/src/agents/pi-embedded-runner/run/payloads.e2e.test.ts +++ b/src/agents/pi-embedded-runner/run/payloads.e2e.test.ts @@ -274,7 +274,7 @@ describe("buildEmbeddedRunPayloads", () => { it("shows mutating tool errors even when assistant output exists", () => { const payloads = buildPayloads({ assistantTexts: ["Done."], - lastAssistant: { stopReason: "end_turn" } as AssistantMessage, + lastAssistant: { stopReason: "end_turn" } as unknown as AssistantMessage, lastToolError: { toolName: "write", error: "file missing" }, }); @@ -287,7 +287,7 @@ describe("buildEmbeddedRunPayloads", () => { it("does not treat session_status read failures as mutating when explicitly flagged", () => { const payloads = buildPayloads({ assistantTexts: ["Status loaded."], - lastAssistant: { stopReason: "end_turn" } as AssistantMessage, + lastAssistant: { stopReason: "end_turn" } as unknown as AssistantMessage, lastToolError: { toolName: "session_status", error: "model required", @@ -312,7 +312,7 @@ describe("buildEmbeddedRunPayloads", () => { const payloads = buildPayloads({ assistantTexts: [warningText ?? ""], - lastAssistant: { stopReason: "end_turn" } as AssistantMessage, + lastAssistant: { stopReason: "end_turn" } as unknown as AssistantMessage, lastToolError: { toolName: "write", error: "file missing", diff --git a/src/agents/pi-embedded-runner/sanitize-session-history.tool-result-details.e2e.test.ts b/src/agents/pi-embedded-runner/sanitize-session-history.tool-result-details.e2e.test.ts index d51cc950f80..53c973566fa 100644 --- a/src/agents/pi-embedded-runner/sanitize-session-history.tool-result-details.e2e.test.ts +++ b/src/agents/pi-embedded-runner/sanitize-session-history.tool-result-details.e2e.test.ts @@ -12,7 +12,7 @@ describe("sanitizeSessionHistory toolResult details stripping", () => { role: "assistant", content: [{ type: "toolUse", id: "call_1", name: "web_fetch", input: { url: "x" } }], timestamp: 1, - } as AgentMessage, + } as unknown as AgentMessage, { role: "toolResult", toolCallId: "call_1", @@ -29,7 +29,7 @@ describe("sanitizeSessionHistory toolResult details stripping", () => { role: "user", content: "continue", timestamp: 3, - } as AgentMessage, + } as unknown as AgentMessage, ]; const sanitized = await sanitizeSessionHistory({ diff --git a/src/agents/pi-embedded-runner/tool-result-truncation.e2e.test.ts b/src/agents/pi-embedded-runner/tool-result-truncation.e2e.test.ts index 2cd27a042bb..6b7bbcf4517 100644 --- a/src/agents/pi-embedded-runner/tool-result-truncation.e2e.test.ts +++ b/src/agents/pi-embedded-runner/tool-result-truncation.e2e.test.ts @@ -17,7 +17,7 @@ function makeToolResult(text: string, toolCallId = "call_1"): AgentMessage { content: [{ type: "text", text }], isError: false, timestamp: Date.now(), - } as AgentMessage; + } as unknown as AgentMessage; } function makeUserMessage(text: string): AgentMessage { @@ -25,7 +25,7 @@ function makeUserMessage(text: string): AgentMessage { role: "user", content: text, timestamp: Date.now(), - } as AgentMessage; + } as unknown as AgentMessage; } function makeAssistantMessage(text: string): AgentMessage { @@ -43,7 +43,7 @@ function makeAssistantMessage(text: string): AgentMessage { }, stopReason: "end_turn", timestamp: Date.now(), - } as AgentMessage; + } as unknown as AgentMessage; } describe("truncateToolResultText", () => {