Compare commits

..

1 Commits

Author SHA1 Message Date
github-actions[bot]
8d1d82c897 docs: auto-update documentation based on changes in next branch
This PR was automatically generated to update documentation based on recent changes.

  Original commit: fix: improve docs and command help for analzye-complexity (#1235)\n\n\n

  Co-authored-by: Claude <claude-assistant@anthropic.com>
2025-09-23 16:34:00 +00:00
125 changed files with 479 additions and 849 deletions

View File

@@ -58,9 +58,9 @@ Examples:
```md ```md
# Good # Good
Added new `--research` flag to the `expand` command that uses Perplexity AI Added new `--research` flag to the `expand` command that uses your configured research model
to provide research-backed task expansions. Requires PERPLEXITY_API_KEY to provide research-backed task expansions. Requires appropriate API key
environment variable. for your research model.
# Not Good # Not Good

View File

@@ -11,6 +11,9 @@
"access": "public", "access": "public",
"baseBranch": "main", "baseBranch": "main",
"ignore": [ "ignore": [
"docs" "docs",
"@tm/cli",
"@tm/core",
"@tm/build-config"
] ]
} }

View File

@@ -1,5 +0,0 @@
---
"task-master-ai": patch
---
Change parent task back to "pending" when all subtasks are in "pending" state

View File

@@ -16,7 +16,7 @@ task-master analyze-complexity [--research] [--threshold=5]
## Analysis Parameters ## Analysis Parameters
- `--research` → Use research AI for deeper analysis - `--research` → Use configured research model for deeper analysis
- `--threshold=5` → Only flag tasks above complexity 5 - `--threshold=5` → Only flag tasks above complexity 5
- Default: Analyze all pending tasks - Default: Analyze all pending tasks

View File

@@ -231,7 +231,7 @@ Taskmaster offers two primary ways to interact:
- Use `expand_task` / `task-master expand --id=<id>`. It automatically uses the complexity report if found, otherwise generates default number of subtasks. - Use `expand_task` / `task-master expand --id=<id>`. It automatically uses the complexity report if found, otherwise generates default number of subtasks.
- Use `--num=<number>` to specify an explicit number of subtasks, overriding defaults or complexity report recommendations. - Use `--num=<number>` to specify an explicit number of subtasks, overriding defaults or complexity report recommendations.
- Add `--research` flag to leverage Perplexity AI for research-backed expansion. - Add `--research` flag to leverage your configured research model for research-backed expansion.
- Add `--force` flag to clear existing subtasks before generating new ones (default is to append). - Add `--force` flag to clear existing subtasks before generating new ones (default is to append).
- Use `--prompt="<context>"` to provide additional context when needed. - Use `--prompt="<context>"` to provide additional context when needed.
- Review and adjust generated subtasks as necessary. - Review and adjust generated subtasks as necessary.

View File

@@ -6,6 +6,9 @@ on:
- main - main
- next - next
pull_request: pull_request:
branches:
- main
- next
workflow_dispatch: workflow_dispatch:
concurrency: concurrency:

View File

@@ -229,7 +229,7 @@ Taskmaster offers two primary ways to interact:
- Use `expand_task` / `task-master expand --id=<id>`. It automatically uses the complexity report if found, otherwise generates default number of subtasks. - Use `expand_task` / `task-master expand --id=<id>`. It automatically uses the complexity report if found, otherwise generates default number of subtasks.
- Use `--num=<number>` to specify an explicit number of subtasks, overriding defaults or complexity report recommendations. - Use `--num=<number>` to specify an explicit number of subtasks, overriding defaults or complexity report recommendations.
- Add `--research` flag to leverage Perplexity AI for research-backed expansion. - Add `--research` flag to leverage your configured research model for research-backed expansion.
- Add `--force` flag to clear existing subtasks before generating new ones (default is to append). - Add `--force` flag to clear existing subtasks before generating new ones (default is to append).
- Use `--prompt="<context>"` to provide additional context when needed. - Use `--prompt="<context>"` to provide additional context when needed.
- Review and adjust generated subtasks as necessary. - Review and adjust generated subtasks as necessary.

View File

@@ -1,6 +0,0 @@
{
"$schema": "https://unpkg.com/@manypkg/get-packages@1.1.3/schema.json",
"defaultBranch": "main",
"ignoredRules": ["ROOT_HAS_DEPENDENCIES", "INTERNAL_MISMATCH"],
"ignoredPackages": ["@tm/core", "@tm/cli", "@tm/build-config"]
}

View File

