79 lines
2.4 KiB
JavaScript
79 lines
2.4 KiB
JavaScript
import { test } from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
|
|
import { createProviderRegistry } from '../packages/core/src/providers/registry.ts';
|
|
import { createBuiltinProviderRegistry } from '../packages/core/src/providers/builtins.ts';
|
|
|
|
function fakeProvider(id, root) {
|
|
return {
|
|
name: id,
|
|
descriptor: {
|
|
id,
|
|
name: `${id} display`,
|
|
vendor: `${id} vendor`,
|
|
defaultRoot: root,
|
|
color: '#123456',
|
|
},
|
|
watchRoots(configuredRoot) {
|
|
return [`${configuredRoot}/sessions`, `${configuredRoot}/session-index`];
|
|
},
|
|
discover() {
|
|
return [];
|
|
},
|
|
*parse() {
|
|
yield* [];
|
|
return null;
|
|
},
|
|
raw(input) {
|
|
return { text: `${id}:${input.messageUuid}` };
|
|
},
|
|
};
|
|
}
|
|
|
|
test('provider registry drives source catalog, watch roots, and raw lookup', () => {
|
|
const registry = createProviderRegistry([
|
|
fakeProvider('alpha', '/default/alpha'),
|
|
fakeProvider('beta', '/default/beta'),
|
|
]);
|
|
|
|
assert.deepEqual(registry.catalog(), [
|
|
{ id: 'alpha', name: 'alpha display', vendor: 'alpha vendor', defaultRoot: '/default/alpha', color: '#123456' },
|
|
{ id: 'beta', name: 'beta display', vendor: 'beta vendor', defaultRoot: '/default/beta', color: '#123456' },
|
|
]);
|
|
assert.deepEqual(registry.watchRoots({ alpha: '/custom/alpha' }), [
|
|
'/custom/alpha/sessions',
|
|
'/custom/alpha/session-index',
|
|
'/default/beta/sessions',
|
|
'/default/beta/session-index',
|
|
]);
|
|
assert.deepEqual(
|
|
registry.raw({ source: 'beta', messageUuid: 'message-1', session: null, agentId: null }),
|
|
{ text: 'beta:message-1' },
|
|
);
|
|
assert.equal(
|
|
registry.raw({ source: 'missing', messageUuid: 'message-1', session: null, agentId: null }),
|
|
null,
|
|
);
|
|
});
|
|
|
|
test('built-in provider registry exposes every source without caller-side branching', () => {
|
|
const registry = createBuiltinProviderRegistry({
|
|
claude: '/sources/claude',
|
|
codex: '/sources/codex',
|
|
kimi: '/sources/kimi',
|
|
});
|
|
|
|
assert.deepEqual(registry.catalog().map(({ id, name }) => ({ id, name })), [
|
|
{ id: 'claude', name: 'Claude Code' },
|
|
{ id: 'codex', name: 'Codex' },
|
|
{ id: 'kimi', name: 'Kimi Code' },
|
|
]);
|
|
assert.deepEqual(registry.watchRoots(), [
|
|
'/sources/claude/projects',
|
|
'/sources/codex/sessions',
|
|
'/sources/codex/session_index.jsonl',
|
|
'/sources/kimi/sessions',
|
|
'/sources/kimi/session_index.jsonl',
|
|
]);
|
|
});
|