feat: add Pi conversation worker pool
This commit is contained in:
66
tests/fixtures/fake-pi-pool-child.mjs
vendored
Normal file
66
tests/fixtures/fake-pi-pool-child.mjs
vendored
Normal file
@@ -0,0 +1,66 @@
|
||||
let input = '';
|
||||
let activeTimer = null;
|
||||
let activeMarker = null;
|
||||
|
||||
function write(record) {
|
||||
process.stdout.write(`${JSON.stringify(record)}\n`);
|
||||
}
|
||||
|
||||
function respond(command, data = {}) {
|
||||
write({
|
||||
type: 'response',
|
||||
id: command.id,
|
||||
command: command.type,
|
||||
success: true,
|
||||
data,
|
||||
});
|
||||
}
|
||||
|
||||
function settle(reason) {
|
||||
if (!activeMarker) return;
|
||||
write({ type: 'agent_end', marker: activeMarker, reason });
|
||||
write({ type: 'agent_settled', marker: activeMarker, reason });
|
||||
activeMarker = null;
|
||||
activeTimer = null;
|
||||
}
|
||||
|
||||
function handle(command) {
|
||||
if (command.type === 'prompt') {
|
||||
activeMarker = command.message;
|
||||
respond(command, { accepted: true });
|
||||
write({ type: 'agent_start', marker: activeMarker });
|
||||
activeTimer = setTimeout(() => settle('completed'), Number(command.delayMs ?? 100));
|
||||
return;
|
||||
}
|
||||
if (command.type === 'abort') {
|
||||
if (activeTimer) clearTimeout(activeTimer);
|
||||
respond(command, { aborted: Boolean(activeMarker) });
|
||||
settle('aborted');
|
||||
return;
|
||||
}
|
||||
if (command.type === 'get_state') {
|
||||
respond(command, { sessionId: `session-${process.pid}` });
|
||||
return;
|
||||
}
|
||||
if (command.type === 'get_entries') {
|
||||
respond(command, { entries: [] });
|
||||
return;
|
||||
}
|
||||
respond(command);
|
||||
}
|
||||
|
||||
process.stdin.setEncoding('utf8');
|
||||
process.stdin.on('data', (chunk) => {
|
||||
input += chunk;
|
||||
while (true) {
|
||||
const newline = input.indexOf('\n');
|
||||
if (newline === -1) break;
|
||||
const line = input.slice(0, newline).replace(/\r$/, '');
|
||||
input = input.slice(newline + 1);
|
||||
if (line) handle(JSON.parse(line));
|
||||
}
|
||||
});
|
||||
process.stdin.on('end', () => {
|
||||
if (activeTimer) clearTimeout(activeTimer);
|
||||
process.exit(0);
|
||||
});
|
||||
Reference in New Issue
Block a user