@@ -12,7 +12,7 @@ In an AI-driven development process—particularly with tools like [Cursor](http
4. **Generate** individual task files (e.g., `task_001.txt`) for easy reference or to feed into an AI coding workflow. 4. **Generate** individual task files (e.g., `task_001.txt`) for easy reference or to feed into an AI coding workflow.
5. **Set task status**—mark tasks as `done`, `pending`, or `deferred` based on progress. 5. **Set task status**—mark tasks as `done`, `pending`, or `deferred` based on progress.
6. **Expand** tasks with subtasks—break down complex tasks into smaller, more manageable subtasks. 6. **Expand** tasks with subtasks—break down complex tasks into smaller, more manageable subtasks.
7. **Research-backed subtask generation**—use Perplexity AI to generate more informed and contextually relevant subtasks. 7. **Research-backed subtask generation**—use your configured research model to generate more informed and contextually relevant subtasks.
8. **Clear subtasks**—remove subtasks from specified tasks to allow regeneration or restructuring. 8. **Clear subtasks**—remove subtasks from specified tasks to allow regeneration or restructuring.
9. **Show task details**—display detailed information about a specific task and its subtasks. 9. **Show task details**—display detailed information about a specific task and its subtasks.
@@ -29,7 +29,7 @@ The script can be configured through environment variables in a `.env` file at t
- `MODEL`: Specify which Claude model to use (default: "claude-3-7-sonnet-20250219") - `MODEL`: Specify which Claude model to use (default: "claude-3-7-sonnet-20250219")
- `MAX_TOKENS`: Maximum tokens for model responses (default: 4000) - `MAX_TOKENS`: Maximum tokens for model responses (default: 4000)
- `TEMPERATURE`: Temperature for model responses (default: 0.7) - `TEMPERATURE`: Temperature for model responses (default: 0.7)
- `PERPLEXITY_API_KEY`: Your Perplexity API key for research-backed subtask generation - `PERPLEXITY_API_KEY`: Your Perplexity API key for research-backed subtask generation (if using Perplexity as your research model)
- `PERPLEXITY_MODEL`: Specify which Perplexity model to use (default: "sonar-medium-online") - `PERPLEXITY_MODEL`: Specify which Perplexity model to use (default: "sonar-medium-online")
- `DEBUG`: Enable debug logging (default: false) - `DEBUG`: Enable debug logging (default: false)
- `TASKMASTER_LOG_LEVEL`: Log level - debug, info, warn, error (default: info) - `TASKMASTER_LOG_LEVEL`: Log level - debug, info, warn, error (default: info)
@@ -97,7 +97,7 @@ node scripts/dev.js update --from=4 --prompt="Refactor tasks from ID 4 onward to
# Update all tasks (default from=1) # Update all tasks (default from=1)
node scripts/dev.js update --prompt="Add authentication to all relevant tasks" node scripts/dev.js update --prompt="Add authentication to all relevant tasks"
# With research-backed updates using Perplexity AI # With research-backed updates using your configured research model
node scripts/dev.js update --from=4 --prompt="Integrate OAuth 2.0" --research node scripts/dev.js update --from=4 --prompt="Integrate OAuth 2.0" --research
# Specify a different tasks file # Specify a different tasks file
@@ -109,7 +109,7 @@ Notes:
- The `--prompt` parameter is required and should explain the changes or new context - The `--prompt` parameter is required and should explain the changes or new context
- Only tasks that aren't marked as 'done' will be updated - Only tasks that aren't marked as 'done' will be updated
- Tasks with ID >= the specified --from value will be updated - Tasks with ID >= the specified --from value will be updated
- The `--research` flag uses Perplexity AI for more informed updates when available - The `--research` flag uses your configured research model for more informed updates when available
## Updating a Single Task ## Updating a Single Task
@@ -119,7 +119,7 @@ The `update-task` command allows you to update a specific task instead of multip
# Update a specific task with new information # Update a specific task with new information
node scripts/dev.js update-task --id=4 --prompt="Use JWT for authentication" node scripts/dev.js update-task --id=4 --prompt="Use JWT for authentication"
# With research-backed updates using Perplexity AI # With research-backed updates using your configured research model
node scripts/dev.js update-task --id=4 --prompt="Use JWT for authentication" --research node scripts/dev.js update-task --id=4 --prompt="Use JWT for authentication" --research
``` ```
@@ -178,10 +178,10 @@ node scripts/dev.js expand --all
# Force regeneration of subtasks for all pending tasks # Force regeneration of subtasks for all pending tasks
node scripts/dev.js expand --all --force node scripts/dev.js expand --all --force
# Use Perplexity AI for research-backed subtask generation # Use your configured research model for research-backed subtask generation
node scripts/dev.js expand --id=3 --research node scripts/dev.js expand --id=3 --research
# Use Perplexity AI for research-backed generation on all pending tasks # Use your configured research model for research-backed generation on all pending tasks
node scripts/dev.js expand --all --research node scripts/dev.js expand --all --research
``` ```
@@ -211,17 +211,16 @@ Notes:
The script integrates with two AI services: The script integrates with two AI services:
1. **Anthropic Claude**: Used for parsing PRDs, generating tasks, and creating subtasks. 1. **Main AI Model**: Used for parsing PRDs, generating tasks, and creating subtasks (typically Anthropic Claude).
2. **Perplexity AI**: Used for research-backed subtask generation when the `--research` flag is specified. 2. **Research Model**: Used for research-backed subtask generation when the `--research` flag is specified.
The Perplexity integration uses the OpenAI client to connect to Perplexity's API, which provides enhanced research capabilities for generating more informed subtasks. If the Perplexity API is unavailable or encounters an error, the script will automatically fall back to using Anthropic's Claude. The research integration provides enhanced research capabilities for generating more informed subtasks. You can configure different models for research (like Perplexity, which has access to current information) vs. main tasks. If the research model is unavailable or encounters an error, the script will automatically fall back to using your main model.
To use the Perplexity integration: To use research-backed features:
1. Obtain a Perplexity API key 1. Configure your research model using `task-master models --setup`
2. Add `PERPLEXITY_API_KEY` to your `.env` file 2. Ensure you have the appropriate API key in your `.env` file (e.g., `PERPLEXITY_API_KEY` if using Perplexity)
3. Optionally specify `PERPLEXITY_MODEL` in your `.env` file (default: "sonar-medium-online") 3. Use the `--research` flag with supported commands
4. Use the `--research` flag with the `expand` command
## Logging ## Logging
@@ -342,13 +341,13 @@ node scripts/dev.js analyze-complexity --model=claude-3-opus-20240229
# Set a custom complexity threshold (1-10) # Set a custom complexity threshold (1-10)
node scripts/dev.js analyze-complexity --threshold=6 node scripts/dev.js analyze-complexity --threshold=6
# Use Perplexity AI for research-backed complexity analysis # Use your configured research model for research-backed complexity analysis
node scripts/dev.js analyze-complexity --research node scripts/dev.js analyze-complexity --research
``` ```
Notes: Notes:
- The command uses Claude to analyze each task's complexity (or Perplexity with --research flag) - The command uses your main model to analyze each task's complexity (or your configured research model with --research flag)
- Tasks are scored on a scale of 1-10 - Tasks are scored on a scale of 1-10
- Each task receives a recommended number of subtasks based on DEFAULT_SUBTASKS configuration - Each task receives a recommended number of subtasks based on DEFAULT_SUBTASKS configuration
- The default output path is `scripts/task-complexity-report.json` - The default output path is `scripts/task-complexity-report.json`

View File

@@ -1,34 +1,5 @@
# task-master-ai # task-master-ai
## 0.27.2
### Patch Changes
- [#1248](https://github.com/eyaltoledano/claude-task-master/pull/1248) [`044a7bf`](https://github.com/eyaltoledano/claude-task-master/commit/044a7bfc98049298177bc655cf341d7a8b6a0011) Thanks [@Crunchyman-ralph](https://github.com/Crunchyman-ralph)! - Fix set-status for subtasks:
- Parent tasks are now set as `done` when subtasks are all `done`
- Parent tasks are now set as `in-progress` when at least one subtask is `in-progress` or `done`
## 0.27.1
### Patch Changes
- [#1232](https://github.com/eyaltoledano/claude-task-master/pull/1232) [`f487736`](https://github.com/eyaltoledano/claude-task-master/commit/f487736670ef8c484059f676293777eabb249c9e) Thanks [@Crunchyman-ralph](https://github.com/Crunchyman-ralph)! - Fix module not found for new 0.27.0 release
- [#1233](https://github.com/eyaltoledano/claude-task-master/pull/1233) [`c911608`](https://github.com/eyaltoledano/claude-task-master/commit/c911608f60454253f4e024b57ca84e5a5a53f65c) Thanks [@Crunchyman-ralph](https://github.com/Crunchyman-ralph)! - Fix Zed MCP configuration by adding required "source" property
- Add "source": "custom" property to task-master-ai server in Zed settings.json
## 0.27.1-rc.1
### Patch Changes
- [#1233](https://github.com/eyaltoledano/claude-task-master/pull/1233) [`1a18794`](https://github.com/eyaltoledano/claude-task-master/commit/1a1879483b86c118a4e46c02cbf4acebfcf6bcf9) Thanks [@Crunchyman-ralph](https://github.com/Crunchyman-ralph)! - One last testing final final
## 0.27.1-rc.0
### Patch Changes
- [#1232](https://github.com/eyaltoledano/claude-task-master/pull/1232) [`f487736`](https://github.com/eyaltoledano/claude-task-master/commit/f487736670ef8c484059f676293777eabb249c9e) Thanks [@Crunchyman-ralph](https://github.com/Crunchyman-ralph)! - Fix module not found for new 0.27.0 release
## 0.27.0 ## 0.27.0
### Minor Changes ### Minor Changes

View File

@@ -301,7 +301,7 @@ The agent will execute:
task-master expand --all task-master expand --all
``` ```
For research-backed subtask generation using Perplexity AI: For research-backed subtask generation using your configured research model:
``` ```
Please break down task 5 using research-backed generation. Please break down task 5 using research-backed generation.
@@ -450,7 +450,7 @@ task-master analyze-complexity --threshold=6
# Use an alternative tasks file # Use an alternative tasks file
task-master analyze-complexity --file=custom-tasks.json task-master analyze-complexity --file=custom-tasks.json
# Use Perplexity AI for research-backed complexity analysis # Use your configured research model for research-backed complexity analysis
task-master analyze-complexity --research task-master analyze-complexity --research
``` ```

View File

@@ -105,11 +105,10 @@ MCP (Model Control Protocol) lets you run Task Master directly from your editor.
| | Project | `<project_folder>/.cursor/mcp.json` | `<project_folder>\.cursor\mcp.json` | `mcpServers` | | | Project | `<project_folder>/.cursor/mcp.json` | `<project_folder>\.cursor\mcp.json` | `mcpServers` |
| **Windsurf** | Global | `~/.codeium/windsurf/mcp_config.json` | `%USERPROFILE%\.codeium\windsurf\mcp_config.json` | `mcpServers` | | **Windsurf** | Global | `~/.codeium/windsurf/mcp_config.json` | `%USERPROFILE%\.codeium\windsurf\mcp_config.json` | `mcpServers` |
| **VS Code** | Project | `<project_folder>/.vscode/mcp.json` | `<project_folder>\.vscode\mcp.json` | `servers` | | **VS Code** | Project | `<project_folder>/.vscode/mcp.json` | `<project_folder>\.vscode\mcp.json` | `servers` |
| **Q CLI** | Global | `~/.aws/amazonq/mcp.json` | | `mcpServers` |
##### Manual Configuration ##### Manual Configuration
###### Cursor & Windsurf & Q Developer CLI (`mcpServers`) ###### Cursor & Windsurf (`mcpServers`)
```json ```json
{ {

View File

@@ -1,12 +1,5 @@
# @tm/cli # @tm/cli
## null
### Patch Changes
- Updated dependencies []:
- @tm/core@null
## 0.27.0 ## 0.27.0
### Patch Changes ### Patch Changes

View File

@@ -1,5 +1,6 @@
{ {
"name": "@tm/cli", "name": "@tm/cli",
"version": "0.27.0",
"description": "Task Master CLI - Command line interface for task management", "description": "Task Master CLI - Command line interface for task management",
"type": "module", "type": "module",
"private": true, "private": true,
@@ -23,12 +24,12 @@
}, },
"dependencies": { "dependencies": {
"@tm/core": "*", "@tm/core": "*",
"boxen": "^8.0.1", "boxen": "^7.1.1",
"chalk": "5.6.2", "chalk": "5.6.2",
"cli-table3": "^0.6.5", "cli-table3": "^0.6.5",
"commander": "^12.1.0", "commander": "^12.1.0",
"inquirer": "^12.5.0", "inquirer": "^9.2.10",
"ora": "^8.2.0" "ora": "^8.1.0"
}, },
"devDependencies": { "devDependencies": {
"@biomejs/biome": "^1.9.4", "@biomejs/biome": "^1.9.4",

View File

@@ -18,8 +18,7 @@ export * as ui from './utils/ui.js';
export { export {
checkForUpdate, checkForUpdate,
performAutoUpdate, performAutoUpdate,
displayUpgradeNotification, displayUpgradeNotification
compareVersions
} from './utils/auto-update.js'; } from './utils/auto-update.js';
// Re-export commonly used types from tm-core // Re-export commonly used types from tm-core

View File

@@ -7,6 +7,7 @@ import https from 'https';
import chalk from 'chalk'; import chalk from 'chalk';
import ora from 'ora'; import ora from 'ora';
import boxen from 'boxen'; import boxen from 'boxen';
import packageJson from '../../../../package.json' with { type: 'json' };
export interface UpdateInfo { export interface UpdateInfo {
currentVersion: string; currentVersion: string;
@@ -15,18 +16,15 @@ export interface UpdateInfo {
} }
/** /**
* Get current version from build-time injected environment variable * Get current version from package.json
*/ */
function getCurrentVersion(): string { function getCurrentVersion(): string {
// Version is injected at build time via TM_PUBLIC_VERSION try {
const version = process.env.TM_PUBLIC_VERSION; return packageJson.version;
if (version && version !== 'unknown') { } catch (error) {
return version; console.warn('Could not read package.json for version info');
return '0.0.0';
} }
// Fallback for development or if injection failed
console.warn('Could not read version from TM_PUBLIC_VERSION, using fallback');
return '0.0.0';
} }
/** /**
@@ -35,7 +33,7 @@ function getCurrentVersion(): string {
* @param v2 - Second version * @param v2 - Second version
* @returns -1 if v1 < v2, 0 if v1 = v2, 1 if v1 > v2 * @returns -1 if v1 < v2, 0 if v1 = v2, 1 if v1 > v2
*/ */
export function compareVersions(v1: string, v2: string): number { function compareVersions(v1: string, v2: string): number {
const toParts = (v: string) => { const toParts = (v: string) => {
const [core, pre = ''] = v.split('-', 2); const [core, pre = ''] = v.split('-', 2);
const nums = core.split('.').map((n) => Number.parseInt(n, 10) || 0); const nums = core.split('.').map((n) => Number.parseInt(n, 10) || 0);

View File

@@ -1,7 +1,5 @@
# docs # docs
## 0.0.4
## 0.0.3 ## 0.0.3
## 0.0.2 ## 0.0.2

View File

@@ -1,24 +1,22 @@
# Task Master Documentation # Task Master Documentation
Welcome to the Task Master documentation. This documentation site provides comprehensive guides for getting started with Task Master. Welcome to the Task Master documentation. Use the links below to navigate to the information you need:
## Getting Started ## Getting Started
- [Quick Start Guide](/getting-started/quick-start) - Complete setup and first-time usage guide - [Configuration Guide](archive/configuration.md) - Set up environment variables and customize Task Master
- [Requirements](/getting-started/quick-start/requirements) - What you need to get started - [Tutorial](archive/ctutorial.md) - Step-by-step guide to getting started with Task Master
- [Installation](/getting-started/quick-start/installation) - How to install Task Master
## Core Capabilities ## Reference
- [MCP Tools](/capabilities/mcp) - Model Control Protocol integration - [Command Reference](archive/ccommand-reference.md) - Complete list of all available commands
- [CLI Commands](/capabilities/cli-root-commands) - Command line interface reference - [Task Structure](archive/ctask-structure.md) - Understanding the task format and features
- [Task Structure](/capabilities/task-structure) - Understanding tasks and subtasks
## Best Practices ## Examples & Licensing
- [Advanced Configuration](/best-practices/configuration-advanced) - Detailed configuration options - [Example Interactions](archive/cexamples.md) - Common Cursor AI interaction examples
- [Advanced Tasks](/best-practices/advanced-tasks) - Working with complex task structures - [Licensing Information](archive/clicensing.md) - Detailed information about the license
## Need More Help? ## Need More Help?
If you can't find what you're looking for in these docs, please check the root README.md or visit our [GitHub repository](https://github.com/eyaltoledano/claude-task-master). If you can't find what you're looking for in these docs, please check the [main README](../README.md) or visit our [GitHub repository](https://github.com/eyaltoledano/claude-task-master).

View File

@@ -118,7 +118,7 @@ description: "Learn how Task Master and Cursor AI work together to streamline yo
task-master expand --all task-master expand --all
``` ```
For research-backed subtask generation using Perplexity AI: For research-backed subtask generation using configured research model:
``` ```
Please break down task 5 using research-backed generation. Please break down task 5 using research-backed generation.

View File

@@ -61,7 +61,7 @@ description: "A comprehensive reference of all available Task Master commands"
# Update a single task by ID with new information # Update a single task by ID with new information
task-master update-task --id=<id> --prompt="<prompt>" task-master update-task --id=<id> --prompt="<prompt>"
# Use research-backed updates with Perplexity AI # Use research-backed updates with configured research model
task-master update-task --id=<id> --prompt="<prompt>" --research task-master update-task --id=<id> --prompt="<prompt>" --research
``` ```
</Accordion> </Accordion>
@@ -74,7 +74,7 @@ description: "A comprehensive reference of all available Task Master commands"
# Example: Add details about API rate limiting to subtask 2 of task 5 # Example: Add details about API rate limiting to subtask 2 of task 5
task-master update-subtask --id=5.2 --prompt="Add rate limiting of 100 requests per minute" task-master update-subtask --id=5.2 --prompt="Add rate limiting of 100 requests per minute"
# Use research-backed updates with Perplexity AI # Use research-backed updates with configured research model
task-master update-subtask --id=<parentId.subtaskId> --prompt="<prompt>" --research task-master update-subtask --id=<parentId.subtaskId> --prompt="<prompt>" --research
``` ```
@@ -155,7 +155,7 @@ description: "A comprehensive reference of all available Task Master commands"
# Use an alternative tasks file # Use an alternative tasks file
task-master analyze-complexity --file=custom-tasks.json task-master analyze-complexity --file=custom-tasks.json
# Use Perplexity AI for research-backed complexity analysis # Use configured research model for research-backed complexity analysis
task-master analyze-complexity --research task-master analyze-complexity --research
``` ```
</Accordion> </Accordion>

View File

@@ -108,5 +108,5 @@ You dont need to configure everything up front. Most settings can be left as
</Accordion> </Accordion>
<Note> <Note>
For advanced configuration options and detailed customization, see our [Advanced Configuration Guide](/best-practices/configuration-advanced) page. For advanced configuration options and detailed customization, see our [Advanced Configuration Guide](/docs/best-practices/configuration-advanced) page.
</Note> </Note>

View File

@@ -56,4 +56,4 @@ If you ran into problems and had to debug errors you can create new rules as you
By now you have all you need to get started executing code faster and smarter with Task Master. By now you have all you need to get started executing code faster and smarter with Task Master.
If you have any questions please check out [Frequently Asked Questions](/getting-started/faq) If you have any questions please check out [Frequently Asked Questions](/docs/getting-started/faq)

View File

@@ -6,13 +6,13 @@ sidebarTitle: "Quick Start"
This guide is for new users who want to start using Task Master with minimal setup time. This guide is for new users who want to start using Task Master with minimal setup time.
It covers: It covers:
- [Requirements](/getting-started/quick-start/requirements): You will need Node.js and an AI model API Key. - [Requirements](/docs/getting-started/quick-start/requirements): You will need Node.js and an AI model API Key.
- [Installation](/getting-started/quick-start/installation): How to Install Task Master. - [Installation](/docs/getting-started/quick-start/installation): How to Install Task Master.
- [Configuration](/getting-started/quick-start/configuration-quick): Setting up your API Key, MCP, and more. - [Configuration](/docs/getting-started/quick-start/configuration-quick): Setting up your API Key, MCP, and more.
- [PRD](/getting-started/quick-start/prd-quick): Writing and parsing your first PRD. - [PRD](/docs/getting-started/quick-start/prd-quick): Writing and parsing your first PRD.
- [Task Setup](/getting-started/quick-start/tasks-quick): Preparing your tasks for execution. - [Task Setup](/docs/getting-started/quick-start/tasks-quick): Preparing your tasks for execution.
- [Executing Tasks](/getting-started/quick-start/execute-quick): Using Task Master to execute tasks. - [Executing Tasks](/docs/getting-started/quick-start/execute-quick): Using Task Master to execute tasks.
- [Rules & Context](/getting-started/quick-start/rules-quick): Learn how and why to build context in your project over time. - [Rules & Context](/docs/getting-started/quick-start/rules-quick): Learn how and why to build context in your project over time.
<Tip> <Tip>
By the end of this guide, you'll have everything you need to begin working productively with Task Master. By the end of this guide, you'll have everything you need to begin working productively with Task Master.

View File

@@ -80,6 +80,6 @@ You can view the report in a friendly table using:
Can you show me the complexity report in a more readable format? Can you show me the complexity report in a more readable format?
``` ```
For more detailed CLI options, see the [Analyze Task Complexity](/capabilities/cli-root-commands#analyze-task-complexity) section. For more detailed CLI options, see the [Analyze Task Complexity](/docs/capabilities/cli-root-commands#analyze-task-complexity) section.
<Check>Now you are ready to begin [executing tasks](/getting-started/quick-start/execute-quick)</Check> <Check>Now you are ready to begin [executing tasks](/docs/getting-started/quick-start/execute-quick)</Check>

View File

@@ -4,7 +4,7 @@ Welcome to v1 of the Task Master Docs. Expect weekly updates as we expand and re
We've organized the docs into three sections depending on your experience level and goals: We've organized the docs into three sections depending on your experience level and goals:
### Getting Started - Jump in to [Quick Start](/getting-started/quick-start) ### Getting Started - Jump in to [Quick Start](/docs/getting-started/quick-start)
Designed for first-time users. Get set up, create your first PRD, and run your first task. Designed for first-time users. Get set up, create your first PRD, and run your first task.
### Best Practices ### Best Practices

View File

@@ -1,6 +1,6 @@
{ {
"name": "docs", "name": "docs",
"version": "0.0.4", "version": "0.0.3",
"private": true, "private": true,
"description": "Task Master documentation powered by Mintlify", "description": "Task Master documentation powered by Mintlify",
"scripts": { "scripts": {

View File

@@ -1,33 +1,5 @@
# Change Log # Change Log
## 0.25.3
### Patch Changes
- Updated dependencies [[`044a7bf`](https://github.com/eyaltoledano/claude-task-master/commit/044a7bfc98049298177bc655cf341d7a8b6a0011)]:
- task-master-ai@0.27.2
## 0.25.2
### Patch Changes
- Updated dependencies [[`f487736`](https://github.com/eyaltoledano/claude-task-master/commit/f487736670ef8c484059f676293777eabb249c9e), [`c911608`](https://github.com/eyaltoledano/claude-task-master/commit/c911608f60454253f4e024b57ca84e5a5a53f65c), [`1a18794`](https://github.com/eyaltoledano/claude-task-master/commit/1a1879483b86c118a4e46c02cbf4acebfcf6bcf9)]:
- task-master-ai@0.27.1
## 0.25.2-rc.1
### Patch Changes
- Updated dependencies [[`1a18794`](https://github.com/eyaltoledano/claude-task-master/commit/1a1879483b86c118a4e46c02cbf4acebfcf6bcf9)]:
- task-master-ai@0.27.1-rc.1
## 0.25.2-rc.0
### Patch Changes
- Updated dependencies [[`f487736`](https://github.com/eyaltoledano/claude-task-master/commit/f487736670ef8c484059f676293777eabb249c9e)]:
- task-master-ai@0.27.1-rc.0
## 0.25.0 ## 0.25.0
### Minor Changes ### Minor Changes

View File

@@ -3,7 +3,7 @@
"private": true, "private": true,
"displayName": "TaskMaster", "displayName": "TaskMaster",
"description": "A visual Kanban board interface for TaskMaster projects in VS Code", "description": "A visual Kanban board interface for TaskMaster projects in VS Code",
"version": "0.25.3", "version": "0.25.0",
"publisher": "Hamster", "publisher": "Hamster",
"icon": "assets/icon.png", "icon": "assets/icon.png",
"engines": { "engines": {
@@ -240,7 +240,7 @@
"check-types": "tsc --noEmit" "check-types": "tsc --noEmit"
}, },
"dependencies": { "dependencies": {
"task-master-ai": "0.27.2" "task-master-ai": "*"
}, },
"devDependencies": { "devDependencies": {
"@dnd-kit/core": "^6.3.1", "@dnd-kit/core": "^6.3.1",
@@ -254,9 +254,8 @@
"@radix-ui/react-separator": "^1.1.7", "@radix-ui/react-separator": "^1.1.7",
"@radix-ui/react-slot": "^1.2.3", "@radix-ui/react-slot": "^1.2.3",
"@tailwindcss/postcss": "^4.1.11", "@tailwindcss/postcss": "^4.1.11",
"@tanstack/react-query": "^5.83.0",
"@types/mocha": "^10.0.10", "@types/mocha": "^10.0.10",
"@types/node": "^22.10.5", "@types/node": "20.x",
"@types/react": "19.1.8", "@types/react": "19.1.8",
"@types/react-dom": "19.1.6", "@types/react-dom": "19.1.6",
"@types/vscode": "^1.101.0", "@types/vscode": "^1.101.0",
@@ -272,11 +271,12 @@
"lucide-react": "^0.525.0", "lucide-react": "^0.525.0",
"npm-run-all": "^4.1.5", "npm-run-all": "^4.1.5",
"postcss": "8.5.6", "postcss": "8.5.6",
"react": "^19.0.0",
"react-dom": "^19.0.0",
"tailwind-merge": "^3.3.1", "tailwind-merge": "^3.3.1",
"tailwindcss": "4.1.11", "tailwindcss": "4.1.11",
"typescript": "^5.7.3" "typescript": "^5.8.3",
"@tanstack/react-query": "^5.83.0",
"react": "^19.0.0",
"react-dom": "^19.0.0"
}, },
"overrides": { "overrides": {
"glob@<8": "^10.4.5", "glob@<8": "^10.4.5",

View File

@@ -181,7 +181,7 @@ task-master analyze-complexity --threshold=6
# Use an alternative tasks file # Use an alternative tasks file
task-master analyze-complexity --file=custom-tasks.json task-master analyze-complexity --file=custom-tasks.json
# Use Perplexity AI for research-backed complexity analysis # Use your configured research model for research-backed complexity analysis
task-master analyze-complexity --research task-master analyze-complexity --research
``` ```

172
output.txt Normal file

File diff suppressed because one or more lines are too long

358
package-lock.json generated
View File

@@ -1,12 +1,12 @@
{ {
"name": "task-master-ai", "name": "task-master-ai",
"version": "0.27.2", "version": "0.27.0",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "task-master-ai", "name": "task-master-ai",
"version": "0.27.2", "version": "0.27.0",
"license": "MIT WITH Commons-Clause", "license": "MIT WITH Commons-Clause",
"workspaces": [ "workspaces": [
"apps/*", "apps/*",
@@ -29,7 +29,6 @@
"@inquirer/search": "^3.0.15", "@inquirer/search": "^3.0.15",
"@openrouter/ai-sdk-provider": "^0.4.5", "@openrouter/ai-sdk-provider": "^0.4.5",
"@streamparser/json": "^0.0.22", "@streamparser/json": "^0.0.22",
"@supabase/supabase-js": "^2.57.4",
"ai": "^4.3.10", "ai": "^4.3.10",
"ajv": "^8.17.1", "ajv": "^8.17.1",
"ajv-formats": "^3.0.1", "ajv-formats": "^3.0.1",
@@ -38,7 +37,7 @@
"cli-highlight": "^2.1.11", "cli-highlight": "^2.1.11",
"cli-progress": "^3.12.0", "cli-progress": "^3.12.0",
"cli-table3": "^0.6.5", "cli-table3": "^0.6.5",
"commander": "^12.1.0", "commander": "^11.1.0",
"cors": "^2.8.5", "cors": "^2.8.5",
"dotenv": "^16.3.1", "dotenv": "^16.3.1",
"express": "^4.21.2", "express": "^4.21.2",
@@ -71,7 +70,6 @@
"@biomejs/biome": "^1.9.4", "@biomejs/biome": "^1.9.4",
"@changesets/changelog-github": "^0.5.1", "@changesets/changelog-github": "^0.5.1",
"@changesets/cli": "^2.28.1", "@changesets/cli": "^2.28.1",
"@manypkg/cli": "^0.25.1",
"@tm/cli": "*", "@tm/cli": "*",
"@types/jest": "^29.5.14", "@types/jest": "^29.5.14",
"@types/marked-terminal": "^6.1.1", "@types/marked-terminal": "^6.1.1",
@@ -86,9 +84,9 @@
"supertest": "^7.1.0", "supertest": "^7.1.0",
"ts-jest": "^29.4.2", "ts-jest": "^29.4.2",
"tsdown": "^0.15.2", "tsdown": "^0.15.2",
"tsx": "^4.20.4", "tsx": "^4.16.2",
"turbo": "^2.5.6", "turbo": "^2.5.6",
"typescript": "^5.7.3" "typescript": "^5.9.2"
}, },
"engines": { "engines": {
"node": ">=18.0.0" "node": ">=18.0.0"
@@ -101,15 +99,16 @@
}, },
"apps/cli": { "apps/cli": {
"name": "@tm/cli", "name": "@tm/cli",
"version": "0.27.0",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@tm/core": "*", "@tm/core": "*",
"boxen": "^8.0.1", "boxen": "^7.1.1",
"chalk": "5.6.2", "chalk": "5.6.2",
"cli-table3": "^0.6.5", "cli-table3": "^0.6.5",
"commander": "^12.1.0", "commander": "^12.1.0",
"inquirer": "^12.5.0", "inquirer": "^9.2.10",
"ora": "^8.2.0" "ora": "^8.1.0"
}, },
"devDependencies": { "devDependencies": {
"@biomejs/biome": "^1.9.4", "@biomejs/biome": "^1.9.4",
@@ -190,6 +189,15 @@
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"license": "MIT" "license": "MIT"
}, },
"apps/cli/node_modules/commander": {
"version": "12.1.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz",
"integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==",
"license": "MIT",
"engines": {
"node": ">=18"
}
},
"apps/cli/node_modules/emoji-regex": { "apps/cli/node_modules/emoji-regex": {
"version": "8.0.0", "version": "8.0.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
@@ -351,15 +359,15 @@
} }
}, },
"apps/docs": { "apps/docs": {
"version": "0.0.4", "version": "0.0.3",
"devDependencies": { "devDependencies": {
"mintlify": "^4.2.111" "mintlify": "^4.2.111"
} }
}, },
"apps/extension": { "apps/extension": {
"version": "0.25.3", "version": "0.25.0",
"dependencies": { "dependencies": {
"task-master-ai": "0.27.2" "task-master-ai": "*"
}, },
"devDependencies": { "devDependencies": {
"@dnd-kit/core": "^6.3.1", "@dnd-kit/core": "^6.3.1",
@@ -375,7 +383,7 @@
"@tailwindcss/postcss": "^4.1.11", "@tailwindcss/postcss": "^4.1.11",
"@tanstack/react-query": "^5.83.0", "@tanstack/react-query": "^5.83.0",
"@types/mocha": "^10.0.10", "@types/mocha": "^10.0.10",
"@types/node": "^22.10.5", "@types/node": "20.x",
"@types/react": "19.1.8", "@types/react": "19.1.8",
"@types/react-dom": "19.1.6", "@types/react-dom": "19.1.6",
"@types/vscode": "^1.101.0", "@types/vscode": "^1.101.0",
@@ -395,7 +403,7 @@
"react-dom": "^19.0.0", "react-dom": "^19.0.0",
"tailwind-merge": "^3.3.1", "tailwind-merge": "^3.3.1",
"tailwindcss": "4.1.11", "tailwindcss": "4.1.11",
"typescript": "^5.7.3" "typescript": "^5.8.3"
}, },
"engines": { "engines": {
"vscode": "^1.93.0" "vscode": "^1.93.0"
@@ -5391,101 +5399,6 @@
"dev": true, "dev": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/@manypkg/cli": {
"version": "0.25.1",
"resolved": "https://registry.npmjs.org/@manypkg/cli/-/cli-0.25.1.tgz",
"integrity": "sha512-lag906FyiNxzZjsRErkUD5/to174I2JzPk5bZubuJp6loMKKJn73zrtqeU7nHlVkHBg3tgXDTJj22HxUDxLRXw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@manypkg/get-packages": "^3.1.0",
"detect-indent": "^7.0.1",
"normalize-path": "^3.0.0",
"p-limit": "^6.2.0",
"package-json": "^10.0.1",
"parse-github-url": "^1.0.3",
"picocolors": "^1.1.1",
"sembear": "^0.7.0",
"semver": "^7.7.1",
"tinyexec": "^1.0.1",
"validate-npm-package-name": "^6.0.0"
},
"bin": {
"manypkg": "bin.js"
},
"engines": {
"node": ">=20.0.0"
}
},
"node_modules/@manypkg/cli/node_modules/@manypkg/find-root": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/@manypkg/find-root/-/find-root-3.1.0.tgz",
"integrity": "sha512-BcSqCyKhBVZ5YkSzOiheMCV41kqAFptW6xGqYSTjkVTl9XQpr+pqHhwgGCOHQtjDCv7Is6EFyA14Sm5GVbVABA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@manypkg/tools": "^2.1.0"
},
"engines": {
"node": ">=20.0.0"
}
},
"node_modules/@manypkg/cli/node_modules/@manypkg/get-packages": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/@manypkg/get-packages/-/get-packages-3.1.0.tgz",
"integrity": "sha512-0TbBVyvPrP7xGYBI/cP8UP+yl/z+HtbTttAD7FMAJgn/kXOTwh5/60TsqP9ZYY710forNfyV0N8P/IE/ujGZJg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@manypkg/find-root": "^3.1.0",
"@manypkg/tools": "^2.1.0"
},
"engines": {
"node": ">=20.0.0"
}
},
"node_modules/@manypkg/cli/node_modules/detect-indent": {
"version": "7.0.2",
"resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-7.0.2.tgz",
"integrity": "sha512-y+8xyqdGLL+6sh0tVeHcfP/QDd8gUgbasolJJpY7NgeQGSZ739bDtSiaiDgtoicy+mtYB81dKLxO9xRhCyIB3A==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=12.20"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/@manypkg/cli/node_modules/p-limit": {
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-6.2.0.tgz",
"integrity": "sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA==",
"dev": true,
"license": "MIT",
"dependencies": {
"yocto-queue": "^1.1.1"
},
"engines": {
"node": ">=18"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/@manypkg/cli/node_modules/yocto-queue": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz",
"integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=12.20"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/@manypkg/find-root": { "node_modules/@manypkg/find-root": {
"version": "1.1.0", "version": "1.1.0",
"resolved": "https://registry.npmjs.org/@manypkg/find-root/-/find-root-1.1.0.tgz", "resolved": "https://registry.npmjs.org/@manypkg/find-root/-/find-root-1.1.0.tgz",
@@ -5598,41 +5511,6 @@
"node": ">= 4.0.0" "node": ">= 4.0.0"
} }
}, },
"node_modules/@manypkg/tools": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/@manypkg/tools/-/tools-2.1.0.tgz",
"integrity": "sha512-0FOIepYR4ugPYaHwK7hDeHDkfPOBVvayt9QpvRbi2LT/h2b0GaE/gM9Gag7fsnyYyNaTZ2IGyOuVg07IYepvYQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"jju": "^1.4.0",
"js-yaml": "^4.1.0",
"tinyglobby": "^0.2.13"
},
"engines": {
"node": ">=20.0.0"
}
},
"node_modules/@manypkg/tools/node_modules/argparse": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
"dev": true,
"license": "Python-2.0"
},
"node_modules/@manypkg/tools/node_modules/js-yaml": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
"integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
"dev": true,
"license": "MIT",
"dependencies": {
"argparse": "^2.0.1"
},
"bin": {
"js-yaml": "bin/js-yaml.js"
}
},
"node_modules/@mdx-js/mdx": { "node_modules/@mdx-js/mdx": {
"version": "3.1.1", "version": "3.1.1",
"resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.1.1.tgz", "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.1.1.tgz",
@@ -7462,51 +7340,6 @@
"node": ">=14" "node": ">=14"
} }
}, },
"node_modules/@pnpm/config.env-replace": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz",
"integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=12.22.0"
}
},
"node_modules/@pnpm/network.ca-file": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz",
"integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==",
"dev": true,
"license": "MIT",
"dependencies": {
"graceful-fs": "4.2.10"
},
"engines": {
"node": ">=12.22.0"
}
},
"node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": {
"version": "4.2.10",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
"integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==",
"dev": true,
"license": "ISC"
},
"node_modules/@pnpm/npm-conf": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz",
"integrity": "sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@pnpm/config.env-replace": "^1.1.0",
"@pnpm/network.ca-file": "^1.0.1",
"config-chain": "^1.1.11"
},
"engines": {
"node": ">=12"
}
},
"node_modules/@protobufjs/aspromise": { "node_modules/@protobufjs/aspromise": {
"version": "1.1.2", "version": "1.1.2",
"resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
@@ -14304,12 +14137,12 @@
} }
}, },
"node_modules/commander": { "node_modules/commander": {
"version": "12.1.0", "version": "11.1.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz",
"integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==",
"license": "MIT", "license": "MIT",
"engines": { "engines": {
"node": ">=18" "node": ">=16"
} }
}, },
"node_modules/component-emitter": { "node_modules/component-emitter": {
@@ -14442,17 +14275,6 @@
"integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==",
"license": "MIT" "license": "MIT"
}, },
"node_modules/config-chain": {
"version": "1.1.13",
"resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz",
"integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"ini": "^1.3.4",
"proto-list": "~1.2.1"
}
},
"node_modules/consola": { "node_modules/consola": {
"version": "3.4.2", "version": "3.4.2",
"resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz",
@@ -14934,6 +14756,7 @@
"integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"optional": true,
"engines": { "engines": {
"node": ">=4.0.0" "node": ">=4.0.0"
} }
@@ -18902,7 +18725,8 @@
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
"integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
"dev": true, "dev": true,
"license": "ISC" "license": "ISC",
"optional": true
}, },
"node_modules/ink": { "node_modules/ink": {
"version": "6.3.0", "version": "6.3.0",
@@ -21870,13 +21694,6 @@
"jiti": "lib/jiti-cli.mjs" "jiti": "lib/jiti-cli.mjs"
} }
}, },
"node_modules/jju": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz",
"integrity": "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==",
"dev": true,
"license": "MIT"
},
"node_modules/joycon": { "node_modules/joycon": {
"version": "3.1.1", "version": "3.1.1",
"resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz", "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz",
@@ -22215,19 +22032,6 @@
"node": ">=6" "node": ">=6"
} }
}, },
"node_modules/ky": {
"version": "1.10.0",
"resolved": "https://registry.npmjs.org/ky/-/ky-1.10.0.tgz",
"integrity": "sha512-YRPCzHEWZffbfvmRrfwa+5nwBHwZuYiTrfDX0wuhGBPV0pA/zCqcOq93MDssON/baIkpYbvehIX5aLpMxrRhaA==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=18"
},
"funding": {
"url": "https://github.com/sindresorhus/ky?sponsor=1"
}
},
"node_modules/lcm": { "node_modules/lcm": {
"version": "0.0.3", "version": "0.0.3",
"resolved": "https://registry.npmjs.org/lcm/-/lcm-0.0.3.tgz", "resolved": "https://registry.npmjs.org/lcm/-/lcm-0.0.3.tgz",
@@ -25435,25 +25239,6 @@
"node": ">= 14" "node": ">= 14"
} }
}, },
"node_modules/package-json": {
"version": "10.0.1",
"resolved": "https://registry.npmjs.org/package-json/-/package-json-10.0.1.tgz",
"integrity": "sha512-ua1L4OgXSBdsu1FPb7F3tYH0F48a6kxvod4pLUlGY9COeJAJQNX/sNH2IiEmsxw7lqYiAwrdHMjz1FctOsyDQg==",
"dev": true,
"license": "MIT",
"dependencies": {
"ky": "^1.2.0",
"registry-auth-token": "^5.0.2",
"registry-url": "^6.0.1",
"semver": "^7.6.0"
},
"engines": {
"node": ">=18"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/package-json-from-dist": { "node_modules/package-json-from-dist": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
@@ -25517,19 +25302,6 @@
"dev": true, "dev": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/parse-github-url": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/parse-github-url/-/parse-github-url-1.0.3.tgz",
"integrity": "sha512-tfalY5/4SqGaV/GIGzWyHnFjlpTPTNpENR9Ea2lLldSJ8EWXMsvacWucqY3m3I4YPtas15IxTLQVQ5NSYXPrww==",
"dev": true,
"license": "MIT",
"bin": {
"parse-github-url": "cli.js"
},
"engines": {
"node": ">= 0.10"
}
},
"node_modules/parse-json": { "node_modules/parse-json": {
"version": "5.2.0", "version": "5.2.0",
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
@@ -26175,13 +25947,6 @@
"url": "https://github.com/sponsors/wooorm" "url": "https://github.com/sponsors/wooorm"
} }
}, },
"node_modules/proto-list": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
"integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==",
"dev": true,
"license": "ISC"
},
"node_modules/protobufjs": { "node_modules/protobufjs": {
"version": "7.5.4", "version": "7.5.4",
"resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.4.tgz", "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.4.tgz",
@@ -26518,6 +26283,7 @@
"integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
"dev": true, "dev": true,
"license": "(BSD-2-Clause OR MIT OR Apache-2.0)", "license": "(BSD-2-Clause OR MIT OR Apache-2.0)",
"optional": true,
"dependencies": { "dependencies": {
"deep-extend": "^0.6.0", "deep-extend": "^0.6.0",
"ini": "~1.3.0", "ini": "~1.3.0",
@@ -26534,6 +26300,7 @@
"integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"optional": true,
"engines": { "engines": {
"node": ">=0.10.0" "node": ">=0.10.0"
} }
@@ -26950,35 +26717,6 @@
"url": "https://github.com/sponsors/ljharb" "url": "https://github.com/sponsors/ljharb"
} }
}, },
"node_modules/registry-auth-token": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.0.tgz",
"integrity": "sha512-GdekYuwLXLxMuFTwAPg5UKGLW/UXzQrZvH/Zj791BQif5T05T0RsaLfHc9q3ZOKi7n+BoprPD9mJ0O0k4xzUlw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@pnpm/npm-conf": "^2.1.0"
},
"engines": {
"node": ">=14"
}
},
"node_modules/registry-url": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz",
"integrity": "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==",
"dev": true,
"license": "MIT",
"dependencies": {
"rc": "1.2.8"
},
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/rehype-katex": { "node_modules/rehype-katex": {
"version": "7.0.1", "version": "7.0.1",
"resolved": "https://registry.npmjs.org/rehype-katex/-/rehype-katex-7.0.1.tgz", "resolved": "https://registry.npmjs.org/rehype-katex/-/rehype-katex-7.0.1.tgz",
@@ -27788,16 +27526,6 @@
"url": "https://ko-fi.com/killymxi" "url": "https://ko-fi.com/killymxi"
} }
}, },
"node_modules/sembear": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/sembear/-/sembear-0.7.0.tgz",
"integrity": "sha512-XyLTEich2D02FODCkfdto3mB9DetWPLuTzr4tvoofe9SvyM27h4nQSbV3+iVcYQz94AFyKtqBv5pcZbj3k2hdA==",
"dev": true,
"license": "MIT",
"dependencies": {
"semver": "^7.3.5"
}
},
"node_modules/semver": { "node_modules/semver": {
"version": "7.7.2", "version": "7.7.2",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
@@ -30757,16 +30485,6 @@
"spdx-expression-parse": "^3.0.0" "spdx-expression-parse": "^3.0.0"
} }
}, },
"node_modules/validate-npm-package-name": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-6.0.2.tgz",
"integrity": "sha512-IUoow1YUtvoBBC06dXs8bR8B9vuA3aJfmQNKMoaPG/OFsPmoQvw8xh+6Ye25Gx9DQhoEom3Pcu9MKHerm/NpUQ==",
"dev": true,
"license": "ISC",
"engines": {
"node": "^18.17.0 || >=20.5.0"
}
},
"node_modules/vary": { "node_modules/vary": {
"version": "1.1.2", "version": "1.1.2",
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
@@ -32155,6 +31873,7 @@
}, },
"packages/build-config": { "packages/build-config": {
"name": "@tm/build-config", "name": "@tm/build-config",
"version": "1.0.1",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"tsup": "^8.5.0" "tsup": "^8.5.0"
@@ -32166,21 +31885,22 @@
}, },
"packages/tm-core": { "packages/tm-core": {
"name": "@tm/core", "name": "@tm/core",
"version": "0.26.1",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@supabase/supabase-js": "^2.57.4", "@supabase/supabase-js": "^2.57.4",
"zod": "^3.23.8" "zod": "^3.22.4"
}, },
"devDependencies": { "devDependencies": {
"@biomejs/biome": "^1.9.4", "@biomejs/biome": "^1.9.4",
"@tm/build-config": "*", "@tm/build-config": "*",
"@types/node": "^22.10.5", "@types/node": "^20.11.30",
"@vitest/coverage-v8": "^2.0.5", "@vitest/coverage-v8": "^2.0.5",
"dotenv-mono": "^1.5.1", "dotenv-mono": "^1.3.14",
"ts-node": "^10.9.2", "ts-node": "^10.9.2",
"tsup": "^8.5.0", "tsup": "^8.5.0",
"typescript": "^5.7.3", "typescript": "^5.4.3",
"vitest": "^2.1.8" "vitest": "^2.0.5"
}, },
"engines": { "engines": {
"node": ">=18.0.0" "node": ">=18.0.0"

View File

@@ -1,6 +1,6 @@
{ {
"name": "task-master-ai", "name": "task-master-ai",
"version": "0.27.2", "version": "0.27.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",
@@ -33,9 +33,7 @@
"inspector": "npx @modelcontextprotocol/inspector node dist/mcp-server.js", "inspector": "npx @modelcontextprotocol/inspector node dist/mcp-server.js",
"mcp-server": "node dist/mcp-server.js", "mcp-server": "node dist/mcp-server.js",
"format-check": "biome format .", "format-check": "biome format .",
"format": "biome format . --write", "format": "biome format . --write"
"deps:check": "manypkg check || echo 'Note: Workspace package version warnings are expected for internal @tm/* packages'",
"deps:fix": "manypkg fix"
}, },
"keywords": [ "keywords": [
"claude", "claude",
@@ -67,7 +65,6 @@
"@inquirer/search": "^3.0.15", "@inquirer/search": "^3.0.15",
"@openrouter/ai-sdk-provider": "^0.4.5", "@openrouter/ai-sdk-provider": "^0.4.5",
"@streamparser/json": "^0.0.22", "@streamparser/json": "^0.0.22",
"@supabase/supabase-js": "^2.57.4",
"ai": "^4.3.10", "ai": "^4.3.10",
"ajv": "^8.17.1", "ajv": "^8.17.1",
"ajv-formats": "^3.0.1", "ajv-formats": "^3.0.1",
@@ -76,7 +73,7 @@
"cli-highlight": "^2.1.11", "cli-highlight": "^2.1.11",
"cli-progress": "^3.12.0", "cli-progress": "^3.12.0",
"cli-table3": "^0.6.5", "cli-table3": "^0.6.5",
"commander": "^12.1.0", "commander": "^11.1.0",
"cors": "^2.8.5", "cors": "^2.8.5",
"dotenv": "^16.3.1", "dotenv": "^16.3.1",
"express": "^4.21.2", "express": "^4.21.2",
@@ -123,11 +120,10 @@
"whatwg-url": "^11.0.0" "whatwg-url": "^11.0.0"
}, },
"devDependencies": { "devDependencies": {
"@tm/cli": "*",
"@biomejs/biome": "^1.9.4", "@biomejs/biome": "^1.9.4",
"@changesets/changelog-github": "^0.5.1", "@changesets/changelog-github": "^0.5.1",
"@changesets/cli": "^2.28.1", "@changesets/cli": "^2.28.1",
"@manypkg/cli": "^0.25.1",
"@tm/cli": "*",
"@types/jest": "^29.5.14", "@types/jest": "^29.5.14",
"@types/marked-terminal": "^6.1.1", "@types/marked-terminal": "^6.1.1",
"concurrently": "^9.2.1", "concurrently": "^9.2.1",
@@ -141,8 +137,8 @@
"supertest": "^7.1.0", "supertest": "^7.1.0",
"ts-jest": "^29.4.2", "ts-jest": "^29.4.2",
"tsdown": "^0.15.2", "tsdown": "^0.15.2",
"tsx": "^4.20.4", "tsx": "^4.16.2",
"turbo": "^2.5.6", "turbo": "^2.5.6",
"typescript": "^5.7.3" "typescript": "^5.9.2"
} }
} }

