import assert from 'node:assert/strict';
import {
applyPlannerResultAndSend,
extractLastNPlots,
formatPlotsBlock,
} from '../ena-planner/ena-planner-runtime-utils.js';
import {
createStructuredPlotRecord,
readPlannerPlotHistory,
writeStructuredPlotRecordToMatchingUserMessage,
writeStructuredPlotRecordToMessage,
} from '../ena-planner/planner-plot-history.js';
{
const chat = [
{ mes: 'no plot here' },
{ mes: 'old one\nold two' },
{ mes: 'assistant says new one' },
];
assert.deepEqual(extractLastNPlots(chat, 2), [
'new one',
'old two',
]);
assert.deepEqual(extractLastNPlots(chat, 0), []);
assert.deepEqual(extractLastNPlots(null, 3), []);
}
{
const block = formatPlotsBlock([
'newest',
'older',
]);
assert.equal(
block,
'\n【plot -2】\nolder\n\n【plot -1】\nnewest\n',
);
assert.equal(formatPlotsBlock([]), '');
}
{
const order = [];
const textarea = { value: 'raw' };
const button = { click: () => order.push('click') };
const plannerState = { bypassNextSend: false, lastInjectedText: '' };
const plannerRecall = { result: { selected: ['memory-a'] } };
const runtime = {
preparePlannerRecallHandoff(payload) {
order.push('handoff');
assert.equal(payload.rawUserInput, 'raw input');
assert.equal(payload.plannerAugmentedMessage, 'raw input\n\nnext');
assert.equal(payload.plannerRecall, plannerRecall);
assert.deepEqual(payload.plannerPlotRecord, {
rawUserInput: 'raw input',
plannerAugmentedMessage: 'raw input\n\nnext',
plotText: 'next',
});
},
};
const result = applyPlannerResultAndSend({
textarea,
button,
rawUserInput: 'raw input',
filtered: 'next',
plannerRecall,
plannerPlotRecord: { plotText: 'next' },
runtime,
plannerState,
});
assert.deepEqual(order, ['handoff', 'click']);
assert.equal(result.applied, true);
assert.equal(result.handoffPrepared, true);
assert.equal(textarea.value, 'raw input\n\nnext');
assert.equal(plannerState.lastInjectedText, textarea.value);
assert.equal(plannerState.bypassNextSend, true);
}
{
const chat = [
{ is_user: true, mes: 'raw old', extra: {} },
{ is_user: false, mes: 'legacy stale' },
{ is_user: true, mes: 'raw latest', extra: {} },
];
writeStructuredPlotRecordToMessage(chat[2], createStructuredPlotRecord({
rawUserInput: 'raw latest',
plannerAugmentedMessage: 'raw latest\n\nstructured',
plotText: 'structured',
}));
const history = readPlannerPlotHistory(chat, { count: 2 });
assert.equal(history.source, 'structured');
assert.deepEqual(history.plots, ['structured']);
assert.ok(history.block.includes('structured'));
assert.ok(!history.block.includes('legacy stale'));
}
{
const chat = [
{ is_user: true, mes: 'raw old', extra: {} },
{ is_user: false, mes: 'legacy old' },
];
chat[0].extra.st_bme_plot = { version: 999, plotText: 'bad' };
const history = readPlannerPlotHistory(chat, { count: 1 });
assert.equal(history.source, 'legacy');
assert.deepEqual(history.plots, ['legacy old']);
}
{
const chat = [
{ is_user: true, mes: 'first input', extra: {} },
{ is_user: false, mes: 'assistant' },
{ is_user: true, mes: 'second input', extra: {} },
];
const result = writeStructuredPlotRecordToMatchingUserMessage(chat, {
rawUserInput: 'first input',
plannerAugmentedMessage: 'first input\n\nfirst plan',
plotText: 'first plan',
});
assert.equal(result.index, 0);
assert.equal(chat[0].extra.st_bme_plot.plotText, 'first plan');
assert.equal(chat[2].extra.st_bme_plot, undefined);
}
{
const order = [];
const result = applyPlannerResultAndSend({
textarea: null,
button: { click: () => order.push('click') },
});
assert.deepEqual(result, { applied: false, reason: 'missing-target' });
assert.deepEqual(order, []);
}
console.log('ena-planner-plots tests passed');