Fix executor
This commit is contained in:
@@ -60,8 +60,6 @@ const statusLabels: Record<TaskStatus, string> = {
|
|||||||
|
|
||||||
const getAttemptStatusDisplay = (status: TaskAttemptStatus): { label: string; className: string } => {
|
const getAttemptStatusDisplay = (status: TaskAttemptStatus): { label: string; className: string } => {
|
||||||
switch (status) {
|
switch (status) {
|
||||||
case "init":
|
|
||||||
return { label: "Init", className: "bg-status-init text-status-init-foreground" };
|
|
||||||
case "setuprunning":
|
case "setuprunning":
|
||||||
return { label: "Setup Running", className: "bg-status-running text-status-running-foreground" };
|
return { label: "Setup Running", className: "bg-status-running text-status-running-foreground" };
|
||||||
case "setupcomplete":
|
case "setupcomplete":
|
||||||
@@ -74,8 +72,6 @@ const getAttemptStatusDisplay = (status: TaskAttemptStatus): { label: string; cl
|
|||||||
return { label: "Executor Complete", className: "bg-status-complete text-status-complete-foreground" };
|
return { label: "Executor Complete", className: "bg-status-complete text-status-complete-foreground" };
|
||||||
case "executorfailed":
|
case "executorfailed":
|
||||||
return { label: "Executor Failed", className: "bg-status-failed text-status-failed-foreground" };
|
return { label: "Executor Failed", className: "bg-status-failed text-status-failed-foreground" };
|
||||||
case "paused":
|
|
||||||
return { label: "Paused", className: "bg-status-paused text-status-paused-foreground" };
|
|
||||||
default:
|
default:
|
||||||
return { label: "Unknown", className: "bg-status-init text-status-init-foreground" };
|
return { label: "Unknown", className: "bg-status-init text-status-init-foreground" };
|
||||||
}
|
}
|
||||||
@@ -112,8 +108,7 @@ export function TaskDetailsDialog({
|
|||||||
const isAttemptRunning =
|
const isAttemptRunning =
|
||||||
selectedAttempt &&
|
selectedAttempt &&
|
||||||
attemptActivities.length > 0 &&
|
attemptActivities.length > 0 &&
|
||||||
(attemptActivities[0].status === "init" ||
|
(attemptActivities[0].status === "setuprunning" ||
|
||||||
attemptActivities[0].status === "setuprunning" ||
|
|
||||||
attemptActivities[0].status === "setupcomplete" ||
|
attemptActivities[0].status === "setupcomplete" ||
|
||||||
attemptActivities[0].status === "executorrunning");
|
attemptActivities[0].status === "executorrunning");
|
||||||
|
|
||||||
|
|||||||
@@ -9,6 +9,8 @@ import {
|
|||||||
ChevronDown,
|
ChevronDown,
|
||||||
ChevronUp,
|
ChevronUp,
|
||||||
Plus,
|
Plus,
|
||||||
|
Settings,
|
||||||
|
Settings2,
|
||||||
} from "lucide-react";
|
} from "lucide-react";
|
||||||
import { Button } from "@/components/ui/button";
|
import { Button } from "@/components/ui/button";
|
||||||
import { Card, CardContent } from "@/components/ui/card";
|
import { Card, CardContent } from "@/components/ui/card";
|
||||||
@@ -22,13 +24,6 @@ import {
|
|||||||
DropdownMenuTrigger,
|
DropdownMenuTrigger,
|
||||||
} from "@/components/ui/dropdown-menu";
|
} from "@/components/ui/dropdown-menu";
|
||||||
|
|
||||||
import {
|
|
||||||
Tooltip,
|
|
||||||
TooltipContent,
|
|
||||||
TooltipProvider,
|
|
||||||
TooltipTrigger,
|
|
||||||
} from "@/components/ui/tooltip";
|
|
||||||
|
|
||||||
import { makeRequest } from "@/lib/api";
|
import { makeRequest } from "@/lib/api";
|
||||||
import {
|
import {
|
||||||
getTaskPanelClasses,
|
getTaskPanelClasses,
|
||||||
@@ -62,11 +57,6 @@ const getAttemptStatusDisplay = (
|
|||||||
status: TaskAttemptStatus
|
status: TaskAttemptStatus
|
||||||
): { label: string; className: string } => {
|
): { label: string; className: string } => {
|
||||||
switch (status) {
|
switch (status) {
|
||||||
case "init":
|
|
||||||
return {
|
|
||||||
label: "Init",
|
|
||||||
className: "bg-status-init text-status-init-foreground",
|
|
||||||
};
|
|
||||||
case "setuprunning":
|
case "setuprunning":
|
||||||
return {
|
return {
|
||||||
label: "Setup Running",
|
label: "Setup Running",
|
||||||
@@ -97,11 +87,6 @@ const getAttemptStatusDisplay = (
|
|||||||
label: "Executor Failed",
|
label: "Executor Failed",
|
||||||
className: "bg-status-failed text-status-failed-foreground",
|
className: "bg-status-failed text-status-failed-foreground",
|
||||||
};
|
};
|
||||||
case "paused":
|
|
||||||
return {
|
|
||||||
label: "Paused",
|
|
||||||
className: "bg-status-paused text-status-paused-foreground",
|
|
||||||
};
|
|
||||||
default:
|
default:
|
||||||
return {
|
return {
|
||||||
label: "Unknown",
|
label: "Unknown",
|
||||||
@@ -126,13 +111,20 @@ export function TaskDetailsPanel({
|
|||||||
const [loading, setLoading] = useState(false);
|
const [loading, setLoading] = useState(false);
|
||||||
const [followUpMessage, setFollowUpMessage] = useState("");
|
const [followUpMessage, setFollowUpMessage] = useState("");
|
||||||
const [isDescriptionExpanded, setIsDescriptionExpanded] = useState(false);
|
const [isDescriptionExpanded, setIsDescriptionExpanded] = useState(false);
|
||||||
|
const [selectedExecutor, setSelectedExecutor] = useState("claude");
|
||||||
|
|
||||||
|
// Available executors
|
||||||
|
const availableExecutors = [
|
||||||
|
{ id: "echo", name: "Echo" },
|
||||||
|
{ id: "claude", name: "Claude" },
|
||||||
|
{ id: "amp", name: "Amp" },
|
||||||
|
];
|
||||||
|
|
||||||
// Check if the selected attempt is active (not in a final state)
|
// Check if the selected attempt is active (not in a final state)
|
||||||
const isAttemptRunning =
|
const isAttemptRunning =
|
||||||
selectedAttempt &&
|
selectedAttempt &&
|
||||||
attemptActivities.length > 0 &&
|
attemptActivities.length > 0 &&
|
||||||
(attemptActivities[0].status === "init" ||
|
(attemptActivities[0].status === "setuprunning" ||
|
||||||
attemptActivities[0].status === "setuprunning" ||
|
|
||||||
attemptActivities[0].status === "setupcomplete" ||
|
attemptActivities[0].status === "setupcomplete" ||
|
||||||
attemptActivities[0].status === "executorrunning");
|
attemptActivities[0].status === "executorrunning");
|
||||||
|
|
||||||
@@ -243,7 +235,7 @@ export function TaskDetailsPanel({
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const createNewAttempt = async () => {
|
const createNewAttempt = async (executor?: string) => {
|
||||||
if (!task) return;
|
if (!task) return;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@@ -254,6 +246,9 @@ export function TaskDetailsPanel({
|
|||||||
headers: {
|
headers: {
|
||||||
"Content-Type": "application/json",
|
"Content-Type": "application/json",
|
||||||
},
|
},
|
||||||
|
body: JSON.stringify({
|
||||||
|
executor: executor || selectedExecutor,
|
||||||
|
}),
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -377,8 +372,7 @@ export function TaskDetailsPanel({
|
|||||||
<DropdownMenu>
|
<DropdownMenu>
|
||||||
<DropdownMenuTrigger asChild>
|
<DropdownMenuTrigger asChild>
|
||||||
<Button variant="outline" size="sm">
|
<Button variant="outline" size="sm">
|
||||||
<History className="h-4 w-4 mr-1" />
|
<History className="h-4 w-4" />
|
||||||
History
|
|
||||||
</Button>
|
</Button>
|
||||||
</DropdownMenuTrigger>
|
</DropdownMenuTrigger>
|
||||||
<DropdownMenuContent align="start" className="w-64">
|
<DropdownMenuContent align="start" className="w-64">
|
||||||
@@ -410,23 +404,49 @@ export function TaskDetailsPanel({
|
|||||||
</DropdownMenuContent>
|
</DropdownMenuContent>
|
||||||
</DropdownMenu>
|
</DropdownMenu>
|
||||||
)}
|
)}
|
||||||
<TooltipProvider>
|
<div className="flex">
|
||||||
<Tooltip>
|
<Button
|
||||||
<TooltipTrigger asChild>
|
variant="outline"
|
||||||
|
size="sm"
|
||||||
|
onClick={() => createNewAttempt()}
|
||||||
|
className="rounded-r-none border-r-0"
|
||||||
|
>
|
||||||
|
Attempt with{" "}
|
||||||
|
{
|
||||||
|
availableExecutors.find(
|
||||||
|
(e) => e.id === selectedExecutor
|
||||||
|
)?.name
|
||||||
|
}
|
||||||
|
</Button>
|
||||||
|
<DropdownMenu>
|
||||||
|
<DropdownMenuTrigger asChild>
|
||||||
<Button
|
<Button
|
||||||
variant="outline"
|
variant="outline"
|
||||||
size="default"
|
size="sm"
|
||||||
onClick={createNewAttempt}
|
className="rounded-l-none px-2"
|
||||||
className="h-9 w-9 p-0"
|
|
||||||
>
|
>
|
||||||
<Plus className="h-4 w-4" />
|
<Settings2 className="h-4 w-4" />
|
||||||
</Button>
|
</Button>
|
||||||
</TooltipTrigger>
|
</DropdownMenuTrigger>
|
||||||
<TooltipContent>
|
<DropdownMenuContent align="end">
|
||||||
<p>Create new attempt</p>
|
{availableExecutors.map((executor) => (
|
||||||
</TooltipContent>
|
<DropdownMenuItem
|
||||||
</Tooltip>
|
key={executor.id}
|
||||||
</TooltipProvider>
|
onClick={() => setSelectedExecutor(executor.id)}
|
||||||
|
className={
|
||||||
|
selectedExecutor === executor.id
|
||||||
|
? "bg-accent"
|
||||||
|
: ""
|
||||||
|
}
|
||||||
|
>
|
||||||
|
{executor.name}
|
||||||
|
{selectedExecutor === executor.id &&
|
||||||
|
" (Default)"}
|
||||||
|
</DropdownMenuItem>
|
||||||
|
))}
|
||||||
|
</DropdownMenuContent>
|
||||||
|
</DropdownMenu>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -479,7 +499,7 @@ export function TaskDetailsPanel({
|
|||||||
</div>
|
</div>
|
||||||
) : (
|
) : (
|
||||||
<div className="space-y-3">
|
<div className="space-y-3">
|
||||||
{attemptActivities.slice().reverse().map((activity) => (
|
{attemptActivities.slice().map((activity) => (
|
||||||
<Card key={activity.id} className="border">
|
<Card key={activity.id} className="border">
|
||||||
<CardContent className="p-4">
|
<CardContent className="p-4">
|
||||||
<div className="flex items-center justify-between mb-2">
|
<div className="flex items-center justify-between mb-2">
|
||||||
|
|||||||
@@ -49,8 +49,6 @@ const statusLabels: Record<TaskStatus, string> = {
|
|||||||
|
|
||||||
const getAttemptStatusDisplay = (status: TaskAttemptStatus): { label: string; className: string } => {
|
const getAttemptStatusDisplay = (status: TaskAttemptStatus): { label: string; className: string } => {
|
||||||
switch (status) {
|
switch (status) {
|
||||||
case "init":
|
|
||||||
return { label: "Init", className: "bg-status-init text-status-init-foreground" };
|
|
||||||
case "setuprunning":
|
case "setuprunning":
|
||||||
return { label: "Setup Running", className: "bg-status-running text-status-running-foreground" };
|
return { label: "Setup Running", className: "bg-status-running text-status-running-foreground" };
|
||||||
case "setupcomplete":
|
case "setupcomplete":
|
||||||
@@ -63,8 +61,6 @@ const getAttemptStatusDisplay = (status: TaskAttemptStatus): { label: string; cl
|
|||||||
return { label: "Executor Complete", className: "bg-status-complete text-status-complete-foreground" };
|
return { label: "Executor Complete", className: "bg-status-complete text-status-complete-foreground" };
|
||||||
case "executorfailed":
|
case "executorfailed":
|
||||||
return { label: "Executor Failed", className: "bg-status-failed text-status-failed-foreground" };
|
return { label: "Executor Failed", className: "bg-status-failed text-status-failed-foreground" };
|
||||||
case "paused":
|
|
||||||
return { label: "Paused", className: "bg-status-paused text-status-paused-foreground" };
|
|
||||||
default:
|
default:
|
||||||
return { label: "Unknown", className: "bg-status-init text-status-init-foreground" };
|
return { label: "Unknown", className: "bg-status-init text-status-init-foreground" };
|
||||||
}
|
}
|
||||||
@@ -143,8 +139,7 @@ export function TaskDetailsPage() {
|
|||||||
const isAttemptRunning =
|
const isAttemptRunning =
|
||||||
selectedAttempt &&
|
selectedAttempt &&
|
||||||
attemptActivities.length > 0 &&
|
attemptActivities.length > 0 &&
|
||||||
(attemptActivities[0].status === "init" ||
|
(attemptActivities[0].status === "setuprunning" ||
|
||||||
attemptActivities[0].status === "setuprunning" ||
|
|
||||||
attemptActivities[0].status === "setupcomplete" ||
|
attemptActivities[0].status === "setupcomplete" ||
|
||||||
attemptActivities[0].status === "executorrunning");
|
attemptActivities[0].status === "executorrunning");
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user