(opts: {
session: TSession;
startingMode?: 'local' | 'remote';
logTag: string;
runLocal: LoopLauncher<TSession>;
runRemote: LoopLauncher<TSession>;
})
| 25 | } |
| 26 | |
| 27 | export async function runLocalRemoteLoop<TSession extends AgentSessionBase<any>>(opts: { |
| 28 | session: TSession; |
| 29 | startingMode?: 'local' | 'remote'; |
| 30 | logTag: string; |
| 31 | runLocal: LoopLauncher<TSession>; |
| 32 | runRemote: LoopLauncher<TSession>; |
| 33 | }): Promise<void> { |
| 34 | let mode: 'local' | 'remote' = opts.startingMode ?? 'local'; |
| 35 | |
| 36 | while (true) { |
| 37 | logger.debug(`[${opts.logTag}] Iteration with mode: ${mode}`); |
| 38 | |
| 39 | if (mode === 'local') { |
| 40 | const reason = await opts.runLocal(opts.session); |
| 41 | if (reason === 'exit') { |
| 42 | return; |
| 43 | } |
| 44 | |
| 45 | mode = 'remote'; |
| 46 | opts.session.onModeChange(mode); |
| 47 | continue; |
| 48 | } |
| 49 | |
| 50 | if (mode === 'remote') { |
| 51 | const reason = await opts.runRemote(opts.session); |
| 52 | if (reason === 'exit') { |
| 53 | return; |
| 54 | } |
| 55 | |
| 56 | mode = 'local'; |
| 57 | opts.session.onModeChange(mode); |
| 58 | continue; |
| 59 | } |
| 60 | } |
| 61 | } |
no test coverage detected