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');