Files
PaperClipAI/ui/src/components/AgentRunnerSelect.tsx
T
DottaandPaperclip 6fd56c445d feat: default Claude to the native runner on Apple Silicon
Carry Claude effort through versioned native admission and recovery. Preserve existing connections and saved runner choices, and price Opus 5.5 API receipts.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-12 10:48:21 -05:00

46 lines
1.8 KiB
TypeScript

import type { AgentRunner, AgentRunnerChoice } from "@paperclipai/shared";
import { Field } from "./agent-config-primitives";
import { SelectPopover } from "./ui/select";
import { Button } from "./ui/button";
/** The override is request-level. Automatic selection is resolved by the server. */
export function AgentRunnerSelect({
value,
onChange,
defaultRunner,
supportedRunners = ["legacy"],
disabled,
pending,
error,
onRetry,
}: {
value: AgentRunnerChoice;
onChange: (value: AgentRunnerChoice) => void;
defaultRunner?: AgentRunner;
supportedRunners?: readonly AgentRunner[];
disabled?: boolean;
pending?: boolean;
error?: string;
onRetry?: () => void;
}) {
return (
<Field label="Runner">
<SelectPopover
aria-label="Runner"
disabled={disabled}
value={value}
displayValue={value === "auto" ? (defaultRunner ? `${defaultRunner === "paperclip" ? "Paperclip Runner" : "Legacy runner"} (default)` : pending ? "Checking runner availability…" : "Automatic selection unavailable") : undefined}
onValueChange={next => onChange(next as AgentRunnerChoice)}
options={[
{ value: "paperclip", label: `Paperclip Runner${defaultRunner === "paperclip" ? " (default)" : ""}`, disabled: !supportedRunners.includes("paperclip") && value !== "paperclip" },
{ value: "legacy", label: `Legacy runner${defaultRunner === "legacy" ? " (default)" : ""}`, disabled: !supportedRunners.includes("legacy") && value !== "legacy" },
]}
/>
{error && <div className="mt-2 space-y-2">
<p role="alert" className="text-sm text-destructive">{error}</p>
{onRetry && <Button type="button" variant="outline" size="sm" disabled={pending || disabled} onClick={onRetry}>Retry runner discovery</Button>}
</div>}
</Field>
);
}