View File

@@ -1,5 +1,3 @@
# @tm/build-config # @tm/build-config
## null
## 1.0.1 ## 1.0.1

View File

@@ -1,5 +1,6 @@
{ {
"name": "@tm/build-config", "name": "@tm/build-config",
"version": "1.0.1",
"description": "Shared build configuration for Task Master monorepo", "description": "Shared build configuration for Task Master monorepo",
"type": "module", "type": "module",
"private": true, "private": true,

View File

@@ -1,7 +1,5 @@
# Changelog # Changelog
## null
## 0.26.1 ## 0.26.1
All notable changes to the @task-master/tm-core package will be documented in this file. All notable changes to the @task-master/tm-core package will be documented in this file.

View File

@@ -1,5 +1,6 @@
{ {
"name": "@tm/core", "name": "@tm/core",
"version": "0.26.1",
"private": true, "private": true,
"description": "Core library for Task Master - TypeScript task management system", "description": "Core library for Task Master - TypeScript task management system",
"type": "module", "type": "module",
@@ -31,18 +32,18 @@
}, },
"dependencies": { "dependencies": {
"@supabase/supabase-js": "^2.57.4", "@supabase/supabase-js": "^2.57.4",
"zod": "^3.23.8" "zod": "^3.22.4"
}, },
"devDependencies": { "devDependencies": {
"@biomejs/biome": "^1.9.4", "@biomejs/biome": "^1.9.4",
"@tm/build-config": "*", "@tm/build-config": "*",
"@types/node": "^22.10.5", "@types/node": "^20.11.30",
"@vitest/coverage-v8": "^2.0.5", "@vitest/coverage-v8": "^2.0.5",
"dotenv-mono": "^1.5.1", "dotenv-mono": "^1.3.14",
"ts-node": "^10.9.2", "ts-node": "^10.9.2",
"tsup": "^8.5.0", "tsup": "^8.5.0",
"typescript": "^5.7.3", "typescript": "^5.4.3",
"vitest": "^2.1.8" "vitest": "^2.0.5"
}, },
"engines": { "engines": {
"node": ">=18.0.0" "node": ">=18.0.0"

View File

@@ -3,17 +3,7 @@
* This file defines the contract for all storage implementations * This file defines the contract for all storage implementations
*/ */
import type { Task, TaskMetadata, TaskStatus } from '../types/index.js'; import type { Task, TaskMetadata } from '../types/index.js';
/**
* Result type for updateTaskStatus operations
*/
export interface UpdateStatusResult {
success: boolean;
oldStatus: TaskStatus;
newStatus: TaskStatus;
taskId: string;
}
/** /**
* Interface for storage operations on tasks * Interface for storage operations on tasks
@@ -64,19 +54,6 @@ export interface IStorage {
tag?: string tag?: string
): Promise<void>; ): Promise<void>;
/**
* Update task or subtask status by ID
* @param taskId - ID of the task or subtask (e.g., "1" or "1.2")
* @param newStatus - New status to set
* @param tag - Optional tag context for the task
* @returns Promise that resolves to update result with old and new status
*/
updateTaskStatus(
taskId: string,
newStatus: TaskStatus,
tag?: string
): Promise<UpdateStatusResult>;
/** /**
* Delete a task by ID * Delete a task by ID
* @param taskId - ID of the task to delete * @param taskId - ID of the task to delete
@@ -214,11 +191,6 @@ export abstract class BaseStorage implements IStorage {
updates: Partial<Task>, updates: Partial<Task>,
tag?: string tag?: string
): Promise<void>; ): Promise<void>;
abstract updateTaskStatus(
taskId: string,
newStatus: TaskStatus,
tag?: string
): Promise<UpdateStatusResult>;
abstract deleteTask(taskId: string, tag?: string): Promise<void>; abstract deleteTask(taskId: string, tag?: string): Promise<void>;
abstract exists(tag?: string): Promise<boolean>; abstract exists(tag?: string): Promise<boolean>;
abstract loadMetadata(tag?: string): Promise<TaskMetadata | null>; abstract loadMetadata(tag?: string): Promise<TaskMetadata | null>;

View File

@@ -446,7 +446,7 @@ export class TaskService {
} }
/** /**
* Update task status - delegates to storage layer which handles storage-specific logic * Update task status
*/ */
async updateTaskStatus( async updateTaskStatus(
taskId: string | number, taskId: string | number,
@@ -468,28 +468,49 @@ export class TaskService {
// Use provided tag or get active tag // Use provided tag or get active tag
const activeTag = tag || this.getActiveTag(); const activeTag = tag || this.getActiveTag();
const taskIdStr = String(taskId); const taskIdStr = String(taskId);
try { // TODO: For now, assume it's a regular task and just try to update directly
// Delegate to storage layer which handles the specific logic for tasks vs subtasks // In the future, we can add subtask support if needed
return await this.storage.updateTaskStatus( if (taskIdStr.includes('.')) {
taskIdStr, throw new TaskMasterError(
newStatus, 'Subtask status updates not yet supported in API storage',
activeTag ERROR_CODES.NOT_IMPLEMENTED
); );
}
// Get the current task to get old status (simple, direct approach)
let currentTask: Task | null;
try {
// Try to get the task directly
currentTask = await this.storage.loadTask(taskIdStr, activeTag);
} catch (error) { } catch (error) {
throw new TaskMasterError( throw new TaskMasterError(
`Failed to update task status for ${taskIdStr}`, `Failed to load task ${taskIdStr}`,
ERROR_CODES.STORAGE_ERROR, ERROR_CODES.TASK_NOT_FOUND,
{ { taskId: taskIdStr },
operation: 'updateTaskStatus',
resource: 'task',
taskId: taskIdStr,
newStatus,
tag: activeTag
},
error as Error error as Error
); );
} }
if (!currentTask) {
throw new TaskMasterError(
`Task ${taskIdStr} not found`,
ERROR_CODES.TASK_NOT_FOUND
);
}
const oldStatus = currentTask.status;
// Simple, direct update - just change the status
await this.storage.updateTask(taskIdStr, { status: newStatus }, activeTag);
return {
success: true,
oldStatus,
newStatus,
taskId: taskIdStr
};
} }
} }

View File

@@ -5,15 +5,9 @@
import type { import type {
IStorage, IStorage,
StorageStats, StorageStats
UpdateStatusResult
} from '../interfaces/storage.interface.js'; } from '../interfaces/storage.interface.js';
import type { import type { Task, TaskMetadata, TaskTag } from '../types/index.js';
Task,
TaskMetadata,
TaskTag,
TaskStatus
} from '../types/index.js';
import { ERROR_CODES, TaskMasterError } from '../errors/task-master-error.js'; import { ERROR_CODES, TaskMasterError } from '../errors/task-master-error.js';
import { TaskRepository } from '../repositories/task-repository.interface.js'; import { TaskRepository } from '../repositories/task-repository.interface.js';
import { SupabaseTaskRepository } from '../repositories/supabase-task-repository.js'; import { SupabaseTaskRepository } from '../repositories/supabase-task-repository.js';
@@ -491,62 +485,6 @@ export class ApiStorage implements IStorage {
} }
} }
/**
* Update task or subtask status by ID - for API storage
*/
async updateTaskStatus(
taskId: string,
newStatus: TaskStatus,
tag?: string
): Promise<UpdateStatusResult> {
await this.ensureInitialized();
try {
const existingTask = await this.retryOperation(() =>
this.repository.getTask(this.projectId, taskId)
);
if (!existingTask) {
throw new Error(`Task ${taskId} not found`);
}
const oldStatus = existingTask.status;
if (oldStatus === newStatus) {
return {
success: true,
oldStatus,
newStatus,
taskId
};
}
// Update the task/subtask status
await this.retryOperation(() =>
this.repository.updateTask(this.projectId, taskId, {
status: newStatus,
updatedAt: new Date().toISOString()
})
);
// Note: Parent status auto-adjustment is handled by the backend API service
// which has its own business logic for managing task relationships
return {
success: true,
oldStatus,
newStatus,
taskId
};
} catch (error) {
throw new TaskMasterError(
'Failed to update task status via API',
ERROR_CODES.STORAGE_ERROR,
{ operation: 'updateTaskStatus', taskId, newStatus, tag },
error as Error
);
}
}
/** /**
* Get all available tags * Get all available tags
*/ */

