Compare commits
4 Commits
docs/auto-
...
docs/auto-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
93977b6dd5 | ||
|
|
83af314879 | ||
|
|
dd03374496 | ||
|
|
4ab0affba7 |
5
.changeset/wild-ears-look.md
Normal file
5
.changeset/wild-ears-look.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"extension": minor
|
||||
---
|
||||
|
||||
Added a Start Build button to the VSCODE Task Properties Right Panel
|
||||
@@ -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>
|
||||
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
"description": "Task Master documentation powered by Mintlify",
|
||||
"scripts": {
|
||||
"dev": "mintlify dev",
|
||||
"build": "mintlify build",
|
||||
"preview": "mintlify preview"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
);
|
||||
|
||||
@@ -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}`);
|
||||
}
|
||||
|
||||
90
output.txt
90
output.txt
File diff suppressed because one or more lines are too long
1
package-lock.json
generated
1
package-lock.json
generated
@@ -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",
|
||||
|
||||
19
package.json
19
package.json
@@ -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",
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user