feat(config): Implement new config system and resolve refactoring errors Introduced config-manager.js and new utilities (resolveEnvVariable, findProjectRoot). Removed old global CONFIG object from utils.js. Updated .taskmasterconfig, mcp.json, and .env.example. Added generateComplexityAnalysisPrompt to ui.js. Removed unused updateSubtaskById from task-manager.js. Resolved SyntaxError and ReferenceError issues across commands.js, ui.js, task-manager.js, and ai-services.js by replacing CONFIG references with config-manager getters (getDebugFlag, getProjectName, getDefaultSubtasks, isApiKeySet). Refactored 'models' command to use getConfig/writeConfig. Simplified version checking. This stabilizes the codebase after initial Task 61 refactoring, fixing CLI errors and enabling subsequent work on Subtasks 61.34 and 61.35.
2025-04-20 01:09:30 -04:00
|
|
|
/**
|
|
|
|
* ai-services-unified.js
|
2025-04-22 02:42:04 -04:00
|
|
|
* Centralized AI service layer using provider modules and config-manager.
|
feat(config): Implement new config system and resolve refactoring errors Introduced config-manager.js and new utilities (resolveEnvVariable, findProjectRoot). Removed old global CONFIG object from utils.js. Updated .taskmasterconfig, mcp.json, and .env.example. Added generateComplexityAnalysisPrompt to ui.js. Removed unused updateSubtaskById from task-manager.js. Resolved SyntaxError and ReferenceError issues across commands.js, ui.js, task-manager.js, and ai-services.js by replacing CONFIG references with config-manager getters (getDebugFlag, getProjectName, getDefaultSubtasks, isApiKeySet). Refactored 'models' command to use getConfig/writeConfig. Simplified version checking. This stabilizes the codebase after initial Task 61 refactoring, fixing CLI errors and enabling subsequent work on Subtasks 61.34 and 61.35.
2025-04-20 01:09:30 -04:00
|
|
|
*/
|
|
|
|
|
2025-04-22 02:42:04 -04:00
|
|
|
// Vercel AI SDK functions are NOT called directly anymore.
|
|
|
|
// import { generateText, streamText, generateObject } from 'ai';
|
|
|
|
|
|
|
|
// --- Core Dependencies ---
|
|
|
|
import {
|
|
|
|
// REMOVED: getProviderAndModelForRole, // This was incorrect
|
|
|
|
getMainProvider, // ADD individual getters
|
|
|
|
getMainModelId,
|
|
|
|
getResearchProvider,
|
|
|
|
getResearchModelId,
|
|
|
|
getFallbackProvider,
|
|
|
|
getFallbackModelId,
|
|
|
|
getParametersForRole
|
|
|
|
// ConfigurationError // Import if needed for specific handling
|
|
|
|
} from './config-manager.js'; // Corrected: Removed getProviderAndModelForRole
|
|
|
|
import { log, resolveEnvVariable } from './utils.js';
|
|
|
|
|
|
|
|
// --- Provider Service Imports ---
|
|
|
|
// Corrected path from scripts/ai-providers/... to ../../src/ai-providers/...
|
|
|
|
import * as anthropic from '../../src/ai-providers/anthropic.js';
|
|
|
|
import * as perplexity from '../../src/ai-providers/perplexity.js';
|
2025-04-27 01:23:18 -04:00
|
|
|
import * as google from '../../src/ai-providers/google.js'; // Import Google provider
|
2025-04-22 02:42:04 -04:00
|
|
|
// TODO: Import other provider modules when implemented (openai, ollama, etc.)
|
|
|
|
|
|
|
|
// --- Provider Function Map ---
|
|
|
|
// Maps provider names (lowercase) to their respective service functions
|
|
|
|
const PROVIDER_FUNCTIONS = {
|
|
|
|
anthropic: {
|
|
|
|
generateText: anthropic.generateAnthropicText,
|
|
|
|
streamText: anthropic.streamAnthropicText,
|
|
|
|
generateObject: anthropic.generateAnthropicObject
|
|
|
|
// streamObject: anthropic.streamAnthropicObject, // Add when implemented
|
|
|
|
},
|
|
|
|
perplexity: {
|
|
|
|
generateText: perplexity.generatePerplexityText,
|
|
|
|
streamText: perplexity.streamPerplexityText,
|
|
|
|
generateObject: perplexity.generatePerplexityObject
|
|
|
|
// streamObject: perplexity.streamPerplexityObject, // Add when implemented
|
2025-04-27 01:23:18 -04:00
|
|
|
},
|
|
|
|
google: {
|
|
|
|
// Add Google entry
|
|
|
|
generateText: google.generateGoogleText,
|
|
|
|
streamText: google.streamGoogleText,
|
|
|
|
generateObject: google.generateGoogleObject
|
2025-04-22 02:42:04 -04:00
|
|
|
}
|
|
|
|
// TODO: Add entries for openai, ollama, etc. when implemented
|
|
|
|
};
|
feat(config): Implement new config system and resolve refactoring errors Introduced config-manager.js and new utilities (resolveEnvVariable, findProjectRoot). Removed old global CONFIG object from utils.js. Updated .taskmasterconfig, mcp.json, and .env.example. Added generateComplexityAnalysisPrompt to ui.js. Removed unused updateSubtaskById from task-manager.js. Resolved SyntaxError and ReferenceError issues across commands.js, ui.js, task-manager.js, and ai-services.js by replacing CONFIG references with config-manager getters (getDebugFlag, getProjectName, getDefaultSubtasks, isApiKeySet). Refactored 'models' command to use getConfig/writeConfig. Simplified version checking. This stabilizes the codebase after initial Task 61 refactoring, fixing CLI errors and enabling subsequent work on Subtasks 61.34 and 61.35.
2025-04-20 01:09:30 -04:00
|
|
|
|
|
|
|
// --- Configuration for Retries ---
|
|
|
|
const MAX_RETRIES = 2; // Total attempts = 1 + MAX_RETRIES
|
|
|
|
const INITIAL_RETRY_DELAY_MS = 1000; // 1 second
|
|
|
|
|
|
|
|
// Helper function to check if an error is retryable
|
|
|
|
function isRetryableError(error) {
|
|
|
|
const errorMessage = error.message?.toLowerCase() || '';
|
|
|
|
// Add common retryable error patterns
|
|
|
|
return (
|
|
|
|
errorMessage.includes('rate limit') ||
|
|
|
|
errorMessage.includes('overloaded') ||
|
|
|
|
errorMessage.includes('service temporarily unavailable') ||
|
|
|
|
errorMessage.includes('timeout') ||
|
|
|
|
errorMessage.includes('network error') ||
|
|
|
|
// Add specific status codes if available from the SDK errors
|
|
|
|
error.status === 429 || // Too Many Requests
|
|
|
|
error.status >= 500 // Server-side errors
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2025-04-22 02:42:04 -04:00
|
|
|
* Internal helper to resolve the API key for a given provider.
|
|
|
|
* @param {string} providerName - The name of the provider (lowercase).
|
|
|
|
* @param {object|null} session - Optional MCP session object.
|
|
|
|
* @returns {string|null} The API key or null if not found/needed.
|
|
|
|
* @throws {Error} If a required API key is missing.
|
|
|
|
*/
|
|
|
|
function _resolveApiKey(providerName, session) {
|
|
|
|
const keyMap = {
|
|
|
|
openai: 'OPENAI_API_KEY',
|
|
|
|
anthropic: 'ANTHROPIC_API_KEY',
|
2025-04-27 01:23:18 -04:00
|
|
|
google: 'GOOGLE_API_KEY', // Add Google API Key
|
2025-04-22 02:42:04 -04:00
|
|
|
perplexity: 'PERPLEXITY_API_KEY',
|
|
|
|
mistral: 'MISTRAL_API_KEY',
|
|
|
|
azure: 'AZURE_OPENAI_API_KEY',
|
|
|
|
openrouter: 'OPENROUTER_API_KEY',
|
docs: Update documentation for new AI/config architecture and finalize cleanup
This commit updates all relevant documentation (READMEs, docs/*, .cursor/rules) to accurately reflect the finalized unified AI service architecture and the new configuration system (.taskmasterconfig + .env/mcp.json). It also includes the final code cleanup steps related to the refactoring.
Key Changes:
1. **Documentation Updates:**
* Revised `README.md`, `README-task-master.md`, `assets/scripts_README.md`, `docs/configuration.md`, and `docs/tutorial.md` to explain the new configuration split (.taskmasterconfig vs .env/mcp.json).
* Updated MCP configuration examples in READMEs and tutorials to only include API keys in the `env` block.
* Added/updated examples for using the `--research` flag in `docs/command-reference.md`, `docs/examples.md`, and `docs/tutorial.md`.
* Updated `.cursor/rules/ai_services.mdc`, `.cursor/rules/architecture.mdc`, `.cursor/rules/dev_workflow.mdc`, `.cursor/rules/mcp.mdc`, `.cursor/rules/taskmaster.mdc`, `.cursor/rules/utilities.mdc`, and `.cursor/rules/new_features.mdc` to align with the new architecture, removing references to old patterns/files.
* Removed internal rule links from user-facing rules (`taskmaster.mdc`, `dev_workflow.mdc`, `self_improve.mdc`).
* Deleted outdated example file `docs/ai-client-utils-example.md`.
2. **Final Code Refactor & Cleanup:**
* Corrected `update-task-by-id.js` by removing the last import from the old `ai-services.js`.
* Refactored `update-subtask-by-id.js` to correctly use the unified service and logger patterns.
* Removed the obsolete export block from `mcp-server/src/core/task-master-core.js`.
* Corrected logger implementation in `update-tasks.js` for CLI context.
* Updated API key mapping in `config-manager.js` and `ai-services-unified.js`.
3. **Configuration Files:**
* Updated API keys in `.cursor/mcp.json`, replacing `GROK_API_KEY` with `XAI_API_KEY`.
* Updated `.env.example` with current API key names.
* Added `azureOpenaiBaseUrl` to `.taskmasterconfig` example.
4. **Task Management:**
* Marked documentation subtask 61.10 as 'done'.
* Includes various other task content/status updates from the diff summary.
5. **Changeset:**
* Added `.changeset/cuddly-zebras-matter.md` for user-facing `expand`/`expand-all` improvements.
This commit concludes the major architectural refactoring (Task 61) and ensures the documentation accurately reflects the current system.
2025-04-25 14:43:12 -04:00
|
|
|
xai: 'XAI_API_KEY',
|
|
|
|
ollama: 'OLLAMA_API_KEY'
|
2025-04-22 02:42:04 -04:00
|
|
|
};
|
|
|
|
|
docs: Update documentation for new AI/config architecture and finalize cleanup
This commit updates all relevant documentation (READMEs, docs/*, .cursor/rules) to accurately reflect the finalized unified AI service architecture and the new configuration system (.taskmasterconfig + .env/mcp.json). It also includes the final code cleanup steps related to the refactoring.
Key Changes:
1. **Documentation Updates:**
* Revised `README.md`, `README-task-master.md`, `assets/scripts_README.md`, `docs/configuration.md`, and `docs/tutorial.md` to explain the new configuration split (.taskmasterconfig vs .env/mcp.json).
* Updated MCP configuration examples in READMEs and tutorials to only include API keys in the `env` block.
* Added/updated examples for using the `--research` flag in `docs/command-reference.md`, `docs/examples.md`, and `docs/tutorial.md`.
* Updated `.cursor/rules/ai_services.mdc`, `.cursor/rules/architecture.mdc`, `.cursor/rules/dev_workflow.mdc`, `.cursor/rules/mcp.mdc`, `.cursor/rules/taskmaster.mdc`, `.cursor/rules/utilities.mdc`, and `.cursor/rules/new_features.mdc` to align with the new architecture, removing references to old patterns/files.
* Removed internal rule links from user-facing rules (`taskmaster.mdc`, `dev_workflow.mdc`, `self_improve.mdc`).
* Deleted outdated example file `docs/ai-client-utils-example.md`.
2. **Final Code Refactor & Cleanup:**
* Corrected `update-task-by-id.js` by removing the last import from the old `ai-services.js`.
* Refactored `update-subtask-by-id.js` to correctly use the unified service and logger patterns.
* Removed the obsolete export block from `mcp-server/src/core/task-master-core.js`.
* Corrected logger implementation in `update-tasks.js` for CLI context.
* Updated API key mapping in `config-manager.js` and `ai-services-unified.js`.
3. **Configuration Files:**
* Updated API keys in `.cursor/mcp.json`, replacing `GROK_API_KEY` with `XAI_API_KEY`.
* Updated `.env.example` with current API key names.
* Added `azureOpenaiBaseUrl` to `.taskmasterconfig` example.
4. **Task Management:**
* Marked documentation subtask 61.10 as 'done'.
* Includes various other task content/status updates from the diff summary.
5. **Changeset:**
* Added `.changeset/cuddly-zebras-matter.md` for user-facing `expand`/`expand-all` improvements.
This commit concludes the major architectural refactoring (Task 61) and ensures the documentation accurately reflects the current system.
2025-04-25 14:43:12 -04:00
|
|
|
// Double check this -- I have had to use an api key for ollama in the past
|
|
|
|
// if (providerName === 'ollama') {
|
|
|
|
// return null; // Ollama typically doesn't require an API key for basic setup
|
|
|
|
// }
|
2025-04-22 02:42:04 -04:00
|
|
|
|
|
|
|
const envVarName = keyMap[providerName];
|
|
|
|
if (!envVarName) {
|
|
|
|
throw new Error(
|
|
|
|
`Unknown provider '${providerName}' for API key resolution.`
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
const apiKey = resolveEnvVariable(envVarName, session);
|
|
|
|
if (!apiKey) {
|
|
|
|
throw new Error(
|
|
|
|
`Required API key ${envVarName} for provider '${providerName}' is not set in environment or session.`
|
|
|
|
);
|
|
|
|
}
|
|
|
|
return apiKey;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Internal helper to attempt a provider-specific AI API call with retries.
|
feat(config): Implement new config system and resolve refactoring errors Introduced config-manager.js and new utilities (resolveEnvVariable, findProjectRoot). Removed old global CONFIG object from utils.js. Updated .taskmasterconfig, mcp.json, and .env.example. Added generateComplexityAnalysisPrompt to ui.js. Removed unused updateSubtaskById from task-manager.js. Resolved SyntaxError and ReferenceError issues across commands.js, ui.js, task-manager.js, and ai-services.js by replacing CONFIG references with config-manager getters (getDebugFlag, getProjectName, getDefaultSubtasks, isApiKeySet). Refactored 'models' command to use getConfig/writeConfig. Simplified version checking. This stabilizes the codebase after initial Task 61 refactoring, fixing CLI errors and enabling subsequent work on Subtasks 61.34 and 61.35.
2025-04-20 01:09:30 -04:00
|
|
|
*
|
2025-04-22 02:42:04 -04:00
|
|
|
* @param {function} providerApiFn - The specific provider function to call (e.g., generateAnthropicText).
|
|
|
|
* @param {object} callParams - Parameters object for the provider function.
|
|
|
|
* @param {string} providerName - Name of the provider (for logging).
|
|
|
|
* @param {string} modelId - Specific model ID (for logging).
|
feat(config): Implement new config system and resolve refactoring errors Introduced config-manager.js and new utilities (resolveEnvVariable, findProjectRoot). Removed old global CONFIG object from utils.js. Updated .taskmasterconfig, mcp.json, and .env.example. Added generateComplexityAnalysisPrompt to ui.js. Removed unused updateSubtaskById from task-manager.js. Resolved SyntaxError and ReferenceError issues across commands.js, ui.js, task-manager.js, and ai-services.js by replacing CONFIG references with config-manager getters (getDebugFlag, getProjectName, getDefaultSubtasks, isApiKeySet). Refactored 'models' command to use getConfig/writeConfig. Simplified version checking. This stabilizes the codebase after initial Task 61 refactoring, fixing CLI errors and enabling subsequent work on Subtasks 61.34 and 61.35.
2025-04-20 01:09:30 -04:00
|
|
|
* @param {string} attemptRole - The role being attempted (for logging).
|
|
|
|
* @returns {Promise<object>} The result from the successful API call.
|
|
|
|
* @throws {Error} If the call fails after all retries.
|
|
|
|
*/
|
2025-04-22 02:42:04 -04:00
|
|
|
async function _attemptProviderCallWithRetries(
|
|
|
|
providerApiFn,
|
|
|
|
callParams,
|
|
|
|
providerName,
|
|
|
|
modelId,
|
feat(config): Implement new config system and resolve refactoring errors Introduced config-manager.js and new utilities (resolveEnvVariable, findProjectRoot). Removed old global CONFIG object from utils.js. Updated .taskmasterconfig, mcp.json, and .env.example. Added generateComplexityAnalysisPrompt to ui.js. Removed unused updateSubtaskById from task-manager.js. Resolved SyntaxError and ReferenceError issues across commands.js, ui.js, task-manager.js, and ai-services.js by replacing CONFIG references with config-manager getters (getDebugFlag, getProjectName, getDefaultSubtasks, isApiKeySet). Refactored 'models' command to use getConfig/writeConfig. Simplified version checking. This stabilizes the codebase after initial Task 61 refactoring, fixing CLI errors and enabling subsequent work on Subtasks 61.34 and 61.35.
2025-04-20 01:09:30 -04:00
|
|
|
attemptRole
|
|
|
|
) {
|
|
|
|
let retries = 0;
|
2025-04-22 02:42:04 -04:00
|
|
|
const fnName = providerApiFn.name; // Get function name for logging
|
|
|
|
|
feat(config): Implement new config system and resolve refactoring errors Introduced config-manager.js and new utilities (resolveEnvVariable, findProjectRoot). Removed old global CONFIG object from utils.js. Updated .taskmasterconfig, mcp.json, and .env.example. Added generateComplexityAnalysisPrompt to ui.js. Removed unused updateSubtaskById from task-manager.js. Resolved SyntaxError and ReferenceError issues across commands.js, ui.js, task-manager.js, and ai-services.js by replacing CONFIG references with config-manager getters (getDebugFlag, getProjectName, getDefaultSubtasks, isApiKeySet). Refactored 'models' command to use getConfig/writeConfig. Simplified version checking. This stabilizes the codebase after initial Task 61 refactoring, fixing CLI errors and enabling subsequent work on Subtasks 61.34 and 61.35.
2025-04-20 01:09:30 -04:00
|
|
|
while (retries <= MAX_RETRIES) {
|
|
|
|
try {
|
|
|
|
log(
|
|
|
|
'info',
|
2025-04-22 02:42:04 -04:00
|
|
|
`Attempt ${retries + 1}/${MAX_RETRIES + 1} calling ${fnName} (Provider: ${providerName}, Model: ${modelId}, Role: ${attemptRole})`
|
feat(config): Implement new config system and resolve refactoring errors Introduced config-manager.js and new utilities (resolveEnvVariable, findProjectRoot). Removed old global CONFIG object from utils.js. Updated .taskmasterconfig, mcp.json, and .env.example. Added generateComplexityAnalysisPrompt to ui.js. Removed unused updateSubtaskById from task-manager.js. Resolved SyntaxError and ReferenceError issues across commands.js, ui.js, task-manager.js, and ai-services.js by replacing CONFIG references with config-manager getters (getDebugFlag, getProjectName, getDefaultSubtasks, isApiKeySet). Refactored 'models' command to use getConfig/writeConfig. Simplified version checking. This stabilizes the codebase after initial Task 61 refactoring, fixing CLI errors and enabling subsequent work on Subtasks 61.34 and 61.35.
2025-04-20 01:09:30 -04:00
|
|
|
);
|
2025-04-22 02:42:04 -04:00
|
|
|
|
|
|
|
// Call the specific provider function directly
|
|
|
|
const result = await providerApiFn(callParams);
|
|
|
|
|
feat(config): Implement new config system and resolve refactoring errors Introduced config-manager.js and new utilities (resolveEnvVariable, findProjectRoot). Removed old global CONFIG object from utils.js. Updated .taskmasterconfig, mcp.json, and .env.example. Added generateComplexityAnalysisPrompt to ui.js. Removed unused updateSubtaskById from task-manager.js. Resolved SyntaxError and ReferenceError issues across commands.js, ui.js, task-manager.js, and ai-services.js by replacing CONFIG references with config-manager getters (getDebugFlag, getProjectName, getDefaultSubtasks, isApiKeySet). Refactored 'models' command to use getConfig/writeConfig. Simplified version checking. This stabilizes the codebase after initial Task 61 refactoring, fixing CLI errors and enabling subsequent work on Subtasks 61.34 and 61.35.
2025-04-20 01:09:30 -04:00
|
|
|
log(
|
|
|
|
'info',
|
2025-04-22 02:42:04 -04:00
|
|
|
`${fnName} succeeded for role ${attemptRole} (Provider: ${providerName}) on attempt ${retries + 1}`
|
feat(config): Implement new config system and resolve refactoring errors Introduced config-manager.js and new utilities (resolveEnvVariable, findProjectRoot). Removed old global CONFIG object from utils.js. Updated .taskmasterconfig, mcp.json, and .env.example. Added generateComplexityAnalysisPrompt to ui.js. Removed unused updateSubtaskById from task-manager.js. Resolved SyntaxError and ReferenceError issues across commands.js, ui.js, task-manager.js, and ai-services.js by replacing CONFIG references with config-manager getters (getDebugFlag, getProjectName, getDefaultSubtasks, isApiKeySet). Refactored 'models' command to use getConfig/writeConfig. Simplified version checking. This stabilizes the codebase after initial Task 61 refactoring, fixing CLI errors and enabling subsequent work on Subtasks 61.34 and 61.35.
2025-04-20 01:09:30 -04:00
|
|
|
);
|
|
|
|
return result; // Success!
|
|
|
|
} catch (error) {
|
|
|
|
log(
|
|
|
|
'warn',
|
2025-04-22 02:42:04 -04:00
|
|
|
`Attempt ${retries + 1} failed for role ${attemptRole} (${fnName} / ${providerName}): ${error.message}`
|
feat(config): Implement new config system and resolve refactoring errors Introduced config-manager.js and new utilities (resolveEnvVariable, findProjectRoot). Removed old global CONFIG object from utils.js. Updated .taskmasterconfig, mcp.json, and .env.example. Added generateComplexityAnalysisPrompt to ui.js. Removed unused updateSubtaskById from task-manager.js. Resolved SyntaxError and ReferenceError issues across commands.js, ui.js, task-manager.js, and ai-services.js by replacing CONFIG references with config-manager getters (getDebugFlag, getProjectName, getDefaultSubtasks, isApiKeySet). Refactored 'models' command to use getConfig/writeConfig. Simplified version checking. This stabilizes the codebase after initial Task 61 refactoring, fixing CLI errors and enabling subsequent work on Subtasks 61.34 and 61.35.
2025-04-20 01:09:30 -04:00
|
|
|
);
|
|
|
|
|
|
|
|
if (isRetryableError(error) && retries < MAX_RETRIES) {
|
|
|
|
retries++;
|
|
|
|
const delay = INITIAL_RETRY_DELAY_MS * Math.pow(2, retries - 1);
|
|
|
|
log(
|
|
|
|
'info',
|
|
|
|
`Retryable error detected. Retrying in ${delay / 1000}s...`
|
|
|
|
);
|
|
|
|
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
|
|
} else {
|
|
|
|
log(
|
|
|
|
'error',
|
2025-04-22 02:42:04 -04:00
|
|
|
`Non-retryable error or max retries reached for role ${attemptRole} (${fnName} / ${providerName}).`
|
feat(config): Implement new config system and resolve refactoring errors Introduced config-manager.js and new utilities (resolveEnvVariable, findProjectRoot). Removed old global CONFIG object from utils.js. Updated .taskmasterconfig, mcp.json, and .env.example. Added generateComplexityAnalysisPrompt to ui.js. Removed unused updateSubtaskById from task-manager.js. Resolved SyntaxError and ReferenceError issues across commands.js, ui.js, task-manager.js, and ai-services.js by replacing CONFIG references with config-manager getters (getDebugFlag, getProjectName, getDefaultSubtasks, isApiKeySet). Refactored 'models' command to use getConfig/writeConfig. Simplified version checking. This stabilizes the codebase after initial Task 61 refactoring, fixing CLI errors and enabling subsequent work on Subtasks 61.34 and 61.35.
2025-04-20 01:09:30 -04:00
|
|
|
);
|
|
|
|
throw error; // Final failure for this attempt chain
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2025-04-22 02:42:04 -04:00
|
|
|
// Should not be reached due to throw in the else block
|
feat(config): Implement new config system and resolve refactoring errors Introduced config-manager.js and new utilities (resolveEnvVariable, findProjectRoot). Removed old global CONFIG object from utils.js. Updated .taskmasterconfig, mcp.json, and .env.example. Added generateComplexityAnalysisPrompt to ui.js. Removed unused updateSubtaskById from task-manager.js. Resolved SyntaxError and ReferenceError issues across commands.js, ui.js, task-manager.js, and ai-services.js by replacing CONFIG references with config-manager getters (getDebugFlag, getProjectName, getDefaultSubtasks, isApiKeySet). Refactored 'models' command to use getConfig/writeConfig. Simplified version checking. This stabilizes the codebase after initial Task 61 refactoring, fixing CLI errors and enabling subsequent work on Subtasks 61.34 and 61.35.
2025-04-20 01:09:30 -04:00
|
|
|
throw new Error(
|
2025-04-22 02:42:04 -04:00
|
|
|
`Exhausted all retries for role ${attemptRole} (${fnName} / ${providerName})`
|
feat(config): Implement new config system and resolve refactoring errors Introduced config-manager.js and new utilities (resolveEnvVariable, findProjectRoot). Removed old global CONFIG object from utils.js. Updated .taskmasterconfig, mcp.json, and .env.example. Added generateComplexityAnalysisPrompt to ui.js. Removed unused updateSubtaskById from task-manager.js. Resolved SyntaxError and ReferenceError issues across commands.js, ui.js, task-manager.js, and ai-services.js by replacing CONFIG references with config-manager getters (getDebugFlag, getProjectName, getDefaultSubtasks, isApiKeySet). Refactored 'models' command to use getConfig/writeConfig. Simplified version checking. This stabilizes the codebase after initial Task 61 refactoring, fixing CLI errors and enabling subsequent work on Subtasks 61.34 and 61.35.
2025-04-20 01:09:30 -04:00
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2025-04-22 02:42:04 -04:00
|
|
|
* Base logic for unified service functions.
|
|
|
|
* @param {string} serviceType - Type of service ('generateText', 'streamText', 'generateObject').
|
|
|
|
* @param {object} params - Original parameters passed to the service function.
|
|
|
|
* @returns {Promise<any>} Result from the underlying provider call.
|
feat(config): Implement new config system and resolve refactoring errors Introduced config-manager.js and new utilities (resolveEnvVariable, findProjectRoot). Removed old global CONFIG object from utils.js. Updated .taskmasterconfig, mcp.json, and .env.example. Added generateComplexityAnalysisPrompt to ui.js. Removed unused updateSubtaskById from task-manager.js. Resolved SyntaxError and ReferenceError issues across commands.js, ui.js, task-manager.js, and ai-services.js by replacing CONFIG references with config-manager getters (getDebugFlag, getProjectName, getDefaultSubtasks, isApiKeySet). Refactored 'models' command to use getConfig/writeConfig. Simplified version checking. This stabilizes the codebase after initial Task 61 refactoring, fixing CLI errors and enabling subsequent work on Subtasks 61.34 and 61.35.
2025-04-20 01:09:30 -04:00
|
|
|
*/
|
2025-04-22 02:42:04 -04:00
|
|
|
async function _unifiedServiceRunner(serviceType, params) {
|
feat(config): Implement new config system and resolve refactoring errors Introduced config-manager.js and new utilities (resolveEnvVariable, findProjectRoot). Removed old global CONFIG object from utils.js. Updated .taskmasterconfig, mcp.json, and .env.example. Added generateComplexityAnalysisPrompt to ui.js. Removed unused updateSubtaskById from task-manager.js. Resolved SyntaxError and ReferenceError issues across commands.js, ui.js, task-manager.js, and ai-services.js by replacing CONFIG references with config-manager getters (getDebugFlag, getProjectName, getDefaultSubtasks, isApiKeySet). Refactored 'models' command to use getConfig/writeConfig. Simplified version checking. This stabilizes the codebase after initial Task 61 refactoring, fixing CLI errors and enabling subsequent work on Subtasks 61.34 and 61.35.
2025-04-20 01:09:30 -04:00
|
|
|
const {
|
|
|
|
role: initialRole,
|
|
|
|
session,
|
2025-04-22 02:42:04 -04:00
|
|
|
systemPrompt,
|
|
|
|
prompt,
|
|
|
|
schema,
|
|
|
|
objectName,
|
|
|
|
...restApiParams
|
feat(config): Implement new config system and resolve refactoring errors Introduced config-manager.js and new utilities (resolveEnvVariable, findProjectRoot). Removed old global CONFIG object from utils.js. Updated .taskmasterconfig, mcp.json, and .env.example. Added generateComplexityAnalysisPrompt to ui.js. Removed unused updateSubtaskById from task-manager.js. Resolved SyntaxError and ReferenceError issues across commands.js, ui.js, task-manager.js, and ai-services.js by replacing CONFIG references with config-manager getters (getDebugFlag, getProjectName, getDefaultSubtasks, isApiKeySet). Refactored 'models' command to use getConfig/writeConfig. Simplified version checking. This stabilizes the codebase after initial Task 61 refactoring, fixing CLI errors and enabling subsequent work on Subtasks 61.34 and 61.35.
2025-04-20 01:09:30 -04:00
|
|
|
} = params;
|
2025-04-22 02:42:04 -04:00
|
|
|
log('info', `${serviceType}Service called`, { role: initialRole });
|
feat(config): Implement new config system and resolve refactoring errors Introduced config-manager.js and new utilities (resolveEnvVariable, findProjectRoot). Removed old global CONFIG object from utils.js. Updated .taskmasterconfig, mcp.json, and .env.example. Added generateComplexityAnalysisPrompt to ui.js. Removed unused updateSubtaskById from task-manager.js. Resolved SyntaxError and ReferenceError issues across commands.js, ui.js, task-manager.js, and ai-services.js by replacing CONFIG references with config-manager getters (getDebugFlag, getProjectName, getDefaultSubtasks, isApiKeySet). Refactored 'models' command to use getConfig/writeConfig. Simplified version checking. This stabilizes the codebase after initial Task 61 refactoring, fixing CLI errors and enabling subsequent work on Subtasks 61.34 and 61.35.
2025-04-20 01:09:30 -04:00
|
|
|
|
|
|
|
let sequence;
|
|
|
|
if (initialRole === 'main') {
|
|
|
|
sequence = ['main', 'fallback', 'research'];
|
|
|
|
} else if (initialRole === 'fallback') {
|
2025-04-22 02:42:04 -04:00
|
|
|
sequence = ['fallback', 'research'];
|
feat(config): Implement new config system and resolve refactoring errors Introduced config-manager.js and new utilities (resolveEnvVariable, findProjectRoot). Removed old global CONFIG object from utils.js. Updated .taskmasterconfig, mcp.json, and .env.example. Added generateComplexityAnalysisPrompt to ui.js. Removed unused updateSubtaskById from task-manager.js. Resolved SyntaxError and ReferenceError issues across commands.js, ui.js, task-manager.js, and ai-services.js by replacing CONFIG references with config-manager getters (getDebugFlag, getProjectName, getDefaultSubtasks, isApiKeySet). Refactored 'models' command to use getConfig/writeConfig. Simplified version checking. This stabilizes the codebase after initial Task 61 refactoring, fixing CLI errors and enabling subsequent work on Subtasks 61.34 and 61.35.
2025-04-20 01:09:30 -04:00
|
|
|
} else if (initialRole === 'research') {
|
2025-04-22 02:42:04 -04:00
|
|
|
sequence = ['research', 'fallback'];
|
feat(config): Implement new config system and resolve refactoring errors Introduced config-manager.js and new utilities (resolveEnvVariable, findProjectRoot). Removed old global CONFIG object from utils.js. Updated .taskmasterconfig, mcp.json, and .env.example. Added generateComplexityAnalysisPrompt to ui.js. Removed unused updateSubtaskById from task-manager.js. Resolved SyntaxError and ReferenceError issues across commands.js, ui.js, task-manager.js, and ai-services.js by replacing CONFIG references with config-manager getters (getDebugFlag, getProjectName, getDefaultSubtasks, isApiKeySet). Refactored 'models' command to use getConfig/writeConfig. Simplified version checking. This stabilizes the codebase after initial Task 61 refactoring, fixing CLI errors and enabling subsequent work on Subtasks 61.34 and 61.35.
2025-04-20 01:09:30 -04:00
|
|
|
} else {
|
|
|
|
log(
|
|
|
|
'warn',
|
|
|
|
`Unknown initial role: ${initialRole}. Defaulting to main -> fallback -> research sequence.`
|
|
|
|
);
|
|
|
|
sequence = ['main', 'fallback', 'research'];
|
|
|
|
}
|
|
|
|
|
|
|
|
let lastError = null;
|
|
|
|
|
|
|
|
for (const currentRole of sequence) {
|
2025-04-22 02:42:04 -04:00
|
|
|
let providerName, modelId, apiKey, roleParams, providerFnSet, providerApiFn;
|
feat(config): Implement new config system and resolve refactoring errors Introduced config-manager.js and new utilities (resolveEnvVariable, findProjectRoot). Removed old global CONFIG object from utils.js. Updated .taskmasterconfig, mcp.json, and .env.example. Added generateComplexityAnalysisPrompt to ui.js. Removed unused updateSubtaskById from task-manager.js. Resolved SyntaxError and ReferenceError issues across commands.js, ui.js, task-manager.js, and ai-services.js by replacing CONFIG references with config-manager getters (getDebugFlag, getProjectName, getDefaultSubtasks, isApiKeySet). Refactored 'models' command to use getConfig/writeConfig. Simplified version checking. This stabilizes the codebase after initial Task 61 refactoring, fixing CLI errors and enabling subsequent work on Subtasks 61.34 and 61.35.
2025-04-20 01:09:30 -04:00
|
|
|
|
|
|
|
try {
|
2025-04-24 13:34:51 -04:00
|
|
|
log('info', `New AI service call with role: ${currentRole}`);
|
feat(config): Implement new config system and resolve refactoring errors Introduced config-manager.js and new utilities (resolveEnvVariable, findProjectRoot). Removed old global CONFIG object from utils.js. Updated .taskmasterconfig, mcp.json, and .env.example. Added generateComplexityAnalysisPrompt to ui.js. Removed unused updateSubtaskById from task-manager.js. Resolved SyntaxError and ReferenceError issues across commands.js, ui.js, task-manager.js, and ai-services.js by replacing CONFIG references with config-manager getters (getDebugFlag, getProjectName, getDefaultSubtasks, isApiKeySet). Refactored 'models' command to use getConfig/writeConfig. Simplified version checking. This stabilizes the codebase after initial Task 61 refactoring, fixing CLI errors and enabling subsequent work on Subtasks 61.34 and 61.35.
2025-04-20 01:09:30 -04:00
|
|
|
|
2025-04-22 02:42:04 -04:00
|
|
|
// --- Corrected Config Fetching ---
|
|
|
|
// 1. Get Config: Provider, Model, Parameters for the current role
|
|
|
|
// Call individual getters based on the current role
|
|
|
|
if (currentRole === 'main') {
|
|
|
|
providerName = getMainProvider(); // Use individual getter
|
|
|
|
modelId = getMainModelId(); // Use individual getter
|
|
|
|
} else if (currentRole === 'research') {
|
|
|
|
providerName = getResearchProvider(); // Use individual getter
|
|
|
|
modelId = getResearchModelId(); // Use individual getter
|
|
|
|
} else if (currentRole === 'fallback') {
|
|
|
|
providerName = getFallbackProvider(); // Use individual getter
|
|
|
|
modelId = getFallbackModelId(); // Use individual getter
|
|
|
|
} else {
|
|
|
|
log(
|
|
|
|
'error',
|
|
|
|
`Unknown role encountered in _unifiedServiceRunner: ${currentRole}`
|
|
|
|
);
|
|
|
|
lastError =
|
|
|
|
lastError || new Error(`Unknown AI role specified: ${currentRole}`);
|
|
|
|
continue; // Skip to the next role attempt
|
|
|
|
}
|
|
|
|
// --- End Corrected Config Fetching ---
|
feat(config): Implement new config system and resolve refactoring errors Introduced config-manager.js and new utilities (resolveEnvVariable, findProjectRoot). Removed old global CONFIG object from utils.js. Updated .taskmasterconfig, mcp.json, and .env.example. Added generateComplexityAnalysisPrompt to ui.js. Removed unused updateSubtaskById from task-manager.js. Resolved SyntaxError and ReferenceError issues across commands.js, ui.js, task-manager.js, and ai-services.js by replacing CONFIG references with config-manager getters (getDebugFlag, getProjectName, getDefaultSubtasks, isApiKeySet). Refactored 'models' command to use getConfig/writeConfig. Simplified version checking. This stabilizes the codebase after initial Task 61 refactoring, fixing CLI errors and enabling subsequent work on Subtasks 61.34 and 61.35.
2025-04-20 01:09:30 -04:00
|
|
|
|
2025-04-22 02:42:04 -04:00
|
|
|
if (!providerName || !modelId) {
|
feat(config): Implement new config system and resolve refactoring errors Introduced config-manager.js and new utilities (resolveEnvVariable, findProjectRoot). Removed old global CONFIG object from utils.js. Updated .taskmasterconfig, mcp.json, and .env.example. Added generateComplexityAnalysisPrompt to ui.js. Removed unused updateSubtaskById from task-manager.js. Resolved SyntaxError and ReferenceError issues across commands.js, ui.js, task-manager.js, and ai-services.js by replacing CONFIG references with config-manager getters (getDebugFlag, getProjectName, getDefaultSubtasks, isApiKeySet). Refactored 'models' command to use getConfig/writeConfig. Simplified version checking. This stabilizes the codebase after initial Task 61 refactoring, fixing CLI errors and enabling subsequent work on Subtasks 61.34 and 61.35.
2025-04-20 01:09:30 -04:00
|
|
|
log(
|
|
|
|
'warn',
|
2025-04-22 02:42:04 -04:00
|
|
|
`Skipping role '${currentRole}': Provider or Model ID not configured.`
|
feat(config): Implement new config system and resolve refactoring errors Introduced config-manager.js and new utilities (resolveEnvVariable, findProjectRoot). Removed old global CONFIG object from utils.js. Updated .taskmasterconfig, mcp.json, and .env.example. Added generateComplexityAnalysisPrompt to ui.js. Removed unused updateSubtaskById from task-manager.js. Resolved SyntaxError and ReferenceError issues across commands.js, ui.js, task-manager.js, and ai-services.js by replacing CONFIG references with config-manager getters (getDebugFlag, getProjectName, getDefaultSubtasks, isApiKeySet). Refactored 'models' command to use getConfig/writeConfig. Simplified version checking. This stabilizes the codebase after initial Task 61 refactoring, fixing CLI errors and enabling subsequent work on Subtasks 61.34 and 61.35.
2025-04-20 01:09:30 -04:00
|
|
|
);
|
2025-04-22 02:42:04 -04:00
|
|
|
lastError =
|
|
|
|
lastError ||
|
|
|
|
new Error(
|
|
|
|
`Configuration missing for role '${currentRole}'. Provider: ${providerName}, Model: ${modelId}`
|
|
|
|
);
|
|
|
|
continue; // Skip to the next role
|
|
|
|
}
|
|
|
|
|
|
|
|
roleParams = getParametersForRole(currentRole); // Get { maxTokens, temperature }
|
|
|
|
|
|
|
|
// 2. Get Provider Function Set
|
|
|
|
providerFnSet = PROVIDER_FUNCTIONS[providerName?.toLowerCase()];
|
|
|
|
if (!providerFnSet) {
|
feat(config): Implement new config system and resolve refactoring errors Introduced config-manager.js and new utilities (resolveEnvVariable, findProjectRoot). Removed old global CONFIG object from utils.js. Updated .taskmasterconfig, mcp.json, and .env.example. Added generateComplexityAnalysisPrompt to ui.js. Removed unused updateSubtaskById from task-manager.js. Resolved SyntaxError and ReferenceError issues across commands.js, ui.js, task-manager.js, and ai-services.js by replacing CONFIG references with config-manager getters (getDebugFlag, getProjectName, getDefaultSubtasks, isApiKeySet). Refactored 'models' command to use getConfig/writeConfig. Simplified version checking. This stabilizes the codebase after initial Task 61 refactoring, fixing CLI errors and enabling subsequent work on Subtasks 61.34 and 61.35.
2025-04-20 01:09:30 -04:00
|
|
|
log(
|
|
|
|
'warn',
|
2025-04-22 02:42:04 -04:00
|
|
|
`Skipping role '${currentRole}': Provider '${providerName}' not supported or map entry missing.`
|
feat(config): Implement new config system and resolve refactoring errors Introduced config-manager.js and new utilities (resolveEnvVariable, findProjectRoot). Removed old global CONFIG object from utils.js. Updated .taskmasterconfig, mcp.json, and .env.example. Added generateComplexityAnalysisPrompt to ui.js. Removed unused updateSubtaskById from task-manager.js. Resolved SyntaxError and ReferenceError issues across commands.js, ui.js, task-manager.js, and ai-services.js by replacing CONFIG references with config-manager getters (getDebugFlag, getProjectName, getDefaultSubtasks, isApiKeySet). Refactored 'models' command to use getConfig/writeConfig. Simplified version checking. This stabilizes the codebase after initial Task 61 refactoring, fixing CLI errors and enabling subsequent work on Subtasks 61.34 and 61.35.
2025-04-20 01:09:30 -04:00
|
|
|
);
|
2025-04-22 02:42:04 -04:00
|
|
|
lastError =
|
|
|
|
lastError ||
|
|
|
|
new Error(`Unsupported provider configured: ${providerName}`);
|
|
|
|
continue;
|
feat(config): Implement new config system and resolve refactoring errors Introduced config-manager.js and new utilities (resolveEnvVariable, findProjectRoot). Removed old global CONFIG object from utils.js. Updated .taskmasterconfig, mcp.json, and .env.example. Added generateComplexityAnalysisPrompt to ui.js. Removed unused updateSubtaskById from task-manager.js. Resolved SyntaxError and ReferenceError issues across commands.js, ui.js, task-manager.js, and ai-services.js by replacing CONFIG references with config-manager getters (getDebugFlag, getProjectName, getDefaultSubtasks, isApiKeySet). Refactored 'models' command to use getConfig/writeConfig. Simplified version checking. This stabilizes the codebase after initial Task 61 refactoring, fixing CLI errors and enabling subsequent work on Subtasks 61.34 and 61.35.
2025-04-20 01:09:30 -04:00
|
|
|
}
|
|
|
|
|
2025-04-22 02:42:04 -04:00
|
|
|
// Use the original service type to get the function
|
|
|
|
providerApiFn = providerFnSet[serviceType];
|
|
|
|
if (typeof providerApiFn !== 'function') {
|
|
|
|
log(
|
|
|
|
'warn',
|
|
|
|
`Skipping role '${currentRole}': Service type '${serviceType}' not implemented for provider '${providerName}'.`
|
|
|
|
);
|
|
|
|
lastError =
|
|
|
|
lastError ||
|
|
|
|
new Error(
|
|
|
|
`Service '${serviceType}' not implemented for provider ${providerName}`
|
|
|
|
);
|
|
|
|
continue;
|
|
|
|
}
|
feat(config): Implement new config system and resolve refactoring errors Introduced config-manager.js and new utilities (resolveEnvVariable, findProjectRoot). Removed old global CONFIG object from utils.js. Updated .taskmasterconfig, mcp.json, and .env.example. Added generateComplexityAnalysisPrompt to ui.js. Removed unused updateSubtaskById from task-manager.js. Resolved SyntaxError and ReferenceError issues across commands.js, ui.js, task-manager.js, and ai-services.js by replacing CONFIG references with config-manager getters (getDebugFlag, getProjectName, getDefaultSubtasks, isApiKeySet). Refactored 'models' command to use getConfig/writeConfig. Simplified version checking. This stabilizes the codebase after initial Task 61 refactoring, fixing CLI errors and enabling subsequent work on Subtasks 61.34 and 61.35.
2025-04-20 01:09:30 -04:00
|
|
|
|
2025-04-22 02:42:04 -04:00
|
|
|
// 3. Resolve API Key (will throw if required and missing)
|
|
|
|
apiKey = _resolveApiKey(providerName?.toLowerCase(), session); // Throws on failure
|
feat(config): Implement new config system and resolve refactoring errors Introduced config-manager.js and new utilities (resolveEnvVariable, findProjectRoot). Removed old global CONFIG object from utils.js. Updated .taskmasterconfig, mcp.json, and .env.example. Added generateComplexityAnalysisPrompt to ui.js. Removed unused updateSubtaskById from task-manager.js. Resolved SyntaxError and ReferenceError issues across commands.js, ui.js, task-manager.js, and ai-services.js by replacing CONFIG references with config-manager getters (getDebugFlag, getProjectName, getDefaultSubtasks, isApiKeySet). Refactored 'models' command to use getConfig/writeConfig. Simplified version checking. This stabilizes the codebase after initial Task 61 refactoring, fixing CLI errors and enabling subsequent work on Subtasks 61.34 and 61.35.
2025-04-20 01:09:30 -04:00
|
|
|
|
2025-04-22 02:42:04 -04:00
|
|
|
// 4. Construct Messages Array
|
|
|
|
const messages = [];
|
|
|
|
if (systemPrompt) {
|
|
|
|
messages.push({ role: 'system', content: systemPrompt });
|
|
|
|
}
|
feat(config): Implement new config system and resolve refactoring errors Introduced config-manager.js and new utilities (resolveEnvVariable, findProjectRoot). Removed old global CONFIG object from utils.js. Updated .taskmasterconfig, mcp.json, and .env.example. Added generateComplexityAnalysisPrompt to ui.js. Removed unused updateSubtaskById from task-manager.js. Resolved SyntaxError and ReferenceError issues across commands.js, ui.js, task-manager.js, and ai-services.js by replacing CONFIG references with config-manager getters (getDebugFlag, getProjectName, getDefaultSubtasks, isApiKeySet). Refactored 'models' command to use getConfig/writeConfig. Simplified version checking. This stabilizes the codebase after initial Task 61 refactoring, fixing CLI errors and enabling subsequent work on Subtasks 61.34 and 61.35.
2025-04-20 01:09:30 -04:00
|
|
|
|
2025-04-22 02:42:04 -04:00
|
|
|
// IN THE FUTURE WHEN DOING CONTEXT IMPROVEMENTS
|
|
|
|
// {
|
|
|
|
// type: 'text',
|
|
|
|
// text: 'Large cached context here like a tasks json',
|
|
|
|
// providerOptions: {
|
|
|
|
// anthropic: { cacheControl: { type: 'ephemeral' } }
|
|
|
|
// }
|
|
|
|
// }
|
feat(config): Implement new config system and resolve refactoring errors Introduced config-manager.js and new utilities (resolveEnvVariable, findProjectRoot). Removed old global CONFIG object from utils.js. Updated .taskmasterconfig, mcp.json, and .env.example. Added generateComplexityAnalysisPrompt to ui.js. Removed unused updateSubtaskById from task-manager.js. Resolved SyntaxError and ReferenceError issues across commands.js, ui.js, task-manager.js, and ai-services.js by replacing CONFIG references with config-manager getters (getDebugFlag, getProjectName, getDefaultSubtasks, isApiKeySet). Refactored 'models' command to use getConfig/writeConfig. Simplified version checking. This stabilizes the codebase after initial Task 61 refactoring, fixing CLI errors and enabling subsequent work on Subtasks 61.34 and 61.35.
2025-04-20 01:09:30 -04:00
|
|
|
|
2025-04-22 02:42:04 -04:00
|
|
|
// Example
|
|
|
|
// if (params.context) { // context is a json string of a tasks object or some other stu
|
|
|
|
// messages.push({
|
|
|
|
// type: 'text',
|
|
|
|
// text: params.context,
|
|
|
|
// providerOptions: { anthropic: { cacheControl: { type: 'ephemeral' } } }
|
|
|
|
// });
|
|
|
|
// }
|
feat(config): Implement new config system and resolve refactoring errors Introduced config-manager.js and new utilities (resolveEnvVariable, findProjectRoot). Removed old global CONFIG object from utils.js. Updated .taskmasterconfig, mcp.json, and .env.example. Added generateComplexityAnalysisPrompt to ui.js. Removed unused updateSubtaskById from task-manager.js. Resolved SyntaxError and ReferenceError issues across commands.js, ui.js, task-manager.js, and ai-services.js by replacing CONFIG references with config-manager getters (getDebugFlag, getProjectName, getDefaultSubtasks, isApiKeySet). Refactored 'models' command to use getConfig/writeConfig. Simplified version checking. This stabilizes the codebase after initial Task 61 refactoring, fixing CLI errors and enabling subsequent work on Subtasks 61.34 and 61.35.
2025-04-20 01:09:30 -04:00
|
|
|
|
2025-04-22 02:42:04 -04:00
|
|
|
if (prompt) {
|
|
|
|
// Ensure prompt exists before adding
|
|
|
|
messages.push({ role: 'user', content: prompt });
|
|
|
|
} else {
|
|
|
|
// Throw an error if the prompt is missing, as it's essential
|
|
|
|
throw new Error('User prompt content is missing.');
|
|
|
|
}
|
|
|
|
|
|
|
|
// 5. Prepare call parameters (using messages array)
|
|
|
|
const callParams = {
|
|
|
|
apiKey,
|
|
|
|
modelId,
|
|
|
|
maxTokens: roleParams.maxTokens,
|
|
|
|
temperature: roleParams.temperature,
|
|
|
|
messages, // *** Pass the constructed messages array ***
|
|
|
|
// Add specific params for generateObject if needed
|
|
|
|
...(serviceType === 'generateObject' && { schema, objectName }),
|
|
|
|
...restApiParams // Include other params like maxRetries
|
feat(config): Implement new config system and resolve refactoring errors Introduced config-manager.js and new utilities (resolveEnvVariable, findProjectRoot). Removed old global CONFIG object from utils.js. Updated .taskmasterconfig, mcp.json, and .env.example. Added generateComplexityAnalysisPrompt to ui.js. Removed unused updateSubtaskById from task-manager.js. Resolved SyntaxError and ReferenceError issues across commands.js, ui.js, task-manager.js, and ai-services.js by replacing CONFIG references with config-manager getters (getDebugFlag, getProjectName, getDefaultSubtasks, isApiKeySet). Refactored 'models' command to use getConfig/writeConfig. Simplified version checking. This stabilizes the codebase after initial Task 61 refactoring, fixing CLI errors and enabling subsequent work on Subtasks 61.34 and 61.35.
2025-04-20 01:09:30 -04:00
|
|
|
};
|
|
|
|
|
2025-04-22 02:42:04 -04:00
|
|
|
// 6. Attempt the call with retries
|
|
|
|
const result = await _attemptProviderCallWithRetries(
|
|
|
|
providerApiFn,
|
|
|
|
callParams,
|
|
|
|
providerName,
|
|
|
|
modelId,
|
feat(config): Implement new config system and resolve refactoring errors Introduced config-manager.js and new utilities (resolveEnvVariable, findProjectRoot). Removed old global CONFIG object from utils.js. Updated .taskmasterconfig, mcp.json, and .env.example. Added generateComplexityAnalysisPrompt to ui.js. Removed unused updateSubtaskById from task-manager.js. Resolved SyntaxError and ReferenceError issues across commands.js, ui.js, task-manager.js, and ai-services.js by replacing CONFIG references with config-manager getters (getDebugFlag, getProjectName, getDefaultSubtasks, isApiKeySet). Refactored 'models' command to use getConfig/writeConfig. Simplified version checking. This stabilizes the codebase after initial Task 61 refactoring, fixing CLI errors and enabling subsequent work on Subtasks 61.34 and 61.35.
2025-04-20 01:09:30 -04:00
|
|
|
currentRole
|
|
|
|
);
|
2025-04-22 02:42:04 -04:00
|
|
|
|
|
|
|
log('info', `${serviceType}Service succeeded using role: ${currentRole}`);
|
|
|
|
|
|
|
|
return result; // Return original result for other cases
|
feat(config): Implement new config system and resolve refactoring errors Introduced config-manager.js and new utilities (resolveEnvVariable, findProjectRoot). Removed old global CONFIG object from utils.js. Updated .taskmasterconfig, mcp.json, and .env.example. Added generateComplexityAnalysisPrompt to ui.js. Removed unused updateSubtaskById from task-manager.js. Resolved SyntaxError and ReferenceError issues across commands.js, ui.js, task-manager.js, and ai-services.js by replacing CONFIG references with config-manager getters (getDebugFlag, getProjectName, getDefaultSubtasks, isApiKeySet). Refactored 'models' command to use getConfig/writeConfig. Simplified version checking. This stabilizes the codebase after initial Task 61 refactoring, fixing CLI errors and enabling subsequent work on Subtasks 61.34 and 61.35.
2025-04-20 01:09:30 -04:00
|
|
|
} catch (error) {
|
|
|
|
log(
|
2025-04-22 02:42:04 -04:00
|
|
|
'error', // Log as error since this role attempt failed
|
|
|
|
`Service call failed for role ${currentRole} (Provider: ${providerName || 'unknown'}): ${error.message}`
|
feat(config): Implement new config system and resolve refactoring errors Introduced config-manager.js and new utilities (resolveEnvVariable, findProjectRoot). Removed old global CONFIG object from utils.js. Updated .taskmasterconfig, mcp.json, and .env.example. Added generateComplexityAnalysisPrompt to ui.js. Removed unused updateSubtaskById from task-manager.js. Resolved SyntaxError and ReferenceError issues across commands.js, ui.js, task-manager.js, and ai-services.js by replacing CONFIG references with config-manager getters (getDebugFlag, getProjectName, getDefaultSubtasks, isApiKeySet). Refactored 'models' command to use getConfig/writeConfig. Simplified version checking. This stabilizes the codebase after initial Task 61 refactoring, fixing CLI errors and enabling subsequent work on Subtasks 61.34 and 61.35.
2025-04-20 01:09:30 -04:00
|
|
|
);
|
2025-04-22 02:42:04 -04:00
|
|
|
lastError = error; // Store the error to throw if all roles fail
|
|
|
|
// Log reason and continue (handled within the loop now)
|
feat(config): Implement new config system and resolve refactoring errors Introduced config-manager.js and new utilities (resolveEnvVariable, findProjectRoot). Removed old global CONFIG object from utils.js. Updated .taskmasterconfig, mcp.json, and .env.example. Added generateComplexityAnalysisPrompt to ui.js. Removed unused updateSubtaskById from task-manager.js. Resolved SyntaxError and ReferenceError issues across commands.js, ui.js, task-manager.js, and ai-services.js by replacing CONFIG references with config-manager getters (getDebugFlag, getProjectName, getDefaultSubtasks, isApiKeySet). Refactored 'models' command to use getConfig/writeConfig. Simplified version checking. This stabilizes the codebase after initial Task 61 refactoring, fixing CLI errors and enabling subsequent work on Subtasks 61.34 and 61.35.
2025-04-20 01:09:30 -04:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2025-04-22 02:42:04 -04:00
|
|
|
// If loop completes, all roles failed
|
feat(config): Implement new config system and resolve refactoring errors Introduced config-manager.js and new utilities (resolveEnvVariable, findProjectRoot). Removed old global CONFIG object from utils.js. Updated .taskmasterconfig, mcp.json, and .env.example. Added generateComplexityAnalysisPrompt to ui.js. Removed unused updateSubtaskById from task-manager.js. Resolved SyntaxError and ReferenceError issues across commands.js, ui.js, task-manager.js, and ai-services.js by replacing CONFIG references with config-manager getters (getDebugFlag, getProjectName, getDefaultSubtasks, isApiKeySet). Refactored 'models' command to use getConfig/writeConfig. Simplified version checking. This stabilizes the codebase after initial Task 61 refactoring, fixing CLI errors and enabling subsequent work on Subtasks 61.34 and 61.35.
2025-04-20 01:09:30 -04:00
|
|
|
log('error', `All roles in the sequence [${sequence.join(', ')}] failed.`);
|
|
|
|
throw (
|
|
|
|
lastError ||
|
|
|
|
new Error(
|
2025-04-22 02:42:04 -04:00
|
|
|
`AI service call (${serviceType}) failed for all configured roles in the sequence.`
|
feat(config): Implement new config system and resolve refactoring errors Introduced config-manager.js and new utilities (resolveEnvVariable, findProjectRoot). Removed old global CONFIG object from utils.js. Updated .taskmasterconfig, mcp.json, and .env.example. Added generateComplexityAnalysisPrompt to ui.js. Removed unused updateSubtaskById from task-manager.js. Resolved SyntaxError and ReferenceError issues across commands.js, ui.js, task-manager.js, and ai-services.js by replacing CONFIG references with config-manager getters (getDebugFlag, getProjectName, getDefaultSubtasks, isApiKeySet). Refactored 'models' command to use getConfig/writeConfig. Simplified version checking. This stabilizes the codebase after initial Task 61 refactoring, fixing CLI errors and enabling subsequent work on Subtasks 61.34 and 61.35.
2025-04-20 01:09:30 -04:00
|
|
|
)
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2025-04-22 02:42:04 -04:00
|
|
|
* Unified service function for generating text.
|
feat(config): Implement new config system and resolve refactoring errors Introduced config-manager.js and new utilities (resolveEnvVariable, findProjectRoot). Removed old global CONFIG object from utils.js. Updated .taskmasterconfig, mcp.json, and .env.example. Added generateComplexityAnalysisPrompt to ui.js. Removed unused updateSubtaskById from task-manager.js. Resolved SyntaxError and ReferenceError issues across commands.js, ui.js, task-manager.js, and ai-services.js by replacing CONFIG references with config-manager getters (getDebugFlag, getProjectName, getDefaultSubtasks, isApiKeySet). Refactored 'models' command to use getConfig/writeConfig. Simplified version checking. This stabilizes the codebase after initial Task 61 refactoring, fixing CLI errors and enabling subsequent work on Subtasks 61.34 and 61.35.
2025-04-20 01:09:30 -04:00
|
|
|
* Handles client retrieval, retries, and fallback sequence.
|
|
|
|
*
|
|
|
|
* @param {object} params - Parameters for the service call.
|
|
|
|
* @param {string} params.role - The initial client role ('main', 'research', 'fallback').
|
|
|
|
* @param {object} [params.session=null] - Optional MCP session object.
|
|
|
|
* @param {string} params.prompt - The prompt for the AI.
|
2025-04-22 02:42:04 -04:00
|
|
|
* @param {string} [params.systemPrompt] - Optional system prompt.
|
|
|
|
* // Other specific generateText params can be included here.
|
|
|
|
* @returns {Promise<string>} The generated text content.
|
feat(config): Implement new config system and resolve refactoring errors Introduced config-manager.js and new utilities (resolveEnvVariable, findProjectRoot). Removed old global CONFIG object from utils.js. Updated .taskmasterconfig, mcp.json, and .env.example. Added generateComplexityAnalysisPrompt to ui.js. Removed unused updateSubtaskById from task-manager.js. Resolved SyntaxError and ReferenceError issues across commands.js, ui.js, task-manager.js, and ai-services.js by replacing CONFIG references with config-manager getters (getDebugFlag, getProjectName, getDefaultSubtasks, isApiKeySet). Refactored 'models' command to use getConfig/writeConfig. Simplified version checking. This stabilizes the codebase after initial Task 61 refactoring, fixing CLI errors and enabling subsequent work on Subtasks 61.34 and 61.35.
2025-04-20 01:09:30 -04:00
|
|
|
*/
|
2025-04-22 02:42:04 -04:00
|
|
|
async function generateTextService(params) {
|
|
|
|
// Now directly returns the text string or throws error
|
|
|
|
return _unifiedServiceRunner('generateText', params);
|
|
|
|
}
|
feat(config): Implement new config system and resolve refactoring errors Introduced config-manager.js and new utilities (resolveEnvVariable, findProjectRoot). Removed old global CONFIG object from utils.js. Updated .taskmasterconfig, mcp.json, and .env.example. Added generateComplexityAnalysisPrompt to ui.js. Removed unused updateSubtaskById from task-manager.js. Resolved SyntaxError and ReferenceError issues across commands.js, ui.js, task-manager.js, and ai-services.js by replacing CONFIG references with config-manager getters (getDebugFlag, getProjectName, getDefaultSubtasks, isApiKeySet). Refactored 'models' command to use getConfig/writeConfig. Simplified version checking. This stabilizes the codebase after initial Task 61 refactoring, fixing CLI errors and enabling subsequent work on Subtasks 61.34 and 61.35.
2025-04-20 01:09:30 -04:00
|
|
|
|
2025-04-22 02:42:04 -04:00
|
|
|
/**
|
|
|
|
* Unified service function for streaming text.
|
|
|
|
* Handles client retrieval, retries, and fallback sequence.
|
|
|
|
*
|
|
|
|
* @param {object} params - Parameters for the service call.
|
|
|
|
* @param {string} params.role - The initial client role ('main', 'research', 'fallback').
|
|
|
|
* @param {object} [params.session=null] - Optional MCP session object.
|
|
|
|
* @param {string} params.prompt - The prompt for the AI.
|
|
|
|
* @param {string} [params.systemPrompt] - Optional system prompt.
|
|
|
|
* // Other specific streamText params can be included here.
|
|
|
|
* @returns {Promise<ReadableStream<string>>} A readable stream of text deltas.
|
|
|
|
*/
|
|
|
|
async function streamTextService(params) {
|
|
|
|
// Now directly returns the stream object or throws error
|
|
|
|
return _unifiedServiceRunner('streamText', params);
|
|
|
|
}
|
feat(config): Implement new config system and resolve refactoring errors Introduced config-manager.js and new utilities (resolveEnvVariable, findProjectRoot). Removed old global CONFIG object from utils.js. Updated .taskmasterconfig, mcp.json, and .env.example. Added generateComplexityAnalysisPrompt to ui.js. Removed unused updateSubtaskById from task-manager.js. Resolved SyntaxError and ReferenceError issues across commands.js, ui.js, task-manager.js, and ai-services.js by replacing CONFIG references with config-manager getters (getDebugFlag, getProjectName, getDefaultSubtasks, isApiKeySet). Refactored 'models' command to use getConfig/writeConfig. Simplified version checking. This stabilizes the codebase after initial Task 61 refactoring, fixing CLI errors and enabling subsequent work on Subtasks 61.34 and 61.35.
2025-04-20 01:09:30 -04:00
|
|
|
|
2025-04-22 02:42:04 -04:00
|
|
|
/**
|
|
|
|
* Unified service function for generating structured objects.
|
|
|
|
* Handles client retrieval, retries, and fallback sequence.
|
|
|
|
*
|
|
|
|
* @param {object} params - Parameters for the service call.
|
|
|
|
* @param {string} params.role - The initial client role ('main', 'research', 'fallback').
|
|
|
|
* @param {object} [params.session=null] - Optional MCP session object.
|
|
|
|
* @param {import('zod').ZodSchema} params.schema - The Zod schema for the expected object.
|
|
|
|
* @param {string} params.prompt - The prompt for the AI.
|
|
|
|
* @param {string} [params.systemPrompt] - Optional system prompt.
|
|
|
|
* @param {string} [params.objectName='generated_object'] - Name for object/tool.
|
|
|
|
* @param {number} [params.maxRetries=3] - Max retries for object generation.
|
|
|
|
* // Other specific generateObject params can be included here.
|
|
|
|
* @returns {Promise<object>} The generated object matching the schema.
|
|
|
|
*/
|
|
|
|
async function generateObjectService(params) {
|
|
|
|
const defaults = {
|
|
|
|
objectName: 'generated_object',
|
|
|
|
maxRetries: 3
|
|
|
|
};
|
|
|
|
const combinedParams = { ...defaults, ...params };
|
|
|
|
// Now directly returns the generated object or throws error
|
|
|
|
return _unifiedServiceRunner('generateObject', combinedParams);
|
feat(config): Implement new config system and resolve refactoring errors Introduced config-manager.js and new utilities (resolveEnvVariable, findProjectRoot). Removed old global CONFIG object from utils.js. Updated .taskmasterconfig, mcp.json, and .env.example. Added generateComplexityAnalysisPrompt to ui.js. Removed unused updateSubtaskById from task-manager.js. Resolved SyntaxError and ReferenceError issues across commands.js, ui.js, task-manager.js, and ai-services.js by replacing CONFIG references with config-manager getters (getDebugFlag, getProjectName, getDefaultSubtasks, isApiKeySet). Refactored 'models' command to use getConfig/writeConfig. Simplified version checking. This stabilizes the codebase after initial Task 61 refactoring, fixing CLI errors and enabling subsequent work on Subtasks 61.34 and 61.35.
2025-04-20 01:09:30 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
export { generateTextService, streamTextService, generateObjectService };
|