Ctrl K
ComunidadGuías…

crates/engine/tests/fixtures/acp-tee.mjs

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
import { spawn } from 'node:child_process';
import { appendFileSync } from 'node:fs';

const [logPath, agentScript] = process.argv.slice(2);
const child = spawn(process.execPath, [agentScript], { stdio: ['pipe', 'pipe', 'inherit'], env: process.env });

function tap(tag) {
  let buffer = '';
  return (chunk) => {
    buffer += chunk;
    let index;
    while ((index = buffer.indexOf('\n')) >= 0) {
      const line = buffer.slice(0, index);
      buffer = buffer.slice(index + 1);
      if (line.trim()) appendFileSync(logPath, `${tag} ${line}\n`);
    }
  };
}

const fromClient = tap('C');
const fromAgent = tap('A');
process.stdin.setEncoding('utf8');
child.stdout.setEncoding('utf8');
process.stdin.on('data', (chunk) => {
  fromClient(chunk);
  child.stdin.write(chunk);
});
process.stdin.on('end', () => child.stdin.end());
child.stdout.on('data', (chunk) => {
  fromAgent(chunk);
  process.stdout.write(chunk);
});
child.on('exit', (code) => process.exit(code ?? 0));