Ctrl K
ComunidadGuías…

test/devin-acp-config.test.js

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

Archivo original ↗Preguntar a KiBot
import { afterEach, describe, it } from 'node:test';
import assert from 'node:assert/strict';
import { mkdtempSync, writeFileSync, rmSync } from 'node:fs';
import { join } from 'node:path';
import { tmpdir } from 'node:os';
import { runDevinAcpProcess } from '../src/devin-acp.js';

const FAKE = `
import readline from 'node:readline';
const rl = readline.createInterface({ input: process.stdin });
function send(obj) { process.stdout.write(JSON.stringify(obj) + '\\n'); }
let cfg = null;
rl.on('line', line => {
  const msg = JSON.parse(line);
  if (msg.method === 'initialize') { send({ jsonrpc: '2.0', id: msg.id, result: { protocolVersion: 1 } }); return; }
  if (msg.method === 'authenticate') { send({ jsonrpc: '2.0', id: msg.id, result: {} }); return; }
  if (msg.method === 'session/new') { send({ jsonrpc: '2.0', id: msg.id, result: { sessionId: 'session-1', configOptions: [{ id: 'model', name: 'Model', options: [{ value: 'devin-swe-2-lightning-high' }] }] } }); return; }
  if (msg.method === 'session/set_config_option') { cfg = msg.params; send({ jsonrpc: '2.0', id: msg.id, result: {} }); return; }
  if (msg.method === 'session/prompt') { send({ jsonrpc: '2.0', method: 'session/update', params: { sessionId: 'session-1', update: { sessionUpdate: 'agent_message_chunk', content: { text: 'CFG=' + JSON.stringify(cfg) } } } }); send({ jsonrpc: '2.0', id: msg.id, result: { stopReason: 'end_turn' } }); return; }
});
`;

const dirs = [];
const saved = {};
for (const k of ['DEVIN_CLI_PATH', 'DEVIN_CLI_ACP_ARGS_JSON', 'DEVIN_ACP_CONFIG_OPTIONS', 'DEVIN_TIMEOUT_MS']) saved[k] = process.env[k];

afterEach(() => {
  for (const [k, v] of Object.entries(saved)) {
    if (v === undefined) delete process.env[k];
    else process.env[k] = v;
  }
  while (dirs.length) { try { rmSync(dirs.pop(), { recursive: true, force: true }); } catch {} }
});

function install() {
  const dir = mkdtempSync(join(tmpdir(), 'windsurfapi-acp-cfg-'));
  dirs.push(dir);
  const script = join(dir, 'fake-acp.mjs');
  writeFileSync(script, FAKE, 'utf8');
  process.env.DEVIN_CLI_PATH = process.execPath;
  process.env.DEVIN_CLI_ACP_ARGS_JSON = JSON.stringify([script]);
  process.env.DEVIN_TIMEOUT_MS = '5000';
}

describe('Devin ACP config options', () => {
  it('sets the advertised model option when the flag is on', async () => {
    install();
    process.env.DEVIN_ACP_CONFIG_OPTIONS = '1';
    const out = await runDevinAcpProcess('hi', { modelKey: 'devin-swe-2-lightning-high', apiKey: 'tok' });
    assert.match(out.text, /"configId":"model"/);
    assert.match(out.text, /"value":"devin-swe-2-lightning-high"/);
  });

  it('does not call set_config_option when the flag is off', async () => {
    install();
    delete process.env.DEVIN_ACP_CONFIG_OPTIONS;
    const out = await runDevinAcpProcess('hi', { modelKey: 'devin-swe-2-lightning-high', apiKey: 'tok' });
    assert.match(out.text, /CFG=null/);
  });
});