Ctrl K
ComunidadGuías…

test/claude-message-correlation.test.js

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

Archivo original ↗Preguntar a KiBot
var test = require("node:test");
var assert = require("node:assert/strict");
var kit = require("../lib/yoke/adapters/claude").contractTestKit;
var createCorrelation = require("../lib/yoke/claude-message-correlation").createCorrelation;

["direct", "worker"].forEach(function(mode) {
  test(mode + " query correlates merged replies and leaves later input pending", async function() {
    var sent = [];
    var emit;
    var handle;
    if (mode === "direct") {
      var events = [];
      handle = kit.createQueryHandle({
        [Symbol.asyncIterator]: function() {
          return { next: function() { return Promise.resolve({ value: events.shift(), done: false }); } };
        },
      }, { push: function(message) { sent.push(message); return true; } }, {});
      emit = function(event) { events.push(event); };
    } else {
      var receive;
      handle = kit.createWorkerQueryHandle({
        process: { killed: false, exitCode: null },
        onMessage: function(callback) { receive = callback; },
        onExit: function() {},
        send: function(message) { sent.push(message.content); return true; },
      });
      emit = function(event) { receive({ type: "sdk_event", event: event }); };
    }
    var iterator = handle[Symbol.asyncIterator]();
    assert.equal(handle.pushMessage("first"), true);
    assert.equal(handle.pushMessage("second"), true);
    assert.equal(handle.pushMessage("third"), true);
    assert.equal(new Set(sent.map(function(message) { return message.uuid; })).size, 3);
    emit({ type: "result", user_message_uuid: sent[0].uuid,
      user_message_uuids: [sent[0].uuid, sent[1].uuid, sent[1].uuid], result_index: 0 });
    var result = (await iterator.next()).value;
    assert.equal(result.answeredUserMessageCount, 2);
    assert.equal(result.resultIndex, 0);
    assert.deepEqual(result.userMessageIds, [sent[0].uuid, sent[1].uuid, sent[1].uuid]);
    emit({ type: "result", user_message_uuid: sent[2].uuid, resume_reason: "interrupted" });
    result = (await iterator.next()).value;
    assert.equal(result.answeredUserMessageCount, 1);
    assert.equal(result.resumeReason, "interrupted");
  });
});

test("correlation keeps older provider results compatible", function() {
  var tracker = createCorrelation();
  var first = tracker.message([]);
  var second = tracker.message([]);
  tracker.accepted(first);
  tracker.accepted(second);
  assert.deepEqual(tracker.result({ type: "result" }, {}), { submittedMessageCount: 2 });
  assert.equal(tracker.result({ type: "result", user_message_uuid: second.uuid }, {}).answeredUserMessageCount, 1);
});

test("message correlation metadata survives streaming and complete replies", function() {
  [
    { type: "stream_event", event: { type: "message_start" } },
    { type: "assistant", message: { content: [] } },
  ].forEach(function(raw) {
    raw.user_message_uuid = "first";
    raw.user_message_uuids = ["first", "second"];
    var event = kit.normalizeEvent(raw);
    assert.equal(event.userMessageId, "first");
    assert.deepEqual(event.userMessageIds, ["first", "second"]);
  });
});