56 lines
1.4 KiB
TypeScript
56 lines
1.4 KiB
TypeScript
import type { AgentType, PairedRoomRole } from './types.js';
|
|
|
|
export interface RoleAgentPlan {
|
|
ownerAgentType: AgentType;
|
|
reviewerAgentType: AgentType | null;
|
|
arbiterAgentType: AgentType | null;
|
|
}
|
|
|
|
export interface ResolveRoleAgentPlanArgs {
|
|
paired: boolean;
|
|
groupAgentType?: AgentType;
|
|
configuredReviewer: AgentType;
|
|
configuredArbiter?: AgentType | null;
|
|
}
|
|
|
|
/**
|
|
* Preserve current runtime agent-resolution behavior in one pure helper.
|
|
* This intentionally mirrors today's paired inference and does not read room mode yet.
|
|
*/
|
|
export function resolveRoleAgentPlan(
|
|
args: ResolveRoleAgentPlanArgs,
|
|
): RoleAgentPlan {
|
|
const ownerAgentType: AgentType = args.groupAgentType || 'claude-code';
|
|
|
|
if (!args.paired) {
|
|
return {
|
|
ownerAgentType,
|
|
reviewerAgentType: null,
|
|
arbiterAgentType: null,
|
|
};
|
|
}
|
|
|
|
return {
|
|
ownerAgentType,
|
|
reviewerAgentType:
|
|
args.configuredReviewer !== ownerAgentType
|
|
? args.configuredReviewer
|
|
: ownerAgentType,
|
|
arbiterAgentType: args.configuredArbiter ?? null,
|
|
};
|
|
}
|
|
|
|
export function resolveAgentTypeForRole(
|
|
plan: RoleAgentPlan,
|
|
role: PairedRoomRole,
|
|
): AgentType {
|
|
switch (role) {
|
|
case 'reviewer':
|
|
return plan.reviewerAgentType ?? plan.ownerAgentType;
|
|
case 'arbiter':
|
|
return plan.arbiterAgentType ?? plan.ownerAgentType;
|
|
default:
|
|
return plan.ownerAgentType;
|
|
}
|
|
}
|