



















@@ -142,6 +142,44 @@ async function handleCaseVariantBuiltinMedia(mediaPathOrUrl: string) {
142142return ctx;
143143}
144144145+const providerInventoryText = [
146+"openai: default=sora-2 | models=sora-2",
147+"google: default=veo-3.1-fast-generate-preview | models=veo-3.1-fast-generate-preview",
148+].join("\n");
149+150+async function handleProviderInventoryListResult(params: {
151+toolName: "image_generate" | "video_generate";
152+shouldEmitToolOutput: boolean;
153+}) {
154+const ctx = createMockContext({
155+shouldEmitToolOutput: params.shouldEmitToolOutput,
156+onToolResult: vi.fn(),
157+toolResultFormat: "plain",
158+});
159+160+await handleToolExecutionEnd(ctx, {
161+type: "tool_execution_end",
162+toolName: params.toolName,
163+toolCallId: "tc-1",
164+isError: false,
165+result: {
166+content: [{ type: "text", text: providerInventoryText }],
167+details: {
168+providers: [
169+{ id: "openai", defaultModel: "sora-2", models: ["sora-2"] },
170+{
171+id: "google",
172+defaultModel: "veo-3.1-fast-generate-preview",
173+models: ["veo-3.1-fast-generate-preview"],
174+},
175+],
176+},
177+},
178+});
179+180+return ctx;
181+}
182+145183describe("handleToolExecutionEnd media emission", () => {
146184it("does not warn for read tool when path is provided via file_path alias", async () => {
147185const ctx = createMockContext();
@@ -424,52 +462,36 @@ describe("handleToolExecutionEnd media emission", () => {
424462expect(ctx.state.pendingToolMediaUrls).toEqual(["/tmp/generated.png"]);
425463});
426464427-it("emits provider inventory output for compact video_generate list results", async () => {
428-const ctx = createMockContext({
429-shouldEmitToolOutput: false,
430-onToolResult: vi.fn(),
431-toolResultFormat: "plain",
432-});
433-434-await handleToolExecutionEnd(ctx, {
435-type: "tool_execution_end",
436-toolName: "video_generate",
437-toolCallId: "tc-1",
438-isError: false,
439-result: {
440-content: [
441-{
442-type: "text",
443-text: [
444-"openai: default=sora-2 | models=sora-2",
445-"google: default=veo-3.1-fast-generate-preview | models=veo-3.1-fast-generate-preview",
446-].join("\n"),
447-},
448-],
449-details: {
450-providers: [
451-{ id: "openai", defaultModel: "sora-2", models: ["sora-2"] },
452-{
453-id: "google",
454-defaultModel: "veo-3.1-fast-generate-preview",
455-models: ["veo-3.1-fast-generate-preview"],
456-},
457-],
458-},
459-},
460-});
465+it.each(["image_generate", "video_generate"] as const)(
466+"keeps %s provider inventory internal when tool output is hidden",
467+async (toolName) => {
468+const ctx = await handleProviderInventoryListResult({
469+ toolName,
470+shouldEmitToolOutput: false,
471+});
461472462-expect(ctx.emitToolOutput).toHaveBeenCalledWith(
463-"video_generate",
464-undefined,
465-[
466-"openai: default=sora-2 | models=sora-2",
467-"google: default=veo-3.1-fast-generate-preview | models=veo-3.1-fast-generate-preview",
468-].join("\n"),
469-expect.any(Object),
470-);
471-expect(ctx.state.pendingToolMediaUrls).toEqual([]);
472-});
473+expect(ctx.emitToolOutput).not.toHaveBeenCalled();
474+expect(ctx.state.pendingToolMediaUrls).toEqual([]);
475+},
476+);
477+478+it.each(["image_generate", "video_generate"] as const)(
479+"emits %s provider inventory when verbose tool output is enabled",
480+async (toolName) => {
481+const ctx = await handleProviderInventoryListResult({
482+ toolName,
483+shouldEmitToolOutput: true,
484+});
485+486+expect(ctx.emitToolOutput).toHaveBeenCalledWith(
487+toolName,
488+undefined,
489+providerInventoryText,
490+expect.any(Object),
491+);
492+expect(ctx.state.pendingToolMediaUrls).toEqual([]);
493+},
494+);
473495474496it("does NOT emit media for error results", async () => {
475497const onToolResult = vi.fn();
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。