fix: preserve handoff roles during failover

This commit is contained in:
Eyejoker
2026-04-01 02:54:35 +09:00
parent a955964522
commit 60f360b5ea
8 changed files with 235 additions and 11 deletions

View File

@@ -183,7 +183,10 @@ vi.mock('./session-commands.js', () => ({
import * as agentRunner from './agent-runner.js';
import * as db from './db.js';
import { resolveGroupIpcPath } from './group-folder.js';
import { createMessageRuntime } from './message-runtime.js';
import {
createMessageRuntime,
resolveHandoffRoleOverride,
} from './message-runtime.js';
import * as config from './config.js';
import * as serviceRouting from './service-routing.js';
import type { Channel, RegisteredGroup } from './types.js';
@@ -223,6 +226,33 @@ describe('createMessageRuntime', () => {
vi.mocked(config.isReviewService).mockReturnValue(false);
});
it('prefers intended_role over reason prefixes for handoff role resolution', () => {
expect(
resolveHandoffRoleOverride({
intended_role: 'reviewer',
reason: 'claude-429',
}),
).toBe('reviewer');
expect(
resolveHandoffRoleOverride({
intended_role: null,
reason: 'arbiter-claude-429',
}),
).toBe('arbiter');
expect(
resolveHandoffRoleOverride({
intended_role: null,
reason: 'reviewer-claude-usage-exhausted',
}),
).toBe('reviewer');
expect(
resolveHandoffRoleOverride({
intended_role: null,
reason: 'claude-usage-exhausted',
}),
).toBeUndefined();
});
it('ignores generic failure bot messages in paired rooms', async () => {
const chatJid = 'group@test';
const group = makeGroup('codex');