124 lines
2.8 KiB
JavaScript
124 lines
2.8 KiB
JavaScript
/**
|
|
* tool-counts.js
|
|
* Shared helper for validating tool counts across tests and validation scripts
|
|
*/
|
|
|
|
import {
|
|
getToolCounts,
|
|
getToolCategories
|
|
} from '../../mcp-server/src/tools/tool-registry.js';
|
|
|
|
/**
|
|
* Expected tool counts - update these when tools are added/removed
|
|
* These serve as the canonical source of truth for expected counts
|
|
*/
|
|
export const EXPECTED_TOOL_COUNTS = {
|
|
core: 7,
|
|
standard: 15,
|
|
total: 36
|
|
};
|
|
|
|
/**
|
|
* Expected core tools list for validation
|
|
*/
|
|
export const EXPECTED_CORE_TOOLS = [
|
|
'get_tasks',
|
|
'next_task',
|
|
'get_task',
|
|
'set_task_status',
|
|
'update_subtask',
|
|
'parse_prd',
|
|
'expand_task'
|
|
];
|
|
|
|
/**
|
|
* Validate that actual tool counts match expected counts
|
|
* @returns {Object} Validation result with isValid flag and details
|
|
*/
|
|
export function validateToolCounts() {
|
|
const actual = getToolCounts();
|
|
const expected = EXPECTED_TOOL_COUNTS;
|
|
|
|
const isValid =
|
|
actual.core === expected.core &&
|
|
actual.standard === expected.standard &&
|
|
actual.total === expected.total;
|
|
|
|
return {
|
|
isValid,
|
|
actual,
|
|
expected,
|
|
differences: {
|
|
core: actual.core - expected.core,
|
|
standard: actual.standard - expected.standard,
|
|
total: actual.total - expected.total
|
|
}
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Validate that tool categories have correct structure and content
|
|
* @returns {Object} Validation result
|
|
*/
|
|
export function validateToolStructure() {
|
|
const categories = getToolCategories();
|
|
const counts = getToolCounts();
|
|
|
|
// Check that core tools are subset of standard tools
|
|
const coreInStandard = categories.core.every((tool) =>
|
|
categories.standard.includes(tool)
|
|
);
|
|
|
|
// Check that standard tools are subset of all tools
|
|
const standardInAll = categories.standard.every((tool) =>
|
|
categories.all.includes(tool)
|
|
);
|
|
|
|
// Check that expected core tools match actual
|
|
const expectedCoreMatch =
|
|
EXPECTED_CORE_TOOLS.every((tool) => categories.core.includes(tool)) &&
|
|
categories.core.every((tool) => EXPECTED_CORE_TOOLS.includes(tool));
|
|
|
|
// Check array lengths match counts
|
|
const lengthsMatch =
|
|
categories.core.length === counts.core &&
|
|
categories.standard.length === counts.standard &&
|
|
categories.all.length === counts.total;
|
|
|
|
return {
|
|
isValid:
|
|
coreInStandard && standardInAll && expectedCoreMatch && lengthsMatch,
|
|
details: {
|
|
coreInStandard,
|
|
standardInAll,
|
|
expectedCoreMatch,
|
|
lengthsMatch
|
|
},
|
|
categories,
|
|
counts
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Get a detailed report of all tool information
|
|
* @returns {Object} Comprehensive tool information
|
|
*/
|
|
export function getToolReport() {
|
|
const counts = getToolCounts();
|
|
const categories = getToolCategories();
|
|
const validation = validateToolCounts();
|
|
const structure = validateToolStructure();
|
|
|
|
return {
|
|
counts,
|
|
categories,
|
|
validation,
|
|
structure,
|
|
summary: {
|
|
totalValid: validation.isValid && structure.isValid,
|
|
countsValid: validation.isValid,
|
|
structureValid: structure.isValid
|
|
}
|
|
};
|
|
}
|