fix: disable tts tool for voice provider

This commit is contained in:
Peter Steinberger
2026-02-26 04:12:26 +01:00
parent 8a97803474
commit 8f8e2b13b4
3 changed files with 12 additions and 1 deletions

View File

@@ -319,6 +319,11 @@ describe("createOpenClawCodingTools", () => {
expect(names.has("telegram")).toBe(false);
expect(names.has("whatsapp")).toBe(false);
});
it("does not expose tts tool for voice message provider", () => {
const tools = createOpenClawCodingTools({ messageProvider: "voice" });
const names = new Set(tools.map((tool) => tool.name));
expect(names.has("tts")).toBe(false);
});
it("filters session tools for sub-agent sessions by default", () => {
const tools = createOpenClawCodingTools({
sessionKey: "agent:main:subagent:test",

View File

@@ -217,6 +217,8 @@ export function createOpenClawCodingTools(options?: {
/** Whether the sender is an owner (required for owner-only tools). */
senderIsOwner?: boolean;
}): AnyAgentTool[] {
const rawMessageProvider = options?.messageProvider?.trim().toLowerCase();
const isVoiceMessageProvider = rawMessageProvider === "voice";
const execToolName = "exec";
const sandbox = options?.sandbox?.enabled ? options.sandbox : undefined;
const {
@@ -480,9 +482,12 @@ export function createOpenClawCodingTools(options?: {
senderIsOwner: options?.senderIsOwner,
}),
];
const toolsForMessageProvider = isVoiceMessageProvider
? tools.filter((tool) => tool.name !== "tts")
: tools;
// Security: treat unknown/undefined as unauthorized (opt-in, not opt-out)
const senderIsOwner = options?.senderIsOwner === true;
const toolsByAuthorization = applyOwnerOnlyToolPolicy(tools, senderIsOwner);
const toolsByAuthorization = applyOwnerOnlyToolPolicy(toolsForMessageProvider, senderIsOwner);
const subagentFiltered = applyToolPolicyPipeline({
tools: toolsByAuthorization,
toolMeta: (tool) => getPluginToolMeta(tool),