Files
EJClaw/src/role-agent-plan.ts
2026-03-31 09:41:40 +09:00

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;
}
}