Refactor local memory and role-fixed runtime routing
This commit is contained in:
90
src/arbiter-service-shadow.test.ts
Normal file
90
src/arbiter-service-shadow.test.ts
Normal file
@@ -0,0 +1,90 @@
|
||||
import { beforeEach, describe, expect, it } from 'vitest';
|
||||
|
||||
import {
|
||||
ARBITER_AGENT_TYPE,
|
||||
ARBITER_SERVICE_ID,
|
||||
CLAUDE_SERVICE_ID,
|
||||
CODEX_MAIN_SERVICE_ID,
|
||||
} from './config.js';
|
||||
import {
|
||||
_initTestDatabase,
|
||||
createServiceHandoff,
|
||||
getChannelOwnerLease,
|
||||
setChannelOwnerLease,
|
||||
} from './db.js';
|
||||
import { resolveRoleServiceShadow } from './role-service-shadow.js';
|
||||
import {
|
||||
clearGlobalFailover,
|
||||
getEffectiveChannelLease,
|
||||
refreshChannelOwnerCache,
|
||||
} from './service-routing.js';
|
||||
|
||||
const customArbiterEnabled =
|
||||
ARBITER_AGENT_TYPE === 'codex' && ARBITER_SERVICE_ID != null;
|
||||
|
||||
describe.skipIf(!customArbiterEnabled)(
|
||||
'custom arbiter service shadow',
|
||||
() => {
|
||||
beforeEach(() => {
|
||||
_initTestDatabase();
|
||||
clearGlobalFailover();
|
||||
refreshChannelOwnerCache(true);
|
||||
});
|
||||
|
||||
it('maps codex arbiter shadow to the configured arbiter service id', () => {
|
||||
expect(resolveRoleServiceShadow('arbiter', 'codex')).toBe(
|
||||
ARBITER_SERVICE_ID,
|
||||
);
|
||||
});
|
||||
|
||||
it('preserves the configured arbiter service id in explicit channel leases', () => {
|
||||
setChannelOwnerLease({
|
||||
chat_jid: 'dc:custom-arbiter-lease',
|
||||
owner_agent_type: 'codex',
|
||||
reviewer_agent_type: 'claude-code',
|
||||
arbiter_agent_type: 'codex',
|
||||
});
|
||||
refreshChannelOwnerCache(true);
|
||||
|
||||
expect(getChannelOwnerLease('dc:custom-arbiter-lease')).toMatchObject({
|
||||
owner_service_id: CODEX_MAIN_SERVICE_ID,
|
||||
reviewer_service_id: CLAUDE_SERVICE_ID,
|
||||
arbiter_service_id: ARBITER_SERVICE_ID,
|
||||
owner_agent_type: 'codex',
|
||||
reviewer_agent_type: 'claude-code',
|
||||
arbiter_agent_type: 'codex',
|
||||
});
|
||||
expect(getEffectiveChannelLease('dc:custom-arbiter-lease')).toMatchObject(
|
||||
{
|
||||
owner_service_id: CODEX_MAIN_SERVICE_ID,
|
||||
reviewer_service_id: CLAUDE_SERVICE_ID,
|
||||
arbiter_service_id: ARBITER_SERVICE_ID,
|
||||
owner_agent_type: 'codex',
|
||||
reviewer_agent_type: 'claude-code',
|
||||
arbiter_agent_type: 'codex',
|
||||
},
|
||||
);
|
||||
});
|
||||
|
||||
it('uses the configured arbiter service id for derived arbiter handoffs', () => {
|
||||
const handoff = createServiceHandoff({
|
||||
chat_jid: 'dc:custom-arbiter-handoff',
|
||||
group_folder: 'custom-arbiter-handoff',
|
||||
source_role: 'owner',
|
||||
source_agent_type: 'codex',
|
||||
target_role: 'arbiter',
|
||||
target_agent_type: 'codex',
|
||||
prompt: 'arbiter please decide',
|
||||
intended_role: 'arbiter',
|
||||
});
|
||||
|
||||
expect(handoff).toMatchObject({
|
||||
source_service_id: CODEX_MAIN_SERVICE_ID,
|
||||
target_service_id: ARBITER_SERVICE_ID,
|
||||
source_role: 'owner',
|
||||
target_role: 'arbiter',
|
||||
target_agent_type: 'codex',
|
||||
});
|
||||
});
|
||||
},
|
||||
);
|
||||
Reference in New Issue
Block a user