Compare commits
4 Commits
fix/bedroc
...
v0.16.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
293b59bac6 | ||
|
|
1809c4ed7b | ||
|
|
6e406958c1 | ||
|
|
074b7ec0bc |
@@ -1,5 +0,0 @@
|
|||||||
---
|
|
||||||
"task-master-ai": patch
|
|
||||||
---
|
|
||||||
|
|
||||||
Fix bedrock issues
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
---
|
|
||||||
'task-master-ai': minor
|
|
||||||
---
|
|
||||||
|
|
||||||
Add AWS bedrock support
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
---
|
|
||||||
'task-master-ai': minor
|
|
||||||
---
|
|
||||||
|
|
||||||
# Add Google Vertex AI Provider Integration
|
|
||||||
|
|
||||||
- Implemented `VertexAIProvider` class extending BaseAIProvider
|
|
||||||
- Added authentication and configuration handling for Vertex AI
|
|
||||||
- Updated configuration manager with Vertex-specific getters
|
|
||||||
- Modified AI services unified system to integrate the provider
|
|
||||||
- Added documentation for Vertex AI setup and configuration
|
|
||||||
- Updated environment variable examples for Vertex AI support
|
|
||||||
- Implemented specialized error handling for Vertex-specific issues
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
---
|
|
||||||
'task-master-ai': minor
|
|
||||||
---
|
|
||||||
|
|
||||||
Add support for Azure
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
---
|
|
||||||
"task-master-ai": patch
|
|
||||||
---
|
|
||||||
|
|
||||||
Update rules for new directory structure
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
---
|
|
||||||
"task-master-ai": minor
|
|
||||||
---
|
|
||||||
|
|
||||||
Increased minimum required node version to > 18 (was > 14)
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
---
|
|
||||||
'task-master-ai': minor
|
|
||||||
---
|
|
||||||
|
|
||||||
Renamed baseUrl to baseURL
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
{
|
|
||||||
"mode": "exit",
|
|
||||||
"tag": "rc",
|
|
||||||
"initialVersions": {
|
|
||||||
"task-master-ai": "0.15.0"
|
|
||||||
},
|
|
||||||
"changesets": [
|
|
||||||
"hungry-geese-work",
|
|
||||||
"itchy-taxes-sip",
|
|
||||||
"lemon-apes-sort",
|
|
||||||
"new-colts-flow",
|
|
||||||
"plain-bottles-stand",
|
|
||||||
"shaggy-rice-exist",
|
|
||||||
"sharp-flies-call",
|
|
||||||
"spotty-buttons-walk",
|
|
||||||
"tidy-seals-rule"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
---
|
|
||||||
'task-master-ai': patch
|
|
||||||
---
|
|
||||||
|
|
||||||
Fix max_tokens error when trying to use claude-sonnet-4 and claude-opus-4
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
---
|
|
||||||
'task-master-ai': minor
|
|
||||||
---
|
|
||||||
|
|
||||||
Add TASK_MASTER_PROJECT_ROOT env variable supported in mcp.json and .env for project root resolution
|
|
||||||
|
|
||||||
- Some users were having issues where the MCP wasn't able to detect the location of their project root, you can now set the `TASK_MASTER_PROJECT_ROOT` environment variable to the root of your project.
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
---
|
|
||||||
"task-master-ai": minor
|
|
||||||
---
|
|
||||||
|
|
||||||
Consolidate Task Master files into unified .taskmaster directory structure
|
|
||||||
|
|
||||||
This release introduces a new consolidated directory structure that organizes all Task Master files under a single `.taskmaster/` directory for better project organization and cleaner workspace management.
|
|
||||||
|
|
||||||
**New Directory Structure:**
|
|
||||||
|
|
||||||
- `.taskmaster/tasks/` - Task files (previously `tasks/`)
|
|
||||||
- `.taskmaster/docs/` - Documentation including PRD files (previously `scripts/`)
|
|
||||||
- `.taskmaster/reports/` - Complexity analysis reports (previously `scripts/`)
|
|
||||||
- `.taskmaster/templates/` - Template files like example PRD
|
|
||||||
- `.taskmaster/config.json` - Configuration (previously `.taskmasterconfig`)
|
|
||||||
|
|
||||||
**Migration & Backward Compatibility:**
|
|
||||||
|
|
||||||
- Existing projects continue to work with legacy file locations
|
|
||||||
- New projects use the consolidated structure automatically
|
|
||||||
- Run `task-master migrate` to move existing projects to the new structure
|
|
||||||
- All CLI commands and MCP tools automatically detect and use appropriate file locations
|
|
||||||
|
|
||||||
**Benefits:**
|
|
||||||
|
|
||||||
- Cleaner project root with Task Master files organized in one location
|
|
||||||
- Reduced file scatter across multiple directories
|
|
||||||
- Improved project navigation and maintenance
|
|
||||||
- Consistent file organization across all Task Master projects
|
|
||||||
|
|
||||||
This change maintains full backward compatibility while providing a migration path to the improved structure.
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
---
|
|
||||||
"task-master-ai": patch
|
|
||||||
---
|
|
||||||
|
|
||||||
Fix MCP crashing after certain commands due to console logs
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
---
|
|
||||||
'task-master-ai': patch
|
|
||||||
---
|
|
||||||
|
|
||||||
Fix add-task MCP command causing an error
|
|
||||||
@@ -26,7 +26,6 @@
|
|||||||
"defaultPriority": "medium",
|
"defaultPriority": "medium",
|
||||||
"projectName": "Taskmaster",
|
"projectName": "Taskmaster",
|
||||||
"ollamaBaseURL": "http://localhost:11434/api",
|
"ollamaBaseURL": "http://localhost:11434/api",
|
||||||
"bedrockBaseURL": "https://bedrock.us-east-1.amazonaws.com",
|
|
||||||
"userId": "1234567890",
|
"userId": "1234567890",
|
||||||
"azureBaseURL": "https://your-endpoint.azure.com/"
|
"azureBaseURL": "https://your-endpoint.azure.com/"
|
||||||
}
|
}
|
||||||
|
|||||||
32
.taskmasterconfig
Normal file
32
.taskmasterconfig
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
{
|
||||||
|
"models": {
|
||||||
|
"main": {
|
||||||
|
"provider": "anthropic",
|
||||||
|
"modelId": "claude-sonnet-4-20250514",
|
||||||
|
"maxTokens": 50000,
|
||||||
|
"temperature": 0.2
|
||||||
|
},
|
||||||
|
"research": {
|
||||||
|
"provider": "perplexity",
|
||||||
|
"modelId": "sonar-pro",
|
||||||
|
"maxTokens": 8700,
|
||||||
|
"temperature": 0.1
|
||||||
|
},
|
||||||
|
"fallback": {
|
||||||
|
"provider": "anthropic",
|
||||||
|
"modelId": "claude-3-7-sonnet-20250219",
|
||||||
|
"maxTokens": 128000,
|
||||||
|
"temperature": 0.2
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"global": {
|
||||||
|
"logLevel": "info",
|
||||||
|
"debug": false,
|
||||||
|
"defaultSubtasks": 5,
|
||||||
|
"defaultPriority": "medium",
|
||||||
|
"projectName": "Taskmaster",
|
||||||
|
"ollamaBaseURL": "http://localhost:11434/api",
|
||||||
|
"userId": "1234567890",
|
||||||
|
"azureBaseURL": "https://your-endpoint.azure.com/"
|
||||||
|
}
|
||||||
|
}
|
||||||
60
CHANGELOG.md
60
CHANGELOG.md
@@ -1,5 +1,65 @@
|
|||||||
# task-master-ai
|
# task-master-ai
|
||||||
|
|
||||||
|
## 0.16.0
|
||||||
|
|
||||||
|
### Minor Changes
|
||||||
|
|
||||||
|
- [#607](https://github.com/eyaltoledano/claude-task-master/pull/607) [`6a8a68e`](https://github.com/eyaltoledano/claude-task-master/commit/6a8a68e1a3f34dcdf40b355b4602a08d291f8e38) Thanks [@Crunchyman-ralph](https://github.com/Crunchyman-ralph)! - Add AWS bedrock support
|
||||||
|
|
||||||
|
- [#607](https://github.com/eyaltoledano/claude-task-master/pull/607) [`6a8a68e`](https://github.com/eyaltoledano/claude-task-master/commit/6a8a68e1a3f34dcdf40b355b4602a08d291f8e38) Thanks [@Crunchyman-ralph](https://github.com/Crunchyman-ralph)! - # Add Google Vertex AI Provider Integration
|
||||||
|
|
||||||
|
- Implemented `VertexAIProvider` class extending BaseAIProvider
|
||||||
|
- Added authentication and configuration handling for Vertex AI
|
||||||
|
- Updated configuration manager with Vertex-specific getters
|
||||||
|
- Modified AI services unified system to integrate the provider
|
||||||
|
- Added documentation for Vertex AI setup and configuration
|
||||||
|
- Updated environment variable examples for Vertex AI support
|
||||||
|
- Implemented specialized error handling for Vertex-specific issues
|
||||||
|
|
||||||
|
- [#607](https://github.com/eyaltoledano/claude-task-master/pull/607) [`6a8a68e`](https://github.com/eyaltoledano/claude-task-master/commit/6a8a68e1a3f34dcdf40b355b4602a08d291f8e38) Thanks [@Crunchyman-ralph](https://github.com/Crunchyman-ralph)! - Add support for Azure
|
||||||
|
|
||||||
|
- [#612](https://github.com/eyaltoledano/claude-task-master/pull/612) [`669b744`](https://github.com/eyaltoledano/claude-task-master/commit/669b744ced454116a7b29de6c58b4b8da977186a) Thanks [@Crunchyman-ralph](https://github.com/Crunchyman-ralph)! - Increased minimum required node version to > 18 (was > 14)
|
||||||
|
|
||||||
|
- [#607](https://github.com/eyaltoledano/claude-task-master/pull/607) [`6a8a68e`](https://github.com/eyaltoledano/claude-task-master/commit/6a8a68e1a3f34dcdf40b355b4602a08d291f8e38) Thanks [@Crunchyman-ralph](https://github.com/Crunchyman-ralph)! - Renamed baseUrl to baseURL
|
||||||
|
|
||||||
|
- [#604](https://github.com/eyaltoledano/claude-task-master/pull/604) [`80735f9`](https://github.com/eyaltoledano/claude-task-master/commit/80735f9e60c7dda7207e169697f8ac07b6733634) Thanks [@Crunchyman-ralph](https://github.com/Crunchyman-ralph)! - Add TASK_MASTER_PROJECT_ROOT env variable supported in mcp.json and .env for project root resolution
|
||||||
|
|
||||||
|
- Some users were having issues where the MCP wasn't able to detect the location of their project root, you can now set the `TASK_MASTER_PROJECT_ROOT` environment variable to the root of your project.
|
||||||
|
|
||||||
|
- [#619](https://github.com/eyaltoledano/claude-task-master/pull/619) [`3f64202`](https://github.com/eyaltoledano/claude-task-master/commit/3f64202c9feef83f2bf383c79e4367d337c37e20) Thanks [@Crunchyman-ralph](https://github.com/Crunchyman-ralph)! - Consolidate Task Master files into unified .taskmaster directory structure
|
||||||
|
|
||||||
|
This release introduces a new consolidated directory structure that organizes all Task Master files under a single `.taskmaster/` directory for better project organization and cleaner workspace management.
|
||||||
|
|
||||||
|
**New Directory Structure:**
|
||||||
|
|
||||||
|
- `.taskmaster/tasks/` - Task files (previously `tasks/`)
|
||||||
|
- `.taskmaster/docs/` - Documentation including PRD files (previously `scripts/`)
|
||||||
|
- `.taskmaster/reports/` - Complexity analysis reports (previously `scripts/`)
|
||||||
|
- `.taskmaster/templates/` - Template files like example PRD
|
||||||
|
- `.taskmaster/config.json` - Configuration (previously `.taskmasterconfig`)
|
||||||
|
|
||||||
|
**Migration & Backward Compatibility:**
|
||||||
|
|
||||||
|
- Existing projects continue to work with legacy file locations
|
||||||
|
- New projects use the consolidated structure automatically
|
||||||
|
- Run `task-master migrate` to move existing projects to the new structure
|
||||||
|
- All CLI commands and MCP tools automatically detect and use appropriate file locations
|
||||||
|
|
||||||
|
**Benefits:**
|
||||||
|
|
||||||
|
- Cleaner project root with Task Master files organized in one location
|
||||||
|
- Reduced file scatter across multiple directories
|
||||||
|
- Improved project navigation and maintenance
|
||||||
|
- Consistent file organization across all Task Master projects
|
||||||
|
|
||||||
|
This change maintains full backward compatibility while providing a migration path to the improved structure.
|
||||||
|
|
||||||
|
### Patch Changes
|
||||||
|
|
||||||
|
- [#607](https://github.com/eyaltoledano/claude-task-master/pull/607) [`6a8a68e`](https://github.com/eyaltoledano/claude-task-master/commit/6a8a68e1a3f34dcdf40b355b4602a08d291f8e38) Thanks [@Crunchyman-ralph](https://github.com/Crunchyman-ralph)! - Fix max_tokens error when trying to use claude-sonnet-4 and claude-opus-4
|
||||||
|
|
||||||
|
- [#625](https://github.com/eyaltoledano/claude-task-master/pull/625) [`2d520de`](https://github.com/eyaltoledano/claude-task-master/commit/2d520de2694da3efe537b475ca52baf3c869edda) Thanks [@Crunchyman-ralph](https://github.com/Crunchyman-ralph)! - Fix add-task MCP command causing an error
|
||||||
|
|
||||||
## 0.16.0-rc.0
|
## 0.16.0-rc.0
|
||||||
|
|
||||||
### Minor Changes
|
### Minor Changes
|
||||||
|
|||||||
@@ -26,7 +26,6 @@
|
|||||||
"defaultPriority": "medium",
|
"defaultPriority": "medium",
|
||||||
"projectName": "Taskmaster",
|
"projectName": "Taskmaster",
|
||||||
"ollamaBaseURL": "http://localhost:11434/api",
|
"ollamaBaseURL": "http://localhost:11434/api",
|
||||||
"azureOpenaiBaseURL": "https://your-endpoint.openai.azure.com/",
|
"azureOpenaiBaseURL": "https://your-endpoint.openai.azure.com/"
|
||||||
"bedrockBaseURL": "https://bedrock.us-east-1.amazonaws.com"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -56,24 +56,20 @@ task-master generate # Update task markd
|
|||||||
|
|
||||||
```
|
```
|
||||||
project/
|
project/
|
||||||
├── .taskmaster/
|
├── tasks/
|
||||||
│ ├── tasks/ # Task files directory
|
│ ├── tasks.json # Main task database
|
||||||
│ │ ├── tasks.json # Main task database
|
│ ├── task-1.md # Individual task files
|
||||||
│ │ ├── task-1.md # Individual task files
|
│ └── task-2.md
|
||||||
│ │ └── task-2.md
|
├── scripts/
|
||||||
│ ├── docs/ # Documentation directory
|
│ ├── prd.txt # Product requirements
|
||||||
│ │ ├── prd.txt # Product requirements
|
│ └── task-complexity-report.json
|
||||||
│ ├── reports/ # Analysis reports directory
|
|
||||||
│ │ └── task-complexity-report.json
|
|
||||||
│ ├── templates/ # Template files
|
|
||||||
│ │ └── example_prd.txt # Example PRD template
|
|
||||||
│ └── config.json # AI models & settings
|
|
||||||
├── .claude/
|
├── .claude/
|
||||||
│ ├── settings.json # Claude Code configuration
|
│ ├── settings.json # Claude Code configuration
|
||||||
│ └── commands/ # Custom slash commands
|
│ └── commands/ # Custom slash commands
|
||||||
├── .env # API keys
|
├── .taskmasterconfig # AI models & settings
|
||||||
├── .mcp.json # MCP configuration
|
├── .env # API keys
|
||||||
└── CLAUDE.md # This file - auto-loaded by Claude Code
|
├── .mcp.json # MCP configuration
|
||||||
|
└── CLAUDE.md # This file - auto-loaded by Claude Code
|
||||||
```
|
```
|
||||||
|
|
||||||
## MCP Integration
|
## MCP Integration
|
||||||
@@ -388,7 +384,7 @@ These commands make AI calls and may take up to a minute:
|
|||||||
### File Management
|
### File Management
|
||||||
|
|
||||||
- Never manually edit `tasks.json` - use commands instead
|
- Never manually edit `tasks.json` - use commands instead
|
||||||
- Never manually edit `.taskmaster/config.json` - use `task-master models`
|
- Never manually edit `.taskmasterconfig` - use `task-master models`
|
||||||
- Task markdown files in `tasks/` are auto-generated
|
- Task markdown files in `tasks/` are auto-generated
|
||||||
- Run `task-master generate` after manual changes to tasks.json
|
- Run `task-master generate` after manual changes to tasks.json
|
||||||
|
|
||||||
|
|||||||
@@ -5,5 +5,5 @@ OPENAI_API_KEY="your_openai_api_key_here" # Optional, for OpenAI/Ope
|
|||||||
GOOGLE_API_KEY="your_google_api_key_here" # Optional, for Google Gemini models.
|
GOOGLE_API_KEY="your_google_api_key_here" # Optional, for Google Gemini models.
|
||||||
MISTRAL_API_KEY="your_mistral_key_here" # Optional, for Mistral AI models.
|
MISTRAL_API_KEY="your_mistral_key_here" # Optional, for Mistral AI models.
|
||||||
XAI_API_KEY="YOUR_XAI_KEY_HERE" # Optional, for xAI AI models.
|
XAI_API_KEY="YOUR_XAI_KEY_HERE" # Optional, for xAI AI models.
|
||||||
AZURE_OPENAI_API_KEY="your_azure_key_here" # Optional, for Azure OpenAI models (requires endpoint in .taskmaster/config.json).
|
AZURE_OPENAI_API_KEY="your_azure_key_here" # Optional, for Azure OpenAI models (requires endpoint in .taskmasterconfig).
|
||||||
OLLAMA_API_KEY="your_ollama_api_key_here" # Optional: For remote Ollama servers that require authentication.
|
OLLAMA_API_KEY="your_ollama_api_key_here" # Optional: For remote Ollama servers that require authentication.
|
||||||
@@ -20,7 +20,7 @@ In an AI-driven development process—particularly with tools like [Cursor](http
|
|||||||
|
|
||||||
Task Master configuration is now managed through two primary methods:
|
Task Master configuration is now managed through two primary methods:
|
||||||
|
|
||||||
1. **`.taskmaster/config.json` File (Project Root - Primary)**
|
1. **`.taskmasterconfig` File (Project Root - Primary)**
|
||||||
|
|
||||||
- Stores AI model selections (`main`, `research`, `fallback`), model parameters (`maxTokens`, `temperature`), `logLevel`, `defaultSubtasks`, `defaultPriority`, `projectName`, etc.
|
- Stores AI model selections (`main`, `research`, `fallback`), model parameters (`maxTokens`, `temperature`), `logLevel`, `defaultSubtasks`, `defaultPriority`, `projectName`, etc.
|
||||||
- Managed using the `task-master models --setup` command or the `models` MCP tool.
|
- Managed using the `task-master models --setup` command or the `models` MCP tool.
|
||||||
@@ -192,7 +192,7 @@ Notes:
|
|||||||
## AI Integration (Updated)
|
## AI Integration (Updated)
|
||||||
|
|
||||||
- The script now uses a unified AI service layer (`ai-services-unified.js`).
|
- The script now uses a unified AI service layer (`ai-services-unified.js`).
|
||||||
- Model selection (e.g., Claude vs. Perplexity for `--research`) is determined by the configuration in `.taskmaster/config.json` based on the requested `role` (`main` or `research`).
|
- Model selection (e.g., Claude vs. Perplexity for `--research`) is determined by the configuration in `.taskmasterconfig` based on the requested `role` (`main` or `research`).
|
||||||
- API keys are automatically resolved from your `.env` file (for CLI) or MCP session environment.
|
- API keys are automatically resolved from your `.env` file (for CLI) or MCP session environment.
|
||||||
- To use the research capabilities (e.g., `expand --research`), ensure you have:
|
- To use the research capabilities (e.g., `expand --research`), ensure you have:
|
||||||
1. Configured a model for the `research` role using `task-master models --setup` (Perplexity models are recommended).
|
1. Configured a model for the `research` role using `task-master models --setup` (Perplexity models are recommended).
|
||||||
@@ -357,25 +357,25 @@ The output report structure is:
|
|||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"meta": {
|
"meta": {
|
||||||
"generatedAt": "2023-06-15T12:34:56.789Z",
|
"generatedAt": "2023-06-15T12:34:56.789Z",
|
||||||
"tasksAnalyzed": 20,
|
"tasksAnalyzed": 20,
|
||||||
"thresholdScore": 5,
|
"thresholdScore": 5,
|
||||||
"projectName": "Your Project Name",
|
"projectName": "Your Project Name",
|
||||||
"usedResearch": true
|
"usedResearch": true
|
||||||
},
|
},
|
||||||
"complexityAnalysis": [
|
"complexityAnalysis": [
|
||||||
{
|
{
|
||||||
"taskId": 8,
|
"taskId": 8,
|
||||||
"taskTitle": "Develop Implementation Drift Handling",
|
"taskTitle": "Develop Implementation Drift Handling",
|
||||||
"complexityScore": 9.5,
|
"complexityScore": 9.5,
|
||||||
"recommendedSubtasks": 6,
|
"recommendedSubtasks": 6,
|
||||||
"expansionPrompt": "Create subtasks that handle detecting...",
|
"expansionPrompt": "Create subtasks that handle detecting...",
|
||||||
"reasoning": "This task requires sophisticated logic...",
|
"reasoning": "This task requires sophisticated logic...",
|
||||||
"expansionCommand": "task-master expand --id=8 --num=6 --prompt=\"Create subtasks...\" --research"
|
"expansionCommand": "task-master expand --id=8 --num=6 --prompt=\"Create subtasks...\" --research"
|
||||||
}
|
}
|
||||||
// More tasks sorted by complexity score (highest first)
|
// More tasks sorted by complexity score (highest first)
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -47,6 +47,7 @@ export function registerModelsTool(server) {
|
|||||||
),
|
),
|
||||||
projectRoot: z
|
projectRoot: z
|
||||||
.string()
|
.string()
|
||||||
|
.optional()
|
||||||
.describe('The directory of the project. Must be an absolute path.'),
|
.describe('The directory of the project. Must be an absolute path.'),
|
||||||
openrouter: z
|
openrouter: z
|
||||||
.boolean()
|
.boolean()
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ export function registerParsePRDTool(server) {
|
|||||||
.describe('Absolute path to the PRD document file (.txt, .md, etc.)'),
|
.describe('Absolute path to the PRD document file (.txt, .md, etc.)'),
|
||||||
projectRoot: z
|
projectRoot: z
|
||||||
.string()
|
.string()
|
||||||
|
.optional()
|
||||||
.describe('The directory of the project. Must be an absolute path.'),
|
.describe('The directory of the project. Must be an absolute path.'),
|
||||||
output: z
|
output: z
|
||||||
.string()
|
.string()
|
||||||
|
|||||||
23506
package-lock.json
generated
23506
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "task-master-ai",
|
"name": "task-master-ai",
|
||||||
"version": "0.16.0-rc.0",
|
"version": "0.16.0",
|
||||||
"description": "A task management system for ambitious AI-driven development that doesn't overwhelm and confuse Cursor.",
|
"description": "A task management system for ambitious AI-driven development that doesn't overwhelm and confuse Cursor.",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
|
|||||||
@@ -509,9 +509,9 @@ function createProjectStructure(addAliases, dryRun, options) {
|
|||||||
replacements
|
replacements
|
||||||
);
|
);
|
||||||
|
|
||||||
// Copy config.json with project name to NEW location
|
// Copy .taskmasterconfig with project name to NEW location
|
||||||
copyTemplateFile(
|
copyTemplateFile(
|
||||||
'config.json',
|
'.taskmasterconfig',
|
||||||
path.join(targetDir, TASKMASTER_CONFIG_FILE),
|
path.join(targetDir, TASKMASTER_CONFIG_FILE),
|
||||||
{
|
{
|
||||||
...replacements
|
...replacements
|
||||||
|
|||||||
@@ -22,7 +22,6 @@ import {
|
|||||||
isApiKeySet,
|
isApiKeySet,
|
||||||
getOllamaBaseURL,
|
getOllamaBaseURL,
|
||||||
getAzureBaseURL,
|
getAzureBaseURL,
|
||||||
getBedrockBaseURL,
|
|
||||||
getVertexProjectId,
|
getVertexProjectId,
|
||||||
getVertexLocation
|
getVertexLocation
|
||||||
} from './config-manager.js';
|
} from './config-manager.js';
|
||||||
@@ -411,10 +410,6 @@ async function _unifiedServiceRunner(serviceType, params) {
|
|||||||
// For Ollama, use the global Ollama base URL if role-specific URL is not configured
|
// For Ollama, use the global Ollama base URL if role-specific URL is not configured
|
||||||
baseURL = getOllamaBaseURL(effectiveProjectRoot);
|
baseURL = getOllamaBaseURL(effectiveProjectRoot);
|
||||||
log('debug', `Using global Ollama base URL: ${baseURL}`);
|
log('debug', `Using global Ollama base URL: ${baseURL}`);
|
||||||
} else if (providerName?.toLowerCase() === 'bedrock' && !baseURL) {
|
|
||||||
// For Bedrock, use the global Bedrock base URL if role-specific URL is not configured
|
|
||||||
baseURL = getBedrockBaseURL(effectiveProjectRoot);
|
|
||||||
log('debug', `Using global Bedrock base URL: ${baseURL}`);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get AI parameters for the current role
|
// Get AI parameters for the current role
|
||||||
|
|||||||
@@ -61,8 +61,7 @@ const DEFAULTS = {
|
|||||||
defaultSubtasks: 5,
|
defaultSubtasks: 5,
|
||||||
defaultPriority: 'medium',
|
defaultPriority: 'medium',
|
||||||
projectName: 'Task Master',
|
projectName: 'Task Master',
|
||||||
ollamaBaseURL: 'http://localhost:11434/api',
|
ollamaBaseURL: 'http://localhost:11434/api'
|
||||||
bedrockBaseURL: 'https://bedrock.us-east-1.amazonaws.com'
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -383,11 +382,6 @@ function getAzureBaseURL(explicitRoot = null) {
|
|||||||
return getGlobalConfig(explicitRoot).azureBaseURL;
|
return getGlobalConfig(explicitRoot).azureBaseURL;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getBedrockBaseURL(explicitRoot = null) {
|
|
||||||
// Directly return value from config
|
|
||||||
return getGlobalConfig(explicitRoot).bedrockBaseURL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the Google Cloud project ID for Vertex AI from configuration
|
* Gets the Google Cloud project ID for Vertex AI from configuration
|
||||||
* @param {string|null} explicitRoot - Optional explicit path to the project root.
|
* @param {string|null} explicitRoot - Optional explicit path to the project root.
|
||||||
@@ -785,7 +779,6 @@ export {
|
|||||||
getProjectName,
|
getProjectName,
|
||||||
getOllamaBaseURL,
|
getOllamaBaseURL,
|
||||||
getAzureBaseURL,
|
getAzureBaseURL,
|
||||||
getBedrockBaseURL,
|
|
||||||
getParametersForRole,
|
getParametersForRole,
|
||||||
getUserId,
|
getUserId,
|
||||||
// API Key Checkers (still relevant)
|
// API Key Checkers (still relevant)
|
||||||
|
|||||||
@@ -482,11 +482,6 @@ async function setModel(role, modelId, options = {}) {
|
|||||||
`Model ID "${modelId}" not found in the Ollama instance. Please verify the model is pulled and available. You can check available models with: curl ${tagsUrl}`
|
`Model ID "${modelId}" not found in the Ollama instance. Please verify the model is pulled and available. You can check available models with: curl ${tagsUrl}`
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
} else if (providerHint === 'bedrock') {
|
|
||||||
// Set provider without model validation since Bedrock models are managed by AWS
|
|
||||||
determinedProvider = 'bedrock';
|
|
||||||
warningMessage = `Warning: Custom Bedrock model '${modelId}' set. Please ensure the model ID is valid and accessible in your AWS account.`;
|
|
||||||
report('warn', warningMessage);
|
|
||||||
} else {
|
} else {
|
||||||
// Invalid provider hint - should not happen
|
// Invalid provider hint - should not happen
|
||||||
throw new Error(`Invalid provider hint received: ${providerHint}`);
|
throw new Error(`Invalid provider hint received: ${providerHint}`);
|
||||||
|
|||||||
@@ -24,10 +24,7 @@ import {
|
|||||||
} from './task-manager.js';
|
} from './task-manager.js';
|
||||||
import { getProjectName, getDefaultSubtasks } from './config-manager.js';
|
import { getProjectName, getDefaultSubtasks } from './config-manager.js';
|
||||||
import { TASK_STATUS_OPTIONS } from '../../src/constants/task-status.js';
|
import { TASK_STATUS_OPTIONS } from '../../src/constants/task-status.js';
|
||||||
import {
|
import { TASKMASTER_TASKS_FILE } from '../../src/constants/paths.js';
|
||||||
TASKMASTER_CONFIG_FILE,
|
|
||||||
TASKMASTER_TASKS_FILE
|
|
||||||
} from '../../src/constants/paths.js';
|
|
||||||
import { getTaskMasterVersion } from '../../src/utils/getVersion.js';
|
import { getTaskMasterVersion } from '../../src/utils/getVersion.js';
|
||||||
|
|
||||||
// Create a color gradient for the banner
|
// Create a color gradient for the banner
|
||||||
@@ -690,7 +687,7 @@ function displayHelp() {
|
|||||||
|
|
||||||
configTable.push(
|
configTable.push(
|
||||||
[
|
[
|
||||||
`${chalk.yellow(TASKMASTER_CONFIG_FILE)}${chalk.reset('')}`,
|
`${chalk.yellow('.taskmasterconfig')}${chalk.reset('')}`,
|
||||||
`${chalk.white('AI model configuration file (project root)')}${chalk.reset('')}`,
|
`${chalk.white('AI model configuration file (project root)')}${chalk.reset('')}`,
|
||||||
`${chalk.dim('Managed by models cmd')}${chalk.reset('')}`
|
`${chalk.dim('Managed by models cmd')}${chalk.reset('')}`
|
||||||
],
|
],
|
||||||
@@ -1854,7 +1851,7 @@ function displayApiKeyStatus(statusReport) {
|
|||||||
console.log(table.toString());
|
console.log(table.toString());
|
||||||
console.log(
|
console.log(
|
||||||
chalk.gray(
|
chalk.gray(
|
||||||
` Note: Some providers (e.g., Azure, Ollama) may require additional endpoint configuration in ${TASKMASTER_CONFIG_FILE}.`
|
' Note: Some providers (e.g., Azure, Ollama) may require additional endpoint configuration in .taskmasterconfig.'
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,31 +0,0 @@
|
|||||||
/**
|
|
||||||
* Logger utility functions for Task Master
|
|
||||||
* Provides standardized logging patterns for both CLI and utility contexts
|
|
||||||
*/
|
|
||||||
|
|
||||||
import { log as utilLog } from '../../scripts/modules/utils.js';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a standard logger object that wraps the utility log function
|
|
||||||
* This provides a consistent logger interface across different parts of the application
|
|
||||||
* @returns {Object} A logger object with standard logging methods (info, warn, error, debug, success)
|
|
||||||
*/
|
|
||||||
export function createStandardLogger() {
|
|
||||||
return {
|
|
||||||
info: (msg, ...args) => utilLog('info', msg, ...args),
|
|
||||||
warn: (msg, ...args) => utilLog('warn', msg, ...args),
|
|
||||||
error: (msg, ...args) => utilLog('error', msg, ...args),
|
|
||||||
debug: (msg, ...args) => utilLog('debug', msg, ...args),
|
|
||||||
success: (msg, ...args) => utilLog('success', msg, ...args)
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a logger using either the provided logger or a default standard logger
|
|
||||||
* This is the recommended pattern for functions that accept an optional logger parameter
|
|
||||||
* @param {Object|null} providedLogger - Optional logger object passed from caller
|
|
||||||
* @returns {Object} A logger object with standard logging methods
|
|
||||||
*/
|
|
||||||
export function getLoggerOrDefault(providedLogger = null) {
|
|
||||||
return providedLogger || createStandardLogger();
|
|
||||||
}
|
|
||||||
@@ -14,7 +14,6 @@ import {
|
|||||||
TASKMASTER_CONFIG_FILE,
|
TASKMASTER_CONFIG_FILE,
|
||||||
LEGACY_CONFIG_FILE
|
LEGACY_CONFIG_FILE
|
||||||
} from '../constants/paths.js';
|
} from '../constants/paths.js';
|
||||||
import { getLoggerOrDefault } from './logger-utils.js';
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Find the project root directory by looking for project markers
|
* Find the project root directory by looking for project markers
|
||||||
@@ -60,8 +59,7 @@ export function findProjectRoot(startDir = process.cwd()) {
|
|||||||
* @returns {string|null} - Resolved tasks.json path or null if not found
|
* @returns {string|null} - Resolved tasks.json path or null if not found
|
||||||
*/
|
*/
|
||||||
export function findTasksPath(explicitPath = null, args = null, log = null) {
|
export function findTasksPath(explicitPath = null, args = null, log = null) {
|
||||||
// Use the passed logger if available, otherwise use the default logger
|
const logger = log || console;
|
||||||
const logger = getLoggerOrDefault(log);
|
|
||||||
|
|
||||||
// 1. If explicit path is provided, use it (highest priority)
|
// 1. If explicit path is provided, use it (highest priority)
|
||||||
if (explicitPath) {
|
if (explicitPath) {
|
||||||
@@ -132,7 +130,7 @@ export function findTasksPath(explicitPath = null, args = null, log = null) {
|
|||||||
* @returns {string|null} - Resolved PRD document path or null if not found
|
* @returns {string|null} - Resolved PRD document path or null if not found
|
||||||
*/
|
*/
|
||||||
export function findPRDPath(explicitPath = null, args = null, log = null) {
|
export function findPRDPath(explicitPath = null, args = null, log = null) {
|
||||||
const logger = getLoggerOrDefault(log);
|
const logger = log || console;
|
||||||
|
|
||||||
// 1. If explicit path is provided, use it (highest priority)
|
// 1. If explicit path is provided, use it (highest priority)
|
||||||
if (explicitPath) {
|
if (explicitPath) {
|
||||||
@@ -201,7 +199,7 @@ export function findComplexityReportPath(
|
|||||||
args = null,
|
args = null,
|
||||||
log = null
|
log = null
|
||||||
) {
|
) {
|
||||||
const logger = getLoggerOrDefault(log);
|
const logger = log || console;
|
||||||
|
|
||||||
// 1. If explicit path is provided, use it (highest priority)
|
// 1. If explicit path is provided, use it (highest priority)
|
||||||
if (explicitPath) {
|
if (explicitPath) {
|
||||||
@@ -270,7 +268,7 @@ export function resolveTasksOutputPath(
|
|||||||
args = null,
|
args = null,
|
||||||
log = null
|
log = null
|
||||||
) {
|
) {
|
||||||
const logger = getLoggerOrDefault(log);
|
const logger = log || console;
|
||||||
|
|
||||||
// 1. If explicit path is provided, use it
|
// 1. If explicit path is provided, use it
|
||||||
if (explicitPath) {
|
if (explicitPath) {
|
||||||
@@ -311,7 +309,7 @@ export function resolveComplexityReportOutputPath(
|
|||||||
args = null,
|
args = null,
|
||||||
log = null
|
log = null
|
||||||
) {
|
) {
|
||||||
const logger = getLoggerOrDefault(log);
|
const logger = log || console;
|
||||||
|
|
||||||
// 1. If explicit path is provided, use it
|
// 1. If explicit path is provided, use it
|
||||||
if (explicitPath) {
|
if (explicitPath) {
|
||||||
@@ -350,7 +348,7 @@ export function resolveComplexityReportOutputPath(
|
|||||||
* @returns {string|null} - Resolved config file path or null if not found
|
* @returns {string|null} - Resolved config file path or null if not found
|
||||||
*/
|
*/
|
||||||
export function findConfigPath(explicitPath = null, args = null, log = null) {
|
export function findConfigPath(explicitPath = null, args = null, log = null) {
|
||||||
const logger = getLoggerOrDefault(log);
|
const logger = log || console;
|
||||||
|
|
||||||
// 1. If explicit path is provided, use it (highest priority)
|
// 1. If explicit path is provided, use it (highest priority)
|
||||||
if (explicitPath) {
|
if (explicitPath) {
|
||||||
|
|||||||
@@ -43,7 +43,6 @@ const mockGetBaseUrlForRole = jest.fn();
|
|||||||
const mockGetAllProviders = jest.fn();
|
const mockGetAllProviders = jest.fn();
|
||||||
const mockGetOllamaBaseURL = jest.fn();
|
const mockGetOllamaBaseURL = jest.fn();
|
||||||
const mockGetAzureBaseURL = jest.fn();
|
const mockGetAzureBaseURL = jest.fn();
|
||||||
const mockGetBedrockBaseURL = jest.fn();
|
|
||||||
const mockGetVertexProjectId = jest.fn();
|
const mockGetVertexProjectId = jest.fn();
|
||||||
const mockGetVertexLocation = jest.fn();
|
const mockGetVertexLocation = jest.fn();
|
||||||
const mockGetAvailableModels = jest.fn();
|
const mockGetAvailableModels = jest.fn();
|
||||||
@@ -114,7 +113,6 @@ jest.unstable_mockModule('../../scripts/modules/config-manager.js', () => ({
|
|||||||
getAllProviders: mockGetAllProviders,
|
getAllProviders: mockGetAllProviders,
|
||||||
getOllamaBaseURL: mockGetOllamaBaseURL,
|
getOllamaBaseURL: mockGetOllamaBaseURL,
|
||||||
getAzureBaseURL: mockGetAzureBaseURL,
|
getAzureBaseURL: mockGetAzureBaseURL,
|
||||||
getBedrockBaseURL: mockGetBedrockBaseURL,
|
|
||||||
getVertexProjectId: mockGetVertexProjectId,
|
getVertexProjectId: mockGetVertexProjectId,
|
||||||
getVertexLocation: mockGetVertexLocation,
|
getVertexLocation: mockGetVertexLocation,
|
||||||
getMcpApiKeyStatus: mockGetMcpApiKeyStatus
|
getMcpApiKeyStatus: mockGetMcpApiKeyStatus
|
||||||
|
|||||||
@@ -139,8 +139,7 @@ const DEFAULT_CONFIG = {
|
|||||||
defaultSubtasks: 5,
|
defaultSubtasks: 5,
|
||||||
defaultPriority: 'medium',
|
defaultPriority: 'medium',
|
||||||
projectName: 'Task Master',
|
projectName: 'Task Master',
|
||||||
ollamaBaseURL: 'http://localhost:11434/api',
|
ollamaBaseURL: 'http://localhost:11434/api'
|
||||||
bedrockBaseURL: 'https://bedrock.us-east-1.amazonaws.com'
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -127,7 +127,6 @@ jest.unstable_mockModule(
|
|||||||
getProjectName: jest.fn(() => 'Test Project'),
|
getProjectName: jest.fn(() => 'Test Project'),
|
||||||
getOllamaBaseURL: jest.fn(() => 'http://localhost:11434/api'),
|
getOllamaBaseURL: jest.fn(() => 'http://localhost:11434/api'),
|
||||||
getAzureBaseURL: jest.fn(() => undefined),
|
getAzureBaseURL: jest.fn(() => undefined),
|
||||||
getBedrockBaseURL: jest.fn(() => undefined),
|
|
||||||
getParametersForRole: jest.fn(() => ({
|
getParametersForRole: jest.fn(() => ({
|
||||||
maxTokens: 4000,
|
maxTokens: 4000,
|
||||||
temperature: 0.7
|
temperature: 0.7
|
||||||
|
|||||||
Reference in New Issue
Block a user