fix: refresh role rules after compaction
This commit is contained in:
104
src/compact-refresh.test.ts
Normal file
104
src/compact-refresh.test.ts
Normal file
@@ -0,0 +1,104 @@
|
||||
import fs from 'fs';
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
|
||||
vi.mock('./config.js', () => ({
|
||||
DATA_DIR: '/tmp/ejclaw-compact-refresh-test',
|
||||
}));
|
||||
|
||||
import {
|
||||
clearCompactRefreshIfUnchanged,
|
||||
markCompactRefreshNeeded,
|
||||
maybeApplyCompactRefresh,
|
||||
readCompactRefreshFlag,
|
||||
} from './compact-refresh.js';
|
||||
|
||||
const refreshDir = '/tmp/ejclaw-compact-refresh-test/compact-refresh';
|
||||
|
||||
describe('compact-refresh', () => {
|
||||
beforeEach(() => {
|
||||
fs.rmSync(refreshDir, { recursive: true, force: true });
|
||||
});
|
||||
|
||||
it('marks and reads compact refresh flags by session folder', () => {
|
||||
const flag = markCompactRefreshNeeded({
|
||||
sessionFolder: 'room:reviewer',
|
||||
sessionId: 'session-1',
|
||||
trigger: 'auto',
|
||||
});
|
||||
|
||||
expect(readCompactRefreshFlag('room:reviewer')).toMatchObject({
|
||||
sessionFolder: 'room:reviewer',
|
||||
sessionId: 'session-1',
|
||||
trigger: 'auto',
|
||||
compactedAt: flag.compactedAt,
|
||||
});
|
||||
});
|
||||
|
||||
it('applies a one-shot compact refresh only for owner and reviewer roles', () => {
|
||||
const flag = markCompactRefreshNeeded({
|
||||
sessionFolder: 'room',
|
||||
sessionId: 'session-1',
|
||||
});
|
||||
|
||||
const applied = maybeApplyCompactRefresh({
|
||||
sessionFolder: 'room',
|
||||
sessionId: 'session-1',
|
||||
role: 'owner',
|
||||
prompt: 'continue task',
|
||||
});
|
||||
|
||||
expect(applied?.flag).toEqual(flag);
|
||||
expect(applied?.prompt).toContain('EJClaw compact refresh');
|
||||
expect(applied?.prompt).toContain('continue task');
|
||||
|
||||
clearCompactRefreshIfUnchanged({
|
||||
sessionFolder: 'room',
|
||||
flag,
|
||||
});
|
||||
|
||||
expect(readCompactRefreshFlag('room')).toBeNull();
|
||||
});
|
||||
|
||||
it('does not apply to arbiter, compact commands, fresh sessions, or stale sessions', () => {
|
||||
markCompactRefreshNeeded({
|
||||
sessionFolder: 'room',
|
||||
sessionId: 'session-1',
|
||||
});
|
||||
|
||||
expect(
|
||||
maybeApplyCompactRefresh({
|
||||
sessionFolder: 'room',
|
||||
sessionId: 'session-1',
|
||||
role: 'arbiter',
|
||||
prompt: 'judge',
|
||||
}),
|
||||
).toBeNull();
|
||||
|
||||
expect(
|
||||
maybeApplyCompactRefresh({
|
||||
sessionFolder: 'room',
|
||||
sessionId: 'session-1',
|
||||
role: 'owner',
|
||||
prompt: '/compact',
|
||||
}),
|
||||
).toBeNull();
|
||||
|
||||
expect(
|
||||
maybeApplyCompactRefresh({
|
||||
sessionFolder: 'room',
|
||||
role: 'owner',
|
||||
prompt: 'fresh',
|
||||
}),
|
||||
).toBeNull();
|
||||
|
||||
expect(
|
||||
maybeApplyCompactRefresh({
|
||||
sessionFolder: 'room',
|
||||
sessionId: 'different-session',
|
||||
role: 'owner',
|
||||
prompt: 'stale',
|
||||
}),
|
||||
).toBeNull();
|
||||
expect(readCompactRefreshFlag('room')).toBeNull();
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user