From 4c835264ac6c1f74896cddabc3b3c69a5c435417 Mon Sep 17 00:00:00 2001 From: Eyal Toledano Date: Wed, 21 May 2025 21:23:39 -0400 Subject: [PATCH] task management --- .changeset/cuddly-walls-clap.md | 9 ++ .taskmasterconfig | 62 ++++---- scripts/modules/supported-models.json | 133 ++++++++-------- tasks/task_063.txt | 18 +-- tasks/task_064.txt | 20 +-- tasks/task_065.txt | 14 +- tasks/task_067.txt | 73 ++++++++- tasks/task_077.txt | 10 +- tasks/task_081.txt | 144 ----------------- tasks/task_088.txt | 57 +++++++ tasks/tasks.json | 220 +++++++++++++------------- 11 files changed, 370 insertions(+), 390 deletions(-) create mode 100644 .changeset/cuddly-walls-clap.md delete mode 100644 tasks/task_081.txt create mode 100644 tasks/task_088.txt diff --git a/.changeset/cuddly-walls-clap.md b/.changeset/cuddly-walls-clap.md new file mode 100644 index 00000000..270ba6c2 --- /dev/null +++ b/.changeset/cuddly-walls-clap.md @@ -0,0 +1,9 @@ +--- +'task-master-ai': patch +--- + +Adds and updates supported AI models with costs: +- Added new OpenRouter models: GPT-4.1 series, O3, Codex Mini, Llama 4 Maverick, Llama 4 Scout, Qwen3-235b +- Added Mistral models: Devstral Small, Mistral Nemo +- Updated Ollama models with latest variants: Devstral, Qwen3, Mistral-small3.1, Llama3.3 +- Updated Gemini model to latest 2.5 Flash preview version diff --git a/.taskmasterconfig b/.taskmasterconfig index 2a1e943a..9f377d4f 100644 --- a/.taskmasterconfig +++ b/.taskmasterconfig @@ -1,32 +1,32 @@ { - "models": { - "main": { - "provider": "anthropic", - "modelId": "claude-3-7-sonnet-20250219", - "maxTokens": 100000, - "temperature": 0.2 - }, - "research": { - "provider": "perplexity", - "modelId": "sonar-pro", - "maxTokens": 8700, - "temperature": 0.1 - }, - "fallback": { - "provider": "anthropic", - "modelId": "claude-3-7-sonnet-20250219", - "maxTokens": 8192, - "temperature": 0.2 - } - }, - "global": { - "logLevel": "info", - "debug": false, - "defaultSubtasks": 5, - "defaultPriority": "medium", - "projectName": "Taskmaster", - "ollamaBaseUrl": "http://localhost:11434/api", - "userId": "1234567890", - "azureOpenaiBaseUrl": "https://your-endpoint.openai.azure.com/" - } -} + "models": { + "main": { + "provider": "ollama", + "modelId": "devstral:latest", + "maxTokens": 120000, + "temperature": 0.2 + }, + "research": { + "provider": "perplexity", + "modelId": "sonar-pro", + "maxTokens": 8700, + "temperature": 0.1 + }, + "fallback": { + "provider": "anthropic", + "modelId": "claude-3-7-sonnet-20250219", + "maxTokens": 8192, + "temperature": 0.2 + } + }, + "global": { + "logLevel": "info", + "debug": false, + "defaultSubtasks": 5, + "defaultPriority": "medium", + "projectName": "Taskmaster", + "ollamaBaseUrl": "http://localhost:11434/api", + "userId": "1234567890", + "azureOpenaiBaseUrl": "https://your-endpoint.openai.azure.com/" + } +} \ No newline at end of file diff --git a/scripts/modules/supported-models.json b/scripts/modules/supported-models.json index b1f1e1c7..fcdd38f9 100644 --- a/scripts/modules/supported-models.json +++ b/scripts/modules/supported-models.json @@ -191,43 +191,43 @@ ], "ollama": [ { - "id": "gemma3:27b", + "id": "devstral:latest", "swe_score": 0, "cost_per_1m_tokens": { "input": 0, "output": 0 }, "allowed_roles": ["main", "fallback"] }, { - "id": "gemma3:12b", + "id": "qwen3:latest", "swe_score": 0, "cost_per_1m_tokens": { "input": 0, "output": 0 }, "allowed_roles": ["main", "fallback"] }, { - "id": "qwq", + "id": "qwen3:14b", "swe_score": 0, "cost_per_1m_tokens": { "input": 0, "output": 0 }, "allowed_roles": ["main", "fallback"] }, { - "id": "deepseek-r1", + "id": "qwen3:32b", "swe_score": 0, "cost_per_1m_tokens": { "input": 0, "output": 0 }, "allowed_roles": ["main", "fallback"] }, { - "id": "mistral-small3.1", + "id": "mistral-small3.1:latest", "swe_score": 0, "cost_per_1m_tokens": { "input": 0, "output": 0 }, "allowed_roles": ["main", "fallback"] }, { - "id": "llama3.3", + "id": "llama3.3:latest", "swe_score": 0, "cost_per_1m_tokens": { "input": 0, "output": 0 }, "allowed_roles": ["main", "fallback"] }, { - "id": "phi4", + "id": "phi4:latest", "swe_score": 0, "cost_per_1m_tokens": { "input": 0, "output": 0 }, "allowed_roles": ["main", "fallback"] @@ -235,9 +235,16 @@ ], "openrouter": [ { - "id": "google/gemini-2.0-flash-001", + "id": "google/gemini-2.5-flash-preview-05-20", "swe_score": 0, - "cost_per_1m_tokens": { "input": 0.1, "output": 0.4 }, + "cost_per_1m_tokens": { "input": 0.15, "output": 0.6 }, + "allowed_roles": ["main", "fallback"], + "max_tokens": 1048576 + }, + { + "id": "google/gemini-2.5-flash-preview-05-20:thinking", + "swe_score": 0, + "cost_per_1m_tokens": { "input": 0.15, "output": 3.50 }, "allowed_roles": ["main", "fallback"], "max_tokens": 1048576 }, @@ -263,40 +270,25 @@ "max_tokens": 64000 }, { - "id": "deepseek/deepseek-r1:free", + "id": "openai/gpt-4.1", "swe_score": 0, - "cost_per_1m_tokens": { "input": 0, "output": 0 }, + "cost_per_1m_tokens": { "input": 2, "output": 8 }, "allowed_roles": ["main", "fallback"], - "max_tokens": 163840 + "max_tokens": 1000000 }, - { - "id": "microsoft/mai-ds-r1:free", + "id": "openai/gpt-4.1-mini", "swe_score": 0, - "cost_per_1m_tokens": { "input": 0, "output": 0 }, + "cost_per_1m_tokens": { "input": 0.40, "output": 1.60 }, "allowed_roles": ["main", "fallback"], - "max_tokens": 163840 + "max_tokens": 1000000 }, { - "id": "google/gemini-2.5-pro-preview-03-25", + "id": "openai/gpt-4.1-nano", "swe_score": 0, - "cost_per_1m_tokens": { "input": 1.25, "output": 10 }, + "cost_per_1m_tokens": { "input": 0.10, "output": 0.40 }, "allowed_roles": ["main", "fallback"], - "max_tokens": 65535 - }, - { - "id": "google/gemini-2.5-flash-preview", - "swe_score": 0, - "cost_per_1m_tokens": { "input": 0.15, "output": 0.6 }, - "allowed_roles": ["main"], - "max_tokens": 65535 - }, - { - "id": "google/gemini-2.5-flash-preview:thinking", - "swe_score": 0, - "cost_per_1m_tokens": { "input": 0.15, "output": 3.5 }, - "allowed_roles": ["main"], - "max_tokens": 65535 + "max_tokens": 1000000 }, { "id": "openai/o3", @@ -305,6 +297,20 @@ "allowed_roles": ["main", "fallback"], "max_tokens": 200000 }, + { + "id": "openai/codex-mini", + "swe_score": 0, + "cost_per_1m_tokens": { "input": 1.5, "output": 6 }, + "allowed_roles": ["main", "fallback"], + "max_tokens": 100000 + }, + { + "id": "openai/gpt-4o-mini", + "swe_score": 0, + "cost_per_1m_tokens": { "input": 0.15, "output": 0.6 }, + "allowed_roles": ["main", "fallback"], + "max_tokens": 100000 + }, { "id": "openai/o4-mini", "swe_score": 0.45, @@ -334,46 +340,18 @@ "max_tokens": 1048576 }, { - "id": "google/gemma-3-12b-it:free", + "id": "meta-llama/llama-4-maverick", "swe_score": 0, - "cost_per_1m_tokens": { "input": 0, "output": 0 }, + "cost_per_1m_tokens": { "input": 0.18, "output": 0.60 }, "allowed_roles": ["main", "fallback"], - "max_tokens": 131072 + "max_tokens": 1000000 }, { - "id": "google/gemma-3-12b-it", + "id": "meta-llama/llama-4-scout", "swe_score": 0, - "cost_per_1m_tokens": { "input": 50, "output": 100 }, + "cost_per_1m_tokens": { "input": 0.08, "output": 0.30 }, "allowed_roles": ["main", "fallback"], - "max_tokens": 131072 - }, - { - "id": "google/gemma-3-27b-it:free", - "swe_score": 0, - "cost_per_1m_tokens": { "input": 0, "output": 0 }, - "allowed_roles": ["main", "fallback"], - "max_tokens": 96000 - }, - { - "id": "google/gemma-3-27b-it", - "swe_score": 0, - "cost_per_1m_tokens": { "input": 100, "output": 200 }, - "allowed_roles": ["main", "fallback"], - "max_tokens": 131072 - }, - { - "id": "qwen/qwq-32b:free", - "swe_score": 0, - "cost_per_1m_tokens": { "input": 0, "output": 0 }, - "allowed_roles": ["main", "fallback"], - "max_tokens": 40000 - }, - { - "id": "qwen/qwq-32b", - "swe_score": 0, - "cost_per_1m_tokens": { "input": 150, "output": 200 }, - "allowed_roles": ["main", "fallback"], - "max_tokens": 131072 + "max_tokens": 1000000 }, { "id": "qwen/qwen-max", @@ -389,6 +367,13 @@ "allowed_roles": ["main", "fallback"], "max_tokens": 1000000 }, + { + "id": "qwen/qwen3-235b-a22b", + "swe_score": 0, + "cost_per_1m_tokens": { "input": 0.14, "output": 2 }, + "allowed_roles": ["main", "fallback"], + "max_tokens": 24000 + }, { "id": "mistralai/mistral-small-3.1-24b-instruct:free", "swe_score": 0, @@ -403,6 +388,20 @@ "allowed_roles": ["main", "fallback"], "max_tokens": 128000 }, + { + "id": "mistralai/devstral-small", + "swe_score": 0, + "cost_per_1m_tokens": { "input": 0.10, "output": 0.30 }, + "allowed_roles": ["main"], + "max_tokens": 110000 + }, + { + "id": "mistralai/mistral-nemo", + "swe_score": 0, + "cost_per_1m_tokens": { "input": 0.03, "output": 0.07 }, + "allowed_roles": ["main", "fallback"], + "max_tokens": 100000 + }, { "id": "thudm/glm-4-32b:free", "swe_score": 0, diff --git a/tasks/task_063.txt b/tasks/task_063.txt index 86bf3a5a..2268ee52 100644 --- a/tasks/task_063.txt +++ b/tasks/task_063.txt @@ -1,6 +1,6 @@ # Task ID: 63 # Title: Add pnpm Support for the Taskmaster Package -# Status: pending +# Status: done # Dependencies: None # Priority: medium # Description: Implement full support for pnpm as an alternative package manager in the Taskmaster application, ensuring users have the exact same experience as with npm when installing and managing the package. The installation process, including any CLI prompts or web interfaces, must serve the exact same content and user experience regardless of whether npm or pnpm is used. The project uses 'module' as the package type, defines binaries 'task-master' and 'task-master-mcp', and its core logic resides in 'scripts/modules/'. The 'init' command (via scripts/init.js) creates the directory structure (.cursor/rules, scripts, tasks), copies templates (.env.example, .gitignore, rule files, dev.js), manages package.json merging, and sets up MCP config (.cursor/mcp.json). All dependencies are standard npm dependencies listed in package.json, and manual modifications are being removed. @@ -88,49 +88,49 @@ This implementation should maintain full feature parity and identical user exper Success criteria: Taskmaster should install and function identically regardless of whether it was installed via npm or pnpm, with no degradation in functionality, performance, or user experience. All binaries should be properly linked, and the directory structure should be correctly created. # Subtasks: -## 1. Update Documentation for pnpm Support [pending] +## 1. Update Documentation for pnpm Support [done] ### Dependencies: None ### Description: Revise installation and usage documentation to include pnpm commands and instructions for installing and managing Taskmaster with pnpm. Clearly state that the installation process, including any website or UI shown, is identical to npm. Ensure documentation reflects the use of 'module' package type, binaries, and the init process as defined in scripts/init.js. ### Details: Add pnpm installation commands (e.g., `pnpm add taskmaster`) and update all relevant sections in the README and official docs to reflect pnpm as a supported package manager. Document that any installation website or prompt is the same as with npm. Include notes on the 'module' package type, binaries, and the directory/template setup performed by scripts/init.js. -## 2. Ensure Package Scripts Compatibility with pnpm [pending] +## 2. Ensure Package Scripts Compatibility with pnpm [done] ### Dependencies: 63.1 ### Description: Review and update package.json scripts to ensure they work seamlessly with pnpm's execution model. Confirm that any scripts responsible for showing a website or prompt during install behave identically with pnpm and npm. Ensure compatibility with 'module' package type and correct binary definitions. ### Details: Test all scripts using `pnpm run