refactor: internalize setRegisteredGroup export
This commit is contained in:
@@ -7,6 +7,7 @@ import { describe, it, expect, beforeEach } from 'vitest';
|
|||||||
import {
|
import {
|
||||||
_initTestDatabase,
|
_initTestDatabase,
|
||||||
_initTestDatabaseFromFile,
|
_initTestDatabaseFromFile,
|
||||||
|
_setRegisteredGroupForTests,
|
||||||
assignRoom,
|
assignRoom,
|
||||||
claimServiceHandoff,
|
claimServiceHandoff,
|
||||||
completeServiceHandoffAndAdvanceTargetCursor,
|
completeServiceHandoffAndAdvanceTargetCursor,
|
||||||
@@ -43,7 +44,6 @@ import {
|
|||||||
markWorkItemDelivered,
|
markWorkItemDelivered,
|
||||||
markWorkItemDeliveryRetry,
|
markWorkItemDeliveryRetry,
|
||||||
setSession,
|
setSession,
|
||||||
setRegisteredGroup,
|
|
||||||
setRouterStateForService,
|
setRouterStateForService,
|
||||||
setExplicitRoomMode,
|
setExplicitRoomMode,
|
||||||
storeChatMetadata,
|
storeChatMetadata,
|
||||||
@@ -720,7 +720,7 @@ describe('message query LIMIT', () => {
|
|||||||
|
|
||||||
describe('registered group isMain', () => {
|
describe('registered group isMain', () => {
|
||||||
it('persists isMain=true through set/get round-trip', () => {
|
it('persists isMain=true through set/get round-trip', () => {
|
||||||
setRegisteredGroup('dc:main', {
|
_setRegisteredGroupForTests('dc:main', {
|
||||||
name: 'Main Chat',
|
name: 'Main Chat',
|
||||||
folder: 'discord_main',
|
folder: 'discord_main',
|
||||||
trigger: '@Andy',
|
trigger: '@Andy',
|
||||||
@@ -736,7 +736,7 @@ describe('registered group isMain', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('omits isMain for non-main groups', () => {
|
it('omits isMain for non-main groups', () => {
|
||||||
setRegisteredGroup('group@g.us', {
|
_setRegisteredGroupForTests('group@g.us', {
|
||||||
name: 'Family Chat',
|
name: 'Family Chat',
|
||||||
folder: 'discord_family-chat',
|
folder: 'discord_family-chat',
|
||||||
trigger: '@Andy',
|
trigger: '@Andy',
|
||||||
@@ -750,14 +750,14 @@ describe('registered group isMain', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('filters duplicate jid registrations by agent type', () => {
|
it('filters duplicate jid registrations by agent type', () => {
|
||||||
setRegisteredGroup('dc:shared', {
|
_setRegisteredGroupForTests('dc:shared', {
|
||||||
name: 'Shared Room',
|
name: 'Shared Room',
|
||||||
folder: 'shared-room',
|
folder: 'shared-room',
|
||||||
trigger: '@Andy',
|
trigger: '@Andy',
|
||||||
added_at: '2024-01-01T00:00:00.000Z',
|
added_at: '2024-01-01T00:00:00.000Z',
|
||||||
agentType: 'claude-code',
|
agentType: 'claude-code',
|
||||||
});
|
});
|
||||||
setRegisteredGroup('dc:shared', {
|
_setRegisteredGroupForTests('dc:shared', {
|
||||||
name: 'Shared Room',
|
name: 'Shared Room',
|
||||||
folder: 'shared-room',
|
folder: 'shared-room',
|
||||||
trigger: '@Codex',
|
trigger: '@Codex',
|
||||||
@@ -828,14 +828,14 @@ describe('room assignment writes', () => {
|
|||||||
|
|
||||||
describe('paired room registration', () => {
|
describe('paired room registration', () => {
|
||||||
it('detects when both Claude and Codex are registered on the same jid', () => {
|
it('detects when both Claude and Codex are registered on the same jid', () => {
|
||||||
setRegisteredGroup('dc:123', {
|
_setRegisteredGroupForTests('dc:123', {
|
||||||
name: 'Paired Room',
|
name: 'Paired Room',
|
||||||
folder: 'paired-room',
|
folder: 'paired-room',
|
||||||
trigger: '@Andy',
|
trigger: '@Andy',
|
||||||
added_at: '2024-01-01T00:00:00.000Z',
|
added_at: '2024-01-01T00:00:00.000Z',
|
||||||
agentType: 'claude-code',
|
agentType: 'claude-code',
|
||||||
});
|
});
|
||||||
setRegisteredGroup('dc:123', {
|
_setRegisteredGroupForTests('dc:123', {
|
||||||
name: 'Paired Room',
|
name: 'Paired Room',
|
||||||
folder: 'paired-room',
|
folder: 'paired-room',
|
||||||
trigger: '@Codex',
|
trigger: '@Codex',
|
||||||
@@ -853,7 +853,7 @@ describe('paired room registration', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('does not mark solo rooms as paired', () => {
|
it('does not mark solo rooms as paired', () => {
|
||||||
setRegisteredGroup('dc:solo', {
|
_setRegisteredGroupForTests('dc:solo', {
|
||||||
name: 'Solo Claude Room',
|
name: 'Solo Claude Room',
|
||||||
folder: 'solo-claude',
|
folder: 'solo-claude',
|
||||||
trigger: '@Andy',
|
trigger: '@Andy',
|
||||||
@@ -866,14 +866,14 @@ describe('paired room registration', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('keeps inferred room mode available when no explicit override exists', () => {
|
it('keeps inferred room mode available when no explicit override exists', () => {
|
||||||
setRegisteredGroup('dc:legacy-paired', {
|
_setRegisteredGroupForTests('dc:legacy-paired', {
|
||||||
name: 'Legacy Paired',
|
name: 'Legacy Paired',
|
||||||
folder: 'legacy-paired',
|
folder: 'legacy-paired',
|
||||||
trigger: '@Andy',
|
trigger: '@Andy',
|
||||||
added_at: '2024-01-01T00:00:00.000Z',
|
added_at: '2024-01-01T00:00:00.000Z',
|
||||||
agentType: 'claude-code',
|
agentType: 'claude-code',
|
||||||
});
|
});
|
||||||
setRegisteredGroup('dc:legacy-paired', {
|
_setRegisteredGroupForTests('dc:legacy-paired', {
|
||||||
name: 'Legacy Paired',
|
name: 'Legacy Paired',
|
||||||
folder: 'legacy-paired',
|
folder: 'legacy-paired',
|
||||||
trigger: '@Codex',
|
trigger: '@Codex',
|
||||||
@@ -966,14 +966,14 @@ describe('paired room registration', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('keeps room-level metadata synced on setRegisteredGroup helper writes', () => {
|
it('keeps room-level metadata synced on setRegisteredGroup helper writes', () => {
|
||||||
setRegisteredGroup('dc:room-settings', {
|
_setRegisteredGroupForTests('dc:room-settings', {
|
||||||
name: 'Room Settings Test',
|
name: 'Room Settings Test',
|
||||||
folder: 'room-settings-test',
|
folder: 'room-settings-test',
|
||||||
trigger: '@Claude',
|
trigger: '@Claude',
|
||||||
added_at: '2024-01-01T00:00:00.000Z',
|
added_at: '2024-01-01T00:00:00.000Z',
|
||||||
agentType: 'claude-code',
|
agentType: 'claude-code',
|
||||||
});
|
});
|
||||||
setRegisteredGroup('dc:room-settings', {
|
_setRegisteredGroupForTests('dc:room-settings', {
|
||||||
name: 'Room Settings Test',
|
name: 'Room Settings Test',
|
||||||
folder: 'room-settings-test',
|
folder: 'room-settings-test',
|
||||||
trigger: '@Codex',
|
trigger: '@Codex',
|
||||||
@@ -1082,14 +1082,14 @@ describe('paired room registration', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('lets explicit single override dual registration for paired-room checks', () => {
|
it('lets explicit single override dual registration for paired-room checks', () => {
|
||||||
setRegisteredGroup('dc:explicit-single', {
|
_setRegisteredGroupForTests('dc:explicit-single', {
|
||||||
name: 'Explicit Single',
|
name: 'Explicit Single',
|
||||||
folder: 'explicit-single',
|
folder: 'explicit-single',
|
||||||
trigger: '@Andy',
|
trigger: '@Andy',
|
||||||
added_at: '2024-01-01T00:00:00.000Z',
|
added_at: '2024-01-01T00:00:00.000Z',
|
||||||
agentType: 'claude-code',
|
agentType: 'claude-code',
|
||||||
});
|
});
|
||||||
setRegisteredGroup('dc:explicit-single', {
|
_setRegisteredGroupForTests('dc:explicit-single', {
|
||||||
name: 'Explicit Single',
|
name: 'Explicit Single',
|
||||||
folder: 'explicit-single',
|
folder: 'explicit-single',
|
||||||
trigger: '@Codex',
|
trigger: '@Codex',
|
||||||
@@ -1105,7 +1105,7 @@ describe('paired room registration', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('lets explicit tribunal become runnable when the configured reviewer can run on the solo registration', () => {
|
it('lets explicit tribunal become runnable when the configured reviewer can run on the solo registration', () => {
|
||||||
setRegisteredGroup('dc:explicit-tribunal', {
|
_setRegisteredGroupForTests('dc:explicit-tribunal', {
|
||||||
name: 'Explicit Tribunal Claude',
|
name: 'Explicit Tribunal Claude',
|
||||||
folder: 'explicit-tribunal-claude',
|
folder: 'explicit-tribunal-claude',
|
||||||
trigger: '@Andy',
|
trigger: '@Andy',
|
||||||
@@ -1131,7 +1131,7 @@ describe('paired room registration', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('keeps explicit tribunal non-runnable when the configured reviewer service is unavailable', () => {
|
it('keeps explicit tribunal non-runnable when the configured reviewer service is unavailable', () => {
|
||||||
setRegisteredGroup('dc:explicit-tribunal-codex', {
|
_setRegisteredGroupForTests('dc:explicit-tribunal-codex', {
|
||||||
name: 'Explicit Tribunal Codex',
|
name: 'Explicit Tribunal Codex',
|
||||||
folder: 'explicit-tribunal-codex',
|
folder: 'explicit-tribunal-codex',
|
||||||
trigger: '@Codex',
|
trigger: '@Codex',
|
||||||
|
|||||||
18
src/db.ts
18
src/db.ts
@@ -1987,7 +1987,10 @@ export function getRegisteredGroup(
|
|||||||
return getLegacyRegisteredGroup(db, jid, agentType);
|
return getLegacyRegisteredGroup(db, jid, agentType);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function setRegisteredGroup(jid: string, group: RegisteredGroup): void {
|
function writeLegacyRegisteredGroupAndSyncRoomSettings(
|
||||||
|
jid: string,
|
||||||
|
group: RegisteredGroup,
|
||||||
|
): void {
|
||||||
const existingRoomMode = getStoredRoomModeRow(jid);
|
const existingRoomMode = getStoredRoomModeRow(jid);
|
||||||
if (!isValidGroupFolder(group.folder)) {
|
if (!isValidGroupFolder(group.folder)) {
|
||||||
throw new Error(`Invalid group folder "${group.folder}" for JID ${jid}`);
|
throw new Error(`Invalid group folder "${group.folder}" for JID ${jid}`);
|
||||||
@@ -2017,6 +2020,17 @@ export function setRegisteredGroup(jid: string, group: RegisteredGroup): void {
|
|||||||
tx();
|
tx();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @internal Test/migration helper for seeding legacy capability rows.
|
||||||
|
* Runtime code must use assignRoom() so room_settings remains the explicit SSOT.
|
||||||
|
*/
|
||||||
|
export function _setRegisteredGroupForTests(
|
||||||
|
jid: string,
|
||||||
|
group: RegisteredGroup,
|
||||||
|
): void {
|
||||||
|
writeLegacyRegisteredGroupAndSyncRoomSettings(jid, group);
|
||||||
|
}
|
||||||
|
|
||||||
export function assignRoom(
|
export function assignRoom(
|
||||||
chatJid: string,
|
chatJid: string,
|
||||||
input: AssignRoomInput,
|
input: AssignRoomInput,
|
||||||
@@ -3337,7 +3351,7 @@ function migrateJsonState(): void {
|
|||||||
if (groups) {
|
if (groups) {
|
||||||
for (const [jid, group] of Object.entries(groups)) {
|
for (const [jid, group] of Object.entries(groups)) {
|
||||||
try {
|
try {
|
||||||
setRegisteredGroup(jid, group);
|
writeLegacyRegisteredGroupAndSyncRoomSettings(jid, group);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
logger.warn(
|
logger.warn(
|
||||||
{ jid, folder: group.folder, err },
|
{ jid, folder: group.folder, err },
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
import { describe, it, expect, beforeEach, vi } from 'vitest';
|
import { describe, it, expect, beforeEach, vi } from 'vitest';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
|
_setRegisteredGroupForTests,
|
||||||
_initTestDatabase,
|
_initTestDatabase,
|
||||||
storeMessage,
|
storeMessage,
|
||||||
storeChatMetadata,
|
storeChatMetadata,
|
||||||
createProducedWorkItem,
|
createProducedWorkItem,
|
||||||
getOpenWorkItem,
|
getOpenWorkItem,
|
||||||
setRegisteredGroup,
|
|
||||||
getLastBotFinalMessage,
|
getLastBotFinalMessage,
|
||||||
markWorkItemDelivered,
|
markWorkItemDelivered,
|
||||||
} from './db.js';
|
} from './db.js';
|
||||||
@@ -56,7 +56,7 @@ describe('hasReviewerLease', () => {
|
|||||||
it('returns true when both claude-code and codex are registered', () => {
|
it('returns true when both claude-code and codex are registered', () => {
|
||||||
const jid = 'dc:paired-room';
|
const jid = 'dc:paired-room';
|
||||||
|
|
||||||
setRegisteredGroup(jid, {
|
_setRegisteredGroupForTests(jid, {
|
||||||
name: 'Paired Room',
|
name: 'Paired Room',
|
||||||
folder: 'paired-room',
|
folder: 'paired-room',
|
||||||
trigger: '@claude',
|
trigger: '@claude',
|
||||||
@@ -64,7 +64,7 @@ describe('hasReviewerLease', () => {
|
|||||||
agentType: 'claude-code',
|
agentType: 'claude-code',
|
||||||
});
|
});
|
||||||
|
|
||||||
setRegisteredGroup(jid, {
|
_setRegisteredGroupForTests(jid, {
|
||||||
name: 'Paired Room',
|
name: 'Paired Room',
|
||||||
folder: 'paired-room',
|
folder: 'paired-room',
|
||||||
trigger: '@codex',
|
trigger: '@codex',
|
||||||
@@ -78,7 +78,7 @@ describe('hasReviewerLease', () => {
|
|||||||
it('returns false when only claude-code is registered', () => {
|
it('returns false when only claude-code is registered', () => {
|
||||||
const jid = 'dc:single-claude';
|
const jid = 'dc:single-claude';
|
||||||
|
|
||||||
setRegisteredGroup(jid, {
|
_setRegisteredGroupForTests(jid, {
|
||||||
name: 'Single Claude',
|
name: 'Single Claude',
|
||||||
folder: 'single-claude',
|
folder: 'single-claude',
|
||||||
trigger: '@claude',
|
trigger: '@claude',
|
||||||
@@ -92,7 +92,7 @@ describe('hasReviewerLease', () => {
|
|||||||
it('returns false when only codex is registered', () => {
|
it('returns false when only codex is registered', () => {
|
||||||
const jid = 'dc:single-codex';
|
const jid = 'dc:single-codex';
|
||||||
|
|
||||||
setRegisteredGroup(jid, {
|
_setRegisteredGroupForTests(jid, {
|
||||||
name: 'Single Codex',
|
name: 'Single Codex',
|
||||||
folder: 'single-codex',
|
folder: 'single-codex',
|
||||||
trigger: '@codex',
|
trigger: '@codex',
|
||||||
@@ -180,7 +180,7 @@ describe('isDuplicateOfLastBotFinal (runtime function)', () => {
|
|||||||
setupChat(jid);
|
setupChat(jid);
|
||||||
|
|
||||||
// Register as paired room
|
// Register as paired room
|
||||||
setRegisteredGroup(jid, {
|
_setRegisteredGroupForTests(jid, {
|
||||||
name: 'Paired Room',
|
name: 'Paired Room',
|
||||||
folder: 'paired-room',
|
folder: 'paired-room',
|
||||||
trigger: '@claude',
|
trigger: '@claude',
|
||||||
@@ -188,7 +188,7 @@ describe('isDuplicateOfLastBotFinal (runtime function)', () => {
|
|||||||
agentType: 'claude-code',
|
agentType: 'claude-code',
|
||||||
});
|
});
|
||||||
|
|
||||||
setRegisteredGroup(jid, {
|
_setRegisteredGroupForTests(jid, {
|
||||||
name: 'Paired Room',
|
name: 'Paired Room',
|
||||||
folder: 'paired-room',
|
folder: 'paired-room',
|
||||||
trigger: '@codex',
|
trigger: '@codex',
|
||||||
@@ -225,7 +225,7 @@ describe('isDuplicateOfLastBotFinal (runtime function)', () => {
|
|||||||
setupChat(jid);
|
setupChat(jid);
|
||||||
|
|
||||||
// Register only one bot
|
// Register only one bot
|
||||||
setRegisteredGroup(jid, {
|
_setRegisteredGroupForTests(jid, {
|
||||||
name: 'Single Bot',
|
name: 'Single Bot',
|
||||||
folder: 'single-bot',
|
folder: 'single-bot',
|
||||||
trigger: '@claude',
|
trigger: '@claude',
|
||||||
@@ -257,7 +257,7 @@ describe('isDuplicateOfLastBotFinal (runtime function)', () => {
|
|||||||
setupChat(jid);
|
setupChat(jid);
|
||||||
|
|
||||||
// Register as paired room
|
// Register as paired room
|
||||||
setRegisteredGroup(jid, {
|
_setRegisteredGroupForTests(jid, {
|
||||||
name: 'Paired Room',
|
name: 'Paired Room',
|
||||||
folder: 'paired-room',
|
folder: 'paired-room',
|
||||||
trigger: '@claude',
|
trigger: '@claude',
|
||||||
@@ -265,7 +265,7 @@ describe('isDuplicateOfLastBotFinal (runtime function)', () => {
|
|||||||
agentType: 'claude-code',
|
agentType: 'claude-code',
|
||||||
});
|
});
|
||||||
|
|
||||||
setRegisteredGroup(jid, {
|
_setRegisteredGroupForTests(jid, {
|
||||||
name: 'Paired Room',
|
name: 'Paired Room',
|
||||||
folder: 'paired-room',
|
folder: 'paired-room',
|
||||||
trigger: '@codex',
|
trigger: '@codex',
|
||||||
@@ -297,7 +297,7 @@ describe('isDuplicateOfLastBotFinal (runtime function)', () => {
|
|||||||
setupChat(jid);
|
setupChat(jid);
|
||||||
|
|
||||||
// Register as paired room
|
// Register as paired room
|
||||||
setRegisteredGroup(jid, {
|
_setRegisteredGroupForTests(jid, {
|
||||||
name: 'Paired Room',
|
name: 'Paired Room',
|
||||||
folder: 'paired-room',
|
folder: 'paired-room',
|
||||||
trigger: '@claude',
|
trigger: '@claude',
|
||||||
@@ -305,7 +305,7 @@ describe('isDuplicateOfLastBotFinal (runtime function)', () => {
|
|||||||
agentType: 'claude-code',
|
agentType: 'claude-code',
|
||||||
});
|
});
|
||||||
|
|
||||||
setRegisteredGroup(jid, {
|
_setRegisteredGroupForTests(jid, {
|
||||||
name: 'Paired Room',
|
name: 'Paired Room',
|
||||||
folder: 'paired-room',
|
folder: 'paired-room',
|
||||||
trigger: '@codex',
|
trigger: '@codex',
|
||||||
@@ -336,7 +336,7 @@ describe('isDuplicateOfLastBotFinal (runtime function)', () => {
|
|||||||
setupChat(jid);
|
setupChat(jid);
|
||||||
|
|
||||||
// Register as paired room
|
// Register as paired room
|
||||||
setRegisteredGroup(jid, {
|
_setRegisteredGroupForTests(jid, {
|
||||||
name: 'Paired Room',
|
name: 'Paired Room',
|
||||||
folder: 'paired-room',
|
folder: 'paired-room',
|
||||||
trigger: '@claude',
|
trigger: '@claude',
|
||||||
@@ -344,7 +344,7 @@ describe('isDuplicateOfLastBotFinal (runtime function)', () => {
|
|||||||
agentType: 'claude-code',
|
agentType: 'claude-code',
|
||||||
});
|
});
|
||||||
|
|
||||||
setRegisteredGroup(jid, {
|
_setRegisteredGroupForTests(jid, {
|
||||||
name: 'Paired Room',
|
name: 'Paired Room',
|
||||||
folder: 'paired-room',
|
folder: 'paired-room',
|
||||||
trigger: '@codex',
|
trigger: '@codex',
|
||||||
@@ -384,7 +384,7 @@ describe('isDuplicateOfLastBotFinal (runtime function)', () => {
|
|||||||
setupChat(jid);
|
setupChat(jid);
|
||||||
|
|
||||||
// Register as paired room
|
// Register as paired room
|
||||||
setRegisteredGroup(jid, {
|
_setRegisteredGroupForTests(jid, {
|
||||||
name: 'Paired Room',
|
name: 'Paired Room',
|
||||||
folder: 'paired-room',
|
folder: 'paired-room',
|
||||||
trigger: '@claude',
|
trigger: '@claude',
|
||||||
@@ -392,7 +392,7 @@ describe('isDuplicateOfLastBotFinal (runtime function)', () => {
|
|||||||
agentType: 'claude-code',
|
agentType: 'claude-code',
|
||||||
});
|
});
|
||||||
|
|
||||||
setRegisteredGroup(jid, {
|
_setRegisteredGroupForTests(jid, {
|
||||||
name: 'Paired Room',
|
name: 'Paired Room',
|
||||||
folder: 'paired-room',
|
folder: 'paired-room',
|
||||||
trigger: '@codex',
|
trigger: '@codex',
|
||||||
@@ -440,7 +440,7 @@ describe('isDuplicateOfLastBotFinal (runtime function)', () => {
|
|||||||
setupChat(jid);
|
setupChat(jid);
|
||||||
|
|
||||||
// Register as paired room
|
// Register as paired room
|
||||||
setRegisteredGroup(jid, {
|
_setRegisteredGroupForTests(jid, {
|
||||||
name: 'Paired Room',
|
name: 'Paired Room',
|
||||||
folder: 'paired-room',
|
folder: 'paired-room',
|
||||||
trigger: '@claude',
|
trigger: '@claude',
|
||||||
@@ -448,7 +448,7 @@ describe('isDuplicateOfLastBotFinal (runtime function)', () => {
|
|||||||
agentType: 'claude-code',
|
agentType: 'claude-code',
|
||||||
});
|
});
|
||||||
|
|
||||||
setRegisteredGroup(jid, {
|
_setRegisteredGroupForTests(jid, {
|
||||||
name: 'Paired Room',
|
name: 'Paired Room',
|
||||||
folder: 'paired-room',
|
folder: 'paired-room',
|
||||||
trigger: '@codex',
|
trigger: '@codex',
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import { describe, it, expect, beforeEach, vi } from 'vitest';
|
|||||||
|
|
||||||
import { ASSISTANT_NAME } from './config.js';
|
import { ASSISTANT_NAME } from './config.js';
|
||||||
import {
|
import {
|
||||||
|
_setRegisteredGroupForTests,
|
||||||
_initTestDatabase,
|
_initTestDatabase,
|
||||||
assignRoom,
|
assignRoom,
|
||||||
createTask,
|
createTask,
|
||||||
@@ -10,7 +11,6 @@ import {
|
|||||||
getRegisteredGroup,
|
getRegisteredGroup,
|
||||||
getStoredRoomSettings,
|
getStoredRoomSettings,
|
||||||
getTaskById,
|
getTaskById,
|
||||||
setRegisteredGroup,
|
|
||||||
} from './db.js';
|
} from './db.js';
|
||||||
import { processTaskIpc, IpcDeps } from './ipc.js';
|
import { processTaskIpc, IpcDeps } from './ipc.js';
|
||||||
import { DEFAULT_WATCH_CI_MAX_DURATION_MS } from './task-watch-status.js';
|
import { DEFAULT_WATCH_CI_MAX_DURATION_MS } from './task-watch-status.js';
|
||||||
@@ -52,9 +52,9 @@ beforeEach(() => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Populate DB as well
|
// Populate DB as well
|
||||||
setRegisteredGroup('main@g.us', MAIN_GROUP);
|
_setRegisteredGroupForTests('main@g.us', MAIN_GROUP);
|
||||||
setRegisteredGroup('other@g.us', OTHER_GROUP);
|
_setRegisteredGroupForTests('other@g.us', OTHER_GROUP);
|
||||||
setRegisteredGroup('third@g.us', THIRD_GROUP);
|
_setRegisteredGroupForTests('third@g.us', THIRD_GROUP);
|
||||||
|
|
||||||
deps = {
|
deps = {
|
||||||
sendMessage: async () => {},
|
sendMessage: async () => {},
|
||||||
@@ -119,7 +119,7 @@ describe('schedule_task authorization', () => {
|
|||||||
...OTHER_GROUP,
|
...OTHER_GROUP,
|
||||||
agentType: 'codex',
|
agentType: 'codex',
|
||||||
};
|
};
|
||||||
setRegisteredGroup('other@g.us', groups['other@g.us']);
|
_setRegisteredGroupForTests('other@g.us', groups['other@g.us']);
|
||||||
|
|
||||||
await processTaskIpc(
|
await processTaskIpc(
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
import { beforeEach, describe, expect, it } from 'vitest';
|
import { beforeEach, describe, expect, it } from 'vitest';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
|
_setRegisteredGroupForTests,
|
||||||
_setStoredRoomOwnerAgentTypeForTests,
|
_setStoredRoomOwnerAgentTypeForTests,
|
||||||
_initTestDatabase,
|
_initTestDatabase,
|
||||||
setExplicitRoomMode,
|
setExplicitRoomMode,
|
||||||
setRegisteredGroup,
|
|
||||||
} from './db.js';
|
} from './db.js';
|
||||||
import {
|
import {
|
||||||
activateCodexFailover,
|
activateCodexFailover,
|
||||||
@@ -22,14 +22,14 @@ beforeEach(() => {
|
|||||||
|
|
||||||
describe('service-routing global failover', () => {
|
describe('service-routing global failover', () => {
|
||||||
it('uses codex-review as owner during global failover', () => {
|
it('uses codex-review as owner during global failover', () => {
|
||||||
setRegisteredGroup('dc:paired', {
|
_setRegisteredGroupForTests('dc:paired', {
|
||||||
name: 'Paired Room',
|
name: 'Paired Room',
|
||||||
folder: 'paired-room',
|
folder: 'paired-room',
|
||||||
trigger: '@Andy',
|
trigger: '@Andy',
|
||||||
added_at: '2024-01-01T00:00:00.000Z',
|
added_at: '2024-01-01T00:00:00.000Z',
|
||||||
agentType: 'claude-code',
|
agentType: 'claude-code',
|
||||||
});
|
});
|
||||||
setRegisteredGroup('dc:paired', {
|
_setRegisteredGroupForTests('dc:paired', {
|
||||||
name: 'Paired Room',
|
name: 'Paired Room',
|
||||||
folder: 'paired-room',
|
folder: 'paired-room',
|
||||||
trigger: '@Codex',
|
trigger: '@Codex',
|
||||||
@@ -57,14 +57,14 @@ describe('service-routing global failover', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('restores default lease after global failover is cleared', () => {
|
it('restores default lease after global failover is cleared', () => {
|
||||||
setRegisteredGroup('dc:paired', {
|
_setRegisteredGroupForTests('dc:paired', {
|
||||||
name: 'Paired Room',
|
name: 'Paired Room',
|
||||||
folder: 'paired-room',
|
folder: 'paired-room',
|
||||||
trigger: '@Andy',
|
trigger: '@Andy',
|
||||||
added_at: '2024-01-01T00:00:00.000Z',
|
added_at: '2024-01-01T00:00:00.000Z',
|
||||||
agentType: 'claude-code',
|
agentType: 'claude-code',
|
||||||
});
|
});
|
||||||
setRegisteredGroup('dc:paired', {
|
_setRegisteredGroupForTests('dc:paired', {
|
||||||
name: 'Paired Room',
|
name: 'Paired Room',
|
||||||
folder: 'paired-room',
|
folder: 'paired-room',
|
||||||
trigger: '@Codex',
|
trigger: '@Codex',
|
||||||
@@ -85,14 +85,14 @@ describe('service-routing global failover', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('uses explicit single room mode to suppress reviewer lease on dual registration', () => {
|
it('uses explicit single room mode to suppress reviewer lease on dual registration', () => {
|
||||||
setRegisteredGroup('dc:explicit-single', {
|
_setRegisteredGroupForTests('dc:explicit-single', {
|
||||||
name: 'Explicit Single',
|
name: 'Explicit Single',
|
||||||
folder: 'explicit-single',
|
folder: 'explicit-single',
|
||||||
trigger: '@Andy',
|
trigger: '@Andy',
|
||||||
added_at: '2024-01-01T00:00:00.000Z',
|
added_at: '2024-01-01T00:00:00.000Z',
|
||||||
agentType: 'claude-code',
|
agentType: 'claude-code',
|
||||||
});
|
});
|
||||||
setRegisteredGroup('dc:explicit-single', {
|
_setRegisteredGroupForTests('dc:explicit-single', {
|
||||||
name: 'Explicit Single',
|
name: 'Explicit Single',
|
||||||
folder: 'explicit-single',
|
folder: 'explicit-single',
|
||||||
trigger: '@Codex',
|
trigger: '@Codex',
|
||||||
@@ -110,14 +110,14 @@ describe('service-routing global failover', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('uses stored owner agent type when room_settings selects a different owner', () => {
|
it('uses stored owner agent type when room_settings selects a different owner', () => {
|
||||||
setRegisteredGroup('dc:stored-owner-claude', {
|
_setRegisteredGroupForTests('dc:stored-owner-claude', {
|
||||||
name: 'Stored Owner Claude',
|
name: 'Stored Owner Claude',
|
||||||
folder: 'stored-owner-claude',
|
folder: 'stored-owner-claude',
|
||||||
trigger: '@Andy',
|
trigger: '@Andy',
|
||||||
added_at: '2024-01-01T00:00:00.000Z',
|
added_at: '2024-01-01T00:00:00.000Z',
|
||||||
agentType: 'claude-code',
|
agentType: 'claude-code',
|
||||||
});
|
});
|
||||||
setRegisteredGroup('dc:stored-owner-claude', {
|
_setRegisteredGroupForTests('dc:stored-owner-claude', {
|
||||||
name: 'Stored Owner Claude',
|
name: 'Stored Owner Claude',
|
||||||
folder: 'stored-owner-claude',
|
folder: 'stored-owner-claude',
|
||||||
trigger: '@Codex',
|
trigger: '@Codex',
|
||||||
@@ -139,7 +139,7 @@ describe('service-routing global failover', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('falls back to the available service when stored owner agent type is unavailable', () => {
|
it('falls back to the available service when stored owner agent type is unavailable', () => {
|
||||||
setRegisteredGroup('dc:stored-owner-fallback', {
|
_setRegisteredGroupForTests('dc:stored-owner-fallback', {
|
||||||
name: 'Stored Owner Fallback',
|
name: 'Stored Owner Fallback',
|
||||||
folder: 'stored-owner-fallback',
|
folder: 'stored-owner-fallback',
|
||||||
trigger: '@Andy',
|
trigger: '@Andy',
|
||||||
@@ -157,7 +157,7 @@ describe('service-routing global failover', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('creates a same-service reviewer lease when explicit tribunal is runnable on a solo registration', () => {
|
it('creates a same-service reviewer lease when explicit tribunal is runnable on a solo registration', () => {
|
||||||
setRegisteredGroup('dc:explicit-tribunal', {
|
_setRegisteredGroupForTests('dc:explicit-tribunal', {
|
||||||
name: 'Explicit Tribunal Claude',
|
name: 'Explicit Tribunal Claude',
|
||||||
folder: 'explicit-tribunal-claude',
|
folder: 'explicit-tribunal-claude',
|
||||||
trigger: '@Andy',
|
trigger: '@Andy',
|
||||||
@@ -175,7 +175,7 @@ describe('service-routing global failover', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('keeps reviewer lease disabled when explicit tribunal cannot deliver the configured reviewer', () => {
|
it('keeps reviewer lease disabled when explicit tribunal cannot deliver the configured reviewer', () => {
|
||||||
setRegisteredGroup('dc:explicit-tribunal-codex', {
|
_setRegisteredGroupForTests('dc:explicit-tribunal-codex', {
|
||||||
name: 'Explicit Tribunal Codex',
|
name: 'Explicit Tribunal Codex',
|
||||||
folder: 'explicit-tribunal-codex',
|
folder: 'explicit-tribunal-codex',
|
||||||
trigger: '@Codex',
|
trigger: '@Codex',
|
||||||
|
|||||||
Reference in New Issue
Block a user