



















@@ -17,6 +17,9 @@ const mocks = vi.hoisted(() => {
1717return {
1818 stubTool,
1919createCronToolOptions: vi.fn(),
20+createImageGenerateToolOptions: vi.fn(),
21+createMusicGenerateToolOptions: vi.fn(),
22+createVideoGenerateToolOptions: vi.fn(),
2023textToSpeech: vi.fn(async () => ({
2124success: true,
2225audioPath: "/tmp/openclaw/tts-config-test.opus",
@@ -50,7 +53,10 @@ vi.mock("./tools/gateway-tool.js", () => ({
5053}));
51545255vi.mock("./tools/image-generate-tool.js", () => ({
53-createImageGenerateTool: () => mocks.stubTool("image_generate"),
56+createImageGenerateTool: (options: unknown) => {
57+mocks.createImageGenerateToolOptions(options);
58+return mocks.stubTool("image_generate");
59+},
5460}));
55615662vi.mock("./tools/image-tool.js", () => ({
@@ -62,7 +68,10 @@ vi.mock("./tools/message-tool.js", () => ({
6268}));
63696470vi.mock("./tools/music-generate-tool.js", () => ({
65-createMusicGenerateTool: () => mocks.stubTool("music_generate"),
71+createMusicGenerateTool: (options: unknown) => {
72+mocks.createMusicGenerateToolOptions(options);
73+return mocks.stubTool("music_generate");
74+},
6675}));
67766877vi.mock("./tools/nodes-tool.js", () => ({
@@ -106,7 +115,10 @@ vi.mock("./tools/update-plan-tool.js", () => ({
106115}));
107116108117vi.mock("./tools/video-generate-tool.js", () => ({
109-createVideoGenerateTool: () => mocks.stubTool("video_generate"),
118+createVideoGenerateTool: (options: unknown) => {
119+mocks.createVideoGenerateToolOptions(options);
120+return mocks.stubTool("video_generate");
121+},
110122}));
111123112124vi.mock("./tools/web-tools.js", () => ({
@@ -134,6 +146,9 @@ function getTextToSpeechParams() {
134146describe("createOpenClawTools TTS config wiring", () => {
135147beforeEach(() => {
136148mocks.createCronToolOptions.mockClear();
149+mocks.createImageGenerateToolOptions.mockClear();
150+mocks.createMusicGenerateToolOptions.mockClear();
151+mocks.createVideoGenerateToolOptions.mockClear();
137152mocks.textToSpeech.mockClear();
138153});
139154@@ -266,6 +281,74 @@ describe("createOpenClawTools TTS config wiring", () => {
266281});
267282});
268283284+describe("createOpenClawTools media generation session wiring", () => {
285+beforeEach(() => {
286+mocks.createImageGenerateToolOptions.mockClear();
287+mocks.createMusicGenerateToolOptions.mockClear();
288+mocks.createVideoGenerateToolOptions.mockClear();
289+});
290+291+it("uses the isolated cron run key for background media completions", () => {
292+const config = {
293+agents: {
294+defaults: {
295+imageGenerationModel: { primary: "image-owner/model" },
296+videoGenerationModel: { primary: "video-owner/model" },
297+musicGenerationModel: { primary: "music-owner/model" },
298+},
299+},
300+} satisfies OpenClawConfig;
301+302+createOpenClawTools({
303+ config,
304+agentSessionKey: "agent:main:cron:daily-media",
305+runSessionKey: "agent:main:cron:daily-media:run:run-123",
306+disableMessageTool: true,
307+disablePluginTools: true,
308+});
309+310+expect(mocks.createImageGenerateToolOptions).toHaveBeenCalledWith(
311+expect.objectContaining({
312+agentSessionKey: "agent:main:cron:daily-media:run:run-123",
313+}),
314+);
315+expect(mocks.createVideoGenerateToolOptions).toHaveBeenCalledWith(
316+expect.objectContaining({
317+agentSessionKey: "agent:main:cron:daily-media:run:run-123",
318+}),
319+);
320+expect(mocks.createMusicGenerateToolOptions).toHaveBeenCalledWith(
321+expect.objectContaining({
322+agentSessionKey: "agent:main:cron:daily-media:run:run-123",
323+}),
324+);
325+});
326+327+it("keeps the requester session key for non-cron media completions", () => {
328+const config = {
329+agents: {
330+defaults: {
331+imageGenerationModel: { primary: "image-owner/model" },
332+},
333+},
334+} satisfies OpenClawConfig;
335+336+createOpenClawTools({
337+ config,
338+agentSessionKey: "agent:main:slack:channel:C123",
339+runSessionKey: "agent:main:slack:channel:C123:run:run-123",
340+disableMessageTool: true,
341+disablePluginTools: true,
342+});
343+344+expect(mocks.createImageGenerateToolOptions).toHaveBeenCalledWith(
345+expect.objectContaining({
346+agentSessionKey: "agent:main:slack:channel:C123",
347+}),
348+);
349+});
350+});
351+269352describe("createOpenClawTools cron context wiring", () => {
270353beforeEach(() => {
271354mocks.createCronToolOptions.mockClear();
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。