mirror of
https://github.com/wu736139669/hapi.git
synced 2026-11-07 01:21:37 +00:00
feat: new codex remote mode
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
import { describe, expect, it } from 'vitest';
|
||||
import { AppServerEventConverter } from './appServerEventConverter';
|
||||
|
||||
describe('AppServerEventConverter', () => {
|
||||
it('maps thread/started', () => {
|
||||
const converter = new AppServerEventConverter();
|
||||
const events = converter.handleNotification('thread/started', { thread: { id: 'thread-1' } });
|
||||
|
||||
expect(events).toEqual([{ type: 'thread_started', thread_id: 'thread-1' }]);
|
||||
});
|
||||
|
||||
it('maps thread/resumed', () => {
|
||||
const converter = new AppServerEventConverter();
|
||||
const events = converter.handleNotification('thread/resumed', { thread: { id: 'thread-2' } });
|
||||
|
||||
expect(events).toEqual([{ type: 'thread_started', thread_id: 'thread-2' }]);
|
||||
});
|
||||
|
||||
it('maps turn/started and completed statuses', () => {
|
||||
const converter = new AppServerEventConverter();
|
||||
|
||||
const started = converter.handleNotification('turn/started', { turn: { id: 'turn-1' } });
|
||||
expect(started).toEqual([{ type: 'task_started', turn_id: 'turn-1' }]);
|
||||
|
||||
const completed = converter.handleNotification('turn/completed', { turn: { id: 'turn-1' }, status: 'Completed' });
|
||||
expect(completed).toEqual([{ type: 'task_complete', turn_id: 'turn-1' }]);
|
||||
|
||||
const interrupted = converter.handleNotification('turn/completed', { turn: { id: 'turn-1' }, status: 'Interrupted' });
|
||||
expect(interrupted).toEqual([{ type: 'turn_aborted', turn_id: 'turn-1' }]);
|
||||
|
||||
const failed = converter.handleNotification('turn/completed', { turn: { id: 'turn-1' }, status: 'Failed', message: 'boom' });
|
||||
expect(failed).toEqual([{ type: 'task_failed', turn_id: 'turn-1', error: 'boom' }]);
|
||||
});
|
||||
|
||||
it('accumulates agent message deltas', () => {
|
||||
const converter = new AppServerEventConverter();
|
||||
|
||||
converter.handleNotification('item/agentMessage/delta', { itemId: 'msg-1', delta: 'Hello' });
|
||||
converter.handleNotification('item/agentMessage/delta', { itemId: 'msg-1', delta: ' world' });
|
||||
const completed = converter.handleNotification('item/completed', {
|
||||
item: { id: 'msg-1', type: 'agentMessage' }
|
||||
});
|
||||
|
||||
expect(completed).toEqual([{ type: 'agent_message', message: 'Hello world' }]);
|
||||
});
|
||||
|
||||
it('maps command execution items and output deltas', () => {
|
||||
const converter = new AppServerEventConverter();
|
||||
|
||||
const started = converter.handleNotification('item/started', {
|
||||
item: { id: 'cmd-1', type: 'commandExecution', command: 'ls' }
|
||||
});
|
||||
expect(started).toEqual([{
|
||||
type: 'exec_command_begin',
|
||||
call_id: 'cmd-1',
|
||||
command: 'ls'
|
||||
}]);
|
||||
|
||||
converter.handleNotification('item/commandExecution/outputDelta', { itemId: 'cmd-1', delta: 'ok' });
|
||||
const completed = converter.handleNotification('item/completed', {
|
||||
item: { id: 'cmd-1', type: 'commandExecution', exitCode: 0 }
|
||||
});
|
||||
|
||||
expect(completed).toEqual([{
|
||||
type: 'exec_command_end',
|
||||
call_id: 'cmd-1',
|
||||
output: 'ok',
|
||||
exit_code: 0
|
||||
}]);
|
||||
});
|
||||
|
||||
it('maps reasoning deltas', () => {
|
||||
const converter = new AppServerEventConverter();
|
||||
|
||||
const events = converter.handleNotification('item/reasoning/textDelta', { itemId: 'r1', delta: 'step' });
|
||||
expect(events).toEqual([{ type: 'agent_reasoning_delta', delta: 'step' }]);
|
||||
});
|
||||
|
||||
it('maps diff updates', () => {
|
||||
const converter = new AppServerEventConverter();
|
||||
|
||||
const events = converter.handleNotification('turn/diff/updated', { diff: 'diff --git a b' });
|
||||
expect(events).toEqual([{ type: 'turn_diff', unified_diff: 'diff --git a b' }]);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user