105 lines
2.5 KiB
TypeScript
105 lines
2.5 KiB
TypeScript
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();
|
|
});
|
|
});
|