import { getSubagentManager } from "../../subagent/index.js"; import { invalidToolInputResult } from "../shared/zod-tool-schema.js"; import type { ToolContext, ToolExecutionResult } from "../types.js"; import { resolveSubagentId, subagentRefInputSchema } from "./resolve.js"; export const subagentAbortInputSchema = subagentRefInputSchema; export async function executeSubagentAbort( input: Record, context: ToolContext, ): Promise { const parsedInput = subagentAbortInputSchema.safeParse(input); if (!parsedInput.success) { return invalidToolInputResult("subagent_abort", parsedInput.error); } const parsed = parsedInput.data; const subagentId = resolveSubagentId(parsed, context); if (!subagentId && parsed.label) { return { content: `No subagent found with label "${parsed.label}".`, isError: true, }; } if (!subagentId) { return { content: '"subagent_id" or "label" is required.', isError: true, }; } const manager = getSubagentManager(); const sendToClient = context.sendToClient as | ((msg: unknown) => void) | undefined; const aborted = manager.abort( subagentId, sendToClient as ((msg: unknown) => void) | undefined, context.conversationId, { suppressNotification: true }, ); if (!aborted) { return { content: `Could not abort subagent "${subagentId}". It may not exist or already be in a terminal state.`, isError: true, }; } return { content: JSON.stringify({ subagentId, status: "aborted", message: "Subagent aborted successfully.", }), isError: false, }; }