2025-03-22 15:52:22 -04:00
|
|
|
#!/usr/bin/env node
|
|
|
|
|
2025-03-31 17:09:31 +02:00
|
|
|
/**
|
|
|
|
* Task Master
|
|
|
|
* Copyright (c) 2025 Eyal Toledano, Ralph Khreish
|
|
|
|
*
|
|
|
|
* This software is licensed under the MIT License with Commons Clause.
|
|
|
|
* You may use this software for any purpose, including commercial applications,
|
|
|
|
* and modify and redistribute it freely, subject to the following restrictions:
|
|
|
|
*
|
|
|
|
* 1. You may not sell this software or offer it as a service.
|
|
|
|
* 2. The origin of this software must not be misrepresented.
|
|
|
|
* 3. Altered source versions must be plainly marked as such.
|
|
|
|
*
|
|
|
|
* For the full license text, see the LICENSE file in the root directory.
|
|
|
|
*/
|
|
|
|
|
2025-03-22 15:52:22 -04:00
|
|
|
/**
|
|
|
|
* Claude Task Master CLI
|
|
|
|
* Main entry point for globally installed package
|
|
|
|
*/
|
|
|
|
|
|
|
|
import { fileURLToPath } from 'url';
|
|
|
|
import { dirname, resolve } from 'path';
|
|
|
|
import { createRequire } from 'module';
|
|
|
|
import { spawn } from 'child_process';
|
|
|
|
import { Command } from 'commander';
|
2025-03-24 16:30:27 -04:00
|
|
|
import { displayHelp, displayBanner } from '../scripts/modules/ui.js';
|
2025-03-24 21:18:49 -04:00
|
|
|
import { registerCommands } from '../scripts/modules/commands.js';
|
2025-03-25 17:20:09 -04:00
|
|
|
import { detectCamelCaseFlags } from '../scripts/modules/utils.js';
|
2025-03-27 13:32:56 -04:00
|
|
|
import chalk from 'chalk';
|
2025-03-22 15:52:22 -04:00
|
|
|
|
|
|
|
const __filename = fileURLToPath(import.meta.url);
|
|
|
|
const __dirname = dirname(__filename);
|
|
|
|
const require = createRequire(import.meta.url);
|
|
|
|
|
|
|
|
// Get package information
|
|
|
|
const packageJson = require('../package.json');
|
|
|
|
const version = packageJson.version;
|
|
|
|
|
|
|
|
// Get paths to script files
|
|
|
|
const devScriptPath = resolve(__dirname, '../scripts/dev.js');
|
|
|
|
const initScriptPath = resolve(__dirname, '../scripts/init.js');
|
|
|
|
|
|
|
|
// Helper function to run dev.js with arguments
|
|
|
|
function runDevScript(args) {
|
2025-03-25 00:12:29 -04:00
|
|
|
// Debug: Show the transformed arguments when DEBUG=1 is set
|
|
|
|
if (process.env.DEBUG === '1') {
|
|
|
|
console.error('\nDEBUG - CLI Wrapper Analysis:');
|
|
|
|
console.error('- Original command: ' + process.argv.join(' '));
|
|
|
|
console.error('- Transformed args: ' + args.join(' '));
|
|
|
|
console.error('- dev.js will receive: node ' + devScriptPath + ' ' + args.join(' ') + '\n');
|
|
|
|
}
|
|
|
|
|
|
|
|
// For testing: If TEST_MODE is set, just print args and exit
|
|
|
|
if (process.env.TEST_MODE === '1') {
|
|
|
|
console.log('Would execute:');
|
|
|
|
console.log(`node ${devScriptPath} ${args.join(' ')}`);
|
|
|
|
process.exit(0);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2025-03-22 15:52:22 -04:00
|
|
|
const child = spawn('node', [devScriptPath, ...args], {
|
|
|
|
stdio: 'inherit',
|
|
|
|
cwd: process.cwd()
|
|
|
|
});
|
|
|
|
|
|
|
|
child.on('close', (code) => {
|
|
|
|
process.exit(code);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2025-03-25 17:20:09 -04:00
|
|
|
// Helper function to detect camelCase and convert to kebab-case
|
|
|
|
const toKebabCase = (str) => str.replace(/([A-Z])/g, '-$1').toLowerCase();
|
|
|
|
|
2025-03-24 21:18:49 -04:00
|
|
|
/**
|
|
|
|
* Create a wrapper action that passes the command to dev.js
|
|
|
|
* @param {string} commandName - The name of the command
|
|
|
|
* @returns {Function} Wrapper action function
|
|
|
|
*/
|
|
|
|
function createDevScriptAction(commandName) {
|
|
|
|
return (options, cmd) => {
|
2025-03-25 00:12:29 -04:00
|
|
|
// Check for camelCase flags and error out with helpful message
|
2025-03-25 17:20:09 -04:00
|
|
|
const camelCaseFlags = detectCamelCaseFlags(process.argv);
|
2025-03-25 00:12:29 -04:00
|
|
|
|
|
|
|
// If camelCase flags were found, show error and exit
|
|
|
|
if (camelCaseFlags.length > 0) {
|
|
|
|
console.error('\nError: Please use kebab-case for CLI flags:');
|
|
|
|
camelCaseFlags.forEach(flag => {
|
|
|
|
console.error(` Instead of: --${flag.original}`);
|
|
|
|
console.error(` Use: --${flag.kebabCase}`);
|
|
|
|
});
|
|
|
|
console.error('\nExample: task-master parse-prd --num-tasks=5 instead of --numTasks=5\n');
|
|
|
|
process.exit(1);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Since we've ensured no camelCase flags, we can now just:
|
|
|
|
// 1. Start with the command name
|
2025-03-24 21:18:49 -04:00
|
|
|
const args = [commandName];
|
|
|
|
|
2025-03-25 00:12:29 -04:00
|
|
|
// 3. Get positional arguments and explicit flags from the command line
|
|
|
|
const commandArgs = [];
|
|
|
|
const positionals = new Set(); // Track positional args we've seen
|
|
|
|
|
|
|
|
// Find the command in raw process.argv to extract args
|
|
|
|
const commandIndex = process.argv.indexOf(commandName);
|
|
|
|
if (commandIndex !== -1) {
|
|
|
|
// Process all args after the command name
|
|
|
|
for (let i = commandIndex + 1; i < process.argv.length; i++) {
|
|
|
|
const arg = process.argv[i];
|
|
|
|
|
|
|
|
if (arg.startsWith('--')) {
|
|
|
|
// It's a flag - pass through as is
|
|
|
|
commandArgs.push(arg);
|
|
|
|
// Skip the next arg if this is a flag with a value (not --flag=value format)
|
|
|
|
if (!arg.includes('=') &&
|
|
|
|
i + 1 < process.argv.length &&
|
|
|
|
!process.argv[i+1].startsWith('--')) {
|
|
|
|
commandArgs.push(process.argv[++i]);
|
|
|
|
}
|
|
|
|
} else if (!positionals.has(arg)) {
|
|
|
|
// It's a positional argument we haven't seen
|
|
|
|
commandArgs.push(arg);
|
|
|
|
positionals.add(arg);
|
|
|
|
}
|
|
|
|
}
|
2025-03-24 21:18:49 -04:00
|
|
|
}
|
|
|
|
|
2025-03-25 00:12:29 -04:00
|
|
|
// Add all command line args we collected
|
|
|
|
args.push(...commandArgs);
|
Fix: Ensure consistent handling of kebab-case flags in CLI
- Enhanced the function in ℹ️ Initialized Perplexity client with OpenAI compatibility layer
_____ _ __ __ _
|_ _|_ _ ___| | __ | \/ | __ _ ___| |_ ___ _ __
| |/ _` / __| |/ / | |\/| |/ _` / __| __/ _ \ '__|
| | (_| \__ \ < | | | | (_| \__ \ || __/ |
|_|\__,_|___/_|\_\ |_| |_|\__,_|___/\__\___|_|
by https://x.com/eyaltoledano
╭────────────────────────────────────────────╮
│ │
│ Version: 0.9.24 Project: Task Master │
│ │
╰────────────────────────────────────────────╯
╭─────────────────────╮
│ │
│ Task Master CLI │
│ │
╰─────────────────────╯
╭───────────────────╮
│ Task Generation │
╰───────────────────╯
parse-prd --input=<file.txt> [--tasks=10] Generate tasks from a PRD document
generate Create individual task files from tasks…
╭───────────────────╮
│ Task Management │
╰───────────────────╯
list [--status=<status>] [--with-subtas… List all tasks with their status
set-status --id=<id> --status=<status> Update task status (done, pending, etc.)
update --from=<id> --prompt="<context>" Update tasks based on new requirements
add-task --prompt="<text>" [--dependencies=… Add a new task using AI
add-dependency --id=<id> --depends-on=<id> Add a dependency to a task
remove-dependency --id=<id> --depends-on=<id> Remove a dependency from a task
╭──────────────────────────╮
│ Task Analysis & Detail │
╰──────────────────────────╯
analyze-complexity [--research] [--threshold=5] Analyze tasks and generate expansion re…
complexity-report [--file=<path>] Display the complexity analysis report
expand --id=<id> [--num=5] [--research] [… Break down tasks into detailed subtasks
expand --all [--force] [--research] Expand all pending tasks with subtasks
clear-subtasks --id=<id> Remove subtasks from specified tasks
╭─────────────────────────────╮
│ Task Navigation & Viewing │
╰─────────────────────────────╯
next Show the next task to work on based on …
show <id> Display detailed information about a sp…
╭─────────────────────────╮
│ Dependency Management │
╰─────────────────────────╯
validate-dependenci… Identify invalid dependencies without f…
fix-dependencies Fix invalid dependencies automatically
╭─────────────────────────╮
│ Environment Variables │
╰─────────────────────────╯
ANTHROPIC_API_KEY Your Anthropic API key Required
MODEL Claude model to use Default: claude-3-7-sonn…
MAX_TOKENS Maximum tokens for responses Default: 4000
TEMPERATURE Temperature for model responses Default: 0.7
PERPLEXITY_API_KEY Perplexity API key for research Optional
PERPLEXITY_MODEL Perplexity model to use Default: sonar-pro
DEBUG Enable debug logging Default: false
LOG_LEVEL Console output level (debug,info,warn,error) Default: info
DEFAULT_SUBTASKS Default number of subtasks to generate Default: 3
DEFAULT_PRIORITY Default task priority Default: medium
PROJECT_NAME Project name displayed in UI Default: Task Master
_____ _ __ __ _
|_ _|_ _ ___| | __ | \/ | __ _ ___| |_ ___ _ __
| |/ _` / __| |/ / | |\/| |/ _` / __| __/ _ \ '__|
| | (_| \__ \ < | | | | (_| \__ \ || __/ |
|_|\__,_|___/_|\_\ |_| |_|\__,_|___/\__\___|_|
by https://x.com/eyaltoledano
╭────────────────────────────────────────────╮
│ │
│ Version: 0.9.24 Project: Task Master │
│ │
╰────────────────────────────────────────────╯
╭─────────────────────╮
│ │
│ Task Master CLI │
│ │
╰─────────────────────╯
╭───────────────────╮
│ Task Generation │
╰───────────────────╯
parse-prd --input=<file.txt> [--tasks=10] Generate tasks from a PRD document
generate Create individual task files from tasks…
╭───────────────────╮
│ Task Management │
╰───────────────────╯
list [--status=<status>] [--with-subtas… List all tasks with their status
set-status --id=<id> --status=<status> Update task status (done, pending, etc.)
update --from=<id> --prompt="<context>" Update tasks based on new requirements
add-task --prompt="<text>" [--dependencies=… Add a new task using AI
add-dependency --id=<id> --depends-on=<id> Add a dependency to a task
remove-dependency --id=<id> --depends-on=<id> Remove a dependency from a task
╭──────────────────────────╮
│ Task Analysis & Detail │
╰──────────────────────────╯
analyze-complexity [--research] [--threshold=5] Analyze tasks and generate expansion re…
complexity-report [--file=<path>] Display the complexity analysis report
expand --id=<id> [--num=5] [--research] [… Break down tasks into detailed subtasks
expand --all [--force] [--research] Expand all pending tasks with subtasks
clear-subtasks --id=<id> Remove subtasks from specified tasks
╭─────────────────────────────╮
│ Task Navigation & Viewing │
╰─────────────────────────────╯
next Show the next task to work on based on …
show <id> Display detailed information about a sp…
╭─────────────────────────╮
│ Dependency Management │
╰─────────────────────────╯
validate-dependenci… Identify invalid dependencies without f…
fix-dependencies Fix invalid dependencies automatically
╭─────────────────────────╮
│ Environment Variables │
╰─────────────────────────╯
ANTHROPIC_API_KEY Your Anthropic API key Required
MODEL Claude model to use Default: claude-3-7-sonn…
MAX_TOKENS Maximum tokens for responses Default: 4000
TEMPERATURE Temperature for model responses Default: 0.7
PERPLEXITY_API_KEY Perplexity API key for research Optional
PERPLEXITY_MODEL Perplexity model to use Default: sonar-pro
DEBUG Enable debug logging Default: false
LOG_LEVEL Console output level (debug,info,warn,error) Default: info
DEFAULT_SUBTASKS Default number of subtasks to generate Default: 3
DEFAULT_PRIORITY Default task priority Default: medium
PROJECT_NAME Project name displayed in UI Default: Task Master to correctly handle kebab-case flags by:
- Converting camelCase options back to kebab-case for command line arguments.
- Checking the original CLI arguments to determine the format used by the user.
- Preserving the original flag format when passing it to the underlying script.
- Special handling for and flags to ensure they are correctly interpreted.
- Updated boolean flag handling to correctly manage negated options and preserve user-specified formats.
- Marked task 022 as done and updated the status of its sub-tasks in .
- Added tasks 26, 27 and 28 for context improvements related to task generation
This commit ensures that all kebab-case flags are handled consistently across the CLI, improving user experience and command reliability.
2025-03-24 22:49:16 -04:00
|
|
|
|
2025-03-25 00:12:29 -04:00
|
|
|
// 4. Add default options from Commander if not specified on command line
|
|
|
|
// Track which options we've seen on the command line
|
|
|
|
const userOptions = new Set();
|
|
|
|
for (const arg of commandArgs) {
|
|
|
|
if (arg.startsWith('--')) {
|
|
|
|
// Extract option name (without -- and value)
|
|
|
|
const name = arg.split('=')[0].slice(2);
|
|
|
|
userOptions.add(name);
|
|
|
|
|
|
|
|
// Add the kebab-case version too, to prevent duplicates
|
|
|
|
const kebabName = name.replace(/([A-Z])/g, '-$1').toLowerCase();
|
|
|
|
userOptions.add(kebabName);
|
|
|
|
|
|
|
|
// Add the camelCase version as well
|
|
|
|
const camelName = kebabName.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase());
|
|
|
|
userOptions.add(camelName);
|
|
|
|
}
|
Fix: Ensure consistent handling of kebab-case flags in CLI
- Enhanced the function in ℹ️ Initialized Perplexity client with OpenAI compatibility layer
_____ _ __ __ _
|_ _|_ _ ___| | __ | \/ | __ _ ___| |_ ___ _ __
| |/ _` / __| |/ / | |\/| |/ _` / __| __/ _ \ '__|
| | (_| \__ \ < | | | | (_| \__ \ || __/ |
|_|\__,_|___/_|\_\ |_| |_|\__,_|___/\__\___|_|
by https://x.com/eyaltoledano
╭────────────────────────────────────────────╮
│ │
│ Version: 0.9.24 Project: Task Master │
│ │
╰────────────────────────────────────────────╯
╭─────────────────────╮
│ │
│ Task Master CLI │
│ │
╰─────────────────────╯
╭───────────────────╮
│ Task Generation │
╰───────────────────╯
parse-prd --input=<file.txt> [--tasks=10] Generate tasks from a PRD document
generate Create individual task files from tasks…
╭───────────────────╮
│ Task Management │
╰───────────────────╯
list [--status=<status>] [--with-subtas… List all tasks with their status
set-status --id=<id> --status=<status> Update task status (done, pending, etc.)
update --from=<id> --prompt="<context>" Update tasks based on new requirements
add-task --prompt="<text>" [--dependencies=… Add a new task using AI
add-dependency --id=<id> --depends-on=<id> Add a dependency to a task
remove-dependency --id=<id> --depends-on=<id> Remove a dependency from a task
╭──────────────────────────╮
│ Task Analysis & Detail │
╰──────────────────────────╯
analyze-complexity [--research] [--threshold=5] Analyze tasks and generate expansion re…
complexity-report [--file=<path>] Display the complexity analysis report
expand --id=<id> [--num=5] [--research] [… Break down tasks into detailed subtasks
expand --all [--force] [--research] Expand all pending tasks with subtasks
clear-subtasks --id=<id> Remove subtasks from specified tasks
╭─────────────────────────────╮
│ Task Navigation & Viewing │
╰─────────────────────────────╯
next Show the next task to work on based on …
show <id> Display detailed information about a sp…
╭─────────────────────────╮
│ Dependency Management │
╰─────────────────────────╯
validate-dependenci… Identify invalid dependencies without f…
fix-dependencies Fix invalid dependencies automatically
╭─────────────────────────╮
│ Environment Variables │
╰─────────────────────────╯
ANTHROPIC_API_KEY Your Anthropic API key Required
MODEL Claude model to use Default: claude-3-7-sonn…
MAX_TOKENS Maximum tokens for responses Default: 4000
TEMPERATURE Temperature for model responses Default: 0.7
PERPLEXITY_API_KEY Perplexity API key for research Optional
PERPLEXITY_MODEL Perplexity model to use Default: sonar-pro
DEBUG Enable debug logging Default: false
LOG_LEVEL Console output level (debug,info,warn,error) Default: info
DEFAULT_SUBTASKS Default number of subtasks to generate Default: 3
DEFAULT_PRIORITY Default task priority Default: medium
PROJECT_NAME Project name displayed in UI Default: Task Master
_____ _ __ __ _
|_ _|_ _ ___| | __ | \/ | __ _ ___| |_ ___ _ __
| |/ _` / __| |/ / | |\/| |/ _` / __| __/ _ \ '__|
| | (_| \__ \ < | | | | (_| \__ \ || __/ |
|_|\__,_|___/_|\_\ |_| |_|\__,_|___/\__\___|_|
by https://x.com/eyaltoledano
╭────────────────────────────────────────────╮
│ │
│ Version: 0.9.24 Project: Task Master │
│ │
╰────────────────────────────────────────────╯
╭─────────────────────╮
│ │
│ Task Master CLI │
│ │
╰─────────────────────╯
╭───────────────────╮
│ Task Generation │
╰───────────────────╯
parse-prd --input=<file.txt> [--tasks=10] Generate tasks from a PRD document
generate Create individual task files from tasks…
╭───────────────────╮
│ Task Management │
╰───────────────────╯
list [--status=<status>] [--with-subtas… List all tasks with their status
set-status --id=<id> --status=<status> Update task status (done, pending, etc.)
update --from=<id> --prompt="<context>" Update tasks based on new requirements
add-task --prompt="<text>" [--dependencies=… Add a new task using AI
add-dependency --id=<id> --depends-on=<id> Add a dependency to a task
remove-dependency --id=<id> --depends-on=<id> Remove a dependency from a task
╭──────────────────────────╮
│ Task Analysis & Detail │
╰──────────────────────────╯
analyze-complexity [--research] [--threshold=5] Analyze tasks and generate expansion re…
complexity-report [--file=<path>] Display the complexity analysis report
expand --id=<id> [--num=5] [--research] [… Break down tasks into detailed subtasks
expand --all [--force] [--research] Expand all pending tasks with subtasks
clear-subtasks --id=<id> Remove subtasks from specified tasks
╭─────────────────────────────╮
│ Task Navigation & Viewing │
╰─────────────────────────────╯
next Show the next task to work on based on …
show <id> Display detailed information about a sp…
╭─────────────────────────╮
│ Dependency Management │
╰─────────────────────────╯
validate-dependenci… Identify invalid dependencies without f…
fix-dependencies Fix invalid dependencies automatically
╭─────────────────────────╮
│ Environment Variables │
╰─────────────────────────╯
ANTHROPIC_API_KEY Your Anthropic API key Required
MODEL Claude model to use Default: claude-3-7-sonn…
MAX_TOKENS Maximum tokens for responses Default: 4000
TEMPERATURE Temperature for model responses Default: 0.7
PERPLEXITY_API_KEY Perplexity API key for research Optional
PERPLEXITY_MODEL Perplexity model to use Default: sonar-pro
DEBUG Enable debug logging Default: false
LOG_LEVEL Console output level (debug,info,warn,error) Default: info
DEFAULT_SUBTASKS Default number of subtasks to generate Default: 3
DEFAULT_PRIORITY Default task priority Default: medium
PROJECT_NAME Project name displayed in UI Default: Task Master to correctly handle kebab-case flags by:
- Converting camelCase options back to kebab-case for command line arguments.
- Checking the original CLI arguments to determine the format used by the user.
- Preserving the original flag format when passing it to the underlying script.
- Special handling for and flags to ensure they are correctly interpreted.
- Updated boolean flag handling to correctly manage negated options and preserve user-specified formats.
- Marked task 022 as done and updated the status of its sub-tasks in .
- Added tasks 26, 27 and 28 for context improvements related to task generation
This commit ensures that all kebab-case flags are handled consistently across the CLI, improving user experience and command reliability.
2025-03-24 22:49:16 -04:00
|
|
|
}
|
|
|
|
|
2025-03-25 00:12:29 -04:00
|
|
|
// Add Commander-provided defaults for options not specified by user
|
2025-03-24 21:18:49 -04:00
|
|
|
Object.entries(options).forEach(([key, value]) => {
|
2025-03-25 00:42:59 -04:00
|
|
|
// Debug output to see what keys we're getting
|
|
|
|
if (process.env.DEBUG === '1') {
|
|
|
|
console.error(`DEBUG - Processing option: ${key} = ${value}`);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Special case for numTasks > num-tasks (a known problem case)
|
|
|
|
if (key === 'numTasks') {
|
|
|
|
if (process.env.DEBUG === '1') {
|
|
|
|
console.error('DEBUG - Converting numTasks to num-tasks');
|
|
|
|
}
|
|
|
|
if (!userOptions.has('num-tasks') && !userOptions.has('numTasks')) {
|
|
|
|
args.push(`--num-tasks=${value}`);
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2025-03-25 00:12:29 -04:00
|
|
|
// Skip built-in Commander properties and options the user provided
|
|
|
|
if (['parent', 'commands', 'options', 'rawArgs'].includes(key) || userOptions.has(key)) {
|
Fix: Ensure consistent handling of kebab-case flags in CLI
- Enhanced the function in ℹ️ Initialized Perplexity client with OpenAI compatibility layer
_____ _ __ __ _
|_ _|_ _ ___| | __ | \/ | __ _ ___| |_ ___ _ __
| |/ _` / __| |/ / | |\/| |/ _` / __| __/ _ \ '__|
| | (_| \__ \ < | | | | (_| \__ \ || __/ |
|_|\__,_|___/_|\_\ |_| |_|\__,_|___/\__\___|_|
by https://x.com/eyaltoledano
╭────────────────────────────────────────────╮
│ │
│ Version: 0.9.24 Project: Task Master │
│ │
╰────────────────────────────────────────────╯
╭─────────────────────╮
│ │
│ Task Master CLI │
│ │
╰─────────────────────╯
╭───────────────────╮
│ Task Generation │
╰───────────────────╯
parse-prd --input=<file.txt> [--tasks=10] Generate tasks from a PRD document
generate Create individual task files from tasks…
╭───────────────────╮
│ Task Management │
╰───────────────────╯
list [--status=<status>] [--with-subtas… List all tasks with their status
set-status --id=<id> --status=<status> Update task status (done, pending, etc.)
update --from=<id> --prompt="<context>" Update tasks based on new requirements
add-task --prompt="<text>" [--dependencies=… Add a new task using AI
add-dependency --id=<id> --depends-on=<id> Add a dependency to a task
remove-dependency --id=<id> --depends-on=<id> Remove a dependency from a task
╭──────────────────────────╮
│ Task Analysis & Detail │
╰──────────────────────────╯
analyze-complexity [--research] [--threshold=5] Analyze tasks and generate expansion re…
complexity-report [--file=<path>] Display the complexity analysis report
expand --id=<id> [--num=5] [--research] [… Break down tasks into detailed subtasks
expand --all [--force] [--research] Expand all pending tasks with subtasks
clear-subtasks --id=<id> Remove subtasks from specified tasks
╭─────────────────────────────╮
│ Task Navigation & Viewing │
╰─────────────────────────────╯
next Show the next task to work on based on …
show <id> Display detailed information about a sp…
╭─────────────────────────╮
│ Dependency Management │
╰─────────────────────────╯
validate-dependenci… Identify invalid dependencies without f…
fix-dependencies Fix invalid dependencies automatically
╭─────────────────────────╮
│ Environment Variables │
╰─────────────────────────╯
ANTHROPIC_API_KEY Your Anthropic API key Required
MODEL Claude model to use Default: claude-3-7-sonn…
MAX_TOKENS Maximum tokens for responses Default: 4000
TEMPERATURE Temperature for model responses Default: 0.7
PERPLEXITY_API_KEY Perplexity API key for research Optional
PERPLEXITY_MODEL Perplexity model to use Default: sonar-pro
DEBUG Enable debug logging Default: false
LOG_LEVEL Console output level (debug,info,warn,error) Default: info
DEFAULT_SUBTASKS Default number of subtasks to generate Default: 3
DEFAULT_PRIORITY Default task priority Default: medium
PROJECT_NAME Project name displayed in UI Default: Task Master
_____ _ __ __ _
|_ _|_ _ ___| | __ | \/ | __ _ ___| |_ ___ _ __
| |/ _` / __| |/ / | |\/| |/ _` / __| __/ _ \ '__|
| | (_| \__ \ < | | | | (_| \__ \ || __/ |
|_|\__,_|___/_|\_\ |_| |_|\__,_|___/\__\___|_|
by https://x.com/eyaltoledano
╭────────────────────────────────────────────╮
│ │
│ Version: 0.9.24 Project: Task Master │
│ │
╰────────────────────────────────────────────╯
╭─────────────────────╮
│ │
│ Task Master CLI │
│ │
╰─────────────────────╯
╭───────────────────╮
│ Task Generation │
╰───────────────────╯
parse-prd --input=<file.txt> [--tasks=10] Generate tasks from a PRD document
generate Create individual task files from tasks…
╭───────────────────╮
│ Task Management │
╰───────────────────╯
list [--status=<status>] [--with-subtas… List all tasks with their status
set-status --id=<id> --status=<status> Update task status (done, pending, etc.)
update --from=<id> --prompt="<context>" Update tasks based on new requirements
add-task --prompt="<text>" [--dependencies=… Add a new task using AI
add-dependency --id=<id> --depends-on=<id> Add a dependency to a task
remove-dependency --id=<id> --depends-on=<id> Remove a dependency from a task
╭──────────────────────────╮
│ Task Analysis & Detail │
╰──────────────────────────╯
analyze-complexity [--research] [--threshold=5] Analyze tasks and generate expansion re…
complexity-report [--file=<path>] Display the complexity analysis report
expand --id=<id> [--num=5] [--research] [… Break down tasks into detailed subtasks
expand --all [--force] [--research] Expand all pending tasks with subtasks
clear-subtasks --id=<id> Remove subtasks from specified tasks
╭─────────────────────────────╮
│ Task Navigation & Viewing │
╰─────────────────────────────╯
next Show the next task to work on based on …
show <id> Display detailed information about a sp…
╭─────────────────────────╮
│ Dependency Management │
╰─────────────────────────╯
validate-dependenci… Identify invalid dependencies without f…
fix-dependencies Fix invalid dependencies automatically
╭─────────────────────────╮
│ Environment Variables │
╰─────────────────────────╯
ANTHROPIC_API_KEY Your Anthropic API key Required
MODEL Claude model to use Default: claude-3-7-sonn…
MAX_TOKENS Maximum tokens for responses Default: 4000
TEMPERATURE Temperature for model responses Default: 0.7
PERPLEXITY_API_KEY Perplexity API key for research Optional
PERPLEXITY_MODEL Perplexity model to use Default: sonar-pro
DEBUG Enable debug logging Default: false
LOG_LEVEL Console output level (debug,info,warn,error) Default: info
DEFAULT_SUBTASKS Default number of subtasks to generate Default: 3
DEFAULT_PRIORITY Default task priority Default: medium
PROJECT_NAME Project name displayed in UI Default: Task Master to correctly handle kebab-case flags by:
- Converting camelCase options back to kebab-case for command line arguments.
- Checking the original CLI arguments to determine the format used by the user.
- Preserving the original flag format when passing it to the underlying script.
- Special handling for and flags to ensure they are correctly interpreted.
- Updated boolean flag handling to correctly manage negated options and preserve user-specified formats.
- Marked task 022 as done and updated the status of its sub-tasks in .
- Added tasks 26, 27 and 28 for context improvements related to task generation
This commit ensures that all kebab-case flags are handled consistently across the CLI, improving user experience and command reliability.
2025-03-24 22:49:16 -04:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2025-03-25 00:12:29 -04:00
|
|
|
// Also check the kebab-case version of this key
|
Fix: Ensure consistent handling of kebab-case flags in CLI
- Enhanced the function in ℹ️ Initialized Perplexity client with OpenAI compatibility layer
_____ _ __ __ _
|_ _|_ _ ___| | __ | \/ | __ _ ___| |_ ___ _ __
| |/ _` / __| |/ / | |\/| |/ _` / __| __/ _ \ '__|
| | (_| \__ \ < | | | | (_| \__ \ || __/ |
|_|\__,_|___/_|\_\ |_| |_|\__,_|___/\__\___|_|
by https://x.com/eyaltoledano
╭────────────────────────────────────────────╮
│ │
│ Version: 0.9.24 Project: Task Master │
│ │
╰────────────────────────────────────────────╯
╭─────────────────────╮
│ │
│ Task Master CLI │
│ │
╰─────────────────────╯
╭───────────────────╮
│ Task Generation │
╰───────────────────╯
parse-prd --input=<file.txt> [--tasks=10] Generate tasks from a PRD document
generate Create individual task files from tasks…
╭───────────────────╮
│ Task Management │
╰───────────────────╯
list [--status=<status>] [--with-subtas… List all tasks with their status
set-status --id=<id> --status=<status> Update task status (done, pending, etc.)
update --from=<id> --prompt="<context>" Update tasks based on new requirements
add-task --prompt="<text>" [--dependencies=… Add a new task using AI
add-dependency --id=<id> --depends-on=<id> Add a dependency to a task
remove-dependency --id=<id> --depends-on=<id> Remove a dependency from a task
╭──────────────────────────╮
│ Task Analysis & Detail │
╰──────────────────────────╯
analyze-complexity [--research] [--threshold=5] Analyze tasks and generate expansion re…
complexity-report [--file=<path>] Display the complexity analysis report
expand --id=<id> [--num=5] [--research] [… Break down tasks into detailed subtasks
expand --all [--force] [--research] Expand all pending tasks with subtasks
clear-subtasks --id=<id> Remove subtasks from specified tasks
╭─────────────────────────────╮
│ Task Navigation & Viewing │
╰─────────────────────────────╯
next Show the next task to work on based on …
show <id> Display detailed information about a sp…
╭─────────────────────────╮
│ Dependency Management │
╰─────────────────────────╯
validate-dependenci… Identify invalid dependencies without f…
fix-dependencies Fix invalid dependencies automatically
╭─────────────────────────╮
│ Environment Variables │
╰─────────────────────────╯
ANTHROPIC_API_KEY Your Anthropic API key Required
MODEL Claude model to use Default: claude-3-7-sonn…
MAX_TOKENS Maximum tokens for responses Default: 4000
TEMPERATURE Temperature for model responses Default: 0.7
PERPLEXITY_API_KEY Perplexity API key for research Optional
PERPLEXITY_MODEL Perplexity model to use Default: sonar-pro
DEBUG Enable debug logging Default: false
LOG_LEVEL Console output level (debug,info,warn,error) Default: info
DEFAULT_SUBTASKS Default number of subtasks to generate Default: 3
DEFAULT_PRIORITY Default task priority Default: medium
PROJECT_NAME Project name displayed in UI Default: Task Master
_____ _ __ __ _
|_ _|_ _ ___| | __ | \/ | __ _ ___| |_ ___ _ __
| |/ _` / __| |/ / | |\/| |/ _` / __| __/ _ \ '__|
| | (_| \__ \ < | | | | (_| \__ \ || __/ |
|_|\__,_|___/_|\_\ |_| |_|\__,_|___/\__\___|_|
by https://x.com/eyaltoledano
╭────────────────────────────────────────────╮
│ │
│ Version: 0.9.24 Project: Task Master │
│ │
╰────────────────────────────────────────────╯
╭─────────────────────╮
│ │
│ Task Master CLI │
│ │
╰─────────────────────╯
╭───────────────────╮
│ Task Generation │
╰───────────────────╯
parse-prd --input=<file.txt> [--tasks=10] Generate tasks from a PRD document
generate Create individual task files from tasks…
╭───────────────────╮
│ Task Management │
╰───────────────────╯
list [--status=<status>] [--with-subtas… List all tasks with their status
set-status --id=<id> --status=<status> Update task status (done, pending, etc.)
update --from=<id> --prompt="<context>" Update tasks based on new requirements
add-task --prompt="<text>" [--dependencies=… Add a new task using AI
add-dependency --id=<id> --depends-on=<id> Add a dependency to a task
remove-dependency --id=<id> --depends-on=<id> Remove a dependency from a task
╭──────────────────────────╮
│ Task Analysis & Detail │
╰──────────────────────────╯
analyze-complexity [--research] [--threshold=5] Analyze tasks and generate expansion re…
complexity-report [--file=<path>] Display the complexity analysis report
expand --id=<id> [--num=5] [--research] [… Break down tasks into detailed subtasks
expand --all [--force] [--research] Expand all pending tasks with subtasks
clear-subtasks --id=<id> Remove subtasks from specified tasks
╭─────────────────────────────╮
│ Task Navigation & Viewing │
╰─────────────────────────────╯
next Show the next task to work on based on …
show <id> Display detailed information about a sp…
╭─────────────────────────╮
│ Dependency Management │
╰─────────────────────────╯
validate-dependenci… Identify invalid dependencies without f…
fix-dependencies Fix invalid dependencies automatically
╭─────────────────────────╮
│ Environment Variables │
╰─────────────────────────╯
ANTHROPIC_API_KEY Your Anthropic API key Required
MODEL Claude model to use Default: claude-3-7-sonn…
MAX_TOKENS Maximum tokens for responses Default: 4000
TEMPERATURE Temperature for model responses Default: 0.7
PERPLEXITY_API_KEY Perplexity API key for research Optional
PERPLEXITY_MODEL Perplexity model to use Default: sonar-pro
DEBUG Enable debug logging Default: false
LOG_LEVEL Console output level (debug,info,warn,error) Default: info
DEFAULT_SUBTASKS Default number of subtasks to generate Default: 3
DEFAULT_PRIORITY Default task priority Default: medium
PROJECT_NAME Project name displayed in UI Default: Task Master to correctly handle kebab-case flags by:
- Converting camelCase options back to kebab-case for command line arguments.
- Checking the original CLI arguments to determine the format used by the user.
- Preserving the original flag format when passing it to the underlying script.
- Special handling for and flags to ensure they are correctly interpreted.
- Updated boolean flag handling to correctly manage negated options and preserve user-specified formats.
- Marked task 022 as done and updated the status of its sub-tasks in .
- Added tasks 26, 27 and 28 for context improvements related to task generation
This commit ensures that all kebab-case flags are handled consistently across the CLI, improving user experience and command reliability.
2025-03-24 22:49:16 -04:00
|
|
|
const kebabKey = key.replace(/([A-Z])/g, '-$1').toLowerCase();
|
2025-03-25 00:12:29 -04:00
|
|
|
if (userOptions.has(kebabKey)) {
|
Fix: Ensure consistent handling of kebab-case flags in CLI
- Enhanced the function in ℹ️ Initialized Perplexity client with OpenAI compatibility layer
_____ _ __ __ _
|_ _|_ _ ___| | __ | \/ | __ _ ___| |_ ___ _ __
| |/ _` / __| |/ / | |\/| |/ _` / __| __/ _ \ '__|
| | (_| \__ \ < | | | | (_| \__ \ || __/ |
|_|\__,_|___/_|\_\ |_| |_|\__,_|___/\__\___|_|
by https://x.com/eyaltoledano
╭────────────────────────────────────────────╮
│ │
│ Version: 0.9.24 Project: Task Master │
│ │
╰────────────────────────────────────────────╯
╭─────────────────────╮
│ │
│ Task Master CLI │
│ │
╰─────────────────────╯
╭───────────────────╮
│ Task Generation │
╰───────────────────╯
parse-prd --input=<file.txt> [--tasks=10] Generate tasks from a PRD document
generate Create individual task files from tasks…
╭───────────────────╮
│ Task Management │
╰───────────────────╯
list [--status=<status>] [--with-subtas… List all tasks with their status
set-status --id=<id> --status=<status> Update task status (done, pending, etc.)
update --from=<id> --prompt="<context>" Update tasks based on new requirements
add-task --prompt="<text>" [--dependencies=… Add a new task using AI
add-dependency --id=<id> --depends-on=<id> Add a dependency to a task
remove-dependency --id=<id> --depends-on=<id> Remove a dependency from a task
╭──────────────────────────╮
│ Task Analysis & Detail │
╰──────────────────────────╯
analyze-complexity [--research] [--threshold=5] Analyze tasks and generate expansion re…
complexity-report [--file=<path>] Display the complexity analysis report
expand --id=<id> [--num=5] [--research] [… Break down tasks into detailed subtasks
expand --all [--force] [--research] Expand all pending tasks with subtasks
clear-subtasks --id=<id> Remove subtasks from specified tasks
╭─────────────────────────────╮
│ Task Navigation & Viewing │
╰─────────────────────────────╯
next Show the next task to work on based on …
show <id> Display detailed information about a sp…
╭─────────────────────────╮
│ Dependency Management │
╰─────────────────────────╯
validate-dependenci… Identify invalid dependencies without f…
fix-dependencies Fix invalid dependencies automatically
╭─────────────────────────╮
│ Environment Variables │
╰─────────────────────────╯
ANTHROPIC_API_KEY Your Anthropic API key Required
MODEL Claude model to use Default: claude-3-7-sonn…
MAX_TOKENS Maximum tokens for responses Default: 4000
TEMPERATURE Temperature for model responses Default: 0.7
PERPLEXITY_API_KEY Perplexity API key for research Optional
PERPLEXITY_MODEL Perplexity model to use Default: sonar-pro
DEBUG Enable debug logging Default: false
LOG_LEVEL Console output level (debug,info,warn,error) Default: info
DEFAULT_SUBTASKS Default number of subtasks to generate Default: 3
DEFAULT_PRIORITY Default task priority Default: medium
PROJECT_NAME Project name displayed in UI Default: Task Master
_____ _ __ __ _
|_ _|_ _ ___| | __ | \/ | __ _ ___| |_ ___ _ __
| |/ _` / __| |/ / | |\/| |/ _` / __| __/ _ \ '__|
| | (_| \__ \ < | | | | (_| \__ \ || __/ |
|_|\__,_|___/_|\_\ |_| |_|\__,_|___/\__\___|_|
by https://x.com/eyaltoledano
╭────────────────────────────────────────────╮
│ │
│ Version: 0.9.24 Project: Task Master │
│ │
╰────────────────────────────────────────────╯
╭─────────────────────╮
│ │
│ Task Master CLI │
│ │
╰─────────────────────╯
╭───────────────────╮
│ Task Generation │
╰───────────────────╯
parse-prd --input=<file.txt> [--tasks=10] Generate tasks from a PRD document
generate Create individual task files from tasks…
╭───────────────────╮
│ Task Management │
╰───────────────────╯
list [--status=<status>] [--with-subtas… List all tasks with their status
set-status --id=<id> --status=<status> Update task status (done, pending, etc.)
update --from=<id> --prompt="<context>" Update tasks based on new requirements
add-task --prompt="<text>" [--dependencies=… Add a new task using AI
add-dependency --id=<id> --depends-on=<id> Add a dependency to a task
remove-dependency --id=<id> --depends-on=<id> Remove a dependency from a task
╭──────────────────────────╮
│ Task Analysis & Detail │
╰──────────────────────────╯
analyze-complexity [--research] [--threshold=5] Analyze tasks and generate expansion re…
complexity-report [--file=<path>] Display the complexity analysis report
expand --id=<id> [--num=5] [--research] [… Break down tasks into detailed subtasks
expand --all [--force] [--research] Expand all pending tasks with subtasks
clear-subtasks --id=<id> Remove subtasks from specified tasks
╭─────────────────────────────╮
│ Task Navigation & Viewing │
╰─────────────────────────────╯
next Show the next task to work on based on …
show <id> Display detailed information about a sp…
╭─────────────────────────╮
│ Dependency Management │
╰─────────────────────────╯
validate-dependenci… Identify invalid dependencies without f…
fix-dependencies Fix invalid dependencies automatically
╭─────────────────────────╮
│ Environment Variables │
╰─────────────────────────╯
ANTHROPIC_API_KEY Your Anthropic API key Required
MODEL Claude model to use Default: claude-3-7-sonn…
MAX_TOKENS Maximum tokens for responses Default: 4000
TEMPERATURE Temperature for model responses Default: 0.7
PERPLEXITY_API_KEY Perplexity API key for research Optional
PERPLEXITY_MODEL Perplexity model to use Default: sonar-pro
DEBUG Enable debug logging Default: false
LOG_LEVEL Console output level (debug,info,warn,error) Default: info
DEFAULT_SUBTASKS Default number of subtasks to generate Default: 3
DEFAULT_PRIORITY Default task priority Default: medium
PROJECT_NAME Project name displayed in UI Default: Task Master to correctly handle kebab-case flags by:
- Converting camelCase options back to kebab-case for command line arguments.
- Checking the original CLI arguments to determine the format used by the user.
- Preserving the original flag format when passing it to the underlying script.
- Special handling for and flags to ensure they are correctly interpreted.
- Updated boolean flag handling to correctly manage negated options and preserve user-specified formats.
- Marked task 022 as done and updated the status of its sub-tasks in .
- Added tasks 26, 27 and 28 for context improvements related to task generation
This commit ensures that all kebab-case flags are handled consistently across the CLI, improving user experience and command reliability.
2025-03-24 22:49:16 -04:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2025-03-25 00:42:59 -04:00
|
|
|
// Add default values, using kebab-case for the parameter name
|
2025-03-25 00:12:29 -04:00
|
|
|
if (value !== undefined) {
|
|
|
|
if (typeof value === 'boolean') {
|
|
|
|
if (value === true) {
|
2025-03-25 00:42:59 -04:00
|
|
|
args.push(`--${kebabKey}`);
|
2025-03-25 00:12:29 -04:00
|
|
|
} else if (value === false && key === 'generate') {
|
2025-03-27 13:32:56 -04:00
|
|
|
args.push('--skip-generate');
|
Fix: Ensure consistent handling of kebab-case flags in CLI
- Enhanced the function in ℹ️ Initialized Perplexity client with OpenAI compatibility layer
_____ _ __ __ _
|_ _|_ _ ___| | __ | \/ | __ _ ___| |_ ___ _ __
| |/ _` / __| |/ / | |\/| |/ _` / __| __/ _ \ '__|
| | (_| \__ \ < | | | | (_| \__ \ || __/ |
|_|\__,_|___/_|\_\ |_| |_|\__,_|___/\__\___|_|
by https://x.com/eyaltoledano
╭────────────────────────────────────────────╮
│ │
│ Version: 0.9.24 Project: Task Master │
│ │
╰────────────────────────────────────────────╯
╭─────────────────────╮
│ │
│ Task Master CLI │
│ │
╰─────────────────────╯
╭───────────────────╮
│ Task Generation │
╰───────────────────╯
parse-prd --input=<file.txt> [--tasks=10] Generate tasks from a PRD document
generate Create individual task files from tasks…
╭───────────────────╮
│ Task Management │
╰───────────────────╯
list [--status=<status>] [--with-subtas… List all tasks with their status
set-status --id=<id> --status=<status> Update task status (done, pending, etc.)
update --from=<id> --prompt="<context>" Update tasks based on new requirements
add-task --prompt="<text>" [--dependencies=… Add a new task using AI
add-dependency --id=<id> --depends-on=<id> Add a dependency to a task
remove-dependency --id=<id> --depends-on=<id> Remove a dependency from a task
╭──────────────────────────╮
│ Task Analysis & Detail │
╰──────────────────────────╯
analyze-complexity [--research] [--threshold=5] Analyze tasks and generate expansion re…
complexity-report [--file=<path>] Display the complexity analysis report
expand --id=<id> [--num=5] [--research] [… Break down tasks into detailed subtasks
expand --all [--force] [--research] Expand all pending tasks with subtasks
clear-subtasks --id=<id> Remove subtasks from specified tasks
╭─────────────────────────────╮
│ Task Navigation & Viewing │
╰─────────────────────────────╯
next Show the next task to work on based on …
show <id> Display detailed information about a sp…
╭─────────────────────────╮
│ Dependency Management │
╰─────────────────────────╯
validate-dependenci… Identify invalid dependencies without f…
fix-dependencies Fix invalid dependencies automatically
╭─────────────────────────╮
│ Environment Variables │
╰─────────────────────────╯
ANTHROPIC_API_KEY Your Anthropic API key Required
MODEL Claude model to use Default: claude-3-7-sonn…
MAX_TOKENS Maximum tokens for responses Default: 4000
TEMPERATURE Temperature for model responses Default: 0.7
PERPLEXITY_API_KEY Perplexity API key for research Optional
PERPLEXITY_MODEL Perplexity model to use Default: sonar-pro
DEBUG Enable debug logging Default: false
LOG_LEVEL Console output level (debug,info,warn,error) Default: info
DEFAULT_SUBTASKS Default number of subtasks to generate Default: 3
DEFAULT_PRIORITY Default task priority Default: medium
PROJECT_NAME Project name displayed in UI Default: Task Master
_____ _ __ __ _
|_ _|_ _ ___| | __ | \/ | __ _ ___| |_ ___ _ __
| |/ _` / __| |/ / | |\/| |/ _` / __| __/ _ \ '__|
| | (_| \__ \ < | | | | (_| \__ \ || __/ |
|_|\__,_|___/_|\_\ |_| |_|\__,_|___/\__\___|_|
by https://x.com/eyaltoledano
╭────────────────────────────────────────────╮
│ │
│ Version: 0.9.24 Project: Task Master │
│ │
╰────────────────────────────────────────────╯
╭─────────────────────╮
│ │
│ Task Master CLI │
│ │
╰─────────────────────╯
╭───────────────────╮
│ Task Generation │
╰───────────────────╯
parse-prd --input=<file.txt> [--tasks=10] Generate tasks from a PRD document
generate Create individual task files from tasks…
╭───────────────────╮
│ Task Management │
╰───────────────────╯
list [--status=<status>] [--with-subtas… List all tasks with their status
set-status --id=<id> --status=<status> Update task status (done, pending, etc.)
update --from=<id> --prompt="<context>" Update tasks based on new requirements
add-task --prompt="<text>" [--dependencies=… Add a new task using AI
add-dependency --id=<id> --depends-on=<id> Add a dependency to a task
remove-dependency --id=<id> --depends-on=<id> Remove a dependency from a task
╭──────────────────────────╮
│ Task Analysis & Detail │
╰──────────────────────────╯
analyze-complexity [--research] [--threshold=5] Analyze tasks and generate expansion re…
complexity-report [--file=<path>] Display the complexity analysis report
expand --id=<id> [--num=5] [--research] [… Break down tasks into detailed subtasks
expand --all [--force] [--research] Expand all pending tasks with subtasks
clear-subtasks --id=<id> Remove subtasks from specified tasks
╭─────────────────────────────╮
│ Task Navigation & Viewing │
╰─────────────────────────────╯
next Show the next task to work on based on …
show <id> Display detailed information about a sp…
╭─────────────────────────╮
│ Dependency Management │
╰─────────────────────────╯
validate-dependenci… Identify invalid dependencies without f…
fix-dependencies Fix invalid dependencies automatically
╭─────────────────────────╮
│ Environment Variables │
╰─────────────────────────╯
ANTHROPIC_API_KEY Your Anthropic API key Required
MODEL Claude model to use Default: claude-3-7-sonn…
MAX_TOKENS Maximum tokens for responses Default: 4000
TEMPERATURE Temperature for model responses Default: 0.7
PERPLEXITY_API_KEY Perplexity API key for research Optional
PERPLEXITY_MODEL Perplexity model to use Default: sonar-pro
DEBUG Enable debug logging Default: false
LOG_LEVEL Console output level (debug,info,warn,error) Default: info
DEFAULT_SUBTASKS Default number of subtasks to generate Default: 3
DEFAULT_PRIORITY Default task priority Default: medium
PROJECT_NAME Project name displayed in UI Default: Task Master to correctly handle kebab-case flags by:
- Converting camelCase options back to kebab-case for command line arguments.
- Checking the original CLI arguments to determine the format used by the user.
- Preserving the original flag format when passing it to the underlying script.
- Special handling for and flags to ensure they are correctly interpreted.
- Updated boolean flag handling to correctly manage negated options and preserve user-specified formats.
- Marked task 022 as done and updated the status of its sub-tasks in .
- Added tasks 26, 27 and 28 for context improvements related to task generation
This commit ensures that all kebab-case flags are handled consistently across the CLI, improving user experience and command reliability.
2025-03-24 22:49:16 -04:00
|
|
|
}
|
|
|
|
} else {
|
2025-03-25 00:42:59 -04:00
|
|
|
// Always use kebab-case for option names
|
|
|
|
args.push(`--${kebabKey}=${value}`);
|
2025-03-24 21:18:49 -04:00
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2025-03-25 00:12:29 -04:00
|
|
|
// Special handling for parent parameter (uses -p)
|
|
|
|
if (options.parent && !args.includes('-p') && !userOptions.has('parent')) {
|
|
|
|
args.push('-p', options.parent);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Debug output for troubleshooting
|
|
|
|
if (process.env.DEBUG === '1') {
|
|
|
|
console.error('DEBUG - Command args:', commandArgs);
|
|
|
|
console.error('DEBUG - User options:', Array.from(userOptions));
|
|
|
|
console.error('DEBUG - Commander options:', options);
|
|
|
|
console.error('DEBUG - Final args:', args);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Run the script with our processed args
|
2025-03-24 21:18:49 -04:00
|
|
|
runDevScript(args);
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
// Special case for the 'init' command which uses a different script
|
|
|
|
function registerInitCommand(program) {
|
|
|
|
program
|
|
|
|
.command('init')
|
|
|
|
.description('Initialize a new project')
|
|
|
|
.option('-y, --yes', 'Skip prompts and use default values')
|
|
|
|
.option('-n, --name <name>', 'Project name')
|
|
|
|
.option('-d, --description <description>', 'Project description')
|
|
|
|
.option('-v, --version <version>', 'Project version')
|
|
|
|
.option('-a, --author <author>', 'Author name')
|
|
|
|
.option('--skip-install', 'Skip installing dependencies')
|
|
|
|
.option('--dry-run', 'Show what would be done without making changes')
|
|
|
|
.action((options) => {
|
|
|
|
// Pass through any options to the init script
|
|
|
|
const args = ['--yes', 'name', 'description', 'version', 'author', 'skip-install', 'dry-run']
|
|
|
|
.filter(opt => options[opt])
|
|
|
|
.map(opt => {
|
|
|
|
if (opt === 'yes' || opt === 'skip-install' || opt === 'dry-run') {
|
|
|
|
return `--${opt}`;
|
|
|
|
}
|
|
|
|
return `--${opt}=${options[opt]}`;
|
|
|
|
});
|
|
|
|
|
|
|
|
const child = spawn('node', [initScriptPath, ...args], {
|
|
|
|
stdio: 'inherit',
|
|
|
|
cwd: process.cwd()
|
|
|
|
});
|
|
|
|
|
|
|
|
child.on('close', (code) => {
|
|
|
|
process.exit(code);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2025-03-22 15:52:22 -04:00
|
|
|
// Set up the command-line interface
|
|
|
|
const program = new Command();
|
|
|
|
|
|
|
|
program
|
|
|
|
.name('task-master')
|
|
|
|
.description('Claude Task Master CLI')
|
2025-03-24 15:43:14 -04:00
|
|
|
.version(version)
|
|
|
|
.addHelpText('afterAll', () => {
|
2025-03-24 16:30:27 -04:00
|
|
|
// Use the same help display function as dev.js for consistency
|
|
|
|
displayHelp();
|
|
|
|
return ''; // Return empty string to prevent commander's default help
|
2025-03-24 15:43:14 -04:00
|
|
|
});
|
2025-03-22 15:52:22 -04:00
|
|
|
|
2025-03-24 16:30:27 -04:00
|
|
|
// Add custom help option to directly call our help display
|
|
|
|
program.helpOption('-h, --help', 'Display help information');
|
|
|
|
program.on('--help', () => {
|
|
|
|
displayHelp();
|
|
|
|
});
|
|
|
|
|
2025-03-24 21:18:49 -04:00
|
|
|
// Add special case commands
|
|
|
|
registerInitCommand(program);
|
2025-03-22 15:52:22 -04:00
|
|
|
|
|
|
|
program
|
|
|
|
.command('dev')
|
|
|
|
.description('Run the dev.js script')
|
|
|
|
.action(() => {
|
|
|
|
const args = process.argv.slice(process.argv.indexOf('dev') + 1);
|
|
|
|
runDevScript(args);
|
|
|
|
});
|
|
|
|
|
2025-03-24 21:18:49 -04:00
|
|
|
// Use a temporary Command instance to get all command definitions
|
|
|
|
const tempProgram = new Command();
|
|
|
|
registerCommands(tempProgram);
|
2025-03-22 15:52:22 -04:00
|
|
|
|
2025-03-24 21:18:49 -04:00
|
|
|
// For each command in the temp instance, add a modified version to our actual program
|
|
|
|
tempProgram.commands.forEach(cmd => {
|
|
|
|
if (['init', 'dev'].includes(cmd.name())) {
|
|
|
|
// Skip commands we've already defined specially
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Create a new command with the same name and description
|
|
|
|
const newCmd = program
|
|
|
|
.command(cmd.name())
|
2025-03-27 13:32:56 -04:00
|
|
|
.description(cmd.description());
|
2025-03-24 21:18:49 -04:00
|
|
|
|
|
|
|
// Copy all options
|
|
|
|
cmd.options.forEach(opt => {
|
|
|
|
newCmd.option(
|
|
|
|
opt.flags,
|
|
|
|
opt.description,
|
|
|
|
opt.defaultValue
|
|
|
|
);
|
2025-03-22 15:52:22 -04:00
|
|
|
});
|
2025-03-24 21:18:49 -04:00
|
|
|
|
|
|
|
// Set the action to proxy to dev.js
|
|
|
|
newCmd.action(createDevScriptAction(cmd.name()));
|
|
|
|
});
|
2025-03-22 15:52:22 -04:00
|
|
|
|
feat: Add skipped tests for task-manager and utils modules, and address potential issues
This commit introduces a comprehensive set of skipped tests to both and . These skipped tests serve as a blueprint for future test implementation, outlining the necessary test cases for currently untested functionalities.
- Ensures sync with bin/ folder by adding -r/--research to the command
- Fixes an issue that improperly parsed command line args
- Ensures confirmation card on dependency add/remove
- Properly formats some sub-task dependencies
**Potentially addressed issues:**
While primarily focused on adding test coverage, this commit also implicitly addresses potential issues by:
- **Improving error handling coverage:** The addition of skipped tests for error scenarios in functions like , , , and highlights areas where error handling needs to be robustly tested and potentially improved in the codebase.
- **Enhancing dependency validation:** Skipped tests for include validation of dependencies, prompting a review of the dependency validation logic and ensuring its correctness.
- **Standardizing test coverage:** By creating a clear roadmap for testing all functions, this commit contributes to a more standardized and complete test suite, reducing the likelihood of undiscovered bugs in the future.
**task-manager.test.js:**
- Added skipped test blocks for the following functions:
- : Includes tests for handling valid JSON responses, malformed JSON, missing tasks in responses, Perplexity AI research integration, Claude fallback, and parallel task processing.
- : Covers tests for updating tasks based on context, handling Claude streaming, Perplexity AI integration, scenarios with no tasks to update, and error handling during updates.
- : Includes tests for generating task files from , formatting dependencies with status indicators, handling tasks without subtasks, empty task arrays, and dependency validation before file generation.
- : Covers tests for updating task status, subtask status using dot notation, updating multiple tasks, automatic subtask status updates, parent task update suggestions, and handling non-existent task IDs.
- : Includes tests for updating regular and subtask statuses, handling parent tasks without subtasks, and non-existent subtask IDs.
- : Covers tests for displaying all tasks, filtering by status, displaying subtasks, showing completion statistics, identifying the next task, and handling empty task arrays.
- : Includes tests for generating subtasks, using complexity reports for subtask counts, Perplexity AI integration, appending subtasks, skipping completed tasks, and error handling during subtask generation.
- : Covers tests for expanding all pending tasks, sorting by complexity, skipping tasks with existing subtasks (unless forced), using task-specific parameters from complexity reports, handling empty task arrays, and error handling for individual tasks.
- : Includes tests for clearing subtasks from specific and multiple tasks, handling tasks without subtasks, non-existent task IDs, and regenerating task files after clearing subtasks.
- : Covers tests for adding new tasks using AI, handling Claude streaming, validating dependencies, handling malformed AI responses, and using existing task context for generation.
**utils.test.js:**
- Added skipped test blocks for the following functions:
- : Tests for logging messages according to log levels and filtering messages below configured levels.
- : Tests for reading and parsing valid JSON files, handling file not found errors, and invalid JSON formats.
- : Tests for writing JSON data to files and handling file write errors.
- : Tests for escaping double quotes in prompts and handling prompts without special characters.
- : Tests for reading and parsing complexity reports, handling missing report files, and custom report paths.
- : Tests for finding tasks in reports by ID, handling non-existent task IDs, and invalid report structures.
- : Tests for verifying existing task and subtask IDs, handling non-existent IDs, and invalid inputs.
- : Tests for formatting numeric and string task IDs and preserving dot notation for subtasks.
- : Tests for detecting simple and complex cycles in dependency graphs, handling acyclic graphs, and empty dependency maps.
These skipped tests provide a clear roadmap for future test development, ensuring comprehensive coverage for core functionalities in both modules. They document the intended behavior of each function and outline various scenarios, including happy paths, edge cases, and error conditions, thereby improving the overall test strategy and maintainability of the Task Master CLI.
2025-03-24 18:54:35 -04:00
|
|
|
// Parse the command line arguments
|
2025-03-24 16:30:27 -04:00
|
|
|
program.parse(process.argv);
|
|
|
|
|
2025-03-27 13:32:56 -04:00
|
|
|
// Add global error handling for unknown commands and options
|
|
|
|
process.on('uncaughtException', (err) => {
|
|
|
|
// Check if this is a commander.js unknown option error
|
|
|
|
if (err.code === 'commander.unknownOption') {
|
|
|
|
const option = err.message.match(/'([^']+)'/)?.[1];
|
|
|
|
const commandArg = process.argv.find(arg => !arg.startsWith('-') &&
|
|
|
|
arg !== 'task-master' &&
|
|
|
|
!arg.includes('/') &&
|
|
|
|
arg !== 'node');
|
|
|
|
const command = commandArg || 'unknown';
|
|
|
|
|
|
|
|
console.error(chalk.red(`Error: Unknown option '${option}'`));
|
|
|
|
console.error(chalk.yellow(`Run 'task-master ${command} --help' to see available options for this command`));
|
|
|
|
process.exit(1);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Check if this is a commander.js unknown command error
|
|
|
|
if (err.code === 'commander.unknownCommand') {
|
|
|
|
const command = err.message.match(/'([^']+)'/)?.[1];
|
|
|
|
|
|
|
|
console.error(chalk.red(`Error: Unknown command '${command}'`));
|
|
|
|
console.error(chalk.yellow(`Run 'task-master --help' to see available commands`));
|
|
|
|
process.exit(1);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Handle other uncaught exceptions
|
|
|
|
console.error(chalk.red(`Error: ${err.message}`));
|
|
|
|
if (process.env.DEBUG === '1') {
|
|
|
|
console.error(err);
|
|
|
|
}
|
|
|
|
process.exit(1);
|
|
|
|
});
|
|
|
|
|
2025-03-24 16:30:27 -04:00
|
|
|
// Show help if no command was provided (just 'task-master' with no args)
|
|
|
|
if (process.argv.length <= 2) {
|
|
|
|
displayBanner();
|
|
|
|
displayHelp();
|
|
|
|
process.exit(0);
|
2025-03-25 17:20:09 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
// Add exports at the end of the file
|
|
|
|
if (typeof module !== 'undefined') {
|
|
|
|
module.exports = {
|
|
|
|
detectCamelCaseFlags
|
|
|
|
};
|
2025-03-24 16:30:27 -04:00
|
|
|
}
|