import test from 'node:test'; import assert from 'node:assert/strict'; import { extensionConfigsMatch, extensionsNeedingRefresh } from './session-reconcile.mjs'; test('extensionConfigsMatch compares available_tools', () => { const sessionExt = { name: 'developer', available_tools: ['write', 'edit'] }; const desired = { name: 'developer', available_tools: ['write', 'edit', 'shell', 'tree'] }; assert.equal(extensionConfigsMatch(sessionExt, desired), false); assert.equal( extensionConfigsMatch( { name: 'developer', available_tools: ['shell', 'tree', 'write', 'edit'] }, desired, ), true, ); }); test('extensionsNeedingRefresh upgrades stale developer tools', () => { const current = [ { name: 'developer', available_tools: ['write', 'edit'] }, { name: 'skills', available_tools: [] }, ]; const desired = [ { name: 'developer', available_tools: ['write', 'edit', 'shell', 'tree'] }, { name: 'skills', available_tools: [] }, ]; const { toRemove, toAdd } = extensionsNeedingRefresh(current, desired); assert.deepEqual(toRemove, ['developer']); assert.equal(toAdd.length, 1); assert.equal(toAdd[0].name, 'developer'); assert.deepEqual(toAdd[0].available_tools, ['write', 'edit', 'shell', 'tree']); }); test('extensionsNeedingRefresh adds missing extensions', () => { const { toRemove, toAdd } = extensionsNeedingRefresh( [{ name: 'developer', available_tools: ['write', 'edit'] }], [ { name: 'developer', available_tools: ['write', 'edit'] }, { name: 'summon', available_tools: ['load_skill'] }, ], ); assert.deepEqual(toRemove, []); assert.equal(toAdd.length, 1); assert.equal(toAdd[0].name, 'summon'); });