View File

@@ -2,11 +2,10 @@
* @fileoverview Refactored file-based storage implementation for Task Master * @fileoverview Refactored file-based storage implementation for Task Master
*/ */
import type { Task, TaskMetadata, TaskStatus } from '../../types/index.js'; import type { Task, TaskMetadata } from '../../types/index.js';
import type { import type {
IStorage, IStorage,
StorageStats, StorageStats
UpdateStatusResult
} from '../../interfaces/storage.interface.js'; } from '../../interfaces/storage.interface.js';
import { FormatHandler } from './format-handler.js'; import { FormatHandler } from './format-handler.js';
import { FileOperations } from './file-operations.js'; import { FileOperations } from './file-operations.js';
@@ -282,159 +281,6 @@ export class FileStorage implements IStorage {
await this.saveTasks(tasks, tag); await this.saveTasks(tasks, tag);
} }
/**
* Update task or subtask status by ID - handles file storage logic with parent/subtask relationships
*/
async updateTaskStatus(
taskId: string,
newStatus: TaskStatus,
tag?: string
): Promise<UpdateStatusResult> {
const tasks = await this.loadTasks(tag);
// Check if this is a subtask (contains a dot)
if (taskId.includes('.')) {
return this.updateSubtaskStatusInFile(tasks, taskId, newStatus, tag);
}
// Handle regular task update
const taskIndex = tasks.findIndex((t) => String(t.id) === String(taskId));
if (taskIndex === -1) {
throw new Error(`Task ${taskId} not found`);
}
const oldStatus = tasks[taskIndex].status;
if (oldStatus === newStatus) {
return {
success: true,
oldStatus,
newStatus,
taskId: String(taskId)
};
}
tasks[taskIndex] = {
...tasks[taskIndex],
status: newStatus,
updatedAt: new Date().toISOString()
};
await this.saveTasks(tasks, tag);
return {
success: true,
oldStatus,
newStatus,
taskId: String(taskId)
};
}
/**
* Update subtask status within file storage - handles parent status auto-adjustment
*/
private async updateSubtaskStatusInFile(
tasks: Task[],
subtaskId: string,
newStatus: TaskStatus,
tag?: string
): Promise<UpdateStatusResult> {
// Parse the subtask ID to get parent ID and subtask ID
const parts = subtaskId.split('.');
if (parts.length !== 2) {
throw new Error(
`Invalid subtask ID format: ${subtaskId}. Expected format: parentId.subtaskId`
);
}
const [parentId, subIdRaw] = parts;
const subId = subIdRaw.trim();
if (!/^\d+$/.test(subId)) {
throw new Error(
`Invalid subtask ID: ${subId}. Subtask ID must be a positive integer.`
);
}
const subtaskNumericId = Number(subId);
// Find the parent task
const parentTaskIndex = tasks.findIndex(
(t) => String(t.id) === String(parentId)
);
if (parentTaskIndex === -1) {
throw new Error(`Parent task ${parentId} not found`);
}
const parentTask = tasks[parentTaskIndex];
// Find the subtask within the parent task
const subtaskIndex = parentTask.subtasks.findIndex(
(st) => st.id === subtaskNumericId || String(st.id) === subId
);
if (subtaskIndex === -1) {
throw new Error(
`Subtask ${subtaskId} not found in parent task ${parentId}`
);
}
const oldStatus = parentTask.subtasks[subtaskIndex].status || 'pending';
if (oldStatus === newStatus) {
return {
success: true,
oldStatus,
newStatus,
taskId: subtaskId
};
}
const now = new Date().toISOString();
// Update the subtask status
parentTask.subtasks[subtaskIndex] = {
...parentTask.subtasks[subtaskIndex],
status: newStatus,
updatedAt: now
};
// Auto-adjust parent status based on subtask statuses
const subs = parentTask.subtasks;
let parentNewStatus = parentTask.status;
if (subs.length > 0) {
const norm = (s: any) => s.status || 'pending';
const isDoneLike = (s: any) => {
const st = norm(s);
return st === 'done' || st === 'completed';
};
const allDone = subs.every(isDoneLike);
const anyInProgress = subs.some((s) => norm(s) === 'in-progress');
const anyDone = subs.some(isDoneLike);
const allPending = subs.every((s) => norm(s) === 'pending');
if (allDone) parentNewStatus = 'done';
else if (anyInProgress || anyDone) parentNewStatus = 'in-progress';
else if (allPending) parentNewStatus = 'pending';
}
// Always bump updatedAt; update status only if changed
tasks[parentTaskIndex] = {
...parentTask,
...(parentNewStatus !== parentTask.status
? { status: parentNewStatus }
: {}),
updatedAt: now
};
await this.saveTasks(tasks, tag);
return {
success: true,
oldStatus,
newStatus,
taskId: subtaskId
};
}
/** /**
* Delete a task * Delete a task
*/ */

