Compare commits

..

4 Commits

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

  Original commit: feat: added vscode start task button (#1201)\n\nCo-authored-by: Carlos Montoya <carlos@Carloss-MacBook-Pro.local>\nCo-authored-by: Carlos Montoya <los@losmontoya.com>\n\n

  Co-authored-by: Claude <claude-assistant@anthropic.com>
2025-09-12 03:43:17 +00:00
losolosol
83af314879 feat: added vscode start task button (#1201)
Co-authored-by: Carlos Montoya <carlos@Carloss-MacBook-Pro.local>
Co-authored-by: Carlos Montoya <los@losmontoya.com>
2025-09-12 05:35:57 +02:00
Ralph Khreish
dd03374496 chore: fix CI p2 2025-09-11 18:44:40 -07:00
Ralph Khreish
4ab0affba7 chore: fix CI 2025-09-11 18:35:07 -07:00
12 changed files with 150 additions and 85 deletions

View File

@@ -0,0 +1,5 @@
---
"extension": minor
---
Added a Start Build button to the VSCODE Task Properties Right Panel

2
.nvmrc
View File

@@ -1 +1 @@
22
22

View File

@@ -47,20 +47,6 @@ sidebarTitle: "CLI Commands"
# View a specific subtask (e.g., subtask 2 of task 1)
task-master show 1.2
# Show multiple tasks at once (comma-separated)
task-master show 1,2,3
task-master show --id=1,2,3
# Filter subtasks by status
task-master show <id> --status=pending
task-master show <id> --status=done
# Output in JSON format (useful for scripts)
task-master show <id> --format=json
# Silent mode (suppress output, useful for programmatic usage)
task-master show <id> --silent
```
</Accordion>

View File

@@ -5,7 +5,6 @@
"description": "Task Master documentation powered by Mintlify",
"scripts": {
"dev": "mintlify dev",
"build": "mintlify build",
"preview": "mintlify preview"
},
"devDependencies": {

View File

@@ -83,6 +83,7 @@ The extension automatically handles the Taskmaster MCP server connection:
| **View Kanban Board** | `Ctrl/Cmd + Shift + P` → "Taskmaster: Show Board" |
| **Change Task Status** | Drag task card to different column |
| **View Task Details** | Click on any task card |
| **Start Working on Task** | Click task → Click "Start Task" button in properties panel |
| **Edit Task Content** | Click task → Use edit buttons in details panel |
| **Add Subtasks** | Click the + button on parent task cards |
| **Use AI Features** | Open task details → Click AI action buttons |
@@ -95,6 +96,14 @@ The extension automatically handles the Taskmaster MCP server connection:
- ✅ **Done** - Completed tasks
- ⏸️ **Deferred** - Postponed for later
### **Built-in Development Tools**
**Start Task Button** - Quickly begin working on any task:
- **One-Click Terminal** - Opens a new VS Code terminal named after your task
- **Context Awareness** - Terminal automatically opens in your workspace root
- **Smart State Management** - Button is disabled for completed tasks
- **Seamless Workflow** - Go from task planning to implementation instantly
### **AI-Powered Task Management**
The extension integrates seamlessly with Taskmaster AI via MCP to provide:

View File

@@ -1,9 +1,10 @@
import type React from 'react';
import { useState, useEffect } from 'react';
import { Button } from '@/components/ui/button';
import { Loader2 } from 'lucide-react';
import { Loader2, Play } from 'lucide-react';
import { PriorityBadge } from './PriorityBadge';
import type { TaskMasterTask } from '../../webview/types';
import { useVSCodeContext } from '../../webview/contexts/VSCodeContext';
interface TaskMetadataSidebarProps {
currentTask: TaskMasterTask;
@@ -28,10 +29,12 @@ export const TaskMetadataSidebar: React.FC<TaskMetadataSidebarProps> = ({
isRegenerating = false,
isAppending = false
}) => {
const { vscode } = useVSCodeContext();
const [isLoadingComplexity, setIsLoadingComplexity] = useState(false);
const [mcpComplexityScore, setMcpComplexityScore] = useState<
number | undefined
>(undefined);
const [isStartingTask, setIsStartingTask] = useState(false);
// Get complexity score from task
const currentComplexityScore = complexity?.score;
@@ -97,6 +100,29 @@ export const TaskMetadataSidebar: React.FC<TaskMetadataSidebarProps> = ({
}
};
// Handle starting a task
const handleStartTask = () => {
if (!currentTask || isStartingTask) {
return;
}
setIsStartingTask(true);
// Send message to extension to open terminal
if (vscode) {
vscode.postMessage({
type: 'openTerminal',
taskId: currentTask.id,
taskTitle: currentTask.title
});
}
// Reset loading state after a short delay
setTimeout(() => {
setIsStartingTask(false);
}, 500);
};
// Effect to handle complexity on task change
useEffect(() => {
if (currentTask?.id) {
@@ -284,6 +310,24 @@ export const TaskMetadataSidebar: React.FC<TaskMetadataSidebarProps> = ({
{currentTask.dependencies && currentTask.dependencies.length > 0 && (
<div className="border-b border-textSeparator-foreground" />
)}
{/* Start Task Button */}
<div className="mt-4">
<Button
onClick={handleStartTask}
variant="default"
size="sm"
className="w-full text-xs"
disabled={isRegenerating || isAppending || isStartingTask || currentTask?.status === 'done'}
>
{isStartingTask ? (
<Loader2 className="w-4 h-4 mr-2 animate-spin" />
) : (
<Play className="w-4 h-4 mr-2" />
)}
{isStartingTask ? 'Starting...' : 'Start Task'}
</Button>
</div>
</div>
</div>
</div>

View File

@@ -202,16 +202,16 @@ export const TaskDetailsView: React.FC<TaskDetailsViewProps> = ({
/>
</div>
{/* Right column - Metadata (1/3 width) */}
<TaskMetadataSidebar
currentTask={currentTask}
tasks={allTasks}
complexity={complexity}
isSubtask={isSubtask}
sendMessage={sendMessage}
onStatusChange={handleStatusChange}
onDependencyClick={handleDependencyClick}
/>
{/* Right column - Metadata (1/3 width) */}
<TaskMetadataSidebar
currentTask={currentTask}
tasks={allTasks}
complexity={complexity}
isSubtask={isSubtask}
sendMessage={sendMessage}
onStatusChange={handleStatusChange}
onDependencyClick={handleDependencyClick}
/>
</div>
</div>
);

View File

@@ -361,6 +361,25 @@ export class WebviewManager {
}
return;
case 'openTerminal':
// Open VS Code terminal for task execution
this.logger.info(`Opening terminal for task ${data.taskId}: ${data.taskTitle}`);
try {
const terminal = vscode.window.createTerminal({
name: `Task ${data.taskId}: ${data.taskTitle}`,
cwd: this.workspaceRoot
});
terminal.show();
this.logger.info('Terminal created and shown successfully');
response = { success: true };
} catch (error) {
this.logger.error('Failed to create terminal:', error);
response = { success: false, error: error.message };
}
break;
default:
throw new Error(`Unknown message type: ${type}`);
}

File diff suppressed because one or more lines are too long

1
package-lock.json generated
View File

@@ -29,6 +29,7 @@
"@inquirer/search": "^3.0.15",
"@openrouter/ai-sdk-provider": "^0.4.5",
"@streamparser/json": "^0.0.22",
"@tm/cli": "*",
"ai": "^4.3.10",
"ajv": "^8.17.1",
"ajv-formats": "^3.0.1",

View File

@@ -28,13 +28,11 @@
"typecheck:all": "turbo typecheck",
"typecheck:core": "npm run typecheck -w @tm/core",
"typecheck:cli": "npm run typecheck -w @tm/cli",
"test": "turbo test",
"test:watch": "turbo test:watch",
"test:legacy": "NODE_ENV=development node --experimental-vm-modules node_modules/.bin/jest",
"test:debug": "NODE_ENV=development node --inspect --experimental-vm-modules node_modules/.bin/jest --no-cache --verbose",
"test:unit": "NODE_ENV=development node --experimental-vm-modules node_modules/.bin/jest --testPathPattern=unit",
"test:integration": "NODE_ENV=development node --experimental-vm-modules node_modules/.bin/jest --testPathPattern=integration",
"test:fails": "NODE_ENV=development node --experimental-vm-modules node_modules/.bin/jest --onlyFailures",
"test": "node --experimental-vm-modules node_modules/.bin/jest",
"test:unit": "node --experimental-vm-modules node_modules/.bin/jest --testPathPattern=unit",
"test:integration": "node --experimental-vm-modules node_modules/.bin/jest --testPathPattern=integration",
"test:fails": "node --experimental-vm-modules node_modules/.bin/jest --onlyFailures",
"test:watch": "node --experimental-vm-modules node_modules/.bin/jest --watch",
"test:coverage": "node --experimental-vm-modules node_modules/.bin/jest --coverage",
"test:ci": "node --experimental-vm-modules node_modules/.bin/jest --coverage --ci",
"test:e2e": "./tests/e2e/run_e2e.sh",
@@ -46,11 +44,7 @@
"inspector": "npx @modelcontextprotocol/inspector node dist/mcp-server.js",
"mcp-server": "node dist/mcp-server.js",
"format-check": "biome format .",
"format": "biome format . --write",
"lint": "turbo lint",
"lint:all": "turbo lint",
"lint:legacy": "npm run lint --workspaces --if-present",
"test:all": "turbo test"
"format": "biome format . --write"
},
"keywords": [
"claude",
@@ -68,6 +62,7 @@
"license": "MIT WITH Commons-Clause",
"dependencies": {
"@ai-sdk/amazon-bedrock": "^2.2.9",
"@tm/cli": "*",
"@ai-sdk/anthropic": "^1.2.10",
"@ai-sdk/azure": "^1.3.17",
"@ai-sdk/google": "^1.2.13",

View File

@@ -17,15 +17,6 @@
"!{packages,apps}/**/node_modules/**"
]
},
"test": {
"dependsOn": ["^build"],
"inputs": [
"$TURBO_DEFAULT$",
"!{packages,apps}/**/dist/**",
"!{packages,apps}/**/node_modules/**"
],
"outputLogs": "new-only"
},
"test:watch": {
"cache": false,
"persistent": true,