mirror of
https://github.com/anthropics/claude-code-action.git
synced 2026-01-23 06:54:13 +08:00
The parseAllowedTools() function previously used .match() which only returns the first match. This caused tools specified in subsequent --allowed-tools flags to be ignored during MCP server initialization. Changes: - Add /g flag to regex patterns for global matching - Use matchAll() to find all occurrences - Deduplicate tools while preserving order - Make unquoted pattern not match quoted values Fixes #800 #vibe Co-authored-by: Claude <noreply@anthropic.com>
34 lines
1.1 KiB
TypeScript
34 lines
1.1 KiB
TypeScript
export function parseAllowedTools(claudeArgs: string): string[] {
|
|
// Match --allowedTools or --allowed-tools followed by the value
|
|
// Handle both quoted and unquoted values
|
|
// Use /g flag to find ALL occurrences, not just the first one
|
|
const patterns = [
|
|
/--(?:allowedTools|allowed-tools)\s+"([^"]+)"/g, // Double quoted
|
|
/--(?:allowedTools|allowed-tools)\s+'([^']+)'/g, // Single quoted
|
|
/--(?:allowedTools|allowed-tools)\s+([^'"\s][^\s]*)/g, // Unquoted (must not start with quote)
|
|
];
|
|
|
|
const tools: string[] = [];
|
|
const seen = new Set<string>();
|
|
|
|
for (const pattern of patterns) {
|
|
for (const match of claudeArgs.matchAll(pattern)) {
|
|
if (match[1]) {
|
|
// Don't add if the value starts with -- (another flag)
|
|
if (match[1].startsWith("--")) {
|
|
continue;
|
|
}
|
|
for (const tool of match[1].split(",")) {
|
|
const trimmed = tool.trim();
|
|
if (trimmed && !seen.has(trimmed)) {
|
|
seen.add(trimmed);
|
|
tools.push(trimmed);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return tools;
|
|
}
|