| import type { A2ATask, TaskArtifact } from "./taskManager";
|
|
|
| type TaskManagerLike = {
|
| updateTask: (
|
| taskId: string,
|
| state: "completed" | "failed",
|
| artifacts?: Array<{ type: string; content: string }>,
|
| message?: string
|
| ) => unknown;
|
| };
|
|
|
| type StreamTaskResult = {
|
| artifacts: TaskArtifact[];
|
| metadata: Record<string, unknown>;
|
| };
|
|
|
| export type A2ASkillHandler = (task: A2ATask) => Promise<StreamTaskResult>;
|
|
|
| export const A2A_SKILL_HANDLERS: Record<string, A2ASkillHandler> = {
|
| "smart-routing": async (task) => {
|
| const skillModule = await import("./skills/smartRouting");
|
| return skillModule.executeSmartRouting(task);
|
| },
|
| "quota-management": async (task) => {
|
| const skillModule = await import("./skills/quotaManagement");
|
| return skillModule.executeQuotaManagement(task);
|
| },
|
| "provider-discovery": async (task) => {
|
| const skillModule = await import("./skills/providerDiscovery");
|
| return skillModule.executeProviderDiscovery(task);
|
| },
|
| "cost-analysis": async (task) => {
|
| const skillModule = await import("./skills/costAnalysis");
|
| return skillModule.executeCostAnalysis(task);
|
| },
|
| "health-report": async (task) => {
|
| const skillModule = await import("./skills/healthReport");
|
| return skillModule.executeHealthReport(task);
|
| },
|
| "list-capabilities": async (task) => {
|
| const skillModule = await import("./skills/listCapabilities");
|
| return skillModule.executeListCapabilities(task);
|
| },
|
| };
|
|
|
| export async function executeA2ATaskWithState(
|
| tm: TaskManagerLike,
|
| task: A2ATask,
|
| handler: (task: A2ATask) => Promise<StreamTaskResult>
|
| ) {
|
| try {
|
| const result = await handler(task);
|
| tm.updateTask(task.id, "completed", result.artifacts);
|
| return result;
|
| } catch (err) {
|
| const msg = err instanceof Error ? err.message : String(err);
|
| try {
|
| tm.updateTask(task.id, "failed", [{ type: "error", content: msg }], msg);
|
| } catch {
|
|
|
| }
|
| throw err;
|
| }
|
| }
|
|
|