File size: 1,663 Bytes
78d0c37 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | // Shared agent-id resolution for gateway handlers that accept optional agent ids
// and must reject unknown explicit ids consistently.
import { ErrorCodes, errorShape } from "../../../packages/gateway-protocol/src/index.js";
import {
AgentSelectionRequiredError,
listAgentIds,
resolveDefaultAgentId,
tryResolveLegacyCompatibilityAgentId,
} from "../../agents/agent-scope.js";
import type { OpenClawConfig } from "../../config/types.openclaw.js";
import type { RespondFn } from "./types.js";
/**
* Shared agent-id resolver for request handlers that accept optional agent ids.
*/
export function resolveAgentIdOrRespondError(params: {
rawAgentId: unknown;
respond: RespondFn;
cfg: OpenClawConfig;
normalize: (rawAgentId: unknown) => string | undefined;
}) {
const knownAgents = listAgentIds(params.cfg);
const requestedAgentId = params.normalize(params.rawAgentId) ?? "";
let agentId: string;
try {
agentId =
requestedAgentId ||
tryResolveLegacyCompatibilityAgentId(params.cfg) ||
resolveDefaultAgentId(params.cfg, {
surface: "this Gateway request",
hint: "Set agentId to one of the configured agents.",
});
} catch (error) {
if (!(error instanceof AgentSelectionRequiredError)) {
throw error;
}
params.respond(false, undefined, errorShape(ErrorCodes.INVALID_REQUEST, error.message));
return null;
}
if (requestedAgentId && !knownAgents.includes(agentId)) {
params.respond(
false,
undefined,
errorShape(ErrorCodes.INVALID_REQUEST, `unknown agent id "${requestedAgentId}"`),
);
return null;
}
return { cfg: params.cfg, agentId };
}
|