View File

@@ -60,7 +60,7 @@ alwaysApply: true
- For tasks with complexity analysis, use `node scripts/dev.js expand --id=<id>` - For tasks with complexity analysis, use `node scripts/dev.js expand --id=<id>`
- Otherwise use `node scripts/dev.js expand --id=<id> --subtasks=<number>` - Otherwise use `node scripts/dev.js expand --id=<id> --subtasks=<number>`
- Add `--research` flag to leverage Perplexity AI for research-backed expansion - Add `--research` flag to leverage your configured research model for research-backed expansion
- Use `--prompt="<context>"` to provide additional context when needed - Use `--prompt="<context>"` to provide additional context when needed
- Review and adjust generated subtasks as necessary - Review and adjust generated subtasks as necessary
- Use `--all` flag to expand multiple pending tasks at once - Use `--all` flag to expand multiple pending tasks at once
@@ -160,7 +160,7 @@ alwaysApply: true
- `--id=<id>`: ID of task to expand (required unless using --all) - `--id=<id>`: ID of task to expand (required unless using --all)
- `--all`: Expand all pending tasks, prioritized by complexity - `--all`: Expand all pending tasks, prioritized by complexity
- `--num=<number>`: Number of subtasks to generate (default: from complexity report) - `--num=<number>`: Number of subtasks to generate (default: from complexity report)
- `--research`: Use Perplexity AI for research-backed generation - `--research`: Use your configured research model for research-backed generation
- `--prompt="<text>"`: Additional context for subtask generation - `--prompt="<text>"`: Additional context for subtask generation
- `--force`: Regenerate subtasks even for tasks that already have them - `--force`: Regenerate subtasks even for tasks that already have them
- Example: `task-master expand --id=3 --num=5 --research --prompt="Focus on security aspects"` - Example: `task-master expand --id=3 --num=5 --research --prompt="Focus on security aspects"`
@@ -176,7 +176,7 @@ alwaysApply: true
- `--model=<model>, -m`: Override LLM model to use - `--model=<model>, -m`: Override LLM model to use
- `--threshold=<number>, -t`: Minimum score for expansion recommendation (default: 5) - `--threshold=<number>, -t`: Minimum score for expansion recommendation (default: 5)
- `--file=<path>, -f`: Use alternative tasks.json file - `--file=<path>, -f`: Use alternative tasks.json file
- `--research, -r`: Use Perplexity AI for research-backed analysis - `--research, -r`: Use your configured research model for research-backed analysis
- Example: `task-master analyze-complexity --research` - Example: `task-master analyze-complexity --research`
- Notes: Report includes complexity scores, recommended subtasks, and tailored prompts. - Notes: Report includes complexity scores, recommended subtasks, and tailored prompts.

View File

@@ -16,7 +16,7 @@ task-master analyze-complexity [--research] [--threshold=5]
## Analysis Parameters ## Analysis Parameters
- `--research` → Use research AI for deeper analysis - `--research` → Use configured research model for deeper analysis
- `--threshold=5` → Only flag tasks above complexity 5 - `--threshold=5` → Only flag tasks above complexity 5
- Default: Analyze all pending tasks - Default: Analyze all pending tasks

Some files were not shown because too many files have changed in this diff Show More