Files
msd-core/tests/kimi-tool-mapping.test.cjs
2026-06-07 01:27:12 +02:00

108 lines
3.4 KiB
JavaScript

/**
* Kimi CLI tool module mapper tests.
*
* Kimi custom agent YAML requires tool module paths such as
* `kimi_cli.tools.file:ReadFile`; raw Claude tool names and MCP-managed tools
* must not be emitted.
*/
process.env.GSD_TEST_MODE = '1';
const { test, describe } = require('node:test');
const assert = require('node:assert/strict');
const {
convertKimiToolName,
mapClaudeToolsToKimiTools,
} = require('../bin/install.js');
describe('convertKimiToolName', () => {
test('maps Claude and GSD tool names to documented Kimi module paths', () => {
const expectedMappings = new Map([
['Read', 'kimi_cli.tools.file:ReadFile'],
['Write', 'kimi_cli.tools.file:WriteFile'],
['Edit', 'kimi_cli.tools.file:StrReplaceFile'],
['MultiEdit', 'kimi_cli.tools.file:StrReplaceFile'],
['Bash', 'kimi_cli.tools.shell:Shell'],
['Grep', 'kimi_cli.tools.file:Grep'],
['Glob', 'kimi_cli.tools.file:Glob'],
['Agent', 'kimi_cli.tools.agent:Agent'],
['Task', 'kimi_cli.tools.agent:Agent'],
['AskUserQuestion', 'kimi_cli.tools.ask_user:AskUserQuestion'],
['TodoWrite', 'kimi_cli.tools.todo:SetTodoList'],
['WebSearch', 'kimi_cli.tools.web:SearchWeb'],
['WebFetch', 'kimi_cli.tools.web:FetchURL'],
['TaskList', 'kimi_cli.tools.background:TaskList'],
['TaskOutput', 'kimi_cli.tools.background:TaskOutput'],
['TaskStop', 'kimi_cli.tools.background:TaskStop'],
]);
for (const [claudeTool, kimiTool] of expectedMappings) {
assert.equal(convertKimiToolName(claudeTool), kimiTool, `${claudeTool} maps to Kimi module path`);
}
});
test('returns null for MCP-managed and unsupported tools', () => {
assert.equal(convertKimiToolName('mcp__context7__resolve-library-id'), null);
assert.equal(convertKimiToolName('DefinitelyUnknownTool'), null);
});
});
describe('mapClaudeToolsToKimiTools', () => {
test('deduplicates mapped tools while preserving first-seen order', () => {
const result = mapClaudeToolsToKimiTools([
'Read',
'ReadFile',
'Edit',
'MultiEdit',
'Bash',
'Task',
'Agent',
'WebFetch',
]);
assert.deepEqual(result.tools, [
'kimi_cli.tools.file:ReadFile',
'kimi_cli.tools.file:StrReplaceFile',
'kimi_cli.tools.shell:Shell',
'kimi_cli.tools.agent:Agent',
'kimi_cli.tools.web:FetchURL',
]);
assert.deepEqual(result.diagnostics, []);
});
test('excludes MCP-managed tools with diagnostics', () => {
const result = mapClaudeToolsToKimiTools([
'Read',
'mcp__context7__resolve-library-id',
]);
assert.deepEqual(result.tools, ['kimi_cli.tools.file:ReadFile']);
assert.ok(
result.diagnostics.some((item) =>
item.reason === 'mcp_managed' &&
item.code === 'kimi_mcp_tool_excluded' &&
item.value === 'mcp__context7__resolve-library-id'
),
'MCP-managed exclusion is diagnosed'
);
});
test('excludes unsupported tools with diagnostics', () => {
const result = mapClaudeToolsToKimiTools([
'Read',
'DefinitelyUnknownTool',
]);
assert.deepEqual(result.tools, ['kimi_cli.tools.file:ReadFile']);
assert.ok(
result.diagnostics.some((item) =>
item.reason === 'unsupported_tool' &&
item.code === 'kimi_unsupported_tool' &&
item.value === 'DefinitelyUnknownTool'
),
'unsupported tool exclusion is diagnosed'
);
});
});