fix: merge existing disallowed tool flags for websearch

This commit is contained in:
Tam Nhu Tran
2026-03-30 17:39:21 -04:00
parent 51fd023be7
commit b087c02738
2 changed files with 52 additions and 0 deletions
+37
View File
@@ -12,6 +12,14 @@ function parseToolValue(rawValue: string): string[] {
.filter((value) => value.length > 0);
}
function mergeToolValues(rawValues: string[], toolName: string): string {
const merged = rawValues.flatMap(parseToolValue);
if (!merged.includes(toolName)) {
merged.push(toolName);
}
return merged.join(',');
}
function hasToolInFlag(args: string[], flag: string, toolName: string): boolean {
for (let index = 0; index < args.length; index += 1) {
const arg = args[index];
@@ -47,5 +55,34 @@ export function appendThirdPartyWebSearchToolArgs(args: string[]): string[] {
return args;
}
for (let index = 0; index < args.length; index += 1) {
const arg = args[index];
if (arg === DISALLOWED_TOOLS_FLAG) {
let cursor = index + 1;
const rawValues: string[] = [];
while (cursor < args.length && !args[cursor].startsWith('--')) {
rawValues.push(args[cursor]);
cursor += 1;
}
return [
...args.slice(0, index + 1),
mergeToolValues(rawValues, NATIVE_WEBSEARCH_TOOL),
...args.slice(cursor),
];
}
if (arg.startsWith(`${DISALLOWED_TOOLS_FLAG}=`)) {
const rawValue = arg.slice(DISALLOWED_TOOLS_FLAG.length + 1);
return [
...args.slice(0, index),
`${DISALLOWED_TOOLS_FLAG}=${mergeToolValues([rawValue], NATIVE_WEBSEARCH_TOOL)}`,
...args.slice(index + 1),
];
}
}
return [...args, DISALLOWED_TOOLS_FLAG, NATIVE_WEBSEARCH_TOOL];
}
@@ -21,4 +21,19 @@ describe('appendThirdPartyWebSearchToolArgs', () => {
['smoke', '--disallowedTools=Read,WebSearch']
);
});
it('merges WebSearch into an existing space-separated disallowed tool flag', () => {
expect(appendThirdPartyWebSearchToolArgs(['smoke', '--disallowedTools', 'Read'])).toEqual([
'smoke',
'--disallowedTools',
'Read,WebSearch',
]);
});
it('merges WebSearch into an existing equals-form disallowed tool flag', () => {
expect(appendThirdPartyWebSearchToolArgs(['smoke', '--disallowedTools=Read'])).toEqual([
'smoke',
'--disallowedTools=Read,WebSearch',
]);
});
});