Compare commits
20 Commits
docs/auto-
...
ralph/fix/
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b104bc9364 | ||
|
|
4843ec7872 | ||
|
|
51694b6de2 | ||
|
|
516712442c | ||
|
|
a85b73f90e | ||
|
|
aaacc3dae3 | ||
|
|
46cd5dc186 | ||
|
|
49a31be416 | ||
|
|
2b69936ee7 | ||
|
|
b5fe723f8e | ||
|
|
d67b81d25d | ||
|
|
66c05053c0 | ||
|
|
d7ab4609aa | ||
|
|
05f6242f7e | ||
|
|
a58719cf50 | ||
|
|
674d1f6de7 | ||
|
|
f106fb8e0b | ||
|
|
fd9dd43ee0 | ||
|
|
c395e93696 | ||
|
|
a621ff05ea |
5
.changeset/chore-fix-docs.md
Normal file
5
.changeset/chore-fix-docs.md
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
"task-master-ai": patch
|
||||||
|
---
|
||||||
|
|
||||||
|
Improve `analyze-complexity` cli docs and `--research` flag documentation
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
---
|
|
||||||
"task-master-ai": minor
|
|
||||||
---
|
|
||||||
|
|
||||||
No longer need --package=task-master-ai in mcp server
|
|
||||||
|
|
||||||
- A lot of users were having issues with Taskmaster and usually a simple fix was to remove --package from your mcp.json
|
|
||||||
- we now bundle our whole package, so we no longer need the --package
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
---
|
|
||||||
"task-master-ai": minor
|
|
||||||
---
|
|
||||||
|
|
||||||
Add new `task-master start` command for automated task execution with Claude Code
|
|
||||||
|
|
||||||
- You can now start working on tasks directly by running `task-master start <task-id>` which will automatically launch Claude Code with a comprehensive prompt containing all task details, implementation guidelines, and context.
|
|
||||||
- `task-master start` will automatically detect next-task when no ID is provided.
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
---
|
|
||||||
"task-master-ai": minor
|
|
||||||
---
|
|
||||||
|
|
||||||
Testing one more pre-release iteration
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
---
|
|
||||||
"task-master-ai": minor
|
|
||||||
---
|
|
||||||
|
|
||||||
Move from javascript to typescript, not a full refactor but we now have a typescript environment and are moving our javascript commands slowly into typescript
|
|
||||||
13
.changeset/mcp-timeout-configuration.md
Normal file
13
.changeset/mcp-timeout-configuration.md
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
---
|
||||||
|
"task-master-ai": minor
|
||||||
|
---
|
||||||
|
|
||||||
|
Enhanced Roo Code profile with MCP timeout configuration for improved reliability during long-running AI operations. The Roo profile now automatically configures a 300-second timeout for MCP server operations, preventing timeouts during complex tasks like `parse-prd`, `expand-all`, `analyze-complexity`, and `research` operations. This change also replaces static MCP configuration files with programmatic generation for better maintainability.
|
||||||
|
|
||||||
|
**What's New:**
|
||||||
|
- 300-second timeout for MCP operations (up from default 60 seconds)
|
||||||
|
- Programmatic MCP configuration generation (replaces static asset files)
|
||||||
|
- Enhanced reliability for AI-powered operations
|
||||||
|
- Consistent with other AI coding assistant profiles
|
||||||
|
|
||||||
|
**Migration:** No user action required - existing Roo Code installations will automatically receive the enhanced MCP configuration on next initialization.
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
---
|
|
||||||
"task-master-ai": minor
|
|
||||||
---
|
|
||||||
|
|
||||||
Test out the RC
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
---
|
|
||||||
"@tm/cli": minor
|
|
||||||
---
|
|
||||||
|
|
||||||
testing this stuff out to see how the release candidate works with monorepo
|
|
||||||
5
.changeset/petite-ideas-grab.md
Normal file
5
.changeset/petite-ideas-grab.md
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
"task-master-ai": patch
|
||||||
|
---
|
||||||
|
|
||||||
|
Fix Claude Code settings validation for pathToClaudeCodeExecutable
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
{
|
|
||||||
"mode": "pre",
|
|
||||||
"tag": "rc",
|
|
||||||
"initialVersions": {
|
|
||||||
"task-master-ai": "0.26.0",
|
|
||||||
"@tm/cli": "0.26.0",
|
|
||||||
"docs": "0.0.2",
|
|
||||||
"extension": "0.24.2",
|
|
||||||
"@tm/build-config": "1.0.0",
|
|
||||||
"@tm/core": "0.26.0"
|
|
||||||
},
|
|
||||||
"changesets": [
|
|
||||||
"easy-deer-heal",
|
|
||||||
"moody-oranges-slide",
|
|
||||||
"odd-otters-tan",
|
|
||||||
"shiny-regions-teach",
|
|
||||||
"wild-ears-look"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
---
|
|
||||||
"task-master-ai": minor
|
|
||||||
---
|
|
||||||
|
|
||||||
Add grok-cli as a provider. You can now use Grok models with Task Master by setting the `GROK_CLI_API_KEY` environment variable.
|
|
||||||
|
|
||||||
## Setup Instructions
|
|
||||||
|
|
||||||
1. **Get your Grok API key** from [console.x.ai](https://console.x.ai)
|
|
||||||
2. **Set the environment variable**:
|
|
||||||
```bash
|
|
||||||
export GROK_CLI_API_KEY="your-api-key-here"
|
|
||||||
```
|
|
||||||
3. **Configure Task Master to use Grok**:
|
|
||||||
```bash
|
|
||||||
task-master models --set-main grok-beta
|
|
||||||
# or
|
|
||||||
task-master models --set-research grok-beta
|
|
||||||
# or
|
|
||||||
task-master models --set-fallback grok-beta
|
|
||||||
```
|
|
||||||
|
|
||||||
## Available Models
|
|
||||||
- `grok-beta` - Latest Grok model
|
|
||||||
- `grok-vision-beta` - Grok with vision capabilities
|
|
||||||
|
|
||||||
The Grok CLI provider integrates with xAI's Grok models and can also use the local Grok CLI configuration file (`~/.grok/user-settings.json`) if available.
|
|
||||||
|
|
||||||
## Credits
|
|
||||||
Built using the [grok-cli](https://github.com/superagent-ai/grok-cli) by Superagent AI for seamless integration with xAI's Grok models.
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
---
|
|
||||||
"task-master-ai": minor
|
|
||||||
---
|
|
||||||
|
|
||||||
@tm/cli: add auto-update functionality to every command
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
---
|
|
||||||
"extension": minor
|
|
||||||
---
|
|
||||||
|
|
||||||
Add "Start Task" button to VS Code extension for seamless Claude Code integration
|
|
||||||
|
|
||||||
You can now click a "Start Task" button directly in the Task Master extension which will open a new terminal and automatically execute the task using Claude Code. This provides a seamless workflow from viewing tasks in the extension to implementing them without leaving VS Code.
|
|
||||||
5
.changeset/silly-pandas-find.md
Normal file
5
.changeset/silly-pandas-find.md
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
"task-master-ai": patch
|
||||||
|
---
|
||||||
|
|
||||||
|
Fix sonar deep research model failing, should be called `sonar-deep-research`
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
---
|
|
||||||
"task-master-ai": minor
|
|
||||||
---
|
|
||||||
|
|
||||||
Fix Grok model configuration validation and update deprecated Claude fallback model. Grok models now properly support their full 131K token capacity, and the fallback model has been upgraded to Claude Sonnet 4 for better performance and future compatibility.
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
---
|
|
||||||
"extension": minor
|
|
||||||
---
|
|
||||||
|
|
||||||
Added a Start Build button to the VSCODE Task Properties Right Panel
|
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
"mcpServers": {
|
"mcpServers": {
|
||||||
"task-master-ai": {
|
"task-master-ai": {
|
||||||
"command": "node",
|
"command": "node",
|
||||||
"args": ["./mcp-server/server.js"],
|
"args": ["./dist/mcp-server.js"],
|
||||||
"env": {
|
"env": {
|
||||||
"ANTHROPIC_API_KEY": "ANTHROPIC_API_KEY_HERE",
|
"ANTHROPIC_API_KEY": "ANTHROPIC_API_KEY_HERE",
|
||||||
"PERPLEXITY_API_KEY": "PERPLEXITY_API_KEY_HERE",
|
"PERPLEXITY_API_KEY": "PERPLEXITY_API_KEY_HERE",
|
||||||
|
|||||||
157
.github/scripts/parse-metrics.mjs
vendored
Normal file
157
.github/scripts/parse-metrics.mjs
vendored
Normal file
@@ -0,0 +1,157 @@
|
|||||||
|
#!/usr/bin/env node
|
||||||
|
|
||||||
|
import { readFileSync, existsSync, writeFileSync } from 'fs';
|
||||||
|
|
||||||
|
function parseMetricsTable(content, metricName) {
|
||||||
|
const lines = content.split('\n');
|
||||||
|
|
||||||
|
for (let i = 0; i < lines.length; i++) {
|
||||||
|
const line = lines[i].trim();
|
||||||
|
// Match a markdown table row like: | Metric Name | value | ...
|
||||||
|
const safeName = metricName.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
||||||
|
const re = new RegExp(`^\\|\\s*${safeName}\\s*\\|\\s*([^|]+)\\|?`);
|
||||||
|
const match = line.match(re);
|
||||||
|
if (match) {
|
||||||
|
return match[1].trim() || 'N/A';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 'N/A';
|
||||||
|
}
|
||||||
|
|
||||||
|
function parseCountMetric(content, metricName) {
|
||||||
|
const result = parseMetricsTable(content, metricName);
|
||||||
|
// Extract number from string, handling commas and spaces
|
||||||
|
const numberMatch = result.toString().match(/[\d,]+/);
|
||||||
|
if (numberMatch) {
|
||||||
|
const number = parseInt(numberMatch[0].replace(/,/g, ''));
|
||||||
|
return isNaN(number) ? 0 : number;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
function main() {
|
||||||
|
const metrics = {
|
||||||
|
issues_created: 0,
|
||||||
|
issues_closed: 0,
|
||||||
|
prs_created: 0,
|
||||||
|
prs_merged: 0,
|
||||||
|
issue_avg_first_response: 'N/A',
|
||||||
|
issue_avg_time_to_close: 'N/A',
|
||||||
|
pr_avg_first_response: 'N/A',
|
||||||
|
pr_avg_merge_time: 'N/A'
|
||||||
|
};
|
||||||
|
|
||||||
|
// Parse issue metrics
|
||||||
|
if (existsSync('issue_metrics.md')) {
|
||||||
|
console.log('📄 Found issue_metrics.md, parsing...');
|
||||||
|
const issueContent = readFileSync('issue_metrics.md', 'utf8');
|
||||||
|
|
||||||
|
metrics.issues_created = parseCountMetric(
|
||||||
|
issueContent,
|
||||||
|
'Total number of items created'
|
||||||
|
);
|
||||||
|
metrics.issues_closed = parseCountMetric(
|
||||||
|
issueContent,
|
||||||
|
'Number of items closed'
|
||||||
|
);
|
||||||
|
metrics.issue_avg_first_response = parseMetricsTable(
|
||||||
|
issueContent,
|
||||||
|
'Time to first response'
|
||||||
|
);
|
||||||
|
metrics.issue_avg_time_to_close = parseMetricsTable(
|
||||||
|
issueContent,
|
||||||
|
'Time to close'
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
console.warn('[parse-metrics] issue_metrics.md not found; using defaults.');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Parse PR created metrics
|
||||||
|
if (existsSync('pr_created_metrics.md')) {
|
||||||
|
console.log('📄 Found pr_created_metrics.md, parsing...');
|
||||||
|
const prCreatedContent = readFileSync('pr_created_metrics.md', 'utf8');
|
||||||
|
|
||||||
|
metrics.prs_created = parseCountMetric(
|
||||||
|
prCreatedContent,
|
||||||
|
'Total number of items created'
|
||||||
|
);
|
||||||
|
metrics.pr_avg_first_response = parseMetricsTable(
|
||||||
|
prCreatedContent,
|
||||||
|
'Time to first response'
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
console.warn(
|
||||||
|
'[parse-metrics] pr_created_metrics.md not found; using defaults.'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Parse PR merged metrics (for more accurate merge data)
|
||||||
|
if (existsSync('pr_merged_metrics.md')) {
|
||||||
|
console.log('📄 Found pr_merged_metrics.md, parsing...');
|
||||||
|
const prMergedContent = readFileSync('pr_merged_metrics.md', 'utf8');
|
||||||
|
|
||||||
|
metrics.prs_merged = parseCountMetric(
|
||||||
|
prMergedContent,
|
||||||
|
'Total number of items created'
|
||||||
|
);
|
||||||
|
// For merged PRs, "Time to close" is actually time to merge
|
||||||
|
metrics.pr_avg_merge_time = parseMetricsTable(
|
||||||
|
prMergedContent,
|
||||||
|
'Time to close'
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
console.warn(
|
||||||
|
'[parse-metrics] pr_merged_metrics.md not found; falling back to pr_metrics.md.'
|
||||||
|
);
|
||||||
|
// Fallback: try old pr_metrics.md if it exists
|
||||||
|
if (existsSync('pr_metrics.md')) {
|
||||||
|
console.log('📄 Falling back to pr_metrics.md...');
|
||||||
|
const prContent = readFileSync('pr_metrics.md', 'utf8');
|
||||||
|
|
||||||
|
const mergedCount = parseCountMetric(prContent, 'Number of items merged');
|
||||||
|
metrics.prs_merged =
|
||||||
|
mergedCount || parseCountMetric(prContent, 'Number of items closed');
|
||||||
|
|
||||||
|
const maybeMergeTime = parseMetricsTable(
|
||||||
|
prContent,
|
||||||
|
'Average time to merge'
|
||||||
|
);
|
||||||
|
metrics.pr_avg_merge_time =
|
||||||
|
maybeMergeTime !== 'N/A'
|
||||||
|
? maybeMergeTime
|
||||||
|
: parseMetricsTable(prContent, 'Time to close');
|
||||||
|
} else {
|
||||||
|
console.warn('[parse-metrics] pr_metrics.md not found; using defaults.');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Output for GitHub Actions
|
||||||
|
const output = Object.entries(metrics)
|
||||||
|
.map(([key, value]) => `${key}=${value}`)
|
||||||
|
.join('\n');
|
||||||
|
|
||||||
|
// Always output to stdout for debugging
|
||||||
|
console.log('\n=== FINAL METRICS ===');
|
||||||
|
Object.entries(metrics).forEach(([key, value]) => {
|
||||||
|
console.log(`${key}: ${value}`);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Write to GITHUB_OUTPUT if in GitHub Actions
|
||||||
|
if (process.env.GITHUB_OUTPUT) {
|
||||||
|
try {
|
||||||
|
writeFileSync(process.env.GITHUB_OUTPUT, output + '\n', { flag: 'a' });
|
||||||
|
console.log(
|
||||||
|
`\nSuccessfully wrote metrics to ${process.env.GITHUB_OUTPUT}`
|
||||||
|
);
|
||||||
|
} catch (error) {
|
||||||
|
console.error(`Failed to write to GITHUB_OUTPUT: ${error.message}`);
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
console.log(
|
||||||
|
'\nNo GITHUB_OUTPUT environment variable found, skipping file write'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
main();
|
||||||
80
.github/workflows/weekly-metrics-discord.yml
vendored
80
.github/workflows/weekly-metrics-discord.yml
vendored
@@ -8,7 +8,7 @@ on:
|
|||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
issues: write
|
issues: read
|
||||||
pull-requests: read
|
pull-requests: read
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
@@ -17,15 +17,25 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
DISCORD_WEBHOOK: ${{ secrets.DISCORD_METRICS_WEBHOOK }}
|
DISCORD_WEBHOOK: ${{ secrets.DISCORD_METRICS_WEBHOOK }}
|
||||||
steps:
|
steps:
|
||||||
- name: Get dates for last week
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Setup Node.js
|
||||||
|
uses: actions/setup-node@v4
|
||||||
|
with:
|
||||||
|
node-version: '20'
|
||||||
|
|
||||||
|
- name: Get dates for last 14 days
|
||||||
run: |
|
run: |
|
||||||
# Last 7 days
|
set -Eeuo pipefail
|
||||||
first_day=$(date -d "7 days ago" +%Y-%m-%d)
|
# Last 14 days
|
||||||
|
first_day=$(date -d "14 days ago" +%Y-%m-%d)
|
||||||
last_day=$(date +%Y-%m-%d)
|
last_day=$(date +%Y-%m-%d)
|
||||||
|
|
||||||
echo "first_day=$first_day" >> $GITHUB_ENV
|
echo "first_day=$first_day" >> $GITHUB_ENV
|
||||||
echo "last_day=$last_day" >> $GITHUB_ENV
|
echo "last_day=$last_day" >> $GITHUB_ENV
|
||||||
echo "week_of=$(date -d '7 days ago' +'Week of %B %d, %Y')" >> $GITHUB_ENV
|
echo "week_of=$(date -d '7 days ago' +'Week of %B %d, %Y')" >> $GITHUB_ENV
|
||||||
|
echo "date_range=Past 14 days ($first_day to $last_day)" >> $GITHUB_ENV
|
||||||
|
|
||||||
- name: Generate issue metrics
|
- name: Generate issue metrics
|
||||||
uses: github/issue-metrics@v3
|
uses: github/issue-metrics@v3
|
||||||
@@ -34,40 +44,39 @@ jobs:
|
|||||||
SEARCH_QUERY: "repo:${{ github.repository }} is:issue created:${{ env.first_day }}..${{ env.last_day }}"
|
SEARCH_QUERY: "repo:${{ github.repository }} is:issue created:${{ env.first_day }}..${{ env.last_day }}"
|
||||||
HIDE_TIME_TO_ANSWER: true
|
HIDE_TIME_TO_ANSWER: true
|
||||||
HIDE_LABEL_METRICS: false
|
HIDE_LABEL_METRICS: false
|
||||||
|
OUTPUT_FILE: issue_metrics.md
|
||||||
|
|
||||||
- name: Generate PR metrics
|
- name: Generate PR created metrics
|
||||||
uses: github/issue-metrics@v3
|
uses: github/issue-metrics@v3
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
SEARCH_QUERY: "repo:${{ github.repository }} is:pr created:${{ env.first_day }}..${{ env.last_day }}"
|
SEARCH_QUERY: "repo:${{ github.repository }} is:pr created:${{ env.first_day }}..${{ env.last_day }}"
|
||||||
OUTPUT_FILE: pr_metrics.md
|
OUTPUT_FILE: pr_created_metrics.md
|
||||||
|
|
||||||
|
- name: Generate PR merged metrics
|
||||||
|
uses: github/issue-metrics@v3
|
||||||
|
env:
|
||||||
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
SEARCH_QUERY: "repo:${{ github.repository }} is:pr is:merged merged:${{ env.first_day }}..${{ env.last_day }}"
|
||||||
|
OUTPUT_FILE: pr_merged_metrics.md
|
||||||
|
|
||||||
|
- name: Debug generated metrics
|
||||||
|
run: |
|
||||||
|
set -Eeuo pipefail
|
||||||
|
echo "Listing markdown files in workspace:"
|
||||||
|
ls -la *.md || true
|
||||||
|
for f in issue_metrics.md pr_created_metrics.md pr_merged_metrics.md; do
|
||||||
|
if [ -f "$f" ]; then
|
||||||
|
echo "== $f (first 10 lines) =="
|
||||||
|
head -n 10 "$f"
|
||||||
|
else
|
||||||
|
echo "Missing $f"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
- name: Parse metrics
|
- name: Parse metrics
|
||||||
id: metrics
|
id: metrics
|
||||||
run: |
|
run: node .github/scripts/parse-metrics.mjs
|
||||||
# Parse the metrics from the generated markdown files
|
|
||||||
if [ -f "issue_metrics.md" ]; then
|
|
||||||
# Extract key metrics using grep/awk
|
|
||||||
AVG_TIME_TO_FIRST_RESPONSE=$(grep -A 1 "Average time to first response" issue_metrics.md | tail -1 | xargs || echo "N/A")
|
|
||||||
AVG_TIME_TO_CLOSE=$(grep -A 1 "Average time to close" issue_metrics.md | tail -1 | xargs || echo "N/A")
|
|
||||||
NUM_ISSUES_CREATED=$(grep -oP '\d+(?= issues created)' issue_metrics.md || echo "0")
|
|
||||||
NUM_ISSUES_CLOSED=$(grep -oP '\d+(?= issues closed)' issue_metrics.md || echo "0")
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -f "pr_metrics.md" ]; then
|
|
||||||
PR_AVG_TIME_TO_MERGE=$(grep -A 1 "Average time to close" pr_metrics.md | tail -1 | xargs || echo "N/A")
|
|
||||||
NUM_PRS_CREATED=$(grep -oP '\d+(?= pull requests created)' pr_metrics.md || echo "0")
|
|
||||||
NUM_PRS_MERGED=$(grep -oP '\d+(?= pull requests closed)' pr_metrics.md || echo "0")
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Set outputs for Discord action
|
|
||||||
echo "issues_created=${NUM_ISSUES_CREATED:-0}" >> $GITHUB_OUTPUT
|
|
||||||
echo "issues_closed=${NUM_ISSUES_CLOSED:-0}" >> $GITHUB_OUTPUT
|
|
||||||
echo "prs_created=${NUM_PRS_CREATED:-0}" >> $GITHUB_OUTPUT
|
|
||||||
echo "prs_merged=${NUM_PRS_MERGED:-0}" >> $GITHUB_OUTPUT
|
|
||||||
echo "avg_first_response=${AVG_TIME_TO_FIRST_RESPONSE:-N/A}" >> $GITHUB_OUTPUT
|
|
||||||
echo "avg_time_to_close=${AVG_TIME_TO_CLOSE:-N/A}" >> $GITHUB_OUTPUT
|
|
||||||
echo "pr_avg_merge_time=${PR_AVG_TIME_TO_MERGE:-N/A}" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Send to Discord
|
- name: Send to Discord
|
||||||
uses: sarisia/actions-status-discord@v1
|
uses: sarisia/actions-status-discord@v1
|
||||||
@@ -78,19 +87,22 @@ jobs:
|
|||||||
title: "📊 Weekly Metrics Report"
|
title: "📊 Weekly Metrics Report"
|
||||||
description: |
|
description: |
|
||||||
**${{ env.week_of }}**
|
**${{ env.week_of }}**
|
||||||
|
*${{ env.date_range }}*
|
||||||
|
|
||||||
**🎯 Issues**
|
**🎯 Issues**
|
||||||
• Created: ${{ steps.metrics.outputs.issues_created }}
|
• Created: ${{ steps.metrics.outputs.issues_created }}
|
||||||
• Closed: ${{ steps.metrics.outputs.issues_closed }}
|
• Closed: ${{ steps.metrics.outputs.issues_closed }}
|
||||||
|
• Avg Response Time: ${{ steps.metrics.outputs.issue_avg_first_response }}
|
||||||
|
• Avg Time to Close: ${{ steps.metrics.outputs.issue_avg_time_to_close }}
|
||||||
|
|
||||||
**🔀 Pull Requests**
|
**🔀 Pull Requests**
|
||||||
• Created: ${{ steps.metrics.outputs.prs_created }}
|
• Created: ${{ steps.metrics.outputs.prs_created }}
|
||||||
• Merged: ${{ steps.metrics.outputs.prs_merged }}
|
• Merged: ${{ steps.metrics.outputs.prs_merged }}
|
||||||
|
• Avg Response Time: ${{ steps.metrics.outputs.pr_avg_first_response }}
|
||||||
|
• Avg Time to Merge: ${{ steps.metrics.outputs.pr_avg_merge_time }}
|
||||||
|
|
||||||
**⏱️ Response Times**
|
**📈 Visual Analytics**
|
||||||
• First Response: ${{ steps.metrics.outputs.avg_first_response }}
|
https://repobeats.axiom.co/api/embed/b439f28f0ab5bd7a2da19505355693cd2c55bfd4.svg
|
||||||
• Time to Close: ${{ steps.metrics.outputs.avg_time_to_close }}
|
|
||||||
• PR Merge Time: ${{ steps.metrics.outputs.pr_avg_merge_time }}
|
|
||||||
color: 0x58AFFF
|
color: 0x58AFFF
|
||||||
username: Task Master Metrics Bot
|
username: Task Master Metrics Bot
|
||||||
avatar_url: https://raw.githubusercontent.com/eyaltoledano/claude-task-master/main/images/logo.png
|
avatar_url: https://raw.githubusercontent.com/eyaltoledano/claude-task-master/main/images/logo.png
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
{
|
{
|
||||||
"models": {
|
"models": {
|
||||||
"main": {
|
"main": {
|
||||||
"provider": "grok-cli",
|
"provider": "anthropic",
|
||||||
"modelId": "grok-4-latest",
|
"modelId": "claude-sonnet-4-20250514",
|
||||||
"maxTokens": 131072,
|
"maxTokens": 64000,
|
||||||
"temperature": 0.2
|
"temperature": 0.2
|
||||||
},
|
},
|
||||||
"research": {
|
"research": {
|
||||||
@@ -14,8 +14,8 @@
|
|||||||
},
|
},
|
||||||
"fallback": {
|
"fallback": {
|
||||||
"provider": "anthropic",
|
"provider": "anthropic",
|
||||||
"modelId": "claude-sonnet-4-20250514",
|
"modelId": "claude-3-7-sonnet-20250219",
|
||||||
"maxTokens": 64000,
|
"maxTokens": 120000,
|
||||||
"temperature": 0.2
|
"temperature": 0.2
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
55
CHANGELOG.md
55
CHANGELOG.md
@@ -1,5 +1,60 @@
|
|||||||
# task-master-ai
|
# task-master-ai
|
||||||
|
|
||||||
|
## 0.27.0
|
||||||
|
|
||||||
|
### Minor Changes
|
||||||
|
|
||||||
|
- [#1220](https://github.com/eyaltoledano/claude-task-master/pull/1220) [`4e12643`](https://github.com/eyaltoledano/claude-task-master/commit/4e126430a092fb54afb035514fb3d46115714f97) Thanks [@Crunchyman-ralph](https://github.com/Crunchyman-ralph)! - No longer need --package=task-master-ai in mcp server
|
||||||
|
- A lot of users were having issues with Taskmaster and usually a simple fix was to remove --package from your mcp.json
|
||||||
|
- we now bundle our whole package, so we no longer need the --package
|
||||||
|
|
||||||
|
- [#1200](https://github.com/eyaltoledano/claude-task-master/pull/1200) [`fce8414`](https://github.com/eyaltoledano/claude-task-master/commit/fce841490a9ebbf1801a42dd8a29397379cf1142) Thanks [@eyaltoledano](https://github.com/eyaltoledano)! - Add new `task-master start` command for automated task execution with Claude Code
|
||||||
|
- You can now start working on tasks directly by running `task-master start <task-id>` which will automatically launch Claude Code with a comprehensive prompt containing all task details, implementation guidelines, and context.
|
||||||
|
- `task-master start` will automatically detect next-task when no ID is provided.
|
||||||
|
|
||||||
|
- [#1200](https://github.com/eyaltoledano/claude-task-master/pull/1200) [`fce8414`](https://github.com/eyaltoledano/claude-task-master/commit/fce841490a9ebbf1801a42dd8a29397379cf1142) Thanks [@eyaltoledano](https://github.com/eyaltoledano)! - Move from javascript to typescript, not a full refactor but we now have a typescript environment and are moving our javascript commands slowly into typescript
|
||||||
|
|
||||||
|
- [#1200](https://github.com/eyaltoledano/claude-task-master/pull/1200) [`fce8414`](https://github.com/eyaltoledano/claude-task-master/commit/fce841490a9ebbf1801a42dd8a29397379cf1142) Thanks [@eyaltoledano](https://github.com/eyaltoledano)! - Add grok-cli as a provider with full codebase context support. You can now use Grok models (grok-2, grok-3, grok-4, etc.) with Task Master for AI operations that have access to your entire codebase context, enabling more informed task generation and PRD parsing.
|
||||||
|
|
||||||
|
## Setup Instructions
|
||||||
|
1. **Get your Grok API key** from [console.x.ai](https://console.x.ai)
|
||||||
|
2. **Set the environment variable**:
|
||||||
|
```bash
|
||||||
|
export GROK_CLI_API_KEY="your-api-key-here"
|
||||||
|
```
|
||||||
|
3. **Configure Task Master to use Grok**:
|
||||||
|
```bash
|
||||||
|
task-master models --set-main grok-beta
|
||||||
|
# or
|
||||||
|
task-master models --set-research grok-beta
|
||||||
|
# or
|
||||||
|
task-master models --set-fallback grok-beta
|
||||||
|
```
|
||||||
|
|
||||||
|
## Key Features
|
||||||
|
- **Full codebase context**: Grok models can analyze your entire project when generating tasks or parsing PRDs
|
||||||
|
- **xAI model access**: Support for latest Grok models (grok-2, grok-3, grok-4, etc.)
|
||||||
|
- **Code-aware task generation**: Create more accurate and contextual tasks based on your actual codebase
|
||||||
|
- **Intelligent PRD parsing**: Parse requirements with understanding of your existing code structure
|
||||||
|
|
||||||
|
## Available Models
|
||||||
|
- `grok-beta` - Latest Grok model with codebase context
|
||||||
|
- `grok-vision-beta` - Grok with vision capabilities and codebase context
|
||||||
|
|
||||||
|
The Grok CLI provider integrates with xAI's Grok models via grok-cli and can also use the local Grok CLI configuration file (`~/.grok/user-settings.json`) if available.
|
||||||
|
|
||||||
|
## Credits
|
||||||
|
|
||||||
|
Built using the [grok-cli](https://github.com/superagent-ai/grok-cli) by Superagent AI for seamless integration with xAI's Grok models.
|
||||||
|
|
||||||
|
- [#1225](https://github.com/eyaltoledano/claude-task-master/pull/1225) [`a621ff0`](https://github.com/eyaltoledano/claude-task-master/commit/a621ff05eafb51a147a9aabd7b37ddc0e45b0869) Thanks [@Crunchyman-ralph](https://github.com/Crunchyman-ralph)! - Improve taskmaster ai provider defaults
|
||||||
|
- moving from main anthropic 3.7 to anthropic sonnet 4
|
||||||
|
- moving from fallback anthropic 3.5 to anthropic 3.7
|
||||||
|
|
||||||
|
- [#1217](https://github.com/eyaltoledano/claude-task-master/pull/1217) [`e6de285`](https://github.com/eyaltoledano/claude-task-master/commit/e6de285ceacb0a397e952a63435cd32a9c731515) Thanks [@Crunchyman-ralph](https://github.com/Crunchyman-ralph)! - @tm/cli: add auto-update functionality to every command
|
||||||
|
|
||||||
|
- [#1200](https://github.com/eyaltoledano/claude-task-master/pull/1200) [`fce8414`](https://github.com/eyaltoledano/claude-task-master/commit/fce841490a9ebbf1801a42dd8a29397379cf1142) Thanks [@eyaltoledano](https://github.com/eyaltoledano)! - Fix Grok model configuration validation and update deprecated Claude fallback model. Grok models now properly support their full 131K token capacity, and the fallback model has been upgraded to Claude Sonnet 4 for better performance and future compatibility.
|
||||||
|
|
||||||
## 0.27.0-rc.2
|
## 0.27.0-rc.2
|
||||||
|
|
||||||
### Minor Changes
|
### Minor Changes
|
||||||
|
|||||||
13
README.md
13
README.md
@@ -60,6 +60,19 @@ The following documentation is also available in the `docs` directory:
|
|||||||
|
|
||||||
> **Note:** After clicking the link, you'll still need to add your API keys to the configuration. The link installs the MCP server with placeholder keys that you'll need to replace with your actual API keys.
|
> **Note:** After clicking the link, you'll still need to add your API keys to the configuration. The link installs the MCP server with placeholder keys that you'll need to replace with your actual API keys.
|
||||||
|
|
||||||
|
#### Claude Code Quick Install
|
||||||
|
|
||||||
|
For Claude Code users:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
claude mcp add taskmaster-ai -- npx -y task-master-ai
|
||||||
|
```
|
||||||
|
|
||||||
|
Don't forget to add your API keys to the configuration:
|
||||||
|
- in the root .env of your Project
|
||||||
|
- in the "env" section of your mcp config for taskmaster-ai
|
||||||
|
|
||||||
|
|
||||||
## Requirements
|
## Requirements
|
||||||
|
|
||||||
Taskmaster utilizes AI across several commands, and those require a separate API key. You can use a variety of models from different AI providers provided you add your API keys. For example, if you want to use Claude 3.7, you'll need an Anthropic API key.
|
Taskmaster utilizes AI across several commands, and those require a separate API key. You can use a variety of models from different AI providers provided you add your API keys. For example, if you want to use Claude 3.7, you'll need an Anthropic API key.
|
||||||
|
|||||||
@@ -1,5 +1,12 @@
|
|||||||
# @tm/cli
|
# @tm/cli
|
||||||
|
|
||||||
|
## 0.27.0
|
||||||
|
|
||||||
|
### Patch Changes
|
||||||
|
|
||||||
|
- Updated dependencies []:
|
||||||
|
- @tm/core@0.26.1
|
||||||
|
|
||||||
## 0.27.0-rc.0
|
## 0.27.0-rc.0
|
||||||
|
|
||||||
### Minor Changes
|
### Minor Changes
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@tm/cli",
|
"name": "@tm/cli",
|
||||||
"version": "0.27.0-rc.0",
|
"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,
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
# docs
|
# docs
|
||||||
|
|
||||||
|
## 0.0.3
|
||||||
|
|
||||||
## 0.0.2
|
## 0.0.2
|
||||||
|
|
||||||
## 0.0.1
|
## 0.0.1
|
||||||
|
|||||||
@@ -1,22 +1,24 @@
|
|||||||
# Task Master Documentation
|
# Task Master Documentation
|
||||||
|
|
||||||
Welcome to the Task Master documentation. Use the links below to navigate to the information you need:
|
Welcome to the Task Master documentation. This documentation site provides comprehensive guides for getting started with Task Master.
|
||||||
|
|
||||||
## Getting Started
|
## Getting Started
|
||||||
|
|
||||||
- [Configuration Guide](archive/configuration.md) - Set up environment variables and customize Task Master
|
- [Quick Start Guide](/getting-started/quick-start) - Complete setup and first-time usage guide
|
||||||
- [Tutorial](archive/ctutorial.md) - Step-by-step guide to getting started with Task Master
|
- [Requirements](/getting-started/quick-start/requirements) - What you need to get started
|
||||||
|
- [Installation](/getting-started/quick-start/installation) - How to install Task Master
|
||||||
|
|
||||||
## Reference
|
## Core Capabilities
|
||||||
|
|
||||||
- [Command Reference](archive/ccommand-reference.md) - Complete list of all available commands
|
- [MCP Tools](/capabilities/mcp) - Model Control Protocol integration
|
||||||
- [Task Structure](archive/ctask-structure.md) - Understanding the task format and features
|
- [CLI Commands](/capabilities/cli-root-commands) - Command line interface reference
|
||||||
|
- [Task Structure](/capabilities/task-structure) - Understanding tasks and subtasks
|
||||||
|
|
||||||
## Examples & Licensing
|
## Best Practices
|
||||||
|
|
||||||
- [Example Interactions](archive/cexamples.md) - Common Cursor AI interaction examples
|
- [Advanced Configuration](/best-practices/configuration-advanced) - Detailed configuration options
|
||||||
- [Licensing Information](archive/clicensing.md) - Detailed information about the license
|
- [Advanced Tasks](/best-practices/advanced-tasks) - Working with complex task structures
|
||||||
|
|
||||||
## Need More Help?
|
## Need More Help?
|
||||||
|
|
||||||
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).
|
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).
|
||||||
|
|||||||
@@ -156,7 +156,7 @@ sidebarTitle: "CLI 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 your configured research model for research-backed complexity analysis
|
||||||
task-master analyze-complexity --research
|
task-master analyze-complexity --research
|
||||||
```
|
```
|
||||||
</Accordion>
|
</Accordion>
|
||||||
|
|||||||
@@ -18,8 +18,8 @@ For MCP/Cursor usage: Configure keys in the env section of your .cursor/mcp.json
|
|||||||
{
|
{
|
||||||
"mcpServers": {
|
"mcpServers": {
|
||||||
"task-master-ai": {
|
"task-master-ai": {
|
||||||
"command": "node",
|
"command": "npx",
|
||||||
"args": ["./mcp-server/server.js"],
|
"args": ["-y", "task-master-ai"],
|
||||||
"env": {
|
"env": {
|
||||||
"ANTHROPIC_API_KEY": "ANTHROPIC_API_KEY_HERE",
|
"ANTHROPIC_API_KEY": "ANTHROPIC_API_KEY_HERE",
|
||||||
"PERPLEXITY_API_KEY": "PERPLEXITY_API_KEY_HERE",
|
"PERPLEXITY_API_KEY": "PERPLEXITY_API_KEY_HERE",
|
||||||
@@ -108,5 +108,5 @@ You don’t 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](/docs/best-practices/configuration-advanced) page.
|
For advanced configuration options and detailed customization, see our [Advanced Configuration Guide](/best-practices/configuration-advanced) page.
|
||||||
</Note>
|
</Note>
|
||||||
@@ -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](/docs/getting-started/faq)
|
If you have any questions please check out [Frequently Asked Questions](/getting-started/faq)
|
||||||
|
|||||||
@@ -30,6 +30,19 @@ cursor://anysphere.cursor-deeplink/mcp/install?name=taskmaster-ai&config=eyJjb21
|
|||||||
```
|
```
|
||||||
|
|
||||||
> **Note:** After clicking the link, you'll still need to add your API keys to the configuration. The link installs the MCP server with placeholder keys that you'll need to replace with your actual API keys.
|
> **Note:** After clicking the link, you'll still need to add your API keys to the configuration. The link installs the MCP server with placeholder keys that you'll need to replace with your actual API keys.
|
||||||
|
|
||||||
|
### Claude Code Quick Install
|
||||||
|
|
||||||
|
For Claude Code users:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
claude mcp add taskmaster-ai -- npx -y task-master-ai
|
||||||
|
```
|
||||||
|
|
||||||
|
Don't forget to add your API keys to the configuration:
|
||||||
|
- in the root .env of your Project
|
||||||
|
- in the "env" section of your mcp config for taskmaster-ai
|
||||||
|
|
||||||
</Accordion>
|
</Accordion>
|
||||||
## Installation Options
|
## Installation Options
|
||||||
|
|
||||||
|
|||||||
@@ -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](/docs/getting-started/quick-start/requirements): You will need Node.js and an AI model API Key.
|
- [Requirements](/getting-started/quick-start/requirements): You will need Node.js and an AI model API Key.
|
||||||
- [Installation](/docs/getting-started/quick-start/installation): How to Install Task Master.
|
- [Installation](/getting-started/quick-start/installation): How to Install Task Master.
|
||||||
- [Configuration](/docs/getting-started/quick-start/configuration-quick): Setting up your API Key, MCP, and more.
|
- [Configuration](/getting-started/quick-start/configuration-quick): Setting up your API Key, MCP, and more.
|
||||||
- [PRD](/docs/getting-started/quick-start/prd-quick): Writing and parsing your first PRD.
|
- [PRD](/getting-started/quick-start/prd-quick): Writing and parsing your first PRD.
|
||||||
- [Task Setup](/docs/getting-started/quick-start/tasks-quick): Preparing your tasks for execution.
|
- [Task Setup](/getting-started/quick-start/tasks-quick): Preparing your tasks for execution.
|
||||||
- [Executing Tasks](/docs/getting-started/quick-start/execute-quick): Using Task Master to execute tasks.
|
- [Executing Tasks](/getting-started/quick-start/execute-quick): Using Task Master to execute tasks.
|
||||||
- [Rules & Context](/docs/getting-started/quick-start/rules-quick): Learn how and why to build context in your project over time.
|
- [Rules & Context](/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.
|
||||||
|
|||||||
@@ -61,9 +61,25 @@ Task Master can provide a complexity report which can be helpful to read before
|
|||||||
Can you analyze the complexity of our tasks to help me understand which ones need to be broken down further?
|
Can you analyze the complexity of our tasks to help me understand which ones need to be broken down further?
|
||||||
```
|
```
|
||||||
|
|
||||||
|
The agent will use the `analyze_project_complexity` MCP tool, or you can run it directly with the CLI command:
|
||||||
|
```bash
|
||||||
|
task-master analyze-complexity
|
||||||
|
```
|
||||||
|
|
||||||
|
For more comprehensive analysis using your configured research model, you can use:
|
||||||
|
```bash
|
||||||
|
task-master analyze-complexity --research
|
||||||
|
```
|
||||||
|
|
||||||
|
<Tip>
|
||||||
|
The `--research` flag uses whatever research model you have configured in `.taskmaster/config.json` (configurable via `task-master models --setup`) for research-backed complexity analysis, providing more informed recommendations.
|
||||||
|
</Tip>
|
||||||
|
|
||||||
You can view the report in a friendly table using:
|
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?
|
||||||
```
|
```
|
||||||
|
|
||||||
<Check>Now you are ready to begin [executing tasks](/docs/getting-started/quick-start/execute-quick)</Check>
|
For more detailed CLI options, see the [Analyze Task Complexity](/capabilities/cli-root-commands#analyze-task-complexity) section.
|
||||||
|
|
||||||
|
<Check>Now you are ready to begin [executing tasks](/getting-started/quick-start/execute-quick)</Check>
|
||||||
@@ -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](/docs/getting-started/quick-start)
|
### Getting Started - Jump in to [Quick Start](/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
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "docs",
|
"name": "docs",
|
||||||
"version": "0.0.2",
|
"version": "0.0.3",
|
||||||
"private": true,
|
"private": true,
|
||||||
"description": "Task Master documentation powered by Mintlify",
|
"description": "Task Master documentation powered by Mintlify",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
@@ -1,5 +1,22 @@
|
|||||||
# Change Log
|
# Change Log
|
||||||
|
|
||||||
|
## 0.25.0
|
||||||
|
|
||||||
|
### Minor Changes
|
||||||
|
|
||||||
|
- [#1200](https://github.com/eyaltoledano/claude-task-master/pull/1200) [`fce8414`](https://github.com/eyaltoledano/claude-task-master/commit/fce841490a9ebbf1801a42dd8a29397379cf1142) Thanks [@eyaltoledano](https://github.com/eyaltoledano)! - Add "Start Task" button to VS Code extension for seamless Claude Code integration
|
||||||
|
|
||||||
|
You can now click a "Start Task" button directly in the Task Master extension which will open a new terminal and automatically execute the task using Claude Code. This provides a seamless workflow from viewing tasks in the extension to implementing them without leaving VS Code.
|
||||||
|
|
||||||
|
- [#1201](https://github.com/eyaltoledano/claude-task-master/pull/1201) [`83af314`](https://github.com/eyaltoledano/claude-task-master/commit/83af314879fc0e563581161c60d2bd089899313e) Thanks [@losolosol](https://github.com/losolosol)! - Added a Start Build button to the VSCODE Task Properties Right Panel
|
||||||
|
|
||||||
|
### Patch Changes
|
||||||
|
|
||||||
|
- [#1229](https://github.com/eyaltoledano/claude-task-master/pull/1229) [`674d1f6`](https://github.com/eyaltoledano/claude-task-master/commit/674d1f6de7ea98116b61bdae6198bafe6c4e7c1a) Thanks [@Crunchyman-ralph](https://github.com/Crunchyman-ralph)! - Fix MCP not connecting to new Taskmaster version
|
||||||
|
|
||||||
|
- Updated dependencies [[`4e12643`](https://github.com/eyaltoledano/claude-task-master/commit/4e126430a092fb54afb035514fb3d46115714f97), [`fce8414`](https://github.com/eyaltoledano/claude-task-master/commit/fce841490a9ebbf1801a42dd8a29397379cf1142), [`fce8414`](https://github.com/eyaltoledano/claude-task-master/commit/fce841490a9ebbf1801a42dd8a29397379cf1142), [`fce8414`](https://github.com/eyaltoledano/claude-task-master/commit/fce841490a9ebbf1801a42dd8a29397379cf1142), [`a621ff0`](https://github.com/eyaltoledano/claude-task-master/commit/a621ff05eafb51a147a9aabd7b37ddc0e45b0869), [`e6de285`](https://github.com/eyaltoledano/claude-task-master/commit/e6de285ceacb0a397e952a63435cd32a9c731515), [`fce8414`](https://github.com/eyaltoledano/claude-task-master/commit/fce841490a9ebbf1801a42dd8a29397379cf1142)]:
|
||||||
|
- task-master-ai@0.27.0
|
||||||
|
|
||||||
## 0.25.0-rc.0
|
## 0.25.0-rc.0
|
||||||
|
|
||||||
### Minor Changes
|
### Minor Changes
|
||||||
|
|||||||
@@ -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.0-rc.0",
|
"version": "0.25.0",
|
||||||
"publisher": "Hamster",
|
"publisher": "Hamster",
|
||||||
"icon": "assets/icon.png",
|
"icon": "assets/icon.png",
|
||||||
"engines": {
|
"engines": {
|
||||||
|
|||||||
@@ -408,7 +408,7 @@ export function createMCPConfigFromSettings(): MCPConfig {
|
|||||||
const taskMasterPath = require.resolve('task-master-ai');
|
const taskMasterPath = require.resolve('task-master-ai');
|
||||||
const mcpServerPath = path.resolve(
|
const mcpServerPath = path.resolve(
|
||||||
path.dirname(taskMasterPath),
|
path.dirname(taskMasterPath),
|
||||||
'mcp-server/server.js'
|
'./dist/mcp-server.js'
|
||||||
);
|
);
|
||||||
|
|
||||||
// Verify the server file exists
|
// Verify the server file exists
|
||||||
|
|||||||
@@ -235,6 +235,60 @@ node scripts/init.js
|
|||||||
- "MCP provider requires session context" → Ensure running in MCP environment
|
- "MCP provider requires session context" → Ensure running in MCP environment
|
||||||
- See the [MCP Provider Guide](./mcp-provider-guide.md) for detailed troubleshooting
|
- See the [MCP Provider Guide](./mcp-provider-guide.md) for detailed troubleshooting
|
||||||
|
|
||||||
|
### MCP Timeout Configuration
|
||||||
|
|
||||||
|
Long-running AI operations in taskmaster-ai can exceed the default 60-second MCP timeout. Operations like `parse_prd`, `expand_task`, `research`, and `analyze_project_complexity` may take 2-5 minutes to complete.
|
||||||
|
|
||||||
|
#### Adding Timeout Configuration
|
||||||
|
|
||||||
|
Add a `timeout` parameter to your MCP configuration to extend the timeout limit. The timeout configuration works identically across MCP clients including Cursor, Windsurf, and RooCode:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"mcpServers": {
|
||||||
|
"task-master-ai": {
|
||||||
|
"command": "npx",
|
||||||
|
"args": ["-y", "--package=task-master-ai", "task-master-ai"],
|
||||||
|
"timeout": 300,
|
||||||
|
"env": {
|
||||||
|
"ANTHROPIC_API_KEY": "your-anthropic-api-key"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Configuration Details:**
|
||||||
|
- **`timeout: 300`** - Sets timeout to 300 seconds (5 minutes)
|
||||||
|
- **Value range**: 1-3600 seconds (1 second to 1 hour)
|
||||||
|
- **Recommended**: 300 seconds provides sufficient time for most AI operations
|
||||||
|
- **Format**: Integer value in seconds (not milliseconds)
|
||||||
|
|
||||||
|
#### Automatic Setup
|
||||||
|
|
||||||
|
When adding taskmaster rules for supported editors, the timeout configuration is automatically included:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Automatically includes timeout configuration
|
||||||
|
task-master rules add cursor
|
||||||
|
task-master rules add roo
|
||||||
|
task-master rules add windsurf
|
||||||
|
task-master rules add vscode
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Troubleshooting Timeouts
|
||||||
|
|
||||||
|
If you're still experiencing timeout errors:
|
||||||
|
|
||||||
|
1. **Verify configuration**: Check that `timeout: 300` is present in your MCP config
|
||||||
|
2. **Restart editor**: Restart your editor after making configuration changes
|
||||||
|
3. **Increase timeout**: For very complex operations, try `timeout: 600` (10 minutes)
|
||||||
|
4. **Check API keys**: Ensure required API keys are properly configured
|
||||||
|
|
||||||
|
**Expected behavior:**
|
||||||
|
- **Before fix**: Operations fail after 60 seconds with `MCP request timed out after 60000ms`
|
||||||
|
- **After fix**: Operations complete successfully within the configured timeout limit
|
||||||
|
|
||||||
### Google Vertex AI Configuration
|
### Google Vertex AI Configuration
|
||||||
|
|
||||||
Google Vertex AI is Google Cloud's enterprise AI platform and requires specific configuration:
|
Google Vertex AI is Google Cloud's enterprise AI platform and requires specific configuration:
|
||||||
|
|||||||
@@ -451,8 +451,8 @@ When using Task Master in VS Code with MCP support:
|
|||||||
{
|
{
|
||||||
"servers": {
|
"servers": {
|
||||||
"task-master-dev": {
|
"task-master-dev": {
|
||||||
"command": "node",
|
"command": "npx",
|
||||||
"args": ["mcp-server/server.js"],
|
"args": ["-y", "task-master-ai"],
|
||||||
"cwd": "/path/to/your/task-master-project",
|
"cwd": "/path/to/your/task-master-project",
|
||||||
"env": {
|
"env": {
|
||||||
"NODE_ENV": "development",
|
"NODE_ENV": "development",
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Available Models as of September 19, 2025
|
# Available Models as of September 23, 2025
|
||||||
|
|
||||||
## Main Models
|
## Main Models
|
||||||
|
|
||||||
@@ -119,7 +119,7 @@
|
|||||||
| groq | deepseek-r1-distill-llama-70b | 0.52 | 0.75 | 0.99 |
|
| groq | deepseek-r1-distill-llama-70b | 0.52 | 0.75 | 0.99 |
|
||||||
| perplexity | sonar-pro | — | 3 | 15 |
|
| perplexity | sonar-pro | — | 3 | 15 |
|
||||||
| perplexity | sonar | — | 1 | 1 |
|
| perplexity | sonar | — | 1 | 1 |
|
||||||
| perplexity | deep-research | 0.211 | 2 | 8 |
|
| perplexity | sonar-deep-research | 0.211 | 2 | 8 |
|
||||||
| perplexity | sonar-reasoning-pro | 0.211 | 2 | 8 |
|
| perplexity | sonar-reasoning-pro | 0.211 | 2 | 8 |
|
||||||
| perplexity | sonar-reasoning | 0.211 | 1 | 5 |
|
| perplexity | sonar-reasoning | 0.211 | 1 | 5 |
|
||||||
| bedrock | us.anthropic.claude-3-opus-20240229-v1:0 | 0.725 | 15 | 75 |
|
| bedrock | us.anthropic.claude-3-opus-20240229-v1:0 | 0.725 | 15 | 75 |
|
||||||
|
|||||||
14
package-lock.json
generated
14
package-lock.json
generated
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "task-master-ai",
|
"name": "task-master-ai",
|
||||||
"version": "0.27.0-rc.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.0-rc.2",
|
"version": "0.27.0",
|
||||||
"license": "MIT WITH Commons-Clause",
|
"license": "MIT WITH Commons-Clause",
|
||||||
"workspaces": [
|
"workspaces": [
|
||||||
"apps/*",
|
"apps/*",
|
||||||
@@ -99,7 +99,7 @@
|
|||||||
},
|
},
|
||||||
"apps/cli": {
|
"apps/cli": {
|
||||||
"name": "@tm/cli",
|
"name": "@tm/cli",
|
||||||
"version": "0.27.0-rc.0",
|
"version": "0.27.0",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@tm/core": "*",
|
"@tm/core": "*",
|
||||||
@@ -359,13 +359,13 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"apps/docs": {
|
"apps/docs": {
|
||||||
"version": "0.0.2",
|
"version": "0.0.3",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"mintlify": "^4.2.111"
|
"mintlify": "^4.2.111"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"apps/extension": {
|
"apps/extension": {
|
||||||
"version": "0.25.0-rc.0",
|
"version": "0.25.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"task-master-ai": "*"
|
"task-master-ai": "*"
|
||||||
},
|
},
|
||||||
@@ -31873,7 +31873,7 @@
|
|||||||
},
|
},
|
||||||
"packages/build-config": {
|
"packages/build-config": {
|
||||||
"name": "@tm/build-config",
|
"name": "@tm/build-config",
|
||||||
"version": "1.0.0",
|
"version": "1.0.1",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"tsup": "^8.5.0"
|
"tsup": "^8.5.0"
|
||||||
@@ -31885,7 +31885,7 @@
|
|||||||
},
|
},
|
||||||
"packages/tm-core": {
|
"packages/tm-core": {
|
||||||
"name": "@tm/core",
|
"name": "@tm/core",
|
||||||
"version": "0.26.0",
|
"version": "0.26.1",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@supabase/supabase-js": "^2.57.4",
|
"@supabase/supabase-js": "^2.57.4",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "task-master-ai",
|
"name": "task-master-ai",
|
||||||
"version": "0.27.0-rc.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",
|
||||||
|
|||||||
3
packages/build-config/CHANGELOG.md
Normal file
3
packages/build-config/CHANGELOG.md
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
# @tm/build-config
|
||||||
|
|
||||||
|
## 1.0.1
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@tm/build-config",
|
"name": "@tm/build-config",
|
||||||
"version": "1.0.0",
|
"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,
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## 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.
|
||||||
|
|
||||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||||
@@ -8,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
||||||
- Initial package structure and configuration
|
- Initial package structure and configuration
|
||||||
- TypeScript support with strict mode
|
- TypeScript support with strict mode
|
||||||
- Dual ESM/CJS build system with tsup
|
- Dual ESM/CJS build system with tsup
|
||||||
@@ -18,6 +21,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
- Comprehensive documentation and README
|
- Comprehensive documentation and README
|
||||||
|
|
||||||
### Development Infrastructure
|
### Development Infrastructure
|
||||||
|
|
||||||
- tsup configuration for dual format builds
|
- tsup configuration for dual format builds
|
||||||
- Jest configuration with ESM support
|
- Jest configuration with ESM support
|
||||||
- ESLint configuration with TypeScript rules
|
- ESLint configuration with TypeScript rules
|
||||||
@@ -27,6 +31,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
- .gitignore for development files
|
- .gitignore for development files
|
||||||
|
|
||||||
### Package Structure
|
### Package Structure
|
||||||
|
|
||||||
- `src/types/` - TypeScript type definitions (placeholder)
|
- `src/types/` - TypeScript type definitions (placeholder)
|
||||||
- `src/providers/` - AI provider implementations (placeholder)
|
- `src/providers/` - AI provider implementations (placeholder)
|
||||||
- `src/storage/` - Storage layer abstractions (placeholder)
|
- `src/storage/` - Storage layer abstractions (placeholder)
|
||||||
@@ -38,6 +43,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
## [1.0.0] - TBD
|
## [1.0.0] - TBD
|
||||||
|
|
||||||
### Planned Features
|
### Planned Features
|
||||||
|
|
||||||
- Complete TypeScript type system
|
- Complete TypeScript type system
|
||||||
- AI provider implementations
|
- AI provider implementations
|
||||||
- Storage adapters
|
- Storage adapters
|
||||||
@@ -52,9 +58,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
## Release Notes
|
## Release Notes
|
||||||
|
|
||||||
### Version 1.0.0 (Coming Soon)
|
### Version 1.0.0 (Coming Soon)
|
||||||
|
|
||||||
This will be the first stable release of tm-core with complete implementations of all modules. Currently, all modules contain placeholder implementations to establish the package structure and enable development of dependent packages.
|
This will be the first stable release of tm-core with complete implementations of all modules. Currently, all modules contain placeholder implementations to establish the package structure and enable development of dependent packages.
|
||||||
|
|
||||||
### Development Status
|
### Development Status
|
||||||
|
|
||||||
- ✅ Package structure and configuration
|
- ✅ Package structure and configuration
|
||||||
- ✅ Build and test infrastructure
|
- ✅ Build and test infrastructure
|
||||||
- ✅ Development tooling setup
|
- ✅ Development tooling setup
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@tm/core",
|
"name": "@tm/core",
|
||||||
"version": "0.26.0",
|
"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",
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
import { describe, it, expect, beforeEach, vi, afterEach } from 'vitest';
|
import { describe, it, expect, beforeEach, vi, afterEach } from 'vitest';
|
||||||
import { ConfigManager } from './config-manager.js';
|
import { ConfigManager } from './config-manager.js';
|
||||||
|
import { DEFAULT_CONFIG_VALUES } from '../interfaces/configuration.interface.js';
|
||||||
import { ConfigLoader } from './services/config-loader.service.js';
|
import { ConfigLoader } from './services/config-loader.service.js';
|
||||||
import { ConfigMerger } from './services/config-merger.service.js';
|
import { ConfigMerger } from './services/config-merger.service.js';
|
||||||
import { RuntimeStateManager } from './services/runtime-state-manager.service.js';
|
import { RuntimeStateManager } from './services/runtime-state-manager.service.js';
|
||||||
@@ -69,8 +70,8 @@ describe('ConfigManager', () => {
|
|||||||
({
|
({
|
||||||
loadState: vi.fn().mockResolvedValue({ activeTag: 'master' }),
|
loadState: vi.fn().mockResolvedValue({ activeTag: 'master' }),
|
||||||
saveState: vi.fn().mockResolvedValue(undefined),
|
saveState: vi.fn().mockResolvedValue(undefined),
|
||||||
getActiveTag: vi.fn().mockReturnValue('master'),
|
getCurrentTag: vi.fn().mockReturnValue('master'),
|
||||||
setActiveTag: vi.fn().mockResolvedValue(undefined),
|
setCurrentTag: vi.fn().mockResolvedValue(undefined),
|
||||||
getState: vi.fn().mockReturnValue({ activeTag: 'master' }),
|
getState: vi.fn().mockReturnValue({ activeTag: 'master' }),
|
||||||
updateMetadata: vi.fn().mockResolvedValue(undefined),
|
updateMetadata: vi.fn().mockResolvedValue(undefined),
|
||||||
clearState: vi.fn().mockResolvedValue(undefined)
|
clearState: vi.fn().mockResolvedValue(undefined)
|
||||||
@@ -227,8 +228,8 @@ describe('ConfigManager', () => {
|
|||||||
|
|
||||||
const models = manager.getModelConfig();
|
const models = manager.getModelConfig();
|
||||||
expect(models).toEqual({
|
expect(models).toEqual({
|
||||||
main: 'claude-3-5-sonnet-20241022',
|
main: DEFAULT_CONFIG_VALUES.MODELS.MAIN,
|
||||||
fallback: 'gpt-4o-mini'
|
fallback: DEFAULT_CONFIG_VALUES.MODELS.FALLBACK
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -281,7 +282,7 @@ describe('ConfigManager', () => {
|
|||||||
await manager.setActiveTag('feature-branch');
|
await manager.setActiveTag('feature-branch');
|
||||||
|
|
||||||
const stateManager = (manager as any).stateManager;
|
const stateManager = (manager as any).stateManager;
|
||||||
expect(stateManager.setActiveTag).toHaveBeenCalledWith('feature-branch');
|
expect(stateManager.setCurrentTag).toHaveBeenCalledWith('feature-branch');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import type {
|
|||||||
PartialConfiguration,
|
PartialConfiguration,
|
||||||
RuntimeStorageConfig
|
RuntimeStorageConfig
|
||||||
} from '../interfaces/configuration.interface.js';
|
} from '../interfaces/configuration.interface.js';
|
||||||
|
import { DEFAULT_CONFIG_VALUES as DEFAULTS } from '../interfaces/configuration.interface.js';
|
||||||
import { ConfigLoader } from './services/config-loader.service.js';
|
import { ConfigLoader } from './services/config-loader.service.js';
|
||||||
import {
|
import {
|
||||||
ConfigMerger,
|
ConfigMerger,
|
||||||
@@ -167,8 +168,8 @@ export class ConfigManager {
|
|||||||
getModelConfig() {
|
getModelConfig() {
|
||||||
return (
|
return (
|
||||||
this.config.models || {
|
this.config.models || {
|
||||||
main: 'claude-3-5-sonnet-20241022',
|
main: DEFAULTS.MODELS.MAIN,
|
||||||
fallback: 'gpt-4o-mini'
|
fallback: DEFAULTS.MODELS.FALLBACK
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -399,8 +399,8 @@ export interface IConfigurationManager {
|
|||||||
*/
|
*/
|
||||||
export const DEFAULT_CONFIG_VALUES = {
|
export const DEFAULT_CONFIG_VALUES = {
|
||||||
MODELS: {
|
MODELS: {
|
||||||
MAIN: 'claude-3-5-sonnet-20241022',
|
MAIN: 'claude-sonnet-4-20250514',
|
||||||
FALLBACK: 'gpt-4o-mini'
|
FALLBACK: 'claude-3-7-sonnet-20250219'
|
||||||
},
|
},
|
||||||
TASKS: {
|
TASKS: {
|
||||||
DEFAULT_PRIORITY: 'medium' as TaskPriority,
|
DEFAULT_PRIORITY: 'medium' as TaskPriority,
|
||||||
|
|||||||
@@ -1847,7 +1847,7 @@ function registerCommands(programInstance) {
|
|||||||
)
|
)
|
||||||
.option(
|
.option(
|
||||||
'-r, --research',
|
'-r, --research',
|
||||||
'Use Perplexity AI for research-backed complexity analysis'
|
'Use configured research model for research-backed complexity analysis'
|
||||||
)
|
)
|
||||||
.option(
|
.option(
|
||||||
'-i, --id <ids>',
|
'-i, --id <ids>',
|
||||||
|
|||||||
@@ -27,21 +27,21 @@ const DEFAULTS = {
|
|||||||
models: {
|
models: {
|
||||||
main: {
|
main: {
|
||||||
provider: 'anthropic',
|
provider: 'anthropic',
|
||||||
modelId: 'claude-3-7-sonnet-20250219',
|
modelId: 'claude-sonnet-4-20250514',
|
||||||
maxTokens: 64000,
|
maxTokens: 64000,
|
||||||
temperature: 0.2
|
temperature: 0.2
|
||||||
},
|
},
|
||||||
research: {
|
research: {
|
||||||
provider: 'perplexity',
|
provider: 'perplexity',
|
||||||
modelId: 'sonar-pro',
|
modelId: 'sonar',
|
||||||
maxTokens: 8700,
|
maxTokens: 8700,
|
||||||
temperature: 0.1
|
temperature: 0.1
|
||||||
},
|
},
|
||||||
fallback: {
|
fallback: {
|
||||||
// No default fallback provider/model initially
|
// No default fallback provider/model initially
|
||||||
provider: 'anthropic',
|
provider: 'anthropic',
|
||||||
modelId: 'claude-3-5-sonnet',
|
modelId: 'claude-3-7-sonnet-20250219',
|
||||||
maxTokens: 8192, // Default parameters if fallback IS configured
|
maxTokens: 120000, // Default parameters if fallback IS configured
|
||||||
temperature: 0.2
|
temperature: 0.2
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -310,6 +310,7 @@ function validateProviderModelCombination(providerName, modelId) {
|
|||||||
function validateClaudeCodeSettings(settings) {
|
function validateClaudeCodeSettings(settings) {
|
||||||
// Define the base settings schema without commandSpecific first
|
// Define the base settings schema without commandSpecific first
|
||||||
const BaseSettingsSchema = z.object({
|
const BaseSettingsSchema = z.object({
|
||||||
|
pathToClaudeCodeExecutable: z.string().optional(),
|
||||||
maxTurns: z.number().int().positive().optional(),
|
maxTurns: z.number().int().positive().optional(),
|
||||||
customSystemPrompt: z.string().optional(),
|
customSystemPrompt: z.string().optional(),
|
||||||
appendSystemPrompt: z.string().optional(),
|
appendSystemPrompt: z.string().optional(),
|
||||||
|
|||||||
@@ -522,7 +522,7 @@
|
|||||||
"supported": true
|
"supported": true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "deep-research",
|
"id": "sonar-deep-research",
|
||||||
"swe_score": 0.211,
|
"swe_score": 0.211,
|
||||||
"cost_per_1m_tokens": {
|
"cost_per_1m_tokens": {
|
||||||
"input": 2,
|
"input": 2,
|
||||||
|
|||||||
@@ -5,6 +5,40 @@ import { isSilentMode, log } from '../../scripts/modules/utils.js';
|
|||||||
import { createProfile, COMMON_TOOL_MAPPINGS } from './base-profile.js';
|
import { createProfile, COMMON_TOOL_MAPPINGS } from './base-profile.js';
|
||||||
import { ROO_MODES } from '../constants/profiles.js';
|
import { ROO_MODES } from '../constants/profiles.js';
|
||||||
|
|
||||||
|
// Import the shared MCP configuration helper
|
||||||
|
import { formatJSONWithTabs } from '../utils/create-mcp-config.js';
|
||||||
|
|
||||||
|
// Roo-specific MCP configuration enhancements
|
||||||
|
function enhanceRooMCPConfiguration(mcpPath) {
|
||||||
|
if (!fs.existsSync(mcpPath)) {
|
||||||
|
log('warn', `[Roo] MCP configuration file not found at ${mcpPath}`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
// Read the existing configuration
|
||||||
|
const mcpConfig = JSON.parse(fs.readFileSync(mcpPath, 'utf8'));
|
||||||
|
|
||||||
|
if (mcpConfig.mcpServers && mcpConfig.mcpServers['task-master-ai']) {
|
||||||
|
const server = mcpConfig.mcpServers['task-master-ai'];
|
||||||
|
|
||||||
|
// Add Roo-specific timeout enhancement for long-running AI operations
|
||||||
|
server.timeout = 300;
|
||||||
|
|
||||||
|
// Write the enhanced configuration back
|
||||||
|
fs.writeFileSync(mcpPath, formatJSONWithTabs(mcpConfig) + '\n');
|
||||||
|
log(
|
||||||
|
'debug',
|
||||||
|
`[Roo] Enhanced MCP configuration with timeout at ${mcpPath}`
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
log('warn', `[Roo] task-master-ai server not found in MCP configuration`);
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
log('error', `[Roo] Failed to enhance MCP configuration: ${error.message}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Lifecycle functions for Roo profile
|
// Lifecycle functions for Roo profile
|
||||||
function onAddRulesProfile(targetDir, assetsDir) {
|
function onAddRulesProfile(targetDir, assetsDir) {
|
||||||
// Use the provided assets directory to find the roocode directory
|
// Use the provided assets directory to find the roocode directory
|
||||||
@@ -32,6 +66,9 @@ function onAddRulesProfile(targetDir, assetsDir) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Note: MCP configuration is now handled by the base profile system
|
||||||
|
// The base profile will call setupMCPConfiguration, and we enhance it in onPostConvert
|
||||||
|
|
||||||
for (const mode of ROO_MODES) {
|
for (const mode of ROO_MODES) {
|
||||||
const src = path.join(rooModesDir, `rules-${mode}`, `${mode}-rules`);
|
const src = path.join(rooModesDir, `rules-${mode}`, `${mode}-rules`);
|
||||||
const dest = path.join(targetDir, '.roo', `rules-${mode}`, `${mode}-rules`);
|
const dest = path.join(targetDir, '.roo', `rules-${mode}`, `${mode}-rules`);
|
||||||
@@ -78,6 +115,15 @@ function onRemoveRulesProfile(targetDir) {
|
|||||||
|
|
||||||
const rooDir = path.join(targetDir, '.roo');
|
const rooDir = path.join(targetDir, '.roo');
|
||||||
if (fs.existsSync(rooDir)) {
|
if (fs.existsSync(rooDir)) {
|
||||||
|
// Remove MCP configuration
|
||||||
|
const mcpPath = path.join(rooDir, 'mcp.json');
|
||||||
|
try {
|
||||||
|
fs.rmSync(mcpPath, { force: true });
|
||||||
|
log('debug', `[Roo] Removed MCP configuration from ${mcpPath}`);
|
||||||
|
} catch (err) {
|
||||||
|
log('error', `[Roo] Failed to remove MCP configuration: ${err.message}`);
|
||||||
|
}
|
||||||
|
|
||||||
fs.readdirSync(rooDir).forEach((entry) => {
|
fs.readdirSync(rooDir).forEach((entry) => {
|
||||||
if (entry.startsWith('rules-')) {
|
if (entry.startsWith('rules-')) {
|
||||||
const modeDir = path.join(rooDir, entry);
|
const modeDir = path.join(rooDir, entry);
|
||||||
@@ -101,7 +147,13 @@ function onRemoveRulesProfile(targetDir) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function onPostConvertRulesProfile(targetDir, assetsDir) {
|
function onPostConvertRulesProfile(targetDir, assetsDir) {
|
||||||
onAddRulesProfile(targetDir, assetsDir);
|
// Enhance the MCP configuration with Roo-specific features after base setup
|
||||||
|
const mcpPath = path.join(targetDir, '.roo', 'mcp.json');
|
||||||
|
try {
|
||||||
|
enhanceRooMCPConfiguration(mcpPath);
|
||||||
|
} catch (err) {
|
||||||
|
log('error', `[Roo] Failed to enhance MCP configuration: ${err.message}`);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create and export roo profile using the base factory
|
// Create and export roo profile using the base factory
|
||||||
@@ -111,6 +163,7 @@ export const rooProfile = createProfile({
|
|||||||
url: 'roocode.com',
|
url: 'roocode.com',
|
||||||
docsUrl: 'docs.roocode.com',
|
docsUrl: 'docs.roocode.com',
|
||||||
toolMappings: COMMON_TOOL_MAPPINGS.ROO_STYLE,
|
toolMappings: COMMON_TOOL_MAPPINGS.ROO_STYLE,
|
||||||
|
mcpConfig: true, // Enable MCP config - we enhance it with Roo-specific features
|
||||||
onAdd: onAddRulesProfile,
|
onAdd: onAddRulesProfile,
|
||||||
onRemove: onRemoveRulesProfile,
|
onRemove: onRemoveRulesProfile,
|
||||||
onPostConvert: onPostConvertRulesProfile
|
onPostConvert: onPostConvertRulesProfile
|
||||||
|
|||||||
@@ -262,3 +262,6 @@ export function removeTaskMasterMCPConfiguration(projectRoot, mcpConfigPath) {
|
|||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Export the formatting function for use by other modules
|
||||||
|
export { formatJSONWithTabs };
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ describe('Roo Profile Initialization Functionality', () => {
|
|||||||
expect(rooProfile.displayName).toBe('Roo Code');
|
expect(rooProfile.displayName).toBe('Roo Code');
|
||||||
expect(rooProfile.profileDir).toBe('.roo'); // default
|
expect(rooProfile.profileDir).toBe('.roo'); // default
|
||||||
expect(rooProfile.rulesDir).toBe('.roo/rules'); // default
|
expect(rooProfile.rulesDir).toBe('.roo/rules'); // default
|
||||||
expect(rooProfile.mcpConfig).toBe(true); // default
|
expect(rooProfile.mcpConfig).toBe(true); // now uses standard MCP configuration with Roo enhancements
|
||||||
});
|
});
|
||||||
|
|
||||||
test('roo.js uses custom ROO_STYLE tool mappings', () => {
|
test('roo.js uses custom ROO_STYLE tool mappings', () => {
|
||||||
|
|||||||
@@ -119,20 +119,20 @@ const DEFAULT_CONFIG = {
|
|||||||
models: {
|
models: {
|
||||||
main: {
|
main: {
|
||||||
provider: 'anthropic',
|
provider: 'anthropic',
|
||||||
modelId: 'claude-3-7-sonnet-20250219',
|
modelId: 'claude-sonnet-4-20250514',
|
||||||
maxTokens: 64000,
|
maxTokens: 64000,
|
||||||
temperature: 0.2
|
temperature: 0.2
|
||||||
},
|
},
|
||||||
research: {
|
research: {
|
||||||
provider: 'perplexity',
|
provider: 'perplexity',
|
||||||
modelId: 'sonar-pro',
|
modelId: 'sonar',
|
||||||
maxTokens: 8700,
|
maxTokens: 8700,
|
||||||
temperature: 0.1
|
temperature: 0.1
|
||||||
},
|
},
|
||||||
fallback: {
|
fallback: {
|
||||||
provider: 'anthropic',
|
provider: 'anthropic',
|
||||||
modelId: 'claude-3-5-sonnet',
|
modelId: 'claude-3-7-sonnet-20250219',
|
||||||
maxTokens: 8192,
|
maxTokens: 120000,
|
||||||
temperature: 0.2
|
temperature: 0.2
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -266,10 +266,10 @@ describe('MCP Configuration Validation', () => {
|
|||||||
expect(mcpEnabledProfiles).toContain('cursor');
|
expect(mcpEnabledProfiles).toContain('cursor');
|
||||||
expect(mcpEnabledProfiles).toContain('gemini');
|
expect(mcpEnabledProfiles).toContain('gemini');
|
||||||
expect(mcpEnabledProfiles).toContain('opencode');
|
expect(mcpEnabledProfiles).toContain('opencode');
|
||||||
expect(mcpEnabledProfiles).toContain('roo');
|
|
||||||
expect(mcpEnabledProfiles).toContain('vscode');
|
expect(mcpEnabledProfiles).toContain('vscode');
|
||||||
expect(mcpEnabledProfiles).toContain('windsurf');
|
expect(mcpEnabledProfiles).toContain('windsurf');
|
||||||
expect(mcpEnabledProfiles).toContain('zed');
|
expect(mcpEnabledProfiles).toContain('zed');
|
||||||
|
expect(mcpEnabledProfiles).toContain('roo');
|
||||||
expect(mcpEnabledProfiles).not.toContain('cline');
|
expect(mcpEnabledProfiles).not.toContain('cline');
|
||||||
expect(mcpEnabledProfiles).not.toContain('codex');
|
expect(mcpEnabledProfiles).not.toContain('codex');
|
||||||
expect(mcpEnabledProfiles).not.toContain('trae');
|
expect(mcpEnabledProfiles).not.toContain('trae');
|
||||||
@@ -384,6 +384,7 @@ describe('MCP Configuration Validation', () => {
|
|||||||
'claude',
|
'claude',
|
||||||
'cursor',
|
'cursor',
|
||||||
'gemini',
|
'gemini',
|
||||||
|
'kiro',
|
||||||
'opencode',
|
'opencode',
|
||||||
'roo',
|
'roo',
|
||||||
'windsurf',
|
'windsurf',
|
||||||
|
|||||||
Reference in New Issue
Block a user