43 lines
1.4 KiB
TypeScript
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);
|
|
}
|