





















@@ -1,5 +1,5 @@
11import type { AgentTool } from "@mariozechner/pi-agent-core";
2-import { describe, expect, it, vi } from "vitest";
2+import { beforeEach, describe, expect, it, vi } from "vitest";
33import {
44createNativeOpenAIResponsesModel,
55createParameterFreeTool,
@@ -8,7 +8,22 @@ import {
88import { logAgentRuntimeToolDiagnostics, normalizeAgentRuntimeTools } from "./tools.js";
99import type { AgentRuntimePlan } from "./types.js";
101011+const mocks = vi.hoisted(() => ({
12+logProviderToolSchemaDiagnostics: vi.fn(),
13+normalizeProviderToolSchemas: vi.fn(),
14+}));
15+16+vi.mock("../pi-embedded-runner/tool-schema-runtime.js", () => ({
17+logProviderToolSchemaDiagnostics: mocks.logProviderToolSchemaDiagnostics,
18+normalizeProviderToolSchemas: mocks.normalizeProviderToolSchemas,
19+}));
20+1121describe("AgentRuntimePlan tool policy helpers", () => {
22+beforeEach(() => {
23+mocks.logProviderToolSchemaDiagnostics.mockReset();
24+mocks.normalizeProviderToolSchemas.mockReset();
25+});
26+1227it("uses RuntimePlan-owned tool normalization when a plan is available", () => {
1328const tools = [createParameterFreeTool()] as AgentTool[];
1429const normalized = [{ ...tools[0], name: "normalized" }] as AgentTool[];
@@ -65,6 +80,13 @@ describe("AgentRuntimePlan tool policy helpers", () => {
6580});
66816782it("falls back to legacy provider schema normalization when no plan is available", () => {
83+mocks.normalizeProviderToolSchemas.mockReturnValueOnce([
84+{
85+ ...createParameterFreeTool(),
86+parameters: normalizedParameterFreeSchema(),
87+},
88+]);
89+6890const normalized = normalizeAgentRuntimeTools({
6991tools: [createParameterFreeTool()] as AgentTool[],
7092provider: "openai",
@@ -75,6 +97,14 @@ describe("AgentRuntimePlan tool policy helpers", () => {
7597});
76987799expect(normalized[0]?.parameters).toEqual(normalizedParameterFreeSchema());
100+expect(mocks.normalizeProviderToolSchemas).toHaveBeenCalledWith(
101+expect.objectContaining({
102+provider: "openai",
103+modelId: "gpt-5.4",
104+modelApi: "openai-responses",
105+workspaceDir: "/tmp/openclaw-runtime-plan-tools",
106+}),
107+);
78108});
7910980110it("routes diagnostics through RuntimePlan when a plan is available", () => {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。