Refactors MCP server logging and updates testing infrastructure.
- MCP Server:
- Replaced manual logger wrappers with centralized `createLogWrapper` utility.
- Updated direct function calls to use `{ session, mcpLog }` context.
- Removed deprecated `model` parameter from analyze, expand-all, expand-task tools.
- Adjusted MCP tool import paths and parameter descriptions.
- Documentation:
- Modified `docs/configuration.md`.
- Modified `docs/tutorial.md`.
- Testing:
- E2E Script (`run_e2e.sh`):
- Removed `set -e`.
- Added LLM analysis function (`analyze_log_with_llm`) & integration.
- Adjusted test run directory creation timing.
- Added debug echo statements.
- Deleted Unit Tests: Removed `ai-client-factory.test.js`, `ai-client-utils.test.js`, `ai-services.test.js`.
- Modified Fixtures: Updated `scripts/task-complexity-report.json`.
- Dev Scripts:
- Modified `scripts/dev.js`.
122 lines
2.9 KiB
JavaScript
122 lines
2.9 KiB
JavaScript
/**
|
|
* models.js
|
|
* Direct function for managing AI model configurations via MCP
|
|
*/
|
|
|
|
import {
|
|
getModelConfiguration,
|
|
getAvailableModelsList,
|
|
setModel
|
|
} from '../../../../scripts/modules/task-manager/models.js';
|
|
import {
|
|
enableSilentMode,
|
|
disableSilentMode
|
|
} from '../../../../scripts/modules/utils.js';
|
|
import { createLogWrapper } from '../../tools/utils.js';
|
|
|
|
/**
|
|
* Get or update model configuration
|
|
* @param {Object} args - Arguments passed by the MCP tool
|
|
* @param {Object} log - MCP logger
|
|
* @param {Object} context - MCP context (contains session)
|
|
* @returns {Object} Result object with success, data/error fields
|
|
*/
|
|
export async function modelsDirect(args, log, context = {}) {
|
|
const { session } = context;
|
|
const { projectRoot } = args; // Extract projectRoot from args
|
|
|
|
// Create a logger wrapper that the core functions can use
|
|
const mcpLog = createLogWrapper(log);
|
|
|
|
log.info(`Executing models_direct with args: ${JSON.stringify(args)}`);
|
|
log.info(`Using project root: ${projectRoot}`);
|
|
|
|
// Validate flags: cannot use both openrouter and ollama simultaneously
|
|
if (args.openrouter && args.ollama) {
|
|
log.error(
|
|
'Error: Cannot use both openrouter and ollama flags simultaneously.'
|
|
);
|
|
return {
|
|
success: false,
|
|
error: {
|
|
code: 'INVALID_ARGS',
|
|
message: 'Cannot use both openrouter and ollama flags simultaneously.'
|
|
}
|
|
};
|
|
}
|
|
|
|
try {
|
|
enableSilentMode();
|
|
|
|
try {
|
|
// Check for the listAvailableModels flag
|
|
if (args.listAvailableModels === true) {
|
|
return await getAvailableModelsList({
|
|
session,
|
|
mcpLog,
|
|
projectRoot // Pass projectRoot to function
|
|
});
|
|
}
|
|
|
|
// Handle setting a specific model
|
|
if (args.setMain) {
|
|
return await setModel('main', args.setMain, {
|
|
session,
|
|
mcpLog,
|
|
projectRoot, // Pass projectRoot to function
|
|
providerHint: args.openrouter
|
|
? 'openrouter'
|
|
: args.ollama
|
|
? 'ollama'
|
|
: undefined // Pass hint
|
|
});
|
|
}
|
|
|
|
if (args.setResearch) {
|
|
return await setModel('research', args.setResearch, {
|
|
session,
|
|
mcpLog,
|
|
projectRoot, // Pass projectRoot to function
|
|
providerHint: args.openrouter
|
|
? 'openrouter'
|
|
: args.ollama
|
|
? 'ollama'
|
|
: undefined // Pass hint
|
|
});
|
|
}
|
|
|
|
if (args.setFallback) {
|
|
return await setModel('fallback', args.setFallback, {
|
|
session,
|
|
mcpLog,
|
|
projectRoot, // Pass projectRoot to function
|
|
providerHint: args.openrouter
|
|
? 'openrouter'
|
|
: args.ollama
|
|
? 'ollama'
|
|
: undefined // Pass hint
|
|
});
|
|
}
|
|
|
|
// Default action: get current configuration
|
|
return await getModelConfiguration({
|
|
session,
|
|
mcpLog,
|
|
projectRoot // Pass projectRoot to function
|
|
});
|
|
} finally {
|
|
disableSilentMode();
|
|
}
|
|
} catch (error) {
|
|
log.error(`Error in models_direct: ${error.message}`);
|
|
return {
|
|
success: false,
|
|
error: {
|
|
code: 'DIRECT_FUNCTION_ERROR',
|
|
message: error.message,
|
|
details: error.stack
|
|
}
|
|
};
|
|
}
|
|
}
|