- Implement tests for random ID generation, ensuring preference for crypto.randomUUID. - Create tests for runtime context capabilities, validating the injection of enabled skill capabilities. - Add tests for skill capability parsing, including classification and command example extraction. - Introduce tests for the skill planner, verifying tool call planning based on user requests and attachment requirements. - Establish tests for UV setup, ensuring proper handling of Python installation scenarios and environment checks.
108 lines
3.8 KiB
TypeScript
108 lines
3.8 KiB
TypeScript
// @vitest-environment node
|
|
|
|
import { describe, expect, it, vi } from 'vitest';
|
|
|
|
const mocks = vi.hoisted(() => ({
|
|
getEnabledSkillCapabilities: vi.fn(),
|
|
}));
|
|
|
|
vi.mock('../electron/gateway/skill-capability-registry', () => ({
|
|
getEnabledSkillCapabilities: mocks.getEnabledSkillCapabilities,
|
|
}));
|
|
|
|
const spreadsheetCapability = {
|
|
skillKey: 'minimax-xlsx',
|
|
slug: 'minimax-xlsx',
|
|
name: 'MiniMax XLSX',
|
|
description: 'Analyze spreadsheet files.',
|
|
enabled: true,
|
|
category: 'document',
|
|
allowedTools: [],
|
|
operationHints: ['read', 'analyze'],
|
|
triggerHints: ['spreadsheet', 'excel'],
|
|
inputExtensions: ['.xlsx', '.csv', '.tsv'],
|
|
requiredEnvVars: [],
|
|
requiresAuth: false,
|
|
plannerSummary: 'document skill; operations: read, analyze; inputs: .xlsx, .csv, .tsv',
|
|
renderHints: {
|
|
card: 'document-analysis',
|
|
preferredView: 'table',
|
|
skillType: 'spreadsheet',
|
|
},
|
|
};
|
|
|
|
const genericSearchCapability = {
|
|
skillKey: 'minimax-search',
|
|
slug: 'minimax-search',
|
|
name: 'MiniMax Search',
|
|
description: 'Search across indexed knowledge sources.',
|
|
enabled: true,
|
|
category: 'search',
|
|
allowedTools: ['web.search'],
|
|
operationHints: ['search', 'retrieve'],
|
|
triggerHints: ['search', 'lookup'],
|
|
inputExtensions: [],
|
|
requiredEnvVars: ['MINIMAX_API_KEY'],
|
|
requiresAuth: true,
|
|
plannerSummary: 'search skill; operations: search, retrieve; inputs: text',
|
|
renderHints: {
|
|
card: 'search-results',
|
|
preferredView: 'summary',
|
|
skillType: 'search',
|
|
},
|
|
};
|
|
|
|
describe('runtime context capabilities', () => {
|
|
it('injects enabled skill capabilities into the system runtime context', async () => {
|
|
mocks.getEnabledSkillCapabilities.mockReturnValue([spreadsheetCapability]);
|
|
const { buildRuntimeContextMessages } = await import('../electron/gateway/runtime-context');
|
|
|
|
const messages = buildRuntimeContextMessages('agent:test:main');
|
|
|
|
expect(messages).toHaveLength(1);
|
|
expect(messages[0]).toEqual(expect.objectContaining({
|
|
role: 'system',
|
|
content: expect.stringContaining('Enabled skill capabilities registered for routing/planning'),
|
|
}));
|
|
expect(messages[0]?.content).toContain('minimax-xlsx');
|
|
expect(messages[0]?.content).toContain('inputs=.xlsx,.csv,.tsv');
|
|
expect(messages[0]?.content).toContain('operations=read,analyze');
|
|
});
|
|
|
|
it('maps a non-spreadsheet skill into the generic registry and runtime capability context', async () => {
|
|
mocks.getEnabledSkillCapabilities.mockReturnValue([genericSearchCapability]);
|
|
|
|
const { mapSkillCapabilitiesToRegistryInputs } = await import('../electron/gateway/chat-tooling');
|
|
const { buildRuntimeContextMessages } = await import('../electron/gateway/runtime-context');
|
|
const { createToolRegistry, getRegistryEntryByName } = await import('../electron/gateway/tool-registry');
|
|
|
|
const registry = createToolRegistry({
|
|
capabilities: mapSkillCapabilitiesToRegistryInputs([genericSearchCapability]),
|
|
});
|
|
const entry = getRegistryEntryByName(registry, 'minimax-search');
|
|
|
|
expect(entry).toEqual(expect.objectContaining({
|
|
capabilityKey: 'minimax-search',
|
|
toolName: 'minimax-search',
|
|
familyKey: 'minimax-search',
|
|
kind: 'skill',
|
|
displayName: 'MiniMax Search',
|
|
requiresFiles: false,
|
|
}));
|
|
expect(entry?.metadata).toEqual(expect.objectContaining({
|
|
category: 'search',
|
|
requiredEnvVars: ['MINIMAX_API_KEY'],
|
|
requiresAuth: true,
|
|
}));
|
|
|
|
const messages = buildRuntimeContextMessages('agent:test:main');
|
|
|
|
expect(messages[0]?.content).toContain('minimax-search');
|
|
expect(messages[0]?.content).toContain('category=search');
|
|
expect(messages[0]?.content).toContain('operations=search,retrieve');
|
|
expect(messages[0]?.content).toContain('allowedTools=web.search');
|
|
expect(messages[0]?.content).toContain('env=MINIMAX_API_KEY');
|
|
expect(messages[0]?.content).toContain('auth=required');
|
|
});
|
|
});
|