feat: add room-level assignment write path
This commit is contained in:
54
src/index.ts
54
src/index.ts
@@ -24,15 +24,15 @@ import {
|
||||
import { writeGroupsSnapshot } from './agent-runner.js';
|
||||
import { listAvailableGroups } from './available-groups.js';
|
||||
import {
|
||||
type AssignRoomInput,
|
||||
assignRoom,
|
||||
getAllRegisteredGroups,
|
||||
getAllSessions,
|
||||
getAllTasks,
|
||||
getLatestMessageSeqAtOrBefore,
|
||||
hasRecentRestartAnnouncement,
|
||||
getRegisteredGroup,
|
||||
getRouterState,
|
||||
initDatabase,
|
||||
setRegisteredGroup,
|
||||
setRouterState,
|
||||
deleteAllSessionsForGroup,
|
||||
deleteSession,
|
||||
@@ -217,29 +217,68 @@ function clearSession(
|
||||
}
|
||||
|
||||
function registerGroup(jid: string, group: RegisteredGroup): void {
|
||||
const assignedGroup = assignRoom(jid, {
|
||||
name: group.name,
|
||||
ownerAgentType: group.agentType,
|
||||
folder: group.folder,
|
||||
trigger: group.trigger,
|
||||
requiresTrigger: group.requiresTrigger,
|
||||
isMain: group.isMain,
|
||||
workDir: group.workDir,
|
||||
addedAt: group.added_at,
|
||||
ownerAgentConfig: group.agentConfig,
|
||||
});
|
||||
if (!assignedGroup) {
|
||||
logger.warn({ jid }, 'Failed to assign room during legacy registration');
|
||||
return;
|
||||
}
|
||||
|
||||
let groupDir: string;
|
||||
try {
|
||||
groupDir = resolveGroupFolderPath(group.folder);
|
||||
groupDir = resolveGroupFolderPath(assignedGroup.folder);
|
||||
} catch (err) {
|
||||
logger.warn(
|
||||
{ jid, folder: group.folder, err },
|
||||
{ jid, folder: assignedGroup.folder, err },
|
||||
'Rejecting group registration with invalid folder',
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
registeredGroups[jid] = group;
|
||||
setRegisteredGroup(jid, group);
|
||||
const { jid: _ignoredJid, ...storedGroup } = assignedGroup;
|
||||
registeredGroups[jid] = storedGroup;
|
||||
|
||||
// Create group folder
|
||||
fs.mkdirSync(path.join(groupDir, 'logs'), { recursive: true });
|
||||
|
||||
logger.info(
|
||||
{ jid, name: group.name, folder: group.folder },
|
||||
{ jid, name: assignedGroup.name, folder: assignedGroup.folder },
|
||||
'Group registered',
|
||||
);
|
||||
}
|
||||
|
||||
function assignRoomForIpc(jid: string, input: AssignRoomInput): void {
|
||||
const assignedGroup = assignRoom(jid, input);
|
||||
if (!assignedGroup) {
|
||||
logger.warn({ jid }, 'Failed to assign room from IPC');
|
||||
return;
|
||||
}
|
||||
|
||||
let groupDir: string;
|
||||
try {
|
||||
groupDir = resolveGroupFolderPath(assignedGroup.folder);
|
||||
} catch (err) {
|
||||
logger.warn(
|
||||
{ jid, folder: assignedGroup.folder, err },
|
||||
'Rejecting room assignment with invalid folder',
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
const { jid: _ignoredJid, ...storedGroup } = assignedGroup;
|
||||
registeredGroups[jid] = storedGroup;
|
||||
fs.mkdirSync(path.join(groupDir, 'logs'), { recursive: true });
|
||||
}
|
||||
|
||||
/**
|
||||
* Get available groups list for the agent.
|
||||
* Returns groups ordered by most recent activity.
|
||||
@@ -483,6 +522,7 @@ async function main(): Promise<void> {
|
||||
nudgeScheduler: nudgeSchedulerLoop,
|
||||
registeredGroups: () => registeredGroups,
|
||||
registerGroup,
|
||||
assignRoom: assignRoomForIpc,
|
||||
syncGroups: async (force: boolean) => {
|
||||
await Promise.all(
|
||||
channels
|
||||
|
||||
Reference in New Issue
Block a user