agent-ecosystem/src/main/services/team/agentTeamsToolNames.ts

43 lines
1.4 KiB
TypeScript

const AGENT_TEAMS_PREFIXES = ['mcp__agent-teams__', 'mcp__agent_teams__'] as const;
const TASK_BOUNDARY_TOOL_NAMES = ['task_start', 'task_complete', 'task_set_status'] as const;
const TASK_BOUNDARY_TOOL_SET = new Set<string>(TASK_BOUNDARY_TOOL_NAMES);
function escapeRegex(value: string): string {
return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
}
const TASK_BOUNDARY_TOOL_LINE_PATTERN = new RegExp(
`"name"\\s*:\\s*"(?:${[
...TASK_BOUNDARY_TOOL_NAMES,
...TASK_BOUNDARY_TOOL_NAMES.map((toolName) => `proxy_${toolName}`),
...AGENT_TEAMS_PREFIXES.flatMap((prefix) =>
TASK_BOUNDARY_TOOL_NAMES.map((toolName) => `${prefix}${toolName}`)
),
...AGENT_TEAMS_PREFIXES.flatMap((prefix) =>
TASK_BOUNDARY_TOOL_NAMES.map((toolName) => `proxy_${prefix}${toolName}`)
),
]
.map(escapeRegex)
.join('|')})"`
);
export function canonicalizeAgentTeamsToolName(rawName: string): string {
const normalized = rawName.replace(/^proxy_/, '');
for (const prefix of AGENT_TEAMS_PREFIXES) {
if (normalized.startsWith(prefix)) {
return normalized.slice(prefix.length);
}
}
return normalized;
}
export function isAgentTeamsTaskBoundaryToolName(rawName: string): boolean {
return TASK_BOUNDARY_TOOL_SET.has(canonicalizeAgentTeamsToolName(rawName));
}
export function lineHasAgentTeamsTaskBoundaryToolName(line: string): boolean {
return TASK_BOUNDARY_TOOL_LINE_PATTERN.test(line);
}