From feffd72b983a8ce43b5b16c2bea9ec8afc31d7cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9B=B7=E7=94=B5=E8=8A=BD=E8=A1=A3?= Date: Wed, 22 Apr 2026 14:37:35 -0400 Subject: [PATCH] fix(runtime): run pi tools sequentially --- src/main/worker/runtime/pi-agent-factory.ts | 1 + tests/unit/pi-agent-factory.test.ts | 42 +++++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 tests/unit/pi-agent-factory.test.ts diff --git a/src/main/worker/runtime/pi-agent-factory.ts b/src/main/worker/runtime/pi-agent-factory.ts index 8e77760f..12c45b3d 100644 --- a/src/main/worker/runtime/pi-agent-factory.ts +++ b/src/main/worker/runtime/pi-agent-factory.ts @@ -87,5 +87,6 @@ export function createPiAgent(input: PiAgentFactoryInput): Agent { beforeToolCall: hooks.beforeToolCall, afterToolCall: hooks.afterToolCall, transformContext: hooks.transformContext, + toolExecution: "sequential", }); } diff --git a/tests/unit/pi-agent-factory.test.ts b/tests/unit/pi-agent-factory.test.ts new file mode 100644 index 00000000..8b19dc56 --- /dev/null +++ b/tests/unit/pi-agent-factory.test.ts @@ -0,0 +1,42 @@ +import type { Model } from "@mariozechner/pi-ai"; +import { describe, expect, it } from "vitest"; +import { createPiAgent } from "../../src/main/worker/runtime/pi-agent-factory"; +import type { WorkerRpcClient } from "../../src/main/worker/entry/rpc"; + +function createModel(): Model<"openai-responses"> { + return { + id: "mock", + name: "mock", + api: "openai-responses", + provider: "openai", + baseUrl: "https://example.invalid", + reasoning: false, + input: ["text"], + cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, + contextWindow: 8192, + maxTokens: 2048, + }; +} + +describe("pi agent factory", () => { + it("uses sequential tool execution for coding tools", () => { + const agent = createPiAgent({ + runId: "run_1", + taskSessionId: "session_1", + systemPrompt: "You are an engineer.", + model: createModel(), + tools: [] as never, + priorMessages: [], + thinkingLevel: "off", + apiKey: "test-key", + extraHeaders: undefined, + rpc: { + invoke: async () => { + throw new Error("Unexpected RPC call in factory test."); + }, + } as unknown as WorkerRpcClient, + }); + + expect(agent.toolExecution).toBe("sequential"); + }); +});