fix(tools): keep canonical tool names for oauth

This commit is contained in:
Peter Steinberger
2026-01-10 04:18:00 +01:00
parent 2772b39e4a
commit 6274adce3a
2 changed files with 9 additions and 40 deletions

View File

@@ -284,28 +284,6 @@ function normalizeToolNames(list?: string[]) {
return list.map((entry) => entry.trim().toLowerCase()).filter(Boolean);
}
/**
* Anthropic blocks specific lowercase tool names (bash, read, write, edit) with OAuth tokens.
* Renaming to capitalized versions bypasses the block while maintaining compatibility
* with Anthropic API keys and other providers.
*/
const OAUTH_BLOCKED_TOOL_NAMES: Record<string, string> = {
bash: "Bash",
read: "Read",
write: "Write",
edit: "Edit",
};
function renameBlockedToolsForOAuth(tools: AnyAgentTool[]): AnyAgentTool[] {
return tools.map((tool) => {
const newName = OAUTH_BLOCKED_TOOL_NAMES[tool.name];
if (newName) {
return { ...tool, name: newName };
}
return tool;
});
}
const DEFAULT_SUBAGENT_TOOL_DENY = [
"sessions_list",
"sessions_history",
@@ -667,11 +645,8 @@ export function createClawdbotCodingTools(options?: {
)
: normalized;
// Anthropic blocks specific lowercase tool names (bash, read, write, edit) with OAuth tokens.
// Only apply the rename when we are actually using (or likely using) Anthropic OAuth.
const provider = options?.modelProvider?.trim();
const authMode = options?.modelAuthMode;
const isAnthropicOAuth =
provider === "anthropic" && (authMode === "oauth" || authMode === "mixed");
return isAnthropicOAuth ? renameBlockedToolsForOAuth(withAbort) : withAbort;
// NOTE: Keep canonical (lowercase) tool names here.
// pi-ai's Anthropic OAuth transport remaps tool names to Claude Code-style names
// on the wire and maps them back for tool dispatch.
return withAbort;
}