feat: add room-level assignment write path

This commit is contained in:
Eyejoker
2026-03-31 21:21:57 +09:00
parent 200cbef0f9
commit b9538e54bc
6 changed files with 769 additions and 114 deletions

View File

@@ -7,6 +7,7 @@ import { describe, it, expect, beforeEach } from 'vitest';
import {
_initTestDatabase,
_initTestDatabaseFromFile,
assignRoom,
claimServiceHandoff,
completeServiceHandoffAndAdvanceTargetCursor,
createPairedTask,
@@ -774,6 +775,57 @@ describe('registered group isMain', () => {
});
});
describe('room assignment writes', () => {
it('assigns a single room with an auto-generated folder', () => {
const group = assignRoom('tg:-1001', {
name: 'Telegram Dev Team',
roomMode: 'single',
ownerAgentType: 'claude-code',
});
expect(group).toBeDefined();
expect(group!.folder).toMatch(/^grp_telegram_/);
expect(group!.agentType).toBe('claude-code');
expect(getStoredRoomSettings('tg:-1001')).toMatchObject({
chatJid: 'tg:-1001',
roomMode: 'single',
modeSource: 'explicit',
name: 'Telegram Dev Team',
ownerAgentType: 'claude-code',
});
expect(getRegisteredAgentTypesForJid('tg:-1001')).toEqual(['claude-code']);
});
it('materializes tribunal capability rows while serving metadata from room_settings', () => {
assignRoom('dc:assigned-room', {
name: 'Assigned Room',
roomMode: 'tribunal',
ownerAgentType: 'codex',
folder: 'assigned-room',
});
const allGroups = getAllRegisteredGroups();
const claudeGroups = getAllRegisteredGroups('claude-code');
const codexGroups = getAllRegisteredGroups('codex');
expect(allGroups['dc:assigned-room']).toMatchObject({
name: 'Assigned Room',
folder: 'assigned-room',
agentType: 'codex',
});
expect(claudeGroups['dc:assigned-room']).toMatchObject({
name: 'Assigned Room',
folder: 'assigned-room',
agentType: 'claude-code',
});
expect(codexGroups['dc:assigned-room']).toMatchObject({
name: 'Assigned Room',
folder: 'assigned-room',
agentType: 'codex',
});
});
});
describe('paired room registration', () => {
it('detects when both Claude and Codex are registered on the same jid', () => {
setRegisteredGroup('dc:123', {