mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-06 15:30:47 +00:00
refactor: simplify subagent failure context helpers
This commit is contained in:
@@ -73,17 +73,7 @@ export function withSubagentOutcomeTiming(
|
||||
startedAt?: number;
|
||||
endedAt?: number;
|
||||
},
|
||||
): SubagentRunOutcome;
|
||||
export function withSubagentOutcomeTiming(
|
||||
outcome: SubagentRunOutcome | undefined,
|
||||
timing: {
|
||||
startedAt?: number;
|
||||
endedAt?: number;
|
||||
},
|
||||
): SubagentRunOutcome | undefined {
|
||||
if (!outcome) {
|
||||
return undefined;
|
||||
}
|
||||
): SubagentRunOutcome {
|
||||
const startedAt = readFiniteNumber(timing.startedAt) ?? readFiniteNumber(outcome.startedAt);
|
||||
const endedAt = readFiniteNumber(timing.endedAt) ?? readFiniteNumber(outcome.endedAt);
|
||||
const nextTiming: Pick<SubagentRunOutcome, "startedAt" | "endedAt" | "elapsedMs"> = {};
|
||||
@@ -343,15 +333,15 @@ export function applySubagentWaitOutcome(params: {
|
||||
next.endedAt = params.wait.endedAt;
|
||||
}
|
||||
const waitError = typeof params.wait?.error === "string" ? params.wait.error : undefined;
|
||||
let outcome = next.outcome;
|
||||
if (params.wait?.status === "timeout") {
|
||||
next.outcome = withSubagentOutcomeTiming({ status: "timeout" }, next);
|
||||
outcome = { status: "timeout" };
|
||||
} else if (params.wait?.status === "error") {
|
||||
next.outcome = withSubagentOutcomeTiming({ status: "error", error: waitError }, next);
|
||||
outcome = { status: "error", error: waitError };
|
||||
} else if (params.wait?.status === "ok") {
|
||||
next.outcome = withSubagentOutcomeTiming({ status: "ok" }, next);
|
||||
} else {
|
||||
next.outcome = withSubagentOutcomeTiming(next.outcome, next);
|
||||
outcome = { status: "ok" };
|
||||
}
|
||||
next.outcome = outcome ? withSubagentOutcomeTiming(outcome, next) : undefined;
|
||||
return next;
|
||||
}
|
||||
|
||||
|
||||
@@ -53,6 +53,16 @@ function summarizeError(err: unknown): string {
|
||||
return "error";
|
||||
}
|
||||
|
||||
function addRoleToFailureResult<T extends { status: string }>(
|
||||
result: T,
|
||||
role: string | undefined,
|
||||
): T | (T & { role: string }) {
|
||||
if (!role || (result.status !== "error" && result.status !== "forbidden")) {
|
||||
return result;
|
||||
}
|
||||
return { ...result, role };
|
||||
}
|
||||
|
||||
function resolveTrackedSpawnMode(params: {
|
||||
requestedMode?: "run" | "session";
|
||||
threadRequested: boolean;
|
||||
@@ -313,10 +323,7 @@ export function createSessionsSpawnTool(
|
||||
});
|
||||
}
|
||||
}
|
||||
const isAcpFailure = result.status === "error" || result.status === "forbidden";
|
||||
return jsonResult(
|
||||
isAcpFailure && requestedAgentId ? { ...result, role: requestedAgentId } : result,
|
||||
);
|
||||
return jsonResult(addRoleToFailureResult(result, requestedAgentId));
|
||||
}
|
||||
|
||||
const result = await spawnSubagentDirect(
|
||||
@@ -354,10 +361,7 @@ export function createSessionsSpawnTool(
|
||||
},
|
||||
);
|
||||
|
||||
const isSubagentFailure = result.status === "error" || result.status === "forbidden";
|
||||
return jsonResult(
|
||||
isSubagentFailure && requestedAgentId ? { ...result, role: requestedAgentId } : result,
|
||||
);
|
||||
return jsonResult(addRoleToFailureResult(result, requestedAgentId));
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user