refactor: reuse agent outbound target resolution

Co-authored-by: Adam Holt <mail@adamholt.co.nz>
This commit is contained in:
Peter Steinberger
2026-01-17 06:54:12 +00:00
parent 6a3ed5c850
commit 7b31b280f8
4 changed files with 151 additions and 19 deletions

View File

@@ -9,7 +9,9 @@ import {
normalizeMessageChannel,
type GatewayMessageChannel,
} from "../../utils/message-channel.js";
import { resolveSessionDeliveryTarget, type SessionDeliveryTarget } from "./targets.js";
import { resolveOutboundTarget, resolveSessionDeliveryTarget, type SessionDeliveryTarget } from "./targets.js";
import type { ClawdbotConfig } from "../../config/config.js";
import type { OutboundTargetResolution } from "./targets.js";
export type AgentDeliveryPlan = {
baseDelivery: SessionDeliveryTarget;
@@ -86,3 +88,45 @@ export function resolveAgentDeliveryPlan(params: {
deliveryTargetMode,
};
}
export function resolveAgentOutboundTarget(params: {
cfg: ClawdbotConfig;
plan: AgentDeliveryPlan;
targetMode?: ChannelOutboundTargetMode;
validateExplicitTarget?: boolean;
}): {
resolvedTarget: OutboundTargetResolution | null;
resolvedTo?: string;
targetMode: ChannelOutboundTargetMode;
} {
const targetMode =
params.targetMode ??
params.plan.deliveryTargetMode ??
(params.plan.resolvedTo ? "explicit" : "implicit");
if (!isDeliverableMessageChannel(params.plan.resolvedChannel)) {
return {
resolvedTarget: null,
resolvedTo: params.plan.resolvedTo,
targetMode,
};
}
if (params.validateExplicitTarget !== true && params.plan.resolvedTo) {
return {
resolvedTarget: null,
resolvedTo: params.plan.resolvedTo,
targetMode,
};
}
const resolvedTarget = resolveOutboundTarget({
channel: params.plan.resolvedChannel,
to: params.plan.resolvedTo,
cfg: params.cfg,
accountId: params.plan.resolvedAccountId,
mode: targetMode,
});
return {
resolvedTarget,
resolvedTo: resolvedTarget.ok ? resolvedTarget.to : params.plan.resolvedTo,
targetMode,
};
}