84 lines
2.2 KiB
TypeScript
84 lines
2.2 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
|
|
|
import {
|
|
createInitialAppServerTurnState,
|
|
getAppServerTurnResult,
|
|
reduceAppServerTurnState,
|
|
} from '../src/app-server-state.js';
|
|
|
|
describe('codex app-server turn state', () => {
|
|
it('prefers final_answer over commentary when building final output', () => {
|
|
let state = createInitialAppServerTurnState();
|
|
|
|
state = reduceAppServerTurnState(state, {
|
|
method: 'item/completed',
|
|
params: {
|
|
item: {
|
|
type: 'agentMessage',
|
|
phase: 'commentary',
|
|
text: '중간 설명입니다.',
|
|
},
|
|
},
|
|
});
|
|
|
|
state = reduceAppServerTurnState(state, {
|
|
method: 'item/completed',
|
|
params: {
|
|
item: {
|
|
type: 'agentMessage',
|
|
phase: 'final_answer',
|
|
text: '최종 답변입니다.',
|
|
},
|
|
},
|
|
});
|
|
|
|
expect(getAppServerTurnResult(state)).toBe('최종 답변입니다.');
|
|
});
|
|
|
|
it('does not treat commentary-only messages as a final output', () => {
|
|
const state = reduceAppServerTurnState(createInitialAppServerTurnState(), {
|
|
method: 'item/completed',
|
|
params: {
|
|
item: {
|
|
type: 'agentMessage',
|
|
phase: 'commentary',
|
|
text: '작업 중 상태입니다.',
|
|
},
|
|
},
|
|
});
|
|
|
|
expect(state.latestAgentMessage).toBe('작업 중 상태입니다.');
|
|
expect(getAppServerTurnResult(state)).toBeNull();
|
|
});
|
|
|
|
it('records compaction completion from contextCompaction items', () => {
|
|
const state = reduceAppServerTurnState(createInitialAppServerTurnState(), {
|
|
method: 'item/completed',
|
|
params: {
|
|
item: {
|
|
type: 'contextCompaction',
|
|
id: 'ctx_1',
|
|
},
|
|
},
|
|
});
|
|
|
|
expect(state.compactionCompleted).toBe(true);
|
|
});
|
|
|
|
it('captures upstream HTTP status from app-server error events', () => {
|
|
const state = reduceAppServerTurnState(createInitialAppServerTurnState(), {
|
|
method: 'error',
|
|
params: {
|
|
error: {
|
|
message: 'Too many requests',
|
|
codexErrorInfo: {
|
|
httpStatusCode: 429,
|
|
},
|
|
},
|
|
},
|
|
});
|
|
|
|
expect(state.errorMessage).toBe('Too many requests (HTTP 429)');
|
|
});
|
|
});
|