43 lines
1.4 KiB
TypeScript
43 lines
1.4 KiB
TypeScript
import { describe, expect, test } from 'vitest';
|
|
|
|
import type { AgentRuntime } from '../../src/runtime/agent-runtime';
|
|
import type { Claim } from '../../src/runtime/provider';
|
|
import { getAdapter, registerAdapter } from '../../src/runtime/agent-runtime';
|
|
import { isCodexLoginProfile, opencodeModel } from '../../src/runtime/provider';
|
|
|
|
describe('agent runtime registry', () => {
|
|
test('registerAdapter/getAdapter resolves a registered runtime', () => {
|
|
const fake: AgentRuntime = {
|
|
name: 'codex',
|
|
prepareAuth: async () => {},
|
|
runTurn: async () => ({}),
|
|
abort: async () => {},
|
|
};
|
|
registerAdapter('codex', () => fake);
|
|
expect(getAdapter('codex').name).toBe('codex');
|
|
});
|
|
|
|
test('getAdapter throws for an unregistered runtime', () => {
|
|
expect(() => getAdapter('opencode')).toThrow(/No agent runtime adapter/);
|
|
});
|
|
});
|
|
|
|
describe('shared provider helpers re-exported from runtime/provider', () => {
|
|
test('isCodexLoginProfile detects opencode login profiles', () => {
|
|
expect(
|
|
isCodexLoginProfile({
|
|
aiProviderProfile: { provider: 'opencode_openai_login' },
|
|
} as Claim),
|
|
).toBe(true);
|
|
expect(isCodexLoginProfile({} as Claim)).toBe(false);
|
|
});
|
|
|
|
test('opencodeModel prefixes the provider', () => {
|
|
expect(
|
|
opencodeModel({
|
|
aiProviderProfile: { provider: 'anthropic', model: 'claude-x' },
|
|
} as Claim),
|
|
).toBe('anthropic/claude-x');
|
|
});
|
|
});
|