refactor: extract resolveEffectiveAgentType/resolveSessionFolder as SSOT, deduplicate CONTAINER_IMAGE
This commit is contained in:
@@ -4,6 +4,12 @@ import { normalizeStoredSeqCursor } from './message-cursor.js';
|
||||
import { isTriggerAllowed, loadSenderAllowlist } from './sender-allowlist.js';
|
||||
import { isTaskStatusControlMessage } from './task-watch-status.js';
|
||||
import {
|
||||
ARBITER_AGENT_TYPE,
|
||||
OWNER_AGENT_TYPE,
|
||||
REVIEWER_AGENT_TYPE,
|
||||
} from './config.js';
|
||||
import {
|
||||
type AgentType,
|
||||
type Channel,
|
||||
type NewMessage,
|
||||
type RegisteredGroup,
|
||||
@@ -57,6 +63,38 @@ export function resolveCursorKey(
|
||||
return role === 'owner' ? chatJid : `${chatJid}:${role}`;
|
||||
}
|
||||
|
||||
/** Resolve the effective agent type for a role, considering per-role overrides. */
|
||||
export function resolveEffectiveAgentType(
|
||||
role: 'owner' | 'reviewer' | 'arbiter',
|
||||
groupAgentType: AgentType | undefined,
|
||||
): AgentType {
|
||||
const groupDefault: AgentType = groupAgentType || 'claude-code';
|
||||
switch (role) {
|
||||
case 'reviewer':
|
||||
return REVIEWER_AGENT_TYPE !== groupDefault
|
||||
? REVIEWER_AGENT_TYPE
|
||||
: groupDefault;
|
||||
case 'arbiter':
|
||||
return ARBITER_AGENT_TYPE != null && ARBITER_AGENT_TYPE !== groupDefault
|
||||
? ARBITER_AGENT_TYPE
|
||||
: groupDefault;
|
||||
default:
|
||||
return groupDefault;
|
||||
}
|
||||
}
|
||||
|
||||
/** Session folder key for a role. Owner uses groupFolder, others use groupFolder:role. */
|
||||
export function resolveSessionFolder(
|
||||
groupFolder: string,
|
||||
role: 'owner' | 'reviewer' | 'arbiter',
|
||||
groupAgentType: AgentType | undefined,
|
||||
): string {
|
||||
const effectiveType = resolveEffectiveAgentType(role, groupAgentType);
|
||||
const groupDefault: AgentType = groupAgentType || 'claude-code';
|
||||
if (effectiveType === groupDefault) return groupFolder;
|
||||
return `${groupFolder}:${role}`;
|
||||
}
|
||||
|
||||
export function createImplicitContinuationTracker(idleTimeout: number) {
|
||||
const implicitContinuationUntil = new Map<string, number>();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user